[Home] [Help]
PACKAGE BODY: APPS.FV_SLA_AP_PROCESSING_PKG
Source
1 PACKAGE BODY fv_sla_ap_processing_pkg AS
2 --$Header: FVXLAAPB.pls 120.9.12020000.3 2013/02/13 14:40:17 snama ship $
3
4 ---------------------------------------------------------------------------
5 ---------------------------------------------------------------------------
6
7 c_FAILURE CONSTANT NUMBER := -1;
8 c_SUCCESS CONSTANT NUMBER := 0;
9 C_GL_APPLICATION CONSTANT NUMBER := 101;
10 CRLF CONSTANT VARCHAR2(1) := FND_GLOBAL.newline;
11 g_path_name CONSTANT VARCHAR2(200) := 'fv.plsql.fvxlaapb.fv_sla_ap_processing_pkg';
12 C_STATE_LEVEL CONSTANT NUMBER := FND_LOG.LEVEL_STATEMENT;
13 C_PROC_LEVEL CONSTANT NUMBER := FND_LOG.LEVEL_PROCEDURE;
14
15 PROCEDURE trace
16 (
17 p_level IN NUMBER,
18 p_procedure_name IN VARCHAR2,
19 p_debug_info IN VARCHAR2
20 )
21 IS
22 BEGIN
23 fv_sla_utl_processing_pkg.trace
24 (
25 p_level => p_level,
26 p_procedure_name => p_procedure_name,
27 p_debug_info => p_debug_info
28 );
29 END trace;
30
31 PROCEDURE stack_error
32 (
33 p_program_name IN VARCHAR2,
34 p_location IN VARCHAR2,
35 p_error_message IN VARCHAR2
36 )
37 IS
38 BEGIN
39 fv_sla_utl_processing_pkg.stack_error
40 (
41 p_program_name => p_program_name,
42 p_location => p_location,
43 p_error_message => p_error_message
44 );
45 END;
46
47 PROCEDURE init
48 IS
49 l_procedure_name VARCHAR2(100) :='.init';
50 BEGIN
51 trace(C_STATE_LEVEL, l_procedure_name, 'Package Information');
52 trace(C_STATE_LEVEL, l_procedure_name, '$Header: FVXLAAPB.pls 120.9.12020000.3 2013/02/13 14:40:17 snama ship $');
53 END;
54
55 PROCEDURE process_invoice
56 (
57 p_application_id IN NUMBER,
58 p_fv_extract_detail IN OUT NOCOPY fv_sla_utl_processing_pkg.fv_ref_detail,
59 p_error_code OUT NOCOPY NUMBER,
60 p_error_desc OUT NOCOPY VARCHAR2
61 )
62 IS
63 l_debug_info VARCHAR2(240);
64 l_procedure_name VARCHAR2(100):='.process_invoice';
65 l_index NUMBER;
66 l_ledger_info fv_sla_utl_processing_pkg.LedgerRecType;
67 l_fund_value VARCHAR(30);
68 l_account_value VARCHAR2(30);
69 l_bfy_value VARCHAR2(30);
70 l_treasury_symbol fv_treasury_symbols.treasury_symbol%TYPE;
71 l_pya_type VARCHAR2(20);
72 l_ccid NUMBER;
73 l_po_code_combination_id NUMBER;
74 l_no_pya_acct_flag fv_treasury_symbols.no_pya_acct_flag%TYPE;
75 l_fund_type fv_treasury_symbols.fund_type%TYPE;
76 l_rec_attribute_cat fv_ar_acc_category_map_dtl.transaction_category%TYPE;
77 l_fed_non_fed_ind VARCHAR2(1);
78 l_advance_required VARCHAR2(1);
79 l_advance_amount NUMBER;
80 l_cust_or_vend VARCHAR2(1);
81 l_cust_or_vend_id NUMBER;
82
83 CURSOR c_ap_invoice_details
84 IS
85 SELECT aid.invoice_id,
86 e.event_id,
87 e.event_type_code,
88 e.ledger_id,
89 e.entity_code,
90 aid.invoice_distribution_id,
91 aid.po_distribution_id,
92 aid.dist_code_combination_id,
93 aid.accounting_date,
94 aid.amount,
95 aid.base_amount,
96 aid.quantity_variance,
97 aid.base_quantity_variance,
98 aid.amount_variance,
99 aid.base_amount_variance,
100 aid.line_type_lookup_code,
101 ai.invoice_type_lookup_code,
102 ai.source,
103 ai.application_id ref_application_id,
104 ai.product_table ref_product_table,
105 ai.reference_key1 ref_key1,
106 ai.reference_key2 ref_key2,
107 ai.vendor_id,
108 aid.project_id,
109 aid.invoice_distribution_id line_number
110 FROM ap_invoice_distributions_all aid,
111 xla_events_gt e,
112 ap_invoices_all ai
113 WHERE aid.bc_event_id = e.event_id
114 AND e.application_id = p_application_id
115 AND e.entity_code = 'AP_INVOICES'
116 AND aid.line_type_lookup_code NOT IN ('ACCRUAL')
117 AND ai.invoice_id = aid.invoice_id
118 AND ((e.budgetary_control_flag = 'Y' AND
119 ai.invoice_type_lookup_code <> 'PAYMENT REQUEST')
120 OR
121 (e.budgetary_control_flag = 'Y' AND
122 ai.invoice_type_lookup_code = 'PAYMENT REQUEST' AND
123 ai.source <> 'Receivables')
124 OR
125 (e.budgetary_control_flag = 'N' AND
126 ai.invoice_type_lookup_code = 'PAYMENT REQUEST' AND
127 ai.source = 'Receivables'))
128 AND e.event_type_code IN ('INVOICE VALIDATED',
129 'INVOICE CANCELLED',
130 'INVOICE ADJUSTED',
131 'CREDIT MEMO VALIDATED',
132 'CREDIT MEMO CANCELLED',
133 'CREDIT MEMO ADJUSTED',
134 'DEBIT MEMO VALIDATED',
135 'DEBIT MEMO CANCELLED',
136 'DEBIT MEMO ADJUSTED')
137 UNION
138 SELECT asat.invoice_id,
139 e.event_id,
140 e.event_type_code,
141 e.ledger_id,
142 e.entity_code,
143 asat.invoice_distribution_id,
144 asat.po_distribution_id,
145 asat.dist_code_combination_id,
146 asat.accounting_date,
147 asat.amount,
148 asat.base_amount,
149 asat.quantity_variance,
150 asat.base_quantity_variance,
151 asat.amount_variance,
152 asat.base_amount_variance,
153 asat.line_type_lookup_code,
154 ai.invoice_type_lookup_code,
155 ai.source,
156 ai.application_id ref_application_id,
157 ai.product_table ref_product_table,
158 ai.reference_key1 ref_key1,
159 ai.reference_key2 ref_key2,
160 ai.vendor_id,
161 asat.project_id,
162 asat.invoice_distribution_id line_number
163 FROM ap_self_assessed_tax_dist_all asat,
164 xla_events_gt e,
165 ap_invoices_all ai
166 WHERE asat.bc_event_id = e.event_id
167 AND e.application_id = p_application_id
168 AND e.entity_code = 'AP_INVOICES'
169 AND asat.line_type_lookup_code NOT IN ('ACCRUAL')
170 AND ai.invoice_id = asat.invoice_id
171 AND ((e.budgetary_control_flag = 'Y' AND
172 ai.invoice_type_lookup_code <> 'PAYMENT REQUEST')
173 OR
174 (e.budgetary_control_flag = 'Y' AND
175 ai.invoice_type_lookup_code = 'PAYMENT REQUEST' AND
176 ai.source <> 'Receivables')
177 OR
178 (e.budgetary_control_flag = 'N' AND
179 ai.invoice_type_lookup_code = 'PAYMENT REQUEST' AND
180 ai.source = 'Receivables'))
181 AND e.event_type_code IN ('INVOICE VALIDATED',
182 'INVOICE CANCELLED',
183 'INVOICE ADJUSTED',
184 'CREDIT MEMO VALIDATED',
185 'CREDIT MEMO CANCELLED',
186 'CREDIT MEMO ADJUSTED',
187 'DEBIT MEMO VALIDATED',
188 'DEBIT MEMO CANCELLED',
189 'DEBIT MEMO ADJUSTED')
190 UNION
191 SELECT aid.invoice_id,
192 e.event_id,
193 e.event_type_code,
194 e.ledger_id,
195 e.entity_code,
196 aid.invoice_distribution_id,
197 aid.po_distribution_id,
198 aid.dist_code_combination_id,
199 aid.accounting_date,
200 apad.amount,
201 apad.base_amount,
202 aid.quantity_variance,
203 aid.base_quantity_variance,
204 aid.amount_variance,
205 aid.base_amount_variance,
206 aid.line_type_lookup_code,
207 ai.invoice_type_lookup_code,
208 ai.source,
209 ai.application_id ref_application_id,
210 ai.product_table ref_product_table,
211 ai.reference_key1 ref_key1,
212 ai.reference_key2 ref_key2,
213 ai.vendor_id,
214 aid.project_id,
215 apad.prepay_app_dist_id line_number
216 FROM ap_invoice_distributions_all aid,
217 ap_prepay_app_dists apad,
218 xla_events_gt e,
219 ap_invoices_all ai
220 WHERE aid.bc_event_id = e.event_id
221 AND e.application_id = p_application_id
222 AND e.entity_code = 'AP_INVOICES'
223 AND aid.line_type_lookup_code NOT IN ('ACCRUAL')
224 AND ai.invoice_id = aid.invoice_id
225 AND apad.prepay_app_distribution_id = aid.invoice_distribution_id
226 AND ((e.budgetary_control_flag = 'Y' AND
227 ai.invoice_type_lookup_code <> 'PAYMENT REQUEST')
228 OR
229 (e.budgetary_control_flag = 'Y' AND
230 ai.invoice_type_lookup_code = 'PAYMENT REQUEST' AND
231 ai.source <> 'Receivables')
232 OR
233 (e.budgetary_control_flag = 'N' AND
234 ai.invoice_type_lookup_code = 'PAYMENT REQUEST' AND
235 ai.source = 'Receivables'))
236 AND e.event_type_code IN ('PREPAYMENT APPLIED', 'PREPAYMENT UNAPPLIED')
237 ORDER BY 1, 2;
238
239 BEGIN
240 l_procedure_name := g_path_name || l_procedure_name;
241 p_error_code := c_SUCCESS;
242 -------------------------------------------------------------------------
243 l_debug_info := 'Begin of procedure '||l_procedure_name;
244 trace(C_STATE_LEVEL, l_procedure_name, l_debug_info);
245 -------------------------------------------------------------------------
246
247 l_index := p_fv_extract_detail.COUNT;
248 FOR invoice_rec IN c_ap_invoice_details LOOP
249 fv_sla_utl_processing_pkg.g_CurrentEventId := invoice_rec.event_id; --For Error Handling
250 trace(C_STATE_LEVEL, l_procedure_name, 'event_id='||invoice_rec.event_id);
251 trace(C_STATE_LEVEL, l_procedure_name, 'line_number='||invoice_rec.line_number);
252 trace(C_STATE_LEVEL, l_procedure_name, 'invoice_distribution_id='||invoice_rec.invoice_distribution_id);
253 trace(C_STATE_LEVEL, l_procedure_name, 'event_type_code='||invoice_rec.event_type_code);
254 trace(C_STATE_LEVEL, l_procedure_name, 'po_distribution_id='||invoice_rec.po_distribution_id);
255 trace(C_STATE_LEVEL, l_procedure_name, 'invoice_id='||invoice_rec.invoice_id);
256 trace(C_STATE_LEVEL, l_procedure_name, 'ledger_id='||invoice_rec.ledger_id);
257 trace(C_STATE_LEVEL, l_procedure_name, 'dist_code_combination_id='||invoice_rec.dist_code_combination_id);
258 trace(C_STATE_LEVEL, l_procedure_name, 'accounting_date='||invoice_rec.accounting_date);
259 trace(C_STATE_LEVEL, l_procedure_name, 'amount='||invoice_rec.amount);
260 trace(C_STATE_LEVEL, l_procedure_name, 'base_amount='||invoice_rec.base_amount);
261 trace(C_STATE_LEVEL, l_procedure_name, 'quantity_variance='||invoice_rec.quantity_variance);
262 trace(C_STATE_LEVEL, l_procedure_name, 'base_quantity_variance='||invoice_rec.base_quantity_variance);
263 trace(C_STATE_LEVEL, l_procedure_name, 'amount_variance='||invoice_rec.amount_variance);
264 trace(C_STATE_LEVEL, l_procedure_name, 'base_amount_variance='||invoice_rec.base_amount_variance);
265 trace(C_STATE_LEVEL, l_procedure_name, 'line_type_lookup_code='||invoice_rec.line_type_lookup_code);
266 trace(C_STATE_LEVEL, l_procedure_name, 'invoice_type_lookup_code='||invoice_rec.invoice_type_lookup_code);
267 trace(C_STATE_LEVEL, l_procedure_name, 'source='||invoice_rec.source);
268 trace(C_STATE_LEVEL, l_procedure_name, 'ref_application_id='||invoice_rec.ref_application_id);
269 trace(C_STATE_LEVEL, l_procedure_name, 'ref_product_table='||invoice_rec.ref_product_table);
270 trace(C_STATE_LEVEL, l_procedure_name, 'ref_key1='||invoice_rec.ref_key1);
271 trace(C_STATE_LEVEL, l_procedure_name, 'ref_key2='||invoice_rec.ref_key2);
272
273 IF (p_error_code = c_SUCCESS) THEN
274 l_index := l_index + 1;
275 p_fv_extract_detail(l_index).event_id := invoice_rec.event_id;
276 p_fv_extract_detail(l_index).line_number := invoice_rec.line_number;
277 p_fv_extract_detail(l_index).po_distribution_id := invoice_rec.po_distribution_id;
278 p_fv_extract_detail(l_index).prior_year_flag := 'N';
279 fv_sla_utl_processing_pkg.init_extract_record(p_application_id, p_fv_extract_detail(l_index));
280
281 trace(C_STATE_LEVEL, l_procedure_name, 'Calling fv_sla_utl_processing_pkg.get_ledger_info');
282 trace(C_STATE_LEVEL, l_procedure_name, 'ledger_id='||invoice_rec.ledger_id);
283 fv_sla_utl_processing_pkg.get_ledger_info
284 (
285 p_ledger_id => invoice_rec.ledger_id,
286 p_ledger_rec => l_ledger_info,
287 p_error_code => p_error_code,
288 p_error_desc => p_error_desc
289 );
290 trace(C_STATE_LEVEL, l_procedure_name, 'fv_sla_utl_processing_pkg.get_ledger_info Returned');
291 trace(C_STATE_LEVEL, l_procedure_name, 'p_error_code='||p_error_code);
292 trace(C_STATE_LEVEL, l_procedure_name, 'p_error_desc='||p_error_desc);
293 END IF;
294
295 IF (p_error_code = c_SUCCESS) THEN
296 l_po_code_combination_id := NULL;
297 IF (invoice_rec.po_distribution_id IS NOT NULL) THEN
298 trace(C_STATE_LEVEL, l_procedure_name, 'Selecting from po_distributions_all');
299 BEGIN
300 SELECT pod.code_combination_id
301 INTO l_po_code_combination_id
302 FROM po_distributions_all pod
303 WHERE pod.po_distribution_id = invoice_rec.po_distribution_id;
304 trace(C_STATE_LEVEL, l_procedure_name, 'l_po_code_combination_id='||l_po_code_combination_id);
305 EXCEPTION
306 WHEN OTHERS THEN
307 p_error_code := c_FAILURE;
308 p_error_desc := SQLERRM;
309 stack_error (l_procedure_name, 'po_distributions_all', p_error_desc);
310 trace(C_STATE_LEVEL, l_procedure_name, 'ERROR:SELECT_po_distributions_all:'||p_error_desc);
311 END;
312 END IF;
313 END IF;
314
315 IF (p_error_code = C_SUCCESS) THEN
316 l_ccid := NVL(l_po_code_combination_id, invoice_rec.dist_code_combination_id);
317 trace(C_STATE_LEVEL, l_procedure_name, 'Calling get_segment_values');
318 trace(C_STATE_LEVEL, l_procedure_name, 'p_ledger_id='||l_ledger_info.ledger_id);
319 trace(C_STATE_LEVEL, l_procedure_name, 'p_ccid='||l_ccid);
320 fv_sla_utl_processing_pkg.get_segment_values
321 (
322 p_ledger_id => l_ledger_info.ledger_id,
323 p_ccid => l_ccid,
324 p_fund_value => l_fund_value,
325 p_account_value => l_account_value,
326 p_bfy_value => l_bfy_value,
327 p_error_code => p_error_code,
328 p_error_desc => p_error_desc
329 );
330 trace(C_STATE_LEVEL, l_procedure_name, 'fv_sla_utl_processing_pkg.get_segment_values Returned');
331 trace(C_STATE_LEVEL, l_procedure_name, 'l_fund_value='||l_fund_value);
332 trace(C_STATE_LEVEL, l_procedure_name, 'l_account_value='||l_account_value);
333 trace(C_STATE_LEVEL, l_procedure_name, 'l_bfy_value='||l_bfy_value);
334 trace(C_STATE_LEVEL, l_procedure_name, 'p_error_code='||p_error_code);
335 trace(C_STATE_LEVEL, l_procedure_name, 'p_error_desc='||p_error_desc);
336 END IF;
337
338 l_cust_or_vend := 'V';
339 l_cust_or_vend_id := invoice_rec.vendor_id;
340
341 IF (p_error_code = C_SUCCESS) THEN
342 IF (invoice_rec.invoice_type_lookup_code = 'PAYMENT REQUEST' AND
343 invoice_rec.source = 'Receivables' AND
344 invoice_rec.ref_application_id = 222 AND
345 invoice_rec.ref_product_table = 'AR_RECEIVABLE_APPLICATIONS_ALL' AND
346 invoice_rec.ref_key1 IS NOT NULL) THEN
347 l_rec_attribute_cat := NULL;
348 trace(C_STATE_LEVEL, l_procedure_name, 'Calling get_ar_transaction_category');
349 trace(C_STATE_LEVEL, l_procedure_name, 'ref_key1='||invoice_rec.ref_key1);
350 fv_sla_ar_processing_pkg.get_receipt_info_for_pr
351 (
352 p_transcation_id => invoice_rec.ref_key1,
353 p_rec_attribute_cat => l_rec_attribute_cat,
354 p_advance_required => l_advance_required,
355 p_advance_amount => l_advance_amount,
356 p_customer_id => l_cust_or_vend_id,
357 p_error_code => p_error_code,
358 p_error_desc => p_error_desc
359 );
360 trace(C_STATE_LEVEL, l_procedure_name, 'get_ar_transaction_category Returned');
361 trace(C_STATE_LEVEL, l_procedure_name, 'l_rec_attribute_cat='||l_rec_attribute_cat);
362 trace(C_STATE_LEVEL, l_procedure_name, 'p_error_code='||p_error_code);
363 trace(C_STATE_LEVEL, l_procedure_name, 'p_error_desc='||p_error_desc);
364 l_cust_or_vend := 'C';
365 p_fv_extract_detail(l_index).ar_transaction_category := l_rec_attribute_cat;
366 p_fv_extract_detail(l_index).advance_required := l_advance_required;
367 END IF;
368 END IF;
369
370 IF (p_error_code = C_SUCCESS) THEN
371 trace(C_STATE_LEVEL, l_procedure_name, 'Calling get_fed_non_fed_ind');
372 trace(C_STATE_LEVEL, l_procedure_name, 'p_cust_vend_id='||invoice_rec.vendor_id);
373 fv_sla_utl_processing_pkg.get_fed_non_fed_ind
374 (
375 p_cust_vend_id => l_cust_or_vend_id,
376 p_cust_or_vend => l_cust_or_vend,
377 p_fed_non_fed_ind => l_fed_non_fed_ind,
378 p_error_code => p_error_code,
379 p_error_desc => p_error_desc
380 );
381 trace(C_STATE_LEVEL, l_procedure_name, 'get_fed_non_fed_ind Returned');
382 trace(C_STATE_LEVEL, l_procedure_name, 'l_fed_non_fed_ind='||l_fed_non_fed_ind);
383 trace(C_STATE_LEVEL, l_procedure_name, 'p_error_code='||p_error_code);
384 trace(C_STATE_LEVEL, l_procedure_name, 'p_error_desc='||p_error_desc);
385 p_fv_extract_detail(l_index).fed_non_fed_ind := l_fed_non_fed_ind;
386 END IF;
387
388
389 IF (p_error_code = C_SUCCESS) THEN
390 trace(C_STATE_LEVEL, l_procedure_name, 'p_fund_value='||l_fund_value);
391 trace(C_STATE_LEVEL, l_procedure_name, 'p_account_value='||l_account_value);
392 trace(C_STATE_LEVEL, l_procedure_name, 'p_bfy_value='||l_bfy_value);
393 p_fv_extract_detail(l_index).fund_value :=l_fund_value;
394
395 trace(C_STATE_LEVEL, l_procedure_name, 'Calling get_fund_details');
396 trace(C_STATE_LEVEL, l_procedure_name, 'p_application_id='||p_application_id);
397 trace(C_STATE_LEVEL, l_procedure_name, 'p_ledger_id='||l_ledger_info.ledger_id);
398 trace(C_STATE_LEVEL, l_procedure_name, 'p_fund_value='||l_fund_value);
399 trace(C_STATE_LEVEL, l_procedure_name, 'p_gl_date='||invoice_rec.accounting_date);
400 fv_sla_utl_processing_pkg.get_fund_details
401 (
402 p_application_id => p_application_id,
403 p_ledger_id => l_ledger_info.ledger_id,
404 p_fund_value => l_fund_value,
405 p_gl_date => invoice_rec.accounting_date,
406 p_appor_category => p_fv_extract_detail(l_index).fund_category,
407 p_direct_or_reimb => p_fv_extract_detail(l_index).direct_or_reimb,
408 p_fund_status => p_fv_extract_detail(l_index).fund_expired_status,
409 p_fund_time_frame => p_fv_extract_detail(l_index).fund_time_frame,
410 p_treasury_symbol_id => p_fv_extract_detail(l_index).treasury_symbol_id,
411 p_treasury_symbol => l_treasury_symbol,
412 p_no_pya_acct_flag => l_no_pya_acct_flag,
413 p_fund_type => l_fund_type,
414 p_error_code => p_error_code,
415 p_error_desc => p_error_desc
416 );
417 trace(C_STATE_LEVEL, l_procedure_name, 'fv_sla_utl_processing_pkg.get_fund_details Returned');
418 trace(C_STATE_LEVEL, l_procedure_name, 'fund_category='||p_fv_extract_detail(l_index).fund_category);
419 trace(C_STATE_LEVEL, l_procedure_name, 'fund_expired_status='||p_fv_extract_detail(l_index).fund_expired_status);
420 trace(C_STATE_LEVEL, l_procedure_name, 'fund_time_frame='||p_fv_extract_detail(l_index).fund_time_frame);
421 trace(C_STATE_LEVEL, l_procedure_name, 'treasury_symbol_id='||p_fv_extract_detail(l_index).treasury_symbol_id);
422 trace(C_STATE_LEVEL, l_procedure_name, 'l_treasury_symbol='||l_treasury_symbol);
423 trace(C_STATE_LEVEL, l_procedure_name, 'l_fund_type='||l_fund_type);
424 trace(C_STATE_LEVEL, l_procedure_name, 'p_error_code='||p_error_code);
425 trace(C_STATE_LEVEL, l_procedure_name, 'p_error_desc='||p_error_desc);
426 END IF;
427
428 IF (p_error_code = C_SUCCESS) THEN
429 trace(C_STATE_LEVEL, l_procedure_name, 'fund_category='||p_fv_extract_detail(l_index).fund_category);
430 trace(C_STATE_LEVEL, l_procedure_name, 'fund_expired_status='||p_fv_extract_detail(l_index).fund_expired_status);
431 trace(C_STATE_LEVEL, l_procedure_name, 'fund_time_frame='||p_fv_extract_detail(l_index).fund_time_frame);
432 trace(C_STATE_LEVEL, l_procedure_name, 'treasury_symbol_id='||p_fv_extract_detail(l_index).treasury_symbol_id);
433 trace(C_STATE_LEVEL, l_procedure_name, 'l_treasury_symbol='||l_treasury_symbol);
434 trace(C_STATE_LEVEL, l_procedure_name, 'l_fund_type='||l_fund_type);
435 trace(C_STATE_LEVEL, l_procedure_name, 'event_type_code='||invoice_rec.event_type_code);
436
437 p_fv_extract_detail(l_index).acc_unpaid_exp_amount := NVL(invoice_rec.base_amount, invoice_rec.amount);
438 p_fv_extract_detail(l_index).ent_unpaid_exp_amount := invoice_rec.amount;
439 p_fv_extract_detail(l_index).acc_charge_amount := NVL(invoice_rec.base_amount, invoice_rec.amount);
440 p_fv_extract_detail(l_index).ent_charge_amount := invoice_rec.amount;
441 p_fv_extract_detail(l_index).fund_type := l_fund_type;
442
443 IF (invoice_rec.po_distribution_id IS NULL) THEN
444 p_fv_extract_detail(l_index).acc_unanticipated_bud_amount := -1*NVL(invoice_rec.base_amount, invoice_rec.amount);
445 p_fv_extract_detail(l_index).ent_unanticipated_bud_amount := -1*invoice_rec.amount;
446 ELSE
447 IF (invoice_rec.line_type_lookup_code IN ('IPV', 'ERV')) THEN
448 p_fv_extract_detail(l_index).ent_unanticipated_bud_amount := -1*(invoice_rec.amount-(NVL(invoice_rec.quantity_variance,0)+NVL(invoice_rec.amount_variance,0)));
449 p_fv_extract_detail(l_index).acc_unanticipated_bud_amount := -1*(NVL(invoice_rec.base_amount, invoice_rec.amount)-
450 (NVL(NVL(invoice_rec.base_quantity_variance, invoice_rec.quantity_variance),0)+
451 NVL(NVL(invoice_rec.base_amount_variance, invoice_rec.amount_variance),0)));
452 ELSIF (invoice_rec.line_type_lookup_code IN ('PREPAY')) THEN
453 p_fv_extract_detail(l_index).acc_unpaid_obl_amount := NVL(invoice_rec.base_amount, invoice_rec.amount)-
454 (NVL(NVL(invoice_rec.base_quantity_variance, invoice_rec.quantity_variance),0)+
455 NVL(NVL(invoice_rec.base_amount_variance, invoice_rec.amount_variance),0));
456 p_fv_extract_detail(l_index).ent_unpaid_obl_amount := invoice_rec.amount-(NVL(invoice_rec.quantity_variance,0)+NVL(invoice_rec.amount_variance,0));
457 ELSE
458 p_fv_extract_detail(l_index).acc_unpaid_obl_amount := -1*(NVL(invoice_rec.base_amount, invoice_rec.amount)-
459 (NVL(NVL(invoice_rec.base_quantity_variance, invoice_rec.quantity_variance),0)+
460 NVL(NVL(invoice_rec.base_amount_variance, invoice_rec.amount_variance),0)));
461 p_fv_extract_detail(l_index).ent_unpaid_obl_amount := -1*(invoice_rec.amount-(NVL(invoice_rec.quantity_variance,0)+NVL(invoice_rec.amount_variance,0)));
462 p_fv_extract_detail(l_index).acc_unanticipated_bud_amount := -1*(NVL(NVL(invoice_rec.base_quantity_variance, invoice_rec.quantity_variance),0)+
463 NVL(NVL(invoice_rec.base_amount_variance, invoice_rec.amount_variance),0));
464 p_fv_extract_detail(l_index).ent_unanticipated_bud_amount := -1*(NVL(invoice_rec.quantity_variance,0)+NVL(invoice_rec.amount_variance,0));
465 END IF;
466 END IF;
467 END IF;
468
469 IF (p_error_code = C_SUCCESS) THEN
470 p_fv_extract_detail(l_index).prior_year_flag := 'N';
471 IF (NVL(l_no_pya_acct_flag, 'N') = 'N') THEN
472 trace(C_STATE_LEVEL, l_procedure_name, 'Calling get_prior_year_status');
473 trace(C_STATE_LEVEL, l_procedure_name, 'p_ledger_id='||l_ledger_info.ledger_id);
474 trace(C_STATE_LEVEL, l_procedure_name, 'l_bfy_value='||l_bfy_value);
475 trace(C_STATE_LEVEL, l_procedure_name, 'p_gl_date='||invoice_rec.accounting_date);
476 fv_sla_utl_processing_pkg.get_prior_year_status
477 (
478 p_application_id => C_GL_APPLICATION,
479 p_ledger_id => l_ledger_info.ledger_id,
480 p_bfy_value => l_bfy_value,
481 p_gl_date => invoice_rec.accounting_date,
482 p_pya => p_fv_extract_detail(l_index).prior_year_flag,
483 p_pya_type => l_pya_type,
484 p_error_code => p_error_code,
485 p_error_desc => p_error_desc
486 );
487 trace(C_STATE_LEVEL, l_procedure_name, 'fv_sla_utl_processing_pkg.get_prior_year_status Returned');
488 trace(C_STATE_LEVEL, l_procedure_name, 'l_pya='||p_fv_extract_detail(l_index).prior_year_flag);
489 trace(C_STATE_LEVEL, l_procedure_name, 'l_pya_type='||l_pya_type);
490 trace(C_STATE_LEVEL, l_procedure_name, 'p_error_code='||p_error_code);
491 trace(C_STATE_LEVEL, l_procedure_name, 'p_error_desc='||p_error_desc);
492 END IF;
493 END IF;
494
495 IF (p_error_code <> c_SUCCESS) THEN
496 EXIT;
497 END IF;
498 END LOOP;
499
500 EXCEPTION
501 WHEN OTHERS THEN
502 p_error_code := c_FAILURE;
503 fnd_message.set_name('FND', 'FND_GENERIC_MESSAGE');
504 fnd_message.set_token('MESSAGE' , 'System Error :'||SQLERRM);
505 p_error_desc := fnd_message.get;
506 stack_error (l_procedure_name, 'FINAL', p_error_desc);
507 trace(C_STATE_LEVEL, l_procedure_name, 'ERROR:FINAL:'||p_error_desc);
508 END;
509
510 PROCEDURE process_payments
511 (
512 p_application_id IN xla_events_gt.application_id%TYPE,
513 p_fv_extract_detail IN OUT NOCOPY fv_sla_utl_processing_pkg.fv_ref_detail,
514 p_error_code OUT NOCOPY NUMBER,
515 p_error_desc OUT NOCOPY VARCHAR2
516 )
517 IS
518 l_debug_info VARCHAR2(240);
519 l_procedure_name VARCHAR2(100):='.process_payments';
520
521 l_index NUMBER;
522 l_ledger_info fv_sla_utl_processing_pkg.LedgerRecType;
523 l_fund_value VARCHAR(30);
524 l_account_value VARCHAR2(30);
525 l_bfy_value VARCHAR2(30);
526 l_treasury_symbol fv_treasury_symbols.treasury_symbol%TYPE;
527 l_pya_type VARCHAR2(20);
528 l_no_pya_acct_flag fv_treasury_symbols.no_pya_acct_flag%TYPE;
529 l_org_info fv_sla_utl_processing_pkg.OrgRecType;
530 l_bank_info fv_sla_utl_processing_pkg.BankRecType;
531 l_process_row BOOLEAN := TRUE;
532 l_fund_type fv_treasury_symbols.fund_type%TYPE;
533 l_rec_attribute_cat fv_ar_acc_category_map_dtl.transaction_category%TYPE;
534 l_fed_non_fed_ind VARCHAR2(1);
535 l_advance_required VARCHAR2(1);
536 l_advance_amount NUMBER;
537 l_cust_or_vend VARCHAR2(1);
538 l_cust_or_vend_id NUMBER;
539
540 CURSOR c_ap_payment_details
541 IS
542 SELECT ai.invoice_id,
543 e.event_id,
544 e.event_type_code,
545 e.ledger_id,
546 e.entity_code,
547 aphd.payment_hist_dist_id,
548 aid.dist_code_combination_id,
549 aph.accounting_date,
550 aphd.amount,
551 aphd.paid_base_amount,
552 aphd.invoice_dist_amount,
553 aphd.invoice_dist_base_amount,
554 ai.invoice_type_lookup_code,
555 aid.po_distribution_id,
556 aphd.pay_dist_lookup_code,
557 aca.payment_type_flag,
558 aca.ce_bank_acct_use_id,
559 aca.org_id,
560 ai.source,
561 ai.application_id ref_application_id,
562 ai.product_table ref_product_table,
563 ai.reference_key1 ref_key1,
564 ai.reference_key2 ref_key2,
565 ai.vendor_id
566 FROM ap_checks_all aca,
567 ap_payment_hist_dists aphd,
568 ap_invoice_distributions_all aid,
569 ap_payment_history_all aph,
570 xla_events_gt e,
571 ap_invoices_all ai
572 WHERE aphd.accounting_event_id = e.event_id
573 AND e.application_id = p_application_id
574 AND aphd.invoice_distribution_id = aid.invoice_distribution_id
575 AND aphd.payment_history_id = aph.payment_history_id
576 AND aid.invoice_id = ai.invoice_id
577 AND aph.check_id = aca.check_id
578 -- AND (aca.payment_type_flag IN ('M', 'N', 'Q', 'R') OR
579 -- (aca.payment_type_flag IN ('A') AND
580 -- aphd.pay_dist_lookup_code <> 'CASH') OR
581 -- ai.invoice_type_lookup_code = 'INTEREST')
582 AND aphd.pay_dist_lookup_code <> 'EXCHANGE RATE VARIANCE'
583 AND e.entity_code = 'AP_PAYMENTS'
584 AND e.event_type_code IN ('MANUAL PAYMENT ADJUSTED',
585 'PAYMENT ADJUSTED',
586 'PAYMENT CANCELLED',
587 'PAYMENT CREATED',
588 'REFUND RECORDED',
589 'REFUND CANCELLED',
590 'REFUND ADJUSTED')
591 UNION
592 SELECT ai.invoice_id,
593 e.event_id,
594 e.event_type_code,
595 e.ledger_id,
596 e.entity_code,
597 aphd.payment_hist_dist_id,
598 aid.dist_code_combination_id,
599 aph.accounting_date,
600 DECODE(e.event_type_code, 'TREASURY_BACKOUT', -1, 1)*aphd.amount amount,
601 DECODE(e.event_type_code, 'TREASURY_BACKOUT', -1, 1)*aphd.paid_base_amount paid_base_amount,
602 DECODE(e.event_type_code, 'TREASURY_BACKOUT', -1, 1)*aphd.invoice_dist_amount invoice_dist_amount,
603 DECODE(e.event_type_code, 'TREASURY_BACKOUT', -1, 1)*aphd.invoice_dist_base_amount invoice_dist_base_amount,
604 ai.invoice_type_lookup_code,
605 aid.po_distribution_id,
606 aphd.pay_dist_lookup_code,
607 aca.payment_type_flag,
608 aca.ce_bank_acct_use_id,
609 aca.org_id,
610 ai.source,
611 ai.application_id ref_application_id,
612 ai.product_table ref_product_table,
613 ai.reference_key1 ref_key1,
614 ai.reference_key2 ref_key2,
615 ai.vendor_id
616 FROM ap_payment_hist_dists aphd,
617 ap_invoice_distributions_all aid,
618 ap_payment_history_all aph,
619 xla_events_gt e,
620 ap_invoices_all ai,
621 fv_treasury_confirmations_all ftc,
622 ap_checks_all aca
623 WHERE ftc.event_id = e.event_id
624 AND aca.payment_instruction_id = ftc.payment_instruction_id
625 AND aph.check_id = aca.check_id
626 AND aca.check_id NOT IN (SELECT check_id
627 FROM fv_voided_checks fvc
628 WHERE fvc.payment_instruction_id = aca.payment_instruction_id)
629 AND e.application_id = p_application_id
630 AND aphd.invoice_distribution_id = aid.invoice_distribution_id
631 AND aphd.payment_history_id = aph.payment_history_id
632 AND aid.invoice_id = ai.invoice_id
633 AND aca.payment_type_flag IN ('A')
634 AND aphd.pay_dist_lookup_code = 'CASH'
635 AND e.entity_code = 'TREASURY_CONFIRMATION'
636 AND e.event_type_code IN ('TREASURY_CONFIRM', 'TREASURY_BACKOUT')
637 AND aca.status_lookup_code NOT IN ('VOIDED')
638 UNION
639 SELECT ai.invoice_id,
640 e.event_id,
641 e.event_type_code,
642 e.ledger_id,
643 e.entity_code,
644 aphd.payment_hist_dist_id,
645 aid.dist_code_combination_id,
646 aph.accounting_date,
647 aphd.amount amount,
648 aphd.paid_base_amount paid_base_amount,
649 aphd.invoice_dist_amount invoice_dist_amount,
650 aphd.invoice_dist_base_amount invoice_dist_base_amount,
651 ai.invoice_type_lookup_code,
652 aid.po_distribution_id,
653 aphd.pay_dist_lookup_code,
654 aca.payment_type_flag,
655 aca.ce_bank_acct_use_id,
656 aca.org_id,
657 ai.source,
658 ai.application_id ref_application_id,
659 ai.product_table ref_product_table,
660 ai.reference_key1 ref_key1,
661 ai.reference_key2 ref_key2,
662 ai.vendor_id
663 FROM ap_payment_hist_dists aphd,
664 ap_invoice_distributions_all aid,
665 ap_payment_history_all aph,
666 xla_events_gt e,
667 ap_invoices_all ai,
668 fv_voided_checks fvc,
669 ap_checks_all aca
670 WHERE fvc.event_id = e.event_id
671 AND aca.payment_instruction_id = fvc.payment_instruction_id
672 AND fvc.check_id = aca.check_id
673 AND aph.check_id = aca.check_id
674 AND aphd.invoice_distribution_id = aid.invoice_distribution_id
675 AND aphd.payment_history_id = aph.payment_history_id
676 AND aid.invoice_id = ai.invoice_id
677 AND aca.payment_type_flag IN ('A')
678 AND aphd.pay_dist_lookup_code = 'CASH'
679 AND aca.status_lookup_code IN ('VOIDED')
680 AND aph.transaction_type='PAYMENT CANCELLED'
681 AND e.application_id = p_application_id
682 AND e.entity_code = 'TREASURY_CONFIRMATION'
683 AND e.event_type_code IN ('TREASURY_VOID')
684 ORDER BY 1;
685
686 BEGIN
687 l_procedure_name := g_path_name || l_procedure_name;
688 p_error_code := c_SUCCESS;
689 -------------------------------------------------------------------------
690 l_debug_info := 'Begin of procedure '||l_procedure_name;
691 trace(C_STATE_LEVEL, l_procedure_name, l_debug_info);
692 -------------------------------------------------------------------------
693
694 l_index := p_fv_extract_detail.COUNT;
695 FOR payment_rec IN c_ap_payment_details LOOP
696 fv_sla_utl_processing_pkg.g_CurrentEventId := payment_rec.event_id; --For Error Handling
697 l_process_row := TRUE;
698 l_fund_type := NULL;
699 trace(C_STATE_LEVEL, l_procedure_name, 'org_id='||payment_rec.org_id);
700 trace(C_STATE_LEVEL, l_procedure_name, 'evetn_id='||payment_rec.event_id);
701 trace(C_STATE_LEVEL, l_procedure_name, 'payment_hist_dist_id='||payment_rec.payment_hist_dist_id);
702 trace(C_STATE_LEVEL, l_procedure_name, 'event_type_code='||payment_rec.event_type_code);
703 trace(C_STATE_LEVEL, l_procedure_name, 'pay_dist_lookup_code='||payment_rec.pay_dist_lookup_code);
704 trace(C_STATE_LEVEL, l_procedure_name, 'invoice_type_lookup_code='||payment_rec.invoice_type_lookup_code);
705 trace(C_STATE_LEVEL, l_procedure_name, 'paid_base_amount='||payment_rec.paid_base_amount);
706 trace(C_STATE_LEVEL, l_procedure_name, 'amount='||payment_rec.amount);
707 trace(C_STATE_LEVEL, l_procedure_name, 'invoice_dist_amount='||payment_rec.invoice_dist_amount);
708 trace(C_STATE_LEVEL, l_procedure_name, 'invoice_dist_base_amount='||payment_rec.invoice_dist_base_amount);
709 trace(C_STATE_LEVEL, l_procedure_name, 'accounting_date='||payment_rec.accounting_date);
710 trace(C_STATE_LEVEL, l_procedure_name, 'dist_code_combination_id='||payment_rec.dist_code_combination_id);
711 trace(C_STATE_LEVEL, l_procedure_name, 'ce_bank_acct_use_id='||payment_rec.ce_bank_acct_use_id);
712 --Commented out for ER:11841305
713 /*
714 IF (p_error_code = C_SUCCESS) THEN
715 trace(C_STATE_LEVEL, l_procedure_name, 'Calling get_org_info');
716 trace(C_STATE_LEVEL, l_procedure_name, 'p_org_id='||payment_rec.org_id);
717 fv_sla_utl_processing_pkg.get_org_info
718 (
719 p_org_id => payment_rec.org_id,
720 p_org_rec => l_org_info,
721 p_error_code => p_error_code,
722 p_error_desc => p_error_desc
723 );
724 trace(C_STATE_LEVEL, l_procedure_name, 'get_org_info Returned');
725 trace(C_STATE_LEVEL, l_procedure_name, 'l_org_info.dit_flag='||l_org_info.dit_flag);
726 trace(C_STATE_LEVEL, l_procedure_name, 'l_org_info.cash_account='||l_org_info.cash_account);
727 trace(C_STATE_LEVEL, l_procedure_name, 'p_error_code='||p_error_code);
728 trace(C_STATE_LEVEL, l_procedure_name, 'p_error_desc='||p_error_desc);
729 END IF;
730 */
731 IF (p_error_code = C_SUCCESS) THEN
732 trace(C_STATE_LEVEL, l_procedure_name, 'Calling get_bank_account_info');
733 trace(C_STATE_LEVEL, l_procedure_name, 'p_bank_acct_use_id='||payment_rec.ce_bank_acct_use_id);
734 fv_sla_utl_processing_pkg.get_bank_account_info
735 (
736 p_bank_acct_use_id => payment_rec.ce_bank_acct_use_id,
737 p_bank_rec => l_bank_info,
738 p_error_code => p_error_code,
739 p_error_desc => p_error_desc
740 );
741 trace(C_STATE_LEVEL, l_procedure_name, 'get_bank_account_info Returned');
742 trace(C_STATE_LEVEL, l_procedure_name, 'l_bank_info.cash_bank_account_ccid='||l_bank_info.cash_bank_account_ccid);
743 trace(C_STATE_LEVEL, l_procedure_name, 'l_bank_info.l_bank_info='||l_bank_info.cash_bank_natural_account);
744 trace(C_STATE_LEVEL, l_procedure_name, 'l_bank_info.cash_clearing_account_ccid='||l_bank_info.cash_clearing_ccid);
745 trace(C_STATE_LEVEL, l_procedure_name, 'l_bank_info.cash_clearing_natural_account='||l_bank_info.cash_clearing_natural_account);
746 trace(C_STATE_LEVEL, l_procedure_name, 'p_error_code='||p_error_code);
747 trace(C_STATE_LEVEL, l_procedure_name, 'p_error_desc='||p_error_desc);
748 END IF;
749
750 IF ((p_error_code = C_SUCCESS) AND
751 (p_application_id = 200) AND
752 (payment_rec.payment_type_flag = 'A') AND
753 (payment_rec.pay_dist_lookup_code = 'CASH') AND
754 (payment_rec.invoice_type_lookup_code <> 'INTEREST')) THEN
755 l_process_row := FALSE;
756 --Modified for Bug11841305
757 --IF ((l_org_info.cash_account IS NOT NULL) AND
758 IF ((l_bank_info.cash_clearing_natural_account IS NOT NULL) AND
759 (l_bank_info.cash_bank_natural_account IS NOT NULL) AND
760 --(l_org_info.cash_account = l_bank_info.cash_bank_natural_account)) THEN
761 (l_bank_info.cash_clearing_natural_account = l_bank_info.cash_bank_natural_account)) THEN
762 l_process_row := TRUE;
763 END IF;
764 END IF;
765
766 IF ((p_error_code = C_SUCCESS) AND l_process_row) THEN
767 IF (p_error_code = C_SUCCESS) THEN
768 l_index := l_index + 1;
769 p_fv_extract_detail(l_index).event_id := payment_rec.event_id;
770 p_fv_extract_detail(l_index).line_number := payment_rec.payment_hist_dist_id;
771 p_fv_extract_detail(l_index).prior_year_flag := 'N';
772 fv_sla_utl_processing_pkg.init_extract_record(200, p_fv_extract_detail(l_index));
773
774 trace(C_STATE_LEVEL, l_procedure_name, 'Calling fv_sla_utl_processing_pkg.get_ledger_info');
775 trace(C_STATE_LEVEL, l_procedure_name, 'ledger_id='||payment_rec.ledger_id);
776 fv_sla_utl_processing_pkg.get_ledger_info
777 (
778 p_ledger_id => payment_rec.ledger_id,
779 p_ledger_rec => l_ledger_info,
780 p_error_code => p_error_code,
781 p_error_desc => p_error_desc
782 );
783 trace(C_STATE_LEVEL, l_procedure_name, 'fv_sla_utl_processing_pkg.get_ledger_info Returned');
784 trace(C_STATE_LEVEL, l_procedure_name, 'l_error_code='||p_error_code);
785 trace(C_STATE_LEVEL, l_procedure_name, 'l_error_desc='||p_error_desc);
786 END IF;
787
788 IF (p_error_code = C_SUCCESS) THEN
789 trace(C_STATE_LEVEL, l_procedure_name, 'Calling get_segment_values');
790 trace(C_STATE_LEVEL, l_procedure_name, 'p_ledger_id='||l_ledger_info.ledger_id);
791 trace(C_STATE_LEVEL, l_procedure_name, 'p_ccid='||payment_rec.dist_code_combination_id);
792 fv_sla_utl_processing_pkg.get_segment_values
793 (
794 p_ledger_id => l_ledger_info.ledger_id,
795 p_ccid => payment_rec.dist_code_combination_id,
796 p_fund_value => l_fund_value,
797 p_account_value => l_account_value,
798 p_bfy_value => l_bfy_value,
799 p_error_code => p_error_code,
800 p_error_desc => p_error_desc
801 );
802 trace(C_STATE_LEVEL, l_procedure_name, 'fv_sla_utl_processing_pkg.get_segment_values Returned');
803 trace(C_STATE_LEVEL, l_procedure_name, 'l_fund_value='||l_fund_value);
804 trace(C_STATE_LEVEL, l_procedure_name, 'l_account_value='||l_account_value);
805 trace(C_STATE_LEVEL, l_procedure_name, 'l_bfy_value='||l_bfy_value);
806 trace(C_STATE_LEVEL, l_procedure_name, 'p_error_code='||p_error_code);
807 trace(C_STATE_LEVEL, l_procedure_name, 'p_error_desc='||p_error_desc);
808 END IF;
809
810 l_cust_or_vend := 'V';
811 l_cust_or_vend_id := payment_rec.vendor_id;
812 IF (p_error_code = C_SUCCESS) THEN
813 IF (payment_rec.invoice_type_lookup_code = 'PAYMENT REQUEST' AND
814 payment_rec.source = 'Receivables' AND
815 payment_rec.ref_application_id = 222 AND
816 payment_rec.ref_product_table = 'AR_RECEIVABLE_APPLICATIONS_ALL' AND
817 payment_rec.ref_key1 IS NOT NULL) THEN
818 l_rec_attribute_cat := NULL;
819 trace(C_STATE_LEVEL, l_procedure_name, 'Calling get_ar_transaction_category');
820 trace(C_STATE_LEVEL, l_procedure_name, 'ref_key1='||payment_rec.ref_key1);
821 fv_sla_ar_processing_pkg.get_receipt_info_for_pr
822 (
823 p_transcation_id => payment_rec.ref_key1,
824 p_rec_attribute_cat => l_rec_attribute_cat,
825 p_advance_required => l_advance_required,
826 p_advance_amount => l_advance_amount,
827 p_customer_id => l_cust_or_vend_id,
828 p_error_code => p_error_code,
829 p_error_desc => p_error_desc
830 );
831 trace(C_STATE_LEVEL, l_procedure_name, 'get_ar_transaction_category Returned');
832 trace(C_STATE_LEVEL, l_procedure_name, 'l_rec_attribute_cat='||l_rec_attribute_cat);
833 trace(C_STATE_LEVEL, l_procedure_name, 'p_error_code='||p_error_code);
834 trace(C_STATE_LEVEL, l_procedure_name, 'p_error_desc='||p_error_desc);
835 l_cust_or_vend := 'C';
836 p_fv_extract_detail(l_index).ar_transaction_category := l_rec_attribute_cat;
837 p_fv_extract_detail(l_index).advance_required := l_advance_required;
838 END IF;
839 END IF;
840
841 IF (p_error_code = C_SUCCESS) THEN
842 trace(C_STATE_LEVEL, l_procedure_name, 'Calling get_fed_non_fed_ind');
843 trace(C_STATE_LEVEL, l_procedure_name, 'p_cust_vend_id='||payment_rec.vendor_id);
844 fv_sla_utl_processing_pkg.get_fed_non_fed_ind
845 (
846 p_cust_vend_id => l_cust_or_vend_id,
847 p_cust_or_vend => l_cust_or_vend,
848 p_fed_non_fed_ind => l_fed_non_fed_ind,
849 p_error_code => p_error_code,
850 p_error_desc => p_error_desc
851 );
852 trace(C_STATE_LEVEL, l_procedure_name, 'get_fed_non_fed_ind Returned');
853 trace(C_STATE_LEVEL, l_procedure_name, 'l_fed_non_fed_ind='||l_fed_non_fed_ind);
854 trace(C_STATE_LEVEL, l_procedure_name, 'p_error_code='||p_error_code);
855 trace(C_STATE_LEVEL, l_procedure_name, 'p_error_desc='||p_error_desc);
856 p_fv_extract_detail(l_index).fed_non_fed_ind := l_fed_non_fed_ind;
857 END IF;
858
859 IF (p_error_code = C_SUCCESS) THEN
860 trace(C_STATE_LEVEL, l_procedure_name, 'p_fund_value='||l_fund_value);
861 trace(C_STATE_LEVEL, l_procedure_name, 'p_account_value='||l_account_value);
862 trace(C_STATE_LEVEL, l_procedure_name, 'p_bfy_value='||l_bfy_value);
863 p_fv_extract_detail(l_index).fund_value :=l_fund_value;
864
865 trace(C_STATE_LEVEL, l_procedure_name, 'Calling get_fund_details');
866 trace(C_STATE_LEVEL, l_procedure_name, 'p_application_id='||p_application_id);
867 trace(C_STATE_LEVEL, l_procedure_name, 'p_ledger_id='||l_ledger_info.ledger_id);
868 trace(C_STATE_LEVEL, l_procedure_name, 'p_fund_value='||l_fund_value);
869 trace(C_STATE_LEVEL, l_procedure_name, 'p_gl_date='||payment_rec.accounting_date);
870 fv_sla_utl_processing_pkg.get_fund_details
871 (
872 p_application_id => p_application_id,
873 p_ledger_id => l_ledger_info.ledger_id,
874 p_fund_value => l_fund_value,
875 p_gl_date => payment_rec.accounting_date,
876 p_appor_category => p_fv_extract_detail(l_index).fund_category,
877 p_direct_or_reimb => p_fv_extract_detail(l_index).direct_or_reimb,
878 p_fund_status => p_fv_extract_detail(l_index).fund_expired_status,
879 p_fund_time_frame => p_fv_extract_detail(l_index).fund_time_frame,
880 p_treasury_symbol_id => p_fv_extract_detail(l_index).treasury_symbol_id,
881 p_treasury_symbol => l_treasury_symbol,
882 p_no_pya_acct_flag => l_no_pya_acct_flag,
883 p_fund_type => l_fund_type,
884 p_error_code => p_error_code,
885 p_error_desc => p_error_desc
886 );
887 trace(C_STATE_LEVEL, l_procedure_name, 'fv_sla_utl_processing_pkg.get_fund_details Returned');
888 trace(C_STATE_LEVEL, l_procedure_name, 'fund_category='||p_fv_extract_detail(l_index).fund_category);
889 trace(C_STATE_LEVEL, l_procedure_name, 'fund_expired_status='||p_fv_extract_detail(l_index).fund_expired_status);
890 trace(C_STATE_LEVEL, l_procedure_name, 'fund_time_frame='||p_fv_extract_detail(l_index).fund_time_frame);
891 trace(C_STATE_LEVEL, l_procedure_name, 'treasury_symbol_id='||p_fv_extract_detail(l_index).treasury_symbol_id);
892 trace(C_STATE_LEVEL, l_procedure_name, 'l_treasury_symbol='||l_treasury_symbol);
893 trace(C_STATE_LEVEL, l_procedure_name, 'l_fund_type='||l_fund_type);
894 trace(C_STATE_LEVEL, l_procedure_name, 'p_error_code='||p_error_code);
895 trace(C_STATE_LEVEL, l_procedure_name, 'p_error_desc='||p_error_desc);
896 END IF;
897
898 IF (p_error_code = C_SUCCESS) THEN
899 p_fv_extract_detail(l_index).prior_year_flag := 'N';
900 IF (NVL(l_no_pya_acct_flag, 'N') = 'N') THEN
901 trace(C_STATE_LEVEL, l_procedure_name, 'Calling get_prior_year_status');
902 trace(C_STATE_LEVEL, l_procedure_name, 'p_ledger_id='||l_ledger_info.ledger_id);
903 trace(C_STATE_LEVEL, l_procedure_name, 'l_bfy_value='||l_bfy_value);
904 trace(C_STATE_LEVEL, l_procedure_name, 'p_gl_date='||payment_rec.accounting_date);
905 fv_sla_utl_processing_pkg.get_prior_year_status
906 (
907 p_application_id => C_GL_APPLICATION,
908 p_ledger_id => l_ledger_info.ledger_id,
909 p_bfy_value => l_bfy_value,
910 p_gl_date => payment_rec.accounting_date,
911 p_pya => p_fv_extract_detail(l_index).prior_year_flag,
912 p_pya_type => l_pya_type,
913 p_error_code => p_error_code,
914 p_error_desc => p_error_desc
915 );
916 trace(C_STATE_LEVEL, l_procedure_name, 'fv_sla_utl_processing_pkg.get_prior_year_status Returned');
917 trace(C_STATE_LEVEL, l_procedure_name, 'prior_year_flag='||p_fv_extract_detail(l_index).prior_year_flag);
918 trace(C_STATE_LEVEL, l_procedure_name, 'l_pya_type='||l_pya_type);
919 trace(C_STATE_LEVEL, l_procedure_name, 'p_error_code='||p_error_code);
920 trace(C_STATE_LEVEL, l_procedure_name, 'p_error_desc='||p_error_desc);
921 END IF;
922 END IF;
923
924 IF (p_error_code = C_SUCCESS) THEN
925 trace(C_STATE_LEVEL, l_procedure_name, 'fund_category='||p_fv_extract_detail(l_index).fund_category);
926 trace(C_STATE_LEVEL, l_procedure_name, 'fund_expired_status='||p_fv_extract_detail(l_index).fund_expired_status);
927 trace(C_STATE_LEVEL, l_procedure_name, 'fund_time_frame='||p_fv_extract_detail(l_index).fund_time_frame);
928 trace(C_STATE_LEVEL, l_procedure_name, 'treasury_symbol_id='||p_fv_extract_detail(l_index).treasury_symbol_id);
929 trace(C_STATE_LEVEL, l_procedure_name, 'l_treasury_symbol='||l_treasury_symbol);
930 trace(C_STATE_LEVEL, l_procedure_name, 'event_type_code='||payment_rec.event_type_code);
931
932 p_fv_extract_detail(l_index).fund_type := l_fund_type;
933 IF (payment_rec.invoice_type_lookup_code = 'PAYMENT REQUEST' AND
934 payment_rec.source = 'Receivables' AND
935 payment_rec.ref_application_id = 222 AND
936 payment_rec.ref_product_table = 'AR_RECEIVABLE_APPLICATIONS_ALL' AND
937 payment_rec.ref_key1 IS NOT NULL) THEN
938 trace(C_STATE_LEVEL, l_procedure_name, 'Processing Refund');
939 p_fv_extract_detail(l_index).acc_refund_amount := NVL(payment_rec.paid_base_amount, payment_rec.amount);
940 p_fv_extract_detail(l_index).ent_refund_amount := payment_rec.amount;
941 ELSIF (payment_rec.invoice_type_lookup_code = 'PREPAYMENT') THEN
942 trace(C_STATE_LEVEL, l_procedure_name, 'Processing Prepayment');
943 p_fv_extract_detail(l_index).acc_paid_obl_amount := NVL(payment_rec.paid_base_amount, payment_rec.amount);
944 p_fv_extract_detail(l_index).ent_paid_obl_amount := payment_rec.amount;
945 IF (payment_rec.po_distribution_id IS NULL) THEN
946 p_fv_extract_detail(l_index).acc_unanticipated_bud_amount := -1*NVL(payment_rec.invoice_dist_base_amount, payment_rec.invoice_dist_amount);
947 p_fv_extract_detail(l_index).ent_unanticipated_bud_amount := -1*payment_rec.invoice_dist_amount;
948 IF (p_fv_extract_detail(l_index).direct_or_reimb = 'D') THEN
949 p_fv_extract_detail(l_index).acc_expended_approp_amount := NVL(payment_rec.paid_base_amount, payment_rec.amount);
950 p_fv_extract_detail(l_index).ent_expended_approp_amount := payment_rec.amount;
951 END IF;
952 ELSE
953 p_fv_extract_detail(l_index).acc_unpaid_obl_amount := -1*NVL(payment_rec.invoice_dist_base_amount, payment_rec.invoice_dist_amount);
954 p_fv_extract_detail(l_index).ent_unpaid_obl_amount := -1*payment_rec.invoice_dist_amount;
955 END IF;
956 p_fv_extract_detail(l_index).acc_unanticipated_bud_amount := p_fv_extract_detail(l_index).acc_unanticipated_bud_amount-1*
957 (p_fv_extract_detail(l_index).acc_unpaid_obl_amount +
958 p_fv_extract_detail(l_index).acc_paid_obl_amount);
959 p_fv_extract_detail(l_index).ent_unanticipated_bud_amount := p_fv_extract_detail(l_index).ent_unanticipated_bud_amount-1*
960 (p_fv_extract_detail(l_index).ent_unpaid_obl_amount +
961 p_fv_extract_detail(l_index).ent_paid_obl_amount);
962
963 ELSIF (payment_rec.invoice_type_lookup_code = 'INTEREST' AND p_application_id = 200) THEN
964 trace(C_STATE_LEVEL, l_procedure_name, 'Processing Interest');
965 IF (p_fv_extract_detail(l_index).direct_or_reimb = 'D') THEN
966 p_fv_extract_detail(l_index).acc_expended_approp_amount := NVL(payment_rec.paid_base_amount, payment_rec.amount);
967 p_fv_extract_detail(l_index).ent_expended_approp_amount := payment_rec.amount;
968 END IF;
969 p_fv_extract_detail(l_index).acc_unanticipated_bud_amount := -1*NVL(payment_rec.paid_base_amount, payment_rec.amount);
970 p_fv_extract_detail(l_index).ent_unanticipated_bud_amount := -1*payment_rec.amount;
971 IF ((l_bank_info.cash_clearing_natural_account IS NOT NULL) AND
972 (l_bank_info.cash_bank_natural_account IS NOT NULL) AND
973 (l_bank_info.cash_clearing_natural_account = l_bank_info.cash_bank_natural_account)) THEN
974 p_fv_extract_detail(l_index).acc_paid_exp_amount := NVL(payment_rec.paid_base_amount, payment_rec.amount);
975 p_fv_extract_detail(l_index).ent_paid_exp_amount := payment_rec.amount;
976 ELSE
977 p_fv_extract_detail(l_index).acc_unpaid_exp_amount := NVL(payment_rec.paid_base_amount, payment_rec.amount);
978 p_fv_extract_detail(l_index).ent_unpaid_exp_amount := payment_rec.amount;
979 END IF;
980 ELSE
981 p_fv_extract_detail(l_index).acc_unpaid_exp_amount := -1*NVL(payment_rec.invoice_dist_base_amount, payment_rec.invoice_dist_amount);
982 p_fv_extract_detail(l_index).ent_unpaid_exp_amount := -1*payment_rec.invoice_dist_amount;
983 IF (payment_rec.pay_dist_lookup_code = 'DISCOUNT') THEN
984 IF (p_fv_extract_detail(l_index).direct_or_reimb = 'D') THEN
985 p_fv_extract_detail(l_index).acc_expended_approp_amount := -1*NVL(payment_rec.paid_base_amount, payment_rec.amount);
986 p_fv_extract_detail(l_index).ent_expended_approp_amount := -1*payment_rec.amount;
987 END IF;
988 p_fv_extract_detail(l_index).acc_unanticipated_bud_amount := NVL(payment_rec.paid_base_amount, payment_rec.amount);
989 p_fv_extract_detail(l_index).ent_unanticipated_bud_amount := payment_rec.amount;
990 ELSE
991 p_fv_extract_detail(l_index).acc_paid_exp_amount := NVL(payment_rec.paid_base_amount, payment_rec.amount);
992 p_fv_extract_detail(l_index).ent_paid_exp_amount := payment_rec.amount;
993 p_fv_extract_detail(l_index).acc_unanticipated_bud_amount := -1*(p_fv_extract_detail(l_index).acc_unpaid_exp_amount +
994 p_fv_extract_detail(l_index).acc_paid_exp_amount);
995 p_fv_extract_detail(l_index).ent_unanticipated_bud_amount := -1*(p_fv_extract_detail(l_index).ent_unpaid_exp_amount +
996 p_fv_extract_detail(l_index).ent_paid_exp_amount);
997 IF (p_fv_extract_detail(l_index).acc_unanticipated_bud_amount IS NOT NULL) THEN
998 IF (p_fv_extract_detail(l_index).direct_or_reimb = 'D') THEN
999 p_fv_extract_detail(l_index).acc_expended_approp_amount := -1*p_fv_extract_detail(l_index).acc_unanticipated_bud_amount;
1000 p_fv_extract_detail(l_index).ent_expended_approp_amount := -1*p_fv_extract_detail(l_index).ent_unanticipated_bud_amount;
1001 END IF;
1002 END IF;
1003 END IF;
1004 END IF;
1005 END IF;
1006 END IF; --IF (l_process_row) THEN
1007
1008 IF (p_error_code <> c_SUCCESS) THEN
1009 EXIT;
1010 END IF;
1011 END LOOP;
1012
1013 EXCEPTION
1014 WHEN OTHERS THEN
1015 p_error_code := c_FAILURE;
1016 fnd_message.set_name('FND', 'FND_GENERIC_MESSAGE');
1017 fnd_message.set_token('MESSAGE' , 'System Error :'||SQLERRM);
1018 p_error_desc := fnd_message.get;
1019 stack_error (l_procedure_name, 'FINAL', p_error_desc);
1020 trace(C_STATE_LEVEL, l_procedure_name, 'ERROR:FINAL:'||p_error_desc);
1021 END;
1022
1023 PROCEDURE ap_extract
1024 (
1025 p_application_id IN NUMBER,
1026 p_accounting_mode IN VARCHAR2
1027 )
1028 IS
1029 l_debug_info VARCHAR2(240);
1030 l_procedure_name VARCHAR2(100):='.ap_extract';
1031 l_error_code NUMBER;
1032 l_error_desc VARCHAR2(2000);
1033 l_gt_error_code NUMBER;
1034 l_fv_extract_detail fv_sla_utl_processing_pkg.fv_ref_detail;
1035
1036 BEGIN
1037
1038 l_procedure_name := g_path_name || l_procedure_name;
1039 l_error_code := c_SUCCESS;
1040 -------------------------------------------------------------------------
1041 l_debug_info := 'Begin of procedure '||l_procedure_name;
1042 trace(C_STATE_LEVEL, l_procedure_name, l_debug_info);
1043 -------------------------------------------------------------------------
1044
1045 IF (p_application_id <> 200) THEN
1046 RETURN;
1047 END IF;
1048
1049 IF (l_error_code = c_SUCCESS) THEN
1050 process_invoice
1051 (
1052 p_application_id => p_application_id,
1053 p_fv_extract_detail => l_fv_extract_detail,
1054 p_error_code => l_error_code,
1055 p_error_desc => l_error_desc
1056 );
1057 END IF;
1058
1059 IF (l_error_code = c_SUCCESS) THEN
1060 process_payments
1061 (
1062 p_application_id => p_application_id,
1063 p_fv_extract_detail => l_fv_extract_detail,
1064 p_error_code => l_error_code,
1065 p_error_desc => l_error_desc
1066 );
1067 END IF;
1068
1069 IF (l_error_code = C_SUCCESS) THEN
1070 FORALL l_index IN l_fv_extract_detail .first..l_fv_extract_detail.last
1071 INSERT INTO fv_extract_detail_gt VALUES l_fv_extract_detail(l_index);
1072 END IF;
1073
1074 IF (l_error_code = C_SUCCESS) THEN
1075 trace(C_STATE_LEVEL, l_procedure_name, 'Calling fv_sla_utl_processing_pkg.pya_processor');
1076 fv_sla_utl_processing_pkg.pya_processor
1077 (
1078 p_application_id => p_application_id,
1079 p_error_code => l_error_code,
1080 p_error_desc => l_error_desc
1081 );
1082 END IF;
1083
1084 trace(C_STATE_LEVEL, l_procedure_name, 'Calling fv_sla_utl_processing_pkg.dump_gt_table');
1085 fv_sla_utl_processing_pkg.dump_gt_table
1086 (
1087 p_error_code => l_gt_error_code,
1088 p_error_desc => l_error_desc
1089 );
1090
1091 IF (l_error_code <> C_SUCCESS) OR (l_gt_error_code <> C_SUCCESS) THEN
1092 APP_EXCEPTION.RAISE_EXCEPTION;
1093 END IF;
1094
1095 -------------------------------------------------------------------------
1096 l_debug_info := 'End of procedure'||l_procedure_name;
1097 trace(C_PROC_LEVEL, l_procedure_name, l_debug_info);
1098 -------------------------------------------------------------------------
1099
1100 EXCEPTION
1101
1102 WHEN OTHERS THEN
1103 l_debug_info := 'Error in Federal AP SLA processing ';
1104 trace(C_STATE_LEVEL, l_procedure_name, l_debug_info);
1105 FND_MESSAGE.SET_NAME('FND', 'FND_GENERIC_MESSAGE');
1106 FND_MESSAGE.SET_TOKEN('MESSAGE', 'Procedure :fv_sla_processing_pkg.ap_extract'|| CRLF||'Error :'||SQLERRM);
1107 FND_MSG_PUB.ADD;
1108 APP_EXCEPTION.RAISE_EXCEPTION;
1109 END ap_extract;
1110
1111 PROCEDURE extract
1112 (
1113 p_application_id IN NUMBER,
1114 p_accounting_mode IN VARCHAR2
1115 )
1116 IS
1117
1118 l_debug_info VARCHAR2(240);
1119 l_procedure_name VARCHAR2(100) :='.EXTRACT';
1120
1121 BEGIN
1122
1123 l_procedure_name := g_path_name || l_procedure_name;
1124 -------------------------------------------------------------------------
1125 l_debug_info := 'Begin of procedure '||l_procedure_name;
1126 trace(C_STATE_LEVEL, l_procedure_name, l_debug_info);
1127 -------------------------------------------------------------------------
1128 -------------------------------------------------------------------------
1129
1130
1131 IF (p_application_id = 200) THEN
1132 ap_extract(p_application_id, p_accounting_mode);
1133 ELSE
1134 RETURN;
1135 END IF;
1136
1137 -------------------------------------------------------------------------
1138 l_debug_info := 'End of procedure '||l_procedure_name;
1139 trace(C_PROC_LEVEL, l_procedure_name, l_debug_info);
1140 -------------------------------------------------------------------------
1141
1142 EXCEPTION
1143 WHEN OTHERS THEN
1144 l_debug_info := 'Error in Federal SLA Processing ' || SQLERRM;
1145 trace(C_STATE_LEVEL, l_procedure_name, l_debug_info);
1146 FND_MESSAGE.SET_NAME('FND', 'FND_GENERIC_MESSAGE');
1147 FND_MESSAGE.SET_TOKEN('MESSAGE' ,
1148 'Procedure :fv_sla_processing_pkg.extract'|| CRLF||
1149 'Error :'||SQLERRM);
1150 FND_MSG_PUB.ADD;
1151 APP_EXCEPTION.RAISE_EXCEPTION;
1152
1153 END extract;
1154
1155 PROCEDURE preaccounting
1156 (
1157 p_application_id IN NUMBER,
1158 p_ledger_id IN INTEGER,
1159 p_process_category IN VARCHAR2,
1160 p_end_date IN DATE,
1161 p_accounting_mode IN VARCHAR2,
1162 p_valuation_method IN VARCHAR2,
1163 p_security_id_int_1 IN INTEGER,
1164 p_security_id_int_2 IN INTEGER,
1165 p_security_id_int_3 IN INTEGER,
1166 p_security_id_char_1 IN VARCHAR2,
1167 p_security_id_char_2 IN VARCHAR2,
1168 p_security_id_char_3 IN VARCHAR2,
1169 p_report_request_id IN INTEGER
1170 ) IS
1171 BEGIN
1172 NULL;
1173 END;
1174
1175 PROCEDURE postprocessing
1176 (
1177 p_application_id IN NUMBER,
1178 p_accounting_mode IN VARCHAR2
1179 )
1180 IS
1181 BEGIN
1182 NULL;
1183 END;
1184
1185
1186 PROCEDURE postaccounting
1187 (
1188 p_application_id IN NUMBER,
1189 p_ledger_id IN INTEGER,
1190 p_process_category IN VARCHAR2,
1191 p_end_date IN DATE,
1192 p_accounting_mode IN VARCHAR2,
1193 p_valuation_method IN VARCHAR2,
1194 p_security_id_int_1 IN INTEGER,
1195 p_security_id_int_2 IN INTEGER,
1196 p_security_id_int_3 IN INTEGER,
1197 p_security_id_char_1 IN VARCHAR2,
1198 p_security_id_char_2 IN VARCHAR2,
1199 p_security_id_char_3 IN VARCHAR2,
1200 p_report_request_id IN INTEGER
1201 )
1202 IS
1203 BEGIN
1204 NULL;
1205 END;
1206 BEGIN
1207 init;
1208 END fv_sla_ap_processing_pkg;