1 PACKAGE BODY BOM_Validate_Ref_Designator AS
2 /* $Header: BOMLRFDB.pls 120.3.12000000.2 2007/02/27 11:15:35 arudresh ship $ */
3 /**********************************************************************
4 -- Copyright (c) 1996 Oracle Corporation, Redwood Shores, CA, USA
5 -- All rights reserved.
6 --
7 -- FILENAME
8 --
9 -- BOMLRFDB.pls
10 --
11 -- DESCRIPTION
12 --
13 -- Body of package BOM_Validate_Ref_designators
14 --
15 -- NOTES
16 --
17 -- HISTORY
18 --
19 -- 19-JUL-1999 Rahul Chitko Initial Creation
20 --
21 -- 08-MAY-2001 Refai Farook EAM related changes
22 --
23 -- 05-JUL-2004 Hari Gelli Added Check_Quantity procedure
24 **************************************************************************/
25 G_PKG_NAME CONSTANT VARCHAR2(30) := 'BOM_Validate_Ref_Designator';
26 ret_code NUMBER;
27 l_dummy VARCHAR2(80);
28
29
30 /*************************************************************************
31 * Local Procedure: Calculate_both_totals
32 * Parameter IN : old_component_sequenc_id
33 * Parameters OUT : Total Quantity of Designators
34 * Purpose : Procedure calculate_both_totals will take the component
35 * sequence_id and calculate the number of designators that
36 * already exist for it and the how many exist on the same
37 * component on the ECO with an acd_type of add or disable
38 * Then by making use of the set operater it will eliminate
39 * the disable one's from the list. This is the quantity
40 * of designator that will remain on the component after
41 * implementation and is returned by the procedure as
42 * Total Quantity.
43 **************************************************************************/
44 Procedure Calculate_Both_Totals( p_old_component_sequence_id IN NUMBER,
45 x_TotalQuantity IN OUT NOCOPY NUMBER
46 )
47 IS
48
49 X_OldComp number;
50 X_Add constant number := 1;
51 X_Delete constant number := 3;
52 l_Implemented_Count NUMBER;
53 l_dummy varchar2(80);
54
55 Cursor GetTotalQty is
56 Select brd.component_reference_designator
57 From bom_reference_designators brd
58 Where brd.component_sequence_id = p_old_component_sequence_id
59 And nvl(brd.acd_type, X_Add) = X_Add
60 Union
61 Select brd.component_reference_designator
62 From bom_reference_designators brd,
63 bom_inventory_components bic
64 Where DECODE(bic.old_component_sequence_id, NULL,
65 bic.component_sequence_id,
66 bic.old_component_sequence_id) = p_old_component_sequence_id
67 And bic.component_sequence_id = brd.component_sequence_id
68 And bic.implementation_date is null
69 And brd.acd_type = X_Add
70 Minus
71 Select brd.component_reference_designator
72 From bom_reference_designators brd,
73 bom_inventory_components bic
74 Where DECODE(bic.old_component_sequence_id, NULL,
75 bic.component_sequence_id,
76 bic.old_component_sequence_id) = p_old_component_sequence_id
77 And bic.component_sequence_id = brd.component_sequence_id
78 And bic.implementation_date is null
79 And brd.acd_type = X_Delete;
80
81 BEGIN
82 IF (Bom_Globals.Get_Bo_Identifier = Bom_Globals.G_BOM_BO) THEN
83 BEGIN
84 Select count(*)
85 Into X_TotalQuantity
86 From bom_reference_designators brd ,
87 bom_inventory_components bic
88 Where brd.component_sequence_id = p_old_component_sequence_id
89 And bic.component_sequence_id = brd.component_sequence_id
90 And bic.implementation_date is NOT NULL
91 And nvl(brd.acd_type, 1) = 1 ;
92
93 RETURN;
94 EXCEPTION
95 WHEN OTHERS THEN
96 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
97 END;
98
99 ELSE
100 X_TotalQuantity :=0;
101 For X_Designators in GetTotalQty loop
102 X_TotalQuantity := X_TotalQuantity + 1;
103 End loop;
104 RETURN;
105 END IF;
106
107 -- Else return 0
108 X_TotalQuantity := 0;
109
110 END Calculate_Both_Totals;
111
112 /*************************************************************************
113 * Local Procedure: Check_Quantity
114 * Parameter IN : component_sequenc_id
115 * : component_item_name
116 * Parameters OUT : Error_Status
117 * Purpose : Procedure Check_Quantity will take the component
118 * sequence_id and checks if the quantity related is set to yes for
119 * the component and if it is yes then calculates the number of designators
120 * by calling the Calculate_both_totals and valiadtes the totals and
121 * send back the error status or success.
122 **************************************************************************/
123 PROCEDURE Check_Quantity
124 ( x_return_status IN OUT NOCOPY VARCHAR2
125 , x_Mesg_Token_Tbl IN OUT NOCOPY Error_Handler.Mesg_Token_Tbl_Type
126 , p_component_sequence_id IN NUMBER
127 , p_component_item_name IN VARCHAR2
128 )
129 IS
130 l_ref_qty NUMBER := 0;
131 l_quantity NUMBER;
132 l_return_status VARCHAR2(1) := FND_API.G_RET_STS_SUCCESS;
133
134 l_token_tbl Error_Handler.Token_Tbl_Type;
135 l_Mesg_Token_Tbl Error_Handler.Mesg_Token_Tbl_Type;
136
137 CURSOR c_QuantityRelated IS
138 SELECT component_quantity
139 FROM bom_inventory_components
140 WHERE component_sequence_id = p_component_sequence_id
141 AND quantity_related = 1;
142
143 CURSOR c_acdtype IS
144 SELECT acd_type, old_component_sequence_id
145 FROM bom_inventory_components bic
146 WHERE bic.component_sequence_id = p_component_sequence_id;
147 BEGIN
148 /*****************************************************************
149 --
150 -- If no exception is raised then validate the actual quantity of
151 -- ref. designators with respect to the component quantity
152 -- If the designators are not equal, then set error status.
153 ******************************************************************/
154
155 OPEN c_QuantityRelated;
156 FETCH c_QuantityRelated INTO l_Quantity;
157
158 IF c_QuantityRelated%FOUND THEN
159
160 FOR acd IN c_acdtype LOOP
161 IF acd.acd_type = 2 /* CHANGE */
162 THEN
163 Calculate_Both_Totals
164 ( p_old_component_sequence_id => acd.old_component_sequence_id
165 , x_TotalQuantity => l_ref_qty
166 );
167 ELSE
168 Calculate_Both_Totals
169 ( p_old_component_sequence_id => p_component_sequence_id
170 , x_TotalQuantity => l_ref_qty);
171 END IF;
172 END LOOP;
173
174 IF l_quantity <> l_ref_qty THEN
175 l_return_status := FND_API.G_RET_STS_ERROR;
176
177 l_token_tbl.delete ;
178 l_token_tbl(1).token_name := 'REVISED_COMPONENT_NAME';
179 l_token_tbl(1).token_value := p_component_item_name;
180 Error_Handler.Add_Error_Token
181 ( x_Mesg_Token_Tbl => l_Mesg_Token_tbl
182 , p_Mesg_Token_Tbl => l_Mesg_Token_Tbl
183 , p_message_name => 'BOM_QUANTITY_RELATED_INVALID'
184 , p_token_tbl => l_token_tbl
185 , p_message_type => 'W'
186 );
187 END IF;
188 END IF;
189 CLOSE c_QuantityRelated;
190
191 x_Mesg_Token_Tbl := l_Mesg_Token_Tbl;
192 x_return_status := l_return_status;
193
194 END Check_Quantity;
195
196 /********************************************************************
197 *
198 * Procedure : Check_Entity
199 * Parameters IN : Reference Designator Record as given by the User
200 * Reference Designator Unexposed Record
201 * Parameters OUT: Return_Status - Indicating success or faliure
202 * Mesg_Token_Tbl - Filled with any errors or warnings
203 * Purpose : Entity validate procedure will execute the business
204 * validations for the referenced designator entity
205 * Any errors are loaded in the Mesg_Token_Tbl and
206 * a return status value is set.
207 ********************************************************************/
208
209 PROCEDURE Check_Entity
210 ( x_return_status IN OUT NOCOPY VARCHAR2
211 , x_Mesg_Token_Tbl IN OUT NOCOPY Error_Handler.Mesg_Token_Tbl_Type
212 , p_ref_designator_rec IN Bom_Bo_Pub.Ref_Designator_Rec_Type
213 , p_Ref_Desg_Unexp_Rec IN Bom_Bo_Pub.Ref_Desg_Unexposed_Rec_Type
214 )
215 IS
216 l_return_status VARCHAR2(1) := FND_API.G_RET_STS_SUCCESS;
217 l_temp_var NUMBER := 0;
218 l_ref_qty NUMBER := 0;
219 l_component_qty NUMBER;
220 l_dummy VARCHAR(80);
221 l_processed BOOLEAN;
222 l_quantity NUMBER;
223 l_change NUMBER := 0;
224 l_component_seq_id NUMBER := 0;
225 l_token_tbl Error_Handler.Token_Tbl_Type;
226 l_Mesg_Token_Tbl Error_Handler.Mesg_Token_Tbl_Type;
227 l_Err_text VARCHAR2(2000);
228 l_basis_type NUMBER;
229 l_assy_bom_enabled VARCHAR2(1);
230
231 CURSOR c_acdtype IS
232 SELECT acd_type, old_component_sequence_id
233 FROM bom_inventory_components bic
234 WHERE bic.component_sequence_id =
235 p_Ref_Desg_Unexp_Rec.component_sequence_id;
236
237 CURSOR c_QuantityRelated IS
238 SELECT component_quantity
239 FROM bom_inventory_components
240 WHERE component_sequence_id =
241 p_Ref_Desg_Unexp_rec.component_sequence_id
242 AND quantity_related = 1;
243 BEGIN
244
245 IF Bom_Globals.Get_Debug = 'Y' THEN Error_Handler.Write_Debug('Entity Validation for Ref. Desgs begins . . .'); END IF;
246 If bom_globals.get_debug = 'Y' then Error_Handler.write_debug('Ref Desg: Checking for editable common bill...'); END IF;
247 BEGIN
248 SELECT 1
249 INTO l_dummy
250 FROM bom_bill_of_materials
251 WHERE bill_sequence_id = source_bill_sequence_id
252 AND bill_sequence_id = p_ref_desg_unexp_rec.bill_sequence_id;
253 EXCEPTION
254 WHEN NO_DATA_FOUND THEN
255 Error_Handler.Add_Error_Token
256 ( p_Message_Name => 'BOM_COMMON_REF_DESG'
257 , p_Mesg_Token_Tbl => l_Mesg_Token_Tbl
258 , x_Mesg_Token_Tbl => l_Mesg_Token_Tbl
259 , p_Token_Tbl => l_Token_Tbl
260 );
261 l_Return_Status := FND_API.G_RET_STS_ERROR;
262
263 END;
264 /* 4870173 */
265 select basis_type into l_basis_type from bom_components_b where component_sequence_id = p_Ref_Desg_Unexp_Rec.component_sequence_id;
266 If(l_Basis_type = 2) THEN
267 l_Token_Tbl(1).Token_Name := 'REVISED_COMPONENT_NAME';
268 l_Token_Tbl(1).Token_Value := p_Ref_Designator_Rec.component_item_name;
269 Error_Handler.Add_Error_Token
270 ( x_Mesg_Token_Tbl => l_Mesg_Token_Tbl
271 , p_Mesg_Token_Tbl => l_Mesg_Token_Tbl
272 , p_message_name => 'BOM_LOT_BASED_RDS'
273 , p_Token_Tbl => l_Token_Tbl
274 );
275 l_return_status := FND_API.G_RET_STS_ERROR;
276 End if;
277
278 /*Check BOM enabled flag of the assembly*/
279 SELECT msi.bom_enabled_flag
280 INTO l_assy_bom_enabled
281 FROM mtl_system_items_b msi,
282 bom_bill_of_materials bbom
283 WHERE bbom.bill_sequence_id = p_Ref_Desg_Unexp_Rec.bill_sequence_id
284 AND bbom.assembly_item_id = msi.inventory_item_id
285 AND bbom.organization_id = msi.organization_id;
286
287 IF Bom_Globals.Get_Debug = 'Y' THEN Error_Handler.Write_Debug('Assy Bom Enabled flag : ' || l_assy_bom_enabled); END IF;
288
289 IF l_assy_bom_enabled <> 'Y'
290 THEN
291 IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
292 l_token_tbl(1).token_name := 'REVISED_ITEM_NAME';
293 l_token_tbl(1).token_value :=
294 p_ref_designator_rec.Revised_Item_Name;
295 Error_Handler.Add_Error_Token
296 ( x_Mesg_Token_tbl => l_Mesg_Token_Tbl
297 , p_Mesg_Token_Tbl => l_Mesg_Token_Tbl
298 , p_message_name => 'BOM_REV_ITEM_BOM_NOT_ENABLED'
299 , p_token_tbl => l_token_tbl
300 );
301 END IF;
302 l_return_status := FND_API.G_RET_STS_ERROR;
303 END IF;
304
305 -- The ECO can be updated but a warning needs to be generated and
306 -- scheduled revised items need to be update to Open
307 -- and the ECO status need to be changed to Not Submitted for Approval
308
309 IF Bom_Globals.Get_Bo_Identifier = Bom_Globals.G_ECO_BO
310 THEN
311 Bom_GLOBALS.Check_Approved_For_Process
312 ( p_change_notice => p_ref_designator_rec.Eco_Name,
313 p_organization_id => p_ref_desg_Unexp_rec.organization_id,
314 x_processed => l_processed,
315 x_err_text => l_err_text
316 );
317
318 IF l_processed = TRUE THEN
319 -- If the above process returns true then set the ECO approval.
320
321 BEGIN
322 Bom_GLOBALS.Set_Request_For_Approval
323 ( p_change_notice => p_ref_designator_rec.Eco_Name,
324 p_organization_id => p_ref_desg_Unexp_rec.organization_id,
325 x_err_text => l_err_text
326 );
327
328 EXCEPTION
329 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
330 l_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
331 END;
332
333 END IF;
334 END IF;
335
336 IF Bom_Globals.Get_Debug = 'Y' THEN Error_Handler.Write_Debug('Verified if process exists . . .'); END IF;
337
338 /**********************************************************************
339 *
340 * If the Transaction Type is CREATE and the ACD_Type = Disable, then
341 * the reference designator should already exist for the revised
342 * component.
343 * This piece of code will not be executed by BOM BO since the acd_type is
344 * is not going to be 3 when the procedure is invoked from BOM BO.
345 ***********************************************************************/
346 IF p_ref_designator_rec.acd_type = 3 THEN
347 BEGIN
348
349 SELECT component_reference_designator
350 INTO l_dummy
351 FROM bom_reference_designators brd,
352 bom_inventory_components bic
353 WHERE bic.component_sequence_id =
354 p_ref_desg_unexp_rec.component_sequence_id
355 AND brd.component_sequence_id = bic.old_component_sequence_id
356 AND brd.component_reference_designator =
357 p_ref_designator_rec.reference_designator_name ;
358
359 IF Bom_Globals.Get_Debug = 'Y' THEN Error_Handler.Write_Debug('Ref Desigantor: ' || l_dummy); END IF;
360
361 EXCEPTION
362 WHEN NO_DATA_FOUND THEN
363 -- It means that the reference designator does not
364 -- exist on the revised component or it is probably
365 -- not implemented yet.
366
367 l_Token_Tbl(1).Token_Name := 'REVISED_COMPONENT_NAME';
368 l_Token_Tbl(1).Token_Value :=
369 p_Ref_Designator_Rec.component_item_name;
370
371 l_token_tbl(2).token_name :=
372 'REFERENCE_DESIGNATOR_NAME';
373 l_token_tbl(2).token_value :=
374 p_ref_designator_rec.reference_designator_name;
375
376 Error_Handler.Add_Error_Token
377 ( x_Mesg_Token_Tbl => l_Mesg_Token_Tbl
378 , p_Mesg_Token_Tbl => l_Mesg_Token_Tbl
379 , p_message_name => 'BOM_DISABLE_DESG_NOT_FOUND'
380 , p_Token_Tbl => l_Token_Tbl
381 );
382
383 l_return_status := FND_API.G_RET_STS_ERROR;
384 END;
385
386 END IF;
387
388 /************************************************************************
389 * Check if ACD_Type of component is ADD then ref. desg is also add.
390 * no need for a exception as validity of component_sequence_id is already
391 * checked for.
392 *************************************************************************/
393
394 FOR acd IN c_acdtype LOOP
395 --
396 -- If the component has an ACD_Type of ADD then ref. Desg must also
397 -- be ADD
398 --
399 IF acd.acd_type = 1 /* ADD */ AND
400 p_ref_designator_rec.acd_type <> 1
401 THEN
402 l_return_status := FND_API.G_RET_STS_ERROR;
403
404
405 l_token_tbl.delete; -- Added by MK on 11/14/00
406 l_Token_Tbl(1).Token_Name := 'REVISED_COMPONENT_NAME';
407 l_Token_Tbl(1).Token_Value :=
408 p_Ref_Designator_Rec.component_item_name;
409
410 Error_Handler.Add_Error_Token
411 ( x_Mesg_Token_Tbl => l_Mesg_Token_Tbl
412 , p_Mesg_Token_Tbl => l_Mesg_Token_Tbl
413 , p_message_name => 'BOM_RFD_ACD_NOT_COMPATIBLE'
414 , p_Token_Tbl => l_Token_Tbl
415 );
416 END IF;
417 END LOOP;
418
419 IF Bom_Globals.Get_Debug = 'Y' THEN Error_Handler.Write_Debug('Verified Compatible ACD Types . . .'); END IF;
420
421 /************************************************************************
422 * If the Transaction Type is CREATE and the ACD_type is ADD then check the
423 * type of item to which a ref. designator is being added. Planning bills
424 * cannot have ref. desgs and also components which are not Standard cannot
425 * have ref. desgs. This OR so even if either exists Ref. Designators cannot
426 * be added.
427 *************************************************************************/
428
429 BEGIN
430 SELECT 'Non-Standard Comp'
431 INTO l_dummy
432 FROM bom_inventory_Components bic
433 WHERE bic.component_sequence_id =
434 p_Ref_Desg_Unexp_Rec.component_sequence_id
435 AND bic.bom_item_type in (1, 2, 3); /*MODEL,OPTION CLASS,PLANNING*/
436
437 -- If no exception is raised then
438 -- Generate an error saying that the component is non-standard.
439
440 l_return_status := FND_API.G_RET_STS_ERROR;
441
442 IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_ERROR)
443 THEN
444 Error_Handler.Add_Error_Token
445 ( x_Mesg_Token_tbl => l_Mesg_Token_Tbl
446 , p_Mesg_Token_Tbl => l_Mesg_Token_Tbl
447 , p_message_name => 'BOM_RFD_NON_STD_PARENT'
448 );
449 END IF;
450
451 EXCEPTION
452 WHEN NO_DATA_FOUND THEN
453 -- do nothing
454 NULL;
455 WHEN OTHERS THEN
456 -- dbms_output.put_line
457 -- ('Unexpected error in Checking Planning Item ' ||
458 -- SQLERRM
459 -- );
460
461 Error_Handler.Add_Error_Token
462 ( x_Mesg_Token_tbl => l_Mesg_Token_tbl
463 , p_Mesg_Token_Tbl => l_Mesg_Token_Tbl
464 , p_message_text => 'ERROR in Entity validation '
465 || SUBSTR(SQLERRM, 1, 30) ||
466 ' ' || to_char(SQLCODE)
467 , p_message_name => NULL
468 );
469
470 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
471
472 END; /* End Checking for non-standard component */
473
474 BEGIN
475 SELECT 'Planning Bill'
476 INTO l_dummy
477 FROM sys.dual
478 WHERE EXISTS (SELECT 'Planning Item'
479 FROM bom_bill_of_materials bom,
480 mtl_system_items msi,
481 bom_inventory_components bic
482 WHERE msi.bom_item_type = 3 /* PLANNING */
483 AND msi.inventory_item_id = bom.assembly_item_id
484 AND msi.organization_id = bom.organization_id
485 AND bom.bill_sequence_id = bic.bill_sequence_id
486 AND bic.component_sequence_id =
487 p_Ref_Desg_Unexp_Rec.Component_sequence_id
488 );
489
490 -- If a record is found, then log an error because of the above
491 -- mentioned comment.
492 l_return_status := FND_API.G_RET_STS_ERROR;
493
494 IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_ERROR)
495 THEN
496 Error_Handler.Add_Error_Token
497 ( x_Mesg_Token_tbl => l_Mesg_Token_Tbl
498 , p_Mesg_Token_Tbl => l_Mesg_Token_Tbl
499 , p_message_name => 'BOM_RFD_PLANNING_BILL'
500 );
501 END IF;
502
503 EXCEPTION
504 WHEN NO_DATA_FOUND THEN
505 NULL; -- Do nothing
506 WHEN OTHERS THEN
507 -- dbms_output.put_line
508 -- ('Unexpected error in Checking Planning Item ' ||
509 -- SQLERRM
510 -- );
511
512 Error_Handler.Add_Error_Token
513 ( x_Mesg_Token_tbl => l_Mesg_Token_tbl
514 , p_Mesg_Token_Tbl => l_Mesg_Token_Tbl
515 , p_message_text => 'ERROR in Entity validation '
516 || SUBSTR(SQLERRM, 1, 30) ||
517 ' ' || to_char(SQLCODE)
518 , p_message_name => NULL
519 );
520
521 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
522 END; /* End Checking for Planning Parent */
523
524
525 IF Bom_Globals.Get_Debug = 'Y' THEN Error_Handler.Write_Debug('Verified Component not planning . . .'); END IF;
526
527 /************************************************************************
528 * If a ref. designator is being added or deleted, and if the Quantity
529 * Related is 1 then their must be a check that the number of designators
530 * is equal to the component_quantity.
531 *************************************************************************/
532 IF (p_ref_designator_rec.Transaction_Type = Bom_GLOBALS.G_OPR_CREATE) THEN
533 BEGIN
534
535 OPEN c_QuantityRelated;
536 FETCH c_QuantityRelated INTO l_Quantity;
537
538 --IF c_QuantityRelated%FOUND THEN
539 -- Bug No:3522842. For BOM BO Quantity Related validation will be done from Bom_Bo_Pvt.
540 IF c_QuantityRelated%FOUND AND Bom_Globals.Get_Bo_Identifier <> Bom_Globals.G_BOM_BO THEN
541
542 /*****************************************************************
543 --
544 -- If no exception is raised then validate the actual quantity of
545 -- ref. designators with respect to the component quantity
546 -- If the designators are not equal, then generate a WARNING.
547 --
548 -- If the component to which the reference designator is added is a
549 -- CREATE/ADD then the reference designator must all have CREATE/ADD,
550 -- in this only the reference designators on the current component
551 -- need to be considered, therefore the old component sequence_id is
552 -- same as component sequence id. But, if the parent component is
553 -- CREATE/CHANGE, then ref. designators to the old and new
554 -- component should be considered
555 ******************************************************************/
556
557 FOR acd IN c_acdtype LOOP
558 IF acd.acd_type = 2 /* CHANGE */
559 THEN
560 Calculate_Both_Totals
561 ( p_old_component_sequence_id =>
562 acd.old_component_sequence_id
563 , x_TotalQuantity => l_ref_qty
564 );
565 ELSE
566 Calculate_Both_Totals
567 ( p_old_component_sequence_id =>
568 p_ref_desg_Unexp_rec.component_sequence_id
569 , x_TotalQuantity => l_ref_qty);
570 END IF;
571 END LOOP;
572
573 -- dbms_output.put_line('Ref. Desg Qty: ' || to_char(l_ref_qty));
574 -- dbms_output.put_line('Quantity: ' || to_char(l_quantity));
575
576
577 /***************************************************************
578 -- Since the Component Quantity is Mandatory is must have been
579 -- validated prior to this call or it must have been defaulted
580 -- to 1 if the user has not supplied a value.
581 ****************************************************************/
582
583 IF (p_ref_designator_rec.acd_type = 1) THEN
584 l_change := 1;
585 ELSIF (p_ref_designator_rec.acd_type = 3) THEN
586 l_change := -1;
587 END IF;
588
589 IF l_quantity <> l_ref_qty + l_change THEN
590 -- Log a warning but do not set the error status
591 l_token_tbl.delete ; -- Added by MK on 11/14/00
592 l_token_tbl(1).token_name := 'REVISED_COMPONENT_NAME';
593 l_token_tbl(1).token_value :=
594 p_ref_designator_rec.component_item_name;
595 Error_Handler.Add_Error_Token
596 ( x_Mesg_Token_Tbl => l_Mesg_Token_tbl
597 , p_Mesg_Token_Tbl => l_Mesg_Token_Tbl
598 , p_message_name => 'BOM_QUANTITY_RELATED_INVALID'
599 , p_token_tbl => l_token_tbl
600 , p_message_type => 'W' -- Added by MK on 11/14/00
601 );
602 END IF;
603
604 END IF;
605 CLOSE c_QuantityRelated;
606 END; /* operation = CREATE ENDS */
607 END IF; /* If Operation = CREATE ENDS */
608
609 IF Bom_Globals.Get_Debug = 'Y' THEN Error_Handler.Write_Debug('Verified Quantity Related . . .'); END IF;
610
611 -- Done validating entity
612
613 x_return_status := l_return_status;
614 x_Mesg_Token_Tbl := l_Mesg_Token_Tbl;
615
616
617 /* When the Designator name is updated with New_designator, It should be checked that the new_desinator
618 does not exists already */
619
620 IF ( p_ref_designator_rec.new_reference_designator is not null
621 and p_ref_designator_rec.new_reference_designator <> FND_API.G_MISS_CHAR
622 and p_ref_designator_rec.transaction_type = Bom_Globals.G_OPR_UPDATE) THEN
623
624 select count(*) into l_temp_var
625 FROM BOM_REFERENCE_DESIGNATORS
626 WHERE COMPONENT_REFERENCE_DESIGNATOR = p_ref_designator_rec.new_reference_designator
627 AND COMPONENT_SEQUENCE_ID = p_Ref_Desg_Unexp_Rec.component_sequence_id
628 AND NVL(DECODE(ACD_TYPE, FND_API.G_MISS_NUM, null, acd_type), 0) =
629 NVL(DECODE(p_ref_designator_rec.acd_type, FND_API.G_MISS_NUM, null, p_ref_designator_rec.acd_type), 0) ;
630
631 IF (l_temp_var <>0) then
632
633 l_Token_Tbl(1).Token_Name := 'REFERENCE_DESIGNATOR_NAME';
634 l_Token_Tbl(1).Token_Value :=
635 p_ref_designator_rec.new_reference_designator;
636 l_token_tbl(2).token_name := 'REVISED_COMPONENT_NAME';
637 l_token_tbl(2).token_value := p_ref_designator_rec.component_item_name;
638
639 Error_Handler.Add_Error_Token
640 ( x_Mesg_token_tbl => l_Mesg_Token_Tbl
641 , p_Mesg_Token_Tbl => l_Mesg_Token_Tbl
642 , p_message_name => 'BOM_REF_DESG_ALREADY_EXISTS'
643 , p_token_tbl => l_token_tbl
644 );
645 RAISE FND_API.G_EXC_ERROR;
646 END IF;
647 END IF;
648
649 IF Bom_Globals.Get_Debug = 'Y' THEN Error_Handler.Write_Debug('Verified New_designator ...'); END IF;
650
651 EXCEPTION
652
653 WHEN FND_API.G_EXC_ERROR THEN
654
655 IF Bom_Globals.Get_Debug = 'Y' THEN Error_Handler.Write_Debug('Expected Error in Ref Desgs. Entity Validation '); END IF;
656
657 x_Mesg_Token_Tbl := l_Mesg_Token_Tbl;
658 x_return_status := FND_API.G_RET_STS_ERROR;
659
660 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
661
662 IF Bom_Globals.Get_Debug = 'Y' THEN Error_Handler.Write_Debug('UNExpected Error in Ref. Desgs Entity Validation '); END IF;
663 x_Mesg_Token_Tbl := l_Mesg_Token_Tbl;
664 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
665
666 WHEN OTHERS THEN
667 x_Mesg_Token_Tbl := l_Mesg_Token_Tbl;
668 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
669
670 END Check_Entity;
671
672 /********************************************************************
673 *
674 * Procedure : Check_Attributes
675 * Parameters IN : Reference Designator Record as given by the User
676 * Parameters OUT: Return_Status - Indicating success or faliure
677 * Mesg_Token_Tbl - Filled with any errors or warnings
678 * Purpose : Attribute validation will validate individual attributes
679 * and any errors will be populated in the Mesg_Token_Tbl
680 * and returned with a return_status.
681 ********************************************************************/
682
683 PROCEDURE Check_Attributes
684 ( x_return_status IN OUT NOCOPY VARCHAR2
685 , x_Mesg_Token_Tbl IN OUT NOCOPY Error_Handler.Mesg_Token_Tbl_Type
686 , p_ref_designator_rec IN Bom_Bo_Pub.Ref_Designator_Rec_Type
687 )
688 IS
689 l_token_tbl Error_Handler.Token_tbl_Type;
690 l_Mesg_token_Tbl Error_Handler.Mesg_Token_Tbl_Type;
691 BEGIN
692
693 x_return_status := FND_API.G_RET_STS_SUCCESS;
694
695 -- Validate ref_designator attributes
696
697 IF Bom_Globals.Get_Debug = 'Y' THEN Error_Handler.Write_Debug('Attribute Validation Starts . . . '); END IF;
698
699 IF p_ref_designator_rec.acd_type IS NOT NULL AND
700 ( ( Bom_Globals.Get_Bo_Identifier = Bom_Globals.G_ECO_BO AND
701 p_ref_designator_rec.acd_type NOT IN(1, 3)
702 ) OR
703 ( Bom_Globals.Get_Bo_Identifier = Bom_Globals.G_BOM_BO AND
704 p_ref_designator_rec.acd_type IS NOT NULL OR
705 p_ref_designator_rec.acd_type <> FND_API.G_MISS_NUM
706 )
707 )
708 THEN
709 IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_ERROR)
710 THEN
711 l_token_tbl(1).token_name := 'REF_DESG';
712 l_token_tbl(1).token_value := 'BOM_REF_DESG_CAP';
713 l_token_tbl(1).translate := TRUE;
714
715 Error_Handler.Add_Error_Token
716 ( x_Mesg_Token_tbl => l_Mesg_Token_tbl
717 , p_Mesg_Token_Tbl => l_Mesg_Token_Tbl
718 , p_message_name => 'BOM_RFD_SBC_ACD_TYPE_INVALID'
719 , p_token_tbl => l_token_tbl
720 );
721 END IF;
722 x_return_status := FND_API.G_RET_STS_ERROR;
723 END IF;
724
725 IF Bom_Globals.Get_Debug = 'Y' THEN Error_Handler.Write_Debug('After ACD_TYPE . . .'); END IF;
726
727 -- Done validating attributes
728 x_Mesg_Token_Tbl := l_Mesg_Token_Tbl;
729
730 EXCEPTION
731
732 WHEN FND_API.G_EXC_ERROR THEN
733
734 IF Bom_Globals.Get_Debug = 'Y' THEN Error_Handler.Write_Debug('Expected Error in Ref. Desgs Attr Validation . . .'); END IF;
735 x_Mesg_token_Tbl := l_Mesg_token_Tbl;
736 x_return_status := FND_API.G_RET_STS_ERROR;
737
738 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
739
740 IF Bom_Globals.Get_Debug = 'Y' THEN Error_Handler.Write_Debug('UNExpected Error in Ref. Desgs Attr Validation . . .'); END IF;
741 x_Mesg_Token_Tbl := l_Mesg_Token_Tbl;
742 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
743
744 WHEN OTHERS THEN
745 x_Mesg_Token_Tbl := l_Mesg_Token_Tbl;
746 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
747
748 END Check_Attributes;
749
750 /********************************************************************
751 *
752 * Procedure : Check_Entity_Delete
753 * Parameters IN : Reference Designator Record as given by the User
754 * Reference Designator Unexposed Record
755 * Parameters OUT: Return_Status - Indicating success or faliure
756 * Mesg_Token_Tbl - Filled with any errors or warnings
757 * Purpose : Entity Delete procedure will verify if the entity can
758 * can be deleted without violating any business rules.
759 * In case of errors the Mesg_token_Tbl is populated and
760 * process return with a status other than 'S'
761 * Warning will not prevent the entity from being deleted.
762 ********************************************************************/
763
764 PROCEDURE Check_Entity_Delete
765 ( x_return_status IN OUT NOCOPY VARCHAR2
766 , x_Mesg_Token_Tbl IN OUT NOCOPY Error_Handler.Mesg_Token_Tbl_Type
767 , p_ref_designator_rec IN Bom_Bo_Pub.Ref_Designator_Rec_Type
768 , p_Ref_Desg_Unexp_Rec IN Bom_Bo_Pub.Ref_Desg_Unexposed_Rec_Type
769 )
770 IS
771 l_return_status VARCHAR2(1) := FND_API.G_RET_STS_SUCCESS;
772 l_Mesg_Token_Tbl Error_Handler.Mesg_Token_Tbl_Type;
773 l_token_tbl Error_Handler.Token_Tbl_Type;
774
775 BEGIN
776
777 /***********************************************************************
778 -- If a Ref, Designator is being deleted and the Quantity Related for the
779 -- Component is 1 then a warning must be given if the the deletion is
780 -- going to make the number or designators <> Component Quantity.
781 ************************************************************************/
782 BEGIN
783 SELECT 'Related'
784 INTO l_dummy
785 FROM bom_inventory_components
786 WHERE quantity_related = 1
787 AND component_sequence_id =
788 p_ref_desg_Unexp_rec.component_sequence_id;
789
790
791 -- But the Quantity Related is 1 so log a warning
792 IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_ERROR)
793 -- This ideally should be a warning
794 THEN
795 -- Added token by MK on 12/06/00
796 l_token_tbl(1).token_name := 'REVISED_COMPONENT_NAME';
797 l_token_tbl(1).token_value :=
798 p_ref_designator_rec.component_item_name;
799
800 Error_Handler.Add_Error_Token
801 ( x_Mesg_Token_tbl => l_Mesg_Token_tbl
802 , p_Mesg_Token_Tbl => l_Mesg_Token_Tbl
803 , p_message_name => 'BOM_QUANTITY_RELATED_INVALID'
804 , p_message_type => 'W'
805
806 );
807 END IF;
808
809 EXCEPTION
810 WHEN NO_DATA_FOUND THEN
811 NULL;
812 END ;
813
814 -- Added by MK on 11/14/00
815 x_return_status := l_return_status ;
816 x_Mesg_Token_Tbl := l_Mesg_Token_Tbl;
817
818 END Check_Entity_Delete;
819
820 /*****************************************************************************
821 * Procedure : Check_Existence
822 * Parameters IN : Refernce Designator exposed column record
823 * Refernce Designator unexposed column record
824 * Parameters OUT: Old Reference Designator exposed column record
825 * Old Reference Designator unexposed column record
826 * Mesg Token Table
827 * Return Status
828 * Purpose : Check_Existence will poerform a query using the primary key
829 * information and will return a success if the operation is
830 * CREATE and the record EXISTS or will return an
831 * error if the operation is UPDATE and the record DOES NOT
832 * EXIST.
833 * In case of UPDATE if the record exists then the procedure
834 * will return the old record in the old entity parameters
835 * with a success status.
836 ****************************************************************************/
837 PROCEDURE Check_Existence
838 ( p_ref_designator_rec IN Bom_Bo_Pub.Ref_Designator_Rec_Type
839 , p_ref_desg_unexp_rec IN Bom_Bo_Pub.Ref_Desg_Unexposed_Rec_Type
840 , x_old_ref_designator_rec IN OUT NOCOPY Bom_Bo_Pub.Ref_Designator_Rec_Type
841 , x_old_ref_desg_unexp_rec IN OUT NOCOPY Bom_Bo_Pub.Ref_Desg_Unexposed_Rec_Type
842 , x_Mesg_Token_Tbl IN OUT NOCOPY Error_Handler.Mesg_Token_Tbl_Type
843 , x_Return_Status IN OUT NOCOPY VARCHAR2
844 )
845 IS
846 l_Mesg_Token_Tbl Error_Handler.Mesg_Token_Tbl_Type;
847 l_Return_Status VARCHAR2(1);
848 l_Token_Tbl Error_Handler.Token_Tbl_Type;
849 BEGIN
850 l_Token_Tbl(1).Token_Name := 'REFERENCE_DESIGNATOR_NAME';
851 l_Token_Tbl(1).Token_Value :=
852 p_ref_designator_rec.reference_designator_name;
853 l_token_tbl(2).token_name := 'REVISED_COMPONENT_NAME';
854 l_token_tbl(2).token_value := p_ref_designator_rec.component_item_name;
855
856 BOM_Ref_Designator_Util.Query_Row
857 ( p_ref_designator =>
858 p_ref_designator_rec.reference_designator_name
859 , p_component_sequence_id =>
860 p_ref_desg_unexp_rec.component_sequence_id
861 , p_acd_type => p_ref_designator_rec.acd_type
862 , x_Ref_Designator_Rec => x_old_ref_designator_rec
863 , x_Ref_Desg_Unexp_Rec => x_old_ref_desg_unexp_rec
864 , x_Return_Status => l_return_status
865 );
866
867 IF l_return_status = Bom_Globals.G_RECORD_FOUND AND
868 p_ref_designator_rec.transaction_type = Bom_Globals.G_OPR_CREATE
869 THEN
870 Error_Handler.Add_Error_Token
871 ( x_Mesg_token_tbl => l_Mesg_Token_Tbl
872 , p_Mesg_Token_Tbl => l_Mesg_Token_Tbl
873 , p_message_name => 'BOM_REF_DESG_ALREADY_EXISTS'
874 , p_token_tbl => l_token_tbl
875 );
876 l_return_status := FND_API.G_RET_STS_ERROR;
877 ELSIF l_return_status = Bom_Globals.G_RECORD_NOT_FOUND AND
878 p_ref_designator_rec.transaction_type IN
879 (Bom_Globals.G_OPR_UPDATE, Bom_Globals.G_OPR_DELETE)
880 THEN
881 Error_Handler.Add_Error_Token
882 ( x_Mesg_token_tbl => l_Mesg_Token_Tbl
883 , p_Mesg_Token_Tbl => l_Mesg_Token_Tbl
884 , p_message_name => 'BOM_REF_DESG_DOESNOT_EXIST'
885 , p_token_tbl => l_token_tbl
886 );
887 l_return_status := FND_API.G_RET_STS_ERROR;
888 ELSIF l_Return_status = FND_API.G_RET_STS_UNEXP_ERROR
889 THEN
890 Error_Handler.Add_Error_Token
891 ( x_Mesg_token_tbl => l_Mesg_Token_Tbl
892 , p_Mesg_Token_Tbl => l_Mesg_Token_Tbl
893 , p_message_name => NULL
894 , p_message_text =>
895 'Unexpected error while existence verification of ' ||
896 'Reference Designator '||
897 p_ref_designator_rec.reference_designator_name
898 , p_token_tbl => l_token_tbl
899 );
900 ELSE
901
902 /* Assign the relevant transaction type for SYNC operations */
903
904 IF p_ref_designator_rec.transaction_type = 'SYNC' THEN
905 IF l_return_status = Bom_Globals.G_RECORD_FOUND THEN
906 x_old_ref_designator_rec.transaction_type :=
907 Bom_Globals.G_OPR_UPDATE;
908 ELSE
909 x_old_ref_designator_rec.transaction_type :=
910 Bom_Globals.G_OPR_CREATE;
911 END IF;
912 END IF;
913 l_return_status := FND_API.G_RET_STS_SUCCESS;
914
915 END IF;
916
917 x_return_status := l_return_status;
918 x_Mesg_Token_Tbl := l_Mesg_Token_Tbl;
919
920 END Check_Existence;
921
922 PROCEDURE Check_Lineage
923 ( p_ref_designator_rec IN Bom_Bo_Pub.Ref_Designator_Rec_Type
924 , p_ref_desg_unexp_rec IN Bom_Bo_Pub.Ref_Desg_Unexposed_Rec_Type
925 , x_Mesg_Token_Tbl IN OUT NOCOPY Error_Handler.Mesg_Token_Tbl_Type
926 , x_Return_Status IN OUT NOCOPY VARCHAR2
927 )
928 IS
929 l_token_tbl Error_Handler.Token_Tbl_Type;
930 l_Mesg_Token_Tbl Error_Handler.Mesg_Token_Tbl_Type;
931
932 CURSOR c_GetComponent IS
933 SELECT revised_item_sequence_id
934 FROM bom_inventory_components
935 WHERE component_item_id= p_ref_desg_unexp_rec.component_item_id
936 AND operation_seq_num=p_ref_designator_rec.operation_sequence_number
937 AND effectivity_date = p_ref_designator_rec.start_effective_date
938 AND bill_sequence_id = p_ref_desg_unexp_rec.bill_sequence_id;
939 BEGIN
940 x_return_status := FND_API.G_RET_STS_SUCCESS;
941
942 FOR Component IN c_GetComponent LOOP
943 IF Component.revised_item_sequence_id <>
944 p_ref_desg_unexp_rec.revised_item_sequence_id
945 THEN
946 l_Token_Tbl(1).token_name :=
947 'REVISED_COMPONENT_NAME';
948 l_Token_Tbl(1).token_value :=
949 p_ref_designator_rec.component_item_name;
950 l_Token_Tbl(2).token_name :=
951 'REFERENCE_DESIGNATOR_NAME';
952 l_Token_Tbl(2).token_value :=
953 p_ref_designator_rec.reference_designator_name;
954 l_Token_Tbl(3).token_name :=
955 'REVISED_ITEM_NAME';
956 l_Token_Tbl(3).token_value :=
957 p_ref_designator_rec.revised_item_name;
958
959 Error_Handler.Add_Error_Token
960 ( p_Message_Name => 'BOM_REF_REV_ITEM_MISMATCH'
961 , p_Mesg_Token_Tbl => l_Mesg_Token_Tbl
962 , x_Mesg_Token_Tbl => l_Mesg_Token_Tbl
963 , p_Token_Tbl => l_Token_Tbl
964 );
965 x_return_status := FND_API.G_RET_STS_ERROR;
966 END IF;
967 END LOOP;
968
969 x_Mesg_Token_Tbl := l_Mesg_Token_Tbl;
970
971 END CHECK_LINEAGE;
972
973 PROCEDURE CHECK_ACCESS
974 ( p_ref_designator_rec IN Bom_Bo_Pub.Ref_Designator_Rec_Type
975 , p_ref_desg_unexp_rec IN Bom_Bo_Pub.Ref_Desg_Unexposed_Rec_Type
976 , x_Mesg_Token_Tbl IN OUT NOCOPY Error_Handler.Mesg_Token_Tbl_Type
977 , x_Return_Status IN OUT NOCOPY VARCHAR2
978 )
979 IS
980 l_return_status VARCHAR2(1);
981 l_mesg_token_tbl Error_Handler.Mesg_Token_Tbl_Type;
982 l_dummy VARCHAR2(80);
983 l_token_tbl Error_Handler.Token_Tbl_Type;
984 BEGIN
985 l_return_status := FND_API.G_RET_STS_SUCCESS;
986
987 /************************************************************************
988 *
989 * If the parent component is having an ACD_type of Disable then cannot
990 * perform any operations on the reference designator.
991 *
992 ************************************************************************/
993 BEGIN
994 SELECT 'parent not disabled'
995 INTO l_dummy
996 FROM bom_inventory_components bic
997 WHERE bic.component_sequence_id =
998 p_Ref_Desg_Unexp_Rec.component_sequence_id
999 AND NVL(bic.acd_type, 0) <> 3;
1000 EXCEPTION
1001 WHEN NO_DATA_FOUND THEN
1002 -- This means that the parent is disabled as
1003 -- the record search was fired to get a parent
1004 -- which is not disabled
1005
1006 l_token_Tbl(1).Token_Name := 'REF_DESG';
1007 l_token_Tbl(1).Token_Value :=
1008 p_Ref_Designator_Rec.Reference_Designator_Name;
1009
1010 Error_Handler.Add_Error_Token
1011 ( x_Mesg_Token_tbl => l_Mesg_token_tbl
1012 , p_Mesg_Token_Tbl => l_Mesg_Token_Tbl
1013 , p_message_name => 'BOM_RFD_COMP_ACD_TYPE_DISABLE'
1014 , p_Token_Tbl => l_Token_Tbl
1015 );
1016 l_return_status := FND_API.G_RET_STS_ERROR;
1017 WHEN OTHERS THEN
1018 --This means that an unexpected error has occured
1019 Error_Handler.Add_Error_Token
1020 ( x_Mesg_Token_tbl => l_Mesg_Token_tbl
1021 , p_Mesg_token_Tbl => l_Mesg_Token_Tbl
1022 , p_message_name => NULL
1023 , p_message_text => 'ERROR in Entity validation '
1024 || SUBSTR(SQLERRM, 1, 240)
1025 || ' ' || to_char(SQLCODE)
1026 );
1027
1028 l_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1029 END;
1030 x_return_status := l_return_status;
1031 x_Mesg_Token_Tbl := l_Mesg_Token_Tbl;
1032
1033 END CHECK_ACCESS;
1034
1035 /*
1036 ** BOM Business Object procedure calls
1037 */
1038 PROCEDURE Check_Entity
1039 ( x_return_status IN OUT NOCOPY VARCHAR2
1040 , x_Mesg_Token_Tbl IN OUT NOCOPY Error_Handler.Mesg_Token_Tbl_Type
1041 , p_bom_ref_designator_rec IN Bom_Bo_Pub.Bom_Ref_Designator_Rec_Type
1042 , p_bom_Ref_Desg_Unexp_Rec IN Bom_Bo_Pub.Bom_Ref_Desg_Unexp_Rec_Type
1043 )
1044 IS
1045 l_ref_designator_rec Bom_Bo_Pub.Ref_Designator_rec_Type;
1046 l_ref_desg_unexp_rec Bom_Bo_Pub.Ref_Desg_Unexposed_Rec_Type;
1047 BEGIN
1048 --Convert the BOM Record to ECO
1049
1050 Bom_Bo_Pub.Convert_Bomdesg_To_EcoDesg
1051 ( p_bom_ref_designator_rec => p_bom_ref_designator_rec
1052 , p_bom_ref_desg_unexp_rec => p_bom_ref_desg_unexp_rec
1053 , x_ref_designator_rec => l_Ref_designator_rec
1054 , x_ref_Desg_unexp_rec => l_ref_desg_unexp_rec
1055 );
1056
1057 -- Call Check Entity
1058 Bom_Validate_Ref_Designator.Check_Entity
1059 ( p_ref_designator_rec => l_ref_designator_rec
1060 , p_ref_desg_unexp_rec => l_Ref_Desg_unexp_rec
1061 , x_return_status => x_return_status
1062 , x_mesg_token_tbl => x_mesg_token_tbl
1063 );
1064
1065 END Check_Entity;
1066
1067 -- Procedure Attributes
1068
1069 PROCEDURE Check_Attributes
1070 ( x_return_status IN OUT NOCOPY VARCHAR2
1071 , x_Mesg_Token_Tbl IN OUT NOCOPY Error_Handler.Mesg_Token_Tbl_Type
1072 , p_Bom_ref_designator_rec IN Bom_Bo_Pub.Bom_Ref_Designator_Rec_Type
1073 )
1074 IS
1075 l_ref_designator_rec Bom_Bo_Pub.Ref_Designator_rec_Type;
1076 l_ref_desg_unexp_rec Bom_Bo_Pub.Ref_Desg_Unexposed_Rec_Type;
1077 BEGIN
1078 --Convert the BOM Record to ECO
1079
1080 Bom_Bo_Pub.Convert_Bomdesg_To_EcoDesg
1081 ( p_bom_ref_designator_rec => p_bom_ref_designator_rec
1082 , x_ref_designator_rec => l_Ref_designator_rec
1083 , x_ref_Desg_unexp_rec => l_ref_desg_unexp_rec
1084 );
1085
1086 -- Call Check Entity
1087 Bom_Validate_Ref_Designator.Check_Attributes
1088 ( p_ref_designator_rec => l_ref_designator_rec
1089 , x_return_status => x_return_status
1090 , x_mesg_token_tbl => x_mesg_token_tbl
1091 );
1092
1093 END Check_Attributes;
1094
1095 -- Procedure Entity_Delete
1096
1097 PROCEDURE Check_Entity_Delete
1098 ( x_return_status IN OUT NOCOPY VARCHAR2
1099 , x_Mesg_Token_Tbl IN OUT NOCOPY Error_Handler.Mesg_Token_Tbl_Type
1100 , p_bom_ref_designator_rec IN Bom_Bo_Pub.Bom_Ref_Designator_Rec_Type
1101 , p_bom_Ref_Desg_Unexp_Rec IN Bom_Bo_Pub.Bom_Ref_Desg_Unexp_Rec_Type
1102 )
1103 IS
1104 l_ref_designator_rec Bom_Bo_Pub.Ref_Designator_rec_Type;
1105 l_ref_desg_unexp_rec Bom_Bo_Pub.Ref_Desg_Unexposed_Rec_Type;
1106 BEGIN
1107 --Convert the BOM Record to ECO
1108
1109 Bom_Bo_Pub.Convert_Bomdesg_To_EcoDesg
1110 ( p_bom_ref_designator_rec => p_bom_ref_designator_rec
1111 , p_bom_ref_desg_unexp_rec => p_bom_ref_desg_unexp_rec
1112 , x_ref_designator_rec => l_Ref_designator_rec
1113 , x_ref_Desg_unexp_rec => l_ref_desg_unexp_rec
1114 );
1115
1116 -- Call Check Entity
1117 Bom_Validate_Ref_Designator.Check_Entity_Delete
1118 ( p_ref_designator_rec => l_ref_designator_rec
1119 , p_ref_desg_unexp_rec => l_Ref_Desg_unexp_rec
1120 , x_return_status => x_return_status
1121 , x_mesg_token_tbl => x_mesg_token_tbl
1122 );
1123
1124
1125 END Check_Entity_Delete;
1126
1127 PROCEDURE Check_Existence
1128 ( p_bom_ref_designator_rec IN Bom_Bo_Pub.Bom_Ref_Designator_Rec_Type
1129 , p_bom_ref_desg_unexp_rec IN Bom_Bo_Pub.Bom_Ref_Desg_Unexp_Rec_Type
1130 , x_old_bom_ref_designator_rec IN OUT NOCOPY Bom_Bo_Pub.Bom_Ref_Designator_Rec_Type
1131 , x_old_bom_ref_desg_unexp_rec IN OUT NOCOPY Bom_Bo_Pub.Bom_Ref_Desg_Unexp_Rec_Type
1132 , x_Mesg_Token_Tbl IN OUT NOCOPY Error_Handler.Mesg_Token_Tbl_Type
1133 , x_Return_Status IN OUT NOCOPY VARCHAR2
1134 )
1135 IS
1136 l_ref_designator_rec Bom_Bo_Pub.Ref_Designator_rec_Type;
1137 l_ref_desg_unexp_rec Bom_Bo_Pub.Ref_Desg_Unexposed_Rec_Type;
1138 l_old_ref_designator_rec Bom_Bo_Pub.Ref_Designator_Rec_Type;
1139 l_old_ref_desg_unexp_rec Bom_Bo_Pub.Ref_Desg_Unexposed_Rec_Type;
1140
1141 BEGIN
1142 --Convert the BOM Record to ECO
1143
1144 Bom_Bo_Pub.Convert_Bomdesg_To_EcoDesg
1145 ( p_bom_ref_designator_rec => p_bom_ref_designator_rec
1146 , p_bom_ref_desg_unexp_rec => p_bom_ref_desg_unexp_rec
1147 , x_ref_designator_rec => l_Ref_designator_rec
1148 , x_ref_Desg_unexp_rec => l_ref_desg_unexp_rec
1149 );
1150
1151 -- dbms_output.put_line('Before Check Existence . . . ');
1152 -- dbms_output.put_line('Component Sequence: ' || l_ref_desg_unexp_rec.component_sequence_id);
1153 -- dbms_output.put_line('Reference Designator ' || l_Ref_designator_rec.reference_designator_name);
1154
1155 -- Call Check Entity
1156 Bom_Validate_Ref_Designator.Check_Existence
1157 ( p_ref_designator_rec => l_ref_designator_rec
1158 , p_ref_desg_unexp_rec => l_Ref_Desg_unexp_rec
1159 , x_old_ref_designator_rec => l_old_ref_designator_rec
1160 , x_old_ref_desg_unexp_rec => l_old_ref_desg_unexp_rec
1161 , x_return_status => x_return_status
1162 , x_mesg_token_tbl => x_mesg_token_tbl
1163 );
1164
1165 -- Convert ECO Record to BOM before returning
1166 Bom_Bo_Pub.Convert_EcoDesg_To_BomDesg
1167 ( p_ref_designator_rec => l_old_ref_designator_rec
1168 , p_ref_desg_unexp_rec => l_old_ref_desg_unexp_rec
1169 , x_bom_ref_designator_rec => x_old_bom_ref_designator_rec
1170 , x_bom_ref_desg_unexp_rec => x_old_bom_ref_desg_unexp_rec
1171 );
1172
1173 END Check_Existence;
1174
1175 PROCEDURE Check_Lineage
1176 ( p_bom_ref_designator_rec IN Bom_Bo_Pub.bom_Ref_Designator_Rec_Type
1177 , p_bom_ref_desg_unexp_rec IN Bom_Bo_Pub.bom_Ref_Desg_Unexp_Rec_Type
1178 , x_Mesg_Token_Tbl IN OUT NOCOPY Error_Handler.Mesg_Token_Tbl_Type
1179 , x_Return_Status IN OUT NOCOPY VARCHAR2
1180 )
1181 IS
1182 l_ref_designator_rec Bom_Bo_Pub.Ref_Designator_rec_Type;
1183 l_ref_desg_unexp_rec Bom_Bo_Pub.Ref_Desg_Unexposed_Rec_Type;
1184 BEGIN
1185 --Convert the BOM Record to ECO
1186
1187 Bom_Bo_Pub.Convert_Bomdesg_To_EcoDesg
1188 ( p_bom_ref_designator_rec => p_bom_ref_designator_rec
1189 , p_bom_ref_desg_unexp_rec => p_bom_ref_desg_unexp_rec
1190 , x_ref_designator_rec => l_Ref_designator_rec
1191 , x_ref_Desg_unexp_rec => l_ref_desg_unexp_rec
1192 );
1193
1194 -- Call Check Entity
1195 Bom_Validate_Ref_Designator.Check_Lineage
1196 ( p_ref_designator_rec => l_ref_designator_rec
1197 , p_ref_desg_unexp_rec => l_Ref_Desg_unexp_rec
1198 , x_return_status => x_return_status
1199 , x_mesg_token_tbl => x_mesg_token_tbl
1200 );
1201
1202 END Check_Lineage;
1203
1204 PROCEDURE CHECK_ACCESS
1205 ( p_bom_ref_designator_rec IN Bom_Bo_Pub.Bom_Ref_Designator_Rec_Type
1206 , p_bom_ref_desg_unexp_rec IN Bom_Bo_Pub.Bom_Ref_Desg_Unexp_Rec_Type
1207 , x_Mesg_Token_Tbl IN OUT NOCOPY Error_Handler.Mesg_Token_Tbl_Type
1208 , x_Return_Status IN OUT NOCOPY VARCHAR2
1209 )
1210 IS
1211 l_ref_designator_rec Bom_Bo_Pub.Ref_Designator_rec_Type;
1212 l_ref_desg_unexp_rec Bom_Bo_Pub.Ref_Desg_Unexposed_Rec_Type;
1213 BEGIN
1214 --Convert the BOM Record to ECO
1215
1216 Bom_Bo_Pub.Convert_Bomdesg_To_EcoDesg
1217 ( p_bom_ref_designator_rec => p_bom_ref_designator_rec
1218 , p_bom_ref_desg_unexp_rec => p_bom_ref_desg_unexp_rec
1219 , x_ref_designator_rec => l_Ref_designator_rec
1220 , x_ref_Desg_unexp_rec => l_ref_desg_unexp_rec
1221 );
1222
1223 -- Call Check Access
1224 Bom_Validate_Ref_Designator.Check_Access
1225 ( p_ref_designator_rec => l_ref_designator_rec
1226 , p_ref_desg_unexp_rec => l_Ref_Desg_unexp_rec
1227 , x_return_status => x_return_status
1228 , x_mesg_token_tbl => x_mesg_token_tbl
1229 );
1230
1231 END Check_Access;
1232
1233
1234 END BOM_Validate_Ref_Designator;