DBA Data[Home] [Help]

PACKAGE BODY: APPS.PA_CLIENT_EXTN_CHECK_CMT

Source


1 PACKAGE BODY PA_CLIENT_EXTN_CHECK_CMT AS
2 /* $Header: PACECMTB.pls 120.2.12020000.2 2012/07/19 09:27:50 admarath ship $*/
3 
4 
5 FUNCTION COMMITMENTS_CHANGED ( p_ProjectID IN NUMBER )
6 	RETURN VARCHAR2
7 IS
8 
9 v_tmp		VARCHAR2(1) := 'N';
10 
11 BEGIN
12 
13 /** The below code lists all standard sqls to identify whether commitments
14     have changed or not since the last summarization run. Customers can
15     uncomment the below code to check whether commitments have changed or not.
16     One benefit of uncommenting the below code is that customers can add hints
17     (which are suitable for the data distribution that exists in their system)
18     to the below sqls which will make the Summarization process much faster.
19     The default code which is written below inside comments is simlar to
20     what has been coded inside the standard Oracle Projects function
21     PA_CHECK_COMMITMENTS.COMMITMENTS_CHANGED. If customer uncomments the below
22     code then the same code in PA_CHECK_COMMITMENTS.COMMITMENTS_CHANGED
23     will not get executed again ensuring that performance is not hit.
24 
25     If customers want they can modify a part of or entire code below to account
26     for the way they want to consider whether commitments have changed or not.
27 
28     This function should be able to determine whether the user defined
29     commitments have changed from the last summarization run or not.
30     If the commitments have changed, then the function should return
31     Y, else it should return S indicating STOP. If customers return 'N'
32     from this procedure then the code in standard Oracle Projects function
33     PA_CHECK_COMMITMENTS.COMMITMENTS_CHANGED will also get executed.
34     So for users who are going to uncomment the below code it is not
35     recommended to return 'N' from this function.
36 
37     If Y is returned, then the summarization process would rebuild the
38     commitments, if S is returned then it will not rebuild the
39     commitments and if N is returned then it may or may not rebuild the commitments
40     depending on the output of the sqls coded inside standard Oracle Projects function
41     PA_CHECK_COMMITMENTS.COMMITMENTS_CHANGED. **/
42 
43    v_tmp := 'N';
44 
45  -- Code addition for bug 3258046 starts
46 /*
47 
48  --Second Block: NEW REQUISITIONS
49  --Checks the PO Req Distributions' tables against PA_Commitment_Txns
50  --for new Purchase Requisitions
51 
52   Begin -- Second Block
53 
54   SELECT 'Y'
55   INTO  v_tmp
56   FROM 	DUAL
57   WHERE EXISTS (
58    	SELECT '1'
59      FROM
60               PO_REQ_DISTRIBUTIONS_ALL    RD
61             , PO_REQUISITION_LINES_ALL    RL
62             , PER_ALL_PEOPLE_F            REQ
63             , PO_REQUISITION_HEADERS_ALL  RH
64             , PO_DOCUMENT_TYPES           PDT
65             , PO_LINE_TYPES               LT
66             , PA_TASKS                    T
67             , HR_ALL_ORGANIZATION_UNITS   O
68             , PA_EXPENDITURE_TYPES        ET
69             , PA_PROJECTS                 P
70         WHERE
71           RH.REQUISITION_HEADER_ID = RL.REQUISITION_HEADER_ID
72           AND RH.TYPE_LOOKUP_CODE = 'PURCHASE'
73           AND PDT.DOCUMENT_TYPE_CODE = 'REQUISITION'
74           AND RH.TYPE_LOOKUP_CODE = PDT.DOCUMENT_SUBTYPE
75           AND RL.LINE_LOCATION_ID IS NULL
76           AND NVL(RL.CLOSED_CODE,'OPEN') <> 'FINALLY CLOSED'
77           AND NVL(RL.CANCEL_FLAG,'N') = 'N'
78           AND NVL(RL.MODIFIED_BY_AGENT_FLAG,'N') = 'N'
79           AND RL.SOURCE_TYPE_CODE = 'VENDOR'
80           AND NVL(RL.CLM_INFO_FLAG,'N') = 'N' --Bug 9462109: CLM enhancement
81  		  AND ( NVL(RL.CLM_OPTION_INDICATOR,'B') <> 'O' OR NVL(RL.CLM_OPTION_EXERCISED,'N') = 'Y' ) --Bug 9462109: CLM enhancement
82           AND REQ.PERSON_ID = RL.TO_PERSON_ID
83           AND TRUNC(SYSDATE)
84               BETWEEN NVL(REQ.EFFECTIVE_START_DATE,TRUNC(SYSDATE))
85           AND NVL(REQ.EFFECTIVE_END_DATE,TRUNC(SYSDATE))
86           AND RL.LINE_TYPE_ID = LT.LINE_TYPE_ID
87           AND RD.REQUISITION_LINE_ID = RL.REQUISITION_LINE_ID
88           AND RD.PROJECT_ID = P.PROJECT_ID
89           AND RD.TASK_ID = T.TASK_ID
90           AND RD.EXPENDITURE_ORGANIZATION_ID = O.ORGANIZATION_ID
91           AND RD.EXPENDITURE_TYPE = ET.EXPENDITURE_TYPE
92        AND RD.Project_ID = p_ProjectID
93        AND NOT EXISTS (
94            SELECT '2'
95            FROM  PA_COMMITMENT_TXNS CMT
96            WHERE CMT.Line_Type = 'R'
97            AND CMT.Project_ID = p_ProjectID
98 		   AND CMT.Burden_Sum_Dest_Run_ID is NULL
99            AND CMT.Transaction_Source = 'ORACLE_PURCHASING'
100            AND CMT.CMT_Header_ID = RH.Requisition_Header_ID
101            AND CMT.CMT_Line_Number = RL.Line_Num
102            AND CMT.CMT_Distribution_ID = RD.Distribution_ID )
103     );
104 
105   Return v_tmp;
106 
107   Exception
108     WHEN NO_DATA_FOUND THEN
109         v_tmp := 'S';
110   End; -- Second Block, for new PO Reqs
111 
112 
113 -- Third Block: NEW AP INVOICES
114 -- Checks the AP Inv Distributions' tables against PA_Commitment_Txns
115 -- for new Invoices
116 
117 
118 v_tmp := 'S';
119 
120   Begin -- Third Block
121 
122   SELECT 'Y'
123   INTO  v_tmp
124   FROM 	DUAL
125   WHERE EXISTS (
126    	SELECT '1'  -- may use push_subq hint here
127     FROM
128         AP_INVOICES_ALL                 I
129         , PO_DISTRIBUTIONS              POD
130         , AP_INVOICE_DISTRIBUTIONS_ALL  D
131     WHERE
132       I.Invoice_ID = D.Invoice_ID
133       AND D.PO_Distribution_ID = POD.PO_Distribution_ID(+)
134       AND POD.Distribution_type <> 'PREPAYMENT'
135       AND NVL(POD.Destination_Type_Code, 'EXPENSE') = 'EXPENSE'
136       AND decode(D.Pa_Addition_Flag,'Z','Y','T','Y','E','Y',null,'N',D.Pa_Addition_Flag) <> 'Y'
137       AND nvl(I.source, 'xxx') not in ('Oracle Project Accounting','PA_IC_INVOICES')
138       AND D.Project_ID = p_ProjectID
139       AND NOT EXISTS (
140           SELECT '2'
141           FROM  PA_COMMITMENT_TXNS CMT
142           WHERE CMT.Line_Type = 'I'
143           AND CMT.Project_ID = p_ProjectID
144 		  AND CMT.Burden_Sum_Dest_Run_ID is NULL
145           AND CMT.Transaction_Source = 'ORACLE_PAYABLES'
146           AND CMT.CMT_Header_ID = D.Invoice_ID
147           -- AND CMT.CMT_Line_Number = D.Distribution_Line_Number ) -- R12 change
148           AND CMT.CMT_Distribution_ID = D.Invoice_Distribution_ID) -- R12 change
149     );
150 
151   Return v_tmp;
152 
153   Exception
154     WHEN NO_DATA_FOUND THEN
155         v_tmp := 'S';
156   End; -- Third Block, for new AP Invoices
157 
158 
159 -- Fourth Block: NEW POs
160 -- Checks the PO distributions' tables against PA_Commitment_Txns
161 -- for new POs
162 
163 
164   v_tmp := 'S';
165 
166   Begin -- Fourth Block
167 
168   SELECT 'Y'
169   INTO v_tmp
170   FROM DUAL
171   WHERE EXISTS
172     (
173     SELECT '1'   -- may use ordered and push_subq hints here
174     FROM
175           PO_DISTRIBUTIONS_ALL   POD
176         , PO_HEADERS_ALL         POH
177         , PO_LINES_ALL           POL
178         , PO_RELEASES_ALL        POR
179         , PO_DOCUMENT_TYPES      PDT
180         , PO_LINE_LOCATIONS_ALL  PLL
181         , PER_ALL_PEOPLE_F       BUY
182         , PER_ALL_PEOPLE_F       REQ
183     WHERE
184       POH.AGENT_ID = BUY.PERSON_ID
185       AND TRUNC(SYSDATE)
186           BETWEEN BUY.EFFECTIVE_START_DATE
187       AND BUY.EFFECTIVE_END_DATE
188       AND POD.DELIVER_TO_PERSON_ID = REQ.PERSON_ID(+)
189       AND POD.Distribution_type <> 'PREPAYMENT'
190       AND NVL(POD.Destination_Type_Code, 'EXPENSE') = 'EXPENSE'
191       AND TRUNC(SYSDATE)
192           BETWEEN NVL(REQ.EFFECTIVE_START_DATE,TRUNC(SYSDATE))
193       AND NVL(REQ.EFFECTIVE_END_DATE,TRUNC(SYSDATE))
194       AND NVL(POH.CLOSED_CODE,'OPEN') NOT IN ('CLOSED','FINALLY CLOSED')
195       AND NVL(PLL.CLOSED_CODE,'OPEN') NOT IN ('CLOSED','FINALLY CLOSED')
196       AND PLL.SHIPMENT_TYPE IN ('STANDARD','BLANKET','SCHEDULED')
197       AND POH.TYPE_LOOKUP_CODE IN ('STANDARD','BLANKET','PLANNED')
198       AND POH.TYPE_LOOKUP_CODE = PDT.DOCUMENT_SUBTYPE
199       AND PDT.DOCUMENT_TYPE_CODE IN ('PO','PA')
200       AND PLL.PO_RELEASE_ID = POR.PO_RELEASE_ID(+)
201       AND NVL(POH.CANCEL_FLAG,'N') = 'N'
202       AND DECODE(POR.RELEASE_NUM,NULL,'OPEN',NVL(POR.CLOSED_CODE,'OPEN'))
203           NOT IN ('CLOSED','FINALLY CLOSED')
204       AND DECODE(POR.RELEASE_NUM,NULL,'N',NVL(POR.CANCEL_FLAG,'N')) = 'N'
205       AND PLL.LINE_LOCATION_ID = POD.LINE_LOCATION_ID
206       AND POH.PO_Header_ID = POD.PO_Header_ID
207       AND POL.PO_Line_ID = POD.PO_Line_ID
208       AND NVL(POL.CLM_INFO_FLAG,'N') = 'N' --Bug 9462109: CLM enhancement
209 	  AND ( NVL(POL.CLM_OPTION_INDICATOR,'B') <> 'O' OR NVL(POL.CLM_EXERCISED_FLAG,'N') = 'Y' ) --Bug 9462109: CLM enhancement
210       AND POD.Project_ID = p_ProjectID
211       AND NOT EXISTS (
212           SELECT '2'
213           FROM PA_COMMITMENT_TXNS CMT
214           WHERE CMT.Line_Type = 'P'
215             AND CMT.Project_ID = p_ProjectID
216 		    AND CMT.Burden_Sum_Dest_Run_ID is NULL
217             AND CMT.Transaction_Source = 'ORACLE_PURCHASING'
218             AND CMT.CMT_Header_ID = POD.PO_Header_ID
219             AND CMT.CMT_Line_Number = POL.Line_Num
220             AND CMT.CMT_Distribution_ID = POD.PO_Distribution_ID )
221     );
222   Return v_tmp;
223 
224   Exception
225     WHEN NO_DATA_FOUND THEN
226          v_tmp := 'S';
227 
228   End; -- Fourth Block, for new POs
229 
230 
231 -- Fifth Block: UPDATED POs
232 -- Checks the PO distributions' tables against PA_Commitment_Txns
233 -- for updated POs
234 -- Note: For POs, all amounts are captured in Oracle Purchasing as denom amounts.
235 
236 
237   v_tmp := 'S';
238 
239   Begin -- Fifth Block
240 
241   SELECT 'Y'
242   INTO v_tmp
243   FROM DUAL
244   WHERE EXISTS
245     (
246 	SELECT '1'
247 	FROM PA_COMMITMENT_TXNS CMT
248 	WHERE 	CMT.Project_ID = p_ProjectID
249     AND CMT.Burden_Sum_Dest_Run_ID is NULL
250 	AND	CMT.Line_Type||'' = 'P'
251 	AND	CMT.Transaction_Source = 'ORACLE_PURCHASING'
252 	AND	NOT EXISTS
253         (
254         SELECT '2'
255         FROM
256               PO_HEADERS_ALL         POH
257             , PO_RELEASES_ALL        POR
258             , PO_DOCUMENT_TYPES      PDT
259             , PO_LINES_ALL           POL
260             , PO_LINE_TYPES          LT
261             , PO_LINE_LOCATIONS_ALL  PLL
262             , PER_ALL_PEOPLE_F       BUY
263             , PER_ALL_PEOPLE_F       REQ
264             , HR_ALL_ORGANIZATION_UNITS  O
265             , PA_EXPENDITURE_TYPES   ET
266             , PA_TASKS               T
267             , PO_DISTRIBUTIONS_ALL   POD
268             , PA_PROJECTS            P
269         WHERE
270               POH.AGENT_ID = BUY.PERSON_ID
271           AND TRUNC(SYSDATE)
272               BETWEEN BUY.EFFECTIVE_START_DATE
273           AND BUY.EFFECTIVE_END_DATE
274           AND POD.DELIVER_TO_PERSON_ID = REQ.PERSON_ID(+)
275       AND POD.Distribution_type <> 'PREPAYMENT'
276       AND NVL(POD.Destination_Type_Code, 'EXPENSE') = 'EXPENSE'
277           AND TRUNC(SYSDATE)
278               BETWEEN NVL(REQ.EFFECTIVE_START_DATE,TRUNC(SYSDATE))
279           AND NVL(REQ.EFFECTIVE_END_DATE,TRUNC(SYSDATE))
280           AND NVL(POH.CLOSED_CODE,'OPEN') NOT IN ('CLOSED','FINALLY CLOSED')
281           AND NVL(PLL.CLOSED_CODE,'OPEN') NOT IN ('CLOSED','FINALLY CLOSED')
282           AND PLL.SHIPMENT_TYPE IN ('STANDARD','BLANKET','SCHEDULED')
283           AND POH.TYPE_LOOKUP_CODE IN ('STANDARD','BLANKET','PLANNED')
284           AND POH.TYPE_LOOKUP_CODE = PDT.DOCUMENT_SUBTYPE
285           AND PDT.DOCUMENT_TYPE_CODE IN ('PO','PA')
286           AND PLL.PO_RELEASE_ID = POR.PO_RELEASE_ID(+)
287           AND NVL(POH.CANCEL_FLAG,'N') = 'N'
288           AND DECODE(POR.RELEASE_NUM,NULL,'OPEN',NVL(POR.CLOSED_CODE,'OPEN'))
289               NOT IN ('CLOSED','FINALLY CLOSED')
290           AND DECODE(POR.RELEASE_NUM,NULL,'N',NVL(POR.CANCEL_FLAG,'N')) = 'N'
291           AND POL.PO_HEADER_ID = POH.PO_HEADER_ID
292           AND POL.LINE_TYPE_ID = LT.LINE_TYPE_ID
293           AND POL.PO_LINE_ID = PLL.PO_LINE_ID
294           AND NVL(POL.CLM_INFO_FLAG,'N') = 'N' --Bug 9462109: CLM enhancement
295 		  AND ( NVL(POL.CLM_OPTION_INDICATOR,'B') <> 'O' OR NVL(POL.CLM_EXERCISED_FLAG,'N') = 'Y' ) --Bug 9462109: CLM enhancement
296           AND PLL.LINE_LOCATION_ID = POD.LINE_LOCATION_ID
297           AND POD.PROJECT_ID = P.PROJECT_ID
298           AND POD.TASK_ID = T.TASK_ID
299           AND POD.EXPENDITURE_ORGANIZATION_ID = O.ORGANIZATION_ID
300           AND POD.EXPENDITURE_TYPE = ET.EXPENDITURE_TYPE
301           AND POD.PROJECT_ID = p_ProjectID
302 	  AND POH.PO_Header_ID = CMT.CMT_Header_ID
303       AND POD.PO_Distribution_ID = CMT.CMT_Distribution_ID
304       and CMT.task_id = nvl(pod.task_id,0)
305       and NVL(CMT.description,'<prm>') = NVL(POL.item_description,'<prm>')
306       and NVL(CMT.expenditure_item_date,sysdate-15000) = NVL(POD.expenditure_item_date,sysdate-15000)
307       and NVL(CMT.cmt_creation_date,sysdate-15000) = NVL(decode(POR.release_num,NULL,POH.creation_date,POR.creation_date),sysdate-15000)
308       and NVL(CMT.cmt_approved_date,sysdate-15000) = NVL(decode(POR.release_num,NULL,POH.approved_date,POR.approved_date),sysdate-15000)
309       and NVL(CMT.cmt_requestor_name,'<prm>') = NVL(REQ.full_name,'<prm>')
310       and NVL(CMT.cmt_buyer_name,'<prm>') = NVL(BUY.full_name,'<prm>')
311       and NVL(CMT.cmt_approved_flag,'<prm>') = NVL(decode(POR.release_num,NULL,decode(POH.authorization_status,'APPROVED','Y','N'),decode(POR.authorization_status,'APPROVED','Y','N')),'<prm>')
312       and NVL(CMT.vendor_id,-1) = NVL(POH.vendor_id,-1)
313       and NVL(CMT.expenditure_type,'<prm>') = NVL(POD.expenditure_type,'<prm>')
314       and NVL(CMT.organization_id,0) = NVL(O.organization_id,0)
315       and CMT.expenditure_category = ET.expenditure_category
316       and CMT.revenue_category = ET.revenue_category_code
317       and NVL(CMT.unit_of_measure,'<prm>') = NVL(decode(PLL.VALUE_BASIS,'AMOUNT',NULL,POL.unit_meas_lookup_code),'<prm>')
321       and NVL(CMT.quantity_delivered,0) = NVL(POD.quantity_delivered,0)
318       and NVL(CMT.unit_price,0) = NVL(TO_NUMBER(decode(PLL.VALUE_BASIS,'AMOUNT',NULL,( PLL.price_override * NVL(POD.rate,1)))),0)
319       and CMT.original_quantity_ordered = POD.quantity_ordered
320       and NVL(CMT.quantity_cancelled,0) = NVL(POD.quantity_cancelled,0)
322       and CMT.quantity_invoiced = NVL(POD.quantity_billed,0)
323       and nvl(CMT.denom_raw_cost,0) = GREATEST(0,(POD.QUANTITY_ORDERED-NVL(POD.QUANTITY_CANCELLED,0)
324         -NVL(POD.QUANTITY_BILLED,0))) * ((PLL.PRICE_OVERRIDE) +
325         (NVL(POD.NONRECOVERABLE_TAX,0) / POD.QUANTITY_ORDERED))
326       and NVL(CMT.denom_burdened_cost,0) =
327              NVL(PA_BURDEN_CMTS.get_cmt_burdened_cost(
328                  NULL
329                  , 'CMT'
330                  , T.task_id
331                  , POD.expenditure_item_date
332                  , POD.expenditure_type
333                  , O.organization_id
334                  , 'C'
335                  , GREATEST(0,(POD.QUANTITY_ORDERED-NVL(POD.QUANTITY_CANCELLED,0)
336         -NVL(POD.QUANTITY_BILLED,0))) * ((PLL.PRICE_OVERRIDE) +
337         (NVL(POD.NONRECOVERABLE_TAX,0) / POD.QUANTITY_ORDERED)) ),0)
338       )
339      );
340 
341   Return v_tmp;
342 
343   Exception
344   	WHEN NO_DATA_FOUND THEN
345 	     v_tmp := 'S';
346 
347   End; -- Fifth Block, for updated POs
348 
349 
350 -- Sixth Block: UPDATED INVOICES
351 -- Checks the AP Inv Distributions' tables against PA_Commitment_Txns
352 -- for updated Invoices
353 -- Note: For AP Invoices, all amounts are captured in Oracle Payables as denom amounts.
354 
355 
356   v_tmp := 'S';
357 
358   Begin -- Sixth Block
359 
360   SELECT 'Y'
361   INTO v_tmp
362   FROM DUAL
363   WHERE EXISTS
364     (
365 	SELECT '1'
366 	FROM PA_COMMITMENT_TXNS CMT
367 	WHERE 	CMT.Project_ID = p_ProjectID
368     AND CMT.Burden_Sum_Dest_Run_ID is NULL
369 	AND	CMT.Line_Type||'' = 'I'
370 	AND	CMT.Transaction_Source = 'ORACLE_PAYABLES'
371 	AND	NOT EXISTS
372         (
373         SELECT '2'
374         FROM
375               AP_INVOICE_DISTRIBUTIONS_ALL D
376             , AP_INVOICES_ALL              I
377             , PO_VENDORS                   V
378             , HR_ALL_ORGANIZATION_UNITS    O
379             , PA_EXPEND_TYP_SYS_LINKS      ES
380             , PA_EXPENDITURE_TYPES         ET
381             , PA_TASKS                     T
382             , PO_DISTRIBUTIONS             PO
383             , PA_PROJECTS                  P
384         WHERE
385           I.vendor_id = V.vendor_id
386           AND I.invoice_id = D.invoice_id
387           AND decode(D.pa_addition_flag,'Z','Y','T','Y','E','Y',null,'N',D.pa_addition_flag) <> 'Y'
388             AND ( ES.system_linkage_function  = 'VI' OR
389                   ( ES.system_linkage_function = 'ER' AND
390                       V.employee_id IS NOT NULL ))
391           AND D.po_distribution_id = PO.po_distribution_id (+)
392           AND PO.Distribution_type <> 'PREPAYMENT'
393           AND nvl(PO.destination_type_code, 'EXPENSE') = 'EXPENSE'
394           AND D.project_id = P.project_id
395           AND D.task_id = T.task_id
396           AND D.expenditure_organization_id = O.organization_id
397           AND D.expenditure_type = ES.expenditure_type
398           AND ET.expenditure_type = ES.expenditure_type
399           AND nvl(I.source, 'xxx') not in ('Oracle Project Accounting','PA_IC_INVOICES')
400           AND D.project_id = p_ProjectID
401       and CMT.task_id = nvl(d.task_id,0)
402       AND I.Invoice_ID = CMT.CMT_Header_ID
403       AND D.Distribution_Line_Number = CMT.CMT_Line_Number
404       and NVL(CMT.description,'<prm>') = NVL(D.description,'<prm>')
405       and NVL(CMT.expenditure_item_date,sysdate-15000) = NVL(D.expenditure_item_date,sysdate-15000)
406       and NVL(CMT.cmt_creation_date,sysdate-15000) = NVL(I.invoice_date,sysdate-15000)
407       and CMT.cmt_approved_flag = decode(AP_INVOICES_PKG.GET_APPROVAL_STATUS(I.invoice_id,I.invoice_amount,I.payment_status_flag,I.invoice_type_lookup_code),'APPROVED','Y','N')
408       and CMT.vendor_id = I.vendor_id
409       and NVL(CMT.expenditure_type,'<prm>') = NVL(D.expenditure_type,'<prm>')
410       and NVL(CMT.organization_id,0) = NVL(O.organization_id,0)
411       and CMT.expenditure_category = ET.expenditure_category
412       and CMT.revenue_category = ET.revenue_category_code
413       and NVL(CMT.denom_raw_cost,0) = NVL(D.amount,0)
414       and NVL(CMT.tot_cmt_quantity,0) = NVL(D.pa_quantity,0)
415       and NVL(CMT.denom_burdened_cost,0) =
416              NVL(PA_BURDEN_CMTS.get_cmt_burdened_cost(
417                  NULL
418                  , 'CMT'
419                  , T.task_id
420                  , D.expenditure_item_date
421                  , D.expenditure_type
422                  , O.organization_id
423                  , 'C'
424                  , D.amount),0)
425       )
426     );
427 
428   Return v_tmp;
429 
430   Exception
431   	WHEN NO_DATA_FOUND THEN
432 	     v_tmp := 'S';
433 
434   End; -- Sixth Block, for updated AP Invoices
435 
436 
437 -- Seventh Block: UPADTED REQUISTIONS
438 --   Checks the PO Req Distributions' tables against PA_Commitment_Txns
439 --   for updated Purchase Requisitions
440 
441 --   Note: For Requisitions, unit price is always captured in accounting currency! Therefore,
442 --         the raw cost and burdened cost comparative joins in this block use ACCT columns.
443 
444 --         Please note that this is different than Updated POs and AP Invoices.
445 
446 
447   v_tmp := 'S';
448 
449   Begin -- Seventh Block
450 
451   SELECT 'Y'
452   INTO  v_tmp
453   FROM 	DUAL
454   WHERE EXISTS
455     (
459     AND CMT.Burden_Sum_Dest_Run_ID is NULL
456    	SELECT '1'
457    	FROM PA_COMMITMENT_TXNS CMT
458    	WHERE CMT.Project_ID = p_ProjectID
460    	AND CMT.Line_Type||'' = 'R'
461    	AND CMT.Transaction_Source = 'ORACLE_PURCHASING'
462    	AND NOT EXISTS
463         (
464         SELECT '2'
465         FROM
466                PO_REQ_DISTRIBUTIONS_ALL    RD
467              , PO_REQUISITION_LINES_ALL    RL
468              , PO_REQUISITION_HEADERS_ALL  RH
469              , PO_DOCUMENT_TYPES           PDT
470              , PO_LINE_TYPES               LT
471              , PER_ALL_PEOPLE_F            REQ
472              , PA_TASKS                    T
473              , HR_ALL_ORGANIZATION_UNITS   O
474              , PA_EXPENDITURE_TYPES        ET
475              , PA_PROJECTS                 P
476         WHERE
477           RH.REQUISITION_HEADER_ID = RL.REQUISITION_HEADER_ID
478           AND RH.TYPE_LOOKUP_CODE = 'PURCHASE'
479           AND PDT.DOCUMENT_TYPE_CODE = 'REQUISITION'
480           AND RH.TYPE_LOOKUP_CODE = PDT.DOCUMENT_SUBTYPE
481           AND RL.LINE_LOCATION_ID IS NULL
482           AND NVL(RL.CLOSED_CODE,'OPEN') <> 'FINALLY CLOSED'
483           AND NVL(RL.CANCEL_FLAG,'N') = 'N'
484           AND NVL(RL.MODIFIED_BY_AGENT_FLAG,'N') = 'N'
485           AND RL.SOURCE_TYPE_CODE = 'VENDOR'
486           AND REQ.PERSON_ID = RL.TO_PERSON_ID
487           AND TRUNC(SYSDATE)
488               BETWEEN NVL(REQ.EFFECTIVE_START_DATE,TRUNC(SYSDATE))
489           AND NVL(REQ.EFFECTIVE_END_DATE,TRUNC(SYSDATE))
490           AND RL.LINE_TYPE_ID = LT.LINE_TYPE_ID
491           AND NVL(RL.CLM_INFO_FLAG,'N') = 'N' --Bug 9462109: CLM enhancement
492  		  AND ( NVL(RL.CLM_OPTION_INDICATOR,'B') <> 'O' OR NVL(RL.CLM_OPTION_EXERCISED,'N') = 'Y' ) --Bug 9462109: CLM enhancement
493           AND RD.REQUISITION_LINE_ID = RL.REQUISITION_LINE_ID
494           AND RD.PROJECT_ID = P.PROJECT_ID
495           AND RD.TASK_ID = T.TASK_ID
496           AND RD.EXPENDITURE_ORGANIZATION_ID = O.ORGANIZATION_ID
497           AND RD.EXPENDITURE_TYPE = ET.EXPENDITURE_TYPE
498           AND RD.PROJECT_ID = p_ProjectID
499       and CMT.task_id = nvl(rd.task_id,0)
500       and CMT.cmt_distribution_id = RD.Distribution_ID
501       and CMT.description = RL.item_description
502       and NVL(CMT.expenditure_item_date,sysdate-15000) = NVL(RD.expenditure_item_date,sysdate-15000)
503       and NVL(CMT.cmt_creation_date,sysdate-15000) = NVL(RL.creation_date,sysdate-15000)
504       and CMT.cmt_approved_flag = decode(NVL(RH.authorization_status,'NOT APPROVED'),'APPROVED','Y','N')
505       and NVL(CMT.cmt_need_by_date,sysdate-15000) = NVL(RL.need_by_date,sysdate-15000)
506       and NVL(CMT.vendor_id,0) = NVL(RL.vendor_id,0)
507       and NVL(CMT.expenditure_type,'<prm>') = NVL(RD.expenditure_type,'<prm>')
508       and NVL(CMT.organization_id,0) = NVL(O.organization_id,0)
509       and CMT.expenditure_category = ET.expenditure_category
510       and CMT.revenue_category = ET.revenue_category_code
511       and CMT.acct_raw_cost = (RD.REQ_LINE_QUANTITY * RL.UNIT_PRICE) + NVL(RD.NONRECOVERABLE_TAX,0)
512       and CMT.tot_cmt_quantity = RD.req_line_quantity
513       and NVL(CMT.acct_burdened_cost,0) =
514              NVL(PA_BURDEN_CMTS.get_cmt_burdened_cost(
515                  NULL
516                  , 'CMT'
517                  , T.task_id
518                  , RD.expenditure_item_date
519                  , RD.expenditure_type
520                  , O.organization_id
521                  , 'C'
522                  , (RD.REQ_LINE_QUANTITY * RL.UNIT_PRICE) + NVL(RD.NONRECOVERABLE_TAX,0)
523                  ),0)
524       )
525 	);
526 
527   Return v_tmp;
528 
529   Exception
530   	WHEN NO_DATA_FOUND THEN
531   		v_tmp := 'S';
532   End; -- Seventh Block, for updated PO Reqs
533 
534 
535 -- Eighth Block: UPDATED MFG COMMITMENTS
536 -- Checks the CST_PROJMFG_CMT_VIEW against PA_Commitment_Txns
537 -- for updated commitments
538 
539 -- Note: For MFG commitments, the view returns both acct and denom amounts for most amount
540 --       columns, So, where possible, joins are performed for denom amounts.
541 
542 
543 v_tmp := 'S';
544 
545   Begin -- Eighth Block
546 
547   SELECT 'Y'
548   INTO  v_tmp
549   FROM  DUAL
550   WHERE EXISTS
551     (
552     SELECT '1'
553     FROM PA_COMMITMENT_TXNS CMT
554     WHERE CMT.Project_ID = p_ProjectID
555     AND   CMT.Burden_Sum_Dest_Run_ID is NULL
556     AND   CMT.Transaction_Source = 'ORACLE_MANUFACTURING'
557     AND   NOT EXISTS
558           (
559           SELECT '2'
560           FROM CST_PROJMFG_CMT_VIEW CST
561           WHERE
562             CST.Project_ID = p_ProjectID
563             AND CMT.task_id = nvl(CST.task_id,0)
564             AND nvl(CMT.CMT_Header_ID,0)       = nvl(CST.CMT_Header_ID,0)
565             AND nvl(CMT.CMT_Line_Number,0)     = nvl(CST.CMT_Line_Number,0)
566             AND nvl(CMT.CMT_Distribution_ID,0) = nvl(CST.CMT_Distribution_ID,0)
567             and nvl(cmt.DESCRIPTION,'<prm>')     = nvl(cst.DESCRIPTION,'<prm>')
568  and nvl(cmt.EXPENDITURE_ITEM_DATE,sysdate-15000) = nvl(cst.EXPENDITURE_ITEM_DATE,sysdate-15000)
569             and nvl(cmt.CMT_LINE_NUMBER,0) = nvl(cst.CMT_LINE_NUMBER,0)
570  and nvl(cmt.CMT_CREATION_DATE,sysdate-15000) = nvl(cst.CMT_CREATION_DATE,sysdate-15000)
571  and nvl(cmt.CMT_APPROVED_DATE,sysdate-15000) = nvl(cst.CMT_APPROVED_DATE,sysdate-15000)
572             and nvl(cmt.CMT_REQUESTOR_NAME,'<prm>') = nvl(cst.CMT_REQUESTOR_NAME,'<prm>')
573             and nvl(cmt.CMT_BUYER_NAME,'<prm>') = nvl(cst.CMT_BUYER_NAME,'<prm>')
574             and nvl(cmt.CMT_APPROVED_FLAG,'<prm>') = nvl(cst.CMT_APPROVED_FLAG,'<prm>')
575  and nvl(cmt.CMT_PROMISED_DATE,sysdate-15000) = nvl(cst.CMT_PROMISED_DATE,sysdate-15000)
576  and nvl(cmt.CMT_NEED_BY_DATE,sysdate-15000) = nvl(cst.CMT_NEED_BY_DATE,sysdate-15000)
580             and nvl(cmt.EXPENDITURE_CATEGORY,'<prm>') = nvl(cst.EXPENDITURE_CATEGORY,'<prm>')
577             and nvl(cmt.ORGANIZATION_ID,0) = nvl(cst.ORGANIZATION_ID,0)
578             and nvl(cmt.VENDOR_ID,0) = nvl(cst.VENDOR_ID,0)
579             and nvl(cmt.EXPENDITURE_TYPE,'<prm>') = nvl(cst.EXPENDITURE_TYPE,'<prm>')
581             and nvl(cmt.REVENUE_CATEGORY,'<prm>') = nvl(cst.REVENUE_CATEGORY,'<prm>')
582             and nvl(cmt.UNIT_OF_MEASURE,'<prm>') = nvl(cst.UNIT_OF_MEASURE,'<prm>')
583             and nvl(cmt.UNIT_PRICE,0) = nvl(cst.UNIT_PRICE,0)
584             and nvl(cmt.denom_RAW_COST,0) = nvl(cst.denom_RAW_COST,0)
585             and nvl(cmt.denom_BURDENED_COST,0) = nvl(cst.denom_BURDENED_COST,0)
586             and nvl(cmt.TOT_CMT_QUANTITY,0) = nvl(cst.TOT_CMT_QUANTITY,0)
587             and nvl(cmt.QUANTITY_ORDERED,0) = nvl(cst.QUANTITY_ORDERED,0)
588             and nvl(cmt.AMOUNT_ORDERED,0) = nvl(cst.AMOUNT_ORDERED,0)
589             and nvl(cmt.ORIGINAL_QUANTITY_ORDERED,0) = nvl(cst.ORIGINAL_QUANTITY_ORDERED,0)
590             and nvl(cmt.ORIGINAL_AMOUNT_ORDERED,0) = nvl(cst.ORIGINAL_AMOUNT_ORDERED,0)
591             and nvl(cmt.QUANTITY_CANCELLED,0) = nvl(cst.QUANTITY_CANCELLED,0)
592             and nvl(cmt.AMOUNT_CANCELLED,0) = nvl(cst.AMOUNT_CANCELLED,0)
593             and nvl(cmt.QUANTITY_DELIVERED,0) = nvl(cst.QUANTITY_DELIVERED,0)
594             and nvl(cmt.AMOUNT_DELIVERED,0) = nvl(cst.AMOUNT_DELIVERED,0)
595             and nvl(cmt.QUANTITY_INVOICED,0) = nvl(cst.QUANTITY_INVOICED,0)
596             and nvl(cmt.AMOUNT_INVOICED,0) = nvl(cst.AMOUNT_INVOICED,0)
597             and nvl(cmt.QUANTITY_OUTSTANDING_DELIVERY,0) = nvl(cst.QUANTITY_OUTSTANDING_DELIVERY,0)
598             and nvl(cmt.AMOUNT_OUTSTANDING_DELIVERY,0) = nvl(cst.AMOUNT_OUTSTANDING_DELIVERY,0)
599             and nvl(cmt.QUANTITY_OUTSTANDING_INVOICE,0) = nvl(cst.QUANTITY_OUTSTANDING_INVOICE,0)
600             and nvl(cmt.AMOUNT_OUTSTANDING_INVOICE,0) = nvl(cst.AMOUNT_OUTSTANDING_INVOICE,0)
601             and nvl(cmt.QUANTITY_OVERBILLED,0) = nvl(cst.QUANTITY_OVERBILLED,0)
602             and nvl(cmt.AMOUNT_OVERBILLED,0) = nvl(cst.AMOUNT_OVERBILLED,0)
603             and nvl(cmt.ORIGINAL_TXN_REFERENCE1,'<prm>') = nvl(cst.ORIGINAL_TXN_REFERENCE1,'<prm>')
604             and nvl(cmt.ORIGINAL_TXN_REFERENCE2,'<prm>') = nvl(cst.ORIGINAL_TXN_REFERENCE2,'<prm>')
605             and nvl(cmt.ORIGINAL_TXN_REFERENCE3,'<prm>') = nvl(cst.ORIGINAL_TXN_REFERENCE3,'<prm>')
606            )
607     );
608 
609   Return v_tmp;
610 
611   Exception
612   	WHEN NO_DATA_FOUND THEN
613   		v_tmp := 'S';
614   End; -- Eighth Block, for updated commitments from CST_PROJMFG_CMT_VIEW
615 
616 
617 -- Ninth Block: NEW MFG COMMITMENTS
618 -- Checks the CST_PROJMFG_CMT_VIEW against PA_Commitment_Txns
619 -- for new commitments
620 
621 
622 v_tmp := 'S';
623 
624   Begin -- Ninth Block
625 
626   SELECT 'Y'
627   INTO  v_tmp
628   FROM  DUAL
629   WHERE EXISTS (
630     SELECT '1'
631      FROM
632          CST_PROJMFG_CMT_VIEW CST
633      WHERE
634        CST.PROJECT_ID = p_ProjectID
635        AND  NOT EXISTS (
636             SELECT '2'
637             FROM  PA_COMMITMENT_TXNS CMT
638             WHERE CMT.Transaction_Source  = 'ORACLE_MANUFACTURING'
639             AND CMT.Project_ID = p_ProjectID
640             AND   CMT.Burden_Sum_Dest_Run_ID is NULL
641             AND   CMT.CMT_Header_ID       = CST.CMT_Header_ID
642             AND   CMT.CMT_Line_Number     = CST.CMT_Line_Number
643             AND   CMT.CMT_Distribution_ID = CST.CMT_Distribution_ID )
644     );
645 
646   Return v_tmp;
647 
648   Exception
649   	WHEN NO_DATA_FOUND THEN
650   		v_tmp := 'S';
651   End; -- Ninth Block, for new commitments from CST_PROJMFG_CMT_VIEW
652 
653 */
654 -- Code addition for bug 3258046 ends
655   Return v_tmp;
656 
657 END Commitments_Changed;
658 
659 END PA_CLIENT_EXTN_CHECK_CMT;