[Home] [Help]
PACKAGE BODY: APPS.OKL_ACCOUNT_DIST_PVT
Source
1 PACKAGE BODY OKL_ACCOUNT_DIST_PVT AS
2 /* $Header: OKLRTDTB.pls 120.32.12010000.6 2009/02/02 05:11:23 racheruv ship $ */
3
4 G_MODULE VARCHAR2(255) := 'okl.stream.esg.okl_esg_transport_pvt';
5 G_DEBUG_ENABLED CONSTANT VARCHAR2(10) := OKL_DEBUG_PUB.CHECK_LOG_ENABLED;
6 G_IS_DEBUG_STATEMENT_ON BOOLEAN;
7 -- Start of wraper code generated automatically by Debug code generator
8 L_MODULE VARCHAR2(40) := 'LEASE.ACCOUNTING.ENGINE';
9 L_DEBUG_ENABLED CONSTANT VARCHAR2(10) := OKL_DEBUG_PUB.CHECK_LOG_ENABLED;
10 L_LEVEL_PROCEDURE NUMBER;
11 IS_DEBUG_PROCEDURE_ON BOOLEAN;
12 -- End of wraper code generated automatically by Debug code generator
13
14 -- Gloabl variable to identify if the program is called from
15 -- Recevue Recognition Bug 3948354
16
17 G_REV_REC_FLAG VARCHAR2(1);
18 TYPE ID_TBL_TYPE IS TABLE OF NUMBER INDEX BY BINARY_INTEGER;
19
20 --Cursor to get the Account Derivation Option
21 CURSOR get_acct_derivation_csr
22 IS
23 SELECT ACCOUNT_DERIVATION
24 FROM okl_sys_acct_opts;
25
26 -- new table to cache the representation attributes.
27 -- Added by racheruv for MG uptake
28 g_ledger_tbl ledger_tbl_type;
29
30
31 -- Added by racheruv for MG uptake. Procedure gets the representation
32 -- and ledger details for OUs with sec rep method of 'Automated'. bug 8210595
33 PROCEDURE get_rep_attributes IS
34 CURSOR get_ledger_attrs
35 IS
36 select o.set_of_books_id ledger_id,
37 g.short_name rep_code,
38 'PRIMARY' rep_type
39 FROM okl_sys_acct_opts o,
40 gl_ledgers g
41 WHERE o.set_of_books_id = g.ledger_id
42 UNION ALL
43 select o.set_of_books_id ledger_id,
44 g.short_name rep_code,
45 'SECONDARY' rep_type
46 FROM okl_sys_acct_opts o,
47 okl_system_params_all s,
48 fa_book_controls f,
49 gl_ledgers g
50 WHERE o.org_id = s.org_id
51 AND s.RPT_PROD_BOOK_TYPE_CODE = f.book_type_code
52 AND f.set_of_books_id = g.ledger_id
53 AND o.secondary_rep_method = 'AUTOMATED';
54
55 ledger_rec get_ledger_attrs%ROWTYPE;
56
57 BEGIN
58 -- get the ledger attributes
59 OPEN get_ledger_attrs;
60 LOOP
61 FETCH get_ledger_attrs INTO ledger_rec;
62 EXIT WHEN get_ledger_attrs%NOTFOUND;
63 g_ledger_tbl(ledger_rec.ledger_id).ledger_id := ledger_rec.ledger_id;
64 g_ledger_tbl(ledger_rec.ledger_id).rep_code := ledger_rec.rep_code;
65 g_ledger_tbl(ledger_rec.ledger_id).rep_type := ledger_rec.rep_type;
66 END LOOP;
67
68 close get_ledger_attrs;
69
70 END get_rep_attributes;
71
72 -- Added by kthiruva on 25-May-2007 for bug 5707866 - SLA Uptake
73 -- The foreign key references available in the AE that are required by
74 -- the okl_sla_acct_sources api for populating sources are passed through
75 PROCEDURE POPULATE_ACCT_SOURCES(p_api_version IN NUMBER,
76 p_init_msg_list IN VARCHAR2,
77 x_return_status OUT NOCOPY VARCHAR2,
78 x_msg_count OUT NOCOPY NUMBER,
79 x_msg_data OUT NOCOPY VARCHAR2,
80 p_tmpl_identify_rec IN TMPL_IDENTIFY_REC_TYPE,
81 p_dist_info_rec IN DIST_INFO_REC_TYPE,
82 p_acc_gen_primary_key_tbl IN acc_gen_primary_key,
83 x_asev_rec OUT NOCOPY asev_rec_type)
84 IS
85
86 l_return_status VARCHAR2(1) := Okl_Api.G_RET_STS_SUCCESS;
87 l_api_name VARCHAR2(30) := 'POPULATE_ACCT_SOURCES';
88 l_api_version NUMBER := 1.0;
89
90 l_init_msg_list VARCHAR2(1) := Okl_Api.G_FALSE;
91 l_msg_count NUMBER := 0;
92 l_msg_data VARCHAR2(2000);
93
94
95 l_pay_vendor_sites_pk VARCHAR2(50);
96 l_rec_site_uses_pk VARCHAR2(50);
97 l_asset_category_id_pk1 VARCHAR2(50);
98 l_asset_book_pk2 VARCHAR2(50);
99 l_pay_financial_options_pk VARCHAR2(50);
100 l_jtf_sales_reps_pk VARCHAR2(50);
101 l_inventory_item_id_pk1 VARCHAR2(50);
102 l_inventory_org_id_pk2 VARCHAR2(50);
103 l_rec_trx_types_pk VARCHAR2(50);
104 l_factor_investor_code VARCHAR2(30);
105
106 l_asev_rec asev_rec_type;
107
108 BEGIN
109
110 x_return_status := Okl_Api.G_RET_STS_SUCCESS;
111
112 l_return_status := Okl_Api.START_ACTIVITY(l_api_name,
113 G_PKG_NAME,
114 p_init_msg_list,
115 l_api_version,
116 p_api_version,
117 '_PVT',
118 x_return_status);
119 IF (l_return_status = Okl_Api.G_RET_STS_UNEXP_ERROR) THEN
120 RAISE Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR;
121 ELSIF (l_return_status = Okl_Api.G_RET_STS_ERROR) THEN
122 RAISE Okl_Api.G_EXCEPTION_ERROR;
123 END IF;
124
125 -- Extract the account generator sources from account generator primary key table.
126 IF p_acc_gen_primary_key_tbl.COUNT > 0 THEN
127
128 FOR j IN p_acc_gen_primary_key_tbl.FIRST..p_acc_gen_primary_key_tbl.LAST LOOP
129
130 IF p_acc_gen_primary_key_tbl(j).source_table = 'AP_VENDOR_SITES_V' THEN
131 l_pay_vendor_sites_pk := TRIM(p_acc_gen_primary_key_tbl(j).primary_key_column);
132
133 ELSIF p_acc_gen_primary_key_tbl(j).source_table = 'AR_SITE_USES_V' THEN
134 l_rec_site_uses_pk := TRIM(p_acc_gen_primary_key_tbl(j).primary_key_column);
135
136 ELSIF p_acc_gen_primary_key_tbl(j).source_table = 'FA_CATEGORY_BOOKS' THEN
137 l_asset_category_id_pk1 := TRIM(SUBSTR(p_acc_gen_primary_key_tbl(j).primary_key_column,1, 50));
138 l_asset_book_pk2 := TRIM(SUBSTR(p_acc_gen_primary_key_tbl(j).primary_key_column,51, 100));
139
140 ELSIF p_acc_gen_primary_key_tbl(j).source_table = 'FINANCIALS_SYSTEM_PARAMETERS' THEN
141 l_pay_financial_options_pk := TRIM(p_acc_gen_primary_key_tbl(j).primary_key_column);
142
143 ELSIF p_acc_gen_primary_key_tbl(j).source_table = 'JTF_RS_SALESREPS_MO_V' THEN
144 l_jtf_sales_reps_pk := TRIM(p_acc_gen_primary_key_tbl(j).primary_key_column);
145
146 ELSIF p_acc_gen_primary_key_tbl(j).source_table = 'MTL_SYSTEM_ITEMS_VL' THEN
147 l_inventory_item_id_pk1 := TRIM(SUBSTR(p_acc_gen_primary_key_tbl(j).primary_key_column,1, 50));
148 l_inventory_org_id_pk2 := TRIM(SUBSTR(p_acc_gen_primary_key_tbl(j).primary_key_column,51, 100));
149
150 ELSIF p_acc_gen_primary_key_tbl(j).source_table = 'RA_CUST_TRX_TYPES' THEN
151 l_rec_trx_types_pk := TRIM(p_acc_gen_primary_key_tbl(j).primary_key_column);
152 END IF;
153
154 END LOOP;
155 END IF;
156
157 -- Get the syndication /Investor Code
158 IF p_tmpl_identify_rec.factoring_synd_flag = 'SYNDICATION' THEN
159 l_factor_investor_code := p_tmpl_identify_rec.syndication_code;
160 ELSIF p_tmpl_identify_rec.factoring_synd_flag = 'FACTORING' THEN
161 l_factor_investor_code := p_tmpl_identify_rec.factoring_code;
162 ELSIF p_tmpl_identify_rec.factoring_synd_flag = 'INVESTOR' THEN
163 l_factor_investor_code := p_tmpl_identify_rec.investor_code;
164 END IF;
165
166 --Populating the l_asev_rec
167 l_asev_rec.source_table := p_dist_info_rec.source_table; --source_table,
168 l_asev_rec.source_id := p_dist_info_rec.source_id; --source_id,
169 l_asev_rec.pdt_id := p_tmpl_identify_rec.product_id; --product_id,
170 l_asev_rec.try_id := p_tmpl_identify_rec.transaction_type_id; --trx_type_id,
171 l_asev_rec.memo_yn := NVL(p_tmpl_identify_rec.memo_yn, 'N'); --memo_yn,
172 l_asev_rec.factor_investor_flag := p_tmpl_identify_rec.factoring_synd_flag; --factor_investor_flag,
173 l_asev_rec.factor_investor_code := l_factor_investor_code; --factor_investor_code,
174 l_asev_rec.pay_vendor_sites_pk := l_pay_vendor_sites_pk; --pay_vendor_sites_pk,
175 l_asev_rec.rec_site_uses_pk := l_rec_site_uses_pk; --rec_site_uses_pk,
176 l_asev_rec.asset_category_id_pk1 := l_asset_category_id_pk1; --asset_categories_pk1,
177 l_asev_rec.asset_book_pk2 := l_asset_book_pk2; --asset_categories_pk2,
178 l_asev_rec.pay_financial_options_pk := l_pay_financial_options_pk; --pay_financial_options_pk,
179 l_asev_rec.jtf_sales_reps_pk := l_jtf_sales_reps_pk; --jtf_sales_reps_pk,
180 l_asev_rec.inventory_item_id_pk1 := l_inventory_item_id_pk1; --inventory_items_pk1,
181 l_asev_rec.inventory_org_id_pk2 := l_inventory_org_id_pk2; --inventory_items_pk2,
182 l_asev_rec.rec_trx_types_pk := l_rec_trx_types_pk; --rec_trx_types_pk,
183
184
185 x_asev_rec := l_asev_rec;
186 Okl_Api.END_ACTIVITY(x_msg_count, x_msg_data);
187
188 x_return_status := Okl_Api.G_RET_STS_SUCCESS;
189
190 EXCEPTION
191
192 WHEN Okl_Api.G_EXCEPTION_ERROR THEN
193 x_return_status := OKL_API.HANDLE_EXCEPTIONS
194 ( l_api_name,
195 G_PKG_NAME,
196 'OKL_API.G_RET_STS_ERROR',
197 x_msg_count,
198 x_msg_data,
199 '_PVT'
200 );
201 WHEN Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR THEN
202 x_return_status := OKL_API.HANDLE_EXCEPTIONS
203 ( l_api_name,
204 G_PKG_NAME,
205 'OKL_API.G_RET_STS_UNEXP_ERROR',
206 x_msg_count,
207 x_msg_data,
208 '_PVT'
209 );
210 WHEN OTHERS THEN
211 x_return_status := OKL_API.HANDLE_EXCEPTIONS
212 ( l_api_name,
213 G_PKG_NAME,
214 'OTHERS',
215 x_msg_count,
216 x_msg_data,
217 '_PVT'
218 );
219
220
221 END POPULATE_ACCT_SOURCES;
222
223
224 -- Added by Santonyr
225 -- Added this procedure to execute a query dynamically and populate the
226 -- template table. This returns the template table with the resulted rows.
227
228 PROCEDURE Execute_Tmpl_Query
229 (p_stmt IN VARCHAR2,
230 x_return_status OUT NOCOPY VARCHAR2,
231 x_template_tbl OUT NOCOPY AVLV_TBL_TYPE)
232 IS
233
234 TYPE ref_cursor IS REF CURSOR;
235 tmpl_csr ref_cursor;
236
237 tmpl_rec AVLV_REC_TYPE;
238 i NUMBER := 0;
239
240 BEGIN
241
242 x_return_status := OKL_API.G_RET_STS_SUCCESS;
243
244 OPEN tmpl_csr FOR p_stmt;
245 LOOP
246 FETCH tmpl_csr INTO
247 tmpl_rec.ID
248 ,tmpl_rec.NAME
249 ,tmpl_rec.SET_OF_BOOKS_ID
250 ,tmpl_rec.STY_ID
251 ,tmpl_rec.TRY_ID
252 ,tmpl_rec.AES_ID
253 ,tmpl_rec.SYT_CODE
254 ,tmpl_rec.FAC_CODE
255 ,tmpl_rec.FMA_ID
256 ,tmpl_rec.ADVANCE_ARREARS
257 ,tmpl_rec.POST_TO_GL
258 ,tmpl_rec.VERSION
259 ,tmpl_rec.START_DATE
260 ,tmpl_rec.OBJECT_VERSION_NUMBER
261 ,tmpl_rec.MEMO_YN
262 ,tmpl_rec.PRIOR_YEAR_YN
263 ,tmpl_rec.DESCRIPTION
264 ,tmpl_rec.FACTORING_SYND_FLAG
265 ,tmpl_rec.END_DATE
266 ,tmpl_rec.ACCRUAL_YN
267 ,tmpl_rec.ORG_ID
268 ,tmpl_rec.ATTRIBUTE_CATEGORY
269 ,tmpl_rec.ATTRIBUTE1
270 ,tmpl_rec.ATTRIBUTE2
271 ,tmpl_rec.ATTRIBUTE3
272 ,tmpl_rec.ATTRIBUTE4
273 ,tmpl_rec.ATTRIBUTE5
274 ,tmpl_rec.ATTRIBUTE6
275 ,tmpl_rec.ATTRIBUTE7
276 ,tmpl_rec.ATTRIBUTE8
277 ,tmpl_rec.ATTRIBUTE9
278 ,tmpl_rec.ATTRIBUTE10
279 ,tmpl_rec.ATTRIBUTE11
280 ,tmpl_rec.ATTRIBUTE12
281 ,tmpl_rec.ATTRIBUTE13
282 ,tmpl_rec.ATTRIBUTE14
283 ,tmpl_rec.ATTRIBUTE15
284 ,tmpl_rec.CREATED_BY
285 ,tmpl_rec.CREATION_DATE
286 ,tmpl_rec.LAST_UPDATED_BY
287 ,tmpl_rec.LAST_UPDATE_DATE
288 ,tmpl_rec.LAST_UPDATE_LOGIN
289 ,tmpl_rec.INV_CODE;
290
291 EXIT WHEN tmpl_csr%NOTFOUND;
292 i := i + 1;
293 x_template_tbl(i) := tmpl_rec;
294 END LOOP;
295 CLOSE tmpl_csr;
296
297
298 EXCEPTION
299 WHEN OTHERS THEN
300
301 IF tmpl_csr%ISOPEN THEN
302 CLOSE tmpl_csr;
303 END IF;
304 x_return_status := OKL_API.G_RET_STS_UNEXP_ERROR;
305 OKL_API.SET_MESSAGE(p_app_name => g_app_name
306 ,p_msg_name => g_unexpected_error
307 ,p_token1 => g_sqlcode_token
308 ,p_token1_value => SQLCODE
309 ,p_token2 => g_sqlerrm_token
310 ,p_token2_value => SQLERRM);
311
312 END execute_tmpl_query;
313
314
315 --- This procedure is used for getting templates based on the input parameters
316 ----p_validity_date is the date for which template is queried. The templates
317 --- satisfying the query criterias and valid on the p_validity_date will only be selected
318
319 PROCEDURE GET_TEMPLATE_INFO(p_api_version IN NUMBER,
320 p_init_msg_list IN VARCHAR2,
321 x_return_status OUT NOCOPY VARCHAR2,
322 x_msg_count OUT NOCOPY NUMBER,
323 x_msg_data OUT NOCOPY VARCHAR2,
324 p_tmpl_identify_rec IN TMPL_IDENTIFY_REC_TYPE,
325 x_template_tbl OUT NOCOPY AVLV_TBL_TYPE,
326 p_validity_date IN DATE DEFAULT SYSDATE)
327
328 IS
329
330
331 l_stmt VARCHAR2(5000);
332 l_stmt_exe VARCHAR2(5000);
333 l_where VARCHAR2(2000) := ' ';
334 l_where_memo_yn VARCHAR2(1000) :=' ';
335 l_where_flag_code VARCHAR2(1000) := ' ';
336 l_where_flag VARCHAR2(1000) := ' ';
337 l_where_no_flag VARCHAR2(1000) := ' ';
338 l_where_exe VARCHAR2(4000) := ' ';
339 l_inner_query VARCHAR2(2000);
340 l_aes_id NUMBER;
341
342 i NUMBER := 0;
343
344 l_product_id NUMBER := P_TMPL_IDENTIFY_REC.PRODUCT_ID;
345 l_transaction_type_id NUMBER := P_TMPL_IDENTIFY_REC.TRANSACTION_TYPE_ID;
346 l_stream_type_id NUMBER := P_TMPL_IDENTIFY_REC.STREAM_TYPE_ID;
347 l_advance_arrears OKL_AE_TEMPLATES.ADVANCE_ARREARS%TYPE
348 := P_TMPL_IDENTIFY_REC.advance_arrears;
349 l_factoring_synd_flag OKL_AE_TEMPLATES.FACTORING_SYND_FLAG%TYPE
350 := P_TMPL_IDENTIFY_REC.FACTORING_SYND_FLAG;
351 l_syndication_code OKL_AE_TEMPLATES.SYT_CODE%TYPE
352 := P_TMPL_IDENTIFY_REC.SYNDICATION_CODE;
353 l_factoring_code OKL_AE_TEMPLATES.FAC_CODE%TYPE
354 := P_TMPL_IDENTIFY_REC.FACTORING_CODE;
355 l_investor_code OKL_AE_TEMPLATES.INV_CODE%TYPE
356 := P_TMPL_IDENTIFY_REC.INVESTOR_CODE;
357 l_memo_yn OKL_AE_TEMPLATES.MEMO_YN%TYPE := P_TMPL_IDENTIFY_REC.MEMO_YN;
358 l_prior_year_yn OKL_AE_TEMPLATES.PRIOR_YEAR_YN%TYPE := P_TMPL_IDENTIFY_REC.PRIOR_YEAR_YN;
359 l_return_status VARCHAR2(1) := OKL_API.G_RET_STS_SUCCESS;
360
361 -- Bug 3948354
362
363 l_rev_rec_flag VARCHAR2(1) := NVL(P_TMPL_IDENTIFY_REC.REV_REC_FLAG, 'N');
364
365 CURSOR prod_csr(v_prod_id NUMBER) IS
366 SELECT aes_id
367 FROM OKL_PRODUCTS_V
368 WHERE ID = v_prod_id;
369
370 BEGIN
371 IF (G_DEBUG_ENABLED = 'Y') THEN
372 G_IS_DEBUG_STATEMENT_ON := OKL_DEBUG_PUB.CHECK_LOG_ON(G_MODULE, FND_LOG.LEVEL_STATEMENT);
373 END IF;
374
375 x_return_status := OKL_API.G_RET_STS_SUCCESS;
376
377 -- Check if the Product ID is null
378 IF (p_tmpl_identify_rec.PRODUCT_ID = OKL_API.G_MISS_NUM) OR
379 (p_tmpl_identify_rec.PRODUCT_ID IS NULL) THEN
380 OKL_API.set_message(G_APP_NAME, G_REQUIRED_VALUE,G_COL_NAME_TOKEN,'Product ID');
381 RAISE OKL_API.G_EXCEPTION_ERROR;
382 END IF;
383
384 -- Check if the Transaction type is null
385 IF (p_tmpl_identify_rec.TRANSACTION_TYPE_ID = OKL_API.G_MISS_NUM) OR
386 (p_tmpl_identify_rec.TRANSACTION_TYPE_ID IS NULL) THEN
387 OKL_API.set_message(G_APP_NAME, G_REQUIRED_VALUE,G_COL_NAME_TOKEN,'Transaction Type ID');
388 RAISE OKL_API.G_EXCEPTION_ERROR;
389 END IF;
390
391
392 -- Form the select statement to query the template info
393
394 l_stmt := ' SELECT ID
395 ,NAME
396 ,SET_OF_BOOKS_ID
397 ,STY_ID
398 ,TRY_ID
399 ,AES_ID
400 ,SYT_CODE
401 ,FAC_CODE
402 ,FMA_ID
403 ,ADVANCE_ARREARS
404 ,POST_TO_GL
405 ,VERSION
406 ,START_DATE
407 ,OBJECT_VERSION_NUMBER
408 ,MEMO_YN
409 ,PRIOR_YEAR_YN
410 ,DESCRIPTION
411 ,FACTORING_SYND_FLAG
412 ,END_DATE
413 ,ACCRUAL_YN
414 ,ORG_ID
415 ,ATTRIBUTE_CATEGORY
416 ,ATTRIBUTE1
417 ,ATTRIBUTE2
418 ,ATTRIBUTE3
419 ,ATTRIBUTE4
420 ,ATTRIBUTE5
421 ,ATTRIBUTE6
422 ,ATTRIBUTE7
423 ,ATTRIBUTE8
424 ,ATTRIBUTE9
425 ,ATTRIBUTE10
426 ,ATTRIBUTE11
427 ,ATTRIBUTE12
428 ,ATTRIBUTE13
429 ,ATTRIBUTE14
430 ,ATTRIBUTE15
431 ,CREATED_BY
432 ,CREATION_DATE
433 ,LAST_UPDATED_BY
434 ,LAST_UPDATE_DATE
435 ,LAST_UPDATE_LOGIN
436 ,INV_CODE
437 FROM OKL_AE_TEMPLATES A WHERE 1 = 1 ';
438
439
440 OPEN prod_csr(l_product_id);
441 FETCH prod_csr INTO l_aes_id ;
442 CLOSE prod_csr;
443
444 -- Add aes_id to the where condition if aes_id is not null
445
446 IF (l_aes_id IS NOT NULL) THEN
447 l_where := l_where || ' AND aes_id = ' || l_aes_id || ' ';
448 END IF;
449
450 -- Add l_stream_type_id to the where condition if l_stream_type_id is not null
451 IF (l_stream_type_id IS NOT NULL) AND
452 (l_stream_type_id <> OKL_API.G_MISS_NUM) THEN
453 l_where := l_where || ' AND sty_id = ' || l_stream_type_id || ' ';
454 END IF;
455
456 -- Add l_transaction_type_id to the where condition if l_transaction_type_id is not null
457 IF (l_transaction_type_id IS NOT NULL) AND
458 (l_transaction_type_id <> OKL_API.G_MISS_NUM) THEN
459 l_where := l_where || ' AND try_id = ' || l_transaction_type_id || ' ';
460 END IF;
461
462 -- Following lines commented by Kanti. Bug 2467318
463
464 -- IF (l_advance_arrears IS NOT NULL) AND
465 -- (l_advance_arrears <> OKL_API.G_MISS_CHAR) THEN
466 -- l_where := l_where || ' AND advance_arrears = ' || '''' || l_advance_arrears || '''' || ' ';
467 -- ELSIF (l_advance_arrears IS NULL) THEN
468 -- l_where := l_where || ' AND advance_arrears IS NULL ';
469 -- END IF;
470
471 -- Following lines commented by Kanti. Bug 2467318
472 -- IF (l_prior_year_yn IS NOT NULL) AND
473 -- (l_prior_year_yn <> OKL_API.G_MISS_CHAR) THEN
474 -- l_where := l_where || ' AND prior_year_yn = ' || '''' || l_prior_year_yn || '''' || ' ';
475 -- END IF;
476
477
478 -- Bug 3948354
479 -- If AE is called from Revenue Recognition program, it does not use
480 -- memo flag to identify the templates.
481
482 IF l_rev_rec_flag = 'N' THEN
483
484 -- Changed by kthiruva 26-Sep-2003 for Bug 3162340
485 -- If the memo_yn field is NULL or G_MISS_CHAR then the value passed is 'N' else the actual
486 -- value is passed to the where clause to identify the templates.
487
488 IF (l_memo_yn IS NULL) OR
489 (l_memo_yn = OKL_API.G_MISS_CHAR) THEN
490 l_memo_yn := 'N';
491 l_where_memo_yn := l_where_memo_yn || ' AND memo_yn = ' || '''' || l_memo_yn || '''' || ' ';
492 ELSE
493 l_where_memo_yn := l_where_memo_yn || ' AND memo_yn = ' || '''' || l_memo_yn || '''' || ' ';
494 END IF;
495
496 -- Bug 3948354
497 ELSE
498 l_where_memo_yn := ' ';
499 END IF;
500
501
502
503
504 l_where := l_where || ' AND trunc(start_date) <= ' || '''' || trunc(p_validity_date) || '''';
505 l_where := l_where || ' AND (trunc(end_date) >= ' || '''' || trunc(p_validity_date) || '''';
506 l_where := l_where || ' OR end_date IS NULL )' ;
507
508
509 IF (l_factoring_synd_flag IS NOT NULL) AND
510 (l_factoring_synd_flag <> OKL_API.G_MISS_CHAR) THEN
511 l_where_flag_code := l_where_flag_code || ' AND factoring_synd_flag = '
512 || '''' || l_factoring_synd_flag || '''' || ' ';
513 ELSIF (l_factoring_synd_flag IS NULL) THEN
514 l_where_flag_code := l_where_flag_code || ' AND factoring_synd_flag IS NULL ';
515 END IF;
516
517
518 -- Add l_syndication_code to the where condition if l_syndication_code is not null
519 IF (l_syndication_code IS NOT NULL) AND
520 (l_syndication_code <> OKL_API.G_MISS_CHAR) THEN
521 l_where_flag_code := l_where_flag_code || ' AND syt_code = '
522 || '''' || l_syndication_code || '''' || ' ';
523 ELSIF (l_syndication_code IS NULL) THEN
524 l_where_flag_code := l_where_flag_code || ' AND syt_code IS NULL ';
525 END IF;
526
527 -- Add l_factoring_code to the where condition if l_factoring_code is not null
528 IF (l_factoring_code IS NOT NULL) AND
529 (l_factoring_code <> OKL_API.G_MISS_CHAR) THEN
530 l_where_flag_code := l_where_flag_code || ' AND fac_code = '
531 || '''' || l_factoring_code || '''' || ' ';
532 ELSIF (l_factoring_code IS NULL) THEN
533 l_where_flag_code := l_where_flag_code || ' AND fac_code IS NULL ';
534 END IF;
535
536 -- Add l_factoring_code to the where condition if l_factoring_code is not null
537 IF (l_investor_code IS NOT NULL) AND
538 (l_investor_code <> OKL_API.G_MISS_CHAR) THEN
539 l_where_flag_code := l_where_flag_code || ' AND inv_code = '
540 || '''' || l_investor_code || '''' || ' ';
541 ELSIF (l_investor_code IS NULL) THEN
542 l_where_flag_code := l_where_flag_code || ' AND inv_code IS NULL ';
543 END IF;
544
545 -- Execute the complete select statement
546 l_stmt_exe := l_stmt || l_where ||l_where_memo_yn || l_where_flag_code ;
547 IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
548 OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'The statement executed for fetching the Template Information is :');
549 OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,l_stmt_exe);
550 END IF;
551
552 execute_tmpl_query(p_stmt => l_stmt_exe,
553 x_return_status => l_return_status,
554 x_template_tbl => x_template_tbl);
555
556 IF l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR THEN
557 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
558 END IF;
559
560
561 IF (l_factoring_synd_flag IS NOT NULL) AND
562 (l_factoring_synd_flag <> OKL_API.G_MISS_CHAR) THEN
563 l_where_flag := l_where_flag || ' AND factoring_synd_flag = '
564 || '''' || l_factoring_synd_flag || '''' || ' ';
565 l_where_flag := l_where_flag || ' AND syt_code IS NULL AND fac_code '
566 || ' IS NULL AND inv_code IS NULL ';
567 END IF;
568
569 -- Execute the select statement with syndication flag only
570
571 IF x_template_tbl.COUNT = 0 THEN
572 l_stmt_exe := l_stmt || l_where ||l_where_memo_yn|| l_where_flag ;
573 IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
574 OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'The statement executed for fetching the Template Information is :');
575 OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,l_stmt_exe);
576 END IF;
577
578 execute_tmpl_query(p_stmt => l_stmt_exe,
579 x_return_status => l_return_status,
580 x_template_tbl => x_template_tbl);
581 END IF;
582
583 IF l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR THEN
584 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
585 END IF;
586
587 l_where_no_flag := ' AND factoring_synd_flag IS NULL AND syt_code IS NULL AND fac_code '
588 || ' IS NULL AND inv_code IS NULL ';
589
590 -- Execute the select statement with out syndication flag and code
591
592 IF x_template_tbl.COUNT = 0 THEN
593 l_stmt_exe := l_stmt || l_where ||l_where_memo_yn|| l_where_no_flag;
594
595 IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
596 OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'The statement executed for fetching the Template Information is :');
597 OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,l_stmt_exe);
598 END IF;
599
600 execute_tmpl_query(p_stmt => l_stmt_exe,
601 x_return_status => l_return_status,
602 x_template_tbl => x_template_tbl);
603 END IF;
604
605 IF l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR THEN
606 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
607 END IF;
608
609
610 -- Bug 3948354
611 -- If AE is called from Revenue Recognition program, it does not use
612 -- memo flag to identify the templates.
613
614 IF l_rev_rec_flag = 'N' THEN
615
616
617 --Added by kthiruva 25-Sep-2003 for Bug 3162340
618 -- IF memo_yn = 'Y' does not fetch any templates then execute the query again for memo_yn = 'N'
619
620 IF x_template_tbl.COUNT = 0 THEN
621 IF l_memo_yn = 'Y' THEN
622 l_where_memo_yn := ' ';
623 l_memo_yn := 'N';
624 l_where_memo_yn := l_where_memo_yn || ' AND memo_yn = ' || '''' || l_memo_yn || '''' || ' ';
625
626
627 -- Execute the complete select statement
628 l_stmt_exe := l_stmt || l_where ||l_where_memo_yn || l_where_flag_code ;
629 IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
630 OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'The statement executed for fetching the Template Information is :');
631 OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,l_stmt_exe);
632 END IF;
633
634 execute_tmpl_query(p_stmt => l_stmt_exe,
635 x_return_status => l_return_status,
636 x_template_tbl => x_template_tbl);
637
638 IF l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR THEN
639 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
640 END IF;
641
642 -- Execute the select statement with syndication flag only
643
644 IF x_template_tbl.COUNT = 0 THEN
645 l_stmt_exe := l_stmt || l_where ||l_where_memo_yn|| l_where_flag ;
646 IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
647 OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'The statement executed for fetching the Template Information is :');
648 OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,l_stmt_exe);
649 END IF;
650
651 execute_tmpl_query(p_stmt => l_stmt_exe,
652 x_return_status => l_return_status,
653 x_template_tbl => x_template_tbl);
654 END IF;
655
656 IF l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR THEN
657 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
658 END IF;
659
660 -- Execute the select statement with out syndication flag and code
661
662 IF x_template_tbl.COUNT = 0 THEN
663 l_stmt_exe := l_stmt || l_where ||l_where_memo_yn|| l_where_no_flag;
664 IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
665 OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'The statement executed for fetching the Template Information is :');
666 OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,l_stmt_exe);
667 END IF;
668
669 execute_tmpl_query(p_stmt => l_stmt_exe,
670 x_return_status => l_return_status,
671 x_template_tbl => x_template_tbl);
672 END IF;
673
674 IF l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR THEN
675 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
676 END IF;
677
678 END IF;
679 END IF;
680 END IF;
681
682
683 EXCEPTION
684
685 WHEN OKL_API.G_EXCEPTION_ERROR THEN
686 x_return_status := OKL_API.G_RET_STS_ERROR;
687
688 WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
689 x_return_status := OKL_API.G_RET_STS_UNEXP_ERROR;
690
691 WHEN OTHERS THEN
692 x_return_status := OKL_API.G_RET_STS_UNEXP_ERROR;
693 OKL_API.SET_MESSAGE(p_app_name => g_app_name
694 ,p_msg_name => g_unexpected_error
695 ,p_token1 => g_sqlcode_token
696 ,p_token1_value => SQLCODE
697 ,p_token2 => g_sqlerrm_token
698 ,p_token2_value => SQLERRM);
699
700 END get_template_info;
701
702
703
704
705 PROCEDURE EXECUTE_FORMULA(p_avlv_rec IN avlv_rec_type,
706 p_contract_id IN NUMBER,
707 p_contract_line_id IN NUMBER,
708 p_ctxt_val_tbl IN ctxt_val_tbl_type,
709 x_return_status OUT NOCOPY VARCHAR2,
710 x_amount OUT NOCOPY NUMBER)
711 IS
712
713 l_init_msg_list VARCHAR2(1) := OKL_API.G_FALSE;
714 l_return_status VARCHAR2(1) := OKL_API.G_RET_STS_SUCCESS;
715 l_msg_count NUMBER := 0;
716 l_msg_data VARCHAR2(2000);
717 l_formula_name OKL_FORMULAE_V.NAME%TYPE;
718
719 CURSOR frml_csr(v_id NUMBER) IS
720 SELECT name
721 FROM okl_formulae_v
722 WHERE id = v_id;
723
724 BEGIN
725
726 -- Get the formula name associates with the template
727
728 OPEN frml_csr(p_avlv_rec.fma_id);
729 FETCH frml_csr INTO l_formula_name;
730 CLOSE frml_csr;
731
732 -- Make a call to formula engine to execute the formula
733
734 -- Formula Engine has to return the currency code.. Code will be added soon
735
736 -- Start of wraper code generated automatically by Debug code generator for Okl_Execute_Formula_Pub.EXECUTE
737 IF(L_DEBUG_ENABLED='Y') THEN
738 L_LEVEL_PROCEDURE :=FND_LOG.LEVEL_PROCEDURE;
739 IS_DEBUG_PROCEDURE_ON := OKL_DEBUG_PUB.Check_Log_On(L_MODULE, L_LEVEL_PROCEDURE);
740 END IF;
741 IF(IS_DEBUG_PROCEDURE_ON) THEN
742 BEGIN
743 OKL_DEBUG_PUB.LOG_DEBUG(L_LEVEL_PROCEDURE,L_MODULE,'Begin Debug OKLRTDTB.pls call Okl_Execute_Formula_Pub.EXECUTE ');
744 END;
745 END IF;
746
747 Okl_Execute_Formula_Pub.EXECUTE(p_api_version => 1.0
748 ,p_init_msg_list => l_init_msg_list
749 ,x_return_status => l_return_status
750 ,x_msg_count => l_msg_count
751 ,x_msg_data => l_msg_data
752 ,p_formula_name => l_formula_name
753 ,p_contract_id => p_contract_id
754 ,p_line_id => p_contract_line_id
755 ,p_additional_parameters => p_ctxt_val_tbl
756 ,x_value => x_amount);
757
758 IF(IS_DEBUG_PROCEDURE_ON) THEN
759 BEGIN
760 OKL_DEBUG_PUB.LOG_DEBUG(L_LEVEL_PROCEDURE,L_MODULE,'End Debug OKLRTDTB.pls call Okl_Execute_Formula_Pub.EXECUTE ');
761 END;
762 END IF;
763 -- End of wraper code generated automatically by Debug code generator for Okl_Execute_Formula_Pub.EXECUTE
764
765 x_return_status := l_return_status;
766
767 EXCEPTION
768
769 WHEN OTHERS THEN
770 OKL_API.SET_MESSAGE(p_app_name => g_app_name
771 ,p_msg_name => g_unexpected_error
772 ,p_token1 => g_sqlcode_token
773 ,p_token1_value => SQLCODE
774 ,p_token2 => g_sqlerrm_token
775 ,p_token2_value => SQLERRM);
776
777 x_return_status := OKL_API.G_RET_STS_UNEXP_ERROR;
778
779 END EXECUTE_FORMULA;
780
781
782 FUNCTION CHECK_DIST(p_source_id IN NUMBER,
783 p_source_table IN VARCHAR2)
784 RETURN NUMBER
785
786
787 IS
788
789 l_posted_yn VARCHAR2(1);
790 l_gl_transfer_flag VARCHAR2(1);
791
792 CURSOR dist_csr(v_source_id NUMBER,
793 v_source_table VARCHAR2) IS
794 SELECT POSTED_YN
795 FROM OKL_TRNS_ACC_DSTRS
796 WHERE source_id = v_source_id
797 AND source_table = v_source_table;
798
799
800 CURSOR aeh_csr(v_source_id NUMBER,
801 v_source_table VARCHAR2) IS
802
803 SELECT gl_transfer_flag
804 FROM OKL_AE_HEADERS aeh, OKL_ACCOUNTING_EVENTS aet
805 WHERE aeh.accounting_event_id = aet.accounting_event_id
806 AND aet.source_id = v_source_id
807 AND aet.source_table = v_source_table;
808
809 BEGIN
810
811 OPEN dist_csr(p_source_id, p_source_table);
812 FETCH dist_csr INTO l_posted_yn;
813 IF (dist_csr%NOTFOUND) THEN
814 CLOSE dist_csr;
815 RETURN 0;
816 END IF;
817 CLOSE dist_csr;
818
819 IF (l_posted_yn = 'N') THEN
820 RETURN 1;
821 ELSIF (l_posted_yn = 'Y') THEN
822 OPEN aeh_csr(p_source_id, p_source_table);
823 FETCH aeh_csr INTO l_gl_transfer_flag;
824 CLOSE aeh_csr;
825 IF (l_gl_transfer_flag <> 'N') THEN
826 RETURN 3;
827 ELSE
828 RETURN 2;
829 END IF;
830 END IF;
831 END CHECK_DIST;
832
833
834 --This function is used to check the status of the Journal Creation
835 -- status = 0 denotes that there are no distributions existing in OKL for the source_id, source_table combination
836 -- status = 1 denotes that the distributions in OKL exist, but journals have not yet been created in SLA
837 -- status = 2 denotes that the distributions exist in OKL , and journals have been created in SLA
838
839 FUNCTION check_journal(p_source_id IN NUMBER,
840 p_source_table IN VARCHAR2)
841 RETURN NUMBER
842 IS
843
844 --Added by kthiruva on 02-Jul-2007
845 --Bug 6154785 - Start of Changes
846 CURSOR posted_yn_csr(v_source_id NUMBER,
847 v_source_table VARCHAR2) IS
848 SELECT POSTED_YN
849 FROM OKL_TRNS_ACC_DSTRS
850 WHERE source_id = v_source_id
851 AND source_table = v_source_table;
852 --Bug 6154785 - End of Changes
853
854 CURSOR dist_csr(v_source_id NUMBER,
855 v_source_table VARCHAR2) IS
856 SELECT distinct xle.event_status_code
857 FROM OKL_TRNS_ACC_DSTRS dist,
858 XLA_EVENTS xle
859 WHERE dist.SOURCE_ID = v_source_id
860 AND dist.SOURCE_TABLE = v_source_table
861 AND dist.accounting_event_id = xle.event_id;
862
863 l_status VARCHAR2(1);
864 l_posted_yn VARCHAR2(1);
865
866 BEGIN
867
868 OPEN posted_yn_csr(p_source_id, p_source_table);
869 FETCH posted_yn_csr INTO l_posted_yn;
870 IF (posted_yn_csr%NOTFOUND) THEN
871 CLOSE posted_yn_csr;
872 RETURN 0;
873 END IF;
874 CLOSE posted_yn_csr;
875
876 --For Billing/Disbursement transactions the posted_yn flag will be N as they need not be posted to GL
877 IF (l_posted_yn = 'N') THEN
878 RETURN 1;
879 ELSE
880 --Transaction is an OKL transaction.Check if its already created in SLA or not
881 OPEN dist_csr(p_source_id, p_source_table);
882 FETCH dist_csr INTO l_status;
883 IF (dist_csr%NOTFOUND) THEN
884 CLOSE dist_csr;
885 RETURN 0 ;
886 END IF;
887 CLOSE dist_csr;
888
889 IF (l_status IN ('I','U')) THEN
890 RETURN 1;
891 ELSE
892 RETURN 2;
893 END IF;
894 END IF;
895
896 END check_journal;
897
898
899 PROCEDURE CREATE_DIST_RECS(p_avlv_rec IN AVLV_REC_TYPE,
900 p_tmpl_identify_rec IN TMPL_IDENTIFY_REC_TYPE,
901 p_dist_info_rec IN DIST_INFO_REC_TYPE,
902 p_amount IN NUMBER,
903 p_gen_table IN acc_gen_primary_key,
904 x_return_status OUT NOCOPY VARCHAR2,
905 x_tabv_tbl OUT NOCOPY TABV_TBL_TYPE)
906 IS
907 -- Changed by Santonyr on 22-Sep-2004 to fix bug 3901209.
908 -- Selecting Template Line ID also in the cursor.
909
910 CURSOR atl_csr(v_avl_id NUMBER) IS
911 SELECT ID,
912 CODE_COMBINATION_ID
913 ,AE_LINE_TYPE
914 ,CRD_CODE
915 ,ACCOUNT_BUILDER_YN
916 ,PERCENTAGE
917 FROM OKL_AE_TMPT_LNES
918 WHERE avl_id = v_avl_id;
919
920 l_atl_rec atl_csr%ROWTYPE;
921 l_rowcount NUMBER := 0;
922
923 CURSOR sao_csr IS
924 SELECT rounding_ccid
925 ,cc_apply_rounding_difference
926 ,ael_apply_rounding_difference
927 FROM OKL_SYS_ACCT_OPTS;
928
929 CURSOR sob_csr (v_set_of_books_id NUMBER) IS
930 SELECT ROUNDING_CCID rounding_code_combination_id
931 FROM GL_LEDGERS_PUBLIC_V
932 WHERE ledger_id = v_set_of_books_id;
933
934 l_tabv_tbl tabv_tbl_type ;
935 l_tabv_tbl_out tabv_tbl_type ;
936 i NUMBER := 0;
937 l_rate NUMBER := 0;
938 l_currency_conversion_rate NUMBER := 0;
939 l_acc_amount NUMBER := 0;
940 l_total_amount NUMBER := 0;
941 l_acc_total_amount NUMBER := 0;
942 l_amount NUMBER := 0;
943 l_dr_total NUMBER := 0;
944 l_cr_total NUMBER := 0;
945 l_dr_diff NUMBER := 0;
946 l_cr_diff NUMBER := 0;
947 l_acc_dr_diff NUMBER := 0;
948 l_acc_cr_diff NUMBER := 0;
949 l_acc_dr_total NUMBER := 0;
950 l_acc_cr_total NUMBER := 0;
951
952 l_slice_amount NUMBER := 0;
953 --Added by dpsingh for Bug:5082565(H)
954 l_highest_amount_cr NUMBER := OKL_API.G_MISS_NUM;
955 l_highest_amount_dr NUMBER := OKL_API.G_MISS_NUM;
956 --end dpsingh
957 l_lowest_amount_cr NUMBER := OKL_API.G_MISS_NUM;
958 l_lowest_amount_dr NUMBER := OKL_API.G_MISS_NUM;
959 l_lowest_index_cr NUMBER := 0;
960 l_lowest_index_dr NUMBER := 0;
961 l_highest_index_cr NUMBER := 0;
962 l_highest_index_dr NUMBER := 0;
963 l_rounding_ccid NUMBER := 0;
964 l_functional_curr OKL_TRNS_ACC_DSTRS.CURRENCY_CODE%TYPE;
965 l_formula_curr OKL_TRNS_ACC_DSTRS.CURRENCY_CODE%TYPE;
966 l_passed_curr OKL_TRNS_ACC_DSTRS.CURRENCY_CODE%TYPE;
967 l_cc_apply_rounding_diff OKL_SYS_ACCT_OPTS.CC_APPLY_ROUNDING_DIFFERENCE%TYPE;
968 l_ael_apply_rounding_diff OKL_SYS_ACCT_OPTS.AEL_APPLY_ROUNDING_DIFFERENCE%TYPE;
969
970 l_api_version NUMBER := 1.0;
971 l_init_msg_list VARCHAR2(1) := OKL_API.G_FALSE;
972 l_msg_count NUMBER := 0;
973 l_msg_data VARCHAR2(2000);
974 l_return_status VARCHAR2(1) := OKL_API.G_RET_STS_SUCCESS;
975 l_set_of_books_id NUMBER;
976 l_acc_gen_wf_sources_rec acc_gen_wf_sources_rec;
977
978 BEGIN
979 IF (G_DEBUG_ENABLED = 'Y') THEN
980 G_IS_DEBUG_STATEMENT_ON := OKL_DEBUG_PUB.CHECK_LOG_ON(G_MODULE, FND_LOG.LEVEL_STATEMENT);
981 END IF;
982
983 IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
984 OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'Inside the procedure CREATE_DIST_RECS');
985 END IF;
986
987 -- get the below details based on the representation .. MG uptake
988 IF nvl(g_representation_type, 'PRIMARY') = 'PRIMARY' THEN
989 l_functional_curr := Okl_Accounting_Util.get_func_curr_code;
990 l_set_of_books_id := OKL_ACCOUNTING_UTIL.GET_SET_OF_BOOKS_ID;
991 ELSE
992 l_functional_curr := Okl_Accounting_Util.get_func_curr_code(g_ledger_id);
993 l_set_of_books_id := g_ledger_id;
994 END IF;
995
996 OPEN sao_csr;
997 FETCH sao_csr INTO l_rounding_ccid,
998 l_cc_apply_rounding_diff,
999 l_ael_apply_rounding_diff;
1000 CLOSE sao_csr;
1001 IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
1002 OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'The values returned by sao_csr are: ');
1003 OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'l_rounding_ccid :'||l_rounding_ccid);
1004 OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'l_cc_apply_rounding_diff :'||l_cc_apply_rounding_diff);
1005 OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'l_ael_apply_rounding_diff :'||l_ael_apply_rounding_diff);
1006 END IF;
1007
1008 -- The following three lines of code to be removed once we start populating rounding CCID in
1009 -- OKL_SYS_ACCT_OPTS table. Starts Here ****
1010
1011 OPEN sob_csr(l_set_of_books_id);
1012 FETCH sob_csr INTO l_rounding_ccid;
1013 CLOSE sob_csr;
1014
1015 --- Ends Here *****
1016
1017 -- Santonyr Commented out on 18-Nov-2002
1018 -- Multi Currency Changes
1019
1020 /*
1021 IF (l_passed_curr <> l_functional_curr) THEN
1022 l_rate := Okl_Accounting_Util.get_curr_con_rate
1023 (p_from_curr_code => l_passed_curr,
1024 p_to_curr_code => l_functional_curr,
1025 p_con_date => p_dist_info_rec.currency_conversion_date,
1026 p_con_type => p_dist_info_rec.currency_conversion_type);
1027 IF (l_rate = 0) THEN
1028 OKL_API.SET_MESSAGE(p_app_name => g_app_name,
1029 p_msg_name => 'OKL_CONV_RATE_NOT_FOUND');
1030 x_return_status := OKL_API.G_RET_STS_ERROR;
1031 RAISE OKL_API.G_EXCEPTION_ERROR;
1032 END IF;
1033 ELSE
1034 l_rate := 1;
1035 END IF;
1036 */
1037
1038 -- Santonyr Changed on 18-Nov-2002
1039 -- Multi Currency Changes
1040 -- Accounting Engine assumes the transaction is on functional currency if not passed
1041
1042 IF (p_dist_info_rec.currency_code IS NOT NULL) AND
1043 (p_dist_info_rec.currency_code <> OKL_API.G_MISS_CHAR) THEN
1044 l_passed_curr := p_dist_info_rec.currency_code;
1045 ELSE
1046 l_passed_curr := l_functional_curr;
1047 END IF;
1048
1049 -- Santonyr Changed on 18-Nov-2002
1050 -- Multi Currency Changes
1051 -- The Conversion rate is 1 if both transaction and functional currencies are same. Else
1052 -- Use the currency passed.
1053
1054 IF (l_passed_curr = l_functional_curr) THEN
1055 l_rate := 1;
1056 l_currency_conversion_rate := NULL;
1057 ELSE
1058 l_rate := p_dist_info_rec.currency_conversion_rate;
1059 l_currency_conversion_rate := p_dist_info_rec.currency_conversion_rate;
1060 END IF;
1061
1062
1063 -- Changed by Santonyr on 18th Jun, 2003 to fix the bug 3012735
1064 -- Rounding the amounts before processing
1065
1066 l_total_amount := Okl_Accounting_Util.ROUND_AMOUNT
1067 (p_amount => p_amount,
1068 p_currency_code => l_passed_curr);
1069
1070 l_acc_total_amount := Okl_Accounting_Util.ROUND_AMOUNT
1071 (p_amount => l_total_amount * l_rate,
1072 p_currency_code => l_functional_curr);
1073
1074 -- Check to see that Template has at least two lines
1075 OPEN atl_csr(p_avlv_rec.ID);
1076 LOOP
1077 FETCH atl_csr INTO l_atl_rec;
1078 l_rowcount := atl_csr%ROWCOUNT;
1079 EXIT WHEN atl_csr%NOTFOUND;
1080 END LOOP;
1081 CLOSE atl_csr;
1082
1083 IF (l_rowcount < 2) THEN
1084 OKL_API.SET_MESSAGE(p_app_name => g_app_name,
1085 p_msg_name => 'OKL_LT2_LINE_IN_TMPL',
1086 p_token1 => 'TEMPLATE',
1087 p_token1_value => p_avlv_rec.NAME,
1088 p_token2 => 'COUNT',
1089 p_token2_value => l_rowcount);
1090 x_return_status := OKL_API.G_RET_STS_ERROR;
1091 RAISE OKL_API.G_EXCEPTION_ERROR;
1092
1093 END IF;
1094
1095
1096 FOR atl_rec IN atl_csr(p_avlv_rec.ID)
1097 LOOP
1098 i := i + 1;
1099 l_slice_amount := l_total_amount * atl_rec.percentage/100;
1100
1101 -- Polulate l_tabv_tbl with the distribution attributes
1102
1103 l_tabv_tbl(i).CR_DR_FLAG := atl_rec.CRD_CODE;
1104
1105 IF (atl_rec.account_builder_yn = 'Y') THEN
1106
1107 -- Call the Account generator if the account generator flag is set.
1108
1109 -- Changed by Santonyr on 22-Sep-2004 to fix bug 3901209.
1110 -- Added a new parameter 'p_ae_tmpt_line_id'.
1111 -- If Account Generator fails due to lack of sources, it picks up the
1112 -- default account code for the passed account template line and returns.
1113
1114 -- Populating account generator workflow sources for bug 4157521
1115
1116 l_acc_gen_wf_sources_rec.product_id := p_tmpl_identify_rec.product_id;
1117 l_acc_gen_wf_sources_rec.transaction_type_id := p_tmpl_identify_rec.transaction_type_id;
1118 l_acc_gen_wf_sources_rec.stream_type_id := p_tmpl_identify_rec.stream_type_id;
1119 l_acc_gen_wf_sources_rec.factoring_synd_flag := p_tmpl_identify_rec.factoring_synd_flag;
1120 l_acc_gen_wf_sources_rec.syndication_code := p_tmpl_identify_rec.syndication_code;
1121 l_acc_gen_wf_sources_rec.factoring_code := p_tmpl_identify_rec.factoring_code;
1122 l_acc_gen_wf_sources_rec.investor_code := p_tmpl_identify_rec.investor_code;
1123 l_acc_gen_wf_sources_rec.memo_yn := p_tmpl_identify_rec.memo_yn;
1124 l_acc_gen_wf_sources_rec.rev_rec_flag := p_tmpl_identify_rec.rev_rec_flag;
1125 l_acc_gen_wf_sources_rec.source_id := p_dist_info_rec.source_id;
1126 l_acc_gen_wf_sources_rec.source_table := p_dist_info_rec.source_table;
1127 l_acc_gen_wf_sources_rec.accounting_date := trunc(G_gl_date);
1128 l_acc_gen_wf_sources_rec.contract_id := p_dist_info_rec.contract_id;
1129 l_acc_gen_wf_sources_rec.contract_line_id := p_dist_info_rec.contract_line_id;
1130
1131 -- Changed the signature for bug 4157521
1132
1133 -- 07-FEB-06.SGIYER. Bug 5013588
1134 -- Added check for account gen sources being passed.
1135 -- If not passed then defaulting.
1136 IF p_gen_table.COUNT > 0 THEN
1137 l_tabv_tbl(i).CODE_COMBINATION_ID :=
1138 OKL_ACCOUNT_GENERATOR_PUB.GET_CCID(p_api_version => l_api_version,
1139 p_init_msg_list => l_init_msg_list,
1140 x_return_status => l_return_status,
1141 x_msg_count => l_msg_count,
1142 x_msg_data => l_msg_data,
1143 p_acc_gen_wf_sources_rec => l_acc_gen_wf_sources_rec,
1144 p_ae_line_type => atl_rec.ae_line_type,
1145 p_primary_key_tbl => p_gen_table,
1146 p_ae_tmpt_line_id => atl_rec.id);
1147
1148 IF (l_return_status <> OKL_API.G_RET_STS_SUCCESS) THEN
1149 IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
1150 OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'Error encountered while fetching the CCID using the Account Generator Rules');
1151 END IF;
1152 x_return_status := l_return_status;
1153 RAISE OKL_API.G_EXCEPTION_ERROR;
1154 END IF;
1155 ELSE
1156 -- 07-FEB-06.SGIYER. Bug 5013588
1157 -- Defaulting template line account as per line level accrual solution
1158 IF (atl_rec.code_combination_id IS NULL) OR (atl_rec.code_combination_id = OKL_API.G_MISS_NUM) THEN
1159 Okl_Api.set_message(p_app_name => g_app_name,
1160 p_msg_name => 'OKL_TMPT_LN_CCID_REQD');
1161 x_return_status := OKL_API.G_RET_STS_ERROR;
1162 RAISE OKL_API.G_EXCEPTION_ERROR;
1163 END IF;
1164 l_tabv_tbl(i).CODE_COMBINATION_ID := atl_rec.code_combination_id;
1165 END IF;
1166
1167 ELSE
1168 l_tabv_tbl(i).CODE_COMBINATION_ID := atl_rec.code_combination_id;
1169 END IF;
1170
1171
1172 l_tabv_tbl(i).CURRENCY_CODE := l_passed_curr;
1173 IF (atl_rec.CRD_CODE = 'D') THEN
1174 l_tabv_tbl(i).AE_LINE_TYPE := 'LEASE_DEBIT';
1175 END IF;
1176 IF (atl_rec.CRD_CODE = 'C') THEN
1177 l_tabv_tbl(i).AE_LINE_TYPE := 'LEASE_CREDIT';
1178 END IF;
1179 l_tabv_tbl(i).TEMPLATE_ID := p_avlv_rec.ID;
1180 l_tabv_tbl(i).SOURCE_ID := p_dist_info_rec.source_id;
1181 l_tabv_tbl(i).SOURCE_TABLE := p_dist_info_rec.source_table;
1182 l_tabv_tbl(i).GL_REVERSAL_FLAG := p_dist_info_rec.gl_reversal_flag;
1183
1184 l_amount := Okl_Accounting_Util.ROUND_AMOUNT
1185 (p_amount => l_slice_amount,
1186 p_currency_code => l_passed_curr);
1187
1188 l_acc_amount := Okl_Accounting_Util.ROUND_AMOUNT
1189 (p_amount => l_slice_amount * l_rate,
1190 p_currency_code => l_functional_curr);
1191
1192 l_tabv_tbl(i).AMOUNT := l_amount;
1193 l_tabv_tbl(i).ACCOUNTED_AMOUNT := l_acc_amount;
1194 l_tabv_tbl(i).GL_DATE := trunc(G_gl_date);
1195 l_tabv_tbl(i).PERCENTAGE := atl_rec.percentage;
1196 l_tabv_tbl(i).POSTED_YN := 'N';
1197 l_tabv_tbl(i).CURRENCY_CONVERSION_DATE := p_dist_info_rec.currency_conversion_date;
1198 l_tabv_tbl(i).CURRENCY_CONVERSION_RATE := l_currency_conversion_rate;
1199 l_tabv_tbl(i).CURRENCY_CONVERSION_TYPE := p_dist_info_rec.currency_conversion_type;
1200 l_tabv_tbl(i).AE_CREATION_ERROR := NULL;
1201 l_tabv_tbl(i).POST_TO_GL := p_dist_info_rec.post_to_gl;
1202 l_tabv_tbl(i).ORIGINAL_DIST_ID := NULL;
1203 l_tabv_tbl(i).REVERSE_EVENT_FLAG := 'N';
1204 -- pass the set_of_books_id to the tapi for MG uptake .. racheruv
1205 l_tabv_tbl(i).SET_OF_BOOKS_ID := l_set_of_books_id;
1206
1207 -- Bug 3948354
1208 -- Populate the comments column with 'CASH_RECEIPT if it is called from
1209 -- Revenue Recognition program
1210
1211 IF NVL(G_REV_REC_FLAG, 'N') = 'Y' AND
1212 p_avlv_rec.MEMO_YN = 'Y' THEN
1213 l_tabv_tbl(i).COMMENTS := 'CASH_RECEIPT';
1214 END IF;
1215
1216
1217 IF (atl_rec.crd_code = 'D') THEN
1218 l_dr_total := NVL(l_dr_total,0) + l_amount;
1219 l_acc_dr_total := NVL(l_acc_dr_total,0) + l_acc_amount;
1220 -- Added OKL_API.G_MISS_NUM condition by dpsingh for bug 5082565(H)
1221 IF (l_highest_amount_dr = OKL_API.G_MISS_NUM OR l_highest_amount_dr <= l_amount) THEN
1222 l_highest_amount_dr := l_amount;
1223 l_highest_index_dr := i;
1224 END IF;
1225 IF (l_lowest_amount_dr > l_amount) THEN
1226 l_lowest_amount_dr := l_amount;
1227 l_lowest_index_dr := i;
1228 END IF;
1229 END IF;
1230
1231 IF (atl_rec.crd_code = 'C') THEN
1232 l_cr_total := NVL(l_cr_total,0) + l_amount;
1233 l_acc_cr_total := NVL(l_acc_cr_total,0) + l_acc_amount;
1234 -- Added OKL_API.G_MISS_NUM condition by dpsingh for bug 5082565(H)
1235 IF (l_highest_amount_cr = OKL_API.G_MISS_NUM OR l_highest_amount_cr <= l_amount) THEN
1236 l_highest_amount_cr := l_amount;
1237 l_highest_index_cr := i;
1238 END IF;
1239 IF (l_lowest_amount_cr > l_amount) THEN
1240 l_lowest_amount_cr := l_amount;
1241 l_lowest_index_cr := i;
1242 END IF;
1243 END IF;
1244
1245 END LOOP;
1246
1247 IF (l_dr_total <> l_total_amount) THEN
1248
1249 -- Changed by Santonyr on 18th Jun, 2003 to fix the bug 3012735
1250 -- Rounding the amounts before processing
1251
1252 l_dr_diff := Okl_Accounting_Util.ROUND_AMOUNT (p_amount => (l_total_amount - l_dr_total),
1253 p_currency_code => l_passed_curr);
1254
1255 l_acc_dr_diff := Okl_Accounting_Util.ROUND_AMOUNT (p_amount => (l_acc_total_amount - l_acc_dr_total),
1256 p_currency_code => l_functional_curr);
1257
1258 --l_dr_diff := l_total_amount - l_dr_total;
1259 --l_acc_dr_diff := l_acc_total_amount - l_acc_dr_total;
1260
1261 IF (l_ael_apply_rounding_diff = 'ADD_TO_HIGH') THEN
1262
1263 l_tabv_tbl(l_highest_index_dr).AMOUNT := l_tabv_tbl(l_highest_index_dr).AMOUNT
1264 + l_dr_diff;
1265 l_tabv_tbl(l_highest_index_dr).ACCOUNTED_AMOUNT :=
1266 l_tabv_tbl(l_highest_index_dr).ACCOUNTED_AMOUNT + l_acc_dr_diff;
1267
1268 ELSIF (l_ael_apply_rounding_diff = 'ADD_TO_LOW') THEN
1269
1270 l_tabv_tbl(l_lowest_index_dr).AMOUNT := l_tabv_tbl(l_lowest_index_dr).AMOUNT
1271 + l_dr_diff;
1272 l_tabv_tbl(l_lowest_index_dr).ACCOUNTED_AMOUNT :=
1273 l_tabv_tbl(l_lowest_index_dr).ACCOUNTED_AMOUNT + l_acc_dr_diff;
1274
1275 ELSIF (l_ael_apply_rounding_diff = 'ADD_NEW_LINE') THEN
1276
1277 i := i + 1;
1278 l_tabv_tbl(i).CR_DR_FLAG := 'D';
1279 l_tabv_tbl(i).CODE_COMBINATION_ID := l_rounding_ccid;
1280 l_tabv_tbl(i).CURRENCY_CODE := l_passed_curr;
1281 l_tabv_tbl(i).AE_LINE_TYPE := 'LEASE_DEBIT';
1282 l_tabv_tbl(i).TEMPLATE_ID := p_avlv_rec.ID;
1283 l_tabv_tbl(i).SOURCE_ID := p_dist_info_rec.source_id;
1284 l_tabv_tbl(i).SOURCE_TABLE := p_dist_info_rec.source_table;
1285 l_tabv_tbl(i).GL_REVERSAL_FLAG := p_dist_info_rec.gl_reversal_flag;
1286 l_tabv_tbl(i).AMOUNT := l_dr_diff;
1287 l_tabv_tbl(i).ACCOUNTED_AMOUNT := l_acc_dr_diff;
1288 l_tabv_tbl(i).GL_DATE := trunc(G_gl_date);
1289 l_tabv_tbl(i).PERCENTAGE := NULL;
1290 l_tabv_tbl(i).POSTED_YN := 'N';
1291 l_tabv_tbl(i).CURRENCY_CONVERSION_DATE := p_dist_info_rec.currency_conversion_date;
1292 l_tabv_tbl(i).CURRENCY_CONVERSION_RATE:= l_currency_conversion_rate;
1293 l_tabv_tbl(i).CURRENCY_CONVERSION_TYPE := p_dist_info_rec.currency_conversion_type;
1294 l_tabv_tbl(i).AE_CREATION_ERROR := NULL;
1295 l_tabv_tbl(i).POST_TO_GL := p_dist_info_rec.post_to_gl;
1296 l_tabv_tbl(i).ORIGINAL_DIST_ID := NULL;
1297 l_tabv_tbl(i).REVERSE_EVENT_FLAG := 'N';
1298 -- pass the set_of_books_id to the tapi for MG uptake .. racheruv
1299 l_tabv_tbl(i).SET_OF_BOOKS_ID := l_set_of_books_id;
1300
1301 -- Bug 3948354
1302 -- Populate the comments column with 'CASH_RECEIPT if it is called from
1303 -- Revenue Recognition program
1304
1305 IF NVL(G_REV_REC_FLAG, 'N') = 'Y' AND
1306 p_avlv_rec.MEMO_YN = 'Y' THEN
1307 l_tabv_tbl(i).COMMENTS := 'CASH_RECEIPT';
1308 END IF;
1309
1310 END IF; -- End If for l_ael_apply_rounding_diff
1311
1312 END IF; -- End IF for (l_dr_total <> l_total_amount)
1313
1314
1315 IF (l_cr_total <> l_total_amount) THEN
1316
1317 -- Changed by Santonyr on 18th Jun, 2003 to fix the bug 3012735
1318 -- Rounding the amounts before processing
1319
1320 l_cr_diff := Okl_Accounting_Util.ROUND_AMOUNT (p_amount => (l_total_amount - l_cr_total),
1321 p_currency_code => l_passed_curr);
1322
1323 l_acc_cr_diff := Okl_Accounting_Util.ROUND_AMOUNT (p_amount => (l_acc_total_amount - l_acc_cr_total),
1324 p_currency_code => l_functional_curr);
1325
1326 -- l_cr_diff := l_total_amount - l_cr_total;
1327 -- l_acc_cr_diff := l_acc_total_amount - l_acc_cr_total;
1328
1329 IF (l_ael_apply_rounding_diff = 'ADD_TO_HIGH') THEN
1330
1331 l_tabv_tbl(l_highest_index_cr).AMOUNT := l_tabv_tbl(l_highest_index_cr).AMOUNT
1332 + l_cr_diff;
1333 l_tabv_tbl(l_highest_index_cr).ACCOUNTED_AMOUNT :=
1334 l_tabv_tbl(l_highest_index_cr).ACCOUNTED_AMOUNT + l_acc_cr_diff;
1335
1336 ELSIF (l_ael_apply_rounding_diff = 'ADD_TO_LOW') THEN
1337
1338 l_tabv_tbl(l_lowest_index_cr).AMOUNT := l_tabv_tbl(l_lowest_index_cr).AMOUNT
1339 + l_cr_diff;
1340 l_tabv_tbl(l_lowest_index_cr).ACCOUNTED_AMOUNT :=
1341 l_tabv_tbl(l_lowest_index_cr).ACCOUNTED_AMOUNT + l_acc_cr_diff;
1342
1343
1344 ELSIF (l_ael_apply_rounding_diff = 'ADD_NEW_LINE') THEN
1345
1346 i := i + 1;
1347 l_tabv_tbl(i).CR_DR_FLAG := 'C';
1348 l_tabv_tbl(i).CODE_COMBINATION_ID := l_rounding_ccid;
1349 l_tabv_tbl(i).CURRENCY_CODE := l_passed_curr;
1350 l_tabv_tbl(i).AE_LINE_TYPE := 'LEASE_CREDIT';
1351 l_tabv_tbl(i).TEMPLATE_ID := p_avlv_rec.ID;
1352 l_tabv_tbl(i).SOURCE_ID := p_dist_info_rec.source_id;
1353 l_tabv_tbl(i).SOURCE_TABLE := p_dist_info_rec.source_table;
1354 l_tabv_tbl(i).GL_REVERSAL_FLAG := p_dist_info_rec.gl_reversal_flag;
1355 l_tabv_tbl(i).AMOUNT := l_cr_diff;
1356 l_tabv_tbl(i).ACCOUNTED_AMOUNT := l_acc_cr_diff;
1357 l_tabv_tbl(i).GL_DATE := trunc(G_gl_date);
1358 l_tabv_tbl(i).PERCENTAGE := NULL;
1359 l_tabv_tbl(i).POSTED_YN := 'N';
1360 l_tabv_tbl(i).CURRENCY_CONVERSION_DATE:= p_dist_info_rec.currency_conversion_date;
1361 l_tabv_tbl(i).CURRENCY_CONVERSION_RATE:= l_currency_conversion_rate;
1362 l_tabv_tbl(i).CURRENCY_CONVERSION_TYPE := p_dist_info_rec.currency_conversion_type;
1363 l_tabv_tbl(i).AE_CREATION_ERROR := NULL;
1364 l_tabv_tbl(i).POST_TO_GL := p_dist_info_rec.post_to_gl;
1365 l_tabv_tbl(i).ORIGINAL_DIST_ID := NULL;
1366 l_tabv_tbl(i).REVERSE_EVENT_FLAG := 'N';
1367 -- pass the set_of_books_id to the tapi for MG uptake
1368 l_tabv_tbl(i).SET_OF_BOOKS_ID := l_set_of_books_id;
1369
1370 -- Bug 3948354
1371 -- Populate the comments column with 'CASH_RECEIPT if it is called from
1372 -- Revenue Recognition program
1373
1374 IF NVL(G_REV_REC_FLAG, 'N') = 'Y' AND
1375 p_avlv_rec.MEMO_YN = 'Y' THEN
1376 l_tabv_tbl(i).COMMENTS := 'CASH_RECEIPT';
1377 END IF;
1378
1379
1380 END IF; -- End IF for l_ael_apply_rounding_diff
1381
1382 END IF; -- End IF for (l_cr_total <> l_total_amount)
1383
1384
1385 -- Create the distributions
1386
1387 -- Start of wraper code generated automatically by Debug code generator for Okl_Trns_Acc_Dstrs_Pub.INSERT_TRNS_ACC_DSTRS
1388 IF(IS_DEBUG_PROCEDURE_ON) THEN
1389 BEGIN
1390 OKL_DEBUG_PUB.LOG_DEBUG(L_LEVEL_PROCEDURE,L_MODULE,'Begin Debug OKLRTDTB.pls call Okl_Trns_Acc_Dstrs_Pub.INSERT_TRNS_ACC_DSTRS ');
1391 END;
1392 END IF;
1393 IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
1394 OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'Prior to the call to INSERT_TRNS_ACC_DSTRS, the parameters passed are :');
1395 OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'=======================================================================');
1396 END IF;
1397 FOR i in l_tabv_tbl.FIRST..l_tabv_tbl.LAST
1398 LOOP
1399 IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
1400 OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'l_tabv_tbl(i).CR_DR_FLAG :'||l_tabv_tbl(i).CR_DR_FLAG);
1401 OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'l_tabv_tbl(i).CODE_COMBINATION_ID :'||l_tabv_tbl(i).CODE_COMBINATION_ID);
1402 OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'l_tabv_tbl(i).CURRENCY_CODE :'||l_tabv_tbl(i).CURRENCY_CODE);
1403 OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'l_tabv_tbl(i).AE_LINE_TYPE :'||l_tabv_tbl(i).AE_LINE_TYPE);
1404 OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'l_tabv_tbl(i).TEMPLATE_ID :'||l_tabv_tbl(i).TEMPLATE_ID);
1405 OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'l_tabv_tbl(i).SOURCE_ID :'||l_tabv_tbl(i).SOURCE_ID);
1406 OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'l_tabv_tbl(i).SOURCE_TABLE :'||l_tabv_tbl(i).SOURCE_TABLE);
1407 OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'l_tabv_tbl(i).GL_REVERSAL_FLAG :'||l_tabv_tbl(i).GL_REVERSAL_FLAG);
1408 OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'l_tabv_tbl(i).AMOUNT :'||l_tabv_tbl(i).AMOUNT);
1409 OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'l_tabv_tbl(i).ACCOUNTED_AMOUNT :'||l_tabv_tbl(i).ACCOUNTED_AMOUNT);
1410 OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'l_tabv_tbl(i).GL_DATE :'||l_tabv_tbl(i).GL_DATE);
1411 OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'l_tabv_tbl(i).PERCENTAGE :'||l_tabv_tbl(i).PERCENTAGE);
1412 OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'l_tabv_tbl(i).POSTED_YN :'||l_tabv_tbl(i).POSTED_YN);
1413 OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'l_tabv_tbl(i).CURRENCY_CONVERSION_DATE :'||l_tabv_tbl(i).CURRENCY_CONVERSION_DATE);
1414 OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'l_tabv_tbl(i).CURRENCY_CONVERSION_RATE :'||l_tabv_tbl(i).CURRENCY_CONVERSION_RATE);
1415 OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'l_tabv_tbl(i).CURRENCY_CONVERSION_TYPE :'||l_tabv_tbl(i).CURRENCY_CONVERSION_TYPE);
1416 OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'l_tabv_tbl(i).AE_CREATION_ERROR :'||l_tabv_tbl(i).AE_CREATION_ERROR);
1417 OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'l_tabv_tbl(i).POST_TO_GL :'||l_tabv_tbl(i).POST_TO_GL);
1418 OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'l_tabv_tbl(i).ORIGINAL_DIST_ID :'||l_tabv_tbl(i).ORIGINAL_DIST_ID);
1419 OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'l_tabv_tbl(i).REVERSE_EVENT_FLAG :'||l_tabv_tbl(i).REVERSE_EVENT_FLAG);
1420 OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'l_tabv_tbl(i).SET_OF_BOOKS_ID :'||l_tabv_tbl(i).SET_OF_BOOKS_ID);
1421 END IF;
1422 END LOOP;
1423
1424 Okl_Trns_Acc_Dstrs_Pub.INSERT_TRNS_ACC_DSTRS(p_api_version => l_api_version
1425 ,p_init_msg_list => l_init_msg_list
1426 ,x_return_status => l_return_status
1427 ,x_msg_count => l_msg_count
1428 ,x_msg_data => l_msg_data
1429 ,p_tabv_tbl => l_tabv_tbl
1430 ,x_tabv_tbl => l_tabv_tbl_out);
1431 IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
1432 OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'The return status after the call to Okl_Trns_Acc_Dstrs_Pub.INSERT_TRNS_ACC_DSTRS'||l_return_status);
1433 END IF;
1434 IF(IS_DEBUG_PROCEDURE_ON) THEN
1435 BEGIN
1436 OKL_DEBUG_PUB.LOG_DEBUG(L_LEVEL_PROCEDURE,L_MODULE,'End Debug OKLRTDTB.pls call Okl_Trns_Acc_Dstrs_Pub.INSERT_TRNS_ACC_DSTRS ');
1437 END;
1438 END IF;
1439 -- End of wraper code generated automatically by Debug code generator for Okl_Trns_Acc_Dstrs_Pub.INSERT_TRNS_ACC_DSTRS
1440
1441 x_return_status := l_return_status;
1442 x_tabv_tbl := l_tabv_tbl_out;
1443
1444 EXCEPTION
1445
1446 WHEN OKL_API.G_EXCEPTION_ERROR THEN
1447 NULL;
1448 WHEN others then
1449 OKL_API.SET_MESSAGE(p_app_name => g_app_name
1450 ,p_msg_name => g_unexpected_error
1451 ,p_token1 => g_sqlcode_token
1452 ,p_token1_value => SQLCODE
1453 ,p_token2 => g_sqlerrm_token
1454 ,p_token2_value => SQLERRM);
1455
1456 x_return_status := OKL_API.G_RET_STS_UNEXP_ERROR;
1457
1458 END CREATE_DIST_RECS;
1459
1460 --Added by kthiruva on 06-Feb-2007 for SLA Uptake
1461 --Bug 5707866 - Start of Changes
1462 --Signature to be used to create distributions, when the account derivation option is AMB
1463 PROCEDURE CREATE_DIST_RECS( --Bug 6127326 dpsingh start
1464 p_avlv_rec IN AVLV_REC_TYPE DEFAULT NULL,
1465 --Bug 6127326 dpsingh end
1466 p_tmpl_identify_rec IN TMPL_IDENTIFY_REC_TYPE,
1467 p_dist_info_rec IN DIST_INFO_REC_TYPE,
1468 p_amount IN NUMBER,
1469 x_return_status OUT NOCOPY VARCHAR2,
1470 x_tabv_tbl OUT NOCOPY tabv_tbl_type)
1471 IS
1472
1473 CURSOR sao_csr IS
1474 SELECT rounding_ccid
1475 ,cc_apply_rounding_difference
1476 ,ael_apply_rounding_difference
1477 FROM OKL_SYS_ACCT_OPTS;
1478
1479 CURSOR sob_csr (v_set_of_books_id NUMBER) IS
1480 SELECT ROUNDING_CCID rounding_code_combination_id
1481 FROM GL_LEDGERS_PUBLIC_V
1482 WHERE ledger_id = v_set_of_books_id;
1483
1484 l_tabv_tbl tabv_tbl_type ;
1485 l_tabv_tbl_out tabv_tbl_type ;
1486 i NUMBER := 0;
1487 l_rate NUMBER := 0;
1488 l_currency_conversion_rate NUMBER := 0;
1489 l_amount NUMBER := p_amount;
1490
1491 l_functional_curr OKL_TRNS_ACC_DSTRS.CURRENCY_CODE%TYPE;
1492 l_formula_curr OKL_TRNS_ACC_DSTRS.CURRENCY_CODE%TYPE;
1493 l_passed_curr OKL_TRNS_ACC_DSTRS.CURRENCY_CODE%TYPE;
1494 l_rounding_ccid NUMBER := 0;
1495 l_cc_apply_rounding_diff OKL_SYS_ACCT_OPTS.CC_APPLY_ROUNDING_DIFFERENCE%TYPE;
1496 l_ael_apply_rounding_diff OKL_SYS_ACCT_OPTS.AEL_APPLY_ROUNDING_DIFFERENCE%TYPE;
1497
1498
1499 l_api_version NUMBER := 1.0;
1500 l_init_msg_list VARCHAR2(1) := OKL_API.G_FALSE;
1501 l_msg_count NUMBER := 0;
1502 l_msg_data VARCHAR2(2000);
1503 l_return_status VARCHAR2(1) := OKL_API.G_RET_STS_SUCCESS;
1504 l_set_of_books_id NUMBER;
1505
1506
1507 --Added by kthiruva on 06-Feb-2006 for SLA Uptake
1508 --Bug 5707866 - Start of Changes
1509 l_account_derivation OKL_SYS_ACCT_OPTS.ACCOUNT_DERIVATION%TYPE;
1510 --Bug 5707866 - End of Changes
1511
1512
1513 BEGIN
1514 IF (G_DEBUG_ENABLED = 'Y') THEN
1515 G_IS_DEBUG_STATEMENT_ON := OKL_DEBUG_PUB.CHECK_LOG_ON(G_MODULE, FND_LOG.LEVEL_STATEMENT);
1516 END IF;
1517
1518 IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
1519 OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'Inside the procedure CREATE_DIST_RECS');
1520 END IF;
1521
1522 -- get the details below based on the representation..MG uptake
1523 IF nvl(g_representation_type, 'PRIMARY') = 'PRIMARY' THEN
1524 l_functional_curr := Okl_Accounting_Util.get_func_curr_code;
1525 l_set_of_books_id := OKL_ACCOUNTING_UTIL.GET_SET_OF_BOOKS_ID;
1526 ELSE
1527 l_functional_curr := Okl_Accounting_Util.get_func_curr_code(g_ledger_id);
1528 l_set_of_books_id := g_ledger_id;
1529 END IF;
1530
1531 OPEN sao_csr;
1532 FETCH sao_csr INTO l_rounding_ccid,
1533 l_cc_apply_rounding_diff,
1534 l_ael_apply_rounding_diff;
1535 CLOSE sao_csr;
1536 IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
1537 OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'The values returned by sao_csr are: ');
1538 OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'l_rounding_ccid :'||l_rounding_ccid);
1539 OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'l_cc_apply_rounding_diff :'||l_cc_apply_rounding_diff);
1540 OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'l_ael_apply_rounding_diff :'||l_ael_apply_rounding_diff);
1541 END IF;
1542
1543 -- The following three lines of code to be removed once we start populating rounding CCID in
1544 -- OKL_SYS_ACCT_OPTS table. Starts Here ****
1545
1546 OPEN sob_csr(l_set_of_books_id);
1547 FETCH sob_csr INTO l_rounding_ccid;
1548 CLOSE sob_csr;
1549
1550 -- Santonyr Changed on 18-Nov-2002
1551 -- Multi Currency Changes
1552 -- Accounting Engine assumes the transaction is on functional currency if not passed
1553
1554 IF (p_dist_info_rec.currency_code IS NOT NULL) AND
1555 (p_dist_info_rec.currency_code <> OKL_API.G_MISS_CHAR) THEN
1556 l_passed_curr := p_dist_info_rec.currency_code;
1557 ELSE
1558 l_passed_curr := l_functional_curr;
1559 END IF;
1560
1561 -- Santonyr Changed on 18-Nov-2002
1562 -- Multi Currency Changes
1563 -- The Conversion rate is 1 if both transaction and functional currencies are same. Else
1564 -- Use the currency passed.
1565
1566 IF (l_passed_curr = l_functional_curr) THEN
1567 l_rate := 1;
1568 l_currency_conversion_rate := NULL;
1569 ELSE
1570 l_rate := p_dist_info_rec.currency_conversion_rate;
1571 l_currency_conversion_rate := p_dist_info_rec.currency_conversion_rate;
1572 END IF;
1573
1574 l_tabv_tbl(i).CURRENCY_CODE := l_passed_curr;
1575 l_tabv_tbl(i).SOURCE_ID := p_dist_info_rec.source_id;
1576 l_tabv_tbl(i).SOURCE_TABLE := p_dist_info_rec.source_table;
1577 l_tabv_tbl(i).GL_REVERSAL_FLAG := p_dist_info_rec.gl_reversal_flag;
1578 --Raw amounts are being stored as the rounding would be done in SLA as per the rules setup
1579 l_tabv_tbl(i).AMOUNT := l_amount;
1580 l_tabv_tbl(i).ACCOUNTED_AMOUNT := l_amount;
1581 l_tabv_tbl(i).GL_DATE := trunc(G_gl_date);
1582 l_tabv_tbl(i).PERCENTAGE := NULL;
1583 l_tabv_tbl(i).POSTED_YN := 'N';
1584 l_tabv_tbl(i).CURRENCY_CONVERSION_DATE := p_dist_info_rec.currency_conversion_date;
1585 l_tabv_tbl(i).CURRENCY_CONVERSION_RATE := l_currency_conversion_rate;
1586 l_tabv_tbl(i).CURRENCY_CONVERSION_TYPE := p_dist_info_rec.currency_conversion_type;
1587 l_tabv_tbl(i).AE_CREATION_ERROR := NULL;
1588 l_tabv_tbl(i).POST_TO_GL := p_dist_info_rec.post_to_gl;
1589 l_tabv_tbl(i).ORIGINAL_DIST_ID := NULL;
1590 l_tabv_tbl(i).REVERSE_EVENT_FLAG := 'N';
1591 --Bug 6127326 dpsingh start
1592 l_tabv_tbl(i).TEMPLATE_ID := p_avlv_rec.ID;
1593 --Bug 6127326 dpsingh end
1594 -- pass the set_of_books_id to the tapi for MG uptake.
1595 l_tabv_tbl(i).set_of_books_id := l_set_of_books_id;
1596
1597 -- Start of wraper code generated automatically by Debug code generator for Okl_Trns_Acc_Dstrs_Pub.INSERT_TRNS_ACC_DSTRS
1598 IF(IS_DEBUG_PROCEDURE_ON) THEN
1599 BEGIN
1600 OKL_DEBUG_PUB.LOG_DEBUG(L_LEVEL_PROCEDURE,L_MODULE,'Begin Debug OKLRTDTB.pls call Okl_Trns_Acc_Dstrs_Pub.INSERT_TRNS_ACC_DSTRS ');
1601 END;
1602 END IF;
1603 IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
1604 OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'Prior to the call to INSERT_TRNS_ACC_DSTRS, the parameters passed are :');
1605 OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'=======================================================================');
1606 END IF;
1607 FOR i in l_tabv_tbl.FIRST..l_tabv_tbl.LAST
1608 LOOP
1609 IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
1610 OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'l_tabv_tbl(i).CR_DR_FLAG :'||l_tabv_tbl(i).CR_DR_FLAG);
1611 OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'l_tabv_tbl(i).CODE_COMBINATION_ID :'||l_tabv_tbl(i).CODE_COMBINATION_ID);
1612 OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'l_tabv_tbl(i).CURRENCY_CODE :'||l_tabv_tbl(i).CURRENCY_CODE);
1613 OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'l_tabv_tbl(i).AE_LINE_TYPE :'||l_tabv_tbl(i).AE_LINE_TYPE);
1614 OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'l_tabv_tbl(i).TEMPLATE_ID :'||l_tabv_tbl(i).TEMPLATE_ID);
1615 OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'l_tabv_tbl(i).SOURCE_ID :'||l_tabv_tbl(i).SOURCE_ID);
1616 OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'l_tabv_tbl(i).SOURCE_TABLE :'||l_tabv_tbl(i).SOURCE_TABLE);
1617 OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'l_tabv_tbl(i).GL_REVERSAL_FLAG :'||l_tabv_tbl(i).GL_REVERSAL_FLAG);
1618 OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'l_tabv_tbl(i).AMOUNT :'||l_tabv_tbl(i).AMOUNT);
1619 OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'l_tabv_tbl(i).ACCOUNTED_AMOUNT :'||l_tabv_tbl(i).ACCOUNTED_AMOUNT);
1620 OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'l_tabv_tbl(i).GL_DATE :'||l_tabv_tbl(i).GL_DATE);
1621 OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'l_tabv_tbl(i).PERCENTAGE :'||l_tabv_tbl(i).PERCENTAGE);
1622 OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'l_tabv_tbl(i).POSTED_YN :'||l_tabv_tbl(i).POSTED_YN);
1623 OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'l_tabv_tbl(i).CURRENCY_CONVERSION_DATE :'||l_tabv_tbl(i).CURRENCY_CONVERSION_DATE);
1624 OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'l_tabv_tbl(i).CURRENCY_CONVERSION_RATE :'||l_tabv_tbl(i).CURRENCY_CONVERSION_RATE);
1625 OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'l_tabv_tbl(i).CURRENCY_CONVERSION_TYPE :'||l_tabv_tbl(i).CURRENCY_CONVERSION_TYPE);
1626 OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'l_tabv_tbl(i).AE_CREATION_ERROR :'||l_tabv_tbl(i).AE_CREATION_ERROR);
1627 OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'l_tabv_tbl(i).POST_TO_GL :'||l_tabv_tbl(i).POST_TO_GL);
1628 OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'l_tabv_tbl(i).ORIGINAL_DIST_ID :'||l_tabv_tbl(i).ORIGINAL_DIST_ID);
1629 OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'l_tabv_tbl(i).REVERSE_EVENT_FLAG :'||l_tabv_tbl(i).REVERSE_EVENT_FLAG);
1630 OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'l_tabv_tbl(i).set_of_books_id :'||l_tabv_tbl(i).set_of_books_id);
1631 END IF;
1632 END LOOP;
1633
1634 Okl_Trns_Acc_Dstrs_Pub.INSERT_TRNS_ACC_DSTRS(p_api_version => l_api_version
1635 ,p_init_msg_list => l_init_msg_list
1636 ,x_return_status => l_return_status
1637 ,x_msg_count => l_msg_count
1638 ,x_msg_data => l_msg_data
1639 ,p_tabv_tbl => l_tabv_tbl
1640 ,x_tabv_tbl => l_tabv_tbl_out);
1641 IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
1642 OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'The return status after the call to Okl_Trns_Acc_Dstrs_Pub.INSERT_TRNS_ACC_DSTRS'||l_return_status);
1643 END IF;
1644 IF(IS_DEBUG_PROCEDURE_ON) THEN
1645 BEGIN
1646 OKL_DEBUG_PUB.LOG_DEBUG(L_LEVEL_PROCEDURE,L_MODULE,'End Debug OKLRTDTB.pls call Okl_Trns_Acc_Dstrs_Pub.INSERT_TRNS_ACC_DSTRS ');
1647 END;
1648 END IF;
1649 -- End of wraper code generated automatically by Debug code generator for Okl_Trns_Acc_Dstrs_Pub.INSERT_TRNS_ACC_DSTRS
1650
1651 x_return_status := l_return_status;
1652 x_tabv_tbl := l_tabv_tbl_out;
1653
1654 EXCEPTION
1655
1656 WHEN OKL_API.G_EXCEPTION_ERROR THEN
1657 NULL;
1658 WHEN others then
1659 OKL_API.SET_MESSAGE(p_app_name => g_app_name
1660 ,p_msg_name => g_unexpected_error
1661 ,p_token1 => g_sqlcode_token
1662 ,p_token1_value => SQLCODE
1663 ,p_token2 => g_sqlerrm_token
1664 ,p_token2_value => SQLERRM);
1665
1666 x_return_status := OKL_API.G_RET_STS_UNEXP_ERROR;
1667
1668 END CREATE_DIST_RECS;
1669 --Bug 5707866 - End of Changes
1670
1671 PROCEDURE UPDATE_POST_TO_GL(p_api_version IN NUMBER,
1672 p_init_msg_list IN VARCHAR2,
1673 x_return_status OUT NOCOPY VARCHAR2,
1674 x_msg_count OUT NOCOPY NUMBER,
1675 x_msg_data OUT NOCOPY VARCHAR2,
1676 p_source_id IN NUMBER,
1677 p_source_table IN VARCHAR2)
1678 IS
1679
1680 l_tabv_tbl_in TABV_TBL_TYPE;
1681 l_tabv_tbl_out TABV_TBL_TYPE;
1682 l_api_version NUMBER := 1.0;
1683 l_id NUMBER := 0;
1684
1685 i NUMBER := 0;
1686
1687
1688 CURSOR dist_csr IS
1689 SELECT ID
1690 FROM OKL_TRNS_ACC_DSTRS
1691 WHERE source_id = p_source_id
1692 AND source_table = p_source_table;
1693
1694 dist_rec dist_csr%ROWTYPE;
1695
1696
1697 BEGIN
1698
1699 x_return_status := OKL_API.G_RET_STS_SUCCESS;
1700
1701 FOR dist_rec IN dist_csr
1702
1703 LOOP
1704
1705 i := i + 1;
1706 l_tabv_tbl_in(i).ID := dist_rec.ID;
1707 l_tabv_tbl_in(i).POST_TO_GL := 'Y';
1708
1709 END LOOP;
1710
1711 IF (l_tabv_tbl_in.COUNT > 0) THEN
1712
1713 -- Start of wraper code generated automatically by Debug code generator for Okl_Trns_Acc_Dstrs_Pub.update_trns_acc_dstrs
1714 IF(L_DEBUG_ENABLED='Y') THEN
1715 L_LEVEL_PROCEDURE :=FND_LOG.LEVEL_PROCEDURE;
1716 IS_DEBUG_PROCEDURE_ON := OKL_DEBUG_PUB.Check_Log_On(L_MODULE, L_LEVEL_PROCEDURE);
1717 END IF;
1718 IF(IS_DEBUG_PROCEDURE_ON) THEN
1719 BEGIN
1720 OKL_DEBUG_PUB.LOG_DEBUG(L_LEVEL_PROCEDURE,L_MODULE,'Begin Debug OKLRTDTB.pls call Okl_Trns_Acc_Dstrs_Pub.update_trns_acc_dstrs ');
1721 END;
1722 END IF;
1723 Okl_Trns_Acc_Dstrs_Pub.update_trns_acc_dstrs(p_api_version => l_api_version,
1724 p_init_msg_list => p_init_msg_list,
1725 x_return_status => x_return_status,
1726 x_msg_count => x_msg_count,
1727 x_msg_data => x_msg_data,
1728 p_tabv_tbl => l_tabv_tbl_in,
1729 x_tabv_tbl => l_tabv_tbl_out);
1730 IF(IS_DEBUG_PROCEDURE_ON) THEN
1731 BEGIN
1732 OKL_DEBUG_PUB.LOG_DEBUG(L_LEVEL_PROCEDURE,L_MODULE,'End Debug OKLRTDTB.pls call Okl_Trns_Acc_Dstrs_Pub.update_trns_acc_dstrs ');
1733 END;
1734 END IF;
1735 -- End of wraper code generated automatically by Debug code generator for Okl_Trns_Acc_Dstrs_Pub.update_trns_acc_dstrs
1736 ELSE
1737
1738 OKL_API.SET_MESSAGE(p_app_name => g_app_name,
1739 p_msg_name => 'OKL_DIST_NOT_FOUND');
1740
1741 x_return_status := OKL_API.G_RET_STS_ERROR;
1742
1743
1744 END IF;
1745
1746
1747 EXCEPTION
1748
1749 WHEN OTHERS THEN
1750
1751 OKL_API.SET_MESSAGE(p_app_name => g_app_name
1752 ,p_msg_name => g_unexpected_error
1753 ,p_token1 => g_sqlcode_token
1754 ,p_token1_value => SQLCODE
1755 ,p_token2 => g_sqlerrm_token
1756 ,p_token2_value => SQLERRM);
1757
1758 x_return_status := OKL_API.G_RET_STS_UNEXP_ERROR;
1759
1760
1761 END UPDATE_POST_TO_GL;
1762
1763
1764
1765
1766 PROCEDURE DELETE_DIST_AE(p_flag IN VARCHAR2,
1767 p_source_id IN NUMBER,
1768 p_source_table IN VARCHAR2,
1769 x_return_status OUT NOCOPY VARCHAR2)
1770
1771 IS
1772
1773 CURSOR dist_csr(v_source_id NUMBER, v_source_table VARCHAR2) IS
1774 SELECT ID
1775 FROM OKL_TRNS_ACC_DSTRS
1776 WHERE source_id = v_source_id
1777 AND source_table = v_source_table;
1778
1779
1780 l_dist_tbl TABV_TBL_TYPE;
1781 i NUMBER := 0;
1782 j NUMBER := 0;
1783 l_api_version NUMBER := 1.0;
1784 l_init_msg_list VARCHAR2(1) := OKL_API.G_FALSE;
1785 l_msg_count NUMBER := 0;
1786 l_msg_data VARCHAR2(2000);
1787 l_id NUMBER;
1788
1789
1790 BEGIN
1791
1792 x_return_status := OKL_API.G_RET_STS_SUCCESS;
1793
1794 IF (p_flag = 'DIST') THEN
1795
1796 OPEN dist_csr(p_source_id, p_source_table);
1797 LOOP
1798 FETCH dist_csr INTO l_id;
1799 EXIT WHEN dist_csr%NOTFOUND;
1800 i := i + 1;
1801 l_dist_tbl(i).ID := l_id;
1802 END LOOP;
1803
1804 CLOSE dist_csr;
1805
1806 -- Start of wraper code generated automatically by Debug code generator for Okl_Trns_Acc_Dstrs_Pub.delete_trns_acc_dstrs
1807 IF(L_DEBUG_ENABLED='Y') THEN
1808 L_LEVEL_PROCEDURE :=FND_LOG.LEVEL_PROCEDURE;
1809 IS_DEBUG_PROCEDURE_ON := OKL_DEBUG_PUB.Check_Log_On(L_MODULE, L_LEVEL_PROCEDURE);
1810 END IF;
1811 IF(IS_DEBUG_PROCEDURE_ON) THEN
1812 BEGIN
1813 OKL_DEBUG_PUB.LOG_DEBUG(L_LEVEL_PROCEDURE,L_MODULE,'Begin Debug OKLRTDTB.pls call Okl_Trns_Acc_Dstrs_Pub.delete_trns_acc_dstrs ');
1814 END;
1815 END IF;
1816 Okl_Trns_Acc_Dstrs_Pub.delete_trns_acc_dstrs(p_api_version => l_api_version
1817 ,p_init_msg_list => l_init_msg_list
1818 ,x_return_status => x_return_status
1819 ,x_msg_count => l_msg_count
1820 ,x_msg_data => l_msg_data
1821 ,p_tabv_tbl => l_dist_tbl);
1822 IF(IS_DEBUG_PROCEDURE_ON) THEN
1823 BEGIN
1824 OKL_DEBUG_PUB.LOG_DEBUG(L_LEVEL_PROCEDURE,L_MODULE,'End Debug OKLRTDTB.pls call Okl_Trns_Acc_Dstrs_Pub.delete_trns_acc_dstrs ');
1825 END;
1826 END IF;
1827 -- End of wraper code generated automatically by Debug code generator for Okl_Trns_Acc_Dstrs_Pub.delete_trns_acc_dstrs
1828
1829 END IF;
1830
1831 END DELETE_DIST_AE;
1832
1833
1834
1835 PROCEDURE VALIDATE_PARAMS(p_dist_info_Rec IN DIST_INFO_REC_TYPE,
1836 x_return_status OUT NOCOPY VARCHAR2)
1837 IS
1838
1839
1840 -- redundant code .. not used.
1841 --CURSOR sobv_csr IS
1842 --SELECT currency_code
1843 --FROM GL_LEDGERS_PUBLIC_V
1844 --WHERE LEDGER_ID = Okl_Accounting_Util.get_set_of_books_id;
1845
1846 l_validate_holder VARCHAR2(1) := OKL_API.G_MISS_CHAR;
1847 l_functional_curr OKL_TRNS_ACC_DSTRS.CURRENCY_CODE%TYPE;
1848 l_gl_date DATE;
1849
1850
1851 BEGIN
1852
1853 x_return_status := OKL_API.G_RET_STS_SUCCESS;
1854
1855 -- get the functional currency based on the representation. MG uptake
1856 IF nvl(g_representation_type, 'PRIMARY') = 'PRIMARY' THEN
1857 l_functional_curr := Okl_Accounting_Util.GET_FUNC_CURR_CODE;
1858 ELSE
1859 l_functional_curr := Okl_Accounting_Util.GET_FUNC_CURR_CODE(g_ledger_id);
1860 END IF;
1861
1862 -- Check if the source ID is null
1863 IF (P_dist_info_REC.SOURCE_ID = OKL_API.G_MISS_NUM) OR
1864 (P_dist_info_REC.SOURCE_ID IS NULL) THEN
1865 OKL_API.set_message(G_APP_NAME, G_REQUIRED_VALUE,G_COL_NAME_TOKEN,'SOURCE_ID');
1866 RAISE OKL_API.G_EXCEPTION_ERROR;
1867 END IF;
1868
1869 -- Check if the source table is null
1870 IF (P_dist_info_REC.SOURCE_TABLE = OKL_API.G_MISS_CHAR) OR
1871 (P_dist_info_REC.SOURCE_TABLE IS NULL) THEN
1872 OKL_API.set_message(G_APP_NAME, G_REQUIRED_VALUE,G_COL_NAME_TOKEN,'SOURCE_TABLE');
1873 RAISE OKL_API.G_EXCEPTION_ERROR;
1874 END IF;
1875
1876
1877 -- Fixed bug 2815972 by Santonyr on 04-Aug-2003
1878
1879 /*
1880 -- Negative Amounts are not Allowed.
1881 IF (P_dist_info_REC.AMOUNT < 0) THEN
1882 OKL_API.SET_MESSAGE(p_app_name => g_app_name,
1883 p_msg_name => 'OKL_INVALID_AMOUNT');
1884 RAISE OKL_API.G_EXCEPTION_ERROR;
1885 END IF;
1886 */
1887
1888
1889 -- Check if the source table is valid
1890 l_validate_holder :=
1891 Okl_Accounting_Util.VALIDATE_SOURCE_ID_TABLE(p_source_id => P_dist_info_REC.source_id,
1892 p_source_table => P_dist_info_REC.source_table);
1893
1894 IF (l_validate_holder = OKL_API.G_FALSE) THEN
1895 OKL_API.SET_MESSAGE(p_app_name => g_app_name,
1896 p_msg_name => 'OKL_INVALID_SOURCE_TBL_ID');
1897 RAISE OKL_API.G_EXCEPTION_ERROR;
1898 END IF;
1899
1900 -- Check if the accounting date is null
1901 IF (P_dist_info_REC.ACCOUNTING_DATE = OKL_API.G_MISS_DATE) OR
1902 (P_dist_info_REC.ACCOUNTING_DATE IS NULL) THEN
1903 OKL_API.set_message(G_APP_NAME, G_REQUIRED_VALUE,G_COL_NAME_TOKEN,'ACCOUNTING_DATE');
1904 RAISE OKL_API.G_EXCEPTION_ERROR;
1905
1906 ELSE
1907 -- Bug 7560071.
1908 -- Get the accounting date .. based on representation. MG uptake
1909 IF nvl(g_representation_type, 'PRIMARY') = 'PRIMARY' THEN
1910 l_gl_date := OKL_ACCOUNTING_UTIL.get_valid_gl_date(P_dist_info_REC.ACCOUNTING_DATE);
1911 ELSE
1912 l_gl_date := OKL_ACCOUNTING_UTIL.get_valid_gl_date(P_dist_info_REC.ACCOUNTING_DATE, g_ledger_id);
1913 END IF;
1914
1915 IF l_gl_date IS NULL THEN
1916 OKL_API.SET_MESSAGE(p_app_name => g_app_name,
1917 p_msg_name => 'OKL_INVALID_GL_DATE');
1918 RAISE OKL_API.G_EXCEPTION_ERROR;
1919 END IF;
1920
1921 G_gl_date := l_gl_date;
1922
1923 END IF;
1924
1925 -- Check if the reversal flag is null
1926 IF (P_dist_info_REC.GL_REVERSAL_FLAG = OKL_API.G_MISS_CHAR) OR
1927 (P_dist_info_REC.GL_REVERSAL_FLAG IS NULL) THEN
1928 OKL_API.set_message(G_APP_NAME, G_REQUIRED_VALUE,G_COL_NAME_TOKEN,'REVERSAL_FLAG');
1929 RAISE OKL_API.G_EXCEPTION_ERROR;
1930 END IF;
1931
1932 -- Check if the post to gl flag is null
1933 IF (P_dist_info_REC.POST_TO_GL = OKL_API.G_MISS_CHAR) OR
1934 (P_dist_info_REC.POST_TO_GL IS NULL) THEN
1935 OKL_API.set_message(G_APP_NAME, G_REQUIRED_VALUE,G_COL_NAME_TOKEN,'POST_TO_GL');
1936 RAISE OKL_API.G_EXCEPTION_ERROR;
1937 END IF;
1938
1939 -- Check if the currency conversion factors are null if the trx currency and
1940 -- functional currency are not same.
1941
1942 IF (p_dist_info_Rec.currency_code IS NOT NULL) AND
1943 (p_dist_info_rec.currency_code <> OKL_API.G_MISS_CHAR) THEN
1944
1945 IF (p_dist_info_rec.currency_code <> l_functional_curr) THEN
1946
1947 IF (P_dist_info_REC.currency_conversion_type = OKL_API.G_MISS_CHAR) OR
1948 (P_dist_info_REC.currency_conversion_type IS NULL) THEN
1949 OKL_API.set_message(G_APP_NAME, G_REQUIRED_VALUE,
1950 G_COL_NAME_TOKEN,'Currency Conversion Type');
1951 RAISE OKL_API.G_EXCEPTION_ERROR;
1952 END IF;
1953
1954 IF (P_dist_info_REC.currency_conversion_date = OKL_API.G_MISS_DATE) OR
1955 (P_dist_info_REC.currency_conversion_DATE IS NULL) THEN
1956 OKL_API.set_message(G_APP_NAME, G_REQUIRED_VALUE,
1957 G_COL_NAME_TOKEN,'Currency Conversion Date');
1958 RAISE OKL_API.G_EXCEPTION_ERROR;
1959 END IF;
1960
1961 -- Added by Santonyr on 19-Nov-2002
1962 -- Made currency rate mandatory for Multi-Currency
1963
1964 IF (P_dist_info_rec.currency_conversion_rate = OKL_API.G_MISS_NUM) OR
1965 (P_dist_info_rec.currency_conversion_rate IS NULL) THEN
1966 OKL_API.set_message(G_APP_NAME, G_REQUIRED_VALUE,
1967 G_COL_NAME_TOKEN,'Currency Conversion Rate');
1968 RAISE OKL_API.G_EXCEPTION_ERROR;
1969 END IF;
1970 END IF;
1971 END IF;
1972
1973 EXCEPTION
1974
1975 WHEN OKL_API.G_EXCEPTION_ERROR THEN
1976 x_return_status := OKL_API.G_RET_STS_ERROR;
1977
1978 -- gboomina Bug 4662173 start
1979 WHEN OTHERS THEN
1980 x_return_status := OKL_API.G_RET_STS_ERROR;
1981
1982 END VALIDATE_PARAMS;
1983
1984
1985 --Added by gboomina on 14-Oct-2005
1986 --Bug 4662173 - Start of Changes
1987 PROCEDURE VALIDATE_PARAMS(p_dist_info_tbl IN DIST_INFO_TBL_TYPE,
1988 p_functional_curr IN OKL_TRNS_ACC_DSTRS.CURRENCY_CODE%TYPE,
1989 x_return_status OUT NOCOPY VARCHAR2)
1990 IS
1991
1992 l_validate_holder VARCHAR2(1) := OKL_API.G_MISS_CHAR;
1993 l_functional_curr OKL_TRNS_ACC_DSTRS.CURRENCY_CODE%TYPE := p_functional_curr;
1994 l_gl_date DATE;
1995 l_date DATE;
1996 l_first_rec CHAR := 'T';
1997 BEGIN
1998
1999 x_return_status := OKL_API.G_RET_STS_SUCCESS;
2000
2001 FOR i in p_dist_info_tbl.FIRST .. p_dist_info_tbl.LAST LOOP
2002 -- Check if the source ID is null
2003 IF (P_dist_info_tbl(i).SOURCE_ID = OKL_API.G_MISS_NUM) OR
2004 (P_dist_info_tbl(i).SOURCE_ID IS NULL) THEN
2005 OKL_API.set_message(G_APP_NAME, G_REQUIRED_VALUE,G_COL_NAME_TOKEN,'SOURCE_ID');
2006 RAISE OKL_API.G_EXCEPTION_ERROR;
2007 END IF;
2008
2009 -- Check if the source table is null
2010 IF (p_dist_info_tbl(i).SOURCE_TABLE = OKL_API.G_MISS_CHAR) OR
2011 (p_dist_info_tbl(i).SOURCE_TABLE IS NULL) THEN
2012 OKL_API.set_message(G_APP_NAME, G_REQUIRED_VALUE,G_COL_NAME_TOKEN,'SOURCE_TABLE');
2013 RAISE OKL_API.G_EXCEPTION_ERROR;
2014 END IF;
2015
2016 -- Check if the accounting date is null
2017 IF (p_dist_info_tbl(i).ACCOUNTING_DATE = OKL_API.G_MISS_DATE) OR
2018 (p_dist_info_tbl(i).ACCOUNTING_DATE IS NULL) THEN
2019 OKL_API.set_message(G_APP_NAME, G_REQUIRED_VALUE,G_COL_NAME_TOKEN,'ACCOUNTING_DATE');
2020 RAISE OKL_API.G_EXCEPTION_ERROR;
2021 ELSE
2022 -- get the valida gl date based on the representation .. MG Uptake.bug 7560071
2023 --IF (l_first_rec = 'T') THEN -- bug 7560071
2024 IF i = p_dist_info_tbl.FIRST then
2025 l_date := P_dist_info_tbl(i).ACCOUNTING_DATE;
2026 l_gl_date := OKL_ACCOUNTING_UTIL.get_valid_gl_date(p_dist_info_tbl(i).ACCOUNTING_DATE, g_ledger_id);
2027 IF l_gl_date IS NULL THEN
2028 OKL_API.SET_MESSAGE(p_app_name => g_app_name,
2029 p_msg_name => 'OKL_INVALID_GL_DATE');
2030 RAISE OKL_API.G_EXCEPTION_ERROR;
2031 END IF;
2032 --l_first_rec := 'F'; -- bug 7560071
2033 END IF;
2034
2035 IF (l_date <> p_dist_info_tbl(i).ACCOUNTING_DATE) THEN
2036 l_gl_date := OKL_ACCOUNTING_UTIL.get_valid_gl_date(p_dist_info_tbl(i).ACCOUNTING_DATE, g_ledger_id);
2037
2038 IF l_gl_date IS NULL THEN
2039 OKL_API.SET_MESSAGE(p_app_name => g_app_name,
2040 p_msg_name => 'OKL_INVALID_GL_DATE');
2041 RAISE OKL_API.G_EXCEPTION_ERROR;
2042 END IF;
2043 END IF;
2044
2045 G_gl_date := l_gl_date;
2046
2047 END IF;
2048
2049 -- Check if the reversal flag is null
2050 IF (p_dist_info_tbl(i).GL_REVERSAL_FLAG = OKL_API.G_MISS_CHAR) OR
2051 (p_dist_info_tbl(i).GL_REVERSAL_FLAG IS NULL) THEN
2052 OKL_API.set_message(G_APP_NAME, G_REQUIRED_VALUE,G_COL_NAME_TOKEN,'REVERSAL_FLAG');
2053 RAISE OKL_API.G_EXCEPTION_ERROR;
2054 END IF;
2055
2056 -- Check if the post to gl flag is null
2057 IF (p_dist_info_tbl(i).POST_TO_GL = OKL_API.G_MISS_CHAR) OR
2058 (p_dist_info_tbl(i).POST_TO_GL IS NULL) THEN
2059 OKL_API.set_message(G_APP_NAME, G_REQUIRED_VALUE,G_COL_NAME_TOKEN,'POST_TO_GL');
2060 RAISE OKL_API.G_EXCEPTION_ERROR;
2061 END IF;
2062
2063 -- Check if the currency conversion factors are null if the trx currency and
2064 -- functional currency are not same.
2065
2066 IF (p_dist_info_tbl(i).currency_code IS NOT NULL) AND
2067 (p_dist_info_tbl(i).currency_code <> OKL_API.G_MISS_CHAR) THEN
2068
2069 IF (p_dist_info_tbl(i).currency_code <> l_functional_curr) THEN
2070
2071 IF (p_dist_info_tbl(i).currency_conversion_type = OKL_API.G_MISS_CHAR) OR
2072 (p_dist_info_tbl(i).currency_conversion_type IS NULL) THEN
2073 OKL_API.set_message(G_APP_NAME, G_REQUIRED_VALUE,
2074 G_COL_NAME_TOKEN,'Currency Conversion Type');
2075 RAISE OKL_API.G_EXCEPTION_ERROR;
2076 END IF;
2077
2078 IF (p_dist_info_tbl(i).currency_conversion_date = OKL_API.G_MISS_DATE) OR
2079 (p_dist_info_tbl(i).currency_conversion_DATE IS NULL) THEN
2080 OKL_API.set_message(G_APP_NAME, G_REQUIRED_VALUE,
2081 G_COL_NAME_TOKEN,'Currency Conversion Date');
2082 RAISE OKL_API.G_EXCEPTION_ERROR;
2083 END IF;
2084
2085 -- Added by Santonyr on 19-Nov-2002
2086 -- Made currency rate mandatory for Multi-Currency
2087
2088 IF (p_dist_info_tbl(i).currency_conversion_rate = OKL_API.G_MISS_NUM) OR
2089 (p_dist_info_tbl(i).currency_conversion_rate IS NULL) THEN
2090 OKL_API.set_message(G_APP_NAME, G_REQUIRED_VALUE,
2091 G_COL_NAME_TOKEN,'Currency Conversion Rate');
2092 RAISE OKL_API.G_EXCEPTION_ERROR;
2093 END IF;
2094 END IF;
2095 END IF;
2096 END LOOP;
2097
2098 EXCEPTION
2099
2100 WHEN OKL_API.G_EXCEPTION_ERROR THEN
2101 x_return_status := OKL_API.G_RET_STS_ERROR;
2102
2103 -- gboomina Bug 4662173 end
2104
2105 END VALIDATE_PARAMS;
2106
2107 --gboomina Bug 4662173 start
2108 PROCEDURE COPY_TEMPLATE_TBL(p_temp_rec IN AVLV_REC_TYPE,
2109 x_template_rec OUT NOCOPY AVLB_REC_TYPE,
2110 x_return_status OUT NOCOPY VARCHAR2)
2111 IS
2112
2113 BEGIN
2114 x_return_status := OKL_API.G_RET_STS_SUCCESS;
2115 x_template_rec.id := p_temp_rec.id;
2116 x_template_rec.object_version_number := p_temp_rec.object_version_number;
2117 x_template_rec.try_id := p_temp_rec.try_id;
2118 x_template_rec.aes_id := p_temp_rec.aes_id;
2119 x_template_rec.sty_id := p_temp_rec.sty_id;
2120 x_template_rec.fma_id := p_temp_rec.fma_id;
2121 x_template_rec.set_of_books_id := p_temp_rec.set_of_books_id;
2122 x_template_rec.fac_code := p_temp_rec.fac_code;
2123 x_template_rec.syt_code := p_temp_rec.syt_code;
2124 x_template_rec.post_to_gl := p_temp_rec.post_to_gl;
2125 x_template_rec.advance_arrears := p_temp_rec.advance_arrears;
2126 x_template_rec.memo_yn := p_temp_rec.memo_yn;
2127 x_template_rec.prior_year_yn := p_temp_rec.prior_year_yn;
2128 x_template_rec.name := p_temp_rec.name;
2129 x_template_rec.description := p_temp_rec.description;
2130 x_template_rec.version := p_temp_rec.version;
2131 x_template_rec.factoring_synd_flag := p_temp_rec.factoring_synd_flag;
2132 x_template_rec.start_date := p_temp_rec.start_date;
2133 x_template_rec.end_date := p_temp_rec.end_date;
2134 x_template_rec.accrual_yn := p_temp_rec.accrual_yn;
2135 x_template_rec.attribute_category := p_temp_rec.attribute_category;
2136 x_template_rec.attribute1 := p_temp_rec.attribute1;
2137 x_template_rec.attribute2 := p_temp_rec.attribute2;
2138 x_template_rec.attribute3 := p_temp_rec.attribute3;
2139 x_template_rec.attribute4 := p_temp_rec.attribute4;
2140 x_template_rec.attribute5 := p_temp_rec.attribute5;
2141 x_template_rec.attribute6 := p_temp_rec.attribute6;
2142 x_template_rec.attribute7 := p_temp_rec.attribute7;
2143 x_template_rec.attribute8 := p_temp_rec.attribute8;
2144 x_template_rec.attribute9 := p_temp_rec.attribute9;
2145 x_template_rec.attribute10 := p_temp_rec.attribute10;
2146 x_template_rec.attribute11 := p_temp_rec.attribute11;
2147 x_template_rec.attribute12 := p_temp_rec.attribute12;
2148 x_template_rec.attribute13 := p_temp_rec.attribute13;
2149 x_template_rec.attribute14 := p_temp_rec.attribute14;
2150 x_template_rec.attribute15 := p_temp_rec.attribute15;
2151 x_template_rec.org_id := p_temp_rec.org_id;
2152 x_template_rec.created_by := p_temp_rec.created_by;
2153 x_template_rec.creation_date := p_temp_rec.creation_date;
2154 x_template_rec.last_updated_by := p_temp_rec.last_updated_by;
2155 x_template_rec.last_update_date := p_temp_rec.last_update_date;
2156 x_template_rec.last_update_login := p_temp_rec.last_update_login;
2157 x_template_rec.inv_code := p_temp_rec.inv_code;
2158 EXCEPTION
2159 WHEN OTHERS THEN
2160 x_return_status := OKL_API.G_RET_STS_UNEXP_ERROR;
2161 OKL_API.SET_MESSAGE(p_app_name => g_app_name
2162 ,p_msg_name => g_unexpected_error
2163 ,p_token1 => g_sqlcode_token
2164 ,p_token1_value => SQLCODE
2165 ,p_token2 => g_sqlerrm_token
2166 ,p_token2_value => SQLERRM);
2167 END COPY_TEMPLATE_TBL;
2168
2169 --Method that obtains the acc_Gen_table details for a particular source_id
2170 PROCEDURE GET_ACC_GEN_TBL( p_source_id IN NUMBER,
2171 p_gen_table IN acc_gen_tbl,
2172 x_acc_gen_tbl_ret OUT NOCOPY acc_gen_primary_key)
2173 IS
2174 acc_gen_tbl_count NUMBER := 0;
2175 l_source_id NUMBER := p_source_id;
2176 BEGIN
2177 FOR i IN p_gen_table.FIRST ..p_gen_table.LAST LOOP
2178 IF p_gen_table(i).source_id = l_source_id THEN
2179 x_acc_gen_tbl_ret(acc_gen_tbl_count).source_table := p_gen_table(i).source_table;
2180 x_acc_gen_tbl_ret(acc_gen_tbl_count).primary_key_column := p_gen_table(i).primary_key_column;
2181 acc_gen_tbl_count := acc_gen_tbl_count + 1;
2182 END IF;
2183 END LOOP;
2184 END GET_ACC_GEN_TBL;
2185
2186 --Method that obtains the acc_Gen_table details for a particular source_id
2187 PROCEDURE GET_ACC_GEN_TBL( p_source_id IN NUMBER,
2188 p_gen_table IN ACC_GEN_TBL_TYPE,
2189 x_acc_gen_tbl_ret OUT NOCOPY acc_gen_primary_key)
2190 IS
2191 l_source_id NUMBER := p_source_id;
2192 BEGIN
2193 FOR i IN p_gen_table.FIRST ..p_gen_table.LAST LOOP
2194 IF p_gen_table(i).source_id = l_source_id THEN
2195 x_acc_gen_tbl_ret := p_gen_table(i).acc_gen_key_tbl;
2196 END IF;
2197 END LOOP;
2198 END GET_ACC_GEN_TBL;
2199
2200 --Method that obtains the acc_Gen_table details for a particular source_id
2201 PROCEDURE GET_CONTEXT_VAL(p_source_id IN NUMBER
2202 ,p_ctxt_tbl IN ctxt_tbl_type
2203 ,x_ctxt_val_tbl OUT NOCOPY ctxt_val_tbl_type)
2204 IS
2205 l_source_id NUMBER := p_source_id;
2206 BEGIN
2207 IF (p_ctxt_tbl.count > 0 ) THEN
2208 FOR i IN p_ctxt_tbl.FIRST ..p_ctxt_tbl.LAST LOOP
2209 IF p_ctxt_tbl(i).source_id = l_source_id THEN
2210 x_ctxt_val_tbl := p_ctxt_tbl(i).ctxt_val_tbl;
2211 END IF;
2212 END LOOP;
2213 END IF;
2214 END GET_CONTEXT_VAL;
2215
2216 --Method that obtains the acc_Gen_table details for a particular index number value
2217 PROCEDURE GET_TEMPLATE_AMOUNT_TBL( p_parent_index_number IN NUMBER,
2218 p_tmp_amount_table IN tmp_bulk_amount_tbl_type,
2219 x_tmp_amt_tbl_ret OUT NOCOPY template_amount_tbl_type)
2220 IS
2221 tmp_amt_tbl_count NUMBER := 1;
2222 l_parent_index_number NUMBER := p_parent_index_number;
2223 BEGIN
2224 FOR i in p_tmp_amount_table.FIRST..p_tmp_amount_table.LAST LOOP
2225 IF p_tmp_amount_table(i).parent_index_number = l_parent_index_number THEN
2226 x_tmp_amt_tbl_ret(tmp_amt_tbl_count).TEMPLATE_ID := p_tmp_amount_table(i).TEMPLATE_ID;
2227 x_tmp_amt_tbl_ret(tmp_amt_tbl_count).AMOUNT := p_tmp_amount_table(i).AMOUNT;
2228 x_tmp_amt_tbl_ret(tmp_amt_tbl_count).FORMULA_USED := p_tmp_amount_table(i).FORMULA_USED;
2229 x_tmp_amt_tbl_ret(tmp_amt_tbl_count).STREAM_TYPE_ID := p_tmp_amount_table(i).STREAM_TYPE_ID;
2230 tmp_amt_tbl_count := tmp_amt_tbl_count + 1;
2231 END IF;
2232 END LOOP;
2233 END GET_TEMPLATE_AMOUNT_TBL;
2234
2235 PROCEDURE ACCUMULATE_ACCT_SOURCES
2236 (p_asev_tbl IN asev_tbl_type,
2237 x_asev_full_tbl IN OUT NOCOPY asev_tbl_type,
2238 x_return_status OUT NOCOPY VARCHAR2)
2239 IS
2240 l_asev_tbl_count NUMBER;
2241 l_return_status VARCHAR2(1);
2242 BEGIN
2243 -- Intialize the return status
2244 l_return_status := OKL_API.G_RET_STS_SUCCESS;
2245 IF (x_asev_full_tbl.COUNT > 0) THEN
2246 l_asev_tbl_count := x_asev_full_tbl.LAST + 1;
2247 ELSE
2248 l_asev_tbl_count := 1;
2249 END IF;
2250
2251 FOR i in p_asev_tbl.FIRST..p_asev_tbl.LAST LOOP
2252 x_asev_full_tbl(l_asev_tbl_count) := p_asev_tbl(i);
2253 l_asev_tbl_count := l_asev_tbl_count + 1;
2254 END LOOP;
2255 x_return_Status := l_return_status;
2256 END ACCUMULATE_ACCT_SOURCES;
2257 --Bug 4662173 - End of Changes
2258
2259 --Added by kthiruva on 13-Feb-2007 for SLA Uptake
2260 --Bug 5707866 - Start of Changes
2261 --This procedure keeps appending the template_tbl being passed to the existing OUT paramater
2262 PROCEDURE GET_FINAL_TEMPLATE_TBL(p_template_tbl IN AVLV_OUT_TBL_TYPE
2263 ,x_template_tbl IN OUT NOCOPY AVLV_OUT_TBL_TYPE)
2264 IS
2265 i NUMBER:= 0;
2266 BEGIN
2267 IF (x_template_tbl.COUNT = 0)
2268 THEN
2269 i := 0;
2270 ELSE
2271 i := x_template_tbl.COUNT;
2272 END IF;
2273 IF ( p_template_tbl.count > 0 ) THEN
2274 FOR j in p_template_tbl.FIRST..p_template_tbl.LAST
2275 LOOP
2276 x_template_tbl(i) := p_template_tbl(j);
2277 i := i + 1;
2278 END LOOP;
2279 END IF;
2280 END GET_FINAL_TEMPLATE_TBL;
2281
2282 --This procedure keeps appending the amount_tbl being passed to the existing OUT paramater
2283 PROCEDURE GET_FINAL_AMOUNT_TBL(p_amount_tbl IN AMOUNT_OUT_TBL_TYPE
2284 ,x_amount_tbl IN OUT NOCOPY AMOUNT_OUT_TBL_TYPE)
2285 IS
2286 i NUMBER:= 0;
2287 BEGIN
2288 IF (x_amount_tbl.COUNT = 0)
2289 THEN
2290 i := 0;
2291 ELSE
2292 i := x_amount_tbl.COUNT;
2293 END IF;
2294 IF (p_amount_tbl.count > 0) THEN
2295 FOR j in p_amount_tbl.FIRST..p_amount_tbl.LAST
2296 LOOP
2297 x_amount_tbl(i) := p_amount_tbl(j);
2298 i := i + 1;
2299 END LOOP;
2300 END IF;
2301 END GET_FINAL_AMOUNT_TBL;
2302
2303 --This procedure keeps appending the tabv_tbl being passed to the existing OUT paramater
2304 PROCEDURE GET_FINAL_TABV_TBL(p_tabv_tbl IN tabv_tbl_type
2305 ,x_tabv_tbl IN OUT NOCOPY tabv_tbl_type)
2306 IS
2307 i NUMBER:= 0;
2308 BEGIN
2309 IF (x_tabv_tbl.COUNT = 0)
2310 THEN
2311 i := 0;
2312 ELSE
2313 i := x_tabv_tbl.COUNT;
2314 END IF;
2315 IF (p_tabv_tbl.count > 0) THEN
2316 FOR j in p_tabv_tbl.FIRST..p_tabv_tbl.LAST
2317 LOOP
2318 x_tabv_tbl(i) := p_tabv_tbl(j);
2319 i := i + 1;
2320 END LOOP;
2321 END IF;
2322 END GET_FINAL_TABV_TBL;
2323
2324 --This procedure returns the transaction lines that have evaluated to a non-zero amount
2325 PROCEDURE GET_LINE_ID_TBL(p_amount_tbl IN AMOUNT_OUT_TBL_TYPE,
2326 x_line_tbl IN OUT NOCOPY ID_TBL_TYPE)
2327 IS
2328 l_amount NUMBER := 0;
2329 l_count NUMBER := 0;
2330 BEGIN
2331 IF (p_amount_tbl.count > 0) THEN
2332 FOR i in p_amount_tbl.FIRST..p_amount_tbl.LAST
2333 LOOP
2334 --Reinitialising l_amount every time
2335 l_amount := 0;
2336 IF (p_amount_tbl(i).amount_tbl.count > 0) THEN
2337 FOR j in p_amount_tbl(i).amount_tbl.FIRST..p_amount_tbl(i).amount_tbl.LAST
2338 LOOP
2339 l_amount := l_amount + p_amount_tbl(i).amount_tbl(j);
2340 END LOOP;
2341 --The transaction line evaluated to a non-zero amount. Adding the line to the out table
2342 IF (l_amount <> 0) THEN
2343 x_line_tbl(l_count) := p_amount_tbl(i).source_id;
2344 l_count := l_count +1;
2345 END IF;
2346 END IF;
2347 END LOOP;
2348 END IF;
2349 END GET_LINE_ID_TBL;
2350
2351 --Procedure to ensure that the in parameters passed in the new AE engine call are valid
2352 --As the new signature accepts tables of all in parameters, the table count of all tables
2353 --should be identical
2354 PROCEDURE VALIDATE_IN_PARAMS(p_dist_info_tbl IN DIST_INFO_TBL_TYPE
2355 ,p_tmpl_identify_tbl IN TMPL_IDENTIFY_TBL_TYPE
2356 ,p_ctxt_val_tbl IN ctxt_tbl_type
2357 ,p_acc_gen_primary_key_tbl IN acc_gen_tbl_type
2358 ,x_return_status OUT NOCOPY VARCHAR2)
2359 IS
2360 l_validate BOOLEAN;
2361 BEGIN
2362 x_return_status := OKL_API.G_RET_STS_SUCCESS;
2363 IF(p_dist_info_tbl.count <> p_tmpl_identify_tbl.count) THEN
2364 OKL_API.SET_MESSAGE(p_app_name => g_app_name
2365 ,p_msg_name => 'OKL_AE_INCORRECT_PARAMS'
2366 ,p_token1 => 'PARAMETER'
2367 ,p_token1_value => 'p_tmpl_identify_tbl'
2368 ,p_token2 => 'COUNT'
2369 ,p_token2_value => p_dist_info_tbl.count);
2370 RAISE OKL_API.G_EXCEPTION_ERROR;
2371 END IF;
2372 IF (p_dist_info_tbl.count <> p_acc_gen_primary_key_tbl.count) THEN
2373 OKL_API.SET_MESSAGE(p_app_name => g_app_name
2374 ,p_msg_name => 'OKL_AE_INCORRECT_PARAMS'
2375 ,p_token1 => 'PARAMETER'
2376 ,p_token1_value => 'p_acc_gen_primary_key_tbl'
2377 ,p_token2 => 'COUNT'
2378 ,p_token2_value => p_dist_info_tbl.count);
2379 RAISE OKL_API.G_EXCEPTION_ERROR;
2380 END IF;
2381 IF not ((p_dist_info_tbl.count = p_ctxt_val_tbl.count) OR p_ctxt_val_tbl.count = 0) THEN
2382 OKL_API.SET_MESSAGE(p_app_name => g_app_name
2383 ,p_msg_name => 'OKL_AE_INCORRECT_PARAMS_CTX'
2384 ,p_token1 => 'PARAMETER'
2385 ,p_token1_value => 'p_ctxt_val_tbl'
2386 ,p_token2 => 'COUNT'
2387 ,p_token2_value => p_dist_info_tbl.count);
2388 RAISE OKL_API.G_EXCEPTION_ERROR;
2389 END IF;
2390
2391 EXCEPTION
2392 WHEN OKL_API.G_EXCEPTION_ERROR THEN
2393 x_return_status := OKL_API.G_RET_STS_ERROR;
2394 -- gboomina Bug 4662173 start
2395 WHEN OTHERS THEN
2396 x_return_status := OKL_API.G_RET_STS_ERROR;
2397 END VALIDATE_IN_PARAMS;
2398 --Bug 5707866 - End of Changes
2399
2400 PROCEDURE CREATE_ACCOUNTING_DIST(p_api_version IN NUMBER,
2401 p_init_msg_list IN VARCHAR2,
2402 x_return_status OUT NOCOPY VARCHAR2,
2403 x_msg_count OUT NOCOPY NUMBER,
2404 x_msg_data OUT NOCOPY VARCHAR2,
2405 p_tmpl_identify_rec IN TMPL_IDENTIFY_REC_TYPE,
2406 p_dist_info_rec IN DIST_INFO_REC_TYPE,
2407 p_ctxt_val_tbl IN CTXT_VAL_TBL_TYPE,
2408 p_acc_gen_primary_key_tbl IN acc_gen_primary_key,
2409 x_template_tbl OUT NOCOPY AVLV_TBL_TYPE,
2410 x_amount_tbl OUT NOCOPY AMOUNT_TBL_TYPE)
2411
2412
2413 IS
2414
2415 l_check_status NUMBER;
2416 i NUMBER := 0;
2417 l_amount NUMBER := 0;
2418
2419 tmpl_rec AVLV_REC_TYPE;
2420 l_tmpl_tbl avlv_tbl_type;
2421 l_formula_name OKL_FORMULAE_V.NAME%TYPE;
2422 l_functional_curr OKL_TRNS_ACC_DSTRS.CURRENCY_CODE%TYPE;
2423 l_return_status VARCHAR2(1) := OKL_API.G_RET_STS_SUCCESS;
2424
2425 l_api_name VARCHAR2(30) := 'CREATE_ACCOUNTING_DIST';
2426 l_api_version NUMBER := 1.0;
2427
2428 -- Added by Santonyr on 30-Jul-2003 to fix the bug 2941805
2429
2430 l_product_name OKL_PRODUCTS.NAME%TYPE;
2431 l_trx_type_name OKL_TRX_TYPES_TL.NAME%TYPE;
2432 l_sty_type_name OKL_STRM_TYPE_TL.NAME%TYPE;
2433
2434 -- Added by Santonyr on 12-Jul-2440 for the bug 3761026
2435
2436 l_template_amount_tbl template_amount_tbl_type;
2437
2438
2439
2440 CURSOR frml_csr(v_id NUMBER) IS
2441 SELECT name
2442 FROM okl_formulae_v
2443 WHERE id = v_id;
2444
2445 -- Added by Santonyr on 30-Jul-2003 to fix the bug 2941805
2446
2447 CURSOR prdt_csr (l_pdt_id OKL_PRODUCTS.ID%TYPE) IS
2448 SELECT name
2449 FROM okl_products
2450 WHERE id = l_pdt_id ;
2451
2452 CURSOR trx_type_csr (l_trx_type_id OKL_TRX_TYPES_TL.ID%TYPE) IS
2453 SELECT name
2454 FROM okl_trx_types_tl
2455 WHERE id = l_trx_type_id ;
2456
2457 CURSOR sty_type_csr (l_sty_type_id OKL_STRM_TYPE_TL.ID%TYPE) IS
2458 SELECT name
2459 FROM okl_strm_type_tl
2460 WHERE id = l_sty_type_id ;
2461
2462 --Added by kthiruva on 06-Feb-2007 for SLA Uptake
2463 --Bug 5707866 - Start of Changes
2464 l_account_derivation OKL_SYS_ACCT_OPTS.ACCOUNT_DERIVATION%TYPE;
2465 l_tcn_id NUMBER;
2466 l_init_msg_list VARCHAR2(1) := OKL_API.G_FALSE;
2467 l_msg_count NUMBER := 0;
2468 l_msg_data VARCHAR2(2000);
2469 l_event_id NUMBER;
2470 l_event_date DATE;
2471 l_gl_short_name GL_LEDGERS.SHORT_NAME%TYPE;
2472 l_tabv_tbl tabv_tbl_type ;
2473 l_tabv_tbl_out tabv_tbl_type ;
2474 x_tabv_tbl tabv_tbl_type ;
2475 l_try_name OKL_TRX_TYPES_TL.NAME%TYPE;
2476 l_tcnv_rec okl_sla_acc_sources_pvt.tehv_rec_type;
2477 l_tclv_rec okl_sla_acc_sources_pvt.telv_rec_type;
2478 l_tclv_tbl okl_sla_acc_sources_pvt.telv_tbl_type;
2479 l_tabv_tbl_final tabv_tbl_type;
2480 k NUMBER := 0;
2481 l_tehv_id NUMBER;
2482 l_asev_rec asev_rec_type;
2483 l_line_amount NUMBER := 0;
2484 l_rxhv_rec okl_sla_acc_sources_pvt.rxhv_rec_type;
2485 l_rxhv_adj_rec okl_sla_acc_sources_pvt.rxhv_rec_type;
2486 l_rxlv_tbl okl_sla_acc_sources_pvt.rxlv_tbl_type;
2487 l_rxlv_adj_tbl okl_sla_acc_sources_pvt.rxlv_tbl_type;
2488 x_rxlv_tbl okl_sla_acc_sources_pvt.rxlv_tbl_type;
2489 x_rxlv_adj_tbl okl_sla_acc_sources_pvt.rxlv_tbl_type;
2490 l_rxlv_rec okl_sla_acc_sources_pvt.rxlv_rec_type;
2491 l_rxlv_adj_rec okl_sla_acc_sources_pvt.rxlv_rec_type;
2492
2493 l_pxhv_rec okl_sla_acc_sources_pvt.pxhv_rec_type;
2494 l_pxlv_tbl okl_sla_acc_sources_pvt.pxlv_tbl_type;
2495 x_pxlv_tbl okl_sla_acc_sources_pvt.pxlv_tbl_type;
2496 l_pxlv_rec okl_sla_acc_sources_pvt.pxlv_rec_type;
2497
2498 l_tai_id NUMBER;
2499 l_adj_id NUMBER;
2500 l_tap_id NUMBER;
2501
2502 CURSOR get_tcn_id_csr(p_source_id IN NUMBER)
2503 IS
2504 SELECT tcl.tcn_id
2505 FROM OKL_TXL_CNTRCT_LNS_ALL tcl
2506 WHERE tcl.id = p_source_id;
2507
2508
2509 CURSOR get_tai_id_csr(p_source_id IN NUMBER)
2510 IS
2511 SELECT TXL.TAI_ID
2512 FROM OKL_TXL_AR_INV_LNS_B TXL,
2513 OKL_TXD_AR_LN_DTLS_B TXD
2514 WHERE TXD.TIL_ID_DETAILS = TXL.ID
2515 AND TXD.ID = p_source_id;
2516
2517 --Bug 6316320 dpsingh start
2518 CURSOR get_adj_id_csr(p_source_id IN NUMBER)
2519 IS
2520 SELECT ADJ_ID
2521 FROM OKL_TXL_ADJSTS_LNS_ALL_B
2522 WHERE ID = p_source_id;
2523 --Bug 6316320 dpsingh start
2524
2525 CURSOR get_tai_details_csr (p_source_id NUMBER)
2526 IS
2527 SELECT tai.id tai_id
2528 ,tld.khr_id khr_id
2529 ,tld.kle_id kle_id
2530 ,tld.sty_id sty_id
2531 ,tai.try_id try_id
2532 ,tll.description trans_line_description
2533 FROM okl_trx_ar_invoices_b tai
2534 ,okl_txl_ar_inv_lns_b til
2535 ,okl_txd_ar_ln_dtls_b tld
2536 ,okl_txd_ar_ln_dtls_tl tll
2537 WHERE tll.id = tld.id
2538 AND tld.til_id_details = til.id
2539 AND til.tai_id = tai.id
2540 AND tld.id = p_source_id;
2541
2542 --Bug 6316320 dpsingh start
2543 CURSOR get_adj_details_csr (p_source_id NUMBER)
2544 IS
2545 SELECT adj.id adj_id
2546 ,adjl.khr_id khr_id
2547 ,adjl.kle_id kle_id
2548 ,adjl.sty_id sty_id
2549 ,adj.try_id try_id
2550 FROM okl_trx_ar_adjsts_all_b adj
2551 ,okl_txl_adjsts_lns_all_b adjl
2552 WHERE adjl.adj_id = adj.id
2553 AND adjl.id = p_source_id;
2554 --Bug 6316320 dpsingh end
2555
2556 CURSOR get_tap_id_csr(p_source_id NUMBER)
2557 IS
2558 SELECT tpl.tap_id
2559 FROM okl_txl_ap_inv_lns_b tpl
2560 WHERE TPL.ID = p_source_id;
2561
2562 CURSOR get_tap_details_csr (p_source_id NUMBER)
2563 IS
2564 SELECT tpl.id tap_id
2565 ,tpl.khr_id khr_id
2566 ,tpl.kle_id kle_id
2567 ,tpl.sty_id sty_id
2568 ,tap.try_id try_id
2569 ,tap.vendor_invoice_number trans_number
2570 ,tll.description trans_line_description
2571 FROM okl_trx_ap_invoices_b tap
2572 ,okl_txl_ap_inv_lns_b tpl
2573 ,okl_txl_ap_inv_lns_tl tll
2574 WHERE tll.id = tpl.id
2575 AND tap.id = tpl.tap_id
2576 AND tpl.id = p_source_id;
2577
2578
2579 CURSOR get_gl_short_name_csr
2580 IS
2581 SELECT GL.SHORT_NAME
2582 FROM OKL_SYS_ACCT_OPTS SAO,
2583 GL_LEDGERS GL
2584 WHERE SAO.SET_OF_BOOKS_ID = GL.LEDGER_ID;
2585
2586 CURSOR get_trx_type(p_try_id NUMBER)
2587 IS
2588 SELECT TRY.AEP_CODE
2589 FROM OKL_TRX_TYPES_B TRY
2590 WHERE TRY.ID = p_try_id;
2591
2592 CURSOR dist_exists_csr(p_source_id NUMBER,
2593 p_source_table VARCHAR2)
2594 IS
2595 SELECT 1
2596 FROM OKL_TRNS_ACC_DSTRS_ALL
2597 WHERE SOURCE_ID = p_source_id
2598 AND SOURCE_TABLE = p_source_table;
2599
2600 CURSOR get_ext_hdr_csr(p_source_id NUMBER)
2601 IS
2602 SELECT HEADER_EXTENSION_ID
2603 FROM OKL_TRX_EXTENSION_B
2604 WHERE SOURCE_ID = p_source_id;
2605
2606 get_tai_details_rec get_tai_details_csr%ROWTYPE;
2607 get_adj_details_rec get_adj_details_csr%ROWTYPE;
2608 get_tap_details_rec get_tap_details_csr%ROWTYPE;
2609 --Bug 5707866 - End of Changes
2610
2611 -- get the set of books from the trx header .. MG uptake
2612 CURSOR get_ledger_id_csr(p_tcl_id IN NUMBER)
2613 IS
2614 SELECT set_of_books_id
2615 FROM okl_trx_contracts hdr, okl_txl_cntrct_lns lns
2616 WHERE hdr.id = lns.tcn_id
2617 AND lns.id = p_tcl_id;
2618
2619 l_ledger_id NUMBER;
2620
2621 BEGIN
2622 x_return_status := OKL_API.G_RET_STS_SUCCESS;
2623
2624 l_return_status := OKL_API.START_ACTIVITY(l_api_name,
2625 G_PKG_NAME,
2626 p_init_msg_list,
2627 l_api_version,
2628 p_api_version,
2629 '_PVT',
2630 x_return_status);
2631 IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
2632 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
2633 ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
2634 RAISE OKL_API.G_EXCEPTION_ERROR;
2635 END IF;
2636
2637 -- get the representation attributes .. MG uptake
2638 get_rep_attributes;
2639
2640 l_ledger_id := NULL;
2641
2642 IF NVL(p_dist_info_rec.source_table, 'OKL_TXL_CNTRCT_LNS') = 'OKL_TXL_CNTRCT_LNS' THEN
2643 OPEN get_ledger_id_csr(p_dist_info_rec.source_id);
2644 FETCH get_ledger_id_csr INTO l_ledger_id;
2645 CLOSE get_ledger_id_csr;
2646 END IF;
2647
2648 IF l_ledger_id IS NOT NULL then
2649 g_representation_type := g_ledger_tbl(l_ledger_id).rep_type;
2650 g_ledger_id := l_ledger_id;
2651 ELSE
2652 g_representation_type := 'PRIMARY';
2653 g_ledger_id := okl_accounting_util.get_set_of_books_id;
2654 END IF;
2655
2656 -- Get the functional currency .. based on representation. MG uptake
2657 IF g_representation_type = 'PRIMARY' THEN
2658 l_functional_curr := okl_accounting_util.get_func_curr_code;
2659 ELSE
2660 l_functional_curr := okl_accounting_util.get_func_curr_code(g_ledger_id);
2661 END IF;
2662
2663
2664 -- Bug 3948354
2665 -- Set the global variable G_REV_REC_FLAG to the value passed by calling program
2666
2667 G_REV_REC_FLAG := p_tmpl_identify_rec.REV_REC_FLAG;
2668
2669
2670 -- Validate the Parameters
2671
2672 VALIDATE_PARAMS(p_dist_info_rec => p_dist_info_rec,
2673 x_return_status => l_return_status);
2674
2675
2676 IF (l_return_status <> OKL_API.G_RET_STS_SUCCESS) THEN
2677 RAISE OKL_API.G_EXCEPTION_ERROR;
2678 END IF;
2679
2680 -- Get the Templates from the given parameters
2681
2682 --- Change the G_GL_DATE to p_dist_info_rec.accounting_date if we want to pass passed-date as GL Date
2683
2684 --Added by kthiruva for SLA Uptake
2685 --Bug 5707866 - Start of Changes
2686 OPEN get_acct_derivation_csr;
2687 FETCH get_acct_derivation_csr INTO l_account_derivation;
2688 CLOSE get_acct_derivation_csr;
2689
2690 --If account derivation is not found then raise an error and halt processing
2691 IF l_account_derivation IS NULL THEN
2692 OKL_API.SET_MESSAGE(p_app_name => g_app_name
2693 ,p_msg_name => 'OKL_ACCT_DER_NOT_SET');
2694 RAISE OKL_API.G_EXCEPTION_ERROR;
2695 END IF;
2696
2697 --Fetching the trasaction type.
2698 --For Drop 2, sources capture, event creation is being done only for OKL transaction types
2699 OPEN get_trx_type(p_tmpl_identify_rec.transaction_type_id);
2700 FETCH get_trx_type INTO l_try_name;
2701 CLOSE get_trx_type;
2702
2703 --Only when the account derivation option is 'ATS'
2704 --Or if the account derivation option is 'AMB' and the transaction amount is not known
2705 --should the template information be fetched
2706 IF (l_account_derivation = 'ATS') OR
2707 ((l_account_derivation = 'AMB') AND ((p_dist_info_rec.AMOUNT IS NULL) OR (p_dist_info_rec.AMOUNT = OKL_API.G_MISS_NUM)))
2708 THEN
2709 GET_TEMPLATE_INFO(p_api_version => l_api_version,
2710 p_init_msg_list => p_init_msg_list,
2711 x_return_status => l_return_status,
2712 x_msg_count => x_msg_count,
2713 x_msg_data => x_msg_data,
2714 p_tmpl_identify_rec => p_tmpl_identify_rec,
2715 x_template_tbl => l_tmpl_tbl,
2716 p_validity_date => G_GL_DATE);
2717
2718 IF (l_return_status <> OKL_API.G_RET_STS_SUCCESS) THEN
2719 RAISE OKL_API.G_EXCEPTION_ERROR;
2720 END IF;
2721
2722 -- Raise an error if template is not found.
2723
2724 IF (l_tmpl_tbl.COUNT = 0) THEN
2725
2726 -- Added by Santonyr on 30-Jul-2003 to fix the bug 2941805
2727
2728 FOR prdt_rec IN prdt_csr (p_tmpl_identify_rec.product_id) LOOP
2729 l_product_name := prdt_rec.name;
2730 END LOOP;
2731
2732 FOR trx_type_rec IN trx_type_csr (p_tmpl_identify_rec.transaction_type_id) LOOP
2733 l_trx_type_name := trx_type_rec.name;
2734 END LOOP;
2735
2736 FOR sty_type_rec IN sty_type_csr (p_tmpl_identify_rec.stream_type_id) LOOP
2737 l_sty_type_name := sty_type_rec.name;
2738 END LOOP;
2739
2740 OKL_API.SET_MESSAGE(p_app_name => g_app_name
2741 ,p_msg_name => 'OKL_TMPL_NOT_FOUND'
2742 ,p_token1 => 'PRODUCT'
2743 ,p_token1_value => l_product_name
2744 ,p_token2 => 'TRANSACTION_TYPE'
2745 ,p_token2_value => l_trx_type_name
2746 ,p_token3 => 'STREAM_TYPE'
2747 ,p_token3_value => NVL(l_sty_type_name, ' ')
2748 ,p_token4 => 'ACCOUNTING_DATE'
2749 ,p_token4_value => G_GL_DATE);
2750
2751
2752 RAISE OKL_API.G_EXCEPTION_ERROR;
2753 END IF;
2754
2755
2756 -- Check the Distribution Status and take appropriate Action
2757 l_check_status := CHECK_JOURNAL(p_source_id => p_dist_info_rec.source_id,
2758 p_source_table => p_dist_info_rec.source_table);
2759
2760 -- l_check_status = 1 denotes that the distributions in OKL exist, but journals have not yet been created in SLA
2761 -- l_check_status = 2 denotes that the distributions exist in OKL , and journals have been created in SLA
2762
2763
2764 IF (l_check_status = 1) THEN
2765 -- Delete from Distributions
2766 DELETE_DIST_AE(p_flag => 'DIST',
2767 p_source_id => p_dist_info_rec.source_id,
2768 p_source_table => p_dist_info_rec.source_table,
2769 x_return_status => l_return_status);
2770
2771 IF (l_return_status <> OKL_API.G_RET_STS_SUCCESS) THEN
2772 RAISE OKL_API.G_EXCEPTION_ERROR;
2773 END IF;
2774
2775 --The accounting event needs to be created only for the OKL transaction types
2776 IF l_try_name IN ('RECEIPT_APPLICATION','PRINCIPAL_ADJUSTMENT','UPFRONT_TAX','BOOKING','TERMINATION',
2777 'ASSET_DISPOSITION','ACCRUAL','GENERAL_LOSS_PROVISION','SPECIFIC_LOSS_PROVISION','REBOOK','EVERGREEN',
2778 'RELEASE','INVESTOR','SPLIT_ASSET')
2779 THEN
2780
2781 --This accounting engine call has been made in an update mode i.e. the transaction line already existed
2782 --Thefore the accounting sources need to be recaptured while creating distributions
2783 --Fetching the transaction header id
2784 OPEN get_tcn_id_csr(p_dist_info_rec.source_id);
2785 FETCH get_tcn_id_csr INTO l_tcn_id;
2786 CLOSE get_tcn_id_csr;
2787
2788 l_tcnv_rec.source_id := l_tcn_id;
2789 l_tcnv_rec.source_table := 'OKL_TRX_CONTRACTS';
2790
2791 --Existing sources are being deleted.
2792 okl_sla_acc_sources_pvt.delete_trx_extension(
2793 p_api_version => l_api_version
2794 ,p_init_msg_list => l_init_msg_list
2795 ,p_trans_hdr_rec => l_tcnv_rec
2796 ,x_trans_line_tbl => l_tclv_tbl
2797 ,x_return_status => l_return_status
2798 ,x_msg_count => l_msg_count
2799 ,x_msg_data => l_msg_data
2800 );
2801
2802 IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
2803 OKL_API.SET_MESSAGE(p_app_name => g_app_name
2804 ,p_msg_name => 'OKL_DEL_SOURCES_FAILED');
2805 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
2806 ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
2807 OKL_API.SET_MESSAGE(p_app_name => g_app_name
2808 ,p_msg_name => 'OKL_DEL_SOURCES_FAILED');
2809 RAISE OKL_API.G_EXCEPTION_ERROR;
2810 END IF;
2811
2812 ELSIF l_try_name IN ('BILLING','CREDIT_MEMO','ROLLOVER_BILLING','ROLLOVER_CREDITMEMO',
2813 'RELEASE_BILLING','RELEASE_CREDITMEMO') THEN
2814 --This accounting engine call has been made in an update mode i.e. the transaction line already existed
2815 --Thefore the accounting sources need to be recaptured while creating distributions
2816 --Fetching the transaction header id
2817 OPEN get_tai_id_csr(p_dist_info_rec.source_id);
2818 FETCH get_tai_id_csr INTO l_tai_id;
2819 CLOSE get_tai_id_csr;
2820
2821 l_rxhv_rec.source_id := l_tai_id;
2822 l_rxhv_rec.source_table := 'OKL_TRX_AR_INVOICES_B';
2823
2824 --Existing sources are being deleted.
2825 okl_sla_acc_sources_pvt.delete_ar_extension(
2826 p_api_version => l_api_version
2827 ,p_init_msg_list => l_init_msg_list
2828 ,p_rxhv_rec => l_rxhv_rec
2829 ,x_rxlv_tbl => x_rxlv_tbl
2830 ,x_return_status => l_return_status
2831 ,x_msg_count => l_msg_count
2832 ,x_msg_data => l_msg_data
2833 );
2834
2835 IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
2836 OKL_API.SET_MESSAGE(p_app_name => g_app_name
2837 ,p_msg_name => 'OKL_DEL_SOURCES_FAILED');
2838 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
2839 ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
2840 OKL_API.SET_MESSAGE(p_app_name => g_app_name
2841 ,p_msg_name => 'OKL_DEL_SOURCES_FAILED');
2842 RAISE OKL_API.G_EXCEPTION_ERROR;
2843 END IF;
2844 --Bug 6316320 dpsingh start
2845 ELSIF l_try_name IN ('BALANCE_WRITE_OFF' ,'ADJUSTMENTS') THEN
2846 --This accounting engine call has been made in an update mode i.e. the transaction line already existed
2847 --Thefore the accounting sources need to be recaptured while creating distributions
2848 --Fetching the transaction header id
2849 OPEN get_adj_id_csr(p_dist_info_rec.source_id);
2850 FETCH get_adj_id_csr INTO l_adj_id;
2851 CLOSE get_adj_id_csr;
2852
2853 l_rxhv_adj_rec.source_id := l_adj_id;
2854 l_rxhv_adj_rec.source_table := 'OKL_TRX_AR_ADJSTS_B' ;
2855
2856 --Existing sources are being deleted.
2857 okl_sla_acc_sources_pvt.delete_ar_extension(
2858 p_api_version => l_api_version
2859 ,p_init_msg_list => l_init_msg_list
2860 ,p_rxhv_rec => l_rxhv_adj_rec
2861 ,x_rxlv_tbl => x_rxlv_adj_tbl
2862 ,x_return_status => l_return_status
2863 ,x_msg_count => l_msg_count
2864 ,x_msg_data => l_msg_data
2865 );
2866
2867 IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
2868 OKL_API.SET_MESSAGE(p_app_name => g_app_name
2869 ,p_msg_name => 'OKL_DEL_SOURCES_FAILED');
2870 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
2871 ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
2872 OKL_API.SET_MESSAGE(p_app_name => g_app_name
2873 ,p_msg_name => 'OKL_DEL_SOURCES_FAILED');
2874 RAISE OKL_API.G_EXCEPTION_ERROR;
2875 END IF;
2876 --Bug 6316320 dpsingh end
2877 --Checking for AP transaction Types
2878 ELSIF l_try_name IN ('DISBURSEMENT','FUNDING','DEBIT_NOTE') THEN
2879 --This accounting engine call has been made in an update mode i.e. the transaction line already existed
2880 --Thefore the accounting sources need to be recaptured while creating distributions
2881 --Fetching the transaction header id
2882 OPEN get_tap_id_csr(p_dist_info_rec.source_id);
2883 FETCH get_tap_id_csr INTO l_tap_id;
2884 CLOSE get_tap_id_csr;
2885
2886 l_pxhv_rec.source_id := l_tap_id;
2887 l_pxhv_rec.source_table := 'OKL_TRX_AP_INVOICES_B';
2888
2889 --Existing sources are being deleted.
2890 okl_sla_acc_sources_pvt.delete_ap_extension(
2891 p_api_version => l_api_version
2892 ,p_init_msg_list => l_init_msg_list
2893 ,p_pxhv_rec => l_pxhv_rec
2894 ,x_pxlv_tbl => x_pxlv_tbl
2895 ,x_return_status => l_return_status
2896 ,x_msg_count => l_msg_count
2897 ,x_msg_data => l_msg_data
2898 );
2899
2900 IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
2901 OKL_API.SET_MESSAGE(p_app_name => g_app_name
2902 ,p_msg_name => 'OKL_DEL_SOURCES_FAILED');
2903 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
2904 ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
2905 OKL_API.SET_MESSAGE(p_app_name => g_app_name
2906 ,p_msg_name => 'OKL_DEL_SOURCES_FAILED');
2907 RAISE OKL_API.G_EXCEPTION_ERROR;
2908 END IF;
2909
2910 END IF;-- Check for transaction type
2911 END IF;
2912
2913 IF (l_check_status = 2) THEN
2914 OKL_API.SET_MESSAGE(p_app_name => g_app_name,
2915 p_msg_name => 'OKL_AE_GONE_TO_SLA');
2916 RAISE OKL_API.G_EXCEPTION_ERROR;
2917 END IF;
2918
2919
2920 FOR j IN 1..l_tmpl_tbl.COUNT
2921 LOOP
2922
2923 tmpl_rec := l_tmpl_tbl(j);
2924
2925 -- Added by Santonyr on 12-Jul-2440 for the bug 3761026
2926
2927 l_template_amount_tbl(j).template_id := tmpl_rec.id;
2928 l_template_amount_tbl(j).stream_type_id := tmpl_rec.sty_id;
2929
2930
2931 IF (p_dist_info_rec.AMOUNT IS NULL) OR
2932 (p_dist_info_rec.AMOUNT = OKL_API.G_MISS_NUM) THEN
2933
2934 -- If the amount is null calculate the amount using formula engine
2935
2936 IF (tmpl_rec.FMA_ID IS NULL) OR
2937 (tmpl_rec.FMA_ID = OKL_API.G_MISS_NUM) THEN
2938 -- If the formula is not found associated with template
2939 OKL_API.SET_MESSAGE(p_app_name => g_app_name,
2940 p_msg_name => 'OKL_FMA_NOT_PRESENT',
2941 p_token1 => 'TEMPLATE_NAME',
2942 p_token1_value => tmpl_rec.NAME);
2943 RAISE OKL_API.G_EXCEPTION_ERROR;
2944 END IF;
2945
2946 OPEN frml_csr(tmpl_rec.fma_id);
2947 FETCH frml_csr INTO l_formula_name;
2948 CLOSE frml_csr;
2949
2950 -- Execute the formula using formula engine.
2951
2952 EXECUTE_FORMULA(p_avlv_rec => tmpl_rec,
2953 p_contract_id => p_dist_info_rec.contract_id,
2954 p_contract_line_id => p_dist_info_rec.contract_line_id,
2955 p_ctxt_val_tbl => p_ctxt_val_tbl,
2956 x_return_status => l_return_status,
2957 x_amount => l_amount );
2958
2959 IF (l_return_status <> OKL_API.G_RET_STS_SUCCESS) THEN
2960 OKL_API.SET_MESSAGE(p_app_name => g_app_name,
2961 p_msg_name => 'OKL_FRML_EXE_FAILED',
2962 p_token1 => 'FORMULA_NAME',
2963 p_token1_value => l_formula_name);
2964
2965 END IF;
2966
2967 IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
2968 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
2969 ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
2970 RAISE OKL_API.G_EXCEPTION_ERROR;
2971 END IF;
2972
2973 -- Added by Santonyr on 12-Jul-2440 for the bug 3761026
2974 l_template_amount_tbl(j).formula_used := 'Y';
2975
2976 ELSE -- If the amount is passed from the caller (amount is not null).
2977
2978 l_amount := p_dist_info_rec.AMOUNT;
2979
2980 -- Added by Santonyr on 12-Jul-2440 for the bug 3761026
2981 l_template_amount_tbl(j).formula_used := 'N';
2982
2983 END IF; -- End If for (p_dist_info_rec.AMOUNT IS NULL)
2984
2985 -- If amount passes is Zero or Amount got from formula is zero then a
2986 -- message should be displayed.
2987
2988 IF (l_amount = 0) THEN
2989 OKL_API.SET_MESSAGE(p_app_name => g_app_name,
2990 p_msg_name => 'OKL_FRML_RET_ZERO_AMT',
2991 p_token1 => 'TEMPLATE_NAME',
2992 p_token1_value => tmpl_rec.NAME);
2993
2994 -- Santonyr on 14-Jul-2003 Fixed bug 3048686
2995 -- RAISE OKL_API.G_EXCEPTION_ERROR;
2996
2997 END IF;
2998
2999 x_template_tbl(j) := tmpl_rec;
3000
3001 --- Changed by Kanti. Bug 3125787
3002 x_amount_tbl(j) := Okl_Accounting_Util.ROUND_AMOUNT(p_amount => l_amount,
3003 p_currency_code => p_dist_info_rec.currency_code);
3004
3005 -- Added by Santonyr on 12-Jul-2440 for the bug 3761026
3006 l_template_amount_tbl(j).amount := x_amount_tbl(j);
3007
3008 -- Create the Distributions if Amount is Greater than Zero
3009 -- Fixed bug 2815972 by Santonyr on 04-Aug-2003
3010
3011 IF (l_amount <> 0) THEN
3012 IF (l_account_derivation = 'ATS') THEN
3013 CREATE_DIST_RECS(p_avlv_rec => tmpl_rec,
3014 p_tmpl_identify_rec => p_tmpl_identify_rec,
3015 p_dist_info_rec => p_dist_info_rec,
3016 p_amount => l_amount,
3017 p_gen_table => p_acc_gen_primary_key_tbl,
3018 x_return_status => l_return_status,
3019 x_tabv_tbl => l_tabv_tbl_out);
3020
3021 IF (l_return_status <> OKL_API.G_RET_STS_SUCCESS) THEN
3022 RAISE OKL_API.G_EXCEPTION_ERROR;
3023 END IF;
3024
3025 ELSIF (l_account_derivation = 'AMB') THEN
3026 CREATE_DIST_RECS(--Bug 6127326 dpsingh start
3027 p_avlv_rec => tmpl_rec,
3028 --Bug 6127326 dpsingh end
3029 p_tmpl_identify_rec => p_tmpl_identify_rec,
3030 p_dist_info_rec => p_dist_info_rec,
3031 p_amount => l_amount,
3032 x_return_status => l_return_status,
3033 x_tabv_tbl => l_tabv_tbl_out);
3034
3035 IF (l_return_status <> OKL_API.G_RET_STS_SUCCESS) THEN
3036 RAISE OKL_API.G_EXCEPTION_ERROR;
3037 END IF;
3038 END IF;
3039 END IF; -- End If for (l_amount <> 0)
3040
3041 --The distribution table returned by each iteration of l_tmpl_tbl.COUNT needs to be accumulated
3042 IF (l_tabv_tbl_final.COUNT = 0) THEN
3043 k := 0;
3044 ELSE
3045 k := l_tabv_tbl_final.COUNT;
3046 END IF;
3047
3048 IF l_tabv_tbl_out.COUNT > 0 THEN
3049 FOR i in l_tabv_tbl_out.FIRST..l_tabv_tbl_out.LAST
3050 LOOP
3051 l_tabv_tbl_final(k).id := l_tabv_tbl_out(i).id;
3052 k := k + 1;
3053 END LOOP;
3054 END IF;
3055
3056 END LOOP; -- End LOOP for (l_tmpl_tbl.COUNT)
3057 --If the account derivation option is 'AMB' and the amount is known
3058 ELSE
3059 --Assinging the amount being passed in the rec to l_amount
3060 l_amount := p_dist_info_rec.amount;
3061 -- Check the Distribution Status and take appropriate Action
3062 l_check_status := CHECK_JOURNAL(p_source_id => p_dist_info_rec.source_id,
3063 p_source_table => p_dist_info_rec.source_table);
3064
3065 -- l_check_status = 1 denotes that the distributions in OKL exist, but journals have not yet been created in SLA
3066 -- l_check_status = 2 denotes that the distributions exist in OKL , and journals have been created in SLA
3067
3068
3069 IF (l_check_status = 1) THEN
3070 -- Delete from Distributions
3071 DELETE_DIST_AE(p_flag => 'DIST',
3072 p_source_id => p_dist_info_rec.source_id,
3073 p_source_table => p_dist_info_rec.source_table,
3074 x_return_status => l_return_status);
3075
3076 IF (l_return_status <> OKL_API.G_RET_STS_SUCCESS) THEN
3077 RAISE OKL_API.G_EXCEPTION_ERROR;
3078 END IF;
3079
3080 --The accounting event needs to be created only for the OKL transaction types
3081 IF l_try_name IN ('RECEIPT_APPLICATION','PRINCIPAL_ADJUSTMENT','UPFRONT_TAX','BOOKING','TERMINATION',
3082 'ASSET_DISPOSITION','ACCRUAL','GENERAL_LOSS_PROVISION','SPECIFIC_LOSS_PROVISION','REBOOK','EVERGREEN',
3083 'RELEASE','INVESTOR','SPLIT_ASSET')
3084 THEN
3085
3086 --This accounting engine call has been made in an update mode i.e. the transaction line already existed
3087 --Thefore the accounting sources need to be recaptured while creating distributions
3088
3089 --Fetching the transaction header id
3090 OPEN get_tcn_id_csr(p_dist_info_rec.source_id);
3091 FETCH get_tcn_id_csr INTO l_tcn_id;
3092 CLOSE get_tcn_id_csr;
3093
3094 l_tcnv_rec.source_id := l_tcn_id;
3095 l_tcnv_rec.source_table := 'OKL_TRX_CONTRACTS';
3096
3097 --Existing sources are being deleted.
3098 okl_sla_acc_sources_pvt.delete_trx_extension(
3099 p_api_version => l_api_version
3100 ,p_init_msg_list => l_init_msg_list
3101 ,p_trans_hdr_rec => l_tcnv_rec
3102 ,x_trans_line_tbl => l_tclv_tbl
3103 ,x_return_status => l_return_status
3104 ,x_msg_count => l_msg_count
3105 ,x_msg_data => l_msg_data
3106 );
3107
3108 IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
3109 OKL_API.SET_MESSAGE(p_app_name => g_app_name
3110 ,p_msg_name => 'OKL_DEL_SOURCES_FAILED');
3111 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
3112 ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
3113 OKL_API.SET_MESSAGE(p_app_name => g_app_name
3114 ,p_msg_name => 'OKL_DEL_SOURCES_FAILED');
3115 RAISE OKL_API.G_EXCEPTION_ERROR;
3116 END IF;
3117
3118 ELSIF l_try_name IN ('BILLING','CREDIT_MEMO','ROLLOVER_BILLING','ROLLOVER_CREDITMEMO',
3119 'RELEASE_BILLING','RELEASE_CREDITMEMO') THEN
3120 --This accounting engine call has been made in an update mode i.e. the transaction line already existed
3121 --Thefore the accounting sources need to be recaptured while creating distributions
3122 --Fetching the transaction header id
3123 OPEN get_tai_id_csr(p_dist_info_rec.source_id);
3124 FETCH get_tai_id_csr INTO l_tai_id;
3125 CLOSE get_tai_id_csr;
3126
3127 l_rxhv_rec.source_id := l_tai_id;
3128 l_rxhv_rec.source_table := 'OKL_TRX_AR_INVOICES_B';
3129
3130 --Existing sources are being deleted.
3131 okl_sla_acc_sources_pvt.delete_ar_extension(
3132 p_api_version => l_api_version
3133 ,p_init_msg_list => l_init_msg_list
3134 ,p_rxhv_rec => l_rxhv_rec
3135 ,x_rxlv_tbl => x_rxlv_tbl
3136 ,x_return_status => l_return_status
3137 ,x_msg_count => l_msg_count
3138 ,x_msg_data => l_msg_data
3139 );
3140
3141 IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
3142 OKL_API.SET_MESSAGE(p_app_name => g_app_name
3143 ,p_msg_name => 'OKL_DEL_SOURCES_FAILED');
3144 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
3145 ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
3146 OKL_API.SET_MESSAGE(p_app_name => g_app_name
3147 ,p_msg_name => 'OKL_DEL_SOURCES_FAILED');
3148 RAISE OKL_API.G_EXCEPTION_ERROR;
3149 END IF;
3150
3151 --Bug 6316320 dpsingh start
3152 ELSIF l_try_name IN ('BALANCE_WRITE_OFF' ,'ADJUSTMENTS') THEN
3153 --This accounting engine call has been made in an update mode i.e. the transaction line already existed
3154 --Thefore the accounting sources need to be recaptured while creating distributions
3155 --Fetching the transaction header id
3156 OPEN get_adj_id_csr(p_dist_info_rec.source_id);
3157 FETCH get_adj_id_csr INTO l_adj_id;
3158 CLOSE get_adj_id_csr;
3159
3160 l_rxhv_adj_rec.source_id := l_adj_id;
3161 l_rxhv_adj_rec.source_table := 'OKL_TRX_AR_ADJSTS_B';
3162
3163 --Existing sources are being deleted.
3164 okl_sla_acc_sources_pvt.delete_ar_extension(
3165 p_api_version => l_api_version
3166 ,p_init_msg_list => l_init_msg_list
3167 ,p_rxhv_rec => l_rxhv_adj_rec
3168 ,x_rxlv_tbl => x_rxlv_adj_tbl
3169 ,x_return_status => l_return_status
3170 ,x_msg_count => l_msg_count
3171 ,x_msg_data => l_msg_data
3172 );
3173
3174 IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
3175 OKL_API.SET_MESSAGE(p_app_name => g_app_name
3176 ,p_msg_name => 'OKL_DEL_SOURCES_FAILED');
3177 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
3178 ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
3179 OKL_API.SET_MESSAGE(p_app_name => g_app_name
3180 ,p_msg_name => 'OKL_DEL_SOURCES_FAILED');
3181 RAISE OKL_API.G_EXCEPTION_ERROR;
3182 END IF;
3183 --Bug 6316320 dpsingh end
3184 --Checking for AP transaction Types
3185 ELSIF l_try_name IN ('DISBURSEMENT','FUNDING','DEBIT_NOTE') THEN
3186 --This accounting engine call has been made in an update mode i.e. the transaction line already existed
3187 --Thefore the accounting sources need to be recaptured while creating distributions
3188 --Fetching the transaction header id
3189 OPEN get_tap_id_csr(p_dist_info_rec.source_id);
3190 FETCH get_tap_id_csr INTO l_tap_id;
3191 CLOSE get_tap_id_csr;
3192
3193 l_pxhv_rec.source_id := l_tap_id;
3194 l_pxhv_rec.source_table := 'OKL_TRX_AP_INVOICES_B';
3195
3196 --Existing sources are being deleted.
3197 okl_sla_acc_sources_pvt.delete_ap_extension(
3198 p_api_version => l_api_version
3199 ,p_init_msg_list => l_init_msg_list
3200 ,p_pxhv_rec => l_pxhv_rec
3201 ,x_pxlv_tbl => x_pxlv_tbl
3202 ,x_return_status => l_return_status
3203 ,x_msg_count => l_msg_count
3204 ,x_msg_data => l_msg_data
3205 );
3206
3207 IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
3208 OKL_API.SET_MESSAGE(p_app_name => g_app_name
3209 ,p_msg_name => 'OKL_DEL_SOURCES_FAILED');
3210 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
3211 ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
3212 OKL_API.SET_MESSAGE(p_app_name => g_app_name
3213 ,p_msg_name => 'OKL_DEL_SOURCES_FAILED');
3214 RAISE OKL_API.G_EXCEPTION_ERROR;
3215 END IF;
3216 END IF;-- Check for transaction type
3217 END IF;
3218
3219 IF (l_check_status = 2) THEN
3220 OKL_API.SET_MESSAGE(p_app_name => g_app_name,
3221 p_msg_name => 'OKL_AE_GONE_TO_SLA');
3222 RAISE OKL_API.G_EXCEPTION_ERROR;
3223 END IF;
3224
3225 --Create the distribution
3226 CREATE_DIST_RECS(p_tmpl_identify_rec => p_tmpl_identify_rec,
3227 p_dist_info_rec => p_dist_info_rec,
3228 p_amount => l_amount,
3229 x_return_status => l_return_status,
3230 x_tabv_tbl => l_tabv_tbl_out);
3231
3232 --As there is only one distribution being created when account derivation is AMB,
3233 --the amount is being assigned to x_amount_tbl(0)
3234 x_amount_tbl(0) := l_amount;
3235
3236 IF (l_return_status <> OKL_API.G_RET_STS_SUCCESS) THEN
3237 RAISE OKL_API.G_EXCEPTION_ERROR;
3238 END IF;
3239
3240 --In the case of AMB, there is only one iteration. However, the l_tabv_tbl_final needs to be populated
3241 -- in this case as well
3242 IF (l_tabv_tbl_final.COUNT = 0) THEN
3243 k := 0;
3244 ELSE
3245 k := l_tabv_tbl_final.COUNT;
3246 END IF;
3247
3248 IF l_tabv_tbl_out.count > 0 THEN
3249 FOR i in l_tabv_tbl_out.FIRST..l_tabv_tbl_out.LAST
3250 LOOP
3251 l_tabv_tbl_final(k).id := l_tabv_tbl_out(i).id;
3252 k := k + 1;
3253 END LOOP;
3254 END IF;
3255 END IF;
3256
3257 --Checking to see if the transaction line amount has a non zero amount .Only if the transaction has atleast one
3258 --transaction line with a non-zero amount are sources captured and accounting event created.
3259 IF (x_amount_tbl.count > 0) THEN
3260 l_line_amount := 0;
3261 FOR i in x_amount_tbl.FIRST..x_amount_tbl.LAST
3262 LOOP
3263 l_line_amount := l_line_amount + x_amount_tbl(i);
3264 END LOOP;
3265 END IF;
3266
3267 --The accounting event needs to be created only for the OKL transaction types
3268 IF l_try_name IN ('RECEIPT_APPLICATION','PRINCIPAL_ADJUSTMENT','UPFRONT_TAX','BOOKING','TERMINATION',
3269 'ASSET_DISPOSITION','ACCRUAL','GENERAL_LOSS_PROVISION','SPECIFIC_LOSS_PROVISION','REBOOK','EVERGREEN',
3270 'RELEASE','INVESTOR','SPLIT_ASSET') AND (l_line_amount >0)
3271 THEN
3272 --Fetch the GL Short Name.This will be sent as the valuation method
3273 --OPEN get_gl_short_name_csr;
3274 --FETCH get_gl_short_name_csr INTO l_gl_short_name;
3275 --CLOSE get_gl_short_name_csr;
3276
3277 -- get the correct short name based on representation.
3278 l_gl_short_name := g_ledger_tbl(g_ledger_id).rep_code;
3279
3280 IF l_gl_short_name IS NULL
3281 THEN
3282 OKL_API.SET_MESSAGE(p_app_name => g_app_name
3283 ,p_msg_name => 'OKL_GL_NOT_SET_FOR_ORG');
3284 RAISE OKL_API.G_EXCEPTION_ERROR;
3285 END IF;
3286
3287 --Making the call to populate_Acct_sources to retreive the l_asev_rec to be passed to
3288 --populate_tcn_sources and populate_tcl_sources
3289
3290 POPULATE_ACCT_SOURCES(p_api_version => l_api_version,
3291 p_init_msg_list => l_init_msg_list,
3292 x_return_status => l_return_status,
3293 x_msg_count => l_msg_count,
3294 x_msg_data => l_msg_data,
3295 p_tmpl_identify_rec => p_tmpl_identify_rec,
3296 p_dist_info_rec => p_dist_info_rec,
3297 p_acc_gen_primary_key_tbl => p_acc_gen_primary_key_tbl,
3298 x_asev_rec => l_asev_rec);
3299
3300 IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
3301 OKL_API.SET_MESSAGE(p_app_name => g_app_name
3302 ,p_msg_name => 'OKL_SLA_SOURCES_FAILED');
3303 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
3304 ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
3305 OKL_API.SET_MESSAGE(p_app_name => g_app_name
3306 ,p_msg_name => 'OKL_SLA_SOURCES_FAILED');
3307 RAISE OKL_API.G_EXCEPTION_ERROR;
3308 END IF;
3309
3310 OPEN get_tcn_id_csr(p_dist_info_rec.source_id);
3311 FETCH get_tcn_id_csr INTO l_tcn_id;
3312 CLOSE get_tcn_id_csr;
3313
3314 OKL_XLA_EVENTS_PVT.event_exists(p_api_version => l_api_version
3315 ,p_init_msg_list => l_init_msg_list
3316 ,x_return_status => l_return_status
3317 ,x_msg_count => l_msg_count
3318 ,x_msg_data => l_msg_data
3319 ,p_tcn_id => l_tcn_id
3320 ,p_action_type => 'CREATE'
3321 ,x_event_id => l_event_id
3322 ,x_event_date => l_event_date);
3323
3324 IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
3325 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
3326 ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
3327 RAISE OKL_API.G_EXCEPTION_ERROR;
3328 END IF;
3329
3330 IF l_event_id is null THEN
3331
3332 l_event_id := OKL_XLA_EVENTS_PVT.create_event(p_api_version => l_api_version
3333 ,p_init_msg_list => l_init_msg_list
3334 ,x_return_status => l_return_status
3335 ,x_msg_count => l_msg_count
3336 ,x_msg_data => l_msg_data
3337 ,p_tcn_id => l_tcn_id
3338 ,p_gl_date => G_gl_date
3339 ,p_action_type => 'CREATE'
3340 ,p_representation_code => l_gl_short_name
3341 );
3342
3343 IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
3344 OKL_API.SET_MESSAGE(p_app_name => g_app_name
3345 ,p_msg_name => 'OKL_CREATE_EVENT_FAILED');
3346 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
3347 ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
3348 OKL_API.SET_MESSAGE(p_app_name => g_app_name
3349 ,p_msg_name => 'OKL_CREATE_EVENT_FAILED');
3350 RAISE OKL_API.G_EXCEPTION_ERROR;
3351 END IF;
3352
3353 l_tcnv_rec.source_id := l_tcn_id;
3354 l_tcnv_rec.source_table := 'OKL_TRX_CONTRACTS';
3355
3356 --Make the call to capture account header source
3357 OKL_SLA_ACC_SOURCES_PVT.populate_tcn_sources(p_api_version => l_api_version
3358 ,p_init_msg_list => l_init_msg_list
3359 ,px_trans_hdr_rec => l_tcnv_rec
3360 ,p_acc_sources_rec => l_asev_rec
3361 ,x_return_status => l_return_status
3362 ,x_msg_count => l_msg_count
3363 ,x_msg_data => l_msg_data
3364 );
3365
3366 IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
3367 OKL_API.SET_MESSAGE(p_app_name => g_app_name
3368 ,p_msg_name => 'OKL_SLA_SOURCES_FAILED');
3369 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
3370 ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
3371 OKL_API.SET_MESSAGE(p_app_name => g_app_name
3372 ,p_msg_name => 'OKL_SLA_SOURCES_FAILED');
3373 RAISE OKL_API.G_EXCEPTION_ERROR;
3374 END IF;
3375
3376 END IF;
3377
3378 --Event id needs to be stamped for every distribution being created
3379 FOR i IN l_tabv_tbl_final.FIRST..l_tabv_tbl_final.LAST
3380 LOOP
3381 l_tabv_tbl(i).id := l_tabv_tbl_final(i).id;
3382 l_tabv_tbl(i).accounting_event_id := l_event_id;
3383 --Once the event is created successfully in XLA, posted_yn flag is set to Y
3384 l_tabv_tbl(i).posted_yn := 'Y';
3385 END LOOP;
3386
3387 --Update the distributions created with the Accounting Event Id
3388 OKL_TRNS_ACC_DSTRS_PUB.update_trns_acc_dstrs(p_api_version => l_api_version
3389 ,p_init_msg_list => l_init_msg_list
3390 ,x_return_status => l_return_status
3391 ,x_msg_count => l_msg_count
3392 ,x_msg_data => l_msg_data
3393 ,p_tabv_tbl => l_tabv_tbl
3394 ,x_tabv_tbl => x_tabv_tbl
3395 );
3396
3397 IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
3398 OKL_API.SET_MESSAGE(p_app_name => g_app_name
3399 ,p_msg_name => 'OKL_UPD_DIST_FAILED');
3400 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
3401 ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
3402 OKL_API.SET_MESSAGE(p_app_name => g_app_name
3403 ,p_msg_name => 'OKL_UPD_DIST_FAILED');
3404 RAISE OKL_API.G_EXCEPTION_ERROR;
3405 END IF;
3406
3407 --Before making the call to capture line sources, check the following
3408 --If l_check_status = 1, then the transaction line is in update mode and existing sources have been deleted
3409 --Header and line Sources need to be captured for all the sources deleted
3410 IF (l_check_status = 1)
3411 THEN
3412 --Populate header sources
3413 l_tcnv_rec.source_id := l_tcn_id;
3414 l_tcnv_rec.source_table := 'OKL_TRX_CONTRACTS';
3415
3416 --Make the call to capture account header source
3417 OKL_SLA_ACC_SOURCES_PVT.populate_tcn_sources(p_api_version => l_api_version
3418 ,p_init_msg_list => l_init_msg_list
3419 ,px_trans_hdr_rec => l_tcnv_rec
3420 ,p_acc_sources_rec => l_asev_rec
3421 ,x_return_status => l_return_status
3422 ,x_msg_count => l_msg_count
3423 ,x_msg_data => l_msg_data
3424 );
3425
3426 IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
3427 OKL_API.SET_MESSAGE(p_app_name => g_app_name
3428 ,p_msg_name => 'OKL_SLA_SOURCES_FAILED');
3429 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
3430 ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
3431 OKL_API.SET_MESSAGE(p_app_name => g_app_name
3432 ,p_msg_name => 'OKL_SLA_SOURCES_FAILED');
3433 RAISE OKL_API.G_EXCEPTION_ERROR;
3434 END IF;
3435
3436 --Making the call to populate line sources
3437 FOR i in l_tclv_tbl.FIRST..l_tclv_tbl.LAST
3438 LOOP
3439 --Make the call to Capture line sources
3440 l_tclv_rec.source_id := l_tclv_tbl(i).source_id;
3441 l_tclv_rec.source_table := l_tclv_tbl(i).source_table;
3442 l_tclv_rec.teh_id := l_tcnv_rec.header_extension_id;
3443
3444 --Make the call to capture account header source
3445 OKL_SLA_ACC_SOURCES_PVT.populate_tcl_sources(p_api_version => l_api_version
3446 ,p_init_msg_list => l_init_msg_list
3447 ,px_trans_line_rec => l_tclv_rec
3448 ,p_acc_sources_rec => l_asev_rec
3449 ,x_return_status => l_return_status
3450 ,x_msg_count => l_msg_count
3451 ,x_msg_data => l_msg_data
3452 );
3453
3454 IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
3455 OKL_API.SET_MESSAGE(p_app_name => g_app_name
3456 ,p_msg_name => 'OKL_SLA_SOURCES_FAILED');
3457 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
3458 ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
3459 OKL_API.SET_MESSAGE(p_app_name => g_app_name
3460 ,p_msg_name => 'OKL_SLA_SOURCES_FAILED');
3461 RAISE OKL_API.G_EXCEPTION_ERROR;
3462 END IF;
3463 END LOOP;
3464 END IF;
3465 --Line sources need to be captured for the current line
3466 --Execute the cursor to fetch the transaction extension header id to pass to the call to populate_tcl_sources
3467 OPEN get_ext_hdr_csr(p_source_id => l_tcn_id);
3468 FETCH get_ext_hdr_csr INTO l_tehv_id;
3469 CLOSE get_ext_hdr_csr;
3470
3471 --Make the call to Capture line sources
3472 l_tclv_rec.source_id := p_dist_info_rec.source_id;
3473 l_tclv_rec.source_table := 'OKL_TXL_CNTRCT_LNS';
3474 l_tclv_rec.teh_id := l_tehv_id;
3475
3476 --Make the call to capture account header source
3477 OKL_SLA_ACC_SOURCES_PVT.populate_tcl_sources(p_api_version => l_api_version
3478 ,p_init_msg_list => l_init_msg_list
3479 ,px_trans_line_rec => l_tclv_rec
3480 ,p_acc_sources_rec => l_asev_rec
3481 ,x_return_status => l_return_status
3482 ,x_msg_count => l_msg_count
3483 ,x_msg_data => l_msg_data
3484 );
3485
3486 IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
3487 OKL_API.SET_MESSAGE(p_app_name => g_app_name
3488 ,p_msg_name => 'OKL_SLA_SOURCES_FAILED');
3489 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
3490 ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
3491 OKL_API.SET_MESSAGE(p_app_name => g_app_name
3492 ,p_msg_name => 'OKL_SLA_SOURCES_FAILED');
3493 RAISE OKL_API.G_EXCEPTION_ERROR;
3494 END IF;
3495 --If the transaction is an AR transaction, then sources should be captured if the transaction line amount
3496 --is non-zero. However event creation for the transaction is not done from OKL
3497
3498 ELSIF l_try_name IN ('BILLING','CREDIT_MEMO','ROLLOVER_BILLING','ROLLOVER_CREDITMEMO',
3499 'RELEASE_BILLING','RELEASE_CREDITMEMO') AND (l_line_amount >0)
3500 THEN
3501 --Fetch the GL Short Name.This will be sent as the valuation method
3502 --OPEN get_gl_short_name_csr;
3503 --FETCH get_gl_short_name_csr INTO l_gl_short_name;
3504 --CLOSE get_gl_short_name_csr;
3505
3506 -- get the correct short name based on representation.
3507 l_gl_short_name := g_ledger_tbl(g_ledger_id).rep_code;
3508
3509 IF l_gl_short_name IS NULL
3510 THEN
3511 OKL_API.SET_MESSAGE(p_app_name => g_app_name
3512 ,p_msg_name => 'OKL_GL_NOT_SET_FOR_ORG');
3513 RAISE OKL_API.G_EXCEPTION_ERROR;
3514 END IF;
3515
3516 --Making the call to populate_Acct_sources to retreive the l_asev_rec to be passed to
3517 --populate_tcn_sources and populate_tcl_sources
3518
3519 POPULATE_ACCT_SOURCES(p_api_version => l_api_version,
3520 p_init_msg_list => l_init_msg_list,
3521 x_return_status => l_return_status,
3522 x_msg_count => l_msg_count,
3523 x_msg_data => l_msg_data,
3524 p_tmpl_identify_rec => p_tmpl_identify_rec,
3525 p_dist_info_rec => p_dist_info_rec,
3526 p_acc_gen_primary_key_tbl => p_acc_gen_primary_key_tbl,
3527 x_asev_rec => l_asev_rec);
3528
3529 IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
3530 OKL_API.SET_MESSAGE(p_app_name => g_app_name
3531 ,p_msg_name => 'OKL_SLA_SOURCES_FAILED');
3532 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
3533 ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
3534 OKL_API.SET_MESSAGE(p_app_name => g_app_name
3535 ,p_msg_name => 'OKL_SLA_SOURCES_FAILED');
3536 RAISE OKL_API.G_EXCEPTION_ERROR;
3537 END IF;
3538
3539 OPEN get_tai_details_csr(p_dist_info_rec.source_id);
3540 FETCH get_tai_details_csr INTO get_tai_details_rec;
3541 CLOSE get_tai_details_csr;
3542
3543 l_rxhv_rec.source_id := get_tai_details_rec.tai_id;
3544 l_rxhv_rec.source_table := 'OKL_TRX_AR_INVOICES_B';
3545 l_rxhv_rec.khr_id := get_tai_details_rec.khr_id;
3546 l_rxhv_rec.try_id := get_tai_details_rec.try_id;
3547
3548
3549 --Before making the call to capture line sources, check the following
3550 --If l_check_status = 1, then the transaction line is in update mode and existing sources have been deleted
3551 --Header and line Sources need to be captured for all the sources deleted
3552 IF (l_check_status = 1)
3553 THEN
3554 --Making the call to populate line sources
3555 FOR i in x_rxlv_tbl.FIRST..l_rxlv_tbl.LAST
3556 LOOP
3557 --Make the call to Capture line sources
3558 l_rxlv_rec.source_id := x_rxlv_tbl(i).source_id;
3559 l_rxlv_rec.source_table := x_rxlv_tbl(i).source_table;
3560 l_rxlv_rec.kle_id := get_tai_details_rec.kle_id;
3561 l_rxlv_rec.sty_id := get_tai_details_rec.sty_id;
3562 l_rxlv_rec.trans_line_description := get_tai_details_rec.trans_line_description;
3563
3564 --Make the call to capture account header source
3565 OKL_SLA_ACC_SOURCES_PVT.populate_ar_sources(p_api_version => l_api_version
3566 ,p_init_msg_list => l_init_msg_list
3567 ,p_rxhv_rec => l_rxhv_rec
3568 ,p_rxlv_rec => l_rxlv_rec
3569 ,p_acc_sources_rec => l_asev_rec
3570 ,x_return_status => l_return_status
3571 ,x_msg_count => l_msg_count
3572 ,x_msg_data => l_msg_data
3573 );
3574
3575 IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
3576 OKL_API.SET_MESSAGE(p_app_name => g_app_name
3577 ,p_msg_name => 'OKL_SLA_SOURCES_FAILED');
3578 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
3579 ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
3580 OKL_API.SET_MESSAGE(p_app_name => g_app_name
3581 ,p_msg_name => 'OKL_SLA_SOURCES_FAILED');
3582 RAISE OKL_API.G_EXCEPTION_ERROR;
3583 END IF;
3584 END LOOP;
3585 END IF;
3586 --Line sources need to be captured for the current line
3587
3588 --Make the call to Capture line sources
3589 l_rxlv_rec.source_id := p_dist_info_rec.source_id;
3590 l_rxlv_rec.source_table := 'OKL_TXD_AR_LN_DTLS_B';
3591 l_rxlv_rec.kle_id := get_tai_details_rec.kle_id;
3592 l_rxlv_rec.sty_id := get_tai_details_rec.sty_id;
3593 l_rxlv_rec.trans_line_description := get_tai_details_rec.trans_line_description;
3594
3595 --Make the call to capture account header source
3596 OKL_SLA_ACC_SOURCES_PVT.populate_ar_sources(p_api_version => l_api_version
3597 ,p_init_msg_list => l_init_msg_list
3598 ,p_rxhv_rec => l_rxhv_rec
3599 ,p_rxlv_rec => l_rxlv_rec
3600 ,p_acc_sources_rec => l_asev_rec
3601 ,x_return_status => l_return_status
3602 ,x_msg_count => l_msg_count
3603 ,x_msg_data => l_msg_data
3604 );
3605
3606 IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
3607 OKL_API.SET_MESSAGE(p_app_name => g_app_name
3608 ,p_msg_name => 'OKL_SLA_SOURCES_FAILED');
3609 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
3610 ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
3611 OKL_API.SET_MESSAGE(p_app_name => g_app_name
3612 ,p_msg_name => 'OKL_SLA_SOURCES_FAILED');
3613 RAISE OKL_API.G_EXCEPTION_ERROR;
3614 END IF;
3615
3616 --Bug 6316320 dpsingh start
3617 ELSIF l_try_name IN ('BALANCE_WRITE_OFF' ,'ADJUSTMENTS') AND (l_line_amount >0)
3618 THEN
3619 --Fetch the GL Short Name.This will be sent as the valuation method
3620 --OPEN get_gl_short_name_csr;
3621 --FETCH get_gl_short_name_csr INTO l_gl_short_name;
3622 --CLOSE get_gl_short_name_csr;
3623
3624 -- get the correct short name based on representation.
3625 l_gl_short_name := g_ledger_tbl(g_ledger_id).rep_code;
3626
3627 IF l_gl_short_name IS NULL
3628 THEN
3629 OKL_API.SET_MESSAGE(p_app_name => g_app_name
3630 ,p_msg_name => 'OKL_GL_NOT_SET_FOR_ORG');
3631 RAISE OKL_API.G_EXCEPTION_ERROR;
3632 END IF;
3633
3634 --Making the call to populate_Acct_sources to retreive the l_asev_rec to be passed to
3635 --populate_tcn_sources and populate_tcl_sources
3636
3637 POPULATE_ACCT_SOURCES(p_api_version => l_api_version,
3638 p_init_msg_list => l_init_msg_list,
3639 x_return_status => l_return_status,
3640 x_msg_count => l_msg_count,
3641 x_msg_data => l_msg_data,
3642 p_tmpl_identify_rec => p_tmpl_identify_rec,
3643 p_dist_info_rec => p_dist_info_rec,
3644 p_acc_gen_primary_key_tbl => p_acc_gen_primary_key_tbl,
3645 x_asev_rec => l_asev_rec);
3646
3647 IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
3648 OKL_API.SET_MESSAGE(p_app_name => g_app_name
3649 ,p_msg_name => 'OKL_SLA_SOURCES_FAILED');
3650 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
3651 ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
3652 OKL_API.SET_MESSAGE(p_app_name => g_app_name
3653 ,p_msg_name => 'OKL_SLA_SOURCES_FAILED');
3654 RAISE OKL_API.G_EXCEPTION_ERROR;
3655 END IF;
3656
3657 OPEN get_adj_details_csr(p_dist_info_rec.source_id);
3658 FETCH get_adj_details_csr INTO get_adj_details_rec;
3659 CLOSE get_adj_details_csr;
3660
3661 l_rxhv_adj_rec.source_id := get_adj_details_rec.adj_id;
3662 l_rxhv_adj_rec.source_table := 'OKL_TRX_AR_ADJSTS_B';
3663 l_rxhv_adj_rec.khr_id := get_adj_details_rec.khr_id;
3664 l_rxhv_adj_rec.try_id := get_adj_details_rec.try_id;
3665
3666
3667 --Before making the call to capture line sources, check the following
3668 --If l_check_status = 1, then the transaction line is in update mode and existing sources have been deleted
3669 --Header and line Sources need to be captured for all the sources deleted
3670 IF (l_check_status = 1)
3671 THEN
3672 --Making the call to populate line sources
3673 FOR i in x_rxlv_adj_tbl.FIRST..l_rxlv_adj_tbl.LAST
3674 LOOP
3675 --Make the call to Capture line sources
3676 l_rxlv_adj_rec.source_id := x_rxlv_adj_tbl(i).source_id;
3677 l_rxlv_adj_rec.source_table := x_rxlv_adj_tbl(i).source_table;
3678 l_rxlv_adj_rec.kle_id := get_adj_details_rec.kle_id;
3679 l_rxlv_adj_rec.sty_id := get_adj_details_rec.sty_id;
3680
3681 --Make the call to capture account header source
3682 OKL_SLA_ACC_SOURCES_PVT.populate_ar_sources(p_api_version => l_api_version
3683 ,p_init_msg_list => l_init_msg_list
3684 ,p_rxhv_rec => l_rxhv_adj_rec
3685 ,p_rxlv_rec => l_rxlv_adj_rec
3686 ,p_acc_sources_rec => l_asev_rec
3687 ,x_return_status => l_return_status
3688 ,x_msg_count => l_msg_count
3689 ,x_msg_data => l_msg_data
3690 );
3691
3692 IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
3693 OKL_API.SET_MESSAGE(p_app_name => g_app_name
3694 ,p_msg_name => 'OKL_SLA_SOURCES_FAILED');
3695 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
3696 ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
3697 OKL_API.SET_MESSAGE(p_app_name => g_app_name
3698 ,p_msg_name => 'OKL_SLA_SOURCES_FAILED');
3699 RAISE OKL_API.G_EXCEPTION_ERROR;
3700 END IF;
3701 END LOOP;
3702 END IF;
3703 --Line sources need to be captured for the current line
3704
3705 --Make the call to Capture line sources
3706 l_rxlv_adj_rec.source_id := p_dist_info_rec.source_id;
3707 l_rxlv_adj_rec.source_table := 'OKL_TXD_AR_LN_DTLS_B';
3708 l_rxlv_adj_rec.kle_id := get_adj_details_rec.kle_id;
3709 l_rxlv_adj_rec.sty_id := get_adj_details_rec.sty_id;
3710
3711 --Make the call to capture account header source
3712 OKL_SLA_ACC_SOURCES_PVT.populate_ar_sources(p_api_version => l_api_version
3713 ,p_init_msg_list => l_init_msg_list
3714 ,p_rxhv_rec => l_rxhv_adj_rec
3715 ,p_rxlv_rec => l_rxlv_adj_rec
3716 ,p_acc_sources_rec => l_asev_rec
3717 ,x_return_status => l_return_status
3718 ,x_msg_count => l_msg_count
3719 ,x_msg_data => l_msg_data
3720 );
3721
3722 IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
3723 OKL_API.SET_MESSAGE(p_app_name => g_app_name
3724 ,p_msg_name => 'OKL_SLA_SOURCES_FAILED');
3725 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
3726 ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
3727 OKL_API.SET_MESSAGE(p_app_name => g_app_name
3728 ,p_msg_name => 'OKL_SLA_SOURCES_FAILED');
3729 RAISE OKL_API.G_EXCEPTION_ERROR;
3730 END IF;
3731 --Bug 6316320 dpsingh end
3732 --Processing for AP Transactions
3733 ELSIF l_try_name IN ('DISBURSEMENT','FUNDING','DEBIT_NOTE') AND (l_line_amount >0)
3734 THEN
3735 -- below code is not required for MG uptake.
3736 --OPEN get_gl_short_name_csr;
3737 --FETCH get_gl_short_name_csr INTO l_gl_short_name;
3738 --CLOSE get_gl_short_name_csr;
3739
3740 -- get the correct short name based on representation.
3741 l_gl_short_name := g_ledger_tbl(g_ledger_id).rep_code;
3742
3743 IF l_gl_short_name IS NULL
3744 THEN
3745 OKL_API.SET_MESSAGE(p_app_name => g_app_name
3746 ,p_msg_name => 'OKL_GL_NOT_SET_FOR_ORG');
3747 RAISE OKL_API.G_EXCEPTION_ERROR;
3748 END IF;
3749
3750 --Making the call to populate_Acct_sources to retreive the l_asev_rec to be passed to
3751 --populate_tcn_sources and populate_tcl_sources
3752
3753 POPULATE_ACCT_SOURCES(p_api_version => l_api_version,
3754 p_init_msg_list => l_init_msg_list,
3755 x_return_status => l_return_status,
3756 x_msg_count => l_msg_count,
3757 x_msg_data => l_msg_data,
3758 p_tmpl_identify_rec => p_tmpl_identify_rec,
3759 p_dist_info_rec => p_dist_info_rec,
3760 p_acc_gen_primary_key_tbl => p_acc_gen_primary_key_tbl,
3761 x_asev_rec => l_asev_rec);
3762
3763 IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
3764 OKL_API.SET_MESSAGE(p_app_name => g_app_name
3765 ,p_msg_name => 'OKL_SLA_SOURCES_FAILED');
3766 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
3767 ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
3768 OKL_API.SET_MESSAGE(p_app_name => g_app_name
3769 ,p_msg_name => 'OKL_SLA_SOURCES_FAILED');
3770 RAISE OKL_API.G_EXCEPTION_ERROR;
3771 END IF;
3772
3773 OPEN get_tap_details_csr(p_dist_info_rec.source_id);
3774 FETCH get_tap_details_csr INTO get_tap_details_rec;
3775 CLOSE get_tap_details_csr;
3776
3777 l_pxhv_rec.source_id := get_tap_details_rec.tap_id;
3778 l_pxhv_rec.source_table := 'OKL_TRX_AP_INVOICES_B';
3779 l_pxhv_rec.khr_id := get_tap_details_rec.khr_id;
3780 l_pxhv_rec.try_id := get_tap_details_rec.try_id;
3781 l_pxhv_rec.trans_number := get_tap_details_rec.trans_number;
3782
3783
3784 --Before making the call to capture line sources, check the following
3785 --If l_check_status = 1, then the transaction line is in update mode and existing sources have been deleted
3786 --Header and line Sources need to be captured for all the sources deleted
3787 IF (l_check_status = 1)
3788 THEN
3789 --Making the call to populate line sources
3790 FOR i in x_pxlv_tbl.FIRST..l_pxlv_tbl.LAST
3791 LOOP
3792 --Make the call to Capture line sources
3793 l_pxlv_rec.source_id := x_pxlv_tbl(i).source_id;
3794 l_pxlv_rec.source_table := x_pxlv_tbl(i).source_table;
3795 l_pxlv_rec.kle_id := get_tap_details_rec.kle_id;
3796 l_pxlv_rec.sty_id := get_tap_details_rec.sty_id;
3797 l_pxlv_rec.trans_line_description := get_tap_details_rec.trans_line_description;
3798
3799 --Make the call to capture account header source
3800 OKL_SLA_ACC_SOURCES_PVT.populate_ap_sources(p_api_version => l_api_version
3801 ,p_init_msg_list => l_init_msg_list
3802 ,p_pxhv_rec => l_pxhv_rec
3803 ,p_pxlv_rec => l_pxlv_rec
3804 ,p_acc_sources_rec => l_asev_rec
3805 ,x_return_status => l_return_status
3806 ,x_msg_count => l_msg_count
3807 ,x_msg_data => l_msg_data
3808 );
3809
3810 IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
3811 OKL_API.SET_MESSAGE(p_app_name => g_app_name
3812 ,p_msg_name => 'OKL_SLA_SOURCES_FAILED');
3813 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
3814 ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
3815 OKL_API.SET_MESSAGE(p_app_name => g_app_name
3816 ,p_msg_name => 'OKL_SLA_SOURCES_FAILED');
3817 RAISE OKL_API.G_EXCEPTION_ERROR;
3818 END IF;
3819 END LOOP;
3820 END IF;
3821 --Line sources need to be captured for the current line
3822
3823 --Make the call to Capture line sources
3824 l_pxlv_rec.source_id := p_dist_info_rec.source_id;
3825 l_pxlv_rec.source_table := p_dist_info_rec.source_table;
3826 l_pxlv_rec.kle_id := get_tap_details_rec.kle_id;
3827 l_pxlv_rec.sty_id := get_tap_details_rec.sty_id;
3828 l_pxlv_rec.trans_line_description := get_tap_details_rec.trans_line_description;
3829
3830 --Make the call to capture account header source
3831 OKL_SLA_ACC_SOURCES_PVT.populate_ap_sources(p_api_version => l_api_version
3832 ,p_init_msg_list => l_init_msg_list
3833 ,p_pxhv_rec => l_pxhv_rec
3834 ,p_pxlv_rec => l_pxlv_rec
3835 ,p_acc_sources_rec => l_asev_rec
3836 ,x_return_status => l_return_status
3837 ,x_msg_count => l_msg_count
3838 ,x_msg_data => l_msg_data
3839 );
3840
3841 IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
3842 OKL_API.SET_MESSAGE(p_app_name => g_app_name
3843 ,p_msg_name => 'OKL_SLA_SOURCES_FAILED');
3844 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
3845 ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
3846 OKL_API.SET_MESSAGE(p_app_name => g_app_name
3847 ,p_msg_name => 'OKL_SLA_SOURCES_FAILED');
3848 RAISE OKL_API.G_EXCEPTION_ERROR;
3849 END IF;
3850 END IF;
3851 OKL_API.END_ACTIVITY(x_msg_count, x_msg_data);
3852
3853 EXCEPTION
3854
3855 WHEN OKL_API.G_EXCEPTION_ERROR THEN
3856 x_return_status := OKL_API.HANDLE_EXCEPTIONS
3857 ( l_api_name,
3858 G_PKG_NAME,
3859 'OKL_API.G_RET_STS_ERROR',
3860 x_msg_count,
3861 x_msg_data,
3862 '_PVT'
3863 );
3864 WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
3865 x_return_status := OKL_API.HANDLE_EXCEPTIONS
3866 ( l_api_name,
3867 G_PKG_NAME,
3868 'OKL_API.G_RET_STS_UNEXP_ERROR',
3869 x_msg_count,
3870 x_msg_data,
3871 '_PVT'
3872 );
3873 WHEN OTHERS THEN
3874 x_return_status := OKL_API.HANDLE_EXCEPTIONS
3875 ( l_api_name,
3876 G_PKG_NAME,
3877 'OTHERS',
3878 x_msg_count,
3879 x_msg_data,
3880 '_PVT'
3881 );
3882
3883 END CREATE_ACCOUNTING_DIST;
3884
3885 --gboomina Bug 4662173 end
3886
3887 --Added by gboomina on 14-Oct-05 for Accruals Performance
3888 --Bug 4662173 - Start of Changes
3889 --This signature is used when a group of dist_info_rec can be grouped for a single transaction header
3890 --as they share the same tmpl_identify_rec
3891
3892 PROCEDURE CREATE_ACCOUNTING_DIST(p_api_version IN NUMBER,
3893 p_init_msg_list IN VARCHAR2,
3894 x_return_status OUT NOCOPY VARCHAR2,
3895 x_msg_count OUT NOCOPY NUMBER,
3896 x_msg_data OUT NOCOPY VARCHAR2,
3897 p_tmpl_identify_rec IN TMPL_IDENTIFY_REC_TYPE,
3898 p_dist_info_tbl IN DIST_INFO_TBL_TYPE,
3899 p_ctxt_val_tbl IN CTXT_VAL_TBL_TYPE,
3900 p_acc_gen_primary_key_tbl IN acc_gen_tbl,
3901 x_template_tbl OUT NOCOPY AVLB_TBL_TYPE,
3902 x_amount_tbl OUT NOCOPY AMT_TBL_TYPE)
3903
3904
3905 IS
3906
3907 l_check_status NUMBER;
3908 i NUMBER := 0;
3909 l_amount NUMBER := 0;
3910
3911 tmpl_rec AVLV_REC_TYPE;
3912 l_tmpl_tbl avlv_tbl_type;
3913 l_formula_name OKL_FORMULAE_V.NAME%TYPE;
3914 l_functional_curr OKL_TRNS_ACC_DSTRS.CURRENCY_CODE%TYPE;
3915 l_return_status VARCHAR2(1) := OKL_API.G_RET_STS_SUCCESS;
3916
3917 l_api_name VARCHAR2(30) := 'CREATE_ACCOUNTING_DIST';
3918 l_api_version NUMBER := 1.0;
3919
3920 -- Added by Santonyr on 30-Jul-2003 to fix the bug 2941805
3921
3922 l_product_name OKL_PRODUCTS.NAME%TYPE;
3923 l_trx_type_name OKL_TRX_TYPES_TL.NAME%TYPE;
3924 l_sty_type_name OKL_STRM_TYPE_TL.NAME%TYPE;
3925
3926 -- Added by Santonyr on 12-Jul-2440 for the bug 3761026
3927
3928 l_template_amount_tbl tmp_bulk_amount_tbl_type;
3929
3930
3931
3932 CURSOR frml_csr(v_id NUMBER) IS
3933 SELECT name
3934 FROM okl_formulae_v
3935 WHERE id = v_id;
3936
3937 -- Added by Santonyr on 30-Jul-2003 to fix the bug 2941805
3938
3939 CURSOR prdt_csr (l_pdt_id OKL_PRODUCTS.ID%TYPE) IS
3940 SELECT name
3941 FROM okl_products
3942 WHERE id = l_pdt_id ;
3943
3944 -- Bug 4205156. SGIYER 07-MAR-05. Added language clause
3945 CURSOR trx_type_csr (l_trx_type_id OKL_TRX_TYPES_TL.ID%TYPE) IS
3946 SELECT name
3947 FROM okl_trx_types_tl
3948 WHERE id = l_trx_type_id
3949 AND language = USERENV('LANG');
3950
3951 -- Bug 4205156. SGIYER 07-MAR-05. Added language clause
3952 CURSOR sty_type_csr (l_sty_type_id OKL_STRM_TYPE_TL.ID%TYPE) IS
3953 SELECT name
3954 FROM okl_strm_type_tl
3955 WHERE id = l_sty_type_id
3956 AND language = USERENV('LANG');
3957
3958 l_dist_info_tbl DIST_INFO_TBL_TYPE:= p_dist_info_tbl;
3959 --Added by gboomina for the Accruals Performance Enhancement
3960 l_acc_gen_ind NUMBER := 0;
3961 l_acc_gen_last_ind NUMBER := 0;
3962 p_acc_gen_tbl_ret acc_gen_primary_key;
3963 l_tmp_amt_tbl_count NUMBER := 0;
3964 --Added by kthiruva on 06-Feb-2007 for SLA Uptake
3965 --Bug 5707866 - Start of Changes
3966 l_account_derivation OKL_SYS_ACCT_OPTS.ACCOUNT_DERIVATION%TYPE;
3967 l_tcn_id NUMBER;
3968 l_init_msg_list VARCHAR2(1) := OKL_API.G_FALSE;
3969 l_msg_count NUMBER := 0;
3970 l_msg_data VARCHAR2(2000);
3971 l_event_id NUMBER;
3972 l_event_date DATE;
3973 l_gl_short_name GL_LEDGERS.SHORT_NAME%TYPE;
3974 l_tabv_tbl_out tabv_tbl_type ;
3975 l_tabv_tbl_final tabv_tbl_type;
3976 x_tabv_tbl tabv_tbl_type ;
3977 k NUMBER := 0;
3978 l_first_rec BOOLEAN := TRUE;
3979
3980 CURSOR get_tcn_id_csr(p_source_id IN NUMBER)
3981 IS
3982 SELECT tcl.tcn_id
3983 FROM OKL_TXL_CNTRCT_LNS tcl
3984 WHERE tcl.id = p_source_id;
3985
3986 -- cursor to get the ledger details for a trx header. MG Uptake
3987 CURSOR get_ledger_id_csr(p_tcl_id IN NUMBER)
3988 IS
3989 SELECT set_of_books_id
3990 FROM okl_trx_contracts hdr, okl_txl_cntrct_lns lns
3991 WHERE hdr.id = lns.tcn_id
3992 AND lns.id = p_tcl_id;
3993
3994 l_ledger_id NUMBER;
3995
3996 CURSOR get_gl_short_name_csr
3997 IS
3998 SELECT GL.SHORT_NAME
3999 FROM OKL_SYS_ACCT_OPTS SAO,
4000 GL_LEDGERS GL
4001 WHERE SAO.SET_OF_BOOKS_ID = GL.LEDGER_ID;
4002 --Bug 5707866 - End of Changes
4003
4004 BEGIN
4005 IF (G_DEBUG_ENABLED = 'Y') THEN
4006 G_IS_DEBUG_STATEMENT_ON := OKL_DEBUG_PUB.CHECK_LOG_ON(G_MODULE, FND_LOG.LEVEL_STATEMENT);
4007 END IF;
4008 x_return_status := OKL_API.G_RET_STS_SUCCESS;
4009
4010 l_return_status := OKL_API.START_ACTIVITY(l_api_name,
4011 G_PKG_NAME,
4012 p_init_msg_list,
4013 l_api_version,
4014 p_api_version,
4015 '_PVT',
4016 x_return_status);
4017 IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
4018 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
4019 ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
4020 RAISE OKL_API.G_EXCEPTION_ERROR;
4021 END IF;
4022
4023 -- get the ledger attributes .. racheruv
4024 get_rep_attributes;
4025
4026 IF l_dist_info_tbl(l_dist_info_tbl.first).source_table = 'OKL_TXL_CNTRCT_LNS' THEN
4027 OPEN get_ledger_id_csr(l_dist_info_tbl(l_dist_info_tbl.first).source_id);
4028 FETCH get_ledger_id_csr INTO l_ledger_id;
4029 CLOSE get_ledger_id_csr;
4030 END IF;
4031
4032 IF l_ledger_id IS NOT NULL THEN
4033 g_representation_type := g_ledger_tbl(l_ledger_id).rep_type;
4034 g_ledger_id := l_ledger_id;
4035 ELSE
4036 g_representation_type := 'PRIMARY';
4037 g_ledger_id := okl_accounting_util.get_set_of_books_id;
4038 END IF;
4039
4040 -- Get the functional currency .. based on the represention
4041 IF g_representation_type = 'PRIMARY' THEN
4042 l_functional_curr := okl_accounting_util.get_func_curr_code;
4043 ELSE
4044 l_functional_curr := okl_accounting_util.get_func_curr_code(g_ledger_id);
4045 END IF;
4046
4047
4048 -- Bug 3948354
4049 -- Set the global variable G_REV_REC_FLAG to the value passed by calling program
4050
4051 G_REV_REC_FLAG := p_tmpl_identify_rec.REV_REC_FLAG;
4052
4053
4054 -- Validate the Parameters
4055
4056 IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
4057 OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'Prior to the call to VALIDATE_PARAMS');
4058 END IF;
4059 VALIDATE_PARAMS(p_dist_info_tbl => l_dist_info_tbl,
4060 p_functional_curr => l_functional_curr,
4061 x_return_status => l_return_status);
4062 IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
4063 OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'After the call to VALIDATE_PARAMS, the return status is :'||l_return_status);
4064 END IF;
4065
4066
4067
4068 IF (l_return_status <> OKL_API.G_RET_STS_SUCCESS) THEN
4069 RAISE OKL_API.G_EXCEPTION_ERROR;
4070 END IF;
4071
4072 -- Get the Templates from the given parameters
4073
4074 --- Change the G_GL_DATE to p_dist_info_rec.accounting_date if we want to pass passed-date as GL Date
4075
4076 IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
4077 OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'Prior to the call to Get_Template_Info');
4078 END IF;
4079
4080 --Bug 5707866 - Start of Changes
4081 OPEN get_acct_derivation_csr;
4082 FETCH get_acct_derivation_csr INTO l_account_derivation;
4083 CLOSE get_acct_derivation_csr;
4084
4085 IF l_account_derivation IS NULL THEN
4086 OKL_API.SET_MESSAGE(p_app_name => g_app_name
4087 ,p_msg_name => 'OKL_ACCT_DER_NOT_SET');
4088 RAISE OKL_API.G_EXCEPTION_ERROR;
4089 END IF;
4090
4091 --Deriving the functional currency to be passed in the call to validate_params
4092 --l_functional_curr := Okl_Accounting_Util.GET_FUNC_CURR_CODE; -- redundant code
4093
4094 -- Check the Distribution Status and take appropriate Action
4095 FOR i in l_dist_info_tbl.FIRST..l_dist_info_tbl.LAST LOOP
4096 --Only when the account derivation option is 'ATS'
4097 --Or if the account derivation option is 'AMB' and the transaction amount is not known
4098 --should the template information be fetched
4099 IF (l_account_derivation = 'ATS') OR
4100 ((l_account_derivation = 'AMB') AND ((l_dist_info_tbl(i).AMOUNT IS NULL) OR (l_dist_info_tbl(i).AMOUNT = OKL_API.G_MISS_NUM)))
4101 THEN
4102 IF (l_first_rec = TRUE)
4103 THEN
4104 GET_TEMPLATE_INFO(p_api_version => l_api_version,
4105 p_init_msg_list => p_init_msg_list,
4106 x_return_status => l_return_status,
4107 x_msg_count => x_msg_count,
4108 x_msg_data => x_msg_data,
4109 p_tmpl_identify_rec => p_tmpl_identify_rec,
4110 x_template_tbl => l_tmpl_tbl,
4111 p_validity_date => G_GL_DATE);
4112
4113 IF (l_return_status <> OKL_API.G_RET_STS_SUCCESS) THEN
4114 RAISE OKL_API.G_EXCEPTION_ERROR;
4115 END IF;
4116
4117 --Setting l_first_rec to FALSE, so that GET_TEMPLATE_INFO need not be called every time in the loop
4118 l_first_rec := FALSE;
4119
4120 IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
4121 OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'The return status after the Get_Template_Info call is :'||l_return_status);
4122 END IF;
4123
4124 -- Raise an error if template is not found.
4125 IF (l_tmpl_tbl.COUNT = 0) THEN
4126 -- Added by Santonyr on 30-Jul-2003 to fix the bug 2941805
4127 FOR prdt_rec IN prdt_csr (p_tmpl_identify_rec.product_id) LOOP
4128 l_product_name := prdt_rec.name;
4129 END LOOP;
4130
4131 FOR trx_type_rec IN trx_type_csr (p_tmpl_identify_rec.transaction_type_id) LOOP
4132 l_trx_type_name := trx_type_rec.name;
4133 END LOOP;
4134
4135 FOR sty_type_rec IN sty_type_csr (p_tmpl_identify_rec.stream_type_id) LOOP
4136 l_sty_type_name := sty_type_rec.name;
4137 END LOOP;
4138
4139 OKL_API.SET_MESSAGE(p_app_name => g_app_name
4140 ,p_msg_name => 'OKL_TMPL_NOT_FOUND'
4141 ,p_token1 => 'PRODUCT'
4142 ,p_token1_value => l_product_name
4143 ,p_token2 => 'TRANSACTION_TYPE'
4144 ,p_token2_value => l_trx_type_name
4145 ,p_token3 => 'STREAM_TYPE'
4146 ,p_token3_value => NVL(l_sty_type_name, ' ')
4147 ,p_token4 => 'ACCOUNTING_DATE'
4148 ,p_token4_value => G_GL_DATE);
4149
4150
4151 RAISE OKL_API.G_EXCEPTION_ERROR;
4152 END IF;
4153 END IF;
4154
4155 -- Check the Distribution Status and take appropriate Action
4156 l_check_status := CHECK_JOURNAL(p_source_id => l_dist_info_tbl(i).source_id,
4157 p_source_table => l_dist_info_tbl(i).source_table);
4158
4159 -- l_check_status = 1 denotes that the distributions in OKL exist, but journals have not yet been created in SLA
4160 -- l_check_status = 2 denotes that the distributions exist in OKL , and journals have been created in SLA
4161
4162
4163 IF (l_check_status = 1) THEN
4164 -- Delete from Distributions
4165 DELETE_DIST_AE(p_flag => 'DIST',
4166 p_source_id => l_dist_info_tbl(i).source_id,
4167 p_source_table => l_dist_info_tbl(i).source_table,
4168 x_return_status => l_return_status);
4169
4170 IF (l_return_status <> OKL_API.G_RET_STS_SUCCESS) THEN
4171 RAISE OKL_API.G_EXCEPTION_ERROR;
4172 END IF;
4173
4174 END IF;
4175
4176 IF (l_check_status = 2) THEN
4177 OKL_API.SET_MESSAGE(p_app_name => g_app_name,
4178 p_msg_name => 'OKL_AE_GONE_TO_SLA');
4179 RAISE OKL_API.G_EXCEPTION_ERROR;
4180 END IF;
4181
4182 FOR j IN 1..l_tmpl_tbl.COUNT
4183 LOOP
4184 tmpl_rec := l_tmpl_tbl(j);
4185
4186 -- Added by Santonyr on 12-Jul-2440 for the bug 3761026
4187 l_template_amount_tbl(l_tmp_amt_tbl_count).template_id := tmpl_rec.id;
4188 l_template_amount_tbl(l_tmp_amt_tbl_count).stream_type_id := tmpl_rec.sty_id;
4189 --Building the reference between the template_amount_tbl and dist_info_rec
4190 l_template_amount_tbl(l_tmp_amt_tbl_count).parent_index_number := i;
4191
4192
4193 IF (l_dist_info_tbl(i).AMOUNT IS NULL) OR
4194 (l_dist_info_tbl(i).AMOUNT = OKL_API.G_MISS_NUM) THEN
4195
4196 -- If the amount is null calculate the amount using formula engine
4197 IF (tmpl_rec.FMA_ID IS NULL) OR
4198 (tmpl_rec.FMA_ID = OKL_API.G_MISS_NUM) THEN
4199 -- If the formula is not found associated with template
4200 OKL_API.SET_MESSAGE(p_app_name => g_app_name,
4201 p_msg_name => 'OKL_FMA_NOT_PRESENT',
4202 p_token1 => 'TEMPLATE_NAME',
4203 p_token1_value => tmpl_rec.NAME);
4204 RAISE OKL_API.G_EXCEPTION_ERROR;
4205 END IF;
4206
4207 OPEN frml_csr(tmpl_rec.fma_id);
4208 FETCH frml_csr INTO l_formula_name;
4209 CLOSE frml_csr;
4210
4211 -- For secondary rep txn, set the security policy for streams. MG Uptake
4212 IF g_representation_type = 'SECONDARY' THEN
4213 OKL_STREAMS_SEC_PVT.SET_REPO_STREAMS;
4214 END IF;
4215
4216 -- Execute the formula using formula engine.
4217
4218 EXECUTE_FORMULA(p_avlv_rec => tmpl_rec,
4219 p_contract_id => l_dist_info_tbl(i).contract_id,
4220 p_contract_line_id => l_dist_info_tbl(i).contract_line_id,
4221 p_ctxt_val_tbl => p_ctxt_val_tbl,
4222 x_return_status => l_return_status,
4223 x_amount => l_amount );
4224
4225 IF (l_return_status <> OKL_API.G_RET_STS_SUCCESS) THEN
4226 OKL_API.SET_MESSAGE(p_app_name => g_app_name,
4227 p_msg_name => 'OKL_FRML_EXE_FAILED',
4228 p_token1 => 'FORMULA_NAME',
4229 p_token1_value => l_formula_name);
4230
4231 END IF;
4232
4233 -- For secondary rep txn, reset the security policy for streams. MG Uptake
4234 IF g_representation_type = 'SECONDARY' THEN
4235 OKL_STREAMS_SEC_PVT.RESET_REPO_STREAMS;
4236 END IF;
4237
4238 IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
4239 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
4240 ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
4241 RAISE OKL_API.G_EXCEPTION_ERROR;
4242 END IF;
4243
4244 -- Added by Santonyr on 12-Jul-2440 for the bug 3761026
4245 l_template_amount_tbl(l_tmp_amt_tbl_count).formula_used := 'Y';
4246
4247 ELSE -- If the amount is passed from the caller (amount is not null).
4248
4249 l_amount := l_dist_info_tbl(i).AMOUNT;
4250 -- Added by Santonyr on 12-Jul-2440 for the bug 3761026
4251 l_template_amount_tbl(l_tmp_amt_tbl_count).formula_used := 'N';
4252
4253 END IF; -- End If for (p_dist_info_rec.AMOUNT IS NULL)
4254
4255 -- If amount passes is Zero or Amount got from formula is zero then a
4256 -- message should be displayed.
4257
4258 IF (l_amount = 0) THEN
4259 OKL_API.SET_MESSAGE(p_app_name => g_app_name,
4260 p_msg_name => 'OKL_FRML_RET_ZERO_AMT',
4261 p_token1 => 'TEMPLATE_NAME',
4262 p_token1_value => tmpl_rec.NAME);
4263
4264 -- Santonyr on 14-Jul-2003 Fixed bug 3048686
4265 -- RAISE OKL_API.G_EXCEPTION_ERROR;
4266
4267 END IF;
4268
4269 IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
4270 OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'Prior to the call to COPY_TEMPLATE_TBL');
4271 END IF;
4272
4273 COPY_TEMPLATE_TBL(p_temp_rec => tmpl_rec,
4274 x_template_rec => x_template_tbl(j),
4275 x_return_status => l_return_status);
4276
4277
4278 IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
4279 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
4280 ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
4281 RAISE OKL_API.G_EXCEPTION_ERROR;
4282 END IF;
4283
4284 IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
4285 OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'After the call to COPY_TEMPLATE_TBL, the return status is '||l_return_status);
4286 END IF;
4287
4288 --Building a reference between the dist_info rec and x_template_tbl
4289 x_template_tbl(l_tmp_amt_tbl_count).parent_index_number := i;
4290 x_amount_tbl(l_tmp_amt_tbl_count).amount := Okl_Accounting_Util.ROUND_AMOUNT(p_amount => l_amount,
4291 p_currency_code => p_dist_info_tbl(i).currency_code);
4292 x_amount_tbl(l_tmp_amt_tbl_count).parent_index_number := i;
4293 l_template_amount_tbl(l_tmp_amt_tbl_count).amount := x_amount_tbl(l_tmp_amt_tbl_count).amount;
4294
4295 --Fetch the Account gen table corresponding to the source_id of the current distribution record
4296 GET_ACC_GEN_TBL(p_source_id => p_dist_info_tbl(i).source_id,
4297 p_gen_table => p_acc_gen_primary_key_tbl,
4298 x_acc_gen_tbl_ret => p_acc_gen_tbl_ret);
4299
4300 IF (l_amount <> 0) THEN
4301 IF (l_account_derivation = 'ATS')
4302 THEN
4303 CREATE_DIST_RECS(p_avlv_rec => tmpl_rec,
4304 p_tmpl_identify_rec => p_tmpl_identify_rec,
4305 p_dist_info_rec => l_dist_info_tbl(i),
4306 p_amount => l_amount,
4307 p_gen_table => p_acc_gen_tbl_ret,
4308 x_return_status => l_return_status,
4309 x_tabv_tbl => l_tabv_tbl_out);
4310
4311 IF (l_return_status <> OKL_API.G_RET_STS_SUCCESS) THEN
4312 RAISE OKL_API.G_EXCEPTION_ERROR;
4313 END IF;
4314 ELSIF (l_account_derivation = 'AMB')
4315 THEN
4316 CREATE_DIST_RECS(--Bug 6127326 dpsingh start
4317 p_avlv_rec => tmpl_rec,
4318 --Bug 6127326 dpsingh end
4319 p_tmpl_identify_rec => p_tmpl_identify_rec,
4320 p_dist_info_rec => l_dist_info_tbl(i),
4321 p_amount => l_amount,
4322 x_return_status => l_return_status,
4323 x_tabv_tbl => l_tabv_tbl_out);
4324
4325 IF (l_return_status <> OKL_API.G_RET_STS_SUCCESS) THEN
4326 RAISE OKL_API.G_EXCEPTION_ERROR;
4327 END IF;
4328 END IF;
4329 END IF; -- End If for (l_amount <> 0)
4330
4331 --Incrementing the counter
4332 l_tmp_amt_tbl_count := l_tmp_amt_tbl_count + 1;
4333
4334 IF (l_tabv_tbl_final.COUNT = 0) THEN
4335 k := 0;
4336 ELSE
4337 k := l_tabv_tbl_final.COUNT;
4338 END IF;
4339
4340 FOR i in l_tabv_tbl_out.FIRST..l_tabv_tbl_out.LAST
4341 LOOP
4342 l_tabv_tbl_final(k).id := l_tabv_tbl_out(i).id;
4343 k := k + 1;
4344 END LOOP;
4345
4346 END LOOP; -- End LOOP for (l_tmpl_tbl.COUNT)
4347
4348 --Else when the account derivation option is 'AMB' and the transaction amount is already known
4349 ELSE
4350 --Assinging the amount being passed in the rec to l_amount
4351 l_amount := l_dist_info_tbl(i).amount;
4352
4353 --Deriving the functional currency to be passed in the call to validate_params
4354 --l_functional_curr := Okl_Accounting_Util.GET_FUNC_CURR_CODE; -- redundant code
4355
4356 -- Check the Distribution Status and take appropriate Action
4357 l_check_status := CHECK_JOURNAL(p_source_id => l_dist_info_tbl(i).source_id,
4358 p_source_table => l_dist_info_tbl(i).source_table);
4359
4360 -- l_check_status = 1 denotes that the distributions in OKL exist, but journals have not yet been created in SLA
4361 -- l_check_status = 2 denotes that the distributions exist in OKL , and journals have been created in SLA
4362
4363
4364 IF (l_check_status = 1) THEN
4365 -- Delete from Distributions
4366 DELETE_DIST_AE(p_flag => 'DIST',
4367 p_source_id => l_dist_info_tbl(i).source_id,
4368 p_source_table => l_dist_info_tbl(i).source_table,
4369 x_return_status => l_return_status);
4370
4371 IF (l_return_status <> OKL_API.G_RET_STS_SUCCESS) THEN
4372 RAISE OKL_API.G_EXCEPTION_ERROR;
4373 END IF;
4374
4375 END IF;
4376
4377 IF (l_check_status = 2) THEN
4378 OKL_API.SET_MESSAGE(p_app_name => g_app_name,
4379 p_msg_name => 'OKL_AE_GONE_TO_SLA');
4380 RAISE OKL_API.G_EXCEPTION_ERROR;
4381 END IF;
4382
4383 l_template_amount_tbl(l_tmp_amt_tbl_count).amount := x_amount_tbl(l_tmp_amt_tbl_count).amount;
4384
4385 l_amount := l_dist_info_tbl(i).amount;
4386
4387 IF (l_amount <> 0) THEN
4388
4389 CREATE_DIST_RECS(p_tmpl_identify_rec => p_tmpl_identify_rec,
4390 p_dist_info_rec => l_dist_info_tbl(i),
4391 p_amount => l_amount,
4392 x_return_status => l_return_status,
4393 x_tabv_tbl => l_tabv_tbl_out);
4394
4395 IF (l_return_status <> OKL_API.G_RET_STS_SUCCESS) THEN
4396 RAISE OKL_API.G_EXCEPTION_ERROR;
4397 END IF;
4398 END IF; -- End If for (l_amount <> 0)
4399
4400 x_amount_tbl(l_tmp_amt_tbl_count).amount := Okl_Accounting_Util.ROUND_AMOUNT(p_amount => l_amount,
4401 p_currency_code => p_dist_info_tbl(i).currency_code);
4402 x_amount_tbl(l_tmp_amt_tbl_count).parent_index_number := i;
4403
4404 --Incrementing the counter
4405 l_tmp_amt_tbl_count := l_tmp_amt_tbl_count + 1;
4406
4407 IF (l_tabv_tbl_final.COUNT = 0) THEN
4408 k := 0;
4409 ELSE
4410 k := l_tabv_tbl_final.COUNT;
4411 END IF;
4412
4413 FOR i in l_tabv_tbl_out.FIRST..l_tabv_tbl_out.LAST
4414 LOOP
4415 l_tabv_tbl_final(k).id := l_tabv_tbl_out(i).id;
4416 k := k + 1;
4417 END LOOP;
4418
4419 END IF;
4420 END LOOP; --End loop for (l_dist_info_tbl.count)
4421
4422 --Fetching the transaction header id corresponding to this distribution
4423 --As the dist_info_tbl is grouped for a single transaction header,
4424 --the tcn_id is fetched only once for the entire table
4425 OPEN get_tcn_id_csr(p_source_id => l_dist_info_tbl(l_dist_info_tbl.first).source_id);
4426 FETCH get_tcn_id_csr INTO l_tcn_id;
4427 CLOSE get_tcn_id_csr;
4428
4429 --Checking if an event has already been created for the transaction
4430 OKL_XLA_EVENTS_PVT.event_exists(p_api_version => l_api_version
4431 ,p_init_msg_list => l_init_msg_list
4432 ,x_return_status => l_return_status
4433 ,x_msg_count => l_msg_count
4434 ,x_msg_data => l_msg_data
4435 ,p_tcn_id => l_tcn_id
4436 ,p_action_type => 'CREATE'
4437 ,x_event_id => l_event_id
4438 ,x_event_date => l_event_date);
4439
4440 IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
4441 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
4442 ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
4443 RAISE OKL_API.G_EXCEPTION_ERROR;
4444 END IF;
4445
4446 --If an event is already found , do nothing, else Capture account sources for the header
4447 IF l_event_id IS NULL
4448 THEN
4449 -- below code s not required for MG uptake.
4450 --OPEN get_gl_short_name_csr;
4451 --FETCH get_gl_short_name_csr INTO l_gl_short_name;
4452 --CLOSE get_gl_short_name_csr;
4453
4454 -- set the representation name which will be used as valuation method
4455 l_gl_short_name := g_ledger_tbl(g_ledger_id).rep_code;
4456
4457 IF l_gl_short_name IS NULL
4458 THEN
4459 OKL_API.SET_MESSAGE(p_app_name => g_app_name
4460 ,p_msg_name => 'OKL_GL_NOT_SET_FOR_ORG');
4461 RAISE OKL_API.G_EXCEPTION_ERROR;
4462 END IF;
4463
4464 l_event_id := OKL_XLA_EVENTS_PVT.create_event(p_api_version => l_api_version
4465 ,p_init_msg_list => l_init_msg_list
4466 ,x_return_status => l_return_status
4467 ,x_msg_count => l_msg_count
4468 ,x_msg_data => l_msg_data
4469 ,p_tcn_id => l_tcn_id
4470 ,p_gl_date => G_gl_date
4471 ,p_action_type => 'CREATE'
4472 ,p_representation_code => l_gl_short_name
4473 );
4474
4475 IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
4476 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
4477 ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
4478 RAISE OKL_API.G_EXCEPTION_ERROR;
4479 END IF;
4480
4481 END IF;
4482
4483 FOR i in l_tabv_tbl_final.FIRST..l_tabv_tbl_final.LAST
4484 LOOP
4485 l_tabv_tbl_final(i).accounting_event_id := l_event_id;
4486 --Once the event is created successfully in XLA, posted_yn flag is set to Y
4487 l_tabv_tbl_final(i).posted_yn := 'Y';
4488 END LOOP;
4489
4490 --Update the accounting_event_id on the
4491 OKL_TRNS_ACC_DSTRS_PUB.update_trns_acc_dstrs(p_api_version => l_api_version
4492 ,p_init_msg_list => l_init_msg_list
4493 ,x_return_status => l_return_status
4494 ,x_msg_count => l_msg_count
4495 ,x_msg_data => l_msg_data
4496 ,p_tabv_tbl => l_Tabv_tbl_final
4497 ,x_tabv_tbl => x_tabv_tbl
4498 );
4499
4500 OKL_API.END_ACTIVITY(x_msg_count, x_msg_data);
4501
4502 EXCEPTION
4503
4504 WHEN OKL_API.G_EXCEPTION_ERROR THEN
4505 x_return_status := OKL_API.HANDLE_EXCEPTIONS
4506 ( l_api_name,
4507 G_PKG_NAME,
4508 'OKL_API.G_RET_STS_ERROR',
4509 x_msg_count,
4510 x_msg_data,
4511 '_PVT'
4512 );
4513 WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
4514 x_return_status := OKL_API.HANDLE_EXCEPTIONS
4515 ( l_api_name,
4516 G_PKG_NAME,
4517 'OKL_API.G_RET_STS_UNEXP_ERROR',
4518 x_msg_count,
4519 x_msg_data,
4520 '_PVT'
4521 );
4522 WHEN OTHERS THEN
4523 x_return_status := OKL_API.HANDLE_EXCEPTIONS
4524 ( l_api_name,
4525 G_PKG_NAME,
4526 'OTHERS',
4527 x_msg_count,
4528 x_msg_data,
4529 '_PVT'
4530 );
4531
4532 END CREATE_ACCOUNTING_DIST;
4533 --Bug 4662173 - End of Changes
4534
4535 PROCEDURE CREATE_ACCOUNTING_DIST(p_api_version IN NUMBER,
4536 p_init_msg_list IN VARCHAR2,
4537 x_return_status OUT NOCOPY VARCHAR2,
4538 x_msg_count OUT NOCOPY NUMBER,
4539 x_msg_data OUT NOCOPY VARCHAR2,
4540 p_tmpl_identify_rec IN TMPL_IDENTIFY_REC_TYPE,
4541 p_dist_info_tbl IN DIST_INFO_TBL_TYPE,
4542 p_ctxt_val_tbl IN CTXT_TBL_TYPE,
4543 p_acc_gen_primary_key_tbl IN ACC_GEN_TBL_TYPE,
4544 x_template_tbl OUT NOCOPY AVLV_OUT_TBL_TYPE,
4545 x_amount_tbl OUT NOCOPY AMOUNT_OUT_TBL_TYPE,
4546 x_tabv_tbl OUT NOCOPY TABV_TBL_TYPE)
4547
4548 IS
4549
4550 l_check_status NUMBER;
4551 i NUMBER := 0;
4552 l_amount NUMBER := 0;
4553
4554 tmpl_rec AVLV_REC_TYPE;
4555 l_tmpl_tbl avlv_tbl_type;
4556 l_formula_name OKL_FORMULAE_V.NAME%TYPE;
4557 l_functional_curr OKL_TRNS_ACC_DSTRS.CURRENCY_CODE%TYPE;
4558 l_return_status VARCHAR2(1) := OKL_API.G_RET_STS_SUCCESS;
4559
4560 l_api_name VARCHAR2(30) := 'CREATE_ACCOUNTING_DIST';
4561 l_api_version NUMBER := 1.0;
4562
4563 -- Added by Santonyr on 30-Jul-2003 to fix the bug 2941805
4564
4565 l_product_name OKL_PRODUCTS.NAME%TYPE;
4566 l_trx_type_name OKL_TRX_TYPES_TL.NAME%TYPE;
4567 l_sty_type_name OKL_STRM_TYPE_TL.NAME%TYPE;
4568
4569 CURSOR frml_csr(v_id NUMBER) IS
4570 SELECT name
4571 FROM okl_formulae_v
4572 WHERE id = v_id;
4573
4574 -- Added by Santonyr on 30-Jul-2003 to fix the bug 2941805
4575
4576 CURSOR prdt_csr (l_pdt_id OKL_PRODUCTS.ID%TYPE) IS
4577 SELECT name
4578 FROM okl_products
4579 WHERE id = l_pdt_id ;
4580
4581 -- Bug 4205156. SGIYER 07-MAR-05. Added language clause
4582 CURSOR trx_type_csr (l_trx_type_id OKL_TRX_TYPES_TL.ID%TYPE) IS
4583 SELECT name
4584 FROM okl_trx_types_tl
4585 WHERE id = l_trx_type_id
4586 AND language = USERENV('LANG');
4587
4588 -- Bug 4205156. SGIYER 07-MAR-05. Added language clause
4589 CURSOR sty_type_csr (l_sty_type_id OKL_STRM_TYPE_TL.ID%TYPE) IS
4590 SELECT name
4591 FROM okl_strm_type_tl
4592 WHERE id = l_sty_type_id
4593 AND language = USERENV('LANG');
4594
4595 l_dist_info_tbl DIST_INFO_TBL_TYPE:= p_dist_info_tbl;
4596 --Added by gboomina for the Accruals Performance Enhancement
4597 l_acc_gen_ind NUMBER := 0;
4598 l_acc_gen_last_ind NUMBER := 0;
4599 p_acc_gen_tbl_ret acc_gen_primary_key;
4600 l_tmp_amt_tbl_count NUMBER := 0;
4601 --Added by kthiruva on 06-Feb-2007 for SLA Uptake
4602 --Bug 5707866 - Start of Changes
4603 l_ctxt_val_tbl CTXT_VAL_TBL_TYPE;
4604 l_account_derivation OKL_SYS_ACCT_OPTS.ACCOUNT_DERIVATION%TYPE;
4605 l_tcn_id NUMBER;
4606 l_init_msg_list VARCHAR2(1) := OKL_API.G_FALSE;
4607 l_msg_count NUMBER := 0;
4608 l_msg_data VARCHAR2(2000);
4609 l_event_id NUMBER;
4610 l_event_date DATE;
4611 l_gl_short_name GL_LEDGERS.SHORT_NAME%TYPE;
4612 l_tabv_tbl_out tabv_tbl_type ;
4613 l_tabv_tbl_final tabv_tbl_type;
4614 --x_tabv_tbl tabv_tbl_type ;
4615 k NUMBER := 0;
4616 l_first_rec BOOLEAN := TRUE;
4617
4618 --Bug 5707866 - End of Changes
4619
4620 BEGIN
4621 IF (G_DEBUG_ENABLED = 'Y') THEN
4622 G_IS_DEBUG_STATEMENT_ON := OKL_DEBUG_PUB.CHECK_LOG_ON(G_MODULE, FND_LOG.LEVEL_STATEMENT);
4623 END IF;
4624 x_return_status := OKL_API.G_RET_STS_SUCCESS;
4625
4626 l_return_status := OKL_API.START_ACTIVITY(l_api_name,
4627 G_PKG_NAME,
4628 p_init_msg_list,
4629 l_api_version,
4630 p_api_version,
4631 '_PVT',
4632 x_return_status);
4633 IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
4634 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
4635 ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
4636 RAISE OKL_API.G_EXCEPTION_ERROR;
4637 END IF;
4638
4639 -- Get the functional currency, based on the representation
4640 IF g_representation_type = 'PRIMARY' THEN
4641 l_functional_curr := okl_accounting_util.get_func_curr_code;
4642 ELSE
4643 l_functional_curr := okl_accounting_util.get_func_curr_code(g_ledger_id);
4644 END IF;
4645
4646
4647 -- Bug 3948354
4648 -- Set the global variable G_REV_REC_FLAG to the value passed by calling program
4649 G_REV_REC_FLAG := p_tmpl_identify_rec.REV_REC_FLAG;
4650
4651 -- Validate the Parameters
4652
4653 IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
4654 OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'Prior to the call to VALIDATE_PARAMS');
4655 END IF;
4656 VALIDATE_PARAMS(p_dist_info_tbl => l_dist_info_tbl,
4657 p_functional_curr => l_functional_curr,
4658 x_return_status => l_return_status);
4659
4660 IF (l_return_status <> OKL_API.G_RET_STS_SUCCESS) THEN
4661 RAISE OKL_API.G_EXCEPTION_ERROR;
4662 END IF;
4663
4664 IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
4665 OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'After the call to VALIDATE_PARAMS, the return status is :'||l_return_status);
4666 END IF;
4667
4668 -- Get the Templates from the given parameters
4669
4670 --- Change the G_GL_DATE to p_dist_info_rec.accounting_date if we want to pass passed-date as GL Date
4671
4672 IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
4673 OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'Prior to the call to Get_Template_Info');
4674 END IF;
4675
4676 --Bug 5707866 - Start of Changes
4677 OPEN get_acct_derivation_csr;
4678 FETCH get_acct_derivation_csr INTO l_account_derivation;
4679 CLOSE get_acct_derivation_csr;
4680
4681 IF l_account_derivation IS NULL THEN
4682 OKL_API.SET_MESSAGE(p_app_name => g_app_name
4683 ,p_msg_name => 'OKL_ACCT_DER_NOT_SET');
4684 RAISE OKL_API.G_EXCEPTION_ERROR;
4685 END IF;
4686
4687 --Deriving the functional currency to be passed in the call to validate_params
4688 --l_functional_curr := Okl_Accounting_Util.GET_FUNC_CURR_CODE; --redundant code.
4689
4690 -- Check the Distribution Status and take appropriate Action
4691 FOR i in l_dist_info_tbl.FIRST..l_dist_info_tbl.LAST LOOP
4692 --Only when the account derivation option is 'ATS'
4693 --Or if the account derivation option is 'AMB' and the transaction amount is not known
4694 --should the template information be fetched
4695 IF (l_account_derivation = 'ATS') OR
4696 ((l_account_derivation = 'AMB') AND ((l_dist_info_tbl(i).AMOUNT IS NULL) OR (l_dist_info_tbl(i).AMOUNT = OKL_API.G_MISS_NUM)))
4697 THEN
4698 IF (l_first_rec = TRUE)
4699 THEN
4700 GET_TEMPLATE_INFO(p_api_version => l_api_version,
4701 p_init_msg_list => p_init_msg_list,
4702 x_return_status => l_return_status,
4703 x_msg_count => x_msg_count,
4704 x_msg_data => x_msg_data,
4705 p_tmpl_identify_rec => p_tmpl_identify_rec,
4706 x_template_tbl => l_tmpl_tbl,
4707 p_validity_date => G_GL_DATE);
4708
4709 IF (l_return_status <> OKL_API.G_RET_STS_SUCCESS) THEN
4710 RAISE OKL_API.G_EXCEPTION_ERROR;
4711 END IF;
4712
4713 --Setting l_first_rec to FALSE, so that GET_TEMPLATE_INFO need not be called every time in the loop
4714 l_first_rec := FALSE;
4715
4716 IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
4717 OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'The return status after the Get_Template_Info call is :'||l_return_status);
4718 END IF;
4719
4720 -- Raise an error if template is not found.
4721 IF (l_tmpl_tbl.COUNT = 0) THEN
4722 -- Added by Santonyr on 30-Jul-2003 to fix the bug 2941805
4723 FOR prdt_rec IN prdt_csr (p_tmpl_identify_rec.product_id) LOOP
4724 l_product_name := prdt_rec.name;
4725 END LOOP;
4726
4727 FOR trx_type_rec IN trx_type_csr (p_tmpl_identify_rec.transaction_type_id) LOOP
4728 l_trx_type_name := trx_type_rec.name;
4729 END LOOP;
4730
4731 FOR sty_type_rec IN sty_type_csr (p_tmpl_identify_rec.stream_type_id) LOOP
4732 l_sty_type_name := sty_type_rec.name;
4733 END LOOP;
4734
4735 OKL_API.SET_MESSAGE(p_app_name => g_app_name
4736 ,p_msg_name => 'OKL_TMPL_NOT_FOUND'
4737 ,p_token1 => 'PRODUCT'
4738 ,p_token1_value => l_product_name
4739 ,p_token2 => 'TRANSACTION_TYPE'
4740 ,p_token2_value => l_trx_type_name
4741 ,p_token3 => 'STREAM_TYPE'
4742 ,p_token3_value => NVL(l_sty_type_name, ' ')
4743 ,p_token4 => 'ACCOUNTING_DATE'
4744 ,p_token4_value => G_GL_DATE);
4745
4746
4747 RAISE OKL_API.G_EXCEPTION_ERROR;
4748 END IF;
4749 END IF;
4750
4751 -- Check the Distribution Status and take appropriate Action
4752 l_check_status := CHECK_JOURNAL(p_source_id => l_dist_info_tbl(i).source_id,
4753 p_source_table => l_dist_info_tbl(i).source_table);
4754
4755
4756 -- l_check_status = 1 denotes that the distributions in OKL exist, but journals have not yet been created in SLA
4757 -- l_check_status = 2 denotes that the distributions exist in OKL , and journals have been created in SLA
4758 IF (l_check_status = 1) THEN
4759 -- Delete from Distributions
4760 DELETE_DIST_AE(p_flag => 'DIST',
4761 p_source_id => l_dist_info_tbl(i).source_id,
4762 p_source_table => l_dist_info_tbl(i).source_table,
4763 x_return_status => l_return_status);
4764
4765 IF (l_return_status <> OKL_API.G_RET_STS_SUCCESS) THEN
4766 RAISE OKL_API.G_EXCEPTION_ERROR;
4767 END IF;
4768
4769 END IF;
4770
4771 IF (l_check_status = 2) THEN
4772 OKL_API.SET_MESSAGE(p_app_name => g_app_name,
4773 p_msg_name => 'OKL_AE_GONE_TO_SLA');
4774 RAISE OKL_API.G_EXCEPTION_ERROR;
4775 END IF;
4776
4777 FOR j IN 1..l_tmpl_tbl.COUNT
4778 LOOP
4779 tmpl_rec := l_tmpl_tbl(j);
4780
4781 IF (l_dist_info_tbl(i).AMOUNT IS NULL) OR
4782 (l_dist_info_tbl(i).AMOUNT = OKL_API.G_MISS_NUM) THEN
4783
4784 -- If the amount is null calculate the amount using formula engine
4785 IF (tmpl_rec.FMA_ID IS NULL) OR
4786 (tmpl_rec.FMA_ID = OKL_API.G_MISS_NUM) THEN
4787 -- If the formula is not found associated with template
4788 OKL_API.SET_MESSAGE(p_app_name => g_app_name,
4789 p_msg_name => 'OKL_FMA_NOT_PRESENT',
4790 p_token1 => 'TEMPLATE_NAME',
4791 p_token1_value => tmpl_rec.NAME);
4792 RAISE OKL_API.G_EXCEPTION_ERROR;
4793 END IF;
4794
4795 OPEN frml_csr(tmpl_rec.fma_id);
4796 FETCH frml_csr INTO l_formula_name;
4797 CLOSE frml_csr;
4798
4799 -- Execute the formula using formula engine.
4800
4801 GET_CONTEXT_VAL(p_source_id => p_dist_info_tbl(i).source_id
4802 ,p_ctxt_tbl => p_ctxt_val_tbl
4803 ,x_ctxt_val_tbl => l_ctxt_val_tbl);
4804
4805
4806 -- For secondary rep txn, set the security policy for streams. MG uptake
4807 IF g_representation_type = 'SECONDARY' THEN
4808 OKL_STREAMS_SEC_PVT.SET_REPO_STREAMS;
4809 END IF;
4810
4811 EXECUTE_FORMULA(p_avlv_rec => tmpl_rec,
4812 p_contract_id => l_dist_info_tbl(i).contract_id,
4813 p_contract_line_id => l_dist_info_tbl(i).contract_line_id,
4814 p_ctxt_val_tbl => l_ctxt_val_tbl,
4815 x_return_status => l_return_status,
4816 x_amount => l_amount );
4817
4818 IF (l_return_status <> OKL_API.G_RET_STS_SUCCESS) THEN
4819 OKL_API.SET_MESSAGE(p_app_name => g_app_name,
4820 p_msg_name => 'OKL_FRML_EXE_FAILED',
4821 p_token1 => 'FORMULA_NAME',
4822 p_token1_value => l_formula_name);
4823
4824 END IF;
4825
4826 -- For secondary rep txn, reset the security policy for streams. MG uptake
4827 IF g_representation_type = 'SECONDARY' THEN
4828 OKL_STREAMS_SEC_PVT.RESET_REPO_STREAMS;
4829 END IF;
4830
4831 IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
4832 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
4833 ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
4834 RAISE OKL_API.G_EXCEPTION_ERROR;
4835 END IF;
4836 ELSE -- If the amount is passed from the caller (amount is not null).
4837 l_amount := l_dist_info_tbl(i).AMOUNT;
4838 END IF; -- End If for (p_dist_info_rec.AMOUNT IS NULL)
4839
4840 -- If amount passes is Zero or Amount got from formula is zero then a
4841 -- message should be displayed.
4842
4843 IF (l_amount = 0) THEN
4844 OKL_API.SET_MESSAGE(p_app_name => g_app_name,
4845 p_msg_name => 'OKL_FRML_RET_ZERO_AMT',
4846 p_token1 => 'TEMPLATE_NAME',
4847 p_token1_value => tmpl_rec.NAME);
4848 -- Santonyr on 14-Jul-2003 Fixed bug 3048686
4849 -- RAISE OKL_API.G_EXCEPTION_ERROR;
4850 END IF;
4851
4852 --Building a reference between the dist_info rec and x_template_tbl
4853 x_template_tbl(i).template_tbl(j) := tmpl_rec;
4854 x_template_tbl(i).source_id := l_dist_info_tbl(i).source_id;
4855 x_amount_tbl(i).amount_tbl(j) := Okl_Accounting_Util.ROUND_AMOUNT(p_amount => l_amount,
4856 p_currency_code => p_dist_info_tbl(i).currency_code);
4857 x_amount_tbl(i).source_id := l_dist_info_tbl(i).source_id;
4858
4859 --Fetch the Account gen table corresponding to the source_id of the current distribution record
4860 GET_ACC_GEN_TBL(p_source_id => p_dist_info_tbl(i).source_id,
4861 p_gen_table => p_acc_gen_primary_key_tbl,
4862 x_acc_gen_tbl_ret => p_acc_gen_tbl_ret);
4863
4864 IF (l_amount <> 0) THEN
4865 IF (l_account_derivation = 'ATS')
4866 THEN
4867 CREATE_DIST_RECS(p_avlv_rec => tmpl_rec,
4868 p_tmpl_identify_rec => p_tmpl_identify_rec,
4869 p_dist_info_rec => l_dist_info_tbl(i),
4870 p_amount => l_amount,
4871 p_gen_table => p_acc_gen_tbl_ret,
4872 x_return_status => l_return_status,
4873 x_tabv_tbl => l_tabv_tbl_out);
4874
4875 IF (l_return_status <> OKL_API.G_RET_STS_SUCCESS) THEN
4876 RAISE OKL_API.G_EXCEPTION_ERROR;
4877 END IF;
4878 ELSIF (l_account_derivation = 'AMB')
4879 THEN
4880 CREATE_DIST_RECS(--Bug 6127326 dpsingh start
4881 p_avlv_rec => tmpl_rec,
4882 --Bug 6127326 dpsingh end
4883 p_tmpl_identify_rec => p_tmpl_identify_rec,
4884 p_dist_info_rec => l_dist_info_tbl(i),
4885 p_amount => l_amount,
4886 x_return_status => l_return_status,
4887 x_tabv_tbl => l_tabv_tbl_out);
4888
4889 IF (l_return_status <> OKL_API.G_RET_STS_SUCCESS) THEN
4890 RAISE OKL_API.G_EXCEPTION_ERROR;
4891 END IF;
4892 END IF;
4893 END IF; -- End If for (l_amount <> 0)
4894
4895 IF (l_tabv_tbl_final.COUNT = 0) THEN
4896 k := 0;
4897 ELSE
4898 k := l_tabv_tbl_final.COUNT;
4899 END IF;
4900
4901 IF (l_tabv_tbl_out.count > 0) THEN
4902 FOR i in l_tabv_tbl_out.FIRST..l_tabv_tbl_out.LAST
4903 LOOP
4904 l_tabv_tbl_final(k).id := l_tabv_tbl_out(i).id;
4905 k := k + 1;
4906 END LOOP;
4907 END IF;
4908
4909 END LOOP; -- End LOOP for (l_tmpl_tbl.COUNT)
4910
4911 --Else when the account derivation option is 'AMB' and the transaction amount is already known
4912 ELSE
4913 --Assinging the amount being passed in the rec to l_amount
4914 l_amount := l_dist_info_tbl(i).amount;
4915
4916 --Deriving the functional currency to be passed in the call to validate_params
4917 l_functional_curr := Okl_Accounting_Util.GET_FUNC_CURR_CODE;
4918
4919 -- Check the Distribution Status and take appropriate Action
4920 l_check_status := CHECK_JOURNAL(p_source_id => l_dist_info_tbl(i).source_id,
4921 p_source_table => l_dist_info_tbl(i).source_table);
4922
4923 -- l_check_status = 1 denotes that the distributions in OKL exist, but journals have not yet been created in SLA
4924 -- l_check_status = 2 denotes that the distributions exist in OKL , and journals have been created in SLA
4925
4926
4927 IF (l_check_status = 1) THEN
4928 -- Delete from Distributions
4929 DELETE_DIST_AE(p_flag => 'DIST',
4930 p_source_id => l_dist_info_tbl(i).source_id,
4931 p_source_table => l_dist_info_tbl(i).source_table,
4932 x_return_status => l_return_status);
4933
4934 IF (l_return_status <> OKL_API.G_RET_STS_SUCCESS) THEN
4935 RAISE OKL_API.G_EXCEPTION_ERROR;
4936 END IF;
4937
4938 END IF;
4939
4940 IF (l_check_status = 2) THEN
4941 OKL_API.SET_MESSAGE(p_app_name => g_app_name,
4942 p_msg_name => 'OKL_AE_GONE_TO_SLA');
4943 RAISE OKL_API.G_EXCEPTION_ERROR;
4944 END IF;
4945
4946 l_amount := l_dist_info_tbl(i).amount;
4947
4948 IF (l_amount <> 0) THEN
4949
4950 CREATE_DIST_RECS(p_tmpl_identify_rec => p_tmpl_identify_rec,
4951 p_dist_info_rec => l_dist_info_tbl(i),
4952 p_amount => l_amount,
4953 x_return_status => l_return_status,
4954 x_tabv_tbl => l_tabv_tbl_out);
4955
4956 IF (l_return_status <> OKL_API.G_RET_STS_SUCCESS) THEN
4957 RAISE OKL_API.G_EXCEPTION_ERROR;
4958 END IF;
4959 END IF; -- End If for (l_amount <> 0)
4960
4961 x_amount_tbl(i).amount_tbl(0) := Okl_Accounting_Util.ROUND_AMOUNT(p_amount => l_amount,
4962 p_currency_code => p_dist_info_tbl(i).currency_code);
4963 x_amount_tbl(i).source_id := l_dist_info_tbl(i).source_id;
4964
4965
4966 IF (l_tabv_tbl_final.COUNT = 0) THEN
4967 k := 0;
4968 ELSE
4969 k := l_tabv_tbl_final.COUNT;
4970 END IF;
4971
4972 IF (l_tabv_tbl_out.count > 0) THEN
4973 FOR i in l_tabv_tbl_out.FIRST..l_tabv_tbl_out.LAST
4974 LOOP
4975 l_tabv_tbl_final(k).id := l_tabv_tbl_out(i).id;
4976 k := k + 1;
4977 END LOOP;
4978 END IF;
4979 END IF;
4980 x_tabv_tbl := l_tabv_tbl_final;
4981 END LOOP; --End loop for (l_dist_info_tbl.count)
4982 OKL_API.END_ACTIVITY(x_msg_count, x_msg_data);
4983
4984 EXCEPTION
4985
4986 WHEN OKL_API.G_EXCEPTION_ERROR THEN
4987 x_return_status := OKL_API.HANDLE_EXCEPTIONS
4988 ( l_api_name,
4989 G_PKG_NAME,
4990 'OKL_API.G_RET_STS_ERROR',
4991 x_msg_count,
4992 x_msg_data,
4993 '_PVT'
4994 );
4995 WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
4996 x_return_status := OKL_API.HANDLE_EXCEPTIONS
4997 ( l_api_name,
4998 G_PKG_NAME,
4999 'OKL_API.G_RET_STS_UNEXP_ERROR',
5000 x_msg_count,
5001 x_msg_data,
5002 '_PVT'
5003 );
5004 WHEN OTHERS THEN
5005 x_return_status := OKL_API.HANDLE_EXCEPTIONS
5006 ( l_api_name,
5007 G_PKG_NAME,
5008 'OTHERS',
5009 x_msg_count,
5010 x_msg_data,
5011 '_PVT'
5012 );
5013
5014 END CREATE_ACCOUNTING_DIST;
5015
5016 PROCEDURE CREATE_ACCOUNTING_DIST (p_api_version IN NUMBER,
5017 p_init_msg_list IN VARCHAR2,
5018 x_return_status OUT NOCOPY VARCHAR2,
5019 x_msg_count OUT NOCOPY NUMBER,
5020 x_msg_data OUT NOCOPY VARCHAR2,
5021 p_tmpl_identify_tbl IN TMPL_IDENTIFY_TBL_TYPE,
5022 p_dist_info_tbl IN DIST_INFO_TBL_TYPE,
5023 p_ctxt_val_tbl IN CTXT_TBL_TYPE,
5024 p_acc_gen_primary_key_tbl IN ACC_GEN_TBL_TYPE,
5025 x_template_tbl OUT NOCOPY AVLV_OUT_TBL_TYPE,
5026 x_amount_tbl OUT NOCOPY AMOUNT_OUT_TBL_TYPE,
5027 p_trx_header_id IN NUMBER,
5028 p_trx_header_table IN VARCHAR2 DEFAULT NULL)
5029
5030 IS
5031
5032 l_check_status NUMBER;
5033 i NUMBER := 0;
5034 l_amount NUMBER := 0;
5035
5036 tmpl_rec AVLV_REC_TYPE;
5037 l_tmpl_tbl avlv_tbl_type;
5038 l_formula_name OKL_FORMULAE_V.NAME%TYPE;
5039 l_functional_curr OKL_TRNS_ACC_DSTRS.CURRENCY_CODE%TYPE;
5040 l_return_status VARCHAR2(1) := OKL_API.G_RET_STS_SUCCESS;
5041
5042 l_api_name VARCHAR2(30) := 'CREATE_ACCOUNTING_DIST';
5043 l_api_version NUMBER := 1.0;
5044
5045 -- Added by Santonyr on 30-Jul-2003 to fix the bug 2941805
5046
5047 l_product_name OKL_PRODUCTS.NAME%TYPE;
5048 l_trx_type_name OKL_TRX_TYPES_TL.NAME%TYPE;
5049 l_sty_type_name OKL_STRM_TYPE_TL.NAME%TYPE;
5050
5051 -- Added by Santonyr on 12-Jul-2440 for the bug 3761026
5052
5053 l_template_amount_tbl template_amount_tbl_type;
5054 l_line_tbl ID_TBL_TYPE;
5055
5056 CURSOR frml_csr(v_id NUMBER) IS
5057 SELECT name
5058 FROM okl_formulae_v
5059 WHERE id = v_id;
5060
5061 -- Added by Santonyr on 30-Jul-2003 to fix the bug 2941805
5062
5063 CURSOR prdt_csr (l_pdt_id OKL_PRODUCTS.ID%TYPE) IS
5064 SELECT name
5065 FROM okl_products
5066 WHERE id = l_pdt_id ;
5067
5068 CURSOR trx_type_csr (l_trx_type_id OKL_TRX_TYPES_TL.ID%TYPE) IS
5069 SELECT name
5070 FROM okl_trx_types_tl
5071 WHERE id = l_trx_type_id ;
5072
5073 CURSOR sty_type_csr (l_sty_type_id OKL_STRM_TYPE_TL.ID%TYPE) IS
5074 SELECT name
5075 FROM okl_strm_type_tl
5076 WHERE id = l_sty_type_id ;
5077
5078 --Added by kthiruva on 06-Feb-2007 for SLA Uptake
5079 --Bug 5707866 - Start of Changes
5080 l_account_derivation OKL_SYS_ACCT_OPTS.ACCOUNT_DERIVATION%TYPE;
5081 l_tcn_id NUMBER := p_trx_header_id;
5082 l_init_msg_list VARCHAR2(1) := OKL_API.G_FALSE;
5083 l_msg_count NUMBER := 0;
5084 l_msg_data VARCHAR2(2000);
5085 l_event_id NUMBER;
5086 l_event_date DATE;
5087 l_gl_short_name GL_LEDGERS.SHORT_NAME%TYPE;
5088 l_tabv_tbl tabv_tbl_type ;
5089 l_tabv_tbl_out tabv_tbl_type ;
5090 x_tabv_tbl tabv_tbl_type ;
5091 l_dist_info_tbl dist_info_tbl_type := p_dist_info_tbl;
5092 l_dist_info_temp_tbl dist_info_tbl_type;
5093 l_tmpl_identify_tbl tmpl_identify_tbl_type := p_tmpl_identify_tbl;
5094 l_temp_tmpl_rec tmpl_identify_rec_type;
5095 l_count NUMBER := 0;
5096 l_ctxt_val_temp_tbl ctxt_tbl_type;
5097 l_acc_gen_temp_tbl acc_gen_tbl_type;
5098 l_ctxt_val_tbl ctxt_tbl_type := p_ctxt_val_tbl;
5099 l_acc_gen_tbl acc_gen_tbl_type := p_acc_gen_primary_key_tbl;
5100 x_template_temp_tbl AVLV_OUT_TBL_TYPE;
5101 x_amount_temp_tbl AMOUNT_OUT_TBL_TYPE;
5102 x_tabv_temp_tbl TABV_TBL_TYPE;
5103 l_tcnv_rec okl_sla_acc_sources_pvt.tehv_rec_type;
5104 l_tclv_tbl okl_sla_acc_sources_pvt.telv_tbl_type;
5105 l_tclv_tbl_final okl_sla_acc_sources_pvt.telv_tbl_type;
5106 x_tclv_tbl okl_sla_acc_sources_pvt.telv_tbl_type;
5107 l_try_name OKL_TRX_TYPES_TL.NAME%TYPE;
5108 l_source_table VARCHAR2(30);
5109 l_asev_rec asev_rec_type;
5110 l_asev_tbl asev_tbl_type;
5111 l_asev_count NUMBER := 0;
5112 l_acc_gen_key_tbl acc_gen_primary_key;
5113 l_found boolean := false;
5114 l_equal boolean := false;
5115 l_rxhv_rec okl_sla_acc_sources_pvt.rxhv_rec_type;
5116 l_rxhv_adj_rec okl_sla_acc_sources_pvt.rxhv_rec_type;
5117 l_rxlv_tbl okl_sla_acc_sources_pvt.rxlv_tbl_type;
5118 x_rxlv_tbl okl_sla_acc_sources_pvt.rxlv_tbl_type;
5119 x_rxlv_adj_tbl okl_sla_acc_sources_pvt.rxlv_tbl_type;
5120 l_pxhv_rec okl_sla_acc_sources_pvt.pxhv_rec_type;
5121 l_pxlv_tbl okl_sla_acc_sources_pvt.pxlv_tbl_type;
5122 x_pxlv_tbl okl_sla_acc_sources_pvt.pxlv_tbl_type;
5123 l_rxlv_adj_tbl okl_sla_acc_sources_pvt.rxlv_tbl_type;
5124
5125 CURSOR get_tcn_id_csr(p_source_id IN NUMBER)
5126 IS
5127 SELECT tcl.tcn_id
5128 FROM OKL_TXL_CNTRCT_LNS_ALL tcl
5129 WHERE tcl.id = p_source_id;
5130
5131 -- get the ledger based on the p_trx_header_id parameter
5132 CURSOR get_ledger_id_csr
5133 IS
5134 SELECT set_of_books_id
5135 FROM okl_trx_contracts
5136 WHERE id = p_trx_header_id;
5137
5138 l_ledger_id NUMBER;
5139
5140 CURSOR get_gl_short_name_csr
5141 IS
5142 SELECT GL.SHORT_NAME
5143 FROM OKL_SYS_ACCT_OPTS SAO,
5144 GL_LEDGERS GL
5145 WHERE SAO.SET_OF_BOOKS_ID = GL.LEDGER_ID;
5146
5147 CURSOR get_trx_type(p_try_id NUMBER)
5148 IS
5149 SELECT TRY.AEP_CODE
5150 FROM OKL_TRX_TYPES_B TRY
5151 WHERE TRY.ID = p_try_id;
5152
5153 CURSOR get_acc_event_id(p_tcn_id IN NUMBER)
5154 IS
5155 SELECT distinct dist.accounting_event_id
5156 FROM okl_trns_acc_dstrs_all dist,
5157 okl_txl_cntrct_lns_all txl,
5158 okl_trx_contracts_all trx
5159 WHERE dist.source_id = txl.id
5160 AND txl.tcn_id = trx.id
5161 and trx.id = p_tcn_id;
5162
5163 CURSOR check_sources_csr(p_trx_header_id IN NUMBER)
5164 IS
5165 SELECT 1
5166 FROM OKL_EXT_AR_HEADER_SOURCES_B RXH
5167 WHERE RXH.SOURCE_ID = p_trx_header_id;
5168
5169 CURSOR check_ap_sources_csr(p_trx_header_id IN NUMBER)
5170 IS
5171 SELECT 1
5172 FROM OKL_EXT_AP_HEADER_SOURCES_B PXH
5173 WHERE PXH.SOURCE_ID = p_trx_header_id;
5174
5175 l_sources_exist VARCHAR2(1);
5176 --Bug 5707866 - End of Changes
5177
5178 BEGIN
5179 x_return_status := OKL_API.G_RET_STS_SUCCESS;
5180
5181 l_return_status := OKL_API.START_ACTIVITY(l_api_name,
5182 G_PKG_NAME,
5183 p_init_msg_list,
5184 l_api_version,
5185 p_api_version,
5186 '_PVT',
5187 x_return_status);
5188 IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
5189 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
5190 ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
5191 RAISE OKL_API.G_EXCEPTION_ERROR;
5192 END IF;
5193
5194 VALIDATE_IN_PARAMS(p_dist_info_tbl => p_dist_info_tbl
5195 ,p_tmpl_identify_tbl => p_tmpl_identify_tbl
5196 ,p_ctxt_val_tbl => p_ctxt_val_tbl
5197 ,p_acc_gen_primary_key_tbl => p_acc_gen_primary_key_tbl
5198 ,x_return_status => l_return_status
5199 );
5200
5201 IF (l_return_status <> OKL_API.G_RET_STS_SUCCESS) THEN
5202 RAISE OKL_API.G_EXCEPTION_ERROR;
5203 END IF;
5204
5205 -- get the representation attributes.. MG uptake
5206 get_rep_attributes;
5207
5208 IF NVL(p_trx_header_table, 'OKL_TXL_CNTRCT_LNS') = 'OKL_TXL_CNTRCT_LNS' then
5209 OPEN get_ledger_id_csr;
5210 FETCH get_ledger_id_csr INTO l_ledger_id;
5211 CLOSE get_ledger_id_csr;
5212 END IF;
5213
5214 IF l_ledger_id IS NOT NULL THEN
5215 g_representation_type := g_ledger_tbl(l_ledger_id).rep_type;
5216 g_ledger_id := l_ledger_id;
5217 ELSE
5218 g_representation_type := 'PRIMARY';
5219 g_ledger_id := okl_accounting_util.get_set_of_books_id;
5220 END IF;
5221
5222
5223 --Assigning the first template rec to a temporary rec
5224 l_temp_tmpl_rec := l_tmpl_identify_tbl(l_tmpl_identify_tbl.FIRST);
5225
5226 FOR i in l_dist_info_tbl.FIRST..l_dist_info_tbl.LAST
5227 LOOP
5228 IF (nvl(l_tmpl_identify_tbl(i).STREAM_TYPE_ID,1) = nvl(l_temp_tmpl_rec.STREAM_TYPE_ID,1)) AND
5229 (nvl(l_tmpl_identify_tbl(i).ADVANCE_ARREARS,1) = nvl(l_temp_tmpl_rec.ADVANCE_ARREARS,1)) AND
5230 (nvl(l_tmpl_identify_tbl(i).FACTORING_SYND_FLAG,1) = nvl(l_temp_tmpl_rec.FACTORING_SYND_FLAG,1)) AND
5231 (nvl(l_tmpl_identify_tbl(i).SYNDICATION_CODE,1) = nvl(l_temp_tmpl_rec.SYNDICATION_CODE,1)) AND
5232 (nvl(l_tmpl_identify_tbl(i).FACTORING_CODE,1) = nvl(l_temp_tmpl_rec.FACTORING_CODE,1)) AND
5233 (nvl(l_tmpl_identify_tbl(i).MEMO_YN,1) = nvl(l_temp_tmpl_rec.MEMO_YN,1)) AND
5234 (nvl(l_tmpl_identify_tbl(i).PRIOR_YEAR_YN,1) = nvl(l_temp_tmpl_rec.PRIOR_YEAR_YN,1)) AND
5235 (nvl(l_tmpl_identify_tbl(i).REV_REC_FLAG,1) = nvl(l_temp_tmpl_rec.REV_REC_FLAG,1))
5236 THEN
5237 l_dist_info_temp_tbl(l_count) := l_dist_info_tbl(i);
5238 IF (l_ctxt_val_tbl.count >0) THEN
5239 l_ctxt_val_temp_tbl(l_count) := l_ctxt_val_tbl(i);
5240 END IF;
5241 l_acc_gen_temp_tbl(l_count) := l_acc_gen_tbl(i);
5242 l_count := l_count + 1;
5243 ELSE
5244 CREATE_ACCOUNTING_DIST(p_api_version => p_api_version,
5245 p_init_msg_list => p_init_msg_list,
5246 x_return_status => x_return_status,
5247 x_msg_count => x_msg_count,
5248 x_msg_data => x_msg_data,
5249 p_tmpl_identify_rec => l_temp_tmpl_rec,
5250 p_dist_info_tbl => l_dist_info_temp_tbl,
5251 p_ctxt_val_tbl => l_ctxt_val_temp_tbl,
5252 p_acc_gen_primary_key_tbl => l_acc_gen_temp_tbl,
5253 x_template_tbl => x_template_temp_tbl,
5254 x_amount_tbl => x_amount_temp_tbl,
5255 x_tabv_tbl => x_tabv_temp_tbl);
5256
5257 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
5258 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
5259 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
5260 RAISE OKL_API.G_EXCEPTION_ERROR;
5261 END IF;
5262
5263 --The out parameters from each call are consolidated and built
5264 GET_FINAL_TEMPLATE_TBL(p_template_tbl => x_template_temp_tbl,
5265 x_template_tbl => x_template_tbl);
5266
5267 GET_FINAL_AMOUNT_TBL(p_amount_tbl => x_amount_temp_tbl,
5268 x_amount_tbl => x_amount_tbl);
5269
5270 GET_FINAL_TABV_TBL(p_tabv_tbl => x_tabv_temp_tbl,
5271 x_tabv_tbl => l_tabv_tbl_out);
5272
5273 --The existing temp tables need to be cleared and reassigned
5274 l_count := 0;
5275 l_dist_info_temp_tbl.DELETE;
5276 l_ctxt_val_temp_tbl.DELETE;
5277 l_acc_gen_temp_tbl.DELETE;
5278 l_temp_tmpl_rec := l_tmpl_identify_tbl(i);
5279
5280 l_dist_info_temp_tbl(l_count) := l_dist_info_tbl(i);
5281 IF (l_ctxt_val_tbl.count >0) THEN
5282 l_ctxt_val_temp_tbl(l_count) := l_ctxt_val_tbl(i);
5283 END IF;
5284 l_acc_gen_temp_tbl(l_count) := l_acc_gen_tbl(i);
5285 l_count := l_count + 1;
5286 END IF;
5287 END LOOP;
5288
5289 --Making the create_Dist call for the last record
5290 CREATE_ACCOUNTING_DIST(p_api_version => p_api_version,
5291 p_init_msg_list => p_init_msg_list,
5292 x_return_status => x_return_status,
5293 x_msg_count => x_msg_count,
5294 x_msg_data => x_msg_data,
5295 p_tmpl_identify_rec => l_temp_tmpl_rec,
5296 p_dist_info_tbl => l_dist_info_temp_tbl,
5297 p_ctxt_val_tbl => l_ctxt_val_temp_tbl,
5298 p_acc_gen_primary_key_tbl => l_acc_gen_temp_tbl,
5299 x_template_tbl => x_template_temp_tbl,
5300 x_amount_tbl => x_amount_temp_tbl,
5301 x_tabv_tbl => x_tabv_temp_tbl);
5302
5303 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
5304 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
5305 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
5306 RAISE OKL_API.G_EXCEPTION_ERROR;
5307 END IF;
5308
5309 --The out parameters from each call are consolidated and built
5310 GET_FINAL_TEMPLATE_TBL(p_template_tbl => x_template_temp_tbl,
5311 x_template_tbl => x_template_tbl);
5312
5313 GET_FINAL_AMOUNT_TBL(p_amount_tbl => x_amount_temp_tbl,
5314 x_amount_tbl => x_amount_tbl);
5315
5316 GET_FINAL_TABV_TBL(p_tabv_tbl => x_tabv_temp_tbl,
5317 x_tabv_tbl => l_tabv_tbl_out);
5318
5319 OPEN get_trx_type(l_temp_tmpl_rec.transaction_type_id);
5320 FETCH get_trx_type INTO l_try_name;
5321 CLOSE get_trx_type;
5322
5323 --Added by kthiruva on 03-Jul-2007
5324 --Event creation should be done only if there is atleast one transaction line evaluating to a non-zero amount
5325 --Sources need to be captured only for those transaction lines that evaluate to a non-zero amount
5326 --Bug 6134235 - Start of Changes
5327 GET_LINE_ID_TBL(p_amount_tbl => x_amount_tbl,
5328 x_line_tbl => l_line_tbl);
5329 --Bug 6134235 - End of Changes
5330
5331 --This cursor is used to determine ,if distributions already exist for the transaction id
5332 -- If an accounting event already exists , else we create a new event
5333 IF l_try_name IN ('RECEIPT_APPLICATION','PRINCIPAL_ADJUSTMENT','UPFRONT_TAX','BOOKING','TERMINATION',
5334 'ASSET_DISPOSITION','ACCRUAL','GENERAL_LOSS_PROVISION','SPECIFIC_LOSS_PROVISION','REBOOK','EVERGREEN',
5335 'RELEASE','INVESTOR','SPLIT_ASSET') AND (l_line_tbl.count > 0)
5336 THEN
5337 --Populated for the calls to delete/create Account Sources
5338 l_tcnv_rec.source_id := p_trx_header_id;
5339 l_tcnv_rec.source_table := 'OKL_TRX_CONTRACTS';
5340
5341 OPEN get_acc_event_id(p_trx_header_id);
5342 FETCH get_acc_event_id INTO l_event_id;
5343 CLOSE get_acc_event_id;
5344
5345 IF (l_event_id IS NOT NULL) THEN
5346 --Make the call to delete existing sources
5347 okl_sla_acc_sources_pvt.delete_trx_extension(
5348 p_api_version => l_api_version
5349 ,p_init_msg_list => l_init_msg_list
5350 ,p_trans_hdr_rec => l_tcnv_rec
5351 ,x_trans_line_tbl => x_tclv_tbl
5352 ,x_return_status => l_return_status
5353 ,x_msg_count => l_msg_count
5354 ,x_msg_data => l_msg_data
5355 );
5356
5357 IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
5358 OKL_API.SET_MESSAGE(p_app_name => g_app_name
5359 ,p_msg_name => 'OKL_DEL_SOURCES_FAILED');
5360 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
5361 ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
5362 OKL_API.SET_MESSAGE(p_app_name => g_app_name
5363 ,p_msg_name => 'OKL_DEL_SOURCES_FAILED');
5364 RAISE OKL_API.G_EXCEPTION_ERROR;
5365 END IF;
5366 --As event_id is not found, we create a new event
5367 ELSE
5368 --The below code is not required after MG uptake.. racheruv
5369 --OPEN get_gl_short_name_csr;
5370 --FETCH get_gl_short_name_csr INTO l_gl_short_name;
5371 --CLOSE get_gl_short_name_csr;
5372
5373 -- set the representation code, which is used as the valuation method
5374 -- MG uptake.
5375 l_gl_short_name := g_ledger_tbl(g_ledger_id).rep_code;
5376
5377 IF l_gl_short_name IS NULL
5378 THEN
5379 OKL_API.SET_MESSAGE(p_app_name => g_app_name
5380 ,p_msg_name => 'OKL_GL_NOT_SET_FOR_ORG');
5381 RAISE OKL_API.G_EXCEPTION_ERROR;
5382 END IF;
5383
5384 l_event_id := OKL_XLA_EVENTS_PVT.create_event(p_api_version => l_api_version
5385 ,p_init_msg_list => l_init_msg_list
5386 ,x_return_status => l_return_status
5387 ,x_msg_count => l_msg_count
5388 ,x_msg_data => l_msg_data
5389 ,p_tcn_id => l_tcn_id
5390 ,p_gl_date => G_gl_date
5391 ,p_action_type => 'CREATE'
5392 ,p_representation_code => l_gl_short_name
5393 );
5394
5395 IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
5396 OKL_API.SET_MESSAGE(p_app_name => g_app_name
5397 ,p_msg_name => 'OKL_CREATE_EVENT_FAILED');
5398 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
5399 ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
5400 OKL_API.SET_MESSAGE(p_app_name => g_app_name
5401 ,p_msg_name => 'OKL_CREATE_EVENT_FAILED');
5402 RAISE OKL_API.G_EXCEPTION_ERROR;
5403 END IF;
5404 END IF;--(IF l_event_id is null)
5405
5406 IF (l_tabv_tbl_out.count > 0) THEN
5407 --Populating the distribution table that needs to be updated with accounting_event_id
5408 FOR i IN l_tabv_tbl_out.FIRST..l_tabv_tbl_out.LAST
5409 LOOP
5410 l_tabv_tbl(i).id := l_tabv_tbl_out(i).id;
5411 l_tabv_tbl(i).accounting_event_id := l_event_id;
5412 --Once the event is created successfully in XLA, posted_yn flag is set to Y
5413 l_tabv_tbl(i).posted_yn := 'Y';
5414 END LOOP;
5415
5416 --Update the distributions created with the Accounting Event Id
5417 OKL_TRNS_ACC_DSTRS_PUB.update_trns_acc_dstrs(p_api_version => l_api_version
5418 ,p_init_msg_list => l_init_msg_list
5419 ,x_return_status => l_return_status
5420 ,x_msg_count => l_msg_count
5421 ,x_msg_data => l_msg_data
5422 ,p_tabv_tbl => l_tabv_tbl
5423 ,x_tabv_tbl => x_tabv_tbl
5424 );
5425
5426 IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
5427 OKL_API.SET_MESSAGE(p_app_name => g_app_name
5428 ,p_msg_name => 'OKL_UPD_DIST_FAILED');
5429 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
5430 ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
5431 OKL_API.SET_MESSAGE(p_app_name => g_app_name
5432 ,p_msg_name => 'OKL_UPD_DIST_FAILED');
5433 RAISE OKL_API.G_EXCEPTION_ERROR;
5434 END IF;
5435 END IF;
5436
5437 IF p_dist_info_tbl.count = l_line_tbl.count THEN
5438 l_equal := true;
5439 END IF;
5440
5441 --Making the call to populate_Acct_sources to retreive the l_asev_rec to be passed to populate_sources
5442 FOR i in p_dist_info_tbl.FIRST..p_dist_info_tbl.LAST
5443 LOOP
5444 l_found := false;
5445 IF not(l_equal) THEN
5446 --If the l_line_tbl and p_dist_info_tbl count do not match, then there are some transaction lines of
5447 --zero amount. Therefore processing only those records in p_dist_info_tbl that exist in l_line_tbl
5448 --asev_rec needs to be fetched only for those lines in l_line_tbl
5449 FOR j in l_line_tbl.FIRST..l_line_tbl.LAST
5450 LOOP
5451 IF (p_dist_info_tbl(i).source_id = l_line_tbl(j)) THEN
5452 l_found := true;
5453 END IF;
5454 END LOOP;
5455 END IF;
5456
5457 IF (l_found) OR (l_equal) THEN
5458
5459 --The index i should refer to the corresponding records in p_dist_info_tbl, p_tmpl_identify_tbl and
5460 --p_acc_gen_primary_key_tbl.Hence the condition. If the condition returns false and the tables are
5461 --indexed differently, then in the ELSE part, we loop through the entire table and find a match on source_id
5462 IF p_acc_gen_primary_key_tbl(i).source_id = p_dist_info_tbl(i).source_id
5463 THEN
5464 l_acc_gen_key_tbl := p_acc_gen_primary_key_tbl(i).acc_gen_key_tbl;
5465 ELSE
5466 FOR j IN p_acc_gen_primary_key_tbl.FIRST..p_acc_gen_primary_key_tbl.LAST
5467 LOOP
5468 IF p_dist_info_tbl(i).source_id = p_acc_gen_primary_key_tbl(j).source_id
5469 THEN
5470 l_acc_gen_key_tbl := p_acc_gen_primary_key_tbl(j).acc_gen_key_tbl;
5471 EXIT;
5472 END IF;
5473 END LOOP;
5474 END IF;
5475
5476 POPULATE_ACCT_SOURCES(p_api_version => l_api_version,
5477 p_init_msg_list => l_init_msg_list,
5478 x_return_status => l_return_status,
5479 x_msg_count => l_msg_count,
5480 x_msg_data => l_msg_data,
5481 p_tmpl_identify_rec => p_tmpl_identify_tbl(i),
5482 p_dist_info_rec => p_dist_info_tbl(i),
5483 p_acc_gen_primary_key_tbl => l_acc_gen_key_tbl,
5484 x_asev_rec => l_asev_rec);
5485
5486 IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
5487 OKL_API.SET_MESSAGE(p_app_name => g_app_name
5488 ,p_msg_name => 'OKL_SLA_SOURCES_FAILED');
5489 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
5490 ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
5491 OKL_API.SET_MESSAGE(p_app_name => g_app_name
5492 ,p_msg_name => 'OKL_SLA_SOURCES_FAILED');
5493 RAISE OKL_API.G_EXCEPTION_ERROR;
5494 END IF;
5495
5496 --Building the line table that needs to be sent to the populate sources_call
5497 l_tclv_tbl(l_asev_count).source_id := p_dist_info_tbl(i).source_id;
5498 l_tclv_tbl(l_asev_count).source_table := p_dist_info_tbl(i).source_table;
5499 --Building the asev_table
5500 l_asev_tbl(l_asev_count) := l_asev_rec;
5501 l_asev_count := l_asev_count + 1;
5502 END IF; --(if l_found)
5503 END LOOP;
5504
5505 --Make the call to capture accounting sources for the header for OKL trasaction types only
5506 OKL_SLA_ACC_SOURCES_PVT.populate_sources
5507 (p_api_version => l_api_version
5508 ,p_init_msg_list => l_init_msg_list
5509 ,p_trans_hdr_rec => l_tcnv_rec
5510 ,p_trans_line_tbl => l_tclv_tbl
5511 ,p_acc_sources_tbl => l_asev_tbl
5512 ,x_return_status => l_return_status
5513 ,x_msg_count => l_msg_count
5514 ,x_msg_data => l_msg_data);
5515
5516
5517 IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
5518 OKL_API.SET_MESSAGE(p_app_name => g_app_name
5519 ,p_msg_name => 'OKL_SLA_SOURCES_FAILED');
5520 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
5521 ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
5522 OKL_API.SET_MESSAGE(p_app_name => g_app_name
5523 ,p_msg_name => 'OKL_SLA_SOURCES_FAILED');
5524 RAISE OKL_API.G_EXCEPTION_ERROR;
5525 END IF;
5526 --If the accounting engine call is being made for a billing transaction , then sources need to be
5527 --captured at the header and line level. However, for AR transactions, events are not created by OKL
5528 ELSIF l_try_name IN ('BILLING','CREDIT_MEMO','ROLLOVER_BILLING','ROLLOVER_CREDITMEMO',
5529 'RELEASE_BILLING','RELEASE_CREDITMEMO') AND (l_line_tbl.count > 0) THEN
5530
5531 --Populated for the calls to delete/create Account Sources
5532 l_rxhv_rec.source_id := p_trx_header_id;
5533 --For AR And AP transactions, p_trx_header_table needs to be passed always.
5534 --Its optional only for OKL Transactions
5535 IF p_trx_header_table IS NULL THEN
5536 Okl_Api.set_message(G_APP_NAME,
5537 G_INVALID_VALUE,
5538 G_COL_NAME_TOKEN,
5539 'SOURCE_TABLE');
5540 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
5541 END IF;
5542 l_rxhv_rec.source_table := p_trx_header_table;
5543
5544 --Cursor to check if sources already exist for the transaction. IF so , the transaction is being updated
5545 --and therefore, existing sources need to be deleted and re-captured.
5546 OPEN check_sources_csr(p_trx_header_id);
5547 FETCH check_sources_csr INTO l_sources_exist;
5548 IF (check_sources_csr%FOUND) THEN
5549 --Make the call to delete existing sources
5550 okl_sla_acc_sources_pvt.delete_ar_extension(
5551 p_api_version => l_api_version
5552 ,p_init_msg_list => l_init_msg_list
5553 ,p_rxhv_rec => l_rxhv_rec
5554 ,x_rxlv_tbl => x_rxlv_tbl
5555 ,x_return_status => l_return_status
5556 ,x_msg_count => l_msg_count
5557 ,x_msg_data => l_msg_data
5558 );
5559
5560 IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
5561 OKL_API.SET_MESSAGE(p_app_name => g_app_name
5562 ,p_msg_name => 'OKL_DEL_SOURCES_FAILED');
5563 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
5564 ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
5565 OKL_API.SET_MESSAGE(p_app_name => g_app_name
5566 ,p_msg_name => 'OKL_DEL_SOURCES_FAILED');
5567 RAISE OKL_API.G_EXCEPTION_ERROR;
5568 END IF;
5569 END IF;--(IF l_event_id is null)
5570 CLOSE check_sources_csr;
5571
5572 IF p_dist_info_tbl.count = l_line_tbl.count THEN
5573 l_equal := true;
5574 END IF;
5575
5576 --Making the call to populate_Acct_sources to retreive the l_asev_rec to be passed to populate_sources
5577 FOR i in p_dist_info_tbl.FIRST..p_dist_info_tbl.LAST
5578 LOOP
5579 l_found := false;
5580 IF not(l_equal) THEN
5581 --If the l_line_tbl and p_dist_info_tbl count do not match, then there are some transaction lines of
5582 --zero amount. Therefore processing only those records in p_dist_info_tbl that exist in l_line_tbl
5583 --asev_rec needs to be fetched only for those lines in l_line_tbl
5584 FOR j in l_line_tbl.FIRST..l_line_tbl.LAST
5585 LOOP
5586 IF (p_dist_info_tbl(i).source_id = l_line_tbl(j)) THEN
5587 l_found := true;
5588 END IF;
5589 END LOOP;
5590 END IF;
5591
5592 IF (l_found) OR (l_equal) THEN
5593
5594 --The index i should refer to the corresponding records in p_dist_info_tbl, p_tmpl_identify_tbl and
5595 --p_acc_gen_primary_key_tbl.Hence the condition. If the condition returns false and the tables are
5596 --indexed differently, then in the ELSE part, we loop through the entire table and find a match on source_id
5597 IF p_acc_gen_primary_key_tbl(i).source_id = p_dist_info_tbl(i).source_id
5598 THEN
5599 l_acc_gen_key_tbl := p_acc_gen_primary_key_tbl(i).acc_gen_key_tbl;
5600 ELSE
5601 FOR j IN p_acc_gen_primary_key_tbl.FIRST..p_acc_gen_primary_key_tbl.LAST
5602 LOOP
5603 IF p_dist_info_tbl(i).source_id = p_acc_gen_primary_key_tbl(j).source_id
5604 THEN
5605 l_acc_gen_key_tbl := p_acc_gen_primary_key_tbl(j).acc_gen_key_tbl;
5606 EXIT;
5607 END IF;
5608 END LOOP;
5609 END IF;
5610
5611 POPULATE_ACCT_SOURCES(p_api_version => l_api_version,
5612 p_init_msg_list => l_init_msg_list,
5613 x_return_status => l_return_status,
5614 x_msg_count => l_msg_count,
5615 x_msg_data => l_msg_data,
5616 p_tmpl_identify_rec => p_tmpl_identify_tbl(i),
5617 p_dist_info_rec => p_dist_info_tbl(i),
5618 p_acc_gen_primary_key_tbl => l_acc_gen_key_tbl,
5619 x_asev_rec => l_asev_rec);
5620
5621 IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
5622 OKL_API.SET_MESSAGE(p_app_name => g_app_name
5623 ,p_msg_name => 'OKL_SLA_SOURCES_FAILED');
5624 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
5625 ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
5626 OKL_API.SET_MESSAGE(p_app_name => g_app_name
5627 ,p_msg_name => 'OKL_SLA_SOURCES_FAILED');
5628 RAISE OKL_API.G_EXCEPTION_ERROR;
5629 END IF;
5630
5631 --Building the line table that needs to be sent to the populate sources_call
5632 l_rxlv_tbl(l_asev_count).source_id := p_dist_info_tbl(i).source_id;
5633 l_rxlv_tbl(l_asev_count).source_table := p_dist_info_tbl(i).source_table;
5634
5635 l_asev_tbl(l_asev_count) := l_asev_rec;
5636 l_asev_count := l_asev_count + 1;
5637 END IF; --(if l_found)
5638 END LOOP;
5639
5640 --Make the call to capture accounting sources for the header for OKL trasaction types only
5641 OKL_SLA_ACC_SOURCES_PVT.populate_sources
5642 (p_api_version => l_api_version
5643 ,p_init_msg_list => l_init_msg_list
5644 ,p_rxhv_rec => l_rxhv_rec
5645 ,p_rxlv_tbl => l_rxlv_tbl
5646 ,p_acc_sources_tbl => l_asev_tbl
5647 ,x_return_status => l_return_status
5648 ,x_msg_count => l_msg_count
5649 ,x_msg_data => l_msg_data);
5650
5651
5652 IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
5653 OKL_API.SET_MESSAGE(p_app_name => g_app_name
5654 ,p_msg_name => 'OKL_SLA_SOURCES_FAILED');
5655 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
5656 ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
5657 OKL_API.SET_MESSAGE(p_app_name => g_app_name
5658 ,p_msg_name => 'OKL_SLA_SOURCES_FAILED');
5659 RAISE OKL_API.G_EXCEPTION_ERROR;
5660 END IF;
5661
5662 --Bug 6316320 dpsingh start
5663 --If the accounting engine call is being made for a adjustment transaction , then sources need to be
5664 --captured at the header and line level. However, for AR transactions, events are not created by OKL
5665 ELSIF l_try_name IN ( 'BALANCE_WRITE_OFF' ,'ADJUSTMENTS') AND (l_line_tbl.count > 0) THEN
5666
5667 --Populated for the calls to delete/create Account Sources
5668 l_rxhv_adj_rec.source_id := p_trx_header_id;
5669 --For AR And AP transactions, p_trx_header_table needs to be passed always.
5670 --Its optional only for OKL Transactions
5671 IF p_trx_header_table IS NULL THEN
5672 Okl_Api.set_message(G_APP_NAME,
5673 G_INVALID_VALUE,
5674 G_COL_NAME_TOKEN,
5675 'SOURCE_TABLE');
5676 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
5677 END IF;
5678 l_rxhv_adj_rec.source_table := p_trx_header_table;
5679
5680 --Cursor to check if sources already exist for the transaction. IF so , the transaction is being updated
5681 --and therefore, existing sources need to be deleted and re-captured.
5682 OPEN check_sources_csr(p_trx_header_id);
5683 FETCH check_sources_csr INTO l_sources_exist;
5684 IF (check_sources_csr%FOUND) THEN
5685 --Make the call to delete existing sources
5686 okl_sla_acc_sources_pvt.delete_ar_extension(
5687 p_api_version => l_api_version
5688 ,p_init_msg_list => l_init_msg_list
5689 ,p_rxhv_rec => l_rxhv_adj_rec
5690 ,x_rxlv_tbl => x_rxlv_adj_tbl
5691 ,x_return_status => l_return_status
5692 ,x_msg_count => l_msg_count
5693 ,x_msg_data => l_msg_data
5694 );
5695
5696 IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
5697 OKL_API.SET_MESSAGE(p_app_name => g_app_name
5698 ,p_msg_name => 'OKL_DEL_SOURCES_FAILED');
5699 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
5700 ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
5701 OKL_API.SET_MESSAGE(p_app_name => g_app_name
5702 ,p_msg_name => 'OKL_DEL_SOURCES_FAILED');
5703 RAISE OKL_API.G_EXCEPTION_ERROR;
5704 END IF;
5705 END IF;--(IF l_event_id is null)
5706 CLOSE check_sources_csr;
5707
5708 IF p_dist_info_tbl.count = l_line_tbl.count THEN
5709 l_equal := true;
5710 END IF;
5711
5712 --Making the call to populate_Acct_sources to retreive the l_asev_rec to be passed to populate_sources
5713 FOR i in p_dist_info_tbl.FIRST..p_dist_info_tbl.LAST
5714 LOOP
5715 l_found := false;
5716 IF not(l_equal) THEN
5717 --If the l_line_tbl and p_dist_info_tbl count do not match, then there are some transaction lines of
5718 --zero amount. Therefore processing only those records in p_dist_info_tbl that exist in l_line_tbl
5719 --asev_rec needs to be fetched only for those lines in l_line_tbl
5720 FOR j in l_line_tbl.FIRST..l_line_tbl.LAST
5721 LOOP
5722 IF (p_dist_info_tbl(i).source_id = l_line_tbl(j)) THEN
5723 l_found := true;
5724 END IF;
5725 END LOOP;
5726 END IF;
5727
5728 IF (l_found) OR (l_equal) THEN
5729
5730 --The index i should refer to the corresponding records in p_dist_info_tbl, p_tmpl_identify_tbl and
5731 --p_acc_gen_primary_key_tbl.Hence the condition. If the condition returns false and the tables are
5732 --indexed differently, then in the ELSE part, we loop through the entire table and find a match on source_id
5733 IF p_acc_gen_primary_key_tbl(i).source_id = p_dist_info_tbl(i).source_id
5734 THEN
5735 l_acc_gen_key_tbl := p_acc_gen_primary_key_tbl(i).acc_gen_key_tbl;
5736 ELSE
5737 FOR j IN p_acc_gen_primary_key_tbl.FIRST..p_acc_gen_primary_key_tbl.LAST
5738 LOOP
5739 IF p_dist_info_tbl(i).source_id = p_acc_gen_primary_key_tbl(j).source_id
5740 THEN
5741 l_acc_gen_key_tbl := p_acc_gen_primary_key_tbl(j).acc_gen_key_tbl;
5742 EXIT;
5743 END IF;
5744 END LOOP;
5745 END IF;
5746
5747 POPULATE_ACCT_SOURCES(p_api_version => l_api_version,
5748 p_init_msg_list => l_init_msg_list,
5749 x_return_status => l_return_status,
5750 x_msg_count => l_msg_count,
5751 x_msg_data => l_msg_data,
5752 p_tmpl_identify_rec => p_tmpl_identify_tbl(i),
5753 p_dist_info_rec => p_dist_info_tbl(i),
5754 p_acc_gen_primary_key_tbl => l_acc_gen_key_tbl,
5755 x_asev_rec => l_asev_rec);
5756
5757 IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
5758 OKL_API.SET_MESSAGE(p_app_name => g_app_name
5759 ,p_msg_name => 'OKL_SLA_SOURCES_FAILED');
5760 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
5761 ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
5762 OKL_API.SET_MESSAGE(p_app_name => g_app_name
5763 ,p_msg_name => 'OKL_SLA_SOURCES_FAILED');
5764 RAISE OKL_API.G_EXCEPTION_ERROR;
5765 END IF;
5766
5767 --Building the line table that needs to be sent to the populate sources_call
5768 l_rxlv_adj_tbl(l_asev_count).source_id := p_dist_info_tbl(i).source_id;
5769 l_rxlv_adj_tbl(l_asev_count).source_table := p_dist_info_tbl(i).source_table;
5770
5771 l_asev_tbl(l_asev_count) := l_asev_rec;
5772 l_asev_count := l_asev_count + 1;
5773 END IF; --(if l_found)
5774 END LOOP;
5775
5776 --Make the call to capture accounting sources for the header for OKL trasaction types only
5777 OKL_SLA_ACC_SOURCES_PVT.populate_sources
5778 (p_api_version => l_api_version
5779 ,p_init_msg_list => l_init_msg_list
5780 ,p_rxhv_rec => l_rxhv_adj_rec
5781 ,p_rxlv_tbl => l_rxlv_adj_tbl
5782 ,p_acc_sources_tbl => l_asev_tbl
5783 ,x_return_status => l_return_status
5784 ,x_msg_count => l_msg_count
5785 ,x_msg_data => l_msg_data);
5786
5787 IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
5788 OKL_API.SET_MESSAGE(p_app_name => g_app_name
5789 ,p_msg_name => 'OKL_SLA_SOURCES_FAILED');
5790 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
5791 ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
5792 OKL_API.SET_MESSAGE(p_app_name => g_app_name
5793 ,p_msg_name => 'OKL_SLA_SOURCES_FAILED');
5794 RAISE OKL_API.G_EXCEPTION_ERROR;
5795 END IF;
5796 --Bug 6316320 dpsingh end
5797 --If the accounting engine call is being made for an AP transaction , then sources need to be
5798 --captured at the header and line level. However, for AP transactions, events are not created by OKL
5799 ELSIF l_try_name IN ('DISBURSEMENT','FUNDING','DEBIT_NOTE') AND (l_line_tbl.count > 0) THEN
5800
5801 --Populated for the calls to delete/create Account Sources
5802 l_pxhv_rec.source_id := p_trx_header_id;
5803 --For AR And AP transactions, p_trx_header_table needs to be passed always.
5804 --Its optional only for OKL Transactions
5805 IF p_trx_header_table IS NULL THEN
5806 Okl_Api.set_message(G_APP_NAME,
5807 G_INVALID_VALUE,
5808 G_COL_NAME_TOKEN,
5809 'SOURCE_TABLE');
5810 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
5811 END IF;
5812 l_pxhv_rec.source_table := p_trx_header_table;
5813
5814 --Cursor to check if sources already exist for the transaction. IF so , the transaction is being updated
5815 --and therefore, existing sources need to be deleted and re-captured.
5816 OPEN check_ap_sources_csr(p_trx_header_id);
5817 FETCH check_ap_sources_csr INTO l_sources_exist;
5818 IF (check_ap_sources_csr%FOUND) THEN
5819 --Make the call to delete existing sources
5820 okl_sla_acc_sources_pvt.delete_ap_extension(
5821 p_api_version => l_api_version
5822 ,p_init_msg_list => l_init_msg_list
5823 ,p_pxhv_rec => l_pxhv_rec
5824 ,x_pxlv_tbl => x_pxlv_tbl
5825 ,x_return_status => l_return_status
5826 ,x_msg_count => l_msg_count
5827 ,x_msg_data => l_msg_data
5828 );
5829
5830 IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
5831 OKL_API.SET_MESSAGE(p_app_name => g_app_name
5832 ,p_msg_name => 'OKL_DEL_SOURCES_FAILED');
5833 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
5834 ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
5835 OKL_API.SET_MESSAGE(p_app_name => g_app_name
5836 ,p_msg_name => 'OKL_DEL_SOURCES_FAILED');
5837 RAISE OKL_API.G_EXCEPTION_ERROR;
5838 END IF;
5839 END IF;
5840 CLOSE check_ap_sources_csr;
5841
5842 IF p_dist_info_tbl.count = l_line_tbl.count THEN
5843 l_equal := true;
5844 END IF;
5845
5846 --Making the call to populate_Acct_sources to retreive the l_asev_rec to be passed to populate_sources
5847 FOR i in p_dist_info_tbl.FIRST..p_dist_info_tbl.LAST
5848 LOOP
5849 l_found := false;
5850 IF not(l_equal) THEN
5851 --If the l_line_tbl and p_dist_info_tbl count do not match, then there are some transaction lines of
5852 --zero amount. Therefore processing only those records in p_dist_info_tbl that exist in l_line_tbl
5853 --asev_rec needs to be fetched only for those lines in l_line_tbl
5854 FOR j in l_line_tbl.FIRST..l_line_tbl.LAST
5855 LOOP
5856 IF (p_dist_info_tbl(i).source_id = l_line_tbl(j)) THEN
5857 l_found := true;
5858 END IF;
5859 END LOOP;
5860 END IF;
5861
5862 IF (l_found) OR (l_equal) THEN
5863
5864 --The index i should refer to the corresponding records in p_dist_info_tbl, p_tmpl_identify_tbl and
5865 --p_acc_gen_primary_key_tbl.Hence the condition. If the condition returns false and the tables are
5866 --indexed differently, then in the ELSE part, we loop through the entire table and find a match on source_id
5867 IF p_acc_gen_primary_key_tbl(i).source_id = p_dist_info_tbl(i).source_id
5868 THEN
5869 l_acc_gen_key_tbl := p_acc_gen_primary_key_tbl(i).acc_gen_key_tbl;
5870 ELSE
5871 FOR j IN p_acc_gen_primary_key_tbl.FIRST..p_acc_gen_primary_key_tbl.LAST
5872 LOOP
5873 IF p_dist_info_tbl(i).source_id = p_acc_gen_primary_key_tbl(j).source_id
5874 THEN
5875 l_acc_gen_key_tbl := p_acc_gen_primary_key_tbl(j).acc_gen_key_tbl;
5876 EXIT;
5877 END IF;
5878 END LOOP;
5879 END IF;
5880
5881 POPULATE_ACCT_SOURCES(p_api_version => l_api_version,
5882 p_init_msg_list => l_init_msg_list,
5883 x_return_status => l_return_status,
5884 x_msg_count => l_msg_count,
5885 x_msg_data => l_msg_data,
5886 p_tmpl_identify_rec => p_tmpl_identify_tbl(i),
5887 p_dist_info_rec => p_dist_info_tbl(i),
5888 p_acc_gen_primary_key_tbl => l_acc_gen_key_tbl,
5889 x_asev_rec => l_asev_rec);
5890
5891 IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
5892 OKL_API.SET_MESSAGE(p_app_name => g_app_name
5893 ,p_msg_name => 'OKL_SLA_SOURCES_FAILED');
5894 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
5895 ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
5896 OKL_API.SET_MESSAGE(p_app_name => g_app_name
5897 ,p_msg_name => 'OKL_SLA_SOURCES_FAILED');
5898 RAISE OKL_API.G_EXCEPTION_ERROR;
5899 END IF;
5900
5901 --Building the line table that needs to be sent to the populate sources_call
5902 l_pxlv_tbl(l_asev_count).source_id := p_dist_info_tbl(i).source_id;
5903 l_pxlv_tbl(l_asev_count).source_table := p_dist_info_tbl(i).source_table;
5904
5905 l_asev_tbl(l_asev_count) := l_asev_rec;
5906 l_asev_count := l_asev_count + 1;
5907 END IF; --(if l_found)
5908 END LOOP;
5909
5910 --Make the call to capture accounting sources for the header for OKL trasaction types only
5911 OKL_SLA_ACC_SOURCES_PVT.populate_sources
5912 (p_api_version => l_api_version
5913 ,p_init_msg_list => l_init_msg_list
5914 ,p_pxhv_rec => l_pxhv_rec
5915 ,p_pxlv_tbl => l_pxlv_tbl
5916 ,p_acc_sources_tbl => l_asev_tbl
5917 ,x_return_status => l_return_status
5918 ,x_msg_count => l_msg_count
5919 ,x_msg_data => l_msg_data);
5920
5921
5922 IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
5923 OKL_API.SET_MESSAGE(p_app_name => g_app_name
5924 ,p_msg_name => 'OKL_SLA_SOURCES_FAILED');
5925 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
5926 ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
5927 OKL_API.SET_MESSAGE(p_app_name => g_app_name
5928 ,p_msg_name => 'OKL_SLA_SOURCES_FAILED');
5929 RAISE OKL_API.G_EXCEPTION_ERROR;
5930 END IF;
5931 END IF;
5932
5933 OKL_API.END_ACTIVITY(x_msg_count, x_msg_data);
5934
5935 EXCEPTION
5936
5937 WHEN OKL_API.G_EXCEPTION_ERROR THEN
5938 x_return_status := OKL_API.HANDLE_EXCEPTIONS
5939 ( l_api_name,
5940 G_PKG_NAME,
5941 'OKL_API.G_RET_STS_ERROR',
5942 x_msg_count,
5943 x_msg_data,
5944 '_PVT'
5945 );
5946 WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
5947 x_return_status := OKL_API.HANDLE_EXCEPTIONS
5948 ( l_api_name,
5949 G_PKG_NAME,
5950 'OKL_API.G_RET_STS_UNEXP_ERROR',
5951 x_msg_count,
5952 x_msg_data,
5953 '_PVT'
5954 );
5955 WHEN OTHERS THEN
5956 x_return_status := OKL_API.HANDLE_EXCEPTIONS
5957 ( l_api_name,
5958 G_PKG_NAME,
5959 'OTHERS',
5960 x_msg_count,
5961 x_msg_data,
5962 '_PVT'
5963 );
5964
5965 END CREATE_ACCOUNTING_DIST;
5966
5967 PROCEDURE REVERSE_ENTRIES(p_api_version IN NUMBER,
5968 p_init_msg_list IN VARCHAR2,
5969 x_return_status OUT NOCOPY VARCHAR2,
5970 x_msg_count OUT NOCOPY NUMBER,
5971 x_msg_data OUT NOCOPY VARCHAR2,
5972 p_source_id IN NUMBER,
5973 p_source_table IN VARCHAR2,
5974 p_acct_date IN DATE)
5975 IS
5976
5977 BEGIN
5978
5979 -- Start of wraper code generated automatically by Debug code generator for OKL_REVERSAL_PUB.REVERSE_ENTRIES
5980 IF(L_DEBUG_ENABLED='Y') THEN
5981 L_LEVEL_PROCEDURE :=FND_LOG.LEVEL_PROCEDURE;
5982 IS_DEBUG_PROCEDURE_ON := OKL_DEBUG_PUB.Check_Log_On(L_MODULE, L_LEVEL_PROCEDURE);
5983 END IF;
5984 IF(IS_DEBUG_PROCEDURE_ON) THEN
5985 BEGIN
5986 OKL_DEBUG_PUB.LOG_DEBUG(L_LEVEL_PROCEDURE,L_MODULE,'Begin Debug OKLRTDTB.pls call OKL_REVERSAL_PUB.REVERSE_ENTRIES ');
5987 END;
5988 END IF;
5989 OKL_REVERSAL_PUB.REVERSE_ENTRIES(p_api_version => p_api_version,
5990 p_init_msg_list => p_init_msg_list,
5991 x_return_status => x_return_status,
5992 x_msg_count => x_msg_count,
5993 x_msg_data => x_msg_data,
5994 p_source_id => p_source_id,
5995 p_source_table => p_source_table,
5996 p_acct_date => p_acct_date);
5997 IF(IS_DEBUG_PROCEDURE_ON) THEN
5998 BEGIN
5999 OKL_DEBUG_PUB.LOG_DEBUG(L_LEVEL_PROCEDURE,L_MODULE,'End Debug OKLRTDTB.pls call OKL_REVERSAL_PUB.REVERSE_ENTRIES ');
6000 END;
6001 END IF;
6002 -- End of wraper code generated automatically by Debug code generator for OKL_REVERSAL_PUB.REVERSE_ENTRIES
6003
6004
6005
6006 END REVERSE_ENTRIES;
6007
6008
6009
6010 PROCEDURE DELETE_ACCT_ENTRIES(p_api_version IN NUMBER,
6011 p_init_msg_list IN VARCHAR2,
6012 x_return_status OUT NOCOPY VARCHAR2,
6013 x_msg_count OUT NOCOPY NUMBER,
6014 x_msg_data OUT NOCOPY VARCHAR2,
6015 p_source_id IN NUMBER,
6016 p_source_table IN VARCHAR2)
6017 IS
6018
6019
6020
6021 l_return_status VARCHAR2(1) := OKL_API.G_RET_STS_SUCCESS;
6022 l_api_name VARCHAR2(30) := 'DELETE_ACCT_ENTRIES';
6023 l_api_version NUMBER := 1.0;
6024 l_check_Status NUMBER := 0;
6025
6026
6027 BEGIN
6028
6029 x_return_status := OKL_API.G_RET_STS_SUCCESS;
6030
6031 l_return_status := OKL_API.START_ACTIVITY(l_api_name,
6032 G_PKG_NAME,
6033 p_init_msg_list,
6034 l_api_version,
6035 p_api_version,
6036 '_PVT',
6037 x_return_status);
6038 IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
6039 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
6040 ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
6041 RAISE OKL_API.G_EXCEPTION_ERROR;
6042 END IF;
6043
6044 -- Check the Distribution Status and take appropriate Action
6045 l_check_status := CHECK_JOURNAL(p_source_id => p_source_id,
6046 p_source_table => p_source_table);
6047
6048 -- l_check_status = 1 denotes that the distributions in OKL exist, but journals have not yet been created in SLA
6049 -- l_check_status = 2 denotes that the distributions exist in OKL , and journals have been created in SLA
6050
6051
6052 IF (l_check_status = 1) THEN
6053 -- Delete from Distributions
6054 DELETE_DIST_AE(p_flag => 'DIST',
6055 p_source_id => p_source_id,
6056 p_source_table => p_source_table,
6057 x_return_status => l_return_status);
6058
6059 IF (l_return_status <> OKL_API.G_RET_STS_SUCCESS) THEN
6060 RAISE OKL_API.G_EXCEPTION_ERROR;
6061 END IF;
6062 END IF;
6063
6064 IF (l_check_status = 2) THEN
6065 OKL_API.SET_MESSAGE(p_app_name => g_app_name,
6066 p_msg_name => 'OKL_AE_GONE_TO_SLA');
6067 RAISE OKL_API.G_EXCEPTION_ERROR;
6068 END IF;
6069
6070
6071 OKL_API.END_ACTIVITY(x_msg_count, x_msg_data);
6072
6073 x_return_status := OKL_API.G_RET_STS_SUCCESS;
6074
6075 EXCEPTION
6076
6077 WHEN OKL_API.G_EXCEPTION_ERROR THEN
6078 x_return_status := OKL_API.HANDLE_EXCEPTIONS
6079 ( l_api_name,
6080 G_PKG_NAME,
6081 'OKL_API.G_RET_STS_ERROR',
6082 x_msg_count,
6083 x_msg_data,
6084 '_PVT'
6085 );
6086 WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
6087 x_return_status := OKL_API.HANDLE_EXCEPTIONS
6088 ( l_api_name,
6089 G_PKG_NAME,
6090 'OKL_API.G_RET_STS_UNEXP_ERROR',
6091 x_msg_count,
6092 x_msg_data,
6093 '_PVT'
6094 );
6095 WHEN OTHERS THEN
6096 x_return_status := OKL_API.HANDLE_EXCEPTIONS
6097 ( l_api_name,
6098 G_PKG_NAME,
6099 'OTHERS',
6100 x_msg_count,
6101 x_msg_data,
6102 '_PVT'
6103 );
6104
6105
6106 END DELETE_ACCT_ENTRIES;
6107
6108 PROCEDURE CREATE_ACCOUNTING_DIST(p_api_version IN NUMBER,
6109 p_init_msg_list IN VARCHAR2,
6110 x_return_status OUT NOCOPY VARCHAR2,
6111 x_msg_count OUT NOCOPY NUMBER,
6112 x_msg_data OUT NOCOPY VARCHAR2,
6113 p_tmpl_identify_rec IN TMPL_IDENTIFY_REC_TYPE,
6114 p_dist_info_rec IN DIST_INFO_REC_TYPE,
6115 p_ctxt_val_tbl IN CTXT_VAL_TBL_TYPE,
6116 p_acc_gen_primary_key_tbl IN acc_gen_primary_key,
6117 x_template_tbl OUT NOCOPY AVLV_TBL_TYPE,
6118 x_amount_tbl OUT NOCOPY AMOUNT_TBL_TYPE,
6119 x_gl_date OUT NOCOPY DATE)
6120 IS
6121 BEGIN
6122
6123 CREATE_ACCOUNTING_DIST(p_api_version => p_api_version,
6124 p_init_msg_list => p_init_msg_list,
6125 x_return_status => x_return_status,
6126 x_msg_count => x_msg_count,
6127 x_msg_data => x_msg_data,
6128 p_tmpl_identify_rec => p_tmpl_identify_rec,
6129 p_dist_info_rec => p_dist_info_rec,
6130 p_ctxt_val_tbl => p_ctxt_val_tbl,
6131 p_acc_gen_primary_key_tbl => p_acc_gen_primary_key_tbl,
6132 x_template_tbl => x_template_tbl,
6133 x_amount_tbl => x_amount_tbl);
6134
6135 x_gl_date := G_gl_date;
6136
6137 END CREATE_ACCOUNTING_DIST;
6138
6139 -- Added by Santonyr on 12-Jul-2440 for the bug 3761026
6140
6141 PROCEDURE POPULATE_ACCT_SOURCES(p_api_version IN NUMBER,
6142 p_init_msg_list IN VARCHAR2,
6143 x_return_status OUT NOCOPY VARCHAR2,
6144 x_msg_count OUT NOCOPY NUMBER,
6145 x_msg_data OUT NOCOPY VARCHAR2,
6146 p_tmpl_identify_rec IN TMPL_IDENTIFY_REC_TYPE,
6147 p_dist_info_rec IN DIST_INFO_REC_TYPE,
6148 p_acc_gen_primary_key_tbl IN acc_gen_primary_key,
6149 p_template_amount_tbl IN template_amount_tbl_type)
6150 IS
6151
6152 l_return_status VARCHAR2(1) := Okl_Api.G_RET_STS_SUCCESS;
6153 l_api_name VARCHAR2(30) := 'POPULATE_ACCT_SOURCES';
6154 l_api_version NUMBER := 1.0;
6155
6156 l_init_msg_list VARCHAR2(1) := Okl_Api.G_FALSE;
6157 l_msg_count NUMBER := 0;
6158 l_msg_data VARCHAR2(2000);
6159
6160
6161 l_pay_vendor_sites_pk VARCHAR2(50);
6162 l_rec_site_uses_pk VARCHAR2(50);
6163 l_asset_category_id_pk1 VARCHAR2(50);
6164 l_asset_book_pk2 VARCHAR2(50);
6165 l_pay_financial_options_pk VARCHAR2(50);
6166 l_jtf_sales_reps_pk VARCHAR2(50);
6167 l_inventory_item_id_pk1 VARCHAR2(50);
6168 l_inventory_org_id_pk2 VARCHAR2(50);
6169 l_rec_trx_types_pk VARCHAR2(50);
6170 l_factor_investor_code VARCHAR2(30);
6171
6172 l_asev_tbl asev_tbl_type;
6173 x_asev_tbl asev_tbl_type;
6174
6175 BEGIN
6176
6177 x_return_status := Okl_Api.G_RET_STS_SUCCESS;
6178
6179 l_return_status := Okl_Api.START_ACTIVITY(l_api_name,
6180 G_PKG_NAME,
6181 p_init_msg_list,
6182 l_api_version,
6183 p_api_version,
6184 '_PVT',
6185 x_return_status);
6186 IF (l_return_status = Okl_Api.G_RET_STS_UNEXP_ERROR) THEN
6187 RAISE Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR;
6188 ELSIF (l_return_status = Okl_Api.G_RET_STS_ERROR) THEN
6189 RAISE Okl_Api.G_EXCEPTION_ERROR;
6190 END IF;
6191
6192
6193 -- Extract the account generator sources from account generator primary key table.
6194
6195 IF p_acc_gen_primary_key_tbl.COUNT > 0 THEN
6196
6197 FOR j IN p_acc_gen_primary_key_tbl.FIRST..p_acc_gen_primary_key_tbl.LAST LOOP
6198
6199 IF p_acc_gen_primary_key_tbl(j).source_table = 'AP_VENDOR_SITES_V' THEN
6200 l_pay_vendor_sites_pk := TRIM(p_acc_gen_primary_key_tbl(j).primary_key_column);
6201
6202
6203 ELSIF p_acc_gen_primary_key_tbl(j).source_table = 'AR_SITE_USES_V' THEN
6204 l_rec_site_uses_pk := TRIM(p_acc_gen_primary_key_tbl(j).primary_key_column);
6205
6206
6207 ELSIF p_acc_gen_primary_key_tbl(j).source_table = 'FA_CATEGORY_BOOKS' THEN
6208 l_asset_category_id_pk1 := TRIM(SUBSTR(p_acc_gen_primary_key_tbl(j).primary_key_column,1, 50));
6209 l_asset_book_pk2 := TRIM(SUBSTR(p_acc_gen_primary_key_tbl(j).primary_key_column,51, 100));
6210
6211
6212 ELSIF p_acc_gen_primary_key_tbl(j).source_table = 'FINANCIALS_SYSTEM_PARAMETERS' THEN
6213 l_pay_financial_options_pk := TRIM(p_acc_gen_primary_key_tbl(j).primary_key_column);
6214
6215 ELSIF p_acc_gen_primary_key_tbl(j).source_table = 'JTF_RS_SALESREPS_MO_V' THEN
6216 l_jtf_sales_reps_pk := TRIM(p_acc_gen_primary_key_tbl(j).primary_key_column);
6217
6218
6219 ELSIF p_acc_gen_primary_key_tbl(j).source_table = 'MTL_SYSTEM_ITEMS_VL' THEN
6220 l_inventory_item_id_pk1 := TRIM(SUBSTR(p_acc_gen_primary_key_tbl(j).primary_key_column,1, 50));
6221 l_inventory_org_id_pk2 := TRIM(SUBSTR(p_acc_gen_primary_key_tbl(j).primary_key_column,51, 100));
6222
6223 ELSIF p_acc_gen_primary_key_tbl(j).source_table = 'RA_CUST_TRX_TYPES' THEN
6224 l_rec_trx_types_pk := TRIM(p_acc_gen_primary_key_tbl(j).primary_key_column);
6225 END IF;
6226
6227 END LOOP;
6228
6229 END IF;
6230
6231 -- Get the syndication /Investor Code
6232
6233 IF p_tmpl_identify_rec.factoring_synd_flag = 'SYNDICATION' THEN
6234 l_factor_investor_code := p_tmpl_identify_rec.syndication_code;
6235 ELSIF p_tmpl_identify_rec.factoring_synd_flag = 'FACTORING' THEN
6236 l_factor_investor_code := p_tmpl_identify_rec.factoring_code;
6237 ELSIF p_tmpl_identify_rec.factoring_synd_flag = 'INVESTOR' THEN
6238 l_factor_investor_code := p_tmpl_identify_rec.investor_code;
6239 END IF;
6240
6241
6242 -- Populate the account sources PL/SQL table.
6243
6244 IF p_template_amount_tbl.COUNT > 0 THEN
6245
6246 FOR i IN p_template_amount_tbl.FIRST .. p_template_amount_tbl.LAST LOOP
6247
6248 l_asev_tbl(i).source_table := p_dist_info_rec.source_table; --source_table,
6249 l_asev_tbl(i).source_id := p_dist_info_rec.source_id; --source_id,
6250 l_asev_tbl(i).pdt_id := p_tmpl_identify_rec.product_id; --product_id,
6251 l_asev_tbl(i).try_id := p_tmpl_identify_rec.transaction_type_id; --trx_type_id,
6252 l_asev_tbl(i).sty_id := p_template_amount_tbl(i).stream_type_id ; --stream_type_id,
6253 l_asev_tbl(i).memo_yn := NVL(p_tmpl_identify_rec.memo_yn, 'N'); --memo_yn,
6254 l_asev_tbl(i).factor_investor_flag := p_tmpl_identify_rec.factoring_synd_flag; --factor_investor_flag,
6255 l_asev_tbl(i).factor_investor_code := l_factor_investor_code; --factor_investor_code,
6256 l_asev_tbl(i).amount := p_template_amount_tbl(i).amount; --amount
6257 l_asev_tbl(i).formula_used := p_template_amount_tbl(i).formula_used; --formula_used
6258 l_asev_tbl(i).entered_date := p_dist_info_rec.accounting_date; --entered_accounting_date,
6259 l_asev_tbl(i).accounting_date := trunc(g_gl_date); --accounting_date,
6260 l_asev_tbl(i).gl_reversal_flag := p_dist_info_rec.gl_reversal_flag; --gl_reversal_flag,
6261 l_asev_tbl(i).post_to_gl := p_dist_info_rec.post_to_gl; --post_to_gl,
6262 l_asev_tbl(i).currency_code := p_dist_info_rec.currency_code; --currency_code,
6263 l_asev_tbl(i).currency_conversion_type := p_dist_info_rec.currency_conversion_type; --currency_conversion_type,
6264 l_asev_tbl(i).currency_conversion_date := p_dist_info_rec.currency_conversion_date; --currency_conversion_date,
6265 l_asev_tbl(i).currency_conversion_rate := p_dist_info_rec.currency_conversion_rate; --currency_conversion_rate,
6266 l_asev_tbl(i).khr_id := p_dist_info_rec.contract_id; --contract_id,
6267 l_asev_tbl(i).kle_id := p_dist_info_rec.contract_line_id; --contract_line_id,
6268 l_asev_tbl(i).pay_vendor_sites_pk := l_pay_vendor_sites_pk; --pay_vendor_sites_pk,
6269 l_asev_tbl(i).rec_site_uses_pk := l_rec_site_uses_pk; --rec_site_uses_pk,
6270 l_asev_tbl(i).asset_category_id_pk1 := l_asset_category_id_pk1; --asset_categories_pk1,
6271 l_asev_tbl(i).asset_book_pk2 := l_asset_book_pk2; --asset_categories_pk2,
6272 l_asev_tbl(i).pay_financial_options_pk := l_pay_financial_options_pk; --pay_financial_options_pk,
6273 l_asev_tbl(i).jtf_sales_reps_pk := l_jtf_sales_reps_pk; --jtf_sales_reps_pk,
6274 l_asev_tbl(i).inventory_item_id_pk1 := l_inventory_item_id_pk1; --inventory_items_pk1,
6275 l_asev_tbl(i).inventory_org_id_pk2 := l_inventory_org_id_pk2; --inventory_items_pk2,
6276 l_asev_tbl(i).rec_trx_types_pk := l_rec_trx_types_pk; --rec_trx_types_pk,
6277 l_asev_tbl(i).avl_id := p_template_amount_tbl(i).template_id; --template_id
6278 l_asev_tbl(i).local_product_yn := 'Y'; --local_product,
6279 l_asev_tbl(i).internal_status := 'ENTERED'; --status,
6280 l_asev_tbl(i).custom_status := 'ENTERED'; --custom_status,
6281 l_asev_tbl(i).source_indicator_flag := 'INTERNAL'; --source_indicator,
6282
6283 END LOOP;
6284
6285 END IF;
6286
6287
6288 -- Insert into Account Sources table.
6289
6290 Okl_Acct_Sources_Pvt. insert_acct_sources (
6291 p_api_version => l_api_version
6292 ,p_init_msg_list => l_init_msg_list
6293 ,x_return_status => l_return_status
6294 ,x_msg_count => l_msg_count
6295 ,x_msg_data => l_msg_data
6296 ,p_asev_tbl => l_asev_tbl
6297 ,x_asev_tbl => x_asev_tbl);
6298
6299 IF (l_return_status = Okl_Api.G_RET_STS_UNEXP_ERROR) THEN
6300 RAISE Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR;
6301 ELSIF (l_return_status = Okl_Api.G_RET_STS_ERROR) THEN
6302 RAISE Okl_Api.G_EXCEPTION_ERROR;
6303 END IF;
6304
6305
6306 Okl_Api.END_ACTIVITY(x_msg_count, x_msg_data);
6307
6308 x_return_status := Okl_Api.G_RET_STS_SUCCESS;
6309
6310 EXCEPTION
6311
6312 WHEN Okl_Api.G_EXCEPTION_ERROR THEN
6313 x_return_status := OKL_API.HANDLE_EXCEPTIONS
6314 ( l_api_name,
6315 G_PKG_NAME,
6316 'OKL_API.G_RET_STS_ERROR',
6317 x_msg_count,
6318 x_msg_data,
6319 '_PVT'
6320 );
6321 WHEN Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR THEN
6322 x_return_status := OKL_API.HANDLE_EXCEPTIONS
6323 ( l_api_name,
6324 G_PKG_NAME,
6325 'OKL_API.G_RET_STS_UNEXP_ERROR',
6326 x_msg_count,
6327 x_msg_data,
6328 '_PVT'
6329 );
6330 WHEN OTHERS THEN
6331 x_return_status := OKL_API.HANDLE_EXCEPTIONS
6332 ( l_api_name,
6333 G_PKG_NAME,
6334 'OTHERS',
6335 x_msg_count,
6336 x_msg_data,
6337 '_PVT'
6338 );
6339
6340
6341 END POPULATE_ACCT_SOURCES;
6342
6343 --Added by gboomina for Accruals Performance on 14-Oct-2005
6344 --Bug 4662173 - Start of Changes
6345 PROCEDURE POPULATE_ACCT_SOURCES(p_api_version IN NUMBER,
6346 p_init_msg_list IN VARCHAR2,
6347 x_return_status OUT NOCOPY VARCHAR2,
6348 x_msg_count OUT NOCOPY NUMBER,
6349 x_msg_data OUT NOCOPY VARCHAR2,
6350 p_tmpl_identify_rec IN TMPL_IDENTIFY_REC_TYPE,
6351 p_dist_info_tbl IN DIST_INFO_TBL_TYPE,
6352 p_acc_gen_primary_key_tbl IN acc_gen_tbl,
6353 p_template_amount_tbl IN tmp_bulk_amount_tbl_type)
6354 IS
6355
6356 l_return_status VARCHAR2(1) := Okl_Api.G_RET_STS_SUCCESS;
6357 l_api_name VARCHAR2(30) := 'POPULATE_ACCT_SOURCES';
6358 l_api_version NUMBER := 1.0;
6359
6360 l_init_msg_list VARCHAR2(1) := Okl_Api.G_FALSE;
6361 l_msg_count NUMBER := 0;
6362 l_msg_data VARCHAR2(2000);
6363
6364
6365 l_pay_vendor_sites_pk VARCHAR2(50);
6366 l_rec_site_uses_pk VARCHAR2(50);
6367 l_asset_category_id_pk1 VARCHAR2(50);
6368 l_asset_book_pk2 VARCHAR2(50);
6369 l_pay_financial_options_pk VARCHAR2(50);
6370 l_jtf_sales_reps_pk VARCHAR2(50);
6371 l_inventory_item_id_pk1 VARCHAR2(50);
6372 l_inventory_org_id_pk2 VARCHAR2(50);
6373 l_rec_trx_types_pk VARCHAR2(50);
6374 l_factor_investor_code VARCHAR2(30);
6375
6376 l_asev_tbl asev_tbl_type;
6377 x_asev_tbl asev_tbl_type;
6378 j NUMBER := 0;
6379 --Added by gboomina for the Accruals Performance Enhancement
6380 l_acc_gen_index NUMBER := 0;
6381 l_acc_gen_last_index NUMBER := 0;
6382 l_dist_info_tbl DIST_INFO_TBL_TYPE := p_dist_info_tbl;
6383 l_asev_full_tbl asev_tbl_type;
6384 p_acc_gen_tbl_ret acc_gen_primary_key;
6385 l_tmp_amt_tbl_ret template_amount_tbl_type;
6386 l_tmp_amt_index NUMBER := 0;
6387 l_tmp_amt_last_index NUMBER := 0;
6388
6389 BEGIN
6390
6391 x_return_status := Okl_Api.G_RET_STS_SUCCESS;
6392
6393 l_return_status := Okl_Api.START_ACTIVITY(l_api_name,
6394 G_PKG_NAME,
6395 p_init_msg_list,
6396 l_api_version,
6397 p_api_version,
6398 '_PVT',
6399 x_return_status);
6400 IF (l_return_status = Okl_Api.G_RET_STS_UNEXP_ERROR) THEN
6401 RAISE Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR;
6402 ELSIF (l_return_status = Okl_Api.G_RET_STS_ERROR) THEN
6403 RAISE Okl_Api.G_EXCEPTION_ERROR;
6404 END IF;
6405
6406
6407 FOR i IN l_dist_info_tbl.FIRST..l_dist_info_tbl.LAST LOOP
6408 --Obtaining the acc_gen_tbl for the l_dist_info_tbl(i)
6409 GET_ACC_GEN_TBL(p_source_id => l_dist_info_tbl(i).source_id,
6410 p_gen_table => p_acc_gen_primary_key_tbl,
6411 x_acc_gen_tbl_ret => p_acc_gen_tbl_ret);
6412
6413
6414 -- Extract the account generator sources from account generator primary key table.
6415
6416 IF p_acc_gen_tbl_ret.COUNT > 0 THEN
6417
6418 FOR j IN p_acc_gen_tbl_ret.FIRST..p_acc_gen_tbl_ret.LAST LOOP
6419
6420 IF p_acc_gen_tbl_ret(j).source_table = 'AP_VENDOR_SITES_V' THEN
6421 l_pay_vendor_sites_pk := TRIM(p_acc_gen_tbl_ret(j).primary_key_column);
6422
6423
6424 ELSIF p_acc_gen_tbl_ret(j).source_table = 'AR_SITE_USES_V' THEN
6425 l_rec_site_uses_pk := TRIM(p_acc_gen_tbl_ret(j).primary_key_column);
6426
6427
6428 ELSIF p_acc_gen_tbl_ret(j).source_table = 'FA_CATEGORY_BOOKS' THEN
6429 l_asset_category_id_pk1 := TRIM(SUBSTR(p_acc_gen_tbl_ret(j).primary_key_column,1, 50));
6430 l_asset_book_pk2 := TRIM(SUBSTR(p_acc_gen_tbl_ret(j).primary_key_column,51, 100));
6431
6432
6433 ELSIF p_acc_gen_tbl_ret(j).source_table = 'FINANCIALS_SYSTEM_PARAMETERS' THEN
6434 l_pay_financial_options_pk := TRIM(p_acc_gen_tbl_ret(j).primary_key_column);
6435
6436 ELSIF p_acc_gen_tbl_ret(j).source_table = 'JTF_RS_SALESREPS_MO_V' THEN
6437 l_jtf_sales_reps_pk := TRIM(p_acc_gen_tbl_ret(j).primary_key_column);
6438
6439
6440 ELSIF p_acc_gen_tbl_ret(j).source_table = 'MTL_SYSTEM_ITEMS_VL' THEN
6441 l_inventory_item_id_pk1 := TRIM(SUBSTR(p_acc_gen_tbl_ret(j).primary_key_column,1, 50));
6442 l_inventory_org_id_pk2 := TRIM(SUBSTR(p_acc_gen_tbl_ret(j).primary_key_column,51, 100));
6443
6444 ELSIF p_acc_gen_tbl_ret(j).source_table = 'RA_CUST_TRX_TYPES' THEN
6445 l_rec_trx_types_pk := TRIM(p_acc_gen_tbl_ret(j).primary_key_column);
6446 END IF;
6447
6448 END LOOP;
6449
6450 END IF;
6451
6452 -- Get the syndication /Investor Code
6453
6454 IF p_tmpl_identify_rec.factoring_synd_flag = 'SYNDICATION' THEN
6455 l_factor_investor_code := p_tmpl_identify_rec.syndication_code;
6456 ELSIF p_tmpl_identify_rec.factoring_synd_flag = 'FACTORING' THEN
6457 l_factor_investor_code := p_tmpl_identify_rec.factoring_code;
6458 ELSIF p_tmpl_identify_rec.factoring_synd_flag = 'INVESTOR' THEN
6459 l_factor_investor_code := p_tmpl_identify_rec.investor_code;
6460 END IF;
6461
6462 --Obtaining the template_amount_tbl for the l_dist_info_tbl(i)
6463 GET_TEMPLATE_AMOUNT_TBL(p_parent_index_number => i,
6464 p_tmp_amount_table => p_template_amount_tbl,
6465 x_tmp_amt_tbl_ret => l_tmp_amt_tbl_ret);
6466
6467
6468 FOR j IN l_tmp_amt_tbl_ret.FIRST .. l_tmp_amt_tbl_ret.LAST LOOP
6469 l_asev_tbl(j).source_table := p_dist_info_tbl(i).source_table; --source_table,
6470 l_asev_tbl(j).source_id := p_dist_info_tbl(i).source_id; --source_id,
6471 l_asev_tbl(j).pdt_id := p_tmpl_identify_rec.product_id; --product_id,
6472 l_asev_tbl(j).try_id := p_tmpl_identify_rec.transaction_type_id; --trx_type_id,
6473 l_asev_tbl(j).sty_id := l_tmp_amt_tbl_ret(j).stream_type_id ; --stream_type_id,
6474 l_asev_tbl(j).memo_yn := NVL(p_tmpl_identify_rec.memo_yn, 'N'); --memo_yn,
6475 l_asev_tbl(j).factor_investor_flag := p_tmpl_identify_rec.factoring_synd_flag; --factor_investor_flag,
6476 l_asev_tbl(j).factor_investor_code := l_factor_investor_code; --factor_investor_code,
6477 l_asev_tbl(j).amount := l_tmp_amt_tbl_ret(j).amount; --amount
6478 l_asev_tbl(j).formula_used := l_tmp_amt_tbl_ret(j).formula_used; --formula_used
6479 l_asev_tbl(j).entered_date := p_dist_info_tbl(i).accounting_date; --entered_accounting_date,
6480 l_asev_tbl(j).accounting_date := trunc(g_gl_date); --accounting_date,
6481 l_asev_tbl(j).gl_reversal_flag := p_dist_info_tbl(i).gl_reversal_flag; --gl_reversal_flag,
6482 l_asev_tbl(j).post_to_gl := p_dist_info_tbl(i).post_to_gl; --post_to_gl,
6483 l_asev_tbl(j).currency_code := p_dist_info_tbl(i).currency_code; --currency_code,
6484 l_asev_tbl(j).currency_conversion_type := p_dist_info_tbl(i).currency_conversion_type; --currency_conversion_type,
6485 l_asev_tbl(j).currency_conversion_date := p_dist_info_tbl(i).currency_conversion_date; --currency_conversion_date,
6486 l_asev_tbl(j).currency_conversion_rate := p_dist_info_tbl(i).currency_conversion_rate; --currency_conversion_rate,
6487 l_asev_tbl(j).khr_id := p_dist_info_tbl(i).contract_id; --contract_id,
6488 l_asev_tbl(j).kle_id := p_dist_info_tbl(i).contract_line_id; --contract_line_id,
6489 l_asev_tbl(j).pay_vendor_sites_pk := l_pay_vendor_sites_pk; --pay_vendor_sites_pk,
6490 l_asev_tbl(j).rec_site_uses_pk := l_rec_site_uses_pk; --rec_site_uses_pk,
6491 l_asev_tbl(j).asset_category_id_pk1 := l_asset_category_id_pk1; --asset_categories_pk1,
6492 l_asev_tbl(j).asset_book_pk2 := l_asset_book_pk2; --asset_categories_pk2,
6493 l_asev_tbl(j).pay_financial_options_pk := l_pay_financial_options_pk; --pay_financial_options_pk,
6494 l_asev_tbl(j).jtf_sales_reps_pk := l_jtf_sales_reps_pk; --jtf_sales_reps_pk,
6495 l_asev_tbl(j).inventory_item_id_pk1 := l_inventory_item_id_pk1; --inventory_items_pk1,
6496 l_asev_tbl(j).inventory_org_id_pk2 := l_inventory_org_id_pk2; --inventory_items_pk2,
6497 l_asev_tbl(j).rec_trx_types_pk := l_rec_trx_types_pk; --rec_trx_types_pk,
6498 l_asev_tbl(j).avl_id := l_tmp_amt_tbl_ret(j).template_id; --template_id
6499 l_asev_tbl(j).local_product_yn := 'Y'; --local_product,
6500 l_asev_tbl(j).internal_status := 'ENTERED'; --status,
6501 l_asev_tbl(j).custom_status := 'ENTERED'; --custom_status,
6502 l_asev_tbl(j).source_indicator_flag := 'INTERNAL'; --source_indicator,
6503 END LOOP;
6504 --Accumulating the account sources for the entire dist_info_tbl
6505 ACCUMULATE_ACCT_SOURCES(p_asev_tbl => l_asev_tbl,
6506 x_asev_full_tbl => l_asev_full_tbl,
6507 x_return_status => l_return_status);
6508
6509 END LOOP;--For dist_info_tbl.count
6510
6511
6512 -- Insert into Account Sources table.
6513
6514 Okl_Acct_Sources_Pvt. insert_acct_sources_bulk (
6515 p_api_version => l_api_version
6516 ,p_init_msg_list => l_init_msg_list
6517 ,x_return_status => l_return_status
6518 ,x_msg_count => l_msg_count
6519 ,x_msg_data => l_msg_data
6520 ,p_asev_tbl => l_asev_full_tbl
6521 ,x_asev_tbl => x_asev_tbl);
6522
6523 IF (l_return_status = Okl_Api.G_RET_STS_UNEXP_ERROR) THEN
6524 RAISE Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR;
6525 ELSIF (l_return_status = Okl_Api.G_RET_STS_ERROR) THEN
6526 RAISE Okl_Api.G_EXCEPTION_ERROR;
6527 END IF;
6528
6529
6530 Okl_Api.END_ACTIVITY(x_msg_count, x_msg_data);
6531
6532 x_return_status := Okl_Api.G_RET_STS_SUCCESS;
6533
6534 EXCEPTION
6535
6536 WHEN Okl_Api.G_EXCEPTION_ERROR THEN
6537 x_return_status := OKL_API.HANDLE_EXCEPTIONS
6538 ( l_api_name,
6539 G_PKG_NAME,
6540 'OKL_API.G_RET_STS_ERROR',
6541 x_msg_count,
6542 x_msg_data,
6543 '_PVT'
6544 );
6545 WHEN Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR THEN
6546 x_return_status := OKL_API.HANDLE_EXCEPTIONS
6547 ( l_api_name,
6548 G_PKG_NAME,
6549 'OKL_API.G_RET_STS_UNEXP_ERROR',
6550 x_msg_count,
6551 x_msg_data,
6552 '_PVT'
6553 );
6554 WHEN OTHERS THEN
6555 x_return_status := OKL_API.HANDLE_EXCEPTIONS
6556 ( l_api_name,
6557 G_PKG_NAME,
6558 'OTHERS',
6559 x_msg_count,
6560 x_msg_data,
6561 '_PVT'
6562 );
6563
6564
6565 END POPULATE_ACCT_SOURCES;
6566 --Bug 4662173 - End of Changes
6567
6568 END OKL_ACCOUNT_DIST_PVT;