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