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
554: THEN
555:
556: --
557: -- Verify If PIM_PDS profiles are enabled to create a Packaging Hierarchy
558: IF Bom_Globals.IS_PIM_PDS_ENABLED = 'N'
559: THEN
560: Error_Handler.Add_Error_Token
561: ( p_message_name => 'BOM_CREATE_PACK_HIER_NOT_ALLOW'
562: , p_mesg_token_tbl => l_Mesg_Token_Tbl
591: ---
592: -- Do not allow packaging hierarchies to be created in child orgs.
593: -- Pkg Hiers cannonly be commoned from the master org.
594: ---
595: IF p_bom_header_rec.transaction_type = Bom_Globals.G_OPR_CREATE AND
596: p_bom_head_unexp_rec.source_bill_sequence_id IS NULL
597: THEN
598: SELECT master_organization_id INTO l_mater_org_id FROM mtl_parameters
599: WHERE organization_id = p_bom_head_unexp_rec.organization_id;
687: END IF; -- end if l_count = 0
688: END IF; -- end if p_bom_header_rec.alternate_bom_code IS NOT NULL
689:
690: -- In update case, the new structure type must be a child of the existing one
691: IF ( p_bom_header_rec.transaction_type = Bom_Globals.G_OPR_UPDATE
692: AND p_bom_head_unexp_rec.structure_type_id IS NOT NULL
693: AND p_bom_head_unexp_rec.structure_type_id <> FND_API.G_MISS_NUM
694: AND p_bom_head_unexp_rec.structure_type_id <> p_old_bom_head_unexp_rec.structure_type_id )
695: THEN
726: , x_Mesg_Token_Tbl => l_Mesg_Token_Tbl
727: , p_Token_Tbl => l_token_tbl
728: );
729: END IF; -- end if l_count = 0
730: END IF; -- end if p_bom_header_rec.transaction_type = Bom_Globals.G_OPR_UPDATE
731:
732:
733: /** -------------------------------------------------------------
734: ** When commoning a bill, either creating or updating an existing
762: -- must not enter the value for common organization code and
763: -- common assembly item name. Providing these values would mean that
764: -- the user is attempting to update these non-updateable columns
765: --
766: IF p_bom_header_rec.transaction_type = Bom_Globals.G_OPR_UPDATE
767: AND
768: ( ( p_bom_header_rec.common_organization_code IS NOT NULL
769: AND p_bom_header_rec.common_organization_code <>
770: FND_API.G_MISS_CHAR
941:
942: --
943: -- Validation for inter-org common
944: --
945: IF ( p_bom_header_rec.transaction_type = Bom_Globals.G_OPR_UPDATE AND
946: p_bom_head_unexp_rec.source_bill_sequence_id IS NOT NULL AND
947: p_bom_head_unexp_rec.source_bill_sequence_id <> FND_API.G_MISS_NUM AND
948: p_old_bom_head_unexp_rec.source_bill_sequence_id IS NULL AND
949: p_old_bom_head_unexp_rec.organization_id <>
949: p_old_bom_head_unexp_rec.organization_id <>
950: p_bom_head_unexp_rec.common_organization_id
951: )
952: OR
953: ( p_bom_header_rec.transaction_type = Bom_Globals.G_OPR_CREATE AND
954: p_bom_head_unexp_rec.source_bill_sequence_id IS NOT NULL AND
955: p_bom_head_unexp_rec.source_bill_sequence_id <> FND_API.G_MISS_NUM AND
956: p_bom_head_unexp_rec.common_organization_id <>
957: p_bom_head_unexp_rec.organization_id
962: INTO l_dummy
963: FROM mtl_parameters mp1, mtl_parameters mp2
964: WHERE mp1.organization_id = p_bom_head_unexp_rec.organization_id
965: AND mp2.organization_id =
966: DECODE(p_bom_header_rec.transaction_type, Bom_Globals.G_OPR_CREATE,
967: p_bom_head_unexp_rec.common_organization_id,
968: Bom_Globals.G_OPR_UPDATE,
969: p_old_bom_head_unexp_rec.common_organization_id
970: )
964: WHERE mp1.organization_id = p_bom_head_unexp_rec.organization_id
965: AND mp2.organization_id =
966: DECODE(p_bom_header_rec.transaction_type, Bom_Globals.G_OPR_CREATE,
967: p_bom_head_unexp_rec.common_organization_id,
968: Bom_Globals.G_OPR_UPDATE,
969: p_old_bom_head_unexp_rec.common_organization_id
970: )
971: AND mp1.master_organization_id = mp2.master_organization_id;
972:
1243: -- check to see if bill item and common item have same bom_item_type,
1244: -- pick_components_flag and replenish_to_order_flag
1245: -- Common item must have bom_enabled_flag = 'Y'
1246: --
1247: IF ( p_bom_header_rec.transaction_type = Bom_Globals.G_OPR_UPDATE AND
1248: p_bom_head_unexp_rec.source_bill_sequence_id IS NOT NULL AND
1249: p_bom_head_unexp_rec.source_bill_sequence_id <> FND_API.G_MISS_NUM AND
1250: p_old_bom_head_unexp_rec.source_bill_sequence_id IS NULL
1251: )
1249: p_bom_head_unexp_rec.source_bill_sequence_id <> FND_API.G_MISS_NUM AND
1250: p_old_bom_head_unexp_rec.source_bill_sequence_id IS NULL
1251: )
1252: OR
1253: ( p_bom_header_rec.transaction_type = Bom_Globals.G_OPR_CREATE AND
1254: p_bom_head_unexp_rec.source_bill_sequence_id IS NOT NULL AND
1255: p_bom_head_unexp_rec.source_bill_sequence_id <> FND_API.G_MISS_NUM
1256: )
1257: THEN