[Home] [Help]
PACKAGE BODY: APPS.OKL_GENERATE_ACCRUALS_PVT
Source
1 PACKAGE BODY OKL_GENERATE_ACCRUALS_PVT AS
2 /* $Header: OKLRACRB.pls 120.66.12010000.8 2008/11/18 10:42:24 racheruv ship $ */
3
4 --Added by kthiruva for Logging Purposes
5 L_DEBUG_ENABLED CONSTANT VARCHAR2(10) := OKL_DEBUG_PUB.CHECK_LOG_ENABLED;
6
7 -- Bug 4884618
8 l_sty_select_basis VARCHAR2(2000);
9 -- Bug 4884618
10
11 -- MGAAP start 7263041
12 G_TRY_ID OKL_TRX_TYPES_V.id%TYPE;
13 G_PERIOD_NAME_REP VARCHAR2(2000);
14 G_PERIOD_START_DATE_REP DATE;
15 G_PERIOD_END_DATE_REP DATE;
16 G_SOB_ID_REP OKL_SYS_ACCT_OPTS.set_of_books_id%TYPE;
17 G_SOB_NAME_REP VARCHAR2(2000);
18 G_ORG_ID NUMBER;
19 G_ORG_NAME VARCHAR2(2000);
20 G_ACCRUAL_REVERSAL_DAYS OKL_SYS_ACCT_OPTS.accrual_reversal_days%TYPE;
21 G_FUNC_CURRENCY_CODE_REP OKL_TRX_CONTRACTS.CURRENCY_CODE%TYPE;
22 G_ACCRUAL_DATE DATE;
23
24 TYPE trx_rec_type IS RECORD (
25 old_trx_number okl_trx_contracts_all.trx_number%TYPE := OKL_API.G_MISS_CHAR,
26 new_trx_number okl_trx_contracts_all.trx_number%TYPE := OKL_API.G_MISS_CHAR,
27 ID okl_trx_contracts_all.ID%TYPE := OKL_API.G_MISS_NUM
28 );
29
30 TYPE trx_tbl_type IS TABLE OF trx_rec_type INDEX BY BINARY_INTEGER;
31 G_trx_number_tbl trx_tbl_type;
32 G_trx_number_tbl_cnt number; -- MGAAP
33
34 -- MGAAP end 7263041
35
36 -- Cursor to select the number of days for a reverse transaction
37 CURSOR sty_select_basis_csr IS
38 SELECT validate_khr_start_date
39 FROM OKL_SYS_ACCT_OPTS;
40
41 --Added by dpsingh for SLA Uptake (Bug 5707866)
42 -- Cursor to select accrual reversal date for an accrual transaction
43 CURSOR get_accrual_reversal_date(p_ledger_id NUMBER,p_accrual_date Date) IS
44 SELECT end_date +1 accrual_reversal_date
45 FROM gl_period_statuses
46 WHERE application_id = 540
47 AND set_of_books_id =p_ledger_id
48 AND p_accrual_date BETWEEN start_date AND end_date;
49
50 -- Process accrual rec type
51 TYPE process_accrual_rec_type IS RECORD (
52 contract_id OKL_K_HEADERS_FULL_V.ID%TYPE,
53 contract_number OKL_K_HEADERS_FULL_V.CONTRACT_NUMBER%TYPE,
54 sts_code OKL_K_HEADERS_FULL_V.STS_CODE%TYPE,
55 product_id OKL_K_HEADERS_FULL_V.PDT_ID%TYPE,
56 accrual_status OKL_TRX_CONTRACTS.ACCRUAL_STATUS_YN%TYPE,
57 override_status OKL_TRX_CONTRACTS.UPDATE_STATUS_YN%TYPE,
58 start_date OKL_K_HEADERS_FULL_V.CONTRACT_NUMBER%TYPE,
59 deal_type OKL_K_HEADERS_FULL_V.DEAL_TYPE%TYPE,
60 khr_currency_code OKL_TRX_CONTRACTS.CURRENCY_CODE%TYPE,
61 currency_conv_type OKL_TRX_CONTRACTS.CURRENCY_CONVERSION_TYPE%TYPE,
62 currency_conv_date OKL_TRX_CONTRACTS.CURRENCY_CONVERSION_DATE%TYPE,
63 currency_conv_rate OKL_TRX_CONTRACTS.CURRENCY_CONVERSION_RATE%TYPE,
64 func_currency_code OKL_TRX_CONTRACTS.CURRENCY_CODE%TYPE,
65 try_id OKL_TRX_TYPES_V.ID%TYPE,
66 reverse_date_to DATE,
67 batch_name VARCHAR2(2000),
68 sob_id OKL_TRX_CONTRACTS.SET_OF_BOOKS_ID%TYPE,
69 accrual_date DATE,
70 period_end_date DATE,
71 period_start_date DATE,
72 source_trx_id OKL_TRX_CONTRACTS.SOURCE_TRX_ID%TYPE,
73 source_trx_type OKL_TRX_CONTRACTS.SOURCE_TRX_TYPE%TYPE,
74 submission_mode VARCHAR2(2000),
75 rev_rec_method OKL_PRODUCT_PARAMETERS_V.REVENUE_RECOGNITION_METHOD%TYPE);
76
77 --Added by kthiruva on 02-Mar-2006 for logging purposes
78 --Start of Changes
79 PROCEDURE WRITE_TO_LOG(p_message IN VARCHAR2)
80 IS
81 BEGIN
82
83 IF (L_DEBUG_ENABLED='Y' and fnd_log.level_statement >= fnd_log.g_current_runtime_level)
84 THEN
85 fnd_log.string(fnd_log.level_statement,
86 'okl_generate_accruals',
87 p_message );
88
89 END IF;
90
91 IF L_DEBUG_ENABLED = 'Y' then
92 fnd_file.put_line (fnd_file.log,p_message);
93 okl_debug_pub.logmessage(p_message);
94 END IF;
95
96 END WRITE_TO_LOG;
97
98 -- Function which calculates the receivable value for a contract
99 FUNCTION CALCULATE_CNTRCT_REC(p_ctr_id IN NUMBER) RETURN NUMBER IS
100
101 l_sysdate DATE := SYSDATE;
102 l_rent_sty_id NUMBER;
103 l_receivable_balance NUMBER := 0;
104 l_sty_name VARCHAR2(2000) := 'RENT';
105 l_return_status VARCHAR2(1) := OKL_API.G_RET_STS_SUCCESS;
106
107 -- SGIYER
108 -- Commenting Cursor below as not needed. user Defined Streams Project.
109 --CURSOR get_sty_id_csr IS
110 --SELECT id FROM OKL_STRM_TYPE_TL
111 --WHERE name = l_sty_name
112 --AND language = 'US';
113
114 CURSOR get_unb_rec_csr(p_sty_id NUMBER) IS
115 SELECT NVL(SUM(ste.amount),0)
116 FROM OKL_STREAMS stm,
117 OKL_STRM_ELEMENTS ste
118 WHERE stm.khr_id = p_ctr_id
119 AND stm.sty_id = p_sty_id
120 AND stm.active_yn = 'Y'
121 AND ste.stm_id = stm.id
122 AND TRUNC(ste.stream_element_date) > TRUNC(l_sysdate)
123 GROUP BY stm.sty_id;
124
125 BEGIN
126 -- Get the stream type id for the rent stream
127 -- Commenting below as not needed. User Defined Streams Project.
128 --OPEN get_sty_id_csr;
129 --FETCH get_sty_id_csr INTO l_rent_sty_id;
130 -- IF get_sty_id_csr%NOTFOUND THEN
131 -- RAISE NO_DATA_FOUND;
132 -- END IF;
133 --CLOSE get_sty_id_csr;
134 OKL_STREAMS_UTIL.get_primary_stream_type(
135 p_khr_id => p_ctr_id,
136 p_primary_sty_purpose => 'RENT',
137 x_return_status => l_return_status,
138 x_primary_sty_id => l_rent_sty_id);
139
140 IF l_return_status <> Okl_Api.G_RET_STS_SUCCESS THEN
141 RAISE NO_DATA_FOUND;
142 END IF;
143
144 -- Open the cursor to get the receivable balance
145 OPEN get_unb_rec_csr(l_rent_sty_id);
146 FETCH get_unb_rec_csr INTO l_receivable_balance;
147 CLOSE get_unb_rec_csr;
148
149 IF l_receivable_balance IS NULL THEN
150 RAISE NO_DATA_FOUND;
151 END IF;
152
153 RETURN l_receivable_balance;
154
155 EXCEPTION
156 WHEN NO_DATA_FOUND THEN
157 --IF get_sty_id_csr%ISOPEN THEN
158 -- CLOSE get_sty_id_csr;
159 --END IF;
160 RETURN NULL;
161 WHEN OTHERS THEN
162 IF get_unb_rec_csr%ISOPEN THEN
163 CLOSE get_unb_rec_csr;
164 END IF;
165 RETURN NULL;
166 END CALCULATE_CNTRCT_REC;
167
168
169
170 -- Function which calculates values for the operand i.e. Limit Days or Bills Unpaid
171 FUNCTION CALCULATE_OPERAND_VALUE(p_ctr_id IN OKL_K_HEADERS_FULL_V.ID%TYPE
172 ,p_operand_code IN VARCHAR2) RETURN NUMBER IS
173
174 l_sysdate DATE := SYSDATE;
175 l_return_value NUMBER := 0;
176 l_oldest_due_date DATE;
177 l_outstanding_invoices NUMBER;
178
179 -- Bug 4058948. Changing view from okl_bpd_leasing_payment_trx_v to okl_bpd_contract_invoices_v.
180 -- Also adding new where condition to exclude invoices subject to cash receipt.
181 CURSOR operand_values_csr IS
182 SELECT MIN(DUE_DATE) min_due_date, COUNT(*) total_os
183 FROM OKL_BPD_CONTRACT_INVOICES_V
184 WHERE contract_id = p_ctr_id
185 AND revenue_rec_basis <> 'CASH_RECEIPT'
186 AND status = 'OP';
187
188 BEGIN
189 FOR x IN operand_values_csr
190 LOOP
191 l_oldest_due_date := x.min_due_date;
192 l_outstanding_invoices := x.total_os;
193 END LOOP;
194
195 IF p_operand_code = 'LDYS' THEN
196 l_return_value := NVL(TO_NUMBER(l_sysdate - l_oldest_due_date),0);
197
198 ELSIF p_operand_code = 'BUNP' THEN
199 l_return_value := NVL(l_outstanding_invoices,0);
200 ELSE
201 RAISE Okl_Api.G_EXCEPTION_ERROR;
202 END IF;
203
204 RETURN l_return_value;
205 EXCEPTION
206
207 WHEN Okl_Api.G_EXCEPTION_ERROR THEN
208 -- store SQL error message on message stack for caller
209 Okl_Api.set_message(p_app_name => g_app_name,
210 p_msg_name => 'OKL_AGN_INVALID_OPERAND_CODE');
211
212 WHEN OTHERS THEN
213 -- store SQL error message on message stack for caller
214 Okl_Api.SET_MESSAGE(p_app_name => g_app_name,
215 p_msg_name => g_unexpected_error,
216 p_token1 => g_sqlcode_token,
217 p_token1_value => SQLCODE,
218 p_token2 => g_sqlerrm_token,
219 p_token2_value => SQLERRM);
220 END CALCULATE_OPERAND_VALUE;
221
222 ---------------------------------------------------------------------------
223 -- FUNCTION get_syndicate_flag
224 ---------------------------------------------------------------------------
225 FUNCTION GET_SYNDICATE_FLAG(
226 p_contract_id IN NUMBER,
227 x_syndicate_flag OUT NOCOPY VARCHAR2)
228 RETURN VARCHAR2
229 IS
230 -- A complex query to find out if a contract has syndication
231 CURSOR syndicate_flag_csr(p_contract_id NUMBER) IS
232 SELECT 'Y' FROM okc_k_headers_b chr
233 WHERE id = p_contract_id
234 AND EXISTS
235 (
236 SELECT 'x' FROM okc_k_items cim
237 WHERE cim.object1_id1 = to_char(chr.id)
238 AND EXISTS
239 (
240 SELECT 'x' FROM okc_k_lines_b cle, okc_line_styles_b lse
241 WHERE cle.lse_id = lse.id
242 AND lse.lty_code = 'SHARED'
243 AND cle.id = cim.cle_id
244 )
245 AND EXISTS
246 (
247 SELECT 'x' FROM okc_k_headers_b chr2
248 WHERE chr2.id = cim.dnz_chr_id
249 AND chr2.scs_code = 'SYNDICATION'
250 AND chr2.sts_code not in ('TERMINATED','ABANDONED')
251 )
252 )
253 AND chr.scs_code in ('LEASE','LOAN');
254
255 l_syndicate_flag VARCHAR2(1) := 'N';
256 l_api_version NUMBER;
257 l_return_status VARCHAR2(1) := Okl_API.G_RET_STS_SUCCESS;
258 l_msg_count NUMBER;
259 l_msg_data VARCHAR2(2000);
260
261 BEGIN
262
263 OPEN syndicate_flag_csr(p_contract_id);
264 FETCH syndicate_flag_csr INTO l_syndicate_flag;
265 CLOSE syndicate_flag_csr;
266
267 x_syndicate_flag := l_syndicate_flag;
268 RETURN l_return_status;
269 EXCEPTION
270 WHEN OTHERS THEN
271 OKL_API.SET_MESSAGE( p_app_name => G_APP_NAME
272 ,p_msg_name => G_UNEXPECTED_ERROR
273 ,p_token1 => G_SQLCODE_TOKEN
274 ,p_token1_value => SQLCODE
275 ,p_token2 => G_SQLERRM_TOKEN
276 ,p_token2_value => SQLERRM);
277 l_return_status := OKL_API.G_RET_STS_UNEXP_ERROR;
278 RETURN(l_return_status);
279
280 END GET_SYNDICATE_FLAG;
281
282 ---------------------------------------------------------------------------
283 -- FUNCTION get_factoring_flag
284 ---------------------------------------------------------------------------
285 FUNCTION GET_FACTORING_FLAG(
286 p_contract_id IN NUMBER,
287 x_factoring_flag OUT NOCOPY VARCHAR2)
288 RETURN VARCHAR2
289 IS
290 -- Cursor to check factoring
291 CURSOR factoring_csr(p_ctr_id NUMBER) IS
292 SELECT rule_information1
293 FROM OKC_RULES_B r
294 WHERE r.dnz_chr_id = p_ctr_id
295 AND r.rule_information_category = 'LAFCTG';
296
297 l_rule_information1 VARCHAR2(2000);
298 l_return_status VARCHAR2(1) := Okl_API.G_RET_STS_SUCCESS;
299 l_msg_count NUMBER;
300 l_msg_data VARCHAR2(2000);
301
302 BEGIN
303
304 OPEN factoring_csr(p_contract_id);
305 FETCH factoring_csr INTO l_rule_information1;
306 CLOSE factoring_csr;
307
308 IF l_rule_information1 IS NOT NULL THEN
309 x_factoring_flag := 'Y';
310 ELSE
311 x_factoring_flag := 'N';
312 END IF;
313
314 RETURN l_return_status;
315 EXCEPTION
316 WHEN OTHERS THEN
317 OKL_API.SET_MESSAGE( p_app_name => G_APP_NAME
318 ,p_msg_name => G_UNEXPECTED_ERROR
319 ,p_token1 => G_SQLCODE_TOKEN
320 ,p_token1_value => SQLCODE
321 ,p_token2 => G_SQLERRM_TOKEN
322 ,p_token2_value => SQLERRM);
323 l_return_status := OKL_API.G_RET_STS_UNEXP_ERROR;
324 RETURN(l_return_status);
325
326 END GET_FACTORING_FLAG;
327
328 FUNCTION CHECK_DATE_ACCRUED_TILL(p_khr_id IN OKL_K_HEADERS_FULL_V.ID%TYPE
329 ,p_date IN DATE) RETURN VARCHAR2 IS
330
331 --dkagrawa changed cursor to use view OKL_PROD_QLTY_VAL_UV than okl_product_parameters_v
332 CURSOR get_rev_rec_method_csr(p_chr_id NUMBER) IS
333 SELECT pdt.quality_val revenue_recognition_method
334 FROM OKL_PROD_QLTY_VAL_UV pdt,
335 OKL_K_HEADERS_FULL_V khr
336 WHERE khr.id = p_chr_id
337 AND khr.pdt_id = pdt.pdt_id
338 AND pdt.quality_name = 'REVENUE_RECOGNITION_METHOD'
339 AND khr.scs_code = 'LEASE'
340 UNION
341 SELECT 'STREAMS' revenue_recognition_method
342 FROM OKL_K_HEADERS_FULL_V khr
343 WHERE khr.id = p_chr_id
344 AND khr.scs_code = 'INVESTOR'
345 ;
346
347 CURSOR get_contract_number_csr(p_chr_id NUMBER) IS
348 SELECT a.contract_number,
349 nvl(b.multi_gaap_yn, 'N') multi_gaap_yn,
350 c.reporting_pdt_id -- MGAAP 7263041
351 FROM OKC_K_HEADERS_B a, OKL_K_HEADERS B,
352 OKL_PRODUCTS C
353 WHERE A.id = p_chr_id
354 AND A.id = B.id
355 AND B.PDT_ID = C.ID;
356
357 l_reporting_pdt_id OKL_PRODUCTS.REPORTING_PDT_ID%TYPE := null;
358 l_multi_gaap_yn OKL_K_HEADERS.MULTI_GAAP_YN%TYPE;
359
360 -- bug 7577628
361 cursor get_sec_rep_method IS
362 select secondary_rep_method
363 from okl_sys_acct_opts;
364
365 l_sec_rep_method okl_sys_acct_opts.secondary_rep_method%TYPE := null;
366
367 --Bug 4740605.Added TRUNC
368 CURSOR check_streams_accrual_csr(p_chr_id NUMBER, p_accrue_till_date DATE,
369 p_reporting_pdt_id NUMBER) IS -- MGAAP
370 SELECT 'N'
371 FROM OKC_K_HEADERS_B CHR
372 WHERE id = p_chr_id
373 AND EXISTS (
374 SELECT 1
375 FROM OKL_STRM_TYPE_B sty,
376 --OKL_STREAMS stm,
377 OKL_STREAMS_REP_V stm, -- MGAAP 7263041
378 OKL_STRM_ELEMENTS ste,
379 OKL_PROD_STRM_TYPES psty,
380 OKL_K_HEADERS khr,
381 OKL_PRODUCTS pdt
382 WHERE khr.id = p_chr_id
383 AND stm.khr_id = khr.id
384 AND stm.say_code = 'CURR'
385 AND stm.active_yn = 'Y'
386 --AND stm.purpose_code IS NULL --MGAAP
387 AND ( stm.purpose_code IS NULL OR stm.purpose_code = 'REPORT' )
388 AND stm.sty_id = sty.id
389 AND sty.id = psty.sty_id
390 AND psty.accrual_yn = 'Y'
391 AND psty.pdt_id = DECODE(p_reporting_pdt_id,
392 NULL, pdt.id, p_reporting_pdt_id) -- MGAAP
393 AND pdt.id = khr.pdt_id
394 AND stm.id = ste.stm_id
395 AND TRUNC(ste.stream_element_date) <= TRUNC(p_accrue_till_date)
396 AND ste.amount <> 0
397 AND ste.accrued_yn IS NULL);
398
399 CURSOR last_int_date_csr IS
400 SELECT TRUNC(DATE_LAST_INTERIM_INTEREST_CAL)
401 FROM OKL_K_HEADERS
402 WHERE ID = p_khr_id;
403
404 CURSOR khr_start_date_csr IS
405 SELECT TRUNC(start_date)
406 FROM OKC_K_HEADERS_B
407 WHERE ID = p_khr_id;
408
409 --Bug 5036337
410 CURSOR check_actual_trx(p_khr_id NUMBER) IS
411 SELECT TRUNC(MAX(trx.date_transaction_occurred)) last_accrual_date
412 FROM OKL_TRX_CONTRACTS trx,
413 OKL_TRX_TYPES_V try,
414 OKL_TXL_CNTRCT_LNS txl,
415 OKL_STRM_TYPE_V sty
416 WHERE trx.khr_id = p_khr_id
417 AND trx.try_id = try.id
418 AND try.name = 'Accrual'
419 --Fixed Bug 5707866 SLA Uptake Project by nikshah, changed tsu_code to PROCESSED from ENTERED
420 AND trx.tsu_code = 'PROCESSED'
421 AND trx.id = txl.tcn_id
422 AND trx.representation_type = 'PRIMARY' -- MGAAP 7263041
423 AND txl.sty_id = sty.id
424 AND sty.stream_type_purpose = 'ACTUAL_INCOME_ACCRUAL';
425
426 l_contract_number OKL_K_HEADERS_FULL_V.contract_number%TYPE;
427 l_rev_rec_method OKL_PRODUCT_PARAMETERS_V.revenue_recognition_method%TYPE;
428 l_accrual_status VARCHAR2(1);
429 x_result VARCHAR2(1);
430 -- Bug 5036337.Commenting below as no longer needed.
431 -- l_formula_name CONSTANT VARCHAR2(30) := 'CONTRACT_ACTUAL_INCOME_ACCRUAL';
432 l_api_version CONSTANT NUMBER := 1.0;
433 l_init_msg_list VARCHAR2(20) DEFAULT Okl_Api.G_FALSE;
434 l_return_status VARCHAR2(1) := OKL_API.G_RET_STS_SUCCESS;
435 l_msg_count NUMBER;
436 l_msg_data VARCHAR2(2000);
437 -- l_formula_amount NUMBER := 0;
438 -- l_ctxt_val_tbl Okl_Account_Dist_Pub.ctxt_val_tbl_type;
439 l_last_int_calc_date DATE;
440 l_next_int_calc_date DATE;
441 l_khr_start_date DATE;
442 l_period_start_date DATE;
443 l_period_end_date DATE;
444 l_last_accrual_date DATE;
445
446 BEGIN
447
448 -- bug 7577628
449 if l_sec_rep_method is null then
450 open get_sec_rep_method;
451 fetch get_sec_rep_method into l_sec_rep_method;
452 close get_sec_rep_method;
453 end if;
454
455 FOR i IN get_contract_number_csr(p_khr_id)
456 LOOP
457 l_contract_number := i.contract_number;
458 l_reporting_pdt_id := i.reporting_pdt_id;
459 l_multi_gaap_yn := i.multi_gaap_yn;
460 END LOOP;
461
462 -- bug 7577628
463 if l_sec_rep_method <> 'AUTOMATED' then
464 l_multi_gaap_yn := 'N';
465 end if;
466
467 IF l_contract_number IS NULL THEN
468 Okl_Api.set_message(p_app_name => g_app_name,
469 p_msg_name => 'OKL_REV_LPV_CNTRCT_NUM_ERROR');
470 RAISE OKL_API.G_EXCEPTION_ERROR;
471 END IF;
472
473 FOR j IN get_rev_rec_method_csr(p_khr_id)
474 LOOP
475 l_rev_rec_method := j.revenue_recognition_method;
476 END LOOP;
477
478 IF l_rev_rec_method IS NULL THEN
479 OKL_API.set_message(G_APP_NAME, G_INVALID_VALUE,G_COL_NAME_TOKEN,'REVENUE_RECOGNITION_METHOD');
480 RAISE OKL_API.G_EXCEPTION_ERROR;
481 END IF;
482
483 IF l_rev_rec_method = 'STREAMS' THEN
484
485 OPEN check_streams_accrual_csr(p_khr_id, p_date, null); -- MGAAP
486 FETCH check_streams_accrual_csr INTO l_accrual_status;
487 CLOSE check_streams_accrual_csr;
488
489 IF l_accrual_status = 'N' THEN
490 x_result := l_accrual_status;
491 ELSE
492
493 -- MGAAP start 7263041
494 IF (l_multi_gaap_yn = 'Y') THEN
495 OPEN check_streams_accrual_csr(p_khr_id, p_date, l_reporting_pdt_id); -- MGAAP
496 FETCH check_streams_accrual_csr INTO l_accrual_status;
497 CLOSE check_streams_accrual_csr;
498
499 IF l_accrual_status = 'N' THEN
500 x_result := l_accrual_status;
501 ELSE
502 x_result := 'Y';
503 END IF;
504 ELSE
505 -- MGAAP end 7263041
506 x_result := 'Y';
507 END IF;
508
509 END IF;
510
511 ELSIF l_rev_rec_method = 'ESTIMATED_AND_BILLED' THEN
512
513 -- Bug 4959609. Modified check for E and B based on PM feedback
514 OPEN last_int_date_csr;
515 FETCH last_int_date_csr INTO l_last_int_calc_date;
516 CLOSE last_int_date_csr;
517
518 OPEN khr_start_date_csr;
519 FETCH khr_start_date_csr INTO l_khr_start_date;
520 CLOSE khr_start_date_csr;
521
522
523 IF l_khr_start_date IS NULL THEN
524 OKL_API.set_message
525 (G_APP_NAME, G_INVALID_VALUE,G_COL_NAME_TOKEN,'START_DATE');
526 END IF;
527
528 OKL_STREAM_GENERATOR_PVT.get_next_billing_date(
529 p_api_version => l_api_version,
530 p_init_msg_list => l_init_msg_list,
531 p_khr_id => p_khr_id,
532 p_billing_date => nvl(l_last_int_calc_date, l_khr_start_date),
533 x_next_due_date => l_next_int_calc_date,
534 x_next_period_start_date => l_period_start_date,
535 x_next_period_end_date => l_period_end_date,
536 x_return_status => l_return_status,
537 x_msg_count => l_msg_count,
538 x_msg_data => l_msg_data);
539
540 -- store the highest degree of error
541 IF (l_return_status <> Okl_Api.G_RET_STS_SUCCESS) THEN
542 IF (l_return_status = Okl_Api.G_RET_STS_UNEXP_ERROR) THEN
543 -- need to leave
544 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
545 ELSE
546 RAISE OKL_API.G_EXCEPTION_ERROR;
547 END IF;
548 END IF;
549
550 -- If the next due date returned by okl_stream_generator_pvt.get_next_billing_date is null,
551 -- it is assumed that this is the last period for the contract. Verify if the streams are
552 -- all accrued and pass the result to the caller.. racheruv Bug 6274870.
553
554 IF l_next_int_calc_date IS NULL THEN
555 -- check if streams marked for accrual are accrued
556 OPEN check_streams_accrual_csr(p_khr_id, p_date, null); -- MGAAP
557 FETCH check_streams_accrual_csr INTO l_accrual_status;
558 CLOSE check_streams_accrual_csr;
559
560 IF l_accrual_status = 'N' THEN
561 x_result := l_accrual_status;
562 ELSE
563
564 -- MGAAP start 7263041
565 IF (l_multi_gaap_yn = 'Y') THEN
566 OPEN check_streams_accrual_csr(p_khr_id, p_date, l_reporting_pdt_id); -- MGAAP
567 FETCH check_streams_accrual_csr INTO l_accrual_status;
568 CLOSE check_streams_accrual_csr;
569
570 IF l_accrual_status = 'N' THEN
571 x_result := l_accrual_status;
572 ELSE
573 x_result := 'Y';
574 END IF;
575 ELSE
576 -- MGAAP end 7263041
577 x_result := 'Y';
578 END IF;
579 END IF;
580 -- end of bug fix 6274870.
581 ELSIF l_next_int_calc_date <= p_date THEN
582 x_result := 'N';
583
584 ELSIF l_next_int_calc_date > p_date THEN
585 -- check if streams marked for accrual are accrued
586 OPEN check_streams_accrual_csr(p_khr_id, p_date, null); -- MGAAP
587 FETCH check_streams_accrual_csr INTO l_accrual_status;
588 CLOSE check_streams_accrual_csr;
589
590 IF l_accrual_status = 'N' THEN
591 x_result := l_accrual_status;
592 ELSE
593 -- MGAAP start 7263041
594 IF (l_multi_gaap_yn = 'Y') THEN
595 OPEN check_streams_accrual_csr(p_khr_id, p_date, l_reporting_pdt_id); -- MGAAP
596 FETCH check_streams_accrual_csr INTO l_accrual_status;
597 CLOSE check_streams_accrual_csr;
598
599 IF l_accrual_status = 'N' THEN
600 x_result := l_accrual_status;
601 ELSE
602 x_result := 'Y';
603 END IF;
604 ELSE
605 -- MGAAP end 7263041
606 x_result := 'Y';
607 END IF;
608 END IF;
609
610 END IF;
611
612 ELSIF l_rev_rec_method = 'ACTUAL' THEN
613 -- Bug 4959609. Modified check for ACTUAL based on PM feedback
614 OPEN check_streams_accrual_csr(p_khr_id, p_date, null); -- MGAAP
615 FETCH check_streams_accrual_csr INTO l_accrual_status;
616 CLOSE check_streams_accrual_csr;
617
618 IF l_accrual_status = 'N' THEN
619 x_result := l_accrual_status;
620 ELSE
621 -- Bug 5036337.New method to check accrual completion as mentioned in the bug.
622 FOR y IN check_actual_trx(p_khr_id)
623 LOOP
624 l_last_accrual_date := y.last_accrual_date;
625 END LOOP;
626
627 -- Bug 5100210. When accrual has never been run, last_trx_date will be null
628 IF l_last_accrual_date IS NULL THEN
629 x_result := 'N';
630 ELSIF TRUNC(l_last_accrual_date) < TRUNC(p_date) THEN
631 x_result := 'N';
632 ELSE
633 -- MGAAP start 7263041
634 IF (l_multi_gaap_yn = 'Y') THEN
635 OPEN check_streams_accrual_csr(p_khr_id, p_date, l_reporting_pdt_id); -- MGAAP
636 FETCH check_streams_accrual_csr INTO l_accrual_status;
637 CLOSE check_streams_accrual_csr;
638
639 IF l_accrual_status = 'N' THEN
640 x_result := l_accrual_status;
641 ELSE
642 x_result := 'Y';
643 END IF;
644 ELSE
645 -- MGAAP end 7263041
646 x_result := 'Y';
647 END IF;
648 END IF;
649 -- Bug 5036337.Commenting below as method to check has changed as per bug.
650 -- l_ctxt_val_tbl(1).NAME := 'p_accrual_date';
651 -- l_ctxt_val_tbl(1).VALUE := TO_CHAR(p_date, 'MM/DD/YYYY');
652 --
653 -- Okl_Execute_Formula_Pub.EXECUTE
654 -- (p_api_version => l_api_version
655 -- ,p_init_msg_list => l_init_msg_list
656 -- ,x_return_status => l_return_status
657 -- ,x_msg_count => l_msg_count
658 -- ,x_msg_data => l_msg_data
659 -- ,p_formula_name => l_formula_name
660 -- ,p_contract_id => p_khr_id
661 -- ,p_line_id => NULL
662 -- ,p_additional_parameters => l_ctxt_val_tbl
663 -- ,x_value => l_formula_amount);
664 --
665 -- -- store the highest degree of error
666 -- IF (l_return_status <> Okl_Api.G_RET_STS_SUCCESS) THEN
667 -- IF (l_return_status = Okl_Api.G_RET_STS_UNEXP_ERROR) THEN
668 -- -- need to leave
669 -- RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
670 -- ELSE
671 -- RAISE OKL_API.G_EXCEPTION_ERROR;
672 -- END IF;
673 -- END IF;
674
675 -- IF l_formula_amount = 0 THEN
676 -- x_result := 'Y';
677 -- ELSE
678 -- x_result := 'N';
679 -- END IF;
680 END IF;
681
682 ELSE
683 OKL_API.set_message(G_APP_NAME, G_INVALID_VALUE,G_COL_NAME_TOKEN,'REVENUE_RECOGNITION_METHOD');
684 RAISE OKL_API.G_EXCEPTION_ERROR;
685 END IF;
686
687 RETURN x_result;
688
689 EXCEPTION
690 WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
691 RETURN NULL;
692
693 WHEN OKL_API.G_EXCEPTION_ERROR THEN
694 RETURN NULL;
695
696 WHEN OTHERS THEN
697 IF check_streams_accrual_csr%ISOPEN THEN
698 CLOSE check_streams_accrual_csr;
699 END IF;
700
701 IF last_int_date_csr%ISOPEN THEN
702 CLOSE last_int_date_csr;
703 END IF;
704
705 IF khr_start_date_csr%ISOPEN THEN
706 CLOSE khr_start_date_csr;
707 END IF;
708
709 -- store SQL error message on message stack for caller
710 Okl_Api.SET_MESSAGE(p_app_name => g_app_name,
711 p_msg_name => g_unexpected_error,
712 p_token1 => g_sqlcode_token,
713 p_token1_value => SQLCODE,
714 p_token2 => g_sqlerrm_token,
715 p_token2_value => SQLERRM);
716
717 RETURN NULL;
718
719 END CHECK_DATE_ACCRUED_TILL;
720
721 -- procedure to create report header for each individual report
722 PROCEDURE report_header(p_sob_name IN VARCHAR2
723 ,p_org_name IN VARCHAR2
724 ,p_accrual_date IN DATE
725 ,p_batch_name IN VARCHAR2
726 ,p_func_curr_code IN VARCHAR2
727 ,x_return_status OUT NOCOPY VARCHAR2) IS
728
729 l_sysdate DATE := sysdate;
730 l_space VARCHAR2(1) := ' ';
731 l_dash VARCHAR2(1) := '-';
732
733 BEGIN
734
735 -- Create report header
736 FND_FILE.PUT_LINE(FND_FILE.OUTPUT,RPAD(l_space,43)||
737 SUBSTR(FND_MESSAGE.GET_STRING('OKL','OKL_AGN_RPT_HEADER'),1)||LPAD(l_space,43));
738 FND_FILE.PUT_LINE(FND_FILE.OUTPUT,RPAD(l_space,43)||
739 SUBSTR(FND_MESSAGE.GET_STRING('OKL','OKL_AGN_RPT_HEADER_UNDERLINE'),1)||LPAD(l_space,43));
740 FND_FILE.PUT_LINE(FND_FILE.OUTPUT,'');
741
742 -- FND_FILE.PUT_LINE(FND_FILE.OUTPUT,' '||FND_MESSAGE.GET_STRING('OKL','OKL_AGN_RPT_HEADER'));
743 -- FND_FILE.PUT_LINE(FND_FILE.OUTPUT,' '||FND_MESSAGE.GET_STRING('OKL','OKL_AGN_RPT_HEADER_UNDERLINE'));
744 -- FND_FILE.PUT_LINE(FND_FILE.OUTPUT,'');
745
746 FND_FILE.PUT_LINE(FND_FILE.OUTPUT,
747 --FND_MESSAGE.GET_STRING('OKL','OKL_GLP_RPT_SOB_TITLE')
748 --||' '||RPAD(p_sob_name, 65) MGAAP 7263041
749 RPAD(' ', 80)
750 ||FND_MESSAGE.GET_STRING('OKL','OKL_GLP_RPT_OU_TITLE')
751 ||' '||p_org_name);
752 FND_FILE.PUT_LINE(FND_FILE.OUTPUT,FND_MESSAGE.GET_STRING('OKL','OKL_GLP_RPT_PROG_DATE_TITLE')
753 ||' '||RPAD(to_char(l_sysdate,'DD-MON-RRRR HH24:MI:SS'), 61)||FND_MESSAGE.GET_STRING('OKL','OKL_AGN_RPT_ACCRUAL_DATE')
754 ||' '||p_accrual_date);
755 FND_FILE.PUT_LINE(FND_FILE.OUTPUT,FND_MESSAGE.GET_STRING('OKL','OKL_GLP_RPT_CURR_TITLE')
756 ||' '||RPAD(p_func_curr_code,58)||FND_MESSAGE.GET_STRING('OKL','OKL_AGN_RPT_BATCH_NAME')
757 ||' '||p_batch_name);
758 FND_FILE.PUT_LINE(FND_FILE.OUTPUT,'');
759
760 -- Create Report Content
761 FND_FILE.PUT_LINE(FND_FILE.OUTPUT,RPAD(FND_MESSAGE.GET_STRING('OKL','OKL_GLP_RPT_CTR_NUM_TITLE'),28)
762 ||RPAD(FND_MESSAGE.GET_STRING('OKL','OKL_GLP_RPT_TRX_NUM_TITLE'),22)
763 ||RPAD(FND_MESSAGE.GET_STRING('OKL','OKL_AGN_RPT_ACTIVITY'),17)
764 ||RPAD(FND_MESSAGE.GET_STRING('OKL','OKL_AGN_RPT_RULE_STATUS'),20)
765 ||RPAD(FND_MESSAGE.GET_STRING('OKL','OKL_AGN_RPT_OVRD_STATUS'),16)
766 ||RPAD(FND_MESSAGE.GET_STRING('OKL','OKL_AGN_RPT_CURRENCY'),9)
767 ||LPAD(FND_MESSAGE.GET_STRING('OKL','OKL_GLP_RPT_AMT_TITLE'),17) ||
768 LPAD(FND_MESSAGE.GET_STRING('OKL','OKL_AGN_REPRESENTATION_TYPE'),15)); -- MGAAP 7263041
769
770 FND_FILE.PUT_LINE(FND_FILE.OUTPUT,RPAD(FND_MESSAGE.GET_STRING('OKL','OKL_GLP_RPT_CTR_LINE'),28)
771 ||RPAD(FND_MESSAGE.GET_STRING('OKL','OKL_GLP_RPT_TRX_LINE'),22)
772 ||RPAD(FND_MESSAGE.GET_STRING('OKL','OKL_AGN_RPT_ACTIVITY_UNDERLINE'),17)
773 ||RPAD(FND_MESSAGE.GET_STRING('OKL','OKL_AGN_RPT_RUL_STAT_UNDERLINE'),20)
774 ||RPAD(FND_MESSAGE.GET_STRING('OKL','OKL_AGN_RPT_OVD_STAT_UNDERLINE'),16)
775 ||RPAD(FND_MESSAGE.GET_STRING('OKL','OKL_AGN_RPT_CURR_UNDERLINE'),9)
776 ||LPAD(FND_MESSAGE.GET_STRING('OKL','OKL_GLP_RPT_AMT_LINE'),17) ||
777 LPAD('==============',15)); -- MGAAP 7263041
778
779 x_return_status := OKL_API.G_RET_STS_SUCCESS;
780
781 EXCEPTION
782 WHEN OTHERS THEN
783 -- store SQL error message on message stack for caller
784 Okl_Api.SET_MESSAGE(p_app_name => g_app_name,
785 p_msg_name => g_unexpected_error,
786 p_token1 => g_sqlcode_token,
787 p_token1_value => SQLCODE,
788 p_token2 => g_sqlerrm_token,
789 p_token2_value => SQLERRM);
790 x_return_status := Okl_Api.G_RET_STS_UNEXP_ERROR;
791
792 END REPORT_HEADER;
793
794 -- Function to validate contract against accrual rule
795 PROCEDURE VALIDATE_ACCRUAL_RULE(x_return_status OUT NOCOPY VARCHAR2
796 ,x_result OUT NOCOPY VARCHAR2
797 ,p_ctr_id IN OKL_K_HEADERS.id%TYPE) IS
798
799
800 -- Bug 4576668. SGIYER. Only English lang meaning required.Commented cursor.
801 -- CURSOR accrual_rule_csr IS
802 -- SELECT logical_op_meaning
803 -- ,left_parentheses_meaning
804 -- ,aro_code
805 -- ,relational_op_meaning
806 -- ,right_operand_literal
807 -- ,right_parentheses_meaning
808 -- ,from_date
809 -- ,TO_DATE
810 -- FROM OKL_ACCRUAL_GNRTNS_UV
811 -- WHERE VERSION = (SELECT MAX(TO_NUMBER(version))
812 -- FROM OKL_ACCRUAL_GNRTNS_UV)
813 -- AND TO_DATE IS NULL
814 -- ORDER BY LINE_NUMBER;
815
816 CURSOR accrual_rule_csr IS
817 SELECT OKL_ACCOUNTING_UTIL.GET_LOOKUP_MEANING_LANG('OKL_ACCRUAL_RULE_LOGICAL_OP',arlo_code,540,0,'US') logical_op_meaning
818 ,OKL_ACCOUNTING_UTIL.GET_LOOKUP_MEANING_LANG('OKL_PARENTHESIS',left_parentheses,540,0,'US') left_parentheses_meaning
819 ,aro_code
820 ,OKL_ACCOUNTING_UTIL.GET_LOOKUP_MEANING_LANG('OKL_ACCRUAL_RULE_OPERATOR',acro_code,540,0,'US') relational_op_meaning
821 ,right_operand_literal
822 ,OKL_ACCOUNTING_UTIL.GET_LOOKUP_MEANING_LANG('OKL_PARENTHESIS',right_parentheses,540,0,'US') right_parentheses_meaning
823 ,from_date
824 ,to_date
825 FROM OKL_ACCRUAL_GNRTNS
826 WHERE to_number(VERSION) = (SELECT MAX(to_number(version))
827 FROM OKL_ACCRUAL_GNRTNS)
828 AND TO_DATE IS NULL
829 ORDER BY LINE_NUMBER;
830
831 l_string VARCHAR2(2000);
832 l_rule accrual_rule_csr%ROWTYPE;
833
834 BEGIN
835 -- initialize return status
836 x_return_status := Okl_Api.G_RET_STS_SUCCESS;
837 -- open cursor for processing
838 OPEN accrual_rule_csr;
839 LOOP
840 FETCH accrual_rule_csr INTO l_rule;
841 IF accrual_rule_csr%NOTFOUND THEN
842 IF accrual_rule_csr%ROWCOUNT = 0 THEN
843 Okl_Api.set_message(p_app_name => g_app_name,
844 p_msg_name => 'OKL_AGN_RULE_NOT_FOUND');
845 RAISE G_EXCEPTION_HALT_VALIDATION;
846 ELSE
847 EXIT;
848 END IF;
849 END IF;
850 -- create the string for SQL execution
851 l_string := l_string||' '||l_rule.logical_op_meaning||' '||l_rule.left_parentheses_meaning||
852 ' OKL_GENERATE_ACCRUALS_PVT.CALCULATE_OPERAND_VALUE('||p_ctr_id||','''|| l_rule.aro_code||''')'||' '
853 ||l_rule.relational_op_meaning||' '||l_rule.right_operand_literal||' '||l_rule.right_parentheses_meaning;
854 END LOOP;
855 CLOSE accrual_rule_csr;
856
857 l_string := 'SELECT '||'''N'''||' FROM DUAL WHERE '|| l_string;
858 EXECUTE IMMEDIATE l_string INTO x_result;
859
860 EXCEPTION
861 WHEN NO_DATA_FOUND THEN
862 x_result := 'Y';
863
864 WHEN G_EXCEPTION_HALT_VALIDATION THEN
865 -- close the cursor if it is open
866 IF accrual_rule_csr%ISOPEN THEN
867 CLOSE accrual_rule_csr;
868 END IF;
869 x_return_status := Okl_Api.G_RET_STS_ERROR;
870
871 WHEN OTHERS THEN
872 -- store SQL error message on message stack for caller
873 Okl_Api.SET_MESSAGE(p_app_name => g_app_name,
874 p_msg_name => g_unexpected_error,
875 p_token1 => g_sqlcode_token,
876 p_token1_value => SQLCODE,
877 p_token2 => g_sqlerrm_token,
878 p_token2_value => SQLERRM);
879 -- notify caller of an UNEXPECTED error
880 x_return_status := Okl_Api.G_RET_STS_UNEXP_ERROR;
881 END VALIDATE_ACCRUAL_RULE;
882
883 -- Procedure to select streams that need to be accrued
884 PROCEDURE GET_ACCRUAL_STREAMS(x_return_status OUT NOCOPY VARCHAR2
885 ,x_stream_tbl OUT NOCOPY stream_tbl_type
886 ,p_khr_id IN OKL_K_HEADERS.ID%TYPE
887 ,p_product_id IN OKL_PRODUCTS_V.ID%TYPE
888 ,p_ctr_start_date IN DATE
889 ,p_period_end_date IN DATE
890 ,p_accrual_rule_yn IN VARCHAR2) IS
891
892
893 -- modified cursor where clause and removed accrue_yn attribute check
894 -- on okl_strm_type_b for bug# 2475123
895 -- added sty.accrual_yn = 'Y' for ER 2872216.
896 CURSOR select_streams_csr(p_ctr_id NUMBER, p_accrue_from_date DATE, p_accrue_till_date DATE) IS
897 SELECT sty.id,
898 stytl.name,
899 stm.id stream_id,
900 ste.id stream_element_id,
901 ste.amount,
902 stm.kle_id
903 FROM OKL_STRM_TYPE_B sty,
904 OKL_STRM_TYPE_TL stytl,
905 --OKL_STREAMS stm,
906 OKL_STREAMS_REP_V stm, -- MGAAP 7263041
907 OKL_STRM_ELEMENTS ste,
908 OKL_PROD_STRM_TYPES psty,
909 OKL_K_HEADERS khr
910 WHERE stm.khr_id = p_ctr_id
911 AND khr.id = stm.khr_id
912 AND stm.active_yn = 'Y'
913 AND stm.say_code = 'CURR'
914 --AND stm.purpose_code IS NULL MGAAP 7263041
915 AND (stm.purpose_code IS NULL OR stm.purpose_code='REPORT')
916 AND stm.sty_id = sty.id
917 AND sty.id = stytl.id
918 AND stytl.LANGUAGE = USERENV('LANG')
919 AND sty.accrual_yn = p_accrual_rule_yn
920 AND sty.id = psty.sty_id
921 --AND psty.pdt_id = khr.pdt_id
922 AND psty.pdt_id = p_product_id -- MGAAP 7263041
923 AND psty.accrual_yn = 'Y'
924 AND stm.id = ste.stm_id
925 AND TRUNC(ste.stream_element_date) BETWEEN TRUNC(p_accrue_from_date) AND TRUNC(p_accrue_till_date)
926 AND ste.amount <> 0 -- bug 2804913
927 AND ste.accrued_yn IS NULL;
928
929 CURSOR select_streams_csr2(p_ctr_id NUMBER, p_accrue_from_date DATE, p_accrue_till_date DATE) IS
930 SELECT sty.id,
931 stytl.name,
932 stm.id stream_id,
933 ste.id stream_element_id,
934 ste.amount,
935 stm.kle_id
936 FROM OKL_STRM_TYPE_B sty,
937 OKL_STRM_TYPE_TL stytl,
938 --OKL_STREAMS stm,
939 OKL_STREAMS_REP_V stm, -- MGAAP 7263041
940 OKL_STRM_ELEMENTS ste,
941 OKL_PROD_STRM_TYPES psty,
942 OKL_K_HEADERS khr
943 WHERE stm.khr_id = p_ctr_id
944 AND khr.id = stm.khr_id
945 AND stm.active_yn = 'Y'
946 AND stm.say_code = 'CURR'
947 --AND stm.purpose_code IS NULL MGAAP 7263041
948 AND ( stm.purpose_code IS NULL OR stm.purpose_code='REPORT')
949 AND stm.sty_id = sty.id
950 AND sty.id = stytl.id
951 AND stytl.LANGUAGE = USERENV('LANG')
952 AND sty.accrual_yn = p_accrual_rule_yn
953 AND sty.id = psty.sty_id
954 --AND psty.pdt_id = khr.pdt_id
955 AND psty.pdt_id = p_product_id -- MGAAP 7263041
956 AND psty.accrual_yn = 'Y'
957 AND stm.id = ste.stm_id
958 AND ste.stream_element_date <= p_accrue_till_date
959 AND ste.amount <> 0 -- bug 2804913
960 AND ste.accrued_yn IS NULL;
961
962
963 i NUMBER :=1;
964 l_stream_tbl stream_tbl_type;
965 BEGIN
966
967 write_to_log('In Get_Accrual_Streams:p_accrual_rule_yn=' || p_accrual_rule_yn);
968 write_to_log('In Get_Accrual_Streams:p_khr_id=' || p_khr_id);
969 write_to_log('In Get_Accrual_Streams:p_product_id=' || p_product_id);
970 write_to_log('In Get_Accrual_Streams:p_ctr_start_date=' || p_ctr_start_date);
971 write_to_log('In Get_Accrual_Streams:p_period_end_date=' || p_period_end_date);
972 -- Open select_streams_csr cursor for processing
973 -- FOR l_streams IN select_streams_csr(p_khr_id, p_ctr_start_date, p_period_end_date)
974 -- LOOP
975 -- x_stream_tbl(i).stream_type_id := l_streams.id;
976 -- -- Bug 3126427. Removing ABS as AE can handle negative accounting now (bug 2815972)
977 -- x_stream_tbl(i).stream_amount := l_streams.amount;
978 -- x_stream_tbl(i).stream_element_id := l_streams.stream_element_id;
979 -- x_stream_tbl(i).stream_id := l_streams.stream_id;
980 -- x_stream_tbl(i).kle_id := l_streams.kle_id;
981 -- i := i+1;
982 -- END LOOP;
983
984 -- Commenting for Bug 4884618
985 -- OPEN select_streams_csr(p_khr_id, p_ctr_start_date, p_period_end_date);
986 -- FETCH select_streams_csr BULK COLLECT INTO l_stream_tbl;
987 -- CLOSE select_streams_csr;
988
989 -- Bug 4884618. Refering to new profile option.
990 IF l_sty_select_basis IS NULL THEN
991 Okl_Api.set_message(p_app_name => g_app_name,
992 p_msg_name => 'OKL_AGN_KHR_VALD_ERROR');
993 RAISE OKL_API.G_EXCEPTION_ERROR;
994 END IF;
995
996 -- Bug 4884618.
997 IF l_sty_select_basis = 'KHR_START_DATE' THEN
998 OPEN select_streams_csr(p_khr_id, p_ctr_start_date, p_period_end_date);
999 FETCH select_streams_csr BULK COLLECT INTO l_stream_tbl;
1000 CLOSE select_streams_csr;
1001 ELSIF l_sty_select_basis = 'BEFORE_KHR_START_DATE' THEN
1002 OPEN select_streams_csr2(p_khr_id, p_ctr_start_date, p_period_end_date);
1003 FETCH select_streams_csr2 BULK COLLECT INTO l_stream_tbl;
1004 CLOSE select_streams_csr2;
1005 END IF;
1006
1007 x_stream_tbl := l_stream_tbl;
1008
1009 x_return_status := Okl_Api.G_RET_STS_SUCCESS;
1010
1011 EXCEPTION
1012 WHEN OTHERS THEN
1013 -- store SQL error message on message stack for caller
1014 Okl_Api.SET_MESSAGE(p_app_name => g_app_name,
1015 p_msg_name => g_unexpected_error,
1016 p_token1 => g_sqlcode_token,
1017 p_token1_value => SQLCODE,
1018 p_token2 => g_sqlerrm_token,
1019 p_token2_value => SQLERRM);
1020
1021 -- notify caller of an UNEXPECTED error
1022 x_return_status := Okl_Api.G_RET_STS_UNEXP_ERROR;
1023 END GET_ACCRUAL_STREAMS;
1024
1025 PROCEDURE GET_ACCOUNT_GEN_DETAILS(
1026 p_contract_id IN NUMBER,
1027 x_return_status OUT NOCOPY VARCHAR2,
1028 x_acc_gen_primary_key_tbl OUT NOCOPY Okl_Account_Dist_Pub.acc_gen_primary_key) IS
1029
1030 -- Get Contract Salesperson
1031 -- 30-Apr-2004. Bug 3596651. Cursor provided by Sarvanan.
1032 CURSOR l_salesperson_csr (cp_chr_id IN NUMBER) IS
1033 SELECT con.object1_id1
1034 FROM OKC_K_HEADERS_B CHR,
1035 OKC_CONTACT_SOURCES cso,
1036 OKC_K_PARTY_ROLES_B kpr,
1037 OKC_CONTACTS con
1038 WHERE CHR.id = cp_chr_id
1039 AND cso.cro_code = 'SALESPERSON'
1040 AND cso.rle_code = 'LESSOR'
1041 AND cso.buy_or_sell = CHR.buy_or_sell
1042 AND kpr.chr_id = CHR.id
1043 AND kpr.dnz_chr_id = CHR.id
1044 AND kpr.rle_code = cso.rle_code
1045 AND con.cpl_id = kpr.id
1046 AND con.dnz_chr_id = CHR.id
1047 AND con.cro_code = cso.cro_code
1048 AND con.jtot_object1_code = cso.jtot_object_code;
1049
1050 CURSOR l_fin_sys_parms_csr IS
1051 SELECT mo_global.get_current_org_id()
1052 FROM dual;
1053
1054 -- Get Receivables Transaction Type
1055 CURSOR l_cust_trx_type_csr IS
1056 SELECT ctt.cust_trx_type_id
1057 FROM ra_cust_trx_types ctt
1058 WHERE ctt.name = 'Invoice-OKL';
1059
1060 -- cursor to get bill-to-site of customer at contract level
1061 CURSOR chr_bill_to_site_csr (p_chr_id NUMBER) IS
1062 SELECT bill_to_site_use_id
1063 FROM OKC_K_HEADERS_B
1064 WHERE id = p_chr_id;
1065
1066 l_sales_person_id OKC_CONTACTS_V.OBJECT1_ID1%TYPE;
1067 l_counter NUMBER := 1;
1068 l_org_id NUMBER;
1069 l_receivables_trx_type VARCHAR2(2000);
1070 l_bill_to_site VARCHAR2(2000);
1071
1072 BEGIN
1073
1074 x_return_status := OKL_API.G_RET_STS_SUCCESS;
1075
1076 -- Bug 3596651
1077 -- **************************************************
1078 -- Populate the account generator table with Contract Salesperson
1079 -- **************************************************
1080
1081 OPEN l_salesperson_csr (p_contract_id);
1082 FETCH l_salesperson_csr INTO l_sales_person_id;
1083 CLOSE l_salesperson_csr;
1084
1085 IF l_sales_person_id IS NOT NULL THEN
1086 x_acc_gen_primary_key_tbl(l_counter).source_table := 'JTF_RS_SALESREPS_MO_V';
1087 x_acc_gen_primary_key_tbl(l_counter).primary_key_column := l_sales_person_id;
1088 l_counter := l_counter + 1;
1089 END IF;
1090
1091 -- Bug 3596651
1092 -- **************************************************
1093 -- Populate the account generator table with Operating Unit Identifier
1094 -- **************************************************
1095
1096 OPEN l_fin_sys_parms_csr;
1097 FETCH l_fin_sys_parms_csr INTO l_org_id;
1098 CLOSE l_fin_sys_parms_csr;
1099
1100 IF l_org_id IS NOT NULL THEN
1101 x_acc_gen_primary_key_tbl(l_counter).source_table:= 'FINANCIALS_SYSTEM_PARAMETERS';
1102 x_acc_gen_primary_key_tbl(l_counter).primary_key_column := to_char(l_org_id);
1103 l_counter := l_counter + 1;
1104 END IF;
1105
1106 -- ********************************
1107 -- Get Receivables Transaction Type
1108 -- ********************************
1109
1110 OPEN l_cust_trx_type_csr;
1111 FETCH l_cust_trx_type_csr INTO l_receivables_trx_type;
1112 CLOSE l_cust_trx_type_csr;
1113
1114 IF l_receivables_trx_type IS NOT NULL THEN
1115 x_acc_gen_primary_key_tbl(l_counter).source_table:= 'RA_CUST_TRX_TYPES';
1116 x_acc_gen_primary_key_tbl(l_counter).primary_key_column := l_receivables_trx_type;
1117 l_counter := l_counter + 1;
1118 END IF;
1119
1120 OPEN chr_bill_to_site_csr(p_contract_id);
1121 FETCH chr_bill_to_site_csr INTO l_bill_to_site;
1122 CLOSE chr_bill_to_site_csr;
1123
1124 IF l_bill_to_site IS NOT NULL THEN
1125 x_acc_gen_primary_key_tbl(l_counter).source_table:= 'AR_SITE_USES_V';
1126 x_acc_gen_primary_key_tbl(l_counter).primary_key_column := l_bill_to_site;
1127 END IF;
1128
1129 EXCEPTION
1130 WHEN OTHERS THEN
1131 IF l_salesperson_csr%ISOPEN THEN
1132 CLOSE l_salesperson_csr;
1133 END IF;
1134
1135 IF l_fin_sys_parms_csr%ISOPEN THEN
1136 CLOSE l_fin_sys_parms_csr;
1137 END IF;
1138
1139 IF l_cust_trx_type_csr%ISOPEN THEN
1140 CLOSE l_cust_trx_type_csr;
1141 END IF;
1142
1143 IF chr_bill_to_site_csr%ISOPEN THEN
1144 CLOSE chr_bill_to_site_csr;
1145 END IF;
1146
1147
1148 x_return_status := OKL_API.G_RET_STS_UNEXP_ERROR;
1149 Okl_Api.SET_MESSAGE(p_app_name => g_app_name,
1150 p_msg_name => g_unexpected_error,
1151 p_token1 => g_sqlcode_token,
1152 p_token1_value => SQLCODE,
1153 p_token2 => g_sqlerrm_token,
1154 p_token2_value => SQLERRM);
1155
1156 END GET_ACCOUNT_GEN_DETAILS;
1157
1158 PROCEDURE GET_COMMON_INFO (p_accrual_date IN DATE,
1159 p_representation_type IN VARCHAR2 DEFAULT 'PRIMARY',
1160 x_try_id OUT NOCOPY OKL_TRX_TYPES_V.id%TYPE,
1161 x_period_name OUT NOCOPY VARCHAR2,
1162 x_period_start_date OUT NOCOPY DATE,
1163 x_period_end_date OUT NOCOPY DATE,
1164 x_sob_id OUT NOCOPY OKL_SYS_ACCT_OPTS.set_of_books_id%TYPE,
1165 x_sob_name OUT NOCOPY VARCHAR2,
1166 x_org_id OUT NOCOPY OKL_SYS_ACCT_OPTS.org_id%TYPE,
1167 x_org_name OUT NOCOPY VARCHAR2,
1168 x_accrual_reversal_days OUT NOCOPY NUMBER,
1169 x_func_currency_code OUT NOCOPY OKL_TRX_CONTRACTS.CURRENCY_CODE%TYPE,
1170 x_return_status OUT NOCOPY VARCHAR2
1171 ) IS
1172
1173 l_period_name VARCHAR2(2000);
1174 l_period_start_date DATE;
1175 l_period_end_date DATE;
1176 l_period_status VARCHAR2(2000);
1177 l_sob_id OKL_SYS_ACCT_OPTS.set_of_books_id%TYPE;
1178 l_sob_name VARCHAR2(2000);
1179 l_try_id OKL_TRX_TYPES_V.id%TYPE;
1180 l_func_currency_code OKL_TRX_CONTRACTS.CURRENCY_CODE%TYPE;
1181 l_org_id OKL_SYS_ACCT_OPTS.org_id%TYPE;
1182 l_org_name VARCHAR2(2000);
1183 l_accrual_reversal_days NUMBER;
1184
1185 -- Cursor to select the transaction type id for the accrual transaction
1186 CURSOR trx_type_id_csr IS
1187 SELECT id
1188 FROM OKL_TRX_TYPES_TL
1189 WHERE name = 'Accrual'
1190 AND LANGUAGE = 'US';
1191
1192 -- Cursor to select the number of days for a reverse transaction
1193 CURSOR accrual_reversal_days_csr IS
1194 SELECT accrual_reversal_days
1195 FROM OKL_SYS_ACCT_OPTS;
1196
1197 -- cursor to get org name
1198 CURSOR org_name_csr(p_org_id NUMBER) IS
1199 SELECT name
1200 FROM hr_operating_units
1201 WHERE organization_id = p_org_id;
1202
1203 BEGIN
1204
1205 x_return_status := OKL_API.G_RET_STS_SUCCESS;
1206 -- Find set of books id
1207 IF (p_representation_type = 'PRIMARY') THEN -- MGAAP 7263041
1208 l_sob_id := Okl_Accounting_Util.GET_SET_OF_BOOKS_ID(
1209 p_representation_type => 'PRIMARY');
1210 ELSE
1211 l_sob_id := Okl_Accounting_Util.GET_SET_OF_BOOKS_ID(
1212 p_representation_type => 'SECONDARY');
1213 END IF;
1214 IF (l_sob_id IS NULL) THEN
1215 -- store SQL error message on message stack for caller
1216 Okl_Api.set_message(p_app_name => g_app_name,
1217 p_msg_name => 'OKL_AGN_SOB_ID_ERROR');
1218 RAISE Okl_Api.G_EXCEPTION_ERROR;
1219 END IF;
1220 x_sob_id := l_sob_id;
1221
1222 -- Find set of books name
1223 l_sob_name := Okl_Accounting_Util.GET_SET_OF_BOOKS_NAME(l_sob_id);
1224 x_sob_name := l_sob_name;
1225
1226 -- Get period end date
1227 Okl_Accounting_Util.GET_PERIOD_INFO(
1228 p_date => p_accrual_date,
1229 p_period_name => l_period_name,
1230 p_start_date => l_period_start_date,
1231 p_end_date => l_period_end_date,
1232 p_ledger_id => l_sob_id); --MGAAP 7263041
1233 IF l_period_end_date IS NULL THEN
1234 Okl_Api.set_message(p_app_name => g_app_name,
1235 p_msg_name => 'OKL_AGN_PERIOD_END_DATE');
1236 RAISE Okl_Api.G_EXCEPTION_ERROR;
1237 END IF;
1238 x_period_end_date := l_period_end_date;
1239 x_period_name := l_period_name;
1240 x_period_start_date := l_period_start_date;
1241
1242 -- validate accrual date for open period check
1243 -- Bug# 2781593
1244 l_period_status := Okl_Accounting_Util.GET_OKL_PERIOD_STATUS(
1245 p_period_name => l_period_name,
1246 p_ledger_id => l_sob_id); --MGAAP 7263041
1247 IF l_period_status IS NULL THEN
1248 Okl_Api.set_message(p_app_name => g_app_name,
1249 p_msg_name => 'OKL_AGN_PERIOD_STATUS_ERROR',
1250 p_token1 => 'PERIOD_NAME',
1251 p_token1_value => l_period_name);
1252 RAISE Okl_Api.G_EXCEPTION_ERROR;
1253 END IF;
1254
1255 IF l_period_status NOT IN ('O','F') THEN
1256 Okl_Api.set_message(p_app_name => g_app_name,
1257 p_msg_name => 'OKL_AGN_OPEN_PERIOD_ERROR');
1258 RAISE Okl_Api.G_EXCEPTION_ERROR;
1259 END IF;
1260
1261 -- Find set of books id
1262 /* Call moved at the top
1263 IF (p_representation_type = 'PRIMARY') THEN -- MGAAP 7263041
1264 l_sob_id := Okl_Accounting_Util.GET_SET_OF_BOOKS_ID;
1265 ELSE
1266 l_sob_id := Okl_Accounting_Util.GET_SET_OF_BOOKS_ID('SECONDARY');
1267 END IF;
1268 IF (l_sob_id IS NULL) THEN
1269 -- store SQL error message on message stack for caller
1270 Okl_Api.set_message(p_app_name => g_app_name,
1271 p_msg_name => 'OKL_AGN_SOB_ID_ERROR');
1272 RAISE Okl_Api.G_EXCEPTION_ERROR;
1273 END IF;
1274 x_sob_id := l_sob_id;
1275
1276 -- Find set of books name
1277 l_sob_name := Okl_Accounting_Util.GET_SET_OF_BOOKS_NAME(l_sob_id);
1278 x_sob_name := l_sob_name; */
1279
1280 -- Find org name for report
1281 l_org_id := mo_global.get_current_org_id();
1282 IF l_org_id IS NULL THEN
1283 -- store SQL error message on message stack for caller
1284 Okl_Api.set_message(p_app_name => g_app_name,
1285 p_msg_name => 'OKL_AGN_ORG_ID_ERROR');
1286 RAISE OKL_API.G_EXCEPTION_ERROR;
1287 END IF;
1288 x_org_id := l_org_id;
1289
1290 OPEN org_name_csr(l_org_id);
1291 FETCH org_name_csr INTO l_org_name;
1292 CLOSE org_name_csr;
1293
1294 IF l_org_name IS NULL THEN
1295 -- store SQL error message on message stack for caller
1296 okl_api.set_message(p_app_name => G_APP_NAME,
1297 p_msg_name => G_NO_MATCHING_RECORD,
1298 p_token1 => G_COL_NAME_TOKEN,
1299 p_token1_value => 'ORG_NAME');
1300 RAISE OKL_API.G_EXCEPTION_ERROR;
1301 END IF;
1302 x_org_name := l_org_name;
1303
1304 -- Open accrual reversal days cursor to find out number of days to reverse in case of non-accrual processing
1305 OPEN accrual_reversal_days_csr;
1306 FETCH accrual_reversal_days_csr INTO l_accrual_reversal_days;
1307 CLOSE accrual_reversal_days_csr;
1308
1309 IF l_accrual_reversal_days IS NULL THEN
1310 -- store SQL error message on message stack for caller
1311 Okl_Api.set_message(p_app_name => g_app_name,
1312 p_msg_name => 'OKL_AGN_REVERSAL_DAYS');
1313 RAISE Okl_Api.G_EXCEPTION_ERROR;
1314 END IF;
1315 x_accrual_reversal_days := l_accrual_reversal_days;
1316
1317 -- Find currency code for the set of books id
1318 l_func_currency_code := Okl_Accounting_Util.GET_FUNC_CURR_CODE(
1319 p_ledger_id => l_sob_id); --MGAAP 7263041
1320 IF (l_func_currency_code IS NULL) THEN
1321 -- store SQL error message on message stack for caller
1322 Okl_Api.set_message(p_app_name => g_app_name,
1323 p_msg_name => 'OKL_AGN_CURR_CODE_ERROR');
1324 RAISE Okl_Api.G_EXCEPTION_ERROR;
1325 END IF;
1326 x_func_currency_code := l_func_currency_code;
1327
1328 -- Open cursor to find the transaction type id for accruals
1329 OPEN trx_type_id_csr;
1330 FETCH trx_type_id_csr INTO l_try_id;
1331 CLOSE trx_type_id_csr;
1332 IF l_try_id IS NULL THEN
1333 -- store SQL error message on message stack for caller
1334 Okl_Api.set_message(p_app_name => g_app_name,
1335 p_msg_name => 'OKL_AGN_TRX_TYPE_ERROR',
1336 p_token1 => 'TRANSACTION_TYPE',
1337 p_token1_value => 'Accrual');
1338 RAISE Okl_Api.G_EXCEPTION_ERROR;
1339 END IF;
1340 x_try_id := l_try_id;
1341
1342 x_return_status := OKL_API.G_RET_STS_SUCCESS;
1343
1344 EXCEPTION
1345 WHEN OKL_API.G_EXCEPTION_ERROR THEN
1346 IF trx_type_id_csr%ISOPEN THEN
1347 CLOSE trx_type_id_csr;
1348 END IF;
1349 IF accrual_reversal_days_csr%ISOPEN THEN
1350 CLOSE accrual_reversal_days_csr;
1351 END IF;
1352
1353 IF org_name_csr%ISOPEN THEN
1354 CLOSE org_name_csr;
1355 END IF;
1356 x_return_status := OKL_API.G_RET_STS_ERROR;
1357
1358 WHEN OTHERS THEN
1359 x_return_status := OKL_API.G_RET_STS_UNEXP_ERROR;
1360 IF trx_type_id_csr%ISOPEN THEN
1361 CLOSE trx_type_id_csr;
1362 END IF;
1363 IF accrual_reversal_days_csr%ISOPEN THEN
1364 CLOSE accrual_reversal_days_csr;
1365 END IF;
1366
1367 IF org_name_csr%ISOPEN THEN
1368 CLOSE org_name_csr;
1369 END IF;
1370 -- store SQL error message on message stack for caller
1371 Okl_Api.SET_MESSAGE(p_app_name => g_app_name,
1372 p_msg_name => g_unexpected_error,
1373 p_token1 => g_sqlcode_token,
1374 p_token1_value => SQLCODE,
1375 p_token2 => g_sqlerrm_token,
1376 p_token2_value => SQLERRM);
1377
1378 END GET_COMMON_INFO;
1379
1380
1381 PROCEDURE CREATE_ACCRUALS (
1382 p_api_version IN NUMBER,
1383 p_init_msg_list IN VARCHAR2,
1384 x_return_status OUT NOCOPY VARCHAR2,
1385 x_msg_count OUT NOCOPY NUMBER,
1386 x_msg_data OUT NOCOPY VARCHAR2,
1387 x_tcnv_rec OUT NOCOPY OKL_TRX_CONTRACTS_PUB.tcnv_rec_type,
1388 x_tclv_tbl OUT NOCOPY OKL_TRX_CONTRACTS_PUB.tclv_tbl_type,
1389 p_accrual_rec IN accrual_rec_type,
1390 p_stream_tbl IN stream_tbl_type,
1391 p_representation_type IN VARCHAR2 DEFAULT 'PRIMARY') IS --MGAAP 7263041
1392
1393 -- cursor to get Master Item from Financial Asset Line
1394 CURSOR l_mtl_sys_item_csr (cp_chr_id NUMBER, cp_cle_id NUMBER) IS
1395 SELECT RPAD (ite.object1_id1, 50, ' ') || khr.inv_organization_id
1396 FROM okc_k_lines_b kle_fa,
1397 okc_line_styles_b lse_fa,
1398 okc_k_lines_b kle_ml,
1399 okc_line_styles_b lse_ml,
1400 okc_k_items ite,
1401 okl_k_headers_full_v khr
1402 WHERE kle_fa.id = cp_cle_id
1403 AND kle_fa.chr_id = cp_chr_id
1404 AND lse_fa.id = kle_fa.lse_id
1405 AND lse_fa.lty_code = 'FREE_FORM1'
1406 AND kle_ml.cle_id = kle_fa.id
1407 AND lse_ml.id = kle_ml.lse_id
1408 AND lse_ml.lty_code = 'ITEM'
1409 AND ite.cle_id = kle_ml.id
1410 AND kle_fa.dnz_chr_id = khr.id
1411 AND ite.jtot_object1_code = 'OKX_SYSITEM';
1412
1413 -- cursor to get bill-to-site of customer at line level
1414 CURSOR line_bill_to_site_csr (p_chr_id NUMBER, p_cle_id NUMBER) IS
1415 SELECT bill_to_site_use_id
1416 FROM OKC_K_LINES_B
1417 WHERE id = p_cle_id
1418 AND dnz_chr_id = p_chr_id;
1419
1420 --cursor to get lty_code
1421 CURSOR get_lty_code_csr(p_khr_id NUMBER, p_kle_id NUMBER) IS
1422 SELECT lsy.lty_code
1423 FROM OKC_K_LINES_B cle,
1424 OKC_LINE_STYLES_B lsy
1425 WHERE cle.dnz_chr_id = p_khr_id
1426 AND cle.id = p_kle_id
1427 AND cle.lse_id = lsy.id;
1428
1429 -- cursor to get parent kle_id
1430 CURSOR get_parent_kle_id_csr (p_kle_id NUMBER) IS
1431 SELECT object1_id1
1432 FROM okc_k_items
1433 WHERE cle_id = p_kle_id;
1434
1435 --Added by kthiruva on 14-May-2007
1436 --cursor to fetch the contract dff information for SLA Uptake
1437 CURSOR get_contract_dff_csr(p_khr_id IN NUMBER)
1438 IS
1439 SELECT khr.attribute_category
1440 ,khr.attribute1
1441 ,khr.attribute2
1442 ,khr.attribute3
1443 ,khr.attribute4
1444 ,khr.attribute5
1445 ,khr.attribute6
1446 ,khr.attribute7
1447 ,khr.attribute8
1448 ,khr.attribute9
1449 ,khr.attribute10
1450 ,khr.attribute11
1451 ,khr.attribute12
1452 ,khr.attribute13
1453 ,khr.attribute14
1454 ,khr.attribute15
1455 FROM okl_k_headers khr
1456 WHERE khr.id = p_khr_id;
1457
1458 --Added by kthiruva on 14-May-2007
1459 --cursor to fetch the line dff information for SLA Uptake
1460 CURSOR get_line_dff_csr(p_kle_id IN NUMBER)
1461 IS
1462 SELECT kle.attribute_category
1463 ,kle.attribute1
1464 ,kle.attribute2
1465 ,kle.attribute3
1466 ,kle.attribute4
1467 ,kle.attribute5
1468 ,kle.attribute6
1469 ,kle.attribute7
1470 ,kle.attribute8
1471 ,kle.attribute9
1472 ,kle.attribute10
1473 ,kle.attribute11
1474 ,kle.attribute12
1475 ,kle.attribute13
1476 ,kle.attribute14
1477 ,kle.attribute15
1478 FROM okl_k_lines kle
1479 WHERE kle.id = p_kle_id;
1480
1481
1482 --local variables
1483 l_tcnv_rec OKL_TRX_CONTRACTS_PUB.tcnv_rec_type;
1484 l_tclv_tbl OKL_TRX_CONTRACTS_PUB.tclv_tbl_type;
1485 l_api_name VARCHAR2(20) := 'CREATE_ACCRUALS';
1486 l_api_version CONSTANT NUMBER := 1.0;
1487 --Fixed Bug 5707866 SLA Uptake Project by nikshah, changed tsu_code to PROCESSED from ENTERED
1488 l_tsu_code_ent OKL_TRX_CONTRACTS.TSU_CODE%TYPE := 'PROCESSED';
1489 l_tcn_type OKL_TRX_CONTRACTS.TCN_TYPE%TYPE;
1490 l_tcl_type OKL_TXL_CNTRCT_LNS.TCL_TYPE%TYPE;
1491 l_source_table OKL_TRNS_ACC_DSTRS.SOURCE_TABLE%TYPE := 'OKL_TXL_CNTRCT_LNS';
1492 l_tmpl_identify_rec Okl_Account_Dist_Pvt.tmpl_identify_rec_type;
1493 --START: change by nikshah, for SLA Uptake Bug 5705866
1494 l_dist_info_tbl Okl_Account_Dist_Pvt.dist_info_tbl_type;
1495 --END: change by nikshah, for SLA Uptake Bug 5705866
1496 l_acc_gen_primary_key_tbl Okl_Account_Dist_Pub.acc_gen_primary_key;
1497 l_khrv_rec Okl_Contract_Pub.khrv_rec_type;
1498 l_chrv_rec Okl_Okc_Migration_Pvt.chrv_rec_type;
1499 x_khrv_rec Okl_Contract_Pub.khrv_rec_type;
1500 x_chrv_rec Okl_Okc_Migration_Pvt.chrv_rec_type;
1501 x_selv_tbl Okl_Streams_Pub.selv_tbl_type;
1502 l_inv_item_id VARCHAR2(2000);
1503 l_line_bill_to_site VARCHAR2(2000);
1504 l_counter NUMBER;
1505 l_lty_code VARCHAR2(2000);
1506 l_kle_id NUMBER;
1507 l_parent_kle_id NUMBER;
1508 l_kle_id_status VARCHAR2(2000);
1509 l_fact_sync_code VARCHAR2(2000);
1510 l_inv_acct_code VARCHAR2(2000);
1511 l_scs_code VARCHAR2(2000) := 'LEASE';
1512 --START: Added by nikshah 20-Feb-2007 for SLA Uptake, Bug #5707866
1513 l_tcn_id NUMBER;
1514 l_tmpl_identify_tbl Okl_Account_Dist_Pvt.tmpl_identify_tbl_type;
1515 l_ctxt_tbl Okl_Account_Dist_Pvt.CTXT_TBL_TYPE;
1516 l_acc_gen_tbl Okl_Account_Dist_Pvt.ACC_GEN_TBL_TYPE;
1517 l_template_out_tbl Okl_Account_Dist_Pvt.avlv_out_tbl_type;
1518 l_amount_out_tbl Okl_Account_Dist_Pvt.amount_out_tbl_type;
1519 --END: Added by nikshah 20-Feb-2007 for SLA Uptake, Bug #5707866
1520
1521
1522 TYPE selv_tbl_type IS TABLE OF NUMBER INDEX BY BINARY_INTEGER;
1523 l_selv_tbl selv_tbl_type;
1524
1525 TYPE sty_tbl_typ is TABLE OF OKL_STRM_TYPE_V.ID%TYPE INDEX BY BINARY_INTEGER;
1526 l_sty_tbl sty_tbl_typ;
1527
1528 l_record_exists VARCHAR2(1);
1529 l_count NUMBER;
1530 --Added by dpsingh for LE Uptake
1531 l_legal_entity_id NUMBER;
1532
1533 -- MGAAP 7263041
1534 CURSOR primary_rep_trx_id_csr(p_trx_number IN VARCHAR2) IS
1535 SELECT ID
1536 FROM OKL_TRX_CONTRACTS
1537 WHERE TRX_NUMBER = p_trx_number
1538 AND REPRESENTATION_TYPE = 'PRIMARY';
1539
1540 l_primary_rep_trx_id OKL_TRX_CONTRACTS.ID%TYPE;
1541
1542 BEGIN
1543 -- Set save point
1544
1545 --write_to_log('In Create_accruals: p_representation_type=' || p_representation_type);
1546 IF (p_representation_type = 'SECONDARY') THEN
1547 OPEN primary_rep_trx_id_csr(p_accrual_rec.trx_number);
1548 FETCH primary_rep_trx_id_csr INTO l_primary_rep_trx_id;
1549 CLOSE primary_rep_trx_id_csr;
1550 /*IF l_primary_rep_trx_id IS NULL THEN
1551 -- store SQL error message on message stack for caller
1552 okl_api.set_message(p_app_name => G_APP_NAME,
1553 p_msg_name => G_NO_MATCHING_RECORD,
1554 p_token1 => G_COL_NAME_TOKEN,
1555 p_token1_value => 'PRIMARY_REP_TRX_ID');
1556 RAISE OKL_API.G_EXCEPTION_ERROR;
1557 END IF;*/
1558 END IF;
1559
1560 WRITE_TO_LOG('');
1561 WRITE_TO_LOG('Inside the call to CREATE_ACCRUALS');
1562 x_return_status := Okl_Api.START_ACTIVITY(l_api_name
1563 ,G_PKG_NAME
1564 ,p_init_msg_list
1565 ,l_api_version
1566 ,p_api_version
1567 ,'_PVT'
1568 ,x_return_status);
1569
1570 IF (x_return_status = Okl_Api.G_RET_STS_UNEXP_ERROR) THEN
1571 RAISE Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR;
1572 ELSIF (x_return_Status = Okl_Api.G_RET_STS_ERROR) THEN
1573 RAISE Okl_Api.G_EXCEPTION_ERROR;
1574 END IF;
1575
1576 -- set tcn and tcl types.
1577 IF p_accrual_rec.accrual_rule_yn = 'N' THEN
1578 l_tcn_type := 'NACL';
1579 l_tcl_type := 'NACL';
1580 ELSE
1581 l_tcn_type := 'ACL';
1582 l_tcl_type := 'ACL';
1583 END IF;
1584 --Added by dpsingh for LE Uptake
1585 l_legal_entity_id := OKL_LEGAL_ENTITY_UTIL.get_khr_le_id(p_accrual_rec.contract_id) ;
1586 IF l_legal_entity_id IS NOT NULL THEN
1587 l_tcnv_rec.legal_entity_id := l_legal_entity_id;
1588 ELSE
1589 Okl_Api.set_message(p_app_name => g_app_name,
1590 p_msg_name => 'OKL_LE_NOT_EXIST_CNTRCT',
1591 p_token1 => 'CONTRACT_NUMBER',
1592 p_token1_value => p_accrual_rec.contract_number);
1593 RAISE OKL_API.G_EXCEPTION_ERROR;
1594 END IF;
1595
1596 -- Build the transaction record
1597 l_tcnv_rec.khr_id := p_accrual_rec.contract_id;
1598 l_tcnv_rec.pdt_id := p_accrual_rec.product_id;
1599 l_tcnv_rec.try_id := p_accrual_rec.trx_type_id;
1600 l_tcnv_rec.set_of_books_id := p_accrual_rec.set_of_books_id;
1601 l_tcnv_rec.tcn_type := l_tcn_type;
1602 l_tcnv_rec.description := p_accrual_rec.description;
1603 l_tcnv_rec.date_accrual := p_accrual_rec.accrual_date;
1604 l_tcnv_rec.date_transaction_occurred := p_accrual_rec.trx_date;
1605 -- adding ABS function for bug# 2459205 as super trump generates negative amounts for income streams
1606 -- Bug 3126427. Removing ABS as AE can handle negative accounting now (bug 2815972)
1607 l_tcnv_rec.amount := p_accrual_rec.amount;
1608 l_tcnv_rec.currency_code := p_accrual_rec.currency_code;
1609 l_tcnv_rec.currency_conversion_type := p_accrual_rec.currency_conversion_type;
1610 l_tcnv_rec.currency_conversion_rate := p_accrual_rec.currency_conversion_rate;
1611 l_tcnv_rec.currency_conversion_date := p_accrual_rec.currency_conversion_date;
1612 l_tcnv_rec.accrual_status_yn := p_accrual_rec.rule_result;
1613 l_tcnv_rec.update_status_yn := p_accrual_rec.override_status;
1614 l_tcnv_rec.tsu_code := l_tsu_code_ent;
1615 -- added accrual_activity for bug# 2455956
1616 l_tcnv_rec.accrual_activity := p_accrual_rec.accrual_activity;
1617 l_tcnv_rec.source_trx_id := p_accrual_rec.source_trx_id;
1618 l_tcnv_rec.source_trx_type := p_accrual_rec.source_trx_type;
1619 l_tcnv_rec.representation_type := p_representation_type; -- MGAAP 7263041
1620 l_tcnv_rec.trx_number := p_accrual_rec.trx_number; -- MGAAP 7263041
1621 IF (p_representation_type = 'SECONDARY') THEN -- MGAAP 7263041
1622 l_tcnv_rec.primary_rep_trx_id := l_primary_rep_trx_id;
1623 END IF;
1624
1625 --Fetching the contract dff information
1626 FOR get_contract_dff_rec IN get_contract_dff_csr(p_accrual_rec.contract_id)
1627 LOOP
1628 l_tcnv_rec.attribute_category := get_contract_dff_rec.attribute_category;
1629 l_tcnv_rec.attribute1 := get_contract_dff_rec.attribute1;
1630 l_tcnv_rec.attribute2 := get_contract_dff_rec.attribute2;
1631 l_tcnv_rec.attribute3 := get_contract_dff_rec.attribute3;
1632 l_tcnv_rec.attribute4 := get_contract_dff_rec.attribute4;
1633 l_tcnv_rec.attribute5 := get_contract_dff_rec.attribute5;
1634 l_tcnv_rec.attribute6 := get_contract_dff_rec.attribute6;
1635 l_tcnv_rec.attribute7 := get_contract_dff_rec.attribute7;
1636 l_tcnv_rec.attribute8 := get_contract_dff_rec.attribute8;
1637 l_tcnv_rec.attribute9 := get_contract_dff_rec.attribute9;
1638 l_tcnv_rec.attribute10 := get_contract_dff_rec.attribute10;
1639 l_tcnv_rec.attribute11 := get_contract_dff_rec.attribute11;
1640 l_tcnv_rec.attribute12 := get_contract_dff_rec.attribute12;
1641 l_tcnv_rec.attribute13 := get_contract_dff_rec.attribute13;
1642 l_tcnv_rec.attribute14 := get_contract_dff_rec.attribute14;
1643 l_tcnv_rec.attribute15 := get_contract_dff_rec.attribute15;
1644 END LOOP;
1645
1646 -- Build the transaction line table of records
1647 FOR i IN p_stream_tbl.FIRST..p_stream_tbl.LAST
1648 LOOP
1649 l_tclv_tbl(i).line_number := i;
1650 l_tclv_tbl(i).khr_id := p_accrual_rec.contract_id;
1651 l_tclv_tbl(i).kle_id := p_stream_tbl(i).kle_id;
1652 l_tclv_tbl(i).sty_id := p_stream_tbl(i).stream_type_id;
1653 l_tclv_tbl(i).tcl_type := l_tcl_type;
1654 l_tclv_tbl(i).description := p_accrual_rec.description;
1655 -- Bug 3126427. Removing ABS as AE can handle negative accounting now (bug 2815972)
1656 l_tclv_tbl(i).amount := p_stream_tbl(i).stream_amount;
1657 l_tclv_tbl(i).currency_code := p_accrual_rec.currency_code;
1658 l_tclv_tbl(i).accrual_rule_yn := p_accrual_rec.accrual_rule_yn;
1659 --Assigning the line DFF fields
1660 FOR get_line_dff_rec IN get_line_dff_csr( p_stream_tbl(i).kle_id)
1661 LOOP
1662 l_tclv_tbl(i).attribute_category := get_line_dff_rec.attribute_category;
1663 l_tclv_tbl(i).attribute1 := get_line_dff_rec.attribute1;
1664 l_tclv_tbl(i).attribute2 := get_line_dff_rec.attribute2;
1665 l_tclv_tbl(i).attribute3 := get_line_dff_rec.attribute3;
1666 l_tclv_tbl(i).attribute4 := get_line_dff_rec.attribute4;
1667 l_tclv_tbl(i).attribute5 := get_line_dff_rec.attribute5;
1668 l_tclv_tbl(i).attribute6 := get_line_dff_rec.attribute6;
1669 l_tclv_tbl(i).attribute7 := get_line_dff_rec.attribute7;
1670 l_tclv_tbl(i).attribute8 := get_line_dff_rec.attribute8;
1671 l_tclv_tbl(i).attribute9 := get_line_dff_rec.attribute9;
1672 l_tclv_tbl(i).attribute10 := get_line_dff_rec.attribute10;
1673 l_tclv_tbl(i).attribute11 := get_line_dff_rec.attribute11;
1674 l_tclv_tbl(i).attribute12 := get_line_dff_rec.attribute12;
1675 l_tclv_tbl(i).attribute13 := get_line_dff_rec.attribute13;
1676 l_tclv_tbl(i).attribute14 := get_line_dff_rec.attribute14;
1677 l_tclv_tbl(i).attribute15 := get_line_dff_rec.attribute15;
1678 END LOOP;
1679 END LOOP;
1680
1681 WRITE_TO_LOG('Prior to the call to Okl_Trx_Contracts_Pub.create_trx_contracts');
1682 WRITE_TO_LOG('The contents of l_tcnv_rec being passed to the create call ');
1683 WRITE_TO_LOG('===========================================================');
1684 WRITE_TO_LOG('l_tcnv_rec.khr_id :'||l_tcnv_rec.khr_id);
1685 WRITE_TO_LOG('l_tcnv_rec.pdt_id :'||l_tcnv_rec.pdt_id);
1686 WRITE_TO_LOG('l_tcnv_rec.try_id :'||l_tcnv_rec.try_id);
1687 WRITE_TO_LOG('l_tcnv_rec.set_of_books_id :'||l_tcnv_rec.set_of_books_id);
1688 WRITE_TO_LOG('l_tcnv_rec.tcn_type :'||l_tcnv_rec.tcn_type);
1689 WRITE_TO_LOG('l_tcnv_rec.description :'||l_tcnv_rec.description);
1690 WRITE_TO_LOG('l_tcnv_rec.date_accrual :'||l_tcnv_rec.date_accrual);
1691 WRITE_TO_LOG('l_tcnv_rec.date_transaction_occurred :'||l_tcnv_rec.date_transaction_occurred);
1692 WRITE_TO_LOG('l_tcnv_rec.amount :'||l_tcnv_rec.amount);
1693 WRITE_TO_LOG('l_tcnv_rec.currency_code :'||l_tcnv_rec.currency_code);
1694 WRITE_TO_LOG('l_tcnv_rec.currency_conversion_type :'||l_tcnv_rec.currency_conversion_type);
1695 WRITE_TO_LOG('l_tcnv_rec.currency_conversion_rate :'||l_tcnv_rec.currency_conversion_rate);
1696 WRITE_TO_LOG('l_tcnv_rec.currency_conversion_date :'||l_tcnv_rec.currency_conversion_date);
1697 WRITE_TO_LOG('l_tcnv_rec.accrual_status_yn :'||l_tcnv_rec.accrual_status_yn);
1698 WRITE_TO_LOG('l_tcnv_rec.update_status_yn :'||l_tcnv_rec.update_status_yn);
1699 WRITE_TO_LOG('l_tcnv_rec.tsu_code :'||l_tcnv_rec.tsu_code);
1700 WRITE_TO_LOG('l_tcnv_rec.accrual_activity :'||l_tcnv_rec.accrual_activity);
1701 WRITE_TO_LOG('l_tcnv_rec.source_trx_id :'||l_tcnv_rec.source_trx_id);
1702 WRITE_TO_LOG('l_tcnv_rec.source_trx_type :'||l_tcnv_rec.source_trx_type);
1703 WRITE_TO_LOG('l_tcnv_rec.accrual_reversal_date :'||l_tcnv_rec.accrual_reversal_date);
1704 WRITE_TO_LOG('l_tcnv_rec.representation_type :'||l_tcnv_rec.representation_type);
1705 WRITE_TO_LOG('l_tcnv_rec.trx_number :'||l_tcnv_rec.trx_number);
1706 WRITE_TO_LOG('l_tcnv_rec.primary_rep_trx_id :'||l_tcnv_rec.primary_rep_trx_id);
1707
1708 WRITE_TO_LOG('');
1709 WRITE_TO_LOG('The contents of l_tcnv_tbl being passed to the create call ');
1710 WRITE_TO_LOG('===========================================================');
1711
1712 FOR i IN l_tclv_tbl.FIRST..l_tclv_tbl.LAST
1713 LOOP
1714 WRITE_TO_LOG('l_tclv_tbl(i).line_number :'||l_tclv_tbl(i).line_number);
1715 WRITE_TO_LOG('l_tclv_tbl(i).khr_id :'||l_tclv_tbl(i).khr_id);
1716 WRITE_TO_LOG('l_tclv_tbl(i).kle_id :'||l_tclv_tbl(i).kle_id);
1717 WRITE_TO_LOG('l_tclv_tbl(i).sty_id :'||l_tclv_tbl(i).sty_id);
1718 WRITE_TO_LOG('l_tclv_tbl(i).tcl_type :'||l_tclv_tbl(i).tcl_type);
1719 WRITE_TO_LOG('l_tclv_tbl(i).description :'||l_tclv_tbl(i).description);
1720 WRITE_TO_LOG('l_tclv_tbl(i).amount :'||l_tclv_tbl(i).amount);
1721 WRITE_TO_LOG('l_tclv_tbl(i).currency_code :'||l_tclv_tbl(i).currency_code);
1722 WRITE_TO_LOG('l_tclv_tbl(i).accrual_rule_yn :'||l_tclv_tbl(i).accrual_rule_yn);
1723 END LOOP;
1724
1725 -- Call Transaction Public API to insert transaction header and line records
1726 Okl_Trx_Contracts_Pub.create_trx_contracts
1727 (p_api_version => p_api_version
1728 ,p_init_msg_list => p_init_msg_list
1729 ,x_return_status => x_return_status
1730 ,x_msg_count => x_msg_count
1731 ,x_msg_data => x_msg_data
1732 ,p_tcnv_rec => l_tcnv_rec
1733 ,p_tclv_tbl => l_tclv_tbl
1734 ,x_tcnv_rec => x_tcnv_rec
1735 ,x_tclv_tbl => x_tclv_tbl );
1736 WRITE_TO_LOG('The status after creating Transaction Header and Transaction Lines is :'||x_return_status);
1737 -- store the highest degree of error
1738 IF (x_return_status <> Okl_Api.G_RET_STS_SUCCESS) THEN
1739 IF (x_return_status = Okl_Api.G_RET_STS_UNEXP_ERROR) THEN
1740 -- need to leave
1741 Okl_Api.set_message(p_app_name => g_app_name,
1742 p_msg_name => 'OKL_AGN_TRX_CRE_ERROR',
1743 p_token1 => g_contract_number_token,
1744 p_token1_value => p_accrual_rec.contract_number);
1745 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
1746 ELSIF (x_return_Status = Okl_Api.G_RET_STS_ERROR) THEN
1747 Okl_Api.set_message(p_app_name => g_app_name,
1748 p_msg_name => 'OKL_AGN_TRX_CRE_ERROR',
1749 p_token1 => g_contract_number_token,
1750 p_token1_value => p_accrual_rec.contract_number);
1751 RAISE OKL_API.G_EXCEPTION_ERROR;
1752 END IF;
1753 END IF;
1754
1755 --START: change by nikshah, for SLA Uptake Bug 5705866
1756
1757 l_tcn_id := x_tcnv_rec.id;
1758
1759 --get acc gen sources and value. Bug 3596651
1760 GET_ACCOUNT_GEN_DETAILS(
1761 p_contract_id => p_accrual_rec.contract_id,
1762 x_return_status => x_return_status,
1763 x_acc_gen_primary_key_tbl => l_acc_gen_primary_key_tbl);
1764 --check for error
1765 IF (x_return_status <> Okl_Api.G_RET_STS_SUCCESS) THEN
1766 Okl_Api.set_message(p_app_name => g_app_name,
1767 p_msg_name => 'OKL_AGN_ACC_GEN_ERROR',
1768 p_token1 => g_contract_number_token,
1769 p_token1_value => p_accrual_rec.contract_number);
1770 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
1771 END IF;
1772
1773 l_count := 1;
1774
1775 -- Build Account Generator Sources
1776 l_count := 0;
1777 l_kle_id := NULL;
1778
1779 FOR x IN x_tclv_tbl.FIRST..x_tclv_tbl.LAST
1780 LOOP
1781 l_acc_gen_tbl(x).acc_gen_key_tbl := l_acc_gen_primary_key_tbl;
1782 l_acc_gen_tbl(x).source_id := x_tclv_tbl(x).id;
1783 -- Check if kle_id is not null
1784 --If kle_id is not null then find out the type of kle_id
1785 IF x_tclv_tbl(x).kle_id is NOT NULL THEN
1786 --check if kle_id is new, same or changed
1787 IF l_kle_id IS NULL THEN
1788 l_kle_id := x_tclv_tbl(x).kle_id;
1789 l_kle_id_status := 'NEW';
1790 ELSE
1791 IF x_tclv_tbl(x).kle_id = l_kle_id THEN
1792 l_kle_id_status := 'REPEAT';
1793 ELSE
1794 l_kle_id := x_tclv_tbl(x).kle_id;
1795 l_kle_id_status := 'CHANGED';
1796 END IF;
1797 END IF;
1798
1799 IF l_kle_id_status IN ('NEW','CHANGED') THEN
1800
1801 --re-initialize variables to null
1802 l_lty_code := NULL;
1803 l_line_bill_to_site := NULL;
1804 l_inv_item_id := NULL;
1805 l_parent_kle_id := NULL;
1806
1807 -- figure out the type of kle_id
1808 FOR y IN get_lty_code_csr(p_accrual_rec.contract_id, x_tclv_tbl(x).kle_id)
1809 LOOP
1810 l_lty_code := y.lty_code;
1811 END LOOP;
1812
1813 IF l_lty_code IS NOT NULL THEN
1814 IF l_lty_code = 'FREE_FORM1' THEN
1815
1816 OPEN line_bill_to_site_csr(p_accrual_rec.contract_id, x_tclv_tbl(x).kle_id);
1817 FETCH line_bill_to_site_csr INTO l_line_bill_to_site;
1818 CLOSE line_bill_to_site_csr;
1819
1820 IF l_line_bill_to_site IS NOT NULL THEN
1821 -- override contratc level bill to site
1822 FOR i IN l_acc_gen_tbl(x).acc_gen_key_tbl.FIRST..l_acc_gen_tbl(x).acc_gen_key_tbl.LAST
1823 LOOP
1824 IF l_acc_gen_tbl(x).acc_gen_key_tbl(i).source_table = 'AR_SITE_USES_V' THEN
1825 l_acc_gen_tbl(x).acc_gen_key_tbl(i).primary_key_column := l_line_bill_to_site;
1826 END IF;
1827 END LOOP;
1828 END IF;
1829
1830 -- Get Inv Item Id
1831 OPEN l_mtl_sys_item_csr(p_accrual_rec.contract_id, x_tclv_tbl(x).kle_id);
1832 FETCH l_mtl_sys_item_csr INTO l_inv_item_id;
1833 CLOSE l_mtl_sys_item_csr;
1834
1835 IF l_inv_item_id IS NOT NULL THEN
1836 l_count := l_acc_gen_tbl(x).acc_gen_key_tbl.LAST + 1;
1837 l_acc_gen_tbl(x).acc_gen_key_tbl(l_count).source_table:= 'MTL_SYSTEM_ITEMS_VL';
1838 l_acc_gen_tbl(x).acc_gen_key_tbl(l_count).primary_key_column := l_inv_item_id;
1839 ELSE
1840 Okl_Api.set_message(p_app_name => g_app_name,
1841 p_msg_name => 'OKL_AGN_INV_ITEM_ID_ERROR',
1842 p_token1 => g_contract_number_token,
1843 p_token1_value => p_accrual_rec.contract_number,
1844 p_token2 => 'LINE_ID',
1845 p_token2_value => x_tclv_tbl(x).kle_id);
1846 RAISE OKL_API.G_EXCEPTION_ERROR;
1847 END IF;
1848 ELSIF l_lty_code = 'LINK_SERV_ASSET' THEN
1849 --get kle_id of parent line
1850 OPEN get_parent_kle_id_csr(x_tclv_tbl(x).kle_id);
1851 FETCH get_parent_kle_id_csr INTO l_parent_kle_id;
1852 CLOSE get_parent_kle_id_csr;
1853
1854 IF l_parent_kle_id IS NULL THEN
1855 --raise exception
1856 Okl_Api.set_message(p_app_name => g_app_name,
1857 p_msg_name => 'OKL_AGN_PARENT_KLE_ID_ERROR',
1858 p_token1 => g_contract_number_token,
1859 p_token1_value => p_accrual_rec.contract_number,
1860 p_token2 => 'LINE_ID',
1861 p_token2_value => x_tclv_tbl(x).kle_id);
1862 RAISE OKL_API.G_EXCEPTION_ERROR;
1863 END IF;
1864
1865 OPEN l_mtl_sys_item_csr(p_accrual_rec.contract_id, l_parent_kle_id);
1866 FETCH l_mtl_sys_item_csr INTO l_inv_item_id;
1867 CLOSE l_mtl_sys_item_csr;
1868
1869 IF l_inv_item_id IS NOT NULL THEN
1870
1871 l_count := l_acc_gen_tbl(x).acc_gen_key_tbl.LAST + 1;
1872 l_acc_gen_tbl(x).acc_gen_key_tbl(l_count).source_table:= 'MTL_SYSTEM_ITEMS_VL';
1873 l_acc_gen_tbl(x).acc_gen_key_tbl(l_count).primary_key_column := l_inv_item_id;
1874 ELSE
1875 -- if it is linked service asset, then corresponding inv item id
1876 -- of associated asset MUST be available. if not, raise exception.
1877 Okl_Api.set_message(p_app_name => g_app_name,
1878 p_msg_name => 'OKL_AGN_INV_ITEM_ID_ERROR',
1879 p_token1 => g_contract_number_token,
1880 p_token1_value => p_accrual_rec.contract_number,
1881 p_token2 => 'LINE_ID',
1882 p_token2_value => l_parent_kle_id);
1883 RAISE OKL_API.G_EXCEPTION_ERROR;
1884
1885 END IF;
1886 END IF; --IF l_lty_code = 'FREE_FORM1' THEN
1887 END IF; -- IF lty_code IS NOT NULL
1888 ELSIF l_kle_id_status = 'REPEAT' THEN
1889 -- use previous values instead f opening cursor again
1890
1891 IF l_lty_code IN ('FREE_FORM1','LINK_SERV_ASSET') THEN
1892 -- override contratc level bill to site if asset level info avl
1893 IF l_line_bill_to_site IS NOT NULL THEN
1894
1895 FOR i IN l_acc_gen_tbl(x).acc_gen_key_tbl.FIRST..l_acc_gen_tbl(x).acc_gen_key_tbl.LAST
1896 LOOP
1897 IF l_acc_gen_tbl(x).acc_gen_key_tbl(i).source_table = 'AR_SITE_USES_V' THEN
1898 l_acc_gen_tbl(x).acc_gen_key_tbl(i).primary_key_column := l_line_bill_to_site;
1899 END IF;
1900 END LOOP;
1901 END IF;
1902
1903 IF l_inv_item_id IS NOT NULL THEN
1904 l_count := l_acc_gen_tbl(x).acc_gen_key_tbl.LAST + 1;
1905 l_acc_gen_tbl(x).acc_gen_key_tbl(l_count).source_table:= 'MTL_SYSTEM_ITEMS_VL';
1906 l_acc_gen_tbl(x).acc_gen_key_tbl(l_count).primary_key_column := l_inv_item_id;
1907 ELSE
1908 FND_FILE.PUT_LINE(FND_FILE.LOG, 'l_kle_id_status is REPEAT but l_inv_item_id is NULL. So no value to assign.');
1909 RAISE OKL_API.G_EXCEPTION_ERROR;
1910 END IF;
1911 END IF; --IF l_lty_code IN ('FREE_FORM1','LINK_SERV_ASSET') THEN
1912 END IF; -- IF kle_id_status = 'NEW'
1913 END IF; --IF x_tclv_tbl(x).kle_id is NOT NULL THEN
1914
1915 l_tmpl_identify_tbl(x).product_id := x_tcnv_rec.pdt_id;
1916 l_tmpl_identify_tbl(x).stream_type_id := x_tclv_tbl(x).sty_id;
1917 l_tmpl_identify_tbl(x).transaction_type_id := x_tcnv_rec.try_id;
1918 l_tmpl_identify_tbl(x).advance_arrears := p_accrual_rec.advance_arrears;
1919 l_tmpl_identify_tbl(x).prior_year_yn := 'N';
1920 l_tmpl_identify_tbl(x).memo_yn := p_accrual_rec.memo_yn;
1921 --Bug 4622198.
1922 l_tmpl_identify_tbl(x).factoring_synd_flag := l_fact_sync_code;
1923 l_tmpl_identify_tbl(x).investor_code := l_inv_acct_code;
1924
1925 l_dist_info_tbl(x).amount := x_tclv_tbl(x).amount;
1926 l_dist_info_tbl(x).accounting_date := x_tcnv_rec.date_transaction_occurred;
1927 l_dist_info_tbl(x).source_id := x_tclv_tbl(x).id;
1928 l_dist_info_tbl(x).source_table := l_source_table;
1929 l_dist_info_tbl(x).currency_code := x_tcnv_rec.currency_code;
1930 l_dist_info_tbl(x).currency_conversion_type := x_tcnv_rec.currency_conversion_type;
1931 l_dist_info_tbl(x).currency_conversion_rate := x_tcnv_rec.currency_conversion_rate;
1932 l_dist_info_tbl(x).currency_conversion_date := x_tcnv_rec.currency_conversion_date;
1933 l_dist_info_tbl(x).post_to_gl := p_accrual_rec.post_to_gl;
1934 l_dist_info_tbl(x).gl_reversal_flag := p_accrual_rec.gl_reversal_flag;
1935 --Added by kthiruva on 07-Oct-2005
1936 --Populating the contract and line id.
1937 -- Added by sgiyer on 07-Oct-2005. Populating only if not null, else explicit assgn to null.
1938 l_dist_info_tbl(x).contract_id := x_tclv_tbl(x).khr_id;
1939 IF x_tclv_tbl(x).kle_id IS NOT NULL THEN
1940 l_dist_info_tbl(x).contract_line_id := x_tclv_tbl(x).kle_id;
1941 ELSE
1942 l_dist_info_tbl(x).contract_line_id := NULL;
1943 END IF;
1944 END LOOP;
1945 -- --Bug 4622198.
1946 OKL_SECURITIZATION_PVT.check_khr_ia_associated(
1947 p_api_version => p_api_version
1948 ,p_init_msg_list => p_init_msg_list
1949 ,x_return_status => x_return_status
1950 ,x_msg_count => x_msg_count
1951 ,x_msg_data => x_msg_data
1952 ,p_khr_id => p_accrual_rec.contract_id
1953 ,p_scs_code => l_scs_code
1954 ,p_trx_date => p_accrual_rec.accrual_date
1955 ,x_fact_synd_code => l_fact_sync_code
1956 ,x_inv_acct_code => l_inv_acct_code
1957 );
1958
1959 -- store the highest degree of error
1960 IF (x_return_status <> Okl_Api.G_RET_STS_SUCCESS) THEN
1961 IF (x_return_status = Okl_Api.G_RET_STS_UNEXP_ERROR) THEN
1962 -- need to leave
1963 Okl_Api.set_message(p_app_name => g_app_name,
1964 p_msg_name => 'OKL_ACC_SEC_PVT_ERROR');
1965 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
1966 ELSIF (x_return_Status = Okl_Api.G_RET_STS_ERROR) THEN
1967 Okl_Api.set_message(p_app_name => g_app_name,
1968 p_msg_name => 'OKL_ACC_SEC_PVT_ERROR');
1969 RAISE OKL_API.G_EXCEPTION_ERROR;
1970 END IF;
1971 END IF;
1972
1973
1974 WRITE_TO_LOG('Prior to the call to Create Distributions');
1975 WRITE_TO_LOG('');
1976 WRITE_TO_LOG('The contents of l_tmpl_identify_tbl :');
1977 WRITE_TO_LOG('=========================================');
1978 FOR i in l_tmpl_identify_tbl.FIRST..l_tmpl_identify_tbl.LAST
1979 LOOP
1980 WRITE_TO_LOG('l_tmpl_identify_tbl(i).product_id :'||l_tmpl_identify_tbl(i).product_id);
1981 WRITE_TO_LOG('l_tmpl_identify_tbl(i).stream_type_id :'||l_tmpl_identify_tbl(i).stream_type_id);
1982 WRITE_TO_LOG('l_tmpl_identify_tbl(i).transaction_type_id :'||l_tmpl_identify_tbl(i).transaction_type_id);
1983 WRITE_TO_LOG('l_tmpl_identify_tbl(i).advance_arrears :'||l_tmpl_identify_tbl(i).advance_arrears);
1984 WRITE_TO_LOG('l_tmpl_identify_tbl(i).prior_year_yn :'||l_tmpl_identify_tbl(i).prior_year_yn);
1985 WRITE_TO_LOG('l_tmpl_identify_tbl(i).memo_yn :'||l_tmpl_identify_tbl(i).memo_yn);
1986 WRITE_TO_LOG('l_tmpl_identify_tbl(i).factoring_synd_flag :'||l_tmpl_identify_tbl(i).factoring_synd_flag);
1987 WRITE_TO_LOG('l_tmpl_identify_tbl(i).investor_code :'||l_tmpl_identify_tbl(i).investor_code);
1988 END LOOP;
1989
1990 WRITE_TO_LOG('The contents of l_dist_info_Tbl are :');
1991 WRITE_TO_LOG('=========================================');
1992 FOR i in l_dist_info_tbl.FIRST..l_dist_info_tbl.LAST
1993 LOOP
1994 WRITE_TO_LOG('l_dist_info_tbl(i).amount :'||l_dist_info_tbl(i).amount);
1995 WRITE_TO_LOG('l_dist_info_tbl(i).accounting_date :'||l_dist_info_tbl(i).accounting_date);
1996 WRITE_TO_LOG('l_dist_info_tbl(i).source_id :'||l_dist_info_tbl(i).source_id);
1997 WRITE_TO_LOG('l_dist_info_tbl(i).source_table :'||l_dist_info_tbl(i).source_table);
1998 WRITE_TO_LOG('l_dist_info_tbl(i).currency_code :'||l_dist_info_tbl(i).currency_code);
1999 WRITE_TO_LOG('l_dist_info_tbl(i).currency_conversion_type :'||l_dist_info_tbl(i).currency_conversion_type);
2000 WRITE_TO_LOG('l_dist_info_tbl(i).currency_conversion_rate :'||l_dist_info_tbl(i).currency_conversion_rate);
2001 WRITE_TO_LOG('l_dist_info_tbl(i).currency_conversion_date :'||l_dist_info_tbl(i).currency_conversion_date);
2002 WRITE_TO_LOG('l_dist_info_tbl(i).post_to_gl :'||l_dist_info_tbl(i).post_to_gl);
2003 WRITE_TO_LOG('l_dist_info_tbl(i).gl_reversal_flag :'||l_dist_info_tbl(i).gl_reversal_flag);
2004 WRITE_TO_LOG('l_dist_info_tbl(i).contract_id :'||l_dist_info_tbl(i).contract_id);
2005 WRITE_TO_LOG('l_dist_info_tbl(i).contract_line_id :'||l_dist_info_tbl(i).contract_line_id);
2006 END LOOP;
2007
2008 -- Call Okl_Account_Dist_Pub API to create accounting entries for this transaction
2009 --Call new accounting signature
2010 Okl_Account_Dist_Pvt.CREATE_ACCOUNTING_DIST(
2011 p_api_version => p_api_version,
2012 p_init_msg_list => p_init_msg_list,
2013 x_return_status => x_return_status,
2014 x_msg_count => x_msg_count,
2015 x_msg_data => x_msg_data,
2016 p_tmpl_identify_tbl => l_tmpl_identify_tbl,
2017 p_dist_info_tbl => l_dist_info_tbl,
2018 p_ctxt_val_tbl => l_ctxt_tbl,
2019 p_acc_gen_primary_key_tbl => l_acc_gen_tbl,
2020 x_template_tbl => l_template_out_tbl,
2021 x_amount_tbl => l_amount_out_tbl,
2022 p_trx_header_id => l_tcn_id);
2023
2024 -- store the highest degree of error
2025 IF (x_return_status <> Okl_Api.G_RET_STS_SUCCESS) THEN
2026 IF (x_return_status = Okl_Api.G_RET_STS_UNEXP_ERROR) THEN
2027 -- need to leave
2028 Okl_Api.set_message(p_app_name => g_app_name,
2029 p_msg_name => 'OKL_AGN_CRE_DIST_ERROR',
2030 p_token1 => g_contract_number_token,
2031 p_token1_value => p_accrual_rec.contract_number);
2032 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
2033 ELSIF (x_return_status = Okl_Api.G_RET_STS_ERROR) THEN
2034 -- record that there was an error
2035 Okl_Api.set_message(p_app_name => g_app_name,
2036 p_msg_name => 'OKL_AGN_CRE_DIST_ERROR',
2037 p_token1 => g_contract_number_token,
2038 p_token1_value => p_accrual_rec.contract_number);
2039 RAISE OKL_API.G_EXCEPTION_ERROR;
2040 END IF;
2041 END IF;
2042
2043 l_dist_info_tbl.DELETE;
2044 l_acc_gen_primary_key_tbl.DELETE;
2045
2046 --END: change by nikshah, for SLA Uptake Bug 5705866
2047
2048
2049 -- Call Streams Update API to mark the stream elements as accrued
2050 FOR i IN p_stream_tbl.FIRST..p_stream_tbl.LAST
2051 LOOP
2052 l_selv_tbl(i) := p_stream_tbl(i).stream_element_id;
2053 END LOOP;
2054
2055 -- Do bulk update
2056 FORALL i IN l_selv_tbl.FIRST..l_selv_tbl.LAST
2057 UPDATE okl_strm_elements
2058 SET accrued_yn = 'Y' where id = l_selv_tbl(i);
2059
2060 --
2061 -- Bug 4662173. Commenting below call for performance reasons.
2062 --
2063 -- Okl_Streams_Pub.UPDATE_STREAM_ELEMENTS
2064 -- (p_api_version => p_api_version
2065 -- ,p_init_msg_list => p_init_msg_list
2066 -- ,x_return_status => x_return_status
2067 -- ,x_msg_count => x_msg_count
2068 -- ,x_msg_data => x_msg_data
2069 -- ,p_selv_tbl => l_selv_tbl
2070 -- ,x_selv_tbl => x_selv_tbl );
2071 -- -- store the highest degree of error
2072 -- IF (x_return_status <> Okl_Api.G_RET_STS_SUCCESS) THEN
2073 -- IF (x_return_status = Okl_Api.G_RET_STS_UNEXP_ERROR) THEN
2074 -- -- need to leave
2075 -- Okl_Api.set_message(p_app_name => g_app_name,
2076 -- p_msg_name => 'OKL_AGN_STE_UPD_ERROR',
2077 -- p_token1 => g_contract_number_token,
2078 -- p_token1_value => p_accrual_rec.contract_number);
2079 -- RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
2080 -- ELSIF (x_return_status = Okl_Api.G_RET_STS_ERROR) THEN
2081 -- Okl_Api.set_message(p_app_name => g_app_name,
2082 -- p_msg_name => 'OKL_AGN_STE_UPD_ERROR',
2083 -- p_token1 => g_contract_number_token,
2084 -- p_token1_value => p_accrual_rec.contract_number);
2085 -- RAISE OKL_API.G_EXCEPTION_ERROR;
2086 -- END IF;
2087 -- END IF;
2088
2089 --
2090 -- Bug 4662173.
2091 -- Commenting below call. There is no need to update contract header.
2092 -- Value of latest accrual rule evaluation is available and used from transaction header.
2093 --
2094 -- IF p_accrual_rec.accrual_rule_yn = 'Y' THEN
2095 -- -- Set current accrual and override status on contract header
2096 -- -- Build the contract header record
2097 -- l_khrv_rec.id := p_accrual_rec.contract_id;
2098 -- l_chrv_rec.id := p_accrual_rec.contract_id;
2099 -- l_khrv_rec.generate_accrual_yn := x_tcnv_rec.accrual_status_yn;
2100 -- l_khrv_rec.generate_accrual_override_yn := x_tcnv_rec.update_status_yn;
2101 --
2102 -- -- Call Contract Update API to set accrual status
2103 -- Okl_Contract_Pub.update_contract_header
2104 -- (p_api_version => p_api_version
2105 -- ,p_init_msg_list => p_init_msg_list
2106 -- ,x_return_status => x_return_status
2107 -- ,x_msg_count => x_msg_count
2108 -- ,x_msg_data => x_msg_data
2109 -- ,p_restricted_update => 'OKL_API.G_TRUE'
2110 -- ,p_chrv_rec => l_chrv_rec
2111 -- ,p_khrv_rec => l_khrv_rec
2112 -- ,x_chrv_rec => x_chrv_rec
2113 -- ,x_khrv_rec => x_khrv_rec );
2114 -- -- store the highest degree of error
2115 -- IF (x_return_status <> Okl_Api.G_RET_STS_SUCCESS) THEN
2116 -- IF (x_return_status = Okl_Api.G_RET_STS_UNEXP_ERROR) THEN
2117 -- -- need to leave
2118 -- Okl_Api.set_message(p_app_name => g_app_name,
2119 -- p_msg_name => 'OKL_AGN_KHR_UPD_ERROR',
2120 -- p_token1 => g_contract_number_token,
2121 -- p_token1_value => p_accrual_rec.contract_number);
2122 -- RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
2123 -- ELSIF (x_return_status = Okl_Api.G_RET_STS_ERROR) THEN
2124 -- -- record that there was an error
2125 -- Okl_Api.set_message(p_app_name => g_app_name,
2126 -- p_msg_name => 'OKL_AGN_KHR_UPD_ERROR',
2127 -- p_token1 => g_contract_number_token,
2128 -- p_token1_value => p_accrual_rec.contract_number);
2129 -- RAISE OKL_API.G_EXCEPTION_ERROR;
2130 -- END IF;
2131 -- END IF;
2132 -- END IF;
2133
2134 Okl_Api.END_ACTIVITY(x_msg_count, x_msg_data);
2135 x_return_status := Okl_Api.G_RET_STS_SUCCESS;
2136
2137 EXCEPTION
2138 WHEN Okl_Api.G_EXCEPTION_ERROR THEN
2139 x_return_status := Okl_Api.HANDLE_EXCEPTIONS(l_api_name
2140 ,g_pkg_name
2141 ,'OKL_API.G_RET_STS_ERROR'
2142 ,x_msg_count
2143 ,x_msg_data
2144 ,'_PVT');
2145 WHEN Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR THEN
2146 -- store SQL error message on message stack for caller
2147 Okl_Api.SET_MESSAGE(p_app_name => g_app_name,
2148 p_msg_name => g_unexpected_error,
2149 p_token1 => g_sqlcode_token,
2150 p_token1_value => SQLCODE,
2151 p_token2 => g_sqlerrm_token,
2152 p_token2_value => SQLERRM);
2153 x_return_status := Okl_Api.HANDLE_EXCEPTIONS(l_api_name
2154 ,g_pkg_name
2155 ,'OKL_API.G_RET_STS_UNEXP_ERROR'
2156 ,x_msg_count
2157 ,x_msg_data
2158 ,'_PVT');
2159 WHEN OTHERS THEN
2160 IF line_bill_to_site_csr%ISOPEN THEN
2161 CLOSE line_bill_to_site_csr;
2162 END IF;
2163
2164 IF l_mtl_sys_item_csr%ISOPEN THEN
2165 CLOSE l_mtl_sys_item_csr;
2166 END IF;
2167
2168 IF get_parent_kle_id_csr%ISOPEN THEN
2169 CLOSE get_parent_kle_id_csr;
2170 END IF;
2171
2172 -- store SQL error message on message stack for caller
2173 Okl_Api.SET_MESSAGE(p_app_name => g_app_name,
2174 p_msg_name => g_unexpected_error,
2175 p_token1 => g_sqlcode_token,
2176 p_token1_value => SQLCODE,
2177 p_token2 => g_sqlerrm_token,
2178 p_token2_value => SQLERRM);
2179
2180 x_return_status :=Okl_Api.HANDLE_EXCEPTIONS
2181 (l_api_name,
2182 G_PKG_NAME,
2183 'OTHERS',
2184 x_msg_count,
2185 x_msg_data,
2186 '_PVT');
2187
2188 END CREATE_ACCRUALS;
2189
2190 --T and A impact incorporated. Bug 4060794
2191 PROCEDURE ADJUST_ACCRUALS (
2192 p_api_version IN NUMBER,
2193 p_init_msg_list IN VARCHAR2,
2194 x_return_status OUT NOCOPY VARCHAR2,
2195 x_msg_count OUT NOCOPY NUMBER,
2196 x_msg_data OUT NOCOPY VARCHAR2,
2197 x_trx_number OUT NOCOPY VARCHAR2,
2198 p_accrual_rec IN adjust_accrual_rec_type,
2199 p_stream_tbl IN stream_tbl_type,
2200 p_representation_type IN VARCHAR2 DEFAULT 'PRIMARY') IS
2201
2202 --local variables
2203 l_api_name VARCHAR2(20) := 'CREATE_ACCRUALS';
2204 l_api_version CONSTANT NUMBER := 1.0;
2205 l_return_status VARCHAR2(1) := OKL_API.G_RET_STS_SUCCESS;
2206 l_period_name VARCHAR2(2000);
2207 l_period_start_date DATE;
2208 l_period_end_date DATE;
2209 l_period_status VARCHAR2(1);
2210 l_sob_id NUMBER;
2211 l_accrual_rec accrual_rec_type;
2212 l_contract_number OKL_K_HEADERS_FULL_V.contract_number%TYPE;
2213 l_product_id OKL_K_HEADERS_FULL_V.pdt_id%TYPE;
2214 l_reporting_pdt_id OKL_PRODUCTS.REPORTING_PDT_ID%TYPE;
2215 l_total1 NUMBER := 0;
2216 l_total2 NUMBER := 0;
2217 l_try_id NUMBER;
2218 l_currency_conversion_type OKL_K_HEADERS_FULL_V.CURRENCY_CONVERSION_TYPE%TYPE;
2219 l_currency_conversion_rate OKL_K_HEADERS_FULL_V.CURRENCY_CONVERSION_RATE%TYPE;
2220 l_currency_conversion_date OKL_K_HEADERS_FULL_V.CURRENCY_CONVERSION_DATE%TYPE;
2221 l_func_currency_code OKL_TRX_CONTRACTS.CURRENCY_CODE%TYPE;
2222 l_khr_currency_code OKL_TRX_CONTRACTS.CURRENCY_CODE%TYPE;
2223 l_factoring_synd_flag VARCHAR2(2000) := NULL;
2224 l_tcnv_rec OKL_TRX_CONTRACTS_PUB.tcnv_rec_type;
2225 l_tclv_tbl OKL_TRX_CONTRACTS_PUB.tclv_tbl_type;
2226 l_start_date OKL_K_HEADERS_FULL_V.start_date%TYPE;
2227 l_sts_code OKL_K_HEADERS_FULL_V.sts_code%TYPE;
2228 l_generate_accrual_yn OKL_K_HEADERS_FULL_V.generate_accrual_yn%TYPE;
2229 l_generate_accrual_override_yn OKL_K_HEADERS_FULL_V.generate_accrual_override_yn%TYPE;
2230 l_deal_type OKL_K_HEADERS_FULL_V.deal_type%TYPE;
2231 l_accrual_strm_tbl stream_tbl_type;
2232 l_non_accrual_strm_tbl stream_tbl_type;
2233 l_accrual_rule_value OKL_STRM_TYPE_V.accrual_yn%TYPE;
2234 l_counter1 NUMBER := 1;
2235 l_counter2 NUMBER := 1;
2236 l_rule_result VARCHAR2(1);
2237 l_sob_name VARCHAR2(2000);
2238 l_org_id OKL_SYS_ACCT_OPTS.org_id%TYPE;
2239 l_org_name VARCHAR2(2000);
2240 l_accrual_reversal_days NUMBER;
2241
2242
2243
2244 -- Cursor to select the contract number for the given contract id
2245 CURSOR contract_details_csr (p_ctr_id VARCHAR2) IS
2246 SELECT chr.contract_number,
2247 chr.currency_code,
2248 khr.currency_conversion_type,
2249 khr.currency_conversion_date,
2250 khr.currency_conversion_rate,
2251 khr.pdt_id,
2252 chr.start_date,
2253 chr.sts_code,
2254 khr.generate_accrual_yn,
2255 khr.generate_accrual_override_yn,
2256 khr.deal_type,
2257 pdt.reporting_pdt_id -- MGAAP 7263014
2258 FROM OKC_K_HEADERS_B chr, OKL_K_HEADERS khr,
2259 OKL_PRODUCTS pdt
2260 WHERE chr.id = p_ctr_id
2261 AND chr.id = khr.id
2262 AND khr.pdt_id = pdt.id;
2263
2264 -- cursor to retrieve accrual rule value
2265 CURSOR accrual_rule_csr (p_sty_id NUMBER) IS
2266 SELECT accrual_yn
2267 FROM OKL_STRM_TYPE_B
2268 WHERE id = p_sty_id;
2269
2270
2271 BEGIN
2272
2273 -- Set save point
2274 l_return_status := Okl_Api.START_ACTIVITY(l_api_name
2275 ,G_PKG_NAME
2276 ,p_init_msg_list
2277 ,l_api_version
2278 ,p_api_version
2279 ,'_PVT'
2280 ,x_return_status);
2281
2282 IF (l_return_status = Okl_Api.G_RET_STS_UNEXP_ERROR) THEN
2283 RAISE Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR;
2284 ELSIF (l_return_Status = Okl_Api.G_RET_STS_ERROR) THEN
2285 RAISE Okl_Api.G_EXCEPTION_ERROR;
2286 END IF;
2287
2288 -- validate input parameters
2289 IF (p_accrual_rec.contract_id IS NULL) OR (p_accrual_rec.contract_id = OKL_API.G_MISS_NUM) THEN
2290 Okl_Api.set_message(p_app_name => g_app_name,
2291 p_msg_name => 'OKL_AGN_ACN_KHR_ID_ERROR');
2292 RAISE Okl_Api.G_EXCEPTION_ERROR;
2293 END IF;
2294
2295 IF (p_accrual_rec.accrual_date IS NULL) OR (p_accrual_rec.accrual_date = Okl_Api.G_MISS_DATE) THEN
2296 Okl_Api.SET_MESSAGE(p_app_name => g_app_name,
2297 p_msg_name => 'OKL_AGN_DATE_ERROR');
2298 RAISE Okl_Api.G_EXCEPTION_ERROR;
2299 END IF;
2300
2301 IF (p_accrual_rec.source_trx_id IS NULL) OR (p_accrual_rec.source_trx_id = Okl_Api.G_MISS_NUM) THEN
2302 Okl_Api.SET_MESSAGE(p_app_name => g_app_name,
2303 p_msg_name => 'OKL_AGN_SRC_TRX_ID_ERROR');
2304 RAISE Okl_Api.G_EXCEPTION_ERROR;
2305 END IF;
2306
2307 IF (p_accrual_rec.source_trx_type IS NULL) OR (p_accrual_rec.source_trx_type = Okl_Api.G_MISS_CHAR) THEN
2308 Okl_Api.SET_MESSAGE(p_app_name => g_app_name,
2309 p_msg_name => 'OKL_AGN_SRC_TRX_TYPE_ERROR');
2310 RAISE Okl_Api.G_EXCEPTION_ERROR;
2311 END IF;
2312
2313 -- get common info
2314 GET_COMMON_INFO (p_accrual_date => p_accrual_rec.accrual_date,
2315 p_representation_type => p_representation_type,
2316 x_try_id => l_try_id,
2317 x_period_name => l_period_name,
2318 x_period_start_date => l_period_start_date,
2319 x_period_end_date => l_period_end_date,
2320 x_sob_id => l_sob_id,
2321 x_sob_name => l_sob_name,
2322 x_org_id => l_org_id,
2323 x_org_name => l_org_name,
2324 x_accrual_reversal_days => l_accrual_reversal_days,
2325 x_func_currency_code => l_func_currency_code,
2326 x_return_status => l_return_status
2327 );
2328 IF (l_return_status <> Okl_Api.G_RET_STS_SUCCESS) THEN
2329 IF (l_return_status = Okl_Api.G_RET_STS_UNEXP_ERROR) THEN
2330 -- need to leave
2331 Okl_Api.set_message(p_app_name => g_app_name,
2332 p_msg_name => 'OKL_AGN_COM_INFO_ERROR');
2333 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
2334 ELSIF (l_return_Status = Okl_Api.G_RET_STS_ERROR) THEN
2335 Okl_Api.set_message(p_app_name => g_app_name,
2336 p_msg_name => 'OKL_AGN_COM_INFO_ERROR');
2337 RAISE OKL_API.G_EXCEPTION_ERROR;
2338 END IF;
2339 END IF;
2340
2341 IF l_period_status NOT IN ('O','F') THEN
2342 Okl_Api.set_message(p_app_name => g_app_name,
2343 p_msg_name => 'OKL_AGN_OPEN_PERIOD_ERROR');
2344 RAISE Okl_Api.G_EXCEPTION_ERROR;
2345 END IF;
2346
2347 -- get the contract number
2348 OPEN contract_details_csr(p_accrual_rec.contract_id);
2349 FETCH contract_details_csr INTO
2350 l_contract_number,
2351 l_khr_currency_code,
2352 l_currency_conversion_type,
2353 l_currency_conversion_date,
2354 l_currency_conversion_rate,
2355 l_product_id,
2356 l_start_date,
2357 l_sts_code,
2358 l_generate_accrual_yn,
2359 l_generate_accrual_override_yn,
2360 l_deal_type,
2361 l_reporting_pdt_id; -- MGAAP 7263014
2362 CLOSE contract_details_csr;
2363
2364 IF l_contract_number IS NULL THEN
2365 Okl_Api.set_message(p_app_name => g_app_name,
2366 p_msg_name => 'OKL_REV_LPV_CNTRCT_NUM_ERROR');
2367 RAISE OKL_API.G_EXCEPTION_ERROR;
2368 END IF;
2369
2370 IF l_product_id IS NULL THEN
2371 -- store SQL error message on message stack for caller
2372 okl_api.set_message(p_app_name => G_APP_NAME,
2373 p_msg_name => G_NO_MATCHING_RECORD,
2374 p_token1 => G_COL_NAME_TOKEN,
2375 p_token1_value => 'PDT_ID');
2376 RAISE OKL_API.G_EXCEPTION_ERROR;
2377 END IF;
2378
2379 IF p_representation_type = 'SECONDARY' THEN -- MGAAP 7263041
2380 IF l_reporting_pdt_id IS NULL THEN
2381 -- store SQL error message on message stack for caller
2382 okl_api.set_message(p_app_name => G_APP_NAME,
2383 p_msg_name => G_NO_MATCHING_RECORD,
2384 p_token1 => G_COL_NAME_TOKEN,
2385 p_token1_value => 'REPORTING_PDT_ID');
2386 RAISE OKL_API.G_EXCEPTION_ERROR;
2387 END IF;
2388
2389 END IF;
2390
2391 IF l_khr_currency_code IS NULL THEN
2392 -- store SQL error message on message stack for caller
2393 okl_api.set_message(p_app_name => G_APP_NAME,
2394 p_msg_name => G_NO_MATCHING_RECORD,
2395 p_token1 => G_COL_NAME_TOKEN,
2396 p_token1_value => 'CURRENCY_CODE');
2397 RAISE OKL_API.G_EXCEPTION_ERROR;
2398 END IF;
2399
2400 IF l_start_date IS NULL THEN
2401 -- store SQL error message on message stack for caller
2402 okl_api.set_message(p_app_name => G_APP_NAME,
2403 p_msg_name => G_NO_MATCHING_RECORD,
2404 p_token1 => G_COL_NAME_TOKEN,
2405 p_token1_value => 'START_DATE');
2406 RAISE OKL_API.G_EXCEPTION_ERROR;
2407 END IF;
2408
2409 IF l_sts_code IS NULL THEN
2410 -- store SQL error message on message stack for caller
2411 okl_api.set_message(p_app_name => G_APP_NAME,
2412 p_msg_name => G_NO_MATCHING_RECORD,
2413 p_token1 => G_COL_NAME_TOKEN,
2414 p_token1_value => 'STS_CODE');
2415 RAISE OKL_API.G_EXCEPTION_ERROR;
2416 END IF;
2417
2418 IF l_sts_code NOT IN ('BOOKED', 'EVERGREEN', 'ACTIVE') THEN
2419 -- store SQL error message on message stack for caller
2420 okl_api.set_message(p_app_name => G_APP_NAME,
2421 p_msg_name => 'OKL_AGN_STS_CODE_ERROR',
2422 p_token1 => g_contract_number_token,
2423 p_token1_value => l_contract_number);
2424 RAISE OKL_API.G_EXCEPTION_ERROR;
2425 END IF;
2426
2427 IF l_generate_accrual_yn IS NULL THEN
2428 -- store SQL error message on message stack for caller
2429 okl_api.set_message(p_app_name => G_APP_NAME,
2430 p_msg_name => G_NO_MATCHING_RECORD,
2431 p_token1 => G_COL_NAME_TOKEN,
2432 p_token1_value => 'GENERATE_ACCRUAL_YN');
2433 RAISE OKL_API.G_EXCEPTION_ERROR;
2434 END IF;
2435
2436 IF l_generate_accrual_override_yn IS NULL THEN
2437 -- store SQL error message on message stack for caller
2438 okl_api.set_message(p_app_name => G_APP_NAME,
2439 p_msg_name => G_NO_MATCHING_RECORD,
2440 p_token1 => G_COL_NAME_TOKEN,
2441 p_token1_value => 'GENERATE_ACCRUAL_OVERRIDE_YN');
2442 RAISE OKL_API.G_EXCEPTION_ERROR;
2443 END IF;
2444 -- modified by zrehman for Bug#6788005 on 11-Feb-2008 start
2445 IF l_deal_type IS NULL AND l_sts_code in ('BOOKED', 'EVERGREEN') THEN
2446 -- modified by zrehman for Bug#6788005 on 11-Feb-2008 end
2447 -- store SQL error message on message stack for caller
2448 okl_api.set_message(p_app_name => G_APP_NAME,
2449 p_msg_name => G_NO_MATCHING_RECORD,
2450 p_token1 => G_COL_NAME_TOKEN,
2451 p_token1_value => 'DEAL_TYPE');
2452 RAISE OKL_API.G_EXCEPTION_ERROR;
2453 END IF;
2454
2455 -- Check contract currency against functional currency
2456 IF l_func_currency_code <> l_khr_currency_code THEN
2457 --validate data
2458 IF l_currency_conversion_type IS NULL THEN
2459 Okl_Api.set_message(p_app_name => g_app_name,
2460 p_msg_name => 'OKL_AGN_CURR_TYPE_ERROR',
2461 p_token1 => g_contract_number_token,
2462 p_token1_value => l_contract_number);
2463 RAISE Okl_Api.G_EXCEPTION_ERROR;
2464 END IF;
2465 IF l_currency_conversion_date IS NULL THEN
2466 Okl_Api.set_message(p_app_name => g_app_name,
2467 p_msg_name => 'OKL_AGN_CURR_DATE_ERROR',
2468 p_token1 => g_contract_number_token,
2469 p_token1_value => l_contract_number);
2470 RAISE Okl_Api.G_EXCEPTION_ERROR;
2471 END IF;
2472 IF l_currency_conversion_type = 'User' THEN
2473 IF l_currency_conversion_rate IS NULL THEN
2474 Okl_Api.set_message(p_app_name => g_app_name,
2475 p_msg_name => 'OKL_AGN_CURR_USER_RATE_ERROR',
2476 p_token1 => g_contract_number_token,
2477 p_token1_value => l_contract_number);
2478 RAISE Okl_Api.G_EXCEPTION_ERROR;
2479 END IF;
2480 ELSE
2481 l_currency_conversion_rate := OKL_ACCOUNTING_UTIL.get_curr_con_rate
2482 (p_from_curr_code => l_khr_currency_code,
2483 p_to_curr_code => l_func_currency_code,
2484 p_con_date => p_accrual_rec.accrual_date, --Bug #5410825
2485 p_con_type => l_currency_conversion_type);
2486
2487
2488 IF l_currency_conversion_rate IS NULL THEN
2489 Okl_Api.set_message(p_app_name => g_app_name,
2490 p_msg_name => 'OKL_AGN_CURR_RATE_ERROR',
2491 p_token1 => 'CONVERSION_TYPE',
2492 p_token1_value => l_currency_conversion_type,
2493 p_token2 => 'FROM_CURRENCY',
2494 p_token2_value => l_khr_currency_code,
2495 p_token3 => 'TO_CURRENCY',
2496 p_token3_value => l_func_currency_code
2497 );
2498 RAISE Okl_Api.G_EXCEPTION_ERROR;
2499 END IF;
2500 l_currency_conversion_date := p_accrual_rec.accrual_date; --Bug #5410825
2501 END IF;
2502 END IF;
2503
2504 IF p_stream_tbl.COUNT > 0 THEN
2505
2506 -- Calculate total amount for transaction header and sort
2507 FOR i IN p_stream_tbl.FIRST..p_stream_tbl.LAST
2508 LOOP
2509
2510 FOR x in accrual_rule_csr(p_stream_tbl(i).stream_type_id)
2511 LOOP
2512 l_accrual_rule_value := x.accrual_yn;
2513 END LOOP;
2514
2515 IF l_accrual_rule_value IS NULL THEN
2516 Okl_Api.set_message(p_app_name => g_app_name,
2517 p_msg_name => 'OKL_AGN_ACCRUAL_VAL_ERROR',
2518 p_token1 => 'STREAM_TYPE',
2519 p_token1_value => p_stream_tbl(i).stream_type_name);
2520 RAISE OKL_API.G_EXCEPTION_ERROR;
2521 END IF;
2522
2523 IF l_accrual_rule_value = 'ACRL_WITH_RULE' THEN
2524 l_accrual_strm_tbl(l_counter1).stream_type_id := p_stream_tbl(i).stream_type_id;
2525 l_accrual_strm_tbl(l_counter1).stream_amount := p_stream_tbl(i).stream_amount;
2526 l_accrual_strm_tbl(l_counter1).kle_id := p_stream_tbl(i).kle_id;
2527 l_total1 := l_total1 + p_stream_tbl(i).stream_amount;
2528 l_counter1 := l_counter1 + 1;
2529 ELSIF l_accrual_rule_value = 'ACRL_WITHOUT_RULE' THEN
2530 l_non_accrual_strm_tbl(l_counter2).stream_type_id := p_stream_tbl(i).stream_type_id;
2531 l_non_accrual_strm_tbl(l_counter2).stream_amount := p_stream_tbl(i).stream_amount;
2532 l_non_accrual_strm_tbl(l_counter2).kle_id := p_stream_tbl(i).kle_id;
2533 l_total2 := l_total2 + p_stream_tbl(i).stream_amount;
2534 l_counter2 := l_counter2 + 1;
2535 ELSE
2536 OKL_API.set_message(G_APP_NAME, G_INVALID_VALUE,G_COL_NAME_TOKEN,'ACCRUAL_YN');
2537 RAISE OKL_API.G_EXCEPTION_ERROR;
2538 END IF;
2539
2540 END LOOP;
2541
2542 IF l_accrual_strm_tbl.COUNT > 0 THEN
2543 -- identify whether to take into income or non-income
2544 -- Validate contract against accrual rule and get the result
2545 VALIDATE_ACCRUAL_RULE(x_return_status => l_return_status
2546 ,x_result => l_rule_result
2547 ,p_ctr_id => p_accrual_rec.contract_id);
2548 -- store the highest degree of error
2549 IF (l_return_status <> Okl_Api.G_RET_STS_SUCCESS) THEN
2550 Okl_Api.set_message(p_app_name => g_app_name,
2551 p_msg_name => 'OKL_AGN_RULE_VALD_ERROR',
2552 p_token1 => g_contract_number_token,
2553 p_token1_value => l_contract_number);
2554 RAISE Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR;
2555 END IF;
2556
2557 -- Build the accrual record
2558 l_accrual_rec.contract_id := p_accrual_rec.contract_id;
2559 l_accrual_rec.set_of_books_id := l_sob_id;
2560 l_accrual_rec.accrual_date := p_accrual_rec.accrual_date;
2561 l_accrual_rec.trx_date := p_accrual_rec.accrual_date;
2562 l_accrual_rec.contract_number := l_contract_number;
2563 l_accrual_rec.description := p_accrual_rec.description;
2564 l_accrual_rec.currency_code := l_khr_currency_code;
2565 l_accrual_rec.currency_conversion_type := l_currency_conversion_type;
2566 l_accrual_rec.currency_conversion_rate := l_currency_conversion_rate;
2567 l_accrual_rec.currency_conversion_date := l_currency_conversion_date;
2568 l_accrual_rec.product_id := l_product_id;
2569 IF (p_representation_type = 'SECONDARY') THEN -- MGAAP 7263041
2570 l_accrual_rec.product_id := l_reporting_pdt_id;
2571 END IF;
2572 -- MGAAP 7263041
2573 l_accrual_rec.trx_number := p_accrual_rec.trx_number;
2574 l_accrual_rec.trx_type_id := l_try_id;
2575 l_accrual_rec.factoring_synd_flag := l_factoring_synd_flag;
2576 l_accrual_rec.post_to_gl := 'Y';
2577 l_accrual_rec.gl_reversal_flag := 'N';
2578 l_accrual_rec.accrual_rule_yn := 'Y';
2579 l_accrual_rec.source_trx_id := p_accrual_rec.source_trx_id;
2580 l_accrual_rec.source_trx_type := p_accrual_rec.source_trx_type;
2581 l_accrual_rec.amount := l_total1;
2582
2583 IF l_generate_accrual_override_yn = 'N' THEN
2584 IF l_rule_result = 'Y' THEN
2585 -- create income entries
2586 l_accrual_rec.rule_result := l_rule_result;
2587 l_accrual_rec.override_status := l_generate_accrual_override_yn;
2588 l_accrual_rec.memo_yn := 'N';
2589 l_accrual_rec.accrual_activity := 'ACCRUAL';
2590 ELSIF l_rule_result = 'N' THEN
2591 -- create memo entries
2592 l_accrual_rec.rule_result := l_rule_result;
2593 l_accrual_rec.override_status := l_generate_accrual_override_yn;
2594 l_accrual_rec.memo_yn := 'Y';
2595 l_accrual_rec.accrual_activity := 'NON-ACCRUAL';
2596 ELSE
2597 -- invalid value
2598 OKL_API.set_message(G_APP_NAME, G_INVALID_VALUE,G_COL_NAME_TOKEN,'l_rule_result');
2599 RAISE OKL_API.G_EXCEPTION_ERROR;
2600 END IF;
2601 ELSIF l_generate_accrual_override_yn = 'Y' THEN
2602 -- create memo entires
2603 l_accrual_rec.rule_result := l_rule_result;
2604 l_accrual_rec.override_status := l_generate_accrual_override_yn;
2605 l_accrual_rec.memo_yn := 'Y';
2606 l_accrual_rec.accrual_activity := 'NON-ACCRUAL';
2607 ELSE
2608 -- invalid value
2609 OKL_API.set_message(G_APP_NAME, G_INVALID_VALUE,G_COL_NAME_TOKEN,'l_generate_accrual_override_yn');
2610 RAISE OKL_API.G_EXCEPTION_ERROR;
2611 END IF;
2612
2613 -- Call CREATE_ACCRUAL procedure to create accrual transactions and entries
2614 CREATE_ACCRUALS (
2615 p_api_version => l_api_version,
2616 p_init_msg_list => p_init_msg_list,
2617 x_return_status => l_return_status,
2618 x_msg_count => x_msg_count,
2619 x_msg_data => x_msg_data,
2620 x_tcnv_rec => l_tcnv_rec,
2621 x_tclv_tbl => l_tclv_tbl,
2622 p_accrual_rec => l_accrual_rec,
2623 p_stream_tbl => l_accrual_strm_tbl,
2624 p_representation_type => p_representation_type);
2625
2626 IF (l_return_status <> Okl_Api.G_RET_STS_SUCCESS) THEN
2627 IF (l_return_status = Okl_Api.G_RET_STS_UNEXP_ERROR) THEN
2628 -- need to leave
2629 Okl_Api.set_message(p_app_name => g_app_name,
2630 p_msg_name => 'OKL_AGN_CRE_ACR_ERROR',
2631 p_token1 => g_contract_number_token,
2632 p_token1_value => l_contract_number);
2633 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
2634 ELSIF (l_return_Status = Okl_Api.G_RET_STS_ERROR) THEN
2635 Okl_Api.set_message(p_app_name => g_app_name,
2636 p_msg_name => 'OKL_AGN_CRE_ACR_ERROR',
2637 p_token1 => g_contract_number_token,
2638 p_token1_value => l_contract_number);
2639 RAISE OKL_API.G_EXCEPTION_ERROR;
2640 END IF;
2641 END IF;
2642 END IF;
2643
2644 IF l_non_accrual_strm_tbl.COUNT > 0 THEN
2645
2646 -- Build the accrual record
2647 l_accrual_rec.contract_id := p_accrual_rec.contract_id;
2648 l_accrual_rec.set_of_books_id := l_sob_id;
2649 l_accrual_rec.accrual_date := p_accrual_rec.accrual_date;
2650 l_accrual_rec.trx_date := p_accrual_rec.accrual_date;
2651 l_accrual_rec.contract_number := l_contract_number;
2652 l_accrual_rec.description := p_accrual_rec.description;
2653 l_accrual_rec.currency_code := l_khr_currency_code;
2654 l_accrual_rec.currency_conversion_type := l_currency_conversion_type;
2655 l_accrual_rec.currency_conversion_rate := l_currency_conversion_rate;
2656 l_accrual_rec.currency_conversion_date := l_currency_conversion_date;
2657 l_accrual_rec.product_id := l_product_id;
2658 IF (p_representation_type = 'SECONDARY') THEN -- MGAAP 7263041
2659 l_accrual_rec.product_id := l_reporting_pdt_id;
2660 END IF;
2661 -- MGAAP 7263041
2662 l_accrual_rec.trx_number := p_accrual_rec.trx_number;
2663 l_accrual_rec.trx_type_id := l_try_id;
2664 l_accrual_rec.factoring_synd_flag := l_factoring_synd_flag;
2665 l_accrual_rec.post_to_gl := 'Y';
2666 l_accrual_rec.gl_reversal_flag := 'N';
2667 l_accrual_rec.accrual_rule_yn := 'N';
2668 l_accrual_rec.source_trx_id := p_accrual_rec.source_trx_id;
2669 l_accrual_rec.source_trx_type := p_accrual_rec.source_trx_type;
2670 l_accrual_rec.amount := l_total2;
2671 l_accrual_rec.rule_result := NULL;
2672 l_accrual_rec.override_status := NULL;
2673 l_accrual_rec.memo_yn := 'N';
2674 l_accrual_rec.accrual_activity := 'ACCRUAL';
2675
2676
2677 -- Call CREATE_ACCRUAL procedure to create accrual transactions and entries
2678 CREATE_ACCRUALS (
2679 p_api_version => l_api_version,
2680 p_init_msg_list => p_init_msg_list,
2681 x_return_status => l_return_status,
2682 x_msg_count => x_msg_count,
2683 x_msg_data => x_msg_data,
2684 x_tcnv_rec => l_tcnv_rec,
2685 x_tclv_tbl => l_tclv_tbl,
2686 p_accrual_rec => l_accrual_rec,
2687 p_stream_tbl => l_non_accrual_strm_tbl,
2688 p_representation_type => p_representation_type);
2689
2690 IF (l_return_status <> Okl_Api.G_RET_STS_SUCCESS) THEN
2691 IF (l_return_status = Okl_Api.G_RET_STS_UNEXP_ERROR) THEN
2692 -- need to leave
2693 Okl_Api.set_message(p_app_name => g_app_name,
2694 p_msg_name => 'OKL_AGN_CRE_ACR_ERROR',
2695 p_token1 => g_contract_number_token,
2696 p_token1_value => l_contract_number);
2697 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
2698 ELSIF (l_return_Status = Okl_Api.G_RET_STS_ERROR) THEN
2699 Okl_Api.set_message(p_app_name => g_app_name,
2700 p_msg_name => 'OKL_AGN_CRE_ACR_ERROR',
2701 p_token1 => g_contract_number_token,
2702 p_token1_value => l_contract_number);
2703 RAISE OKL_API.G_EXCEPTION_ERROR;
2704 END IF;
2705 END IF;
2706 END IF;
2707 ELSE
2708 Okl_Api.set_message(p_app_name => g_app_name,
2709 p_msg_name => 'OKL_AGN_STRM_TBL_ERROR');
2710 RAISE OKL_API.G_EXCEPTION_ERROR;
2711 END IF; -- IF l_stream_tbl.COUNT >0
2712
2713 x_trx_number := l_tcnv_rec.trx_number;
2714
2715 Okl_Api.END_ACTIVITY(x_msg_count, x_msg_data);
2716 x_return_status := Okl_Api.G_RET_STS_SUCCESS;
2717
2718 EXCEPTION
2719 WHEN Okl_Api.G_EXCEPTION_ERROR THEN
2720 x_return_status := Okl_Api.HANDLE_EXCEPTIONS(l_api_name
2721 ,g_pkg_name
2722 ,'OKL_API.G_RET_STS_ERROR'
2723 ,x_msg_count
2724 ,x_msg_data
2725 ,'_PVT');
2726
2727 WHEN Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR THEN
2728 x_return_status := Okl_Api.HANDLE_EXCEPTIONS(l_api_name
2729 ,g_pkg_name
2730 ,'OKL_API.G_RET_STS_UNEXP_ERROR'
2731 ,x_msg_count
2732 ,x_msg_data
2733 ,'_PVT');
2734
2735 WHEN OTHERS THEN
2736
2737 IF contract_details_csr%ISOPEN THEN
2738 CLOSE contract_details_csr;
2739 END IF;
2740
2741 x_return_status :=Okl_Api.HANDLE_EXCEPTIONS
2742 (l_api_name,
2743 G_PKG_NAME,
2744 'OTHERS',
2745 x_msg_count,
2746 x_msg_data,
2747 '_PVT');
2748 END ADJUST_ACCRUALS;
2749
2750 PROCEDURE ACCELERATE_ACCRUALS (
2751 p_api_version IN NUMBER,
2752 p_init_msg_list IN VARCHAR2,
2753 x_return_status OUT NOCOPY VARCHAR2,
2754 x_msg_count OUT NOCOPY NUMBER,
2755 x_msg_data OUT NOCOPY VARCHAR2,
2756 p_acceleration_rec IN acceleration_rec_type,
2757 p_representation_type IN VARCHAR2 DEFAULT 'PRIMARY', --MGAAP 7263041
2758 x_trx_number OUT NOCOPY OKL_TRX_CONTRACTS.TRX_NUMBER%TYPE) IS --MGAAP 7263041
2759
2760 -- local collections
2761 TYPE accelerate_ref_cursor IS REF CURSOR;
2762 TYPE stream_rec IS RECORD
2763 (sty_id OKL_STRM_TYPE_V.ID%TYPE,
2764 ste_id OKL_STRM_ELEMENTS_V.ID%TYPE,
2765 amount NUMBER,
2766 kle_id OKL_STREAMS.kle_ID%TYPE);
2767
2768 --local variables
2769 l_api_name VARCHAR2(20) := 'ACCELERATE_ACCRUALS';
2770 l_api_version CONSTANT NUMBER := 1.0;
2771 l_return_status VARCHAR2(1) := OKL_API.G_RET_STS_SUCCESS;
2772 l_try_name CONSTANT VARCHAR2(7) := 'Accrual';
2773 l_period_name VARCHAR2(2000);
2774 l_period_start_date DATE;
2775 l_period_end_date DATE;
2776 l_period_status VARCHAR2(1);
2777 l_sob_id NUMBER;
2778 l_stream_tbl stream_tbl_type;
2779 l_accrual_rec accrual_rec_type;
2780 l_contract_number OKL_K_HEADERS_FULL_V.contract_number%TYPE;
2781 l_product_id OKL_K_HEADERS_FULL_V.pdt_id%TYPE;
2782 l_reporting_pdt_id OKL_PRODUCTS.reporting_pdt_id%TYPE; --MGAAP 7263041
2783 l_apply_accrual_rule VARCHAR2(1) := '?';
2784 l_rule_result VARCHAR2(1);
2785 l_override_status VARCHAR2(1);
2786 l_total NUMBER := 0;
2787 l_try_id NUMBER;
2788 l_currency_code OKL_K_HEADERS_FULL_V.CURRENCY_CODE%TYPE;
2789 l_currency_conversion_type OKL_K_HEADERS_FULL_V.CURRENCY_CONVERSION_TYPE%TYPE;
2790 l_currency_conversion_rate OKL_K_HEADERS_FULL_V.CURRENCY_CONVERSION_RATE%TYPE;
2791 l_currency_conversion_date OKL_K_HEADERS_FULL_V.CURRENCY_CONVERSION_DATE%TYPE;
2792 l_func_currency_code OKL_TRX_CONTRACTS.CURRENCY_CODE%TYPE;
2793 l_factoring_synd_flag VARCHAR2(2000) := NULL;
2794 l_billing_type VARCHAR2(2000) := NULL;
2795 l_tcnv_rec OKL_TRX_CONTRACTS_PUB.tcnv_rec_type;
2796 l_tclv_tbl OKL_TRX_CONTRACTS_PUB.tclv_tbl_type;
2797 acceleration_streams_csr accelerate_ref_cursor;
2798 l_stream_rec stream_rec;
2799 l_counter NUMBER := 1;
2800
2801 -- Cursor to select the transaction type id for the accrual transaction
2802 CURSOR trx_type_id_csr IS
2803 SELECT id
2804 FROM OKL_TRX_TYPES_TL
2805 WHERE name = l_try_name
2806 AND LANGUAGE = 'US';
2807
2808 -- cursor to get the contract number
2809 CURSOR contract_details_csr (p_khr_id NUMBER) IS
2810 SELECT chr.contract_number
2811 ,khr.pdt_id
2812 ,NVL(khr.generate_accrual_override_yn, 'N') override_yn
2813 ,chr.currency_code
2814 ,khr.currency_conversion_type
2815 ,khr.currency_conversion_rate
2816 ,khr.currency_conversion_date
2817 ,pdt.reporting_pdt_id
2818 FROM OKC_K_HEADERS_B chr, OKL_K_HEADERS khr,
2819 OKL_PRODUCTS pdt --MGAAP 7263041
2820 WHERE chr.id = p_khr_id
2821 AND chr.id = khr.id
2822 AND khr.pdt_id = pdt.id;
2823
2824 -- Cursor to select currency conversion information
2825 -- CURSOR currency_conv_csr(p_conversion_type VARCHAR2, p_from_currency VARCHAR2, p_to_currency VARCHAR2, p_conversion_date DATE) IS
2826 -- SELECT conversion_rate
2827 -- FROM GL_DAILY_RATES
2828 -- WHERE conversion_type = p_conversion_type
2829 -- AND conversion_date = p_conversion_date
2830 -- AND from_currency = p_from_currency
2831 -- AND to_currency = p_to_currency
2832 -- AND status_code = 'C';
2833
2834 BEGIN
2835 x_return_status := OKL_API.G_RET_STS_SUCCESS;
2836
2837 -- Set save point
2838 l_return_status := Okl_Api.START_ACTIVITY(l_api_name
2839 ,G_PKG_NAME
2840 ,p_init_msg_list
2841 ,l_api_version
2842 ,p_api_version
2843 ,'_PVT'
2844 ,x_return_status);
2845
2846 IF (l_return_status = Okl_Api.G_RET_STS_UNEXP_ERROR) THEN
2847 RAISE Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR;
2848 ELSIF (l_return_Status = Okl_Api.G_RET_STS_ERROR) THEN
2849 RAISE Okl_Api.G_EXCEPTION_ERROR;
2850 END IF;
2851
2852 -- validate input parameters
2853 IF (p_acceleration_rec.khr_id IS NULL) OR (p_acceleration_rec.khr_id = OKL_API.G_MISS_NUM) THEN
2854 Okl_Api.set_message(p_app_name => g_app_name,
2855 p_msg_name => 'OKL_AGN_ACN_KHR_ID_ERROR');
2856 RAISE Okl_Api.G_EXCEPTION_ERROR;
2857 END IF;
2858
2859 IF (p_acceleration_rec.acceleration_date IS NULL) OR (p_acceleration_rec.acceleration_date = OKL_API.G_MISS_DATE) THEN
2860 Okl_Api.set_message(p_app_name => g_app_name,
2861 p_msg_name => 'OKL_AGN_ACN_DATE_ERROR');
2862 RAISE Okl_Api.G_EXCEPTION_ERROR;
2863 END IF;
2864
2865 -- Changes for Bug 4040248
2866 -- remove validation and run accruals for specified stream type if provided and
2867 -- for all stream types marked for accrual if not provided.
2868 -- IF (p_acceleration_rec.sty_id IS NULL) OR (p_acceleration_rec.sty_id = OKL_API.G_MISS_NUM) THEN
2869 -- Okl_Api.set_message(p_app_name => g_app_name,
2870 -- p_msg_name => 'OKL_AGN_ACN_STY_ERROR');
2871 -- RAISE Okl_Api.G_EXCEPTION_ERROR;
2872 -- END IF;
2873
2874 IF (p_acceleration_rec.accrual_rule_yn IS NULL) OR (p_acceleration_rec.accrual_rule_yn = OKL_API.G_MISS_CHAR) THEN
2875 Okl_Api.set_message(p_app_name => g_app_name,
2876 p_msg_name => 'OKL_AGN_ACN_RULE_ERROR');
2877 RAISE Okl_Api.G_EXCEPTION_ERROR;
2878 END IF;
2879
2880 IF (p_acceleration_rec.accelerate_till_date IS NULL) OR (p_acceleration_rec.accelerate_till_date = OKL_API.G_MISS_DATE) THEN
2881 Okl_Api.set_message(p_app_name => g_app_name,
2882 p_msg_name => 'OKL_AGN_ACN_TILL_DATE_ERROR');
2883 RAISE Okl_Api.G_EXCEPTION_ERROR;
2884 END IF;
2885
2886 -- check for kle_id
2887 --akrangan cursor modified for bug 5526955 begin
2888 IF (p_acceleration_rec.kle_id IS NOT NULL AND p_acceleration_rec.accelerate_from_date IS NOT NULL) THEN
2889 OPEN acceleration_streams_csr FOR
2890 SELECT sty.id sty_id,
2891 ste.id ste_id,
2892 ste.amount amount,
2893 stm.kle_id
2894 FROM OKL_STRM_TYPE_B sty,
2895 --OKL_STREAMS stm,
2896 OKL_STREAMS_REP_V stm, --MGAAP 7263041
2897 OKL_STRM_ELEMENTS ste,
2898 OKL_PROD_STRM_TYPES psty,
2899 OKL_K_HEADERS khr,
2900 OKL_PRODUCTS pdt
2901 WHERE sty.id = p_acceleration_rec.sty_id
2902 AND stm.khr_id = p_acceleration_rec.khr_id
2903 AND stm.kle_id = p_acceleration_rec.kle_id
2904 AND khr.id = stm.khr_id
2905 AND stm.sty_id = sty.id
2906 AND sty.id = psty.sty_id
2907 --AND psty.pdt_id = khr.pdt_id
2908 AND ((psty.pdt_id = khr.pdt_id AND --MGAAP 7263041
2909 khr.pdt_id = pdt.ID AND
2910 p_representation_type = 'PRIMARY') OR
2911 (khr.pdt_id = pdt.ID AND
2912 pdt.reporting_pdt_id = psty.pdt_id AND
2913 p_representation_type = 'SECONDARY')
2914 )
2915 AND khr.id = stm.khr_id
2916 AND stm.id = ste.stm_id
2917 AND ste.amount <> 0
2918 -- AND ste.accrued_yn IS NULL
2919 AND stm.active_yn = 'Y'
2920 AND stm.say_code = 'CURR'
2921 AND psty.accrual_yn = 'Y'
2922 AND TRUNC(ste.stream_element_date) >= TRUNC(p_acceleration_rec.accelerate_from_date)
2923 AND TRUNC(ste.stream_element_date) <= TRUNC(p_acceleration_rec.accelerate_till_date);
2924 ELSIF (p_acceleration_rec.kle_id IS NOT NULL AND p_acceleration_rec.accelerate_from_date IS NULL) THEN
2925 OPEN acceleration_streams_csr FOR
2926 SELECT sty.id sty_id,
2927 ste.id ste_id,
2928 ste.amount amount,
2929 stm.kle_id
2930 FROM OKL_STRM_TYPE_B sty,
2931 --OKL_STREAMS stm,
2932 OKL_STREAMS_REP_V stm, --MGAAP 7263041
2933 OKL_STRM_ELEMENTS ste,
2934 OKL_PROD_STRM_TYPES psty,
2935 OKL_K_HEADERS khr,
2936 OKL_PRODUCTS pdt
2937 WHERE sty.id = p_acceleration_rec.sty_id
2938 AND stm.khr_id = p_acceleration_rec.khr_id
2939 AND stm.kle_id = p_acceleration_rec.kle_id
2940 AND khr.id = stm.khr_id
2941 AND stm.sty_id = sty.id
2942 AND sty.id = psty.sty_id
2943 --AND psty.pdt_id = khr.pdt_id
2944 AND ((psty.pdt_id = khr.pdt_id AND --MGAAP 7263041
2945 khr.pdt_id = pdt.ID AND
2946 p_representation_type = 'PRIMARY') OR
2947 (khr.pdt_id = pdt.ID AND
2948 pdt.reporting_pdt_id = psty.pdt_id AND
2949 p_representation_type = 'SECONDARY')
2950 )
2951 AND khr.id = stm.khr_id
2952 AND stm.id = ste.stm_id
2953 AND ste.amount <> 0
2954 AND ste.accrued_yn IS NULL
2955 AND stm.active_yn = 'Y'
2956 AND stm.say_code = 'CURR'
2957 AND psty.accrual_yn = 'Y'
2958 AND TRUNC(ste.stream_element_date) <= TRUNC(p_acceleration_rec.accelerate_till_date);
2959
2960 ELSIF (p_acceleration_rec.kle_id IS NULL AND p_acceleration_rec.accelerate_from_date IS NOT NULL) THEN
2961
2962 OPEN acceleration_streams_csr FOR
2963 SELECT sty.id sty_id,
2964 ste.id ste_id,
2965 ste.amount amount,
2966 stm.kle_id
2967 FROM OKL_STRM_TYPE_B sty,
2968 --OKL_STREAMS stm,
2969 OKL_STREAMS_REP_V stm, --MGAAP 7263041
2970 OKL_STRM_ELEMENTS ste,
2971 OKL_PROD_STRM_TYPES psty,
2972 OKL_K_HEADERS khr,
2973 OKL_PRODUCTS pdt
2974 WHERE stm.khr_id = p_acceleration_rec.khr_id
2975 AND khr.id = stm.khr_id
2976 AND sty.id = p_acceleration_rec.sty_id
2977 AND stm.sty_id = sty.id
2978 AND sty.id = psty.sty_id
2979 --AND psty.pdt_id = khr.pdt_id
2980 AND ((psty.pdt_id = khr.pdt_id AND --MGAAP 7263041
2981 khr.pdt_id = pdt.ID AND
2982 p_representation_type = 'PRIMARY') OR
2983 (khr.pdt_id = pdt.ID AND
2984 pdt.reporting_pdt_id = psty.pdt_id AND
2985 p_representation_type = 'SECONDARY')
2986 )
2987 AND khr.id = stm.khr_id
2988 AND stm.id = ste.stm_id
2989 AND ste.amount <> 0
2990 -- AND ste.accrued_yn IS NULL
2991 AND stm.active_yn = 'Y'
2992 AND stm.say_code = 'CURR'
2993 AND psty.accrual_yn = 'Y'
2994 AND TRUNC(ste.stream_element_date) >= TRUNC(p_acceleration_rec.accelerate_from_date)
2995 AND TRUNC(ste.stream_element_date) <= TRUNC(p_acceleration_rec.accelerate_till_date);
2996
2997 ELSE
2998
2999 OPEN acceleration_streams_csr FOR
3000 SELECT sty.id sty_id,
3001 ste.id ste_id,
3002 ste.amount amount,
3003 stm.kle_id
3004 FROM OKL_STRM_TYPE_B sty,
3005 --OKL_STREAMS stm,
3006 OKL_STREAMS_REP_V stm, --MGAAP 7263041
3007 OKL_STRM_ELEMENTS ste,
3008 OKL_PROD_STRM_TYPES psty,
3009 OKL_K_HEADERS khr,
3010 OKL_PRODUCTS pdt
3011 WHERE stm.khr_id = p_acceleration_rec.khr_id
3012 AND khr.id = stm.khr_id
3013 AND sty.id = p_acceleration_rec.sty_id
3014 AND stm.sty_id = sty.id
3015 AND sty.id = psty.sty_id
3016 --AND psty.pdt_id = khr.pdt_id
3017 AND ((psty.pdt_id = khr.pdt_id AND --MGAAP 7263041
3018 khr.pdt_id = pdt.ID AND
3019 p_representation_type = 'PRIMARY') OR
3020 (khr.pdt_id = pdt.ID AND
3021 pdt.reporting_pdt_id = psty.pdt_id AND
3022 p_representation_type = 'SECONDARY')
3023 )
3024 AND khr.id = stm.khr_id
3025 AND stm.id = ste.stm_id
3026 AND ste.amount <> 0
3027 AND ste.accrued_yn IS NULL
3028 AND stm.active_yn = 'Y'
3029 AND stm.say_code = 'CURR'
3030 AND psty.accrual_yn = 'Y'
3031 AND TRUNC(ste.stream_element_date) <= TRUNC(p_acceleration_rec.accelerate_till_date);
3032
3033 END IF;
3034 -- akrangan cursor modified for bug 5526955 end
3035 IF acceleration_streams_csr%ISOPEN THEN
3036 LOOP
3037 FETCH acceleration_streams_csr INTO l_stream_rec;
3038 EXIT WHEN acceleration_streams_csr%NOTFOUND;
3039 l_stream_tbl(l_counter).stream_type_id := l_stream_rec.sty_id;
3040 l_stream_tbl(l_counter).stream_element_id := l_stream_rec.ste_id;
3041 l_stream_tbl(l_counter).stream_amount := l_stream_rec.amount;
3042 l_stream_tbl(l_counter).kle_id := l_stream_rec.kle_id;
3043 l_total := l_total + l_stream_rec.amount;
3044 l_counter := l_counter + 1;
3045 END LOOP;
3046 CLOSE acceleration_streams_csr;
3047 END IF;
3048
3049
3050 -- process only if stream elements exist
3051 IF l_stream_tbl.COUNT > 0 THEN
3052
3053 -- get transaction type id
3054 OPEN trx_type_id_csr;
3055 FETCH trx_type_id_csr INTO l_try_id;
3056 CLOSE trx_type_id_csr;
3057 IF l_try_id IS NULL THEN
3058 Okl_Api.set_message(p_app_name => g_app_name,
3059 p_msg_name => 'OKL_AGN_TRY_ID_ERROR');
3060 RAISE Okl_Api.G_EXCEPTION_ERROR;
3061 END IF;
3062
3063 -- Find set of books id
3064 l_sob_id := Okl_Accounting_Util.GET_SET_OF_BOOKS_ID(
3065 p_representation_type => p_representation_type);
3066 IF (l_sob_id IS NULL) THEN
3067 -- store SQL error message on message stack for caller
3068 Okl_Api.set_message(p_app_name => g_app_name,
3069 p_msg_name => 'OKL_AGN_SOB_ID_ERROR');
3070 RAISE Okl_Api.G_EXCEPTION_ERROR;
3071 END IF;
3072
3073 -- Get period end date
3074 --Okl_Accounting_Util.GET_PERIOD_INFO(p_acceleration_rec.acceleration_date,l_period_name,l_period_start_date,l_period_end_date);
3075 Okl_Accounting_Util.GET_PERIOD_INFO(
3076 p_date => p_acceleration_rec.acceleration_date,
3077 p_period_name => l_period_name,
3078 p_start_date => l_period_start_date,
3079 p_end_date => l_period_end_date,
3080 p_ledger_id => l_sob_id); --MGAAP 7263041
3081 IF l_period_name IS NULL THEN
3082 Okl_Api.set_message(p_app_name => g_app_name,
3083 p_msg_name => 'OKL_AGN_PERIOD_END_DATE');
3084 RAISE Okl_Api.G_EXCEPTION_ERROR;
3085 END IF;
3086
3087 -- validate accrual date for open period check
3088 l_period_status := Okl_Accounting_Util.GET_OKL_PERIOD_STATUS(
3089 p_period_name => l_period_name,
3090 p_ledger_id => l_sob_id); --MGAAP 7263041
3091 IF l_period_status IS NULL THEN
3092 Okl_Api.set_message(p_app_name => g_app_name,
3093 p_msg_name => 'OKL_AGN_PERIOD_STATUS_ERROR',
3094 p_token1 => 'PERIOD_NAME',
3095 p_token1_value => l_period_name);
3096 RAISE Okl_Api.G_EXCEPTION_ERROR;
3097 END IF;
3098
3099 IF l_period_status NOT IN ('O','F') THEN
3100 Okl_Api.set_message(p_app_name => g_app_name,
3101 p_msg_name => 'OKL_AGN_OPEN_PERIOD_ERROR');
3102 RAISE Okl_Api.G_EXCEPTION_ERROR;
3103 END IF;
3104
3105 -- Find set of books id
3106 /* Moved before call to get period info
3107 l_sob_id := Okl_Accounting_Util.GET_SET_OF_BOOKS_ID(
3108 p_representation_type => p_representation_type);
3109 IF (l_sob_id IS NULL) THEN
3110 -- store SQL error message on message stack for caller
3111 Okl_Api.set_message(p_app_name => g_app_name,
3112 p_msg_name => 'OKL_AGN_SOB_ID_ERROR');
3113 RAISE Okl_Api.G_EXCEPTION_ERROR;
3114 END IF; */
3115
3116 -- Find currency code for the set of books id
3117 l_func_currency_code := Okl_Accounting_Util.GET_FUNC_CURR_CODE(
3118 p_ledger_id => l_sob_id); --MGAAP 7263041
3119 IF (l_func_currency_code IS NULL) THEN
3120 -- store SQL error message on message stack for caller
3121 Okl_Api.set_message(p_app_name => g_app_name,
3122 p_msg_name => 'OKL_AGN_CURR_CODE_ERROR');
3123 RAISE Okl_Api.G_EXCEPTION_ERROR;
3124 END IF;
3125
3126 -- get contract details
3127 FOR x IN contract_details_csr(p_acceleration_rec.khr_id)
3128 LOOP
3129 l_contract_number := x.contract_number;
3130 l_product_id := x.pdt_id;
3131 l_override_status := x.override_yn;
3132 l_currency_code := x.currency_code;
3133 l_currency_conversion_type := x.currency_conversion_type;
3134 l_currency_conversion_rate := x.currency_conversion_rate;
3135 l_currency_conversion_date := x.currency_conversion_date;
3136 l_reporting_pdt_id := x.reporting_pdt_id;
3137 END LOOP;
3138
3139 -- Check contract currency against functional currency
3140 IF l_func_currency_code <> l_currency_code THEN
3141 --validate data
3142 IF l_currency_conversion_type IS NULL THEN
3143 Okl_Api.set_message(p_app_name => g_app_name,
3144 p_msg_name => 'OKL_AGN_CURR_TYPE_ERROR',
3145 p_token1 => g_contract_number_token,
3146 p_token1_value => l_contract_number);
3147 RAISE Okl_Api.G_EXCEPTION_ERROR;
3148 END IF;
3149
3150 IF l_currency_conversion_date IS NULL THEN
3151 Okl_Api.set_message(p_app_name => g_app_name,
3152 p_msg_name => 'OKL_AGN_CURR_DATE_ERROR',
3153 p_token1 => g_contract_number_token,
3154 p_token1_value => l_contract_number);
3155 RAISE Okl_Api.G_EXCEPTION_ERROR;
3156 END IF;
3157
3158 IF l_currency_conversion_type = 'User' THEN
3159 IF l_currency_conversion_rate IS NULL THEN
3160 Okl_Api.set_message(p_app_name => g_app_name,
3161 p_msg_name => 'OKL_AGN_CURR_USER_RATE_ERROR',
3162 p_token1 => g_contract_number_token,
3163 p_token1_value => l_contract_number);
3164 RAISE Okl_Api.G_EXCEPTION_ERROR;
3165 END IF;
3166 ELSE
3167 l_currency_conversion_rate := OKL_ACCOUNTING_UTIL.get_curr_con_rate
3168 (p_from_curr_code => l_currency_code,
3169 p_to_curr_code => l_func_currency_code,
3170 p_con_date => p_acceleration_rec.acceleration_date, --Bug #5410825
3171 p_con_type => l_currency_conversion_type);
3172 IF l_currency_conversion_rate IS NULL THEN
3173 Okl_Api.set_message(p_app_name => g_app_name,
3174 p_msg_name => 'OKL_AGN_CURR_RATE_ERROR',
3175 p_token1 => 'CONVERSION_TYPE',
3176 p_token1_value => l_currency_conversion_type,
3177 p_token2 => 'FROM_CURRENCY',
3178 p_token2_value => l_currency_code,
3179 p_token3 => 'TO_CURRENCY',
3180 p_token3_value => l_func_currency_code
3181 );
3182 RAISE Okl_Api.G_EXCEPTION_ERROR;
3183 END IF;
3184 l_currency_conversion_date := p_acceleration_rec.acceleration_date; --Bug #5410825
3185 END IF;
3186 END IF;
3187
3188 -- build the transaction record
3189 l_accrual_rec.contract_id := p_acceleration_rec.khr_id;
3190 l_accrual_rec.set_of_books_id := l_sob_id;
3191 l_accrual_rec.accrual_date := p_acceleration_rec.acceleration_date;
3192 l_accrual_rec.trx_date := p_acceleration_rec.acceleration_date;
3193 l_accrual_rec.contract_number := l_contract_number;
3194 l_accrual_rec.description := p_acceleration_rec.description;
3195 l_accrual_rec.amount := l_total;
3196 l_accrual_rec.currency_code := l_currency_code;
3197 l_accrual_rec.currency_conversion_type := l_currency_conversion_type;
3198 l_accrual_rec.currency_conversion_rate := l_currency_conversion_rate;
3199 l_accrual_rec.currency_conversion_date := l_currency_conversion_date;
3200 l_accrual_rec.product_id := l_product_id;
3201 IF (p_representation_type = 'SECONDARY') THEN --MGAAP 7263041
3202 l_accrual_rec.product_id := l_reporting_pdt_id;
3203 END IF;
3204 l_accrual_rec.trx_type_id := l_try_id;
3205 l_accrual_rec.advance_arrears := l_billing_type;
3206 l_accrual_rec.factoring_synd_flag := l_factoring_synd_flag;
3207 l_accrual_rec.post_to_gl := 'Y';
3208 l_accrual_rec.gl_reversal_flag := 'N';
3209 l_accrual_rec.accrual_rule_yn := p_acceleration_rec.accrual_rule_yn;
3210 l_accrual_rec.trx_number := p_acceleration_rec.trx_number; --MGAAP 7263041
3211
3212 IF p_acceleration_rec.accrual_rule_yn = 'Y' THEN
3213 -- Validate contract against accrual rule and get the result
3214 VALIDATE_ACCRUAL_RULE(x_return_status => l_return_status
3215 ,x_result => l_rule_result
3216 ,p_ctr_id => p_acceleration_rec.khr_id);
3217 -- store the highest degree of error
3218 IF (l_return_status <> Okl_Api.G_RET_STS_SUCCESS) THEN
3219 Okl_Api.set_message(p_app_name => g_app_name,
3220 p_msg_name => 'OKL_AGN_RULE_VALD_ERROR',
3221 p_token1 => g_contract_number_token,
3222 p_token1_value => l_contract_number);
3223 RAISE Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR;
3224 END IF;
3225
3226 l_accrual_rec.rule_result := l_rule_result;
3227 l_accrual_rec.override_status := l_override_status;
3228
3229 IF l_override_status = 'N' THEN
3230 IF l_rule_result = 'Y' THEN
3231 -- create accruals
3232 l_accrual_rec.memo_yn := 'N';
3233 l_accrual_rec.accrual_activity := 'ACCRUAL';
3234 ELSIF l_rule_result = 'N' THEN
3235 -- create non-accruals
3236 l_accrual_rec.memo_yn := 'Y';
3237 l_accrual_rec.accrual_activity := 'NON-ACCRUAL';
3238 END IF;
3239 ELSIF l_override_status = 'Y' THEN
3240 -- create non-accruals
3241 l_accrual_rec.memo_yn := 'Y';
3242 l_accrual_rec.accrual_activity := 'NON-ACCRUAL';
3243 END IF;
3244 ELSE
3245 -- create accruals
3246 l_accrual_rec.memo_yn := 'N';
3247 l_accrual_rec.accrual_activity := 'ACCRUAL';
3248 END IF;
3249
3250 -- Call CREATE_ACCRUAL procedure to create accrual transactions and entries
3251 CREATE_ACCRUALS (
3252 p_api_version => l_api_version,
3253 p_init_msg_list => p_init_msg_list,
3254 x_return_status => l_return_status,
3255 x_msg_count => x_msg_count,
3256 x_msg_data => x_msg_data,
3257 x_tcnv_rec => l_tcnv_rec,
3258 x_tclv_tbl => l_tclv_tbl,
3259 p_accrual_rec => l_accrual_rec,
3260 p_stream_tbl => l_stream_tbl,
3261 p_representation_type => p_representation_type); --MGAAP 7263041
3262
3263 x_trx_number := l_tcnv_rec.trx_number; --MGAAP 7263041
3264 IF (l_return_status <> Okl_Api.G_RET_STS_SUCCESS) THEN
3265 IF (l_return_status = Okl_Api.G_RET_STS_UNEXP_ERROR) THEN
3266 Okl_Api.set_message(p_app_name => g_app_name,
3267 p_msg_name => 'OKL_AGN_TRX_CRE_ERROR',
3268 p_token1 => g_contract_number_token,
3269 p_token1_value => l_contract_number);
3270 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
3271 ELSIF (l_return_status = Okl_Api.G_RET_STS_ERROR) THEN
3272 Okl_Api.set_message(p_app_name => g_app_name,
3273 p_msg_name => 'OKL_AGN_TRX_CRE_ERROR',
3274 p_token1 => g_contract_number_token,
3275 p_token1_value => l_contract_number);
3276 RAISE OKL_API.G_EXCEPTION_ERROR;
3277 END IF;
3278 END IF;
3279
3280 END IF; -- IF l_stream_tbl.COUNT > 0
3281
3282 Okl_Api.END_ACTIVITY(x_msg_count, x_msg_data);
3283 x_return_status := Okl_Api.G_RET_STS_SUCCESS;
3284
3285 EXCEPTION
3286 WHEN Okl_Api.G_EXCEPTION_ERROR THEN
3287 x_return_status := Okl_Api.HANDLE_EXCEPTIONS(l_api_name
3288 ,g_pkg_name
3289 ,'OKL_API.G_RET_STS_ERROR'
3290 ,x_msg_count
3291 ,x_msg_data
3292 ,'_PVT');
3293
3294 WHEN Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR THEN
3295 x_return_status := Okl_Api.HANDLE_EXCEPTIONS(l_api_name
3296 ,g_pkg_name
3297 ,'OKL_API.G_RET_STS_UNEXP_ERROR'
3298 ,x_msg_count
3299 ,x_msg_data
3300 ,'_PVT');
3301
3302 WHEN OTHERS THEN
3303 x_return_status :=Okl_Api.HANDLE_EXCEPTIONS
3304 (l_api_name,
3305 G_PKG_NAME,
3306 'OTHERS',
3307 x_msg_count,
3308 x_msg_data,
3309 '_PVT');
3310
3311 END ACCELERATE_ACCRUALS;
3312
3313 PROCEDURE REVERSE_ACCRUALS (
3314 p_api_version IN NUMBER,
3315 p_init_msg_list IN VARCHAR2,
3316 p_reverse_rec IN accrual_rec_type,
3317 x_return_status OUT NOCOPY VARCHAR2,
3318 x_msg_count OUT NOCOPY NUMBER,
3319 x_msg_data OUT NOCOPY VARCHAR2,
3320 x_rev_tcnv_tbl OUT NOCOPY OKL_TRX_CONTRACTS_PUB.tcnv_tbl_type,
3321 x_rev_tclv_tbl OUT NOCOPY OKL_TRX_CONTRACTS_PUB.tclv_tbl_type,
3322 x_memo_tcnv_tbl OUT NOCOPY OKL_TRX_CONTRACTS_PUB.tcnv_tbl_type,
3323 x_memo_tclv_tbl OUT NOCOPY OKL_TRX_CONTRACTS_PUB.tclv_tbl_type,
3324 p_representation_type IN VARCHAR2 DEFAULT 'PRIMARY' -- MGAAP 7263041
3325 ) IS
3326
3327 -- local variables
3328 l_tcnv_rec OKL_TRX_CONTRACTS_PUB.tcnv_rec_type;
3329 l_tcnv_tbl OKL_TRX_CONTRACTS_PUB.tcnv_tbl_type;
3330 l_tclv_tbl OKL_TRX_CONTRACTS_PUB.tclv_tbl_type;
3331 l_source_id_tbl Okl_Reversal_Pub.source_id_tbl_type;
3332 l_api_name VARCHAR2(20) := 'REVERSE_ACCRUALS';
3333 l_api_version CONSTANT NUMBER := 1.0;
3334 l_tcn_type OKL_TRX_CONTRACTS.TCN_TYPE%TYPE := 'ACL';
3335 l_tcl_type OKL_TXL_CNTRCT_LNS.TCL_TYPE%TYPE := 'ACL';
3336 --Fixed Bug 5707866 SLA Uptake Project by nikshah, changed tsu_code to PROCESSED from ENTERED
3337 l_tsu_code_ent OKL_TRX_CONTRACTS.TSU_CODE%TYPE := 'PROCESSED';
3338 l_tsu_code_can OKL_TRX_CONTRACTS.TSU_CODE%TYPE := 'CANCELED';
3339 l_accrual_activity OKL_TRX_CONTRACTS.ACCRUAL_ACTIVITY%TYPE := 'ACCRUAL';
3340 l_non_accrual_activity OKL_TRX_CONTRACTS.ACCRUAL_ACTIVITY%TYPE := 'NON-ACCRUAL';
3341 l_reversal_activity OKL_TRX_CONTRACTS.ACCRUAL_ACTIVITY%TYPE := 'REVERSAL';
3342 l_source_table OKL_TRNS_ACC_DSTRS.SOURCE_TABLE%TYPE := 'OKL_TXL_CNTRCT_LNS';
3343 l_tmpl_identify_rec Okl_Account_Dist_Pub.tmpl_identify_rec_type;
3344 l_dist_info_rec Okl_Account_Dist_Pub.dist_info_rec_type;
3345 l_ctxt_val_tbl Okl_Account_Dist_Pub.ctxt_val_tbl_type;
3346 l_template_tbl Okl_Account_Dist_Pub.avlv_tbl_type;
3347 l_amount_tbl Okl_Account_Dist_Pub.amount_tbl_type;
3348 l_acc_gen_primary_key_tbl Okl_Account_Dist_Pub.acc_gen_primary_key;
3349 l_accrual_rec accrual_rec_type;
3350 l_stream_tbl stream_tbl_type;
3351 l_count NUMBER := 1;
3352 i NUMBER := 1;
3353
3354 -- Cursor to select transaction headers for reversal
3355 -- modified cursor for bug# 2455956
3356 -- removed to_date function in between statement as parameters are already of date datatype.
3357 CURSOR reverse_trx_csr(p_khr_id NUMBER, p_reversal_date_to DATE, p_reversal_date_from DATE) IS
3358 SELECT id, transaction_date,
3359 trx_number -- MGAAP 7263041
3360 FROM OKL_TRX_CONTRACTS
3361 WHERE khr_id = p_khr_id
3362 AND TRUNC(date_transaction_occurred) BETWEEN TRUNC(p_reversal_date_to) AND TRUNC(p_reversal_date_from)
3363 AND tsu_code = l_tsu_code_ent
3364 AND tcn_type = l_tcn_type
3365 /* AND accrual_activity = l_accrual_activity */ -- MGAAP 7263041
3366 AND representation_type = p_representation_type; -- MGAAP 7263041
3367
3368 -- Cursor to select transaction lines for reversal (for source id)
3369 -- Modifying below cursor for Bug# 2455956
3370 CURSOR reverse_txl_csr(p_tcn_id NUMBER) IS
3371 SELECT id
3372 FROM OKL_TXL_CNTRCT_LNS
3373 WHERE tcn_id = p_tcn_id;
3374
3375 -- Cursor to populate stream table with amounts and sty_id for creating memo Revenue
3376 CURSOR stream_tbl_csr (p_tcn_id NUMBER) IS
3377 SELECT sty_id, amount, kle_id
3378 FROM OKL_TXL_CNTRCT_LNS
3379 WHERE tcn_id = p_tcn_id;
3380
3381 BEGIN
3382 -- Set save point
3383 WRITE_TO_LOG('Inside the REVERSE_ACCRUALS call');
3384 WRITE_TO_LOG('Printing out the contents of p_reverse_rec :');
3385 WRITE_TO_LOG('============================================');
3386 WRITE_TO_LOG('p_reverse_rec.contract_id :'||p_reverse_rec.contract_id);
3387 WRITE_TO_LOG('p_reverse_rec.accrual_date :'||p_reverse_rec.accrual_date);
3388 WRITE_TO_LOG('p_reverse_rec.contract_number :'||p_reverse_rec.contract_number);
3389 WRITE_TO_LOG('p_reverse_rec.rule_result :'||p_reverse_rec.rule_result);
3390 WRITE_TO_LOG('p_reverse_rec.override_status :'||p_reverse_rec.override_status);
3391 WRITE_TO_LOG('p_reverse_rec.product_id :'||p_reverse_rec.product_id);
3392 WRITE_TO_LOG('p_reverse_rec.trx_type_id :'||p_reverse_rec.trx_type_id);
3393 WRITE_TO_LOG('p_reverse_rec.advance_arrears :'||p_reverse_rec.advance_arrears);
3394 WRITE_TO_LOG('p_reverse_rec.factoring_synd_flag :'||p_reverse_rec.factoring_synd_flag);
3395 WRITE_TO_LOG('p_reverse_rec.post_to_gl :'||p_reverse_rec.post_to_gl);
3396 WRITE_TO_LOG('p_reverse_rec.gl_reversal_flag :'||p_reverse_rec.gl_reversal_flag);
3397 WRITE_TO_LOG('p_reverse_rec.memo_yn :'||p_reverse_rec.memo_yn);
3398 WRITE_TO_LOG('p_reverse_rec.description :'||p_reverse_rec.description);
3399 WRITE_TO_LOG('p_reverse_rec.accrual_activity :'||p_reverse_rec.accrual_activity);
3400
3401 x_return_status := Okl_Api.START_ACTIVITY(l_api_name
3402 ,G_PKG_NAME
3403 ,p_init_msg_list
3404 ,l_api_version
3405 ,p_api_version
3406 ,'_PVT'
3407 ,x_return_status);
3408
3409 IF (x_return_status = Okl_Api.G_RET_STS_UNEXP_ERROR) THEN
3410 RAISE Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR;
3411 ELSIF (x_return_Status = Okl_Api.G_RET_STS_ERROR) THEN
3412 RAISE Okl_Api.G_EXCEPTION_ERROR;
3413 END IF;
3414
3415 -- Reverse transactions and accounting for number of days setup by the user
3416 -- Open reverse trx cursor to find out transaction id's TO REVERSE IN CASE OF non-accrual
3417 FOR l_reverse_trx_csr IN reverse_trx_csr(p_reverse_rec.contract_id, p_reverse_rec.reverse_date_to, p_reverse_rec.accrual_date )
3418 LOOP
3419 l_tcnv_tbl(i).id := l_reverse_trx_csr.id;
3420 l_tcnv_tbl(i).tsu_code := l_tsu_code_can;
3421 l_tcnv_tbl(i).accrual_activity := l_reversal_activity;
3422 -- sosharma added for income recon report
3423 l_tcnv_tbl(i).transaction_reversal_date := SYSDATE;
3424 l_tcnv_tbl(i).canceled_date := p_reverse_rec.accrual_date;
3425 l_tcnv_tbl(i).transaction_date := l_reverse_trx_csr.transaction_date;
3426 IF (p_representation_type = 'PRIMARY') THEN
3427 G_trx_number_tbl(i).old_trx_number := l_reverse_trx_csr.trx_number;
3428 END IF;
3429 i := i + 1;
3430 -- Open reverse txl cursor to find out transaction line id's for reversal
3431 FOR l_reverse_txl_csr IN reverse_txl_csr(l_reverse_trx_csr.id)
3432 LOOP
3433 l_source_id_tbl(l_count) := l_reverse_txl_csr.id;
3434 l_count := l_count + 1;
3435 END LOOP;
3436 END LOOP;
3437
3438 -- Check if records were found for reversal
3439 IF l_tcnv_tbl.COUNT > 0 THEN
3440
3441 WRITE_TO_LOG('Records were identified for reversal');
3442 WRITE_TO_LOG('Prior to the call to Okl_Reversal_Pub.REVERSE_ENTRIES');
3443 -- Call the Reverse Accounting API
3444 Okl_Reversal_Pub.REVERSE_ENTRIES(
3445 p_api_version => p_api_version,
3446 p_init_msg_list => p_init_msg_list,
3447 x_return_status => x_return_status,
3448 x_msg_count => x_msg_count,
3449 x_msg_data => x_msg_data,
3450 p_source_table => l_source_table,
3451 p_acct_date => p_reverse_rec.accrual_date,
3452 p_source_id_tbl => l_source_id_tbl);
3453 WRITE_TO_LOG('Return status after the call to Okl_Reversal_Pub.REVERSE_ENTRIES :'||x_return_status);
3454 -- store the highest degree of error
3455 IF (x_return_status <> Okl_Api.G_RET_STS_SUCCESS) THEN
3456 IF (x_return_status = Okl_Api.G_RET_STS_UNEXP_ERROR) THEN
3457 -- need to leave
3458 Okl_Api.set_message(p_app_name => g_app_name,
3459 p_msg_name => 'OKL_AGN_REV_DIST_ERROR',
3460 p_token1 => g_contract_number_token,
3461 p_token1_value => p_reverse_rec.contract_number);
3462 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
3463 ELSIF (x_return_status = Okl_Api.G_RET_STS_ERROR) THEN
3464 -- record that there was an error
3465 Okl_Api.set_message(p_app_name => g_app_name,
3466 p_msg_name => 'OKL_AGN_REV_DIST_ERROR',
3467 p_token1 => g_contract_number_token,
3468 p_token1_value => p_reverse_rec.contract_number);
3469 RAISE OKL_API.G_EXCEPTION_ERROR;
3470 END IF;
3471 END IF;
3472
3473 WRITE_TO_LOG('Prior to the call to Okl_Trx_Contracts_Pub.update_trx_contracts');
3474 --Call the transaction public api for update
3475 Okl_Trx_Contracts_Pub.update_trx_contracts
3476 (p_api_version => p_api_version,
3477 p_init_msg_list => p_init_msg_list,
3478 x_return_status => x_return_status,
3479 x_msg_count => x_msg_count,
3480 x_msg_data => x_msg_data,
3481 p_tcnv_tbl => l_tcnv_tbl,
3482 x_tcnv_tbl => x_rev_tcnv_tbl);
3483 WRITE_TO_LOG('Return status after the call to Okl_Trx_Contracts_Pub.update_trx_contracts :'||x_return_status);
3484
3485 -- store the highest degree of error
3486 IF (x_return_status <> Okl_Api.G_RET_STS_SUCCESS) THEN
3487 IF (x_return_status = Okl_Api.G_RET_STS_UNEXP_ERROR) THEN
3488 -- need to leave
3489 Okl_Api.set_message(p_app_name => g_app_name,
3490 p_msg_name => 'OKL_AGN_TRX_UPD_ERROR',
3491 p_token1 => g_contract_number_token,
3492 p_token1_value => p_reverse_rec.contract_number);
3493 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
3494 ELSIF (x_return_status = Okl_Api.G_RET_STS_ERROR) THEN
3495 -- record that there was an error
3496 Okl_Api.set_message(p_app_name => g_app_name,
3497 p_msg_name => 'OKL_AGN_TRX_UPD_ERROR',
3498 p_token1 => g_contract_number_token,
3499 p_token1_value => p_reverse_rec.contract_number);
3500 RAISE OKL_API.G_EXCEPTION_ERROR;
3501 END IF;
3502 END IF;
3503
3504 -- Create a new trasaction for the reversed transaction to reflect memo entries
3505 FOR i IN x_rev_tcnv_tbl.FIRST..x_rev_tcnv_tbl.LAST
3506 LOOP
3507 -- Build the accrual record
3508 l_accrual_rec.contract_id := x_rev_tcnv_tbl(i).khr_id;
3509 l_accrual_rec.set_of_books_id := x_rev_tcnv_tbl(i).set_of_books_id;
3510 l_accrual_rec.accrual_date := x_rev_tcnv_tbl(i).date_accrual;
3511 l_accrual_rec.trx_date := p_reverse_rec.accrual_date;
3512 l_accrual_rec.contract_number := p_reverse_rec.contract_number;
3513 l_accrual_rec.rule_result := p_reverse_rec.rule_result;
3514 l_accrual_rec.override_status := p_reverse_rec.override_status;
3515 l_accrual_rec.description := p_reverse_rec.description||' '||
3516 FND_MESSAGE.GET_STRING('OKL','OKL_AGN_RPT_NON_REVENUE');
3517 l_accrual_rec.amount := x_rev_tcnv_tbl(i).amount;
3518 l_accrual_rec.currency_code := x_rev_tcnv_tbl(i).currency_code;
3519 l_accrual_rec.currency_conversion_type := x_rev_tcnv_tbl(i).currency_conversion_type;
3520 l_accrual_rec.currency_conversion_rate := x_rev_tcnv_tbl(i).currency_conversion_rate;
3521 l_accrual_rec.currency_conversion_date := x_rev_tcnv_tbl(i).currency_conversion_date;
3522 l_accrual_rec.product_id := x_rev_tcnv_tbl(i).pdt_id;
3523 l_accrual_rec.trx_type_id := x_rev_tcnv_tbl(i).try_id;
3524 l_accrual_rec.advance_arrears := p_reverse_rec.advance_arrears;
3525 l_accrual_rec.factoring_synd_flag := p_reverse_rec.factoring_synd_flag;
3526 l_accrual_rec.post_to_gl := p_reverse_rec.post_to_gl;
3527 l_accrual_rec.gl_reversal_flag := p_reverse_rec.gl_reversal_flag;
3528 l_accrual_rec.memo_yn := p_reverse_rec.memo_yn;
3529 l_accrual_rec.accrual_activity := l_non_accrual_activity;
3530 l_accrual_rec.accrual_rule_yn := 'Y';
3531 -- MGAAP start 7263041
3532 --l_accrual_rec.trx_number := p_reverse_rec.trx_number;
3533 --l_accrual_rec.primary_rep_trx_id := p_reverse_rec.primary_rep_trx_id;
3534 -- MGAAP start
3535 IF (p_representation_type = 'SECONDARY') THEN
3536 /* Get new trx number and primary rep trx id using old_trx_number
3537 from x_rev_tcnv_tbl(i).trx_number */
3538 null;
3539 G_trx_number_tbl_cnt := G_trx_number_tbl.count;
3540 IF (G_trx_number_tbl_cnt > 0) THEN
3541 FOR rcnt IN G_trx_number_tbl.FIRST..G_trx_number_tbl.LAST
3542 LOOP
3543 IF (G_trx_number_tbl(rcnt).old_trx_number=x_rev_tcnv_tbl(i).trx_number) THEN
3544 l_accrual_rec.trx_number:= G_trx_number_tbl(rcnt).new_trx_number;
3545 l_accrual_rec.primary_rep_trx_id:= G_trx_number_tbl(rcnt).id;
3546 EXIT;
3547 END IF;
3548 END LOOP;
3549 END IF;
3550 END IF;
3551 -- MGAAP end 7263041
3552
3553 l_count := 1;
3554 -- Populate stream table for CREATE_ACCRUALS procedure
3555 FOR x IN stream_tbl_csr(x_rev_tcnv_tbl(i).id)
3556 LOOP
3557 l_stream_tbl(l_count).stream_type_id := x.sty_id;
3558 l_stream_tbl(l_count).stream_amount := x.amount;
3559 l_stream_tbl(l_count).kle_id := x.kle_id;
3560 l_count := l_count + 1;
3561 END LOOP;
3562
3563 -- Call CREATE_ACCRUAL procedure to create accrual transactions and entries
3564 CREATE_ACCRUALS (
3565 p_api_version => l_api_version,
3566 p_init_msg_list => p_init_msg_list,
3567 x_return_status => x_return_status,
3568 x_msg_count => x_msg_count,
3569 x_msg_data => x_msg_data,
3570 x_tcnv_rec => l_tcnv_rec,
3571 x_tclv_tbl => l_tclv_tbl,
3572 p_accrual_rec => l_accrual_rec,
3573 p_stream_tbl => l_stream_tbl,
3574 p_representation_type => p_representation_type); -- MGAAP 7263041
3575 -- store the highest degree of error
3576 IF (x_return_status <> Okl_Api.G_RET_STS_SUCCESS) THEN
3577 IF (x_return_status = Okl_Api.G_RET_STS_UNEXP_ERROR) THEN
3578 -- need to leave
3579 Okl_Api.set_message(p_app_name => g_app_name,
3580 p_msg_name => 'OKL_AGN_TRX_CRE_ERROR',
3581 p_token1 => g_contract_number_token,
3582 p_token1_value => p_reverse_rec.contract_number);
3583 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
3584 ELSIF (x_return_status = Okl_Api.G_RET_STS_ERROR) THEN
3585 Okl_Api.set_message(p_app_name => g_app_name,
3586 p_msg_name => 'OKL_AGN_TRX_CRE_ERROR',
3587 p_token1 => g_contract_number_token,
3588 p_token1_value => p_reverse_rec.contract_number);
3589 RAISE OKL_API.G_EXCEPTION_ERROR;
3590 END IF;
3591 END IF;
3592
3593 -- MGAAP start 7263041
3594 IF (p_representation_type = 'PRIMARY') THEN
3595 G_trx_number_tbl(i).new_trx_number := l_tcnv_rec.trx_number;
3596 G_trx_number_tbl(i).ID := l_tcnv_rec.ID;
3597 END IF;
3598 -- MGAAP end 7263041
3599
3600 -- 26-Sep-2005. SGIYER. Bug 4616770
3601 -- re-initialize l_stream_tbl everytime.
3602 l_stream_tbl.DELETE;
3603
3604 x_memo_tcnv_tbl(i) := l_tcnv_rec;
3605
3606 END LOOP;
3607 END IF; -- for l_tcnv_tbl.count > 0;
3608
3609 Okl_Api.END_ACTIVITY(x_msg_count, x_msg_data);
3610 x_return_status := Okl_Api.G_RET_STS_SUCCESS;
3611
3612 EXCEPTION
3613
3614 WHEN Okl_Api.G_EXCEPTION_ERROR THEN
3615 x_return_status := Okl_Api.HANDLE_EXCEPTIONS(l_api_name
3616 ,g_pkg_name
3617 ,'OKL_API.G_RET_STS_ERROR'
3618 ,x_msg_count
3619 ,x_msg_data
3620 ,'_PVT');
3621 WHEN Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR THEN
3622 x_return_status := Okl_Api.HANDLE_EXCEPTIONS(l_api_name
3623 ,g_pkg_name
3624 ,'OKL_API.G_RET_STS_UNEXP_ERROR'
3625 ,x_msg_count
3626 ,x_msg_data
3627 ,'_PVT');
3628 WHEN OTHERS THEN
3629 x_return_status :=Okl_Api.HANDLE_EXCEPTIONS
3630 (l_api_name,
3631 G_PKG_NAME,
3632 'OTHERS',
3633 x_msg_count,
3634 x_msg_data,
3635 '_PVT');
3636
3637 END REVERSE_ACCRUALS;
3638
3639 PROCEDURE REVERSE_ACCRUALS (
3640 p_api_version IN NUMBER,
3641 p_init_msg_list IN VARCHAR2,
3642 p_reverse_rec IN accrual_rec_type,
3643 x_return_status OUT NOCOPY VARCHAR2,
3644 x_msg_count OUT NOCOPY NUMBER,
3645 x_msg_data OUT NOCOPY VARCHAR2,
3646 x_tcnv_tbl OUT NOCOPY OKL_TRX_CONTRACTS_PUB.tcnv_tbl_type,
3647 x_tclv_tbl OUT NOCOPY OKL_TRX_CONTRACTS_PUB.tclv_tbl_type,
3648 p_representation_type IN VARCHAR2 DEFAULT 'PRIMARY'
3649 ) IS
3650
3651 x_rev_tcnv_tbl OKL_TRX_CONTRACTS_PUB.tcnv_tbl_type;
3652 x_rev_tclv_tbl OKL_TRX_CONTRACTS_PUB.tclv_tbl_type;
3653
3654 BEGIN
3655
3656 REVERSE_ACCRUALS (
3657 p_api_version => p_api_version,
3658 p_init_msg_list => p_init_msg_list,
3659 p_reverse_rec => p_reverse_rec,
3660 x_return_status => x_return_status,
3661 x_msg_count => x_msg_count,
3662 x_msg_data => x_msg_data,
3663 x_rev_tcnv_tbl => x_rev_tcnv_tbl,
3664 x_rev_tclv_tbl => x_rev_tclv_tbl,
3665 x_memo_tcnv_tbl => x_tcnv_tbl,
3666 x_memo_tclv_tbl => x_tclv_tbl,
3667 p_representation_type => p_representation_type); -- MGAAP 7263041
3668
3669 END;
3670
3671 -- for prior dated and future dated reversal
3672 PROCEDURE REVERSE_ACCRUALS (
3673 p_api_version IN NUMBER,
3674 p_init_msg_list IN VARCHAR2,
3675 x_return_status OUT NOCOPY VARCHAR2,
3676 x_msg_count OUT NOCOPY NUMBER,
3677 x_msg_data OUT NOCOPY VARCHAR2,
3678 p_khr_id IN NUMBER,
3679 p_reversal_date IN DATE,
3680 p_accounting_date IN DATE,
3681 p_reverse_from IN DATE,
3682 p_reverse_to IN DATE,
3683 p_tcn_type IN VARCHAR2) IS
3684
3685 -- local variables
3686 l_api_name CONSTANT VARCHAR2(30) := 'REVERSE_ACCRUALS';
3687 l_api_version CONSTANT NUMBER := 1.0;
3688 --Fixed Bug 5707866 SLA Uptake Project by nikshah, changed tsu_code to PROCESSED from ENTERED
3689 l_tsu_code_ent OKL_TRX_CONTRACTS.TSU_CODE%TYPE := 'PROCESSED';
3690 l_tsu_code_can OKL_TRX_CONTRACTS.TSU_CODE%TYPE := 'CANCELED';
3691 l_reversal_activity OKL_TRX_CONTRACTS.ACCRUAL_ACTIVITY%TYPE := 'REVERSAL';
3692 l_source_id_tbl Okl_Reversal_Pub.source_id_tbl_type;
3693 l_source_table OKL_TRNS_ACC_DSTRS.SOURCE_TABLE%TYPE := 'OKL_TXL_CNTRCT_LNS';
3694 l_tcnv_tbl OKL_TRX_CONTRACTS_PUB.tcnv_tbl_type;
3695 x_tcnv_tbl OKL_TRX_CONTRACTS_PUB.tcnv_tbl_type;
3696 l_contract_number VARCHAR2(2000);
3697 l_tcn_type VARCHAR2(2000) := p_tcn_type;
3698 l_count1 NUMBER := 1;
3699 l_count2 NUMBER := 1;
3700
3701 -- Cursor to select Contract Number
3702 CURSOR get_contract_number_csr(p_ctr_id NUMBER) IS
3703 SELECT contract_number
3704 FROM OKC_K_HEADERS_B
3705 WHERE id = p_ctr_id;
3706
3707 -- Cursor to select accrual transactions for cancellation using specified tcn_type
3708 CURSOR reverse_trx_csr IS
3709 SELECT trx.id,trx.transaction_date
3710 FROM OKL_TRX_CONTRACTS trx, okl_trx_types_v typ
3711 WHERE trx.khr_id = p_khr_id
3712 AND trx.tsu_code = l_tsu_code_ent
3713 AND trx.tcn_type = NVL(p_tcn_type,trx.tcn_type)
3714 AND trx.try_id = typ.id
3715 AND typ.name = 'Accrual'
3716 AND TRUNC(trx.date_transaction_occurred) >= TRUNC(p_reverse_from)
3717 AND TRUNC(trx.date_transaction_occurred) <= NVL(TRUNC(p_reverse_to), TRUNC(trx.date_transaction_occurred));
3718 --AND trx.REPRESENTATION_TYPE = 'PRIMARY'; --MGAAP 7263041
3719
3720 -- Cursor to select transaction lines for reversal (for source id)
3721 CURSOR reverse_txl_csr(p_tcn_id NUMBER) IS
3722 SELECT id
3723 FROM OKL_TXL_CNTRCT_LNS
3724 WHERE tcn_id = p_tcn_id;
3725
3726 BEGIN
3727 -- Set save point
3728 x_return_status := Okl_Api.START_ACTIVITY(l_api_name
3729 ,G_PKG_NAME
3730 ,p_init_msg_list
3731 ,l_api_version
3732 ,p_api_version
3733 ,'_PVT'
3734 ,x_return_status);
3735
3736 IF (x_return_status = Okl_Api.G_RET_STS_UNEXP_ERROR) THEN
3737 RAISE Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR;
3738 ELSIF (x_return_Status = Okl_Api.G_RET_STS_ERROR) THEN
3739 RAISE Okl_Api.G_EXCEPTION_ERROR;
3740 END IF;
3741
3742 --Validate in parameters
3743 IF p_khr_id IS NULL OR p_khr_id = OKL_API.G_MISS_NUM THEN
3744 Okl_Api.set_message(p_app_name => g_app_name,
3745 p_msg_name => 'OKL_AGN_KHR_ID_ERROR');
3746 RAISE OKL_API.G_EXCEPTION_ERROR;
3747 END IF;
3748
3749 IF p_reversal_date IS NULL OR p_reversal_date = OKL_API.G_MISS_DATE THEN
3750 Okl_Api.set_message(p_app_name => g_app_name,
3751 p_msg_name => 'OKL_AGN_REV_DATE_ERROR');
3752 RAISE OKL_API.G_EXCEPTION_ERROR;
3753 END IF;
3754
3755 IF p_accounting_date IS NULL OR p_accounting_date = OKL_API.G_MISS_DATE THEN
3756 Okl_Api.set_message(p_app_name => g_app_name,
3757 p_msg_name => 'OKL_AGN_ACC_DATE_ERROR');
3758 RAISE OKL_API.G_EXCEPTION_ERROR;
3759 END IF;
3760
3761 IF p_reverse_from IS NULL OR p_reverse_from = OKL_API.G_MISS_DATE THEN
3762 Okl_Api.set_message(p_app_name => g_app_name,
3763 p_msg_name => 'OKL_AGN_FROM_DATE_ERROR');
3764 RAISE OKL_API.G_EXCEPTION_ERROR;
3765 END IF;
3766
3767 -- get contract_number
3768 OPEN get_contract_number_csr(p_khr_id);
3769 FETCH get_contract_number_csr INTO l_contract_number;
3770 CLOSE get_contract_number_csr;
3771
3772 IF l_contract_number IS NULL THEN
3773 Okl_Api.set_message(p_app_name => g_app_name,
3774 p_msg_name => 'OKL_REV_LPV_CNTRCT_NUM_ERROR');
3775 RAISE OKL_API.G_EXCEPTION_ERROR;
3776 END IF;
3777
3778 -- Open reverse trx cursor
3779 FOR l_reverse_trx_csr IN reverse_trx_csr
3780 LOOP
3781
3782 l_tcnv_tbl(l_count1).id := l_reverse_trx_csr.id;
3783 l_tcnv_tbl(l_count1).tsu_code := l_tsu_code_can;
3784 l_tcnv_tbl(l_count1).accrual_activity := l_reversal_activity;
3785 -- sosharma added for income recon report
3786 l_tcnv_tbl(l_count1).transaction_reversal_date := SYSDATE;
3787 l_tcnv_tbl(l_count1).canceled_date := p_reversal_date;
3788 l_tcnv_tbl(l_count1).transaction_date := l_reverse_trx_csr.transaction_date;
3789 l_count1 := l_count1 + 1;
3790 -- Open reverse txl cursor to find out transaction line id's for reversal
3791 FOR l_reverse_txl_csr IN reverse_txl_csr(l_reverse_trx_csr.id)
3792 LOOP
3793 l_source_id_tbl(l_count2) := l_reverse_txl_csr.id;
3794 l_count2 := l_count2 + 1;
3795 END LOOP;
3796 END LOOP;
3797
3798 -- Check if records were found for reversal
3799 IF l_tcnv_tbl.COUNT > 0 THEN
3800 -- Call the Reverse Accounting API
3801 Okl_Reversal_Pub.REVERSE_ENTRIES(
3802 p_api_version => p_api_version,
3803 p_init_msg_list => p_init_msg_list,
3804 x_return_status => x_return_status,
3805 x_msg_count => x_msg_count,
3806 x_msg_data => x_msg_data,
3807 p_source_table => l_source_table,
3808 p_acct_date => p_accounting_date,
3809 p_source_id_tbl => l_source_id_tbl);
3810 -- store the highest degree of error
3811 IF (x_return_status <> Okl_Api.G_RET_STS_SUCCESS) THEN
3812 IF (x_return_status = Okl_Api.G_RET_STS_UNEXP_ERROR) THEN
3813 -- need to leave
3814 Okl_Api.set_message(p_app_name => g_app_name,
3815 p_msg_name => 'OKL_AGN_REV_DIST_ERROR',
3816 p_token1 => g_contract_number_token,
3817 p_token1_value => l_contract_number);
3818 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
3819 ELSIF (x_return_status = Okl_Api.G_RET_STS_ERROR) THEN
3820 -- record that there was an error
3821 Okl_Api.set_message(p_app_name => g_app_name,
3822 p_msg_name => 'OKL_AGN_REV_DIST_ERROR',
3823 p_token1 => g_contract_number_token,
3824 p_token1_value => l_contract_number);
3825 RAISE OKL_API.G_EXCEPTION_ERROR;
3826 END IF;
3827 END IF;
3828
3829 --Call the transaction public api for update
3830 Okl_Trx_Contracts_Pub.update_trx_contracts
3831 (p_api_version => p_api_version,
3832 p_init_msg_list => p_init_msg_list,
3833 x_return_status => x_return_status,
3834 x_msg_count => x_msg_count,
3835 x_msg_data => x_msg_data,
3836 p_tcnv_tbl => l_tcnv_tbl,
3837 x_tcnv_tbl => x_tcnv_tbl);
3838 -- store the highest degree of error
3839 IF (x_return_status <> Okl_Api.G_RET_STS_SUCCESS) THEN
3840 IF (x_return_status = Okl_Api.G_RET_STS_UNEXP_ERROR) THEN
3841 -- need to leave
3842 Okl_Api.set_message(p_app_name => g_app_name,
3843 p_msg_name => 'OKL_AGN_TRX_UPD_ERROR',
3844 p_token1 => g_contract_number_token,
3845 p_token1_value => l_contract_number);
3846 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
3847 ELSIF (x_return_status = Okl_Api.G_RET_STS_ERROR) THEN
3848 -- record that there was an error
3849 Okl_Api.set_message(p_app_name => g_app_name,
3850 p_msg_name => 'OKL_AGN_TRX_UPD_ERROR',
3851 p_token1 => g_contract_number_token,
3852 p_token1_value => l_contract_number);
3853 RAISE OKL_API.G_EXCEPTION_ERROR;
3854 END IF;
3855 END IF;
3856
3857 END IF; -- for l_tcnv_tbl.count > 0;
3858
3859 -- MGAAP 7263041
3860 /*
3861 IF l_tcnv_tbl.COUNT > 0 THEN
3862
3863 OKL_MULTIGAAP_ENGINE_PVT.REVERSE_SEC_REP_TRX
3864 (p_api_version => p_api_version,
3865 p_init_msg_list => p_init_msg_list,
3866 x_return_status => x_return_status,
3867 x_msg_count => x_msg_count,
3868 x_msg_data => x_msg_data,
3869 p_tcnv_tbl => l_tcnv_tbl);
3870
3871 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
3872 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
3873 ELSIF (x_return_Status = OKL_API.G_RET_STS_ERROR) THEN
3874 RAISE OKL_API.G_EXCEPTION_ERROR;
3875 END IF;
3876
3877 END IF; */
3878
3879 Okl_Api.END_ACTIVITY(x_msg_count, x_msg_data);
3880 x_return_status := Okl_Api.G_RET_STS_SUCCESS;
3881
3882 EXCEPTION
3883
3884 WHEN Okl_Api.G_EXCEPTION_ERROR THEN
3885 x_return_status := Okl_Api.HANDLE_EXCEPTIONS(l_api_name
3886 ,g_pkg_name
3887 ,'OKL_API.G_RET_STS_ERROR'
3888 ,x_msg_count
3889 ,x_msg_data
3890 ,'_PVT');
3891 WHEN Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR THEN
3892 x_return_status := Okl_Api.HANDLE_EXCEPTIONS(l_api_name
3893 ,g_pkg_name
3894 ,'OKL_API.G_RET_STS_UNEXP_ERROR'
3895 ,x_msg_count
3896 ,x_msg_data
3897 ,'_PVT');
3898 WHEN OTHERS THEN
3899 x_return_status :=Okl_Api.HANDLE_EXCEPTIONS
3900 (l_api_name,
3901 G_PKG_NAME,
3902 'OTHERS',
3903 x_msg_count,
3904 x_msg_data,
3905 '_PVT');
3906 END REVERSE_ACCRUALS;
3907
3908 --Bug 2838167. Creating new procedure for call within rebook.
3909 PROCEDURE REVERSE_ALL_ACCRUALS (
3910 p_api_version IN NUMBER,
3911 p_init_msg_list IN VARCHAR2,
3912 p_khr_id IN NUMBER,
3913 p_reverse_date IN DATE,
3914 p_description IN VARCHAR2,
3915 x_return_status OUT NOCOPY VARCHAR2,
3916 x_msg_count OUT NOCOPY NUMBER,
3917 x_msg_data OUT NOCOPY VARCHAR2
3918 ) IS
3919
3920 -- local variables
3921 l_api_name CONSTANT VARCHAR2(30) := 'REVERSE_ALL_ACCRUALS';
3922 l_api_version CONSTANT NUMBER := 1.0;
3923 l_tcn_type OKL_TRX_CONTRACTS.TCN_TYPE%TYPE := 'ACL';
3924 l_tcl_type OKL_TXL_CNTRCT_LNS.TCL_TYPE%TYPE := 'ACL';
3925 --Fixed Bug 5707866 SLA Uptake Project by nikshah, changed tsu_code to PROCESSED from ENTERED
3926 l_tsu_code_ent OKL_TRX_CONTRACTS.TSU_CODE%TYPE := 'PROCESSED';
3927 l_tsu_code_can OKL_TRX_CONTRACTS.TSU_CODE%TYPE := 'CANCELED';
3928 l_reversal_activity OKL_TRX_CONTRACTS.ACCRUAL_ACTIVITY%TYPE := 'REVERSAL';
3929 l_source_id_tbl Okl_Reversal_Pub.source_id_tbl_type;
3930 l_source_table OKL_TRNS_ACC_DSTRS.SOURCE_TABLE%TYPE := 'OKL_TXL_CNTRCT_LNS';
3931 l_tcnv_tbl OKL_TRX_CONTRACTS_PUB.tcnv_tbl_type;
3932 x_tcnv_tbl OKL_TRX_CONTRACTS_PUB.tcnv_tbl_type;
3933 l_count NUMBER := 1;
3934 l_count2 NUMBER := 1;
3935 l_contract_number VARCHAR2(2000);
3936
3937 -- Cursor to select Contract Number
3938 CURSOR get_contract_number_csr(p_ctr_id NUMBER) IS
3939 SELECT contract_number
3940 FROM OKC_K_HEADERS_B
3941 WHERE id = p_ctr_id;
3942
3943 -- Cursor to select accrual transactions for cancellation
3944 CURSOR reverse_trx_csr(p_khr_id NUMBER) IS
3945 SELECT id, transaction_date
3946 FROM OKL_TRX_CONTRACTS
3947 WHERE khr_id = p_khr_id
3948 AND tsu_code = l_tsu_code_ent
3949 AND tcn_type = l_tcn_type;
3950 --AND representation_type = 'PRIMARY'; --MGAAP 7263041
3951
3952 -- Cursor to select transaction lines for reversal (for source id)
3953 CURSOR reverse_txl_csr(p_tcn_id NUMBER) IS
3954 SELECT id
3955 FROM OKL_TXL_CNTRCT_LNS
3956 WHERE tcn_id = p_tcn_id;
3957
3958 BEGIN
3959 -- Set save point
3960 x_return_status := Okl_Api.START_ACTIVITY(l_api_name
3961 ,G_PKG_NAME
3962 ,p_init_msg_list
3963 ,l_api_version
3964 ,p_api_version
3965 ,'_PVT'
3966 ,x_return_status);
3967
3968 IF (x_return_status = Okl_Api.G_RET_STS_UNEXP_ERROR) THEN
3969 RAISE Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR;
3970 ELSIF (x_return_Status = Okl_Api.G_RET_STS_ERROR) THEN
3971 RAISE Okl_Api.G_EXCEPTION_ERROR;
3972 END IF;
3973
3974 --Validate in parameters
3975 IF p_khr_id IS NULL OR p_khr_id = OKL_API.G_MISS_NUM THEN
3976 Okl_Api.set_message(p_app_name => g_app_name,
3977 p_msg_name => 'OKL_AGN_KHR_ID_ERROR');
3978 RAISE OKL_API.G_EXCEPTION_ERROR;
3979 END IF;
3980
3981 IF p_reverse_date IS NULL OR p_reverse_date = OKL_API.G_MISS_DATE THEN
3982 Okl_Api.set_message(p_app_name => g_app_name,
3983 p_msg_name => 'OKL_AGN_ACC_DATE_ERROR');
3984 RAISE OKL_API.G_EXCEPTION_ERROR;
3985 END IF;
3986
3987 -- get contract_number
3988 OPEN get_contract_number_csr(p_khr_id);
3989 FETCH get_contract_number_csr INTO l_contract_number;
3990 CLOSE get_contract_number_csr;
3991
3992 -- Reverse all transactions and accounting
3993 -- Open reverse trx cursor
3994 FOR l_reverse_trx_csr IN reverse_trx_csr(p_khr_id)
3995 LOOP
3996
3997 l_tcnv_tbl(l_count).id := l_reverse_trx_csr.id;
3998 l_tcnv_tbl(l_count).tsu_code := l_tsu_code_can;
3999 l_tcnv_tbl(l_count).accrual_activity := l_reversal_activity;
4000 -- sosharma added for income recon report
4001 l_tcnv_tbl(l_count).transaction_reversal_date := SYSDATE;
4002 l_tcnv_tbl(l_count).description := p_description;
4003 l_tcnv_tbl(l_count).canceled_date := p_reverse_date;
4004 l_tcnv_tbl(l_count).transaction_date := l_reverse_trx_csr.transaction_date;
4005 l_count := l_count + 1;
4006 -- Open reverse txl cursor to find out transaction line id's for reversal
4007 FOR l_reverse_txl_csr IN reverse_txl_csr(l_reverse_trx_csr.id)
4008 LOOP
4009 l_source_id_tbl(l_count2) := l_reverse_txl_csr.id;
4010 l_count2 := l_count2 + 1;
4011 END LOOP;
4012 END LOOP;
4013
4014 -- Check if records were found for reversal
4015 IF l_tcnv_tbl.COUNT > 0 THEN
4016 -- Call the Reverse Accounting API
4017 Okl_Reversal_Pub.REVERSE_ENTRIES(
4018 p_api_version => p_api_version,
4019 p_init_msg_list => p_init_msg_list,
4020 x_return_status => x_return_status,
4021 x_msg_count => x_msg_count,
4022 x_msg_data => x_msg_data,
4023 p_source_table => l_source_table,
4024 p_acct_date => p_reverse_date,
4025 p_source_id_tbl => l_source_id_tbl);
4026 -- store the highest degree of error
4027 IF (x_return_status <> Okl_Api.G_RET_STS_SUCCESS) THEN
4028 IF (x_return_status = Okl_Api.G_RET_STS_UNEXP_ERROR) THEN
4029 -- need to leave
4030 Okl_Api.set_message(p_app_name => g_app_name,
4031 p_msg_name => 'OKL_AGN_REV_DIST_ERROR',
4032 p_token1 => g_contract_number_token,
4033 p_token1_value => l_contract_number);
4034 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
4035 ELSIF (x_return_status = Okl_Api.G_RET_STS_ERROR) THEN
4036 -- record that there was an error
4037 Okl_Api.set_message(p_app_name => g_app_name,
4038 p_msg_name => 'OKL_AGN_REV_DIST_ERROR',
4039 p_token1 => g_contract_number_token,
4040 p_token1_value => l_contract_number);
4041 RAISE OKL_API.G_EXCEPTION_ERROR;
4042 END IF;
4043 END IF;
4044
4045 --Call the transaction public api for update
4046 Okl_Trx_Contracts_Pub.update_trx_contracts
4047 (p_api_version => p_api_version,
4048 p_init_msg_list => p_init_msg_list,
4049 x_return_status => x_return_status,
4050 x_msg_count => x_msg_count,
4051 x_msg_data => x_msg_data,
4052 p_tcnv_tbl => l_tcnv_tbl,
4053 x_tcnv_tbl => x_tcnv_tbl);
4054 -- store the highest degree of error
4055 IF (x_return_status <> Okl_Api.G_RET_STS_SUCCESS) THEN
4056 IF (x_return_status = Okl_Api.G_RET_STS_UNEXP_ERROR) THEN
4057 -- need to leave
4058 Okl_Api.set_message(p_app_name => g_app_name,
4059 p_msg_name => 'OKL_AGN_TRX_UPD_ERROR',
4060 p_token1 => g_contract_number_token,
4061 p_token1_value => l_contract_number);
4062 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
4063 ELSIF (x_return_status = Okl_Api.G_RET_STS_ERROR) THEN
4064 -- record that there was an error
4065 Okl_Api.set_message(p_app_name => g_app_name,
4066 p_msg_name => 'OKL_AGN_TRX_UPD_ERROR',
4067 p_token1 => g_contract_number_token,
4068 p_token1_value => l_contract_number);
4069 RAISE OKL_API.G_EXCEPTION_ERROR;
4070 END IF;
4071 END IF;
4072
4073 END IF; -- for l_tcnv_tbl.count > 0;
4074
4075 -- MGAAP 7263041
4076 /*
4077 IF l_tcnv_tbl.COUNT > 0 THEN
4078
4079 OKL_MULTIGAAP_ENGINE_PVT.REVERSE_SEC_REP_TRX
4080 (p_api_version => p_api_version,
4081 p_init_msg_list => p_init_msg_list,
4082 x_return_status => x_return_status,
4083 x_msg_count => x_msg_count,
4084 x_msg_data => x_msg_data,
4085 p_tcnv_tbl => l_tcnv_tbl);
4086
4087 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
4088 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
4089 ELSIF (x_return_Status = OKL_API.G_RET_STS_ERROR) THEN
4090 RAISE OKL_API.G_EXCEPTION_ERROR;
4091 END IF;
4092
4093 END IF; */
4094
4095 Okl_Api.END_ACTIVITY(x_msg_count, x_msg_data);
4096 x_return_status := Okl_Api.G_RET_STS_SUCCESS;
4097
4098 EXCEPTION
4099
4100 WHEN Okl_Api.G_EXCEPTION_ERROR THEN
4101 x_return_status := Okl_Api.HANDLE_EXCEPTIONS(l_api_name
4102 ,g_pkg_name
4103 ,'OKL_API.G_RET_STS_ERROR'
4104 ,x_msg_count
4105 ,x_msg_data
4106 ,'_PVT');
4107 WHEN Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR THEN
4108 x_return_status := Okl_Api.HANDLE_EXCEPTIONS(l_api_name
4109 ,g_pkg_name
4110 ,'OKL_API.G_RET_STS_UNEXP_ERROR'
4111 ,x_msg_count
4112 ,x_msg_data
4113 ,'_PVT');
4114 WHEN OTHERS THEN
4115 x_return_status :=Okl_Api.HANDLE_EXCEPTIONS
4116 (l_api_name,
4117 G_PKG_NAME,
4118 'OTHERS',
4119 x_msg_count,
4120 x_msg_data,
4121 '_PVT');
4122
4123 END REVERSE_ALL_ACCRUALS;
4124
4125 PROCEDURE CATCHUP_ACCRUALS (
4126 p_api_version IN NUMBER,
4127 p_init_msg_list IN VARCHAR2,
4128 p_catchup_rec IN accrual_rec_type,
4129 x_return_status OUT NOCOPY VARCHAR2,
4130 x_msg_count OUT NOCOPY NUMBER,
4131 x_msg_data OUT NOCOPY VARCHAR2,
4132 x_rev_tcnv_tbl OUT NOCOPY OKL_TRX_CONTRACTS_PUB.tcnv_tbl_type,
4133 x_rev_tclv_tbl OUT NOCOPY OKL_TRX_CONTRACTS_PUB.tclv_tbl_type,
4134 x_catch_tcnv_tbl OUT NOCOPY OKL_TRX_CONTRACTS_PUB.tcnv_tbl_type,
4135 x_catch_tclv_tbl OUT NOCOPY OKL_TRX_CONTRACTS_PUB.tclv_tbl_type,
4136 p_representation_type IN VARCHAR2 DEFAULT 'PRIMARY' --MGAAP 7263041
4137 ) IS
4138
4139 -- local variables
4140 l_tcnv_rec OKL_TRX_CONTRACTS_PUB.tcnv_rec_type;
4141 l_tcnv_tbl OKL_TRX_CONTRACTS_PUB.tcnv_tbl_type;
4142 l_tclv_tbl OKL_TRX_CONTRACTS_PUB.tclv_tbl_type;
4143 l_source_id_tbl Okl_Reversal_Pub.source_id_tbl_type;
4144 l_tmpl_identify_rec Okl_Account_Dist_Pub.tmpl_identify_rec_type;
4145 l_dist_info_rec Okl_Account_Dist_Pub.dist_info_rec_type;
4146 l_ctxt_val_tbl Okl_Account_Dist_Pub.ctxt_val_tbl_type;
4147 l_template_tbl Okl_Account_Dist_Pub.avlv_tbl_type;
4148 l_amount_tbl Okl_Account_Dist_Pub.amount_tbl_type;
4149 l_acc_gen_primary_key_tbl Okl_Account_Dist_Pub.acc_gen_primary_key;
4150 l_catchup_trx_tbl Okl_Trx_Contracts_Pub.tcnv_tbl_type;
4151 l_tcn_type OKL_TRX_CONTRACTS.TCN_TYPE%TYPE := 'ACL';
4152 l_tcl_type OKL_TXL_CNTRCT_LNS.TCL_TYPE%TYPE := 'ACL';
4153 --Fixed Bug 5707866 SLA Uptake Project by nikshah, changed tsu_code to PROCESSED from ENTERED
4154 l_tsu_code_ent OKL_TRX_CONTRACTS.TSU_CODE%TYPE := 'PROCESSED';
4155 l_tsu_code_can OKL_TRX_CONTRACTS.TSU_CODE%TYPE := 'CANCELED';
4156 l_non_accrual_activity OKL_TRX_CONTRACTS.ACCRUAL_ACTIVITY%TYPE := 'NON-ACCRUAL';
4157 l_catchup_activity OKL_TRX_CONTRACTS.ACCRUAL_ACTIVITY%TYPE := 'CATCH-UP';
4158 l_reversal_activity OKL_TRX_CONTRACTS.ACCRUAL_ACTIVITY%TYPE := 'REVERSAL';
4159 l_source_table OKL_TRNS_ACC_DSTRS.SOURCE_TABLE%TYPE := 'OKL_TXL_CNTRCT_LNS';
4160 l_api_name VARCHAR2(20) := 'CATCHUP_ACCRUALS';
4161 l_api_version CONSTANT NUMBER := 1.0;
4162 l_accrual_rec accrual_rec_type;
4163 l_stream_tbl stream_tbl_type;
4164 l_count NUMBER := 1;
4165 l_count2 NUMBER := 1;
4166
4167 -- Cursor to select transaction headers for accrual catchup
4168 CURSOR catchup_trx_csr(p_khr_id NUMBER) IS
4169 SELECT id, transaction_date,
4170 trx_number -- MGAAP 7263041
4171 FROM OKL_TRX_CONTRACTS
4172 WHERE khr_id = p_khr_id
4173 AND tcn_type = l_tcn_type
4174 AND tsu_code = l_tsu_code_ent
4175 AND accrual_activity = l_non_accrual_activity
4176 AND representation_type = p_representation_type; -- MGAAP 7263041
4177
4178 -- Cursor to select transaction lines for accrual catchup
4179 CURSOR catchup_txl_csr(p_tcn_id NUMBER) IS
4180 SELECT id
4181 FROM OKL_TXL_CNTRCT_LNS
4182 WHERE tcn_id = p_tcn_id;
4183
4184 -- Cursor to populate stream table with amounts ad sty_id for creating memo Revenue
4185 CURSOR stream_tbl_csr (p_tcn_id NUMBER) IS
4186 SELECT sty_id, amount, kle_id
4187 FROM OKL_TXL_CNTRCT_LNS
4188 WHERE tcn_id = p_tcn_id;
4189
4190 BEGIN
4191 WRITE_TO_LOG('Inside the CATCHUP_ACCRUALS call');
4192 WRITE_TO_LOG('Printing out the contents of p_catchup_rec :');
4193 WRITE_TO_LOG('============================================');
4194 WRITE_TO_LOG('p_catchup_rec.contract_id :'||p_catchup_rec.contract_id);
4195 WRITE_TO_LOG('p_catchup_rec.accrual_date :'||p_catchup_rec.accrual_date);
4196 WRITE_TO_LOG('p_catchup_rec.contract_number :'||p_catchup_rec.contract_number);
4197 WRITE_TO_LOG('p_catchup_rec.rule_result :'||p_catchup_rec.rule_result);
4198 WRITE_TO_LOG('p_catchup_rec.override_status :'||p_catchup_rec.override_status);
4199 WRITE_TO_LOG('p_catchup_rec.product_id :'||p_catchup_rec.product_id);
4200 WRITE_TO_LOG('p_catchup_rec.trx_type_id :'||p_catchup_rec.trx_type_id);
4201 WRITE_TO_LOG('p_catchup_rec.advance_arrears :'||p_catchup_rec.advance_arrears);
4202 WRITE_TO_LOG('p_catchup_rec.factoring_synd_flag :'||p_catchup_rec.factoring_synd_flag);
4203 WRITE_TO_LOG('p_catchup_rec.post_to_gl :'||p_catchup_rec.post_to_gl);
4204 WRITE_TO_LOG('p_catchup_rec.gl_reversal_flag :'||p_catchup_rec.gl_reversal_flag);
4205 WRITE_TO_LOG('p_catchup_rec.memo_yn :'||p_catchup_rec.memo_yn);
4206 WRITE_TO_LOG('p_catchup_rec.description :'||p_catchup_rec.description);
4207 WRITE_TO_LOG('p_catchup_rec.accrual_activity :'||p_catchup_rec.accrual_activity);
4208 -- Set save point
4209 x_return_status := Okl_Api.START_ACTIVITY(l_api_name
4210 ,G_PKG_NAME
4211 ,p_init_msg_list
4212 ,l_api_version
4213 ,p_api_version
4214 ,'_PVT'
4215 ,x_return_status);
4216
4217 IF (x_return_status = Okl_Api.G_RET_STS_UNEXP_ERROR) THEN
4218 RAISE Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR;
4219 ELSIF (x_return_Status = Okl_Api.G_RET_STS_ERROR) THEN
4220 RAISE Okl_Api.G_EXCEPTION_ERROR;
4221 END IF;
4222
4223 FOR l_catchup_trx_csr IN catchup_trx_csr(p_catchup_rec.contract_id)
4224 LOOP
4225 l_tcnv_tbl(l_count).id := l_catchup_trx_csr.id;
4226 l_tcnv_tbl(l_count).tsu_code := l_tsu_code_can;
4227 l_tcnv_tbl(l_count).accrual_activity := l_reversal_activity;
4228 -- sosharma added for income recon report
4229 l_tcnv_tbl(l_count).transaction_reversal_date := SYSDATE;
4230 l_tcnv_tbl(l_count).canceled_date := p_catchup_rec.accrual_date;
4231 l_tcnv_tbl(l_count).transaction_date := l_catchup_trx_csr.transaction_date;
4232 IF (p_representation_type = 'PRIMARY') THEN
4233 G_trx_number_tbl(l_count).old_trx_number := l_catchup_trx_csr.trx_number;
4234 END IF;
4235 l_count := l_count + 1;
4236 -- Process txl id's FOR catchup
4237 FOR l_catchup_txl_csr IN catchup_txl_csr(l_catchup_trx_csr.id)
4238 LOOP
4239 l_source_id_tbl(l_count2) := l_catchup_txl_csr.id;
4240 l_count2 := l_count2 + 1;
4241 END LOOP;
4242 END LOOP;
4243
4244 -- Proceed if records are available for processing
4245 IF l_tcnv_tbl.COUNT > 0 THEN
4246 WRITE_TO_LOG('Records were identified for catchup');
4247 WRITE_TO_LOG('Prior to the call to Okl_Reversal_Pub.REVERSE_ENTRIES');
4248
4249 -- Call the Reverse Accounting API
4250 Okl_Reversal_Pub.REVERSE_ENTRIES(
4251 p_api_version => p_api_version,
4252 p_init_msg_list => p_init_msg_list,
4253 x_return_status => x_return_status,
4254 x_msg_count => x_msg_count,
4255 x_msg_data => x_msg_data,
4256 p_source_table => l_source_table,
4257 p_acct_date => p_catchup_rec.accrual_date,
4258 p_source_id_tbl => l_source_id_tbl);
4259 WRITE_TO_LOG('Return status after the call to Okl_Reversal_Pub.REVERSE_ENTRIES :'||x_return_status);
4260
4261 -- store the highest degree of error
4262 IF (x_return_status <> Okl_Api.G_RET_STS_SUCCESS) THEN
4263 IF (x_return_status = Okl_Api.G_RET_STS_UNEXP_ERROR) THEN
4264 -- need to leave
4265 Okl_Api.set_message(p_app_name => g_app_name,
4266 p_msg_name => 'OKL_AGN_REV_DIST_ERROR',
4267 p_token1 => g_contract_number_token,
4268 p_token1_value => p_catchup_rec.contract_number);
4269 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
4270 ELSIF (x_return_status = Okl_Api.G_RET_STS_ERROR) THEN
4271 -- record that there was an error
4272 Okl_Api.set_message(p_app_name => g_app_name,
4273 p_msg_name => 'OKL_AGN_REV_DIST_ERROR',
4274 p_token1 => g_contract_number_token,
4275 p_token1_value => p_catchup_rec.contract_number);
4276 RAISE OKL_API.G_EXCEPTION_ERROR;
4277 END IF;
4278 END IF;
4279
4280 WRITE_TO_LOG('Prior to the call to Okl_Trx_Contracts_Pub.update_trx_contracts');
4281 --Call the transaction public api for update
4282 Okl_Trx_Contracts_Pub.update_trx_contracts
4283 (p_api_version => p_api_version,
4284 p_init_msg_list => p_init_msg_list,
4285 x_return_status => x_return_status,
4286 x_msg_count => x_msg_count,
4287 x_msg_data => x_msg_data,
4288 p_tcnv_tbl => l_tcnv_tbl,
4289 x_tcnv_tbl => x_rev_tcnv_tbl);
4290 WRITE_TO_LOG('Return status after the call to Okl_Trx_Contracts_Pub.update_trx_contracts :'||x_return_status);
4291
4292 -- store the highest degree of error
4293 IF (x_return_status <> Okl_Api.G_RET_STS_SUCCESS) THEN
4294 IF (x_return_status = Okl_Api.G_RET_STS_UNEXP_ERROR) THEN
4295 -- need to leave
4296 Okl_Api.set_message(p_app_name => g_app_name,
4297 p_msg_name => 'OKL_AGN_TRX_UPD_ERROR',
4298 p_token1 => g_contract_number_token,
4299 p_token1_value => p_catchup_rec.contract_number);
4300 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
4301 ELSIF (x_return_status = Okl_Api.G_RET_STS_ERROR) THEN
4302 -- record that there was an error
4303 Okl_Api.set_message(p_app_name => g_app_name,
4304 p_msg_name => 'OKL_AGN_TRX_UPD_ERROR',
4305 p_token1 => g_contract_number_token,
4306 p_token1_value => p_catchup_rec.contract_number);
4307 RAISE OKL_API.G_EXCEPTION_ERROR;
4308 END IF;
4309 END IF;
4310
4311 -- Bug 4634293. Moving below initialization inside loop. Commenting below line.
4312 --l_count := 1;
4313 -- Create a new trasaction for the reversed transaction to reflect actual revenue entries
4314 FOR i IN x_rev_tcnv_tbl.FIRST..x_rev_tcnv_tbl.LAST
4315 LOOP
4316 -- Build the accrual record
4317 l_accrual_rec.contract_id := x_rev_tcnv_tbl(i).khr_id;
4318 l_accrual_rec.set_of_books_id := x_rev_tcnv_tbl(i).set_of_books_id;
4319 l_accrual_rec.accrual_date := x_rev_tcnv_tbl(i).date_accrual;
4320 l_accrual_rec.trx_date := p_catchup_rec.accrual_date;
4321 l_accrual_rec.contract_number := p_catchup_rec.contract_number;
4322 l_accrual_rec.rule_result := p_catchup_rec.rule_result;
4323 l_accrual_rec.override_status := p_catchup_rec.override_status;
4324 l_accrual_rec.description := p_catchup_rec.description||' '||
4325 FND_MESSAGE.GET_STRING('OKL','OKL_AGN_RPT_CATCHUP_REVENUE');
4326 l_accrual_rec.amount := x_rev_tcnv_tbl(i).amount;
4327 l_accrual_rec.currency_code := x_rev_tcnv_tbl(i).currency_code;
4328 l_accrual_rec.currency_conversion_type := x_rev_tcnv_tbl(i).currency_conversion_type;
4329 l_accrual_rec.currency_conversion_rate := x_rev_tcnv_tbl(i).currency_conversion_rate;
4330 l_accrual_rec.currency_conversion_date := x_rev_tcnv_tbl(i).currency_conversion_date;
4331 l_accrual_rec.product_id := x_rev_tcnv_tbl(i).pdt_id;
4332 l_accrual_rec.trx_type_id := x_rev_tcnv_tbl(i).try_id;
4333 l_accrual_rec.advance_arrears := p_catchup_rec.advance_arrears;
4334 l_accrual_rec.factoring_synd_flag := p_catchup_rec.factoring_synd_flag;
4335 l_accrual_rec.post_to_gl := p_catchup_rec.post_to_gl;
4336 l_accrual_rec.gl_reversal_flag := p_catchup_rec.gl_reversal_flag;
4337 l_accrual_rec.memo_yn := p_catchup_rec.memo_yn;
4338 l_accrual_rec.accrual_activity := l_catchup_activity;
4339 l_accrual_rec.accrual_rule_yn := 'Y';
4340 -- MGAAP start
4341 IF (p_representation_type = 'SECONDARY') THEN
4342 /*l_accrual_rec.trx_number := p_catchup_rec.trx_number;
4343 l_accrual_rec.primary_rep_trx_id := p_catchup_rec.primary_rep_trx_id;*/
4344 /* Get new trx number and primary rep trx id using old_trx_number
4345 from x_rev_tcnv_tbl(i).trx_number */
4346 null;
4347 G_trx_number_tbl_cnt := G_trx_number_tbl.count;
4348 IF (G_trx_number_tbl_cnt > 0) THEN
4349 FOR rcnt IN G_trx_number_tbl.FIRST..G_trx_number_tbl.LAST
4350 LOOP
4351 IF (G_trx_number_tbl(rcnt).old_trx_number=x_rev_tcnv_tbl(i).trx_number) THEN
4352 l_accrual_rec.trx_number:= G_trx_number_tbl(rcnt).new_trx_number;
4353 l_accrual_rec.primary_rep_trx_id:= G_trx_number_tbl(rcnt).id;
4354 EXIT;
4355 END IF;
4356 END LOOP;
4357 END IF;
4358 END IF;
4359 -- MGAAP end
4360
4361 l_count := 1;
4362 -- Populate stream table for CREATE_ACCRUALS procedure
4363 FOR x IN stream_tbl_csr(x_rev_tcnv_tbl(i).id)
4364 LOOP
4365 l_stream_tbl(l_count).stream_type_id := x.sty_id;
4366 l_stream_tbl(l_count).stream_amount := x.amount;
4367 l_stream_tbl(l_count).kle_id := x.kle_id;
4368 l_count := l_count + 1;
4369 END LOOP;
4370
4371 -- Call CREATE_ACCRUAL procedure to create accrual transactions and entries
4372 CREATE_ACCRUALS (
4373 p_api_version => l_api_version,
4374 p_init_msg_list => p_init_msg_list,
4375 x_return_status => x_return_status,
4376 x_msg_count => x_msg_count,
4377 x_msg_data => x_msg_data,
4378 x_tcnv_rec => l_tcnv_rec,
4379 x_tclv_tbl => l_tclv_tbl,
4380 p_accrual_rec => l_accrual_rec,
4381 p_stream_tbl => l_stream_tbl,
4382 p_representation_type => p_representation_type); -- MGAAP 7263041
4383 -- store the highest degree of error
4384 IF (x_return_status <> Okl_Api.G_RET_STS_SUCCESS) THEN
4385 IF (x_return_status = Okl_Api.G_RET_STS_UNEXP_ERROR) THEN
4386 -- need to leave
4387 Okl_Api.set_message(p_app_name => g_app_name,
4388 p_msg_name => 'OKL_AGN_TRX_CRE_ERROR',
4389 p_token1 => g_contract_number_token,
4390 p_token1_value => p_catchup_rec.contract_number);
4391 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
4392 ELSIF (x_return_status = Okl_Api.G_RET_STS_ERROR) THEN
4393 Okl_Api.set_message(p_app_name => g_app_name,
4394 p_msg_name => 'OKL_AGN_TRX_CRE_ERROR',
4395 p_token1 => g_contract_number_token,
4396 p_token1_value => p_catchup_rec.contract_number);
4397 RAISE OKL_API.G_EXCEPTION_ERROR;
4398 END IF;
4399 END IF;
4400
4401 -- MGAAP start 7263041
4402 IF (p_representation_type = 'PRIMARY') THEN
4403 G_trx_number_tbl(i).new_trx_number := l_tcnv_rec.trx_number;
4404 G_trx_number_tbl(i).ID := l_tcnv_rec.ID;
4405 END IF;
4406 -- MGAAP end 7263041
4407
4408 -- 26-Sep-2005. SGIYER. Bug 4616770
4409 -- re-initialize l_stream_tbl everytime.
4410 l_stream_tbl.DELETE;
4411
4412 x_catch_tcnv_tbl(i) := l_tcnv_rec;
4413
4414 END LOOP;
4415 END IF; -- for IF x_tclv_tbl.COUNT > 0
4416
4417 Okl_Api.END_ACTIVITY(x_msg_count, x_msg_data);
4418 x_return_status := Okl_Api.G_RET_STS_SUCCESS;
4419
4420 EXCEPTION
4421
4422 WHEN Okl_Api.G_EXCEPTION_ERROR THEN
4423 x_return_status := Okl_Api.HANDLE_EXCEPTIONS(l_api_name
4424 ,g_pkg_name
4425 ,'OKL_API.G_RET_STS_ERROR'
4426 ,x_msg_count
4427 ,x_msg_data
4428 ,'_PVT');
4429 WHEN Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR THEN
4430 x_return_status := Okl_Api.HANDLE_EXCEPTIONS(l_api_name
4431 ,g_pkg_name
4432 ,'OKL_API.G_RET_STS_UNEXP_ERROR'
4433 ,x_msg_count
4434 ,x_msg_data
4435 ,'_PVT');
4436 WHEN OTHERS THEN
4437 x_return_status :=Okl_Api.HANDLE_EXCEPTIONS
4438 (l_api_name,
4439 G_PKG_NAME,
4440 'OTHERS',
4441 x_msg_count,
4442 x_msg_data,
4443 '_PVT');
4444
4445 END CATCHUP_ACCRUALS;
4446
4447 PROCEDURE CATCHUP_ACCRUALS (
4448 p_api_version IN NUMBER,
4449 p_init_msg_list IN VARCHAR2,
4450 p_catchup_rec IN accrual_rec_type,
4451 x_return_status OUT NOCOPY VARCHAR2,
4452 x_msg_count OUT NOCOPY NUMBER,
4453 x_msg_data OUT NOCOPY VARCHAR2,
4454 x_tcnv_tbl OUT NOCOPY OKL_TRX_CONTRACTS_PUB.tcnv_tbl_type,
4455 x_tclv_tbl OUT NOCOPY OKL_TRX_CONTRACTS_PUB.tclv_tbl_type,
4456 p_representation_type IN VARCHAR2 DEFAULT 'PRIMARY' --MGAAP 7263041
4457 ) IS
4458
4459 x_rev_tcnv_tbl OKL_TRX_CONTRACTS_PUB.tcnv_tbl_type;
4460 x_rev_tclv_tbl OKL_TRX_CONTRACTS_PUB.tclv_tbl_type;
4461
4462 BEGIN
4463
4464 CATCHUP_ACCRUALS (
4465 p_api_version => p_api_version,
4466 p_init_msg_list => p_init_msg_list,
4467 p_catchup_rec => p_catchup_rec,
4468 x_return_status => x_return_status,
4469 x_msg_count => x_msg_count,
4470 x_msg_data => x_msg_data,
4471 x_rev_tcnv_tbl => x_rev_tcnv_tbl,
4472 x_rev_tclv_tbl => x_rev_tclv_tbl,
4473 x_catch_tcnv_tbl => x_tcnv_tbl,
4474 x_catch_tclv_tbl => x_tclv_tbl,
4475 p_representation_type => p_representation_type); --MGAAP 7263041);
4476
4477 END;
4478
4479 PROCEDURE CREATE_ACCRUALS_FORMULA (
4480 p_api_version IN NUMBER,
4481 p_init_msg_list IN VARCHAR2,
4482 x_return_status OUT NOCOPY VARCHAR2,
4483 x_msg_count OUT NOCOPY NUMBER,
4484 x_msg_data OUT NOCOPY VARCHAR2,
4485 x_tcnv_rec OUT NOCOPY OKL_TRX_CONTRACTS_PUB.tcnv_rec_type,
4486 x_tclv_tbl OUT NOCOPY OKL_TRX_CONTRACTS_PUB.tclv_tbl_type,
4487 p_accrual_rec IN accrual_rec_type,
4488 p_ctxt_val_tbl IN Okl_Account_dist_Pub.ctxt_val_tbl_type,
4489 p_representation_type IN VARCHAR2 DEFAULT 'PRIMARY') IS --MGAAP 7263041
4490
4491
4492 --Added by kthiruva on 14-May-2007
4493 --cursor to fetch the contract dff information for SLA Uptake
4494 CURSOR get_contract_dff_csr(p_khr_id IN NUMBER)
4495 IS
4496 SELECT khr.attribute_category
4497 ,khr.attribute1
4498 ,khr.attribute2
4499 ,khr.attribute3
4500 ,khr.attribute4
4501 ,khr.attribute5
4502 ,khr.attribute6
4503 ,khr.attribute7
4504 ,khr.attribute8
4505 ,khr.attribute9
4506 ,khr.attribute10
4507 ,khr.attribute11
4508 ,khr.attribute12
4509 ,khr.attribute13
4510 ,khr.attribute14
4511 ,khr.attribute15
4512 FROM okl_k_headers khr
4513 WHERE khr.id = p_khr_id;
4514
4515 --local variables
4516 l_tcnv_rec OKL_TRX_CONTRACTS_PUB.tcnv_rec_type;
4517 l_tclv_tbl OKL_TRX_CONTRACTS_PUB.tclv_tbl_type;
4518 l_api_name VARCHAR2(30) := 'CREATE_ACCRUALS_FORMULA';
4519 l_api_version CONSTANT NUMBER := 1.0;
4520 l_tcn_type OKL_TRX_CONTRACTS.TCN_TYPE%TYPE;
4521 l_tcl_type OKL_TXL_CNTRCT_LNS.TCL_TYPE%TYPE;
4522 --Fixed Bug 5707866 SLA Uptake Project by nikshah, changed tsu_code to PROCESSED from ENTERED
4523 l_tsu_code_ent OKL_TRX_CONTRACTS.TSU_CODE%TYPE := 'PROCESSED';
4524 l_source_table OKL_TRNS_ACC_DSTRS.SOURCE_TABLE%TYPE := 'OKL_TXL_CNTRCT_LNS';
4525 l_tmpl_identify_rec Okl_Account_Dist_Pub.tmpl_identify_rec_type;
4526 l_dist_info_rec Okl_Account_Dist_Pub.dist_info_rec_type;
4527 l_ctxt_val_tbl Okl_Account_Dist_Pub.ctxt_val_tbl_type;
4528 l_template_tbl Okl_Account_Dist_Pub.avlv_tbl_type;
4529 l_amount_tbl Okl_Account_Dist_Pub.amount_tbl_type;
4530 l_acc_gen_primary_key_tbl Okl_Account_Dist_Pub.acc_gen_primary_key;
4531 l_khrv_rec Okl_Contract_Pub.khrv_rec_type;
4532 l_chrv_rec Okl_Okc_Migration_Pvt.chrv_rec_type;
4533 x_khrv_rec Okl_Contract_Pub.khrv_rec_type;
4534 x_chrv_rec Okl_Okc_Migration_Pvt.chrv_rec_type;
4535 l_selv_tbl Okl_Streams_Pub.selv_tbl_type;
4536 x_selv_tbl Okl_Streams_Pub.selv_tbl_type;
4537 l_trx_header_amt NUMBER :=0;
4538 l_fact_sync_code VARCHAR2(2000);
4539 l_inv_acct_code VARCHAR2(2000);
4540 l_scs_code VARCHAR2(2000) := 'LEASE';
4541 --Added by dpsingh for LE Uptake
4542 l_legal_entity_id NUMBER;
4543 --START: Added by nikshah 21-Feb-2007 for SLA Uptake, Bug #5707866
4544 l_tcn_id NUMBER;
4545 l_tmpl_identify_tbl Okl_Account_Dist_Pvt.tmpl_identify_tbl_type;
4546 l_dist_info_tbl Okl_Account_Dist_Pvt.dist_info_tbl_type;
4547 l_ctxt_tbl Okl_Account_Dist_Pvt.CTXT_TBL_TYPE;
4548 l_acc_gen_tbl Okl_Account_Dist_Pvt.ACC_GEN_TBL_TYPE;
4549 l_template_out_tbl Okl_Account_Dist_Pvt.avlv_out_tbl_type;
4550 l_amount_out_tbl Okl_Account_Dist_Pvt.amount_out_tbl_type;
4551 l_count NUMBER;
4552 --END: Added by nikshah 21-Feb-2007 for SLA Uptake, Bug #5707866
4553
4554
4555 BEGIN
4556 -- Set save point
4557 WRITE_TO_LOG('Inside procedure CREATE_ACCRUALS_FORMULA');
4558 x_return_status := Okl_Api.START_ACTIVITY(l_api_name
4559 ,G_PKG_NAME
4560 ,p_init_msg_list
4561 ,l_api_version
4562 ,p_api_version
4563 ,'_PVT'
4564 ,x_return_status);
4565
4566 IF (x_return_status = Okl_Api.G_RET_STS_UNEXP_ERROR) THEN
4567 RAISE Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR;
4568 ELSIF (x_return_Status = Okl_Api.G_RET_STS_ERROR) THEN
4569 RAISE Okl_Api.G_EXCEPTION_ERROR;
4570 END IF;
4571
4572 -- set tcn and tcl types.
4573 IF p_accrual_rec.accrual_rule_yn = 'N' THEN
4574 l_tcn_type := 'NACL';
4575 l_tcl_type := 'NACL';
4576 ELSE
4577 l_tcn_type := 'ACL';
4578 l_tcl_type := 'ACL';
4579 END IF;
4580
4581 WRITE_TO_LOG('Prior to the call to OKL_SECURITIZATION_PVT.check_khr_ia_associated');
4582
4583
4584 --Bug 4622198.
4585 OKL_SECURITIZATION_PVT.check_khr_ia_associated(
4586 p_api_version => p_api_version
4587 ,p_init_msg_list => p_init_msg_list
4588 ,x_return_status => x_return_status
4589 ,x_msg_count => x_msg_count
4590 ,x_msg_data => x_msg_data
4591 ,p_khr_id => p_accrual_rec.contract_id
4592 ,p_scs_code => l_scs_code
4593 ,p_trx_date => p_accrual_rec.accrual_date
4594 ,x_fact_synd_code => l_fact_sync_code
4595 ,x_inv_acct_code => l_inv_acct_code
4596 );
4597 WRITE_TO_LOG('Return status after the call to OKL_SECURITIZATION_PVT.check_khr_ia_associated is :'|| x_return_status);
4598 WRITE_TO_LOG('The parameters returned from this call are :');
4599 WRITE_TO_LOG('============================================');
4600 WRITE_TO_LOG('x_fact_synd_code :'||l_fact_sync_code);
4601 WRITE_TO_LOG('x_inv_acct_code :'||l_inv_acct_code);
4602
4603 -- store the highest degree of error
4604 IF (x_return_status <> Okl_Api.G_RET_STS_SUCCESS) THEN
4605 IF (x_return_status = Okl_Api.G_RET_STS_UNEXP_ERROR) THEN
4606 -- need to leave
4607 Okl_Api.set_message(p_app_name => g_app_name,
4608 p_msg_name => 'OKL_ACC_SEC_PVT_ERROR');
4609 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
4610 ELSIF (x_return_Status = Okl_Api.G_RET_STS_ERROR) THEN
4611 Okl_Api.set_message(p_app_name => g_app_name,
4612 p_msg_name => 'OKL_ACC_SEC_PVT_ERROR');
4613 RAISE OKL_API.G_EXCEPTION_ERROR;
4614 END IF;
4615 END IF;
4616
4617 -- determine number of transaction lines to create
4618 l_tmpl_identify_rec.product_id := p_accrual_rec.product_id;
4619 l_tmpl_identify_rec.stream_type_id := p_accrual_rec.sty_id;
4620 l_tmpl_identify_rec.transaction_type_id := p_accrual_rec.trx_type_id;
4621 l_tmpl_identify_rec.advance_arrears := p_accrual_rec.advance_arrears;
4622 l_tmpl_identify_rec.prior_year_yn := 'N';
4623 l_tmpl_identify_rec.memo_yn := p_accrual_rec.memo_yn;
4624 --Bug 4622198.
4625 l_tmpl_identify_rec.factoring_synd_flag := l_fact_sync_code;
4626 l_tmpl_identify_rec.investor_code := l_inv_acct_code;
4627
4628 -- added parameter p_validity_date for bug 2902876.
4629 Okl_Account_Dist_Pub.GET_TEMPLATE_INFO(p_api_version => p_api_version,
4630 p_init_msg_list => p_init_msg_list,
4631 x_return_status => x_return_status,
4632 x_msg_count => x_msg_count,
4633 x_msg_data => x_msg_data,
4634 p_tmpl_identify_rec => l_tmpl_identify_rec,
4635 x_template_tbl => l_template_tbl,
4636 p_validity_date => p_accrual_rec.accrual_date);
4637 -- store the highest degree of error
4638 IF (x_return_status <> Okl_Api.G_RET_STS_SUCCESS) THEN
4639 IF (x_return_status = Okl_Api.G_RET_STS_UNEXP_ERROR) THEN
4640 -- need to leave
4641 Okl_Api.set_message(p_app_name => g_app_name,
4642 p_msg_name => 'OKL_AGN_GET_TMPL_ERROR',
4643 p_token1 => g_contract_number_token,
4644 p_token1_value => p_accrual_rec.contract_number);
4645 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
4646 ELSIF (x_return_status = Okl_Api.G_RET_STS_ERROR) THEN
4647 Okl_Api.set_message(p_app_name => g_app_name,
4648 p_msg_name => 'OKL_AGN_GET_TMPL_ERROR',
4649 p_token1 => g_contract_number_token,
4650 p_token1_value => p_accrual_rec.contract_number);
4651 RAISE OKL_API.G_EXCEPTION_ERROR;
4652 END IF;
4653 END IF;
4654 -- If templates are not found, then raise an error. Get_template_info will not return error.
4655 IF l_template_tbl.COUNT = 0 THEN
4656 Okl_Api.set_message(p_app_name => g_app_name,
4657 p_msg_name => 'OKL_TMPL_NOT_FOUND');
4658 RAISE OKL_API.G_EXCEPTION_ERROR;
4659 ELSE
4660 -- Build the transaction record
4661 --Added by dpsingh for LE Uptake
4662 l_legal_entity_id := OKL_LEGAL_ENTITY_UTIL.get_khr_le_id(p_accrual_rec.contract_id) ;
4663 IF l_legal_entity_id IS NOT NULL THEN
4664 l_tcnv_rec.legal_entity_id := l_legal_entity_id;
4665 ELSE
4666 Okl_Api.set_message(p_app_name => g_app_name,
4667 p_msg_name => 'OKL_LE_NOT_EXIST_CNTRCT',
4668 p_token1 => 'CONTRACT_NUMBER',
4669 p_token1_value => p_accrual_rec.contract_number);
4670 RAISE OKL_API.G_EXCEPTION_ERROR;
4671 END IF;
4672
4673 l_tcnv_rec.khr_id := p_accrual_rec.contract_id;
4674 l_tcnv_rec.pdt_id := p_accrual_rec.product_id;
4675 l_tcnv_rec.try_id := p_accrual_rec.trx_type_id;
4676 l_tcnv_rec.set_of_books_id := p_accrual_rec.set_of_books_id;
4677 l_tcnv_rec.tcn_type := l_tcn_type;
4678 l_tcnv_rec.description := p_accrual_rec.description;
4679 l_tcnv_rec.date_accrual := p_accrual_rec.accrual_date;
4680 l_tcnv_rec.date_transaction_occurred := p_accrual_rec.accrual_date;
4681 l_tcnv_rec.amount := p_accrual_rec.amount;
4682 l_tcnv_rec.currency_code := p_accrual_rec.currency_code;
4683 l_tcnv_rec.currency_conversion_type := p_accrual_rec.currency_conversion_type;
4684 l_tcnv_rec.currency_conversion_rate := p_accrual_rec.currency_conversion_rate;
4685 l_tcnv_rec.currency_conversion_date := p_accrual_rec.currency_conversion_date;
4686 l_tcnv_rec.accrual_status_yn := p_accrual_rec.rule_result;
4687 l_tcnv_rec.update_status_yn := p_accrual_rec.override_status;
4688 l_tcnv_rec.tsu_code := l_tsu_code_ent;
4689 l_tcnv_rec.accrual_activity := p_accrual_rec.accrual_activity;
4690 l_tcnv_rec.source_trx_id := p_accrual_rec.source_trx_id;
4691 l_tcnv_rec.source_trx_type := p_accrual_rec.source_trx_type;
4692 -- MGAAP 7263041 start
4693 l_tcnv_rec.representation_type := p_representation_type;
4694 l_tcnv_rec.trx_number := p_accrual_rec.trx_number;
4695 l_tcnv_rec.primary_rep_trx_id := p_accrual_rec.primary_rep_trx_id;
4696 -- MGAAP 7263041 end
4697
4698 --Fetching the contract dff information
4699 FOR get_contract_dff_rec IN get_contract_dff_csr(p_accrual_rec.contract_id)
4700 LOOP
4701 l_tcnv_rec.attribute_category := get_contract_dff_rec.attribute_category;
4702 l_tcnv_rec.attribute1 := get_contract_dff_rec.attribute1;
4703 l_tcnv_rec.attribute2 := get_contract_dff_rec.attribute2;
4704 l_tcnv_rec.attribute3 := get_contract_dff_rec.attribute3;
4705 l_tcnv_rec.attribute4 := get_contract_dff_rec.attribute4;
4706 l_tcnv_rec.attribute5 := get_contract_dff_rec.attribute5;
4707 l_tcnv_rec.attribute6 := get_contract_dff_rec.attribute6;
4708 l_tcnv_rec.attribute7 := get_contract_dff_rec.attribute7;
4709 l_tcnv_rec.attribute8 := get_contract_dff_rec.attribute8;
4710 l_tcnv_rec.attribute9 := get_contract_dff_rec.attribute9;
4711 l_tcnv_rec.attribute10 := get_contract_dff_rec.attribute10;
4712 l_tcnv_rec.attribute11 := get_contract_dff_rec.attribute11;
4713 l_tcnv_rec.attribute12 := get_contract_dff_rec.attribute12;
4714 l_tcnv_rec.attribute13 := get_contract_dff_rec.attribute13;
4715 l_tcnv_rec.attribute14 := get_contract_dff_rec.attribute14;
4716 l_tcnv_rec.attribute15 := get_contract_dff_rec.attribute15;
4717 END LOOP;
4718
4719 --Added by dpsingh for SLA Uptake (Bug 5707866)
4720 l_tcnv_rec.accrual_reversal_date := p_accrual_rec.accrual_reversal_date;
4721 -- Build the transaction line table of records
4722 FOR i IN l_template_tbl.FIRST..l_template_tbl.LAST
4723 LOOP
4724 l_tclv_tbl(i).line_number := i;
4725 l_tclv_tbl(i).khr_id := p_accrual_rec.contract_id;
4726 l_tclv_tbl(i).sty_id := p_accrual_rec.sty_id;
4727 l_tclv_tbl(i).tcl_type := l_tcl_type;
4728 l_tclv_tbl(i).description := p_accrual_rec.description;
4729 l_tclv_tbl(i).amount := p_accrual_rec.amount;
4730 l_tclv_tbl(i).currency_code := p_accrual_rec.currency_code;
4731 l_tclv_tbl(i).accrual_rule_yn := p_accrual_rec.accrual_rule_yn;
4732 END LOOP;
4733
4734 WRITE_TO_LOG('Prior to the call to Okl_Trx_Contracts_Pub.create_trx_contracts');
4735 WRITE_TO_LOG('The contents of l_tcnv_rec being passed to the create call ');
4736 WRITE_TO_LOG('===========================================================');
4737 WRITE_TO_LOG('l_tcnv_rec.khr_id :'||l_tcnv_rec.khr_id);
4738 WRITE_TO_LOG('l_tcnv_rec.pdt_id :'||l_tcnv_rec.pdt_id);
4739 WRITE_TO_LOG('l_tcnv_rec.try_id :'||l_tcnv_rec.try_id);
4740 WRITE_TO_LOG('l_tcnv_rec.set_of_books_id :'||l_tcnv_rec.set_of_books_id);
4741 WRITE_TO_LOG('l_tcnv_rec.tcn_type :'||l_tcnv_rec.tcn_type);
4742 WRITE_TO_LOG('l_tcnv_rec.description :'||l_tcnv_rec.description);
4743 WRITE_TO_LOG('l_tcnv_rec.date_accrual :'||l_tcnv_rec.date_accrual);
4744 WRITE_TO_LOG('l_tcnv_rec.date_transaction_occurred :'||l_tcnv_rec.date_transaction_occurred);
4745 WRITE_TO_LOG('l_tcnv_rec.amount :'||l_tcnv_rec.amount);
4746 WRITE_TO_LOG('l_tcnv_rec.currency_code :'||l_tcnv_rec.currency_code);
4747 WRITE_TO_LOG('l_tcnv_rec.currency_conversion_type :'||l_tcnv_rec.currency_conversion_type);
4748 WRITE_TO_LOG('l_tcnv_rec.currency_conversion_rate :'||l_tcnv_rec.currency_conversion_rate);
4749 WRITE_TO_LOG('l_tcnv_rec.currency_conversion_date :'||l_tcnv_rec.currency_conversion_date);
4750 WRITE_TO_LOG('l_tcnv_rec.accrual_status_yn :'||l_tcnv_rec.accrual_status_yn);
4751 WRITE_TO_LOG('l_tcnv_rec.update_status_yn :'||l_tcnv_rec.update_status_yn);
4752 WRITE_TO_LOG('l_tcnv_rec.tsu_code :'||l_tcnv_rec.tsu_code);
4753 WRITE_TO_LOG('l_tcnv_rec.accrual_activity :'||l_tcnv_rec.accrual_activity);
4754 WRITE_TO_LOG('l_tcnv_rec.source_trx_id :'||l_tcnv_rec.source_trx_id);
4755 WRITE_TO_LOG('l_tcnv_rec.source_trx_type :'||l_tcnv_rec.source_trx_type);
4756 WRITE_TO_LOG('l_tcnv_rec.accrual_reversal_date :'||l_tcnv_rec.accrual_reversal_date);
4757 WRITE_TO_LOG('l_tcnv_rec.representation_type :'||l_tcnv_rec.representation_type);
4758 WRITE_TO_LOG('l_tcnv_rec.trx_number :'||l_tcnv_rec.trx_number);
4759 WRITE_TO_LOG('l_tcnv_rec.primary_rep_trx_id :'||l_tcnv_rec.primary_rep_trx_id);
4760
4761 WRITE_TO_LOG('');
4762 WRITE_TO_LOG('The contents of l_tcnv_tbl being passed to the create call ');
4763 WRITE_TO_LOG('===========================================================');
4764
4765 FOR i IN l_tclv_tbl.FIRST..l_tclv_tbl.LAST
4766 LOOP
4767 WRITE_TO_LOG('l_tclv_tbl(i).line_number :'||l_tclv_tbl(i).line_number);
4768 WRITE_TO_LOG('l_tclv_tbl(i).khr_id :'||l_tclv_tbl(i).khr_id);
4769 WRITE_TO_LOG('l_tclv_tbl(i).kle_id :'||l_tclv_tbl(i).kle_id);
4770 WRITE_TO_LOG('l_tclv_tbl(i).sty_id :'||l_tclv_tbl(i).sty_id);
4771 WRITE_TO_LOG('l_tclv_tbl(i).tcl_type :'||l_tclv_tbl(i).tcl_type);
4772 WRITE_TO_LOG('l_tclv_tbl(i).description :'||l_tclv_tbl(i).description);
4773 WRITE_TO_LOG('l_tclv_tbl(i).amount :'||l_tclv_tbl(i).amount);
4774 WRITE_TO_LOG('l_tclv_tbl(i).currency_code :'||l_tclv_tbl(i).currency_code);
4775 WRITE_TO_LOG('l_tclv_tbl(i).accrual_rule_yn :'||l_tclv_tbl(i).accrual_rule_yn);
4776 END LOOP;
4777
4778 -- Call Transaction Public API to insert transaction header and line records
4779 Okl_Trx_Contracts_Pub.create_trx_contracts
4780 (p_api_version => p_api_version
4781 ,p_init_msg_list => p_init_msg_list
4782 ,x_return_status => x_return_status
4783 ,x_msg_count => x_msg_count
4784 ,x_msg_data => x_msg_data
4785 ,p_tcnv_rec => l_tcnv_rec
4786 ,p_tclv_tbl => l_tclv_tbl
4787 ,x_tcnv_rec => x_tcnv_rec
4788 ,x_tclv_tbl => x_tclv_tbl );
4789 -- store the highest degree of error
4790 IF (x_return_status <> Okl_Api.G_RET_STS_SUCCESS) THEN
4791 IF (x_return_status = Okl_Api.G_RET_STS_UNEXP_ERROR) THEN
4792 -- need to leave
4793 Okl_Api.set_message(p_app_name => g_app_name,
4794 p_msg_name => 'OKL_AGN_TRX_CRE_ERROR',
4795 p_token1 => g_contract_number_token,
4796 p_token1_value => p_accrual_rec.contract_number);
4797 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
4798 ELSIF (x_return_status = Okl_Api.G_RET_STS_ERROR) THEN
4799 Okl_Api.set_message(p_app_name => g_app_name,
4800 p_msg_name => 'OKL_AGN_TRX_CRE_ERROR',
4801 p_token1 => g_contract_number_token,
4802 p_token1_value => p_accrual_rec.contract_number);
4803 RAISE OKL_API.G_EXCEPTION_ERROR;
4804 END IF;
4805 END IF;
4806 l_ctxt_val_tbl := p_ctxt_val_tbl;
4807
4808 --get acc gen sources and value. Bug 3596651
4809 GET_ACCOUNT_GEN_DETAILS(
4810 p_contract_id => p_accrual_rec.contract_id,
4811 x_return_status => x_return_status,
4812 x_acc_gen_primary_key_tbl => l_acc_gen_primary_key_tbl);
4813 --check for error
4814 IF (x_return_status <> Okl_Api.G_RET_STS_SUCCESS) THEN
4815 Okl_Api.set_message(p_app_name => g_app_name,
4816 p_msg_name => 'OKL_AGN_ACC_GEN_ERROR',
4817 p_token1 => g_contract_number_token,
4818 p_token1_value => p_accrual_rec.contract_number);
4819 RAISE OKL_API.G_EXCEPTION_ERROR;
4820 END IF;
4821
4822 --START: Changes by nikshah 21-Feb-2007 for SLA Uptake, Bug #5707866
4823 l_tcn_id := x_tcnv_rec.id;
4824
4825 -- Build Accounting Record for creating entries
4826 FOR i IN x_tclv_tbl.FIRST..x_tclv_tbl.LAST
4827 LOOP
4828 l_acc_gen_tbl(i).acc_gen_key_tbl := l_acc_gen_primary_key_tbl;
4829 l_acc_gen_tbl(i).source_id := x_tclv_tbl(i).id;
4830
4831 IF (l_ctxt_val_tbl.COUNT > 0) THEN
4832 l_ctxt_tbl(i).ctxt_val_tbl := l_ctxt_val_tbl;
4833 l_ctxt_tbl(i).source_id := x_tclv_tbl(i).id;
4834 END IF;
4835
4836 l_tmpl_identify_tbl(i).product_id := x_tcnv_rec.pdt_id;
4837 l_tmpl_identify_tbl(i).stream_type_id := x_tclv_tbl(i).sty_id;
4838 l_tmpl_identify_tbl(i).transaction_type_id := x_tcnv_rec.try_id;
4839 l_tmpl_identify_tbl(i).advance_arrears := p_accrual_rec.advance_arrears;
4840 l_tmpl_identify_tbl(i).prior_year_yn := 'N';
4841 l_tmpl_identify_tbl(i).memo_yn := p_accrual_rec.memo_yn;
4842 --Bug 4622198.
4843 l_tmpl_identify_tbl(i).factoring_synd_flag := l_fact_sync_code;
4844 l_tmpl_identify_tbl(i).investor_code := l_inv_acct_code;
4845
4846 l_dist_info_tbl(i).contract_id := p_accrual_rec.contract_id;
4847 l_dist_info_tbl(i).accounting_date := x_tcnv_rec.date_transaction_occurred;
4848 l_dist_info_tbl(i).source_table := l_source_table;
4849 l_dist_info_tbl(i).currency_code := x_tcnv_rec.currency_code;
4850 l_dist_info_tbl(i).currency_conversion_type := x_tcnv_rec.currency_conversion_type;
4851 l_dist_info_tbl(i).currency_conversion_rate := x_tcnv_rec.currency_conversion_rate;
4852 l_dist_info_tbl(i).currency_conversion_date := x_tcnv_rec.currency_conversion_date;
4853 l_dist_info_tbl(i).source_id := x_tclv_tbl(i).id;
4854 l_dist_info_tbl(i).post_to_gl := p_accrual_rec.post_to_gl;
4855 l_dist_info_tbl(i).gl_reversal_flag := p_accrual_rec.gl_reversal_flag;
4856
4857 WRITE_TO_LOG('Prior to the call to Create Distributions');
4858 WRITE_TO_LOG('');
4859 WRITE_TO_LOG('The contents of l_tmpl_identify_tbl :');
4860 WRITE_TO_LOG('=========================================');
4861 WRITE_TO_LOG('l_tmpl_identify_tbl(i).product_id :'||l_tmpl_identify_tbl(i).product_id);
4862 WRITE_TO_LOG('l_tmpl_identify_tbl(i).stream_type_id :'||l_tmpl_identify_tbl(i).stream_type_id);
4863 WRITE_TO_LOG('l_tmpl_identify_tbl(i).transaction_type_id :'||l_tmpl_identify_tbl(i).transaction_type_id);
4864 WRITE_TO_LOG('l_tmpl_identify_tbl(i).advance_arrears :'||l_tmpl_identify_tbl(i).advance_arrears);
4865 WRITE_TO_LOG('l_tmpl_identify_tbl(i).prior_year_yn :'||l_tmpl_identify_tbl(i).prior_year_yn);
4866 WRITE_TO_LOG('l_tmpl_identify_tbl(i).memo_yn :'||l_tmpl_identify_tbl(i).memo_yn);
4867 WRITE_TO_LOG('l_tmpl_identify_tbl(i).factoring_synd_flag :'||l_tmpl_identify_tbl(i).factoring_synd_flag);
4868 WRITE_TO_LOG('l_tmpl_identify_tbl(i).investor_code :'||l_tmpl_identify_tbl(i).investor_code);
4869
4870 WRITE_TO_LOG('The contents of l_dist_info_tbl are :');
4871 WRITE_TO_LOG('=========================================');
4872 WRITE_TO_LOG('l_dist_info_tbl(i).amount :'||l_dist_info_tbl(i).amount);
4873 WRITE_TO_LOG('l_dist_info_tbl(i).accounting_date :'||l_dist_info_tbl(i).accounting_date);
4874 WRITE_TO_LOG('l_dist_info_tbl(i).source_id :'||l_dist_info_tbl(i).source_id);
4875 WRITE_TO_LOG('l_dist_info_tbl(i).source_table :'||l_dist_info_tbl(i).source_table);
4876 WRITE_TO_LOG('l_dist_info_tbl(i).currency_code :'||l_dist_info_tbl(i).currency_code);
4877 WRITE_TO_LOG('l_dist_info_tbl(i).currency_conversion_type :'||l_dist_info_tbl(i).currency_conversion_type);
4878 WRITE_TO_LOG('l_dist_info_tbl(i).currency_conversion_rate :'||l_dist_info_tbl(i).currency_conversion_rate);
4879 WRITE_TO_LOG('l_dist_info_tbl(i).currency_conversion_date :'||l_dist_info_tbl(i).currency_conversion_date);
4880 WRITE_TO_LOG('l_dist_info_tbl(i).post_to_gl :'||l_dist_info_tbl(i).post_to_gl);
4881 WRITE_TO_LOG('l_dist_info_tbl(i).gl_reversal_flag :'||l_dist_info_tbl(i).gl_reversal_flag);
4882 WRITE_TO_LOG('l_dist_info_tbl(i).contract_id :'||l_dist_info_tbl(i).contract_id);
4883 WRITE_TO_LOG('l_dist_info_tbl(i).contract_line_id :'||l_dist_info_tbl(i).contract_line_id);
4884 END LOOP;
4885
4886 -- Call Okl_Account_Dist_Pub API to create accounting entries for this transaction
4887 --Call new signature
4888 Okl_Account_Dist_Pvt.CREATE_ACCOUNTING_DIST(
4889 p_api_version => p_api_version,
4890 p_init_msg_list => p_init_msg_list,
4891 x_return_status => x_return_status,
4892 x_msg_count => x_msg_count,
4893 x_msg_data => x_msg_data,
4894 p_tmpl_identify_tbl => l_tmpl_identify_tbl,
4895 p_dist_info_tbl => l_dist_info_tbl,
4896 p_ctxt_val_tbl => l_ctxt_tbl,
4897 p_acc_gen_primary_key_tbl => l_acc_gen_tbl,
4898 x_template_tbl => l_template_out_tbl,
4899 x_amount_tbl => l_amount_out_tbl,
4900 p_trx_header_id => l_tcn_id);
4901
4902 -- store the highest degree of error
4903 IF (x_return_status <> Okl_Api.G_RET_STS_SUCCESS) THEN
4904 IF (x_return_status = Okl_Api.G_RET_STS_UNEXP_ERROR) THEN
4905 -- need to leave
4906 Okl_Api.set_message(p_app_name => g_app_name,
4907 p_msg_name => 'OKL_AGN_CRE_DIST_ERROR',
4908 p_token1 => g_contract_number_token,
4909 p_token1_value => p_accrual_rec.contract_number);
4910 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
4911 ELSIF (x_return_status = Okl_Api.G_RET_STS_ERROR) THEN
4912 -- record that there was an error
4913 Okl_Api.set_message(p_app_name => g_app_name,
4914 p_msg_name => 'OKL_AGN_CRE_DIST_ERROR',
4915 p_token1 => g_contract_number_token,
4916 p_token1_value => p_accrual_rec.contract_number);
4917 RAISE OKL_API.G_EXCEPTION_ERROR;
4918 END IF;
4919 END IF;
4920
4921 IF l_template_out_tbl.COUNT > 0 THEN
4922 FOR i IN l_template_out_tbl.FIRST..l_template_out_tbl.LAST
4923 LOOP
4924 -- verify template tbl count with amount tbl count
4925 IF l_template_out_tbl(i).template_tbl.COUNT <> l_amount_out_tbl(i).amount_tbl.COUNT THEN
4926 Okl_Api.set_message(p_app_name => g_app_name,
4927 p_msg_name => 'OKL_AGN_TMP_AMTCOUNT_MISMATCH');
4928 RAISE OKL_API.G_EXCEPTION_ERROR;
4929 END IF;
4930 END LOOP;
4931 END IF;
4932 --END: Changes by nikshah 21-Feb-2007 for SLA Uptake, Bug #5707866
4933 l_tclv_tbl := x_tclv_tbl;
4934 l_tcnv_rec := x_tcnv_rec;
4935 -- Total the amount for trx header and assign amount to lines
4936 --START: Changes by nikshah 13-Mar-2007, Bug 5707866
4937 l_count := l_amount_out_tbl.FIRST;
4938 FOR i in l_tclv_tbl.FIRST..l_tclv_tbl.LAST LOOP
4939 IF l_tclv_tbl(i).id = l_amount_out_tbl(l_count).source_id THEN
4940 l_amount_tbl := l_amount_out_tbl(l_count).amount_tbl;
4941 IF l_amount_tbl.COUNT > 0 THEN
4942 FOR j in l_amount_tbl.FIRST..l_amount_tbl.LAST LOOP
4943 l_tclv_tbl(i).amount := l_tclv_tbl(i).amount + l_amount_tbl(j);
4944 END LOOP;
4945 END IF;
4946 l_trx_header_amt := l_trx_header_amt + l_tclv_tbl(i).amount;
4947 l_count := l_count + 1;
4948 END IF;
4949 END LOOP;
4950 --END: Changes by nikshah 13-Mar-2007, Bug 5707866
4951 l_tcnv_rec.amount := l_trx_header_amt;
4952
4953
4954 -- update the transaction header and line records with amounts
4955 WRITE_TO_LOG('Prior to the call to Okl_Trx_Contracts_Pub.update_trx_contracts');
4956 Okl_Trx_Contracts_Pub.update_trx_contracts
4957 (p_api_version => p_api_version
4958 ,p_init_msg_list => p_init_msg_list
4959 ,x_return_status => x_return_status
4960 ,x_msg_count => x_msg_count
4961 ,x_msg_data => x_msg_data
4962 ,p_tcnv_rec => l_tcnv_rec
4963 ,p_tclv_tbl => l_tclv_tbl
4964 ,x_tcnv_rec => x_tcnv_rec
4965 ,x_tclv_tbl => x_tclv_tbl );
4966 WRITE_TO_LOG('Return Status after the call to Okl_Trx_Contracts_Pub.update_trx_contracts is '||x_return_status);
4967 -- store the highest degree of error
4968 IF (x_return_status <> Okl_Api.G_RET_STS_SUCCESS) THEN
4969 IF (x_return_status = Okl_Api.G_RET_STS_UNEXP_ERROR) THEN
4970 -- need to leave
4971 Okl_Api.set_message(p_app_name => g_app_name,
4972 p_msg_name => 'OKL_AGN_TRX_UPD_ERROR',
4973 p_token1 => g_contract_number_token,
4974 p_token1_value => p_accrual_rec.contract_number);
4975 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
4976 ELSIF (x_return_status = Okl_Api.G_RET_STS_ERROR) THEN
4977 Okl_Api.set_message(p_app_name => g_app_name,
4978 p_msg_name => 'OKL_AGN_TRX_UPD_ERROR',
4979 p_token1 => g_contract_number_token,
4980 p_token1_value => p_accrual_rec.contract_number);
4981 RAISE OKL_API.G_EXCEPTION_ERROR;
4982 END IF;
4983 END IF;
4984 -- Modified by kthiruva on 16-Jul-2007 as part of SLA Uptake Impact.
4985 -- Else portion of the condition removed as part of Bug 6137099. When the amount returned by the accounting engine
4986 -- is zero, the transaction header and lines are not deleted. Howerver, there is no accounting done.
4987 -- As part of this bug fix, the changes made through bug 4937105 are reversed.
4988 --
4989 -- Bug 4662173.
4990 -- Commenting below call. There is no need to update contract header.
4991 -- Value of latest accrual rule evaluation is available and used from transaction header.
4992 --
4993 -- l_khrv_rec.id := p_accrual_rec.contract_id;
4994 -- l_chrv_rec.id := p_accrual_rec.contract_id;
4995 -- l_khrv_rec.generate_accrual_yn := x_tcnv_rec.accrual_status_yn;
4996 -- l_khrv_rec.generate_accrual_override_yn := l_tcnv_rec.update_status_yn;
4997 -- -- Call Contract Update API to set accrual status
4998 -- Okl_Contract_Pub.update_contract_header
4999 -- (p_api_version => p_api_version
5000 -- ,p_init_msg_list => p_init_msg_list
5001 -- ,x_return_status => x_return_status
5002 -- ,x_msg_count => x_msg_count
5003 -- ,x_msg_data => x_msg_data
5004 -- ,p_restricted_update => 'OKL_API.G_TRUE'
5005 -- ,p_chrv_rec => l_chrv_rec
5006 -- ,p_khrv_rec => l_khrv_rec
5007 -- ,x_chrv_rec => x_chrv_rec
5008 -- ,x_khrv_rec => x_khrv_rec );
5009 -- -- store the highest degree of error
5010 -- IF (x_return_status <> Okl_Api.G_RET_STS_SUCCESS) THEN
5011 -- IF (x_return_status = Okl_Api.G_RET_STS_UNEXP_ERROR) THEN
5012 -- -- need to leave
5013 -- Okl_Api.set_message(p_app_name => g_app_name,
5014 -- p_msg_name => 'OKL_AGN_KHR_UPD_ERROR',
5015 -- p_token1 => g_contract_number_token,
5016 -- p_token1_value => p_accrual_rec.contract_number);
5017 -- RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
5018 -- ELSIF (x_return_status = Okl_Api.G_RET_STS_ERROR) THEN
5019 -- -- record that there was an error
5020 -- Okl_Api.set_message(p_app_name => g_app_name,
5021 -- p_msg_name => 'OKL_AGN_KHR_UPD_ERROR',
5022 -- p_token1 => g_contract_number_token,
5023 -- p_token1_value => p_accrual_rec.contract_number);
5024 -- RAISE OKL_API.G_EXCEPTION_ERROR;
5025 -- END IF;
5026 -- END IF;
5027
5028 Okl_Api.END_ACTIVITY(x_msg_count, x_msg_data);
5029 x_return_status := Okl_Api.G_RET_STS_SUCCESS;
5030
5031 END IF; -- For l_template_tbl.COUNT > 0
5032
5033 EXCEPTION
5034 WHEN Okl_Api.G_EXCEPTION_ERROR THEN
5035 x_return_status := Okl_Api.HANDLE_EXCEPTIONS(l_api_name
5036 ,g_pkg_name
5037 ,'OKL_API.G_RET_STS_ERROR'
5038 ,x_msg_count
5039 ,x_msg_data
5040 ,'_PVT');
5041 WHEN Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR THEN
5042 x_return_status := Okl_Api.HANDLE_EXCEPTIONS(l_api_name
5043 ,g_pkg_name
5044 ,'OKL_API.G_RET_STS_UNEXP_ERROR'
5045 ,x_msg_count
5046 ,x_msg_data
5047 ,'_PVT');
5048 WHEN OTHERS THEN
5049 x_return_status :=Okl_Api.HANDLE_EXCEPTIONS
5050 (l_api_name,
5051 G_PKG_NAME,
5052 'OTHERS',
5053 x_msg_count,
5054 x_msg_data,
5055 '_PVT');
5056
5057 END CREATE_ACCRUALS_FORMULA;
5058
5059 PROCEDURE UPDATE_BALANCES (p_khr_id IN NUMBER
5060 ,p_khr_number IN VARCHAR2
5061 ,p_amount IN NUMBER
5062 ,p_date IN DATE
5063 ,x_return_status OUT NOCOPY VARCHAR2
5064 ,x_msg_count OUT NOCOPY NUMBER
5065 ,x_msg_data OUT NOCOPY VARCHAR2
5066
5067 ) IS
5068
5069 CURSOR get_balances_id_csr (p_khr_id NUMBER) IS
5070 SELECT id
5071 FROM OKL_CONTRACT_BALANCES
5072 WHERE khr_id = p_khr_id
5073 AND kle_id IS NULL;
5074
5075 l_balances_id OKL_CONTRACT_BALANCES.ID%TYPE;
5076 l_cblv_rec OKL_CONTRACT_BALANCES_PVT.okl_cblv_rec;
5077 x_cblv_rec OKL_CONTRACT_BALANCES_PVT.okl_cblv_rec;
5078 l_api_version CONSTANT NUMBER := 1.0;
5079 l_api_name CONSTANT VARCHAR2(30) := 'UPDATE_BALANCES';
5080 l_init_msg_list VARCHAR2(2000) := OKL_API.G_FALSE;
5081 l_return_status VARCHAR2(1) := OKL_API.G_RET_STS_SUCCESS;
5082 l_msg_count NUMBER;
5083 l_msg_data VARCHAR2(2000);
5084
5085
5086 BEGIN
5087 -- Set save point
5088 l_return_status := Okl_Api.START_ACTIVITY(l_api_name
5089 ,G_PKG_NAME
5090 ,l_init_msg_list
5091 ,l_api_version
5092 ,l_api_version
5093 ,'_PVT'
5094 ,l_return_status);
5095
5096 IF (l_return_status = Okl_Api.G_RET_STS_UNEXP_ERROR) THEN
5097 RAISE Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR;
5098 ELSIF (l_return_Status = Okl_Api.G_RET_STS_ERROR) THEN
5099 RAISE Okl_Api.G_EXCEPTION_ERROR;
5100 END IF;
5101
5102 OPEN get_balances_id_csr(p_khr_id);
5103 FETCH get_balances_id_csr INTO l_balances_id;
5104 CLOSE get_balances_id_csr;
5105
5106 l_cblv_rec.khr_id := p_khr_id;
5107 l_cblv_rec.interest_accrued_amt := p_amount;
5108 l_cblv_rec.interest_accrued_date := p_date;
5109
5110 IF l_balances_id IS NOT NULL THEN
5111 l_cblv_rec.id := l_balances_id;
5112 OKL_CONTRACT_BALANCES_PVT.update_contract_balance(
5113 p_api_version => l_api_version
5114 , p_init_msg_list => l_init_msg_list
5115 , x_return_status => l_return_status
5116 , x_msg_count => l_msg_count
5117 , x_msg_data => l_msg_data
5118 , p_cblv_rec => l_cblv_rec
5119 , x_cblv_rec => x_cblv_rec);
5120
5121 -- store the highest degree of error
5122 IF (l_return_status <> Okl_Api.G_RET_STS_SUCCESS) THEN
5123 IF (l_return_status = Okl_Api.G_RET_STS_UNEXP_ERROR) THEN
5124 -- need to leave
5125 Okl_Api.set_message(p_app_name => g_app_name,
5126 p_msg_name => 'OKL_AGN_UPD_BAL_ERROR',
5127 p_token1 => g_contract_number_token,
5128 p_token1_value => p_khr_number);
5129 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
5130 ELSIF (l_return_status = Okl_Api.G_RET_STS_ERROR) THEN
5131 Okl_Api.set_message(p_app_name => g_app_name,
5132 p_msg_name => 'OKL_AGN_UPD_BAL_ERROR',
5133 p_token1 => g_contract_number_token,
5134 p_token1_value => p_khr_number);
5135 RAISE OKL_API.G_EXCEPTION_ERROR;
5136 END IF;
5137 END IF;
5138 ELSE
5139 OKL_CONTRACT_BALANCES_PVT.create_contract_balance(
5140 p_api_version => l_api_version
5141 , p_init_msg_list => l_init_msg_list
5142 , x_return_status => l_return_status
5143 , x_msg_count => l_msg_count
5144 , x_msg_data => l_msg_data
5145 , p_cblv_rec => l_cblv_rec
5146 , x_cblv_rec => x_cblv_rec);
5147 -- store the highest degree of error
5148 IF (l_return_status <> Okl_Api.G_RET_STS_SUCCESS) THEN
5149 IF (l_return_status = Okl_Api.G_RET_STS_UNEXP_ERROR) THEN
5150 -- need to leave
5151 Okl_Api.set_message(p_app_name => g_app_name,
5152 p_msg_name => 'OKL_AGN_CRE_BAL_ERROR',
5153 p_token1 => g_contract_number_token,
5154 p_token1_value => p_khr_number);
5155 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
5156 ELSIF (l_return_status = Okl_Api.G_RET_STS_ERROR) THEN
5157 Okl_Api.set_message(p_app_name => g_app_name,
5158 p_msg_name => 'OKL_AGN_CRE_BAL_ERROR',
5159 p_token1 => g_contract_number_token,
5160 p_token1_value => p_khr_number);
5161 RAISE OKL_API.G_EXCEPTION_ERROR;
5162 END IF;
5163 END IF;
5164 END IF;
5165 Okl_Api.END_ACTIVITY(x_msg_count, x_msg_data);
5166 x_return_status := Okl_Api.G_RET_STS_SUCCESS;
5167
5168 EXCEPTION
5169 WHEN Okl_Api.G_EXCEPTION_ERROR THEN
5170 x_return_status := Okl_Api.HANDLE_EXCEPTIONS(l_api_name
5171 ,g_pkg_name
5172 ,'OKL_API.G_RET_STS_ERROR'
5173 ,x_msg_count
5174 ,x_msg_data
5175 ,'_PVT');
5176
5177 WHEN Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR THEN
5178 x_return_status := Okl_Api.HANDLE_EXCEPTIONS(l_api_name
5179 ,g_pkg_name
5180 ,'OKL_API.G_RET_STS_UNEXP_ERROR'
5181 ,x_msg_count
5182 ,x_msg_data
5183 ,'_PVT');
5184
5185 WHEN OTHERS THEN
5186
5187 IF get_balances_id_csr%ISOPEN THEN
5188 CLOSE get_balances_id_csr;
5189 END IF;
5190
5191 x_return_status :=Okl_Api.HANDLE_EXCEPTIONS
5192 (l_api_name,
5193 G_PKG_NAME,
5194 'OTHERS',
5195 x_msg_count,
5196 x_msg_data,
5197 '_PVT');
5198 END UPDATE_BALANCES;
5199
5200 PROCEDURE PROCESS_ACCRUALS (
5201 p_api_version IN NUMBER,
5202 p_init_msg_list IN VARCHAR2,
5203 x_return_status OUT NOCOPY VARCHAR2,
5204 x_msg_count OUT NOCOPY NUMBER,
5205 x_msg_data OUT NOCOPY VARCHAR2,
5206 p_process_accrual_rec IN process_accrual_rec_type
5207
5208 )IS
5209
5210 l_contract_id OKL_K_HEADERS_FULL_V.id%TYPE;
5211 l_contract_number OKL_K_HEADERS_FULL_V.contract_number%TYPE;
5212 l_accrual_status OKL_K_HEADERS_FULL_V.generate_accrual_yn%TYPE;
5213 l_override_status OKL_K_HEADERS_FULL_V.generate_accrual_override_yn%TYPE;
5214 l_start_date OKL_K_HEADERS_FULL_V.start_date%TYPE;
5215 l_sts_code OKL_K_HEADERS_FULL_V.sts_code%TYPE;
5216 l_product_id OKL_K_HEADERS_FULL_V.pdt_id%TYPE;
5217 l_deal_type OKL_K_HEADERS_FULL_V.deal_type%TYPE;
5218 l_try_id OKL_TRX_TYPES_V.id%TYPE;
5219 l_func_currency_code OKL_TRX_CONTRACTS.CURRENCY_CODE%TYPE;
5220 l_khr_currency_code OKL_TRX_CONTRACTS.CURRENCY_CODE%TYPE;
5221 l_currency_conv_type OKL_TRX_CONTRACTS.CURRENCY_CONVERSION_TYPE%TYPE;
5222 l_currency_conv_rate OKL_TRX_CONTRACTS.CURRENCY_CONVERSION_RATE%TYPE;
5223 l_currency_conv_date OKL_TRX_CONTRACTS.CURRENCY_CONVERSION_DATE%TYPE;
5224 l_sob_id OKL_SYS_ACCT_OPTS.set_of_books_id%TYPE;
5225 --Fixed Bug 5707866 SLA Uptake Project by nikshah, changed tsu_code to PROCESSED from ENTERED
5226 l_tsu_code_ent OKL_TRX_CONTRACTS.TSU_CODE%TYPE := 'PROCESSED';
5227 l_tcn_type OKL_TRX_CONTRACTS.TCN_TYPE%TYPE := 'ACL';
5228 l_batch_name OKL_TRX_CONTRACTS.DESCRIPTION%TYPE := p_process_accrual_rec.batch_name;
5229 l_reverse_date_to DATE;
5230 l_sob_name VARCHAR2(2000);
5231 l_sysdate DATE := SYSDATE;
5232 l_api_version CONSTANT NUMBER := 1.0;
5233 l_api_name CONSTANT VARCHAR2(30) := 'PROCESS_ACCRUALS';
5234 l_init_msg_list VARCHAR2(2000) := OKL_API.G_FALSE;
5235 l_return_status VARCHAR2(1) := OKL_API.G_RET_STS_SUCCESS;
5236 l_msg_count NUMBER;
5237 l_msg_data VARCHAR2(2000);
5238 l_period_name VARCHAR2(2000);
5239 l_period_start_date DATE;
5240 l_period_end_date DATE;
5241 l_org_id NUMBER;
5242 l_org_name VARCHAR2(2000);
5243 l_accrual_date DATE;
5244 l_rule_info_cat VARCHAR2(2000) := 'LAINTP';
5245 l_period_status VARCHAR2(1);
5246
5247 l_previous_accrual_status OKL_TRX_CONTRACTS.accrual_status_yn%TYPE;
5248 l_previous_override_status OKL_TRX_CONTRACTS.update_status_yn%TYPE;
5249 l_last_interest_calc_date DATE;
5250 -- bug 2490346
5251 -- changed l_interest_fixed to l_variable_rate
5252 --l_variable_rate VARCHAR2(2000);
5253 -- assigning NULL for bug#2388940
5254 l_billing_type VARCHAR2(2000) := NULL;
5255 -- moved l_total from outer block to inner block for bug# 2648718
5256 l_total NUMBER := 0;
5257 l_rule_result VARCHAR2(1);
5258 l_sty_id OKL_STRM_TYPE_V.id%TYPE;
5259 l_stream_tbl stream_tbl_type;
5260 l_stream_tbl_rep stream_tbl_type; -- MGAAP 7263041
5261 l_tcnv_rec Okl_Trx_Contracts_Pub.tcnv_rec_type;
5262 l_tcnv_tbl Okl_Trx_Contracts_Pub.tcnv_tbl_type;
5263 l_can_tcnv_tbl Okl_Trx_Contracts_Pub.tcnv_tbl_type;
5264 l_tclv_tbl Okl_Trx_Contracts_Pub.tclv_tbl_type;
5265 l_can_tclv_tbl Okl_Trx_Contracts_Pub.tclv_tbl_type;
5266 l_ctxt_val_tbl Okl_Account_Dist_Pub.ctxt_val_tbl_type;
5267 l_accrual_rec accrual_rec_type;
5268 l_reverse_rec accrual_rec_type;
5269 l_catchup_rec accrual_rec_type;
5270 -- commenting for bug# 2388940
5271 --l_billing_rule_csr_v billing_rule_csr%ROWTYPE;
5272
5273 l_agn_activity VARCHAR2(1);
5274 l_factoring_synd_flag VARCHAR2(2000) := NULL;
5275 l_syndication_flag VARCHAR2(2000);
5276 l_factoring_flag VARCHAR2(2000);
5277 l_trx_exists VARCHAR2(1) := '?';
5278 l_error_msg_tbl Okl_Accounting_Util.Error_Message_Type;
5279 l_rev_rec_method VARCHAR2(2000);
5280 l_rev_rec_basis OKL_STRM_TYPE_V.ACCRUAL_YN%TYPE;
5281 l_last_accrual_date DATE;
5282
5283 -- Commenting for Bug 4659467
5284 -- Cursor to select the interest rule i.e. whether fixed interest or variable interest
5285 -- CURSOR interest_rule_csr(p_ctr_id NUMBER) IS
5286 -- SELECT rule_information1
5287 -- FROM OKC_RULES_B
5288 -- WHERE dnz_chr_id = p_ctr_id
5289 -- AND rule_information_category = l_rule_info_cat;
5290
5291
5292 -- Cursor to select the previous accrual and override statuses
5293 -- bug 2474969, modified subquery from okl_trx_contracts to okl_trx_contracts_v
5294 -- bug 2870449, 25-Mar-03, SGIYER, added khr_id = p_khr_id to outer query.
5295 CURSOR last_status_csr(p_khr_id NUMBER) IS
5296 SELECT accrual_status_yn, update_status_yn
5297 FROM OKL_TRX_CONTRACTS
5298 WHERE date_transaction_occurred = (SELECT MAX(date_transaction_occurred)
5299 FROM OKL_TRX_CONTRACTS
5300 WHERE khr_id = p_khr_id
5301 AND tcn_type = l_tcn_type
5302 AND tsu_code = l_tsu_code_ent
5303 AND representation_type = 'PRIMARY') -- MGAAP 7263041
5304 AND tcn_type = l_tcn_type
5305 AND khr_id = p_khr_id
5306 AND tsu_code = l_tsu_code_ent
5307 AND representation_type = 'PRIMARY'; -- MGAAP 7263041
5308
5309 -- Cursor to identify if any accrual activity has occurred
5310 -- bug# 2474969
5311 -- bug# 2852781. Added tsu_code check for rebook error.
5312 CURSOR check_agn_csr(p_khr_id NUMBER) IS
5313 SELECT 'Y'
5314 FROM OKL_TRX_CONTRACTS
5315 WHERE tcn_type = l_tcn_type
5316 AND khr_id = p_khr_id
5317 AND tsu_code = l_tsu_code_ent
5318 AND representation_type = 'PRIMARY'; -- MGAAP 7263041
5319
5320
5321 -- Cursor to select the last interest calculated date
5322 CURSOR last_int_date_csr(p_khr_id NUMBER) IS
5323 SELECT TRUNC(DATE_LAST_INTERIM_INTEREST_CAL)
5324 FROM OKL_K_HEADERS
5325 WHERE ID = p_khr_id;
5326
5327
5328 -- Cursor to select the stream type id for the streams being accrued in case of variable interest rate contracts
5329 --SGIYER. Commenting below. Not needed for User Defined Streams Project.
5330 --CURSOR sty_id_csr(p_sty_name VARCHAR2) IS
5331 --SELECT id
5332 --FROM okl_strm_type_tl
5333 --WHERE name = p_sty_name
5334 --AND language = 'US';
5335
5336 -- Cursor to select currency conversion information
5337 --Bug 3875747
5338 -- Use util to identify rate and not own query
5339 --Commenting below
5340 /*
5341 CURSOR currency_conv_csr(p_conversion_type VARCHAR2, p_from_currency VARCHAR2, p_to_currency VARCHAR2, p_conversion_date DATE) IS
5342 SELECT conversion_rate
5343 FROM GL_DAILY_RATES
5344 WHERE conversion_type = p_conversion_type
5345 AND conversion_date = p_conversion_date
5346 AND from_currency = p_from_currency
5347 AND to_currency = p_to_currency
5348 AND status_code = 'C';
5349 */
5350
5351 -- cursor to check for accrual trx for a given period for variable rate contracts
5352 -- 12/5/05. Bug 4862620. Check for trx with variable interest income only
5353 CURSOR check_variable_trx(p_khr_id NUMBER, p_date DATE) IS
5354 SELECT 'Y'
5355 FROM OKL_TRX_CONTRACTS trx, OKL_TRX_TYPES_V try, OKL_TXL_CNTRCT_LNS txl, OKL_STRM_TYPE_V sty
5356 WHERE trx.khr_id = p_khr_id
5357 AND trx.try_id = try.id
5358 AND try.name = 'Accrual'
5359 --Fixed Bug 5707866 SLA Uptake Project by nikshah, changed tsu_code to PROCESSED from ENTERED
5360 AND trx.tsu_code = 'PROCESSED'
5361 AND TRUNC(last_day(trx.date_transaction_occurred)) = TRUNC(p_date)
5362 AND trx.id = txl.tcn_id
5363 AND txl.sty_id = sty.id
5364 AND sty.stream_type_purpose = 'VARIABLE_INTEREST_INCOME'
5365 AND trx.representation_type = 'PRIMARY';
5366
5367 -- 12/5/05. Bug 4862620. Check for trx with actual income accrual only
5368 -- CURSOR check_actual_trx(p_khr_id NUMBER, p_date DATE) IS
5369 -- SELECT 'Y'
5370 CURSOR check_actual_trx(p_khr_id NUMBER) IS
5371 SELECT TRUNC(MAX(trx.date_transaction_occurred)) last_accrual_date
5372 FROM OKL_TRX_CONTRACTS trx,
5373 OKL_TRX_TYPES_V try,
5374 OKL_TXL_CNTRCT_LNS txl,
5375 OKL_STRM_TYPE_V sty
5376 WHERE trx.khr_id = p_khr_id
5377 AND trx.try_id = try.id
5378 AND try.name = 'Accrual'
5379 --Fixed Bug 5707866 SLA Uptake Project by nikshah, changed tsu_code to PROCESSED from ENTERED
5380 AND trx.tsu_code = 'PROCESSED'
5381 -- AND TRUNC(trx.date_transaction_occurred) = TRUNC(p_date)
5382 AND trx.id = txl.tcn_id
5383 AND txl.sty_id = sty.id
5384 AND sty.stream_type_purpose = 'ACTUAL_INCOME_ACCRUAL'
5385 AND trx.representation_type = 'PRIMARY';
5386
5387 CURSOR get_rev_rec_basis_csr (p_sty_id NUMBER) IS
5388 SELECT accrual_yn
5389 FROM OKL_STRM_TYPE_V
5390 WHERE id = p_sty_id;
5391
5392 l_last_status_csr_v last_status_csr%ROWTYPE;
5393
5394 -- MGAAP start 7263041
5395 CURSOR contract_multigaap_csr (p_contract_id NUMBER) IS
5396 SELECT NVL(a.multi_gaap_yn,'N') multi_gaap_yn,
5397 b.reporting_pdt_id
5398 FROM OKL_K_HEADERS a,
5399 OKL_PRODUCTS b
5400 WHERE a.ID = p_contract_id
5401 AND a.PDT_ID = b.ID;
5402
5403 l_multi_gaap_yn OKL_K_HEADERS.MULTI_GAAP_YN%TYPE;
5404 l_reporting_pdt_id OKL_PRODUCTS.REPORTING_PDT_ID%TYPE;
5405 l_tcnv_tbl_cnt NUMBER;
5406 l_sty_id_rep OKL_STRM_TYPE_V.id%TYPE;
5407 -- MGAAP end 7263041
5408
5409 -- bug 7577628
5410 cursor get_sec_rep_method is
5411 select secondary_rep_method
5412 from okl_sys_acct_opts;
5413
5414 l_sec_rep_method okl_sys_acct_opts.secondary_rep_method%TYPE := null;
5415
5416 BEGIN
5417 WRITE_TO_LOG('');
5418 WRITE_TO_LOG('Inside procedure PROCESS_ACCRUALS');
5419 -- Set save point
5420 l_return_status := Okl_Api.START_ACTIVITY(l_api_name
5421 ,G_PKG_NAME
5422 ,l_init_msg_list
5423 ,l_api_version
5424 ,p_api_version
5425 ,'_PVT'
5426 ,l_return_status);
5427
5428 IF (l_return_status = Okl_Api.G_RET_STS_UNEXP_ERROR) THEN
5429 IF p_process_accrual_rec.submission_mode='BATCH' THEN
5430 FND_FILE.PUT_LINE(FND_FILE.LOG, 'Unexpected error in Start Activity');
5431 END IF;
5432 RAISE Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR;
5433 ELSIF (l_return_Status = Okl_Api.G_RET_STS_ERROR) THEN
5434 IF p_process_accrual_rec.submission_mode='BATCH' THEN
5435 FND_FILE.PUT_LINE(FND_FILE.LOG, 'Error in Start Activity');
5436 END IF;
5437 RAISE Okl_Api.G_EXCEPTION_ERROR;
5438 END IF;
5439
5440 l_contract_id := p_process_accrual_rec.contract_id;
5441 l_contract_number := p_process_accrual_rec.contract_number;
5442 l_sts_code := p_process_accrual_rec.sts_code;
5443 l_product_id := p_process_accrual_rec.product_id;
5444 l_accrual_status := p_process_accrual_rec.accrual_status;
5445 l_override_status := p_process_accrual_rec.override_status;
5446 l_start_date := p_process_accrual_rec.start_date;
5447 l_deal_type := p_process_accrual_rec.deal_type;
5448 l_khr_currency_code := p_process_accrual_rec.khr_currency_code;
5449 l_currency_conv_type := p_process_accrual_rec.currency_conv_type;
5450 l_currency_conv_date := p_process_accrual_rec.currency_conv_date;
5451 l_currency_conv_rate := p_process_accrual_rec.currency_conv_rate;
5452 l_func_currency_code := p_process_accrual_rec.func_currency_code;
5453 l_try_id := p_process_accrual_rec.try_id;
5454 l_reverse_date_to := p_process_accrual_rec.reverse_date_to;
5455 l_sob_id := p_process_accrual_rec.sob_id;
5456 l_accrual_date := p_process_accrual_rec.accrual_date;
5457 l_period_end_date := p_process_accrual_rec.period_end_date;
5458 l_period_start_date := p_process_accrual_rec.period_start_date;
5459 l_rev_rec_method := p_process_accrual_rec.rev_rec_method;
5460
5461 -- Check contract currency against functional currency
5462 IF l_func_currency_code <> l_khr_currency_code THEN
5463 --validate data
5464 IF l_currency_conv_type IS NULL THEN
5465 Okl_Api.set_message(p_app_name => g_app_name,
5466 p_msg_name => 'OKL_AGN_CURR_TYPE_ERROR',
5467 p_token1 => g_contract_number_token,
5468 p_token1_value => l_contract_number);
5469 RAISE Okl_Api.G_EXCEPTION_ERROR;
5470 END IF;
5471 IF l_currency_conv_date IS NULL THEN
5472 Okl_Api.set_message(p_app_name => g_app_name,
5473 p_msg_name => 'OKL_AGN_CURR_DATE_ERROR',
5474 p_token1 => g_contract_number_token,
5475 p_token1_value => l_contract_number);
5476 RAISE Okl_Api.G_EXCEPTION_ERROR;
5477 END IF;
5478 IF l_currency_conv_type = 'User' THEN
5479 IF l_currency_conv_rate IS NULL THEN
5480 Okl_Api.set_message(p_app_name => g_app_name,
5481 p_msg_name => 'OKL_AGN_CURR_USER_RATE_ERROR',
5482 p_token1 => g_contract_number_token,
5483 p_token1_value => l_contract_number);
5484 RAISE Okl_Api.G_EXCEPTION_ERROR;
5485 END IF;
5486 ELSE
5487 --Bug 3875747
5488 -- Use util to identify rate and not own query
5489 l_currency_conv_rate := OKL_ACCOUNTING_UTIL.get_curr_con_rate (p_from_curr_code => l_khr_currency_code,
5490 p_to_curr_code => l_func_currency_code,
5491 p_con_date => l_accrual_date, -- Bug#5410825
5492 p_con_type => l_currency_conv_type);
5493
5494 IF l_currency_conv_rate IS NULL THEN
5495 Okl_Api.set_message(p_app_name => g_app_name,
5496 p_msg_name => 'OKL_AGN_CURR_RATE_ERROR',
5497 p_token1 => 'CONVERSION_TYPE',
5498 p_token1_value => l_currency_conv_type,
5499 p_token2 => 'FROM_CURRENCY',
5500 p_token2_value => l_khr_currency_code,
5501 p_token3 => 'TO_CURRENCY',
5502 p_token3_value => l_func_currency_code
5503 );
5504 RAISE Okl_Api.G_EXCEPTION_ERROR;
5505 END IF;
5506 l_currency_conv_date := l_accrual_date; --Bug 5410825
5507 END IF;
5508 END IF;
5509 -- -- Open cursor to find the billing status of the selected contract
5510 -- -- commenting for bug# 2388940
5511 --
5512 -- OPEN billing_rule_csr(l_contract_id);
5513 -- FETCH billing_rule_csr INTO l_billing_rule_csr_v;
5514 -- IF billing_rule_csr%NOTFOUND THEN
5515 -- CLOSE billing_rule_csr;
5516 -- Okl_Api.set_message(p_app_name => g_app_name,
5517 -- p_msg_name => 'OKL_AGN_BILLING_RULE_ERROR',
5518 -- p_token1 => g_contract_number_token,
5519 -- p_token1_value => l_contract_number);
5520 -- RAISE G_EXCEPTION_HALT_VALIDATION;
5521 -- END IF;
5522 -- IF l_billing_rule_csr_v.object1_id1 = '-3' THEN
5523 -- l_billing_type := 'ARREARS';
5524 -- ELSIF l_billing_rule_csr_v.object1_id1 = '-2' THEN
5525 -- l_billing_type := 'ADVANCE';
5526 -- ELSE
5527 -- -- store SQL error message on message stack for caller
5528 -- Okl_Api.set_message(p_app_name => g_app_name,
5529 -- p_msg_name => 'OKL_AGN_INVALID_BILLING_RULE',
5530 -- p_token1 => g_contract_number_token,
5531 -- p_token1_value => l_contract_number);
5532 -- RAISE G_EXCEPTION_HALT_VALIDATION;
5533 -- END IF;
5534 -- CLOSE billing_rule_csr;
5535 --
5536 -- -- Open cursor to find the interest type of the selected contract
5537 -- -- Deviating from the original logic. Interest rule is not mandatory as per
5538 -- -- discussion with PM and DM. If interest rule has no value then assume contract
5539 -- -- to be fixed interest rate contract. Bug# 2451627
5540 -- OPEN interest_rule_csr(l_contract_id);
5541 -- FETCH interest_rule_csr INTO l_variable_rate;
5542 -- CLOSE interest_rule_csr;
5543 -- -- Changed logic for bug# 2490346
5544 -- -- Rule changed from LAIIND to LAINTP
5545 --
5546 -- --IF interest_rule_csr%NOTFOUND THEN
5547 -- -- commenting for bug# 2451627
5548 -- --CLOSE interest_rule_csr;
5549 -- ---- store SQL error message on message stack for caller
5550 -- --Okl_Api.set_message(p_app_name => g_app_name,
5551 -- -- p_msg_name => 'OKL_AGN_INT_RULE_ERROR',
5552 -- -- p_token1 => g_contract_number_token,
5553 -- -- p_token1_value => l_contract_number);
5554 -- --RAISE G_EXCEPTION_HALT_VALIDATION;
5555 -- --l_interest_fixed := 'N';
5556 -- --END IF;
5557 --
5558 -- -- If variable rate is not defined for a contract, assume contract to be fixed.
5559 -- -- bug 2490346.
5560 -- IF l_variable_rate IS NULL THEN
5561 -- l_variable_rate := 'N';
5562 -- END IF;
5563
5564 -- Open cursor to find out if the contract has had any accrual activity
5565 OPEN check_agn_csr(l_contract_id);
5566 FETCH check_agn_csr INTO l_agn_activity;
5567 CLOSE check_agn_csr;
5568 WRITE_TO_LOG('The value of the Accrual Activity Flag is :'||l_agn_activity);
5569
5570 -- bug 7577628
5571 if l_sec_rep_method is null then
5572 open get_sec_rep_method;
5573 fetch get_sec_rep_method into l_sec_rep_method;
5574 close get_sec_rep_method;
5575 end if;
5576
5577 -- MGAAP start 7263041
5578 OPEN contract_multigaap_csr(l_contract_id);
5579 FETCH contract_multigaap_csr INTO l_multi_gaap_yn, l_reporting_pdt_id;
5580 CLOSE contract_multigaap_csr;
5581
5582 -- bug 7577628
5583 if l_sec_rep_method <> 'AUTOMATED' then
5584 l_multi_gaap_yn := 'N';
5585 end if;
5586
5587 IF (l_multi_gaap_yn = 'Y') THEN
5588 GET_COMMON_INFO (p_accrual_date => p_process_Accrual_rec.accrual_date,
5589 x_try_id => G_TRY_ID,
5590 x_period_name => G_PERIOD_NAME_REP,
5591 x_period_start_date => G_PERIOD_START_DATE_REP,
5592 x_period_end_date => G_PERIOD_END_DATE_REP,
5593 x_sob_id => G_SOB_ID_REP,
5594 x_sob_name => G_SOB_NAME_REP,
5595 x_org_id => G_ORG_ID,
5596 x_org_name => G_ORG_NAME,
5597 x_accrual_reversal_days => G_ACCRUAL_REVERSAL_DAYS,
5598 x_func_currency_code => G_FUNC_CURRENCY_CODE_REP,
5599 x_return_status => l_return_status,
5600 p_representation_type => 'SECONDARY'
5601 );
5602 WRITE_TO_LOG('The parameters returned after the GET_COMMON_INFO call');
5603 WRITE_TO_LOG('======================================================');
5604 WRITE_TO_LOG('Return Status :'||l_return_status);
5605 WRITE_TO_LOG('Transaction Id :'||G_TRY_ID);
5606 WRITE_TO_LOG('Period Name :'||G_period_name_rep);
5607 WRITE_TO_LOG('Period Start Date :'||G_period_start_date_rep);
5608 WRITE_TO_LOG('Period End Date :'||G_period_end_date_rep);
5609 WRITE_TO_LOG('Set Of Books Id :'||G_sob_id_rep);
5610 WRITE_TO_LOG('Set Of Books Name :'||G_sob_name_rep);
5611 WRITE_TO_LOG('Org Id :'||G_org_id);
5612 WRITE_TO_LOG('Org Name :'||G_org_name);
5613 WRITE_TO_LOG('Accrual Rev Days :'||G_accrual_reversal_days);
5614 WRITE_TO_LOG('Func Currency Code:'||G_func_currency_code_rep);
5615
5616 IF (l_return_status <> Okl_Api.G_RET_STS_SUCCESS) THEN
5617 IF (l_return_status = Okl_Api.G_RET_STS_UNEXP_ERROR) THEN
5618 Okl_Api.set_message(p_app_name => g_app_name,
5619 p_msg_name => 'OKL_AGN_COM_INFO_ERROR');
5620 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
5621 ELSIF (l_return_Status = Okl_Api.G_RET_STS_ERROR) THEN
5622 Okl_Api.set_message(p_app_name => g_app_name,
5623 p_msg_name => 'OKL_AGN_COM_INFO_ERROR');
5624 RAISE OKL_API.G_EXCEPTION_ERROR;
5625 END IF;
5626 END IF;
5627 END IF;
5628
5629 -- MGAAP end 7263041
5630
5631 IF l_agn_activity ='Y' THEN
5632 -- There has been accrual activity. So get last status
5633 -- Open cursor to find the previous override status of the selected contract
5634 OPEN last_status_csr(l_contract_id);
5635 FETCH last_status_csr INTO l_previous_accrual_status, l_previous_override_status;
5636 CLOSE last_status_csr;
5637
5638 IF l_previous_accrual_status IS NULL THEN
5639 -- Bug 2852781
5640 Okl_Api.set_message(p_app_name => g_app_name,
5641 p_msg_name => 'OKL_AGN_LAST_STATUS_ERROR',
5642 p_token1 => g_contract_number_token,
5643 p_token1_value => l_contract_number);
5644 RAISE Okl_Api.G_EXCEPTION_ERROR;
5645 END IF;
5646 IF l_previous_override_status IS NULL THEN
5647 -- Bug 2852781
5648 Okl_Api.set_message(p_app_name => g_app_name,
5649 p_msg_name => 'OKL_AGN_LAST_STATUS_ERROR',
5650 p_token1 => g_contract_number_token,
5651 p_token1_value => l_contract_number);
5652 RAISE Okl_Api.G_EXCEPTION_ERROR;
5653 END IF;
5654 ELSE
5655 -- No accrual activity. First run. So assign values from contract header.
5656 l_previous_accrual_status := l_accrual_status;
5657 l_previous_override_status := l_override_status;
5658 END IF;
5659
5660
5661 -- -- Check if contract is syndicated
5662 -- l_return_status := GET_SYNDICATE_FLAG(l_contract_id,l_syndication_flag);
5663 -- IF (l_return_status <> Okl_Api.G_RET_STS_SUCCESS) THEN
5664 -- Okl_Api.set_message(p_app_name => g_app_name,
5665 -- p_msg_name => 'OKL_AGN_FAC_SYND_ERROR',
5666 -- p_token1 => g_contract_number_token,
5667 -- p_token1_value => l_contract_number);
5668 -- RAISE Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR;
5669 -- END IF;
5670 --
5671 -- IF l_syndication_flag = 'Y' THEN
5672 -- l_factoring_synd_flag := 'SYNDICATION';
5673 -- ELSE
5674 -- -- check if contract is factored
5675 -- l_return_status := GET_FACTORING_FLAG(l_contract_id,l_factoring_flag);
5676 -- IF (l_return_status <> Okl_Api.G_RET_STS_SUCCESS) THEN
5677 -- Okl_Api.set_message(p_app_name => g_app_name,
5678 -- p_msg_name => 'OKL_AGN_FAC_SYND_ERROR',
5679 -- p_token1 => g_contract_number_token,
5680 -- p_token1_value => l_contract_number);
5681 -- RAISE Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR;
5682 -- END IF;
5683 -- IF l_factoring_flag = 'Y' THEN
5684 -- l_factoring_synd_flag := 'FACTORING';
5685 -- END IF;
5686 -- END IF;
5687
5688 -- Validate contract against accrual rule and get the result
5689 VALIDATE_ACCRUAL_RULE(x_return_status => l_return_status
5690 ,x_result => l_rule_result
5691 ,p_ctr_id => l_contract_id);
5692 -- store the highest degree of error
5693 IF (l_return_status <> Okl_Api.G_RET_STS_SUCCESS) THEN
5694 Okl_Api.set_message(p_app_name => g_app_name,
5695 p_msg_name => 'OKL_AGN_RULE_VALD_ERROR',
5696 p_token1 => g_contract_number_token,
5697 p_token1_value => l_contract_number);
5698 RAISE Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR;
5699 END IF;
5700
5701 --
5702 -- Commenting for variable rate project. basis has changed.
5703 --
5704 -- IF l_deal_type IN ('LEASEDF','LEASEOP','LEASEST','LOAN','LOAN-REVOLVING') THEN
5705 IF l_rev_rec_method IN ('STREAMS', 'ESTIMATED_AND_BILLED', 'ACTUAL') THEN
5706 --Get the stream amounts for this contract which are subject to accrual rules
5707 -- Bug 4011843. Modified p_accrual_rule_yn value for UDS.
5708 GET_ACCRUAL_STREAMS(x_return_status => l_return_status
5709 ,x_stream_tbl => l_stream_tbl
5710 ,p_khr_id => l_contract_id
5711 ,p_product_id => l_product_id
5712 ,p_ctr_start_date => l_start_date
5713 ,p_period_end_date => l_period_end_date
5714 ,p_accrual_rule_yn => 'ACRL_WITH_RULE');
5715 -- store the highest degree of error
5716 IF (l_return_status <> Okl_Api.G_RET_STS_SUCCESS) THEN
5717 Okl_Api.set_message(p_app_name => g_app_name,
5718 p_msg_name => 'OKL_AGN_STREAM_ERROR',
5719 p_token1 => g_contract_number_token,
5720 p_token1_value => l_contract_number);
5721 RAISE OKL_API.G_EXCEPTION_ERROR;
5722 END IF;
5723
5724 WRITE_TO_LOG('The count of stream elements that need to be accrued for PRIMARY is :'||l_stream_tbl.COUNT);
5725 IF (l_stream_tbl.COUNT = 0)
5726 THEN
5727 WRITE_TO_LOG('There are no stream elements to be accrued');
5728 END IF;
5729
5730 -- MGAAP start 7263041
5731 IF (l_multi_gaap_yn = 'Y') THEN
5732 OKL_STREAMS_SEC_PVT.SET_REPO_STREAMS;
5733 GET_ACCRUAL_STREAMS(x_return_status => l_return_status
5734 ,x_stream_tbl => l_stream_tbl_rep
5735 ,p_khr_id => l_contract_id
5736 ,p_product_id => l_reporting_pdt_id
5737 ,p_ctr_start_date => l_start_date
5738 ,p_period_end_date => G_PERIOD_END_DATE_REP
5739 ,p_accrual_rule_yn => 'ACRL_WITH_RULE');
5740 OKL_STREAMS_SEC_PVT.RESET_REPO_STREAMS;
5741 -- store the highest degree of error
5742 IF (l_return_status <> Okl_Api.G_RET_STS_SUCCESS) THEN
5743 Okl_Api.set_message(p_app_name => g_app_name,
5744 p_msg_name => 'OKL_AGN_STREAM_ERROR',
5745 p_token1 => g_contract_number_token,
5746 p_token1_value => l_contract_number);
5747 RAISE OKL_API.G_EXCEPTION_ERROR;
5748 END IF;
5749
5750 WRITE_TO_LOG('The count of stream elements that need to be accrued for SECONDARY is :'||l_stream_tbl_rep.COUNT);
5751 IF (l_stream_tbl_rep.COUNT = 0)
5752 THEN
5753 WRITE_TO_LOG('There are no stream elements to be accrued');
5754 END IF;
5755 END IF;
5756 -- MGAAP end 7263041
5757
5758 WRITE_TO_LOG('The following are the values for the various flags :');
5759 WRITE_TO_LOG('l_override_status :'||l_override_status);
5760 WRITE_TO_LOG('l_previous_override_status :'||l_previous_override_status);
5761 WRITE_TO_LOG('l_rule_result :'||l_rule_result);
5762 WRITE_TO_LOG('l_previous_accrual_status :'||l_previous_accrual_status);
5763
5764 -- Check the values of the following flags and process accordingly
5765 -- 1. Accrual Override Status
5766 -- 2. Accrual Rule Status
5767 -- 3. Previous Override Status
5768 -- 4. Previous Accrual Status
5769 IF l_override_status = 'N' THEN
5770 IF l_previous_override_status = 'N' THEN
5771 IF l_rule_result = 'Y' THEN
5772 IF l_previous_accrual_status = 'N' THEN
5773 -- Create catch up entries
5774 -- populate the catchup record
5775 l_catchup_rec.contract_id := l_contract_id;
5776 l_catchup_rec.accrual_date := l_accrual_date;
5777 l_catchup_rec.contract_number := l_contract_number;
5778 l_catchup_rec.rule_result := l_rule_result;
5779 l_catchup_rec.override_status := l_override_status;
5780 l_catchup_rec.product_id := l_product_id;
5781 l_catchup_rec.trx_type_id := l_try_id;
5782 l_catchup_rec.advance_arrears := l_billing_type;
5783 l_catchup_rec.factoring_synd_flag := l_factoring_synd_flag;
5784 l_catchup_rec.post_to_gl := 'Y';
5785 l_catchup_rec.gl_reversal_flag := 'N';
5786 l_catchup_rec.memo_yn := 'N';
5787 l_catchup_rec.description := l_batch_name;
5788 l_catchup_rec.accrual_activity := 'CATCH-UP';
5789
5790 -- call the CATCHUP_ACCRUALS procedure
5791 CATCHUP_ACCRUALS(p_api_version => l_api_version,
5792 p_init_msg_list => l_init_msg_list,
5793 x_return_status => l_return_status,
5794 x_msg_count => l_msg_count,
5795 x_msg_data => l_msg_data,
5796 x_rev_tcnv_tbl => l_can_tcnv_tbl,
5797 x_rev_tclv_tbl => l_can_tclv_tbl,
5798 x_catch_tcnv_tbl => l_tcnv_tbl,
5799 x_catch_tclv_tbl => l_tclv_tbl,
5800 p_catchup_rec => l_catchup_rec );
5801 -- store the highest degree of error
5802 IF (l_return_status <> Okl_Api.G_RET_STS_SUCCESS) THEN
5803 IF (l_return_status = Okl_Api.G_RET_STS_UNEXP_ERROR) THEN
5804 -- need to leave
5805 Okl_Api.set_message(p_app_name => g_app_name,
5806 p_msg_name => 'OKL_AGN_CAT_ACR_ERROR',
5807 p_token1 => g_contract_number_token,
5808 p_token1_value => l_contract_number);
5809 -- Select the contract for error reporting
5810 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
5811 ELSIF (l_return_Status = Okl_Api.G_RET_STS_ERROR) THEN
5812 Okl_Api.set_message(p_app_name => g_app_name,
5813 p_msg_name => 'OKL_AGN_CAT_ACR_ERROR',
5814 p_token1 => g_contract_number_token,
5815 p_token1_value => l_contract_number);
5816 RAISE OKL_API.G_EXCEPTION_ERROR;
5817 END IF;
5818 END IF;
5819
5820 --Report content for reversal of non-accrual
5821 IF p_process_accrual_rec.submission_mode='BATCH' THEN
5822 IF l_can_tcnv_tbl.COUNT > 0 THEN
5823 FOR x IN l_can_tcnv_tbl.FIRST..l_can_tcnv_tbl.LAST
5824 LOOP
5825 FND_FILE.PUT_LINE(FND_FILE.OUTPUT,RPAD(l_contract_number,28)||
5826 RPAD(l_can_tcnv_tbl(x).trx_number,22)||
5827 RPAD(FND_MESSAGE.GET_STRING('OKL','OKL_AGN_RPT_REVERSE'),17)||
5828 RPAD(Okl_Accounting_Util.Get_Lookup_Meaning('YES_NO',l_can_tcnv_tbl(x).accrual_status_yn,0,0),20)||
5829 RPAD(Okl_Accounting_Util.Get_Lookup_Meaning('YES_NO',l_can_tcnv_tbl(x).update_status_yn,0,0),16)||
5830 RPAD(l_can_tcnv_tbl(x).currency_code,9)||
5831 LPAD(Okl_Accounting_Util.FORMAT_AMOUNT(l_can_tcnv_tbl(x).amount,l_can_tcnv_tbl(x).currency_code),17) ||
5832 LPAD(Okl_Accounting_Util.Get_Lookup_Meaning('OKL_REPRESENTATION_TYPE','PRIMARY'), 8));
5833 END LOOP;
5834 END IF;
5835
5836 -- Report content for catchup activity
5837 IF l_tcnv_tbl.COUNT > 0 THEN
5838 FOR x IN l_tcnv_tbl.FIRST..l_tcnv_tbl.LAST
5839 LOOP
5840 FND_FILE.PUT_LINE(FND_FILE.OUTPUT,RPAD(l_contract_number,28)||
5841 RPAD(l_tcnv_tbl(x).trx_number,22)||
5842 RPAD(FND_MESSAGE.GET_STRING('OKL','OKL_AGN_RPT_CATCHUP_REVENUE'),17)||
5843 RPAD(Okl_Accounting_Util.Get_Lookup_Meaning('YES_NO',l_tcnv_tbl(x).accrual_status_yn,0,0),20)||
5844 RPAD(Okl_Accounting_Util.Get_Lookup_Meaning('YES_NO',l_tcnv_tbl(x).update_status_yn,0,0),16)||
5845 RPAD(l_tcnv_tbl(x).currency_code,9)||
5846 LPAD(Okl_Accounting_Util.FORMAT_AMOUNT(l_tcnv_tbl(x).amount,l_tcnv_tbl(x).currency_code),17) ||
5847 LPAD(Okl_Accounting_Util.Get_Lookup_Meaning('OKL_REPRESENTATION_TYPE','PRIMARY'), 8));
5848 END LOOP;
5849 END IF;
5850 END IF; -- if p_process_accrual_rec.submission_mode...
5851
5852 -- MGAAP start 7263041
5853 IF (l_multi_gaap_yn = 'Y') THEN
5854 -- call the CATCHUP_ACCRUALS procedure for SECONDARY
5855 l_catchup_rec.product_id := l_reporting_pdt_id;
5856 CATCHUP_ACCRUALS(p_api_version => l_api_version,
5857 p_init_msg_list => l_init_msg_list,
5858 x_return_status => l_return_status,
5859 x_msg_count => l_msg_count,
5860 x_msg_data => l_msg_data,
5861 x_rev_tcnv_tbl => l_can_tcnv_tbl,
5862 x_rev_tclv_tbl => l_can_tclv_tbl,
5863 x_catch_tcnv_tbl => l_tcnv_tbl,
5864 x_catch_tclv_tbl => l_tclv_tbl,
5865 p_catchup_rec => l_catchup_rec ,
5866 p_representation_type => 'SECONDARY' );
5867 -- store the highest degree of error
5868 IF (l_return_status <> Okl_Api.G_RET_STS_SUCCESS) THEN
5869 IF (l_return_status = Okl_Api.G_RET_STS_UNEXP_ERROR) THEN
5870 -- need to leave
5871 Okl_Api.set_message(p_app_name => g_app_name,
5872 p_msg_name => 'OKL_AGN_CAT_ACR_ERROR',
5873 p_token1 => g_contract_number_token,
5874 p_token1_value => l_contract_number);
5875 -- Select the contract for error reporting
5876 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
5877 ELSIF (l_return_Status = Okl_Api.G_RET_STS_ERROR) THEN
5878 Okl_Api.set_message(p_app_name => g_app_name,
5879 p_msg_name => 'OKL_AGN_CAT_ACR_ERROR',
5880 p_token1 => g_contract_number_token,
5881 p_token1_value => l_contract_number);
5882 RAISE OKL_API.G_EXCEPTION_ERROR;
5883 END IF;
5884 END IF;
5885
5886 --Report content for reversal of non-accrual
5887 IF p_process_accrual_rec.submission_mode='BATCH' THEN
5888 IF l_can_tcnv_tbl.COUNT > 0 THEN
5889 FOR x IN l_can_tcnv_tbl.FIRST..l_can_tcnv_tbl.LAST
5890 LOOP
5891 FND_FILE.PUT_LINE(FND_FILE.OUTPUT,RPAD(l_contract_number,28)||
5892 RPAD(l_can_tcnv_tbl(x).trx_number,22)||
5893 RPAD(FND_MESSAGE.GET_STRING('OKL','OKL_AGN_RPT_REVERSE'),17)||
5894 RPAD(Okl_Accounting_Util.Get_Lookup_Meaning('YES_NO',l_can_tcnv_tbl(x).accrual_status_yn,0,0),20)||
5895 RPAD(Okl_Accounting_Util.Get_Lookup_Meaning('YES_NO',l_can_tcnv_tbl(x).update_status_yn,0,0),16)||
5896 RPAD(l_can_tcnv_tbl(x).currency_code,9)||
5897 LPAD(Okl_Accounting_Util.FORMAT_AMOUNT(l_can_tcnv_tbl(x).amount,l_can_tcnv_tbl(x).currency_code),17) ||
5898 LPAD(Okl_Accounting_Util.Get_Lookup_Meaning('OKL_REPRESENTATION_TYPE','SECONDARY'), 10));
5899 END LOOP;
5900 END IF;
5901
5902 -- Report content for catchup activity
5903 IF l_tcnv_tbl.COUNT > 0 THEN
5904 FOR x IN l_tcnv_tbl.FIRST..l_tcnv_tbl.LAST
5905 LOOP
5906 FND_FILE.PUT_LINE(FND_FILE.OUTPUT,RPAD(l_contract_number,28)||
5907 RPAD(l_tcnv_tbl(x).trx_number,22)||
5908 RPAD(FND_MESSAGE.GET_STRING('OKL','OKL_AGN_RPT_CATCHUP_REVENUE'),17)||
5909 RPAD(Okl_Accounting_Util.Get_Lookup_Meaning('YES_NO',l_tcnv_tbl(x).accrual_status_yn,0,0),20)||
5910 RPAD(Okl_Accounting_Util.Get_Lookup_Meaning('YES_NO',l_tcnv_tbl(x).update_status_yn,0,0),16)||
5911 RPAD(l_tcnv_tbl(x).currency_code,9)||
5912 LPAD(Okl_Accounting_Util.FORMAT_AMOUNT(l_tcnv_tbl(x).amount,l_tcnv_tbl(x).currency_code),17) ||
5913 LPAD(Okl_Accounting_Util.Get_Lookup_Meaning('OKL_REPRESENTATION_TYPE','SECONDARY'), 10));
5914 END LOOP;
5915 END IF;
5916 END IF; -- if p_process_accrual_rec.submission_mode...
5917 END IF;
5918 G_trx_number_tbl.DELETE;
5919 -- MGAAP end 7263041
5920
5921 END IF;
5922 --Create Revenue Entries
5923 l_tcnv_rec.trx_number := null; -- Bug 7555143
5924 l_tcnv_rec.ID := null;
5925 IF l_stream_tbl.COUNT > 0 THEN
5926 -- Calculate total amount for transaction header
5927 FOR i IN l_stream_tbl.FIRST..l_stream_tbl.LAST
5928 LOOP
5929 l_total := l_total + l_stream_tbl(i).stream_amount;
5930 END LOOP;
5931 -- Build the accrual record
5932 l_accrual_rec.contract_id := l_contract_id;
5933 l_accrual_rec.set_of_books_id := l_sob_id;
5934 l_accrual_rec.accrual_date := l_accrual_date;
5935 l_accrual_rec.trx_date := l_accrual_date;
5936 l_accrual_rec.contract_number := l_contract_number;
5937 l_accrual_rec.rule_result := l_rule_result;
5938 l_accrual_rec.override_status := l_override_status;
5939 l_accrual_rec.description := l_batch_name;
5940 l_accrual_rec.amount := l_total;
5941 l_accrual_rec.currency_code := l_khr_currency_code;
5942 l_accrual_rec.currency_conversion_type := l_currency_conv_type;
5943 l_accrual_rec.currency_conversion_rate := l_currency_conv_rate;
5944 l_accrual_rec.currency_conversion_date := l_currency_conv_date;
5945 l_accrual_rec.product_id := l_product_id;
5946 l_accrual_rec.trx_type_id := l_try_id;
5947 l_accrual_rec.advance_arrears := l_billing_type;
5948 l_accrual_rec.factoring_synd_flag := l_factoring_synd_flag;
5949 l_accrual_rec.post_to_gl := 'Y';
5950 l_accrual_rec.gl_reversal_flag := 'N';
5951 l_accrual_rec.memo_yn := 'N';
5952 l_accrual_rec.accrual_activity := 'ACCRUAL';
5953 l_accrual_rec.accrual_rule_yn := 'Y';
5954
5955 -- rmunjulu bug 6736148 -- start
5956 l_accrual_rec.source_trx_id := p_process_accrual_rec.source_trx_id;
5957 l_accrual_rec.source_trx_type := p_process_accrual_rec.source_trx_type;
5958 -- rmunjulu bug 6736148 -- end
5959
5960 -- Call CREATE_ACCRUAL procedure to create accrual transactions and entries
5961 CREATE_ACCRUALS (
5962 p_api_version => l_api_version,
5963 p_init_msg_list => l_init_msg_list,
5964 x_return_status => l_return_status,
5965 x_msg_count => l_msg_count,
5966 x_msg_data => l_msg_data,
5967 x_tcnv_rec => l_tcnv_rec,
5968 x_tclv_tbl => l_tclv_tbl,
5969 p_accrual_rec => l_accrual_rec,
5970 p_stream_tbl => l_stream_tbl);
5971
5972 -- store the highest degree of error
5973 IF (l_return_status <> Okl_Api.G_RET_STS_SUCCESS) THEN
5974 IF (l_return_status = Okl_Api.G_RET_STS_UNEXP_ERROR) THEN
5975 -- need to leave
5976 Okl_Api.set_message(p_app_name => g_app_name,
5977 p_msg_name => 'OKL_AGN_CRE_ACR_ERROR',
5978 p_token1 => g_contract_number_token,
5979 p_token1_value => l_contract_number);
5980 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
5981 ELSIF (l_return_Status = Okl_Api.G_RET_STS_ERROR) THEN
5982 Okl_Api.set_message(p_app_name => g_app_name,
5983 p_msg_name => 'OKL_AGN_CRE_ACR_ERROR',
5984 p_token1 => g_contract_number_token,
5985 p_token1_value => l_contract_number);
5986 RAISE OKL_API.G_EXCEPTION_ERROR;
5987 END IF;
5988 END IF;
5989 IF p_process_accrual_rec.submission_mode='BATCH' THEN
5990 FND_FILE.PUT_LINE(FND_FILE.OUTPUT,RPAD(l_contract_number,28)||
5991 RPAD(l_tcnv_rec.trx_number,22)||
5992 RPAD(FND_MESSAGE.GET_STRING('OKL','OKL_AGN_RPT_REVENUE'),17)||
5993 RPAD(Okl_Accounting_Util.Get_Lookup_Meaning('YES_NO',l_tcnv_rec.accrual_status_yn,0,0),20)||
5994 RPAD(Okl_Accounting_Util.Get_Lookup_Meaning('YES_NO',l_tcnv_rec.update_status_yn,0,0),16)||
5995 RPAD(l_tcnv_rec.currency_code,9)||
5996 LPAD(Okl_Accounting_Util.FORMAT_AMOUNT(l_tcnv_rec.amount,l_tcnv_rec.currency_code),17) ||
5997 LPAD(Okl_Accounting_Util.Get_Lookup_Meaning('OKL_REPRESENTATION_TYPE','PRIMARY'), 8));
5998 END IF;
5999
6000 END IF; -- IF l_stream_tbl.COUNT >0
6001
6002 -- MGAAP start 7263041
6003 --Create Revenue Entries
6004 IF l_stream_tbl_rep.COUNT > 0 THEN
6005 -- Calculate total amount for transaction header
6006 l_total := 0;
6007 FOR i IN l_stream_tbl_rep.FIRST..l_stream_tbl_rep.LAST
6008 LOOP
6009 l_total := l_total + l_stream_tbl_rep(i).stream_amount;
6010 END LOOP;
6011 -- Build the accrual record
6012 l_accrual_rec.contract_id := l_contract_id;
6013 l_accrual_rec.set_of_books_id := G_sob_id_rep;
6014 l_accrual_rec.accrual_date := l_accrual_date;
6015 l_accrual_rec.trx_date := l_accrual_date;
6016 l_accrual_rec.contract_number := l_contract_number;
6017 l_accrual_rec.rule_result := l_rule_result;
6018 l_accrual_rec.override_status := l_override_status;
6019 l_accrual_rec.description := l_batch_name;
6020 l_accrual_rec.amount := l_total;
6021 l_accrual_rec.currency_code := l_khr_currency_code;
6022 l_accrual_rec.currency_conversion_type := l_currency_conv_type;
6023 l_accrual_rec.currency_conversion_rate := l_currency_conv_rate;
6024 l_accrual_rec.currency_conversion_date := l_currency_conv_date;
6025 l_accrual_rec.product_id := l_reporting_pdt_id;
6026 l_accrual_rec.trx_type_id := l_try_id;
6027 l_accrual_rec.advance_arrears := l_billing_type;
6028 l_accrual_rec.factoring_synd_flag := l_factoring_synd_flag;
6029 l_accrual_rec.post_to_gl := 'Y';
6030 l_accrual_rec.gl_reversal_flag := 'N';
6031 l_accrual_rec.memo_yn := 'N';
6032 l_accrual_rec.accrual_activity := 'ACCRUAL';
6033 l_accrual_rec.accrual_rule_yn := 'Y';
6034 l_accrual_rec.trx_number := l_tcnv_rec.trx_number;
6035 l_accrual_rec.primary_rep_trx_id := l_tcnv_rec.ID;
6036
6037 -- rmunjulu bug 6736148 -- start
6038 l_accrual_rec.source_trx_id := p_process_accrual_rec.source_trx_id;
6039 l_accrual_rec.source_trx_type := p_process_accrual_rec.source_trx_type;
6040 -- rmunjulu bug 6736148 -- end
6041
6042 -- Call CREATE_ACCRUAL procedure to create accrual transactions and entries
6043 CREATE_ACCRUALS (
6044 p_api_version => l_api_version,
6045 p_init_msg_list => l_init_msg_list,
6046 x_return_status => l_return_status,
6047 x_msg_count => l_msg_count,
6048 x_msg_data => l_msg_data,
6049 x_tcnv_rec => l_tcnv_rec,
6050 x_tclv_tbl => l_tclv_tbl,
6051 p_accrual_rec => l_accrual_rec,
6052 p_stream_tbl => l_stream_tbl_rep,
6053 p_representation_type => 'SECONDARY'); --MGAAP
6054
6055 -- store the highest degree of error
6056 IF (l_return_status <> Okl_Api.G_RET_STS_SUCCESS) THEN
6057 IF (l_return_status = Okl_Api.G_RET_STS_UNEXP_ERROR) THEN
6058 -- need to leave
6059 Okl_Api.set_message(p_app_name => g_app_name,
6060 p_msg_name => 'OKL_AGN_CRE_ACR_ERROR',
6061 p_token1 => g_contract_number_token,
6062 p_token1_value => l_contract_number);
6063 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
6064 ELSIF (l_return_Status = Okl_Api.G_RET_STS_ERROR) THEN
6065 Okl_Api.set_message(p_app_name => g_app_name,
6066 p_msg_name => 'OKL_AGN_CRE_ACR_ERROR',
6067 p_token1 => g_contract_number_token,
6068 p_token1_value => l_contract_number);
6069 RAISE OKL_API.G_EXCEPTION_ERROR;
6070 END IF;
6071 END IF;
6072 IF p_process_accrual_rec.submission_mode='BATCH' THEN
6073 FND_FILE.PUT_LINE(FND_FILE.OUTPUT,RPAD(l_contract_number,28)||
6074 RPAD(l_tcnv_rec.trx_number,22)||
6075 RPAD(FND_MESSAGE.GET_STRING('OKL','OKL_AGN_RPT_REVENUE'),17)||
6076 RPAD(Okl_Accounting_Util.Get_Lookup_Meaning('YES_NO',l_tcnv_rec.accrual_status_yn,0,0),20)||
6077 RPAD(Okl_Accounting_Util.Get_Lookup_Meaning('YES_NO',l_tcnv_rec.update_status_yn,0,0),16)||
6078 RPAD(l_tcnv_rec.currency_code,9)||
6079 LPAD(Okl_Accounting_Util.FORMAT_AMOUNT(l_tcnv_rec.amount,l_tcnv_rec.currency_code),17) ||
6080 LPAD(Okl_Accounting_Util.Get_Lookup_Meaning('OKL_REPRESENTATION_TYPE','SECONDARY'), 10));
6081 END IF;
6082
6083 END IF; -- IF l_stream_tbl_rep.COUNT >0
6084 -- MGAAP end 7263041
6085
6086 ELSE
6087 IF l_previous_accrual_status = 'Y' THEN
6088 -- populate the reverse record
6089 l_reverse_rec.contract_id := l_contract_id;
6090 l_reverse_rec.reverse_date_to := l_reverse_date_to;
6091 l_reverse_rec.accrual_date := l_accrual_date;
6092 l_reverse_rec.contract_number := l_contract_number;
6093 l_reverse_rec.rule_result := l_rule_result;
6094 l_reverse_rec.override_status := l_override_status;
6095 l_reverse_rec.product_id := l_product_id;
6096 l_reverse_rec.trx_type_id := l_try_id;
6097 l_reverse_rec.advance_arrears := l_billing_type;
6098 l_reverse_rec.factoring_synd_flag := l_factoring_synd_flag;
6099 l_reverse_rec.post_to_gl := 'Y';
6100 l_reverse_rec.gl_reversal_flag := 'N';
6101 l_reverse_rec.memo_yn := 'Y';
6102 l_reverse_rec.description := l_batch_name;
6103 l_reverse_rec.accrual_activity := 'REVERSAL';
6104
6105 -- call the REVERSE_ACCRUALS procedure
6106 REVERSE_ACCRUALS(p_api_version => l_api_version,
6107 p_init_msg_list => l_init_msg_list,
6108 x_return_status => l_return_status,
6109 x_msg_count => l_msg_count,
6110 x_msg_data => l_msg_data,
6111 x_rev_tcnv_tbl => l_can_tcnv_tbl,
6112 x_rev_tclv_tbl => l_can_tclv_tbl,
6113 x_memo_tcnv_tbl => l_tcnv_tbl,
6114 x_memo_tclv_tbl => l_tclv_tbl,
6115 p_reverse_rec => l_reverse_rec );
6116 -- store the highest degree of error
6117 IF (l_return_status <> Okl_Api.G_RET_STS_SUCCESS) THEN
6118 IF (l_return_status = Okl_Api.G_RET_STS_UNEXP_ERROR) THEN
6119 -- need to leave
6120 Okl_Api.set_message(p_app_name => g_app_name,
6121 p_msg_name => 'OKL_AGN_REV_ACR_ERROR',
6122 p_token1 => g_contract_number_token,
6123 p_token1_value => l_contract_number);
6124 -- Select the contract for error reporting
6125 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
6126 ELSIF (l_return_Status = Okl_Api.G_RET_STS_ERROR) THEN
6127 Okl_Api.set_message(p_app_name => g_app_name,
6128 p_msg_name => 'OKL_AGN_REV_ACR_ERROR',
6129 p_token1 => g_contract_number_token,
6130 p_token1_value => l_contract_number);
6131 RAISE OKL_API.G_EXCEPTION_ERROR;
6132 END IF;
6133 END IF;
6134 -- Report Content for reverse accruals
6135 IF p_process_accrual_rec.submission_mode='BATCH' THEN
6136 IF l_can_tcnv_tbl.COUNT > 0 THEN
6137 FOR x IN l_can_tcnv_tbl.FIRST..l_can_tcnv_tbl.LAST
6138 LOOP
6139 FND_FILE.PUT_LINE(FND_FILE.OUTPUT,RPAD(l_contract_number,28)||
6140 RPAD(l_can_tcnv_tbl(x).trx_number,22)||
6141 RPAD(FND_MESSAGE.GET_STRING('OKL','OKL_AGN_RPT_REVERSE'),17)||
6142 RPAD(Okl_Accounting_Util.Get_Lookup_Meaning('YES_NO',l_can_tcnv_tbl(x).accrual_status_yn,0,0),20)||
6143 RPAD(Okl_Accounting_Util.Get_Lookup_Meaning('YES_NO',l_can_tcnv_tbl(x).update_status_yn,0,0),16)||
6144 RPAD(l_can_tcnv_tbl(x).currency_code,9)||
6145 LPAD(Okl_Accounting_Util.FORMAT_AMOUNT(l_can_tcnv_tbl(x).amount,l_can_tcnv_tbl(x).currency_code),17) ||
6146 LPAD(Okl_Accounting_Util.Get_Lookup_Meaning('OKL_REPRESENTATION_TYPE','PRIMARY'), 8));
6147 END LOOP;
6148 END IF; --IF l_can_tcnv_tbl.COUNT > 0 THEN
6149
6150 -- Report Content for non-accruals
6151 IF l_tcnv_tbl.COUNT > 0 THEN
6152 FOR x IN l_tcnv_tbl.FIRST..l_tcnv_tbl.LAST
6153 LOOP
6154 FND_FILE.PUT_LINE(FND_FILE.OUTPUT,RPAD(l_contract_number,28)||
6155 RPAD(l_tcnv_tbl(x).trx_number,22)||
6156 RPAD(FND_MESSAGE.GET_STRING('OKL','OKL_AGN_RPT_NON_REVENUE'),17)||
6157 RPAD(Okl_Accounting_Util.Get_Lookup_Meaning('YES_NO',l_tcnv_tbl(x).accrual_status_yn,0,0),20)||
6158 RPAD(Okl_Accounting_Util.Get_Lookup_Meaning('YES_NO',l_tcnv_tbl(x).update_status_yn,0,0),16)||
6159 RPAD(l_tcnv_tbl(x).currency_code,9)||
6160 LPAD(Okl_Accounting_Util.FORMAT_AMOUNT(l_tcnv_tbl(x).amount,l_tcnv_tbl(x).currency_code),17) ||
6161 LPAD(Okl_Accounting_Util.Get_Lookup_Meaning('OKL_REPRESENTATION_TYPE','PRIMARY'), 8));
6162 END LOOP;
6163 END IF; --IF l_tcnv_tbl.COUNT > 0 THEN
6164 END IF; -- if p_process_accrual_rec.submission_mode = 'BATCH'
6165
6166 -- MGAAP start 7263041
6167 IF (l_multi_gaap_yn = 'Y') THEN
6168 -- call the REVERSE_ACCRUALS procedure for SECONDARY
6169 l_reverse_rec.product_id := l_reporting_pdt_id;
6170 /*l_tcnv_tbl_cnt := l_tcnv_tbl.count;
6171 l_reverse_rec.trx_number := l_tcnv_tbl(l_tcnv_tbl_cnt).trx_number;
6172 l_reverse_rec.primary_rep_trx_id := l_tcnv_tbl(l_tcnv_tbl_cnt).ID;*/
6173 REVERSE_ACCRUALS(p_api_version => l_api_version,
6174 p_init_msg_list => l_init_msg_list,
6175 x_return_status => l_return_status,
6176 x_msg_count => l_msg_count,
6177 x_msg_data => l_msg_data,
6178 x_rev_tcnv_tbl => l_can_tcnv_tbl,
6179 x_rev_tclv_tbl => l_can_tclv_tbl,
6180 x_memo_tcnv_tbl => l_tcnv_tbl,
6181 x_memo_tclv_tbl => l_tclv_tbl,
6182 p_reverse_rec => l_reverse_rec,
6183 p_representation_type => 'SECONDARY' );
6184 -- store the highest degree of error
6185 IF (l_return_status <> Okl_Api.G_RET_STS_SUCCESS) THEN
6186 IF (l_return_status = Okl_Api.G_RET_STS_UNEXP_ERROR) THEN
6187 -- need to leave
6188 Okl_Api.set_message(p_app_name => g_app_name,
6189 p_msg_name => 'OKL_AGN_REV_ACR_ERROR',
6190 p_token1 => g_contract_number_token,
6191 p_token1_value => l_contract_number);
6192 -- Select the contract for error reporting
6193 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
6194 ELSIF (l_return_Status = Okl_Api.G_RET_STS_ERROR) THEN
6195 Okl_Api.set_message(p_app_name => g_app_name,
6196 p_msg_name => 'OKL_AGN_REV_ACR_ERROR',
6197 p_token1 => g_contract_number_token,
6198 p_token1_value => l_contract_number);
6199 RAISE OKL_API.G_EXCEPTION_ERROR;
6200 END IF;
6201 END IF;
6202 -- Report Content for reverse accruals
6203 IF p_process_accrual_rec.submission_mode='BATCH' THEN
6204 IF l_can_tcnv_tbl.COUNT > 0 THEN
6205 FOR x IN l_can_tcnv_tbl.FIRST..l_can_tcnv_tbl.LAST
6206 LOOP
6207 FND_FILE.PUT_LINE(FND_FILE.OUTPUT,RPAD(l_contract_number,28)||
6208 RPAD(l_can_tcnv_tbl(x).trx_number,22)||
6209 RPAD(FND_MESSAGE.GET_STRING('OKL','OKL_AGN_RPT_REVERSE'),17)||
6210 RPAD(Okl_Accounting_Util.Get_Lookup_Meaning('YES_NO',l_can_tcnv_tbl(x).accrual_status_yn,0,0),20)||
6211 RPAD(Okl_Accounting_Util.Get_Lookup_Meaning('YES_NO',l_can_tcnv_tbl(x).update_status_yn,0,0),16)||
6212 RPAD(l_can_tcnv_tbl(x).currency_code,9)||
6213 LPAD(Okl_Accounting_Util.FORMAT_AMOUNT(l_can_tcnv_tbl(x).amount,l_can_tcnv_tbl(x).currency_code),17) ||
6214 LPAD(Okl_Accounting_Util.Get_Lookup_Meaning('OKL_REPRESENTATION_TYPE','SECONDARY'), 10));
6215 END LOOP;
6216 END IF; --IF l_can_tcnv_tbl.COUNT > 0 THEN
6217
6218 -- Report Content for non-accruals
6219 IF l_tcnv_tbl.COUNT > 0 THEN
6220 FOR x IN l_tcnv_tbl.FIRST..l_tcnv_tbl.LAST
6221 LOOP
6222 FND_FILE.PUT_LINE(FND_FILE.OUTPUT,RPAD(l_contract_number,28)||
6223 RPAD(l_tcnv_tbl(x).trx_number,22)||
6224 RPAD(FND_MESSAGE.GET_STRING('OKL','OKL_AGN_RPT_NON_REVENUE'),17)||
6225 RPAD(Okl_Accounting_Util.Get_Lookup_Meaning('YES_NO',l_tcnv_tbl(x).accrual_status_yn,0,0),20)||
6226 RPAD(Okl_Accounting_Util.Get_Lookup_Meaning('YES_NO',l_tcnv_tbl(x).update_status_yn,0,0),16)||
6227 RPAD(l_tcnv_tbl(x).currency_code,9)||
6228 LPAD(Okl_Accounting_Util.FORMAT_AMOUNT(l_tcnv_tbl(x).amount,l_tcnv_tbl(x).currency_code),17) ||
6229 LPAD(Okl_Accounting_Util.Get_Lookup_Meaning('OKL_REPRESENTATION_TYPE','SECONDARY'), 10));
6230 END LOOP;
6231 END IF; --IF l_tcnv_tbl.COUNT > 0 THEN
6232 END IF; -- if p_process_accrual_rec.submission_mode = 'BATCH'
6233
6234 END IF;
6235 G_trx_number_tbl.DELETE;
6236 -- MGAAP end 7263041
6237 END IF;
6238 -- Create Memo Entries
6239 l_tcnv_rec.trx_number := null; -- Bug 7555143
6240 l_tcnv_rec.ID := null;
6241 IF l_stream_tbl.COUNT > 0 THEN
6242 -- Calculate total amount for transaction header
6243 FOR i IN l_stream_tbl.FIRST..l_stream_tbl.LAST
6244 LOOP
6245 l_total := l_total + l_stream_tbl(i).stream_amount;
6246 END LOOP;
6247 -- Build the accrual record
6248 l_accrual_rec.contract_id := l_contract_id;
6249 l_accrual_rec.set_of_books_id := l_sob_id;
6250 l_accrual_rec.accrual_date := l_accrual_date;
6251 l_accrual_rec.trx_date := l_accrual_date;
6252 l_accrual_rec.contract_number := l_contract_number;
6253 l_accrual_rec.rule_result := l_rule_result;
6254 l_accrual_rec.override_status := l_override_status;
6255 l_accrual_rec.description := l_batch_name;
6256 l_accrual_rec.amount := l_total;
6257 l_accrual_rec.currency_code := l_khr_currency_code;
6258 l_accrual_rec.currency_conversion_type := l_currency_conv_type;
6259 l_accrual_rec.currency_conversion_rate := l_currency_conv_rate;
6260 l_accrual_rec.currency_conversion_date := l_currency_conv_date;
6261 l_accrual_rec.product_id := l_product_id;
6262 l_accrual_rec.trx_type_id := l_try_id;
6263 l_accrual_rec.advance_arrears := l_billing_type;
6264 l_accrual_rec.factoring_synd_flag := l_factoring_synd_flag;
6265 l_accrual_rec.post_to_gl := 'Y';
6266 l_accrual_rec.gl_reversal_flag := 'N';
6267 l_accrual_rec.memo_yn := 'Y';
6268 l_accrual_rec.accrual_activity := 'NON-ACCRUAL';
6269 l_accrual_rec.accrual_rule_yn := 'Y';
6270
6271 -- rmunjulu bug 6736148 -- start
6272 l_accrual_rec.source_trx_id := p_process_accrual_rec.source_trx_id;
6273 l_accrual_rec.source_trx_type := p_process_accrual_rec.source_trx_type;
6274 -- rmunjulu bug 6736148 -- end
6275
6276 WRITE_TO_LOG('Before calling CREATE_ACCRUALS');
6277 -- Call CREATE_ACCRUAL procedure to create accrual transactions and entries
6278 CREATE_ACCRUALS (
6279 p_api_version => l_api_version,
6280 p_init_msg_list => l_init_msg_list,
6281 x_return_status => l_return_status,
6282 x_msg_count => l_msg_count,
6283 x_msg_data => l_msg_data,
6284 x_tcnv_rec => l_tcnv_rec,
6285 x_tclv_tbl => l_tclv_tbl,
6286 p_accrual_rec => l_accrual_rec,
6287 p_stream_tbl => l_stream_tbl);
6288
6289 -- store the highest degree of error
6290 IF (l_return_status <> Okl_Api.G_RET_STS_SUCCESS) THEN
6291 IF (l_return_status = Okl_Api.G_RET_STS_UNEXP_ERROR) THEN
6292 -- need to leave
6293 Okl_Api.set_message(p_app_name => g_app_name,
6294 p_msg_name => 'OKL_AGN_CRE_ACR_ERROR',
6295 p_token1 => g_contract_number_token,
6296 p_token1_value => l_contract_number);
6297 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
6298 ELSIF (l_return_Status = Okl_Api.G_RET_STS_ERROR) THEN
6299 Okl_Api.set_message(p_app_name => g_app_name,
6300 p_msg_name => 'OKL_AGN_CRE_ACR_ERROR',
6301 p_token1 => g_contract_number_token,
6302 p_token1_value => l_contract_number);
6303 RAISE OKL_API.G_EXCEPTION_ERROR;
6304 END IF;
6305 END IF;
6306
6307 IF p_process_accrual_rec.submission_mode='BATCH' THEN
6308 FND_FILE.PUT_LINE(FND_FILE.OUTPUT,RPAD(l_contract_number,28)||
6309 RPAD(l_tcnv_rec.trx_number,22)||
6310 RPAD(FND_MESSAGE.GET_STRING('OKL','OKL_AGN_RPT_NON_REVENUE'),17)||
6311 RPAD(Okl_Accounting_Util.Get_Lookup_Meaning('YES_NO',l_tcnv_rec.accrual_status_yn,0,0),20)||
6312 RPAD(Okl_Accounting_Util.Get_Lookup_Meaning('YES_NO',l_tcnv_rec.update_status_yn,0,0),16)||
6313 RPAD(l_tcnv_rec.currency_code,9)||
6314 LPAD(Okl_Accounting_Util.FORMAT_AMOUNT(l_tcnv_rec.amount,l_tcnv_rec.currency_code),17) ||
6315 LPAD(Okl_Accounting_Util.Get_Lookup_Meaning('OKL_REPRESENTATION_TYPE','PRIMARY'), 8));
6316 END IF; -- if p_process_accrual_rec.submission_mode ....
6317 END IF; -- IF l_stream_tbl.COUNT > 0
6318 -- MGAAP start 7263041
6319 IF l_stream_tbl_rep.COUNT > 0 THEN
6320 -- Calculate total amount for transaction header
6321 l_total := 0;
6322 FOR i IN l_stream_tbl_rep.FIRST..l_stream_tbl_rep.LAST
6323 LOOP
6324 l_total := l_total + l_stream_tbl_rep(i).stream_amount;
6325 END LOOP;
6326 -- Build the accrual record
6327 l_accrual_rec.contract_id := l_contract_id;
6328 l_accrual_rec.set_of_books_id := G_SOB_ID_REP;
6329 l_accrual_rec.accrual_date := l_accrual_date;
6330 l_accrual_rec.trx_date := l_accrual_date;
6331 l_accrual_rec.contract_number := l_contract_number;
6332 l_accrual_rec.rule_result := l_rule_result;
6333 l_accrual_rec.override_status := l_override_status;
6334 l_accrual_rec.description := l_batch_name;
6335 l_accrual_rec.amount := l_total;
6336 l_accrual_rec.currency_code := l_khr_currency_code;
6337 l_accrual_rec.currency_conversion_type := l_currency_conv_type;
6338 l_accrual_rec.currency_conversion_rate := l_currency_conv_rate;
6339 l_accrual_rec.currency_conversion_date := l_currency_conv_date;
6340 l_accrual_rec.product_id := l_reporting_pdt_id;
6341 l_accrual_rec.trx_type_id := l_try_id;
6342 l_accrual_rec.advance_arrears := l_billing_type;
6343 l_accrual_rec.factoring_synd_flag := l_factoring_synd_flag;
6344 l_accrual_rec.post_to_gl := 'Y';
6345 l_accrual_rec.gl_reversal_flag := 'N';
6346 l_accrual_rec.memo_yn := 'Y';
6347 l_accrual_rec.accrual_activity := 'NON-ACCRUAL';
6348 l_accrual_rec.accrual_rule_yn := 'Y';
6349 l_accrual_rec.trx_number := l_tcnv_rec.trx_number;
6350 l_accrual_rec.primary_rep_trx_id := l_tcnv_rec.ID;
6351
6352 -- rmunjulu bug 6736148 -- start
6353 l_accrual_rec.source_trx_id := p_process_accrual_rec.source_trx_id;
6354 l_accrual_rec.source_trx_type := p_process_accrual_rec.source_trx_type;
6355 -- rmunjulu bug 6736148 -- end
6356
6357 WRITE_TO_LOG('Before calling CREATE_ACCRUALS');
6358 -- Call CREATE_ACCRUAL procedure to create accrual transactions and entries
6359 CREATE_ACCRUALS (
6360 p_api_version => l_api_version,
6361 p_init_msg_list => l_init_msg_list,
6362 x_return_status => l_return_status,
6363 x_msg_count => l_msg_count,
6364 x_msg_data => l_msg_data,
6365 x_tcnv_rec => l_tcnv_rec,
6366 x_tclv_tbl => l_tclv_tbl,
6367 p_accrual_rec => l_accrual_rec,
6368 p_stream_tbl => l_stream_tbl_rep,
6369 p_representation_type => 'SECONDARY'); --MGAAP
6370
6371 -- store the highest degree of error
6372 IF (l_return_status <> Okl_Api.G_RET_STS_SUCCESS) THEN
6373 IF (l_return_status = Okl_Api.G_RET_STS_UNEXP_ERROR) THEN
6374 -- need to leave
6375 Okl_Api.set_message(p_app_name => g_app_name,
6376 p_msg_name => 'OKL_AGN_CRE_ACR_ERROR',
6377 p_token1 => g_contract_number_token,
6378 p_token1_value => l_contract_number);
6379 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
6380 ELSIF (l_return_Status = Okl_Api.G_RET_STS_ERROR) THEN
6381 Okl_Api.set_message(p_app_name => g_app_name,
6382 p_msg_name => 'OKL_AGN_CRE_ACR_ERROR',
6383 p_token1 => g_contract_number_token,
6384 p_token1_value => l_contract_number);
6385 RAISE OKL_API.G_EXCEPTION_ERROR;
6386 END IF;
6387 END IF;
6388
6389 IF p_process_accrual_rec.submission_mode='BATCH' THEN
6390 FND_FILE.PUT_LINE(FND_FILE.OUTPUT,RPAD(l_contract_number,28)||
6391 RPAD(l_tcnv_rec.trx_number,22)||
6392 RPAD(FND_MESSAGE.GET_STRING('OKL','OKL_AGN_RPT_NON_REVENUE'),17)||
6393 RPAD(Okl_Accounting_Util.Get_Lookup_Meaning('YES_NO',l_tcnv_rec.accrual_status_yn,0,0),20)||
6394 RPAD(Okl_Accounting_Util.Get_Lookup_Meaning('YES_NO',l_tcnv_rec.update_status_yn,0,0),16)||
6395 RPAD(l_tcnv_rec.currency_code,9)||
6396 LPAD(Okl_Accounting_Util.FORMAT_AMOUNT(l_tcnv_rec.amount,l_tcnv_rec.currency_code),17) ||
6397 LPAD(Okl_Accounting_Util.Get_Lookup_Meaning('OKL_REPRESENTATION_TYPE','SECONDARY'), 10));
6398 END IF; -- if p_process_accrual_rec.submission_mode ....
6399 END IF; -- IF l_stream_tbl_rep.COUNT > 0
6400 -- MGAAP end 7263041
6401 END IF;
6402 ELSE
6403 IF l_rule_result = 'Y' THEN
6404 -- Create catch up entries
6405 -- populate the catchup record
6406 l_catchup_rec.contract_id := l_contract_id;
6407 l_catchup_rec.accrual_date := l_accrual_date;
6408 l_catchup_rec.contract_number := l_contract_number;
6409 l_catchup_rec.rule_result := l_rule_result;
6410 l_catchup_rec.override_status := l_override_status;
6411 l_catchup_rec.product_id := l_product_id;
6412 l_catchup_rec.trx_type_id := l_try_id;
6413 l_catchup_rec.advance_arrears := l_billing_type;
6414 l_catchup_rec.factoring_synd_flag := l_factoring_synd_flag;
6415 l_catchup_rec.post_to_gl := 'Y';
6416 l_catchup_rec.gl_reversal_flag := 'N';
6417 l_catchup_rec.memo_yn := 'N';
6418 l_catchup_rec.description := l_batch_name;
6419 l_catchup_rec.accrual_activity := 'CATCH-UP';
6420
6421 -- call the CATCHUP_ACCRUALS procedure
6422 CATCHUP_ACCRUALS(p_api_version => l_api_version,
6423 p_init_msg_list => l_init_msg_list,
6424 x_return_status => l_return_status,
6425 x_msg_count => l_msg_count,
6426 x_msg_data => l_msg_data,
6427 x_rev_tcnv_tbl => l_can_tcnv_tbl,
6428 x_rev_tclv_tbl => l_can_tclv_tbl,
6429 x_catch_tcnv_tbl => l_tcnv_tbl,
6430 x_catch_tclv_tbl => l_tclv_tbl,
6431 p_catchup_rec => l_catchup_rec );
6432 -- store the highest degree of error
6433 IF (l_return_status <> Okl_Api.G_RET_STS_SUCCESS) THEN
6434 IF (l_return_status = Okl_Api.G_RET_STS_UNEXP_ERROR) THEN
6435 -- need to leave
6436 Okl_Api.set_message(p_app_name => g_app_name,
6437 p_msg_name => 'OKL_AGN_CAT_ACR_ERROR',
6438 p_token1 => g_contract_number_token,
6439 p_token1_value => l_contract_number);
6440 -- Select the contract for error reporting
6441 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
6442 ELSIF (l_return_Status = Okl_Api.G_RET_STS_ERROR) THEN
6443 Okl_Api.set_message(p_app_name => g_app_name,
6444 p_msg_name => 'OKL_AGN_CAT_ACR_ERROR',
6445 p_token1 => g_contract_number_token,
6446 p_token1_value => l_contract_number);
6447 RAISE OKL_API.G_EXCEPTION_ERROR;
6448 END IF;
6449 END IF; -- bug 2474969 moved end if which was after fnd_file
6450 -- as a result catchup entries were not printing.
6451
6452 IF p_process_accrual_rec.submission_mode='BATCH' THEN
6453 --Report content for reversal of non-accrual entries
6454 IF l_can_tcnv_tbl.COUNT > 0 THEN
6455 FOR x IN l_can_tcnv_tbl.FIRST..l_can_tcnv_tbl.LAST
6456 LOOP
6457 FND_FILE.PUT_LINE(FND_FILE.OUTPUT,RPAD(l_contract_number,28)||
6458 RPAD(l_can_tcnv_tbl(x).trx_number,22)||
6459 RPAD(FND_MESSAGE.GET_STRING('OKL','OKL_AGN_RPT_REVERSE'),17)||
6460 RPAD(Okl_Accounting_Util.Get_Lookup_Meaning('YES_NO',l_can_tcnv_tbl(x).accrual_status_yn,0,0),20)||
6461 RPAD(Okl_Accounting_Util.Get_Lookup_Meaning('YES_NO',l_can_tcnv_tbl(x).update_status_yn,0,0),16)||
6462 RPAD(l_can_tcnv_tbl(x).currency_code,9)||
6463 LPAD(Okl_Accounting_Util.FORMAT_AMOUNT(l_can_tcnv_tbl(x).amount,l_can_tcnv_tbl(x).currency_code),17) ||
6464 LPAD(Okl_Accounting_Util.Get_Lookup_Meaning('OKL_REPRESENTATION_TYPE','PRIMARY'), 8));
6465 END LOOP;
6466 END IF; --IF l_can_tcnv_tbl.COUNT > 0 THEN
6467
6468 -- Report content for catchup entries
6469 IF l_tcnv_tbl.COUNT > 0 THEN
6470 FOR x IN l_tcnv_tbl.FIRST..l_tcnv_tbl.LAST
6471 LOOP
6472 FND_FILE.PUT_LINE(FND_FILE.OUTPUT,RPAD(l_contract_number,28)||
6473 RPAD(l_tcnv_tbl(x).trx_number,22)||
6474 RPAD(FND_MESSAGE.GET_STRING('OKL','OKL_AGN_RPT_CATCHUP_REVENUE'),17)||
6475 RPAD(Okl_Accounting_Util.Get_Lookup_Meaning('YES_NO',l_tcnv_tbl(x).accrual_status_yn,0,0),20)||
6476 RPAD(Okl_Accounting_Util.Get_Lookup_Meaning('YES_NO',l_tcnv_tbl(x).update_status_yn,0,0),16)||
6477 RPAD(l_tcnv_tbl(x).currency_code,9)||
6478 LPAD(Okl_Accounting_Util.FORMAT_AMOUNT(l_tcnv_tbl(x).amount,l_tcnv_tbl(x).currency_code),17) ||
6479 LPAD(Okl_Accounting_Util.Get_Lookup_Meaning('OKL_REPRESENTATION_TYPE','PRIMARY'), 8));
6480 END LOOP;
6481 END IF; --IF l_tcnv_tbl.COUNT > 0 THEN
6482 END IF; -- if p_process_accrual_rec.submission_mode=...
6483 -- MGAAP start 7263041
6484 IF (l_multi_gaap_yn = 'Y') THEN
6485 l_catchup_rec.contract_id := l_contract_id;
6486 l_catchup_rec.accrual_date := l_accrual_date;
6487 l_catchup_rec.contract_number := l_contract_number;
6488 l_catchup_rec.rule_result := l_rule_result;
6489 l_catchup_rec.override_status := l_override_status;
6490 l_catchup_rec.product_id := l_reporting_pdt_id;
6491 l_catchup_rec.trx_type_id := l_try_id;
6492 l_catchup_rec.advance_arrears := l_billing_type;
6493 l_catchup_rec.factoring_synd_flag := l_factoring_synd_flag;
6494 l_catchup_rec.post_to_gl := 'Y';
6495 l_catchup_rec.gl_reversal_flag := 'N';
6496 l_catchup_rec.memo_yn := 'N';
6497 l_catchup_rec.description := l_batch_name;
6498 l_catchup_rec.accrual_activity := 'CATCH-UP';
6499 -- MGAAP start
6500 /*l_tcnv_tbl_cnt := l_tcnv_tbl.count;
6501 l_catchup_rec.trx_number := l_tcnv_tbl(l_tcnv_tbl_cnt).trx_number;
6502 l_catchup_rec.primary_rep_trx_id := l_tcnv_tbl(l_tcnv_tbl_cnt).ID;*/
6503 -- MGAAP end
6504
6505 -- call the CATCHUP_ACCRUALS procedure
6506 CATCHUP_ACCRUALS(p_api_version => l_api_version,
6507 p_init_msg_list => l_init_msg_list,
6508 x_return_status => l_return_status,
6509 x_msg_count => l_msg_count,
6510 x_msg_data => l_msg_data,
6511 x_rev_tcnv_tbl => l_can_tcnv_tbl,
6512 x_rev_tclv_tbl => l_can_tclv_tbl,
6513 x_catch_tcnv_tbl => l_tcnv_tbl,
6514 x_catch_tclv_tbl => l_tclv_tbl,
6515 p_catchup_rec => l_catchup_rec,
6516 p_representation_type => 'SECONDARY' );
6517 -- store the highest degree of error
6518 IF (l_return_status <> Okl_Api.G_RET_STS_SUCCESS) THEN
6519 IF (l_return_status = Okl_Api.G_RET_STS_UNEXP_ERROR) THEN
6520 -- need to leave
6521 Okl_Api.set_message(p_app_name => g_app_name,
6522 p_msg_name => 'OKL_AGN_CAT_ACR_ERROR',
6523 p_token1 => g_contract_number_token,
6524 p_token1_value => l_contract_number);
6525 -- Select the contract for error reporting
6526 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
6527 ELSIF (l_return_Status = Okl_Api.G_RET_STS_ERROR) THEN
6528 Okl_Api.set_message(p_app_name => g_app_name,
6529 p_msg_name => 'OKL_AGN_CAT_ACR_ERROR',
6530 p_token1 => g_contract_number_token,
6531 p_token1_value => l_contract_number);
6532 RAISE OKL_API.G_EXCEPTION_ERROR;
6533 END IF;
6534 END IF; -- bug 2474969 moved end if which was after fnd_file
6535 -- as a result catchup entries were not printing.
6536
6537 IF p_process_accrual_rec.submission_mode='BATCH' THEN
6538 --Report content for reversal of non-accrual entries
6539 IF l_can_tcnv_tbl.COUNT > 0 THEN
6540 FOR x IN l_can_tcnv_tbl.FIRST..l_can_tcnv_tbl.LAST
6541 LOOP
6542 FND_FILE.PUT_LINE(FND_FILE.OUTPUT,RPAD(l_contract_number,28)||
6543 RPAD(l_can_tcnv_tbl(x).trx_number,22)||
6544 RPAD(FND_MESSAGE.GET_STRING('OKL','OKL_AGN_RPT_REVERSE'),17)||
6545 RPAD(Okl_Accounting_Util.Get_Lookup_Meaning('YES_NO',l_can_tcnv_tbl(x).accrual_status_yn,0,0),20)||
6546 RPAD(Okl_Accounting_Util.Get_Lookup_Meaning('YES_NO',l_can_tcnv_tbl(x).update_status_yn,0,0),16)||
6547 RPAD(l_can_tcnv_tbl(x).currency_code,9)||
6548 LPAD(Okl_Accounting_Util.FORMAT_AMOUNT(l_can_tcnv_tbl(x).amount,l_can_tcnv_tbl(x).currency_code),17) ||
6549 LPAD(Okl_Accounting_Util.Get_Lookup_Meaning('OKL_REPRESENTATION_TYPE','SECONDARY'), 10));
6550 END LOOP;
6551 END IF; --IF l_can_tcnv_tbl.COUNT > 0 THEN
6552
6553 -- Report content for catchup entries
6554 IF l_tcnv_tbl.COUNT > 0 THEN
6555 FOR x IN l_tcnv_tbl.FIRST..l_tcnv_tbl.LAST
6556 LOOP
6557 FND_FILE.PUT_LINE(FND_FILE.OUTPUT,RPAD(l_contract_number,28)||
6558 RPAD(l_tcnv_tbl(x).trx_number,22)||
6559 RPAD(FND_MESSAGE.GET_STRING('OKL','OKL_AGN_RPT_CATCHUP_REVENUE'),17)||
6560 RPAD(Okl_Accounting_Util.Get_Lookup_Meaning('YES_NO',l_tcnv_tbl(x).accrual_status_yn,0,0),20)||
6561 RPAD(Okl_Accounting_Util.Get_Lookup_Meaning('YES_NO',l_tcnv_tbl(x).update_status_yn,0,0),16)||
6562 RPAD(l_tcnv_tbl(x).currency_code,9)||
6563 LPAD(Okl_Accounting_Util.FORMAT_AMOUNT(l_tcnv_tbl(x).amount,l_tcnv_tbl(x).currency_code),17) ||
6564 LPAD(Okl_Accounting_Util.Get_Lookup_Meaning('OKL_REPRESENTATION_TYPE','SECONDARY'), 10));
6565 END LOOP;
6566 END IF; --IF l_tcnv_tbl.COUNT > 0 THEN
6567 END IF; -- if p_process_accrual_rec.submission_mode=...
6568 END IF;
6569 G_trx_number_tbl.DELETE;
6570 -- MGAAP end 7263041
6571
6572 l_tcnv_rec.trx_number := null; -- Bug 7555143
6573 l_tcnv_rec.ID := null;
6574 -- Create Accrual entries
6575 IF l_stream_tbl.COUNT > 0 THEN
6576 -- Calculate total amount for transaction header
6577 FOR i IN l_stream_tbl.FIRST..l_stream_tbl.LAST
6578 LOOP
6579 l_total := l_total + l_stream_tbl(i).stream_amount;
6580 END LOOP;
6581 -- Build the accrual record
6582 l_accrual_rec.contract_id := l_contract_id;
6583 l_accrual_rec.set_of_books_id := l_sob_id;
6584 l_accrual_rec.accrual_date := l_accrual_date;
6585 l_accrual_rec.trx_date := l_accrual_date;
6586 l_accrual_rec.contract_number := l_contract_number;
6587 l_accrual_rec.rule_result := l_rule_result;
6588 l_accrual_rec.override_status := l_override_status;
6589 l_accrual_rec.description := l_batch_name;
6590 l_accrual_rec.amount := l_total;
6591 l_accrual_rec.currency_code := l_khr_currency_code;
6592 l_accrual_rec.currency_conversion_type := l_currency_conv_type;
6593 l_accrual_rec.currency_conversion_rate := l_currency_conv_rate;
6594 l_accrual_rec.currency_conversion_date := l_currency_conv_date;
6595 l_accrual_rec.product_id := l_product_id;
6596 l_accrual_rec.trx_type_id := l_try_id;
6597 l_accrual_rec.advance_arrears := l_billing_type;
6598 l_accrual_rec.factoring_synd_flag := l_factoring_synd_flag;
6599 l_accrual_rec.post_to_gl := 'Y';
6600 l_accrual_rec.gl_reversal_flag := 'N';
6601 l_accrual_rec.memo_yn := 'N';
6602 l_accrual_rec.accrual_activity := 'ACCRUAL';
6603 l_accrual_rec.accrual_rule_yn := 'Y';
6604
6605 -- rmunjulu bug 6736148 -- start
6606 l_accrual_rec.source_trx_id := p_process_accrual_rec.source_trx_id;
6607 l_accrual_rec.source_trx_type := p_process_accrual_rec.source_trx_type;
6608 -- rmunjulu bug 6736148 -- end
6609
6610 -- Call CREATE_ACCRUAL procedure to create accrual transactions and entries
6611 CREATE_ACCRUALS (
6612 p_api_version => l_api_version,
6613 p_init_msg_list => l_init_msg_list,
6614 x_return_status => l_return_status,
6615 x_msg_count => l_msg_count,
6616 x_msg_data => l_msg_data,
6617 x_tcnv_rec => l_tcnv_rec,
6618 x_tclv_tbl => l_tclv_tbl,
6619 p_accrual_rec => l_accrual_rec,
6620 p_stream_tbl => l_stream_tbl);
6621 -- store the highest degree of error
6622 IF (l_return_status <> Okl_Api.G_RET_STS_SUCCESS) THEN
6623 IF (l_return_status = Okl_Api.G_RET_STS_UNEXP_ERROR) THEN
6624 -- need to leave
6625 Okl_Api.set_message(p_app_name => g_app_name,
6626 p_msg_name => 'OKL_AGN_CRE_ACR_ERROR',
6627 p_token1 => g_contract_number_token,
6628 p_token1_value => l_contract_number);
6629 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
6630 ELSIF (l_return_Status = Okl_Api.G_RET_STS_ERROR) THEN
6631 Okl_Api.set_message(p_app_name => g_app_name,
6632 p_msg_name => 'OKL_AGN_CRE_ACR_ERROR',
6633 p_token1 => g_contract_number_token,
6634 p_token1_value => l_contract_number);
6635 RAISE OKL_API.G_EXCEPTION_ERROR;
6636 END IF;
6637 END IF;
6638 IF p_process_accrual_rec.submission_mode='BATCH' THEN
6639 FND_FILE.PUT_LINE(FND_FILE.OUTPUT,RPAD(l_contract_number,28)||
6640 RPAD(l_tcnv_rec.trx_number,22)||
6641 RPAD(FND_MESSAGE.GET_STRING('OKL','OKL_AGN_RPT_REVENUE'),17)||
6642 RPAD(Okl_Accounting_Util.Get_Lookup_Meaning('YES_NO',l_tcnv_rec.accrual_status_yn,0,0),20)||
6643 RPAD(Okl_Accounting_Util.Get_Lookup_Meaning('YES_NO',l_tcnv_rec.update_status_yn,0,0),16)||
6644 RPAD(l_tcnv_rec.currency_code,9)||
6645 LPAD(Okl_Accounting_Util.FORMAT_AMOUNT(l_tcnv_rec.amount,l_tcnv_rec.currency_code),17) ||
6646 LPAD(Okl_Accounting_Util.Get_Lookup_Meaning('OKL_REPRESENTATION_TYPE','PRIMARY'), 8));
6647 END IF; -- if p_process_accrual_rec.submission_mode..
6648 END IF; -- IF l_stream_tbl.COUNT > 0
6649 -- MGAAP start 7263041
6650 IF l_stream_tbl_rep.COUNT > 0 THEN
6651 -- Calculate total amount for transaction header
6652 l_total := 0;
6653 FOR i IN l_stream_tbl_rep.FIRST..l_stream_tbl_rep.LAST
6654 LOOP
6655 l_total := l_total + l_stream_tbl_rep(i).stream_amount;
6656 END LOOP;
6657 -- Build the accrual record
6658 l_accrual_rec.contract_id := l_contract_id;
6659 l_accrual_rec.set_of_books_id := G_SOB_ID_REP;
6660 l_accrual_rec.accrual_date := l_accrual_date;
6661 l_accrual_rec.trx_date := l_accrual_date;
6662 l_accrual_rec.contract_number := l_contract_number;
6663 l_accrual_rec.rule_result := l_rule_result;
6664 l_accrual_rec.override_status := l_override_status;
6665 l_accrual_rec.description := l_batch_name;
6666 l_accrual_rec.amount := l_total;
6667 l_accrual_rec.currency_code := l_khr_currency_code;
6668 l_accrual_rec.currency_conversion_type := l_currency_conv_type;
6669 l_accrual_rec.currency_conversion_rate := l_currency_conv_rate;
6670 l_accrual_rec.currency_conversion_date := l_currency_conv_date;
6671 l_accrual_rec.product_id := l_reporting_pdt_id;
6672 l_accrual_rec.trx_type_id := l_try_id;
6673 l_accrual_rec.advance_arrears := l_billing_type;
6674 l_accrual_rec.factoring_synd_flag := l_factoring_synd_flag;
6675 l_accrual_rec.post_to_gl := 'Y';
6676 l_accrual_rec.gl_reversal_flag := 'N';
6677 l_accrual_rec.memo_yn := 'N';
6678 l_accrual_rec.accrual_activity := 'ACCRUAL';
6679 l_accrual_rec.accrual_rule_yn := 'Y';
6680 -- MGAAP start
6681 l_accrual_rec.trx_number := l_tcnv_rec.trx_number;
6682 l_accrual_rec.primary_rep_trx_id := l_tcnv_rec.ID;
6683 -- MGAAP end
6684
6685 -- rmunjulu bug 6736148 -- start
6686 l_accrual_rec.source_trx_id := p_process_accrual_rec.source_trx_id;
6687 l_accrual_rec.source_trx_type := p_process_accrual_rec.source_trx_type;
6688 -- rmunjulu bug 6736148 -- end
6689
6690 -- Call CREATE_ACCRUAL procedure to create accrual transactions and entries
6691 CREATE_ACCRUALS (
6692 p_api_version => l_api_version,
6693 p_init_msg_list => l_init_msg_list,
6694 x_return_status => l_return_status,
6695 x_msg_count => l_msg_count,
6696 x_msg_data => l_msg_data,
6697 x_tcnv_rec => l_tcnv_rec,
6698 x_tclv_tbl => l_tclv_tbl,
6699 p_accrual_rec => l_accrual_rec,
6700 p_stream_tbl => l_stream_tbl_rep,
6701 p_representation_type => 'SECONDARY');
6702 -- store the highest degree of error
6703 IF (l_return_status <> Okl_Api.G_RET_STS_SUCCESS) THEN
6704 IF (l_return_status = Okl_Api.G_RET_STS_UNEXP_ERROR) THEN
6705 -- need to leave
6706 Okl_Api.set_message(p_app_name => g_app_name,
6707 p_msg_name => 'OKL_AGN_CRE_ACR_ERROR',
6708 p_token1 => g_contract_number_token,
6709 p_token1_value => l_contract_number);
6710 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
6711 ELSIF (l_return_Status = Okl_Api.G_RET_STS_ERROR) THEN
6712 Okl_Api.set_message(p_app_name => g_app_name,
6713 p_msg_name => 'OKL_AGN_CRE_ACR_ERROR',
6714 p_token1 => g_contract_number_token,
6715 p_token1_value => l_contract_number);
6716 RAISE OKL_API.G_EXCEPTION_ERROR;
6717 END IF;
6718 END IF;
6719 IF p_process_accrual_rec.submission_mode='BATCH' THEN
6720 FND_FILE.PUT_LINE(FND_FILE.OUTPUT,RPAD(l_contract_number,28)||
6721 RPAD(l_tcnv_rec.trx_number,22)||
6722 RPAD(FND_MESSAGE.GET_STRING('OKL','OKL_AGN_RPT_REVENUE'),17)||
6723 RPAD(Okl_Accounting_Util.Get_Lookup_Meaning('YES_NO',l_tcnv_rec.accrual_status_yn,0,0),20)||
6724 RPAD(Okl_Accounting_Util.Get_Lookup_Meaning('YES_NO',l_tcnv_rec.update_status_yn,0,0),16)||
6725 RPAD(l_tcnv_rec.currency_code,9)||
6726 LPAD(Okl_Accounting_Util.FORMAT_AMOUNT(l_tcnv_rec.amount,l_tcnv_rec.currency_code),17) ||
6727 LPAD(Okl_Accounting_Util.Get_Lookup_Meaning('OKL_REPRESENTATION_TYPE','SECONDARY'), 10));
6728 END IF; -- if p_process_accrual_rec.submission_mode..
6729 END IF; -- IF l_stream_tbl_rep.COUNT > 0
6730 -- MGAAP end 7263041
6731 ELSE
6732 -- Create Memo Entries
6733 l_tcnv_rec.trx_number := null; -- Bug 7555143
6734 l_tcnv_rec.ID := null;
6735 IF l_stream_tbl.COUNT > 0 THEN
6736 -- Calculate total amount for transaction header
6737 FOR i IN l_stream_tbl.FIRST..l_stream_tbl.LAST
6738 LOOP
6739 l_total := l_total + l_stream_tbl(i).stream_amount;
6740 END LOOP;
6741 -- Build the accrual record
6742 l_accrual_rec.contract_id := l_contract_id;
6743 l_accrual_rec.set_of_books_id := l_sob_id;
6744 l_accrual_rec.accrual_date := l_accrual_date;
6745 l_accrual_rec.trx_date := l_accrual_date;
6746 l_accrual_rec.contract_number := l_contract_number;
6747 l_accrual_rec.rule_result := l_rule_result;
6748 l_accrual_rec.override_status := l_override_status;
6749 l_accrual_rec.description := l_batch_name;
6750 l_accrual_rec.amount := l_total;
6751 l_accrual_rec.currency_code := l_khr_currency_code;
6752 l_accrual_rec.currency_conversion_type := l_currency_conv_type;
6753 l_accrual_rec.currency_conversion_rate := l_currency_conv_rate;
6754 l_accrual_rec.currency_conversion_date := l_currency_conv_date;
6755 l_accrual_rec.product_id := l_product_id;
6756 l_accrual_rec.trx_type_id := l_try_id;
6757 l_accrual_rec.advance_arrears := l_billing_type;
6758 l_accrual_rec.factoring_synd_flag := l_factoring_synd_flag;
6759 l_accrual_rec.post_to_gl := 'Y';
6760 l_accrual_rec.gl_reversal_flag := 'N';
6761 l_accrual_rec.memo_yn := 'Y';
6762 l_accrual_rec.accrual_activity := 'NON-ACCRUAL';
6763 l_accrual_rec.accrual_rule_yn := 'Y';
6764
6765 -- rmunjulu bug 6736148 -- start
6766 l_accrual_rec.source_trx_id := p_process_accrual_rec.source_trx_id;
6767 l_accrual_rec.source_trx_type := p_process_accrual_rec.source_trx_type;
6768 -- rmunjulu bug 6736148 -- end
6769
6770 -- Call CREATE_ACCRUAL procedure to create accrual transactions and entries
6771 CREATE_ACCRUALS (
6772 p_api_version => l_api_version,
6773 p_init_msg_list => l_init_msg_list,
6774 x_return_status => l_return_status,
6775 x_msg_count => l_msg_count,
6776 x_msg_data => l_msg_data,
6777 x_tcnv_rec => l_tcnv_rec,
6778 x_tclv_tbl => l_tclv_tbl,
6779 p_accrual_rec => l_accrual_rec,
6780 p_stream_tbl => l_stream_tbl);
6781
6782 -- store the highest degree of error
6783 IF (l_return_status <> Okl_Api.G_RET_STS_SUCCESS) THEN
6784 IF (l_return_status = Okl_Api.G_RET_STS_UNEXP_ERROR) THEN
6785 -- need to leave
6786 Okl_Api.set_message(p_app_name => g_app_name,
6787 p_msg_name => 'OKL_AGN_CRE_ACR_ERROR',
6788 p_token1 => g_contract_number_token,
6789 p_token1_value => l_contract_number);
6790 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
6791 ELSIF (l_return_Status = Okl_Api.G_RET_STS_ERROR) THEN
6792 Okl_Api.set_message(p_app_name => g_app_name,
6793 p_msg_name => 'OKL_AGN_CRE_ACR_ERROR',
6794 p_token1 => g_contract_number_token,
6795 p_token1_value => l_contract_number);
6796 RAISE OKL_API.G_EXCEPTION_ERROR;
6797 END IF;
6798 END IF;
6799
6800 IF p_process_accrual_rec.submission_mode='BATCH' THEN
6801 FND_FILE.PUT_LINE(FND_FILE.OUTPUT,RPAD(l_contract_number,28)||
6802 RPAD(l_tcnv_rec.trx_number,22)||
6803 RPAD(FND_MESSAGE.GET_STRING('OKL','OKL_AGN_RPT_NON_REVENUE'),17)||
6804 RPAD(Okl_Accounting_Util.Get_Lookup_Meaning('YES_NO',l_tcnv_rec.accrual_status_yn,0,0),20)||
6805 RPAD(Okl_Accounting_Util.Get_Lookup_Meaning('YES_NO',l_tcnv_rec.update_status_yn,0,0),16)||
6806 RPAD(l_tcnv_rec.currency_code,9)||
6807 LPAD(Okl_Accounting_Util.FORMAT_AMOUNT(l_tcnv_rec.amount,l_tcnv_rec.currency_code),17) ||
6808 LPAD(Okl_Accounting_Util.Get_Lookup_Meaning('OKL_REPRESENTATION_TYPE','PRIMARY'), 8));
6809 END IF; -- if p_process_accrual_rec.submission_mode..
6810 END IF; -- IF l_stream_tbl.COUNT > 0
6811 -- MGAAP start 7263041
6812 IF l_stream_tbl_rep.COUNT > 0 THEN
6813 -- Calculate total amount for transaction header
6814 l_total := 0;
6815 FOR i IN l_stream_tbl_rep.FIRST..l_stream_tbl_rep.LAST
6816 LOOP
6817 l_total := l_total + l_stream_tbl_rep(i).stream_amount;
6818 END LOOP;
6819 -- Build the accrual record
6820 l_accrual_rec.contract_id := l_contract_id;
6821 l_accrual_rec.set_of_books_id := G_SOB_ID_REP;
6822 l_accrual_rec.accrual_date := l_accrual_date;
6823 l_accrual_rec.trx_date := l_accrual_date;
6824 l_accrual_rec.contract_number := l_contract_number;
6825 l_accrual_rec.rule_result := l_rule_result;
6826 l_accrual_rec.override_status := l_override_status;
6827 l_accrual_rec.description := l_batch_name;
6828 l_accrual_rec.amount := l_total;
6829 l_accrual_rec.currency_code := l_khr_currency_code;
6830 l_accrual_rec.currency_conversion_type := l_currency_conv_type;
6831 l_accrual_rec.currency_conversion_rate := l_currency_conv_rate;
6832 l_accrual_rec.currency_conversion_date := l_currency_conv_date;
6833 l_accrual_rec.product_id := l_reporting_pdt_id;
6834 l_accrual_rec.trx_type_id := l_try_id;
6835 l_accrual_rec.advance_arrears := l_billing_type;
6836 l_accrual_rec.factoring_synd_flag := l_factoring_synd_flag;
6837 l_accrual_rec.post_to_gl := 'Y';
6838 l_accrual_rec.gl_reversal_flag := 'N';
6839 l_accrual_rec.memo_yn := 'Y';
6840 l_accrual_rec.accrual_activity := 'NON-ACCRUAL';
6841 l_accrual_rec.accrual_rule_yn := 'Y';
6842
6843 -- MGAAP start
6844 l_accrual_rec.trx_number := l_tcnv_rec.trx_number;
6845 l_accrual_rec.primary_rep_trx_id := l_tcnv_rec.ID;
6846 -- MGAAP end
6847
6848 -- rmunjulu bug 6736148 -- start
6849 l_accrual_rec.source_trx_id := p_process_accrual_rec.source_trx_id;
6850 l_accrual_rec.source_trx_type := p_process_accrual_rec.source_trx_type;
6851 -- rmunjulu bug 6736148 -- end
6852
6853 -- Call CREATE_ACCRUAL procedure to create accrual transactions and entries
6854 CREATE_ACCRUALS (
6855 p_api_version => l_api_version,
6856 p_init_msg_list => l_init_msg_list,
6857 x_return_status => l_return_status,
6858 x_msg_count => l_msg_count,
6859 x_msg_data => l_msg_data,
6860 x_tcnv_rec => l_tcnv_rec,
6861 x_tclv_tbl => l_tclv_tbl,
6862 p_accrual_rec => l_accrual_rec,
6863 p_stream_tbl => l_stream_tbl_rep,
6864 p_representation_type => 'SECONDARY');
6865
6866 -- store the highest degree of error
6867 IF (l_return_status <> Okl_Api.G_RET_STS_SUCCESS) THEN
6868 IF (l_return_status = Okl_Api.G_RET_STS_UNEXP_ERROR) THEN
6869 -- need to leave
6870 Okl_Api.set_message(p_app_name => g_app_name,
6871 p_msg_name => 'OKL_AGN_CRE_ACR_ERROR',
6872 p_token1 => g_contract_number_token,
6873 p_token1_value => l_contract_number);
6874 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
6875 ELSIF (l_return_Status = Okl_Api.G_RET_STS_ERROR) THEN
6876 Okl_Api.set_message(p_app_name => g_app_name,
6877 p_msg_name => 'OKL_AGN_CRE_ACR_ERROR',
6878 p_token1 => g_contract_number_token,
6879 p_token1_value => l_contract_number);
6880 RAISE OKL_API.G_EXCEPTION_ERROR;
6881 END IF;
6882 END IF;
6883
6884 IF p_process_accrual_rec.submission_mode='BATCH' THEN
6885 FND_FILE.PUT_LINE(FND_FILE.OUTPUT,RPAD(l_contract_number,28)||
6886 RPAD(l_tcnv_rec.trx_number,22)||
6887 RPAD(FND_MESSAGE.GET_STRING('OKL','OKL_AGN_RPT_NON_REVENUE'),17)||
6888 RPAD(Okl_Accounting_Util.Get_Lookup_Meaning('YES_NO',l_tcnv_rec.accrual_status_yn,0,0),20)||
6889 RPAD(Okl_Accounting_Util.Get_Lookup_Meaning('YES_NO',l_tcnv_rec.update_status_yn,0,0),16)||
6890 RPAD(l_tcnv_rec.currency_code,9)||
6891 LPAD(Okl_Accounting_Util.FORMAT_AMOUNT(l_tcnv_rec.amount,l_tcnv_rec.currency_code),17) ||
6892 LPAD(Okl_Accounting_Util.Get_Lookup_Meaning('OKL_REPRESENTATION_TYPE','SECONDARY'), 10));
6893 END IF; -- if p_process_accrual_rec.submission_mode..
6894 END IF; -- IF l_stream_tbl.COUNT > 0
6895 -- MGAAP end 7263041
6896 END IF;
6897 END IF;
6898 ELSE
6899 IF l_previous_override_status = 'N' THEN
6900 IF l_previous_accrual_status = 'Y' THEN
6901 -- populate the reverse record
6902 l_reverse_rec.contract_id := l_contract_id;
6903 l_reverse_rec.reverse_date_to := l_reverse_date_to;
6904 l_reverse_rec.accrual_date := l_accrual_date;
6905 l_reverse_rec.contract_number := l_contract_number;
6906 l_reverse_rec.rule_result := l_rule_result;
6907 l_reverse_rec.override_status := l_override_status;
6908 l_reverse_rec.product_id := l_product_id;
6909 l_reverse_rec.trx_type_id := l_try_id;
6910 l_reverse_rec.advance_arrears := l_billing_type;
6911 l_reverse_rec.factoring_synd_flag := l_factoring_synd_flag;
6912 l_reverse_rec.post_to_gl := 'Y';
6913 l_reverse_rec.gl_reversal_flag := 'N';
6914 l_reverse_rec.memo_yn := 'Y';
6915 l_reverse_rec.description := l_batch_name;
6916 l_reverse_rec.accrual_activity := 'REVERSAL';
6917
6918 -- call the REVERSE_ACCRUALS procedure
6919 REVERSE_ACCRUALS(p_api_version => l_api_version,
6920 p_init_msg_list => l_init_msg_list,
6921 x_return_status => l_return_status,
6922 x_msg_count => l_msg_count,
6923 x_msg_data => l_msg_data,
6924 x_rev_tcnv_tbl => l_can_tcnv_tbl,
6925 x_rev_tclv_tbl => l_can_tclv_tbl,
6926 x_memo_tcnv_tbl => l_tcnv_tbl,
6927 x_memo_tclv_tbl => l_tclv_tbl,
6928 p_reverse_rec => l_reverse_rec );
6929 -- store the highest degree of error
6930 IF (l_return_status <> Okl_Api.G_RET_STS_SUCCESS) THEN
6931 IF (l_return_status = Okl_Api.G_RET_STS_UNEXP_ERROR) THEN
6932 -- need to leave
6933 Okl_Api.set_message(p_app_name => g_app_name,
6934 p_msg_name => 'OKL_AGN_REV_ACR_ERROR',
6935 p_token1 => g_contract_number_token,
6936 p_token1_value => l_contract_number);
6937 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
6938 ELSIF (l_return_Status = Okl_Api.G_RET_STS_ERROR) THEN
6939 Okl_Api.set_message(p_app_name => g_app_name,
6940 p_msg_name => 'OKL_AGN_REV_ACR_ERROR',
6941 p_token1 => g_contract_number_token,
6942 p_token1_value => l_contract_number);
6943 RAISE OKL_API.G_EXCEPTION_ERROR;
6944 END IF;
6945 END IF;
6946
6947 IF p_process_accrual_rec.submission_mode='BATCH' THEN
6948 -- Report Content for reverse accruals
6949 IF l_tcnv_tbl.COUNT > 0 THEN
6950 FOR x IN l_can_tcnv_tbl.FIRST..l_can_tcnv_tbl.LAST
6951 LOOP
6952 FND_FILE.PUT_LINE(FND_FILE.OUTPUT,RPAD(l_contract_number,28)||
6953 RPAD(l_can_tcnv_tbl(x).trx_number,22)||
6954 RPAD(FND_MESSAGE.GET_STRING('OKL','OKL_AGN_RPT_REVERSE'),17)||
6955 RPAD(Okl_Accounting_Util.Get_Lookup_Meaning('YES_NO',l_can_tcnv_tbl(x).accrual_status_yn,0,0),20)||
6956 RPAD(Okl_Accounting_Util.Get_Lookup_Meaning('YES_NO',l_can_tcnv_tbl(x).update_status_yn,0,0),16)||
6957 RPAD(l_can_tcnv_tbl(x).currency_code,9)||
6958 LPAD(Okl_Accounting_Util.FORMAT_AMOUNT(l_can_tcnv_tbl(x).amount,l_can_tcnv_tbl(x).currency_code),17) ||
6959 LPAD(Okl_Accounting_Util.Get_Lookup_Meaning('OKL_REPRESENTATION_TYPE','PRIMARY'), 8));
6960 END LOOP;
6961 END IF; --IF l_tcnv_tbl.COUNT > 0 THEN
6962
6963 -- Report Content for non-accruals
6964 IF l_tcnv_tbl.COUNT > 0 THEN
6965 FOR x IN l_tcnv_tbl.FIRST..l_tcnv_tbl.LAST
6966 LOOP
6967 FND_FILE.PUT_LINE(FND_FILE.OUTPUT,RPAD(l_contract_number,28)||
6968 RPAD(l_tcnv_tbl(x).trx_number,22)||
6969 RPAD(FND_MESSAGE.GET_STRING('OKL','OKL_AGN_RPT_NON_REVENUE'),17)||
6970 RPAD(Okl_Accounting_Util.Get_Lookup_Meaning('YES_NO',l_tcnv_tbl(x).accrual_status_yn,0,0),20)||
6971 RPAD(Okl_Accounting_Util.Get_Lookup_Meaning('YES_NO',l_tcnv_tbl(x).update_status_yn,0,0),16)||
6972 RPAD(l_tcnv_tbl(x).currency_code,9)||
6973 LPAD(Okl_Accounting_Util.FORMAT_AMOUNT(l_tcnv_tbl(x).amount,l_tcnv_tbl(x).currency_code),17) ||
6974 LPAD(Okl_Accounting_Util.Get_Lookup_Meaning('OKL_REPRESENTATION_TYPE','PRIMARY'), 8));
6975 END LOOP;
6976 END IF; --IF l_tcnv_tbl.COUNT > 0 THEN
6977 END IF; -- IF p_process_accrual_rec.submission_mode=...
6978 -- MGAAP start 7263041
6979 -- call the REVERSE_ACCRUALS procedure
6980 IF (l_multi_gaap_yn = 'Y') THEN
6981 l_reverse_rec.product_id := l_reporting_pdt_id;
6982 /*l_tcnv_tbl_cnt := l_tcnv_tbl.count;
6983 l_reverse_rec.trx_number := l_tcnv_tbl(l_tcnv_tbl_cnt).trx_number;
6984 l_reverse_rec.primary_rep_trx_id := l_tcnv_tbl(l_tcnv_tbl_cnt).ID;*/
6985 REVERSE_ACCRUALS(p_api_version => l_api_version,
6986 p_init_msg_list => l_init_msg_list,
6987 x_return_status => l_return_status,
6988 x_msg_count => l_msg_count,
6989 x_msg_data => l_msg_data,
6990 x_rev_tcnv_tbl => l_can_tcnv_tbl,
6991 x_rev_tclv_tbl => l_can_tclv_tbl,
6992 x_memo_tcnv_tbl => l_tcnv_tbl,
6993 x_memo_tclv_tbl => l_tclv_tbl,
6994 p_reverse_rec => l_reverse_rec,
6995 p_representation_type => 'SECONDARY' );
6996 -- store the highest degree of error
6997 IF (l_return_status <> Okl_Api.G_RET_STS_SUCCESS) THEN
6998 IF (l_return_status = Okl_Api.G_RET_STS_UNEXP_ERROR) THEN
6999 -- need to leave
7000 Okl_Api.set_message(p_app_name => g_app_name,
7001 p_msg_name => 'OKL_AGN_REV_ACR_ERROR',
7002 p_token1 => g_contract_number_token,
7003 p_token1_value => l_contract_number);
7004 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
7005 ELSIF (l_return_Status = Okl_Api.G_RET_STS_ERROR) THEN
7006 Okl_Api.set_message(p_app_name => g_app_name,
7007 p_msg_name => 'OKL_AGN_REV_ACR_ERROR',
7008 p_token1 => g_contract_number_token,
7009 p_token1_value => l_contract_number);
7010 RAISE OKL_API.G_EXCEPTION_ERROR;
7011 END IF;
7012 END IF;
7013
7014 IF p_process_accrual_rec.submission_mode='BATCH' THEN
7015 -- Report Content for reverse accruals
7016 IF l_tcnv_tbl.COUNT > 0 THEN
7017 FOR x IN l_can_tcnv_tbl.FIRST..l_can_tcnv_tbl.LAST
7018 LOOP
7019 FND_FILE.PUT_LINE(FND_FILE.OUTPUT,RPAD(l_contract_number,28)||
7020 RPAD(l_can_tcnv_tbl(x).trx_number,22)||
7021 RPAD(FND_MESSAGE.GET_STRING('OKL','OKL_AGN_RPT_REVERSE'),17)||
7022 RPAD(Okl_Accounting_Util.Get_Lookup_Meaning('YES_NO',l_can_tcnv_tbl(x).accrual_status_yn,0,0),20)||
7023 RPAD(Okl_Accounting_Util.Get_Lookup_Meaning('YES_NO',l_can_tcnv_tbl(x).update_status_yn,0,0),16)||
7024 RPAD(l_can_tcnv_tbl(x).currency_code,9)||
7025 LPAD(Okl_Accounting_Util.FORMAT_AMOUNT(l_can_tcnv_tbl(x).amount,l_can_tcnv_tbl(x).currency_code),17) ||
7026 LPAD(Okl_Accounting_Util.Get_Lookup_Meaning('OKL_REPRESENTATION_TYPE','SECONDARY'), 10));
7027 END LOOP;
7028 END IF; --IF l_tcnv_tbl.COUNT > 0 THEN
7029
7030 -- Report Content for non-accruals
7031 IF l_tcnv_tbl.COUNT > 0 THEN
7032 FOR x IN l_tcnv_tbl.FIRST..l_tcnv_tbl.LAST
7033 LOOP
7034 FND_FILE.PUT_LINE(FND_FILE.OUTPUT,RPAD(l_contract_number,28)||
7035 RPAD(l_tcnv_tbl(x).trx_number,22)||
7036 RPAD(FND_MESSAGE.GET_STRING('OKL','OKL_AGN_RPT_NON_REVENUE'),17)||
7037 RPAD(Okl_Accounting_Util.Get_Lookup_Meaning('YES_NO',l_tcnv_tbl(x).accrual_status_yn,0,0),20)||
7038 RPAD(Okl_Accounting_Util.Get_Lookup_Meaning('YES_NO',l_tcnv_tbl(x).update_status_yn,0,0),16)||
7039 RPAD(l_tcnv_tbl(x).currency_code,9)||
7040 LPAD(Okl_Accounting_Util.FORMAT_AMOUNT(l_tcnv_tbl(x).amount,l_tcnv_tbl(x).currency_code),17) ||
7041 LPAD(Okl_Accounting_Util.Get_Lookup_Meaning('OKL_REPRESENTATION_TYPE','SECONDARY'), 10));
7042 END LOOP;
7043 END IF; --IF l_tcnv_tbl.COUNT > 0 THEN
7044 END IF; -- IF p_process_accrual_rec.submission_mode=...
7045 END IF;
7046 G_trx_number_tbl.DELETE;
7047 -- MGAAP end 7263041
7048 END IF;
7049 END IF;
7050
7051 l_tcnv_rec.trx_number := null; -- Bug 7555143
7052 l_tcnv_rec.ID := null;
7053 -- Create Memo Entries
7054 IF l_stream_tbl.COUNT > 0 THEN
7055 -- Calculate total amount for transaction header
7056 FOR i IN l_stream_tbl.FIRST..l_stream_tbl.LAST
7057 LOOP
7058 l_total := l_total + l_stream_tbl(i).stream_amount;
7059 END LOOP;
7060 -- Build the accrual record
7061 l_accrual_rec.contract_id := l_contract_id;
7062 l_accrual_rec.set_of_books_id := l_sob_id;
7063 l_accrual_rec.accrual_date := l_accrual_date;
7064 l_accrual_rec.trx_date := l_accrual_date;
7065 l_accrual_rec.contract_number := l_contract_number;
7066 l_accrual_rec.rule_result := l_rule_result;
7067 l_accrual_rec.override_status := l_override_status;
7068 l_accrual_rec.description := l_batch_name;
7069 l_accrual_rec.amount := l_total;
7070 l_accrual_rec.currency_code := l_khr_currency_code;
7071 l_accrual_rec.currency_conversion_type := l_currency_conv_type;
7072 l_accrual_rec.currency_conversion_rate := l_currency_conv_rate;
7073 l_accrual_rec.currency_conversion_date := l_currency_conv_date;
7074 l_accrual_rec.product_id := l_product_id;
7075 l_accrual_rec.trx_type_id := l_try_id;
7076 l_accrual_rec.advance_arrears := l_billing_type;
7077 l_accrual_rec.factoring_synd_flag := l_factoring_synd_flag;
7078 l_accrual_rec.post_to_gl := 'Y';
7079 l_accrual_rec.gl_reversal_flag := 'N';
7080 l_accrual_rec.memo_yn := 'Y';
7081 l_accrual_rec.accrual_activity := 'NON-ACCRUAL';
7082 l_accrual_rec.accrual_rule_yn := 'Y';
7083
7084 -- rmunjulu bug 6736148 -- start
7085 l_accrual_rec.source_trx_id := p_process_accrual_rec.source_trx_id;
7086 l_accrual_rec.source_trx_type := p_process_accrual_rec.source_trx_type;
7087 -- rmunjulu bug 6736148 -- end
7088
7089 -- Call CREATE_ACCRUAL procedure to create accrual transactions and entries
7090 CREATE_ACCRUALS (
7091 p_api_version => l_api_version,
7092 p_init_msg_list => l_init_msg_list,
7093 x_return_status => l_return_status,
7094 x_msg_count => l_msg_count,
7095 x_msg_data => l_msg_data,
7096 x_tcnv_rec => l_tcnv_rec,
7097 x_tclv_tbl => l_tclv_tbl,
7098 p_accrual_rec => l_accrual_rec,
7099 p_stream_tbl => l_stream_tbl);
7100
7101 -- store the highest degree of error
7102 IF (l_return_status <> Okl_Api.G_RET_STS_SUCCESS) THEN
7103 IF (l_return_status = Okl_Api.G_RET_STS_UNEXP_ERROR) THEN
7104 -- need to leave
7105 Okl_Api.set_message(p_app_name => g_app_name,
7106 p_msg_name => 'OKL_AGN_CRE_ACR_ERROR',
7107 p_token1 => g_contract_number_token,
7108 p_token1_value => l_contract_number);
7109 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
7110 ELSIF (l_return_Status = Okl_Api.G_RET_STS_ERROR) THEN
7111 Okl_Api.set_message(p_app_name => g_app_name,
7112 p_msg_name => 'OKL_AGN_CRE_ACR_ERROR',
7113 p_token1 => g_contract_number_token,
7114 p_token1_value => l_contract_number);
7115 RAISE OKL_API.G_EXCEPTION_ERROR;
7116 END IF;
7117 END IF;
7118 IF p_process_accrual_rec.submission_mode='BATCH' THEN
7119 FND_FILE.PUT_LINE(FND_FILE.OUTPUT,RPAD(l_contract_number,28)||
7120 RPAD(l_tcnv_rec.trx_number,22)||
7121 RPAD(FND_MESSAGE.GET_STRING('OKL','OKL_AGN_RPT_NON_REVENUE'),17)||
7122 RPAD(Okl_Accounting_Util.Get_Lookup_Meaning('YES_NO',l_tcnv_rec.accrual_status_yn,0,0),20)||
7123 RPAD(Okl_Accounting_Util.Get_Lookup_Meaning('YES_NO',l_tcnv_rec.update_status_yn,0,0),16)||
7124 RPAD(l_tcnv_rec.currency_code,9)||
7125 LPAD(Okl_Accounting_Util.FORMAT_AMOUNT(l_tcnv_rec.amount,l_tcnv_rec.currency_code),17) ||
7126 LPAD(Okl_Accounting_Util.Get_Lookup_Meaning('OKL_REPRESENTATION_TYPE','PRIMARY'), 8));
7127 END IF; -- if p_process_accrual_rec.submission_mode...
7128 END IF; -- IF l_stream_tbl.COUNT > 0
7129 -- MGAAP start 7263041
7130 IF l_stream_tbl_rep.COUNT > 0 THEN
7131 -- Calculate total amount for transaction header
7132 l_total := 0;
7133 FOR i IN l_stream_tbl_rep.FIRST..l_stream_tbl_rep.LAST
7134 LOOP
7135 l_total := l_total + l_stream_tbl_rep(i).stream_amount;
7136 END LOOP;
7137 -- Build the accrual record
7138 l_accrual_rec.contract_id := l_contract_id;
7139 l_accrual_rec.set_of_books_id := G_SOB_ID_REP;
7140 l_accrual_rec.accrual_date := l_accrual_date;
7141 l_accrual_rec.trx_date := l_accrual_date;
7142 l_accrual_rec.contract_number := l_contract_number;
7143 l_accrual_rec.rule_result := l_rule_result;
7144 l_accrual_rec.override_status := l_override_status;
7145 l_accrual_rec.description := l_batch_name;
7146 l_accrual_rec.amount := l_total;
7147 l_accrual_rec.currency_code := l_khr_currency_code;
7148 l_accrual_rec.currency_conversion_type := l_currency_conv_type;
7149 l_accrual_rec.currency_conversion_rate := l_currency_conv_rate;
7150 l_accrual_rec.currency_conversion_date := l_currency_conv_date;
7151 l_accrual_rec.product_id := l_reporting_pdt_id;
7152 l_accrual_rec.trx_type_id := l_try_id;
7153 l_accrual_rec.advance_arrears := l_billing_type;
7154 l_accrual_rec.factoring_synd_flag := l_factoring_synd_flag;
7155 l_accrual_rec.post_to_gl := 'Y';
7156 l_accrual_rec.gl_reversal_flag := 'N';
7157 l_accrual_rec.memo_yn := 'Y';
7158 l_accrual_rec.accrual_activity := 'NON-ACCRUAL';
7159 l_accrual_rec.accrual_rule_yn := 'Y';
7160
7161 -- MGAAP start
7162 l_accrual_rec.trx_number := l_tcnv_rec.trx_number;
7163 l_accrual_rec.primary_rep_trx_id := l_tcnv_rec.ID;
7164 -- MGAAP end
7165
7166 -- rmunjulu bug 6736148 -- start
7167 l_accrual_rec.source_trx_id := p_process_accrual_rec.source_trx_id;
7168 l_accrual_rec.source_trx_type := p_process_accrual_rec.source_trx_type;
7169 -- rmunjulu bug 6736148 -- end
7170
7171 -- Call CREATE_ACCRUAL procedure to create accrual transactions and entries
7172 CREATE_ACCRUALS (
7173 p_api_version => l_api_version,
7174 p_init_msg_list => l_init_msg_list,
7175 x_return_status => l_return_status,
7176 x_msg_count => l_msg_count,
7177 x_msg_data => l_msg_data,
7178 x_tcnv_rec => l_tcnv_rec,
7179 x_tclv_tbl => l_tclv_tbl,
7180 p_accrual_rec => l_accrual_rec,
7181 p_stream_tbl => l_stream_tbl_rep,
7182 p_representation_type => 'SECONDARY');
7183
7184 -- store the highest degree of error
7185 IF (l_return_status <> Okl_Api.G_RET_STS_SUCCESS) THEN
7186 IF (l_return_status = Okl_Api.G_RET_STS_UNEXP_ERROR) THEN
7187 -- need to leave
7188 Okl_Api.set_message(p_app_name => g_app_name,
7189 p_msg_name => 'OKL_AGN_CRE_ACR_ERROR',
7190 p_token1 => g_contract_number_token,
7191 p_token1_value => l_contract_number);
7192 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
7193 ELSIF (l_return_Status = Okl_Api.G_RET_STS_ERROR) THEN
7194 Okl_Api.set_message(p_app_name => g_app_name,
7195 p_msg_name => 'OKL_AGN_CRE_ACR_ERROR',
7196 p_token1 => g_contract_number_token,
7197 p_token1_value => l_contract_number);
7198 RAISE OKL_API.G_EXCEPTION_ERROR;
7199 END IF;
7200 END IF;
7201 IF p_process_accrual_rec.submission_mode='BATCH' THEN
7202 FND_FILE.PUT_LINE(FND_FILE.OUTPUT,RPAD(l_contract_number,28)||
7203 RPAD(l_tcnv_rec.trx_number,22)||
7204 RPAD(FND_MESSAGE.GET_STRING('OKL','OKL_AGN_RPT_NON_REVENUE'),17)||
7205 RPAD(Okl_Accounting_Util.Get_Lookup_Meaning('YES_NO',l_tcnv_rec.accrual_status_yn,0,0),20)||
7206 RPAD(Okl_Accounting_Util.Get_Lookup_Meaning('YES_NO',l_tcnv_rec.update_status_yn,0,0),16)||
7207 RPAD(l_tcnv_rec.currency_code,9)||
7208 LPAD(Okl_Accounting_Util.FORMAT_AMOUNT(l_tcnv_rec.amount,l_tcnv_rec.currency_code),17) ||
7209 LPAD(Okl_Accounting_Util.Get_Lookup_Meaning('OKL_REPRESENTATION_TYPE','SECONDARY'), 10));
7210 END IF; -- if p_process_accrual_rec.submission_mode...
7211 END IF; -- IF l_stream_tbl_rep.COUNT > 0
7212 -- MGAAP end 7263041
7213 END IF;
7214
7215 -- ER 2872216 Option to ignore accrual rules.
7216 --Get the stream amounts for this contract which are subject to accrual rules
7217 -- Bug 4011843. Modified p_accrual_rule_yn value for UDS.
7218 l_stream_tbl.DELETE(l_stream_tbl.COUNT);
7219 GET_ACCRUAL_STREAMS(x_return_status => l_return_status
7220 ,x_stream_tbl => l_stream_tbl
7221 ,p_khr_id => l_contract_id
7222 ,p_product_id => l_product_id
7223 ,p_ctr_start_date => l_start_date
7224 ,p_period_end_date => l_period_end_date
7225 ,p_accrual_rule_yn => 'ACRL_WITHOUT_RULE');
7226 -- store the highest degree of error
7227 IF (l_return_status <> Okl_Api.G_RET_STS_SUCCESS) THEN
7228 Okl_Api.set_message(p_app_name => g_app_name,
7229 p_msg_name => 'OKL_AGN_STREAM_ERROR',
7230 p_token1 => g_contract_number_token,
7231 p_token1_value => l_contract_number);
7232 RAISE OKL_API.G_EXCEPTION_ERROR;
7233 END IF;
7234 l_tcnv_rec.trx_number := null; -- Bug 7555143
7235 l_tcnv_rec.ID := null;
7236 IF l_stream_tbl.COUNT > 0 THEN
7237
7238 -- re-initialize necessary variables
7239 l_total := 0;
7240 l_accrual_rec := NULL;
7241
7242 -- Calculate total amount for transaction header
7243 FOR i IN l_stream_tbl.FIRST..l_stream_tbl.LAST
7244 LOOP
7245 l_total := l_total + l_stream_tbl(i).stream_amount;
7246 END LOOP;
7247 -- Build the accrual record
7248 -- Bug 3644681. Don't populate values for accrual rule and override flags
7249 l_accrual_rec.contract_id := l_contract_id;
7250 l_accrual_rec.set_of_books_id := l_sob_id;
7251 l_accrual_rec.accrual_date := l_accrual_date;
7252 l_accrual_rec.trx_date := l_accrual_date;
7253 l_accrual_rec.contract_number := l_contract_number;
7254 l_accrual_rec.rule_result := NULL;
7255 l_accrual_rec.override_status := NULL;
7256 l_accrual_rec.description := l_batch_name;
7257 l_accrual_rec.amount := l_total;
7258 l_accrual_rec.currency_code := l_khr_currency_code;
7259 l_accrual_rec.currency_conversion_type := l_currency_conv_type;
7260 l_accrual_rec.currency_conversion_rate := l_currency_conv_rate;
7261 l_accrual_rec.currency_conversion_date := l_currency_conv_date;
7262 l_accrual_rec.product_id := l_product_id;
7263 l_accrual_rec.trx_type_id := l_try_id;
7264 l_accrual_rec.advance_arrears := l_billing_type;
7265 l_accrual_rec.factoring_synd_flag := l_factoring_synd_flag;
7266 l_accrual_rec.post_to_gl := 'Y';
7267 l_accrual_rec.gl_reversal_flag := 'N';
7268 l_accrual_rec.memo_yn := 'N';
7269 l_accrual_rec.accrual_activity := 'ACCRUAL';
7270 l_accrual_rec.accrual_rule_yn := 'N';
7271
7272 -- rmunjulu bug 6736148 -- start
7273 l_accrual_rec.source_trx_id := p_process_accrual_rec.source_trx_id;
7274 l_accrual_rec.source_trx_type := p_process_accrual_rec.source_trx_type;
7275 -- rmunjulu bug 6736148 -- end
7276
7277 -- Call CREATE_ACCRUAL procedure to create accrual transactions and entries
7278 CREATE_ACCRUALS (
7279 p_api_version => l_api_version,
7280 p_init_msg_list => l_init_msg_list,
7281 x_return_status => l_return_status,
7282 x_msg_count => l_msg_count,
7283 x_msg_data => l_msg_data,
7284 x_tcnv_rec => l_tcnv_rec,
7285 x_tclv_tbl => l_tclv_tbl,
7286 p_accrual_rec => l_accrual_rec,
7287 p_stream_tbl => l_stream_tbl);
7288
7289 IF (l_return_status <> Okl_Api.G_RET_STS_SUCCESS) THEN
7290 IF (l_return_status = Okl_Api.G_RET_STS_UNEXP_ERROR) THEN
7291 -- need to leave
7292 Okl_Api.set_message(p_app_name => g_app_name,
7293 p_msg_name => 'OKL_AGN_CRE_ACR_ERROR',
7294 p_token1 => g_contract_number_token,
7295 p_token1_value => l_contract_number);
7296 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
7297 ELSIF (l_return_Status = Okl_Api.G_RET_STS_ERROR) THEN
7298 Okl_Api.set_message(p_app_name => g_app_name,
7299 p_msg_name => 'OKL_AGN_CRE_ACR_ERROR',
7300 p_token1 => g_contract_number_token,
7301 p_token1_value => l_contract_number);
7302 RAISE OKL_API.G_EXCEPTION_ERROR;
7303 END IF;
7304 END IF;
7305 IF p_process_accrual_rec.submission_mode='BATCH' THEN
7306 FND_FILE.PUT_LINE(FND_FILE.OUTPUT,RPAD(l_contract_number,28)||
7307 RPAD(l_tcnv_rec.trx_number,22)||
7308 RPAD(FND_MESSAGE.GET_STRING('OKL','OKL_AGN_RPT_REVENUE'),17)||
7309 RPAD(Okl_Accounting_Util.Get_Lookup_Meaning('OKL_ACCRUAL_ACTIVITY','NOT APPLICABLE',540,0),20)||
7310 RPAD(Okl_Accounting_Util.Get_Lookup_Meaning('OKL_ACCRUAL_ACTIVITY','NOT APPLICABLE',540,0),16)||
7311 RPAD(l_tcnv_rec.currency_code,9)||
7312 LPAD(Okl_Accounting_Util.FORMAT_AMOUNT(l_tcnv_rec.amount,l_tcnv_rec.currency_code),17) ||
7313 LPAD(Okl_Accounting_Util.Get_Lookup_Meaning('OKL_REPRESENTATION_TYPE','PRIMARY'), 8));
7314 END IF; -- if p_process_accrual_rec.submission_mode =...
7315
7316 END IF; -- IF l_stream_tbl.COUNT > 0
7317 -- MGAAP start 7263041
7318 IF (l_Multi_gaap_yn = 'Y') THEN
7319 l_stream_tbl_rep.DELETE(l_stream_tbl_rep.COUNT); -- MGAAP 7263041
7320 GET_ACCRUAL_STREAMS(x_return_status => l_return_status
7321 ,x_stream_tbl => l_stream_tbl_rep
7322 ,p_khr_id => l_contract_id
7323 ,p_product_id => l_reporting_pdt_id
7324 ,p_ctr_start_date => l_start_date
7325 ,p_period_end_date => G_PERIOD_END_DATE_REP
7326 ,p_accrual_rule_yn => 'ACRL_WITHOUT_RULE');
7327 -- store the highest degree of error
7328 IF (l_return_status <> Okl_Api.G_RET_STS_SUCCESS) THEN
7329 Okl_Api.set_message(p_app_name => g_app_name,
7330 p_msg_name => 'OKL_AGN_STREAM_ERROR',
7331 p_token1 => g_contract_number_token,
7332 p_token1_value => l_contract_number);
7333 RAISE OKL_API.G_EXCEPTION_ERROR;
7334 END IF;
7335 IF l_stream_tbl_rep.COUNT > 0 THEN
7336
7337 -- re-initialize necessary variables
7338 l_total := 0;
7339 l_accrual_rec := NULL;
7340
7341 -- Calculate total amount for transaction header
7342 l_total := 0;
7343 FOR i IN l_stream_tbl_rep.FIRST..l_stream_tbl_rep.LAST
7344 LOOP
7345 l_total := l_total + l_stream_tbl_rep(i).stream_amount;
7346 END LOOP;
7347 -- Build the accrual record
7348 -- Bug 3644681. Don't populate values for accrual rule and override flags
7349 l_accrual_rec.contract_id := l_contract_id;
7350 l_accrual_rec.set_of_books_id := G_sob_id_rep;
7351 l_accrual_rec.accrual_date := l_accrual_date;
7352 l_accrual_rec.trx_date := l_accrual_date;
7353 l_accrual_rec.contract_number := l_contract_number;
7354 l_accrual_rec.rule_result := NULL;
7355 l_accrual_rec.override_status := NULL;
7356 l_accrual_rec.description := l_batch_name;
7357 l_accrual_rec.amount := l_total;
7358 l_accrual_rec.currency_code := l_khr_currency_code;
7359 l_accrual_rec.currency_conversion_type := l_currency_conv_type;
7360 l_accrual_rec.currency_conversion_rate := l_currency_conv_rate;
7361 l_accrual_rec.currency_conversion_date := l_currency_conv_date;
7362 l_accrual_rec.product_id := l_reporting_pdt_id;
7363 l_accrual_rec.trx_type_id := l_try_id;
7364 l_accrual_rec.advance_arrears := l_billing_type;
7365 l_accrual_rec.factoring_synd_flag := l_factoring_synd_flag;
7366 l_accrual_rec.post_to_gl := 'Y';
7367 l_accrual_rec.gl_reversal_flag := 'N';
7368 l_accrual_rec.memo_yn := 'N';
7369 l_accrual_rec.accrual_activity := 'ACCRUAL';
7370 l_accrual_rec.accrual_rule_yn := 'N';
7371
7372 -- MGAAP start
7373 l_accrual_rec.trx_number := l_tcnv_rec.trx_number;
7374 l_accrual_rec.primary_rep_trx_id := l_tcnv_rec.ID;
7375 -- MGAAP end
7376
7377 -- rmunjulu bug 6736148 -- start
7378 l_accrual_rec.source_trx_id := p_process_accrual_rec.source_trx_id;
7379 l_accrual_rec.source_trx_type := p_process_accrual_rec.source_trx_type;
7380 -- rmunjulu bug 6736148 -- end
7381
7382 -- Call CREATE_ACCRUAL procedure to create accrual transactions and entries
7383 CREATE_ACCRUALS (
7384 p_api_version => l_api_version,
7385 p_init_msg_list => l_init_msg_list,
7386 x_return_status => l_return_status,
7387 x_msg_count => l_msg_count,
7388 x_msg_data => l_msg_data,
7389 x_tcnv_rec => l_tcnv_rec,
7390 x_tclv_tbl => l_tclv_tbl,
7391 p_accrual_rec => l_accrual_rec,
7392 p_stream_tbl => l_stream_tbl_rep,
7393 p_representation_type => 'SECONDARY');
7394
7395 IF (l_return_status <> Okl_Api.G_RET_STS_SUCCESS) THEN
7396 IF (l_return_status = Okl_Api.G_RET_STS_UNEXP_ERROR) THEN
7397 -- need to leave
7398 Okl_Api.set_message(p_app_name => g_app_name,
7399 p_msg_name => 'OKL_AGN_CRE_ACR_ERROR',
7400 p_token1 => g_contract_number_token,
7401 p_token1_value => l_contract_number);
7402 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
7403 ELSIF (l_return_Status = Okl_Api.G_RET_STS_ERROR) THEN
7404 Okl_Api.set_message(p_app_name => g_app_name,
7405 p_msg_name => 'OKL_AGN_CRE_ACR_ERROR',
7406 p_token1 => g_contract_number_token,
7407 p_token1_value => l_contract_number);
7408 RAISE OKL_API.G_EXCEPTION_ERROR;
7409 END IF;
7410 END IF;
7411 IF p_process_accrual_rec.submission_mode='BATCH' THEN
7412 FND_FILE.PUT_LINE(FND_FILE.OUTPUT,RPAD(l_contract_number,28)||
7413 RPAD(l_tcnv_rec.trx_number,22)||
7414 RPAD(FND_MESSAGE.GET_STRING('OKL','OKL_AGN_RPT_REVENUE'),17)||
7415 RPAD(Okl_Accounting_Util.Get_Lookup_Meaning('OKL_ACCRUAL_ACTIVITY','NOT APPLICABLE',540,0),20)||
7416 RPAD(Okl_Accounting_Util.Get_Lookup_Meaning('OKL_ACCRUAL_ACTIVITY','NOT APPLICABLE',540,0),16)||
7417 RPAD(l_tcnv_rec.currency_code,9)||
7418 LPAD(Okl_Accounting_Util.FORMAT_AMOUNT(l_tcnv_rec.amount,l_tcnv_rec.currency_code),17) ||
7419 LPAD(Okl_Accounting_Util.Get_Lookup_Meaning('OKL_REPRESENTATION_TYPE','SECONDARY'), 10));
7420 END IF; -- if p_process_accrual_rec.submission_mode =...
7421
7422 END IF; -- IF l_stream_tbl_rep.COUNT > 0
7423
7424 END IF;
7425 -- MGAAP end 7263041
7426
7427 END IF; -- IF l_rev_rec_method IN ...
7428
7429
7430 IF l_rev_rec_method = 'ESTIMATED_AND_BILLED' THEN
7431
7432 OPEN check_variable_trx(l_contract_id, l_period_end_date);
7433 FETCH check_variable_trx INTO l_trx_exists;
7434 CLOSE check_variable_trx;
7435
7436 IF l_trx_exists <> 'Y' THEN
7437
7438 -- OPEN sty_id_csr('VARIABLE INCOME ACCRUAL');
7439 -- FETCH sty_id_csr INTO l_sty_id;
7440 -- IF sty_id_csr%NOTFOUND THEN
7441 -- CLOSE sty_id_csr;
7442 -- -- store SQL error message on message stack for caller and entry in log file
7443 -- Okl_Api.set_message(p_app_name => g_app_name,
7444 -- p_msg_name => 'OKL_AGN_STRM_TYPE_ERROR',
7445 -- p_token1 => g_stream_name_token,
7446 -- p_token1_value => 'VARIABLE INCOME ACCRUAL');
7447 -- RAISE Okl_Api.G_EXCEPTION_ERROR;
7448 -- END IF;
7449 -- CLOSE sty_id_csr;
7450
7451 -- Get the stream type id for variable interest rate product
7452 OKL_STREAMS_UTIL.get_dependent_stream_type(
7453 p_khr_id => l_contract_id,
7454 p_primary_sty_purpose => 'VARIABLE_INTEREST',
7455 p_dependent_sty_purpose => 'VARIABLE_INTEREST_INCOME',
7456 x_return_status => l_return_status,
7457 x_dependent_sty_id => l_sty_id);
7458
7459 IF l_return_status <> OKL_API.G_RET_STS_SUCCESS THEN
7460 -- store SQL error message on message stack for caller and entry in log file
7461 Okl_Api.set_message(p_app_name => g_app_name,
7462 p_msg_name => 'OKL_AGN_STRM_TYPE_ERROR',
7463 p_token1 => g_stream_name_token,
7464 p_token1_value => 'VARIABLE INTEREST INCOME');
7465 RAISE Okl_Api.G_EXCEPTION_ERROR;
7466 END IF;
7467
7468 -- MGAAP 7263041 start
7469 IF (l_multi_gaap_yn = 'Y') THEN
7470 -- Get the stream type id for variable interest rate product
7471 OKL_STREAMS_UTIL.get_dependent_stream_type_rep(
7472 p_khr_id => l_contract_id,
7473 p_primary_sty_purpose => 'VARIABLE_INTEREST',
7474 p_dependent_sty_purpose => 'VARIABLE_INTEREST_INCOME',
7475 x_return_status => l_return_status,
7476 x_dependent_sty_id => l_sty_id_rep);
7477
7478 IF l_return_status <> OKL_API.G_RET_STS_SUCCESS THEN
7479 -- store SQL error message on message stack for caller and entry in log file
7480 Okl_Api.set_message(p_app_name => g_app_name,
7481 p_msg_name => 'OKL_AGN_STRM_TYPE_ERROR',
7482 p_token1 => g_stream_name_token,
7483 p_token1_value => 'VARIABLE INTEREST INCOME');
7484 RAISE Okl_Api.G_EXCEPTION_ERROR;
7485 END IF;
7486 END IF;
7487 -- MGAAP 7263041 end
7488
7489 -- Get last interest calculated date
7490 OPEN last_int_date_csr(l_contract_id);
7491 FETCH last_int_date_csr INTO l_last_interest_calc_date;
7492 CLOSE last_int_date_csr;
7493
7494 -- Get revenue recognition basis from stream type
7495 FOR x IN get_rev_rec_basis_csr(l_sty_id)
7496 LOOP
7497 l_rev_rec_basis := x.accrual_yn;
7498 END LOOP;
7499
7500 -- if last interest date is null then calculate from contract start date
7501 -- recommended as per PM on 07-31-02
7502 -- Bug 5136000. Subtracting one day from contract start date since
7503 -- one day is being added to the last int calc date in the function contract
7504 -- days to accrue.
7505 -- Bug 5162929.
7506 -- Undoing changes made in bug 5136000 as per PM recommendation.14-Apr-2006.
7507 -- Adding a day to the last interest calculation date.
7508 IF l_last_interest_calc_date IS NULL THEN
7509 l_last_interest_calc_date := l_start_date;
7510 ELSE
7511 l_last_interest_calc_date := l_last_interest_calc_date+1;
7512 END IF;
7513
7514 -- process only for balance period, else do nothing
7515 IF l_accrual_date - l_last_interest_calc_date > 0 THEN
7516 IF l_rev_rec_basis = 'ACRL_WITH_RULE' THEN
7517 IF l_override_status = 'N' THEN
7518 -- Check the override status and current accrual status and process accordingly
7519 IF l_rule_result = 'Y' THEN
7520 --Create Accrual Entries and Corresponding Reversal Entries
7521 l_ctxt_val_tbl(1).NAME := 'p_accrual_date';
7522 l_ctxt_val_tbl(1).VALUE := TO_CHAR(l_accrual_date, 'MM/DD/YYYY');
7523 l_ctxt_val_tbl(2).NAME := 'p_last_int_calc_date';
7524 l_ctxt_val_tbl(2).VALUE := TO_CHAR(l_last_interest_calc_date, 'MM/DD/YYYY');
7525 l_ctxt_val_tbl(3).NAME := 'p_period_start_date';
7526 l_ctxt_val_tbl(3).VALUE := TO_CHAR(l_period_start_date, 'MM/DD/YYYY');
7527 l_ctxt_val_tbl(4).NAME := 'p_period_end_date';
7528 l_ctxt_val_tbl(4).VALUE := TO_CHAR(l_period_end_date, 'MM/DD/YYYY');
7529 --Create Accrual Entries
7530 -- Build the accrual record
7531 l_accrual_rec.contract_id := l_contract_id;
7532 l_accrual_rec.set_of_books_id := l_sob_id;
7533 l_accrual_rec.accrual_date := l_accrual_date;
7534 l_accrual_rec.trx_date := l_accrual_date;
7535 l_accrual_rec.contract_number := l_contract_number;
7536 l_accrual_rec.rule_result := l_rule_result;
7537 l_accrual_rec.override_status := l_override_status;
7538 l_accrual_rec.description := l_batch_name;
7539 l_accrual_rec.amount := 0;
7540 l_accrual_rec.currency_code := l_khr_currency_code;
7541 l_accrual_rec.currency_conversion_type := l_currency_conv_type;
7542 l_accrual_rec.currency_conversion_rate := l_currency_conv_rate;
7543 l_accrual_rec.currency_conversion_date := l_currency_conv_date;
7544 l_accrual_rec.product_id := l_product_id;
7545 l_accrual_rec.trx_type_id := l_try_id;
7546 l_accrual_rec.sty_id := l_sty_id;
7547 l_accrual_rec.advance_arrears := l_billing_type;
7548 l_accrual_rec.factoring_synd_flag := l_factoring_synd_flag;
7549 l_accrual_rec.post_to_gl := 'Y';
7550 l_accrual_rec.gl_reversal_flag := 'Y';
7551 l_accrual_rec.memo_yn := 'N';
7552 l_accrual_rec.accrual_activity := 'ACCRUAL';
7553 l_accrual_rec.accrual_rule_yn := 'Y';
7554 --Added by dpsingh for SLA Uptake (Bug 5707866)
7555 OPEN get_accrual_reversal_date(l_accrual_rec.set_of_books_id, l_accrual_rec.accrual_date);
7556 FETCH get_accrual_reversal_date into l_accrual_rec.accrual_reversal_date;
7557 CLOSE get_accrual_reversal_date;
7558
7559 -- Call CREATE_ACCRUAL procedure to create accrual transactions and entries
7560 l_tcnv_rec.trx_number := null; -- Bug 7555143
7561 l_tcnv_rec.ID := null;
7562 CREATE_ACCRUALS_FORMULA (
7563 p_api_version => l_api_version,
7564 p_init_msg_list => l_init_msg_list,
7565 x_return_status => l_return_status,
7566 x_msg_count => l_msg_count,
7567 x_msg_data => l_msg_data,
7568 x_tcnv_rec => l_tcnv_rec,
7569 x_tclv_tbl => l_tclv_tbl,
7570 p_accrual_rec => l_accrual_rec,
7571 p_ctxt_val_tbl => l_ctxt_val_tbl);
7572
7573 -- store the highest degree of error
7574 IF (l_return_status <> Okl_Api.G_RET_STS_SUCCESS) THEN
7575 IF (l_return_status = Okl_Api.G_RET_STS_UNEXP_ERROR) THEN
7576 -- need to leave
7577 Okl_Api.set_message(p_app_name => g_app_name,
7578 p_msg_name => 'OKL_AGN_CRE_ACR_ERROR',
7579 p_token1 => g_contract_number_token,
7580 p_token1_value => l_contract_number);
7581 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
7582 ELSIF (l_return_status = Okl_Api.G_RET_STS_ERROR) THEN
7583 Okl_Api.set_message(p_app_name => g_app_name,
7584 p_msg_name => 'OKL_AGN_CRE_ACR_ERROR',
7585 p_token1 => g_contract_number_token,
7586 p_token1_value => l_contract_number);
7587 RAISE OKL_API.G_EXCEPTION_ERROR;
7588 END IF;
7589 END IF;
7590 IF p_process_accrual_rec.submission_mode='BATCH' THEN
7591 FND_FILE.PUT_LINE(FND_FILE.OUTPUT,RPAD(l_contract_number,28)||
7592 RPAD(l_tcnv_rec.trx_number,22)||
7593 RPAD(FND_MESSAGE.GET_STRING('OKL','OKL_AGN_RPT_REVENUE'),17)||
7594 RPAD(Okl_Accounting_Util.Get_Lookup_Meaning('YES_NO',l_tcnv_rec.accrual_status_yn,0,0),20)||
7595 RPAD(Okl_Accounting_Util.Get_Lookup_Meaning('YES_NO',l_tcnv_rec.update_status_yn,0,0),16)||
7596 RPAD(l_tcnv_rec.currency_code,9)||
7597 LPAD(Okl_Accounting_Util.FORMAT_AMOUNT(l_tcnv_rec.amount,l_tcnv_rec.currency_code),17) ||
7598 LPAD(Okl_Accounting_Util.Get_Lookup_Meaning('OKL_REPRESENTATION_TYPE','PRIMARY'), 8));
7599 END IF; -- if p_process_accrual_rec.submission_mode=...
7600 -- MGAAP 7263041 start
7601 IF (l_multi_gaap_yn = 'Y') THEN
7602 l_accrual_rec.set_of_books_id := G_SOB_ID_REP;
7603 l_accrual_rec.product_id := l_reporting_pdt_id;
7604 l_accrual_rec.sty_id := l_sty_id_rep;
7605 l_accrual_rec.trx_number := l_tcnv_rec.trx_number;
7606 l_accrual_rec.primary_rep_trx_id := l_tcnv_rec.id;
7607 OPEN get_accrual_reversal_date(l_accrual_rec.set_of_books_id, l_accrual_rec.accrual_date);
7608 FETCH get_accrual_reversal_date into l_accrual_rec.accrual_reversal_date;
7609 CLOSE get_accrual_reversal_date;
7610
7611 -- Call CREATE_ACCRUAL procedure to create accrual transactions and entries for SECONDARY
7612 CREATE_ACCRUALS_FORMULA (
7613 p_api_version => l_api_version,
7614 p_init_msg_list => l_init_msg_list,
7615 x_return_status => l_return_status,
7616 x_msg_count => l_msg_count,
7617 x_msg_data => l_msg_data,
7618 x_tcnv_rec => l_tcnv_rec,
7619 x_tclv_tbl => l_tclv_tbl,
7620 p_accrual_rec => l_accrual_rec,
7621 p_ctxt_val_tbl => l_ctxt_val_tbl,
7622 p_representation_type => 'SECONDARY'); -- MGAAP
7623
7624 -- store the highest degree of error
7625 IF (l_return_status <> Okl_Api.G_RET_STS_SUCCESS) THEN
7626 IF (l_return_status = Okl_Api.G_RET_STS_UNEXP_ERROR) THEN
7627 -- need to leave
7628 Okl_Api.set_message(p_app_name => g_app_name,
7629 p_msg_name => 'OKL_AGN_CRE_ACR_ERROR',
7630 p_token1 => g_contract_number_token,
7631 p_token1_value => l_contract_number);
7632 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
7633 ELSIF (l_return_status = Okl_Api.G_RET_STS_ERROR) THEN
7634 Okl_Api.set_message(p_app_name => g_app_name,
7635 p_msg_name => 'OKL_AGN_CRE_ACR_ERROR',
7636 p_token1 => g_contract_number_token,
7637 p_token1_value => l_contract_number);
7638 RAISE OKL_API.G_EXCEPTION_ERROR;
7639 END IF;
7640 END IF;
7641 IF p_process_accrual_rec.submission_mode='BATCH' THEN
7642 FND_FILE.PUT_LINE(FND_FILE.OUTPUT,RPAD(l_contract_number,28)||
7643 RPAD(l_tcnv_rec.trx_number,22)||
7644 RPAD(FND_MESSAGE.GET_STRING('OKL','OKL_AGN_RPT_REVENUE'),17)||
7645 RPAD(Okl_Accounting_Util.Get_Lookup_Meaning('YES_NO',l_tcnv_rec.accrual_status_yn,0,0),20)||
7646 RPAD(Okl_Accounting_Util.Get_Lookup_Meaning('YES_NO',l_tcnv_rec.update_status_yn,0,0),16)||
7647 RPAD(l_tcnv_rec.currency_code,9)||
7648 LPAD(Okl_Accounting_Util.FORMAT_AMOUNT(l_tcnv_rec.amount,l_tcnv_rec.currency_code),17) ||
7649 LPAD(Okl_Accounting_Util.Get_Lookup_Meaning('OKL_REPRESENTATION_TYPE','SECONDARY'), 10));
7650 END IF; -- if p_process_accrual_rec.submission_mode=...
7651 END IF;
7652 -- MGAAP 7263041 end
7653 ELSE
7654 -- Create Non-Accrual(memo) entries and Corresponding Reversal entries
7655 l_ctxt_val_tbl(1).NAME := 'p_accrual_date';
7656 l_ctxt_val_tbl(1).VALUE := TO_CHAR(l_accrual_date, 'MM/DD/YYYY');
7657 l_ctxt_val_tbl(2).NAME := 'p_last_int_calc_date';
7658 l_ctxt_val_tbl(2).VALUE := TO_CHAR(l_last_interest_calc_date, 'MM/DD/YYYY');
7659 l_ctxt_val_tbl(3).NAME := 'p_period_start_date';
7660 l_ctxt_val_tbl(3).VALUE := TO_CHAR(l_period_start_date, 'MM/DD/YYYY');
7661 l_ctxt_val_tbl(4).NAME := 'p_period_end_date';
7662 l_ctxt_val_tbl(4).VALUE := TO_CHAR(l_period_end_date, 'MM/DD/YYYY');
7663
7664 --Create Accrual Entries
7665 -- Build the accrual record
7666 l_accrual_rec.contract_id := l_contract_id;
7667 l_accrual_rec.set_of_books_id := l_sob_id;
7668 l_accrual_rec.accrual_date := l_accrual_date;
7669 l_accrual_rec.trx_date := l_accrual_date;
7670 l_accrual_rec.contract_number := l_contract_number;
7671 l_accrual_rec.rule_result := l_rule_result;
7672 l_accrual_rec.override_status := l_override_status;
7673 l_accrual_rec.description := l_batch_name;
7674 l_accrual_rec.amount := 0;
7675 l_accrual_rec.currency_code := l_khr_currency_code;
7676 l_accrual_rec.currency_conversion_type := l_currency_conv_type;
7677 l_accrual_rec.currency_conversion_rate := l_currency_conv_rate;
7678 l_accrual_rec.currency_conversion_date := l_currency_conv_date;
7679 l_accrual_rec.product_id := l_product_id;
7680 l_accrual_rec.trx_type_id := l_try_id;
7681 l_accrual_rec.sty_id := l_sty_id;
7682 l_accrual_rec.advance_arrears := l_billing_type;
7683 l_accrual_rec.factoring_synd_flag := l_factoring_synd_flag;
7684 l_accrual_rec.post_to_gl := 'Y';
7685 l_accrual_rec.gl_reversal_flag := 'Y';
7686 l_accrual_rec.memo_yn := 'Y';
7687 l_accrual_rec.accrual_activity := 'NON-ACCRUAL';
7688 l_accrual_rec.accrual_rule_yn := 'Y';
7689 --Added by dpsingh for SLA Uptake (Bug 5707866)
7690 OPEN get_accrual_reversal_date(l_accrual_rec.set_of_books_id, l_accrual_rec.accrual_date);
7691 FETCH get_accrual_reversal_date into l_accrual_rec.accrual_reversal_date;
7692 CLOSE get_accrual_reversal_date;
7693
7694 l_tcnv_rec.trx_number := null; -- Bug 7555143
7695 l_tcnv_rec.ID := null;
7696 -- Call CREATE_ACCRUAL_FORMULA procedure to create accrual transactions and entries
7697 CREATE_ACCRUALS_FORMULA (
7698 p_api_version => l_api_version,
7699 p_init_msg_list => l_init_msg_list,
7700 x_return_status => l_return_status,
7701 x_msg_count => l_msg_count,
7702 x_msg_data => l_msg_data,
7703 x_tcnv_rec => l_tcnv_rec,
7704 x_tclv_tbl => l_tclv_tbl,
7705 p_accrual_rec => l_accrual_rec,
7706 p_ctxt_val_tbl => l_ctxt_val_tbl);
7707
7708 -- store the highest degree of error
7709 IF (l_return_status <> Okl_Api.G_RET_STS_SUCCESS) THEN
7710 IF (l_return_status = Okl_Api.G_RET_STS_UNEXP_ERROR) THEN
7711 -- need to leave
7712 Okl_Api.set_message(p_app_name => g_app_name,
7713 p_msg_name => 'OKL_AGN_CRE_ACR_ERROR',
7714 p_token1 => g_contract_number_token,
7715 p_token1_value => l_contract_number);
7716 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
7717 ELSIF (l_return_Status = Okl_Api.G_RET_STS_ERROR) THEN
7718 Okl_Api.set_message(p_app_name => g_app_name,
7719 p_msg_name => 'OKL_AGN_CRE_ACR_ERROR',
7720 p_token1 => g_contract_number_token,
7721 p_token1_value => l_contract_number);
7722 RAISE OKL_API.G_EXCEPTION_ERROR;
7723 END IF;
7724 END IF;
7725
7726 IF p_process_accrual_rec.submission_mode='BATCH' THEN
7727 FND_FILE.PUT_LINE(FND_FILE.OUTPUT,RPAD(l_contract_number,28)||
7728 RPAD(l_tcnv_rec.trx_number,22)||
7729 RPAD(FND_MESSAGE.GET_STRING('OKL','OKL_AGN_RPT_NON_REVENUE'),17)||
7730 RPAD(Okl_Accounting_Util.Get_Lookup_Meaning('YES_NO',l_tcnv_rec.accrual_status_yn,0,0),20)||
7731 RPAD(Okl_Accounting_Util.Get_Lookup_Meaning('YES_NO',l_tcnv_rec.update_status_yn,0,0),16)||
7732 RPAD(l_tcnv_rec.currency_code,9)||
7733 LPAD(Okl_Accounting_Util.FORMAT_AMOUNT(l_tcnv_rec.amount,l_tcnv_rec.currency_code),17) ||
7734 LPAD(Okl_Accounting_Util.Get_Lookup_Meaning('OKL_REPRESENTATION_TYPE','PRIMARY'), 8));
7735 END IF; -- if p_process_accrual_rec.submission_mode=..
7736
7737 -- MGAAP 7263041 start
7738 IF (l_multi_gaap_yn = 'Y') THEN
7739 l_accrual_rec.set_of_books_id := G_SOB_ID_REP;
7740 l_accrual_rec.product_id := l_reporting_pdt_id;
7741 l_accrual_rec.sty_id := l_sty_id_rep;
7742 l_accrual_rec.trx_number := l_tcnv_rec.trx_number;
7743 l_accrual_rec.primary_rep_trx_id := l_tcnv_rec.id;
7744 OPEN get_accrual_reversal_date(l_accrual_rec.set_of_books_id, l_accrual_rec.accrual_date);
7745 FETCH get_accrual_reversal_date into l_accrual_rec.accrual_reversal_date;
7746 CLOSE get_accrual_reversal_date;
7747 -- Call CREATE_ACCRUAL_FORMULA procedure to create accrual transactions and entries for SECONDARY
7748 CREATE_ACCRUALS_FORMULA (
7749 p_api_version => l_api_version,
7750 p_init_msg_list => l_init_msg_list,
7751 x_return_status => l_return_status,
7752 x_msg_count => l_msg_count,
7753 x_msg_data => l_msg_data,
7754 x_tcnv_rec => l_tcnv_rec,
7755 x_tclv_tbl => l_tclv_tbl,
7756 p_accrual_rec => l_accrual_rec,
7757 p_ctxt_val_tbl => l_ctxt_val_tbl,
7758 p_representation_type => 'SECONDARY'); -- MGAAP
7759
7760 -- store the highest degree of error
7761 IF (l_return_status <> Okl_Api.G_RET_STS_SUCCESS) THEN
7762 IF (l_return_status = Okl_Api.G_RET_STS_UNEXP_ERROR) THEN
7763 -- need to leave
7764 Okl_Api.set_message(p_app_name => g_app_name,
7765 p_msg_name => 'OKL_AGN_CRE_ACR_ERROR',
7766 p_token1 => g_contract_number_token,
7767 p_token1_value => l_contract_number);
7768 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
7769 ELSIF (l_return_Status = Okl_Api.G_RET_STS_ERROR) THEN
7770 Okl_Api.set_message(p_app_name => g_app_name,
7771 p_msg_name => 'OKL_AGN_CRE_ACR_ERROR',
7772 p_token1 => g_contract_number_token,
7773 p_token1_value => l_contract_number);
7774 RAISE OKL_API.G_EXCEPTION_ERROR;
7775 END IF;
7776 END IF;
7777
7778 IF p_process_accrual_rec.submission_mode='BATCH' THEN
7779 FND_FILE.PUT_LINE(FND_FILE.OUTPUT,RPAD(l_contract_number,28)||
7780 RPAD(l_tcnv_rec.trx_number,22)||
7781 RPAD(FND_MESSAGE.GET_STRING('OKL','OKL_AGN_RPT_NON_REVENUE'),17)||
7782 RPAD(Okl_Accounting_Util.Get_Lookup_Meaning('YES_NO',l_tcnv_rec.accrual_status_yn,0,0),20)||
7783 RPAD(Okl_Accounting_Util.Get_Lookup_Meaning('YES_NO',l_tcnv_rec.update_status_yn,0,0),16)||
7784 RPAD(l_tcnv_rec.currency_code,9)||
7785 LPAD(Okl_Accounting_Util.FORMAT_AMOUNT(l_tcnv_rec.amount,l_tcnv_rec.currency_code),17) ||
7786 LPAD(Okl_Accounting_Util.Get_Lookup_Meaning('OKL_REPRESENTATION_TYPE','SECONDARY'), 10));
7787 END IF; -- if p_process_accrual_rec.submission_mode=..
7788
7789 END IF;
7790 -- MGAAP 7263041 end
7791 END IF;
7792 ELSE
7793 -- Create MEMO entries
7794 l_ctxt_val_tbl(1).NAME := 'p_accrual_date';
7795 l_ctxt_val_tbl(1).VALUE := TO_CHAR(l_accrual_date, 'MM/DD/YYYY');
7796 l_ctxt_val_tbl(2).NAME := 'p_last_int_calc_date';
7797 l_ctxt_val_tbl(2).VALUE := TO_CHAR(l_last_interest_calc_date, 'MM/DD/YYYY');
7798 l_ctxt_val_tbl(3).NAME := 'p_period_start_date';
7799 l_ctxt_val_tbl(3).VALUE := TO_CHAR(l_period_start_date, 'MM/DD/YYYY');
7800 l_ctxt_val_tbl(4).NAME := 'p_period_end_date';
7801 l_ctxt_val_tbl(4).VALUE := TO_CHAR(l_period_end_date, 'MM/DD/YYYY');
7802 --Create Accrual Entries
7803 -- Build the accrual record
7804 l_accrual_rec.contract_id := l_contract_id;
7805 l_accrual_rec.set_of_books_id := l_sob_id;
7806 l_accrual_rec.accrual_date := l_accrual_date;
7807 l_accrual_rec.trx_date := l_accrual_date;
7808 l_accrual_rec.contract_number := l_contract_number;
7809 l_accrual_rec.rule_result := l_rule_result;
7810 l_accrual_rec.override_status := l_override_status;
7811 l_accrual_rec.description := l_batch_name;
7812 l_accrual_rec.amount := 0;
7813 l_accrual_rec.currency_code := l_khr_currency_code;
7814 l_accrual_rec.currency_conversion_type := l_currency_conv_type;
7815 l_accrual_rec.currency_conversion_rate := l_currency_conv_rate;
7816 l_accrual_rec.currency_conversion_date := l_currency_conv_date;
7817 l_accrual_rec.product_id := l_product_id;
7818 l_accrual_rec.trx_type_id := l_try_id;
7819 l_accrual_rec.sty_id := l_sty_id;
7820 l_accrual_rec.advance_arrears := l_billing_type;
7821 l_accrual_rec.factoring_synd_flag := l_factoring_synd_flag;
7822 l_accrual_rec.post_to_gl := 'Y';
7823 l_accrual_rec.gl_reversal_flag := 'Y';
7824 l_accrual_rec.memo_yn := 'Y';
7825 l_accrual_rec.accrual_activity := 'NON-ACCRUAL';
7826 l_accrual_rec.accrual_rule_yn := 'Y';
7827 --Added by dpsingh for SLA Uptake (Bug 5707866)
7828 OPEN get_accrual_reversal_date(l_accrual_rec.set_of_books_id, l_accrual_rec.accrual_date);
7829 FETCH get_accrual_reversal_date into l_accrual_rec.accrual_reversal_date;
7830 CLOSE get_accrual_reversal_date;
7831
7832 l_tcnv_rec.trx_number := null; -- Bug 7555143
7833 l_tcnv_rec.ID := null;
7834 -- Call CREATE_ACCRUAL procedure to create accrual transactions and entries
7835 CREATE_ACCRUALS_FORMULA (
7836 p_api_version => l_api_version,
7837 p_init_msg_list => l_init_msg_list,
7838 x_return_status => l_return_status,
7839 x_msg_count => l_msg_count,
7840 x_msg_data => l_msg_data,
7841 x_tcnv_rec => l_tcnv_rec,
7842 x_tclv_tbl => l_tclv_tbl,
7843 p_accrual_rec => l_accrual_rec,
7844 p_ctxt_val_tbl => l_ctxt_val_tbl);
7845
7846 -- store the highest degree of error
7847 IF (l_return_status <> Okl_Api.G_RET_STS_SUCCESS) THEN
7848 IF (l_return_status = Okl_Api.G_RET_STS_UNEXP_ERROR) THEN
7849 -- need to leave
7850 Okl_Api.set_message(p_app_name => g_app_name,
7851 p_msg_name => 'OKL_AGN_CRE_ACR_ERROR',
7852 p_token1 => g_contract_number_token,
7853 p_token1_value => l_contract_number);
7854 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
7855 ELSIF (l_return_Status = Okl_Api.G_RET_STS_ERROR) THEN
7856 Okl_Api.set_message(p_app_name => g_app_name,
7857 p_msg_name => 'OKL_AGN_CRE_ACR_ERROR',
7858 p_token1 => g_contract_number_token,
7859 p_token1_value => l_contract_number);
7860 RAISE OKL_API.G_EXCEPTION_ERROR;
7861 END IF;
7862 END IF;
7863 IF p_process_accrual_rec.submission_mode='BATCH' THEN
7864 FND_FILE.PUT_LINE(FND_FILE.OUTPUT,RPAD(l_contract_number,28)||
7865 RPAD(l_tcnv_rec.trx_number,22)||
7866 RPAD(FND_MESSAGE.GET_STRING('OKL','OKL_AGN_RPT_NON_REVENUE'),17)||
7867 RPAD(Okl_Accounting_Util.Get_Lookup_Meaning('YES_NO',l_tcnv_rec.accrual_status_yn,0,0),20)||
7868 RPAD(Okl_Accounting_Util.Get_Lookup_Meaning('YES_NO',l_tcnv_rec.update_status_yn,0,0),16)||
7869 RPAD(l_tcnv_rec.currency_code,9)||
7870 LPAD(Okl_Accounting_Util.FORMAT_AMOUNT(l_tcnv_rec.amount,l_tcnv_rec.currency_code),17) ||
7871 LPAD(Okl_Accounting_Util.Get_Lookup_Meaning('OKL_REPRESENTATION_TYPE','PRIMARY'), 8));
7872 END IF; -- if p_process_accrual_rec.submission_mode=...
7873 -- MGAAP 7263041 start
7874 IF (l_multi_gaap_yn = 'Y') THEN
7875 l_accrual_rec.set_of_books_id := G_SOB_ID_REP;
7876 l_accrual_rec.product_id := l_reporting_pdt_id;
7877 l_accrual_rec.sty_id := l_sty_id_rep;
7878 l_accrual_rec.trx_number := l_tcnv_rec.trx_number;
7879 l_accrual_rec.primary_rep_trx_id := l_tcnv_rec.id;
7880 OPEN get_accrual_reversal_date(l_accrual_rec.set_of_books_id, l_accrual_rec.accrual_date);
7881 FETCH get_accrual_reversal_date into l_accrual_rec.accrual_reversal_date;
7882 CLOSE get_accrual_reversal_date;
7883 -- Call CREATE_ACCRUAL procedure to create accrual transactions and entries for SECONDARY
7884 CREATE_ACCRUALS_FORMULA (
7885 p_api_version => l_api_version,
7886 p_init_msg_list => l_init_msg_list,
7887 x_return_status => l_return_status,
7888 x_msg_count => l_msg_count,
7889 x_msg_data => l_msg_data,
7890 x_tcnv_rec => l_tcnv_rec,
7891 x_tclv_tbl => l_tclv_tbl,
7892 p_accrual_rec => l_accrual_rec,
7893 p_ctxt_val_tbl => l_ctxt_val_tbl,
7894 p_representation_type => 'SECONDARY');
7895
7896 -- store the highest degree of error
7897 IF (l_return_status <> Okl_Api.G_RET_STS_SUCCESS) THEN
7898 IF (l_return_status = Okl_Api.G_RET_STS_UNEXP_ERROR) THEN
7899 -- need to leave
7900 Okl_Api.set_message(p_app_name => g_app_name,
7901 p_msg_name => 'OKL_AGN_CRE_ACR_ERROR',
7902 p_token1 => g_contract_number_token,
7903 p_token1_value => l_contract_number);
7904 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
7905 ELSIF (l_return_Status = Okl_Api.G_RET_STS_ERROR) THEN
7906 Okl_Api.set_message(p_app_name => g_app_name,
7907 p_msg_name => 'OKL_AGN_CRE_ACR_ERROR',
7908 p_token1 => g_contract_number_token,
7909 p_token1_value => l_contract_number);
7910 RAISE OKL_API.G_EXCEPTION_ERROR;
7911 END IF;
7912 END IF;
7913 IF p_process_accrual_rec.submission_mode='BATCH' THEN
7914 FND_FILE.PUT_LINE(FND_FILE.OUTPUT,RPAD(l_contract_number,28)||
7915 RPAD(l_tcnv_rec.trx_number,22)||
7916 RPAD(FND_MESSAGE.GET_STRING('OKL','OKL_AGN_RPT_NON_REVENUE'),17)||
7917 RPAD(Okl_Accounting_Util.Get_Lookup_Meaning('YES_NO',l_tcnv_rec.accrual_status_yn,0,0),20)||
7918 RPAD(Okl_Accounting_Util.Get_Lookup_Meaning('YES_NO',l_tcnv_rec.update_status_yn,0,0),16)||
7919 RPAD(l_tcnv_rec.currency_code,9)||
7920 LPAD(Okl_Accounting_Util.FORMAT_AMOUNT(l_tcnv_rec.amount,l_tcnv_rec.currency_code),17) ||
7921 LPAD(Okl_Accounting_Util.Get_Lookup_Meaning('OKL_REPRESENTATION_TYPE','SECONDARY'), 10));
7922 END IF; -- if p_process_accrual_rec.submission_mode=...
7923 END IF;
7924 -- MGAAP 7263041 end
7925 END IF; -- If override_status = 'N'
7926
7927 ELSIF l_rev_rec_basis = 'ACRL_WITHOUT_RULE' THEN
7928 --Create Accrual Entries and Corresponding Reversal Entries
7929 l_ctxt_val_tbl(1).NAME := 'p_accrual_date';
7930 l_ctxt_val_tbl(1).VALUE := TO_CHAR(l_accrual_date, 'MM/DD/YYYY');
7931 l_ctxt_val_tbl(2).NAME := 'p_last_int_calc_date';
7932 l_ctxt_val_tbl(2).VALUE := TO_CHAR(l_last_interest_calc_date, 'MM/DD/YYYY');
7933 l_ctxt_val_tbl(3).NAME := 'p_period_start_date';
7934 l_ctxt_val_tbl(3).VALUE := TO_CHAR(l_period_start_date, 'MM/DD/YYYY');
7935 l_ctxt_val_tbl(4).NAME := 'p_period_end_date';
7936 l_ctxt_val_tbl(4).VALUE := TO_CHAR(l_period_end_date, 'MM/DD/YYYY');
7937 --Create Accrual Entries
7938 -- Build the accrual record
7939 l_accrual_rec.contract_id := l_contract_id;
7940 l_accrual_rec.set_of_books_id := l_sob_id;
7941 l_accrual_rec.accrual_date := l_accrual_date;
7942 l_accrual_rec.trx_date := l_accrual_date;
7943 l_accrual_rec.contract_number := l_contract_number;
7944 l_accrual_rec.rule_result := NULL;
7945 l_accrual_rec.override_status := NULL;
7946 l_accrual_rec.description := l_batch_name;
7947 l_accrual_rec.amount := 0;
7948 l_accrual_rec.currency_code := l_khr_currency_code;
7949 l_accrual_rec.currency_conversion_type := l_currency_conv_type;
7950 l_accrual_rec.currency_conversion_rate := l_currency_conv_rate;
7951 l_accrual_rec.currency_conversion_date := l_currency_conv_date;
7952 l_accrual_rec.product_id := l_product_id;
7953 l_accrual_rec.trx_type_id := l_try_id;
7954 l_accrual_rec.sty_id := l_sty_id;
7955 l_accrual_rec.advance_arrears := l_billing_type;
7956 l_accrual_rec.factoring_synd_flag := l_factoring_synd_flag;
7957 l_accrual_rec.post_to_gl := 'Y';
7958 l_accrual_rec.gl_reversal_flag := 'Y';
7959 l_accrual_rec.memo_yn := 'N';
7960 l_accrual_rec.accrual_activity := 'ACCRUAL';
7961 l_accrual_rec.accrual_rule_yn := 'N';
7962 --Added by dpsingh for SLA Uptake (Bug 5707866)
7963 OPEN get_accrual_reversal_date(l_accrual_rec.set_of_books_id, l_accrual_rec.accrual_date);
7964 FETCH get_accrual_reversal_date into l_accrual_rec.accrual_reversal_date;
7965 CLOSE get_accrual_reversal_date;
7966
7967 l_tcnv_rec.trx_number := null; -- Bug 7555143
7968 l_tcnv_rec.ID := null;
7969 -- Call CREATE_ACCRUAL procedure to create accrual transactions and entries
7970 CREATE_ACCRUALS_FORMULA (
7971 p_api_version => l_api_version,
7972 p_init_msg_list => l_init_msg_list,
7973 x_return_status => l_return_status,
7974 x_msg_count => l_msg_count,
7975 x_msg_data => l_msg_data,
7976 x_tcnv_rec => l_tcnv_rec,
7977 x_tclv_tbl => l_tclv_tbl,
7978 p_accrual_rec => l_accrual_rec,
7979 p_ctxt_val_tbl => l_ctxt_val_tbl);
7980
7981 -- store the highest degree of error
7982 IF (l_return_status <> Okl_Api.G_RET_STS_SUCCESS) THEN
7983 IF (l_return_status = Okl_Api.G_RET_STS_UNEXP_ERROR) THEN
7984 -- need to leave
7985 Okl_Api.set_message(p_app_name => g_app_name,
7986 p_msg_name => 'OKL_AGN_CRE_ACR_ERROR',
7987 p_token1 => g_contract_number_token,
7988 p_token1_value => l_contract_number);
7989 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
7990 ELSIF (l_return_status = Okl_Api.G_RET_STS_ERROR) THEN
7991 Okl_Api.set_message(p_app_name => g_app_name,
7992 p_msg_name => 'OKL_AGN_CRE_ACR_ERROR',
7993 p_token1 => g_contract_number_token,
7994 p_token1_value => l_contract_number);
7995 RAISE OKL_API.G_EXCEPTION_ERROR;
7996 END IF;
7997 END IF;
7998 IF p_process_accrual_rec.submission_mode='BATCH' THEN
7999 FND_FILE.PUT_LINE(FND_FILE.OUTPUT,RPAD(l_contract_number,28)||
8000 RPAD(l_tcnv_rec.trx_number,22)||
8001 RPAD(FND_MESSAGE.GET_STRING('OKL','OKL_AGN_RPT_REVENUE'),17)||
8002 RPAD(Okl_Accounting_Util.Get_Lookup_Meaning('OKL_ACCRUAL_ACTIVITY','NOT APPLICABLE',540,0),20)||
8003 RPAD(Okl_Accounting_Util.Get_Lookup_Meaning('OKL_ACCRUAL_ACTIVITY','NOT APPLICABLE',540,0),16)||
8004 RPAD(l_tcnv_rec.currency_code,9)||
8005 LPAD(Okl_Accounting_Util.FORMAT_AMOUNT(l_tcnv_rec.amount,l_tcnv_rec.currency_code),17) ||
8006 LPAD(Okl_Accounting_Util.Get_Lookup_Meaning('OKL_REPRESENTATION_TYPE','PRIMARY'), 8));
8007 END IF; -- if p_process_accrual_rec.submission_mode=...
8008 -- MGAAP 7263041 start
8009 IF (l_multi_gaap_yn = 'Y') THEN
8010 l_accrual_rec.set_of_books_id := G_SOB_ID_REP;
8011 l_accrual_rec.product_id := l_reporting_pdt_id;
8012 l_accrual_rec.sty_id := l_sty_id_rep;
8013 l_accrual_rec.trx_number := l_tcnv_rec.trx_number;
8014 l_accrual_rec.primary_rep_trx_id := l_tcnv_rec.id;
8015 OPEN get_accrual_reversal_date(l_accrual_rec.set_of_books_id, l_accrual_rec.accrual_date);
8016 FETCH get_accrual_reversal_date into l_accrual_rec.accrual_reversal_date;
8017 CLOSE get_accrual_reversal_date;
8018 -- Call CREATE_ACCRUAL procedure to create accrual transactions and entries for SECONDARY
8019 CREATE_ACCRUALS_FORMULA (
8020 p_api_version => l_api_version,
8021 p_init_msg_list => l_init_msg_list,
8022 x_return_status => l_return_status,
8023 x_msg_count => l_msg_count,
8024 x_msg_data => l_msg_data,
8025 x_tcnv_rec => l_tcnv_rec,
8026 x_tclv_tbl => l_tclv_tbl,
8027 p_accrual_rec => l_accrual_rec,
8028 p_ctxt_val_tbl => l_ctxt_val_tbl,
8029 p_representation_type => 'SECONDARY'); -- MGAAP
8030
8031 -- store the highest degree of error
8032 IF (l_return_status <> Okl_Api.G_RET_STS_SUCCESS) THEN
8033 IF (l_return_status = Okl_Api.G_RET_STS_UNEXP_ERROR) THEN
8034 -- need to leave
8035 Okl_Api.set_message(p_app_name => g_app_name,
8036 p_msg_name => 'OKL_AGN_CRE_ACR_ERROR',
8037 p_token1 => g_contract_number_token,
8038 p_token1_value => l_contract_number);
8039 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
8040 ELSIF (l_return_status = Okl_Api.G_RET_STS_ERROR) THEN
8041 Okl_Api.set_message(p_app_name => g_app_name,
8042 p_msg_name => 'OKL_AGN_CRE_ACR_ERROR',
8043 p_token1 => g_contract_number_token,
8044 p_token1_value => l_contract_number);
8045 RAISE OKL_API.G_EXCEPTION_ERROR;
8046 END IF;
8047 END IF;
8048 IF p_process_accrual_rec.submission_mode='BATCH' THEN
8049 FND_FILE.PUT_LINE(FND_FILE.OUTPUT,RPAD(l_contract_number,28)||
8050 RPAD(l_tcnv_rec.trx_number,22)||
8051 RPAD(FND_MESSAGE.GET_STRING('OKL','OKL_AGN_RPT_REVENUE'),17)||
8052 RPAD(Okl_Accounting_Util.Get_Lookup_Meaning('OKL_ACCRUAL_ACTIVITY','NOT APPLICABLE',540,0),20)||
8053 RPAD(Okl_Accounting_Util.Get_Lookup_Meaning('OKL_ACCRUAL_ACTIVITY','NOT APPLICABLE',540,0),16)||
8054 RPAD(l_tcnv_rec.currency_code,9)||
8055 LPAD(Okl_Accounting_Util.FORMAT_AMOUNT(l_tcnv_rec.amount,l_tcnv_rec.currency_code),17) ||
8056 LPAD(Okl_Accounting_Util.Get_Lookup_Meaning('OKL_REPRESENTATION_TYPE','SECONDARY'), 10));
8057 END IF; -- if p_process_accrual_rec.submission_mode=...
8058 END IF;
8059 -- MGAAP 7263041 end
8060
8061 END IF; -- l_rev_rec_basis =
8062 END IF ; -- IF l_accrual_date - l_last_interest_calc_date > 0
8063
8064 ELSE -- If l_trx_exists <> 'Y'
8065 Okl_Api.set_message(p_app_name => g_app_name,
8066 p_msg_name => 'OKL_AGN_EST_BILL_DATE_ERROR',
8067 p_token1 => g_contract_number_token,
8068 p_token1_value => l_contract_number,
8069 p_token2 => 'PERIOD',
8070 p_token2_value => to_char(l_accrual_date,'Mon-YY')
8071 );
8072 RAISE Okl_Api.G_EXCEPTION_ERROR;
8073 END IF; -- If l_trx_exists <> 'Y'
8074 ELSIF l_rev_rec_method = 'ACTUAL' THEN
8075
8076 -- Bug 5036337.Commenting below as method t check has changed.
8077 -- OPEN check_actual_trx(l_contract_id, l_accrual_date);
8078 -- FETCH check_actual_trx INTO l_trx_exists;
8079 -- CLOSE check_actual_trx;
8080
8081 FOR y IN check_actual_trx(l_contract_id)
8082 LOOP
8083 l_last_accrual_date := y.last_accrual_date;
8084 END LOOP;
8085
8086 --BUG 5060624. Assigning contract start date in case accrual was never run
8087 --SGIYER 24-Feb-2006
8088 IF l_last_accrual_date IS NULL THEN
8089 l_last_accrual_date := l_start_date;
8090 END IF;
8091
8092 IF TRUNC(l_accrual_date) >= TRUNC(l_last_accrual_date) THEN
8093
8094 OKL_STREAMS_UTIL.get_dependent_stream_type(
8095 p_khr_id => l_contract_id,
8096 p_primary_sty_purpose => 'RENT',
8097 p_dependent_sty_purpose => 'ACTUAL_INCOME_ACCRUAL',
8098 x_return_status => l_return_status,
8099 x_dependent_sty_id => l_sty_id);
8100
8101 IF l_return_status <> OKL_API.G_RET_STS_SUCCESS THEN
8102 -- store SQL error message on message stack for caller and entry in log file
8103 Okl_Api.set_message(p_app_name => g_app_name,
8104 p_msg_name => 'OKL_AGN_STRM_TYPE_ERROR',
8105 p_token1 => g_stream_name_token,
8106 p_token1_value => 'ACTUAL INCOME ACCRUAL');
8107 RAISE Okl_Api.G_EXCEPTION_ERROR;
8108 END IF;
8109
8110 IF (l_multi_gaap_yn = 'Y') THEN
8111 OKL_STREAMS_UTIL.get_dependent_stream_type_rep(
8112 p_khr_id => l_contract_id,
8113 p_primary_sty_purpose => 'RENT',
8114 p_dependent_sty_purpose => 'ACTUAL_INCOME_ACCRUAL',
8115 x_return_status => l_return_status,
8116 x_dependent_sty_id => l_sty_id_rep);
8117
8118 IF l_return_status <> OKL_API.G_RET_STS_SUCCESS THEN
8119 -- store SQL error message on message stack for caller and entry in log file
8120 Okl_Api.set_message(p_app_name => g_app_name,
8121 p_msg_name => 'OKL_AGN_STRM_TYPE_ERROR',
8122 p_token1 => g_stream_name_token,
8123 p_token1_value => 'ACTUAL INCOME ACCRUAL');
8124 RAISE Okl_Api.G_EXCEPTION_ERROR;
8125 END IF;
8126 END IF;
8127
8128 -- Get revenue recognition basis from stream type
8129 FOR x IN get_rev_rec_basis_csr(l_sty_id)
8130 LOOP
8131 l_rev_rec_basis := x.accrual_yn;
8132 END LOOP;
8133
8134 IF l_rev_rec_basis = 'ACRL_WITH_RULE' THEN
8135 IF l_override_status = 'N' THEN
8136 -- Check the override status and current accrual status and process accordingly
8137 IF l_rule_result = 'Y' THEN
8138 --Create Accrual Entries and Corresponding Reversal Entries
8139 l_ctxt_val_tbl(1).NAME := 'p_accrual_date';
8140 l_ctxt_val_tbl(1).VALUE := TO_CHAR(l_accrual_date, 'MM/DD/YYYY');
8141 --Create Accrual Entries
8142 -- Build the accrual record
8143 l_accrual_rec.contract_id := l_contract_id;
8144 l_accrual_rec.set_of_books_id := l_sob_id;
8145 l_accrual_rec.accrual_date := l_accrual_date;
8146 l_accrual_rec.trx_date := l_accrual_date;
8147 l_accrual_rec.contract_number := l_contract_number;
8148 l_accrual_rec.rule_result := l_rule_result;
8149 l_accrual_rec.override_status := l_override_status;
8150 l_accrual_rec.description := l_batch_name;
8151 l_accrual_rec.amount := 0;
8152 l_accrual_rec.currency_code := l_khr_currency_code;
8153 l_accrual_rec.currency_conversion_type := l_currency_conv_type;
8154 l_accrual_rec.currency_conversion_rate := l_currency_conv_rate;
8155 l_accrual_rec.currency_conversion_date := l_currency_conv_date;
8156 l_accrual_rec.product_id := l_product_id;
8157 l_accrual_rec.trx_type_id := l_try_id;
8158 l_accrual_rec.sty_id := l_sty_id;
8159 l_accrual_rec.advance_arrears := l_billing_type;
8160 l_accrual_rec.factoring_synd_flag := l_factoring_synd_flag;
8161 l_accrual_rec.post_to_gl := 'Y';
8162 l_accrual_rec.gl_reversal_flag := 'N';
8163 l_accrual_rec.memo_yn := 'N';
8164 l_accrual_rec.accrual_activity := 'ACCRUAL';
8165 l_accrual_rec.accrual_rule_yn := 'Y';
8166
8167 l_tcnv_rec.trx_number := null; -- Bug 7555143
8168 l_tcnv_rec.ID := null;
8169 -- Call CREATE_ACCRUAL procedure to create accrual transactions and entries
8170 CREATE_ACCRUALS_FORMULA (
8171 p_api_version => l_api_version,
8172 p_init_msg_list => l_init_msg_list,
8173 x_return_status => l_return_status,
8174 x_msg_count => l_msg_count,
8175 x_msg_data => l_msg_data,
8176 x_tcnv_rec => l_tcnv_rec,
8177 x_tclv_tbl => l_tclv_tbl,
8178 p_accrual_rec => l_accrual_rec,
8179 p_ctxt_val_tbl => l_ctxt_val_tbl);
8180
8181 -- store the highest degree of error
8182 IF (l_return_status <> Okl_Api.G_RET_STS_SUCCESS) THEN
8183 IF (l_return_status = Okl_Api.G_RET_STS_UNEXP_ERROR) THEN
8184 -- need to leave
8185 Okl_Api.set_message(p_app_name => g_app_name,
8186 p_msg_name => 'OKL_AGN_CRE_ACR_ERROR',
8187 p_token1 => g_contract_number_token,
8188 p_token1_value => l_contract_number);
8189 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
8190 ELSIF (l_return_status = Okl_Api.G_RET_STS_ERROR) THEN
8191 Okl_Api.set_message(p_app_name => g_app_name,
8192 p_msg_name => 'OKL_AGN_CRE_ACR_ERROR',
8193 p_token1 => g_contract_number_token,
8194 p_token1_value => l_contract_number);
8195 RAISE OKL_API.G_EXCEPTION_ERROR;
8196 END IF;
8197 END IF;
8198 -- Update balances table
8199 IF l_tcnv_rec.amount IS NOT NULL THEN
8200 UPDATE_BALANCES (l_contract_id
8201 ,l_contract_number
8202 ,l_tcnv_rec.amount
8203 ,l_tcnv_rec.date_transaction_occurred
8204 ,l_return_status
8205 ,l_msg_count
8206 ,l_msg_data);
8207 -- store the highest degree of error
8208 IF (l_return_status <> Okl_Api.G_RET_STS_SUCCESS) THEN
8209 IF (l_return_status = Okl_Api.G_RET_STS_UNEXP_ERROR) THEN
8210 -- need to leave
8211 Okl_Api.set_message(p_app_name => g_app_name,
8212 p_msg_name => 'OKL_AGN_BAL_UPD_ERROR',
8213 p_token1 => g_contract_number_token,
8214 p_token1_value => l_contract_number);
8215 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
8216 ELSIF (l_return_status = Okl_Api.G_RET_STS_ERROR) THEN
8217 Okl_Api.set_message(p_app_name => g_app_name,
8218 p_msg_name => 'OKL_AGN_BAL_UPD_ERROR',
8219 p_token1 => g_contract_number_token,
8220 p_token1_value => l_contract_number);
8221 RAISE OKL_API.G_EXCEPTION_ERROR;
8222 END IF;
8223 END IF;
8224 END IF;
8225
8226 IF p_process_accrual_rec.submission_mode='BATCH' THEN
8227 FND_FILE.PUT_LINE(FND_FILE.OUTPUT,RPAD(l_contract_number,28)||
8228 RPAD(l_tcnv_rec.trx_number,22)||
8229 RPAD(FND_MESSAGE.GET_STRING('OKL','OKL_AGN_RPT_REVENUE'),17)||
8230 RPAD(Okl_Accounting_Util.Get_Lookup_Meaning('YES_NO',l_tcnv_rec.accrual_status_yn,0,0),20)||
8231 RPAD(Okl_Accounting_Util.Get_Lookup_Meaning('YES_NO',l_tcnv_rec.update_status_yn,0,0),16)||
8232 RPAD(l_tcnv_rec.currency_code,9)||
8233 LPAD(Okl_Accounting_Util.FORMAT_AMOUNT(l_tcnv_rec.amount,l_tcnv_rec.currency_code),17) ||
8234 LPAD(Okl_Accounting_Util.Get_Lookup_Meaning('OKL_REPRESENTATION_TYPE','PRIMARY'), 8));
8235 END IF; -- if p_process_accrual_rec.submission_mode=...
8236 -- MGAAP 7263041 start
8237 IF (l_multi_gaap_yn = 'Y') THEN
8238 l_accrual_rec.set_of_books_id := G_SOB_ID_REP;
8239 l_accrual_rec.product_id := l_reporting_pdt_id;
8240 l_accrual_rec.sty_id := l_sty_id_rep;
8241 l_accrual_rec.trx_number := l_tcnv_rec.trx_number;
8242 l_accrual_rec.primary_rep_trx_id := l_tcnv_rec.id;
8243 -- Call CREATE_ACCRUAL procedure to create accrual transactions and entries for SECONDARY
8244 CREATE_ACCRUALS_FORMULA (
8245 p_api_version => l_api_version,
8246 p_init_msg_list => l_init_msg_list,
8247 x_return_status => l_return_status,
8248 x_msg_count => l_msg_count,
8249 x_msg_data => l_msg_data,
8250 x_tcnv_rec => l_tcnv_rec,
8251 x_tclv_tbl => l_tclv_tbl,
8252 p_accrual_rec => l_accrual_rec,
8253 p_ctxt_val_tbl => l_ctxt_val_tbl,
8254 p_representation_type => 'SECONDARY');
8255
8256 -- store the highest degree of error
8257 IF (l_return_status <> Okl_Api.G_RET_STS_SUCCESS) THEN
8258 IF (l_return_status = Okl_Api.G_RET_STS_UNEXP_ERROR) THEN
8259 -- need to leave
8260 Okl_Api.set_message(p_app_name => g_app_name,
8261 p_msg_name => 'OKL_AGN_CRE_ACR_ERROR',
8262 p_token1 => g_contract_number_token,
8263 p_token1_value => l_contract_number);
8264 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
8265 ELSIF (l_return_status = Okl_Api.G_RET_STS_ERROR) THEN
8266 Okl_Api.set_message(p_app_name => g_app_name,
8267 p_msg_name => 'OKL_AGN_CRE_ACR_ERROR',
8268 p_token1 => g_contract_number_token,
8269 p_token1_value => l_contract_number);
8270 RAISE OKL_API.G_EXCEPTION_ERROR;
8271 END IF;
8272 END IF;
8273
8274 IF p_process_accrual_rec.submission_mode='BATCH' THEN
8275 FND_FILE.PUT_LINE(FND_FILE.OUTPUT,RPAD(l_contract_number,28)||
8276 RPAD(l_tcnv_rec.trx_number,22)||
8277 RPAD(FND_MESSAGE.GET_STRING('OKL','OKL_AGN_RPT_REVENUE'),17)||
8278 RPAD(Okl_Accounting_Util.Get_Lookup_Meaning('YES_NO',l_tcnv_rec.accrual_status_yn,0,0),20)||
8279 RPAD(Okl_Accounting_Util.Get_Lookup_Meaning('YES_NO',l_tcnv_rec.update_status_yn,0,0),16)||
8280 RPAD(l_tcnv_rec.currency_code,9)||
8281 LPAD(Okl_Accounting_Util.FORMAT_AMOUNT(l_tcnv_rec.amount,l_tcnv_rec.currency_code),17) ||
8282 LPAD(Okl_Accounting_Util.Get_Lookup_Meaning('OKL_REPRESENTATION_TYPE','SECONDARY'), 10));
8283 END IF; -- if p_process_accrual_rec.submission_mode=...
8284 END IF;
8285 -- MGAAP 7263041 end
8286 ELSE
8287 -- Create Non-Accrual(memo) entries and Corresponding Reversal entries
8288 l_ctxt_val_tbl(1).NAME := 'p_accrual_date';
8289 l_ctxt_val_tbl(1).VALUE := TO_CHAR(l_accrual_date, 'MM/DD/YYYY');
8290
8291 --Create Accrual Entries
8292 -- Build the accrual record
8293 l_accrual_rec.contract_id := l_contract_id;
8294 l_accrual_rec.set_of_books_id := l_sob_id;
8295 l_accrual_rec.accrual_date := l_accrual_date;
8296 l_accrual_rec.trx_date := l_accrual_date;
8297 l_accrual_rec.contract_number := l_contract_number;
8298 l_accrual_rec.rule_result := l_rule_result;
8299 l_accrual_rec.override_status := l_override_status;
8300 l_accrual_rec.description := l_batch_name;
8301 l_accrual_rec.amount := 0;
8302 l_accrual_rec.currency_code := l_khr_currency_code;
8303 l_accrual_rec.currency_conversion_type := l_currency_conv_type;
8304 l_accrual_rec.currency_conversion_rate := l_currency_conv_rate;
8305 l_accrual_rec.currency_conversion_date := l_currency_conv_date;
8306 l_accrual_rec.product_id := l_product_id;
8307 l_accrual_rec.trx_type_id := l_try_id;
8308 l_accrual_rec.sty_id := l_sty_id;
8309 l_accrual_rec.advance_arrears := l_billing_type;
8310 l_accrual_rec.factoring_synd_flag := l_factoring_synd_flag;
8311 l_accrual_rec.post_to_gl := 'Y';
8312 l_accrual_rec.gl_reversal_flag := 'N';
8313 l_accrual_rec.memo_yn := 'Y';
8314 l_accrual_rec.accrual_activity := 'NON-ACCRUAL';
8315 l_accrual_rec.accrual_rule_yn := 'Y';
8316
8317 l_tcnv_rec.trx_number := null; -- Bug 7555143
8318 l_tcnv_rec.ID := null;
8319 -- Call CREATE_ACCRUAL_FORMULA procedure to create accrual transactions and entries
8320 CREATE_ACCRUALS_FORMULA (
8321 p_api_version => l_api_version,
8322 p_init_msg_list => l_init_msg_list,
8323 x_return_status => l_return_status,
8324 x_msg_count => l_msg_count,
8325 x_msg_data => l_msg_data,
8326 x_tcnv_rec => l_tcnv_rec,
8327 x_tclv_tbl => l_tclv_tbl,
8328 p_accrual_rec => l_accrual_rec,
8329 p_ctxt_val_tbl => l_ctxt_val_tbl);
8330
8331 -- store the highest degree of error
8332 IF (l_return_status <> Okl_Api.G_RET_STS_SUCCESS) THEN
8333 IF (l_return_status = Okl_Api.G_RET_STS_UNEXP_ERROR) THEN
8334 -- need to leave
8335 Okl_Api.set_message(p_app_name => g_app_name,
8336 p_msg_name => 'OKL_AGN_CRE_ACR_ERROR',
8337 p_token1 => g_contract_number_token,
8338 p_token1_value => l_contract_number);
8339 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
8340 ELSIF (l_return_Status = Okl_Api.G_RET_STS_ERROR) THEN
8341 Okl_Api.set_message(p_app_name => g_app_name,
8342 p_msg_name => 'OKL_AGN_CRE_ACR_ERROR',
8343 p_token1 => g_contract_number_token,
8344 p_token1_value => l_contract_number);
8345 RAISE OKL_API.G_EXCEPTION_ERROR;
8346 END IF;
8347 END IF;
8348
8349 -- Update balances table
8350 IF l_tcnv_rec.amount IS NOT NULL THEN
8351 UPDATE_BALANCES (l_contract_id
8352 ,l_contract_number
8353 ,l_tcnv_rec.amount
8354 ,l_tcnv_rec.date_transaction_occurred
8355 ,l_return_status
8356 ,l_msg_count
8357 ,l_msg_data);
8358 -- store the highest degree of error
8359 IF (l_return_status <> Okl_Api.G_RET_STS_SUCCESS) THEN
8360 IF (l_return_status = Okl_Api.G_RET_STS_UNEXP_ERROR) THEN
8361 -- need to leave
8362 Okl_Api.set_message(p_app_name => g_app_name,
8363 p_msg_name => 'OKL_AGN_BAL_UPD_ERROR',
8364 p_token1 => g_contract_number_token,
8365 p_token1_value => l_contract_number);
8366 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
8367 ELSIF (l_return_status = Okl_Api.G_RET_STS_ERROR) THEN
8368 Okl_Api.set_message(p_app_name => g_app_name,
8369 p_msg_name => 'OKL_AGN_BAL_UPD_ERROR',
8370 p_token1 => g_contract_number_token,
8371 p_token1_value => l_contract_number);
8372 RAISE OKL_API.G_EXCEPTION_ERROR;
8373 END IF;
8374 END IF;
8375 END IF;
8376
8377 IF p_process_accrual_rec.submission_mode='BATCH' THEN
8378 FND_FILE.PUT_LINE(FND_FILE.OUTPUT,RPAD(l_contract_number,28)||
8379 RPAD(l_tcnv_rec.trx_number,22)||
8380 RPAD(FND_MESSAGE.GET_STRING('OKL','OKL_AGN_RPT_NON_REVENUE'),17)||
8381 RPAD(Okl_Accounting_Util.Get_Lookup_Meaning('YES_NO',l_tcnv_rec.accrual_status_yn,0,0),20)||
8382 RPAD(Okl_Accounting_Util.Get_Lookup_Meaning('YES_NO',l_tcnv_rec.update_status_yn,0,0),16)||
8383 RPAD(l_tcnv_rec.currency_code,9)||
8384 LPAD(Okl_Accounting_Util.FORMAT_AMOUNT(l_tcnv_rec.amount,l_tcnv_rec.currency_code),17) ||
8385 LPAD(Okl_Accounting_Util.Get_Lookup_Meaning('OKL_REPRESENTATION_TYPE','PRIMARY'), 8));
8386 END IF; -- if p_process_accrual_rec.submission_mode=..
8387 -- MGAAP 7263041 start
8388 IF (l_multi_gaap_yn = 'Y') THEN
8389 l_accrual_rec.set_of_books_id := G_SOB_ID_REP;
8390 l_accrual_rec.product_id := l_reporting_pdt_id;
8391 l_accrual_rec.sty_id := l_sty_id_rep;
8392 l_accrual_rec.trx_number := l_tcnv_rec.trx_number;
8393 l_accrual_rec.primary_rep_trx_id := l_tcnv_rec.id;
8394 -- Call CREATE_ACCRUAL_FORMULA procedure to create accrual transactions and entries for SECONDARY
8395 CREATE_ACCRUALS_FORMULA (
8396 p_api_version => l_api_version,
8397 p_init_msg_list => l_init_msg_list,
8398 x_return_status => l_return_status,
8399 x_msg_count => l_msg_count,
8400 x_msg_data => l_msg_data,
8401 x_tcnv_rec => l_tcnv_rec,
8402 x_tclv_tbl => l_tclv_tbl,
8403 p_accrual_rec => l_accrual_rec,
8404 p_ctxt_val_tbl => l_ctxt_val_tbl,
8405 p_representation_type => 'SECONDARY'); -- MGAAP
8406
8407 -- store the highest degree of error
8408 IF (l_return_status <> Okl_Api.G_RET_STS_SUCCESS) THEN
8409 IF (l_return_status = Okl_Api.G_RET_STS_UNEXP_ERROR) THEN
8410 -- need to leave
8411 Okl_Api.set_message(p_app_name => g_app_name,
8412 p_msg_name => 'OKL_AGN_CRE_ACR_ERROR',
8413 p_token1 => g_contract_number_token,
8414 p_token1_value => l_contract_number);
8415 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
8416 ELSIF (l_return_Status = Okl_Api.G_RET_STS_ERROR) THEN
8417 Okl_Api.set_message(p_app_name => g_app_name,
8418 p_msg_name => 'OKL_AGN_CRE_ACR_ERROR',
8419 p_token1 => g_contract_number_token,
8420 p_token1_value => l_contract_number);
8421 RAISE OKL_API.G_EXCEPTION_ERROR;
8422 END IF;
8423 END IF;
8424
8425 IF p_process_accrual_rec.submission_mode='BATCH' THEN
8426 FND_FILE.PUT_LINE(FND_FILE.OUTPUT,RPAD(l_contract_number,28)||
8427 RPAD(l_tcnv_rec.trx_number,22)||
8428 RPAD(FND_MESSAGE.GET_STRING('OKL','OKL_AGN_RPT_NON_REVENUE'),17)||
8429 RPAD(Okl_Accounting_Util.Get_Lookup_Meaning('YES_NO',l_tcnv_rec.accrual_status_yn,0,0),20)||
8430 RPAD(Okl_Accounting_Util.Get_Lookup_Meaning('YES_NO',l_tcnv_rec.update_status_yn,0,0),16)||
8431 RPAD(l_tcnv_rec.currency_code,9)||
8432 LPAD(Okl_Accounting_Util.FORMAT_AMOUNT(l_tcnv_rec.amount,l_tcnv_rec.currency_code),17) ||
8433 LPAD(Okl_Accounting_Util.Get_Lookup_Meaning('OKL_REPRESENTATION_TYPE','SECONDARY'), 10));
8434 END IF; -- if p_process_accrual_rec.submission_mode=..
8435 END IF;
8436 -- MGAAP 7263041 end
8437
8438 END IF;
8439 ELSE
8440 -- Create MEMO entries
8441 l_ctxt_val_tbl(1).NAME := 'p_accrual_date';
8442 l_ctxt_val_tbl(1).VALUE := TO_CHAR(l_accrual_date, 'MM/DD/YYYY');
8443 --Create Accrual Entries
8444 -- Build the accrual record
8445 l_accrual_rec.contract_id := l_contract_id;
8446 l_accrual_rec.set_of_books_id := l_sob_id;
8447 l_accrual_rec.accrual_date := l_accrual_date;
8448 l_accrual_rec.trx_date := l_accrual_date;
8449 l_accrual_rec.contract_number := l_contract_number;
8450 l_accrual_rec.rule_result := l_rule_result;
8451 l_accrual_rec.override_status := l_override_status;
8452 l_accrual_rec.description := l_batch_name;
8453 l_accrual_rec.amount := 0;
8454 l_accrual_rec.currency_code := l_khr_currency_code;
8455 l_accrual_rec.currency_conversion_type := l_currency_conv_type;
8456 l_accrual_rec.currency_conversion_rate := l_currency_conv_rate;
8457 l_accrual_rec.currency_conversion_date := l_currency_conv_date;
8458 l_accrual_rec.product_id := l_product_id;
8459 l_accrual_rec.trx_type_id := l_try_id;
8460 l_accrual_rec.sty_id := l_sty_id;
8461 l_accrual_rec.advance_arrears := l_billing_type;
8462 l_accrual_rec.factoring_synd_flag := l_factoring_synd_flag;
8463 l_accrual_rec.post_to_gl := 'Y';
8464 l_accrual_rec.gl_reversal_flag := 'N';
8465 l_accrual_rec.memo_yn := 'Y';
8466 l_accrual_rec.accrual_activity := 'NON-ACCRUAL';
8467 l_accrual_rec.accrual_rule_yn := 'Y';
8468
8469 l_tcnv_rec.trx_number := null; -- Bug 7555143
8470 l_tcnv_rec.ID := null;
8471 -- Call CREATE_ACCRUAL procedure to create accrual transactions and entries
8472 CREATE_ACCRUALS_FORMULA (
8473 p_api_version => l_api_version,
8474 p_init_msg_list => l_init_msg_list,
8475 x_return_status => l_return_status,
8476 x_msg_count => l_msg_count,
8477 x_msg_data => l_msg_data,
8478 x_tcnv_rec => l_tcnv_rec,
8479 x_tclv_tbl => l_tclv_tbl,
8480 p_accrual_rec => l_accrual_rec,
8481 p_ctxt_val_tbl => l_ctxt_val_tbl);
8482
8483 -- store the highest degree of error
8484 IF (l_return_status <> Okl_Api.G_RET_STS_SUCCESS) THEN
8485 IF (l_return_status = Okl_Api.G_RET_STS_UNEXP_ERROR) THEN
8486 -- need to leave
8487 Okl_Api.set_message(p_app_name => g_app_name,
8488 p_msg_name => 'OKL_AGN_CRE_ACR_ERROR',
8489 p_token1 => g_contract_number_token,
8490 p_token1_value => l_contract_number);
8491 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
8492 ELSIF (l_return_Status = Okl_Api.G_RET_STS_ERROR) THEN
8493 Okl_Api.set_message(p_app_name => g_app_name,
8494 p_msg_name => 'OKL_AGN_CRE_ACR_ERROR',
8495 p_token1 => g_contract_number_token,
8496 p_token1_value => l_contract_number);
8497 RAISE OKL_API.G_EXCEPTION_ERROR;
8498 END IF;
8499 END IF;
8500 -- Update balances table
8501 IF l_tcnv_rec.amount IS NOT NULL THEN
8502 UPDATE_BALANCES (l_contract_id
8503 ,l_contract_number
8504 ,l_tcnv_rec.amount
8505 ,l_tcnv_rec.date_transaction_occurred
8506 ,l_return_status
8507 ,l_msg_count
8508 ,l_msg_data);
8509 -- store the highest degree of error
8510 IF (l_return_status <> Okl_Api.G_RET_STS_SUCCESS) THEN
8511 IF (l_return_status = Okl_Api.G_RET_STS_UNEXP_ERROR) THEN
8512 -- need to leave
8513 Okl_Api.set_message(p_app_name => g_app_name,
8514 p_msg_name => 'OKL_AGN_BAL_UPD_ERROR',
8515 p_token1 => g_contract_number_token,
8516 p_token1_value => l_contract_number);
8517 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
8518 ELSIF (l_return_status = Okl_Api.G_RET_STS_ERROR) THEN
8519 Okl_Api.set_message(p_app_name => g_app_name,
8520 p_msg_name => 'OKL_AGN_BAL_UPD_ERROR',
8521 p_token1 => g_contract_number_token,
8522 p_token1_value => l_contract_number);
8523 RAISE OKL_API.G_EXCEPTION_ERROR;
8524 END IF;
8525 END IF;
8526 END IF;
8527
8528 IF p_process_accrual_rec.submission_mode='BATCH' THEN
8529 FND_FILE.PUT_LINE(FND_FILE.OUTPUT,RPAD(l_contract_number,28)||
8530 RPAD(l_tcnv_rec.trx_number,22)||
8531 RPAD(FND_MESSAGE.GET_STRING('OKL','OKL_AGN_RPT_NON_REVENUE'),17)||
8532 RPAD(Okl_Accounting_Util.Get_Lookup_Meaning('YES_NO',l_tcnv_rec.accrual_status_yn,0,0),20)||
8533 RPAD(Okl_Accounting_Util.Get_Lookup_Meaning('YES_NO',l_tcnv_rec.update_status_yn,0,0),16)||
8534 RPAD(l_tcnv_rec.currency_code,9)||
8535 LPAD(Okl_Accounting_Util.FORMAT_AMOUNT(l_tcnv_rec.amount,l_tcnv_rec.currency_code),17) ||
8536 LPAD(Okl_Accounting_Util.Get_Lookup_Meaning('OKL_REPRESENTATION_TYPE','PRIMARY'), 8));
8537 END IF; -- if p_process_accrual_rec.submission_mode=...
8538 -- MGAAP 7263041 start
8539 IF (l_multi_gaap_yn = 'Y') THEN
8540 l_accrual_rec.set_of_books_id := G_SOB_ID_REP;
8541 l_accrual_rec.product_id := l_reporting_pdt_id;
8542 l_accrual_rec.sty_id := l_sty_id_rep;
8543 l_accrual_rec.trx_number := l_tcnv_rec.trx_number;
8544 l_accrual_rec.primary_rep_trx_id := l_tcnv_rec.id;
8545 -- Call CREATE_ACCRUAL procedure to create accrual transactions and entries for SECONDARY
8546 CREATE_ACCRUALS_FORMULA (
8547 p_api_version => l_api_version,
8548 p_init_msg_list => l_init_msg_list,
8549 x_return_status => l_return_status,
8550 x_msg_count => l_msg_count,
8551 x_msg_data => l_msg_data,
8552 x_tcnv_rec => l_tcnv_rec,
8553 x_tclv_tbl => l_tclv_tbl,
8554 p_accrual_rec => l_accrual_rec,
8555 p_ctxt_val_tbl => l_ctxt_val_tbl,
8556 p_representation_type => 'SECONDARY');
8557
8558 -- store the highest degree of error
8559 IF (l_return_status <> Okl_Api.G_RET_STS_SUCCESS) THEN
8560 IF (l_return_status = Okl_Api.G_RET_STS_UNEXP_ERROR) THEN
8561 -- need to leave
8562 Okl_Api.set_message(p_app_name => g_app_name,
8563 p_msg_name => 'OKL_AGN_CRE_ACR_ERROR',
8564 p_token1 => g_contract_number_token,
8565 p_token1_value => l_contract_number);
8566 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
8567 ELSIF (l_return_Status = Okl_Api.G_RET_STS_ERROR) THEN
8568 Okl_Api.set_message(p_app_name => g_app_name,
8569 p_msg_name => 'OKL_AGN_CRE_ACR_ERROR',
8570 p_token1 => g_contract_number_token,
8571 p_token1_value => l_contract_number);
8572 RAISE OKL_API.G_EXCEPTION_ERROR;
8573 END IF;
8574 END IF;
8575
8576 IF p_process_accrual_rec.submission_mode='BATCH' THEN
8577 FND_FILE.PUT_LINE(FND_FILE.OUTPUT,RPAD(l_contract_number,28)||
8578 RPAD(l_tcnv_rec.trx_number,22)||
8579 RPAD(FND_MESSAGE.GET_STRING('OKL','OKL_AGN_RPT_NON_REVENUE'),17)||
8580 RPAD(Okl_Accounting_Util.Get_Lookup_Meaning('YES_NO',l_tcnv_rec.accrual_status_yn,0,0),20)||
8581 RPAD(Okl_Accounting_Util.Get_Lookup_Meaning('YES_NO',l_tcnv_rec.update_status_yn,0,0),16)||
8582 RPAD(l_tcnv_rec.currency_code,9)||
8583 LPAD(Okl_Accounting_Util.FORMAT_AMOUNT(l_tcnv_rec.amount,l_tcnv_rec.currency_code),17) ||
8584 LPAD(Okl_Accounting_Util.Get_Lookup_Meaning('OKL_REPRESENTATION_TYPE','SECONDARY'), 10));
8585 END IF; -- if p_process_accrual_rec.submission_mode=...
8586 END IF;
8587 -- MGAAP 7263041 end
8588 END IF; -- If override_status = 'N'
8589
8590 ELSIF l_rev_rec_basis = 'ACRL_WITHOUT_RULE' THEN
8591 --Create Accrual Entries and Corresponding Reversal Entries
8592 l_ctxt_val_tbl(1).NAME := 'p_accrual_date';
8593 l_ctxt_val_tbl(1).VALUE := TO_CHAR(l_accrual_date, 'MM/DD/YYYY');
8594 --Create Accrual Entries
8595 -- Build the accrual record
8596 l_accrual_rec.contract_id := l_contract_id;
8597 l_accrual_rec.set_of_books_id := l_sob_id;
8598 l_accrual_rec.accrual_date := l_accrual_date;
8599 l_accrual_rec.trx_date := l_accrual_date;
8600 l_accrual_rec.contract_number := l_contract_number;
8601 l_accrual_rec.rule_result := NULL;
8602 l_accrual_rec.override_status := NULL;
8603 l_accrual_rec.description := l_batch_name;
8604 l_accrual_rec.amount := 0;
8605 l_accrual_rec.currency_code := l_khr_currency_code;
8606 l_accrual_rec.currency_conversion_type := l_currency_conv_type;
8607 l_accrual_rec.currency_conversion_rate := l_currency_conv_rate;
8608 l_accrual_rec.currency_conversion_date := l_currency_conv_date;
8609 l_accrual_rec.product_id := l_product_id;
8610 l_accrual_rec.trx_type_id := l_try_id;
8611 l_accrual_rec.sty_id := l_sty_id;
8612 l_accrual_rec.advance_arrears := l_billing_type;
8613 l_accrual_rec.factoring_synd_flag := l_factoring_synd_flag;
8614 l_accrual_rec.post_to_gl := 'Y';
8615 l_accrual_rec.gl_reversal_flag := 'N';
8616 l_accrual_rec.memo_yn := 'N';
8617 l_accrual_rec.accrual_activity := 'ACCRUAL';
8618 l_accrual_rec.accrual_rule_yn := 'N';
8619
8620 l_tcnv_rec.trx_number := null; -- Bug 7555143
8621 l_tcnv_rec.ID := null;
8622 -- Call CREATE_ACCRUAL procedure to create accrual transactions and entries
8623 CREATE_ACCRUALS_FORMULA (
8624 p_api_version => l_api_version,
8625 p_init_msg_list => l_init_msg_list,
8626 x_return_status => l_return_status,
8627 x_msg_count => l_msg_count,
8628 x_msg_data => l_msg_data,
8629 x_tcnv_rec => l_tcnv_rec,
8630 x_tclv_tbl => l_tclv_tbl,
8631 p_accrual_rec => l_accrual_rec,
8632 p_ctxt_val_tbl => l_ctxt_val_tbl);
8633
8634 -- store the highest degree of error
8635 IF (l_return_status <> Okl_Api.G_RET_STS_SUCCESS) THEN
8636 IF (l_return_status = Okl_Api.G_RET_STS_UNEXP_ERROR) THEN
8637 -- need to leave
8638 Okl_Api.set_message(p_app_name => g_app_name,
8639 p_msg_name => 'OKL_AGN_CRE_ACR_ERROR',
8640 p_token1 => g_contract_number_token,
8641 p_token1_value => l_contract_number);
8642 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
8643 ELSIF (l_return_status = Okl_Api.G_RET_STS_ERROR) THEN
8644 Okl_Api.set_message(p_app_name => g_app_name,
8645 p_msg_name => 'OKL_AGN_CRE_ACR_ERROR',
8646 p_token1 => g_contract_number_token,
8647 p_token1_value => l_contract_number);
8648 RAISE OKL_API.G_EXCEPTION_ERROR;
8649 END IF;
8650 END IF;
8651 -- Update balances table
8652 IF l_tcnv_rec.amount IS NOT NULL THEN
8653 UPDATE_BALANCES (l_contract_id
8654 ,l_contract_number
8655 ,l_tcnv_rec.amount
8656 ,l_tcnv_rec.date_transaction_occurred
8657 ,l_return_status
8658 ,l_msg_count
8659 ,l_msg_data);
8660 -- store the highest degree of error
8661 IF (l_return_status <> Okl_Api.G_RET_STS_SUCCESS) THEN
8662 IF (l_return_status = Okl_Api.G_RET_STS_UNEXP_ERROR) THEN
8663 -- need to leave
8664 Okl_Api.set_message(p_app_name => g_app_name,
8665 p_msg_name => 'OKL_AGN_BAL_UPD_ERROR',
8666 p_token1 => g_contract_number_token,
8667 p_token1_value => l_contract_number);
8668 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
8669 ELSIF (l_return_status = Okl_Api.G_RET_STS_ERROR) THEN
8670 Okl_Api.set_message(p_app_name => g_app_name,
8671 p_msg_name => 'OKL_AGN_BAL_UPD_ERROR',
8672 p_token1 => g_contract_number_token,
8673 p_token1_value => l_contract_number);
8674 RAISE OKL_API.G_EXCEPTION_ERROR;
8675 END IF;
8676 END IF;
8677 END IF;
8678
8679 IF p_process_accrual_rec.submission_mode='BATCH' THEN
8680 FND_FILE.PUT_LINE(FND_FILE.OUTPUT,RPAD(l_contract_number,28)||
8681 RPAD(l_tcnv_rec.trx_number,22)||
8682 RPAD(FND_MESSAGE.GET_STRING('OKL','OKL_AGN_RPT_REVENUE'),17)||
8683 RPAD(Okl_Accounting_Util.Get_Lookup_Meaning('OKL_ACCRUAL_ACTIVITY','NOT APPLICABLE',540,0),20)||
8684 RPAD(Okl_Accounting_Util.Get_Lookup_Meaning('OKL_ACCRUAL_ACTIVITY','NOT APPLICABLE',540,0),16)||
8685 RPAD(l_tcnv_rec.currency_code,9)||
8686 LPAD(Okl_Accounting_Util.FORMAT_AMOUNT(l_tcnv_rec.amount,l_tcnv_rec.currency_code),17) ||
8687 LPAD(Okl_Accounting_Util.Get_Lookup_Meaning('OKL_REPRESENTATION_TYPE','PRIMARY'), 8));
8688 END IF; -- if p_process_accrual_rec.submission_mode=...
8689
8690 -- MGAAP 7263041 start
8691 IF (l_multi_gaap_yn = 'Y') THEN
8692 l_accrual_rec.set_of_books_id := G_SOB_ID_REP;
8693 l_accrual_rec.product_id := l_reporting_pdt_id;
8694 l_accrual_rec.sty_id := l_sty_id_rep;
8695 l_accrual_rec.trx_number := l_tcnv_rec.trx_number;
8696 l_accrual_rec.primary_rep_trx_id := l_tcnv_rec.id;
8697 -- Call CREATE_ACCRUAL procedure to create accrual transactions and entries for SECONDARY
8698 CREATE_ACCRUALS_FORMULA (
8699 p_api_version => l_api_version,
8700 p_init_msg_list => l_init_msg_list,
8701 x_return_status => l_return_status,
8702 x_msg_count => l_msg_count,
8703 x_msg_data => l_msg_data,
8704 x_tcnv_rec => l_tcnv_rec,
8705 x_tclv_tbl => l_tclv_tbl,
8706 p_accrual_rec => l_accrual_rec,
8707 p_ctxt_val_tbl => l_ctxt_val_tbl,
8708 p_representation_type => 'SECONDARY');
8709
8710 -- store the highest degree of error
8711 IF (l_return_status <> Okl_Api.G_RET_STS_SUCCESS) THEN
8712 IF (l_return_status = Okl_Api.G_RET_STS_UNEXP_ERROR) THEN
8713 -- need to leave
8714 Okl_Api.set_message(p_app_name => g_app_name,
8715 p_msg_name => 'OKL_AGN_CRE_ACR_ERROR',
8716 p_token1 => g_contract_number_token,
8717 p_token1_value => l_contract_number);
8718 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
8719 ELSIF (l_return_status = Okl_Api.G_RET_STS_ERROR) THEN
8720 Okl_Api.set_message(p_app_name => g_app_name,
8721 p_msg_name => 'OKL_AGN_CRE_ACR_ERROR',
8722 p_token1 => g_contract_number_token,
8723 p_token1_value => l_contract_number);
8724 RAISE OKL_API.G_EXCEPTION_ERROR;
8725 END IF;
8726 END IF;
8727
8728 IF p_process_accrual_rec.submission_mode='BATCH' THEN
8729 FND_FILE.PUT_LINE(FND_FILE.OUTPUT,RPAD(l_contract_number,28)||
8730 RPAD(l_tcnv_rec.trx_number,22)||
8731 RPAD(FND_MESSAGE.GET_STRING('OKL','OKL_AGN_RPT_REVENUE'),17)||
8732 RPAD(Okl_Accounting_Util.Get_Lookup_Meaning('OKL_ACCRUAL_ACTIVITY','NOT APPLICABLE',540,0),20)||
8733 RPAD(Okl_Accounting_Util.Get_Lookup_Meaning('OKL_ACCRUAL_ACTIVITY','NOT APPLICABLE',540,0),16)||
8734 RPAD(l_tcnv_rec.currency_code,9)||
8735 LPAD(Okl_Accounting_Util.FORMAT_AMOUNT(l_tcnv_rec.amount,l_tcnv_rec.currency_code),17) ||
8736 LPAD(Okl_Accounting_Util.Get_Lookup_Meaning('OKL_REPRESENTATION_TYPE','SECONDARY'), 10));
8737 END IF; -- if p_process_accrual_rec.submission_mode=...
8738
8739 END IF;
8740 -- MGAAP 7263041 end
8741 END IF; -- l_rev_rec_basis =
8742
8743 ELSE
8744 Okl_Api.set_message(p_app_name => g_app_name,
8745 p_msg_name => 'OKL_AGN_ACTUAL_DATE_ERROR',
8746 p_token1 => g_contract_number_token,
8747 p_token1_value => l_contract_number,
8748 p_token2 => 'ACCRUAL_DATE',
8749 p_token2_value => to_char(l_last_accrual_date,'DD-Mon-YYYY')
8750 );
8751 RAISE Okl_Api.G_EXCEPTION_ERROR;
8752
8753 END IF; --IF TRUNC(l_accrual_date) >= TRUNC(l_last_accrual_date) THEN
8754
8755 END IF; -- IF l_rev_rec_method = 'ACTUAL' THEN'
8756
8757 x_return_status := l_return_status;
8758 Okl_Api.END_ACTIVITY(l_msg_count, l_msg_data);
8759
8760 EXCEPTION
8761
8762 WHEN Okl_Api.G_EXCEPTION_ERROR THEN
8763 x_return_status := Okl_Api.HANDLE_EXCEPTIONS(l_api_name
8764 ,g_pkg_name
8765 ,'OKL_API.G_RET_STS_ERROR'
8766 ,l_msg_count
8767 ,l_msg_data
8768 ,'_PVT');
8769
8770 IF p_process_accrual_rec.submission_mode='BATCH' THEN
8771 -- Select the contract for error reporting
8772 FND_FILE.PUT_LINE(FND_FILE.LOG,l_contract_number||', '||
8773 FND_MESSAGE.GET_STRING('OKL','OKL_AGN_RPT_ERROR_STATUS')||' '||
8774 x_return_status);
8775 -- Bug 4700105. Using get_error_msg.
8776 Okl_Accounting_Util.GET_ERROR_MSG(l_error_msg_tbl);
8777 IF (l_error_msg_tbl.COUNT > 0) THEN
8778 FOR i IN l_error_msg_tbl.FIRST..l_error_msg_tbl.LAST
8779 LOOP
8780 IF l_error_msg_tbl(i) IS NOT NULL THEN
8781 FND_FILE.PUT_LINE(FND_FILE.LOG,l_error_msg_tbl(i));
8782 END IF;
8783 END LOOP;
8784 FND_FILE.PUT_LINE(FND_FILE.LOG,'');
8785 END IF;
8786 END IF;
8787 -- Bug 4700105.
8788 FND_MSG_PUB.Delete_Msg;
8789
8790 WHEN Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR THEN
8791 -- Select the contract for error reporting
8792 x_return_status := Okl_Api.HANDLE_EXCEPTIONS(l_api_name
8793 ,g_pkg_name
8794 ,'OKL_API.G_RET_STS_UNEXP_ERROR'
8795 ,l_msg_count
8796 ,l_msg_data
8797 ,'_PVT');
8798 IF p_process_accrual_rec.submission_mode='BATCH' THEN
8799 -- Select the contract for error reporting
8800 FND_FILE.PUT_LINE(FND_FILE.LOG,l_contract_number||', '||
8801 FND_MESSAGE.GET_STRING('OKL','OKL_AGN_RPT_ERROR_STATUS')||' '||
8802 x_return_status);
8803 -- Bug 4700105. Using get_error_msg.
8804 Okl_Accounting_Util.GET_ERROR_MSG(l_error_msg_tbl);
8805 IF (l_error_msg_tbl.COUNT > 0) THEN
8806 FOR i IN l_error_msg_tbl.FIRST..l_error_msg_tbl.LAST
8807 LOOP
8808 IF l_error_msg_tbl(i) IS NOT NULL THEN
8809 FND_FILE.PUT_LINE(FND_FILE.LOG,l_error_msg_tbl(i));
8810 END IF;
8811 END LOOP;
8812 FND_FILE.PUT_LINE(FND_FILE.LOG,'');
8813 END IF;
8814 END IF;
8815 -- Bug 4700105.
8816 FND_MSG_PUB.Delete_Msg;
8817
8818 WHEN OTHERS THEN
8819
8820 IF check_agn_csr%ISOPEN THEN
8821 CLOSE check_agn_csr;
8822 END IF;
8823
8824 IF last_status_csr%ISOPEN THEN
8825 CLOSE last_status_csr;
8826 END IF;
8827
8828
8829 IF last_int_date_csr%ISOPEN THEN
8830 CLOSE last_int_date_csr;
8831 END IF;
8832
8833 -- Select the contract for error reporting
8834 x_return_status := Okl_Api.HANDLE_EXCEPTIONS(l_api_name
8835 ,g_pkg_name
8836 ,'OKL_API.G_RET_STS_UNEXP_ERROR'
8837 ,l_msg_count
8838 ,l_msg_data
8839 ,'_PVT');
8840
8841 IF p_process_accrual_rec.submission_mode='BATCH' THEN
8842 -- Select the contract for error reporting
8843 FND_FILE.PUT_LINE(FND_FILE.LOG,l_contract_number||', '||
8844 FND_MESSAGE.GET_STRING('OKL','OKL_AGN_RPT_ERROR_STATUS')||' '||
8845 x_return_status);
8846 -- Bug 4700105. Using get_error_msg.
8847 Okl_Accounting_Util.GET_ERROR_MSG(l_error_msg_tbl);
8848 IF (l_error_msg_tbl.COUNT > 0) THEN
8849 FOR i IN l_error_msg_tbl.FIRST..l_error_msg_tbl.LAST
8850 LOOP
8851 IF l_error_msg_tbl(i) IS NOT NULL THEN
8852 FND_FILE.PUT_LINE(FND_FILE.LOG,l_error_msg_tbl(i));
8853 END IF;
8854 END LOOP;
8855 FND_FILE.PUT_LINE(FND_FILE.LOG,'');
8856 END IF;
8857 END IF;
8858 -- Bug 4700105.
8859 FND_MSG_PUB.Delete_Msg;
8860
8861 END PROCESS_ACCRUALS;
8862
8863 -- Function to call the GENERATE_ACCRUALS Procedure
8864 FUNCTION SUBMIT_ACCRUALS(
8865 x_return_status OUT NOCOPY VARCHAR2,
8866 x_msg_count OUT NOCOPY NUMBER,
8867 x_msg_data OUT NOCOPY VARCHAR2,
8868 p_api_version IN NUMBER,
8869 p_accrual_date IN DATE,
8870 p_batch_name IN VARCHAR2 ) RETURN NUMBER IS
8871
8872 x_request_id NUMBER;
8873 l_return_status VARCHAR2(1) := Okl_Api.G_RET_STS_SUCCESS;
8874 l_msg_count NUMBER;
8875 l_msg_data VARCHAR2(2000);
8876 l_api_name VARCHAR2(2000) := 'SUBMIT_ACCRUALS';
8877 l_api_version CONSTANT NUMBER := 1.0;
8878 l_init_msg_list VARCHAR2(20) DEFAULT Okl_Api.G_FALSE;
8879 l_accrual_date VARCHAR2(2000);
8880 BEGIN
8881 -- Set save point
8882 l_return_status := Okl_Api.START_ACTIVITY(l_api_name
8883 ,G_PKG_NAME
8884 ,l_init_msg_list
8885 ,l_api_version
8886 ,p_api_version
8887 ,'_PVT'
8888 ,l_return_status);
8889 IF (l_return_status = Okl_Api.G_RET_STS_UNEXP_ERROR) THEN
8890 RAISE Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR;
8891 ELSIF (l_return_Status = Okl_Api.G_RET_STS_ERROR) THEN
8892 RAISE Okl_Api.G_EXCEPTION_ERROR;
8893 END IF;
8894
8895 -- check for data before processing
8896 IF (p_accrual_date IS NULL OR p_accrual_date = Okl_Api.G_MISS_DATE) THEN
8897 Okl_Api.SET_MESSAGE(p_app_name => g_app_name,
8898 p_msg_name => 'OKL_AGN_DATE_ERROR');
8899 RAISE Okl_Api.G_EXCEPTION_ERROR;
8900 ELSE
8901 l_accrual_date := FND_DATE.DATE_TO_CANONICAL(p_accrual_date);
8902 END IF;
8903
8904 -- Submit Concurrent Program Request
8905 FND_REQUEST.set_org_id(mo_global.get_current_org_id); --MOAC- Concurrent request
8906 x_request_id := FND_REQUEST.SUBMIT_REQUEST(application => 'OKL',
8907 program => 'OKLAGNCALC',
8908 argument1 => l_accrual_date,
8909 argument2 => p_batch_name,
8910 argument3 => NULL);
8911
8912 IF x_request_id = 0 THEN
8913 -- Handle submission error
8914 -- Raise Error if the request has not been submitted successfully.
8915 Okl_Api.SET_MESSAGE(G_APP_NAME, 'OKL_ERROR_SUB_CONC_PROG', 'CONC_PROG', 'Generate Accrual');
8916 RAISE Okl_Api.G_EXCEPTION_ERROR;
8917 ELSE
8918 --set return status
8919 x_return_status := l_return_status;
8920 RETURN x_request_id;
8921 END IF;
8922
8923 EXCEPTION
8924 WHEN Okl_Api.G_EXCEPTION_ERROR THEN
8925 x_return_status := Okl_Api.HANDLE_EXCEPTIONS(l_api_name
8926 ,g_pkg_name
8927 ,'OKL_API.G_RET_STS_ERROR'
8928 ,x_msg_count
8929 ,x_msg_data
8930 ,'_PVT');
8931 RETURN x_request_id;
8932 WHEN Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR THEN
8933 x_return_status := Okl_Api.HANDLE_EXCEPTIONS(l_api_name
8934 ,g_pkg_name
8935 ,'OKL_API.G_RET_STS_UNEXP_ERROR'
8936 ,x_msg_count
8937 ,x_msg_data
8938 ,'_PVT');
8939 RETURN x_request_id;
8940 WHEN OTHERS THEN
8941 x_return_status :=Okl_Api.HANDLE_EXCEPTIONS
8942 (l_api_name,
8943 G_PKG_NAME,
8944 'OTHERS',
8945 x_msg_count,
8946 x_msg_data,
8947 '_PVT');
8948 RETURN x_request_id;
8949 END SUBMIT_ACCRUALS;
8950
8951 PROCEDURE GENERATE_ACCRUALS(errbuf OUT NOCOPY VARCHAR2
8952 ,retcode OUT NOCOPY NUMBER
8953 ,p_accrual_date IN VARCHAR2
8954 ,p_batch_name IN VARCHAR2
8955 ,p_contract_number IN VARCHAR2
8956 ,p_rev_rec_method IN VARCHAR2) IS
8957
8958 -- declare local variables
8959 l_contract_id OKL_K_HEADERS_FULL_V.id%TYPE;
8960 l_contract_number OKL_K_HEADERS_FULL_V.contract_number%TYPE;
8961 l_accrual_status OKL_K_HEADERS_FULL_V.generate_accrual_yn%TYPE;
8962 l_override_status OKL_K_HEADERS_FULL_V.generate_accrual_override_yn%TYPE;
8963 l_start_date OKL_K_HEADERS_FULL_V.start_date%TYPE;
8964 l_sts_code OKL_K_HEADERS_FULL_V.sts_code%TYPE;
8965 l_product_id OKL_K_HEADERS_FULL_V.pdt_id%TYPE;
8966 l_deal_type OKL_K_HEADERS_FULL_V.deal_type%TYPE;
8967 l_try_id OKL_TRX_TYPES_V.id%TYPE;
8968 l_accrual_reversal_days OKL_SYS_ACCT_OPTS.accrual_reversal_days%TYPE;
8969 l_func_currency_code OKL_TRX_CONTRACTS.CURRENCY_CODE%TYPE;
8970 l_khr_currency_code OKL_TRX_CONTRACTS.CURRENCY_CODE%TYPE;
8971 l_currency_conv_type OKL_TRX_CONTRACTS.CURRENCY_CONVERSION_TYPE%TYPE;
8972 l_currency_conv_rate OKL_TRX_CONTRACTS.CURRENCY_CONVERSION_RATE%TYPE;
8973 l_currency_conv_date OKL_TRX_CONTRACTS.CURRENCY_CONVERSION_DATE%TYPE;
8974 l_sob_id OKL_SYS_ACCT_OPTS.set_of_books_id%TYPE;
8975 l_reverse_date_to DATE;
8976 l_sob_name VARCHAR2(2000);
8977 l_api_version CONSTANT NUMBER := 1.0;
8978 p_api_version CONSTANT NUMBER := 1.0;
8979 l_api_name CONSTANT VARCHAR2(30) := 'GENERATE_ACCRUALS';
8980 l_init_msg_list VARCHAR2(2000) := OKL_API.G_FALSE;
8981 l_return_status VARCHAR2(1) := OKL_API.G_RET_STS_SUCCESS;
8982 l_msg_count NUMBER;
8983 l_msg_data VARCHAR2(2000);
8984 l_period_name VARCHAR2(2000);
8985 l_period_start_date DATE;
8986 l_period_end_date DATE;
8987 l_outer_error_msg_tbl Okl_Accounting_Util.Error_Message_Type;
8988 l_org_id NUMBER;
8989 l_org_name VARCHAR2(2000);
8990 l_contract_error_count NUMBER := 1;
8991 l_period_status VARCHAR2(1);
8992 l_counter NUMBER := 1;
8993 l_contract_counter NUMBER := 0;
8994 l_source_trx_type OKL_TRX_CONTRACTS.SOURCE_TRX_TYPE%TYPE;
8995 l_source_trx_id OKL_TRX_CONTRACTS.SOURCE_TRX_ID%TYPE;
8996
8997 l_reqid FND_CONCURRENT_REQUESTS.request_id%TYPE;
8998 req_data VARCHAR2(10);
8999 i NUMBER;
9000 l_accrual_date DATE := FND_DATE.CANONICAL_TO_DATE(p_accrual_date);
9001
9002 -- START MDOKAL CODE
9003 l_int_counter INTEGER;
9004 l_max_lines NUMBER;
9005 l_init_loop BOOLEAN := TRUE;
9006 l_sort_int_counter INTEGER;
9007 l_next_highest_val NUMBER;
9008 l_lightest_worker NUMBER;
9009 l_lightest_load NUMBER;
9010 l_seq_next NUMBER;
9011 l_data_found BOOLEAN := FALSE;
9012 l_num_workers NUMBER;
9013 l_worker_id VARCHAR2(2000);
9014
9015 --dkagrawa changed cursor to use view OKL_PROD_QLTY_VAL_UV than okl_product_parameters_v
9016 CURSOR chk_update_header_csr is
9017 SELECT chr.contract_number
9018 FROM OKC_K_HEADERS_B chr,
9019 OKL_K_HEADERS khr,
9020 OKL_PROD_QLTY_VAL_UV pdt
9021 WHERE chr.scs_code = 'LEASE'
9022 AND chr.sts_code IN ('BOOKED','EVERGREEN')
9023 AND chr.id = khr.id
9024 AND khr.pdt_id = pdt.pdt_id
9025 AND pdt.quality_name = 'REVENUE_RECOGNITION_METHOD'
9026 AND pdt.quality_val = p_rev_rec_method
9027 -- modified by zrehman for Bug#6788005 on 04-Feb-2008 start
9028 UNION
9029 SELECT chr.contract_number
9030 FROM OKC_K_HEADERS_B chr,
9031 OKL_K_HEADERS khr
9032 WHERE chr.scs_code = 'INVESTOR'
9033 AND chr.sts_code = 'ACTIVE'
9034 AND chr.id = khr.id
9035 ;
9036 -- modified by zrehman for Bug#6788005 on 04-Feb-2008 end
9037
9038 CURSOR chk_data_volume_csr(p_seq_next VARCHAR2 ) IS
9039 SELECT chr.contract_number contract_number
9040 ,count(cle.id) line_count
9041 FROM OKC_K_HEADERS_B chr, OKC_K_LINES_B cle, okl_parallel_processes opp
9042 WHERE opp.object_value = chr.contract_number
9043 AND opp.assigned_process = p_seq_next
9044 AND opp.object_type = 'ACCRUAL_CONTRACT'
9045 AND chr.scs_code = 'LEASE'
9046 AND chr.sts_code IN ('BOOKED','EVERGREEN')
9047 AND chr.id = cle.chr_id
9048 GROUP BY chr.contract_number
9049 -- modified by zrehman for Bug#6788005 on 04-Feb-2008 start
9050 UNION
9051 SELECT chr.contract_number contract_number
9052 ,count(cle.id) line_count
9053 FROM OKC_K_HEADERS_B chr, OKC_K_LINES_B cle, okl_parallel_processes opp
9054 WHERE opp.object_value = chr.contract_number
9055 AND opp.assigned_process = p_seq_next
9056 AND opp.object_type = 'ACCRUAL_CONTRACT'
9057 AND chr.scs_code = 'INVESTOR'
9058 AND chr.sts_code = 'ACTIVE'
9059 AND chr.id = cle.chr_id
9060 GROUP BY chr.contract_number;
9061 -- modified by zrehman for Bug#6788005 on 04-Feb-2008 end;
9062
9063 type l_contract_rec is
9064 record (batch_number VARCHAR2(60),
9065 contract_number VARCHAR2(60),
9066 line_count NUMBER,
9067 worker_number NUMBER);
9068
9069 type contract_tab is table of l_contract_rec index by BINARY_INTEGER;
9070
9071 type worker_load_rec is
9072 record (worker_number NUMBER,
9073 worker_load NUMBER);
9074
9075 type worker_load_tab IS TABLE OF worker_load_rec index by BINARY_INTEGER;
9076
9077 type contract_list is
9078 record (contract_number VARCHAR2(60));
9079
9080 type contract_list_tab is table of contract_list index by BINARY_INTEGER;
9081
9082
9083 l_contract_list contract_list_tab;
9084 l_worker_load worker_load_tab;
9085 l_contract_tab contract_tab;
9086 l_sort_tab1 contract_tab;
9087 l_temp_tab contract_tab;
9088
9089 -- END MDOKAL CODE
9090
9091 -- -- Cursor to select contracts for accrual processing
9092 -- -- modified cursor to select only lease contracts
9093 -- -- bug#2618966
9094 --dkagrawa changed cursor to use view OKL_PROD_QLTY_VAL_UV than okl_product_parameters_v
9095 CURSOR accrual_contract_csr IS
9096 SELECT chr.id
9097 ,chr.contract_number
9098 ,chr.start_date
9099 ,chr.sts_code
9100 ,khr.pdt_id
9101 ,khr.generate_accrual_yn
9102 ,khr.generate_accrual_override_yn
9103 ,khr.deal_type
9104 ,chr.currency_code
9105 ,khr.currency_conversion_type
9106 ,khr.currency_conversion_rate
9107 ,khr.currency_conversion_date
9108 FROM OKC_K_HEADERS_B chr,
9109 OKL_K_HEADERS khr,
9110 OKL_PROD_QLTY_VAL_UV pdt
9111 WHERE chr.contract_number = p_contract_number
9112 AND chr.id = khr.id
9113 AND chr.scs_code = 'LEASE'
9114 AND chr.sts_code IN ('BOOKED','EVERGREEN')
9115 AND khr.pdt_id = pdt.pdt_id
9116 AND pdt.quality_name = 'REVENUE_RECOGNITION_METHOD'
9117 AND pdt.quality_val = p_rev_rec_method
9118 -- modified by zrehman for Bug#6788005 on 04-Feb-2008 start
9119 UNION
9120 SELECT chr.id
9121 ,chr.contract_number
9122 ,chr.start_date
9123 ,chr.sts_code
9124 ,khr.pdt_id
9125 ,khr.generate_accrual_yn
9126 ,khr.generate_accrual_override_yn
9127 ,khr.deal_type
9128 ,chr.currency_code
9129 ,khr.currency_conversion_type
9130 ,khr.currency_conversion_rate
9131 ,khr.currency_conversion_date
9132 FROM OKC_K_HEADERS_B chr,
9133 OKL_K_HEADERS khr
9134 WHERE chr.contract_number = p_contract_number
9135 AND chr.id = khr.id
9136 AND chr.scs_code = 'INVESTOR'
9137 AND chr.sts_code = 'ACTIVE'
9138 -- modified by zrehman for Bug#6788005 on 04-Feb-2008 end
9139 ;
9140
9141 -- Cursor to select the billing rule i.e. whether advance or arrears
9142 -- commenting for bug# 2388940 04-Jun-02 SGIYER
9143 -- as per discussion with PM. Advance/arrears must get a value NULL.
9144 --CURSOR billing_rule_csr(p_ctr_id NUMBER) IS
9145 --SELECT object1_id1
9146 --FROM OKC_RULES_B r
9147 --WHERE r.dnz_chr_id = p_ctr_id
9148 --AND r.jtot_object1_code = 'OKX_INVRULE'
9149 --AND r.rule_information_category = 'IRE';
9150
9151 -- declare error placeholders
9152 TYPE contract_error_tbl_type IS TABLE OF okl_k_headers_full_v.CONTRACT_NUMBER%TYPE INDEX BY BINARY_INTEGER;
9153 -- Bug 3020763
9154 TYPE accrual_contracts_rec_type IS RECORD(
9155 contract_id OKL_K_HEADERS_FULL_V.ID%TYPE,
9156 contract_number OKL_K_HEADERS_FULL_V.CONTRACT_NUMBER%TYPE,
9157 start_date OKL_K_HEADERS_FULL_V.START_DATE%TYPE,
9158 sts_code OKL_K_HEADERS_FULL_V.STS_CODE%TYPE,
9159 product_id OKL_K_HEADERS_FULL_V.PDT_ID%TYPE,
9160 accrual_status OKL_K_HEADERS_FULL_V.GENERATE_ACCRUAL_YN%TYPE,
9161 override_status OKL_K_HEADERS_FULL_V.GENERATE_ACCRUAL_OVERRIDE_YN%TYPE,
9162 deal_type OKL_K_HEADERS_FULL_V.DEAL_TYPE%TYPE,
9163 khr_currency_code OKL_K_HEADERS_FULL_V.CURRENCY_CODE%TYPE,
9164 currency_conv_type OKL_K_HEADERS_FULL_V.CURRENCY_CONVERSION_TYPE%TYPE,
9165 currency_conv_rate OKL_K_HEADERS_FULL_V.CURRENCY_CONVERSION_RATE%TYPE,
9166 currency_conv_date OKL_K_HEADERS_FULL_V.CURRENCY_CONVERSION_DATE%TYPE,
9167 org_id OKL_K_HEADERS_FULL_V.AUTHORING_ORG_ID%TYPE);
9168
9169 TYPE accrual_contracts_tbl_type IS TABLE OF accrual_contracts_rec_type INDEX BY BINARY_INTEGER;
9170
9171 l_contract_error_tbl contract_error_tbl_type;
9172 l_accrual_contracts_tbl accrual_contracts_tbl_type; -- Bug# 3020763
9173 l_accrual_contracts accrual_contract_csr%ROWTYPE;
9174 l_process_accrual_rec process_accrual_rec_type;
9175
9176 BEGIN
9177
9178 IF p_contract_number IS NULL THEN
9179
9180 req_data := fnd_conc_global.request_data;
9181
9182 IF req_data IS NOT NULL THEN
9183 errbuf:='Done';
9184 retcode := 0;
9185 return;
9186 ELSE
9187 -- Parent request. Do necessary action
9188 i := 1;
9189
9190 -- START MDOKAL CODE
9191 l_int_counter := 0;
9192 l_max_lines := 0;
9193
9194 --START SGIYER
9195 l_num_workers := FND_PROFILE.VALUE('OKL_AGN_WORKERS');
9196
9197 IF l_num_workers IS NULL THEN
9198 Okl_Api.set_message(p_app_name => g_app_name,
9199 p_msg_name => 'OKL_AGN_WORKER_ERROR');
9200 fnd_file.put_line(fnd_file.log, 'Please specify a value for the profile option OKL: Generate Accrual Concurrent Workers');
9201 RAISE OKL_API.G_EXCEPTION_ERROR;
9202 END IF;
9203 -- END SGIYER
9204
9205 -- Select sequence for marking processes
9206 select okl_opp_seq.nextval
9207 into l_seq_next
9208 from dual ;
9209
9210 -- mark records for processing
9211 for chk_update_header_csr_rec in chk_update_header_csr loop
9212
9213 INSERT INTO OKL_PARALLEL_PROCESSES
9214 (object_type, object_value, assigned_process, process_status, start_date)
9215 VALUES
9216 ('ACCRUAL_CONTRACT',chk_update_header_csr_rec.contract_number, to_char(l_seq_next),'PENDING_ASSIGNMENT', sysdate);
9217 COMMIT;
9218 l_data_found := TRUE;
9219 end loop;
9220
9221 if l_data_found then
9222 for chk_data_volume_csr_rec in chk_data_volume_csr(l_seq_next) loop
9223
9224 l_int_counter := l_int_counter + 1;
9225
9226 if l_init_loop then -- initialize minimum and maximum lines
9227 l_init_loop := FALSE;
9228 l_max_lines := chk_data_volume_csr_rec.line_count;
9229 end if;
9230
9231 l_contract_tab(l_int_counter).contract_number := chk_data_volume_csr_rec.contract_number;
9232 l_contract_tab(l_int_counter).line_count := chk_data_volume_csr_rec.line_count;
9233 if chk_data_volume_csr_rec.line_count > l_max_lines then
9234 l_max_lines := chk_data_volume_csr_rec.line_count;
9235 end if;
9236 end loop;
9237
9238 -- reset, ready for use again
9239 l_init_loop := TRUE;
9240
9241 if l_int_counter = 0 then
9242 FND_FILE.PUT_LINE(FND_FILE.log, 'No Data Found for criteria passed');
9243 end if;
9244
9245 -- find the maximum line count from the original table and delete it
9246 -- put this as the first element of the new sorted table
9247 l_sort_int_counter := 0;
9248 for i in 1..l_int_counter loop
9249 if l_contract_tab(i).line_count = l_max_lines then
9250 l_sort_int_counter := l_sort_int_counter+1;
9251 l_sort_tab1(l_sort_int_counter).contract_number := l_contract_tab(i).contract_number;
9252 l_sort_tab1(l_sort_int_counter).line_count := l_contract_tab(i).line_count;
9253 l_contract_tab.DELETE(i);
9254 end if;
9255 end loop;
9256
9257 -- start sorting
9258 if l_contract_tab.FIRST is not null then
9259
9260 for i in 1..l_contract_tab.COUNT loop
9261 -- find the next highest value in original table
9262 for i in 1..l_contract_tab.LAST loop
9263 if l_init_loop then
9264 if l_contract_tab.EXISTS(i) then
9265 l_next_highest_val := l_contract_tab(i).line_count;
9266 l_init_loop := FALSE;
9267 end if;
9268 end if;
9269 if l_contract_tab.EXISTS(i) and l_contract_tab(i).line_count > l_next_highest_val then
9270 l_next_highest_val := l_contract_tab(i).line_count;
9271 end if;
9272 end loop;
9273
9274 -- reset flag, ready for use again
9275 l_init_loop := TRUE;
9276 -- continue populating sort table in order
9277 for i in 1..l_contract_tab.LAST loop
9278 if l_contract_tab.EXISTS(i) and l_contract_tab(i).line_count = l_next_highest_val then
9279 l_sort_int_counter := l_sort_int_counter+1;
9280 l_sort_tab1(l_sort_int_counter).contract_number := l_contract_tab(i).contract_number;
9281 l_sort_tab1(l_sort_int_counter).line_count := l_contract_tab(i).line_count;
9282 l_contract_tab.DELETE(i);
9283 end if;
9284 end loop;
9285 exit when l_contract_tab.LAST is null;
9286 end loop;
9287 end if; -- end sorting
9288
9289 -- begin processing load for workers
9290 for i in 1..l_num_workers loop -- put all workers into a table
9291 l_worker_load(i).worker_number := i;
9292 l_worker_load(i).worker_load := 0; -- initialize load with zero
9293 end loop;
9294
9295 if l_num_workers > 0 then
9296
9297 l_lightest_worker := 1;
9298 -- loop through the sorted table and ensure each contract has a worker
9299 for i in 1..l_sort_tab1.COUNT loop
9300 l_sort_tab1(i).worker_number := l_lightest_worker;
9301 -- put current contract into the lightest worker
9302 if l_worker_load.EXISTS(l_lightest_worker) then
9303 l_worker_load(l_lightest_worker).worker_load := l_worker_load(l_lightest_worker).worker_load + l_sort_tab1(i).line_count;
9304 end if;
9305 -- default the lighest load with the first element as a starting point
9306 if l_worker_load.EXISTS(1) then
9307 l_lightest_load := l_worker_load(1).worker_load;
9308 l_lightest_worker := l_worker_load(1).worker_number;
9309 -- logic to find lightest load
9310 for i in 1..l_worker_load.COUNT loop
9311 if (l_worker_load(i).worker_load = 0) or (l_worker_load(i).worker_load < l_lightest_load) then
9312 l_lightest_load := l_worker_load(i).worker_load;
9313 l_lightest_worker := l_worker_load(i).worker_number;
9314 end if;
9315 end loop;
9316 end if;
9317 end loop;
9318 end if;
9319
9320 l_sort_int_counter := 0;
9321
9322 for j in 1..l_worker_load.LAST loop
9323 for i in 1..l_sort_tab1.LAST loop
9324 if l_sort_tab1.EXISTS(i) and(l_sort_tab1(i).worker_number = l_worker_load(j).worker_number )then
9325
9326 UPDATE OKL_PARALLEL_PROCESSES
9327 SET
9328 assigned_process = l_seq_next||'-'||l_sort_tab1(i).worker_number,
9329 volume = l_sort_tab1(i).line_count,
9330 process_status = 'ASSIGNED'
9331 WHERE object_Type = 'ACCRUAL_CONTRACT'
9332 AND object_value = l_sort_tab1(i).contract_number
9333 AND process_status = 'PENDING_ASSIGNMENT';
9334
9335 COMMIT;
9336 l_sort_tab1.DELETE(i);
9337 end if;
9338 end loop;
9339 end loop;
9340
9341 for j in 1..l_worker_load.LAST loop
9342 --START SGIYER
9343 l_worker_id := NULL;
9344 l_worker_id := to_char(l_seq_next)||'-'||to_char(j);
9345
9346 FND_REQUEST.set_org_id(mo_global.get_current_org_id); --MOAC- Concurrent request
9347 l_reqid := FND_REQUEST.submit_request(application => 'OKL',
9348 program => 'OKLAGNCALCW',
9349 sub_request => TRUE,
9350 argument1 => p_accrual_date,
9351 argument2 => p_batch_name,
9352 argument3 => l_worker_id,
9353 argument4 => p_rev_rec_method);
9354 IF l_reqid = 0 THEN
9355 -- If request submission failed, exit with error.
9356 errbuf := fnd_message.get;
9357 retcode := 2;
9358 ELSE
9359 errbuf := 'Sub-Request submitted successfully';
9360 retcode := 0 ;
9361 END IF;
9362 FND_FILE.PUT_LINE(FND_FILE.LOG, 'Launching Process '||l_worker_id||' with Request ID '||l_reqid);
9363 end loop;
9364
9365 FND_CONC_GLOBAL.set_req_globals(conc_status => 'PAUSED',
9366 request_data => to_char(i)) ;
9367 -- END SGIYER
9368
9369 -- clean up
9370 -- Delete records from in chk_update_header_csr that were unassigned
9371 --DELETE FROM OKL_PARALLEL_PROCESSES
9372 --WHERE process_status = 'PENDING_ASSIGNMENT'
9373 --AND assigned_process = to_char(l_seq_next);
9374 --COMMIT;
9375 else
9376 FND_FILE.PUT_LINE(FND_FILE.LOG, 'No workers assigned due to no data found for prcocesing');
9377 end if; -- l_data_found
9378 -- END MDOKAL CODE
9379 END IF;
9380 ELSE
9381
9382 --Added by kthiruva on 02-Mar-2006 for Logging Purposes
9383 WRITE_TO_LOG('Generate_accruals:Before the call to Get_Common_Info');
9384 WRITE_TO_LOG('Accrual Date :'||l_accrual_date);
9385 -- get common info
9386 GET_COMMON_INFO (p_accrual_date => l_accrual_date,
9387 x_try_id => l_try_id,
9388 x_period_name => l_period_name,
9389 x_period_start_date => l_period_start_date,
9390 x_period_end_date => l_period_end_date,
9391 x_sob_id => l_sob_id,
9392 x_sob_name => l_sob_name,
9393 x_org_id => l_org_id,
9394 x_org_name => l_org_name,
9395 x_accrual_reversal_days => l_accrual_reversal_days,
9396 x_func_currency_code => l_func_currency_code,
9397 x_return_status => l_return_status
9398 );
9399 --Added by kthiruva on 02-Mar-2006 for Logging Purposes
9400 --Start of Changes
9401 WRITE_TO_LOG('The parameters returned after the GET_COMMON_INFO call');
9402 WRITE_TO_LOG('======================================================');
9403 WRITE_TO_LOG('Return Status :'||l_return_status);
9404 WRITE_TO_LOG('Transaction Id :'||l_try_id);
9405 WRITE_TO_LOG('Period Name :'||l_period_name);
9406 WRITE_TO_LOG('Period Start Date :'||l_period_start_date);
9407 WRITE_TO_LOG('Period End Date :'||l_period_end_date);
9408 WRITE_TO_LOG('Set Of Books Id :'||l_sob_id);
9409 WRITE_TO_LOG('Set Of Books Name :'||l_sob_name);
9410 WRITE_TO_LOG('Org Id :'||l_org_id);
9411 WRITE_TO_LOG('Org Name :'||l_org_name);
9412 WRITE_TO_LOG('Accrual Rev Days :'||l_accrual_reversal_days);
9413 WRITE_TO_LOG('Func Currency Code:'||l_func_currency_code);
9414 --kthiruva - End of Changes
9415
9416 IF (l_return_status <> Okl_Api.G_RET_STS_SUCCESS) THEN
9417 IF (l_return_status = Okl_Api.G_RET_STS_UNEXP_ERROR) THEN
9418 -- need to leave
9419 Okl_Api.set_message(p_app_name => g_app_name,
9420 p_msg_name => 'OKL_AGN_COM_INFO_ERROR');
9421 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
9422 ELSIF (l_return_Status = Okl_Api.G_RET_STS_ERROR) THEN
9423 Okl_Api.set_message(p_app_name => g_app_name,
9424 p_msg_name => 'OKL_AGN_COM_INFO_ERROR');
9425 RAISE OKL_API.G_EXCEPTION_ERROR;
9426 END IF;
9427 END IF;
9428
9429 -- Calculate the number of days (to_date) to reverse in case of non-accrual
9430 l_reverse_date_to := l_accrual_date - l_accrual_reversal_days;
9431
9432 -- Create Report Header
9433 REPORT_HEADER(l_sob_name
9434 ,l_org_name
9435 ,l_accrual_date
9436 ,p_batch_name
9437 ,l_func_currency_code
9438 ,l_return_status);
9439
9440 IF (l_return_status <> Okl_Api.G_RET_STS_SUCCESS) THEN
9441 Okl_Api.set_message(p_app_name => g_app_name,
9442 p_msg_name => 'OKL_AGN_REPORT_ERROR');
9443 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
9444 END IF;
9445
9446
9447 l_counter := 1;
9448 FOR l_accrual_contracts IN accrual_contract_csr
9449 LOOP
9450 l_accrual_contracts_tbl(l_counter).contract_id := l_accrual_contracts.id;
9451 l_accrual_contracts_tbl(l_counter).contract_number := l_accrual_contracts.contract_number;
9452 l_accrual_contracts_tbl(l_counter).sts_code := l_accrual_contracts.sts_code;
9453 l_accrual_contracts_tbl(l_counter).product_id := l_accrual_contracts.pdt_id;
9454 l_accrual_contracts_tbl(l_counter).accrual_status := l_accrual_contracts.generate_accrual_yn;
9455 l_accrual_contracts_tbl(l_counter).override_status := l_accrual_contracts.generate_accrual_override_yn;
9456 l_accrual_contracts_tbl(l_counter).start_date := l_accrual_contracts.start_date;
9457 l_accrual_contracts_tbl(l_counter).deal_type := l_accrual_contracts.deal_type;
9458 l_accrual_contracts_tbl(l_counter).khr_currency_code := l_accrual_contracts.currency_code;
9459 l_accrual_contracts_tbl(l_counter).currency_conv_type := l_accrual_contracts.currency_conversion_type;
9460 l_accrual_contracts_tbl(l_counter).currency_conv_date := l_accrual_contracts.currency_conversion_date;
9461 l_accrual_contracts_tbl(l_counter).currency_conv_rate := l_accrual_contracts.currency_conversion_rate;
9462 l_counter := l_counter+1;
9463 END LOOP;
9464
9465 --Added by kthiruva on 02-Mar-2006 for Logging Purposes
9466 --Start of Changes
9467 WRITE_TO_LOG('The contents of the l_accrual_contracts_tbl');
9468 WRITE_TO_LOG('===========================================');
9469 FOR y IN l_accrual_contracts_tbl.FIRST..l_accrual_contracts_tbl.LAST
9470 LOOP
9471 WRITE_TO_LOG('Contract Id :'||l_accrual_contracts_tbl(y).contract_id );
9472 WRITE_TO_LOG('Contract Number :'||l_accrual_contracts_tbl(y).contract_number);
9473 WRITE_TO_LOG('Contract Code :'||l_accrual_contracts_tbl(y).sts_code);
9474 WRITE_TO_LOG('Product Id :'||l_accrual_contracts_tbl(y).product_id);
9475 WRITE_TO_LOG('Accrual Status :'||l_accrual_contracts_tbl(y).accrual_status);
9476 WRITE_TO_LOG('Override Status :'||l_accrual_contracts_tbl(y).override_status);
9477 WRITE_TO_LOG('Start Date :'||l_accrual_contracts_tbl(y).start_date);
9478 WRITE_TO_LOG('Deal Type :'||l_accrual_contracts_tbl(y).deal_type);
9479 WRITE_TO_LOG('Cuurency Code :'||l_accrual_contracts_tbl(y).khr_currency_code);
9480 WRITE_TO_LOG('Currency Conversion Type :'||l_accrual_contracts_tbl(y).currency_conv_type);
9481 WRITE_TO_LOG('Currency Conversion Date :'||l_accrual_contracts_tbl(y).currency_conv_date);
9482 WRITE_TO_LOG('Currency Conversion Rate :'||l_accrual_contracts_tbl(y).currency_conv_rate);
9483 END LOOP;
9484 --kthiruva : end of Changes
9485
9486 -- for performance. Bug 3020763
9487 IF l_accrual_contracts_tbl.COUNT > 0 THEN
9488
9489 FOR y IN l_accrual_contracts_tbl.FIRST..l_accrual_contracts_tbl.LAST
9490 LOOP
9491 l_process_accrual_rec := NULL;
9492
9493 l_process_accrual_rec.contract_id := l_accrual_contracts_tbl(y).contract_id;
9494 l_process_accrual_rec.contract_number := l_accrual_contracts_tbl(y).contract_number;
9495 l_process_accrual_rec.sts_code := l_accrual_contracts_tbl(y).sts_code;
9496 l_process_accrual_rec.product_id := l_accrual_contracts_tbl(y).product_id;
9497 l_process_accrual_rec.accrual_status := l_accrual_contracts_tbl(y).accrual_status;
9498 l_process_accrual_rec.override_status := l_accrual_contracts_tbl(y).override_status;
9499 l_process_accrual_rec.start_date := l_accrual_contracts_tbl(y).start_date;
9500 l_process_accrual_rec.deal_type := l_accrual_contracts_tbl(y).deal_type;
9501 l_process_accrual_rec.khr_currency_code := l_accrual_contracts_tbl(y).khr_currency_code;
9502 l_process_accrual_rec.currency_conv_type := l_accrual_contracts_tbl(y).currency_conv_type;
9503 l_process_accrual_rec.currency_conv_date := l_accrual_contracts_tbl(y).currency_conv_date;
9504 l_process_accrual_rec.currency_conv_rate := l_accrual_contracts_tbl(y).currency_conv_rate;
9505
9506 l_process_accrual_rec.func_currency_code := l_func_currency_code;
9507 l_process_accrual_rec.try_id := l_try_id;
9508 l_process_accrual_rec.reverse_date_to := l_reverse_date_to;
9509 l_process_accrual_rec.batch_name := p_batch_name;
9510 l_process_accrual_rec.sob_id := l_sob_id;
9511 l_process_accrual_rec.accrual_date := l_accrual_date;
9512 l_process_accrual_rec.period_end_date := l_period_end_date;
9513 l_process_accrual_rec.period_start_date := l_period_start_date;
9514 l_process_accrual_rec.source_trx_id := l_source_trx_id;
9515 l_process_accrual_rec.source_trx_type := l_source_trx_type;
9516 l_process_accrual_rec.submission_mode := 'BATCH';
9517 l_process_accrual_rec.rev_rec_method := p_rev_rec_method;
9518
9519 PROCESS_ACCRUALS(
9520 p_api_version => l_api_version,
9521 p_init_msg_list => l_init_msg_list,
9522 x_return_status => l_return_status,
9523 x_msg_count => l_msg_count,
9524 x_msg_data => l_msg_data,
9525 p_process_accrual_rec => l_process_accrual_rec
9526 );
9527
9528 IF l_return_status <> OKL_API.G_RET_STS_SUCCESS THEN
9529 l_contract_error_tbl(l_contract_error_count) := l_process_accrual_rec.contract_number;
9530 l_contract_error_count := l_contract_error_count + 1;
9531 END IF;
9532
9533 END LOOP; -- For y IN l_accrual_contracts_tbl.FIRST
9534 FND_FILE.PUT_LINE(FND_FILE.OUTPUT,'');
9535 FND_FILE.PUT_LINE(FND_FILE.OUTPUT,'');
9536 FND_FILE.PUT_LINE(FND_FILE.OUTPUT,'');
9537 FND_FILE.PUT_LINE(FND_FILE.OUTPUT,'');
9538 FND_FILE.PUT_LINE(FND_FILE.OUTPUT,FND_MESSAGE.GET_STRING('OKL','OKL_AGN_RPT_CNTRCT_ERROR_TITLE'));
9539 FND_FILE.PUT_LINE(FND_FILE.OUTPUT,FND_MESSAGE.GET_STRING('OKL','OKL_AGN_RPT_CNT_ERR_UNDERLINE'));
9540 IF l_contract_error_tbl.COUNT > 0 THEN
9541 FOR x IN l_contract_error_tbl.FIRST..l_contract_error_tbl.LAST
9542 LOOP
9543 FND_FILE.PUT_LINE(FND_FILE.OUTPUT,l_contract_error_tbl(x));
9544 END LOOP;
9545 FND_FILE.PUT_LINE(FND_FILE.OUTPUT,'');
9546 FND_FILE.PUT_LINE(FND_FILE.OUTPUT,FND_MESSAGE.GET_STRING('OKL','OKL_AGN_RPT_ADD_INFO'));
9547 END IF;
9548
9549 END IF; --IF l_accrual_contracts_tbl.COUNT > 0 THEN
9550
9551 END IF; -- IF p_contract_number IS NULL THEN
9552
9553
9554 retcode := 0;
9555 l_return_status := OKL_API.G_RET_STS_SUCCESS;
9556
9557 EXCEPTION
9558 WHEN Okl_Api.G_EXCEPTION_ERROR THEN
9559 l_return_status := Okl_Api.G_RET_STS_ERROR;
9560
9561 -- print the error message in the log file and output files
9562 FND_FILE.PUT_LINE(FND_FILE.OUTPUT,'');
9563 FND_FILE.PUT_LINE(FND_FILE.OUTPUT,FND_MESSAGE.GET_STRING('OKL','OKL_AGN_RPT_PROGRAM_ERROR'));
9564 FND_FILE.PUT_LINE(FND_FILE.LOG,FND_MESSAGE.GET_STRING('OKL','OKL_AGN_RPT_PROGRAM_STATUS')
9565 ||' '||l_return_status);
9566 Okl_Accounting_Util.GET_ERROR_MESSAGE(l_outer_error_msg_tbl);
9567 IF (l_outer_error_msg_tbl.COUNT > 0) THEN
9568 FOR i IN l_outer_error_msg_tbl.FIRST..l_outer_error_msg_tbl.LAST
9569 LOOP
9570 FND_FILE.PUT_LINE(FND_FILE.LOG, l_outer_error_msg_tbl(i));
9571 END LOOP;
9572 END IF;
9573
9574 retcode := 2;
9575
9576 WHEN Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR THEN
9577 l_return_status := Okl_Api.G_RET_STS_UNEXP_ERROR;
9578
9579 -- print the error message in the log file
9580 FND_FILE.PUT_LINE(FND_FILE.OUTPUT,'');
9581 FND_FILE.PUT_LINE(FND_FILE.OUTPUT,FND_MESSAGE.GET_STRING('OKL','OKL_AGN_RPT_PROGRAM_ERROR'));
9582 FND_FILE.PUT_LINE(FND_FILE.LOG,FND_MESSAGE.GET_STRING('OKL','OKL_AGN_RPT_PROGRAM_STATUS')
9583 ||' '||l_return_status);
9584 Okl_Accounting_Util.GET_ERROR_MESSAGE(l_outer_error_msg_tbl);
9585 IF (l_outer_error_msg_tbl.COUNT > 0) THEN
9586 FOR i IN l_outer_error_msg_tbl.FIRST..l_outer_error_msg_tbl.LAST
9587 LOOP
9588 FND_FILE.PUT_LINE(FND_FILE.LOG, l_outer_error_msg_tbl(i));
9589 END LOOP;
9590 END IF;
9591
9592 retcode := 2;
9593
9594 WHEN OTHERS THEN
9595
9596 l_return_status := Okl_Api.G_RET_STS_UNEXP_ERROR;
9597
9598 -- print the error message in the log file
9599 FND_FILE.PUT_LINE(FND_FILE.OUTPUT,'');
9600 FND_FILE.PUT_LINE(FND_FILE.OUTPUT,FND_MESSAGE.GET_STRING('OKL','OKL_AGN_RPT_PROGRAM_ERROR'));
9601 FND_FILE.PUT_LINE(FND_FILE.LOG,FND_MESSAGE.GET_STRING('OKL','OKL_AGN_RPT_PROGRAM_STATUS')
9602 ||' '||l_return_status);
9603 Okl_Accounting_Util.GET_ERROR_MESSAGE(l_outer_error_msg_tbl);
9604 IF (l_outer_error_msg_tbl.COUNT > 0) THEN
9605 FOR i IN l_outer_error_msg_tbl.FIRST..l_outer_error_msg_tbl.LAST
9606 LOOP
9607 FND_FILE.PUT_LINE(FND_FILE.LOG, l_outer_error_msg_tbl(i));
9608 END LOOP;
9609 END IF;
9610
9611 errbuf := SQLERRM;
9612 retcode := 2;
9613
9614
9615 END GENERATE_ACCRUALS;
9616
9617
9618 PROCEDURE GENERATE_ACCRUALS_PARALLEL
9619 (errbuf OUT NOCOPY VARCHAR2
9620 ,retcode OUT NOCOPY NUMBER
9621 ,p_accrual_date IN VARCHAR2
9622 ,p_batch_name IN VARCHAR2
9623 ,p_worker_id IN VARCHAR2
9624 ,p_rev_rec_method IN VARCHAR2) IS
9625
9626 l_contract_id OKL_K_HEADERS_FULL_V.id%TYPE;
9627 l_contract_number OKL_K_HEADERS_FULL_V.contract_number%TYPE;
9628 l_accrual_status OKL_K_HEADERS_FULL_V.generate_accrual_yn%TYPE;
9629 l_override_status OKL_K_HEADERS_FULL_V.generate_accrual_override_yn%TYPE;
9630 l_start_date OKL_K_HEADERS_FULL_V.start_date%TYPE;
9631 l_sts_code OKL_K_HEADERS_FULL_V.sts_code%TYPE;
9632 l_product_id OKL_K_HEADERS_FULL_V.pdt_id%TYPE;
9633 l_deal_type OKL_K_HEADERS_FULL_V.deal_type%TYPE;
9634 l_try_id OKL_TRX_TYPES_V.id%TYPE;
9635 l_accrual_reversal_days OKL_SYS_ACCT_OPTS.accrual_reversal_days%TYPE;
9636 l_func_currency_code OKL_TRX_CONTRACTS.CURRENCY_CODE%TYPE;
9637 l_khr_currency_code OKL_TRX_CONTRACTS.CURRENCY_CODE%TYPE;
9638 l_currency_conv_type OKL_TRX_CONTRACTS.CURRENCY_CONVERSION_TYPE%TYPE;
9639 l_currency_conv_rate OKL_TRX_CONTRACTS.CURRENCY_CONVERSION_RATE%TYPE;
9640 l_currency_conv_date OKL_TRX_CONTRACTS.CURRENCY_CONVERSION_DATE%TYPE;
9641 l_sob_id OKL_SYS_ACCT_OPTS.set_of_books_id%TYPE;
9642 l_try_name OKL_TRX_TYPES_V.NAME%TYPE := 'Accrual';
9643 --Fixed Bug 5707866 SLA Uptake Project by nikshah, changed tsu_code to PROCESSED from ENTERED
9644 l_tsu_code_ent OKL_TRX_CONTRACTS.TSU_CODE%TYPE := 'PROCESSED';
9645 l_tcn_type OKL_TRX_CONTRACTS.TCN_TYPE%TYPE := 'ACL';
9646 l_reverse_date_to DATE;
9647 l_sob_name VARCHAR2(2000);
9648 l_sysdate DATE := SYSDATE;
9649 l_api_version CONSTANT NUMBER := 1.0;
9650 p_api_version CONSTANT NUMBER := 1.0;
9651 l_api_name CONSTANT VARCHAR2(30) := 'GENERATE_ACCRUALS_PARALLEL';
9652 l_init_msg_list VARCHAR2(2000) := OKL_API.G_FALSE;
9653 l_return_status VARCHAR2(1) := OKL_API.G_RET_STS_SUCCESS;
9654 l_msg_count NUMBER;
9655 l_msg_data VARCHAR2(2000);
9656 l_period_name VARCHAR2(2000);
9657 l_period_start_date DATE;
9658 l_period_end_date DATE;
9659 l_outer_error_msg_tbl Okl_Accounting_Util.Error_Message_Type;
9660 l_org_id NUMBER;
9661 l_org_name VARCHAR2(2000);
9662 l_contract_error_count NUMBER := 1;
9663 l_accrual_date DATE;
9664 l_rule_info_cat VARCHAR2(2000) := 'LAINTP';
9665 l_period_status VARCHAR2(1);
9666 l_counter NUMBER := 1;
9667 l_contract_counter NUMBER := 0;
9668 l_source_trx_type OKL_TRX_CONTRACTS.SOURCE_TRX_TYPE%TYPE;
9669 l_source_trx_id OKL_TRX_CONTRACTS.SOURCE_TRX_ID%TYPE;
9670 l_lower_limit NUMBER := 1;
9671 l_upper_limit NUMBER;
9672 l_process_records NUMBER := 30;
9673 l_total_records NUMBER;
9674 l_reqid FND_CONCURRENT_REQUESTS.request_id%TYPE;
9675 req_data VARCHAR2(10);
9676 i NUMBER;
9677
9678 -- Cursor to select contract for accrual processing
9679 CURSOR process_accruals_csr IS
9680 SELECT OBJECT_VALUE
9681 FROM OKL_PARALLEL_PROCESSES
9682 WHERE assigned_process = p_worker_id;
9683
9684
9685 CURSOR accrual_contracts_csr (p_khr_num VARCHAR2) IS
9686 SELECT chr.id
9687 ,chr.contract_number
9688 ,chr.start_date
9689 ,chr.sts_code
9690 ,khr.pdt_id
9691 ,khr.generate_accrual_yn
9692 ,khr.generate_accrual_override_yn
9693 ,khr.deal_type
9694 ,chr.currency_code
9695 ,khr.currency_conversion_type
9696 ,khr.currency_conversion_rate
9697 ,khr.currency_conversion_date
9698 FROM OKC_K_HEADERS_B chr, OKL_K_HEADERS khr
9699 WHERE chr.contract_number = p_khr_num
9700 AND chr.id = khr.id
9701 AND chr.scs_code = 'LEASE'
9702 AND chr.sts_code IN ('BOOKED','EVERGREEN')
9703 -- modified by zrehman for Bug#6788005 on 11-Feb-2008 start
9704 UNION
9705 SELECT chr.id
9706 ,chr.contract_number
9707 ,chr.start_date
9708 ,chr.sts_code
9709 ,khr.pdt_id
9710 ,khr.generate_accrual_yn
9711 ,khr.generate_accrual_override_yn
9712 ,khr.deal_type
9713 ,chr.currency_code
9714 ,khr.currency_conversion_type
9715 ,khr.currency_conversion_rate
9716 ,khr.currency_conversion_date
9717 FROM OKC_K_HEADERS_B chr, OKL_K_HEADERS khr
9718 WHERE chr.contract_number = p_khr_num
9719 AND chr.id = khr.id
9720 AND chr.scs_code = 'INVESTOR'
9721 AND chr.sts_code = 'ACTIVE'
9722 -- modified by zrehman for Bug#6788005 on 11-Feb-2008 end
9723 ;
9724
9725
9726 -- declare error placeholders
9727 TYPE contract_error_tbl_type IS TABLE OF okl_k_headers_full_v.CONTRACT_NUMBER%TYPE INDEX BY BINARY_INTEGER;
9728 -- Bug 3020763
9729 TYPE accrual_contracts_rec_type IS RECORD(
9730 contract_id OKL_K_HEADERS_FULL_V.ID%TYPE,
9731 contract_number OKL_K_HEADERS_FULL_V.CONTRACT_NUMBER%TYPE,
9732 start_date OKL_K_HEADERS_FULL_V.START_DATE%TYPE,
9733 sts_code OKL_K_HEADERS_FULL_V.STS_CODE%TYPE,
9734 product_id OKL_K_HEADERS_FULL_V.PDT_ID%TYPE,
9735 accrual_status OKL_K_HEADERS_FULL_V.GENERATE_ACCRUAL_YN%TYPE,
9736 override_status OKL_K_HEADERS_FULL_V.GENERATE_ACCRUAL_OVERRIDE_YN%TYPE,
9737 deal_type OKL_K_HEADERS_FULL_V.DEAL_TYPE%TYPE,
9738 khr_currency_code OKL_K_HEADERS_FULL_V.CURRENCY_CODE%TYPE,
9739 currency_conv_type OKL_K_HEADERS_FULL_V.CURRENCY_CONVERSION_TYPE%TYPE,
9740 currency_conv_rate OKL_K_HEADERS_FULL_V.CURRENCY_CONVERSION_RATE%TYPE,
9741 currency_conv_date OKL_K_HEADERS_FULL_V.CURRENCY_CONVERSION_DATE%TYPE);
9742
9743 TYPE accrual_contracts_tbl_type IS TABLE OF accrual_contracts_rec_type INDEX BY BINARY_INTEGER;
9744 TYPE req_id_tbl_type IS TABLE OF FND_CONCURRENT_REQUESTS.request_id%TYPE INDEX BY BINARY_INTEGER;
9745 TYPE contract_number_tbl_type IS TABLE OF OKC_K_HEADERS_B.contract_number%TYPE INDEX BY BINARY_INTEGER;
9746
9747 l_contract_num_tbl contract_number_tbl_type;
9748 l_contract_error_tbl contract_error_tbl_type;
9749 l_accrual_contracts_tbl accrual_contracts_tbl_type; -- Bug# 3020763
9750 l_reqid_tbl req_id_tbl_type;
9751 l_process_accrual_rec process_accrual_rec_type;
9752
9753 BEGIN
9754
9755 -- request is a child request
9756 IF p_accrual_date IS NULL THEN
9757 --set message
9758 Okl_Api.SET_MESSAGE(p_app_name => g_app_name,
9759 p_msg_name => 'OKL_AGN_DATE_ERROR');
9760 RAISE Okl_Api.G_EXCEPTION_ERROR;
9761 END IF;
9762 l_accrual_date := FND_DATE.CANONICAL_TO_DATE(p_accrual_date);
9763
9764 IF p_worker_id IS NULL THEN
9765 --set message
9766 Okl_Api.set_message(p_app_name => g_app_name,
9767 p_msg_name => 'OKL_AGN_WORKER_ID_ERROR');
9768 RAISE Okl_Api.G_EXCEPTION_ERROR;
9769 END IF;
9770
9771 IF p_rev_rec_method IS NULL THEN
9772 --set message
9773 Okl_Api.set_message(p_app_name => g_app_name,
9774 p_msg_name => 'OKL_AGN_REV_REC_ERROR');
9775 RAISE Okl_Api.G_EXCEPTION_ERROR;
9776 END IF;
9777
9778 -- get common info
9779 GET_COMMON_INFO (p_accrual_date => l_accrual_date,
9780 x_try_id => l_try_id,
9781 x_period_name => l_period_name,
9782 x_period_start_date => l_period_start_date,
9783 x_period_end_date => l_period_end_date,
9784 x_sob_id => l_sob_id,
9785 x_sob_name => l_sob_name,
9786 x_org_id => l_org_id,
9787 x_org_name => l_org_name,
9788 x_accrual_reversal_days => l_accrual_reversal_days,
9789 x_func_currency_code => l_func_currency_code,
9790 x_return_status => l_return_status
9791 );
9792
9793 IF (l_return_status <> Okl_Api.G_RET_STS_SUCCESS) THEN
9794 IF (l_return_status = Okl_Api.G_RET_STS_UNEXP_ERROR) THEN
9795 -- need to leave
9796 Okl_Api.set_message(p_app_name => g_app_name,
9797 p_msg_name => 'OKL_AGN_COM_INFO_ERROR');
9798 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
9799 ELSIF (l_return_Status = Okl_Api.G_RET_STS_ERROR) THEN
9800 Okl_Api.set_message(p_app_name => g_app_name,
9801 p_msg_name => 'OKL_AGN_COM_INFO_ERROR');
9802 RAISE OKL_API.G_EXCEPTION_ERROR;
9803 END IF;
9804 END IF;
9805
9806 -- Calculate the number of days (to_date) to reverse in case of non-accrual
9807 l_reverse_date_to := l_accrual_date - l_accrual_reversal_days;
9808
9809 -- Create Report Header
9810 REPORT_HEADER(l_sob_name
9811 ,l_org_name
9812 ,l_accrual_date
9813 ,p_batch_name
9814 ,l_func_currency_code
9815 ,l_return_status);
9816 IF (l_return_status <> Okl_Api.G_RET_STS_SUCCESS) THEN
9817 Okl_Api.set_message(p_app_name => g_app_name,
9818 p_msg_name => 'OKL_AGN_REPORT_ERROR');
9819 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
9820 END IF;
9821
9822 -- Open cursor to select contracts for accrual processing
9823 -- Bug 4602404.
9824 -- Fixing exit clause. Reducing LIMIT to 100 as recommended.
9825 OPEN process_accruals_csr;
9826 LOOP
9827 FETCH process_accruals_csr BULK COLLECT INTO l_contract_num_tbl LIMIT 100;
9828 EXIT WHEN l_contract_num_tbl.COUNT = 0;
9829
9830 -- Proceed only if data found
9831 IF l_contract_num_tbl.COUNT > 0 THEN
9832 -- initialize variables for next set of contracts
9833 IF l_accrual_contracts_tbl.COUNT > 0 THEN
9834 l_accrual_contracts_tbl.DELETE;
9835 END IF;
9836 l_counter := 1;
9837
9838 -- For each contract number get contract details
9839 FOR i IN l_contract_num_tbl.FIRST..l_contract_num_tbl.LAST
9840 LOOP
9841
9842 FOR l_accrual_contracts IN accrual_contracts_csr(l_contract_num_tbl(i))
9843 LOOP
9844 l_accrual_contracts_tbl(l_counter).contract_id := l_accrual_contracts.id;
9845 l_accrual_contracts_tbl(l_counter).contract_number := l_accrual_contracts.contract_number;
9846 l_accrual_contracts_tbl(l_counter).sts_code := l_accrual_contracts.sts_code;
9847 l_accrual_contracts_tbl(l_counter).product_id := l_accrual_contracts.pdt_id;
9848 l_accrual_contracts_tbl(l_counter).accrual_status := l_accrual_contracts.generate_accrual_yn;
9849 l_accrual_contracts_tbl(l_counter).override_status := l_accrual_contracts.generate_accrual_override_yn;
9850 l_accrual_contracts_tbl(l_counter).start_date := l_accrual_contracts.start_date;
9851 l_accrual_contracts_tbl(l_counter).deal_type := l_accrual_contracts.deal_type;
9852 l_accrual_contracts_tbl(l_counter).khr_currency_code := l_accrual_contracts.currency_code;
9853 l_accrual_contracts_tbl(l_counter).currency_conv_type := l_accrual_contracts.currency_conversion_type;
9854 l_accrual_contracts_tbl(l_counter).currency_conv_date := l_accrual_contracts.currency_conversion_date;
9855 l_accrual_contracts_tbl(l_counter).currency_conv_rate := l_accrual_contracts.currency_conversion_rate;
9856 l_counter := l_counter + 1;
9857 END LOOP; --FOR l_accrual_contracts IN accrual_contracts_csr
9858
9859 END LOOP;
9860
9861
9862 -- Call process accruals for ech contract
9863 IF l_accrual_contracts_tbl.COUNT > 0 THEN
9864
9865 FOR y IN l_accrual_contracts_tbl.FIRST..l_accrual_contracts_tbl.LAST
9866 LOOP
9867
9868 l_process_accrual_rec := NULL;
9869
9870 l_process_accrual_rec.contract_id := l_accrual_contracts_tbl(y).contract_id;
9871 l_process_accrual_rec.contract_number := l_accrual_contracts_tbl(y).contract_number;
9872 l_process_accrual_rec.sts_code := l_accrual_contracts_tbl(y).sts_code;
9873 l_process_accrual_rec.product_id := l_accrual_contracts_tbl(y).product_id;
9874 l_process_accrual_rec.accrual_status := l_accrual_contracts_tbl(y).accrual_status;
9875 l_process_accrual_rec.override_status := l_accrual_contracts_tbl(y).override_status;
9876 l_process_accrual_rec.start_date := l_accrual_contracts_tbl(y).start_date;
9877 l_process_accrual_rec.deal_type := l_accrual_contracts_tbl(y).deal_type;
9878 l_process_accrual_rec.khr_currency_code := l_accrual_contracts_tbl(y).khr_currency_code;
9879 l_process_accrual_rec.currency_conv_type := l_accrual_contracts_tbl(y).currency_conv_type;
9880 l_process_accrual_rec.currency_conv_date := l_accrual_contracts_tbl(y).currency_conv_date;
9881 l_process_accrual_rec.currency_conv_rate := l_accrual_contracts_tbl(y).currency_conv_rate;
9882
9883 l_process_accrual_rec.func_currency_code := l_func_currency_code;
9884 l_process_accrual_rec.try_id := l_try_id;
9885 l_process_accrual_rec.reverse_date_to := l_reverse_date_to;
9886 l_process_accrual_rec.batch_name := p_batch_name;
9887 l_process_accrual_rec.sob_id := l_sob_id;
9888 l_process_accrual_rec.accrual_date := l_accrual_date;
9889 l_process_accrual_rec.period_end_date := l_period_end_date;
9890 l_process_accrual_rec.period_start_date := l_period_start_date;
9891 l_process_accrual_rec.source_trx_id := l_source_trx_id;
9892 l_process_accrual_rec.source_trx_type := l_source_trx_type;
9893 l_process_accrual_rec.submission_mode := 'BATCH';
9894 l_process_accrual_rec.rev_rec_method := p_rev_rec_method;
9895
9896 l_contract_counter := l_contract_counter + 1;
9897 IF (l_contract_counter = g_commit_cycle) THEN
9898 COMMIT;
9899 l_contract_counter := 0;
9900 END IF;
9901
9902 PROCESS_ACCRUALS(
9903 p_api_version => l_api_version,
9904 p_init_msg_list => l_init_msg_list,
9905 x_return_status => l_return_status,
9906 x_msg_count => l_msg_count,
9907 x_msg_data => l_msg_data,
9908 p_process_accrual_rec => l_process_accrual_rec);
9909
9910 IF l_return_status <> OKL_API.G_RET_STS_SUCCESS THEN
9911 l_contract_error_tbl(l_contract_error_count) := l_process_accrual_rec.contract_number;
9912 l_contract_error_count := l_contract_error_count + 1;
9913 END IF;
9914
9915 END LOOP; -- FOR y IN l_accrual_contracts_tbl.FIRST
9916 END IF; --IF l_accrual_contracts_tbl.COUNT > 0 THEN
9917
9918 -- delete processed records from parallel process table
9919 FORALL i IN l_contract_num_tbl.FIRST..l_contract_num_tbl.LAST
9920 DELETE FROM OKL_PARALLEL_PROCESSES
9921 WHERE OBJECT_VALUE = l_contract_num_tbl(i);
9922
9923 l_contract_num_tbl.DELETE;
9924 END IF; --IF l_contract_num_tbl.COUNT > 0 THEN
9925
9926 EXIT WHEN process_accruals_csr%NOTFOUND;
9927 END LOOP;
9928 CLOSE process_accruals_csr;
9929
9930
9931 FND_FILE.PUT_LINE(FND_FILE.OUTPUT,'');
9932 FND_FILE.PUT_LINE(FND_FILE.OUTPUT,'');
9933 FND_FILE.PUT_LINE(FND_FILE.OUTPUT,'');
9934 FND_FILE.PUT_LINE(FND_FILE.OUTPUT,'');
9935 FND_FILE.PUT_LINE(FND_FILE.OUTPUT,FND_MESSAGE.GET_STRING('OKL','OKL_AGN_RPT_CNTRCT_ERROR_TITLE'));
9936 FND_FILE.PUT_LINE(FND_FILE.OUTPUT,FND_MESSAGE.GET_STRING('OKL','OKL_AGN_RPT_CNT_ERR_UNDERLINE'));
9937 IF l_contract_error_tbl.COUNT > 0 THEN
9938 FOR x IN l_contract_error_tbl.FIRST..l_contract_error_tbl.LAST
9939 LOOP
9940 FND_FILE.PUT_LINE(FND_FILE.OUTPUT,l_contract_error_tbl(x));
9941 END LOOP;
9942 FND_FILE.PUT_LINE(FND_FILE.OUTPUT,'');
9943 FND_FILE.PUT_LINE(FND_FILE.OUTPUT,FND_MESSAGE.GET_STRING('OKL','OKL_AGN_RPT_ADD_INFO'));
9944 END IF;
9945
9946 retcode := 0;
9947 l_return_status := OKL_API.G_RET_STS_SUCCESS;
9948
9949 EXCEPTION
9950 WHEN Okl_Api.G_EXCEPTION_ERROR THEN
9951 l_return_status := Okl_Api.G_RET_STS_ERROR;
9952
9953 -- print the error message in the log file and output files
9954 FND_FILE.PUT_LINE(FND_FILE.OUTPUT,'');
9955 FND_FILE.PUT_LINE(FND_FILE.OUTPUT,FND_MESSAGE.GET_STRING('OKL','OKL_AGN_RPT_PROGRAM_ERROR'));
9956 FND_FILE.PUT_LINE(FND_FILE.LOG,FND_MESSAGE.GET_STRING('OKL','OKL_AGN_RPT_PROGRAM_STATUS')
9957 ||' '||l_return_status);
9958 Okl_Accounting_Util.GET_ERROR_MESSAGE(l_outer_error_msg_tbl);
9959 IF (l_outer_error_msg_tbl.COUNT > 0) THEN
9960 FOR i IN l_outer_error_msg_tbl.FIRST..l_outer_error_msg_tbl.LAST
9961 LOOP
9962 FND_FILE.PUT_LINE(FND_FILE.LOG, l_outer_error_msg_tbl(i));
9963 END LOOP;
9964 END IF;
9965
9966 retcode := 2;
9967
9968 WHEN Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR THEN
9969 l_return_status := Okl_Api.G_RET_STS_UNEXP_ERROR;
9970
9971 -- print the error message in the log file
9972 FND_FILE.PUT_LINE(FND_FILE.OUTPUT,'');
9973 FND_FILE.PUT_LINE(FND_FILE.OUTPUT,FND_MESSAGE.GET_STRING('OKL','OKL_AGN_RPT_PROGRAM_ERROR'));
9974 FND_FILE.PUT_LINE(FND_FILE.LOG,FND_MESSAGE.GET_STRING('OKL','OKL_AGN_RPT_PROGRAM_STATUS')
9975 ||' '||l_return_status);
9976 Okl_Accounting_Util.GET_ERROR_MESSAGE(l_outer_error_msg_tbl);
9977 IF (l_outer_error_msg_tbl.COUNT > 0) THEN
9978 FOR i IN l_outer_error_msg_tbl.FIRST..l_outer_error_msg_tbl.LAST
9979 LOOP
9980 FND_FILE.PUT_LINE(FND_FILE.LOG, l_outer_error_msg_tbl(i));
9981 END LOOP;
9982 END IF;
9983
9984 retcode := 2;
9985
9986 WHEN OTHERS THEN
9987
9988 l_return_status := Okl_Api.G_RET_STS_UNEXP_ERROR;
9989
9990 -- print the error message in the log file
9991 FND_FILE.PUT_LINE(FND_FILE.OUTPUT,'');
9992 FND_FILE.PUT_LINE(FND_FILE.OUTPUT,FND_MESSAGE.GET_STRING('OKL','OKL_AGN_RPT_PROGRAM_ERROR'));
9993 FND_FILE.PUT_LINE(FND_FILE.LOG,FND_MESSAGE.GET_STRING('OKL','OKL_AGN_RPT_PROGRAM_STATUS')
9994 ||' '||l_return_status);
9995 Okl_Accounting_Util.GET_ERROR_MESSAGE(l_outer_error_msg_tbl);
9996 IF (l_outer_error_msg_tbl.COUNT > 0) THEN
9997 FOR i IN l_outer_error_msg_tbl.FIRST..l_outer_error_msg_tbl.LAST
9998 LOOP
9999 FND_FILE.PUT_LINE(FND_FILE.LOG, l_outer_error_msg_tbl(i));
10000 END LOOP;
10001 END IF;
10002
10003 errbuf := SQLERRM;
10004 retcode := 2;
10005
10006 END GENERATE_ACCRUALS_PARALLEL;
10007
10008
10009 PROCEDURE GENERATE_ACCRUALS (
10010 p_api_version IN NUMBER,
10011 p_init_msg_list IN VARCHAR2,
10012 x_return_status OUT NOCOPY VARCHAR2,
10013 x_msg_count OUT NOCOPY NUMBER,
10014 x_msg_data OUT NOCOPY VARCHAR2,
10015 p_accrual_rec IN adjust_accrual_rec_type) IS
10016
10017 -- declare local variables
10018 l_contract_id OKL_K_HEADERS_FULL_V.id%TYPE;
10019 l_contract_number OKL_K_HEADERS_FULL_V.contract_number%TYPE;
10020 l_accrual_status OKL_K_HEADERS_FULL_V.generate_accrual_yn%TYPE;
10021 l_override_status OKL_K_HEADERS_FULL_V.generate_accrual_override_yn%TYPE;
10022 l_start_date OKL_K_HEADERS_FULL_V.start_date%TYPE;
10023 l_sts_code OKL_K_HEADERS_FULL_V.sts_code%TYPE;
10024 l_product_id OKL_K_HEADERS_FULL_V.pdt_id%TYPE;
10025 l_deal_type OKL_K_HEADERS_FULL_V.deal_type%TYPE;
10026 l_try_id OKL_TRX_TYPES_V.id%TYPE;
10027 l_accrual_reversal_days OKL_SYS_ACCT_OPTS.accrual_reversal_days%TYPE;
10028 l_func_currency_code OKL_TRX_CONTRACTS.CURRENCY_CODE%TYPE;
10029 l_khr_currency_code OKL_TRX_CONTRACTS.CURRENCY_CODE%TYPE;
10030 l_currency_conv_type OKL_TRX_CONTRACTS.CURRENCY_CONVERSION_TYPE%TYPE;
10031 l_currency_conv_rate OKL_TRX_CONTRACTS.CURRENCY_CONVERSION_RATE%TYPE;
10032 l_currency_conv_date OKL_TRX_CONTRACTS.CURRENCY_CONVERSION_DATE%TYPE;
10033 l_sob_id OKL_SYS_ACCT_OPTS.set_of_books_id%TYPE;
10034 l_source_trx_type OKL_TRX_CONTRACTS.SOURCE_TRX_TYPE%TYPE;
10035 l_source_trx_id OKL_TRX_CONTRACTS.SOURCE_TRX_ID%TYPE;
10036 l_try_name OKL_TRX_TYPES_V.NAME%TYPE := 'Accrual';
10037 l_reverse_date_to DATE;
10038 l_sob_name VARCHAR2(2000);
10039 l_api_version CONSTANT NUMBER := 1.0;
10040 l_api_name CONSTANT VARCHAR2(30) := 'GENERATE_ACCRUALS';
10041 l_init_msg_list VARCHAR2(2000) := OKL_API.G_FALSE;
10042 l_return_status VARCHAR2(1) := OKL_API.G_RET_STS_SUCCESS;
10043 l_msg_count NUMBER;
10044 l_msg_data VARCHAR2(2000);
10045 l_period_name VARCHAR2(2000);
10046 l_period_start_date DATE;
10047 l_period_end_date DATE;
10048 l_org_id NUMBER;
10049 l_org_name VARCHAR2(2000);
10050 l_period_status VARCHAR2(1);
10051 l_accrual_date DATE;
10052 l_process_accrual_rec process_accrual_rec_type;
10053 l_rev_rec_method VARCHAR2(2000);
10054
10055 --dkagrawa changed cursor to use view OKL_PROD_QLTY_VAL_UV than okl_product_parameters_v
10056 CURSOR accrual_contract_csr (p_khr_id NUMBER) IS
10057 SELECT chr.contract_number
10058 ,chr.start_date
10059 ,chr.sts_code
10060 ,khr.pdt_id
10061 ,khr.generate_accrual_yn
10062 ,khr.generate_accrual_override_yn
10063 ,khr.deal_type
10064 ,chr.currency_code
10065 ,khr.currency_conversion_type
10066 ,khr.currency_conversion_rate
10067 ,khr.currency_conversion_date
10068 ,pdt.quality_val revenue_recognition_method
10069 FROM OKC_K_HEADERS_B chr,
10070 OKL_K_HEADERS khr,
10071 OKL_PROD_QLTY_VAL_UV pdt
10072 WHERE chr.id = p_khr_id
10073 AND chr.id = khr.id
10074 AND chr.scs_code = 'LEASE'
10075 AND chr.sts_code IN ('BOOKED','EVERGREEN')
10076 AND khr.pdt_id = pdt.pdt_id
10077 AND pdt.quality_name = 'REVENUE_RECOGNITION_METHOD'
10078 -- modified by zrehman for Bug#6788005 on 04-Feb-2008 start
10079 UNION
10080 SELECT chr.contract_number
10081 ,chr.start_date
10082 ,chr.sts_code
10083 ,khr.pdt_id
10084 ,khr.generate_accrual_yn
10085 ,khr.generate_accrual_override_yn
10086 ,khr.deal_type
10087 ,chr.currency_code
10088 ,khr.currency_conversion_type
10089 ,khr.currency_conversion_rate
10090 ,khr.currency_conversion_date
10091 ,'STREAMS' revenue_recognition_method
10092 FROM OKC_K_HEADERS_B chr,
10093 OKL_K_HEADERS khr
10094 WHERE chr.id = p_khr_id
10095 AND chr.id = khr.id
10096 AND chr.scs_code = 'INVESTOR'
10097 AND chr.sts_code = 'ACTIVE'
10098 -- modified by zrehman for Bug#6788005 on 04-Feb-2008 end
10099 ;
10100
10101
10102 l_accrual_contracts accrual_contract_csr%ROWTYPE;
10103
10104 BEGIN
10105
10106 -- Set save point
10107 l_return_status := Okl_Api.START_ACTIVITY(l_api_name
10108 ,G_PKG_NAME
10109 ,p_init_msg_list
10110 ,l_api_version
10111 ,p_api_version
10112 ,'_PVT'
10113 ,x_return_status);
10114
10115 IF (l_return_status = Okl_Api.G_RET_STS_UNEXP_ERROR) THEN
10116 RAISE Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR;
10117 ELSIF (l_return_Status = Okl_Api.G_RET_STS_ERROR) THEN
10118 RAISE Okl_Api.G_EXCEPTION_ERROR;
10119 END IF;
10120
10121 -- validate input parameters
10122 IF (p_accrual_rec.contract_id IS NULL) OR (p_accrual_rec.contract_id = OKL_API.G_MISS_NUM) THEN
10123 Okl_Api.set_message(p_app_name => g_app_name,
10124 p_msg_name => 'OKL_AGN_ACN_KHR_ID_ERROR');
10125 RAISE Okl_Api.G_EXCEPTION_ERROR;
10126 END IF;
10127 l_contract_id := p_accrual_rec.contract_id;
10128
10129 IF (p_accrual_rec.accrual_date IS NULL) OR (p_accrual_rec.accrual_date = Okl_Api.G_MISS_DATE) THEN
10130 Okl_Api.SET_MESSAGE(p_app_name => g_app_name,
10131 p_msg_name => 'OKL_AGN_DATE_ERROR');
10132 RAISE Okl_Api.G_EXCEPTION_ERROR;
10133 END IF;
10134 l_accrual_date := p_accrual_rec.accrual_date;
10135
10136 IF (p_accrual_rec.source_trx_id IS NULL) OR (p_accrual_rec.source_trx_id = Okl_Api.G_MISS_NUM) THEN
10137 Okl_Api.SET_MESSAGE(p_app_name => g_app_name,
10138 p_msg_name => 'OKL_AGN_SRC_TRX_ID_ERROR');
10139 RAISE Okl_Api.G_EXCEPTION_ERROR;
10140 END IF;
10141 l_source_trx_id := p_accrual_rec.source_trx_id;
10142
10143 IF (p_accrual_rec.source_trx_type IS NULL) OR (p_accrual_rec.source_trx_type = Okl_Api.G_MISS_CHAR) THEN
10144 Okl_Api.SET_MESSAGE(p_app_name => g_app_name,
10145 p_msg_name => 'OKL_AGN_SRC_TRX_TYPE_ERROR');
10146 RAISE Okl_Api.G_EXCEPTION_ERROR;
10147 END IF;
10148 l_source_trx_type := p_accrual_rec.source_trx_type;
10149
10150 -- get common info
10151 GET_COMMON_INFO (p_accrual_date => l_accrual_date,
10152 x_try_id => l_try_id,
10153 x_period_name => l_period_name,
10154 x_period_start_date => l_period_start_date,
10155 x_period_end_date => l_period_end_date,
10156 x_sob_id => l_sob_id,
10157 x_sob_name => l_sob_name,
10158 x_org_id => l_org_id,
10159 x_org_name => l_org_name,
10160 x_accrual_reversal_days => l_accrual_reversal_days,
10161 x_func_currency_code => l_func_currency_code,
10162 x_return_status => l_return_status
10163 );
10164 WRITE_TO_LOG('The parameters returned after the GET_COMMON_INFO call');
10165 WRITE_TO_LOG('======================================================');
10166 WRITE_TO_LOG('Return Status :'||l_return_status);
10167 WRITE_TO_LOG('Transaction Id :'||l_try_id);
10168 WRITE_TO_LOG('Period Name :'||l_period_name);
10169 WRITE_TO_LOG('Period Start Date :'||l_period_start_date);
10170 WRITE_TO_LOG('Period End Date :'||l_period_end_date);
10171 WRITE_TO_LOG('Set Of Books Id :'||l_sob_id);
10172 WRITE_TO_LOG('Set Of Books Name :'||l_sob_name);
10173 WRITE_TO_LOG('Org Id :'||l_org_id);
10174 WRITE_TO_LOG('Org Name :'||l_org_name);
10175 WRITE_TO_LOG('Accrual Rev Days :'||l_accrual_reversal_days);
10176 WRITE_TO_LOG('Func Currency Code:'||l_func_currency_code);
10177 IF (l_return_status <> Okl_Api.G_RET_STS_SUCCESS) THEN
10178 IF (l_return_status = Okl_Api.G_RET_STS_UNEXP_ERROR) THEN
10179 -- need to leave
10180 Okl_Api.set_message(p_app_name => g_app_name,
10181 p_msg_name => 'OKL_AGN_COM_INFO_ERROR');
10182 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
10183 ELSIF (l_return_Status = Okl_Api.G_RET_STS_ERROR) THEN
10184 Okl_Api.set_message(p_app_name => g_app_name,
10185 p_msg_name => 'OKL_AGN_COM_INFO_ERROR');
10186 RAISE OKL_API.G_EXCEPTION_ERROR;
10187 END IF;
10188 END IF;
10189
10190 -- Calculate the number of days (to_date) to reverse in case of non-accrual
10191 l_reverse_date_to := l_accrual_date - l_accrual_reversal_days;
10192 IF l_reverse_date_to IS NULL THEN
10193 OKL_API.set_message(G_APP_NAME, G_INVALID_VALUE,G_COL_NAME_TOKEN,'REVERSE_DATE_TO');
10194 RAISE OKL_API.G_EXCEPTION_ERROR;
10195 END IF;
10196
10197 FOR l_accrual_contracts IN accrual_contract_csr (l_contract_id)
10198 LOOP
10199 l_contract_number := l_accrual_contracts.contract_number;
10200 l_sts_code := l_accrual_contracts.sts_code;
10201 l_product_id := l_accrual_contracts.pdt_id;
10202 l_accrual_status := l_accrual_contracts.generate_accrual_yn;
10203 l_override_status := l_accrual_contracts.generate_accrual_override_yn;
10204 l_start_date := l_accrual_contracts.start_date;
10205 l_deal_type := l_accrual_contracts.deal_type;
10206 l_khr_currency_code := l_accrual_contracts.currency_code;
10207 l_currency_conv_type := l_accrual_contracts.currency_conversion_type;
10208 l_currency_conv_date := l_accrual_contracts.currency_conversion_date;
10209 l_currency_conv_rate := l_accrual_contracts.currency_conversion_rate;
10210 l_rev_rec_method := l_accrual_contracts.revenue_recognition_method;
10211 END LOOP;
10212
10213 IF l_contract_number IS NULL THEN
10214 OKL_API.set_message(G_APP_NAME, G_INVALID_VALUE,G_COL_NAME_TOKEN,'CONTRACT_NUMBER');
10215 RAISE OKL_API.G_EXCEPTION_ERROR;
10216 END IF;
10217
10218 IF l_sts_code IS NULL THEN
10219 OKL_API.set_message(G_APP_NAME, G_INVALID_VALUE,G_COL_NAME_TOKEN,'STS_CODE');
10220 RAISE OKL_API.G_EXCEPTION_ERROR;
10221 END IF;
10222
10223 IF l_sts_code NOT IN ('BOOKED', 'EVERGREEN', 'ACTIVE') THEN
10224 -- store SQL error message on message stack for caller
10225 okl_api.set_message(p_app_name => G_APP_NAME,
10226 p_msg_name => 'OKL_AGN_STS_CODE_ERROR',
10227 p_token1 => g_contract_number_token,
10228 p_token1_value => l_contract_number);
10229 RAISE OKL_API.G_EXCEPTION_ERROR;
10230 END IF;
10231
10232 IF l_product_id IS NULL THEN
10233 OKL_API.set_message(G_APP_NAME, G_INVALID_VALUE,G_COL_NAME_TOKEN,'PRODUCT_ID');
10234 RAISE OKL_API.G_EXCEPTION_ERROR;
10235 END IF;
10236
10237 IF l_accrual_status IS NULL THEN
10238 OKL_API.set_message(G_APP_NAME, G_INVALID_VALUE,G_COL_NAME_TOKEN,'GENERATE_ACCRUAL_YN');
10239 RAISE OKL_API.G_EXCEPTION_ERROR;
10240 END IF;
10241
10242 IF l_override_status IS NULL THEN
10243 OKL_API.set_message(G_APP_NAME, G_INVALID_VALUE,G_COL_NAME_TOKEN,'GENERATE_ACCRUAL_OVERRIDE_YN');
10244 RAISE OKL_API.G_EXCEPTION_ERROR;
10245 END IF;
10246
10247 IF l_start_date IS NULL THEN
10248 OKL_API.set_message(G_APP_NAME, G_INVALID_VALUE,G_COL_NAME_TOKEN,'START_DATE');
10249 RAISE OKL_API.G_EXCEPTION_ERROR;
10250 END IF;
10251 -- modified by zrehman for Bug#6788005 on 11-Feb-2008 start
10252 IF l_deal_type IS NULL AND l_sts_code NOT IN ('ACTIVE') THEN
10253 -- modified by zrehman for Bug#6788005 on 11-Feb-2008 end
10254 OKL_API.set_message(G_APP_NAME, G_INVALID_VALUE,G_COL_NAME_TOKEN,'DEAL_TYPE');
10255 RAISE OKL_API.G_EXCEPTION_ERROR;
10256 END IF;
10257
10258 IF l_khr_currency_code IS NULL THEN
10259 OKL_API.set_message(G_APP_NAME, G_INVALID_VALUE,G_COL_NAME_TOKEN,'CURRENCY_CODE');
10260 RAISE OKL_API.G_EXCEPTION_ERROR;
10261 END IF;
10262
10263 IF l_rev_rec_method IS NULL THEN
10264 OKL_API.set_message(G_APP_NAME, G_INVALID_VALUE,G_COL_NAME_TOKEN,'REVENUE_RECOGNITION_METHOD');
10265 RAISE OKL_API.G_EXCEPTION_ERROR;
10266 END IF;
10267
10268
10269 l_process_accrual_rec := NULL;
10270
10271 l_process_accrual_rec.contract_id := l_contract_id;
10272 l_process_accrual_rec.contract_number := l_contract_number;
10273 l_process_accrual_rec.sts_code := l_sts_code;
10274 l_process_accrual_rec.product_id := l_product_id;
10275 l_process_accrual_rec.accrual_status := l_accrual_status;
10276 l_process_accrual_rec.override_status := l_override_status;
10277 l_process_accrual_rec.start_date := l_start_date;
10278 l_process_accrual_rec.deal_type := l_deal_type;
10279 l_process_accrual_rec.khr_currency_code := l_khr_currency_code;
10280 l_process_accrual_rec.currency_conv_type := l_currency_conv_type;
10281 l_process_accrual_rec.currency_conv_date := l_currency_conv_date;
10282 l_process_accrual_rec.currency_conv_rate := l_currency_conv_rate;
10283
10284 l_process_accrual_rec.func_currency_code := l_func_currency_code;
10285 l_process_accrual_rec.try_id := l_try_id;
10286 l_process_accrual_rec.reverse_date_to := l_reverse_date_to;
10287 l_process_accrual_rec.batch_name := p_accrual_rec.description;
10288 l_process_accrual_rec.sob_id := l_sob_id;
10289 l_process_accrual_rec.accrual_date := l_accrual_date;
10290 l_process_accrual_rec.period_end_date := l_period_end_date;
10291 l_process_accrual_rec.period_start_date := l_period_start_date;
10292 l_process_accrual_rec.source_trx_id := l_source_trx_id;
10293 l_process_accrual_rec.source_trx_type := l_source_trx_type;
10294 l_process_accrual_rec.submission_mode := 'ONLINE';
10295 --l_process_accrual_rec.submission_mode := 'BATCH';
10296 l_process_accrual_rec.rev_rec_method := l_rev_rec_method;
10297
10298 PROCESS_ACCRUALS(
10299 p_api_version => l_api_version,
10300 p_init_msg_list => l_init_msg_list,
10301 x_return_status => l_return_status,
10302 x_msg_count => l_msg_count,
10303 x_msg_data => l_msg_data,
10304 p_process_accrual_rec => l_process_accrual_rec
10305 );
10306
10307 IF (l_return_status <> Okl_Api.G_RET_STS_SUCCESS) THEN
10308 IF (l_return_status = Okl_Api.G_RET_STS_UNEXP_ERROR) THEN
10309 -- need to leave
10310 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
10311 ELSIF (l_return_Status = Okl_Api.G_RET_STS_ERROR) THEN
10312 RAISE OKL_API.G_EXCEPTION_ERROR;
10313 END IF;
10314 END IF;
10315
10316 x_return_status := l_return_status;
10317
10318 EXCEPTION
10319 WHEN Okl_Api.G_EXCEPTION_ERROR THEN
10320 x_return_status := Okl_Api.HANDLE_EXCEPTIONS(l_api_name
10321 ,g_pkg_name
10322 ,'OKL_API.G_RET_STS_ERROR'
10323 ,x_msg_count
10324 ,x_msg_data
10325 ,'_PVT');
10326
10327 WHEN Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR THEN
10328 x_return_status := Okl_Api.HANDLE_EXCEPTIONS(l_api_name
10329 ,g_pkg_name
10330 ,'OKL_API.G_RET_STS_UNEXP_ERROR'
10331 ,x_msg_count
10332 ,x_msg_data
10333 ,'_PVT');
10334
10335 WHEN OTHERS THEN
10336
10337 x_return_status :=Okl_Api.HANDLE_EXCEPTIONS
10338 (l_api_name,
10339 G_PKG_NAME,
10340 'OTHERS',
10341 x_msg_count,
10342 x_msg_data,
10343 '_PVT');
10344 END GENERATE_ACCRUALS;
10345
10346 -- Bug 4884618
10347 -- Caching system option value
10348 BEGIN
10349
10350 FOR x IN sty_select_basis_csr
10351 LOOP
10352 l_sty_select_basis := x.validate_khr_start_date;
10353 END LOOP;
10354
10355 EXCEPTION
10356 WHEN OTHERS THEN
10357 -- store SQL error message on message stack for caller
10358 Okl_Api.SET_MESSAGE(p_app_name => g_app_name,
10359 p_msg_name => g_unexpected_error,
10360 p_token1 => g_sqlcode_token,
10361 p_token1_value => SQLCODE,
10362 p_token2 => g_sqlerrm_token,
10363 p_token2_value => SQLERRM);
10364
10365 END OKL_GENERATE_ACCRUALS_PVT;