[Home] [Help]
PACKAGE BODY: APPS.OKL_ACCOUNT_DIST_PVT
Source
1 PACKAGE BODY OKL_ACCOUNT_DIST_PVT AS
2 /* $Header: OKLRTDTB.pls 120.37.12020000.2 2012/12/03 09:46:41 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 f.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 /* commenting this part as zero amount is not an error condition. racheruv bug 15881611
2989 IF (l_amount = 0) THEN
2990 OKL_API.SET_MESSAGE(p_app_name => g_app_name,
2991 p_msg_name => 'OKL_FRML_RET_ZERO_AMT',
2992 p_token1 => 'TEMPLATE_NAME',
2993 p_token1_value => tmpl_rec.NAME);
2994
2995 -- Santonyr on 14-Jul-2003 Fixed bug 3048686
2996 -- RAISE OKL_API.G_EXCEPTION_ERROR;
2997
2998 END IF;
2999 */
3000
3001 x_template_tbl(j) := tmpl_rec;
3002
3003 --- Changed by Kanti. Bug 3125787
3004 x_amount_tbl(j) := Okl_Accounting_Util.ROUND_AMOUNT(p_amount => l_amount,
3005 p_currency_code => p_dist_info_rec.currency_code);
3006
3007 -- Added by Santonyr on 12-Jul-2440 for the bug 3761026
3008 l_template_amount_tbl(j).amount := x_amount_tbl(j);
3009
3010 -- Create the Distributions if Amount is Greater than Zero
3011 -- Fixed bug 2815972 by Santonyr on 04-Aug-2003
3012
3013 IF (l_amount <> 0) THEN
3014 IF (l_account_derivation = 'ATS') THEN
3015 CREATE_DIST_RECS(p_avlv_rec => tmpl_rec,
3016 p_tmpl_identify_rec => p_tmpl_identify_rec,
3017 p_dist_info_rec => p_dist_info_rec,
3018 p_amount => l_amount,
3019 p_gen_table => p_acc_gen_primary_key_tbl,
3020 x_return_status => l_return_status,
3021 x_tabv_tbl => l_tabv_tbl_out);
3022
3023 IF (l_return_status <> OKL_API.G_RET_STS_SUCCESS) THEN
3024 RAISE OKL_API.G_EXCEPTION_ERROR;
3025 END IF;
3026
3027 ELSIF (l_account_derivation = 'AMB') THEN
3028 CREATE_DIST_RECS(--Bug 6127326 dpsingh start
3029 p_avlv_rec => tmpl_rec,
3030 --Bug 6127326 dpsingh end
3031 p_tmpl_identify_rec => p_tmpl_identify_rec,
3032 p_dist_info_rec => p_dist_info_rec,
3033 p_amount => l_amount,
3034 x_return_status => l_return_status,
3035 x_tabv_tbl => l_tabv_tbl_out);
3036
3037 IF (l_return_status <> OKL_API.G_RET_STS_SUCCESS) THEN
3038 RAISE OKL_API.G_EXCEPTION_ERROR;
3039 END IF;
3040 END IF;
3041 END IF; -- End If for (l_amount <> 0)
3042
3043 --The distribution table returned by each iteration of l_tmpl_tbl.COUNT needs to be accumulated
3044 IF (l_tabv_tbl_final.COUNT = 0) THEN
3045 k := 0;
3046 ELSE
3047 k := l_tabv_tbl_final.COUNT;
3048 END IF;
3049
3050 IF l_tabv_tbl_out.COUNT > 0 THEN
3051 FOR i in l_tabv_tbl_out.FIRST..l_tabv_tbl_out.LAST
3052 LOOP
3053 l_tabv_tbl_final(k).id := l_tabv_tbl_out(i).id;
3054 k := k + 1;
3055 END LOOP;
3056 END IF;
3057
3058 END LOOP; -- End LOOP for (l_tmpl_tbl.COUNT)
3059 --If the account derivation option is 'AMB' and the amount is known
3060 ELSE
3061 --Assinging the amount being passed in the rec to l_amount
3062 l_amount := p_dist_info_rec.amount;
3063 -- Check the Distribution Status and take appropriate Action
3064 l_check_status := CHECK_JOURNAL(p_source_id => p_dist_info_rec.source_id,
3065 p_source_table => p_dist_info_rec.source_table);
3066
3067 -- l_check_status = 1 denotes that the distributions in OKL exist, but journals have not yet been created in SLA
3068 -- l_check_status = 2 denotes that the distributions exist in OKL , and journals have been created in SLA
3069
3070
3071 IF (l_check_status = 1) THEN
3072 -- Delete from Distributions
3073 DELETE_DIST_AE(p_flag => 'DIST',
3074 p_source_id => p_dist_info_rec.source_id,
3075 p_source_table => p_dist_info_rec.source_table,
3076 x_return_status => l_return_status);
3077
3078 IF (l_return_status <> OKL_API.G_RET_STS_SUCCESS) THEN
3079 RAISE OKL_API.G_EXCEPTION_ERROR;
3080 END IF;
3081
3082 --The accounting event needs to be created only for the OKL transaction types
3083 IF l_try_name IN ('RECEIPT_APPLICATION','PRINCIPAL_ADJUSTMENT','UPFRONT_TAX','BOOKING','TERMINATION',
3084 'ASSET_DISPOSITION','ACCRUAL','GENERAL_LOSS_PROVISION','SPECIFIC_LOSS_PROVISION','REBOOK','EVERGREEN',
3085 'RELEASE','INVESTOR','SPLIT_ASSET')
3086 THEN
3087
3088 --This accounting engine call has been made in an update mode i.e. the transaction line already existed
3089 --Thefore the accounting sources need to be recaptured while creating distributions
3090
3091 --Fetching the transaction header id
3092 OPEN get_tcn_id_csr(p_dist_info_rec.source_id);
3093 FETCH get_tcn_id_csr INTO l_tcn_id;
3094 CLOSE get_tcn_id_csr;
3095
3096 l_tcnv_rec.source_id := l_tcn_id;
3097 l_tcnv_rec.source_table := 'OKL_TRX_CONTRACTS';
3098
3099 --Existing sources are being deleted.
3100 okl_sla_acc_sources_pvt.delete_trx_extension(
3101 p_api_version => l_api_version
3102 ,p_init_msg_list => l_init_msg_list
3103 ,p_trans_hdr_rec => l_tcnv_rec
3104 ,x_trans_line_tbl => l_tclv_tbl
3105 ,x_return_status => l_return_status
3106 ,x_msg_count => l_msg_count
3107 ,x_msg_data => l_msg_data
3108 );
3109
3110 IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
3111 OKL_API.SET_MESSAGE(p_app_name => g_app_name
3112 ,p_msg_name => 'OKL_DEL_SOURCES_FAILED');
3113 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
3114 ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
3115 OKL_API.SET_MESSAGE(p_app_name => g_app_name
3116 ,p_msg_name => 'OKL_DEL_SOURCES_FAILED');
3117 RAISE OKL_API.G_EXCEPTION_ERROR;
3118 END IF;
3119
3120 ELSIF l_try_name IN ('BILLING','CREDIT_MEMO','ROLLOVER_BILLING','ROLLOVER_CREDITMEMO',
3121 'RELEASE_BILLING','RELEASE_CREDITMEMO') THEN
3122 --This accounting engine call has been made in an update mode i.e. the transaction line already existed
3123 --Thefore the accounting sources need to be recaptured while creating distributions
3124 --Fetching the transaction header id
3125 OPEN get_tai_id_csr(p_dist_info_rec.source_id);
3126 FETCH get_tai_id_csr INTO l_tai_id;
3127 CLOSE get_tai_id_csr;
3128
3129 l_rxhv_rec.source_id := l_tai_id;
3130 l_rxhv_rec.source_table := 'OKL_TRX_AR_INVOICES_B';
3131
3132 --Existing sources are being deleted.
3133 okl_sla_acc_sources_pvt.delete_ar_extension(
3134 p_api_version => l_api_version
3135 ,p_init_msg_list => l_init_msg_list
3136 ,p_rxhv_rec => l_rxhv_rec
3137 ,x_rxlv_tbl => x_rxlv_tbl
3138 ,x_return_status => l_return_status
3139 ,x_msg_count => l_msg_count
3140 ,x_msg_data => l_msg_data
3141 );
3142
3143 IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
3144 OKL_API.SET_MESSAGE(p_app_name => g_app_name
3145 ,p_msg_name => 'OKL_DEL_SOURCES_FAILED');
3146 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
3147 ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
3148 OKL_API.SET_MESSAGE(p_app_name => g_app_name
3149 ,p_msg_name => 'OKL_DEL_SOURCES_FAILED');
3150 RAISE OKL_API.G_EXCEPTION_ERROR;
3151 END IF;
3152
3153 --Bug 6316320 dpsingh start
3154 ELSIF l_try_name IN ('BALANCE_WRITE_OFF' ,'ADJUSTMENTS') THEN
3155 --This accounting engine call has been made in an update mode i.e. the transaction line already existed
3156 --Thefore the accounting sources need to be recaptured while creating distributions
3157 --Fetching the transaction header id
3158 OPEN get_adj_id_csr(p_dist_info_rec.source_id);
3159 FETCH get_adj_id_csr INTO l_adj_id;
3160 CLOSE get_adj_id_csr;
3161
3162 l_rxhv_adj_rec.source_id := l_adj_id;
3163 l_rxhv_adj_rec.source_table := 'OKL_TRX_AR_ADJSTS_B';
3164
3165 --Existing sources are being deleted.
3166 okl_sla_acc_sources_pvt.delete_ar_extension(
3167 p_api_version => l_api_version
3168 ,p_init_msg_list => l_init_msg_list
3169 ,p_rxhv_rec => l_rxhv_adj_rec
3170 ,x_rxlv_tbl => x_rxlv_adj_tbl
3171 ,x_return_status => l_return_status
3172 ,x_msg_count => l_msg_count
3173 ,x_msg_data => l_msg_data
3174 );
3175
3176 IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
3177 OKL_API.SET_MESSAGE(p_app_name => g_app_name
3178 ,p_msg_name => 'OKL_DEL_SOURCES_FAILED');
3179 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
3180 ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
3181 OKL_API.SET_MESSAGE(p_app_name => g_app_name
3182 ,p_msg_name => 'OKL_DEL_SOURCES_FAILED');
3183 RAISE OKL_API.G_EXCEPTION_ERROR;
3184 END IF;
3185 --Bug 6316320 dpsingh end
3186 --Checking for AP transaction Types
3187 ELSIF l_try_name IN ('DISBURSEMENT','FUNDING','DEBIT_NOTE') THEN
3188 --This accounting engine call has been made in an update mode i.e. the transaction line already existed
3189 --Thefore the accounting sources need to be recaptured while creating distributions
3190 --Fetching the transaction header id
3191 OPEN get_tap_id_csr(p_dist_info_rec.source_id);
3192 FETCH get_tap_id_csr INTO l_tap_id;
3193 CLOSE get_tap_id_csr;
3194
3195 l_pxhv_rec.source_id := l_tap_id;
3196 l_pxhv_rec.source_table := 'OKL_TRX_AP_INVOICES_B';
3197
3198 --Existing sources are being deleted.
3199 okl_sla_acc_sources_pvt.delete_ap_extension(
3200 p_api_version => l_api_version
3201 ,p_init_msg_list => l_init_msg_list
3202 ,p_pxhv_rec => l_pxhv_rec
3203 ,x_pxlv_tbl => x_pxlv_tbl
3204 ,x_return_status => l_return_status
3205 ,x_msg_count => l_msg_count
3206 ,x_msg_data => l_msg_data
3207 );
3208
3209 IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
3210 OKL_API.SET_MESSAGE(p_app_name => g_app_name
3211 ,p_msg_name => 'OKL_DEL_SOURCES_FAILED');
3212 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
3213 ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
3214 OKL_API.SET_MESSAGE(p_app_name => g_app_name
3215 ,p_msg_name => 'OKL_DEL_SOURCES_FAILED');
3216 RAISE OKL_API.G_EXCEPTION_ERROR;
3217 END IF;
3218 END IF;-- Check for transaction type
3219 END IF;
3220
3221 IF (l_check_status = 2) THEN
3222 OKL_API.SET_MESSAGE(p_app_name => g_app_name,
3223 p_msg_name => 'OKL_AE_GONE_TO_SLA');
3224 RAISE OKL_API.G_EXCEPTION_ERROR;
3225 END IF;
3226
3227 --Create the distribution
3228 CREATE_DIST_RECS(p_tmpl_identify_rec => p_tmpl_identify_rec,
3229 p_dist_info_rec => p_dist_info_rec,
3230 p_amount => l_amount,
3231 x_return_status => l_return_status,
3232 x_tabv_tbl => l_tabv_tbl_out);
3233
3234 --As there is only one distribution being created when account derivation is AMB,
3235 --the amount is being assigned to x_amount_tbl(0)
3236 x_amount_tbl(0) := l_amount;
3237
3238 IF (l_return_status <> OKL_API.G_RET_STS_SUCCESS) THEN
3239 RAISE OKL_API.G_EXCEPTION_ERROR;
3240 END IF;
3241
3242 --In the case of AMB, there is only one iteration. However, the l_tabv_tbl_final needs to be populated
3243 -- in this case as well
3244 IF (l_tabv_tbl_final.COUNT = 0) THEN
3245 k := 0;
3246 ELSE
3247 k := l_tabv_tbl_final.COUNT;
3248 END IF;
3249
3250 IF l_tabv_tbl_out.count > 0 THEN
3251 FOR i in l_tabv_tbl_out.FIRST..l_tabv_tbl_out.LAST
3252 LOOP
3253 l_tabv_tbl_final(k).id := l_tabv_tbl_out(i).id;
3254 k := k + 1;
3255 END LOOP;
3256 END IF;
3257 END IF;
3258
3259 --Checking to see if the transaction line amount has a non zero amount .Only if the transaction has atleast one
3260 --transaction line with a non-zero amount are sources captured and accounting event created.
3261 IF (x_amount_tbl.count > 0) THEN
3262 l_line_amount := 0;
3263 FOR i in x_amount_tbl.FIRST..x_amount_tbl.LAST
3264 LOOP
3265 l_line_amount := l_line_amount + x_amount_tbl(i);
3266 END LOOP;
3267 END IF;
3268
3269 --The accounting event needs to be created only for the OKL transaction types
3270 IF l_try_name IN ('RECEIPT_APPLICATION','PRINCIPAL_ADJUSTMENT','UPFRONT_TAX','BOOKING','TERMINATION',
3271 'ASSET_DISPOSITION','ACCRUAL','GENERAL_LOSS_PROVISION','SPECIFIC_LOSS_PROVISION','REBOOK','EVERGREEN',
3272 'RELEASE','INVESTOR','SPLIT_ASSET') AND (l_line_amount >0)
3273 THEN
3274 --Fetch the GL Short Name.This will be sent as the valuation method
3275 --OPEN get_gl_short_name_csr;
3276 --FETCH get_gl_short_name_csr INTO l_gl_short_name;
3277 --CLOSE get_gl_short_name_csr;
3278
3279 -- get the correct short name based on representation.
3280 l_gl_short_name := g_ledger_tbl(g_ledger_id).rep_code;
3281
3282 IF l_gl_short_name IS NULL
3283 THEN
3284 OKL_API.SET_MESSAGE(p_app_name => g_app_name
3285 ,p_msg_name => 'OKL_GL_NOT_SET_FOR_ORG');
3286 RAISE OKL_API.G_EXCEPTION_ERROR;
3287 END IF;
3288
3289 --Making the call to populate_Acct_sources to retreive the l_asev_rec to be passed to
3290 --populate_tcn_sources and populate_tcl_sources
3291
3292 POPULATE_ACCT_SOURCES(p_api_version => l_api_version,
3293 p_init_msg_list => l_init_msg_list,
3294 x_return_status => l_return_status,
3295 x_msg_count => l_msg_count,
3296 x_msg_data => l_msg_data,
3297 p_tmpl_identify_rec => p_tmpl_identify_rec,
3298 p_dist_info_rec => p_dist_info_rec,
3299 p_acc_gen_primary_key_tbl => p_acc_gen_primary_key_tbl,
3300 x_asev_rec => l_asev_rec);
3301
3302 IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
3303 OKL_API.SET_MESSAGE(p_app_name => g_app_name
3304 ,p_msg_name => 'OKL_SLA_SOURCES_FAILED');
3305 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
3306 ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
3307 OKL_API.SET_MESSAGE(p_app_name => g_app_name
3308 ,p_msg_name => 'OKL_SLA_SOURCES_FAILED');
3309 RAISE OKL_API.G_EXCEPTION_ERROR;
3310 END IF;
3311
3312 OPEN get_tcn_id_csr(p_dist_info_rec.source_id);
3313 FETCH get_tcn_id_csr INTO l_tcn_id;
3314 CLOSE get_tcn_id_csr;
3315
3316 OKL_XLA_EVENTS_PVT.event_exists(p_api_version => l_api_version
3317 ,p_init_msg_list => l_init_msg_list
3318 ,x_return_status => l_return_status
3319 ,x_msg_count => l_msg_count
3320 ,x_msg_data => l_msg_data
3321 ,p_tcn_id => l_tcn_id
3322 ,p_action_type => 'CREATE'
3323 ,x_event_id => l_event_id
3324 ,x_event_date => l_event_date);
3325
3326 IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
3327 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
3328 ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
3329 RAISE OKL_API.G_EXCEPTION_ERROR;
3330 END IF;
3331
3332 IF l_event_id is null THEN
3333
3334 l_event_id := OKL_XLA_EVENTS_PVT.create_event(p_api_version => l_api_version
3335 ,p_init_msg_list => l_init_msg_list
3336 ,x_return_status => l_return_status
3337 ,x_msg_count => l_msg_count
3338 ,x_msg_data => l_msg_data
3339 ,p_tcn_id => l_tcn_id
3340 ,p_gl_date => G_gl_date
3341 ,p_action_type => 'CREATE'
3342 ,p_representation_code => l_gl_short_name
3343 );
3344
3345 IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
3346 OKL_API.SET_MESSAGE(p_app_name => g_app_name
3347 ,p_msg_name => 'OKL_CREATE_EVENT_FAILED');
3348 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
3349 ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
3350 OKL_API.SET_MESSAGE(p_app_name => g_app_name
3351 ,p_msg_name => 'OKL_CREATE_EVENT_FAILED');
3352 RAISE OKL_API.G_EXCEPTION_ERROR;
3353 END IF;
3354
3355 l_tcnv_rec.source_id := l_tcn_id;
3356 l_tcnv_rec.source_table := 'OKL_TRX_CONTRACTS';
3357
3358 --Make the call to capture account header source
3359 OKL_SLA_ACC_SOURCES_PVT.populate_tcn_sources(p_api_version => l_api_version
3360 ,p_init_msg_list => l_init_msg_list
3361 ,px_trans_hdr_rec => l_tcnv_rec
3362 ,p_acc_sources_rec => l_asev_rec
3363 ,x_return_status => l_return_status
3364 ,x_msg_count => l_msg_count
3365 ,x_msg_data => l_msg_data
3366 );
3367
3368 IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
3369 OKL_API.SET_MESSAGE(p_app_name => g_app_name
3370 ,p_msg_name => 'OKL_SLA_SOURCES_FAILED');
3371 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
3372 ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
3373 OKL_API.SET_MESSAGE(p_app_name => g_app_name
3374 ,p_msg_name => 'OKL_SLA_SOURCES_FAILED');
3375 RAISE OKL_API.G_EXCEPTION_ERROR;
3376 END IF;
3377
3378 END IF;
3379
3380 --Event id needs to be stamped for every distribution being created
3381 FOR i IN l_tabv_tbl_final.FIRST..l_tabv_tbl_final.LAST
3382 LOOP
3383 l_tabv_tbl(i).id := l_tabv_tbl_final(i).id;
3384 l_tabv_tbl(i).accounting_event_id := l_event_id;
3385 --Once the event is created successfully in XLA, posted_yn flag is set to Y
3386 l_tabv_tbl(i).posted_yn := 'Y';
3387 END LOOP;
3388
3389 --Update the distributions created with the Accounting Event Id
3390 OKL_TRNS_ACC_DSTRS_PUB.update_trns_acc_dstrs(p_api_version => l_api_version
3391 ,p_init_msg_list => l_init_msg_list
3392 ,x_return_status => l_return_status
3393 ,x_msg_count => l_msg_count
3394 ,x_msg_data => l_msg_data
3395 ,p_tabv_tbl => l_tabv_tbl
3396 ,x_tabv_tbl => x_tabv_tbl
3397 );
3398
3399 IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
3400 OKL_API.SET_MESSAGE(p_app_name => g_app_name
3401 ,p_msg_name => 'OKL_UPD_DIST_FAILED');
3402 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
3403 ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
3404 OKL_API.SET_MESSAGE(p_app_name => g_app_name
3405 ,p_msg_name => 'OKL_UPD_DIST_FAILED');
3406 RAISE OKL_API.G_EXCEPTION_ERROR;
3407 END IF;
3408
3409 --Before making the call to capture line sources, check the following
3410 --If l_check_status = 1, then the transaction line is in update mode and existing sources have been deleted
3411 --Header and line Sources need to be captured for all the sources deleted
3412 IF (l_check_status = 1)
3413 THEN
3414 --Populate header sources
3415 l_tcnv_rec.source_id := l_tcn_id;
3416 l_tcnv_rec.source_table := 'OKL_TRX_CONTRACTS';
3417
3418 --Make the call to capture account header source
3419 OKL_SLA_ACC_SOURCES_PVT.populate_tcn_sources(p_api_version => l_api_version
3420 ,p_init_msg_list => l_init_msg_list
3421 ,px_trans_hdr_rec => l_tcnv_rec
3422 ,p_acc_sources_rec => l_asev_rec
3423 ,x_return_status => l_return_status
3424 ,x_msg_count => l_msg_count
3425 ,x_msg_data => l_msg_data
3426 );
3427
3428 IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
3429 OKL_API.SET_MESSAGE(p_app_name => g_app_name
3430 ,p_msg_name => 'OKL_SLA_SOURCES_FAILED');
3431 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
3432 ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
3433 OKL_API.SET_MESSAGE(p_app_name => g_app_name
3434 ,p_msg_name => 'OKL_SLA_SOURCES_FAILED');
3435 RAISE OKL_API.G_EXCEPTION_ERROR;
3436 END IF;
3437
3438 --Making the call to populate line sources
3439 FOR i in l_tclv_tbl.FIRST..l_tclv_tbl.LAST
3440 LOOP
3441 --Make the call to Capture line sources
3442 l_tclv_rec.source_id := l_tclv_tbl(i).source_id;
3443 l_tclv_rec.source_table := l_tclv_tbl(i).source_table;
3444 l_tclv_rec.teh_id := l_tcnv_rec.header_extension_id;
3445
3446 --Make the call to capture account header source
3447 OKL_SLA_ACC_SOURCES_PVT.populate_tcl_sources(p_api_version => l_api_version
3448 ,p_init_msg_list => l_init_msg_list
3449 ,px_trans_line_rec => l_tclv_rec
3450 ,p_acc_sources_rec => l_asev_rec
3451 ,x_return_status => l_return_status
3452 ,x_msg_count => l_msg_count
3453 ,x_msg_data => l_msg_data
3454 );
3455
3456 IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
3457 OKL_API.SET_MESSAGE(p_app_name => g_app_name
3458 ,p_msg_name => 'OKL_SLA_SOURCES_FAILED');
3459 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
3460 ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
3461 OKL_API.SET_MESSAGE(p_app_name => g_app_name
3462 ,p_msg_name => 'OKL_SLA_SOURCES_FAILED');
3463 RAISE OKL_API.G_EXCEPTION_ERROR;
3464 END IF;
3465 END LOOP;
3466 END IF;
3467 --Line sources need to be captured for the current line
3468 --Execute the cursor to fetch the transaction extension header id to pass to the call to populate_tcl_sources
3469 OPEN get_ext_hdr_csr(p_source_id => l_tcn_id);
3470 FETCH get_ext_hdr_csr INTO l_tehv_id;
3471 CLOSE get_ext_hdr_csr;
3472
3473 --Make the call to Capture line sources
3474 l_tclv_rec.source_id := p_dist_info_rec.source_id;
3475 l_tclv_rec.source_table := 'OKL_TXL_CNTRCT_LNS';
3476 l_tclv_rec.teh_id := l_tehv_id;
3477
3478 --Make the call to capture account header source
3479 OKL_SLA_ACC_SOURCES_PVT.populate_tcl_sources(p_api_version => l_api_version
3480 ,p_init_msg_list => l_init_msg_list
3481 ,px_trans_line_rec => l_tclv_rec
3482 ,p_acc_sources_rec => l_asev_rec
3483 ,x_return_status => l_return_status
3484 ,x_msg_count => l_msg_count
3485 ,x_msg_data => l_msg_data
3486 );
3487
3488 IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
3489 OKL_API.SET_MESSAGE(p_app_name => g_app_name
3490 ,p_msg_name => 'OKL_SLA_SOURCES_FAILED');
3491 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
3492 ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
3493 OKL_API.SET_MESSAGE(p_app_name => g_app_name
3494 ,p_msg_name => 'OKL_SLA_SOURCES_FAILED');
3495 RAISE OKL_API.G_EXCEPTION_ERROR;
3496 END IF;
3497 --If the transaction is an AR transaction, then sources should be captured if the transaction line amount
3498 --is non-zero. However event creation for the transaction is not done from OKL
3499
3500 ELSIF l_try_name IN ('BILLING','CREDIT_MEMO','ROLLOVER_BILLING','ROLLOVER_CREDITMEMO',
3501 'RELEASE_BILLING','RELEASE_CREDITMEMO') AND (l_line_amount >0)
3502 THEN
3503 --Fetch the GL Short Name.This will be sent as the valuation method
3504 --OPEN get_gl_short_name_csr;
3505 --FETCH get_gl_short_name_csr INTO l_gl_short_name;
3506 --CLOSE get_gl_short_name_csr;
3507
3508 -- get the correct short name based on representation.
3509 l_gl_short_name := g_ledger_tbl(g_ledger_id).rep_code;
3510
3511 IF l_gl_short_name IS NULL
3512 THEN
3513 OKL_API.SET_MESSAGE(p_app_name => g_app_name
3514 ,p_msg_name => 'OKL_GL_NOT_SET_FOR_ORG');
3515 RAISE OKL_API.G_EXCEPTION_ERROR;
3516 END IF;
3517
3518 --Making the call to populate_Acct_sources to retreive the l_asev_rec to be passed to
3519 --populate_tcn_sources and populate_tcl_sources
3520
3521 POPULATE_ACCT_SOURCES(p_api_version => l_api_version,
3522 p_init_msg_list => l_init_msg_list,
3523 x_return_status => l_return_status,
3524 x_msg_count => l_msg_count,
3525 x_msg_data => l_msg_data,
3526 p_tmpl_identify_rec => p_tmpl_identify_rec,
3527 p_dist_info_rec => p_dist_info_rec,
3528 p_acc_gen_primary_key_tbl => p_acc_gen_primary_key_tbl,
3529 x_asev_rec => l_asev_rec);
3530
3531 IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
3532 OKL_API.SET_MESSAGE(p_app_name => g_app_name
3533 ,p_msg_name => 'OKL_SLA_SOURCES_FAILED');
3534 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
3535 ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
3536 OKL_API.SET_MESSAGE(p_app_name => g_app_name
3537 ,p_msg_name => 'OKL_SLA_SOURCES_FAILED');
3538 RAISE OKL_API.G_EXCEPTION_ERROR;
3539 END IF;
3540
3541 OPEN get_tai_details_csr(p_dist_info_rec.source_id);
3542 FETCH get_tai_details_csr INTO get_tai_details_rec;
3543 CLOSE get_tai_details_csr;
3544
3545 l_rxhv_rec.source_id := get_tai_details_rec.tai_id;
3546 l_rxhv_rec.source_table := 'OKL_TRX_AR_INVOICES_B';
3547 l_rxhv_rec.khr_id := get_tai_details_rec.khr_id;
3548 l_rxhv_rec.try_id := get_tai_details_rec.try_id;
3549
3550
3551 --Before making the call to capture line sources, check the following
3552 --If l_check_status = 1, then the transaction line is in update mode and existing sources have been deleted
3553 --Header and line Sources need to be captured for all the sources deleted
3554 IF (l_check_status = 1)
3555 THEN
3556 --Making the call to populate line sources
3557 FOR i in x_rxlv_tbl.FIRST..l_rxlv_tbl.LAST
3558 LOOP
3559 --Make the call to Capture line sources
3560 l_rxlv_rec.source_id := x_rxlv_tbl(i).source_id;
3561 l_rxlv_rec.source_table := x_rxlv_tbl(i).source_table;
3562 l_rxlv_rec.kle_id := get_tai_details_rec.kle_id;
3563 l_rxlv_rec.sty_id := get_tai_details_rec.sty_id;
3564 l_rxlv_rec.trans_line_description := get_tai_details_rec.trans_line_description;
3565
3566 --Make the call to capture account header source
3567 OKL_SLA_ACC_SOURCES_PVT.populate_ar_sources(p_api_version => l_api_version
3568 ,p_init_msg_list => l_init_msg_list
3569 ,p_rxhv_rec => l_rxhv_rec
3570 ,p_rxlv_rec => l_rxlv_rec
3571 ,p_acc_sources_rec => l_asev_rec
3572 ,x_return_status => l_return_status
3573 ,x_msg_count => l_msg_count
3574 ,x_msg_data => l_msg_data
3575 );
3576
3577 IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
3578 OKL_API.SET_MESSAGE(p_app_name => g_app_name
3579 ,p_msg_name => 'OKL_SLA_SOURCES_FAILED');
3580 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
3581 ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
3582 OKL_API.SET_MESSAGE(p_app_name => g_app_name
3583 ,p_msg_name => 'OKL_SLA_SOURCES_FAILED');
3584 RAISE OKL_API.G_EXCEPTION_ERROR;
3585 END IF;
3586 END LOOP;
3587 END IF;
3588 --Line sources need to be captured for the current line
3589
3590 --Make the call to Capture line sources
3591 l_rxlv_rec.source_id := p_dist_info_rec.source_id;
3592 l_rxlv_rec.source_table := 'OKL_TXD_AR_LN_DTLS_B';
3593 l_rxlv_rec.kle_id := get_tai_details_rec.kle_id;
3594 l_rxlv_rec.sty_id := get_tai_details_rec.sty_id;
3595 l_rxlv_rec.trans_line_description := get_tai_details_rec.trans_line_description;
3596
3597 --Make the call to capture account header source
3598 OKL_SLA_ACC_SOURCES_PVT.populate_ar_sources(p_api_version => l_api_version
3599 ,p_init_msg_list => l_init_msg_list
3600 ,p_rxhv_rec => l_rxhv_rec
3601 ,p_rxlv_rec => l_rxlv_rec
3602 ,p_acc_sources_rec => l_asev_rec
3603 ,x_return_status => l_return_status
3604 ,x_msg_count => l_msg_count
3605 ,x_msg_data => l_msg_data
3606 );
3607
3608 IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
3609 OKL_API.SET_MESSAGE(p_app_name => g_app_name
3610 ,p_msg_name => 'OKL_SLA_SOURCES_FAILED');
3611 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
3612 ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
3613 OKL_API.SET_MESSAGE(p_app_name => g_app_name
3614 ,p_msg_name => 'OKL_SLA_SOURCES_FAILED');
3615 RAISE OKL_API.G_EXCEPTION_ERROR;
3616 END IF;
3617
3618 --Bug 6316320 dpsingh start
3619 ELSIF l_try_name IN ('BALANCE_WRITE_OFF' ,'ADJUSTMENTS') AND (l_line_amount >0)
3620 THEN
3621 --Fetch the GL Short Name.This will be sent as the valuation method
3622 --OPEN get_gl_short_name_csr;
3623 --FETCH get_gl_short_name_csr INTO l_gl_short_name;
3624 --CLOSE get_gl_short_name_csr;
3625
3626 -- get the correct short name based on representation.
3627 l_gl_short_name := g_ledger_tbl(g_ledger_id).rep_code;
3628
3629 IF l_gl_short_name IS NULL
3630 THEN
3631 OKL_API.SET_MESSAGE(p_app_name => g_app_name
3632 ,p_msg_name => 'OKL_GL_NOT_SET_FOR_ORG');
3633 RAISE OKL_API.G_EXCEPTION_ERROR;
3634 END IF;
3635
3636 --Making the call to populate_Acct_sources to retreive the l_asev_rec to be passed to
3637 --populate_tcn_sources and populate_tcl_sources
3638
3639 POPULATE_ACCT_SOURCES(p_api_version => l_api_version,
3640 p_init_msg_list => l_init_msg_list,
3641 x_return_status => l_return_status,
3642 x_msg_count => l_msg_count,
3643 x_msg_data => l_msg_data,
3644 p_tmpl_identify_rec => p_tmpl_identify_rec,
3645 p_dist_info_rec => p_dist_info_rec,
3646 p_acc_gen_primary_key_tbl => p_acc_gen_primary_key_tbl,
3647 x_asev_rec => l_asev_rec);
3648
3649 IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
3650 OKL_API.SET_MESSAGE(p_app_name => g_app_name
3651 ,p_msg_name => 'OKL_SLA_SOURCES_FAILED');
3652 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
3653 ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
3654 OKL_API.SET_MESSAGE(p_app_name => g_app_name
3655 ,p_msg_name => 'OKL_SLA_SOURCES_FAILED');
3656 RAISE OKL_API.G_EXCEPTION_ERROR;
3657 END IF;
3658
3659 OPEN get_adj_details_csr(p_dist_info_rec.source_id);
3660 FETCH get_adj_details_csr INTO get_adj_details_rec;
3661 CLOSE get_adj_details_csr;
3662
3663 l_rxhv_adj_rec.source_id := get_adj_details_rec.adj_id;
3664 l_rxhv_adj_rec.source_table := 'OKL_TRX_AR_ADJSTS_B';
3665 l_rxhv_adj_rec.khr_id := get_adj_details_rec.khr_id;
3666 l_rxhv_adj_rec.try_id := get_adj_details_rec.try_id;
3667
3668
3669 --Before making the call to capture line sources, check the following
3670 --If l_check_status = 1, then the transaction line is in update mode and existing sources have been deleted
3671 --Header and line Sources need to be captured for all the sources deleted
3672 IF (l_check_status = 1)
3673 THEN
3674 --Making the call to populate line sources
3675 FOR i in x_rxlv_adj_tbl.FIRST..l_rxlv_adj_tbl.LAST
3676 LOOP
3677 --Make the call to Capture line sources
3678 l_rxlv_adj_rec.source_id := x_rxlv_adj_tbl(i).source_id;
3679 l_rxlv_adj_rec.source_table := x_rxlv_adj_tbl(i).source_table;
3680 l_rxlv_adj_rec.kle_id := get_adj_details_rec.kle_id;
3681 l_rxlv_adj_rec.sty_id := get_adj_details_rec.sty_id;
3682
3683 --Make the call to capture account header source
3684 OKL_SLA_ACC_SOURCES_PVT.populate_ar_sources(p_api_version => l_api_version
3685 ,p_init_msg_list => l_init_msg_list
3686 ,p_rxhv_rec => l_rxhv_adj_rec
3687 ,p_rxlv_rec => l_rxlv_adj_rec
3688 ,p_acc_sources_rec => l_asev_rec
3689 ,x_return_status => l_return_status
3690 ,x_msg_count => l_msg_count
3691 ,x_msg_data => l_msg_data
3692 );
3693
3694 IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
3695 OKL_API.SET_MESSAGE(p_app_name => g_app_name
3696 ,p_msg_name => 'OKL_SLA_SOURCES_FAILED');
3697 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
3698 ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
3699 OKL_API.SET_MESSAGE(p_app_name => g_app_name
3700 ,p_msg_name => 'OKL_SLA_SOURCES_FAILED');
3701 RAISE OKL_API.G_EXCEPTION_ERROR;
3702 END IF;
3703 END LOOP;
3704 END IF;
3705 --Line sources need to be captured for the current line
3706
3707 --Make the call to Capture line sources
3708 l_rxlv_adj_rec.source_id := p_dist_info_rec.source_id;
3709 l_rxlv_adj_rec.source_table := 'OKL_TXD_AR_LN_DTLS_B';
3710 l_rxlv_adj_rec.kle_id := get_adj_details_rec.kle_id;
3711 l_rxlv_adj_rec.sty_id := get_adj_details_rec.sty_id;
3712
3713 --Make the call to capture account header source
3714 OKL_SLA_ACC_SOURCES_PVT.populate_ar_sources(p_api_version => l_api_version
3715 ,p_init_msg_list => l_init_msg_list
3716 ,p_rxhv_rec => l_rxhv_adj_rec
3717 ,p_rxlv_rec => l_rxlv_adj_rec
3718 ,p_acc_sources_rec => l_asev_rec
3719 ,x_return_status => l_return_status
3720 ,x_msg_count => l_msg_count
3721 ,x_msg_data => l_msg_data
3722 );
3723
3724 IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
3725 OKL_API.SET_MESSAGE(p_app_name => g_app_name
3726 ,p_msg_name => 'OKL_SLA_SOURCES_FAILED');
3727 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
3728 ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
3729 OKL_API.SET_MESSAGE(p_app_name => g_app_name
3730 ,p_msg_name => 'OKL_SLA_SOURCES_FAILED');
3731 RAISE OKL_API.G_EXCEPTION_ERROR;
3732 END IF;
3733 --Bug 6316320 dpsingh end
3734 --Processing for AP Transactions
3735 ELSIF l_try_name IN ('DISBURSEMENT','FUNDING','DEBIT_NOTE') AND (l_line_amount >0)
3736 THEN
3737 -- below code is not required for MG uptake.
3738 --OPEN get_gl_short_name_csr;
3739 --FETCH get_gl_short_name_csr INTO l_gl_short_name;
3740 --CLOSE get_gl_short_name_csr;
3741
3742 -- get the correct short name based on representation.
3743 l_gl_short_name := g_ledger_tbl(g_ledger_id).rep_code;
3744
3745 IF l_gl_short_name IS NULL
3746 THEN
3747 OKL_API.SET_MESSAGE(p_app_name => g_app_name
3748 ,p_msg_name => 'OKL_GL_NOT_SET_FOR_ORG');
3749 RAISE OKL_API.G_EXCEPTION_ERROR;
3750 END IF;
3751
3752 --Making the call to populate_Acct_sources to retreive the l_asev_rec to be passed to
3753 --populate_tcn_sources and populate_tcl_sources
3754
3755 POPULATE_ACCT_SOURCES(p_api_version => l_api_version,
3756 p_init_msg_list => l_init_msg_list,
3757 x_return_status => l_return_status,
3758 x_msg_count => l_msg_count,
3759 x_msg_data => l_msg_data,
3760 p_tmpl_identify_rec => p_tmpl_identify_rec,
3761 p_dist_info_rec => p_dist_info_rec,
3762 p_acc_gen_primary_key_tbl => p_acc_gen_primary_key_tbl,
3763 x_asev_rec => l_asev_rec);
3764
3765 IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
3766 OKL_API.SET_MESSAGE(p_app_name => g_app_name
3767 ,p_msg_name => 'OKL_SLA_SOURCES_FAILED');
3768 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
3769 ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
3770 OKL_API.SET_MESSAGE(p_app_name => g_app_name
3771 ,p_msg_name => 'OKL_SLA_SOURCES_FAILED');
3772 RAISE OKL_API.G_EXCEPTION_ERROR;
3773 END IF;
3774
3775 OPEN get_tap_details_csr(p_dist_info_rec.source_id);
3776 FETCH get_tap_details_csr INTO get_tap_details_rec;
3777 CLOSE get_tap_details_csr;
3778
3779 l_pxhv_rec.source_id := get_tap_details_rec.tap_id;
3780 l_pxhv_rec.source_table := 'OKL_TRX_AP_INVOICES_B';
3781 l_pxhv_rec.khr_id := get_tap_details_rec.khr_id;
3782 l_pxhv_rec.try_id := get_tap_details_rec.try_id;
3783 l_pxhv_rec.trans_number := get_tap_details_rec.trans_number;
3784
3785
3786 --Before making the call to capture line sources, check the following
3787 --If l_check_status = 1, then the transaction line is in update mode and existing sources have been deleted
3788 --Header and line Sources need to be captured for all the sources deleted
3789 IF (l_check_status = 1)
3790 THEN
3791 --Making the call to populate line sources
3792 FOR i in x_pxlv_tbl.FIRST..l_pxlv_tbl.LAST
3793 LOOP
3794 --Make the call to Capture line sources
3795 l_pxlv_rec.source_id := x_pxlv_tbl(i).source_id;
3796 l_pxlv_rec.source_table := x_pxlv_tbl(i).source_table;
3797 l_pxlv_rec.kle_id := get_tap_details_rec.kle_id;
3798 l_pxlv_rec.sty_id := get_tap_details_rec.sty_id;
3799 l_pxlv_rec.trans_line_description := get_tap_details_rec.trans_line_description;
3800
3801 --Make the call to capture account header source
3802 OKL_SLA_ACC_SOURCES_PVT.populate_ap_sources(p_api_version => l_api_version
3803 ,p_init_msg_list => l_init_msg_list
3804 ,p_pxhv_rec => l_pxhv_rec
3805 ,p_pxlv_rec => l_pxlv_rec
3806 ,p_acc_sources_rec => l_asev_rec
3807 ,x_return_status => l_return_status
3808 ,x_msg_count => l_msg_count
3809 ,x_msg_data => l_msg_data
3810 );
3811
3812 IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
3813 OKL_API.SET_MESSAGE(p_app_name => g_app_name
3814 ,p_msg_name => 'OKL_SLA_SOURCES_FAILED');
3815 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
3816 ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
3817 OKL_API.SET_MESSAGE(p_app_name => g_app_name
3818 ,p_msg_name => 'OKL_SLA_SOURCES_FAILED');
3819 RAISE OKL_API.G_EXCEPTION_ERROR;
3820 END IF;
3821 END LOOP;
3822 END IF;
3823 --Line sources need to be captured for the current line
3824
3825 --Make the call to Capture line sources
3826 l_pxlv_rec.source_id := p_dist_info_rec.source_id;
3827 l_pxlv_rec.source_table := p_dist_info_rec.source_table;
3828 l_pxlv_rec.kle_id := get_tap_details_rec.kle_id;
3829 l_pxlv_rec.sty_id := get_tap_details_rec.sty_id;
3830 l_pxlv_rec.trans_line_description := get_tap_details_rec.trans_line_description;
3831
3832 --Make the call to capture account header source
3833 OKL_SLA_ACC_SOURCES_PVT.populate_ap_sources(p_api_version => l_api_version
3834 ,p_init_msg_list => l_init_msg_list
3835 ,p_pxhv_rec => l_pxhv_rec
3836 ,p_pxlv_rec => l_pxlv_rec
3837 ,p_acc_sources_rec => l_asev_rec
3838 ,x_return_status => l_return_status
3839 ,x_msg_count => l_msg_count
3840 ,x_msg_data => l_msg_data
3841 );
3842
3843 IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
3844 OKL_API.SET_MESSAGE(p_app_name => g_app_name
3845 ,p_msg_name => 'OKL_SLA_SOURCES_FAILED');
3846 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
3847 ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
3848 OKL_API.SET_MESSAGE(p_app_name => g_app_name
3849 ,p_msg_name => 'OKL_SLA_SOURCES_FAILED');
3850 RAISE OKL_API.G_EXCEPTION_ERROR;
3851 END IF;
3852 END IF;
3853 OKL_API.END_ACTIVITY(x_msg_count, x_msg_data);
3854
3855 EXCEPTION
3856
3857 WHEN OKL_API.G_EXCEPTION_ERROR THEN
3858 x_return_status := OKL_API.HANDLE_EXCEPTIONS
3859 ( l_api_name,
3860 G_PKG_NAME,
3861 'OKL_API.G_RET_STS_ERROR',
3862 x_msg_count,
3863 x_msg_data,
3864 '_PVT'
3865 );
3866 WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
3867 x_return_status := OKL_API.HANDLE_EXCEPTIONS
3868 ( l_api_name,
3869 G_PKG_NAME,
3870 'OKL_API.G_RET_STS_UNEXP_ERROR',
3871 x_msg_count,
3872 x_msg_data,
3873 '_PVT'
3874 );
3875 WHEN OTHERS THEN
3876 x_return_status := OKL_API.HANDLE_EXCEPTIONS
3877 ( l_api_name,
3878 G_PKG_NAME,
3879 'OTHERS',
3880 x_msg_count,
3881 x_msg_data,
3882 '_PVT'
3883 );
3884
3885 END CREATE_ACCOUNTING_DIST;
3886
3887 --gboomina Bug 4662173 end
3888
3889 --Added by gboomina on 14-Oct-05 for Accruals Performance
3890 --Bug 4662173 - Start of Changes
3891 --This signature is used when a group of dist_info_rec can be grouped for a single transaction header
3892 --as they share the same tmpl_identify_rec
3893
3894 PROCEDURE CREATE_ACCOUNTING_DIST(p_api_version IN NUMBER,
3895 p_init_msg_list IN VARCHAR2,
3896 x_return_status OUT NOCOPY VARCHAR2,
3897 x_msg_count OUT NOCOPY NUMBER,
3898 x_msg_data OUT NOCOPY VARCHAR2,
3899 p_tmpl_identify_rec IN TMPL_IDENTIFY_REC_TYPE,
3900 p_dist_info_tbl IN DIST_INFO_TBL_TYPE,
3901 p_ctxt_val_tbl IN CTXT_VAL_TBL_TYPE,
3902 p_acc_gen_primary_key_tbl IN acc_gen_tbl,
3903 x_template_tbl OUT NOCOPY AVLB_TBL_TYPE,
3904 x_amount_tbl OUT NOCOPY AMT_TBL_TYPE)
3905
3906
3907 IS
3908
3909 l_check_status NUMBER;
3910 i NUMBER := 0;
3911 l_amount NUMBER := 0;
3912
3913 tmpl_rec AVLV_REC_TYPE;
3914 l_tmpl_tbl avlv_tbl_type;
3915 l_formula_name OKL_FORMULAE_V.NAME%TYPE;
3916 l_functional_curr OKL_TRNS_ACC_DSTRS.CURRENCY_CODE%TYPE;
3917 l_return_status VARCHAR2(1) := OKL_API.G_RET_STS_SUCCESS;
3918
3919 l_api_name VARCHAR2(30) := 'CREATE_ACCOUNTING_DIST';
3920 l_api_version NUMBER := 1.0;
3921
3922 -- Added by Santonyr on 30-Jul-2003 to fix the bug 2941805
3923
3924 l_product_name OKL_PRODUCTS.NAME%TYPE;
3925 l_trx_type_name OKL_TRX_TYPES_TL.NAME%TYPE;
3926 l_sty_type_name OKL_STRM_TYPE_TL.NAME%TYPE;
3927
3928 -- Added by Santonyr on 12-Jul-2440 for the bug 3761026
3929
3930 l_template_amount_tbl tmp_bulk_amount_tbl_type;
3931
3932
3933
3934 CURSOR frml_csr(v_id NUMBER) IS
3935 SELECT name
3936 FROM okl_formulae_v
3937 WHERE id = v_id;
3938
3939 -- Added by Santonyr on 30-Jul-2003 to fix the bug 2941805
3940
3941 CURSOR prdt_csr (l_pdt_id OKL_PRODUCTS.ID%TYPE) IS
3942 SELECT name
3943 FROM okl_products
3944 WHERE id = l_pdt_id ;
3945
3946 -- Bug 4205156. SGIYER 07-MAR-05. Added language clause
3947 CURSOR trx_type_csr (l_trx_type_id OKL_TRX_TYPES_TL.ID%TYPE) IS
3948 SELECT name
3949 FROM okl_trx_types_tl
3950 WHERE id = l_trx_type_id
3951 AND language = USERENV('LANG');
3952
3953 -- Bug 4205156. SGIYER 07-MAR-05. Added language clause
3954 CURSOR sty_type_csr (l_sty_type_id OKL_STRM_TYPE_TL.ID%TYPE) IS
3955 SELECT name
3956 FROM okl_strm_type_tl
3957 WHERE id = l_sty_type_id
3958 AND language = USERENV('LANG');
3959
3960 l_dist_info_tbl DIST_INFO_TBL_TYPE:= p_dist_info_tbl;
3961 --Added by gboomina for the Accruals Performance Enhancement
3962 l_acc_gen_ind NUMBER := 0;
3963 l_acc_gen_last_ind NUMBER := 0;
3964 p_acc_gen_tbl_ret acc_gen_primary_key;
3965 l_tmp_amt_tbl_count NUMBER := 0;
3966 --Added by kthiruva on 06-Feb-2007 for SLA Uptake
3967 --Bug 5707866 - Start of Changes
3968 l_account_derivation OKL_SYS_ACCT_OPTS.ACCOUNT_DERIVATION%TYPE;
3969 l_tcn_id NUMBER;
3970 l_init_msg_list VARCHAR2(1) := OKL_API.G_FALSE;
3971 l_msg_count NUMBER := 0;
3972 l_msg_data VARCHAR2(2000);
3973 l_event_id NUMBER;
3974 l_event_date DATE;
3975 l_gl_short_name GL_LEDGERS.SHORT_NAME%TYPE;
3976 l_tabv_tbl_out tabv_tbl_type ;
3977 l_tabv_tbl_final tabv_tbl_type;
3978 x_tabv_tbl tabv_tbl_type ;
3979 k NUMBER := 0;
3980 l_first_rec BOOLEAN := TRUE;
3981
3982 CURSOR get_tcn_id_csr(p_source_id IN NUMBER)
3983 IS
3984 SELECT tcl.tcn_id
3985 FROM OKL_TXL_CNTRCT_LNS tcl
3986 WHERE tcl.id = p_source_id;
3987
3988 -- cursor to get the ledger details for a trx header. MG Uptake
3989 CURSOR get_ledger_id_csr(p_tcl_id IN NUMBER)
3990 IS
3991 SELECT set_of_books_id
3992 FROM okl_trx_contracts hdr, okl_txl_cntrct_lns lns
3993 WHERE hdr.id = lns.tcn_id
3994 AND lns.id = p_tcl_id;
3995
3996 l_ledger_id NUMBER;
3997
3998 CURSOR get_gl_short_name_csr
3999 IS
4000 SELECT GL.SHORT_NAME
4001 FROM OKL_SYS_ACCT_OPTS SAO,
4002 GL_LEDGERS GL
4003 WHERE SAO.SET_OF_BOOKS_ID = GL.LEDGER_ID;
4004 --Bug 5707866 - End of Changes
4005
4006 BEGIN
4007 IF (G_DEBUG_ENABLED = 'Y') THEN
4008 G_IS_DEBUG_STATEMENT_ON := OKL_DEBUG_PUB.CHECK_LOG_ON(G_MODULE, FND_LOG.LEVEL_STATEMENT);
4009 END IF;
4010 x_return_status := OKL_API.G_RET_STS_SUCCESS;
4011
4012 l_return_status := OKL_API.START_ACTIVITY(l_api_name,
4013 G_PKG_NAME,
4014 p_init_msg_list,
4015 l_api_version,
4016 p_api_version,
4017 '_PVT',
4018 x_return_status);
4019 IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
4020 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
4021 ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
4022 RAISE OKL_API.G_EXCEPTION_ERROR;
4023 END IF;
4024
4025 -- get the ledger attributes .. racheruv
4026 get_rep_attributes;
4027
4028 IF l_dist_info_tbl(l_dist_info_tbl.first).source_table = 'OKL_TXL_CNTRCT_LNS' THEN
4029 OPEN get_ledger_id_csr(l_dist_info_tbl(l_dist_info_tbl.first).source_id);
4030 FETCH get_ledger_id_csr INTO l_ledger_id;
4031 CLOSE get_ledger_id_csr;
4032 END IF;
4033
4034 IF l_ledger_id IS NOT NULL THEN
4035 g_representation_type := g_ledger_tbl(l_ledger_id).rep_type;
4036 g_ledger_id := l_ledger_id;
4037 ELSE
4038 g_representation_type := 'PRIMARY';
4039 g_ledger_id := okl_accounting_util.get_set_of_books_id;
4040 END IF;
4041
4042 -- Get the functional currency .. based on the represention
4043 IF g_representation_type = 'PRIMARY' THEN
4044 l_functional_curr := okl_accounting_util.get_func_curr_code;
4045 ELSE
4046 l_functional_curr := okl_accounting_util.get_func_curr_code(g_ledger_id);
4047 END IF;
4048
4049
4050 -- Bug 3948354
4051 -- Set the global variable G_REV_REC_FLAG to the value passed by calling program
4052
4053 G_REV_REC_FLAG := p_tmpl_identify_rec.REV_REC_FLAG;
4054
4055
4056 -- Validate the Parameters
4057
4058 IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
4059 OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'Prior to the call to VALIDATE_PARAMS');
4060 END IF;
4061 VALIDATE_PARAMS(p_dist_info_tbl => l_dist_info_tbl,
4062 p_functional_curr => l_functional_curr,
4063 x_return_status => l_return_status);
4064 IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
4065 OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'After the call to VALIDATE_PARAMS, the return status is :'||l_return_status);
4066 END IF;
4067
4068
4069
4070 IF (l_return_status <> OKL_API.G_RET_STS_SUCCESS) THEN
4071 RAISE OKL_API.G_EXCEPTION_ERROR;
4072 END IF;
4073
4074 -- Get the Templates from the given parameters
4075
4076 --- Change the G_GL_DATE to p_dist_info_rec.accounting_date if we want to pass passed-date as GL Date
4077
4078 IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
4079 OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'Prior to the call to Get_Template_Info');
4080 END IF;
4081
4082 --Bug 5707866 - Start of Changes
4083 OPEN get_acct_derivation_csr;
4084 FETCH get_acct_derivation_csr INTO l_account_derivation;
4085 CLOSE get_acct_derivation_csr;
4086
4087 IF l_account_derivation IS NULL THEN
4088 OKL_API.SET_MESSAGE(p_app_name => g_app_name
4089 ,p_msg_name => 'OKL_ACCT_DER_NOT_SET');
4090 RAISE OKL_API.G_EXCEPTION_ERROR;
4091 END IF;
4092
4093 --Deriving the functional currency to be passed in the call to validate_params
4094 --l_functional_curr := Okl_Accounting_Util.GET_FUNC_CURR_CODE; -- redundant code
4095
4096 -- Check the Distribution Status and take appropriate Action
4097 FOR i in l_dist_info_tbl.FIRST..l_dist_info_tbl.LAST LOOP
4098 --Only when the account derivation option is 'ATS'
4099 --Or if the account derivation option is 'AMB' and the transaction amount is not known
4100 --should the template information be fetched
4101 IF (l_account_derivation = 'ATS') OR
4102 ((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)))
4103 THEN
4104 IF (l_first_rec = TRUE)
4105 THEN
4106 GET_TEMPLATE_INFO(p_api_version => l_api_version,
4107 p_init_msg_list => p_init_msg_list,
4108 x_return_status => l_return_status,
4109 x_msg_count => x_msg_count,
4110 x_msg_data => x_msg_data,
4111 p_tmpl_identify_rec => p_tmpl_identify_rec,
4112 x_template_tbl => l_tmpl_tbl,
4113 p_validity_date => G_GL_DATE);
4114
4115 IF (l_return_status <> OKL_API.G_RET_STS_SUCCESS) THEN
4116 RAISE OKL_API.G_EXCEPTION_ERROR;
4117 END IF;
4118
4119 --Setting l_first_rec to FALSE, so that GET_TEMPLATE_INFO need not be called every time in the loop
4120 l_first_rec := FALSE;
4121
4122 IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
4123 OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'The return status after the Get_Template_Info call is :'||l_return_status);
4124 END IF;
4125
4126 -- Raise an error if template is not found.
4127 IF (l_tmpl_tbl.COUNT = 0) THEN
4128 -- Added by Santonyr on 30-Jul-2003 to fix the bug 2941805
4129 FOR prdt_rec IN prdt_csr (p_tmpl_identify_rec.product_id) LOOP
4130 l_product_name := prdt_rec.name;
4131 END LOOP;
4132
4133 FOR trx_type_rec IN trx_type_csr (p_tmpl_identify_rec.transaction_type_id) LOOP
4134 l_trx_type_name := trx_type_rec.name;
4135 END LOOP;
4136
4137 FOR sty_type_rec IN sty_type_csr (p_tmpl_identify_rec.stream_type_id) LOOP
4138 l_sty_type_name := sty_type_rec.name;
4139 END LOOP;
4140
4141 OKL_API.SET_MESSAGE(p_app_name => g_app_name
4142 ,p_msg_name => 'OKL_TMPL_NOT_FOUND'
4143 ,p_token1 => 'PRODUCT'
4144 ,p_token1_value => l_product_name
4145 ,p_token2 => 'TRANSACTION_TYPE'
4146 ,p_token2_value => l_trx_type_name
4147 ,p_token3 => 'STREAM_TYPE'
4148 ,p_token3_value => NVL(l_sty_type_name, ' ')
4149 ,p_token4 => 'ACCOUNTING_DATE'
4150 ,p_token4_value => G_GL_DATE);
4151
4152
4153 RAISE OKL_API.G_EXCEPTION_ERROR;
4154 END IF;
4155 END IF;
4156
4157 -- Check the Distribution Status and take appropriate Action
4158 l_check_status := CHECK_JOURNAL(p_source_id => l_dist_info_tbl(i).source_id,
4159 p_source_table => l_dist_info_tbl(i).source_table);
4160
4161 -- l_check_status = 1 denotes that the distributions in OKL exist, but journals have not yet been created in SLA
4162 -- l_check_status = 2 denotes that the distributions exist in OKL , and journals have been created in SLA
4163
4164
4165 IF (l_check_status = 1) THEN
4166 -- Delete from Distributions
4167 DELETE_DIST_AE(p_flag => 'DIST',
4168 p_source_id => l_dist_info_tbl(i).source_id,
4169 p_source_table => l_dist_info_tbl(i).source_table,
4170 x_return_status => l_return_status);
4171
4172 IF (l_return_status <> OKL_API.G_RET_STS_SUCCESS) THEN
4173 RAISE OKL_API.G_EXCEPTION_ERROR;
4174 END IF;
4175
4176 END IF;
4177
4178 IF (l_check_status = 2) THEN
4179 OKL_API.SET_MESSAGE(p_app_name => g_app_name,
4180 p_msg_name => 'OKL_AE_GONE_TO_SLA');
4181 RAISE OKL_API.G_EXCEPTION_ERROR;
4182 END IF;
4183
4184 FOR j IN 1..l_tmpl_tbl.COUNT
4185 LOOP
4186 tmpl_rec := l_tmpl_tbl(j);
4187
4188 -- Added by Santonyr on 12-Jul-2440 for the bug 3761026
4189 l_template_amount_tbl(l_tmp_amt_tbl_count).template_id := tmpl_rec.id;
4190 l_template_amount_tbl(l_tmp_amt_tbl_count).stream_type_id := tmpl_rec.sty_id;
4191 --Building the reference between the template_amount_tbl and dist_info_rec
4192 l_template_amount_tbl(l_tmp_amt_tbl_count).parent_index_number := i;
4193
4194
4195 IF (l_dist_info_tbl(i).AMOUNT IS NULL) OR
4196 (l_dist_info_tbl(i).AMOUNT = OKL_API.G_MISS_NUM) THEN
4197
4198 -- If the amount is null calculate the amount using formula engine
4199 IF (tmpl_rec.FMA_ID IS NULL) OR
4200 (tmpl_rec.FMA_ID = OKL_API.G_MISS_NUM) THEN
4201 -- If the formula is not found associated with template
4202 OKL_API.SET_MESSAGE(p_app_name => g_app_name,
4203 p_msg_name => 'OKL_FMA_NOT_PRESENT',
4204 p_token1 => 'TEMPLATE_NAME',
4205 p_token1_value => tmpl_rec.NAME);
4206 RAISE OKL_API.G_EXCEPTION_ERROR;
4207 END IF;
4208
4209 OPEN frml_csr(tmpl_rec.fma_id);
4210 FETCH frml_csr INTO l_formula_name;
4211 CLOSE frml_csr;
4212
4213 -- For secondary rep txn, set the security policy for streams. MG Uptake
4214 IF g_representation_type = 'SECONDARY' THEN
4215 OKL_STREAMS_SEC_PVT.SET_REPO_STREAMS;
4216 END IF;
4217
4218 -- Execute the formula using formula engine.
4219
4220 EXECUTE_FORMULA(p_avlv_rec => tmpl_rec,
4221 p_contract_id => l_dist_info_tbl(i).contract_id,
4222 p_contract_line_id => l_dist_info_tbl(i).contract_line_id,
4223 p_ctxt_val_tbl => p_ctxt_val_tbl,
4224 x_return_status => l_return_status,
4225 x_amount => l_amount );
4226
4227 IF (l_return_status <> OKL_API.G_RET_STS_SUCCESS) THEN
4228 OKL_API.SET_MESSAGE(p_app_name => g_app_name,
4229 p_msg_name => 'OKL_FRML_EXE_FAILED',
4230 p_token1 => 'FORMULA_NAME',
4231 p_token1_value => l_formula_name);
4232
4233 END IF;
4234
4235 -- For secondary rep txn, reset the security policy for streams. MG Uptake
4236 IF g_representation_type = 'SECONDARY' THEN
4237 OKL_STREAMS_SEC_PVT.RESET_REPO_STREAMS;
4238 END IF;
4239
4240 IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
4241 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
4242 ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
4243 RAISE OKL_API.G_EXCEPTION_ERROR;
4244 END IF;
4245
4246 -- Added by Santonyr on 12-Jul-2440 for the bug 3761026
4247 l_template_amount_tbl(l_tmp_amt_tbl_count).formula_used := 'Y';
4248
4249 ELSE -- If the amount is passed from the caller (amount is not null).
4250
4251 l_amount := l_dist_info_tbl(i).AMOUNT;
4252 -- Added by Santonyr on 12-Jul-2440 for the bug 3761026
4253 l_template_amount_tbl(l_tmp_amt_tbl_count).formula_used := 'N';
4254
4255 END IF; -- End If for (p_dist_info_rec.AMOUNT IS NULL)
4256
4257 -- If amount passes is Zero or Amount got from formula is zero then a
4258 -- message should be displayed.
4259
4260 /* commenting this part as zero amount is not an error condition. racheruv 15881611
4261 IF (l_amount = 0) THEN
4262 OKL_API.SET_MESSAGE(p_app_name => g_app_name,
4263 p_msg_name => 'OKL_FRML_RET_ZERO_AMT',
4264 p_token1 => 'TEMPLATE_NAME',
4265 p_token1_value => tmpl_rec.NAME);
4266
4267 -- Santonyr on 14-Jul-2003 Fixed bug 3048686
4268 -- RAISE OKL_API.G_EXCEPTION_ERROR;
4269
4270 END IF;
4271 */
4272
4273 IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
4274 OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'Prior to the call to COPY_TEMPLATE_TBL');
4275 END IF;
4276
4277 COPY_TEMPLATE_TBL(p_temp_rec => tmpl_rec,
4278 x_template_rec => x_template_tbl(j),
4279 x_return_status => l_return_status);
4280
4281
4282 IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
4283 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
4284 ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
4285 RAISE OKL_API.G_EXCEPTION_ERROR;
4286 END IF;
4287
4288 IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
4289 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);
4290 END IF;
4291
4292 --Building a reference between the dist_info rec and x_template_tbl
4293 x_template_tbl(l_tmp_amt_tbl_count).parent_index_number := i;
4294 x_amount_tbl(l_tmp_amt_tbl_count).amount := Okl_Accounting_Util.ROUND_AMOUNT(p_amount => l_amount,
4295 p_currency_code => p_dist_info_tbl(i).currency_code);
4296 x_amount_tbl(l_tmp_amt_tbl_count).parent_index_number := i;
4297 l_template_amount_tbl(l_tmp_amt_tbl_count).amount := x_amount_tbl(l_tmp_amt_tbl_count).amount;
4298
4299 --Fetch the Account gen table corresponding to the source_id of the current distribution record
4300 GET_ACC_GEN_TBL(p_source_id => p_dist_info_tbl(i).source_id,
4301 p_gen_table => p_acc_gen_primary_key_tbl,
4302 x_acc_gen_tbl_ret => p_acc_gen_tbl_ret);
4303
4304 IF (l_amount <> 0) THEN
4305 IF (l_account_derivation = 'ATS')
4306 THEN
4307 CREATE_DIST_RECS(p_avlv_rec => tmpl_rec,
4308 p_tmpl_identify_rec => p_tmpl_identify_rec,
4309 p_dist_info_rec => l_dist_info_tbl(i),
4310 p_amount => l_amount,
4311 p_gen_table => p_acc_gen_tbl_ret,
4312 x_return_status => l_return_status,
4313 x_tabv_tbl => l_tabv_tbl_out);
4314
4315 IF (l_return_status <> OKL_API.G_RET_STS_SUCCESS) THEN
4316 RAISE OKL_API.G_EXCEPTION_ERROR;
4317 END IF;
4318 ELSIF (l_account_derivation = 'AMB')
4319 THEN
4320 CREATE_DIST_RECS(--Bug 6127326 dpsingh start
4321 p_avlv_rec => tmpl_rec,
4322 --Bug 6127326 dpsingh end
4323 p_tmpl_identify_rec => p_tmpl_identify_rec,
4324 p_dist_info_rec => l_dist_info_tbl(i),
4325 p_amount => l_amount,
4326 x_return_status => l_return_status,
4327 x_tabv_tbl => l_tabv_tbl_out);
4328
4329 IF (l_return_status <> OKL_API.G_RET_STS_SUCCESS) THEN
4330 RAISE OKL_API.G_EXCEPTION_ERROR;
4331 END IF;
4332 END IF;
4333 END IF; -- End If for (l_amount <> 0)
4334
4335 --Incrementing the counter
4336 l_tmp_amt_tbl_count := l_tmp_amt_tbl_count + 1;
4337
4338 IF (l_tabv_tbl_final.COUNT = 0) THEN
4339 k := 0;
4340 ELSE
4341 k := l_tabv_tbl_final.COUNT;
4342 END IF;
4343
4344 FOR i in l_tabv_tbl_out.FIRST..l_tabv_tbl_out.LAST
4345 LOOP
4346 l_tabv_tbl_final(k).id := l_tabv_tbl_out(i).id;
4347 k := k + 1;
4348 END LOOP;
4349
4350 END LOOP; -- End LOOP for (l_tmpl_tbl.COUNT)
4351
4352 --Else when the account derivation option is 'AMB' and the transaction amount is already known
4353 ELSE
4354 --Assinging the amount being passed in the rec to l_amount
4355 l_amount := l_dist_info_tbl(i).amount;
4356
4357 --Deriving the functional currency to be passed in the call to validate_params
4358 --l_functional_curr := Okl_Accounting_Util.GET_FUNC_CURR_CODE; -- redundant code
4359
4360 -- Check the Distribution Status and take appropriate Action
4361 l_check_status := CHECK_JOURNAL(p_source_id => l_dist_info_tbl(i).source_id,
4362 p_source_table => l_dist_info_tbl(i).source_table);
4363
4364 -- l_check_status = 1 denotes that the distributions in OKL exist, but journals have not yet been created in SLA
4365 -- l_check_status = 2 denotes that the distributions exist in OKL , and journals have been created in SLA
4366
4367
4368 IF (l_check_status = 1) THEN
4369 -- Delete from Distributions
4370 DELETE_DIST_AE(p_flag => 'DIST',
4371 p_source_id => l_dist_info_tbl(i).source_id,
4372 p_source_table => l_dist_info_tbl(i).source_table,
4373 x_return_status => l_return_status);
4374
4375 IF (l_return_status <> OKL_API.G_RET_STS_SUCCESS) THEN
4376 RAISE OKL_API.G_EXCEPTION_ERROR;
4377 END IF;
4378
4379 END IF;
4380
4381 IF (l_check_status = 2) THEN
4382 OKL_API.SET_MESSAGE(p_app_name => g_app_name,
4383 p_msg_name => 'OKL_AE_GONE_TO_SLA');
4384 RAISE OKL_API.G_EXCEPTION_ERROR;
4385 END IF;
4386
4387 l_template_amount_tbl(l_tmp_amt_tbl_count).amount := x_amount_tbl(l_tmp_amt_tbl_count).amount;
4388
4389 l_amount := l_dist_info_tbl(i).amount;
4390
4391 IF (l_amount <> 0) THEN
4392
4393 CREATE_DIST_RECS(p_tmpl_identify_rec => p_tmpl_identify_rec,
4394 p_dist_info_rec => l_dist_info_tbl(i),
4395 p_amount => l_amount,
4396 x_return_status => l_return_status,
4397 x_tabv_tbl => l_tabv_tbl_out);
4398
4399 IF (l_return_status <> OKL_API.G_RET_STS_SUCCESS) THEN
4400 RAISE OKL_API.G_EXCEPTION_ERROR;
4401 END IF;
4402 END IF; -- End If for (l_amount <> 0)
4403
4404 x_amount_tbl(l_tmp_amt_tbl_count).amount := Okl_Accounting_Util.ROUND_AMOUNT(p_amount => l_amount,
4405 p_currency_code => p_dist_info_tbl(i).currency_code);
4406 x_amount_tbl(l_tmp_amt_tbl_count).parent_index_number := i;
4407
4408 --Incrementing the counter
4409 l_tmp_amt_tbl_count := l_tmp_amt_tbl_count + 1;
4410
4411 IF (l_tabv_tbl_final.COUNT = 0) THEN
4412 k := 0;
4413 ELSE
4414 k := l_tabv_tbl_final.COUNT;
4415 END IF;
4416
4417 FOR i in l_tabv_tbl_out.FIRST..l_tabv_tbl_out.LAST
4418 LOOP
4419 l_tabv_tbl_final(k).id := l_tabv_tbl_out(i).id;
4420 k := k + 1;
4421 END LOOP;
4422
4423 END IF;
4424 END LOOP; --End loop for (l_dist_info_tbl.count)
4425
4426 --Fetching the transaction header id corresponding to this distribution
4427 --As the dist_info_tbl is grouped for a single transaction header,
4428 --the tcn_id is fetched only once for the entire table
4429 OPEN get_tcn_id_csr(p_source_id => l_dist_info_tbl(l_dist_info_tbl.first).source_id);
4430 FETCH get_tcn_id_csr INTO l_tcn_id;
4431 CLOSE get_tcn_id_csr;
4432
4433 --Checking if an event has already been created for the transaction
4434 OKL_XLA_EVENTS_PVT.event_exists(p_api_version => l_api_version
4435 ,p_init_msg_list => l_init_msg_list
4436 ,x_return_status => l_return_status
4437 ,x_msg_count => l_msg_count
4438 ,x_msg_data => l_msg_data
4439 ,p_tcn_id => l_tcn_id
4440 ,p_action_type => 'CREATE'
4441 ,x_event_id => l_event_id
4442 ,x_event_date => l_event_date);
4443
4444 IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
4445 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
4446 ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
4447 RAISE OKL_API.G_EXCEPTION_ERROR;
4448 END IF;
4449
4450 --If an event is already found , do nothing, else Capture account sources for the header
4451 IF l_event_id IS NULL
4452 THEN
4453 -- below code s not required for MG uptake.
4454 --OPEN get_gl_short_name_csr;
4455 --FETCH get_gl_short_name_csr INTO l_gl_short_name;
4456 --CLOSE get_gl_short_name_csr;
4457
4458 -- set the representation name which will be used as valuation method
4459 l_gl_short_name := g_ledger_tbl(g_ledger_id).rep_code;
4460
4461 IF l_gl_short_name IS NULL
4462 THEN
4463 OKL_API.SET_MESSAGE(p_app_name => g_app_name
4464 ,p_msg_name => 'OKL_GL_NOT_SET_FOR_ORG');
4465 RAISE OKL_API.G_EXCEPTION_ERROR;
4466 END IF;
4467
4468 l_event_id := OKL_XLA_EVENTS_PVT.create_event(p_api_version => l_api_version
4469 ,p_init_msg_list => l_init_msg_list
4470 ,x_return_status => l_return_status
4471 ,x_msg_count => l_msg_count
4472 ,x_msg_data => l_msg_data
4473 ,p_tcn_id => l_tcn_id
4474 ,p_gl_date => G_gl_date
4475 ,p_action_type => 'CREATE'
4476 ,p_representation_code => l_gl_short_name
4477 );
4478
4479 IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
4480 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
4481 ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
4482 RAISE OKL_API.G_EXCEPTION_ERROR;
4483 END IF;
4484
4485 END IF;
4486
4487 FOR i in l_tabv_tbl_final.FIRST..l_tabv_tbl_final.LAST
4488 LOOP
4489 l_tabv_tbl_final(i).accounting_event_id := l_event_id;
4490 --Once the event is created successfully in XLA, posted_yn flag is set to Y
4491 l_tabv_tbl_final(i).posted_yn := 'Y';
4492 END LOOP;
4493
4494 --Update the accounting_event_id on the
4495 OKL_TRNS_ACC_DSTRS_PUB.update_trns_acc_dstrs(p_api_version => l_api_version
4496 ,p_init_msg_list => l_init_msg_list
4497 ,x_return_status => l_return_status
4498 ,x_msg_count => l_msg_count
4499 ,x_msg_data => l_msg_data
4500 ,p_tabv_tbl => l_Tabv_tbl_final
4501 ,x_tabv_tbl => x_tabv_tbl
4502 );
4503
4504 OKL_API.END_ACTIVITY(x_msg_count, x_msg_data);
4505
4506 EXCEPTION
4507
4508 WHEN OKL_API.G_EXCEPTION_ERROR THEN
4509 x_return_status := OKL_API.HANDLE_EXCEPTIONS
4510 ( l_api_name,
4511 G_PKG_NAME,
4512 'OKL_API.G_RET_STS_ERROR',
4513 x_msg_count,
4514 x_msg_data,
4515 '_PVT'
4516 );
4517 WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
4518 x_return_status := OKL_API.HANDLE_EXCEPTIONS
4519 ( l_api_name,
4520 G_PKG_NAME,
4521 'OKL_API.G_RET_STS_UNEXP_ERROR',
4522 x_msg_count,
4523 x_msg_data,
4524 '_PVT'
4525 );
4526 WHEN OTHERS THEN
4527 x_return_status := OKL_API.HANDLE_EXCEPTIONS
4528 ( l_api_name,
4529 G_PKG_NAME,
4530 'OTHERS',
4531 x_msg_count,
4532 x_msg_data,
4533 '_PVT'
4534 );
4535
4536 END CREATE_ACCOUNTING_DIST;
4537 --Bug 4662173 - End of Changes
4538
4539 PROCEDURE CREATE_ACCOUNTING_DIST(p_api_version IN NUMBER,
4540 p_init_msg_list IN VARCHAR2,
4541 x_return_status OUT NOCOPY VARCHAR2,
4542 x_msg_count OUT NOCOPY NUMBER,
4543 x_msg_data OUT NOCOPY VARCHAR2,
4544 p_tmpl_identify_rec IN TMPL_IDENTIFY_REC_TYPE,
4545 p_dist_info_tbl IN DIST_INFO_TBL_TYPE,
4546 p_ctxt_val_tbl IN CTXT_TBL_TYPE,
4547 p_acc_gen_primary_key_tbl IN ACC_GEN_TBL_TYPE,
4548 x_template_tbl OUT NOCOPY AVLV_OUT_TBL_TYPE,
4549 x_amount_tbl OUT NOCOPY AMOUNT_OUT_TBL_TYPE,
4550 x_tabv_tbl OUT NOCOPY TABV_TBL_TYPE)
4551
4552 IS
4553
4554 l_check_status NUMBER;
4555 i NUMBER := 0;
4556 l_amount NUMBER := 0;
4557
4558 tmpl_rec AVLV_REC_TYPE;
4559 l_tmpl_tbl avlv_tbl_type;
4560 l_formula_name OKL_FORMULAE_V.NAME%TYPE;
4561 l_functional_curr OKL_TRNS_ACC_DSTRS.CURRENCY_CODE%TYPE;
4562 l_return_status VARCHAR2(1) := OKL_API.G_RET_STS_SUCCESS;
4563
4564 l_api_name VARCHAR2(30) := 'CREATE_ACCOUNTING_DIST';
4565 l_api_version NUMBER := 1.0;
4566
4567 -- Added by Santonyr on 30-Jul-2003 to fix the bug 2941805
4568
4569 l_product_name OKL_PRODUCTS.NAME%TYPE;
4570 l_trx_type_name OKL_TRX_TYPES_TL.NAME%TYPE;
4571 l_sty_type_name OKL_STRM_TYPE_TL.NAME%TYPE;
4572
4573 CURSOR frml_csr(v_id NUMBER) IS
4574 SELECT name
4575 FROM okl_formulae_v
4576 WHERE id = v_id;
4577
4578 -- Added by Santonyr on 30-Jul-2003 to fix the bug 2941805
4579
4580 CURSOR prdt_csr (l_pdt_id OKL_PRODUCTS.ID%TYPE) IS
4581 SELECT name
4582 FROM okl_products
4583 WHERE id = l_pdt_id ;
4584
4585 -- Bug 4205156. SGIYER 07-MAR-05. Added language clause
4586 CURSOR trx_type_csr (l_trx_type_id OKL_TRX_TYPES_TL.ID%TYPE) IS
4587 SELECT name
4588 FROM okl_trx_types_tl
4589 WHERE id = l_trx_type_id
4590 AND language = USERENV('LANG');
4591
4592 -- Bug 4205156. SGIYER 07-MAR-05. Added language clause
4593 CURSOR sty_type_csr (l_sty_type_id OKL_STRM_TYPE_TL.ID%TYPE) IS
4594 SELECT name
4595 FROM okl_strm_type_tl
4596 WHERE id = l_sty_type_id
4597 AND language = USERENV('LANG');
4598
4599 l_dist_info_tbl DIST_INFO_TBL_TYPE:= p_dist_info_tbl;
4600 --Added by gboomina for the Accruals Performance Enhancement
4601 l_acc_gen_ind NUMBER := 0;
4602 l_acc_gen_last_ind NUMBER := 0;
4603 p_acc_gen_tbl_ret acc_gen_primary_key;
4604 l_tmp_amt_tbl_count NUMBER := 0;
4605 --Added by kthiruva on 06-Feb-2007 for SLA Uptake
4606 --Bug 5707866 - Start of Changes
4607 l_ctxt_val_tbl CTXT_VAL_TBL_TYPE;
4608 l_account_derivation OKL_SYS_ACCT_OPTS.ACCOUNT_DERIVATION%TYPE;
4609 l_tcn_id NUMBER;
4610 l_init_msg_list VARCHAR2(1) := OKL_API.G_FALSE;
4611 l_msg_count NUMBER := 0;
4612 l_msg_data VARCHAR2(2000);
4613 l_event_id NUMBER;
4614 l_event_date DATE;
4615 l_gl_short_name GL_LEDGERS.SHORT_NAME%TYPE;
4616 l_tabv_tbl_out tabv_tbl_type ;
4617 l_tabv_tbl_final tabv_tbl_type;
4618 --x_tabv_tbl tabv_tbl_type ;
4619 k NUMBER := 0;
4620 l_first_rec BOOLEAN := TRUE;
4621
4622 --Bug 5707866 - End of Changes
4623
4624 BEGIN
4625 IF (G_DEBUG_ENABLED = 'Y') THEN
4626 G_IS_DEBUG_STATEMENT_ON := OKL_DEBUG_PUB.CHECK_LOG_ON(G_MODULE, FND_LOG.LEVEL_STATEMENT);
4627 END IF;
4628 x_return_status := OKL_API.G_RET_STS_SUCCESS;
4629
4630 l_return_status := OKL_API.START_ACTIVITY(l_api_name,
4631 G_PKG_NAME,
4632 p_init_msg_list,
4633 l_api_version,
4634 p_api_version,
4635 '_PVT',
4636 x_return_status);
4637 IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
4638 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
4639 ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
4640 RAISE OKL_API.G_EXCEPTION_ERROR;
4641 END IF;
4642
4643 -- Get the functional currency, based on the representation
4644 IF g_representation_type = 'PRIMARY' THEN
4645 l_functional_curr := okl_accounting_util.get_func_curr_code;
4646 ELSE
4647 l_functional_curr := okl_accounting_util.get_func_curr_code(g_ledger_id);
4648 END IF;
4649
4650
4651 -- Bug 3948354
4652 -- Set the global variable G_REV_REC_FLAG to the value passed by calling program
4653 G_REV_REC_FLAG := p_tmpl_identify_rec.REV_REC_FLAG;
4654
4655 -- Validate the Parameters
4656
4657 IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
4658 OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'Prior to the call to VALIDATE_PARAMS');
4659 END IF;
4660 VALIDATE_PARAMS(p_dist_info_tbl => l_dist_info_tbl,
4661 p_functional_curr => l_functional_curr,
4662 x_return_status => l_return_status);
4663
4664 IF (l_return_status <> OKL_API.G_RET_STS_SUCCESS) THEN
4665 RAISE OKL_API.G_EXCEPTION_ERROR;
4666 END IF;
4667
4668 IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
4669 OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'After the call to VALIDATE_PARAMS, the return status is :'||l_return_status);
4670 END IF;
4671
4672 -- Get the Templates from the given parameters
4673
4674 --- Change the G_GL_DATE to p_dist_info_rec.accounting_date if we want to pass passed-date as GL Date
4675
4676 IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
4677 OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'Prior to the call to Get_Template_Info');
4678 END IF;
4679
4680 --Bug 5707866 - Start of Changes
4681 OPEN get_acct_derivation_csr;
4682 FETCH get_acct_derivation_csr INTO l_account_derivation;
4683 CLOSE get_acct_derivation_csr;
4684
4685 IF l_account_derivation IS NULL THEN
4686 OKL_API.SET_MESSAGE(p_app_name => g_app_name
4687 ,p_msg_name => 'OKL_ACCT_DER_NOT_SET');
4688 RAISE OKL_API.G_EXCEPTION_ERROR;
4689 END IF;
4690
4691 --Deriving the functional currency to be passed in the call to validate_params
4692 --l_functional_curr := Okl_Accounting_Util.GET_FUNC_CURR_CODE; --redundant code.
4693
4694 -- Check the Distribution Status and take appropriate Action
4695 FOR i in l_dist_info_tbl.FIRST..l_dist_info_tbl.LAST LOOP
4696 --Only when the account derivation option is 'ATS'
4697 --Or if the account derivation option is 'AMB' and the transaction amount is not known
4698 --should the template information be fetched
4699 IF (l_account_derivation = 'ATS') OR
4700 ((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)))
4701 THEN
4702 IF (l_first_rec = TRUE)
4703 THEN
4704 GET_TEMPLATE_INFO(p_api_version => l_api_version,
4705 p_init_msg_list => p_init_msg_list,
4706 x_return_status => l_return_status,
4707 x_msg_count => x_msg_count,
4708 x_msg_data => x_msg_data,
4709 p_tmpl_identify_rec => p_tmpl_identify_rec,
4710 x_template_tbl => l_tmpl_tbl,
4711 p_validity_date => G_GL_DATE);
4712
4713 IF (l_return_status <> OKL_API.G_RET_STS_SUCCESS) THEN
4714 RAISE OKL_API.G_EXCEPTION_ERROR;
4715 END IF;
4716
4717 --Setting l_first_rec to FALSE, so that GET_TEMPLATE_INFO need not be called every time in the loop
4718 l_first_rec := FALSE;
4719
4720 IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
4721 OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'The return status after the Get_Template_Info call is :'||l_return_status);
4722 END IF;
4723
4724 -- Raise an error if template is not found.
4725 IF (l_tmpl_tbl.COUNT = 0) THEN
4726 -- Added by Santonyr on 30-Jul-2003 to fix the bug 2941805
4727 FOR prdt_rec IN prdt_csr (p_tmpl_identify_rec.product_id) LOOP
4728 l_product_name := prdt_rec.name;
4729 END LOOP;
4730
4731 FOR trx_type_rec IN trx_type_csr (p_tmpl_identify_rec.transaction_type_id) LOOP
4732 l_trx_type_name := trx_type_rec.name;
4733 END LOOP;
4734
4735 FOR sty_type_rec IN sty_type_csr (p_tmpl_identify_rec.stream_type_id) LOOP
4736 l_sty_type_name := sty_type_rec.name;
4737 END LOOP;
4738
4739 OKL_API.SET_MESSAGE(p_app_name => g_app_name
4740 ,p_msg_name => 'OKL_TMPL_NOT_FOUND'
4741 ,p_token1 => 'PRODUCT'
4742 ,p_token1_value => l_product_name
4743 ,p_token2 => 'TRANSACTION_TYPE'
4744 ,p_token2_value => l_trx_type_name
4745 ,p_token3 => 'STREAM_TYPE'
4746 ,p_token3_value => NVL(l_sty_type_name, ' ')
4747 ,p_token4 => 'ACCOUNTING_DATE'
4748 ,p_token4_value => G_GL_DATE);
4749
4750
4751 RAISE OKL_API.G_EXCEPTION_ERROR;
4752 END IF;
4753 END IF;
4754
4755 -- Check the Distribution Status and take appropriate Action
4756 l_check_status := CHECK_JOURNAL(p_source_id => l_dist_info_tbl(i).source_id,
4757 p_source_table => l_dist_info_tbl(i).source_table);
4758
4759
4760 -- l_check_status = 1 denotes that the distributions in OKL exist, but journals have not yet been created in SLA
4761 -- l_check_status = 2 denotes that the distributions exist in OKL , and journals have been created in SLA
4762 IF (l_check_status = 1) THEN
4763 -- Delete from Distributions
4764 DELETE_DIST_AE(p_flag => 'DIST',
4765 p_source_id => l_dist_info_tbl(i).source_id,
4766 p_source_table => l_dist_info_tbl(i).source_table,
4767 x_return_status => l_return_status);
4768
4769 IF (l_return_status <> OKL_API.G_RET_STS_SUCCESS) THEN
4770 RAISE OKL_API.G_EXCEPTION_ERROR;
4771 END IF;
4772
4773 END IF;
4774
4775 IF (l_check_status = 2) THEN
4776 OKL_API.SET_MESSAGE(p_app_name => g_app_name,
4777 p_msg_name => 'OKL_AE_GONE_TO_SLA');
4778 RAISE OKL_API.G_EXCEPTION_ERROR;
4779 END IF;
4780
4781 FOR j IN 1..l_tmpl_tbl.COUNT
4782 LOOP
4783 tmpl_rec := l_tmpl_tbl(j);
4784
4785 IF (l_dist_info_tbl(i).AMOUNT IS NULL) OR
4786 (l_dist_info_tbl(i).AMOUNT = OKL_API.G_MISS_NUM) THEN
4787
4788 -- If the amount is null calculate the amount using formula engine
4789 IF (tmpl_rec.FMA_ID IS NULL) OR
4790 (tmpl_rec.FMA_ID = OKL_API.G_MISS_NUM) THEN
4791 -- If the formula is not found associated with template
4792 OKL_API.SET_MESSAGE(p_app_name => g_app_name,
4793 p_msg_name => 'OKL_FMA_NOT_PRESENT',
4794 p_token1 => 'TEMPLATE_NAME',
4795 p_token1_value => tmpl_rec.NAME);
4796 RAISE OKL_API.G_EXCEPTION_ERROR;
4797 END IF;
4798
4799 OPEN frml_csr(tmpl_rec.fma_id);
4800 FETCH frml_csr INTO l_formula_name;
4801 CLOSE frml_csr;
4802
4803 -- Execute the formula using formula engine.
4804
4805 GET_CONTEXT_VAL(p_source_id => p_dist_info_tbl(i).source_id
4806 ,p_ctxt_tbl => p_ctxt_val_tbl
4807 ,x_ctxt_val_tbl => l_ctxt_val_tbl);
4808
4809
4810 -- For secondary rep txn, set the security policy for streams. MG uptake
4811 IF g_representation_type = 'SECONDARY' THEN
4812 OKL_STREAMS_SEC_PVT.SET_REPO_STREAMS;
4813 END IF;
4814
4815 EXECUTE_FORMULA(p_avlv_rec => tmpl_rec,
4816 p_contract_id => l_dist_info_tbl(i).contract_id,
4817 p_contract_line_id => l_dist_info_tbl(i).contract_line_id,
4818 p_ctxt_val_tbl => l_ctxt_val_tbl,
4819 x_return_status => l_return_status,
4820 x_amount => l_amount );
4821
4822 IF (l_return_status <> OKL_API.G_RET_STS_SUCCESS) THEN
4823 OKL_API.SET_MESSAGE(p_app_name => g_app_name,
4824 p_msg_name => 'OKL_FRML_EXE_FAILED',
4825 p_token1 => 'FORMULA_NAME',
4826 p_token1_value => l_formula_name);
4827
4828 END IF;
4829
4830 -- For secondary rep txn, reset the security policy for streams. MG uptake
4831 IF g_representation_type = 'SECONDARY' THEN
4832 OKL_STREAMS_SEC_PVT.RESET_REPO_STREAMS;
4833 END IF;
4834
4835 IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
4836 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
4837 ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
4838 RAISE OKL_API.G_EXCEPTION_ERROR;
4839 END IF;
4840 ELSE -- If the amount is passed from the caller (amount is not null).
4841 l_amount := l_dist_info_tbl(i).AMOUNT;
4842 END IF; -- End If for (p_dist_info_rec.AMOUNT IS NULL)
4843
4844 -- If amount passes is Zero or Amount got from formula is zero then a
4845 -- message should be displayed.
4846
4847 IF (l_amount = 0) THEN
4848 OKL_API.SET_MESSAGE(p_app_name => g_app_name,
4849 p_msg_name => 'OKL_FRML_RET_ZERO_AMT',
4850 p_token1 => 'TEMPLATE_NAME',
4851 p_token1_value => tmpl_rec.NAME);
4852 -- Santonyr on 14-Jul-2003 Fixed bug 3048686
4853 -- RAISE OKL_API.G_EXCEPTION_ERROR;
4854 END IF;
4855
4856 --Building a reference between the dist_info rec and x_template_tbl
4857 x_template_tbl(i).template_tbl(j) := tmpl_rec;
4858 x_template_tbl(i).source_id := l_dist_info_tbl(i).source_id;
4859 x_amount_tbl(i).amount_tbl(j) := Okl_Accounting_Util.ROUND_AMOUNT(p_amount => l_amount,
4860 p_currency_code => p_dist_info_tbl(i).currency_code);
4861 x_amount_tbl(i).source_id := l_dist_info_tbl(i).source_id;
4862
4863 --Fetch the Account gen table corresponding to the source_id of the current distribution record
4864 GET_ACC_GEN_TBL(p_source_id => p_dist_info_tbl(i).source_id,
4865 p_gen_table => p_acc_gen_primary_key_tbl,
4866 x_acc_gen_tbl_ret => p_acc_gen_tbl_ret);
4867
4868 IF (l_amount <> 0) THEN
4869 IF (l_account_derivation = 'ATS')
4870 THEN
4871 CREATE_DIST_RECS(p_avlv_rec => tmpl_rec,
4872 p_tmpl_identify_rec => p_tmpl_identify_rec,
4873 p_dist_info_rec => l_dist_info_tbl(i),
4874 p_amount => l_amount,
4875 p_gen_table => p_acc_gen_tbl_ret,
4876 x_return_status => l_return_status,
4877 x_tabv_tbl => l_tabv_tbl_out);
4878
4879 IF (l_return_status <> OKL_API.G_RET_STS_SUCCESS) THEN
4880 RAISE OKL_API.G_EXCEPTION_ERROR;
4881 END IF;
4882 ELSIF (l_account_derivation = 'AMB')
4883 THEN
4884 CREATE_DIST_RECS(--Bug 6127326 dpsingh start
4885 p_avlv_rec => tmpl_rec,
4886 --Bug 6127326 dpsingh end
4887 p_tmpl_identify_rec => p_tmpl_identify_rec,
4888 p_dist_info_rec => l_dist_info_tbl(i),
4889 p_amount => l_amount,
4890 x_return_status => l_return_status,
4891 x_tabv_tbl => l_tabv_tbl_out);
4892
4893 IF (l_return_status <> OKL_API.G_RET_STS_SUCCESS) THEN
4894 RAISE OKL_API.G_EXCEPTION_ERROR;
4895 END IF;
4896 END IF;
4897 END IF; -- End If for (l_amount <> 0)
4898
4899 IF (l_tabv_tbl_final.COUNT = 0) THEN
4900 k := 0;
4901 ELSE
4902 k := l_tabv_tbl_final.COUNT;
4903 END IF;
4904
4905 IF (l_tabv_tbl_out.count > 0) THEN
4906 FOR i in l_tabv_tbl_out.FIRST..l_tabv_tbl_out.LAST
4907 LOOP
4908 l_tabv_tbl_final(k).id := l_tabv_tbl_out(i).id;
4909 k := k + 1;
4910 END LOOP;
4911 END IF;
4912
4913 END LOOP; -- End LOOP for (l_tmpl_tbl.COUNT)
4914
4915 --Else when the account derivation option is 'AMB' and the transaction amount is already known
4916 ELSE
4917 --Assinging the amount being passed in the rec to l_amount
4918 l_amount := l_dist_info_tbl(i).amount;
4919
4920 --Deriving the functional currency to be passed in the call to validate_params
4921 l_functional_curr := Okl_Accounting_Util.GET_FUNC_CURR_CODE;
4922
4923 -- Check the Distribution Status and take appropriate Action
4924 l_check_status := CHECK_JOURNAL(p_source_id => l_dist_info_tbl(i).source_id,
4925 p_source_table => l_dist_info_tbl(i).source_table);
4926
4927 -- l_check_status = 1 denotes that the distributions in OKL exist, but journals have not yet been created in SLA
4928 -- l_check_status = 2 denotes that the distributions exist in OKL , and journals have been created in SLA
4929
4930
4931 IF (l_check_status = 1) THEN
4932 -- Delete from Distributions
4933 DELETE_DIST_AE(p_flag => 'DIST',
4934 p_source_id => l_dist_info_tbl(i).source_id,
4935 p_source_table => l_dist_info_tbl(i).source_table,
4936 x_return_status => l_return_status);
4937
4938 IF (l_return_status <> OKL_API.G_RET_STS_SUCCESS) THEN
4939 RAISE OKL_API.G_EXCEPTION_ERROR;
4940 END IF;
4941
4942 END IF;
4943
4944 IF (l_check_status = 2) THEN
4945 OKL_API.SET_MESSAGE(p_app_name => g_app_name,
4946 p_msg_name => 'OKL_AE_GONE_TO_SLA');
4947 RAISE OKL_API.G_EXCEPTION_ERROR;
4948 END IF;
4949
4950 l_amount := l_dist_info_tbl(i).amount;
4951
4952 IF (l_amount <> 0) THEN
4953
4954 CREATE_DIST_RECS(p_tmpl_identify_rec => p_tmpl_identify_rec,
4955 p_dist_info_rec => l_dist_info_tbl(i),
4956 p_amount => l_amount,
4957 x_return_status => l_return_status,
4958 x_tabv_tbl => l_tabv_tbl_out);
4959
4960 IF (l_return_status <> OKL_API.G_RET_STS_SUCCESS) THEN
4961 RAISE OKL_API.G_EXCEPTION_ERROR;
4962 END IF;
4963 END IF; -- End If for (l_amount <> 0)
4964
4965 x_amount_tbl(i).amount_tbl(0) := Okl_Accounting_Util.ROUND_AMOUNT(p_amount => l_amount,
4966 p_currency_code => p_dist_info_tbl(i).currency_code);
4967 x_amount_tbl(i).source_id := l_dist_info_tbl(i).source_id;
4968
4969
4970 IF (l_tabv_tbl_final.COUNT = 0) THEN
4971 k := 0;
4972 ELSE
4973 k := l_tabv_tbl_final.COUNT;
4974 END IF;
4975
4976 IF (l_tabv_tbl_out.count > 0) THEN
4977 FOR i in l_tabv_tbl_out.FIRST..l_tabv_tbl_out.LAST
4978 LOOP
4979 l_tabv_tbl_final(k).id := l_tabv_tbl_out(i).id;
4980 k := k + 1;
4981 END LOOP;
4982 END IF;
4983 END IF;
4984 x_tabv_tbl := l_tabv_tbl_final;
4985 END LOOP; --End loop for (l_dist_info_tbl.count)
4986 OKL_API.END_ACTIVITY(x_msg_count, x_msg_data);
4987
4988 EXCEPTION
4989
4990 WHEN OKL_API.G_EXCEPTION_ERROR THEN
4991 x_return_status := OKL_API.HANDLE_EXCEPTIONS
4992 ( l_api_name,
4993 G_PKG_NAME,
4994 'OKL_API.G_RET_STS_ERROR',
4995 x_msg_count,
4996 x_msg_data,
4997 '_PVT'
4998 );
4999 WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
5000 x_return_status := OKL_API.HANDLE_EXCEPTIONS
5001 ( l_api_name,
5002 G_PKG_NAME,
5003 'OKL_API.G_RET_STS_UNEXP_ERROR',
5004 x_msg_count,
5005 x_msg_data,
5006 '_PVT'
5007 );
5008 WHEN OTHERS THEN
5009 x_return_status := OKL_API.HANDLE_EXCEPTIONS
5010 ( l_api_name,
5011 G_PKG_NAME,
5012 'OTHERS',
5013 x_msg_count,
5014 x_msg_data,
5015 '_PVT'
5016 );
5017
5018 END CREATE_ACCOUNTING_DIST;
5019
5020 PROCEDURE CREATE_ACCOUNTING_DIST (p_api_version IN NUMBER,
5021 p_init_msg_list IN VARCHAR2,
5022 x_return_status OUT NOCOPY VARCHAR2,
5023 x_msg_count OUT NOCOPY NUMBER,
5024 x_msg_data OUT NOCOPY VARCHAR2,
5025 p_tmpl_identify_tbl IN TMPL_IDENTIFY_TBL_TYPE,
5026 p_dist_info_tbl IN DIST_INFO_TBL_TYPE,
5027 p_ctxt_val_tbl IN CTXT_TBL_TYPE,
5028 p_acc_gen_primary_key_tbl IN ACC_GEN_TBL_TYPE,
5029 x_template_tbl OUT NOCOPY AVLV_OUT_TBL_TYPE,
5030 x_amount_tbl OUT NOCOPY AMOUNT_OUT_TBL_TYPE,
5031 p_trx_header_id IN NUMBER,
5032 p_trx_header_table IN VARCHAR2 DEFAULT NULL)
5033
5034 IS
5035
5036 l_check_status NUMBER;
5037 i NUMBER := 0;
5038 l_amount NUMBER := 0;
5039
5040 tmpl_rec AVLV_REC_TYPE;
5041 l_tmpl_tbl avlv_tbl_type;
5042 l_formula_name OKL_FORMULAE_V.NAME%TYPE;
5043 l_functional_curr OKL_TRNS_ACC_DSTRS.CURRENCY_CODE%TYPE;
5044 l_return_status VARCHAR2(1) := OKL_API.G_RET_STS_SUCCESS;
5045
5046 l_api_name VARCHAR2(30) := 'CREATE_ACCOUNTING_DIST';
5047 l_api_version NUMBER := 1.0;
5048
5049 -- Added by Santonyr on 30-Jul-2003 to fix the bug 2941805
5050
5051 l_product_name OKL_PRODUCTS.NAME%TYPE;
5052 l_trx_type_name OKL_TRX_TYPES_TL.NAME%TYPE;
5053 l_sty_type_name OKL_STRM_TYPE_TL.NAME%TYPE;
5054
5055 -- Added by Santonyr on 12-Jul-2440 for the bug 3761026
5056
5057 l_template_amount_tbl template_amount_tbl_type;
5058 l_line_tbl ID_TBL_TYPE;
5059
5060 CURSOR frml_csr(v_id NUMBER) IS
5061 SELECT name
5062 FROM okl_formulae_v
5063 WHERE id = v_id;
5064
5065 -- Added by Santonyr on 30-Jul-2003 to fix the bug 2941805
5066
5067 CURSOR prdt_csr (l_pdt_id OKL_PRODUCTS.ID%TYPE) IS
5068 SELECT name
5069 FROM okl_products
5070 WHERE id = l_pdt_id ;
5071
5072 CURSOR trx_type_csr (l_trx_type_id OKL_TRX_TYPES_TL.ID%TYPE) IS
5073 SELECT name
5074 FROM okl_trx_types_tl
5075 WHERE id = l_trx_type_id ;
5076
5077 CURSOR sty_type_csr (l_sty_type_id OKL_STRM_TYPE_TL.ID%TYPE) IS
5078 SELECT name
5079 FROM okl_strm_type_tl
5080 WHERE id = l_sty_type_id ;
5081
5082 --Added by kthiruva on 06-Feb-2007 for SLA Uptake
5083 --Bug 5707866 - Start of Changes
5084 l_account_derivation OKL_SYS_ACCT_OPTS.ACCOUNT_DERIVATION%TYPE;
5085 l_tcn_id NUMBER := p_trx_header_id;
5086 l_init_msg_list VARCHAR2(1) := OKL_API.G_FALSE;
5087 l_msg_count NUMBER := 0;
5088 l_msg_data VARCHAR2(2000);
5089 l_event_id NUMBER;
5090 l_event_date DATE;
5091 l_gl_short_name GL_LEDGERS.SHORT_NAME%TYPE;
5092 l_tabv_tbl tabv_tbl_type ;
5093 l_tabv_tbl_out tabv_tbl_type ;
5094 x_tabv_tbl tabv_tbl_type ;
5095 l_dist_info_tbl dist_info_tbl_type := p_dist_info_tbl;
5096 l_dist_info_temp_tbl dist_info_tbl_type;
5097 l_tmpl_identify_tbl tmpl_identify_tbl_type := p_tmpl_identify_tbl;
5098 l_temp_tmpl_rec tmpl_identify_rec_type;
5099 l_count NUMBER := 0;
5100 l_ctxt_val_temp_tbl ctxt_tbl_type;
5101 l_acc_gen_temp_tbl acc_gen_tbl_type;
5102 l_ctxt_val_tbl ctxt_tbl_type := p_ctxt_val_tbl;
5103 l_acc_gen_tbl acc_gen_tbl_type := p_acc_gen_primary_key_tbl;
5104 x_template_temp_tbl AVLV_OUT_TBL_TYPE;
5105 x_amount_temp_tbl AMOUNT_OUT_TBL_TYPE;
5106 x_tabv_temp_tbl TABV_TBL_TYPE;
5107 l_tcnv_rec okl_sla_acc_sources_pvt.tehv_rec_type;
5108 l_tclv_tbl okl_sla_acc_sources_pvt.telv_tbl_type;
5109 l_tclv_tbl_final okl_sla_acc_sources_pvt.telv_tbl_type;
5110 x_tclv_tbl okl_sla_acc_sources_pvt.telv_tbl_type;
5111 l_try_name OKL_TRX_TYPES_TL.NAME%TYPE;
5112 l_source_table VARCHAR2(30);
5113 l_asev_rec asev_rec_type;
5114 l_asev_tbl asev_tbl_type;
5115 l_asev_count NUMBER := 0;
5116 l_acc_gen_key_tbl acc_gen_primary_key;
5117 l_found boolean := false;
5118 l_equal boolean := false;
5119 l_rxhv_rec okl_sla_acc_sources_pvt.rxhv_rec_type;
5120 l_rxhv_adj_rec okl_sla_acc_sources_pvt.rxhv_rec_type;
5121 l_rxlv_tbl okl_sla_acc_sources_pvt.rxlv_tbl_type;
5122 x_rxlv_tbl okl_sla_acc_sources_pvt.rxlv_tbl_type;
5123 x_rxlv_adj_tbl okl_sla_acc_sources_pvt.rxlv_tbl_type;
5124 l_pxhv_rec okl_sla_acc_sources_pvt.pxhv_rec_type;
5125 l_pxlv_tbl okl_sla_acc_sources_pvt.pxlv_tbl_type;
5126 x_pxlv_tbl okl_sla_acc_sources_pvt.pxlv_tbl_type;
5127 l_rxlv_adj_tbl okl_sla_acc_sources_pvt.rxlv_tbl_type;
5128
5129 CURSOR get_tcn_id_csr(p_source_id IN NUMBER)
5130 IS
5131 SELECT tcl.tcn_id
5132 FROM OKL_TXL_CNTRCT_LNS_ALL tcl
5133 WHERE tcl.id = p_source_id;
5134
5135 -- get the ledger based on the p_trx_header_id parameter
5136 CURSOR get_ledger_id_csr
5137 IS
5138 SELECT set_of_books_id
5139 FROM okl_trx_contracts
5140 WHERE id = p_trx_header_id;
5141
5142 l_ledger_id NUMBER;
5143
5144 CURSOR get_gl_short_name_csr
5145 IS
5146 SELECT GL.SHORT_NAME
5147 FROM OKL_SYS_ACCT_OPTS SAO,
5148 GL_LEDGERS GL
5149 WHERE SAO.SET_OF_BOOKS_ID = GL.LEDGER_ID;
5150
5151 CURSOR get_trx_type(p_try_id NUMBER)
5152 IS
5153 SELECT TRY.AEP_CODE
5154 FROM OKL_TRX_TYPES_B TRY
5155 WHERE TRY.ID = p_try_id;
5156
5157 CURSOR get_acc_event_id(p_tcn_id IN NUMBER)
5158 IS
5159 SELECT distinct dist.accounting_event_id
5160 FROM okl_trns_acc_dstrs_all dist,
5161 okl_txl_cntrct_lns_all txl,
5162 okl_trx_contracts_all trx
5163 WHERE dist.source_id = txl.id
5164 AND txl.tcn_id = trx.id
5165 and trx.id = p_tcn_id;
5166
5167 CURSOR check_sources_csr(p_trx_header_id IN NUMBER)
5168 IS
5169 SELECT 1
5170 FROM OKL_EXT_AR_HEADER_SOURCES_B RXH
5171 WHERE RXH.SOURCE_ID = p_trx_header_id;
5172
5173 CURSOR check_ap_sources_csr(p_trx_header_id IN NUMBER)
5174 IS
5175 SELECT 1
5176 FROM OKL_EXT_AP_HEADER_SOURCES_B PXH
5177 WHERE PXH.SOURCE_ID = p_trx_header_id;
5178
5179 l_sources_exist VARCHAR2(1);
5180 --Bug 5707866 - End of Changes
5181
5182 BEGIN
5183 x_return_status := OKL_API.G_RET_STS_SUCCESS;
5184
5185 l_return_status := OKL_API.START_ACTIVITY(l_api_name,
5186 G_PKG_NAME,
5187 p_init_msg_list,
5188 l_api_version,
5189 p_api_version,
5190 '_PVT',
5191 x_return_status);
5192 IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
5193 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
5194 ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
5195 RAISE OKL_API.G_EXCEPTION_ERROR;
5196 END IF;
5197
5198 VALIDATE_IN_PARAMS(p_dist_info_tbl => p_dist_info_tbl
5199 ,p_tmpl_identify_tbl => p_tmpl_identify_tbl
5200 ,p_ctxt_val_tbl => p_ctxt_val_tbl
5201 ,p_acc_gen_primary_key_tbl => p_acc_gen_primary_key_tbl
5202 ,x_return_status => l_return_status
5203 );
5204
5205 IF (l_return_status <> OKL_API.G_RET_STS_SUCCESS) THEN
5206 RAISE OKL_API.G_EXCEPTION_ERROR;
5207 END IF;
5208
5209 -- get the representation attributes.. MG uptake
5210 get_rep_attributes;
5211
5212 IF NVL(p_trx_header_table, 'OKL_TXL_CNTRCT_LNS') = 'OKL_TXL_CNTRCT_LNS' then
5213 OPEN get_ledger_id_csr;
5214 FETCH get_ledger_id_csr INTO l_ledger_id;
5215 CLOSE get_ledger_id_csr;
5216 END IF;
5217
5218 IF l_ledger_id IS NOT NULL THEN
5219 g_representation_type := g_ledger_tbl(l_ledger_id).rep_type;
5220 g_ledger_id := l_ledger_id;
5221 ELSE
5222 g_representation_type := 'PRIMARY';
5223 g_ledger_id := okl_accounting_util.get_set_of_books_id;
5224 END IF;
5225
5226
5227 --Assigning the first template rec to a temporary rec
5228 l_temp_tmpl_rec := l_tmpl_identify_tbl(l_tmpl_identify_tbl.FIRST);
5229
5230 FOR i in l_dist_info_tbl.FIRST..l_dist_info_tbl.LAST
5231 LOOP
5232 IF (nvl(l_tmpl_identify_tbl(i).STREAM_TYPE_ID,1) = nvl(l_temp_tmpl_rec.STREAM_TYPE_ID,1)) AND
5233 (nvl(l_tmpl_identify_tbl(i).ADVANCE_ARREARS,1) = nvl(l_temp_tmpl_rec.ADVANCE_ARREARS,1)) AND
5234 (nvl(l_tmpl_identify_tbl(i).FACTORING_SYND_FLAG,1) = nvl(l_temp_tmpl_rec.FACTORING_SYND_FLAG,1)) AND
5235 (nvl(l_tmpl_identify_tbl(i).SYNDICATION_CODE,1) = nvl(l_temp_tmpl_rec.SYNDICATION_CODE,1)) AND
5236 (nvl(l_tmpl_identify_tbl(i).FACTORING_CODE,1) = nvl(l_temp_tmpl_rec.FACTORING_CODE,1)) AND
5237 (nvl(l_tmpl_identify_tbl(i).MEMO_YN,1) = nvl(l_temp_tmpl_rec.MEMO_YN,1)) AND
5238 (nvl(l_tmpl_identify_tbl(i).PRIOR_YEAR_YN,1) = nvl(l_temp_tmpl_rec.PRIOR_YEAR_YN,1)) AND
5239 (nvl(l_tmpl_identify_tbl(i).REV_REC_FLAG,1) = nvl(l_temp_tmpl_rec.REV_REC_FLAG,1))
5240 THEN
5241 l_dist_info_temp_tbl(l_count) := l_dist_info_tbl(i);
5242 IF (l_ctxt_val_tbl.count >0) THEN
5243 l_ctxt_val_temp_tbl(l_count) := l_ctxt_val_tbl(i);
5244 END IF;
5245 l_acc_gen_temp_tbl(l_count) := l_acc_gen_tbl(i);
5246 l_count := l_count + 1;
5247 ELSE
5248 CREATE_ACCOUNTING_DIST(p_api_version => p_api_version,
5249 p_init_msg_list => p_init_msg_list,
5250 x_return_status => x_return_status,
5251 x_msg_count => x_msg_count,
5252 x_msg_data => x_msg_data,
5253 p_tmpl_identify_rec => l_temp_tmpl_rec,
5254 p_dist_info_tbl => l_dist_info_temp_tbl,
5255 p_ctxt_val_tbl => l_ctxt_val_temp_tbl,
5256 p_acc_gen_primary_key_tbl => l_acc_gen_temp_tbl,
5257 x_template_tbl => x_template_temp_tbl,
5258 x_amount_tbl => x_amount_temp_tbl,
5259 x_tabv_tbl => x_tabv_temp_tbl);
5260
5261 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
5262 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
5263 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
5264 RAISE OKL_API.G_EXCEPTION_ERROR;
5265 END IF;
5266
5267 --The out parameters from each call are consolidated and built
5268 GET_FINAL_TEMPLATE_TBL(p_template_tbl => x_template_temp_tbl,
5269 x_template_tbl => x_template_tbl);
5270
5271 GET_FINAL_AMOUNT_TBL(p_amount_tbl => x_amount_temp_tbl,
5272 x_amount_tbl => x_amount_tbl);
5273
5274 GET_FINAL_TABV_TBL(p_tabv_tbl => x_tabv_temp_tbl,
5275 x_tabv_tbl => l_tabv_tbl_out);
5276
5277 --The existing temp tables need to be cleared and reassigned
5278 l_count := 0;
5279 l_dist_info_temp_tbl.DELETE;
5280 l_ctxt_val_temp_tbl.DELETE;
5281 l_acc_gen_temp_tbl.DELETE;
5282 l_temp_tmpl_rec := l_tmpl_identify_tbl(i);
5283
5284 l_dist_info_temp_tbl(l_count) := l_dist_info_tbl(i);
5285 IF (l_ctxt_val_tbl.count >0) THEN
5286 l_ctxt_val_temp_tbl(l_count) := l_ctxt_val_tbl(i);
5287 END IF;
5288 l_acc_gen_temp_tbl(l_count) := l_acc_gen_tbl(i);
5289 l_count := l_count + 1;
5290 END IF;
5291 END LOOP;
5292
5293 --Making the create_Dist call for the last record
5294 CREATE_ACCOUNTING_DIST(p_api_version => p_api_version,
5295 p_init_msg_list => p_init_msg_list,
5296 x_return_status => x_return_status,
5297 x_msg_count => x_msg_count,
5298 x_msg_data => x_msg_data,
5299 p_tmpl_identify_rec => l_temp_tmpl_rec,
5300 p_dist_info_tbl => l_dist_info_temp_tbl,
5301 p_ctxt_val_tbl => l_ctxt_val_temp_tbl,
5302 p_acc_gen_primary_key_tbl => l_acc_gen_temp_tbl,
5303 x_template_tbl => x_template_temp_tbl,
5304 x_amount_tbl => x_amount_temp_tbl,
5305 x_tabv_tbl => x_tabv_temp_tbl);
5306
5307 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
5308 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
5309 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
5310 RAISE OKL_API.G_EXCEPTION_ERROR;
5311 END IF;
5312
5313 --The out parameters from each call are consolidated and built
5314 GET_FINAL_TEMPLATE_TBL(p_template_tbl => x_template_temp_tbl,
5315 x_template_tbl => x_template_tbl);
5316
5317 GET_FINAL_AMOUNT_TBL(p_amount_tbl => x_amount_temp_tbl,
5318 x_amount_tbl => x_amount_tbl);
5319
5320 GET_FINAL_TABV_TBL(p_tabv_tbl => x_tabv_temp_tbl,
5321 x_tabv_tbl => l_tabv_tbl_out);
5322
5323 OPEN get_trx_type(l_temp_tmpl_rec.transaction_type_id);
5324 FETCH get_trx_type INTO l_try_name;
5325 CLOSE get_trx_type;
5326
5327 --Added by kthiruva on 03-Jul-2007
5328 --Event creation should be done only if there is atleast one transaction line evaluating to a non-zero amount
5329 --Sources need to be captured only for those transaction lines that evaluate to a non-zero amount
5330 --Bug 6134235 - Start of Changes
5331 GET_LINE_ID_TBL(p_amount_tbl => x_amount_tbl,
5332 x_line_tbl => l_line_tbl);
5333 --Bug 6134235 - End of Changes
5334
5335 --This cursor is used to determine ,if distributions already exist for the transaction id
5336 -- If an accounting event already exists , else we create a new event
5337 IF l_try_name IN ('RECEIPT_APPLICATION','PRINCIPAL_ADJUSTMENT','UPFRONT_TAX','BOOKING','TERMINATION',
5338 'ASSET_DISPOSITION','ACCRUAL','GENERAL_LOSS_PROVISION','SPECIFIC_LOSS_PROVISION','REBOOK','EVERGREEN',
5339 'RELEASE','INVESTOR','SPLIT_ASSET') AND (l_line_tbl.count > 0)
5340 THEN
5341 --Populated for the calls to delete/create Account Sources
5342 l_tcnv_rec.source_id := p_trx_header_id;
5343 l_tcnv_rec.source_table := 'OKL_TRX_CONTRACTS';
5344
5345 OPEN get_acc_event_id(p_trx_header_id);
5346 FETCH get_acc_event_id INTO l_event_id;
5347 CLOSE get_acc_event_id;
5348
5349 IF (l_event_id IS NOT NULL) THEN
5350 --Make the call to delete existing sources
5351 okl_sla_acc_sources_pvt.delete_trx_extension(
5352 p_api_version => l_api_version
5353 ,p_init_msg_list => l_init_msg_list
5354 ,p_trans_hdr_rec => l_tcnv_rec
5355 ,x_trans_line_tbl => x_tclv_tbl
5356 ,x_return_status => l_return_status
5357 ,x_msg_count => l_msg_count
5358 ,x_msg_data => l_msg_data
5359 );
5360
5361 IF (l_return_status = OKL_API.G_RET_STS_UNEXP_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_UNEXPECTED_ERROR;
5365 ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
5366 OKL_API.SET_MESSAGE(p_app_name => g_app_name
5367 ,p_msg_name => 'OKL_DEL_SOURCES_FAILED');
5368 RAISE OKL_API.G_EXCEPTION_ERROR;
5369 END IF;
5370 --As event_id is not found, we create a new event
5371 ELSE
5372 --The below code is not required after MG uptake.. racheruv
5373 --OPEN get_gl_short_name_csr;
5374 --FETCH get_gl_short_name_csr INTO l_gl_short_name;
5375 --CLOSE get_gl_short_name_csr;
5376
5377 -- set the representation code, which is used as the valuation method
5378 -- MG uptake.
5379 l_gl_short_name := g_ledger_tbl(g_ledger_id).rep_code;
5380
5381 IF l_gl_short_name IS NULL
5382 THEN
5383 OKL_API.SET_MESSAGE(p_app_name => g_app_name
5384 ,p_msg_name => 'OKL_GL_NOT_SET_FOR_ORG');
5385 RAISE OKL_API.G_EXCEPTION_ERROR;
5386 END IF;
5387
5388 l_event_id := OKL_XLA_EVENTS_PVT.create_event(p_api_version => l_api_version
5389 ,p_init_msg_list => l_init_msg_list
5390 ,x_return_status => l_return_status
5391 ,x_msg_count => l_msg_count
5392 ,x_msg_data => l_msg_data
5393 ,p_tcn_id => l_tcn_id
5394 ,p_gl_date => G_gl_date
5395 ,p_action_type => 'CREATE'
5396 ,p_representation_code => l_gl_short_name
5397 );
5398
5399 IF (l_return_status = OKL_API.G_RET_STS_UNEXP_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_UNEXPECTED_ERROR;
5403 ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
5404 OKL_API.SET_MESSAGE(p_app_name => g_app_name
5405 ,p_msg_name => 'OKL_CREATE_EVENT_FAILED');
5406 RAISE OKL_API.G_EXCEPTION_ERROR;
5407 END IF;
5408 END IF;--(IF l_event_id is null)
5409
5410 IF (l_tabv_tbl_out.count > 0) THEN
5411 --Populating the distribution table that needs to be updated with accounting_event_id
5412 FOR i IN l_tabv_tbl_out.FIRST..l_tabv_tbl_out.LAST
5413 LOOP
5414 l_tabv_tbl(i).id := l_tabv_tbl_out(i).id;
5415 l_tabv_tbl(i).accounting_event_id := l_event_id;
5416 --Once the event is created successfully in XLA, posted_yn flag is set to Y
5417 l_tabv_tbl(i).posted_yn := 'Y';
5418 END LOOP;
5419
5420 --Update the distributions created with the Accounting Event Id
5421 OKL_TRNS_ACC_DSTRS_PUB.update_trns_acc_dstrs(p_api_version => l_api_version
5422 ,p_init_msg_list => l_init_msg_list
5423 ,x_return_status => l_return_status
5424 ,x_msg_count => l_msg_count
5425 ,x_msg_data => l_msg_data
5426 ,p_tabv_tbl => l_tabv_tbl
5427 ,x_tabv_tbl => x_tabv_tbl
5428 );
5429
5430 IF (l_return_status = OKL_API.G_RET_STS_UNEXP_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_UNEXPECTED_ERROR;
5434 ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
5435 OKL_API.SET_MESSAGE(p_app_name => g_app_name
5436 ,p_msg_name => 'OKL_UPD_DIST_FAILED');
5437 RAISE OKL_API.G_EXCEPTION_ERROR;
5438 END IF;
5439 END IF;
5440
5441 IF p_dist_info_tbl.count = l_line_tbl.count THEN
5442 l_equal := true;
5443 END IF;
5444
5445 --Making the call to populate_Acct_sources to retreive the l_asev_rec to be passed to populate_sources
5446 FOR i in p_dist_info_tbl.FIRST..p_dist_info_tbl.LAST
5447 LOOP
5448 l_found := false;
5449 IF not(l_equal) THEN
5450 --If the l_line_tbl and p_dist_info_tbl count do not match, then there are some transaction lines of
5451 --zero amount. Therefore processing only those records in p_dist_info_tbl that exist in l_line_tbl
5452 --asev_rec needs to be fetched only for those lines in l_line_tbl
5453 FOR j in l_line_tbl.FIRST..l_line_tbl.LAST
5454 LOOP
5455 IF (p_dist_info_tbl(i).source_id = l_line_tbl(j)) THEN
5456 l_found := true;
5457 END IF;
5458 END LOOP;
5459 END IF;
5460
5461 IF (l_found) OR (l_equal) THEN
5462
5463 --The index i should refer to the corresponding records in p_dist_info_tbl, p_tmpl_identify_tbl and
5464 --p_acc_gen_primary_key_tbl.Hence the condition. If the condition returns false and the tables are
5465 --indexed differently, then in the ELSE part, we loop through the entire table and find a match on source_id
5466 IF p_acc_gen_primary_key_tbl(i).source_id = p_dist_info_tbl(i).source_id
5467 THEN
5468 l_acc_gen_key_tbl := p_acc_gen_primary_key_tbl(i).acc_gen_key_tbl;
5469 ELSE
5470 FOR j IN p_acc_gen_primary_key_tbl.FIRST..p_acc_gen_primary_key_tbl.LAST
5471 LOOP
5472 IF p_dist_info_tbl(i).source_id = p_acc_gen_primary_key_tbl(j).source_id
5473 THEN
5474 l_acc_gen_key_tbl := p_acc_gen_primary_key_tbl(j).acc_gen_key_tbl;
5475 EXIT;
5476 END IF;
5477 END LOOP;
5478 END IF;
5479
5480 POPULATE_ACCT_SOURCES(p_api_version => l_api_version,
5481 p_init_msg_list => l_init_msg_list,
5482 x_return_status => l_return_status,
5483 x_msg_count => l_msg_count,
5484 x_msg_data => l_msg_data,
5485 p_tmpl_identify_rec => p_tmpl_identify_tbl(i),
5486 p_dist_info_rec => p_dist_info_tbl(i),
5487 p_acc_gen_primary_key_tbl => l_acc_gen_key_tbl,
5488 x_asev_rec => l_asev_rec);
5489
5490 IF (l_return_status = OKL_API.G_RET_STS_UNEXP_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_UNEXPECTED_ERROR;
5494 ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
5495 OKL_API.SET_MESSAGE(p_app_name => g_app_name
5496 ,p_msg_name => 'OKL_SLA_SOURCES_FAILED');
5497 RAISE OKL_API.G_EXCEPTION_ERROR;
5498 END IF;
5499
5500 --Building the line table that needs to be sent to the populate sources_call
5501 l_tclv_tbl(l_asev_count).source_id := p_dist_info_tbl(i).source_id;
5502 l_tclv_tbl(l_asev_count).source_table := p_dist_info_tbl(i).source_table;
5503 --Building the asev_table
5504 l_asev_tbl(l_asev_count) := l_asev_rec;
5505 l_asev_count := l_asev_count + 1;
5506 END IF; --(if l_found)
5507 END LOOP;
5508
5509 --Make the call to capture accounting sources for the header for OKL trasaction types only
5510 OKL_SLA_ACC_SOURCES_PVT.populate_sources
5511 (p_api_version => l_api_version
5512 ,p_init_msg_list => l_init_msg_list
5513 ,p_trans_hdr_rec => l_tcnv_rec
5514 ,p_trans_line_tbl => l_tclv_tbl
5515 ,p_acc_sources_tbl => l_asev_tbl
5516 ,x_return_status => l_return_status
5517 ,x_msg_count => l_msg_count
5518 ,x_msg_data => l_msg_data);
5519
5520
5521 IF (l_return_status = OKL_API.G_RET_STS_UNEXP_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_UNEXPECTED_ERROR;
5525 ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
5526 OKL_API.SET_MESSAGE(p_app_name => g_app_name
5527 ,p_msg_name => 'OKL_SLA_SOURCES_FAILED');
5528 RAISE OKL_API.G_EXCEPTION_ERROR;
5529 END IF;
5530 --If the accounting engine call is being made for a billing transaction , then sources need to be
5531 --captured at the header and line level. However, for AR transactions, events are not created by OKL
5532 ELSIF l_try_name IN ('BILLING','CREDIT_MEMO','ROLLOVER_BILLING','ROLLOVER_CREDITMEMO',
5533 'RELEASE_BILLING','RELEASE_CREDITMEMO') AND (l_line_tbl.count > 0) THEN
5534
5535 --Populated for the calls to delete/create Account Sources
5536 l_rxhv_rec.source_id := p_trx_header_id;
5537 --For AR And AP transactions, p_trx_header_table needs to be passed always.
5538 --Its optional only for OKL Transactions
5539 IF p_trx_header_table IS NULL THEN
5540 Okl_Api.set_message(G_APP_NAME,
5541 G_INVALID_VALUE,
5542 G_COL_NAME_TOKEN,
5543 'SOURCE_TABLE');
5544 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
5545 END IF;
5546 l_rxhv_rec.source_table := p_trx_header_table;
5547
5548 --Cursor to check if sources already exist for the transaction. IF so , the transaction is being updated
5549 --and therefore, existing sources need to be deleted and re-captured.
5550 OPEN check_sources_csr(p_trx_header_id);
5551 FETCH check_sources_csr INTO l_sources_exist;
5552 IF (check_sources_csr%FOUND) THEN
5553 --Make the call to delete existing sources
5554 okl_sla_acc_sources_pvt.delete_ar_extension(
5555 p_api_version => l_api_version
5556 ,p_init_msg_list => l_init_msg_list
5557 ,p_rxhv_rec => l_rxhv_rec
5558 ,x_rxlv_tbl => x_rxlv_tbl
5559 ,x_return_status => l_return_status
5560 ,x_msg_count => l_msg_count
5561 ,x_msg_data => l_msg_data
5562 );
5563
5564 IF (l_return_status = OKL_API.G_RET_STS_UNEXP_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_UNEXPECTED_ERROR;
5568 ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
5569 OKL_API.SET_MESSAGE(p_app_name => g_app_name
5570 ,p_msg_name => 'OKL_DEL_SOURCES_FAILED');
5571 RAISE OKL_API.G_EXCEPTION_ERROR;
5572 END IF;
5573 END IF;--(IF l_event_id is null)
5574 CLOSE check_sources_csr;
5575
5576 IF p_dist_info_tbl.count = l_line_tbl.count THEN
5577 l_equal := true;
5578 END IF;
5579
5580 --Making the call to populate_Acct_sources to retreive the l_asev_rec to be passed to populate_sources
5581 FOR i in p_dist_info_tbl.FIRST..p_dist_info_tbl.LAST
5582 LOOP
5583 l_found := false;
5584 IF not(l_equal) THEN
5585 --If the l_line_tbl and p_dist_info_tbl count do not match, then there are some transaction lines of
5586 --zero amount. Therefore processing only those records in p_dist_info_tbl that exist in l_line_tbl
5587 --asev_rec needs to be fetched only for those lines in l_line_tbl
5588 FOR j in l_line_tbl.FIRST..l_line_tbl.LAST
5589 LOOP
5590 IF (p_dist_info_tbl(i).source_id = l_line_tbl(j)) THEN
5591 l_found := true;
5592 END IF;
5593 END LOOP;
5594 END IF;
5595
5596 IF (l_found) OR (l_equal) THEN
5597
5598 --The index i should refer to the corresponding records in p_dist_info_tbl, p_tmpl_identify_tbl and
5599 --p_acc_gen_primary_key_tbl.Hence the condition. If the condition returns false and the tables are
5600 --indexed differently, then in the ELSE part, we loop through the entire table and find a match on source_id
5601 IF p_acc_gen_primary_key_tbl(i).source_id = p_dist_info_tbl(i).source_id
5602 THEN
5603 l_acc_gen_key_tbl := p_acc_gen_primary_key_tbl(i).acc_gen_key_tbl;
5604 ELSE
5605 FOR j IN p_acc_gen_primary_key_tbl.FIRST..p_acc_gen_primary_key_tbl.LAST
5606 LOOP
5607 IF p_dist_info_tbl(i).source_id = p_acc_gen_primary_key_tbl(j).source_id
5608 THEN
5609 l_acc_gen_key_tbl := p_acc_gen_primary_key_tbl(j).acc_gen_key_tbl;
5610 EXIT;
5611 END IF;
5612 END LOOP;
5613 END IF;
5614
5615 POPULATE_ACCT_SOURCES(p_api_version => l_api_version,
5616 p_init_msg_list => l_init_msg_list,
5617 x_return_status => l_return_status,
5618 x_msg_count => l_msg_count,
5619 x_msg_data => l_msg_data,
5620 p_tmpl_identify_rec => p_tmpl_identify_tbl(i),
5621 p_dist_info_rec => p_dist_info_tbl(i),
5622 p_acc_gen_primary_key_tbl => l_acc_gen_key_tbl,
5623 x_asev_rec => l_asev_rec);
5624
5625 IF (l_return_status = OKL_API.G_RET_STS_UNEXP_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_UNEXPECTED_ERROR;
5629 ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
5630 OKL_API.SET_MESSAGE(p_app_name => g_app_name
5631 ,p_msg_name => 'OKL_SLA_SOURCES_FAILED');
5632 RAISE OKL_API.G_EXCEPTION_ERROR;
5633 END IF;
5634
5635 --Building the line table that needs to be sent to the populate sources_call
5636 l_rxlv_tbl(l_asev_count).source_id := p_dist_info_tbl(i).source_id;
5637 l_rxlv_tbl(l_asev_count).source_table := p_dist_info_tbl(i).source_table;
5638
5639 l_asev_tbl(l_asev_count) := l_asev_rec;
5640 l_asev_count := l_asev_count + 1;
5641 END IF; --(if l_found)
5642 END LOOP;
5643
5644 --Make the call to capture accounting sources for the header for OKL trasaction types only
5645 OKL_SLA_ACC_SOURCES_PVT.populate_sources
5646 (p_api_version => l_api_version
5647 ,p_init_msg_list => l_init_msg_list
5648 ,p_rxhv_rec => l_rxhv_rec
5649 ,p_rxlv_tbl => l_rxlv_tbl
5650 ,p_acc_sources_tbl => l_asev_tbl
5651 ,x_return_status => l_return_status
5652 ,x_msg_count => l_msg_count
5653 ,x_msg_data => l_msg_data);
5654
5655
5656 IF (l_return_status = OKL_API.G_RET_STS_UNEXP_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_UNEXPECTED_ERROR;
5660 ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
5661 OKL_API.SET_MESSAGE(p_app_name => g_app_name
5662 ,p_msg_name => 'OKL_SLA_SOURCES_FAILED');
5663 RAISE OKL_API.G_EXCEPTION_ERROR;
5664 END IF;
5665
5666 --Bug 6316320 dpsingh start
5667 --If the accounting engine call is being made for a adjustment transaction , then sources need to be
5668 --captured at the header and line level. However, for AR transactions, events are not created by OKL
5669 ELSIF l_try_name IN ( 'BALANCE_WRITE_OFF' ,'ADJUSTMENTS') AND (l_line_tbl.count > 0) THEN
5670
5671 --Populated for the calls to delete/create Account Sources
5672 l_rxhv_adj_rec.source_id := p_trx_header_id;
5673 --For AR And AP transactions, p_trx_header_table needs to be passed always.
5674 --Its optional only for OKL Transactions
5675 IF p_trx_header_table IS NULL THEN
5676 Okl_Api.set_message(G_APP_NAME,
5677 G_INVALID_VALUE,
5678 G_COL_NAME_TOKEN,
5679 'SOURCE_TABLE');
5680 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
5681 END IF;
5682 l_rxhv_adj_rec.source_table := p_trx_header_table;
5683
5684 --Cursor to check if sources already exist for the transaction. IF so , the transaction is being updated
5685 --and therefore, existing sources need to be deleted and re-captured.
5686 OPEN check_sources_csr(p_trx_header_id);
5687 FETCH check_sources_csr INTO l_sources_exist;
5688 IF (check_sources_csr%FOUND) THEN
5689 --Make the call to delete existing sources
5690 okl_sla_acc_sources_pvt.delete_ar_extension(
5691 p_api_version => l_api_version
5692 ,p_init_msg_list => l_init_msg_list
5693 ,p_rxhv_rec => l_rxhv_adj_rec
5694 ,x_rxlv_tbl => x_rxlv_adj_tbl
5695 ,x_return_status => l_return_status
5696 ,x_msg_count => l_msg_count
5697 ,x_msg_data => l_msg_data
5698 );
5699
5700 IF (l_return_status = OKL_API.G_RET_STS_UNEXP_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_UNEXPECTED_ERROR;
5704 ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
5705 OKL_API.SET_MESSAGE(p_app_name => g_app_name
5706 ,p_msg_name => 'OKL_DEL_SOURCES_FAILED');
5707 RAISE OKL_API.G_EXCEPTION_ERROR;
5708 END IF;
5709 END IF;--(IF l_event_id is null)
5710 CLOSE check_sources_csr;
5711
5712 IF p_dist_info_tbl.count = l_line_tbl.count THEN
5713 l_equal := true;
5714 END IF;
5715
5716 --Making the call to populate_Acct_sources to retreive the l_asev_rec to be passed to populate_sources
5717 FOR i in p_dist_info_tbl.FIRST..p_dist_info_tbl.LAST
5718 LOOP
5719 l_found := false;
5720 IF not(l_equal) THEN
5721 --If the l_line_tbl and p_dist_info_tbl count do not match, then there are some transaction lines of
5722 --zero amount. Therefore processing only those records in p_dist_info_tbl that exist in l_line_tbl
5723 --asev_rec needs to be fetched only for those lines in l_line_tbl
5724 FOR j in l_line_tbl.FIRST..l_line_tbl.LAST
5725 LOOP
5726 IF (p_dist_info_tbl(i).source_id = l_line_tbl(j)) THEN
5727 l_found := true;
5728 END IF;
5729 END LOOP;
5730 END IF;
5731
5732 IF (l_found) OR (l_equal) THEN
5733
5734 --The index i should refer to the corresponding records in p_dist_info_tbl, p_tmpl_identify_tbl and
5735 --p_acc_gen_primary_key_tbl.Hence the condition. If the condition returns false and the tables are
5736 --indexed differently, then in the ELSE part, we loop through the entire table and find a match on source_id
5737 IF p_acc_gen_primary_key_tbl(i).source_id = p_dist_info_tbl(i).source_id
5738 THEN
5739 l_acc_gen_key_tbl := p_acc_gen_primary_key_tbl(i).acc_gen_key_tbl;
5740 ELSE
5741 FOR j IN p_acc_gen_primary_key_tbl.FIRST..p_acc_gen_primary_key_tbl.LAST
5742 LOOP
5743 IF p_dist_info_tbl(i).source_id = p_acc_gen_primary_key_tbl(j).source_id
5744 THEN
5745 l_acc_gen_key_tbl := p_acc_gen_primary_key_tbl(j).acc_gen_key_tbl;
5746 EXIT;
5747 END IF;
5748 END LOOP;
5749 END IF;
5750
5751 POPULATE_ACCT_SOURCES(p_api_version => l_api_version,
5752 p_init_msg_list => l_init_msg_list,
5753 x_return_status => l_return_status,
5754 x_msg_count => l_msg_count,
5755 x_msg_data => l_msg_data,
5756 p_tmpl_identify_rec => p_tmpl_identify_tbl(i),
5757 p_dist_info_rec => p_dist_info_tbl(i),
5758 p_acc_gen_primary_key_tbl => l_acc_gen_key_tbl,
5759 x_asev_rec => l_asev_rec);
5760
5761 IF (l_return_status = OKL_API.G_RET_STS_UNEXP_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_UNEXPECTED_ERROR;
5765 ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
5766 OKL_API.SET_MESSAGE(p_app_name => g_app_name
5767 ,p_msg_name => 'OKL_SLA_SOURCES_FAILED');
5768 RAISE OKL_API.G_EXCEPTION_ERROR;
5769 END IF;
5770
5771 --Building the line table that needs to be sent to the populate sources_call
5772 l_rxlv_adj_tbl(l_asev_count).source_id := p_dist_info_tbl(i).source_id;
5773 l_rxlv_adj_tbl(l_asev_count).source_table := p_dist_info_tbl(i).source_table;
5774
5775 l_asev_tbl(l_asev_count) := l_asev_rec;
5776 l_asev_count := l_asev_count + 1;
5777 END IF; --(if l_found)
5778 END LOOP;
5779
5780 --Make the call to capture accounting sources for the header for OKL trasaction types only
5781 OKL_SLA_ACC_SOURCES_PVT.populate_sources
5782 (p_api_version => l_api_version
5783 ,p_init_msg_list => l_init_msg_list
5784 ,p_rxhv_rec => l_rxhv_adj_rec
5785 ,p_rxlv_tbl => l_rxlv_adj_tbl
5786 ,p_acc_sources_tbl => l_asev_tbl
5787 ,x_return_status => l_return_status
5788 ,x_msg_count => l_msg_count
5789 ,x_msg_data => l_msg_data);
5790
5791 IF (l_return_status = OKL_API.G_RET_STS_UNEXP_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_UNEXPECTED_ERROR;
5795 ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
5796 OKL_API.SET_MESSAGE(p_app_name => g_app_name
5797 ,p_msg_name => 'OKL_SLA_SOURCES_FAILED');
5798 RAISE OKL_API.G_EXCEPTION_ERROR;
5799 END IF;
5800 --Bug 6316320 dpsingh end
5801 --If the accounting engine call is being made for an AP transaction , then sources need to be
5802 --captured at the header and line level. However, for AP transactions, events are not created by OKL
5803 ELSIF l_try_name IN ('DISBURSEMENT','FUNDING','DEBIT_NOTE') AND (l_line_tbl.count > 0) THEN
5804
5805 --Populated for the calls to delete/create Account Sources
5806 l_pxhv_rec.source_id := p_trx_header_id;
5807 --For AR And AP transactions, p_trx_header_table needs to be passed always.
5808 --Its optional only for OKL Transactions
5809 IF p_trx_header_table IS NULL THEN
5810 Okl_Api.set_message(G_APP_NAME,
5811 G_INVALID_VALUE,
5812 G_COL_NAME_TOKEN,
5813 'SOURCE_TABLE');
5814 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
5815 END IF;
5816 l_pxhv_rec.source_table := p_trx_header_table;
5817
5818 --Cursor to check if sources already exist for the transaction. IF so , the transaction is being updated
5819 --and therefore, existing sources need to be deleted and re-captured.
5820 OPEN check_ap_sources_csr(p_trx_header_id);
5821 FETCH check_ap_sources_csr INTO l_sources_exist;
5822 IF (check_ap_sources_csr%FOUND) THEN
5823 --Make the call to delete existing sources
5824 okl_sla_acc_sources_pvt.delete_ap_extension(
5825 p_api_version => l_api_version
5826 ,p_init_msg_list => l_init_msg_list
5827 ,p_pxhv_rec => l_pxhv_rec
5828 ,x_pxlv_tbl => x_pxlv_tbl
5829 ,x_return_status => l_return_status
5830 ,x_msg_count => l_msg_count
5831 ,x_msg_data => l_msg_data
5832 );
5833
5834 IF (l_return_status = OKL_API.G_RET_STS_UNEXP_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_UNEXPECTED_ERROR;
5838 ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
5839 OKL_API.SET_MESSAGE(p_app_name => g_app_name
5840 ,p_msg_name => 'OKL_DEL_SOURCES_FAILED');
5841 RAISE OKL_API.G_EXCEPTION_ERROR;
5842 END IF;
5843 END IF;
5844 CLOSE check_ap_sources_csr;
5845
5846 IF p_dist_info_tbl.count = l_line_tbl.count THEN
5847 l_equal := true;
5848 END IF;
5849
5850 --Making the call to populate_Acct_sources to retreive the l_asev_rec to be passed to populate_sources
5851 FOR i in p_dist_info_tbl.FIRST..p_dist_info_tbl.LAST
5852 LOOP
5853 l_found := false;
5854 IF not(l_equal) THEN
5855 --If the l_line_tbl and p_dist_info_tbl count do not match, then there are some transaction lines of
5856 --zero amount. Therefore processing only those records in p_dist_info_tbl that exist in l_line_tbl
5857 --asev_rec needs to be fetched only for those lines in l_line_tbl
5858 FOR j in l_line_tbl.FIRST..l_line_tbl.LAST
5859 LOOP
5860 IF (p_dist_info_tbl(i).source_id = l_line_tbl(j)) THEN
5861 l_found := true;
5862 END IF;
5863 END LOOP;
5864 END IF;
5865
5866 IF (l_found) OR (l_equal) THEN
5867
5868 --The index i should refer to the corresponding records in p_dist_info_tbl, p_tmpl_identify_tbl and
5869 --p_acc_gen_primary_key_tbl.Hence the condition. If the condition returns false and the tables are
5870 --indexed differently, then in the ELSE part, we loop through the entire table and find a match on source_id
5871 IF p_acc_gen_primary_key_tbl(i).source_id = p_dist_info_tbl(i).source_id
5872 THEN
5873 l_acc_gen_key_tbl := p_acc_gen_primary_key_tbl(i).acc_gen_key_tbl;
5874 ELSE
5875 FOR j IN p_acc_gen_primary_key_tbl.FIRST..p_acc_gen_primary_key_tbl.LAST
5876 LOOP
5877 IF p_dist_info_tbl(i).source_id = p_acc_gen_primary_key_tbl(j).source_id
5878 THEN
5879 l_acc_gen_key_tbl := p_acc_gen_primary_key_tbl(j).acc_gen_key_tbl;
5880 EXIT;
5881 END IF;
5882 END LOOP;
5883 END IF;
5884
5885 POPULATE_ACCT_SOURCES(p_api_version => l_api_version,
5886 p_init_msg_list => l_init_msg_list,
5887 x_return_status => l_return_status,
5888 x_msg_count => l_msg_count,
5889 x_msg_data => l_msg_data,
5890 p_tmpl_identify_rec => p_tmpl_identify_tbl(i),
5891 p_dist_info_rec => p_dist_info_tbl(i),
5892 p_acc_gen_primary_key_tbl => l_acc_gen_key_tbl,
5893 x_asev_rec => l_asev_rec);
5894
5895 IF (l_return_status = OKL_API.G_RET_STS_UNEXP_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_UNEXPECTED_ERROR;
5899 ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
5900 OKL_API.SET_MESSAGE(p_app_name => g_app_name
5901 ,p_msg_name => 'OKL_SLA_SOURCES_FAILED');
5902 RAISE OKL_API.G_EXCEPTION_ERROR;
5903 END IF;
5904
5905 --Building the line table that needs to be sent to the populate sources_call
5906 l_pxlv_tbl(l_asev_count).source_id := p_dist_info_tbl(i).source_id;
5907 l_pxlv_tbl(l_asev_count).source_table := p_dist_info_tbl(i).source_table;
5908
5909 l_asev_tbl(l_asev_count) := l_asev_rec;
5910 l_asev_count := l_asev_count + 1;
5911 END IF; --(if l_found)
5912 END LOOP;
5913
5914 --Make the call to capture accounting sources for the header for OKL trasaction types only
5915 OKL_SLA_ACC_SOURCES_PVT.populate_sources
5916 (p_api_version => l_api_version
5917 ,p_init_msg_list => l_init_msg_list
5918 ,p_pxhv_rec => l_pxhv_rec
5919 ,p_pxlv_tbl => l_pxlv_tbl
5920 ,p_acc_sources_tbl => l_asev_tbl
5921 ,x_return_status => l_return_status
5922 ,x_msg_count => l_msg_count
5923 ,x_msg_data => l_msg_data);
5924
5925
5926 IF (l_return_status = OKL_API.G_RET_STS_UNEXP_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_UNEXPECTED_ERROR;
5930 ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
5931 OKL_API.SET_MESSAGE(p_app_name => g_app_name
5932 ,p_msg_name => 'OKL_SLA_SOURCES_FAILED');
5933 RAISE OKL_API.G_EXCEPTION_ERROR;
5934 END IF;
5935 END IF;
5936
5937 OKL_API.END_ACTIVITY(x_msg_count, x_msg_data);
5938
5939 EXCEPTION
5940
5941 WHEN OKL_API.G_EXCEPTION_ERROR THEN
5942 x_return_status := OKL_API.HANDLE_EXCEPTIONS
5943 ( l_api_name,
5944 G_PKG_NAME,
5945 'OKL_API.G_RET_STS_ERROR',
5946 x_msg_count,
5947 x_msg_data,
5948 '_PVT'
5949 );
5950 WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
5951 x_return_status := OKL_API.HANDLE_EXCEPTIONS
5952 ( l_api_name,
5953 G_PKG_NAME,
5954 'OKL_API.G_RET_STS_UNEXP_ERROR',
5955 x_msg_count,
5956 x_msg_data,
5957 '_PVT'
5958 );
5959 WHEN OTHERS THEN
5960 x_return_status := OKL_API.HANDLE_EXCEPTIONS
5961 ( l_api_name,
5962 G_PKG_NAME,
5963 'OTHERS',
5964 x_msg_count,
5965 x_msg_data,
5966 '_PVT'
5967 );
5968
5969 END CREATE_ACCOUNTING_DIST;
5970
5971 PROCEDURE REVERSE_ENTRIES(p_api_version IN NUMBER,
5972 p_init_msg_list IN VARCHAR2,
5973 x_return_status OUT NOCOPY VARCHAR2,
5974 x_msg_count OUT NOCOPY NUMBER,
5975 x_msg_data OUT NOCOPY VARCHAR2,
5976 p_source_id IN NUMBER,
5977 p_source_table IN VARCHAR2,
5978 p_acct_date IN DATE)
5979 IS
5980
5981 BEGIN
5982
5983 -- Start of wraper code generated automatically by Debug code generator for OKL_REVERSAL_PUB.REVERSE_ENTRIES
5984 IF(L_DEBUG_ENABLED='Y') THEN
5985 L_LEVEL_PROCEDURE :=FND_LOG.LEVEL_PROCEDURE;
5986 IS_DEBUG_PROCEDURE_ON := OKL_DEBUG_PUB.Check_Log_On(L_MODULE, L_LEVEL_PROCEDURE);
5987 END IF;
5988 IF(IS_DEBUG_PROCEDURE_ON) THEN
5989 BEGIN
5990 OKL_DEBUG_PUB.LOG_DEBUG(L_LEVEL_PROCEDURE,L_MODULE,'Begin Debug OKLRTDTB.pls call OKL_REVERSAL_PUB.REVERSE_ENTRIES ');
5991 END;
5992 END IF;
5993 OKL_REVERSAL_PUB.REVERSE_ENTRIES(p_api_version => p_api_version,
5994 p_init_msg_list => p_init_msg_list,
5995 x_return_status => x_return_status,
5996 x_msg_count => x_msg_count,
5997 x_msg_data => x_msg_data,
5998 p_source_id => p_source_id,
5999 p_source_table => p_source_table,
6000 p_acct_date => p_acct_date);
6001 IF(IS_DEBUG_PROCEDURE_ON) THEN
6002 BEGIN
6003 OKL_DEBUG_PUB.LOG_DEBUG(L_LEVEL_PROCEDURE,L_MODULE,'End Debug OKLRTDTB.pls call OKL_REVERSAL_PUB.REVERSE_ENTRIES ');
6004 END;
6005 END IF;
6006 -- End of wraper code generated automatically by Debug code generator for OKL_REVERSAL_PUB.REVERSE_ENTRIES
6007
6008
6009
6010 END REVERSE_ENTRIES;
6011
6012
6013
6014 PROCEDURE DELETE_ACCT_ENTRIES(p_api_version IN NUMBER,
6015 p_init_msg_list IN VARCHAR2,
6016 x_return_status OUT NOCOPY VARCHAR2,
6017 x_msg_count OUT NOCOPY NUMBER,
6018 x_msg_data OUT NOCOPY VARCHAR2,
6019 p_source_id IN NUMBER,
6020 p_source_table IN VARCHAR2)
6021 IS
6022
6023
6024
6025 l_return_status VARCHAR2(1) := OKL_API.G_RET_STS_SUCCESS;
6026 l_api_name VARCHAR2(30) := 'DELETE_ACCT_ENTRIES';
6027 l_api_version NUMBER := 1.0;
6028 l_check_Status NUMBER := 0;
6029
6030
6031 BEGIN
6032
6033 x_return_status := OKL_API.G_RET_STS_SUCCESS;
6034
6035 l_return_status := OKL_API.START_ACTIVITY(l_api_name,
6036 G_PKG_NAME,
6037 p_init_msg_list,
6038 l_api_version,
6039 p_api_version,
6040 '_PVT',
6041 x_return_status);
6042 IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
6043 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
6044 ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
6045 RAISE OKL_API.G_EXCEPTION_ERROR;
6046 END IF;
6047
6048 -- Check the Distribution Status and take appropriate Action
6049 l_check_status := CHECK_JOURNAL(p_source_id => p_source_id,
6050 p_source_table => p_source_table);
6051
6052 -- l_check_status = 1 denotes that the distributions in OKL exist, but journals have not yet been created in SLA
6053 -- l_check_status = 2 denotes that the distributions exist in OKL , and journals have been created in SLA
6054
6055
6056 IF (l_check_status = 1) THEN
6057 -- Delete from Distributions
6058 DELETE_DIST_AE(p_flag => 'DIST',
6059 p_source_id => p_source_id,
6060 p_source_table => p_source_table,
6061 x_return_status => l_return_status);
6062
6063 IF (l_return_status <> OKL_API.G_RET_STS_SUCCESS) THEN
6064 RAISE OKL_API.G_EXCEPTION_ERROR;
6065 END IF;
6066 END IF;
6067
6068 IF (l_check_status = 2) THEN
6069 OKL_API.SET_MESSAGE(p_app_name => g_app_name,
6070 p_msg_name => 'OKL_AE_GONE_TO_SLA');
6071 RAISE OKL_API.G_EXCEPTION_ERROR;
6072 END IF;
6073
6074
6075 OKL_API.END_ACTIVITY(x_msg_count, x_msg_data);
6076
6077 x_return_status := OKL_API.G_RET_STS_SUCCESS;
6078
6079 EXCEPTION
6080
6081 WHEN OKL_API.G_EXCEPTION_ERROR THEN
6082 x_return_status := OKL_API.HANDLE_EXCEPTIONS
6083 ( l_api_name,
6084 G_PKG_NAME,
6085 'OKL_API.G_RET_STS_ERROR',
6086 x_msg_count,
6087 x_msg_data,
6088 '_PVT'
6089 );
6090 WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
6091 x_return_status := OKL_API.HANDLE_EXCEPTIONS
6092 ( l_api_name,
6093 G_PKG_NAME,
6094 'OKL_API.G_RET_STS_UNEXP_ERROR',
6095 x_msg_count,
6096 x_msg_data,
6097 '_PVT'
6098 );
6099 WHEN OTHERS THEN
6100 x_return_status := OKL_API.HANDLE_EXCEPTIONS
6101 ( l_api_name,
6102 G_PKG_NAME,
6103 'OTHERS',
6104 x_msg_count,
6105 x_msg_data,
6106 '_PVT'
6107 );
6108
6109
6110 END DELETE_ACCT_ENTRIES;
6111
6112 PROCEDURE CREATE_ACCOUNTING_DIST(p_api_version IN NUMBER,
6113 p_init_msg_list IN VARCHAR2,
6114 x_return_status OUT NOCOPY VARCHAR2,
6115 x_msg_count OUT NOCOPY NUMBER,
6116 x_msg_data OUT NOCOPY VARCHAR2,
6117 p_tmpl_identify_rec IN TMPL_IDENTIFY_REC_TYPE,
6118 p_dist_info_rec IN DIST_INFO_REC_TYPE,
6119 p_ctxt_val_tbl IN CTXT_VAL_TBL_TYPE,
6120 p_acc_gen_primary_key_tbl IN acc_gen_primary_key,
6121 x_template_tbl OUT NOCOPY AVLV_TBL_TYPE,
6122 x_amount_tbl OUT NOCOPY AMOUNT_TBL_TYPE,
6123 x_gl_date OUT NOCOPY DATE)
6124 IS
6125 BEGIN
6126
6127 CREATE_ACCOUNTING_DIST(p_api_version => p_api_version,
6128 p_init_msg_list => p_init_msg_list,
6129 x_return_status => x_return_status,
6130 x_msg_count => x_msg_count,
6131 x_msg_data => x_msg_data,
6132 p_tmpl_identify_rec => p_tmpl_identify_rec,
6133 p_dist_info_rec => p_dist_info_rec,
6134 p_ctxt_val_tbl => p_ctxt_val_tbl,
6135 p_acc_gen_primary_key_tbl => p_acc_gen_primary_key_tbl,
6136 x_template_tbl => x_template_tbl,
6137 x_amount_tbl => x_amount_tbl);
6138
6139 x_gl_date := G_gl_date;
6140
6141 END CREATE_ACCOUNTING_DIST;
6142
6143 -- Added by Santonyr on 12-Jul-2440 for the bug 3761026
6144
6145 PROCEDURE POPULATE_ACCT_SOURCES(p_api_version IN NUMBER,
6146 p_init_msg_list IN VARCHAR2,
6147 x_return_status OUT NOCOPY VARCHAR2,
6148 x_msg_count OUT NOCOPY NUMBER,
6149 x_msg_data OUT NOCOPY VARCHAR2,
6150 p_tmpl_identify_rec IN TMPL_IDENTIFY_REC_TYPE,
6151 p_dist_info_rec IN DIST_INFO_REC_TYPE,
6152 p_acc_gen_primary_key_tbl IN acc_gen_primary_key,
6153 p_template_amount_tbl IN template_amount_tbl_type)
6154 IS
6155
6156 l_return_status VARCHAR2(1) := Okl_Api.G_RET_STS_SUCCESS;
6157 l_api_name VARCHAR2(30) := 'POPULATE_ACCT_SOURCES';
6158 l_api_version NUMBER := 1.0;
6159
6160 l_init_msg_list VARCHAR2(1) := Okl_Api.G_FALSE;
6161 l_msg_count NUMBER := 0;
6162 l_msg_data VARCHAR2(2000);
6163
6164
6165 l_pay_vendor_sites_pk VARCHAR2(50);
6166 l_rec_site_uses_pk VARCHAR2(50);
6167 l_asset_category_id_pk1 VARCHAR2(50);
6168 l_asset_book_pk2 VARCHAR2(50);
6169 l_pay_financial_options_pk VARCHAR2(50);
6170 l_jtf_sales_reps_pk VARCHAR2(50);
6171 l_inventory_item_id_pk1 VARCHAR2(50);
6172 l_inventory_org_id_pk2 VARCHAR2(50);
6173 l_rec_trx_types_pk VARCHAR2(50);
6174 l_factor_investor_code VARCHAR2(30);
6175
6176 l_asev_tbl asev_tbl_type;
6177 x_asev_tbl asev_tbl_type;
6178
6179 BEGIN
6180
6181 x_return_status := Okl_Api.G_RET_STS_SUCCESS;
6182
6183 l_return_status := Okl_Api.START_ACTIVITY(l_api_name,
6184 G_PKG_NAME,
6185 p_init_msg_list,
6186 l_api_version,
6187 p_api_version,
6188 '_PVT',
6189 x_return_status);
6190 IF (l_return_status = Okl_Api.G_RET_STS_UNEXP_ERROR) THEN
6191 RAISE Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR;
6192 ELSIF (l_return_status = Okl_Api.G_RET_STS_ERROR) THEN
6193 RAISE Okl_Api.G_EXCEPTION_ERROR;
6194 END IF;
6195
6196
6197 -- Extract the account generator sources from account generator primary key table.
6198
6199 IF p_acc_gen_primary_key_tbl.COUNT > 0 THEN
6200
6201 FOR j IN p_acc_gen_primary_key_tbl.FIRST..p_acc_gen_primary_key_tbl.LAST LOOP
6202
6203 IF p_acc_gen_primary_key_tbl(j).source_table = 'AP_VENDOR_SITES_V' THEN
6204 l_pay_vendor_sites_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 = 'AR_SITE_USES_V' THEN
6208 l_rec_site_uses_pk := TRIM(p_acc_gen_primary_key_tbl(j).primary_key_column);
6209
6210
6211 ELSIF p_acc_gen_primary_key_tbl(j).source_table = 'FA_CATEGORY_BOOKS' THEN
6212 l_asset_category_id_pk1 := TRIM(SUBSTR(p_acc_gen_primary_key_tbl(j).primary_key_column,1, 50));
6213 l_asset_book_pk2 := TRIM(SUBSTR(p_acc_gen_primary_key_tbl(j).primary_key_column,51, 100));
6214
6215
6216 ELSIF p_acc_gen_primary_key_tbl(j).source_table = 'FINANCIALS_SYSTEM_PARAMETERS' THEN
6217 l_pay_financial_options_pk := TRIM(p_acc_gen_primary_key_tbl(j).primary_key_column);
6218
6219 ELSIF p_acc_gen_primary_key_tbl(j).source_table = 'JTF_RS_SALESREPS_MO_V' THEN
6220 l_jtf_sales_reps_pk := TRIM(p_acc_gen_primary_key_tbl(j).primary_key_column);
6221
6222
6223 ELSIF p_acc_gen_primary_key_tbl(j).source_table = 'MTL_SYSTEM_ITEMS_VL' THEN
6224 l_inventory_item_id_pk1 := TRIM(SUBSTR(p_acc_gen_primary_key_tbl(j).primary_key_column,1, 50));
6225 l_inventory_org_id_pk2 := TRIM(SUBSTR(p_acc_gen_primary_key_tbl(j).primary_key_column,51, 100));
6226
6227 ELSIF p_acc_gen_primary_key_tbl(j).source_table = 'RA_CUST_TRX_TYPES' THEN
6228 l_rec_trx_types_pk := TRIM(p_acc_gen_primary_key_tbl(j).primary_key_column);
6229 END IF;
6230
6231 END LOOP;
6232
6233 END IF;
6234
6235 -- Get the syndication /Investor Code
6236
6237 IF p_tmpl_identify_rec.factoring_synd_flag = 'SYNDICATION' THEN
6238 l_factor_investor_code := p_tmpl_identify_rec.syndication_code;
6239 ELSIF p_tmpl_identify_rec.factoring_synd_flag = 'FACTORING' THEN
6240 l_factor_investor_code := p_tmpl_identify_rec.factoring_code;
6241 ELSIF p_tmpl_identify_rec.factoring_synd_flag = 'INVESTOR' THEN
6242 l_factor_investor_code := p_tmpl_identify_rec.investor_code;
6243 END IF;
6244
6245
6246 -- Populate the account sources PL/SQL table.
6247
6248 IF p_template_amount_tbl.COUNT > 0 THEN
6249
6250 FOR i IN p_template_amount_tbl.FIRST .. p_template_amount_tbl.LAST LOOP
6251
6252 l_asev_tbl(i).source_table := p_dist_info_rec.source_table; --source_table,
6253 l_asev_tbl(i).source_id := p_dist_info_rec.source_id; --source_id,
6254 l_asev_tbl(i).pdt_id := p_tmpl_identify_rec.product_id; --product_id,
6255 l_asev_tbl(i).try_id := p_tmpl_identify_rec.transaction_type_id; --trx_type_id,
6256 l_asev_tbl(i).sty_id := p_template_amount_tbl(i).stream_type_id ; --stream_type_id,
6257 l_asev_tbl(i).memo_yn := NVL(p_tmpl_identify_rec.memo_yn, 'N'); --memo_yn,
6258 l_asev_tbl(i).factor_investor_flag := p_tmpl_identify_rec.factoring_synd_flag; --factor_investor_flag,
6259 l_asev_tbl(i).factor_investor_code := l_factor_investor_code; --factor_investor_code,
6260 l_asev_tbl(i).amount := p_template_amount_tbl(i).amount; --amount
6261 l_asev_tbl(i).formula_used := p_template_amount_tbl(i).formula_used; --formula_used
6262 l_asev_tbl(i).entered_date := p_dist_info_rec.accounting_date; --entered_accounting_date,
6263 l_asev_tbl(i).accounting_date := trunc(g_gl_date); --accounting_date,
6264 l_asev_tbl(i).gl_reversal_flag := p_dist_info_rec.gl_reversal_flag; --gl_reversal_flag,
6265 l_asev_tbl(i).post_to_gl := p_dist_info_rec.post_to_gl; --post_to_gl,
6266 l_asev_tbl(i).currency_code := p_dist_info_rec.currency_code; --currency_code,
6267 l_asev_tbl(i).currency_conversion_type := p_dist_info_rec.currency_conversion_type; --currency_conversion_type,
6268 l_asev_tbl(i).currency_conversion_date := p_dist_info_rec.currency_conversion_date; --currency_conversion_date,
6269 l_asev_tbl(i).currency_conversion_rate := p_dist_info_rec.currency_conversion_rate; --currency_conversion_rate,
6270 l_asev_tbl(i).khr_id := p_dist_info_rec.contract_id; --contract_id,
6271 l_asev_tbl(i).kle_id := p_dist_info_rec.contract_line_id; --contract_line_id,
6272 l_asev_tbl(i).pay_vendor_sites_pk := l_pay_vendor_sites_pk; --pay_vendor_sites_pk,
6273 l_asev_tbl(i).rec_site_uses_pk := l_rec_site_uses_pk; --rec_site_uses_pk,
6274 l_asev_tbl(i).asset_category_id_pk1 := l_asset_category_id_pk1; --asset_categories_pk1,
6275 l_asev_tbl(i).asset_book_pk2 := l_asset_book_pk2; --asset_categories_pk2,
6276 l_asev_tbl(i).pay_financial_options_pk := l_pay_financial_options_pk; --pay_financial_options_pk,
6277 l_asev_tbl(i).jtf_sales_reps_pk := l_jtf_sales_reps_pk; --jtf_sales_reps_pk,
6278 l_asev_tbl(i).inventory_item_id_pk1 := l_inventory_item_id_pk1; --inventory_items_pk1,
6279 l_asev_tbl(i).inventory_org_id_pk2 := l_inventory_org_id_pk2; --inventory_items_pk2,
6280 l_asev_tbl(i).rec_trx_types_pk := l_rec_trx_types_pk; --rec_trx_types_pk,
6281 l_asev_tbl(i).avl_id := p_template_amount_tbl(i).template_id; --template_id
6282 l_asev_tbl(i).local_product_yn := 'Y'; --local_product,
6283 l_asev_tbl(i).internal_status := 'ENTERED'; --status,
6284 l_asev_tbl(i).custom_status := 'ENTERED'; --custom_status,
6285 l_asev_tbl(i).source_indicator_flag := 'INTERNAL'; --source_indicator,
6286
6287 END LOOP;
6288
6289 END IF;
6290
6291
6292 -- Insert into Account Sources table.
6293
6294 Okl_Acct_Sources_Pvt. insert_acct_sources (
6295 p_api_version => l_api_version
6296 ,p_init_msg_list => l_init_msg_list
6297 ,x_return_status => l_return_status
6298 ,x_msg_count => l_msg_count
6299 ,x_msg_data => l_msg_data
6300 ,p_asev_tbl => l_asev_tbl
6301 ,x_asev_tbl => x_asev_tbl);
6302
6303 IF (l_return_status = Okl_Api.G_RET_STS_UNEXP_ERROR) THEN
6304 RAISE Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR;
6305 ELSIF (l_return_status = Okl_Api.G_RET_STS_ERROR) THEN
6306 RAISE Okl_Api.G_EXCEPTION_ERROR;
6307 END IF;
6308
6309
6310 Okl_Api.END_ACTIVITY(x_msg_count, x_msg_data);
6311
6312 x_return_status := Okl_Api.G_RET_STS_SUCCESS;
6313
6314 EXCEPTION
6315
6316 WHEN Okl_Api.G_EXCEPTION_ERROR THEN
6317 x_return_status := OKL_API.HANDLE_EXCEPTIONS
6318 ( l_api_name,
6319 G_PKG_NAME,
6320 'OKL_API.G_RET_STS_ERROR',
6321 x_msg_count,
6322 x_msg_data,
6323 '_PVT'
6324 );
6325 WHEN Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR THEN
6326 x_return_status := OKL_API.HANDLE_EXCEPTIONS
6327 ( l_api_name,
6328 G_PKG_NAME,
6329 'OKL_API.G_RET_STS_UNEXP_ERROR',
6330 x_msg_count,
6331 x_msg_data,
6332 '_PVT'
6333 );
6334 WHEN OTHERS THEN
6335 x_return_status := OKL_API.HANDLE_EXCEPTIONS
6336 ( l_api_name,
6337 G_PKG_NAME,
6338 'OTHERS',
6339 x_msg_count,
6340 x_msg_data,
6341 '_PVT'
6342 );
6343
6344
6345 END POPULATE_ACCT_SOURCES;
6346
6347 --Added by gboomina for Accruals Performance on 14-Oct-2005
6348 --Bug 4662173 - Start of Changes
6349 PROCEDURE POPULATE_ACCT_SOURCES(p_api_version IN NUMBER,
6350 p_init_msg_list IN VARCHAR2,
6351 x_return_status OUT NOCOPY VARCHAR2,
6352 x_msg_count OUT NOCOPY NUMBER,
6353 x_msg_data OUT NOCOPY VARCHAR2,
6354 p_tmpl_identify_rec IN TMPL_IDENTIFY_REC_TYPE,
6355 p_dist_info_tbl IN DIST_INFO_TBL_TYPE,
6356 p_acc_gen_primary_key_tbl IN acc_gen_tbl,
6357 p_template_amount_tbl IN tmp_bulk_amount_tbl_type)
6358 IS
6359
6360 l_return_status VARCHAR2(1) := Okl_Api.G_RET_STS_SUCCESS;
6361 l_api_name VARCHAR2(30) := 'POPULATE_ACCT_SOURCES';
6362 l_api_version NUMBER := 1.0;
6363
6364 l_init_msg_list VARCHAR2(1) := Okl_Api.G_FALSE;
6365 l_msg_count NUMBER := 0;
6366 l_msg_data VARCHAR2(2000);
6367
6368
6369 l_pay_vendor_sites_pk VARCHAR2(50);
6370 l_rec_site_uses_pk VARCHAR2(50);
6371 l_asset_category_id_pk1 VARCHAR2(50);
6372 l_asset_book_pk2 VARCHAR2(50);
6373 l_pay_financial_options_pk VARCHAR2(50);
6374 l_jtf_sales_reps_pk VARCHAR2(50);
6375 l_inventory_item_id_pk1 VARCHAR2(50);
6376 l_inventory_org_id_pk2 VARCHAR2(50);
6377 l_rec_trx_types_pk VARCHAR2(50);
6378 l_factor_investor_code VARCHAR2(30);
6379
6380 l_asev_tbl asev_tbl_type;
6381 x_asev_tbl asev_tbl_type;
6382 j NUMBER := 0;
6383 --Added by gboomina for the Accruals Performance Enhancement
6384 l_acc_gen_index NUMBER := 0;
6385 l_acc_gen_last_index NUMBER := 0;
6386 l_dist_info_tbl DIST_INFO_TBL_TYPE := p_dist_info_tbl;
6387 l_asev_full_tbl asev_tbl_type;
6388 p_acc_gen_tbl_ret acc_gen_primary_key;
6389 l_tmp_amt_tbl_ret template_amount_tbl_type;
6390 l_tmp_amt_index NUMBER := 0;
6391 l_tmp_amt_last_index NUMBER := 0;
6392
6393 BEGIN
6394
6395 x_return_status := Okl_Api.G_RET_STS_SUCCESS;
6396
6397 l_return_status := Okl_Api.START_ACTIVITY(l_api_name,
6398 G_PKG_NAME,
6399 p_init_msg_list,
6400 l_api_version,
6401 p_api_version,
6402 '_PVT',
6403 x_return_status);
6404 IF (l_return_status = Okl_Api.G_RET_STS_UNEXP_ERROR) THEN
6405 RAISE Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR;
6406 ELSIF (l_return_status = Okl_Api.G_RET_STS_ERROR) THEN
6407 RAISE Okl_Api.G_EXCEPTION_ERROR;
6408 END IF;
6409
6410
6411 FOR i IN l_dist_info_tbl.FIRST..l_dist_info_tbl.LAST LOOP
6412 --Obtaining the acc_gen_tbl for the l_dist_info_tbl(i)
6413 GET_ACC_GEN_TBL(p_source_id => l_dist_info_tbl(i).source_id,
6414 p_gen_table => p_acc_gen_primary_key_tbl,
6415 x_acc_gen_tbl_ret => p_acc_gen_tbl_ret);
6416
6417
6418 -- Extract the account generator sources from account generator primary key table.
6419
6420 IF p_acc_gen_tbl_ret.COUNT > 0 THEN
6421
6422 FOR j IN p_acc_gen_tbl_ret.FIRST..p_acc_gen_tbl_ret.LAST LOOP
6423
6424 IF p_acc_gen_tbl_ret(j).source_table = 'AP_VENDOR_SITES_V' THEN
6425 l_pay_vendor_sites_pk := TRIM(p_acc_gen_tbl_ret(j).primary_key_column);
6426
6427
6428 ELSIF p_acc_gen_tbl_ret(j).source_table = 'AR_SITE_USES_V' THEN
6429 l_rec_site_uses_pk := TRIM(p_acc_gen_tbl_ret(j).primary_key_column);
6430
6431
6432 ELSIF p_acc_gen_tbl_ret(j).source_table = 'FA_CATEGORY_BOOKS' THEN
6433 l_asset_category_id_pk1 := TRIM(SUBSTR(p_acc_gen_tbl_ret(j).primary_key_column,1, 50));
6434 l_asset_book_pk2 := TRIM(SUBSTR(p_acc_gen_tbl_ret(j).primary_key_column,51, 100));
6435
6436
6437 ELSIF p_acc_gen_tbl_ret(j).source_table = 'FINANCIALS_SYSTEM_PARAMETERS' THEN
6438 l_pay_financial_options_pk := TRIM(p_acc_gen_tbl_ret(j).primary_key_column);
6439
6440 ELSIF p_acc_gen_tbl_ret(j).source_table = 'JTF_RS_SALESREPS_MO_V' THEN
6441 l_jtf_sales_reps_pk := TRIM(p_acc_gen_tbl_ret(j).primary_key_column);
6442
6443
6444 ELSIF p_acc_gen_tbl_ret(j).source_table = 'MTL_SYSTEM_ITEMS_VL' THEN
6445 l_inventory_item_id_pk1 := TRIM(SUBSTR(p_acc_gen_tbl_ret(j).primary_key_column,1, 50));
6446 l_inventory_org_id_pk2 := TRIM(SUBSTR(p_acc_gen_tbl_ret(j).primary_key_column,51, 100));
6447
6448 ELSIF p_acc_gen_tbl_ret(j).source_table = 'RA_CUST_TRX_TYPES' THEN
6449 l_rec_trx_types_pk := TRIM(p_acc_gen_tbl_ret(j).primary_key_column);
6450 END IF;
6451
6452 END LOOP;
6453
6454 END IF;
6455
6456 -- Get the syndication /Investor Code
6457
6458 IF p_tmpl_identify_rec.factoring_synd_flag = 'SYNDICATION' THEN
6459 l_factor_investor_code := p_tmpl_identify_rec.syndication_code;
6460 ELSIF p_tmpl_identify_rec.factoring_synd_flag = 'FACTORING' THEN
6461 l_factor_investor_code := p_tmpl_identify_rec.factoring_code;
6462 ELSIF p_tmpl_identify_rec.factoring_synd_flag = 'INVESTOR' THEN
6463 l_factor_investor_code := p_tmpl_identify_rec.investor_code;
6464 END IF;
6465
6466 --Obtaining the template_amount_tbl for the l_dist_info_tbl(i)
6467 GET_TEMPLATE_AMOUNT_TBL(p_parent_index_number => i,
6468 p_tmp_amount_table => p_template_amount_tbl,
6469 x_tmp_amt_tbl_ret => l_tmp_amt_tbl_ret);
6470
6471
6472 FOR j IN l_tmp_amt_tbl_ret.FIRST .. l_tmp_amt_tbl_ret.LAST LOOP
6473 l_asev_tbl(j).source_table := p_dist_info_tbl(i).source_table; --source_table,
6474 l_asev_tbl(j).source_id := p_dist_info_tbl(i).source_id; --source_id,
6475 l_asev_tbl(j).pdt_id := p_tmpl_identify_rec.product_id; --product_id,
6476 l_asev_tbl(j).try_id := p_tmpl_identify_rec.transaction_type_id; --trx_type_id,
6477 l_asev_tbl(j).sty_id := l_tmp_amt_tbl_ret(j).stream_type_id ; --stream_type_id,
6478 l_asev_tbl(j).memo_yn := NVL(p_tmpl_identify_rec.memo_yn, 'N'); --memo_yn,
6479 l_asev_tbl(j).factor_investor_flag := p_tmpl_identify_rec.factoring_synd_flag; --factor_investor_flag,
6480 l_asev_tbl(j).factor_investor_code := l_factor_investor_code; --factor_investor_code,
6481 l_asev_tbl(j).amount := l_tmp_amt_tbl_ret(j).amount; --amount
6482 l_asev_tbl(j).formula_used := l_tmp_amt_tbl_ret(j).formula_used; --formula_used
6483 l_asev_tbl(j).entered_date := p_dist_info_tbl(i).accounting_date; --entered_accounting_date,
6484 l_asev_tbl(j).accounting_date := trunc(g_gl_date); --accounting_date,
6485 l_asev_tbl(j).gl_reversal_flag := p_dist_info_tbl(i).gl_reversal_flag; --gl_reversal_flag,
6486 l_asev_tbl(j).post_to_gl := p_dist_info_tbl(i).post_to_gl; --post_to_gl,
6487 l_asev_tbl(j).currency_code := p_dist_info_tbl(i).currency_code; --currency_code,
6488 l_asev_tbl(j).currency_conversion_type := p_dist_info_tbl(i).currency_conversion_type; --currency_conversion_type,
6489 l_asev_tbl(j).currency_conversion_date := p_dist_info_tbl(i).currency_conversion_date; --currency_conversion_date,
6490 l_asev_tbl(j).currency_conversion_rate := p_dist_info_tbl(i).currency_conversion_rate; --currency_conversion_rate,
6491 l_asev_tbl(j).khr_id := p_dist_info_tbl(i).contract_id; --contract_id,
6492 l_asev_tbl(j).kle_id := p_dist_info_tbl(i).contract_line_id; --contract_line_id,
6493 l_asev_tbl(j).pay_vendor_sites_pk := l_pay_vendor_sites_pk; --pay_vendor_sites_pk,
6494 l_asev_tbl(j).rec_site_uses_pk := l_rec_site_uses_pk; --rec_site_uses_pk,
6495 l_asev_tbl(j).asset_category_id_pk1 := l_asset_category_id_pk1; --asset_categories_pk1,
6496 l_asev_tbl(j).asset_book_pk2 := l_asset_book_pk2; --asset_categories_pk2,
6497 l_asev_tbl(j).pay_financial_options_pk := l_pay_financial_options_pk; --pay_financial_options_pk,
6498 l_asev_tbl(j).jtf_sales_reps_pk := l_jtf_sales_reps_pk; --jtf_sales_reps_pk,
6499 l_asev_tbl(j).inventory_item_id_pk1 := l_inventory_item_id_pk1; --inventory_items_pk1,
6500 l_asev_tbl(j).inventory_org_id_pk2 := l_inventory_org_id_pk2; --inventory_items_pk2,
6501 l_asev_tbl(j).rec_trx_types_pk := l_rec_trx_types_pk; --rec_trx_types_pk,
6502 l_asev_tbl(j).avl_id := l_tmp_amt_tbl_ret(j).template_id; --template_id
6503 l_asev_tbl(j).local_product_yn := 'Y'; --local_product,
6504 l_asev_tbl(j).internal_status := 'ENTERED'; --status,
6505 l_asev_tbl(j).custom_status := 'ENTERED'; --custom_status,
6506 l_asev_tbl(j).source_indicator_flag := 'INTERNAL'; --source_indicator,
6507 END LOOP;
6508 --Accumulating the account sources for the entire dist_info_tbl
6509 ACCUMULATE_ACCT_SOURCES(p_asev_tbl => l_asev_tbl,
6510 x_asev_full_tbl => l_asev_full_tbl,
6511 x_return_status => l_return_status);
6512
6513 END LOOP;--For dist_info_tbl.count
6514
6515
6516 -- Insert into Account Sources table.
6517
6518 Okl_Acct_Sources_Pvt. insert_acct_sources_bulk (
6519 p_api_version => l_api_version
6520 ,p_init_msg_list => l_init_msg_list
6521 ,x_return_status => l_return_status
6522 ,x_msg_count => l_msg_count
6523 ,x_msg_data => l_msg_data
6524 ,p_asev_tbl => l_asev_full_tbl
6525 ,x_asev_tbl => x_asev_tbl);
6526
6527 IF (l_return_status = Okl_Api.G_RET_STS_UNEXP_ERROR) THEN
6528 RAISE Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR;
6529 ELSIF (l_return_status = Okl_Api.G_RET_STS_ERROR) THEN
6530 RAISE Okl_Api.G_EXCEPTION_ERROR;
6531 END IF;
6532
6533
6534 Okl_Api.END_ACTIVITY(x_msg_count, x_msg_data);
6535
6536 x_return_status := Okl_Api.G_RET_STS_SUCCESS;
6537
6538 EXCEPTION
6539
6540 WHEN Okl_Api.G_EXCEPTION_ERROR THEN
6541 x_return_status := OKL_API.HANDLE_EXCEPTIONS
6542 ( l_api_name,
6543 G_PKG_NAME,
6544 'OKL_API.G_RET_STS_ERROR',
6545 x_msg_count,
6546 x_msg_data,
6547 '_PVT'
6548 );
6549 WHEN Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR THEN
6550 x_return_status := OKL_API.HANDLE_EXCEPTIONS
6551 ( l_api_name,
6552 G_PKG_NAME,
6553 'OKL_API.G_RET_STS_UNEXP_ERROR',
6554 x_msg_count,
6555 x_msg_data,
6556 '_PVT'
6557 );
6558 WHEN OTHERS THEN
6559 x_return_status := OKL_API.HANDLE_EXCEPTIONS
6560 ( l_api_name,
6561 G_PKG_NAME,
6562 'OTHERS',
6563 x_msg_count,
6564 x_msg_data,
6565 '_PVT'
6566 );
6567
6568
6569 END POPULATE_ACCT_SOURCES;
6570 --Bug 4662173 - End of Changes
6571
6572 END OKL_ACCOUNT_DIST_PVT;