DBA Data[Home] [Help]

PACKAGE BODY: APPS.PJM_COMMITMENT_UTILS

Source


1 PACKAGE BODY PJM_COMMITMENT_UTILS AS
2 /* $Header: PJMCMTUB.pls 120.1 2006/07/10 23:13:51 yliou noship $ */
3 
4 FUNCTION REQ_Type
5 ( X_Org_Id   IN NUMBER
6 , X_Subtype  IN VARCHAR2
7 ) return VARCHAR2 IS
8 
9 L_Type_Name VARCHAR2(80);
10 
11 BEGIN
12 
13     SELECT T.TYPE_NAME into L_Type_Name
14     from PO_DOCUMENT_TYPES_ALL_TL T
15     WHERE T.LANGUAGE = userenv('LANG')
16       and T.DOCUMENT_TYPE_CODE = 'REQUISITION'
17       AND T.DOCUMENT_SUBTYPE  = X_Subtype
18       and NVL(T.org_id, -99) = NVL(X_Org_Id, -99);
19 
20   RETURN ( L_Type_Name );
21 
22 EXCEPTION
23 WHEN OTHERS THEN
24   RETURN ( NULL );
25 
26 END REQ_Type;
27 
28 
29 FUNCTION BOM_RESOURCE
30 ( X_resource_id IN NUMBER
31 ) return VARCHAR2 IS
32 
33 L_Resource_Code VARCHAR2(10);
34 
35 BEGIN
36 
37   select resource_code into L_Resource_Code
38   from bom_resources
39   where resource_id = X_resource_id;
40 
41   RETURN ( L_Resource_Code );
42 
43 EXCEPTION
44 WHEN OTHERS THEN
45   RETURN ( NULL );
46 
47 END BOM_RESOURCE;
48 
49 
50 FUNCTION Item_Number
51 ( X_Item_Id         IN NUMBER
52 , X_Organization_Id IN NUMBER
53 ) return VARCHAR2 IS
54 
55 L_Item_Number VARCHAR2(40);
56 
57 BEGIN
58 
59   SELECT segment1 into L_Item_Number
60   from mtl_system_items_b
61   where inventory_item_id = X_Item_Id
62   and organization_id = X_Organization_Id;
63 
64   RETURN ( L_Item_Number );
65 
66 EXCEPTION
67 WHEN OTHERS THEN
68   RETURN ( NULL );
69 
70 END Item_Number;
71 
72 
73 FUNCTION PO_EXP_ORG
74 ( X_org    IN NUMBER
75 , X_entity IN NUMBER
76 , X_seq    IN NUMBER
77 , X_dest   IN VARCHAR2
78 ) return NUMBER IS
79 
80 L_Exp_Org NUMBER;
81 
82 BEGIN
83 
84   IF (X_dest = 'INVENTORY') THEN
85     L_Exp_Org := X_org;
86   ELSIF (X_dest = 'SHOP FLOOR') THEN
87     select BD.PA_EXPENDITURE_ORG_ID into L_Exp_Org
88     from WIP_OPERATIONS   WO
89        , BOM_DEPARTMENTS  BD
90     where WO.ORGANIZATION_ID = X_org
91       AND WO.WIP_ENTITY_ID = X_entity
92       AND WO.OPERATION_SEQ_NUM = X_seq
93       AND BD.DEPARTMENT_ID = WO.DEPARTMENT_ID;
94   END IF;
95 
96   RETURN ( L_Exp_Org );
97 
98 END PO_EXP_ORG;
99 
100 
101 FUNCTION PO_EXP_TYPE
102 ( X_org     IN NUMBER
103 , X_project IN NUMBER
104 , X_item    IN NUMBER
105 , X_res     IN NUMBER
106 , X_dest    IN VARCHAR2
107 ) return VARCHAR2 IS
108 
109 L_Exp_Type VARCHAR2(30);
110 
111 BEGIN
112 
113   IF (X_dest = 'INVENTORY') THEN
114     L_Exp_Type := MTL_EXPENDITURE_TYPE(X_org, X_item);
115   ELSIF (X_dest = 'SHOP FLOOR') THEN
116     L_Exp_Type := OSP_EXPENDITURE_TYPE(X_org, X_project, X_res);
117   END IF;
118 
119   RETURN ( L_Exp_Type );
120 
121 END PO_EXP_TYPE;
122 
123 
124 FUNCTION PO_TASK_ID
125 ( X_org     IN NUMBER
126 , X_project IN NUMBER
127 , X_dest    IN VARCHAR2
128 , X_item    IN NUMBER
129 , X_subinv  IN VARCHAR2
130 , X_task    IN NUMBER
131 , X_entity  IN NUMBER
132 , X_seq     IN NUMBER
133 ) return NUMBER IS
134 
135 L_Task_Id NUMBER;
136 L_op      NUMBER;
137 L_item    NUMBER;
138 L_entity  NUMBER;
139 L_dep     NUMBER;
140 
141 BEGIN
142 
143 IF (X_task is not null) THEN L_Task_Id := X_task;
144 ELSE
145   IF (X_dest = 'INVENTORY') THEN
146     L_Task_Id := PJM_TASK_AUTO_ASSIGN.INV_TASK_WNPS
147                        ( X_org
148                        , X_project
149                        , X_item
150                        , NULL
151                        , NULL
152                        , X_subinv );
153   ELSIF (X_dest = 'SHOP FLOOR') THEN
154     select WO.STANDARD_OPERATION_ID
155          , WDJ.WIP_ENTITY_ID
156          , WDJ.PRIMARY_ITEM_ID
157          , WO.DEPARTMENT_ID
158     into L_op, L_entity, L_item, L_dep
159     from WIP_DISCRETE_JOBS            WDJ
160        , WIP_OPERATIONS               WO
161        , BOM_DEPARTMENTS              BD
162     where    WDJ.ORGANIZATION_ID = X_org
163       AND    WDJ.WIP_ENTITY_ID = X_entity
164       AND    WO.ORGANIZATION_ID = WDJ.ORGANIZATION_ID
165       AND    WO.WIP_ENTITY_ID = WDJ.WIP_ENTITY_ID
166       AND    WO.OPERATION_SEQ_NUM = X_seq
167       AND    BD.DEPARTMENT_ID = WO.DEPARTMENT_ID;
168 
169     L_Task_Id := PJM_TASK_AUTO_ASSIGN.WIP_TASK_WNPS
170                                ( X_org
171                                , X_project
172                                , L_op
173                                , L_entity
174                                , L_item
175                                , L_dep );
176 
177   END IF; -- destination type
178 
179 END IF;
180 RETURN ( L_Task_Id );
181 
182 END PO_TASK_ID;
183 
184 
185 FUNCTION Uom_Conversion_Rate
186 ( X_pollookup IN VARCHAR2
187 , X_dest      IN VARCHAR2
188 , X_item      IN NUMBER
189 , X_org       IN NUMBER
190 ) return NUMBER IS
191 
192 L_Uom_Conversion_Rate NUMBER;
193 
194 BEGIN
195 
196   IF (X_dest = 'INVENTORY') THEN
197     select DECODE( X_pollookup
198                    , MSI.PRIMARY_UNIT_OF_MEASURE , 1
199                    , INV_CONVERT.INV_UM_CONVERT
200                      ( X_item, 5 , 1
201                      , NULL , NULL
202                      , X_pollookup
203                      , MSI.PRIMARY_UNIT_OF_MEASURE ) )
204     into L_Uom_Conversion_Rate
205     from mtl_system_items_b MSI
206     where MSI.ORGANIZATION_ID = X_org
207       AND MSI.INVENTORY_ITEM_ID = X_item;
208 
209   ELSIF (X_dest = 'SHOP FLOOR') THEN
210     L_Uom_Conversion_Rate := 1;
211   END IF;
212 
213   RETURN ( L_Uom_Conversion_Rate );
214 
215 END Uom_Conversion_Rate;
216 
217 
218 FUNCTION GET_UNIT
219 ( X_pollookup IN VARCHAR2
220 , X_dest      IN VARCHAR2
221 , X_item      IN NUMBER
222 , X_org       IN NUMBER
223 ) return VARCHAR2 IS
224 
225 L_Unit VARCHAR2(25);
226 
227 BEGIN
228 
229   IF (X_dest = 'INVENTORY') THEN
230 
231     select primary_unit_of_measure
232     into L_Unit
233     from mtl_system_items_b MSI
234     where MSI.ORGANIZATION_ID = X_org
235       AND MSI.INVENTORY_ITEM_ID = X_item;
236 
237   ELSIF (X_dest = 'SHOP FLOOR') THEN
238 
239     L_Unit := X_pollookup;
240 
241   END IF;
242 
243   RETURN ( L_Unit );
244 
245 END GET_UNIT;
246 
247 
248 FUNCTION GET_UOM_CODE
249 ( X_pollookup IN VARCHAR2
250 , X_dest      IN VARCHAR2
251 , X_item      IN NUMBER
252 , X_org       IN NUMBER
253 ) return VARCHAR2 IS
254 
255 L_Unit VARCHAR2(3);
256 
257 BEGIN
258 
259   IF (X_dest = 'INVENTORY') THEN
260 
261     select primary_uom_code
262     into L_Unit
263     from mtl_system_items_b MSI
264     where MSI.ORGANIZATION_ID = X_org
265       AND MSI.INVENTORY_ITEM_ID = X_item;
266 
267   ELSIF (X_dest = 'SHOP FLOOR') THEN
268 
269     select uom_code into L_Unit
270     from MTL_UNITS_OF_MEASURE_VL
271     where unit_of_measure = X_pollookup;
272 
273   END IF;
274 
275   RETURN ( L_Unit );
276 
277 END GET_UOM_CODE;
278 
279 
280 FUNCTION GET_UOM_TL
281 ( X_pollookup IN VARCHAR2
282 , X_dest      IN VARCHAR2
283 , X_item      IN NUMBER
284 , X_org       IN NUMBER
285 ) return VARCHAR2 IS
286 
287 L_Unit VARCHAR2(25);
288 
289 BEGIN
290 
291   IF (X_dest = 'INVENTORY') THEN
292 
293     select UOM.UNIT_OF_MEASURE_TL
294     into L_Unit
295     from mtl_system_items_b MSI,
296          mtl_units_of_measure_vl UOM
297     where MSI.ORGANIZATION_ID = X_org
298       AND MSI.INVENTORY_ITEM_ID = X_item
299       AND UOM.UOM_CODE = MSI.PRIMARY_UOM_CODE;
300 
301   ELSIF (X_dest = 'SHOP FLOOR') THEN
302 
303     select UNIT_OF_MEASURE_TL into L_Unit
304     from MTL_UNITS_OF_MEASURE_VL
305     where unit_of_measure = X_pollookup;
306 
307   END IF;
308 
309   RETURN ( L_Unit );
310 
311 END GET_UOM_TL;
312 
313 
314 FUNCTION Vendor_Name
315 ( X_Vendor_Id  IN NUMBER
316 ) return VARCHAR2 IS
317 
318 L_Vendor_Name VARCHAR2(360);
319 
320 BEGIN
321 
322   SELECT vendor_name into L_Vendor_Name
323   from po_vendors
324   where vendor_id = X_Vendor_id;
325 
326   RETURN ( L_Vendor_Name );
327 
328 EXCEPTION
329 WHEN OTHERS THEN
330   RETURN ( NULL );
331 
332 END Vendor_Name;
333 
334 
335 FUNCTION People_Name
336 ( X_Person_Id IN NUMBER
337 ) return VARCHAR2 IS
338 
339 L_Full_Name VARCHAR2(240);
340 
341 BEGIN
342 
343   SELECT full_name into L_Full_Name
344   from PER_ALL_PEOPLE_F
345   where person_id = X_Person_Id
346   AND   TRUNC(SYSDATE) BETWEEN NVL(EFFECTIVE_START_DATE, SYSDATE - 1)
347   AND   NVL(EFFECTIVE_END_DATE, SYSDATE + 1);
348 
349   RETURN ( L_Full_Name );
350 
351 EXCEPTION
352 WHEN OTHERS THEN
353   RETURN ( NULL );
354 
355 END People_Name;
356 
357 
358 FUNCTION PO_Type
359 ( X_Org_Id   IN NUMBER
360 , X_Subtype  IN VARCHAR2
361 ) return VARCHAR2 IS
362 
363 L_Type_Name VARCHAR2(80);
364 
365 BEGIN
366 
367     SELECT T.TYPE_NAME into L_Type_Name
368     from PO_DOCUMENT_TYPES_ALL_TL T
369     WHERE T.LANGUAGE = userenv('LANG')
370       and T.DOCUMENT_TYPE_CODE IN ('PO', 'PA')
371       AND T.DOCUMENT_SUBTYPE  = X_Subtype
372       and NVL(T.org_id, -99) = NVL(X_Org_Id, -99);
373 
374   RETURN ( L_Type_Name );
375 
376 EXCEPTION
377 WHEN OTHERS THEN
378   RETURN ( NULL );
379 
380 END PO_Type;
381 
382 
383 FUNCTION PO_PROJECT_ID
384 ( X_Org_ID         IN    NUMBER
385 , X_Project_ID     IN    NUMBER
386 ) RETURN NUMBER IS
387 
388 L_PO_Project NUMBER;
389 
390 BEGIN
391 
392   if (X_Project_ID is not null) then
393     L_PO_Project := X_Project_ID;
394   else
395     select common_project_id into L_PO_Project
396     from pjm_org_parameters
397     where organization_id = X_Org_ID;
398   end if;
399 
400   RETURN ( L_PO_Project );
401 
402 EXCEPTION
403 WHEN OTHERS THEN
404   RETURN ( NULL );
405 
406 END PO_PROJECT_ID;
407 
408 
409 FUNCTION MTL_EXPENDITURE_TYPE
410 ( X_Org_ID         IN    NUMBER
411 , X_Item_ID        IN    NUMBER
412 ) RETURN VARCHAR2 IS
413 
414 L_Exp_Type  VARCHAR2(30);
415 
416 CURSOR c_org IS
417   SELECT br.expenditure_type
418   FROM   bom_resources          br
419   ,      cst_item_cost_details  cicd
420   ,      mtl_parameters         mp
421   WHERE  mp.organization_id = X_Org_ID
422   AND    cicd.organization_id (+) = mp.organization_id
423   AND    cicd.inventory_item_id (+) = X_Item_ID
424   AND    cicd.cost_type_id (+) = mp.primary_cost_method
425   AND    cicd.cost_element_id (+) = 1
426   AND    br.resource_id = nvl( cicd.resource_id , mp.default_material_cost_id )
427   AND    br.organization_id = mp.organization_id
428   ORDER BY br.resource_id;
429 
430 BEGIN
431   OPEN c_org;
432   FETCH c_org INTO L_Exp_Type;
433   CLOSE c_org;
434   RETURN ( L_Exp_Type );
435 
436 EXCEPTION
437 WHEN OTHERS THEN
438   IF ( c_org%isopen ) THEN
439     CLOSE c_org;
440   END IF;
441   RETURN ( NULL );
442 
443 END MTL_EXPENDITURE_TYPE;
444 
445 FUNCTION RES_EXPENDITURE_TYPE
446 ( X_Resource_ID    IN    NUMBER
447 ) RETURN VARCHAR2 IS
448 
449 CURSOR c_res IS
450   SELECT expenditure_type
451   FROM   bom_resources
452   WHERE  resource_id = X_Resource_ID;
453 
454 L_Exp_Type  VARCHAR2(30);
455 
456 BEGIN
457 
458   OPEN c_res;
459   FETCH c_res INTO L_Exp_Type;
460   CLOSE C_res;
461   RETURN ( L_Exp_Type );
462 
463 EXCEPTION
464 WHEN OTHERS THEN
465   IF ( c_res%isopen ) THEN
466     CLOSE c_res;
467   END IF;
468   RETURN ( NULL );
469 
470 END RES_EXPENDITURE_TYPE;
471 
472 FUNCTION OSP_EXPENDITURE_TYPE
473 ( X_Org_ID         IN    NUMBER
474 , X_Project_ID     IN    NUMBER
475 , X_Resource_ID    IN    NUMBER
476 ) RETURN VARCHAR2 IS
477 
478 CURSOR c_org IS
479   SELECT dir_item_expenditure_type
480   FROM   pjm_project_parameters
481   WHERE  organization_id = X_Org_ID
482   AND    project_id = X_Project_ID;
483 
484 CURSOR c_res IS
485   SELECT expenditure_type
486   FROM   bom_resources
487   WHERE  resource_id = X_Resource_ID;
488 
489 L_Exp_Type  VARCHAR2(30);
490 
491 BEGIN
492 
493   IF ( X_Resource_ID IS NULL ) THEN
494     OPEN c_org;
495     FETCH c_org INTO L_Exp_Type;
496     CLOSE c_org;
497   ELSE
498     OPEN c_res;
499     FETCH c_res INTO L_Exp_Type;
500     CLOSE C_res;
501   END IF;
502   RETURN ( L_Exp_Type );
503 
504 EXCEPTION
505 WHEN OTHERS THEN
506   IF ( c_org%isopen ) THEN
507     CLOSE c_org;
508   ELSIF ( c_res%isopen ) THEN
509     CLOSE c_res;
510   END IF;
511   RETURN ( NULL );
512 
513 END OSP_EXPENDITURE_TYPE;
514 
515 PROCEDURE CREATE_SYNONYMS IS
516 
517 CURSOR c IS
518   SELECT nvl(max(pp.project_reference_enabled) , 'N')
519   ,      decode(max(pp.common_project_id) , NULL , 'N' , 'Y')
520   FROM   pjm_org_parameters pp;
521 
522 CURSOR c2 IS
523   SELECT ou.Oracle_Username
524   FROM   fnd_product_installations pi
525   ,      fnd_oracle_userid ou
526   WHERE  ou.Oracle_ID = pi.Oracle_ID
527   AND    Application_ID = 0;
528 
529 pjm_implemented  VARCHAR2(1);
530 common_project   VARCHAR2(1);
531 applsys_schema   VARCHAR2(30);
532 synonym_changed  BOOLEAN := FALSE;
533 
534   PROCEDURE DO_CREATE_SYNONYM
535   ( X_synonym_name IN  VARCHAR2
536   , X_table_name   IN  VARCHAR2
537   ) IS
538 
539   CURSOR s ( C_name VARCHAR2 ) IS
540     SELECT table_name
541     FROM   user_synonyms
542     WHERE  synonym_name = C_name;
543 
544   sqlstmt          VARCHAR2(240);
545   curr_table_name  VARCHAR2(30);
546   create_flag      VARCHAR2(1);
547 
548   BEGIN
549     --
550     -- Check with existence of synonym first
551     --
552     OPEN s ( X_synonym_name );
553     FETCH s INTO curr_table_name;
554     IF ( s%notfound ) THEN
555       --
556       -- If synonym not found, we need to create it
557       --
558       CLOSE s;
559       --
560       -- Drop the view just in case
561       --
562       AD_DDL.DO_DDL( applsys_schema
563                    , 'PJM'
564                    , AD_DDL.DROP_VIEW
565                    , 'DROP VIEW ' || X_synonym_name
566                    , X_synonym_name );
567 
568       create_flag := 'Y';
569     ELSE
570       CLOSE s;
571       IF ( curr_table_name <> X_table_name ) THEN
572         --
573         -- Synonym exists but points to a different object.  We need to drop
574         -- the existing synonym first before recreating the new one
575         --
576         AD_DDL.DO_DDL( applsys_schema
577                      , 'PJM'
578                      , AD_DDL.DROP_SYNONYM
579                      , 'DROP SYNONYM ' || X_synonym_name
580                      , X_synonym_name );
581 
582         create_flag := 'Y';
583       ELSE
584         --
585         -- Existing synonym is what we want, no need to do anything
586         --
587         create_flag := 'N';
588       END IF;
589     END IF;
590     IF ( create_flag = 'Y' ) THEN
591       sqlstmt := 'CREATE SYNONYM ' || X_synonym_name || ' FOR ' || X_table_name;
592       AD_DDL.DO_DDL( applsys_schema
593                    , 'PJM'
594                    , AD_DDL.CREATE_SYNONYM
595                    , sqlstmt
596                    , X_synonym_name );
597       synonym_changed := TRUE;
598     END IF;
599   END DO_CREATE_SYNONYM;
600 
601 BEGIN
602   --
603   -- Retrieve the current PJM configuration
604   --
605   OPEN c;
606   FETCH c INTO pjm_implemented , common_project;
607   CLOSE c;
608 
609   --
610   -- Getting the APPLSYS schema name
611   --
612   OPEN c2;
613   FETCH c2 INTO applsys_schema;
614   CLOSE c2;
615 
616   IF ( pjm_implemented = 'N' ) THEN
617     --
618     -- PJM has not been implemented, use the stub views for commitments
619     --
620     do_create_synonym( 'PJM_PO_COMMITMENTS_V' , 'PJM_PO_COMMITMENTS_STUB_V' );
621     do_create_synonym( 'PJM_REQ_COMMITMENTS_V' , 'PJM_REQ_COMMITMENTS_STUB_V' );
622     do_create_synonym( 'CST_PROJMFG_CMT_VIEW' , 'CST_PROJMFG_CMT_STUB_V' );
623   ELSIF ( common_project = 'N' ) THEN
624     --
625     -- PJM has been implemented without common project, use the basic views for commitments
626     --
627     do_create_synonym( 'PJM_PO_COMMITMENTS_V' , 'PJM_PO_COMMITMENTS_BASIC_V' );
628     do_create_synonym( 'PJM_REQ_COMMITMENTS_V' , 'PJM_REQ_COMMITMENTS_BASIC_V' );
629     do_create_synonym( 'CST_PROJMFG_CMT_VIEW' , 'CST_PROJMFG_CMT_BASIC_V' );
630   ELSE
631     --
632     -- PJM has been implemented with common project, use the advance views for commitments
633     --
634     do_create_synonym( 'PJM_PO_COMMITMENTS_V' , 'PJM_PO_COMMITMENTS_CMPRJ_V' );
635     do_create_synonym( 'PJM_REQ_COMMITMENTS_V' , 'PJM_REQ_COMMITMENTS_CMPRJ_V' );
636     do_create_synonym( 'CST_PROJMFG_CMT_VIEW' , 'CST_PROJMFG_CMT_BASIC_V' );
637   END IF;
638 
639   IF ( synonym_changed ) THEN
640     BEGIN
641       --
642       -- Recompile the PA commitment view just as a housekeeping step
643       -- Do not worry about the outcome
644       --
645       AD_DDL.DO_DDL( applsys_schema
646                    , 'PA'
647                    , AD_DDL.ALTER_VIEW
648                    , 'ALTER VIEW PA_COMMITMENT_TXNS_V COMPILE'
649                    , 'PA_COMMITMENT_TXNS_V' );
650     EXCEPTION
651       WHEN OTHERS THEN
652         NULL;
653     END;
654   END IF;
655 
656 END CREATE_SYNONYMS;
657 
658 END PJM_COMMITMENT_UTILS;