1: PACKAGE BODY GMD_SAMPLES_PUB AS
2: /* $Header: GMDPSMPB.pls 120.15.12010000.1 2008/07/24 09:57:23 appldev ship $
3: *****************************************************************
4: * *
5: * Package GMD_SAMPLES_PUB *
1: PACKAGE BODY GMD_SAMPLES_PUB AS
2: /* $Header: GMDPSMPB.pls 120.15.12010000.1 2008/07/24 09:57:23 appldev ship $
3: *****************************************************************
4: * *
5: * Package GMD_SAMPLES_PUB *
6: * *
7: * Contents CREATE_SAMPLES *
8: * DELETE_SAMPLES *
9: * *
66: */
67:
68: -- Global variables
69:
70: G_PKG_NAME CONSTANT VARCHAR2(30):='GMD_SAMPLES_PUB';
71:
72: -- 5283854
73: G_LOT_CTL VARCHAR2(1);
74: G_CHILD_LOT_FLAG VARCHAR2(1);
142: ( p_api_version IN NUMBER
143: , p_init_msg_list IN VARCHAR2
144: , p_commit IN VARCHAR2
145: , p_validation_level IN NUMBER
146: , p_qc_samples_rec IN GMD_SAMPLES%ROWTYPE
147: , p_user_name IN VARCHAR2
148: , p_find_matching_spec IN VARCHAR2
149: , p_grade IN VARCHAR2 DEFAULT NULL --3431884
150: , x_qc_samples_rec OUT NOCOPY GMD_SAMPLES%ROWTYPE
146: , p_qc_samples_rec IN GMD_SAMPLES%ROWTYPE
147: , p_user_name IN VARCHAR2
148: , p_find_matching_spec IN VARCHAR2
149: , p_grade IN VARCHAR2 DEFAULT NULL --3431884
150: , x_qc_samples_rec OUT NOCOPY GMD_SAMPLES%ROWTYPE
151: , x_sampling_events_rec OUT NOCOPY GMD_SAMPLING_EVENTS%ROWTYPE
152: , x_sample_spec_disp OUT NOCOPY GMD_SAMPLE_SPEC_DISP%ROWTYPE
153: , x_event_spec_disp_rec OUT NOCOPY GMD_EVENT_SPEC_DISP%ROWTYPE
154: , x_results_tab OUT NOCOPY GMD_API_PUB.gmd_results_tab
162: l_api_version CONSTANT NUMBER := 3.0;
163: l_msg_count NUMBER :=0;
164: l_msg_data VARCHAR2(2000);
165: l_return_status VARCHAR2(1):=FND_API.G_RET_STS_SUCCESS;
166: l_samples_val_rec GMD_SAMPLES%ROWTYPE;
167: l_qc_samples_rec GMD_SAMPLES%ROWTYPE;
168: l_qc_samples_out_rec GMD_SAMPLES%ROWTYPE;
169: l_sample_spec_disp GMD_SAMPLE_SPEC_DISP%ROWTYPE;
170: l_event_spec_disp_rec GMD_EVENT_SPEC_DISP%ROWTYPE;
163: l_msg_count NUMBER :=0;
164: l_msg_data VARCHAR2(2000);
165: l_return_status VARCHAR2(1):=FND_API.G_RET_STS_SUCCESS;
166: l_samples_val_rec GMD_SAMPLES%ROWTYPE;
167: l_qc_samples_rec GMD_SAMPLES%ROWTYPE;
168: l_qc_samples_out_rec GMD_SAMPLES%ROWTYPE;
169: l_sample_spec_disp GMD_SAMPLE_SPEC_DISP%ROWTYPE;
170: l_event_spec_disp_rec GMD_EVENT_SPEC_DISP%ROWTYPE;
171: l_sampling_events GMD_SAMPLING_EVENTS%ROWTYPE;
164: l_msg_data VARCHAR2(2000);
165: l_return_status VARCHAR2(1):=FND_API.G_RET_STS_SUCCESS;
166: l_samples_val_rec GMD_SAMPLES%ROWTYPE;
167: l_qc_samples_rec GMD_SAMPLES%ROWTYPE;
168: l_qc_samples_out_rec GMD_SAMPLES%ROWTYPE;
169: l_sample_spec_disp GMD_SAMPLE_SPEC_DISP%ROWTYPE;
170: l_event_spec_disp_rec GMD_EVENT_SPEC_DISP%ROWTYPE;
171: l_sampling_events GMD_SAMPLING_EVENTS%ROWTYPE;
172: l_sampling_events_out GMD_SAMPLING_EVENTS%ROWTYPE;
403: -- to that sampling event else create a new event.
404:
405: --dbms_output.put_line('FIND MAtching Spec' );
406:
407: IF NOT GMD_SAMPLES_PUB.FIND_MATCHING_SPEC
408: ( p_samples_rec => l_qc_samples_rec,
409: p_grade => p_grade, -- 3431884
410: x_spec_id => l_spec_id,
411: x_spec_type => l_spec_type,
453:
454: END IF; -- IF l_qc_samples_rec.source IN ('I','C','W','S') THEN
455:
456: -- find sampling event with matching spec vr id.
457: IF GMD_SAMPLES_GRP.sampling_event_exist(
458: p_sample => l_qc_samples_rec,
459: x_sampling_event_id => l_sampling_events.sampling_event_id,
460: p_spec_vr_id => l_spec_vr_id
461: ) THEN
468:
469: --dbms_output.put_line('b4 sampling_event_exist_wo_spec');
470:
471: -- Try and find a sampling event without a spec
472: IF NOT GMD_SAMPLES_GRP.sampling_event_exist_wo_spec
473: ( p_sample => l_qc_samples_rec,
474: x_sampling_event_id => l_sampling_events.sampling_event_id
475: ) THEN
476:
698: l_qc_samples_rec.sample_inv_trans_ind := NULL ;
699: END IF;
700:
701:
702: IF NOT GMD_SAMPLES_PVT.insert_row (
703: p_samples => l_qc_samples_rec,
704: x_samples => l_qc_samples_out_rec) THEN
705: RAISE FND_API.G_EXC_ERROR;
706:
769:
770:
771:
772:
773: UPDATE gmd_samples
774: SET SAMPLE_INV_TRANS_IND = l_sample_inv_trans_ind -- Bug # 4619570
775: WHERE sample_id = l_qc_samples_out_rec.sample_id ;
776:
777: END IF;
817: RAISE FND_API.G_EXC_ERROR;
818: END IF; -- end bug
819:
820:
821: GMD_SAMPLES_GRP.create_inv_txn
822: ( p_sample => l_qc_samples_out_rec,
823: p_user_name => l_user_id,
824: x_return_status => l_return_status,
825: x_message_count => l_msg_count,
859: -- CLOSE Cur_replenish_whse;
860: -- END IF;
861:
862: -- need to update source whse back to samples since insert of sample has already taken place.
863: UPDATE GMD_SAMPLES
864: SET source_subinventory = l_qc_samples_out_rec.source_subinventory
865: WHERE sample_id = l_qc_samples_out_rec.sample_id ;
866:
867: -- END IF;
873: CLOSE Cur_batch_status;
874:
875: IF l_batch_status <> 4 then
876:
877: GMD_SAMPLES_GRP.create_wip_txn
878: ( p_sample => l_qc_samples_out_rec,
879: x_return_status => l_return_status,
880: x_message_count => l_msg_count,
881: x_message_data => l_msg_data
885: RAISE FND_API.G_EXC_ERROR;
886: END IF;
887:
888:
889: GMD_SAMPLES_GRP.post_wip_txn
890: ( p_batch_id => l_qc_samples_out_rec.batch_id,
891: x_return_status => l_return_status
892: );
893:
899: -- added create_inv_txn to decrease the inventory which was increased by create_wip_txn/post_wip_txn
900:
901: --dbms_output.put_line('create inv trans after wip');
902:
903: GMD_SAMPLES_GRP.create_inv_txn
904: ( p_sample => l_qc_samples_out_rec,
905: p_user_name => p_user_name,
906: x_return_status => l_return_status,
907: x_message_count => l_msg_count,
999:
1000: END GET_CONF_MATCH_VALUE;
1001:
1002: FUNCTION FIND_MATCHING_SPEC
1003: ( p_samples_rec IN GMD_SAMPLES%ROWTYPE,
1004: p_grade IN VARCHAR2 DEFAULT NULL, -- 3431884
1005: x_spec_id OUT NOCOPY NUMBER,
1006: x_spec_type OUT NOCOPY VARCHAR2,
1007: x_spec_vr_id OUT NOCOPY NUMBER,
1239: ( p_api_version IN NUMBER
1240: , p_init_msg_list IN VARCHAR2
1241: , p_commit IN VARCHAR2
1242: , p_validation_level IN NUMBER
1243: , p_qc_samples_rec IN GMD_SAMPLES%ROWTYPE
1244: , p_user_name IN VARCHAR2
1245: , x_return_status OUT NOCOPY VARCHAR2
1246: , x_msg_count OUT NOCOPY NUMBER
1247: , x_msg_data OUT NOCOPY VARCHAR2
1251: l_api_version CONSTANT NUMBER := 3.0;
1252: l_msg_count NUMBER :=0;
1253: l_msg_data VARCHAR2(2000);
1254: l_return_status VARCHAR2(1):=FND_API.G_RET_STS_SUCCESS;
1255: l_qc_samples_out_rec GMD_SAMPLES%ROWTYPE;
1256: l_qc_samples_rec GMD_SAMPLES%ROWTYPE;
1257: l_rowid VARCHAR2(10);
1258: l_test_type VARCHAR2(10);
1259: l_test_id NUMBER(10);
1252: l_msg_count NUMBER :=0;
1253: l_msg_data VARCHAR2(2000);
1254: l_return_status VARCHAR2(1):=FND_API.G_RET_STS_SUCCESS;
1255: l_qc_samples_out_rec GMD_SAMPLES%ROWTYPE;
1256: l_qc_samples_rec GMD_SAMPLES%ROWTYPE;
1257: l_rowid VARCHAR2(10);
1258: l_test_type VARCHAR2(10);
1259: l_test_id NUMBER(10);
1260: l_user_id NUMBER(15);
1318:
1319:
1320: -- Fetch the Test Header Row.
1321:
1322: IF NOT GMD_SAMPLES_PVT.fetch_row (
1323: p_samples => p_qc_samples_rec,
1324: x_samples => l_qc_samples_out_rec) THEN
1325: -- dbms_output.put_line('Sample Record Not Found');
1326: RAISE FND_API.G_EXC_ERROR;
1329: -- Validate that the Sample Header is Not Already Marked For Purge
1330:
1331: IF l_qc_samples_out_rec.delete_mark = 1 THEN
1332: GMD_API_PUB.Log_Message('GMD_RECORD_DELETE_MARKED',
1333: 'l_table_name', 'GMD_SAMPLES',
1334: 'l_column_name', 'SAMPLE_ID',
1335: 'l_key_value', l_qc_samples_out_rec.sample_id);
1336: RAISE FND_API.G_EXC_ERROR;
1337: END IF;
1339:
1340: -- Mark this record for Purge, this routine will also lock the row.
1341:
1342: -- dbms_output.put_line('Delete Row');
1343: IF NOT GMD_SAMPLES_PVT.delete_row(
1344: p_sample_id => l_qc_samples_out_rec.sample_id,
1345: p_organization_id => l_qc_samples_out_rec.organization_id,
1346: p_sample_no => l_qc_samples_out_rec.sample_no
1347: ) THEN
1345: p_organization_id => l_qc_samples_out_rec.organization_id,
1346: p_sample_no => l_qc_samples_out_rec.sample_no
1347: ) THEN
1348: GMD_API_PUB.Log_Message('GMD_FAILED_TO_DELETE_ROW',
1349: 'l_table_name', 'GMD_SAMPLES',
1350: 'l_column_name','SAMPLE_ID',
1351: 'l_key_value', l_qc_samples_out_rec.sample_id);
1352:
1353: RAISE FND_API.G_EXC_ERROR;
1424: END DELETE_SAMPLES;
1425:
1426:
1427: PROCEDURE VALIDATE_ITEM_CONTROLS
1428: ( p_sample_rec IN GMD_SAMPLES%ROWTYPE,
1429: p_grade IN VARCHAR2, -- Bug 4165704: added to validate grade control
1430: x_sample_rec OUT NOCOPY GMD_SAMPLES%ROWTYPE,
1431: x_return_status OUT NOCOPY VARCHAR2
1432: )
1426:
1427: PROCEDURE VALIDATE_ITEM_CONTROLS
1428: ( p_sample_rec IN GMD_SAMPLES%ROWTYPE,
1429: p_grade IN VARCHAR2, -- Bug 4165704: added to validate grade control
1430: x_sample_rec OUT NOCOPY GMD_SAMPLES%ROWTYPE,
1431: x_return_status OUT NOCOPY VARCHAR2
1432: )
1433: IS
1434:
1490: l_lot_ctl NUMBER;
1491: l_child_lot_flag VARCHAR2(2);
1492: l_lot_number MTL_LOT_NUMBERS.lot_number%TYPE;
1493: l_parent_lot_number MTL_LOT_NUMBERS.parent_lot_number%TYPE;
1494: l_sample_rec GMD_SAMPLES%ROWTYPE;
1495: l_return_status VARCHAR2(1);
1496:
1497: l_sample_display GMD_SAMPLES_GRP.sample_display_rec;
1498:
1493: l_parent_lot_number MTL_LOT_NUMBERS.parent_lot_number%TYPE;
1494: l_sample_rec GMD_SAMPLES%ROWTYPE;
1495: l_return_status VARCHAR2(1);
1496:
1497: l_sample_display GMD_SAMPLES_GRP.sample_display_rec;
1498:
1499: BEGIN
1500:
1501: -- Assign API local Variables;
1522:
1523: l_sample_display.organization_id := p_sample_rec.organization_id;
1524: l_sample_display.inventory_item_id := p_sample_rec.inventory_item_id;
1525:
1526: gmd_samples_grp.get_item_values(p_sample_display => l_sample_display);
1527:
1528: -- test for whether an item was found
1529: IF l_sample_display.item_number IS NULL THEN
1530: GMD_API_PUB.Log_Message('GMD_SPEC_ITEM_NOT_FOUND');
1631:
1632:
1633: -- Bug 4165704: changed the way locator control was handled
1634: PROCEDURE VALIDATE_INV_SAMPLE
1635: ( p_sample_rec IN GMD_SAMPLES%ROWTYPE,
1636: p_locator_control IN NUMBER,
1637: x_return_status OUT NOCOPY VARCHAR2
1638: )
1639: IS
1707: END VALIDATE_INV_SAMPLE;
1708:
1709:
1710: PROCEDURE VALIDATE_WIP_SAMPLE
1711: ( p_sample_rec IN GMD_SAMPLES%ROWTYPE,
1712: x_sample_rec OUT NOCOPY GMD_SAMPLES%ROWTYPE,
1713: x_return_status OUT NOCOPY VARCHAR2
1714: )
1715: IS
1708:
1709:
1710: PROCEDURE VALIDATE_WIP_SAMPLE
1711: ( p_sample_rec IN GMD_SAMPLES%ROWTYPE,
1712: x_sample_rec OUT NOCOPY GMD_SAMPLES%ROWTYPE,
1713: x_return_status OUT NOCOPY VARCHAR2
1714: )
1715: IS
1716:
1805:
1806:
1807: l_dummy NUMBER;
1808: l_return_status VARCHAR2(1);
1809: l_sample_rec GMD_SAMPLES%ROWTYPE;
1810:
1811:
1812: BEGIN
1813:
1923:
1924: END VALIDATE_WIP_SAMPLE;
1925:
1926: PROCEDURE VALIDATE_CUST_SAMPLE
1927: ( p_sample_rec IN GMD_SAMPLES%ROWTYPE,
1928: x_return_status OUT NOCOPY VARCHAR2
1929: )
1930: IS
1931:
2131:
2132:
2133:
2134: PROCEDURE VALIDATE_SUPP_SAMPLE
2135: ( p_sample_rec IN GMD_SAMPLES%ROWTYPE,
2136: x_return_status OUT NOCOPY VARCHAR2
2137: )
2138: IS
2139:
2402:
2403:
2404: -- Added for MPK Bug
2405: PROCEDURE VALIDATE_STABILITY_SAMPLE
2406: ( p_sample_rec IN GMD_SAMPLES%ROWTYPE,
2407: x_return_status OUT NOCOPY VARCHAR2
2408: )
2409: IS
2410:
2417:
2418:
2419:
2420: PROCEDURE VALIDATE_RESOURCE_SAMPLE
2421: ( p_sample_rec IN GMD_SAMPLES%ROWTYPE,
2422: x_return_status OUT NOCOPY VARCHAR2
2423: )
2424: IS
2425:
2491:
2492:
2493:
2494: PROCEDURE VALIDATE_LOCATION_SAMPLE
2495: ( p_sample_rec IN GMD_SAMPLES%ROWTYPE,
2496: p_locator_control IN NUMBER,
2497: x_return_status OUT NOCOPY VARCHAR2
2498: )
2499: IS
2604:
2605:
2606:
2607: PROCEDURE VALIDATE_SAMPLE
2608: ( p_sample_rec IN GMD_SAMPLES%ROWTYPE
2609: , p_grade IN VARCHAR2 --3431884
2610: , x_sample_rec OUT NOCOPY GMD_SAMPLES%ROWTYPE
2611: , x_return_status OUT NOCOPY VARCHAR2
2612: )
2606:
2607: PROCEDURE VALIDATE_SAMPLE
2608: ( p_sample_rec IN GMD_SAMPLES%ROWTYPE
2609: , p_grade IN VARCHAR2 --3431884
2610: , x_sample_rec OUT NOCOPY GMD_SAMPLES%ROWTYPE
2611: , x_return_status OUT NOCOPY VARCHAR2
2612: )
2613: IS
2614: -- Bug 4165704: organization validation changed with inventory convergence
2717: AND inventory_location_id = p_sample_rec.storage_locator_id;
2718:
2719: l_grade_ctl NUMBER;
2720: l_dummy NUMBER;
2721: l_sample_rec GMD_SAMPLES%ROWTYPE;
2722: l_sample_out_rec GMD_SAMPLES%ROWTYPE;
2723: l_locator_control NUMBER;
2724: l_return_status VARCHAR2(1);
2725:
2718:
2719: l_grade_ctl NUMBER;
2720: l_dummy NUMBER;
2721: l_sample_rec GMD_SAMPLES%ROWTYPE;
2722: l_sample_out_rec GMD_SAMPLES%ROWTYPE;
2723: l_locator_control NUMBER;
2724: l_return_status VARCHAR2(1);
2725:
2726: BEGIN
3214:
3215: -- Now Call Group Layer Validate Samples API
3216: -- To perform business logic validation.
3217:
3218: --dbms_output.put_line('b4 GMD_SAMPLES_GRP.validate_sample');
3219:
3220:
3221: GMD_SAMPLES_GRP.validate_sample(
3222: p_sample => l_sample_rec,
3217:
3218: --dbms_output.put_line('b4 GMD_SAMPLES_GRP.validate_sample');
3219:
3220:
3221: GMD_SAMPLES_GRP.validate_sample(
3222: p_sample => l_sample_rec,
3223: p_called_from => 'PUBLIC',
3224: p_operation => 'INSERT',
3225: x_return_status => l_return_status
3224: p_operation => 'INSERT',
3225: x_return_status => l_return_status
3226: );
3227:
3228: --dbms_output.put_line('after GMD_SAMPLES_GRP.validate_sample');
3229:
3230:
3231: IF l_return_status = FND_API.G_RET_STS_ERROR THEN
3232: -- Message is alrady logged by check_for_null procedure
3253: x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
3254:
3255: END VALIDATE_SAMPLE;
3256:
3257: END GMD_SAMPLES_PUB;