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