DBA Data[Home] [Help]

PACKAGE BODY: APPS.OKL_MULTI_GAAP_PVT

Source


1 PACKAGE BODY OKL_MULTI_GAAP_PVT AS
2 /* $Header: OKLRGAPB.pls 120.12.12010000.3 2008/11/20 07:32:48 racheruv ship $ */
3 
4   -- Function to return the asset category to be used in the report
5   FUNCTION GET_CATEGORY_NAME(p_category_id IN NUMBER) RETURN VARCHAR2 IS
6 
7     l_category_name VARCHAR2(2000);
8 
9 	-- cursor to get get category name
10     CURSOR category_name_csr(p_category_id NUMBER) IS
11     SELECT CONCATENATED_SEGMENTS
12 	FROM FA_CATEGORIES_B_KFV
13 	WHERE category_id = p_category_id;
14 
15   BEGIN
16     OPEN category_name_csr(p_category_id);
17 	FETCH category_name_csr INTO l_category_name;
18 	IF category_name_csr%NOTFOUND THEN
19       -- store SQL error message on message stack for caller
20       OKL_API.set_message(p_app_name     => G_APP_NAME,
21                           p_msg_name     => G_NO_MATCHING_RECORD,
22                           p_token1       => G_COL_NAME_TOKEN,
23                           p_token1_value => 'p_category_id');
24       RAISE OKL_API.G_EXCEPTION_ERROR;
25     END IF;
26     CLOSE category_name_csr;
27 
28 	RETURN l_category_name;
29 
30   EXCEPTION
31     WHEN OKL_API.G_EXCEPTION_ERROR THEN
32       IF category_name_csr%ISOPEN THEN
33         CLOSE category_name_csr;
34       END IF;
35 
36       RETURN NULL;
37 
38     WHEN OTHERS THEN
39       IF category_name_csr%ISOPEN THEN
40         CLOSE category_name_csr;
41       END IF;
42 
43       RETURN NULL;
44 
45   END GET_CATEGORY_NAME;
46 
47   -- Function to check whether contract is a multi gaap contract.
48   FUNCTION CHECK_MULTI_GAAP(p_khr_id IN NUMBER) RETURN VARCHAR2 IS
49 
50     -- cursor to check whether contract is a multi gaap contract.
51     CURSOR check_multi_gaap(p_ctr_id NUMBER) IS
52     SELECT 'Y' FROM OKL_K_HEADERS khr
53     WHERE khr.id = p_ctr_id
54     AND khr.multi_gaap_yn = 'Y';
55 
56     l_flag_value    VARCHAR2(1) :='N';
57 
58   BEGIN
59 
60 	OPEN check_multi_gaap(p_khr_id);
61     FETCH check_multi_gaap INTO l_flag_value;
62 	IF check_multi_gaap%NOTFOUND THEN
63       -- if value in column is NULl return N
64       l_flag_value := 'N';
65     END IF;
66 	CLOSE check_multi_gaap;
67 
68 	RETURN l_flag_value;
69 
70   EXCEPTION
71 
72     WHEN OTHERS THEN
73       IF check_multi_gaap%ISOPEN THEN
74         CLOSE check_multi_gaap;
75       END IF;
76       OKL_API.SET_MESSAGE( p_app_name     => G_APP_NAME
77                           ,p_msg_name     => G_UNEXPECTED_ERROR
78                           ,p_token1       => G_SQLCODE_TOKEN
79                           ,p_token1_value => SQLCODE
80                           ,p_token2       => G_SQLERRM_TOKEN
81                           ,p_token2_value => SQLERRM);
82 
83       RETURN NULL;
84 
85   END CHECK_MULTI_GAAP;
86 
87   PROCEDURE GET_TEMPLATE_LINES(p_pdt_name IN VARCHAR2
88                               ,p_sty_name IN VARCHAR2
89 					          ,p_accrual_activity IN VARCHAR2
90 							  ,x_ae_lines_tbl OUT NOCOPY ae_lines_tbl_type) IS
91  --start changed by abhsaxen for Bug#617448
92     CURSOR get_ae_lines(p_product VARCHAR2, p_stream_type VARCHAR2, p_memo_yn VARCHAR2) IS
93 	SELECT code_combination_id,
94 	       ae_line_type,
95 		   crd_code
96 	FROM OKL_AE_TMPT_LNES
97 	WHERE avl_id IN (SELECT avl.id
98 	                 FROM okl_ae_templates avl,okl_trx_types_v try,okl_strm_type_v sty
99 					 WHERE aes_id IN
100 	                      (SELECT avl.aes_id FROM okl_products_v WHERE avl.name = p_product)
101                      AND try.name = 'Accrual'
102                      AND sty.name= p_stream_type
103                      AND avl.sty_id = sty.id
104                      AND avl.try_id = try.id
105 		     AND avl.memo_yn= p_memo_yn
106 		     AND avl.prior_year_yn is NULL
107                      AND avl.factoring_synd_flag IS NULL);
108 --end changed by abhsaxen for Bug#6174484
109 /*    SELECT code_combination_id,
110 	       ae_line_type,
111 		   crd_code
112 	FROM OKL_AE_TMPT_LNES
113 	WHERE avl_id IN (SELECT id
114 	                 FROM okl_Ae_templates_uv
115 					 WHERE aes_id IN
116 	                      (SELECT aes_id FROM okl_products_v WHERE name = p_product)
117                      AND try_name = 'Accrual'
118                      AND sty_name = p_stream_type
119 					 AND memo_yn = p_memo_yn
120 					 AND prior_year_yn is NULL
121                      AND FACTORING_SYND_FLAG IS NULL);
122 */					 -- commenting for later use in securitization
123 					 --and NVL(FACTORING_SYND_FLAG,'xxx') = NVL(p_fac_synd,'xxx'));
124 
125     l_memo_yn VARCHAR2(1);
126     l_pdt_name VARCHAR2(2000) := p_pdt_name;
127     l_sty_name VARCHAR2(2000) := p_sty_name;
128     x get_ae_lines%ROWTYPE;
129 
130   BEGIN
131     IF p_accrual_activity = 'ACCRUAL' THEN
132 	  l_memo_yn := 'N';
133 	ELSIF p_accrual_activity = 'NON-ACCRUAL' THEN
134 	  l_memo_yn := 'Y';
135 	END IF;
136 
137     OPEN get_ae_lines(l_pdt_name,l_sty_name,l_memo_yn);
138 	LOOP
139 	  FETCH get_ae_lines INTO x;
140 	  IF get_ae_lines%FOUND THEN
141       x_ae_lines_tbl(get_ae_lines%ROWCOUNT).ccid := x.code_combination_id;
142       x_ae_lines_tbl(get_ae_lines%ROWCOUNT).line_type := x.ae_line_type;
143       x_ae_lines_tbl(get_ae_lines%ROWCOUNT).crd_code := x.crd_code;
144 	  END IF;
145 	  EXIT WHEN get_ae_lines%NOTFOUND;
146     END LOOP;
147 	CLOSE get_ae_lines;
148 
149   EXCEPTION
150     WHEN OTHERS THEN
151       IF get_ae_lines%ISOPEN THEN
152         CLOSE get_ae_lines;
153       END IF;
154 
155       OKL_API.SET_MESSAGE( p_app_name     => G_APP_NAME
156                           ,p_msg_name     => G_UNEXPECTED_ERROR
157                           ,p_token1       => G_SQLCODE_TOKEN
158                           ,p_token1_value => SQLCODE
159                           ,p_token2       => G_SQLERRM_TOKEN
160                           ,p_token2_value => SQLERRM);
161 
162 
163 
164   END GET_TEMPLATE_LINES;
165 
166   -- Function to call the MULTI GAAP Procedure
167   FUNCTION SUBMIT_MULTI_GAAP(
168     x_return_status OUT NOCOPY VARCHAR2,
169     x_msg_count OUT NOCOPY NUMBER,
170     x_msg_data OUT NOCOPY VARCHAR2,
171     p_api_version IN NUMBER,
172     p_date_from IN DATE,
173     p_date_to IN DATE,
174     p_batch_name IN VARCHAR2 ) RETURN NUMBER IS
175 
176     x_request_id            NUMBER;
177     l_return_status         VARCHAR2(1) := Okl_Api.G_RET_STS_SUCCESS;
178     l_msg_count             NUMBER;
179     l_msg_data              VARCHAR2(2000);
180     l_api_name              VARCHAR2(2000) := 'SUBMIT_MULTI_GAAP';
181     l_api_version           CONSTANT NUMBER := 1.0;
182 	l_init_msg_list         VARCHAR2(20) DEFAULT Okl_Api.G_FALSE;
183     l_date_from             VARCHAR2(2000);
184     l_date_to               VARCHAR2(2000);
185   BEGIN
186     -- Set save point
187     l_return_status := Okl_Api.START_ACTIVITY(l_api_name
188                                                ,G_PKG_NAME
189                                                ,l_init_msg_list
190                                                ,l_api_version
191                                                ,p_api_version
192                                                ,'_PVT'
193                                                ,l_return_status);
194     IF (l_return_status = Okl_Api.G_RET_STS_UNEXP_ERROR) THEN
195       RAISE Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR;
196     ELSIF (l_return_Status = Okl_Api.G_RET_STS_ERROR) THEN
197       RAISE Okl_Api.G_EXCEPTION_ERROR;
198     END IF;
199 
200     -- validate period from date
201     IF (p_date_from IS NULL OR p_date_from = Okl_Api.G_MISS_DATE) THEN
202        Okl_Api.SET_MESSAGE(p_app_name     => g_app_name,
203                            p_msg_name     => 'OKL_MGP_PERIOD_FROM_ERROR');
204        RAISE Okl_Api.G_EXCEPTION_ERROR;
205     ELSE
206       l_date_from := FND_DATE.DATE_TO_CANONICAL(p_date_from);
207     END IF;
208 
209     -- validate period to date
210     IF (p_date_to IS NULL OR p_date_from = Okl_Api.G_MISS_DATE) THEN
211        Okl_Api.SET_MESSAGE(p_app_name     => g_app_name,
212                            p_msg_name     => 'OKL_MGP_PERIOD_TO_ERROR');
213        RAISE Okl_Api.G_EXCEPTION_ERROR;
214     ELSE
215       l_date_to := FND_DATE.DATE_TO_CANONICAL(p_date_to);
216     END IF;
217 
218     -- Submit Concurrent Program Request
219     FND_REQUEST.set_org_id(mo_global.get_current_org_id); --MOAC- Concurrent request
220     x_request_id := FND_REQUEST.SUBMIT_REQUEST(application => 'OKL',
221                                                program => 'OKLGAPCALC',
222                                                argument1 => l_date_from,
223                                                argument2 => l_date_to,
224                                                argument3 => p_batch_name);
225 
226     IF x_request_id = 0 THEN
227     -- Handle submission error
228     -- Raise Error if the request has not been submitted successfully.
229       Okl_Api.SET_MESSAGE(G_APP_NAME, 'OKL_ERROR_SUB_CONC_PROG', 'CONC_PROG', 'Multi GAAP Adjustment Support');
230       RAISE Okl_Api.G_EXCEPTION_ERROR;
231     ELSE
232      --set return status
233       x_return_status := l_return_status;
234       RETURN x_request_id;
235     END IF;
236 
237   EXCEPTION
238     WHEN Okl_Api.G_EXCEPTION_ERROR THEN
239       x_return_status := Okl_Api.HANDLE_EXCEPTIONS(l_api_name
240                                  ,g_pkg_name
241                                  ,'OKL_API.G_RET_STS_ERROR'
242                                  ,x_msg_count
243                                  ,x_msg_data
244                                  ,'_PVT');
245       RETURN x_request_id;
246     WHEN Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR THEN
247       x_return_status := Okl_Api.HANDLE_EXCEPTIONS(l_api_name
248                                  ,g_pkg_name
249                                  ,'OKL_API.G_RET_STS_UNEXP_ERROR'
250                                  ,x_msg_count
251                                  ,x_msg_data
252                                  ,'_PVT');
253       RETURN x_request_id;
254     WHEN OTHERS THEN
255       x_return_status :=Okl_Api.HANDLE_EXCEPTIONS
256                                (l_api_name,
257                                 G_PKG_NAME,
258                                 'OTHERS',
259                                 x_msg_count,
260                                 x_msg_data,
261                                 '_PVT');
262       RETURN x_request_id;
263   END SUBMIT_MULTI_GAAP;
264 
265 
266   PROCEDURE MULTI_GAAP_SUPPORT(errbuf OUT NOCOPY VARCHAR2
267                               ,retcode OUT NOCOPY NUMBER
268                               ,p_period_from IN VARCHAR2
269                               ,p_period_to IN VARCHAR2
270                               ,p_batch_name IN VARCHAR2) IS
271 
272     -- declare local variables
273 	l_contract_id		    OKL_K_HEADERS_FULL_V.id%TYPE;
274 	l_contract_number       OKL_K_HEADERS_FULL_V.contract_number%TYPE;
275 	l_product_id            OKL_K_HEADERS_FULL_V.pdt_id%TYPE;
276     l_product_name          OKL_PRODUCTS_V.name%TYPE;
277 	l_rep_product_id        OKL_PRODUCTS_V.reporting_pdt_id%TYPE;
278     l_rep_product_name      OKL_PRODUCTS_V.name%TYPE;
279 	l_deal_type             OKL_K_HEADERS.DEAL_TYPE%TYPE;
280     l_rep_deal_type         OKL_K_HEADERS_FULL_V.deal_type%TYPE;
281 	l_currency_code         OKL_TRX_CONTRACTS.currency_code%TYPE;
282 	l_sob_id                OKL_SYS_ACCT_OPTS.set_of_books_id%TYPE;
283     l_book_type_code        OKL_TXD_ASSETS_V.tax_book%TYPE;
284     l_contract_currency     OKC_K_HEADERS_B.currency_code%TYPE;
285 	l_api_name              CONSTANT VARCHAR2(2000) := 'MULTI_GAAP_SUPPORT';
286 	l_api_version           CONSTANT NUMBER := 1.0;
287 	p_api_version           CONSTANT NUMBER := 1.0;
288     l_sob_name              VARCHAR2(2000);
289     l_cr_dr_flag            VARCHAR2(2000);
290     l_concat_desc           VARCHAR2(2000);
291     l_fac_synd_flag         VARCHAR2(2000);
292 	l_init_msg_list         VARCHAR2(2000) := OKL_API.G_FALSE;
293 	l_msg_data              VARCHAR2(2000);
294     l_org_name              VARCHAR2(2000);
295 	l_return_status         VARCHAR2(1) := OKL_API.G_RET_STS_SUCCESS;
296 	l_msg_count             NUMBER;
297     l_org_id                NUMBER;
298     l_contract_error_count  NUMBER := 1;
299 	l_count                 NUMBER := 1;
300 	l_count2                NUMBER := 1;
301 	l_count3                NUMBER := 1;
302 	l_sysdate               DATE := SYSDATE;
303 	l_period_from           DATE := FND_DATE.CANONICAL_TO_DATE(p_period_from);
304 	l_period_to             DATE := FND_DATE.CANONICAL_TO_DATE(p_period_to);
305     l_ae_lines_tbl          ae_lines_tbl_type;
306     l_asset_deprn_tbl       asset_deprn_tbl_type;
307     l_report_deprn_tbl      asset_deprn_tbl_type;
308     l_outer_error_msg_tbl 	Okl_Accounting_Util.Error_Message_Type;
309     l_pdtv_rec              OKL_SETUPPRODUCTS_PUB.pdtv_rec_type;
310     l_pdt_parameters_rec    OKL_SETUPPRODUCTS_PUB.pdt_parameters_rec_type;
311     l_rep_summary_tbl       rep_prd_summary_tbl_type;
312 
313     -- cursor to select the contracts eligible for multi-gaap
314     CURSOR gaap_contracts_csr IS
315     SELECT khr.id khr_id,
316 		   chr.contract_number,
317            pdt.id pdt_id,
318            pdt.name pdt_name,
319 		   pdt.reporting_pdt_id,
320 		   khr.deal_type,
321 		   chr.currency_code
322     FROM OKC_K_HEADERS_B chr, OKL_K_HEADERS khr, OKL_PRODUCTS pdt
323     WHERE chr.id = khr.id
324     AND chr.scs_code = 'LEASE'
325 	AND chr.sts_code IN ('BOOKED','EVERGREEN') -- Bug 3448049. removed approved and under revision statuses
326     AND khr.pdt_id = pdt.id
327 	AND khr.multi_gaap_yn = 'Y'
328     ORDER BY pdt_name;
329 
330     -- cursor to identify income accrued/non-accrued
331     -- Bug 3498903. Added language clause.
332     CURSOR accrual_trx_csr(p_khr_id NUMBER,p_date_from DATE,p_date_to DATE) IS
333     SELECT stytl.name stream_type,
334            decode(trx.accrual_activity,'NON-ACCRUAL','NON-ACCRUAL','ACCRUAL') accrual_activity,
335            sum(txl.amount) total_amount
336     FROM okl_trx_contracts trx, okl_txl_cntrct_lns txl, okl_strm_type_tl stytl
337     WHERE trx.khr_id = p_khr_id
338  --Fixed Bug 5707866 SLA Uptake Project by nikshah, changed tsu_code to PROCESSED from ENTERED
339     AND trx.tsu_code = 'PROCESSED'
340 --rkuttiya added for 12.1.1 Multi GAAP
341     AND trx.representation_type = 'PRIMARY'
342 --
343     AND trx.tcn_type='ACL'
344     AND trx.accrual_activity in ('ACCRUAL','NON-ACCRUAL','CATCH-UP')
345     AND trx.date_transaction_occurred BETWEEN p_date_from AND p_date_to
346     AND trx.id = txl.tcn_id
347     AND txl.sty_id = stytl.id
348     AND stytl.language = USERENV('LANG')
349     GROUP BY stytl.name, decode(trx.accrual_activity,'NON-ACCRUAL','NON-ACCRUAL','ACCRUAL');
350 
351     -- cursor to identify depreciation booked/rolled back
352     CURSOR local_deprn_csr(p_khr_id NUMBER, p_start_date DATE, p_end_date DATE) IS
353     SELECT fad.asset_category_id,
354            decode(trx.accrual_activity,'NON-ACCRUAL','NON-ACCRUAL','ACCRUAL') accrual_activity,
355            SUM(fds.deprn_amount) deprn_amount
356 	FROM
357        OKL_TRX_CONTRACTS trx,
358 	   OKC_K_ITEMS cli,
359 	   OKC_K_LINES_B cle,
360 	   OKC_LINE_STYLES_B cls,
361        FA_BOOKS fab,
362 	   FA_ADDITIONS_B fad,
363        FA_BOOK_CONTROLS fbc,
364 	   FA_CATEGORIES_B fcb,
365 	   FA_DEPRN_SUMMARY fds,
366 	   FA_DEPRN_PERIODS fdp,
367 	   FA_CALENDAR_PERIODS fcp
368 	WHERE trx.khr_id = p_khr_id
369  --Fixed Bug 5707866 SLA Uptake Project by nikshah, changed tsu_code to PROCESSED from ENTERED
370 	AND trx.tsu_code = 'PROCESSED'
371   --rkuttiya added for 12.1.1 Multi GAAP Project
372         AND trx.representation_type = 'PRIMARY'
373   --
374 	AND trx.tcn_type = 'ACL'
375 	AND trx.accrual_activity IN ('ACCRUAL','CATCH-UP','NON-ACCRUAL')
376 	AND trx.khr_id = cle.dnz_chr_id
377     AND cle.id = cli.cle_id
378     AND cli.dnz_chr_id = cle.dnz_chr_id
379     AND cle.lse_id = cls.id
380     AND cls.lty_code = 'FIXED_ASSET'
381 	AND fad.asset_id = TO_NUMBER(cli.object1_id1)
382     AND fad.asset_category_id = fcb.category_id
383     AND fad.asset_id = fab.asset_id
384     AND fab.book_type_code = fbc.book_type_code
385     AND fab.transaction_header_id_out is null
386     AND NVL(fbc.date_ineffective,sysdate+1) > sysdate
387     AND fbc.book_class = 'CORPORATE'
388     AND fds.asset_id = fad.asset_id
389 	AND fds.book_type_code = fab.book_type_code
390 	AND fds.book_type_code = fdp.book_type_code
391     AND fds.period_counter = fdp.period_counter
392     AND fdp.period_name = fcp.period_name
393 	AND fcp.start_date BETWEEN p_start_date AND p_end_date
394 	AND fcp.end_date BETWEEN p_start_date AND p_end_date
395 	AND trx.date_accrual BETWEEN p_start_date and p_end_date
396 	GROUP BY fad.asset_category_id,decode(trx.accrual_activity,'NON-ACCRUAL','NON-ACCRUAL','ACCRUAL');
397 
398     -- cursor to select reporting stream amounts to be accrued
399     --Bug# 2753128. Adding currency code to cursor.
400     --Bug# 2870483. Adding say_code='CURR' to cursor to restrict query to only current stream amounts and not history.
401     -- Bug 3498903. Added language clause.
402     CURSOR reporting_streams_csr(p_khr_id NUMBER, p_accrue_from_date DATE, p_accrue_till_date DATE) IS
403     SELECT stytl.name stream_type,
404            sty.accrual_yn,
405            chr.currency_code,
406            ABS(SUM(ste.amount)) total_amount
407     FROM OKL_STRM_TYPE_TL stytl,
408          OKL_STRM_TYPE_B sty,
409          OKL_STREAMS stm,
410          OKL_STRM_ELEMENTS ste,
411          OKL_PROD_STRM_TYPES psty,
412 		 OKL_K_HEADERS khr,
413 		 OKC_K_HEADERS_B chr,
414 		 OKL_PRODUCTS pdt
415     WHERE stm.khr_id = p_khr_id
416     AND khr.id = chr.id
417     AND khr.id = stm.khr_id
418     AND stm.active_yn = 'N'
419     AND stm.purpose_code = 'REPORT'
420     AND stm.say_code='CURR'
421     AND stm.sty_id = stytl.id
422     AND stytl.id = sty.id
423     AND stytl.language = USERENV('LANG')
424     AND stytl.id = psty.sty_id
425     AND psty.pdt_id = pdt.reporting_pdt_id
426 	AND pdt.id = khr.pdt_id
427     AND psty.accrual_yn = 'Y'
428     AND stm.id = ste.stm_id
429     AND ste.stream_element_date BETWEEN p_accrue_from_date AND p_accrue_till_date
430     GROUP BY stytl.name, sty.accrual_yn, chr.currency_code;
431 
432     -- cursor to ascertain reporting depreciation to be booked
433     CURSOR reporting_deprn_csr(p_khr_id NUMBER, p_start_date DATE, p_end_date DATE, p_book_type_code VARCHAR2) IS
434     SELECT fad.asset_category_id,
435            SUM(fds.deprn_amount) deprn_amount
436 	FROM
437 	   OKC_K_ITEMS cli,
438 	   OKC_K_LINES_B cle,
439 	   OKC_LINE_STYLES_B cls,
440        FA_BOOKS fab,
441 	   FA_ADDITIONS_B fad,
442        FA_BOOK_CONTROLS fbc,
443 	   FA_CATEGORIES_B fcb,
444 	   FA_DEPRN_SUMMARY fds,
445 	   FA_DEPRN_PERIODS fdp,
446 	   FA_CALENDAR_PERIODS fcp
447 	WHERE cle.dnz_chr_id = p_khr_id
448     AND cle.id = cli.cle_id
449     AND cli.dnz_chr_id = cle.dnz_chr_id
450     AND cle.lse_id = cls.id
451     AND cls.lty_code = 'FIXED_ASSET'
452 	AND fad.asset_id = TO_NUMBER(cli.object1_id1)
453     AND fad.asset_category_id = fcb.category_id
454     AND fad.asset_id = fab.asset_id
455     AND fab.book_type_code = p_book_type_code
456     AND fab.book_type_code = fbc.book_type_code
457     AND fab.transaction_header_id_out is null
458     AND NVL(fbc.date_ineffective,sysdate+1) > sysdate
459     AND fbc.book_class = 'TAX'
460     AND fds.asset_id = fad.asset_id
461 	AND fds.book_type_code = fab.book_type_code
462 	AND fds.book_type_code = fdp.book_type_code
463     AND fds.period_counter = fdp.period_counter
464     AND fdp.period_name = fcp.period_name
465 	AND fcp.start_date BETWEEN p_start_date AND p_end_date
466 	AND fcp.end_date BETWEEN p_start_date AND p_end_date
467 	GROUP BY fad.asset_category_id;
468 
469     -- cursor to select income accrued/non-accrued grouped by product and stream type
470     -- grouping by currency code for bug# 2753128
471     -- Bug 3498903. Added language clause.
472     CURSOR product_summary_csr(p_from_date DATE, p_to_date DATE) IS
473     SELECT pdt.name product_name,
474            chr.currency_code,
475            stytl.name stream_type,
476            decode(trx.accrual_activity,'NON-ACCRUAL','NON-ACCRUAL','ACCRUAL') accrual_activity,
477            SUM(txl.amount) total_amount
478     FROM OKL_STRM_TYPE_TL stytl,
479          OKL_K_HEADERS khr,
480 		 OKC_K_HEADERS_B chr,
481 		 OKL_PRODUCTS pdt,
482 		 OKL_TRX_CONTRACTS trx,
483 		 OKL_TXL_CNTRCT_LNS txl
484     WHERE chr.id = khr.id
485     AND pdt.id = khr.pdt_id
486     AND khr.multi_gaap_yn = 'Y'
487     AND khr.id = trx.khr_id
488  --Fixed Bug 5707866 SLA Uptake Project by nikshah, changed tsu_code to PROCESSED from ENTERED
489     AND trx.tsu_code = 'PROCESSED'
490    --rkuttiya added for 12.1.1 Multi GAAP
491     AND representation_type = 'PRIMARY'
492    --
493     AND trx.tcn_type='ACL'
494     AND trx.accrual_activity in ('ACCRUAL','NON-ACCRUAL','CATCH-UP')
495     AND trx.date_transaction_occurred BETWEEN p_from_date AND p_to_date
496     AND trx.id = txl.tcn_id
497     AND txl.sty_id = stytl.id
498     AND stytl.language = USERENV('LANG')
499     GROUP BY pdt.name, chr.currency_code, stytl.name,decode(trx.accrual_activity,'NON-ACCRUAL','NON-ACCRUAL','ACCRUAL');
500 
501     -- Cursor to get org name
502     CURSOR org_name_csr(p_org_id NUMBER) IS
503     SELECT name
504     FROM hr_operating_units
505     WHERE organization_id = p_org_id;
506 
507     -- Cursor to check override status
508     CURSOR override_status_csr(p_khr_id NUMBER) IS
509     SELECT generate_accrual_override_yn
510     FROM okl_k_headers
511     WHERE id = p_khr_id;
512 
513 	TYPE contract_error_tbl_type IS TABLE OF okl_k_headers_full_v.CONTRACT_NUMBER%TYPE
514 	INDEX BY BINARY_INTEGER;
515 
516     TYPE gaap_contracts_rec_type IS RECORD(
517       contract_id                  OKL_K_HEADERS_FULL_V.ID%TYPE,
518       contract_number              OKL_K_HEADERS_FULL_V.CONTRACT_NUMBER%TYPE,
519 	  product_id                   OKL_K_HEADERS_FULL_V.PDT_ID%TYPE,
520 	  product_name                 OKL_PRODUCTS_V.NAME%TYPE,
521 	  rep_product_id               OKL_K_HEADERS_FULL_V.PDT_ID%TYPE,
522       deal_type                    OKL_K_HEADERS_FULL_V.DEAL_TYPE%TYPE,
523       khr_currency_code            OKL_K_HEADERS_FULL_V.CURRENCY_CODE%TYPE);
524 
525     TYPE gaap_contracts_tbl_type IS TABLE OF gaap_contracts_rec_type
526 	INDEX BY BINARY_INTEGER;
527 
528 	l_gaap_contracts_tbl    gaap_contracts_tbl_type; -- Bug# 3020763
529     l_product_summary       product_summary_csr%ROWTYPE;
530     l_contract_error_tbl    contract_error_tbl_type;
531 
532 	-- get the secondary rep method .. bug 7584164
533     cursor get_sec_rep_method is
534 	select secondary_rep_method
535 	  from okl_sys_acct_opts;
536 
537     l_sec_rep_method        okl_sys_acct_opts.secondary_rep_method%TYPE;
538 
539   BEGIN
540 
541 	-- get the accounting method for secondary representation
542 	open  get_sec_rep_method;
543 	fetch get_sec_rep_method into l_sec_rep_method;
544 	close get_sec_rep_method;
545 
546     -- Find set of books id
547     l_sob_id := Okl_Accounting_Util.GET_SET_OF_BOOKS_ID;
548     IF (l_sob_id IS NULL) THEN
549       Okl_Api.set_message(p_app_name     => g_app_name,
550                           p_msg_name     => 'OKL_AGN_SOB_ID_ERROR');
551       RAISE Okl_Api.G_EXCEPTION_ERROR;
552     END IF;
553 
554     -- Find set of books name
555     l_sob_name := Okl_Accounting_Util.GET_SET_OF_BOOKS_NAME(l_sob_id);
556 
557     -- Find org name for report
558     l_org_id := mo_global.get_current_org_id();
559     IF l_org_id IS NULL THEN
560       -- store SQL error message on message stack for caller
561       okl_api.set_message(p_app_name     => G_APP_NAME,
562                           p_msg_name     => G_INVALID_VALUE,
563                           p_token1       => G_COL_NAME_TOKEN,
564                           p_token1_value => 'ORG_ID');
565       RAISE OKL_API.G_EXCEPTION_ERROR;
566     END IF;
567 
568     OPEN org_name_csr(l_org_id);
569     FETCH org_name_csr INTO l_org_name;
570     IF org_name_csr%NOTFOUND THEN
571       CLOSE org_name_csr;
572       -- store SQL error message on message stack for caller
573       okl_api.set_message(p_app_name     => G_APP_NAME,
574                             p_msg_name     => G_NO_MATCHING_RECORD,
575                             p_token1       => G_COL_NAME_TOKEN,
576                             p_token1_value => 'ORG_ID');
577       RAISE OKL_API.G_EXCEPTION_ERROR;
578 	END IF;
579 	CLOSE org_name_csr;
580 
581     -- Find the reporting asset book
582 	l_book_type_code := OKL_SYSTEM_PARAMS_ALL_PUB.get_system_param_value(OKL_SYSTEM_PARAMS_ALL_PUB.G_RPT_PROD_BOOK_TYPE_CODE);
583 	-- verify the reporting book only for secondary rep method of 'Report'. Bug 7584164
584     IF (l_book_type_code IS NULL and l_sec_rep_method = 'REPORT') THEN
585       Okl_Api.set_message(p_app_name     => g_app_name,
586                           p_msg_name     => 'OKL_MGP_ASSET_BOOK_ERROR');
587       RAISE Okl_Api.G_EXCEPTION_ERROR;
588     END IF;
589 
590     -- Find functional currency code for the set of books id
591     l_currency_code := Okl_Accounting_Util.GET_FUNC_CURR_CODE;
592     IF (l_currency_code IS NULL) THEN
593       Okl_Api.set_message(p_app_name     => g_app_name,
594                           p_msg_name     => 'OKL_AGN_CURR_CODE_ERROR');
595       RAISE Okl_Api.G_EXCEPTION_ERROR;
596     END IF;
597 
598     -- Create report header
599     FND_FILE.PUT_LINE(FND_FILE.OUTPUT,'                                             '||FND_MESSAGE.GET_STRING('OKL', 'OKL_MGP_REP_TITLE'));
600     FND_FILE.PUT_LINE(FND_FILE.OUTPUT,'                                             '||FND_MESSAGE.GET_STRING('OKL', 'OKL_MGP_REP_TITLE_UNDERLINE'));
601     FND_FILE.PUT_LINE(FND_FILE.OUTPUT,'');
602     FND_FILE.PUT_LINE(FND_FILE.OUTPUT,FND_MESSAGE.GET_STRING('OKL','OKL_GLP_RPT_SOB_TITLE')
603 	                  ||' '||RPAD(l_sob_name, 65)
604 					  ||FND_MESSAGE.GET_STRING('OKL','OKL_GLP_RPT_OU_TITLE')
605 					  ||' '||l_org_name);
606     FND_FILE.PUT_LINE(FND_FILE.OUTPUT,FND_MESSAGE.GET_STRING('OKL','OKL_GLP_RPT_PROG_DATE_TITLE')
607 	                  ||' '||RPAD(l_sysdate, 61)||FND_MESSAGE.GET_STRING('OKL','OKL_MGP_RPT_DATE_RANGE')
608 					  ||' '||l_period_from||' '||FND_MESSAGE.GET_STRING('OKL','OKL_MGP_RPT_TO_FIELD')
609 					  ||' '||l_period_to);
610     FND_FILE.PUT_LINE(FND_FILE.OUTPUT,FND_MESSAGE.GET_STRING('OKL','OKL_GLP_RPT_CURR_TITLE')
611 	                  ||' '||RPAD(l_currency_code,58)||FND_MESSAGE.GET_STRING('OKL','OKL_AGN_RPT_BATCH_NAME')
612 					  ||' '||p_batch_name);
613     FND_FILE.PUT_LINE(FND_FILE.OUTPUT,'');
614 
615 	-- if the secondary representation method is not report abort the run. Bug 7584164
616 	if l_sec_rep_method <> 'REPORT' then
617       fnd_file.put_line(FND_FILE.OUTPUT, FND_MESSAGE.GET_STRING('OKL','OKL_SEC_REP_METHOD') ||' '||
618 	                  OKL_ACCOUNTING_UTIL.GET_LOOKUP_MEANING('OKL_SEC_REP_METHOD',l_sec_rep_method,540,0));
619       fnd_file.put_line(FND_FILE.OUTPUT, FND_MESSAGE.GET_STRING('OKL','OKL_SEC_REP_METHOD_INVALID'));
620       return;
621 	end if;
622 
623     -- process contracts
624     FOR i IN gaap_contracts_csr
625     LOOP
626       l_gaap_contracts_tbl(gaap_contracts_csr%ROWCOUNT).contract_id := i.khr_id;
627       l_gaap_contracts_tbl(gaap_contracts_csr%ROWCOUNT).contract_number := i.contract_number;
628 	  l_gaap_contracts_tbl(gaap_contracts_csr%ROWCOUNT).product_id := i.pdt_id;
629 	  l_gaap_contracts_tbl(gaap_contracts_csr%ROWCOUNT).rep_product_id := i.reporting_pdt_id;
630       l_gaap_contracts_tbl(gaap_contracts_csr%ROWCOUNT).product_name := i.pdt_name;
631       l_gaap_contracts_tbl(gaap_contracts_csr%ROWCOUNT).deal_type := i.deal_type;
632       l_gaap_contracts_tbl(gaap_contracts_csr%ROWCOUNT).khr_currency_code := i.currency_code;
633     END LOOP;
634 
635 	IF l_gaap_contracts_tbl.COUNT > 0 THEN
636       FOR x IN l_gaap_contracts_tbl.FIRST..l_gaap_contracts_tbl.LAST
637       LOOP
638 
639       l_contract_id := l_gaap_contracts_tbl(x).contract_id;
640       l_contract_number := l_gaap_contracts_tbl(x).contract_number;
641 	  l_product_id := l_gaap_contracts_tbl(x).product_id;
642 	  l_rep_product_id := l_gaap_contracts_tbl(x).rep_product_id;
643       l_product_name := l_gaap_contracts_tbl(x).product_name;
644       l_deal_type := l_gaap_contracts_tbl(x).deal_type;
645       l_contract_currency := l_gaap_contracts_tbl(x).khr_currency_code;
646 
647       DECLARE
648         -- Declare local variables which need to be re-initialized to null for each contract
649         l_error_msg_tbl 		 Okl_Accounting_Util.Error_Message_Type;
650 		l_accrual_activity       OKL_TRX_CONTRACTS.ACCRUAL_ACTIVITY%TYPE;
651 		l_deprn_accrual_activity OKL_TRX_CONTRACTS.ACCRUAL_ACTIVITY%TYPE;
652 		l_record_status          VARCHAR2(10);
653 		l_record_status2         VARCHAR2(10);
654 		l_record_status3         VARCHAR2(10);
655         l_contract_verified      VARCHAR2(3);
656 		l_rule_result            VARCHAR2(1);
657         l_no_data_found          BOOLEAN;
658 		l_override_status        VARCHAR2(1);
659 
660       BEGIN
661 
662         -- create report body content
663         FND_FILE.PUT_LINE(FND_FILE.OUTPUT,'');
664         FND_FILE.PUT_LINE(FND_FILE.OUTPUT,FND_MESSAGE.GET_STRING('OKL','OKL_GLP_RPT_CTR_NUM_TITLE')||': '||l_contract_number);
665         FND_FILE.PUT_LINE(FND_FILE.OUTPUT,'    '||FND_MESSAGE.GET_STRING('OKL','OKL_AGN_RPT_CURRENCY')||': '||l_contract_currency);
666         FND_FILE.PUT_LINE(FND_FILE.OUTPUT,'    '||FND_MESSAGE.GET_STRING('OKL','OKL_MGP_LOCAL_PRODUCT')||': '||l_product_name);
667         FND_FILE.PUT_LINE(FND_FILE.OUTPUT,'    '||FND_MESSAGE.GET_STRING('OKL','OKL_MGP_LOCAL_BK_CLASS')||': '||OKL_ACCOUNTING_UTIL.GET_LOOKUP_MEANING('OKL_BOOK_CLASS',l_deal_type,540,0));
668         FND_FILE.PUT_LINE(FND_FILE.OUTPUT,'    '||FND_MESSAGE.GET_STRING('OKL','OKL_MGP_REVERSE_REVENUE')||':');
669         FND_FILE.PUT_LINE(FND_FILE.OUTPUT,'    '||RPAD(FND_MESSAGE.GET_STRING('OKL','OKL_MGP_REP_STY_TYPE'),35)||RPAD(FND_MESSAGE.GET_STRING('OKL','OKL_MGP_REP_ACTIVITY'),15)||LPAD(FND_MESSAGE.GET_STRING('OKL','OKL_GLP_RPT_AMT_TITLE'),20));
670         FND_FILE.PUT_LINE(FND_FILE.OUTPUT,'    '||RPAD(FND_MESSAGE.GET_STRING('OKL','OKL_MGP_REP_STY_LINE'),35)||RPAD(FND_MESSAGE.GET_STRING('OKL','OKL_MGP_REP_ACT_LINE'),15)||LPAD(FND_MESSAGE.GET_STRING('OKL','OKL_GLP_RPT_AMT_LINE'),20));
671 
672         -- For each contract identify the income accrued or non-accrued
673         FOR x IN accrual_trx_csr(l_contract_id,l_period_from, l_period_to)
674         LOOP
675           -- Print the accrual/non-accrual data onto the report file for audit trail
676           FND_FILE.PUT_LINE(FND_FILE.OUTPUT,'    '||RPAD(x.stream_type,35)||RPAD(x.accrual_activity,15)||LPAD(x.total_amount,20));
677         END LOOP;
678         FND_FILE.PUT_LINE(FND_FILE.OUTPUT,'');
679         FND_FILE.PUT_LINE(FND_FILE.OUTPUT,'    '||FND_MESSAGE.GET_STRING('OKL','OKL_MGP_REVERSE_DEPR')||':');
680         FND_FILE.PUT_LINE(FND_FILE.OUTPUT,'    '||FND_MESSAGE.GET_STRING('OKL','OKL_AGN_RPT_CURRENCY')||': '||l_currency_code);
681         FND_FILE.PUT_LINE(FND_FILE.OUTPUT,'    '||RPAD(FND_MESSAGE.GET_STRING('OKL','OKL_ADA_RPT_AST_CAT_PROMPT'),35)||RPAD(FND_MESSAGE.GET_STRING('OKL','OKL_MGP_REP_ACTIVITY'),15)||LPAD(FND_MESSAGE.GET_STRING('OKL','OKL_GLP_RPT_AMT_TITLE'),20));
682         FND_FILE.PUT_LINE(FND_FILE.OUTPUT,'    '||RPAD(FND_MESSAGE.GET_STRING('OKL','OKL_ADA_RPT_AST_CAT_UNDERLINE'),35)||RPAD(FND_MESSAGE.GET_STRING('OKL','OKL_MGP_REP_ACT_LINE'),15)||LPAD(FND_MESSAGE.GET_STRING('OKL','OKL_GLP_RPT_AMT_LINE'),20));
683 
684         -- Open cursor local_deprn_csr
685 		FOR i IN local_deprn_csr(l_contract_id, l_period_from, l_period_to)
686 		LOOP
687 
688           FND_FILE.PUT_LINE(FND_FILE.OUTPUT,'    '||RPAD(GET_CATEGORY_NAME(i.asset_category_id),35)||RPAD(Okl_Accounting_Util.Get_Lookup_Meaning('OKL_ACCRUAL_ACTIVITY',i.accrual_activity),15)||LPAD(NVL(i.deprn_amount,0),20));
689 
690           IF l_asset_deprn_tbl.COUNT > 0 THEN
691             l_record_status := 'NOT-ADDED';
692 		    -- records exist in the pl/sql table
693 		    FOR x IN l_asset_deprn_tbl.FIRST..l_asset_deprn_tbl.LAST
694 			LOOP
695               IF l_record_status <> 'ADDED' THEN
696                 IF l_asset_deprn_tbl(x).category_name = GET_CATEGORY_NAME(i.asset_category_id) THEN
697                   --asset category is the same
698                    IF i.accrual_activity = 'ACCRUAL' THEN
699 
700                       l_asset_deprn_tbl(x).deprn_amount := l_asset_deprn_tbl(x).deprn_amount + i.deprn_amount;
701                       l_record_status := 'ADDED';
702                     ELSIF i.accrual_activity = 'NON-ACCRUAL' THEN
703 
704                       l_asset_deprn_tbl(x).deprn_amount := l_asset_deprn_tbl(x).deprn_amount - i.deprn_amount;
705                       l_record_status := 'ADDED';
706                     END IF;
707 			    END IF;
708               END IF;
709 	  		END LOOP;
710 
711             IF l_record_status <> 'ADDED' THEN
712               -- category is not the same, create a new record
713               l_asset_deprn_tbl(l_count).category_name := get_category_name(i.asset_category_id);
714               IF i.accrual_activity = 'NON-ACCRUAL' THEN
715                 l_asset_deprn_tbl(l_count).deprn_amount := 0 - i.deprn_amount;
716               ELSE
717 			    l_asset_deprn_tbl(l_count).deprn_amount := i.deprn_amount;
718 			  END IF;
719                 l_count := l_count+1;
720                 l_record_status := 'ADDED';
721 			END IF;
722           ELSE
723             -- no records in table, so create first record
724             l_asset_deprn_tbl(l_count).category_name := get_category_name(i.asset_category_id);
725             IF i.accrual_activity = 'NON-ACCRUAL' THEN
726               l_asset_deprn_tbl(l_count).deprn_amount := 0 - i.deprn_amount;
727 			ELSE
728 			  l_asset_deprn_tbl(l_count).deprn_amount := i.deprn_amount;
729 			END IF;
730             l_count := l_count+1;
731           END IF;
732         END LOOP;
733         FND_FILE.PUT_LINE(FND_FILE.OUTPUT,'');
734 
735           l_pdtv_rec.id := l_rep_product_id;
736           OKL_SETUPPRODUCTS_PUB.Getpdt_parameters
737                              (p_api_version        => l_api_version,
738   				  			  p_init_msg_list      => l_init_msg_list,
739 						      x_return_status      => l_return_status,
740 							  x_no_data_found      => l_no_data_found,
741 							  x_msg_count          => l_msg_count,
742 							  x_msg_data           => l_msg_data,
743 							  p_pdtv_rec           => l_pdtv_rec,
744 							  p_pdt_parameter_rec  => l_pdt_parameters_rec);
745           -- store the highest degree of error
746           IF (l_return_status <> Okl_Api.G_RET_STS_SUCCESS) THEN
747             IF (l_return_status = Okl_Api.G_RET_STS_UNEXP_ERROR) THEN
748               Okl_Api.set_message(p_app_name     => g_app_name,
749                                   p_msg_name     => 'OKL_MGP_REP_PDT_ERROR',
750                                   p_token1       => 'PRODUCT_NAME',
751                                   p_token1_value => l_product_name);
752 
753               RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
754             ELSIF (l_return_Status = Okl_Api.G_RET_STS_ERROR) THEN
755               Okl_Api.set_message(p_app_name     => g_app_name,
756                                   p_msg_name     => 'OKL_MGP_REP_PDT_ERROR',
757                                   p_token1       => 'PRODUCT_NAME',
758                                   p_token1_value => l_product_name);
759               RAISE OKL_API.G_EXCEPTION_ERROR;
760             END IF;
761           END IF;
762 
763         -- Bug# 2824234. Adding currency code for reporting streams.
764         FND_FILE.PUT_LINE(FND_FILE.OUTPUT,'    '||FND_MESSAGE.GET_STRING('OKL','OKL_AGN_RPT_CURRENCY')||': '||l_contract_currency);
765         FND_FILE.PUT_LINE(FND_FILE.OUTPUT,'    '||FND_MESSAGE.GET_STRING('OKL','OKL_MGP_REPORT_PRODUCT')||': '||l_pdt_parameters_rec.name);
766         FND_FILE.PUT_LINE(FND_FILE.OUTPUT,'    '||FND_MESSAGE.GET_STRING('OKL','OKL_MGP_REPORT_BK_CLASS')||': '||OKL_ACCOUNTING_UTIL.GET_LOOKUP_MEANING('OKL_BOOK_CLASS',l_pdt_parameters_rec.deal_type,540,0));
767         FND_FILE.PUT_LINE(FND_FILE.OUTPUT,'    '||FND_MESSAGE.GET_STRING('OKL','OKL_MGP_ACCOUNT_REVENUE')||':');
768         FND_FILE.PUT_LINE(FND_FILE.OUTPUT,'    '||RPAD(FND_MESSAGE.GET_STRING('OKL','OKL_MGP_REP_STY_TYPE'),35)||RPAD(FND_MESSAGE.GET_STRING('OKL','OKL_MGP_REP_ACTIVITY'),15)||LPAD(FND_MESSAGE.GET_STRING('OKL','OKL_GLP_RPT_AMT_TITLE'),20));
769         FND_FILE.PUT_LINE(FND_FILE.OUTPUT,'    '||RPAD(FND_MESSAGE.GET_STRING('OKL','OKL_MGP_REP_STY_LINE'),35)||RPAD(FND_MESSAGE.GET_STRING('OKL','OKL_MGP_REP_ACT_LINE'),15)||LPAD(FND_MESSAGE.GET_STRING('OKL','OKL_GLP_RPT_AMT_LINE'),20));
770 
771         l_contract_verified := 'NO';
772 
773         -- open reporting streams cursor
774 		FOR j IN reporting_streams_csr(l_contract_id, l_period_from, l_period_to)
775         LOOP
776           -- ER 2872216 Need to validate contract against accrual rule only if
777           -- stream type is subject to accrual rule. Validation done only once for contract
778           IF l_contract_verified = 'NO' THEN
779             -- Bug 4054047
780             IF j.accrual_yn = 'ACRL_WITH_RULE' THEN
781               OKL_GENERATE_ACCRUALS_PUB.VALIDATE_ACCRUAL_RULE
782 		                    (x_return_status => l_return_status
783                             ,x_msg_count => l_msg_count
784 							,x_msg_data => l_msg_data
785                             ,x_result => l_rule_result
786                             ,p_ctr_id => l_contract_id);
787               -- store the highest degree of error
788               IF (l_return_status <> Okl_Api.G_RET_STS_SUCCESS) THEN
789                 IF (l_return_status = Okl_Api.G_RET_STS_UNEXP_ERROR) THEN
790                   Okl_Api.set_message(p_app_name     => g_app_name,
791                                       p_msg_name     => 'OKL_AGN_RULE_VALD_ERROR',
792                                       p_token1       => 'CONTRACT_NUMBER',
793                                       p_token1_value => l_contract_number);
794                   RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
795                 ELSIF (l_return_Status = Okl_Api.G_RET_STS_ERROR) THEN
796                   Okl_Api.set_message(p_app_name     => g_app_name,
797                                       p_msg_name     => 'OKL_AGN_RULE_VALD_ERROR',
798                                       p_token1       => 'CONTRACT_NUMBER',
799                                       p_token1_value => l_contract_number);
800                   RAISE OKL_API.G_EXCEPTION_ERROR;
801                 END IF;
802               END IF;
803 
804               IF l_rule_result = 'Y' THEN
805                 l_accrual_activity := 'ACCRUAL';
806               ELSIF l_rule_result = 'N' THEN
807                 l_accrual_activity := 'NON-ACCRUAL';
808               ELSE
809                 Okl_Api.set_message(p_app_name     => g_app_name,
810                                     p_msg_name     => 'OKL_AGN_RULE_VALD_ERROR',
811                                     p_token1       => 'CONTRACT_NUMBER',
812                                     p_token1_value => l_contract_number);
813                 RAISE OKL_API.G_EXCEPTION_ERROR;
814               END IF;
815 
816               -- get override status
817               OPEN override_status_csr(l_contract_id);
818               FETCH override_status_csr INTO l_override_status;
819               CLOSE override_status_csr;
820 
821               -- check override status
822               IF l_override_status = 'Y' THEN
823                 l_accrual_activity := 'NON-ACCRUAL';
824               END IF;
825               l_contract_verified := 'YES';
826 
827               -- need to store original accrual activity for depreciation reporting
828               l_deprn_accrual_activity := l_accrual_activity;
829             -- Bug 4054047
830             ELSIF j.accrual_yn = 'ACRL_WITHOUT_RULE' THEN
831               l_accrual_activity := 'ACCRUAL';
832               l_contract_verified := 'YES';
833             ELSE
834               -- store SQL error message on message stack for caller
835               okl_api.set_message(p_app_name     => G_APP_NAME,
836                                   p_msg_name     => G_INVALID_VALUE,
837                                   p_token1       => G_COL_NAME_TOKEN,
838                                   p_token1_value => 'ACCRUAL_YN');
839               RAISE OKL_API.G_EXCEPTION_ERROR;
840 
841             END IF; --IF j.accrual_yn = 'Y' THEN
842 
843           ELSIF l_contract_verified = 'YES' THEN
844             -- Bug 4054047
845             IF j.accrual_yn = 'ACRL_WITH_RULE' THEN
846               IF l_rule_result = 'Y' THEN
847                 l_accrual_activity := 'ACCRUAL';
848               ELSIF l_rule_result = 'N' THEN
849                 l_accrual_activity := 'NON-ACCRUAL';
850               ELSE
851                 Okl_Api.set_message(p_app_name     => g_app_name,
852                                     p_msg_name     => 'OKL_AGN_RULE_VALD_ERROR',
853                                     p_token1       => 'CONTRACT_NUMBER',
854                                     p_token1_value => l_contract_number);
855                 RAISE OKL_API.G_EXCEPTION_ERROR;
856               END IF;
857               -- check override status
858               IF l_override_status = 'Y' THEN
859                 l_accrual_activity := 'NON-ACCRUAL';
860               END IF;
861             -- Bug 4054047
862             ELSIF j.accrual_yn = 'ACRL_WITHOUT_RULE' THEN
863               l_accrual_activity := 'ACCRUAL';
864 
865             ELSE
866               -- store SQL error message on message stack for caller
867               okl_api.set_message(p_app_name     => G_APP_NAME,
868                                   p_msg_name     => G_INVALID_VALUE,
869                                   p_token1       => G_COL_NAME_TOKEN,
870                                   p_token1_value => 'ACCRUAL_YN');
871               RAISE OKL_API.G_EXCEPTION_ERROR;
872 
873             END IF; --IF j.accrual_yn='Y'
874           END IF; --IF l_contract_verified = 'NO' THEN
875 
876           -- Print the accrual/non-accrual data onto the report file
877           FND_FILE.PUT_LINE(FND_FILE.OUTPUT,'    '||RPAD(j.stream_type,35)||
878           RPAD(Okl_Accounting_Util.Get_Lookup_Meaning('OKL_ACCRUAL_ACTIVITY',l_accrual_activity),15)||
879           LPAD(j.total_amount,20));
880 
881           IF l_rep_summary_tbl.COUNT > 0 THEN
882             l_record_status3 := 'NOT-ADDED';
883 
884 		    -- records exist in the pl/sql table
885 		    FOR k IN l_rep_summary_tbl.FIRST..l_rep_summary_tbl.LAST
886 			LOOP
887               IF l_record_status3 <> 'ADDED' THEN
888                 IF l_rep_summary_tbl(k).product_name = l_pdt_parameters_rec.name THEN
889                   --product is the same
890 	              IF l_rep_summary_tbl(k).stream_type = j.stream_type THEN
891                     -- stream type is the same
892                     IF l_rep_summary_tbl(k).currency_code = j.currency_code THEN
893                     -- currency code is the same
894                       IF l_rep_summary_tbl(k).accrual_activity = l_accrual_activity THEN
895                       --accrual activity is the same
896                         l_rep_summary_tbl(k).total_amount := l_rep_summary_tbl(k).total_amount + j.total_amount;
897                         l_record_status3 := 'ADDED';
898 					  END IF;
899 					END IF;
900 			      END IF;
901 			    END IF;
902               END IF; -- IF l_record_status3 <> 'ADDED' THEN
903 	  		END LOOP;
904 
905             IF l_record_status3 <> 'ADDED' THEN
906               l_rep_summary_tbl(l_count3).product_name := l_pdt_parameters_rec.name;
907               l_rep_summary_tbl(l_count3).stream_type := j.stream_type;
908               --Bug# 2753128. Adding currency code.
909               l_rep_summary_tbl(l_count3).currency_code := j.currency_code;
910               l_rep_summary_tbl(l_count3).accrual_activity := l_accrual_activity;
911               l_rep_summary_tbl(l_count3).total_amount := j.total_amount;
912               l_count3 := l_count3+1;
913               l_record_status3 := 'ADDED';
914 			END IF;
915 
916           ELSE
917             -- no records in table, so create first record
918             l_rep_summary_tbl(l_count3).product_name := l_pdt_parameters_rec.name;
919             l_rep_summary_tbl(l_count3).stream_type := j.stream_type;
920             --Bug# 2753128. Adding currency code.
921             l_rep_summary_tbl(l_count3).currency_code := j.currency_code;
922             l_rep_summary_tbl(l_count3).accrual_activity := l_accrual_activity;
923             l_rep_summary_tbl(l_count3).total_amount := j.total_amount;
924             l_count3 := l_count3+1;
925           END IF; -- IF l_rep_summary_tbl.COUNT > 0 THEN
926 		END LOOP;
927 
928         FND_FILE.PUT_LINE(FND_FILE.OUTPUT,'');
929         FND_FILE.PUT_LINE(FND_FILE.OUTPUT,'    '||FND_MESSAGE.GET_STRING('OKL','OKL_MGP_ACCOUNT_DEPR')||':');
930         FND_FILE.PUT_LINE(FND_FILE.OUTPUT,'    '||FND_MESSAGE.GET_STRING('OKL','OKL_AGN_RPT_CURRENCY')||': '||l_currency_code);
931         FND_FILE.PUT_LINE(FND_FILE.OUTPUT,'    '||RPAD(FND_MESSAGE.GET_STRING('OKL','OKL_ADA_RPT_AST_CAT_PROMPT'),35)||RPAD(FND_MESSAGE.GET_STRING('OKL','OKL_MGP_REP_ACTIVITY'),15)||LPAD(FND_MESSAGE.GET_STRING('OKL','OKL_GLP_RPT_AMT_TITLE'),20));
932         FND_FILE.PUT_LINE(FND_FILE.OUTPUT,'    '||RPAD(FND_MESSAGE.GET_STRING('OKL','OKL_ADA_RPT_AST_CAT_UNDERLINE'),35)||RPAD(FND_MESSAGE.GET_STRING('OKL','OKL_MGP_REP_ACT_LINE'),15)||LPAD(FND_MESSAGE.GET_STRING('OKL','OKL_GLP_RPT_AMT_LINE'),20));
933 
934         --open reporting deprn cursor
935 		FOR i IN reporting_deprn_csr(l_contract_id, l_period_from, l_period_to, l_book_type_code)
936 		LOOP
937 
938           FND_FILE.PUT_LINE(FND_FILE.OUTPUT,'    '||RPAD(NVL(GET_CATEGORY_NAME(i.asset_category_id),' '),35)||RPAD(Okl_Accounting_Util.Get_Lookup_Meaning('OKL_ACCRUAL_ACTIVITY',l_deprn_accrual_activity),15)||LPAD(NVL(i.deprn_amount,0),20));
939 
940           IF l_report_deprn_tbl.COUNT > 0 THEN
941             l_record_status2 := 'NOT-ADDED';
942 		    -- records exist in the pl/sql table
943 		    FOR z IN l_report_deprn_tbl.FIRST..l_report_deprn_tbl.LAST
944 			LOOP
945               IF l_record_status2 <> 'ADDED' THEN
946                 IF l_report_deprn_tbl(z).category_name = GET_CATEGORY_NAME(i.asset_category_id) THEN
947                   --asset category is the same
948                    IF l_deprn_accrual_activity = 'ACCRUAL' THEN
949                       l_report_deprn_tbl(z).deprn_amount := l_report_deprn_tbl(z).deprn_amount + i.deprn_amount;
950                       l_record_status2 := 'ADDED';
951                     ELSIF l_deprn_accrual_activity = 'NON-ACCRUAL' THEN
952                       l_report_deprn_tbl(z).deprn_amount := l_report_deprn_tbl(z).deprn_amount - i.deprn_amount;
953                       l_record_status2 := 'ADDED';
954                     END IF; -- IF l.accrual_activity = 'CATCH-UP' THEN
955 			    END IF;
956               END IF; -- IF record status
957 	  		END LOOP;
958               IF l_record_status2 <> 'ADDED' THEN
959                 -- category is not the same, create a new record
960                 l_report_deprn_tbl(l_count2).category_name := get_category_name(i.asset_category_id);
961                 IF l_deprn_accrual_activity = 'NON-ACCRUAL' THEN
962                   l_report_deprn_tbl(l_count2).deprn_amount := 0 - i.deprn_amount;
963 			    ELSE
964      			  l_report_deprn_tbl(l_count2).deprn_amount := i.deprn_amount;
965 		    	END IF;
966                 l_count2 := l_count2+1;
967                 l_record_status2 := 'ADDED';
968 			  END IF;
969           ELSE
970             -- no records in table, so create first record
971             l_report_deprn_tbl(l_count2).category_name := get_category_name(i.asset_category_id);
972             IF l_deprn_accrual_activity = 'NON-ACCRUAL' THEN
973               l_report_deprn_tbl(l_count2).deprn_amount := 0 - i.deprn_amount;
974 			ELSE
975 			  l_report_deprn_tbl(l_count2).deprn_amount := i.deprn_amount;
976 			END IF;
977             l_count2 := l_count2+1;
978           END IF;
979         END LOOP; --FOR i IN local_deprn_csr(l_contract_id)
980         FND_FILE.PUT_LINE(FND_FILE.OUTPUT,'');
981 
982 
983         EXCEPTION
984 	      WHEN Okl_Api.G_EXCEPTION_ERROR THEN
985             l_return_status := Okl_Api.G_RET_STS_ERROR;
986             -- Select the contract for error reporting
987             l_contract_error_tbl(l_contract_error_count) := l_contract_number;
988             l_contract_error_count := l_contract_error_count + 1;
989             FND_FILE.PUT_LINE(FND_FILE.LOG,l_contract_number||', '||
990 			                  FND_MESSAGE.GET_STRING('OKL','OKL_AGN_RPT_ERROR_STATUS')||' '||
991 							  l_return_status);
992             Okl_Accounting_Util.GET_ERROR_MESSAGE(l_error_msg_tbl);
993             IF (l_error_msg_tbl.COUNT > 0) THEN
994               FOR i IN l_error_msg_tbl.FIRST..l_error_msg_tbl.LAST
995               LOOP
996                 IF l_error_msg_tbl(i) IS NOT NULL THEN
997                   FND_FILE.PUT_LINE(FND_FILE.LOG,l_error_msg_tbl(i));
998                 END IF;
999               END LOOP;
1000             END IF;
1001 
1002 	      WHEN Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR THEN
1003             -- Select the contract for error reporting
1004             l_return_status := Okl_Api.G_RET_STS_UNEXP_ERROR;
1005 
1006             -- Select the contract for error reporting
1007             l_contract_error_tbl(l_contract_error_count) := l_contract_number;
1008             l_contract_error_count := l_contract_error_count + 1;
1009             FND_FILE.PUT_LINE(FND_FILE.LOG,l_contract_number||', '||
1010 			                  FND_MESSAGE.GET_STRING('OKL','OKL_AGN_RPT_ERROR_STATUS')||' '||
1011                               l_return_status);
1012             Okl_Accounting_Util.GET_ERROR_MESSAGE(l_error_msg_tbl);
1013             IF (l_error_msg_tbl.COUNT > 0) THEN
1014               FOR i IN l_error_msg_tbl.FIRST..l_error_msg_tbl.LAST
1015               LOOP
1016                 IF l_error_msg_tbl(i) IS NOT NULL THEN
1017                   FND_FILE.PUT_LINE(FND_FILE.LOG,l_error_msg_tbl(i));
1018                 END IF;
1019               END LOOP;
1020             END IF;
1021 
1022 	      WHEN OTHERS THEN
1023             IF override_status_csr%ISOPEN THEN
1024               CLOSE override_status_csr;
1025             END IF;
1026 
1027             -- Select the contract for error reporting
1028             l_return_status := Okl_Api.G_RET_STS_ERROR;
1029             -- Select the contract for error reporting
1030             l_contract_error_tbl(l_contract_error_count) := l_contract_number;
1031             l_contract_error_count := l_contract_error_count + 1;
1032             FND_FILE.PUT_LINE(FND_FILE.LOG,l_contract_number||', '||
1033 			                  FND_MESSAGE.GET_STRING('OKL','OKL_AGN_RPT_ERROR_STATUS')||' '||
1034                               l_return_status);
1035             Okl_Accounting_Util.GET_ERROR_MESSAGE(l_error_msg_tbl);
1036             IF (l_error_msg_tbl.COUNT > 0) THEN
1037               FOR i IN l_error_msg_tbl.FIRST..l_error_msg_tbl.LAST
1038               LOOP
1039                 IF l_error_msg_tbl(i) IS NOT NULL THEN
1040                   FND_FILE.PUT_LINE(FND_FILE.LOG,l_error_msg_tbl(i));
1041                 END IF;
1042               END LOOP;
1043             END IF;
1044 
1045          END;
1046 
1047          END LOOP;
1048 		 END IF;
1049 
1050         -- Print summary for each product onto the report
1051         FND_FILE.PUT_LINE(FND_FILE.OUTPUT,'');
1052         FND_FILE.PUT_LINE(FND_FILE.OUTPUT,'');
1053         FND_FILE.PUT_LINE(FND_FILE.OUTPUT,FND_MESSAGE.GET_STRING('OKL','OKL_MGP_LOCAL_PRD_SUMRY')||':');
1054         FND_FILE.PUT_LINE(FND_FILE.OUTPUT,'');
1055 
1056 
1057         -- Print summary for each product onto the report
1058         OPEN product_summary_csr(l_period_from, l_period_to);
1059         LOOP
1060         EXIT WHEN product_summary_csr%NOTFOUND;
1061         FETCH product_summary_csr INTO l_product_summary;
1062         IF product_summary_csr%FOUND THEN
1063           l_product_name := l_product_summary.product_name;
1064           FND_FILE.PUT_LINE(FND_FILE.OUTPUT,FND_MESSAGE.GET_STRING('OKL','OKL_MGP_PRD_NAME')||'        : '||l_product_summary.product_name);
1065           FND_FILE.PUT_LINE(FND_FILE.OUTPUT,FND_MESSAGE.GET_STRING('OKL','OKL_MGP_REP_STY_TYPE')||'         : '||l_product_summary.stream_type);
1066           FND_FILE.PUT_LINE(FND_FILE.OUTPUT,FND_MESSAGE.GET_STRING('OKL','OKL_AGN_RPT_CURRENCY')||'            : '||l_product_summary.currency_code);
1067           IF l_product_summary.accrual_activity = 'ACCRUAL' THEN
1068             FND_FILE.PUT_LINE(FND_FILE.OUTPUT,FND_MESSAGE.GET_STRING('OKL','OKL_MGP_AMT_ACCRUED')||'      : '||l_product_summary.total_amount);
1069           ELSIF l_product_summary.accrual_activity = 'NON-ACCRUAL' THEN
1070             FND_FILE.PUT_LINE(FND_FILE.OUTPUT,FND_MESSAGE.GET_STRING('OKL','OKL_MGP_AMT_NON_ACCRUED')||'  : '||l_product_summary.total_amount);
1071           END IF;
1072 
1073           FND_FILE.PUT_LINE(FND_FILE.OUTPUT,FND_MESSAGE.GET_STRING('OKL','OKL_MGP_ACCOUNTS'));
1074           FND_FILE.PUT_LINE(FND_FILE.OUTPUT,FND_MESSAGE.GET_STRING('OKL','OKL_MGP_ACCOUNTS_LINE'));
1075           GET_TEMPLATE_LINES(l_product_summary.product_name
1076                             ,l_product_summary.stream_type
1077 					        ,l_product_summary.accrual_activity
1078 							,l_ae_lines_tbl);
1079           IF l_ae_lines_tbl.COUNT >0 THEN
1080           FOR i IN l_ae_lines_tbl.FIRST..l_ae_lines_tbl.LAST
1081 		  LOOP
1082             l_concat_desc := okl_accounting_util.get_concat_segments(l_ae_lines_tbl(i).ccid);
1083             l_cr_dr_flag := OKL_ACCOUNTING_UTIL.GET_LOOKUP_MEANING('CR_DR',l_ae_lines_tbl(i).crd_code,101,101);
1084             FND_FILE.PUT_LINE(FND_FILE.OUTPUT, l_cr_dr_flag||' '||l_ae_lines_tbl(i).line_type||' '||l_concat_desc);
1085           END LOOP;
1086 		  END IF;
1087           FND_FILE.PUT_LINE(FND_FILE.OUTPUT,'');
1088 		END IF;
1089         END LOOP;
1090 
1091         FND_FILE.PUT_LINE(FND_FILE.OUTPUT,'');
1092         FND_FILE.PUT_LINE(FND_FILE.OUTPUT,'');
1093         FND_FILE.PUT_LINE(FND_FILE.OUTPUT,FND_MESSAGE.GET_STRING('OKL','OKL_MGP_REPORT_PRD_SUMRY')||':');
1094         FND_FILE.PUT_LINE(FND_FILE.OUTPUT,'');
1095 
1096         -- Print reporting summary for each product
1097         IF l_rep_summary_tbl.COUNT > 0 THEN
1098         FOR i IN l_rep_summary_tbl.FIRST..l_rep_summary_tbl.LAST
1099         LOOP
1100           FND_FILE.PUT_LINE(FND_FILE.OUTPUT,FND_MESSAGE.GET_STRING('OKL','OKL_MGP_PRD_NAME')||'                          : '||l_rep_summary_tbl(i).product_name);
1101           FND_FILE.PUT_LINE(FND_FILE.OUTPUT,FND_MESSAGE.GET_STRING('OKL','OKL_MGP_REP_STY_TYPE')||'                           : '||l_rep_summary_tbl(i).stream_type);
1102           FND_FILE.PUT_LINE(FND_FILE.OUTPUT,FND_MESSAGE.GET_STRING('OKL','OKL_AGN_RPT_CURRENCY')||'                              : '||l_rep_summary_tbl(i).currency_code);
1103           IF l_rep_summary_tbl(i).accrual_activity = 'ACCRUAL' THEN
1104             FND_FILE.PUT_LINE(FND_FILE.OUTPUT,FND_MESSAGE.GET_STRING('OKL','OKL_MGP_AMT_ACCOUNT')||'     : '||l_rep_summary_tbl(i).total_amount);
1105           ELSIF l_rep_summary_tbl(i).accrual_activity = 'NON-ACCRUAL' THEN
1106             FND_FILE.PUT_LINE(FND_FILE.OUTPUT,FND_MESSAGE.GET_STRING('OKL','OKL_MGP_AMT_NON_ACCOUNT')||' : '||l_rep_summary_tbl(i).total_amount);
1107           END IF;
1108           FND_FILE.PUT_LINE(FND_FILE.OUTPUT,FND_MESSAGE.GET_STRING('OKL','OKL_MGP_ACCOUNTS'));
1109           FND_FILE.PUT_LINE(FND_FILE.OUTPUT,FND_MESSAGE.GET_STRING('OKL','OKL_MGP_ACCOUNTS_LINE'));
1110           GET_TEMPLATE_LINES(l_rep_summary_tbl(i).product_name
1111                             ,l_rep_summary_tbl(i).stream_type
1112 					        ,l_rep_summary_tbl(i).accrual_activity
1113 							,l_ae_lines_tbl);
1114           IF l_ae_lines_tbl.COUNT >0 THEN
1115           FOR i IN l_ae_lines_tbl.FIRST..l_ae_lines_tbl.LAST
1116 		  LOOP
1117             l_concat_desc := okl_accounting_util.get_concat_segments(l_ae_lines_tbl(i).ccid);
1118             l_cr_dr_flag := OKL_ACCOUNTING_UTIL.GET_LOOKUP_MEANING('CR_DR',l_ae_lines_tbl(i).crd_code,101,101);
1119             FND_FILE.PUT_LINE(FND_FILE.OUTPUT, l_cr_dr_flag||' '||l_ae_lines_tbl(i).line_type||' '||l_concat_desc);
1120           END LOOP;
1121 		  END IF;
1122           FND_FILE.PUT_LINE(FND_FILE.OUTPUT,'');
1123         END LOOP;
1124 		END IF;
1125 
1126         -- print local depreciation summary
1127         FND_FILE.PUT_LINE(FND_FILE.OUTPUT,'');
1128         FND_FILE.PUT_LINE(FND_FILE.OUTPUT,FND_MESSAGE.GET_STRING('OKL','OKL_MGP_LOCAL_DEPR_SUMRY'));
1129         FND_FILE.PUT_LINE(FND_FILE.OUTPUT,'');
1130         -- Create Report Content
1131         FND_FILE.PUT_LINE(FND_FILE.OUTPUT,FND_MESSAGE.GET_STRING('OKL','OKL_AGN_RPT_CURRENCY')||': '||l_currency_code);
1132         FND_FILE.PUT_LINE(FND_FILE.OUTPUT,RPAD(FND_MESSAGE.GET_STRING('OKL','OKL_ADA_RPT_AST_CAT_PROMPT'),35)
1133                      ||RPAD(FND_MESSAGE.GET_STRING('OKL','OKL_AGN_RPT_ACTIVITY'),23)
1134 					 ||LPAD(FND_MESSAGE.GET_STRING('OKL','OKL_GLP_RPT_AMT_TITLE'),18));
1135 
1136         FND_FILE.PUT_LINE(FND_FILE.OUTPUT,RPAD(FND_MESSAGE.GET_STRING('OKL','OKL_ADA_RPT_AST_CAT_UNDERLINE'),35)
1137                      ||RPAD(FND_MESSAGE.GET_STRING('OKL','OKL_ADA_RPT_ACTIVITY_UNDERLINE'),23)
1138 					 ||LPAD(FND_MESSAGE.GET_STRING('OKL','OKL_GLP_RPT_AMT_LINE'),18));
1139 
1140 		IF l_asset_deprn_tbl.COUNT > 0 THEN
1141 		  FOR j IN l_asset_deprn_tbl.FIRST..l_asset_deprn_tbl.LAST
1142 		  LOOP
1143             IF SIGN(l_asset_deprn_tbl(j).deprn_amount) = -1 THEN
1144               FND_FILE.PUT_LINE(FND_FILE.OUTPUT,RPAD(l_asset_deprn_tbl(j).category_name,35)||
1145               RPAD(Okl_Accounting_Util.Get_Lookup_Meaning('OKL_ACCRUAL_ACTIVITY','NON-ACCRUAL'),23)||
1146               LPAD(ABS(l_asset_deprn_tbl(j).deprn_amount),18));
1147             ELSE
1148               FND_FILE.PUT_LINE(FND_FILE.OUTPUT,RPAD(l_asset_deprn_tbl(j).category_name,35)||
1149               RPAD(Okl_Accounting_Util.Get_Lookup_Meaning('OKL_ACCRUAL_ACTIVITY','ACCRUAL'),23)||
1150               LPAD(ABS(l_asset_deprn_tbl(j).deprn_amount),18));
1151 			END IF;
1152 		  END LOOP;
1153 		END IF;
1154 
1155         FND_FILE.PUT_LINE(FND_FILE.OUTPUT,'');
1156         FND_FILE.PUT_LINE(FND_FILE.OUTPUT,'');
1157         -- print reporting depreciation summary
1158         FND_FILE.PUT_LINE(FND_FILE.OUTPUT,FND_MESSAGE.GET_STRING('OKL','OKL_MGP_REPORT_DEPR_SUMRY'));
1159         FND_FILE.PUT_LINE(FND_FILE.OUTPUT,'');
1160         -- Create Report Content
1161         FND_FILE.PUT_LINE(FND_FILE.OUTPUT,FND_MESSAGE.GET_STRING('OKL','OKL_AGN_RPT_CURRENCY')||': '||l_currency_code);
1162         FND_FILE.PUT_LINE(FND_FILE.OUTPUT,RPAD(FND_MESSAGE.GET_STRING('OKL','OKL_ADA_RPT_AST_CAT_PROMPT'),35)
1163                      ||RPAD(FND_MESSAGE.GET_STRING('OKL','OKL_AGN_RPT_ACTIVITY'),23)
1164 					 ||LPAD(FND_MESSAGE.GET_STRING('OKL','OKL_GLP_RPT_AMT_TITLE'),18));
1165 
1166         FND_FILE.PUT_LINE(FND_FILE.OUTPUT,RPAD(FND_MESSAGE.GET_STRING('OKL','OKL_ADA_RPT_AST_CAT_UNDERLINE'),35)
1167                      ||RPAD(FND_MESSAGE.GET_STRING('OKL','OKL_ADA_RPT_ACTIVITY_UNDERLINE'),23)
1168 					 ||LPAD(FND_MESSAGE.GET_STRING('OKL','OKL_GLP_RPT_AMT_LINE'),18));
1169 
1170 		IF l_report_deprn_tbl.COUNT > 0 THEN
1171 		  FOR k IN l_report_deprn_tbl.FIRST..l_report_deprn_tbl.LAST
1172 		  LOOP
1173             IF SIGN(l_report_deprn_tbl(k).deprn_amount) = -1 THEN
1174               FND_FILE.PUT_LINE(FND_FILE.OUTPUT,RPAD(l_report_deprn_tbl(k).category_name,35)||
1175               RPAD(Okl_Accounting_Util.Get_Lookup_Meaning('OKL_ACCRUAL_ACTIVITY','NON-ACCRUAL'),23)||
1176               LPAD(ABS(l_report_deprn_tbl(k).deprn_amount),18));
1177             ELSE
1178               FND_FILE.PUT_LINE(FND_FILE.OUTPUT,RPAD(l_report_deprn_tbl(k).category_name,35)||
1179               RPAD(Okl_Accounting_Util.Get_Lookup_Meaning('OKL_ACCRUAL_ACTIVITY','ACCRUAL'),23)||
1180               LPAD(ABS(l_report_deprn_tbl(k).deprn_amount),18));
1181 			END IF;
1182 		  END LOOP;
1183 		END IF;
1184 
1185        FND_FILE.PUT_LINE(FND_FILE.OUTPUT,'');
1186        FND_FILE.PUT_LINE(FND_FILE.OUTPUT,FND_MESSAGE.GET_STRING('OKL','OKL_AGN_RPT_CNTRCT_ERROR_TITLE'));
1187        FND_FILE.PUT_LINE(FND_FILE.OUTPUT,FND_MESSAGE.GET_STRING('OKL','OKL_AGN_RPT_CNT_ERR_UNDERLINE'));
1188        IF l_contract_error_tbl.COUNT > 0 THEN
1189          FOR x IN l_contract_error_tbl.FIRST..l_contract_error_tbl.LAST
1190          LOOP
1191            FND_FILE.PUT_LINE(FND_FILE.OUTPUT,l_contract_error_tbl(x));
1192          END LOOP;
1193          FND_FILE.PUT_LINE(FND_FILE.OUTPUT,'');
1194          FND_FILE.PUT_LINE(FND_FILE.OUTPUT,FND_MESSAGE.GET_STRING('OKL','OKL_AGN_RPT_ADD_INFO'));
1195        END IF;
1196 
1197        retcode := 0;
1198        l_return_status := OKL_API.G_RET_STS_SUCCESS;
1199 
1200   EXCEPTION
1201     WHEN Okl_Api.G_EXCEPTION_ERROR THEN
1202       l_return_status := Okl_Api.G_RET_STS_ERROR;
1203 
1204       -- print the error message in the log file
1205       FND_FILE.PUT_LINE(FND_FILE.OUTPUT,'');
1206       FND_FILE.PUT_LINE(FND_FILE.OUTPUT,FND_MESSAGE.GET_STRING('OKL','OKL_AGN_RPT_PROGRAM_ERROR'));
1207       FND_FILE.PUT_LINE(FND_FILE.LOG,FND_MESSAGE.GET_STRING('OKL','OKL_AGN_RPT_PROGRAM_STATUS')
1208 	                    ||' '||l_return_status);
1209       Okl_Accounting_Util.GET_ERROR_MESSAGE(l_outer_error_msg_tbl);
1210       IF (l_outer_error_msg_tbl.COUNT > 0) THEN
1211         FOR i IN l_outer_error_msg_tbl.FIRST..l_outer_error_msg_tbl.LAST
1212         LOOP
1213           IF l_outer_error_msg_tbl(i) IS NOT NULL THEN
1214             FND_FILE.PUT_LINE(FND_FILE.LOG, l_outer_error_msg_tbl(i));
1215           END IF;
1216         END LOOP;
1217       END IF;
1218     retcode := 0;
1219 
1220     WHEN Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR THEN
1221       l_return_status := Okl_Api.G_RET_STS_UNEXP_ERROR;
1222 
1223       -- print the error message in the log file
1224       FND_FILE.PUT_LINE(FND_FILE.LOG,FND_MESSAGE.GET_STRING('OKL','OKL_AGN_RPT_PROGRAM_STATUS')
1225 	                    ||' '||l_return_status);
1226       Okl_Accounting_Util.GET_ERROR_MESSAGE(l_outer_error_msg_tbl);
1227         IF (l_outer_error_msg_tbl.COUNT > 0) THEN
1228           FOR i IN l_outer_error_msg_tbl.FIRST..l_outer_error_msg_tbl.LAST
1229           LOOP
1230             IF l_outer_error_msg_tbl(i) IS NOT NULL THEN
1231               FND_FILE.PUT_LINE(FND_FILE.LOG, l_outer_error_msg_tbl(i));
1232             END IF;
1233           END LOOP;
1234         END IF;
1235 
1236       retcode := 2;
1237 
1238     WHEN OTHERS THEN
1239 
1240       IF org_name_csr%ISOPEN THEN
1241         CLOSE org_name_csr;
1242       END IF;
1243 
1244       l_return_status := Okl_Api.G_RET_STS_UNEXP_ERROR;
1245 
1246       -- print the error message in the log file
1247       FND_FILE.PUT_LINE(FND_FILE.LOG,FND_MESSAGE.GET_STRING('OKL','OKL_AGN_RPT_PROGRAM_STATUS')
1248 	                    ||' '||l_return_status);
1249       Okl_Accounting_Util.GET_ERROR_MESSAGE(l_outer_error_msg_tbl);
1250         IF (l_outer_error_msg_tbl.COUNT > 0) THEN
1251           FOR i IN l_outer_error_msg_tbl.FIRST..l_outer_error_msg_tbl.LAST
1252           LOOP
1253             IF l_outer_error_msg_tbl(i) IS NOT NULL THEN
1254               FND_FILE.PUT_LINE(FND_FILE.LOG, l_outer_error_msg_tbl(i));
1255             END IF;
1256           END LOOP;
1257         END IF;
1258 
1259        errbuf := SQLERRM;
1260        retcode := 2;
1261 
1262 
1263   END MULTI_GAAP_SUPPORT;
1264 
1265 END OKL_MULTI_GAAP_PVT;