DBA Data[Home] [Help]

PACKAGE BODY: APPS.OE_LINE_DETAILS_PKG

Source


1 PACKAGE BODY OE_LINE_DETAILS_PKG AS
2 /* $Header: oexdetb.pls 115.2 99/07/16 08:28:53 porting shi $ */
3     PROCEDURE Raise_Exception
4 	(
5 		Routine    IN VARCHAR2,
6 		Operation  IN VARCHAR2,
7 		Message    IN VARCHAR2
8 	) IS
9 
10 	x	BOOLEAN;
11 
12      BEGIN
13 	x :=OE_MSG.Set_Buffer_Message('OE_EXC_INTERNAL_EXCEPTION',
14 				'ROUTINE', Routine);
15 	x :=OE_MSG.Set_Buffer_Message('OE_EXC_INTERNAL_EXCEPTION',
16 				'OPERATION', Operation);
17 	x :=OE_MSG.Set_Buffer_Message('OE_EXC_INTERNAL_EXCEPTION',
18 				'MESSAGE',Message|| ' sqlcode:'||SQLCODE);
19 
20     END Raise_Exception;
21 
22 
23     PROCEDURE Manually_Insert_Detail
24          (      P_Line_Detail_Id			NUMBER,
25 		P_Creation_Date			IN OUT  DATE,
26                 P_Created_By				NUMBER,
27 		P_Last_Update_Date		IN OUT  DATE,
28                 P_Last_Updated_By			NUMBER,
29                 P_Last_Update_Login			NUMBER,
30                 P_Line_Id				NUMBER,
31                 P_Inventory_Item_Id			NUMBER,
32                 P_Component_Sequence_Id			NUMBER,
33                 P_Component_Code			VARCHAR2,
34                 P_Quantity				NUMBER,
35                 P_Schedule_Date				DATE,
36                 P_Lot_Number				VARCHAR2,
37                 P_Subinventory				VARCHAR2,
38                 P_Warehouse_Id				NUMBER,
39                 P_Revision				VARCHAR2,
40                 P_Customer_Requested_Lot_Flag		VARCHAR2,
41                 P_Schedule_Status_Code			VARCHAR2,
42                 P_Context				VARCHAR2,
43                 P_Attribute1				VARCHAR2,
44                 P_Attribute2				VARCHAR2,
45                 P_Attribute3				VARCHAR2,
46                 P_Attribute4				VARCHAR2,
47                 P_Attribute5				VARCHAR2,
48                 P_Attribute6				VARCHAR2,
49                 P_Attribute7				VARCHAR2,
50                 P_Attribute8				VARCHAR2,
51                 P_Attribute9				VARCHAR2,
52                 P_Attribute10				VARCHAR2,
53                 P_Attribute11				VARCHAR2,
54                 P_Attribute12				VARCHAR2,
55                 P_Attribute13				VARCHAR2,
56                 P_Attribute14				VARCHAR2,
57                 P_Attribute15				VARCHAR2,
58                 P_Included_Item_Flag			VARCHAR2,
59                 P_Component_Ratio			NUMBER,
60                 P_Shippable_Flag			VARCHAR2,
61                 P_Transactable_Flag			VARCHAR2,
62                 P_Reservable_Flag			VARCHAR2,
63                 P_Released_Flag				VARCHAR2,
64                 P_Demand_Class_Code			VARCHAR2,
65                 P_Unit_Code				VARCHAR2,
66                 P_Required_For_Revenue_Flag  IN OUT	VARCHAR2,
67                 P_Quantity_Svrid			NUMBER,
68                 P_Warehouse_Svrid			NUMBER,
69                 P_Demand_Class_Svrid			NUMBER,
70                 P_Date_Svrid				NUMBER,
71                 P_Customer_Requested_Svrid		NUMBER,
72                 P_Df_Svrid				NUMBER,
73                 P_Delivery				NUMBER,
74                 P_Update_Flag				VARCHAR2,
75                 P_Configuration_Item_Flag		VARCHAR2,
76 		P_Result			IN OUT  VARCHAR2,
77 		P_Dpw_Assigned_Flag			VARCHAR2 DEFAULT 'N'
78 		) IS
79    temp_sysdate DATE;
80    is_option VARCHAR2(1);
81    Cursor chk_for_option is
82     SELECT 'Y'
83     FROM SO_LINES L, SO_LINE_DETAILS D
84     WHERE L.LINE_ID = D.LINE_ID
85     AND D.LINE_DETAIL_ID = P_Line_Detail_Id
86     AND L.OPTION_FLAG = 'Y';
87 BEGIN
88 
89         SELECT SYSDATE
90         INTO   temp_sysdate
91         FROM   DUAL;
92 
93 	   P_Creation_Date    := temp_sysdate;
94         P_Last_Update_Date := temp_sysdate;
95 
96       OPEN chk_for_option;
97 	 FETCH chk_for_option into is_option;
98 	 if is_option = 'Y' OR
99 	   P_Included_Item_Flag  = 'Y' THEN
100 	      SELECT DECODE( REQUIRED_FOR_REVENUE, 1, 'Y', 'N' )
101 	      INTO  P_Required_For_Revenue_Flag
102 	      FROM   BOM_INVENTORY_COMPONENTS
103 	      WHERE  COMPONENT_SEQUENCE_ID = P_Component_Sequence_Id;
104      else
105          P_Required_For_Revenue_Flag := 'Y';
106      end if;
107 
108 
109 
110 	INSERT INTO SO_LINE_DETAILS
111          (      LINE_DETAIL_ID,
112 		CREATION_DATE,
113                 CREATED_BY,
114 		LAST_UPDATE_DATE,
115                 LAST_UPDATED_BY,
116                 LAST_UPDATE_LOGIN,
117                 LINE_ID,
118                 INVENTORY_ITEM_ID,
119                 COMPONENT_SEQUENCE_ID,
120                 COMPONENT_CODE,
121                 QUANTITY,
122                 SCHEDULE_DATE,
123                 LOT_NUMBER,
124                 SUBINVENTORY,
125                 WAREHOUSE_ID,
126                 REVISION,
127                 CUSTOMER_REQUESTED_LOT_FLAG,
128                 SCHEDULE_STATUS_CODE,
129                 CONTEXT,
130                 ATTRIBUTE1,
131                 ATTRIBUTE2,
132                 ATTRIBUTE3,
133                 ATTRIBUTE4,
134                 ATTRIBUTE5,
135                 ATTRIBUTE6,
136                 ATTRIBUTE7,
137                 ATTRIBUTE8,
138                 ATTRIBUTE9,
139                 ATTRIBUTE10,
140                 ATTRIBUTE11,
141                 ATTRIBUTE12,
142                 ATTRIBUTE13,
143                 ATTRIBUTE14,
144                 ATTRIBUTE15,
145                 INCLUDED_ITEM_FLAG,
146                 COMPONENT_RATIO,
147                 SHIPPABLE_FLAG,
148                 TRANSACTABLE_FLAG,
149                 RESERVABLE_FLAG,
150                 RELEASED_FLAG,
151                 DEMAND_CLASS_CODE,
152                 UNIT_CODE,
153                 REQUIRED_FOR_REVENUE_FLAG,
154                 QUANTITY_SVRID,
155                 WAREHOUSE_SVRID,
156                 DEMAND_CLASS_SVRID,
157                 DATE_SVRID,
158                 CUSTOMER_REQUESTED_SVRID,
159                 DF_SVRID,
160                 DELIVERY,
161                 UPDATE_FLAG,
162                 CONFIGURATION_ITEM_FLAG,
163 		DPW_ASSIGNED_FLAG)
164 	VALUES
165          (      P_Line_Detail_Id,
166 		P_Creation_Date,
167                 P_Created_By,
168 		P_Last_Update_Date,
169                 P_Last_Updated_By,
170                 P_Last_Update_Login,
171                 P_Line_Id,
172                 P_Inventory_Item_Id,
173                 P_Component_Sequence_Id,
174                 P_Component_Code,
175                 P_Quantity,
176                 P_Schedule_Date,
177                 P_Lot_Number,
178                 P_Subinventory,
179                 P_Warehouse_Id,
180                 P_Revision,
181                 P_Customer_Requested_Lot_Flag,
182                 P_Schedule_Status_Code,
183                 P_Context,
184                 P_Attribute1,
185                 P_Attribute2,
186                 P_Attribute3,
187                 P_Attribute4,
188                 P_Attribute5,
189                 P_Attribute6,
190                 P_Attribute7,
191                 P_Attribute8,
192                 P_Attribute9,
193                 P_Attribute10,
194                 P_Attribute11,
195                 P_Attribute12,
196                 P_Attribute13,
197                 P_Attribute14,
198                 P_Attribute15,
199                 P_Included_Item_Flag,
200                 P_Component_Ratio,
201                 P_Shippable_Flag,
202                 P_Transactable_Flag,
203                 P_Reservable_Flag,
204                 P_Released_Flag,
205                 P_Demand_Class_Code,
206                 P_Unit_Code,
207                 P_Required_For_Revenue_Flag,
208                 P_Quantity_Svrid,
209                 P_Warehouse_Svrid,
210                 P_Demand_Class_Svrid,
211                 P_Date_Svrid,
212                 P_Customer_Requested_Svrid,
213                 P_Df_Svrid,
214                 P_Delivery,
215                 P_Update_Flag,
216                 P_Configuration_Item_Flag,
217 		P_Dpw_Assigned_Flag);
218 
219 	P_Result := 'Y';
220 
221 EXCEPTION
222 	WHEN OTHERS THEN
223 		P_Result := 'N';
224 
225 		Raise_Exception ('OE_LINE_DETAILS_PKG.Insert_Manual_Detail',
226 				 '',
227 				 SQLERRM);
228 
229 END Manually_Insert_Detail;
230 
231 
232 /*
233 ----------------------------------------------------------------------
234   This procedure validates the scheduling attributes for a line
235   detail.
236 
237   Here are the rules for this function:
238 
239   * You cannot specify lot or revision unless placing a reservation.
240 
241   * For placing reservations or reserved lines,  the following rules
242     must be obeyed:
243 
244 	* If Revision Control is turned ON,  then if a revision is
245           specified,  then the Lot and Subinventory must also be
246           specified.
247 
248 	* If Lot Control is turned ON, then if a Lot Number is
249           specified,  then so must be a Subinventory.
250 
251 
252 
253   * You cannot undemand, unreserve or unschedule while changing the
254     warehouse, schedule date or demand class.
255 
256   * You cannot undemand, unreserve, unschedule or ATP inquiry while
257     changing the quantity, subinventory, lot or revision.
258 
259 
260 ----------------------------------------------------------------------
261 */
262 
263   PROCEDURE Validate_Scheduling_Attributes
264 	(
265 		P_DB_RECORD_FLAG		VARCHAR2,
266 		P_DB_QUANTITY			NUMBER,
267 		P_DB_WAREHOUSE_ID		NUMBER,
268 		P_DB_SCHEDULE_DATE		DATE,
269 		P_DB_SUBINVENTORY		VARCHAR2,
270 		P_DB_REVISION			VARCHAR2,
271 		P_DB_LOT_NUMBER			VARCHAR2,
272 		P_DB_DEMAND_CLASS_CODE		VARCHAR2,
273 		P_QUANTITY			NUMBER,
274 		P_WAREHOUSE_ID			NUMBER,
275 		P_SCHEDULE_DATE			DATE,
276 		P_SUBINVENTORY			VARCHAR2,
277 		P_REVISION			VARCHAR2,
278 		P_LOT_NUMBER			VARCHAR2,
279 		P_DEMAND_CLASS_CODE		VARCHAR2,
280 		P_REVISION_CONTROL_FLAG		VARCHAR2,
281 		P_LOT_CONTROL_FLAG		VARCHAR2,
282 		P_SCHEDULE_ACTION_CODE		VARCHAR2,
283 		P_SCHEDULE_STATUS_CODE		VARCHAR2,
284 		P_RESULT		IN OUT	VARCHAR2
285 	) IS
286 
287 
288   Success_Flag	BOOLEAN := TRUE;
289 
290 /*
291 ----------------------------------------------------------------------
292 
293 This local function returns TRUE if both lot and revision are null
294 Otherwise, it sets the message 'OE_SCH_LOT_REV_EXIST' and returns
295 FALSE
296 
297 ----------------------------------------------------------------------
298 */
299   FUNCTION Check_Rev_Lot_Null RETURN BOOLEAN IS
300   BEGIN
301 
302 
303     IF (P_Lot_Number IS NULL) and (P_Revision IS NULL) THEN
304 
305       Return (TRUE);
306 
307     END IF;
308 
309     OE_MSG.Set_Buffer_Message('OE_SCH_LOT_REV_EXIST');
310     Return (FALSE);
311 
312   END Check_Rev_Lot_Null;
313 
314 /*
315 ----------------------------------------------------------------------
316 
317 This local function checks for revision control.  If revision control
318 flag is turned on, then if a revision is specified, so must be a lot,
319 and a subinventory.
320 
321 ----------------------------------------------------------------------
322 */
323   FUNCTION Check_Revision_Control RETURN BOOLEAN IS
324   BEGIN
325 
326     IF (P_Revision_Control_Flag = 'Y') THEN
327 
328       IF (P_Revision IS NULL) AND
329          ((P_Lot_Number IS NOT NULL) OR (P_Subinventory IS NOT NULL)) THEN
330 
331         OE_MSG.Set_Buffer_Message('OE_SCH_ENTER_REVISION');
332         Return (FALSE);
333 
334       END IF;
335 
336     END IF;
337 
338     RETURN (TRUE);
339 
340   END Check_Revision_Control;
341 
342 
343 
344 /*
345 ----------------------------------------------------------------------
346 This function checks for Lot Control.  If a lot is specified while
347 the lot control is turned on,  then a subinventory must also be
348 specified.
349 ----------------------------------------------------------------------
350 */
351   FUNCTION Check_Lot_Control RETURN BOOLEAN IS
352   BEGIN
353 
354     IF (P_Lot_Control_Flag = 'Y') THEN
355 
356       IF (P_Lot_Number IS NULL) AND
357          (P_Subinventory IS NOT NULL) THEN
358 
359         OE_MSG.Set_Buffer_Message('OE_SCH_ENTER_LOT');
360         Return(FALSE);
361 
362       END IF;
363 
364     END IF;
365 
366     Return (TRUE);
367 
368   END Check_Lot_Control;
369 
370 
371 /*
372 ----------------------------------------------------------------------
373 This function makes sure that Revision and Lot controls are not
374 violated.
375 ----------------------------------------------------------------------
376 */
377   FUNCTION Check_Controls RETURN BOOLEAN IS
378   BEGIN
379 
380 
381     Return (Check_Revision_Control) AND
382            (Check_Lot_Control);
383 
384 
385   END Check_Controls;
386 
387 
388 
389 /*
390 ----------------------------------------------------------------------
391 Logic for if schedule action is NULL.
392 ----------------------------------------------------------------------
393 */
394   FUNCTION Check_Null_Action RETURN BOOLEAN IS
395   BEGIN
396 
397 
398 /*
399   If the line is already demanded, then make sure that you have not
400   specified any lot or revision.
401 */
402     IF (P_Schedule_Status_Code IS NULL) OR
403        (P_Schedule_Status_Code = 'DEMANDED') THEN
404 
405 	Return (Check_Rev_Lot_Null);
406 
407 
408 /*
409   If the line is reserved, make sure that revision and lot control are
410   not violated.
411 */
412     ELSIF (P_Schedule_Status_Code = 'RESERVED') THEN
413 
414         Return (Check_Controls);
415 
416     END IF;
417 
418     Return (TRUE);
419 
420   END Check_Null_Action;
421 
422 
423 
424 /*
425 ----------------------------------------------------------------------
426   This function makes sure that revision and lot do not conflict with
427   the schedule action or the existing schedule status.
428 ----------------------------------------------------------------------
429 */
430   FUNCTION Check_Revision_Lot RETURN BOOLEAN IS
431 
435 
432     Rev_Lot_Passed_Flag  BOOLEAN := TRUE;
433 
434   BEGIN
436     IF (P_Schedule_Action_Code) IN ('DEMAND', 'ATP CHECK') THEN
437 
438       Rev_Lot_Passed_Flag := Check_Rev_Lot_Null;
439 
440     ELSIF (P_Schedule_Action_Code = 'RESERVE') THEN
441 
442       Rev_Lot_Passed_Flag := Check_Controls;
443 
444     ELSIF (P_Schedule_Action_Code IS NULL) THEN
445 
446       Rev_Lot_Passed_Flag := Check_Null_Action;
447 
448     END IF;
449 
450 
451     RETURN Rev_Lot_Passed_Flag;
452 
453 
454   END Check_Revision_Lot;
455 
456 
457   FUNCTION Warehouse_Not_Changed RETURN BOOLEAN IS
458   BEGIN
459 
460     IF (P_Warehouse_ID  <> P_DB_Warehouse_ID) THEN
461 
462       OE_MSG.Set_Buffer_Message('OE_SCH_WH_CHG_NOT_ALLOWED');
463       Return (FALSE);
464 
465     END IF;
466 
467     Return (TRUE);
468 
469   END Warehouse_Not_Changed;
470 
471 
472   FUNCTION Schedule_Date_Not_Changed RETURN BOOLEAN IS
473   BEGIN
474 
475     IF (P_Schedule_Date  <> P_DB_Schedule_Date) THEN
476 
477       OE_MSG.Set_Buffer_Message('OE_SCH_DATE_CHG_NOT_ALLOWED');
478       Return (FALSE);
479 
480     END IF;
481 
482     Return (TRUE);
483 
484   END Schedule_Date_Not_Changed;
485 
486   FUNCTION Demand_Class_Not_Changed RETURN BOOLEAN IS
487   BEGIN
488 
489     IF (P_Demand_Class_Code  <> P_DB_Demand_Class_Code) THEN
490 
491       OE_MSG.Set_Buffer_Message('OE_SCH_DEM_CL_CHG_NOT_ALLOWED');
492       Return (FALSE);
493 
494     END IF;
495 
496     Return (TRUE);
497 
498   END Demand_Class_Not_Changed;
499 
500 
501   FUNCTION Quantity_Not_Changed RETURN BOOLEAN IS
502   BEGIN
503 
504     IF (P_Quantity  <> P_DB_Quantity) THEN
505 
506       OE_MSG.Set_Buffer_Message('OE_SCH_RES_QTY_CHG_NOT_ALLOWED');
507       Return (FALSE);
508 
509     END IF;
510 
511     Return (TRUE);
512 
513   END Quantity_Not_Changed;
514 
515 
516 
517   FUNCTION Subinventory_Not_Changed RETURN BOOLEAN IS
518   BEGIN
519 
520     IF (P_Subinventory  <> P_DB_Subinventory) THEN
521 
522       OE_MSG.Set_Buffer_Message('OE_SCH_SUBINV_CHG_NOT_ALLOWED');
523       Return (FALSE);
524 
525     END IF;
526 
527     Return (TRUE);
528 
529   END Subinventory_Not_Changed;
530 
531 
532   FUNCTION Lot_Not_Changed RETURN BOOLEAN IS
533   BEGIN
534 
535     IF (P_Lot_Number  <> P_DB_Lot_Number) THEN
536 
537       OE_MSG.Set_Buffer_Message('OE_SCH_LOT_CHG_NOT_ALLOWED');
538       Return (FALSE);
539 
540     END IF;
541 
542     Return (TRUE);
543 
544   END Lot_Not_Changed;
545 
546 
547   FUNCTION Revision_Not_Changed RETURN BOOLEAN IS
548   BEGIN
549 
550     IF (P_Revision  <> P_DB_Revision) THEN
551 
552       OE_MSG.Set_Buffer_Message('OE_SCH_REV_CHG_NOT_ALLOWED');
553       Return (FALSE);
554 
555     END IF;
556 
557     Return (TRUE);
558 
559   END Revision_Not_Changed;
560 
561 
562 /*
563   Beginning of validate_scheduling_attributes
564 */
565 
566   BEGIN
567 
568     Success_Flag := Check_Revision_Lot;
569 
570     IF (Success_Flag) THEN
571 
572       IF (P_Schedule_Action_Code IS NOT NULL) AND
573          (P_DB_Record_Flag  =  'Y') THEN
574 
575         IF (P_Schedule_Action_Code IN
576                   ('UNDEMAND', 'UNRESERVE', 'UNSCHEDULE', 'ATP CHECK')) THEN
577 
578 /*
579    The following statement is interesting.  The order of the clauses is
580    very important.  If user is undemanding or unreserving, it cannot
581    be combined with a change of warehouse, schedule_date, or demand_class.
582 */
583 
584           IF (P_Schedule_Action_Code <> 'ATP CHECK') THEN
585 
586             Success_Flag := (Warehouse_Not_Changed) AND
587 		            (Schedule_Date_Not_Changed) AND
588 		            (Demand_Class_Not_Changed);
589 
590           END IF;
591 
592 /*
593    Similar to above, the order of the and clauses is important.
594    If the action is undo something, or ATP inquiry, then users
595    cannot modify quantity, subinventory, lot or revision either!
596 */
597 
598 	  IF (Success_Flag) THEN
599 
600             Success_Flag := (Quantity_Not_Changed) AND
601                             (Subinventory_Not_Changed) AND
602                             (Lot_Not_Changed) AND
603                             (Revision_Not_Changed);
604 
605           END IF;
606 
607         END IF;  -- UN Actions or ATP Check
608 
609       END IF; -- DB_Record_Flag
610 
611     END IF; -- IF Success_Flag
612 
613 
614     IF (Success_Flag) THEN
615       P_Result := 'Y';
616     ELSE
617       P_Result := 'N';
618     END IF;
619 
620     RETURN;
621 
622   END Validate_Scheduling_Attributes;
623 
624 
625 END OE_LINE_DETAILS_PKG;