62: l_Mesg_Token_Tbl Error_Handler.Mesg_Token_Tbl_Type;
63: l_return_status VARCHAR2(1);
64: BEGIN
65:
66: If Bom_Globals.Get_Debug = 'Y' THEN Error_Handler.Write_Debug('Quering Assembly item ' || to_char(p_bom_head_unexp_rec.assembly_item_id)); END IF;
67: IF Bom_Globals.Get_Debug = 'Y' THEN Error_Handler.Write_Debug(' Org: ' || to_char(p_bom_head_unexp_rec.organization_id) || ' Alt: ' || p_bom_header_rec.alternate_bom_code ); END IF;
68:
69: /* bug 4133037, For creates we need to check for existance in bom_structures_b */
70:
63: l_return_status VARCHAR2(1);
64: BEGIN
65:
66: If Bom_Globals.Get_Debug = 'Y' THEN Error_Handler.Write_Debug('Quering Assembly item ' || to_char(p_bom_head_unexp_rec.assembly_item_id)); END IF;
67: IF Bom_Globals.Get_Debug = 'Y' THEN Error_Handler.Write_Debug(' Org: ' || to_char(p_bom_head_unexp_rec.organization_id) || ' Alt: ' || p_bom_header_rec.alternate_bom_code ); END IF;
68:
69: /* bug 4133037, For creates we need to check for existance in bom_structures_b */
70:
71: If(p_bom_header_rec.transaction_type = BOM_Globals.G_OPR_CREATE) then
67: IF Bom_Globals.Get_Debug = 'Y' THEN Error_Handler.Write_Debug(' Org: ' || to_char(p_bom_head_unexp_rec.organization_id) || ' Alt: ' || p_bom_header_rec.alternate_bom_code ); END IF;
68:
69: /* bug 4133037, For creates we need to check for existance in bom_structures_b */
70:
71: If(p_bom_header_rec.transaction_type = BOM_Globals.G_OPR_CREATE) then
72: Bom_Bom_Header_Util.Query_Table_Row
73: ( p_assembly_item_id =>
74: p_bom_head_unexp_rec.assembly_item_id
75: , p_alternate_bom_code =>
93: , x_return_status => l_return_status
94: );
95: end if;
96:
97: IF Bom_Globals.Get_Debug = 'Y' THEN Error_Handler.Write_Debug('Query Row Returned with : ' || l_return_status); END IF;
98:
99: IF l_return_status = BOM_Globals.G_RECORD_FOUND AND
100: p_bom_header_rec.transaction_type = BOM_Globals.G_OPR_CREATE
101: THEN
95: end if;
96:
97: IF Bom_Globals.Get_Debug = 'Y' THEN Error_Handler.Write_Debug('Query Row Returned with : ' || l_return_status); END IF;
98:
99: IF l_return_status = BOM_Globals.G_RECORD_FOUND AND
100: p_bom_header_rec.transaction_type = BOM_Globals.G_OPR_CREATE
101: THEN
102: l_token_tbl(1).token_name := 'ASSEMBLY_ITEM_NAME';
103: l_token_tbl(1).token_value :=
96:
97: IF Bom_Globals.Get_Debug = 'Y' THEN Error_Handler.Write_Debug('Query Row Returned with : ' || l_return_status); END IF;
98:
99: IF l_return_status = BOM_Globals.G_RECORD_FOUND AND
100: p_bom_header_rec.transaction_type = BOM_Globals.G_OPR_CREATE
101: THEN
102: l_token_tbl(1).token_name := 'ASSEMBLY_ITEM_NAME';
103: l_token_tbl(1).token_value :=
104: p_bom_header_rec.assembly_item_name;
108: , p_message_name => 'BOM_ASSY_ITEM_ALREADY_EXISTS'
109: , p_token_tbl => l_token_tbl
110: );
111: l_return_status := FND_API.G_RET_STS_ERROR;
112: ELSIF l_return_status = BOM_Globals.G_RECORD_NOT_FOUND AND
113: p_bom_header_rec.transaction_type IN
114: (BOM_Globals.G_OPR_UPDATE, BOM_Globals.G_OPR_DELETE)
115: THEN
116: l_token_tbl(1).token_name := 'ASSEMBLY_ITEM_NAME';
110: );
111: l_return_status := FND_API.G_RET_STS_ERROR;
112: ELSIF l_return_status = BOM_Globals.G_RECORD_NOT_FOUND AND
113: p_bom_header_rec.transaction_type IN
114: (BOM_Globals.G_OPR_UPDATE, BOM_Globals.G_OPR_DELETE)
115: THEN
116: l_token_tbl(1).token_name := 'ASSEMBLY_ITEM_NAME';
117: l_token_tbl(1).token_value :=
118: p_bom_header_rec.assembly_item_name;
140:
141: /* Assign the relevant transaction type for SYNC operations */
142:
143: IF p_bom_header_rec.transaction_type = 'SYNC' THEN
144: IF l_return_status = Bom_Globals.G_RECORD_FOUND THEN
145: x_old_bom_header_rec.transaction_type :=
146: Bom_Globals.G_OPR_UPDATE;
147: ELSE
148: x_old_bom_header_rec.transaction_type :=
142:
143: IF p_bom_header_rec.transaction_type = 'SYNC' THEN
144: IF l_return_status = Bom_Globals.G_RECORD_FOUND THEN
145: x_old_bom_header_rec.transaction_type :=
146: Bom_Globals.G_OPR_UPDATE;
147: ELSE
148: x_old_bom_header_rec.transaction_type :=
149: Bom_Globals.G_OPR_CREATE;
150: END IF;
145: x_old_bom_header_rec.transaction_type :=
146: Bom_Globals.G_OPR_UPDATE;
147: ELSE
148: x_old_bom_header_rec.transaction_type :=
149: Bom_Globals.G_OPR_CREATE;
150: END IF;
151: END IF;
152: l_return_status := FND_API.G_RET_STS_SUCCESS;
153:
243: l_return_status := FND_API.G_RET_STS_ERROR;
244: END IF;
245:
246:
247: IF BOM_Globals.Get_STD_Item_Access IS NULL AND
248: BOM_Globals.Get_PLN_Item_Access IS NULL AND
249: BOM_Globals.Get_MDL_Item_Access IS NULL AND
250: BOM_Globals.Get_OC_Item_Access IS NULL
251: THEN
244: END IF;
245:
246:
247: IF BOM_Globals.Get_STD_Item_Access IS NULL AND
248: BOM_Globals.Get_PLN_Item_Access IS NULL AND
249: BOM_Globals.Get_MDL_Item_Access IS NULL AND
250: BOM_Globals.Get_OC_Item_Access IS NULL
251: THEN
252: --
245:
246:
247: IF BOM_Globals.Get_STD_Item_Access IS NULL AND
248: BOM_Globals.Get_PLN_Item_Access IS NULL AND
249: BOM_Globals.Get_MDL_Item_Access IS NULL AND
250: BOM_Globals.Get_OC_Item_Access IS NULL
251: THEN
252: --
253: -- Get respective profile values
246:
247: IF BOM_Globals.Get_STD_Item_Access IS NULL AND
248: BOM_Globals.Get_PLN_Item_Access IS NULL AND
249: BOM_Globals.Get_MDL_Item_Access IS NULL AND
250: BOM_Globals.Get_OC_Item_Access IS NULL
251: THEN
252: --
253: -- Get respective profile values
254: --
251: THEN
252: --
253: -- Get respective profile values
254: --
255: IF Bom_Globals.Get_Debug = 'Y' THEN Error_Handler.Write_Debug('Checking item type access . . . '); END IF;
256:
257: IF fnd_profile.value('BOM:STANDARD_ITEM_ACCESS') = '1'
258: THEN
259: BOM_Globals.Set_STD_Item_Access
255: IF Bom_Globals.Get_Debug = 'Y' THEN Error_Handler.Write_Debug('Checking item type access . . . '); END IF;
256:
257: IF fnd_profile.value('BOM:STANDARD_ITEM_ACCESS') = '1'
258: THEN
259: BOM_Globals.Set_STD_Item_Access
260: ( p_std_item_access => 4);
261: ELSE
262: IF Bom_Globals.Get_Debug = 'Y' THEN Error_Handler.Write_Debug('no access to standard items'); END IF;
263: BOM_Globals.Set_STD_Item_Access
258: THEN
259: BOM_Globals.Set_STD_Item_Access
260: ( p_std_item_access => 4);
261: ELSE
262: IF Bom_Globals.Get_Debug = 'Y' THEN Error_Handler.Write_Debug('no access to standard items'); END IF;
263: BOM_Globals.Set_STD_Item_Access
264: (p_std_item_access => NULL);
265: END IF;
266:
259: BOM_Globals.Set_STD_Item_Access
260: ( p_std_item_access => 4);
261: ELSE
262: IF Bom_Globals.Get_Debug = 'Y' THEN Error_Handler.Write_Debug('no access to standard items'); END IF;
263: BOM_Globals.Set_STD_Item_Access
264: (p_std_item_access => NULL);
265: END IF;
266:
267: IF fnd_profile.value('BOM:MODEL_ITEM_ACCESS') = '1'
265: END IF;
266:
267: IF fnd_profile.value('BOM:MODEL_ITEM_ACCESS') = '1'
268: THEN
269: BOM_Globals.Set_MDL_Item_Access
270: ( p_mdl_item_access => 1);
271: BOM_Globals.Set_OC_Item_Access
272: ( p_oc_item_access => 2);
273: IF Bom_Globals.Get_Debug = 'Y' THEN Error_Handler.Write_Debug('Model/OC items are accessible. . . '); END IF;
267: IF fnd_profile.value('BOM:MODEL_ITEM_ACCESS') = '1'
268: THEN
269: BOM_Globals.Set_MDL_Item_Access
270: ( p_mdl_item_access => 1);
271: BOM_Globals.Set_OC_Item_Access
272: ( p_oc_item_access => 2);
273: IF Bom_Globals.Get_Debug = 'Y' THEN Error_Handler.Write_Debug('Model/OC items are accessible. . . '); END IF;
274: ELSE
275: BOM_Globals.Set_MDL_Item_Access
269: BOM_Globals.Set_MDL_Item_Access
270: ( p_mdl_item_access => 1);
271: BOM_Globals.Set_OC_Item_Access
272: ( p_oc_item_access => 2);
273: IF Bom_Globals.Get_Debug = 'Y' THEN Error_Handler.Write_Debug('Model/OC items are accessible. . . '); END IF;
274: ELSE
275: BOM_Globals.Set_MDL_Item_Access
276: ( p_mdl_item_access => NULL);
277: BOM_Globals.Set_OC_Item_Access
271: BOM_Globals.Set_OC_Item_Access
272: ( p_oc_item_access => 2);
273: IF Bom_Globals.Get_Debug = 'Y' THEN Error_Handler.Write_Debug('Model/OC items are accessible. . . '); END IF;
274: ELSE
275: BOM_Globals.Set_MDL_Item_Access
276: ( p_mdl_item_access => NULL);
277: BOM_Globals.Set_OC_Item_Access
278: ( p_oc_item_access => NULL);
279: IF Bom_Globals.Get_Debug = 'Y' THEN Error_Handler.Write_Debug(' Model/OC item access denied . . . '); END IF;
273: IF Bom_Globals.Get_Debug = 'Y' THEN Error_Handler.Write_Debug('Model/OC items are accessible. . . '); END IF;
274: ELSE
275: BOM_Globals.Set_MDL_Item_Access
276: ( p_mdl_item_access => NULL);
277: BOM_Globals.Set_OC_Item_Access
278: ( p_oc_item_access => NULL);
279: IF Bom_Globals.Get_Debug = 'Y' THEN Error_Handler.Write_Debug(' Model/OC item access denied . . . '); END IF;
280: END IF;
281:
275: BOM_Globals.Set_MDL_Item_Access
276: ( p_mdl_item_access => NULL);
277: BOM_Globals.Set_OC_Item_Access
278: ( p_oc_item_access => NULL);
279: IF Bom_Globals.Get_Debug = 'Y' THEN Error_Handler.Write_Debug(' Model/OC item access denied . . . '); END IF;
280: END IF;
281:
282: IF fnd_profile.value('BOM:PLANNING_ITEM_ACCESS') = '1'
283: THEN
280: END IF;
281:
282: IF fnd_profile.value('BOM:PLANNING_ITEM_ACCESS') = '1'
283: THEN
284: BOM_Globals.Set_PLN_Item_Access
285: ( p_pln_item_access => 3);
286: IF Bom_Globals.Get_Debug = 'Y' THEN Error_Handler.Write_Debug('Planning item accessible. . . '); END IF;
287: ELSE
288: BOM_Globals.Set_PLN_Item_Access
282: IF fnd_profile.value('BOM:PLANNING_ITEM_ACCESS') = '1'
283: THEN
284: BOM_Globals.Set_PLN_Item_Access
285: ( p_pln_item_access => 3);
286: IF Bom_Globals.Get_Debug = 'Y' THEN Error_Handler.Write_Debug('Planning item accessible. . . '); END IF;
287: ELSE
288: BOM_Globals.Set_PLN_Item_Access
289: ( p_pln_item_access => NULL);
290: IF Bom_Globals.Get_Debug = 'Y' THEN Error_Handler.Write_Debug('Planning item access denied. . . '); END IF;
284: BOM_Globals.Set_PLN_Item_Access
285: ( p_pln_item_access => 3);
286: IF Bom_Globals.Get_Debug = 'Y' THEN Error_Handler.Write_Debug('Planning item accessible. . . '); END IF;
287: ELSE
288: BOM_Globals.Set_PLN_Item_Access
289: ( p_pln_item_access => NULL);
290: IF Bom_Globals.Get_Debug = 'Y' THEN Error_Handler.Write_Debug('Planning item access denied. . . '); END IF;
291: END IF;
292: END IF;
286: IF Bom_Globals.Get_Debug = 'Y' THEN Error_Handler.Write_Debug('Planning item accessible. . . '); END IF;
287: ELSE
288: BOM_Globals.Set_PLN_Item_Access
289: ( p_pln_item_access => NULL);
290: IF Bom_Globals.Get_Debug = 'Y' THEN Error_Handler.Write_Debug('Planning item access denied. . . '); END IF;
291: END IF;
292: END IF;
293:
294: --
295: -- Use BOM Item Type of the Assembly Item that is queried above
296: -- to check if user has access to it.
297: --
298: IF l_Bom_Item_Type NOT IN
299: ( NVL(BOM_Globals.Get_STD_Item_Access, 0),
300: NVL(BOM_Globals.Get_PLN_Item_Access, 0),
301: NVL(BOM_Globals.Get_OC_Item_Access, 0) ,
302: NVL(BOM_Globals.Get_MDL_Item_Access, 0),
303: BOM_Globals.G_PRODUCT_FAMILY
296: -- to check if user has access to it.
297: --
298: IF l_Bom_Item_Type NOT IN
299: ( NVL(BOM_Globals.Get_STD_Item_Access, 0),
300: NVL(BOM_Globals.Get_PLN_Item_Access, 0),
301: NVL(BOM_Globals.Get_OC_Item_Access, 0) ,
302: NVL(BOM_Globals.Get_MDL_Item_Access, 0),
303: BOM_Globals.G_PRODUCT_FAMILY
304: )
297: --
298: IF l_Bom_Item_Type NOT IN
299: ( NVL(BOM_Globals.Get_STD_Item_Access, 0),
300: NVL(BOM_Globals.Get_PLN_Item_Access, 0),
301: NVL(BOM_Globals.Get_OC_Item_Access, 0) ,
302: NVL(BOM_Globals.Get_MDL_Item_Access, 0),
303: BOM_Globals.G_PRODUCT_FAMILY
304: )
305: THEN
298: IF l_Bom_Item_Type NOT IN
299: ( NVL(BOM_Globals.Get_STD_Item_Access, 0),
300: NVL(BOM_Globals.Get_PLN_Item_Access, 0),
301: NVL(BOM_Globals.Get_OC_Item_Access, 0) ,
302: NVL(BOM_Globals.Get_MDL_Item_Access, 0),
303: BOM_Globals.G_PRODUCT_FAMILY
304: )
305: THEN
306: l_Token_Tbl(1).Token_Name := 'BOM_ITEM_TYPE';
299: ( NVL(BOM_Globals.Get_STD_Item_Access, 0),
300: NVL(BOM_Globals.Get_PLN_Item_Access, 0),
301: NVL(BOM_Globals.Get_OC_Item_Access, 0) ,
302: NVL(BOM_Globals.Get_MDL_Item_Access, 0),
303: BOM_Globals.G_PRODUCT_FAMILY
304: )
305: THEN
306: l_Token_Tbl(1).Token_Name := 'BOM_ITEM_TYPE';
307: l_Token_Tbl(1).Translate := TRUE;
330:
331: x_return_status := l_return_status;
332: x_mesg_token_tbl := l_mesg_token_tbl;
333:
334: IF Bom_Globals.Get_Debug = 'Y' THEN Error_Handler.Write_Debug('Check Access returning with ' || l_return_status ); END IF;
335:
336: END Check_Access;
337:
338:
363: BEGIN
364:
365: x_return_status := FND_API.G_RET_STS_SUCCESS;
366:
367: IF Bom_Globals.Get_Debug = 'Y' THEN Error_Handler.Write_Debug('Within Bom Header Check Attributes . . . '); END IF;
368:
369: IF p_bom_header_rec.alternate_bom_code IS NOT NULL AND
370: p_bom_header_rec.alternate_bom_code <> FND_API.G_MISS_CHAR
371: AND
591: THEN
592:
593: --
594: -- Verify If PIM_PDS profiles are enabled to create a Packaging Hierarchy
595: IF Bom_Globals.IS_PIM_PDS_ENABLED = 'N'
596: THEN
597: Error_Handler.Add_Error_Token
598: ( p_message_name => 'BOM_CREATE_PACK_HIER_NOT_ALLOW'
599: , p_mesg_token_tbl => l_Mesg_Token_Tbl
628: ---
629: -- Do not allow packaging hierarchies to be created in child orgs.
630: -- Pkg Hiers cannonly be commoned from the master org.
631: ---
632: IF p_bom_header_rec.transaction_type = Bom_Globals.G_OPR_CREATE AND
633: p_bom_head_unexp_rec.source_bill_sequence_id IS NULL
634: THEN
635: SELECT master_organization_id INTO l_mater_org_id FROM mtl_parameters
636: WHERE organization_id = p_bom_head_unexp_rec.organization_id;
724: END IF; -- end if l_count = 0
725: END IF; -- end if p_bom_header_rec.alternate_bom_code IS NOT NULL
726:
727: -- In update case, the new structure type must be a child of the existing one
728: IF ( p_bom_header_rec.transaction_type = Bom_Globals.G_OPR_UPDATE
729: AND p_bom_head_unexp_rec.structure_type_id IS NOT NULL
730: AND p_bom_head_unexp_rec.structure_type_id <> FND_API.G_MISS_NUM
731: AND p_bom_head_unexp_rec.structure_type_id <> p_old_bom_head_unexp_rec.structure_type_id )
732: THEN
763: , x_Mesg_Token_Tbl => l_Mesg_Token_Tbl
764: , p_Token_Tbl => l_token_tbl
765: );
766: END IF; -- end if l_count = 0
767: END IF; -- end if p_bom_header_rec.transaction_type = Bom_Globals.G_OPR_UPDATE
768:
769:
770: /** -------------------------------------------------------------
771: ** When commoning a bill, either creating or updating an existing
799: -- must not enter the value for common organization code and
800: -- common assembly item name. Providing these values would mean that
801: -- the user is attempting to update these non-updateable columns
802: --
803: IF p_bom_header_rec.transaction_type = Bom_Globals.G_OPR_UPDATE
804: AND
805: ( ( p_bom_header_rec.common_organization_code IS NOT NULL
806: AND p_bom_header_rec.common_organization_code <>
807: FND_API.G_MISS_CHAR
982:
983: --
984: -- Validation for inter-org common
985: --
986: IF ( p_bom_header_rec.transaction_type = Bom_Globals.G_OPR_UPDATE AND
987: p_bom_head_unexp_rec.source_bill_sequence_id IS NOT NULL AND
988: p_bom_head_unexp_rec.source_bill_sequence_id <> FND_API.G_MISS_NUM AND
989: p_old_bom_head_unexp_rec.source_bill_sequence_id IS NULL AND
990: p_old_bom_head_unexp_rec.organization_id <>
990: p_old_bom_head_unexp_rec.organization_id <>
991: p_bom_head_unexp_rec.common_organization_id
992: )
993: OR
994: ( p_bom_header_rec.transaction_type = Bom_Globals.G_OPR_CREATE AND
995: p_bom_head_unexp_rec.source_bill_sequence_id IS NOT NULL AND
996: p_bom_head_unexp_rec.source_bill_sequence_id <> FND_API.G_MISS_NUM AND
997: p_bom_head_unexp_rec.common_organization_id <>
998: p_bom_head_unexp_rec.organization_id
1003: INTO l_dummy
1004: FROM mtl_parameters mp1, mtl_parameters mp2
1005: WHERE mp1.organization_id = p_bom_head_unexp_rec.organization_id
1006: AND mp2.organization_id =
1007: DECODE(p_bom_header_rec.transaction_type, Bom_Globals.G_OPR_CREATE,
1008: p_bom_head_unexp_rec.common_organization_id,
1009: Bom_Globals.G_OPR_UPDATE,
1010: p_old_bom_head_unexp_rec.common_organization_id
1011: )
1005: WHERE mp1.organization_id = p_bom_head_unexp_rec.organization_id
1006: AND mp2.organization_id =
1007: DECODE(p_bom_header_rec.transaction_type, Bom_Globals.G_OPR_CREATE,
1008: p_bom_head_unexp_rec.common_organization_id,
1009: Bom_Globals.G_OPR_UPDATE,
1010: p_old_bom_head_unexp_rec.common_organization_id
1011: )
1012: AND mp1.master_organization_id = mp2.master_organization_id;
1013:
1320: END IF; -- User creating a common or updating the common info Ends
1321:
1322: /* BOM ER 9904085 */
1323: --begin
1324: IF ( p_bom_header_rec.transaction_type = Bom_Globals.G_OPR_UPDATE AND
1325: p_bom_head_unexp_rec.source_bill_sequence_id IS NOT NULL AND
1326: p_bom_head_unexp_rec.source_bill_sequence_id <> FND_API.G_MISS_NUM AND
1327: p_old_bom_head_unexp_rec.source_bill_sequence_id IS NULL AND
1328: p_old_bom_head_unexp_rec.organization_id =
1328: p_old_bom_head_unexp_rec.organization_id =
1329: p_bom_head_unexp_rec.common_organization_id
1330: )
1331: OR
1332: ( p_bom_header_rec.transaction_type = Bom_Globals.G_OPR_CREATE AND
1333: p_bom_head_unexp_rec.source_bill_sequence_id IS NOT NULL AND
1334: p_bom_head_unexp_rec.source_bill_sequence_id <> FND_API.G_MISS_NUM AND
1335: p_bom_head_unexp_rec.common_organization_id =
1336: p_bom_head_unexp_rec.organization_id
1485: -- check to see if bill item and common item have same bom_item_type,
1486: -- pick_components_flag and replenish_to_order_flag
1487: -- Common item must have bom_enabled_flag = 'Y'
1488: --
1489: IF ( p_bom_header_rec.transaction_type = Bom_Globals.G_OPR_UPDATE AND
1490: p_bom_head_unexp_rec.source_bill_sequence_id IS NOT NULL AND
1491: p_bom_head_unexp_rec.source_bill_sequence_id <> FND_API.G_MISS_NUM AND
1492: p_old_bom_head_unexp_rec.source_bill_sequence_id IS NULL
1493: )
1491: p_bom_head_unexp_rec.source_bill_sequence_id <> FND_API.G_MISS_NUM AND
1492: p_old_bom_head_unexp_rec.source_bill_sequence_id IS NULL
1493: )
1494: OR
1495: ( p_bom_header_rec.transaction_type = Bom_Globals.G_OPR_CREATE AND
1496: p_bom_head_unexp_rec.source_bill_sequence_id IS NOT NULL AND
1497: p_bom_head_unexp_rec.source_bill_sequence_id <> FND_API.G_MISS_NUM
1498: )
1499: THEN