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