DBA Data[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;