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