DBA Data[Home] [Help]

PACKAGE BODY: APPS.OKL_SPLIT_ASSET_PVT

Source


1 PACKAGE BODY Okl_Split_Asset_Pvt AS
2 /* $Header: OKLRSPAB.pls 120.70.12020000.3 2013/03/19 15:04:42 racheruv ship $ */
3 
4 
5 --------------------------------------------------------------------------------
6 --GLOBAL VARIBLES
7 --------------------------------------------------------------------------------
8 G_FIN_AST_LTY_CODE           CONSTANT VARCHAR2(30) := 'FREE_FORM1';
9 --------------------------------------------------------------------------------
10 -- GLOBAL MESSAGE CONSTANTS
11 --------------------------------------------------------------------------------
12   G_FND_APP                     CONSTANT  VARCHAR2(200) := OKL_API.G_FND_APP;
13   G_APP_NAME                    CONSTANT  VARCHAR2(3)   := OKL_API.G_APP_NAME;
14   G_UNEXPECTED_ERROR            CONSTANT  VARCHAR2(200) := 'OKL_CONTRACTS_UNEXPECTED_ERROR';
15   G_COL_NAME_TOKEN              CONSTANT  VARCHAR2(200) := OKL_API.G_COL_NAME_TOKEN;
16   G_PARENT_TABLE_TOKEN          CONSTANT  VARCHAR2(200) := OKL_API.G_PARENT_TABLE_TOKEN;
17   G_CHILD_TABLE_TOKEN           CONSTANT  VARCHAR2(200) := OKL_API.G_CHILD_TABLE_TOKEN;
18   G_SQLERRM_TOKEN               CONSTANT  VARCHAR2(200) := 'SQLerrm';
19   G_SQLCODE_TOKEN               CONSTANT  VARCHAR2(200) := 'SQLcode';
20   -- Bug# 4542290 - smadhava - Added - Start
21   G_METHOD  CONSTANT VARCHAR2(200) := 'METHOD';
22   -- Bug# 4542290 - smadhava - Added - End
23 --------------------------------------------------------------------------------
24 -- GLOBAL OKL MESSAGES
25 --------------------------------------------------------------------------------
26 G_INVALID_TOP_LINE             CONSTANT VARCHAR2(200) := 'OKL_LLA_LINE_STYLE';
27 G_TOP_LINE_STYLE               CONSTANT VARCHAR2(30)  := 'TLS';
28 G_SPLIT_ASSET_NOT_FOUND        CONSTANT VARCHAR2(200) := 'OKL_LLA_SPLIT_ASSET_NOT_FOUND';
29 G_SPLIT_AST_TRX_NOT_FOUND      CONSTANT VARCHAR2(200) := 'OKL_LLA_SPLIT_AST_TRX';
30 G_SPLIT_PARENT_NUMBER_CHANGE   CONSTANT VARCHAR2(200) := 'OKL_LLA_SPLIT_PARENT_NUMBER';
31 G_LTY_CODE_NOT_FOUND           CONSTANT VARCHAR2(200) := 'OKL_LLA_SPLIT_PARENT_NUMBER';
32 G_NO_DATA_FOUND                CONSTANT VARCHAR2(200) := 'OKL_NO_DATA_FOUND';
33 G_INACTIVE_ASSET               CONSTANT VARCHAR2(200) := 'OKL_LLA_INACTIVE_ASSET';
34 G_SPLIT_ASSET_TRX              CONSTANT VARCHAR2(200) := 'OKL_LLA_PEND_SPLT_AST_TRX';
35 G_SPLIT_AST_COMP_TRX           CONSTANT VARCHAR2(200) := 'OKL_LLA_PEND_SPLT_COMP_TRX';
36 G_ASSET_REQUIRED               CONSTANT VARCHAR2(200) := 'OKL_LLA_ASSET_REQUIRED';
37 G_DUPLICATE_ASSET              CONSTANT VARCHAR2(200) := 'OKL_LLA_ASSET_NUMBER';
38 G_ASSET_LENGTH                 CONSTANT VARCHAR2(200) := 'OKL_LLA_AST_LEN';
39 G_NOT_UNIQUE                   CONSTANT VARCHAR2(30)  := 'OKL_LLA_NOT_UNIQUE';
40 G_SINGLE_UNIT_ASSET            CONSTANT VARCHAR2(200) := 'OKL_LLA_SINGLE_UNIT_SPLIT';
41 
42 --Added by bkatraga for bug 9548880
43 G_SPLIT_UNIT_NOT_ALLWD         CONSTANT VARCHAR2(200) := 'OKL_LLA_SPLIT_UNIT_NOT_ALLWD';
44 --end bkatraga
45 
46 -- Bug# 4542290 - smadhava - Added - Start
47 G_RRB_SPLIT_ASSET_NOT_ALLWD    CONSTANT VARCHAR2(200) := 'OKL_LLA_RRB_SPLIT_NOT_ALLWD';
48 -- Bug# 4542290 - smadhava - Added - End
49 --------------------------------------------------------------------------------
50 -- GLOBAL EXCEPTION
51 --------------------------------------------------------------------------------
52   G_EXCEPTION_HALT_VALIDATION             EXCEPTION;
53   G_EXCEPTION_STOP_VALIDATION             EXCEPTION;
54   G_API_TYPE                    CONSTANT  VARCHAR2(4) := '_PVT';
55   G_API_VERSION                 CONSTANT  NUMBER := 1.0;
56   G_SCOPE                       CONSTANT  VARCHAR2(4) := '_PVT';
57 
58  -- GLOBAL VARIABLES
59 --------------------------------------------------------------------------------
60   G_PKG_NAME                    CONSTANT  VARCHAR2(200) := 'OKL_SPLIT_ASSET_PVT';
61   G_TRY_NAME                              OKL_TRX_TYPES_V.NAME%TYPE       := 'Split Asset';
62   G_TRY_TYPE                              OKL_TRX_TYPES_V.TRY_TYPE%TYPE   := 'TIE';
63 --------------------------------------------------------------------------------
64 --Globals for csi item instance
65 --------------------------------------------------------------------------------
66 G_IB_TXN_TYPE_NOT_FOUND     CONSTANT VARCHAR2(200) := 'OKL_LLA_IB_TXN_TYPE_NOT_FOUND';
67 G_TXN_TYPE_TOKEN            CONSTANT VARCHAR2(30)  := 'TXN_TYPE';
68 G_ITM_INST_PARTY            CONSTANT VARCHAR2(30)  := 'LESSEE';
69 G_CONTRACT_INTENT           CONSTANT VARCHAR2(1)   := 'S';
70 G_PARTY_SRC_TABLE           CONSTANT VARCHAR2(30)  := 'HZ_PARTIES';
71 G_PARTY_RELATIONSHIP        CONSTANT VARCHAR2(30)  := 'OWNER';
72 G_PARTY_NOT_FOUND           CONSTANT VARCHAR2(200) := 'OKL_LLA_PARTY_NOT_FOUND';
73 G_ROLE_CODE_TOKEN           CONSTANT VARCHAR2(30)  := 'RLE_CODE';
74 G_CUST_ACCT_RULE            CONSTANT VARCHAR2(30)  := 'CAN';
75 G_CUST_ACCT_RULE_GROUP      CONSTANT VARCHAR2(30)  := 'LACAN';
76 G_CONTRACT_ID_TOKEN         CONSTANT VARCHAR2(200) := 'CONTRACT_ID';
77 G_IB_SPLIT_TXN_TYPE         CONSTANT VARCHAR2(30)  := 'OKL_SPLITA';
78 G_CUST_ACCOUNT_FOUND        CONSTANT VARCHAR2(200) := 'OKL_LLA_CUST_ACCT_NOT_FOUND';
79 --------------------------------------------------------------------------------
80 --Bug#2723498 : 11.5.9 Enhancement Split asset by serial numbers message constants
81 --------------------------------------------------------------------------------
82 G_IB_INSTANCE_MISMATCH        CONSTANT VARCHAR2(200) := 'OKL_LLA_SPA_INSTANCE_MISMATCH';
83 G_IB_LINE_TOKEN               CONSTANT VARCHAR2(200) := 'IB_LINE_ID';
84 G_ASSET_NUMBER_TOKEN          CONSTANT VARCHAR2(200) := 'ASSET_NUMBER';
85 G_SPLIT_SERIAL_NOT_FOUND      CONSTANT VARCHAR2(200) := 'OKL_LLA_SPA_SERIAL_NOT_FOUND';
86 G_SPLIT_UNITS_TOKEN           CONSTANT VARCHAR2(200) := 'SPLIT_UNITS';
87 G_SRL_NUM_DUPLICATE           CONSTANT VARCHAR2(200) := 'OKL_LLA_SERIAL_NUM_DUP';
88 G_NO_MATCHING_RECORD          CONSTANT VARCHAR2(200) := 'OKL_LLA_NO_MATCHING_RECORD';
89 G_ASSET_NOT_SERIALIZED        CONSTANT VARCHAR2(200) := 'OKL_LLA_SPA_NOT_SERIALIZED';
90 --Bug Fix # 2881114
91 G_ASSET_LINKED_TO_SERVICE     CONSTANT VARCHAR2(200) := 'OKL_LLA_SPA_SERVICE_LINKED';
92 --Bug# : 11.5.10
93 G_FORMULA_OEC                           OKL_FORMULAE_V.NAME%TYPE := 'LINE_OEC';
94 G_FORMULA_CAP                           OKL_FORMULAE_V.NAME%TYPE := 'LINE_CAP_AMNT';
95 G_FORMULA_RES                           OKL_FORMULAE_V.NAME%TYPE := 'LINE_RESIDUAL_VALUE';
96 --Bug# 3222804 : serial number control by leasing inv org setups
97 G_SERIALIZED_IN_IB            CONSTANT VARCHAR2(200) := 'OKL_SERIAL_CONTROL_MISMATCH';
98 G_NOT_SERIALIZED_IN_IB        CONSTANT VARCHAR2(200) := 'OKL_SERIAL_CONTROL_MISMATCH_2';
99 G_SERIAL_NUMBER_MISMATCH      CONSTANT VARCHAR2(200) := 'OKL_SERIAL_NUMBER_MISMATCH';
100 
101 --Bug# 3156924 :
102  G_LLA_MISSING_TRX_DATE     CONSTANT VARCHAR2(200) := 'OKL_LLA_MISSING_TRX_DATE';
103  G_LLA_WRONG_TRX_DATE       CONSTANT VARCHAR2(200) := 'OKL_LLA_WRONG_TRX_DATE';
104  G_LLA_REV_ONLY_BOOKED      CONSTANT VARCHAR2(200) := 'OKL_LLA_REV_ONLY_BOOKED';
105  G_LLA_INVALID_DATE_FORMAT  CONSTANT VARCHAR2(200) := 'OKL_LLA_INVALID_DATE_FORMAT';
106 
107 --BUG# 3569441
108   G_INVALID_INSTALL_LOC_TYPE CONSTANT VARCHAR2(200) := 'OKL_INVALID_INSTALL_LOC_TYPE';
109   G_LOCATION_TYPE_TOKEN      CONSTANT VARCHAR2(30)  := 'LOCATION_TYPE';
110   G_LOC_TYPE1_TOKEN          CONSTANT VARCHAR2(30)  := 'LOCATION_TYPE1';
111   G_LOC_TYPE2_TOKEN          CONSTANT VARCHAR2(30)  := 'LOCATION_TYPE2';
112 
113   G_MISSING_USAGE            CONSTANT VARCHAR2(200) := 'OKL_INSTALL_LOC_MISSING_USAGE';
114   G_USAGE_TYPE_TOKEN         CONSTANT VARCHAR2(30)  := 'USAGE_TYPE';
115   G_ADDRESS_TOKEN            CONSTANT VARCHAR2(30)  := 'ADDRESS';
116   G_INSTANCE_NUMBER_TOKEN    CONSTANT VARCHAR2(30)  := 'INSTANCE_NUMBER';
117 --END BUG# 3569441
118 
119    /*
120    -- mvasudev, 08/23/2004
121    -- Added Constants to enable Business Event
122    */
123    G_WF_EVT_KHR_SPLIT_ASSET_REQ  CONSTANT VARCHAR2(64) := 'oracle.apps.okl.la.lease_contract.split_asset_by_units_requested';
124    G_WF_EVT_KHR_SPLIT_ASSET_COMP CONSTANT VARCHAR2(64) := 'oracle.apps.okl.la.lease_contract.split_asset_by_units_completed';
125 
126    G_WF_ITM_CONTRACT_ID CONSTANT VARCHAR2(20)  := 'CONTRACT_ID';
127    G_WF_ITM_ASSET_ID CONSTANT VARCHAR2(10)  := 'ASSET_ID';
128    G_WF_ITM_TRANS_DATE CONSTANT VARCHAR2(20)    := 'TRANSACTION_DATE';
129    -- Bug# 4542290 - smadhava - Added - Start
130    G_RRB_ESTIMATED CONSTANT OKL_PQY_VALUES_V.VALUE%TYPE := 'ESTIMATED_AND_BILLED';
131    G_RRB_ACTUAL     CONSTANT OKL_PQY_VALUES_V.VALUE%TYPE := 'ACTUAL';
132   -- Bug# 4542290 - smadhava - Added - End
133 
134 --Bug# 6612475 Start
135 ------------------------------------------------------------------------------
136 --Bug # 6612475
137 --API Name    : Validate_Split_Request
138 --Description : This will validate the split asset request parameters
139 --              and will be called from Create_Split_Transaction
140 -- History    :
141 --              07-May-2008   avsingh   Creation
142 --
143 -- End of Comments
144 -----------------------------------------------------------------------------
145   Procedure Validate_Split_Request
146      (p_api_version    IN  NUMBER
147      ,p_init_msg_list  IN  VARCHAR2
148      ,x_return_status  OUT NOCOPY VARCHAR2
149      ,x_msg_count      OUT NOCOPY NUMBER
150      ,x_msg_data       OUT NOCOPY VARCHAR2
151      ,p_cle_id         IN  NUMBER
152      ,p_split_into_individuals_yn IN VARCHAR2
153      ,p_split_into_units IN NUMBER
154      ,p_revision_date    IN DATE
155      ) IS
156 
157   l_api_name             CONSTANT VARCHAR2(30) := 'VALIDATE_SPLIT_REQUEST';
158   l_valid_asset_flag     VARCHAR2(1);
159 
160   cursor l_cle_csr (p_cle_id in number) is
161   select 'Y'
162   from   okc_k_lines_b cleb
163   where  id = p_cle_id
164   and    lse_id = 33;
165 
166   l_return_status VARCHAR2(1) := OKL_API.G_RET_STS_SUCCESS;
167 
168   Begin
169       x_return_status := OKL_API.G_RET_STS_SUCCESS;
170       -- Call start_activity to create savepoint, check compatibility
171       -- and initialize message list
172       x_return_status := OKL_API.START_ACTIVITY (
173                                l_api_name
174                                ,p_init_msg_list
175                                ,'_PVT'
176                                ,x_return_status);
177       -- Check if activity started successfully
178       IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
179          RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
180       ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
181          RAISE OKL_API.G_EXCEPTION_ERROR;
182       END IF;
183       --1. Validate Revision Date
184       IF p_revision_date is NULL or p_revision_date = OKL_API.G_MISS_DATE Then
185           OKL_API.SET_MESSAGE(p_app_name => g_app_name,
186                               p_msg_name => 'OKL_LP_REQUIRED_VALUE',
187                               p_token1   => 'COLUMN_PROMPT',
188                               p_token1_value => 'Revision Date'
189                              );
190           l_return_status := OKL_API.G_RET_STS_ERROR;
191       END IF;
192       --2. Validate the Asset Id
193       If nvl(p_cle_id, OKL_API.G_MISS_NUM) = OKL_API.G_MISS_NUM then
194           --Asset Number to split is andatory
195           OKL_API.SET_MESSAGE(p_app_name => g_app_name,
196                               p_msg_name => 'OKL_LP_REQUIRED_VALUE',
197                               p_token1   => 'COLUMN_PROMPT',
198                               p_token1_value => 'Asset'
199                              );
200            l_return_status := OKL_API.G_RET_STS_ERROR;
201       ElsIf nvl(p_cle_id,OKL_API.G_MISS_NUM) <> OKL_API.G_MISS_NUM then
202           --find out whether the asset number provided is valid
203           l_valid_asset_flag := 'N';
204           Open l_cle_csr(p_cle_id => p_cle_id);
205           Fetch l_cle_csr into l_valid_asset_flag;
206           Close l_cle_csr;
207           If l_valid_asset_flag = 'N' Then
208               OKL_API.SET_MESSAGE(p_app_name     => g_app_name,
209                               p_msg_name     => 'OKL_LLA_NO_DATA_FOUND',
210                               p_token1       => 'COL_NAME',
211                               p_token1_value => 'Asset'
212                              );
213                l_return_status := OKL_API.G_RET_STS_ERROR;
214           End If;
215       End If;
216       --3. validate units to split
217       If (
218            (nvl(p_split_into_individuals_yn, OKL_API.G_MISS_CHAR) =
219             OKL_API.G_MISS_CHAR
220            ) OR (p_split_into_individuals_yn = 'N')
221          )  AND
222         nvl(p_split_into_units, OKL_API.G_MISS_NUM) = OKL_API.G_MISS_NUM Then
223           OKL_API.SET_MESSAGE(p_app_name     => g_app_name,
224                               p_msg_name     => 'OKL_LLA_INVALID_SPLIT_OPTION',
225                               p_token1       => 'COL_NAME1',
226                               p_token1_value => 'Split Into Single Units',
227                               p_token2       => 'COL_NAME2',
228                               p_token2_value => 'Number of Units'
229                              );
230            l_return_status := OKL_API.G_RET_STS_ERROR;
231       ElsIf nvl(p_split_into_units, OKL_API.G_MISS_NUM) <> OKL_API.G_MISS_NUM
232       Then
233           If nvl(p_split_into_units, OKL_API.G_MISS_NUM) <= 0 Then
234               OKL_API.SET_MESSAGE(p_app_name     => g_app_name,
235                                   p_msg_name     => 'OKL_AM_REQ_FIELD_POS_ERR',
236                                   p_token1       => 'PROMPT',
237                                   p_token1_value => 'Number of Units'
238                                  );
239               l_return_status := OKL_API.G_RET_STS_ERROR;
240            End If;
241       End IF;
242 
243       x_return_status := l_return_status;
244 
245       --Call end Activity
246       OKL_API.END_ACTIVITY(x_msg_count, x_msg_data);
247   EXCEPTION
248     WHEN OKL_API.G_EXCEPTION_ERROR Then
249       x_return_status :=OKL_API.HANDLE_EXCEPTIONS
250       (
251       l_api_name,
252       G_PKG_NAME,
253       'OKL_API.G_RET_STS_ERROR',
254       x_msg_count,
255       x_msg_data,
256       '_PVT'
257       );
258     WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
259       x_return_status :=OKL_API.HANDLE_EXCEPTIONS
260       (
261       l_api_name,
262       G_PKG_NAME,
263       'OKL_API.G_RET_STS_UNEXP_ERROR',
264       x_msg_count,
265       x_msg_data,
266       '_PVT'
267       );
268     WHEN OTHERS THEN
269       x_return_status :=OKL_API.HANDLE_EXCEPTIONS
270       (
271       l_api_name,
272       G_PKG_NAME,
273       'OTHERS',
274       x_msg_count,
275       x_msg_data,
276       '_PVT'
277       );
278   End  Validate_Split_Request;
279 --Bug# 6612475 End;
280 
281 
282 --Bug# 6344223
283 ------------------------------------------------------------------------------
284 --Bug# 6344223
285 --API Name    : get_split_round_amount
286 --Description : API to adjust the amounts which are not evenly divisible such
287 --		that the remainder is allocated to either the child asset
288 --		holding the same asset number as the parent asset or the asset
289 --		with the largest percentage of cost (when splitting into
290 --		components).
291 --History     :
292 --              09-Aug-2007    rirawat  Creation
293 --End of Comments
294 ------------------------------------------------------------------------------
295 PROCEDURE get_split_round_amount(
296      p_api_version    IN  NUMBER
297     ,p_init_msg_list  IN  VARCHAR2
298     ,x_return_status  OUT NOCOPY VARCHAR2
299     ,x_msg_count      OUT NOCOPY NUMBER
300     ,x_msg_data       OUT NOCOPY VARCHAR2
301     ,p_txl_id             IN NUMBER
302     ,p_split_factor       IN NUMBER
303     ,p_klev_rec           IN  klev_rec_type
304     ,p_clev_rec           IN clev_rec_type
305     ,x_klev_rec           OUT NOCOPY klev_rec_type
306     ,x_clev_rec           OUT NOCOPY clev_rec_type
307 ) IS
308 
309    l_return_status        VARCHAR2(1)  DEFAULT OKL_API.G_RET_STS_SUCCESS;
310    l_api_name             CONSTANT VARCHAR2(30) := 'get_split_round_amount';
311    l_api_version          CONSTANT NUMBER := 1.0;
312 
313    --Fix Bug# 2727161
314    CURSOR curr_hdr_csr (p_chr_id OKC_K_HEADERS_B.ID%TYPE) IS
315    SELECT currency_code
316    FROM   okc_k_headers_b
317    WHERE  id = p_chr_id;
318 
319    CURSOR curr_ln_csr (p_line_id OKC_K_HEADERS_B.ID%TYPE) IS
320    SELECT h.currency_code
321    FROM   okc_k_headers_b h,
322           okc_k_lines_b l
323    WHERE  h.id = l.dnz_chr_id
324    AND    l.id = p_line_id;
325 
326    l_conv_amount   NUMBER;
327    l_currency_code OKC_K_LINES_B.CURRENCY_CODE%TYPE;
328 
329 
330 CURSOR l_txd_csr(p_trxline_id IN NUMBER) IS
331       SELECT txd.id,
332            txd.split_percent,
333            txl.kle_id,
334            txd.target_kle_id,
335            txd.quantity,
336            txl.current_units
337     FROM   okl_txd_assets_b  txd,
338            okl_txl_Assets_b  txl
339     WHERE  txl.tal_type  = 'ALI'
340     AND    txd.tal_id    = txl.id
341     AND    txl.id        = p_trxline_id
342     --Bug# 6898798 start
343     ORDER BY nvl(txd.split_percent,-1);
344     --Bug# 6898798 end
345 
346 
347 l_child_split_factor NUMBER :=0;
348 
349 l_klev_rec_sum        klev_rec_type;
350 l_klev_rec_out     klev_rec_type;
351 l_clev_rec_sum         clev_rec_type;
352 l_clev_rec_out     clev_rec_type;
353 
354 l_klev_rec        klev_rec_type;
355 l_clev_rec         clev_rec_type;
356 l_split_by_unit varchar2(1):='N' ;
357 
358 FUNCTION round_amount(
359    p_currency_code      IN VARCHAR2
360   ,p_amount             IN NUMBER
361 ) RETURN NUMBER
362 IS
363 l_round_amount NUMBER;
364 BEGIN
365    l_round_amount:=p_amount;
366 
367    IF (p_amount IS NOT NULL
368          AND
369          p_amount <> OKL_API.G_MISS_NUM) THEN
370 
371          l_round_amount := NULL;
372 
373          l_round_amount := okl_accounting_util.cross_currency_round_amount(
374                                           p_amount        => p_amount,
375                                           p_currency_code => p_currency_code
376                                          );
377     END IF;
378  RETURN l_round_amount;
379 
380 EXCEPTION
381     WHEN OTHERS THEN
382       OKL_API.Set_Message(p_app_name      => OKL_API.G_APP_NAME,
383                           p_msg_name      => 'OKL_UNEXPECTED_ERROR',
384                           p_token1        => 'OKL_SQLCODE',
385                           p_token1_value  => SQLCODE,
386                           p_token2        => 'OKL_SQLERRM',
387                           p_token2_value  => SQLERRM);
388 
389      RETURN NULL;
390 END;
391 
392 
393 BEGIN
394     -- Call start_activity to create savepoint, check compatibility
395     -- and initialize message list
396     x_return_status := OKL_API.START_ACTIVITY (
397                                  l_api_name
398                                  ,p_init_msg_list
399                                  ,'_PVT'
400                                  ,x_return_status);
401       -- Check if activity started successfully
402     IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
403         RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
404     ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
405         RAISE OKL_API.G_EXCEPTION_ERROR;
406     END IF;
407 
408      l_currency_code := '?';
409      OPEN curr_hdr_csr (p_clev_rec.dnz_chr_id);
410      FETCH curr_hdr_csr INTO l_currency_code;
411      CLOSE curr_hdr_csr;
412 
413     IF (l_currency_code = '?') THEN
414          --
415          -- Get currency_code
416          -- Using line_id
417          --
418         OPEN curr_ln_csr (p_clev_rec.id);
419         FETCH curr_ln_csr INTO l_currency_code;
420         CLOSE curr_ln_csr;
421     END IF;
422 
423     IF (l_currency_code = '?') THEN -- Fatal error, Not a valid currency_code
424        RAISE OKL_API.G_EXCEPTION_ERROR;
425     END IF;
426 
427     l_klev_rec_out:=p_klev_rec;
428     l_clev_rec_out:=p_clev_rec;
429 
430     --Initialize
431     l_klev_rec_sum.ESTIMATED_OEC :=0;
432     l_klev_rec_sum.LAO_AMOUNT :=0;
433     l_klev_rec_sum.CAPITAL_REDUCTION :=0;
434     l_klev_rec_sum.FEE_CHARGE    :=0;
435     l_klev_rec_sum.INITIAL_DIRECT_COST :=0;
436     l_klev_rec_sum.AMOUNT_STAKE :=0;
437     l_klev_rec_sum.LRV_AMOUNT :=0;
438     l_klev_rec_sum.COVERAGE :=0;
439     l_klev_rec_sum.VENDOR_ADVANCE_PAID :=0;
440     l_klev_rec_sum.TRADEIN_AMOUNT :=0;
441     l_klev_rec_sum.BOND_EQUIVALENT_YIELD :=0;
442     l_klev_rec_sum.TERMINATION_PURCHASE_AMOUNT :=0;
443     l_klev_rec_sum.REFINANCE_AMOUNT :=0;
444     l_klev_rec_sum.REMARKETED_AMOUNT :=0;
445     l_klev_rec_sum.REMARKET_MARGIN :=0;
446     l_klev_rec_sum.REPURCHASED_AMOUNT :=0;
447     l_klev_rec_sum.RESIDUAL_VALUE :=0;
448     l_klev_rec_sum.APPRAISAL_VALUE :=0;
449     l_klev_rec_sum.GAIN_LOSS :=0;
450     l_klev_rec_sum.FLOOR_AMOUNT :=0;
451     l_klev_rec_sum.TRACKED_RESIDUAL :=0;
452     l_klev_rec_sum.AMOUNT :=0;
453     l_klev_rec_sum.OEC :=0;
454     l_klev_rec_sum.CAPITAL_AMOUNT :=0;
455     l_klev_rec_sum.RESIDUAL_GRNTY_AMOUNT :=0;
456     l_klev_rec_sum.RVI_PREMIUM :=0;
457     l_klev_rec_sum.CAPITALIZED_INTEREST :=0;
458     l_klev_rec_sum.SUBSIDY_OVERRIDE_AMOUNT :=0;
459     l_klev_rec_sum.Expected_Asset_Cost :=0;
460 
461     l_clev_rec_sum.price_unit:=0;
462     l_clev_rec_sum.price_negotiated:=0;
463     l_clev_rec_sum.price_negotiated_renewed:=0;
464 
465 
466   for l_txd_rec in l_txd_csr(p_txl_id)
467    loop
468     if nvl(l_txd_rec.split_percent,0) in (0,okl_api.g_miss_num) then
469       l_child_split_factor := l_txd_rec.quantity/l_txd_rec.current_units;
470       l_split_by_unit:='Y';
471     else
472       l_child_split_factor := l_txd_rec.split_percent/100;
473        l_split_by_unit:='N';
474     end if;
475 
476     l_klev_rec_sum.ESTIMATED_OEC := l_klev_rec_sum.ESTIMATED_OEC +
477                                 round_amount(l_currency_code,l_child_split_factor * p_klev_rec.ESTIMATED_OEC);
478     l_klev_rec_sum.LAO_AMOUNT    := l_klev_rec_sum.LAO_AMOUNT+
479                                   round_amount(l_currency_code,l_child_split_factor * p_klev_rec.LAO_AMOUNT);
480     l_klev_rec_sum.CAPITAL_REDUCTION := l_klev_rec_sum.CAPITAL_REDUCTION
481                                     + round_amount(l_currency_code,l_child_split_factor * p_klev_rec.CAPITAL_REDUCTION);
482     l_klev_rec_sum.FEE_CHARGE    := l_klev_rec_sum.FEE_CHARGE
483                                     + round_amount(l_currency_code,l_child_split_factor * p_klev_rec.FEE_CHARGE);
484     l_klev_rec_sum.INITIAL_DIRECT_COST := l_klev_rec_sum.INITIAL_DIRECT_COST
485                                     + round_amount(l_currency_code,l_child_split_factor * p_klev_rec.INITIAL_DIRECT_COST);
486     l_klev_rec_sum.AMOUNT_STAKE := l_klev_rec_sum.AMOUNT_STAKE
487                                     + round_amount(l_currency_code,l_child_split_factor * p_klev_rec.AMOUNT_STAKE);
488     l_klev_rec_sum.LRV_AMOUNT := l_klev_rec_sum.LRV_AMOUNT
489                                     + round_amount(l_currency_code,l_child_split_factor * p_klev_rec.LRV_AMOUNT);
490     l_klev_rec_sum.COVERAGE := l_klev_rec_sum.COVERAGE
491                                     + round_amount(l_currency_code,l_child_split_factor * p_klev_rec.COVERAGE);
492     l_klev_rec_sum.VENDOR_ADVANCE_PAID := l_klev_rec_sum.VENDOR_ADVANCE_PAID
493                                     + round_amount(l_currency_code,l_child_split_factor * p_klev_rec.VENDOR_ADVANCE_PAID);
494     l_klev_rec_sum.TRADEIN_AMOUNT := l_klev_rec_sum.TRADEIN_AMOUNT
495                                     + round_amount(l_currency_code,l_child_split_factor * p_klev_rec.TRADEIN_AMOUNT);
496     l_klev_rec_sum.BOND_EQUIVALENT_YIELD := l_klev_rec_sum.BOND_EQUIVALENT_YIELD
497                                     + round_amount(l_currency_code,l_child_split_factor * p_klev_rec.BOND_EQUIVALENT_YIELD);
498     l_klev_rec_sum.TERMINATION_PURCHASE_AMOUNT := l_klev_rec_sum.TERMINATION_PURCHASE_AMOUNT
499                                     + round_amount(l_currency_code,l_child_split_factor * p_klev_rec.TERMINATION_PURCHASE_AMOUNT);
500     l_klev_rec_sum.REFINANCE_AMOUNT := l_klev_rec_sum.REFINANCE_AMOUNT
501                                     + round_amount(l_currency_code,l_child_split_factor * p_klev_rec.REFINANCE_AMOUNT);
502     l_klev_rec_sum.REMARKETED_AMOUNT := l_klev_rec_sum.REMARKETED_AMOUNT
503                                     + round_amount(l_currency_code,l_child_split_factor * p_klev_rec.REMARKETED_AMOUNT);
504     l_klev_rec_sum.REMARKET_MARGIN := l_klev_rec_sum.REMARKET_MARGIN
505                                     + round_amount(l_currency_code,l_child_split_factor * p_klev_rec.REMARKET_MARGIN);
506     l_klev_rec_sum.REPURCHASED_AMOUNT := l_klev_rec_sum.REPURCHASED_AMOUNT
507                                     + round_amount(l_currency_code,l_child_split_factor * p_klev_rec.REPURCHASED_AMOUNT);
508     l_klev_rec_sum.RESIDUAL_VALUE := l_klev_rec_sum.RESIDUAL_VALUE
509                                     + round_amount(l_currency_code,l_child_split_factor * p_klev_rec.RESIDUAL_VALUE);
510     l_klev_rec_sum.APPRAISAL_VALUE := l_klev_rec_sum.APPRAISAL_VALUE
511                                     + round_amount(l_currency_code,l_child_split_factor * p_klev_rec.APPRAISAL_VALUE);
512     l_klev_rec_sum.GAIN_LOSS := l_klev_rec_sum.GAIN_LOSS
513                                     + round_amount(l_currency_code,l_child_split_factor * p_klev_rec.GAIN_LOSS);
514     l_klev_rec_sum.FLOOR_AMOUNT := l_klev_rec_sum.FLOOR_AMOUNT
515                                     + round_amount(l_currency_code,l_child_split_factor * p_klev_rec.FLOOR_AMOUNT);
516     l_klev_rec_sum.TRACKED_RESIDUAL := l_klev_rec_sum.TRACKED_RESIDUAL
517                                     + round_amount(l_currency_code,l_child_split_factor * p_klev_rec.TRACKED_RESIDUAL);
518     l_klev_rec_sum.AMOUNT := l_klev_rec_sum.AMOUNT
519                                     + round_amount(l_currency_code,l_child_split_factor * p_klev_rec.AMOUNT);
520     l_klev_rec_sum.OEC := l_klev_rec_sum.OEC
521                                     + round_amount(l_currency_code,l_child_split_factor * p_klev_rec.OEC);
522     l_klev_rec_sum.CAPITAL_AMOUNT := l_klev_rec_sum.CAPITAL_AMOUNT
523                                     + round_amount(l_currency_code,l_child_split_factor * p_klev_rec.CAPITAL_AMOUNT);
524     l_klev_rec_sum.RESIDUAL_GRNTY_AMOUNT := l_klev_rec_sum.RESIDUAL_GRNTY_AMOUNT
525                                     + round_amount(l_currency_code,l_child_split_factor * p_klev_rec.RESIDUAL_GRNTY_AMOUNT);
526     l_klev_rec_sum.RVI_PREMIUM := l_klev_rec_sum.RVI_PREMIUM
527                                     + round_amount(l_currency_code,l_child_split_factor * p_klev_rec.RVI_PREMIUM);
528     l_klev_rec_sum.CAPITALIZED_INTEREST := l_klev_rec_sum.CAPITALIZED_INTEREST
529                                     + round_amount(l_currency_code,l_child_split_factor * p_klev_rec.CAPITALIZED_INTEREST);
530     l_klev_rec_sum.SUBSIDY_OVERRIDE_AMOUNT := l_klev_rec_sum.SUBSIDY_OVERRIDE_AMOUNT
531                                     + round_amount(l_currency_code,l_child_split_factor * p_klev_rec.SUBSIDY_OVERRIDE_AMOUNT);
532     l_klev_rec_sum.Expected_Asset_Cost := l_klev_rec_sum.Expected_Asset_Cost
533                                     + round_amount(l_currency_code,l_child_split_factor * p_klev_rec.Expected_Asset_Cost);
534     l_clev_rec_sum.price_unit      := l_clev_rec_sum.price_unit
535                                      + round_amount(l_currency_code,l_child_split_factor * p_clev_rec.price_unit);
536     l_clev_rec_sum.price_negotiated := l_clev_rec_sum.price_negotiated
537                             + round_amount(l_currency_code,l_child_split_factor * p_clev_rec.price_negotiated);
538     l_clev_rec_sum.price_negotiated_renewed := l_clev_rec_sum.price_negotiated_renewed
539                             + round_amount(l_currency_code,l_child_split_factor * p_clev_rec.price_negotiated_renewed);
540 
541    end loop;
542 
543     --Bug# 6788253: Replaced l_child_split_factor with p_split_factor in below code that calculates split values
544     --              for the asset line to which rounding differences are applied.
545 
546     IF l_split_by_unit ='N' THEN
547       --unit price to be changed in split by component only
548        l_clev_rec_out.price_unit := round_amount(l_currency_code,p_split_factor * p_clev_rec.price_unit )
549                                        + (p_clev_rec.price_unit - l_clev_rec_sum.price_unit);
550        l_clev_rec_out.price_negotiated := round_amount(l_currency_code,p_split_factor * p_clev_rec.price_negotiated )
551                                        + (p_clev_rec.price_negotiated - l_clev_rec_sum.price_negotiated);
552        l_clev_rec_out.price_negotiated_renewed :=
553                                     round_amount(l_currency_code,p_split_factor * p_clev_rec.price_negotiated_renewed )
554                                      + (p_clev_rec.price_negotiated_renewed - l_clev_rec_sum.price_negotiated_renewed);
555     END IF;
556 
557 
558    l_klev_rec_out.LAO_AMOUNT := round_amount(l_currency_code,p_split_factor * p_klev_rec.LAO_AMOUNT )
559 				  +  p_klev_rec.LAO_AMOUNT - l_klev_rec_sum.LAO_AMOUNT;
560    l_klev_rec_out.ESTIMATED_OEC := round_amount(l_currency_code,p_split_factor * p_klev_rec.ESTIMATED_OEC )
561 				  +  p_klev_rec.ESTIMATED_OEC - l_klev_rec_sum.ESTIMATED_OEC;
562    l_klev_rec_out.CAPITAL_REDUCTION := round_amount(l_currency_code,p_split_factor * p_klev_rec.CAPITAL_REDUCTION )
563 				  +  p_klev_rec.CAPITAL_REDUCTION - l_klev_rec_sum.CAPITAL_REDUCTION;
564    l_klev_rec_out.FEE_CHARGE := round_amount(l_currency_code,p_split_factor * p_klev_rec.FEE_CHARGE )
565 				  +  p_klev_rec.FEE_CHARGE - l_klev_rec_sum.FEE_CHARGE;
566    l_klev_rec_out.INITIAL_DIRECT_COST := round_amount(l_currency_code,p_split_factor * p_klev_rec.INITIAL_DIRECT_COST )
567 				  +  p_klev_rec.INITIAL_DIRECT_COST - l_klev_rec_sum.INITIAL_DIRECT_COST;
568    l_klev_rec_out.AMOUNT_STAKE := round_amount(l_currency_code,p_split_factor * p_klev_rec.AMOUNT_STAKE )
569 				  +  p_klev_rec.AMOUNT_STAKE - l_klev_rec_sum.AMOUNT_STAKE;
570    l_klev_rec_out.LRV_AMOUNT := round_amount(l_currency_code,p_split_factor * p_klev_rec.LRV_AMOUNT )
571 				  +  p_klev_rec.LRV_AMOUNT - l_klev_rec_sum.LRV_AMOUNT;
572    l_klev_rec_out.COVERAGE := round_amount(l_currency_code,p_split_factor * p_klev_rec.COVERAGE )
573 				  +  p_klev_rec.COVERAGE - l_klev_rec_sum.COVERAGE;
574    l_klev_rec_out.VENDOR_ADVANCE_PAID := round_amount(l_currency_code,p_split_factor * p_klev_rec.VENDOR_ADVANCE_PAID )
575 				  +  p_klev_rec.VENDOR_ADVANCE_PAID - l_klev_rec_sum.VENDOR_ADVANCE_PAID;
576    l_klev_rec_out.TRADEIN_AMOUNT := round_amount(l_currency_code,p_split_factor * p_klev_rec.TRADEIN_AMOUNT )
577 				  +  p_klev_rec.TRADEIN_AMOUNT - l_klev_rec_sum.TRADEIN_AMOUNT;
578    l_klev_rec_out.BOND_EQUIVALENT_YIELD := round_amount(l_currency_code,p_split_factor * p_klev_rec.BOND_EQUIVALENT_YIELD )
579 				  +  p_klev_rec.BOND_EQUIVALENT_YIELD - l_klev_rec_sum.BOND_EQUIVALENT_YIELD;
580    l_klev_rec_out.TERMINATION_PURCHASE_AMOUNT := round_amount(l_currency_code,p_split_factor * p_klev_rec.TERMINATION_PURCHASE_AMOUNT )
581 				  +  p_klev_rec.TERMINATION_PURCHASE_AMOUNT - l_klev_rec_sum.TERMINATION_PURCHASE_AMOUNT;
582    l_klev_rec_out.REFINANCE_AMOUNT := round_amount(l_currency_code,p_split_factor * p_klev_rec.REFINANCE_AMOUNT )
583 				  +  p_klev_rec.REFINANCE_AMOUNT - l_klev_rec_sum.REFINANCE_AMOUNT;
584    l_klev_rec_out.REMARKETED_AMOUNT := round_amount(l_currency_code,p_split_factor * p_klev_rec.REMARKETED_AMOUNT )
585 				  +  p_klev_rec.REMARKETED_AMOUNT - l_klev_rec_sum.REMARKETED_AMOUNT;
586    l_klev_rec_out.REMARKET_MARGIN := round_amount(l_currency_code,p_split_factor * p_klev_rec.REMARKET_MARGIN )
587 				  +  p_klev_rec.REMARKET_MARGIN - l_klev_rec_sum.REMARKET_MARGIN;
588    l_klev_rec_out.REPURCHASED_AMOUNT := round_amount(l_currency_code,p_split_factor * p_klev_rec.REPURCHASED_AMOUNT )
589 				  +  p_klev_rec.REPURCHASED_AMOUNT - l_klev_rec_sum.REPURCHASED_AMOUNT;
590    l_klev_rec_out.RESIDUAL_VALUE := round_amount(l_currency_code,p_split_factor * p_klev_rec.RESIDUAL_VALUE )
591 				  +  p_klev_rec.RESIDUAL_VALUE - l_klev_rec_sum.RESIDUAL_VALUE;
592    l_klev_rec_out.APPRAISAL_VALUE := round_amount(l_currency_code,p_split_factor * p_klev_rec.APPRAISAL_VALUE )
593 				  +  p_klev_rec.APPRAISAL_VALUE - l_klev_rec_sum.APPRAISAL_VALUE;
594    l_klev_rec_out.GAIN_LOSS := round_amount(l_currency_code,p_split_factor * p_klev_rec.GAIN_LOSS )
595 				  +  p_klev_rec.GAIN_LOSS - l_klev_rec_sum.GAIN_LOSS;
596    l_klev_rec_out.FLOOR_AMOUNT := round_amount(l_currency_code,p_split_factor * p_klev_rec.FLOOR_AMOUNT )
597 				  +  p_klev_rec.FLOOR_AMOUNT - l_klev_rec_sum.FLOOR_AMOUNT;
598    l_klev_rec_out.TRACKED_RESIDUAL := round_amount(l_currency_code,p_split_factor * p_klev_rec.TRACKED_RESIDUAL )
599 				  +  p_klev_rec.TRACKED_RESIDUAL - l_klev_rec_sum.TRACKED_RESIDUAL;
600    l_klev_rec_out.AMOUNT := round_amount(l_currency_code,p_split_factor * p_klev_rec.AMOUNT )
601 				  +  p_klev_rec.AMOUNT - l_klev_rec_sum.AMOUNT;
602    l_klev_rec_out.OEC := round_amount(l_currency_code,p_split_factor * p_klev_rec.OEC )
603 				  +  p_klev_rec.OEC - l_klev_rec_sum.OEC;
604    l_klev_rec_out.CAPITAL_AMOUNT := round_amount(l_currency_code,p_split_factor * p_klev_rec.CAPITAL_AMOUNT )
605 				  +  p_klev_rec.CAPITAL_AMOUNT - l_klev_rec_sum.CAPITAL_AMOUNT;
606    l_klev_rec_out.RESIDUAL_GRNTY_AMOUNT := round_amount(l_currency_code,p_split_factor * p_klev_rec.RESIDUAL_GRNTY_AMOUNT )
607 				  +  p_klev_rec.RESIDUAL_GRNTY_AMOUNT - l_klev_rec_sum.RESIDUAL_GRNTY_AMOUNT;
608    l_klev_rec_out.RVI_PREMIUM := round_amount(l_currency_code,p_split_factor * p_klev_rec.RVI_PREMIUM )
609 				  +  p_klev_rec.RVI_PREMIUM - l_klev_rec_sum.RVI_PREMIUM;
610    l_klev_rec_out.CAPITALIZED_INTEREST := round_amount(l_currency_code,p_split_factor * p_klev_rec.CAPITALIZED_INTEREST )
611 				  +  p_klev_rec.CAPITALIZED_INTEREST - l_klev_rec_sum.CAPITALIZED_INTEREST;
612    l_klev_rec_out.SUBSIDY_OVERRIDE_AMOUNT := round_amount(l_currency_code,p_split_factor * p_klev_rec.SUBSIDY_OVERRIDE_AMOUNT )
613 				  +  p_klev_rec.SUBSIDY_OVERRIDE_AMOUNT - l_klev_rec_sum.SUBSIDY_OVERRIDE_AMOUNT;
614    l_klev_rec_out.Expected_Asset_Cost := round_amount(l_currency_code,p_split_factor * p_klev_rec.Expected_Asset_Cost )
615 				  +  p_klev_rec.Expected_Asset_Cost - l_klev_rec_sum.Expected_Asset_Cost;
616 
617    x_klev_rec:=l_klev_rec_out;
618    x_clev_rec:=l_clev_rec_out;
619 
620    OKL_API.END_ACTIVITY (x_msg_count, x_msg_data);
621 
622 EXCEPTION
623 
624       WHEN OKL_API.G_EXCEPTION_ERROR THEN
625       l_return_status := OKL_API.HANDLE_EXCEPTIONS(
626                                l_api_name,
627                                G_PKG_NAME,
628                                'OKL_API.G_RET_STS_ERROR',
629                                x_msg_count,
630                                x_msg_data,
631                                '_PVT');
632      WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
633       l_return_status :=OKL_API.HANDLE_EXCEPTIONS(
634                               l_api_name,
635                               G_PKG_NAME,
636                               'OKL_API.G_RET_STS_UNEXP_ERROR',
637                               x_msg_count,
638                               x_msg_data,
639                               '_PVT');
640      WHEN OTHERS THEN
641       l_return_status :=OKL_API.HANDLE_EXCEPTIONS(
642                               l_api_name,
643                               G_PKG_NAME,
644                               'OTHERS',
645                               x_msg_count,
646                               x_msg_data,
647                               '_PVT');
648 
649 END get_split_round_amount;
650 
651 --Bug# 6344223
652 ------------------------------------------------------------------------------
653 --Bug# 6344223
654 --API Name    : adjust_unit_cost
655 --Description : API to adjust the unit price when payment type is
656 --              PRINCIPAL PAYMENT.
657 --History     :
658 --              25-Jul-2007    rirawat  Creation
659 --End of Comments
660 ------------------------------------------------------------------------------
661 
662 procedure adjust_unit_cost( p_api_version    IN  NUMBER,
663                             p_init_msg_list  IN  VARCHAR2,
664                             x_return_status  OUT NOCOPY VARCHAR2,
665                             x_msg_count      OUT NOCOPY NUMBER,
666                             x_msg_data       OUT NOCOPY VARCHAR2,
667                             p_cle_id NUMBER,
668                             p_txdv_rec       IN  txdv_rec_type,
669                             p_txlv_rec       IN  txlv_rec_type
670 ) IS
671 
672 
673     l_return_status        VARCHAR2(1)  DEFAULT OKL_API.G_RET_STS_SUCCESS;
674     l_api_name             CONSTANT VARCHAR2(30) := 'adjust_unit_cost';
675     l_api_version          CONSTANT NUMBER := 1.0;
676 
677     l_fa_line_id NUMBER;
678     l_chr_id NUMBER;
679     l_tot_principal_payment NUMBER;
680     l_principal_payment_found varchar2(1) := 'N';
681     l_rule_id  number;
682     l_curr_cle_id NUMBER;
683 
684 
685    rec_count   NUMBER;
686    subtype klev_tbl_type is OKL_CONTRACT_PUB.klev_tbl_type;
687    subtype clev_tbl_type is OKL_OKC_MIGRATION_PVT.clev_tbl_type;
688 
689    l_clev_price_tbl   clev_tbl_type;
690    lx_clev_price_tbl  clev_tbl_type;
691    l_klev_price_tbl   klev_tbl_type;
692    lx_klev_price_tbl  klev_tbl_type;
693 
694    CURSOR k_line_curs(p_fa_line_id IN NUMBER) IS
695     SELECT cle.cle_id , sts.ste_code
696     FROM   okc_k_lines_b cle , OKC_STATUSES_B sts
697     WHERE  id = p_fa_line_id
698     and cle.sts_code = sts.code;
699 
700   l_ste_code OKC_STATUSES_B.STE_CODE%TYPE;
701 
702   --cursor to get model and fixed asset lines
703   cursor l_cleb_csr (p_cle_id in number,
704                      p_chr_id in number,
705                      p_lty_code in varchar2) is
706   select cleb.id,
707          cleb.price_unit
708   from   okc_k_lines_b cleb,
709          okc_line_styles_b lseb
710   where  cleb.cle_id      = p_cle_id
711   and    cleb.dnz_chr_id  = p_chr_id
712   and    cleb.lse_id      = lseb.id
713   and    lseb.lty_code    = p_lty_code;
714 
715     l_cleb_rec  l_cleb_csr%ROWTYPE;
716     CURSOR l_pmnt_strm_check(p_chrId NUMBER,
717                              p_cle_id NUMBER
718                              ) IS
719     SELECT crl.id
720     FROM   OKC_RULE_GROUPS_B crg,
721            OKC_RULES_B crl,
722            OKL_STRM_TYPE_B stty
723     WHERE  stty.id = crl.object1_id1
724            AND stty.stream_type_purpose = 'PRINCIPAL_PAYMENT'
725            AND crl.rgp_id = crg.id
726            AND crg.RGD_CODE = 'LALEVL'
727            AND crl.RULE_INFORMATION_CATEGORY = 'LASLH'
728            AND crg.dnz_chr_id = p_chrId
729            and cle_id = p_cle_id;
730 
731   CURSOR l_pmnt_strm_check2(
732                    rgcode OKC_RULE_GROUPS_B.RGD_CODE%TYPE,
733                    rlcat  OKC_RULES_B.RULE_INFORMATION_CATEGORY%TYPE,
734                    pmnt_strm_purpose OKL_STRM_TYPE_B.STREAM_TYPE_PURPOSE%TYPE,
735                    chrId NUMBER) IS
736     SELECT crg.cle_id,
737            crl.id,
738            crl.object1_id1,
739            crl.RULE_INFORMATION1,
740            crl.RULE_INFORMATION2,
741            crl.RULE_INFORMATION3,
742            crl.RULE_INFORMATION4,
743            crl.RULE_INFORMATION5,
744            crl.RULE_INFORMATION6,
745            crl.RULE_INFORMATION10,
746            crl.RULE_INFORMATION11
747     FROM   OKC_RULE_GROUPS_B crg,
748            OKC_RULES_B crl,
749            OKL_STRM_TYPE_B stty
750     WHERE  stty.id = crl.object1_id1
751            AND stty.stream_type_purpose = pmnt_strm_purpose
752            AND crl.rgp_id = crg.id
753            AND crg.RGD_CODE = rgcode
754            AND crl.RULE_INFORMATION_CATEGORY = rlcat
755            AND crg.dnz_chr_id = chrId;
756 
757   l_pmnt_strm_check_rec2 l_pmnt_strm_check2%ROWTYPE;
758 
759     CURSOR l_pmnt_lns_in_hdr(p_id OKC_RULES_B.ID%TYPE,
760                              chrId NUMBER) IS
761     SELECT
762     crl2.object1_id1,
763     crl2.object1_id2,
764     crl2.rule_information2,
765     NVL(crl2.rule_information3,0) rule_information3,
766     crl2.rule_information4,
767     crl2.rule_information5,
768     crl2.rule_information6,
769     crl2.rule_information7,
770     crl2.rule_information8,
771     crl2.rule_information10
772     FROM   OKC_RULES_B crl1, OKC_RULES_B crl2
773     WHERE crl1.id = crl2.object2_id1
774     AND crl1.id = p_id
775     AND crl2.RULE_INFORMATION_CATEGORY = 'LASLL'
776     AND crl1.RULE_INFORMATION_CATEGORY = 'LASLH'
777     AND crl1.dnz_chr_id = chrId
778     AND crl2.dnz_chr_id = chrId
779     ORDER BY crl2.rule_information2 ASC;
780 
781 
782  CURSOR l_pmnt_lns_in_hdr2(p_id OKC_RULES_B.ID%TYPE, chrId NUMBER) IS
783     SELECT
784     crl2.object1_id1,
785     crl2.object1_id2,
786     crl2.rule_information2,
787     NVL(crl2.rule_information3,0) rule_information3,
788     crl2.rule_information4,
789     crl2.rule_information5,
790     crl2.rule_information6,
791     crl2.rule_information7,
792     crl2.rule_information8,
793     crl2.rule_information10
794     FROM   OKC_RULES_B crl1, OKC_RULES_B crl2
795     WHERE crl1.id = crl2.object2_id1
796     AND crl1.id = p_id
797     AND crl2.RULE_INFORMATION_CATEGORY = 'LASLL'
798     AND crl1.RULE_INFORMATION_CATEGORY = 'LASLH'
799     AND crl1.dnz_chr_id = chrId
800     AND crl2.dnz_chr_id = chrId
801     ORDER BY crl2.rule_information2 ASC;
802 
803     l_pmnt_lns_in_hdr_rec2 l_pmnt_lns_in_hdr2%ROWTYPE;
804 
805     cursor l_kleb_csr (p_cle_id in number) IS
806     select CAPITALIZE_DOWN_PAYMENT_YN ,
807            CAPITAL_REDUCTION
808     from  okl_k_lines
809     where id=p_cle_id ;
810 
811     l_kleb_rec  l_kleb_csr%ROWTYPE;
812 
813   l_capitalize_downpayment_yn VARCHAR2(1):='N';
814   l_capital_reduction NUMBER;
815 
816   l_pmnt_strm_check_rec l_pmnt_strm_check%ROWTYPE;
817   l_pmnt_lns_in_hdr_rec l_pmnt_lns_in_hdr%ROWTYPE;
818 
819 
820   l_child_unit_cost       NUMBER;
821   l_child_quantity   NUMBER;
822   l_amort_subsidy_amount NUMBER;
823   l_total_amount NUMBER;
824   l_tot_unsched_prin_payment NUMBER;
825 
826     FUNCTION tot_unsched_prin_payment(
827                                       x_return_status OUT NOCOPY VARCHAR2,
828                                       p_chr_id IN NUMBER,
829                                       p_kle_id IN NUMBER) RETURN NUMBER IS
830     l_tot_amount NUMBER := 0;
831     BEGIN
832      x_return_status := Okl_Api.G_RET_STS_SUCCESS;
833      FOR l_pmnt_strm_check_rec2 IN l_pmnt_strm_check2('LALEVL','LASLH','UNSCHEDULED_PRINCIPAL_PAYMENT', p_chr_id)
834      LOOP
835        IF (l_pmnt_strm_check_rec2.cle_id = p_kle_id) THEN
836          FOR l_pmnt_lns_in_hdr_rec2 IN l_pmnt_lns_in_hdr2(l_pmnt_strm_check_rec2.id ,p_chr_id)
837          LOOP
838            l_tot_amount := l_tot_amount + NVL(l_pmnt_lns_in_hdr_rec2.rule_information8,0);
839          END LOOP;
840        END IF;
841      END LOOP;
842 
843      RETURN(l_tot_amount);
844 
845      EXCEPTION WHEN OTHERS THEN
846        --print('Exception In tot_unsched_prin_payment...sqlcode=' || sqlcode || ' sqlerrm=' || sqlerrm);
847        x_return_status := Okl_Api.G_RET_STS_ERROR;
848        RETURN(0);
849     END; -- tot_unsched_prin_payment
850 
851 
852  begin
853 
854     -- Call start_activity to create savepoint, check compatibility
855     -- and initialize message list
856     x_return_status := OKL_API.START_ACTIVITY (
857                                  l_api_name
858                                  ,p_init_msg_list
859                                  ,'_PVT'
860                                  ,x_return_status);
861       -- Check if activity started successfully
862     IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
863         RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
864     ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
865         RAISE OKL_API.G_EXCEPTION_ERROR;
866     END IF;
867 
868     l_fa_line_id:= p_cle_id;
869     l_chr_id:= p_txlv_rec.dnz_khr_id;
870 
871     OPEN k_line_curs(l_fa_line_id);
872     FETCH k_line_curs INTO l_curr_cle_id,l_ste_code;
873     IF k_line_curs%NOTFOUND THEN
874        NULL;
875     END IF;
876     CLOSE k_line_curs;
877 
878     IF l_ste_code NOT IN ('CANCELLED','TERMINATED','HOLD','EXPIRED') THEN
879 
880     l_tot_principal_payment:=0;
881 
882     --check whether principal payment exists
883 
884     l_principal_payment_found:='Y';
885 
886     OPEN l_pmnt_strm_check(l_chr_id,l_curr_cle_id);
887     FETCH l_pmnt_strm_check into l_rule_id;
888     IF l_pmnt_strm_check%NOTFOUND THEN
889         l_principal_payment_found:='N';
890     ELSE
891         l_principal_payment_found:='Y';
892     END IF;
893     close l_pmnt_strm_check;
894 
895 
896     IF l_principal_payment_found='Y' THEN
897          --get the total principal payment amount
898         FOR l_pmnt_lns_in_hdr_rec IN l_pmnt_lns_in_hdr(l_rule_id ,l_chr_id)
899         LOOP
900           l_tot_principal_payment := l_tot_principal_payment +
901           NVL(l_pmnt_lns_in_hdr_rec.rule_information3,0) * NVL(l_pmnt_lns_in_hdr_rec.rule_information6, 0) +
902           NVL(l_pmnt_lns_in_hdr_rec.rule_information8, 0);
903         END LOOP;
904 
905        ---------get subsidy amount if any--
906         l_amort_subsidy_amount :=0;
907         Okl_Subsidy_Process_Pvt.get_asset_subsidy_amount(
908             p_api_version                  => 1.0,
909             p_init_msg_list                => Okl_Api.G_FALSE,
910             x_return_status                => l_return_status,
911             x_msg_count                    => x_msg_count,
912             x_msg_data                     => x_msg_data,
913             p_asset_cle_id                 => l_curr_cle_id,
914             p_accounting_method            => 'AMORTIZE',
915             x_subsidy_amount               => l_amort_subsidy_amount);
916 
917        l_amort_subsidy_amount:=NVL(l_amort_subsidy_amount,0);
918 
919 
920      -- get capitalized downpayment amount --------
921 
922       l_capital_reduction :=0;
923 
924       open l_kleb_csr(p_cle_id   => l_curr_cle_id);
925       fetch l_kleb_csr into l_kleb_rec;
926       If l_kleb_csr%NOTFOUND THEN
927           l_capital_reduction :=0;
928       Else
929         IF NVL(l_kleb_rec.CAPITALIZE_DOWN_PAYMENT_YN,'X')='Y' THEN
930             l_capital_reduction :=  NVL(l_kleb_rec.CAPITAL_REDUCTION,0);
931         END IF;
932       End if;
933      -----------------------------------
934        --Total Unscheduled Principal Payment
935       l_tot_unsched_prin_payment :=
936                    tot_unsched_prin_payment(l_return_status,
937                                      l_chr_id, l_curr_cle_id);
938 
939       --total amount
940       l_total_amount := l_amort_subsidy_amount + l_tot_principal_payment
941                         +l_capital_reduction + l_tot_unsched_prin_payment ;
942 
943 
944       IF NVL(p_txlv_rec.SPLIT_INTO_SINGLES_FLAG,'X')='Y' THEN
945          l_child_quantity:=1;
946       ELSE
947          l_child_quantity  := p_txdv_rec.quantity;
948       END IF;
949 
950       --evaluate the unit cost
951       l_child_unit_cost := l_total_amount/l_child_quantity ;
952 
953 
954       --Update the contract line with the unit cost
955 
956       rec_count:=0;
957       rec_count                              := rec_count+1;
958       l_clev_price_tbl(rec_count).id         := l_fa_line_id;
959       l_klev_price_tbl(rec_count).id         := l_fa_line_id;
960       l_clev_price_tbl(rec_count).price_unit := l_child_unit_cost;
961 
962       open l_cleb_csr(p_cle_id   => l_curr_cle_id,
963                       p_chr_id   => l_chr_id,
964                       p_lty_code => 'ITEM');
965       fetch l_cleb_csr into l_cleb_rec;
966       If l_cleb_csr%NOTFOUND then
967           Null;
968       Else
969           rec_count                              := rec_count+1;
970           l_clev_price_tbl(rec_count).id         := l_cleb_rec.id;
971           l_klev_price_tbl(rec_count).id         := l_cleb_rec.id;
972           l_clev_price_tbl(rec_count).price_unit := l_child_unit_cost;
973 
974       End If;
975       close l_cleb_csr;
976 
977       --Call api to update line
978      OKL_CONTRACT_PUB.update_contract_line(
979                   p_api_version    => p_api_version,
980                   p_init_msg_list  => p_init_msg_list,
981                   x_return_status  => x_return_status,
982                   x_msg_count      => x_msg_count,
983                   x_msg_data       => x_msg_data,
984                   p_clev_tbl       => l_clev_price_tbl,
985                   p_klev_tbl       => l_klev_price_tbl,
986                   x_clev_tbl       => lx_clev_price_tbl,
987                   x_klev_tbl       => lx_klev_price_tbl);
988 
989         --dbms_output.put_line('After updating contract line :'||x_return_status);
990         IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
991                 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
992         ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
993                 RAISE OKL_API.G_EXCEPTION_ERROR;
994         END IF;
995       END IF; -- l_principal_payment_found
996   END IF; --l_ste_code
997 
998 EXCEPTION
999       WHEN OKL_API.G_EXCEPTION_ERROR THEN
1000       x_return_status := OKL_API.HANDLE_EXCEPTIONS(
1001                                l_api_name,
1002                                G_PKG_NAME,
1003                                'OKL_API.G_RET_STS_ERROR',
1004                                x_msg_count,
1005                                x_msg_data,
1006                                '_PVT');
1007      WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
1008       x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
1009                               l_api_name,
1010                               G_PKG_NAME,
1011                               'OKL_API.G_RET_STS_UNEXP_ERROR',
1012                               x_msg_count,
1013                               x_msg_data,
1014                               '_PVT');
1015      WHEN OTHERS THEN
1016       x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
1017                               l_api_name,
1018                               G_PKG_NAME,
1019                               'OTHERS',
1020                               x_msg_count,
1021                               x_msg_data,
1022                               '_PVT');
1023 end adjust_unit_cost;
1024 
1025 
1026 --Bug# 6344223
1027 ------------------------------------------------------------------------------
1028 --Bug# 6344223
1029 --API Name    : SYNC_STREAMS
1030 --Description : API to perform stream generation processing for Split asset.
1031 --History     :
1032 --              25-Jul-2007    rirawat  Creation
1033 --End of Comments
1034 ------------------------------------------------------------------------------
1035 PROCEDURE sync_streams(p_api_version    IN  NUMBER,
1036                               p_init_msg_list  IN  VARCHAR2,
1037                               x_return_status  OUT NOCOPY VARCHAR2,
1038                               x_msg_count      OUT NOCOPY NUMBER,
1039                               x_msg_data       OUT NOCOPY VARCHAR2,
1040                               p_chr_id         IN  NUMBER ) IS
1041 
1042 
1043     l_api_name               CONSTANT VARCHAR2(30) := 'sync_streams';
1044     l_api_version            CONSTANT NUMBER := 1.0;
1045 
1046     l_trx_number           NUMBER;
1047     l_trx_status           VARCHAR2(100);
1048 BEGIN
1049      -- Call start_activity to create savepoint, check compatibility
1050      -- and initialize message list
1051      x_return_status := OKL_API.START_ACTIVITY (
1052                              l_api_name
1053                              ,p_init_msg_list
1054                              ,'_PVT'
1055                              ,x_return_status);
1056      -- Check if activity started successfully
1057      IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
1058        RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
1059      ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
1060        RAISE OKL_API.G_EXCEPTION_ERROR;
1061      END IF;
1062 
1063      okl_contract_status_pub.update_contract_status(
1064             p_api_version      => l_api_version,
1065             p_init_msg_list    => p_init_msg_list,
1066             x_return_status    => x_return_status,
1067             x_msg_count        => x_msg_count,
1068             x_msg_data         => x_msg_data,
1069             p_khr_status       => 'PASSED',
1070             p_chr_id           => p_chr_id);
1071       IF (x_return_status = Okl_Api.G_RET_STS_UNEXP_ERROR) THEN
1072           RAISE Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR;
1073       ELSIF (x_return_status = Okl_Api.G_RET_STS_ERROR) THEN
1074           RAISE Okl_Api.G_EXCEPTION_ERROR;
1075       END IF;
1076 
1077       --cascade status to lines
1078       okl_contract_status_pub.cascade_lease_status(
1079            p_api_version      => l_api_version,
1080            p_init_msg_list    => p_init_msg_list,
1081            x_return_status    => x_return_status,
1082            x_msg_count        => x_msg_count,
1083            x_msg_data         => x_msg_data,
1084            p_chr_id           => p_chr_id);
1085 
1086       IF (x_return_status = Okl_Api.G_RET_STS_UNEXP_ERROR) THEN
1087           RAISE Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR;
1088       ELSIF (x_return_status = Okl_Api.G_RET_STS_ERROR) THEN
1089           RAISE Okl_Api.G_EXCEPTION_ERROR;
1090       END IF;
1091 
1092      OKL_LA_STREAM_PUB.GEN_INTR_EXTR_STREAM (
1093                                       p_api_version         => l_api_version,
1094                                       p_init_msg_list       => p_init_msg_list,
1095                                       x_return_status       => x_return_status,
1096                                       x_msg_count           => x_msg_count,
1097                                       x_msg_data            => x_msg_data,
1098                                       p_khr_id              => p_chr_id,
1099                                       p_generation_ctx_code => 'AUTH',
1100                                       x_trx_number          => l_trx_number,
1101                                       x_trx_status          => l_trx_status);
1102 
1103     -- check if activity started successfully
1104     IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
1105       RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
1106     ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
1107       RAISE OKL_API.G_EXCEPTION_ERROR;
1108     END IF;
1109    OKL_API.END_ACTIVITY (x_msg_count,
1110                          x_msg_data);
1111  EXCEPTION
1112    WHEN OKL_API.G_EXCEPTION_ERROR THEN
1113    x_return_status := OKL_API.HANDLE_EXCEPTIONS(
1114                               l_api_name,
1115                               G_PKG_NAME,
1116                               'OKL_API.G_RET_STS_ERROR',
1117                               x_msg_count,
1118                               x_msg_data,
1119                               '_PVT');
1120    WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
1121    x_return_status := OKL_API.HANDLE_EXCEPTIONS(
1122                              l_api_name,
1123                              G_PKG_NAME,
1124                              'OKL_API.G_RET_STS_UNEXP_ERROR',
1125                              x_msg_count,
1126                              x_msg_data,
1127                              '_PVT');
1128    WHEN OTHERS THEN
1129    x_return_status := OKL_API.HANDLE_EXCEPTIONS(
1130                              l_api_name,
1131                              G_PKG_NAME,
1132                              'OTHERS',
1133                              x_msg_count,
1134                              x_msg_data,
1135                              '_PVT');
1136 
1137 END sync_streams;
1138 
1139 
1140 
1141 --Bug# 6344223
1142 ------------------------------------------------------------------------------
1143 --Bug# 6344223
1144 --API Name    : SPLIT_ASSET_AFTER_YIELD
1145 --Description : API to perform post stream generation processing for Split asset.
1146 --History     :
1147 --              25-Jul-2007    bkatraga  Creation
1148 --End of Comments
1149 ------------------------------------------------------------------------------
1150 PROCEDURE SPLIT_ASSET_AFTER_YIELD (p_api_version   IN  NUMBER,
1151                                    p_init_msg_list IN  VARCHAR2 DEFAULT OKL_API.G_FALSE,
1152                                    x_return_status OUT NOCOPY   VARCHAR2,
1153                                    x_msg_count     OUT NOCOPY   NUMBER,
1154                                    x_msg_data      OUT NOCOPY   VARCHAR2,
1155                                    p_chr_id        IN  NUMBER) IS
1156 
1157 l_return_status          VARCHAR2(1)  DEFAULT OKL_API.G_RET_STS_SUCCESS;
1158 l_api_name               CONSTANT VARCHAR2(30) := 'SPLIT_ASSET_AFTER_YIELD';
1159 l_api_version            CONSTANT NUMBER := 1.0;
1160 l_split_trx_flag         VARCHAR2(1);
1161 l_accrual_rec            OKL_GENERATE_ACCRUALS_PVT.adjust_accrual_rec_type;
1162 l_stream_tbl             OKL_GENERATE_ACCRUALS_PVT.stream_tbl_type;
1163 l_chr_secure             VARCHAR2(3) := OKL_API.G_FALSE;
1164 l_inv_agmt_chr_id_tbl    OKL_SECURITIZATION_PVT.inv_agmt_chr_id_tbl_type;
1165 l_inv_accrual_rec        OKL_GENERATE_ACCRUALS_PVT.adjust_accrual_rec_type;
1166 l_inv_stream_tbl         OKL_GENERATE_ACCRUALS_PVT.stream_tbl_type;
1167 l_trxv_rec               trxv_rec_type;
1168 lx_trxv_rec              trxv_rec_type;
1169 l_split_trans_id         OKL_TRX_ASSETS.ID%TYPE;
1170 l_trx_number             OKL_TRX_CONTRACTS.TRX_NUMBER%TYPE := null; -- MGAAP
1171 l_trx_reason_asset_split VARCHAR2(20) := OKL_SECURITIZATION_PVT.G_TRX_REASON_ASSET_SPLIT;
1172 
1173 --Cursor to check whether split asset transaction is in progress for the contract
1174 CURSOR check_split_trx_csr IS
1175  SELECT tas.id
1176    FROM OKL_TXL_ASSETS_B txl, OKL_TRX_ASSETS tas
1177   WHERE txl.tal_type= 'ALI'
1178     AND txl.dnz_khr_id = p_chr_id
1179     AND txl.tas_id = tas.id
1180     AND tas.tas_type = 'ALI'
1181     AND tas.tsu_code = 'ENTERED';
1182 
1183 -- MGAAP start 7263041
1184 CURSOR check_csr(p_chr_id NUMBER) IS
1185 SELECT A.MULTI_GAAP_YN,
1186        B.REPORTING_PDT_ID
1187 FROM   OKL_K_HEADERS A,
1188        OKL_PRODUCTS B
1189 WHERE  A.ID = p_chr_id
1190 AND    A.PDT_ID = B.ID;
1191 
1192 l_multi_gaap_yn OKL_K_HEADERS.MULTI_GAAP_YN%TYPE;
1193 l_reporting_pdt_id OKL_PRODUCTS.REPORTING_PDT_ID%TYPE;
1194 -- MGAAP start 7263041
1195 
1196 --Bug# 9191475
1197 lx_trxnum_tbl     OKL_GENERATE_ACCRUALS_PVT.trxnum_tbl_type;
1198 l_trxnum_init_tbl OKL_GENERATE_ACCRUALS_PVT.trxnum_tbl_type;
1199 
1200 BEGIN
1201   -- Call start_activity to create savepoint, check compatibility
1202   -- and initialize message list
1203   x_return_status := OKL_API.START_ACTIVITY (
1204                              l_api_name
1205                              ,p_init_msg_list
1206                              ,'_PVT'
1207                              ,x_return_status);
1208    -- Check if activity started successfully
1209    IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
1210        RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
1211    ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
1212        RAISE OKL_API.G_EXCEPTION_ERROR;
1213    END IF;
1214 
1215    -- MGAAP start 7263041
1216    OPEN check_csr(p_chr_id);
1217    FETCH check_csr
1218    INTO  l_multi_gaap_yn, l_reporting_pdt_id;
1219    CLOSE check_csr;
1220    -- MGAAP end 7263041
1221 
1222    OPEN check_split_trx_csr;
1223    FETCH check_split_trx_csr INTO l_split_trans_id;
1224    CLOSE check_split_trx_csr;
1225 
1226    --Split asset transaction exists for the contract
1227    IF(l_split_trans_id IS NOT NULL) THEN
1228       okl_contract_status_pub.update_contract_status(
1229             p_api_version      => p_api_version,
1230             p_init_msg_list    => p_init_msg_list,
1231             x_return_status    => x_return_status,
1232             x_msg_count        => x_msg_count,
1233             x_msg_data         => x_msg_data,
1234             p_khr_status       => 'BOOKED',
1235             p_chr_id           => p_chr_id);
1236       IF (x_return_status = Okl_Api.G_RET_STS_UNEXP_ERROR) THEN
1237           RAISE Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR;
1238       ELSIF (x_return_status = Okl_Api.G_RET_STS_ERROR) THEN
1239           RAISE Okl_Api.G_EXCEPTION_ERROR;
1240       END IF;
1241 
1242       --cascade status to lines
1243       okl_contract_status_pub.cascade_lease_status(
1244            p_api_version      => p_api_version,
1245            p_init_msg_list    => p_init_msg_list,
1246            x_return_status    => x_return_status,
1247            x_msg_count        => x_msg_count,
1248            x_msg_data         => x_msg_data,
1249            p_chr_id           => p_chr_id);
1250       IF (x_return_status = Okl_Api.G_RET_STS_UNEXP_ERROR) THEN
1251           RAISE Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR;
1252       ELSIF (x_return_status = Okl_Api.G_RET_STS_ERROR) THEN
1253           RAISE Okl_Api.G_EXCEPTION_ERROR;
1254       END IF;
1255 
1256       --Bug# 6336455
1257       -- R12B Authoring OA Migration
1258       -- Update the status of the Submit Contract task to Complete
1259       OKL_BOOK_CONTROLLER_PVT.update_book_controller_trx(
1260         p_api_version        => p_api_version,
1261         p_init_msg_list      => p_init_msg_list,
1262         x_return_status      => x_return_status,
1263         x_msg_count          => x_msg_count,
1264         x_msg_data           => x_msg_data,
1265         p_khr_id             => p_chr_id ,
1266         p_prog_short_name    => OKL_BOOK_CONTROLLER_PVT.G_SUBMIT_CONTRACT,
1267         p_progress_status    => OKL_BOOK_CONTROLLER_PVT.G_PROG_STS_COMPLETE);
1268 
1269       IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
1270         Raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
1271       ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) then
1272         Raise OKL_API.G_EXCEPTION_ERROR;
1273       END IF;
1274 
1275       OKL_CONTRACT_REBOOK_PVT.create_billing_adjustment(
1276            p_api_version     => p_api_version,
1277            p_init_msg_list   => p_init_msg_list,
1278            x_return_status   => x_return_status,
1279            x_msg_count       => x_msg_count,
1280            x_msg_data        => x_msg_data,
1281            p_rbk_khr_id      => p_chr_id,
1282            p_orig_khr_id     => p_chr_id,
1283            p_trx_id          => l_split_trans_id,
1284            p_trx_date        => sysdate);
1285       IF (x_return_status = Okl_Api.G_RET_STS_UNEXP_ERROR) THEN
1286          RAISE Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR;
1287       ELSIF (x_return_status = Okl_Api.G_RET_STS_ERROR) THEN
1288          RAISE Okl_Api.G_EXCEPTION_ERROR;
1289       END IF;
1290 
1291       OKL_STREAMS_SEC_PVT.RESET_REPO_STREAMS; -- MGAAP 7263041
1292       OKL_CONTRACT_REBOOK_PVT.calc_accrual_adjustment(
1293            p_api_version     => p_api_version,
1294            p_init_msg_list   => p_init_msg_list,
1295            x_return_status   => x_return_status,
1296            x_msg_count       => x_msg_count,
1297            x_msg_data        => x_msg_data,
1298            p_rbk_khr_id      => p_chr_id,
1299            p_orig_khr_id     => p_chr_id,
1300            p_trx_id          => l_split_trans_id,
1301            p_trx_date        => sysdate,
1302            x_accrual_rec     => l_accrual_rec,
1303            x_stream_tbl      => l_stream_tbl,
1304            p_trx_tbl_code    => 'TAS',
1305            p_trx_type        => 'ALI');
1306       IF (x_return_status = Okl_Api.G_RET_STS_UNEXP_ERROR) THEN
1307          RAISE Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR;
1308       ELSIF (x_return_status = Okl_Api.G_RET_STS_ERROR) THEN
1309          RAISE Okl_Api.G_EXCEPTION_ERROR;
1310       END IF;
1311 
1312       IF (l_stream_tbl.COUNT > 0) THEN
1313          OKL_GENERATE_ACCRUALS_PVT.ADJUST_ACCRUALS (
1314              p_api_version    => p_api_version,
1315              p_init_msg_list  => p_init_msg_list,
1316              x_return_status  => x_return_status,
1317              x_msg_count      => x_msg_count,
1318              x_msg_data       => x_msg_data ,
1319              --Bug# 9191475
1320              --x_trx_number     => l_trx_number,
1321              x_trx_tbl        => lx_trxnum_tbl,
1322              p_accrual_rec    => l_accrual_rec,
1323              p_stream_tbl     => l_stream_tbl);
1324          IF (x_return_status = Okl_Api.G_RET_STS_UNEXP_ERROR) THEN
1325             RAISE Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR;
1326          ELSIF (x_return_status = Okl_Api.G_RET_STS_ERROR) THEN
1327             RAISE Okl_Api.G_EXCEPTION_ERROR;
1328          END IF;
1329       END IF;
1330 
1331       -- MGAAP start 7263041
1332       OKL_STREAMS_SEC_PVT.SET_REPO_STREAMS; -- MGAAP 7263041
1333       OKL_CONTRACT_REBOOK_PVT.calc_accrual_adjustment(
1334            p_api_version     => p_api_version,
1335            p_init_msg_list   => p_init_msg_list,
1336            x_return_status   => x_return_status,
1337            x_msg_count       => x_msg_count,
1338            x_msg_data        => x_msg_data,
1339            p_rbk_khr_id      => p_chr_id,
1340            p_orig_khr_id     => p_chr_id,
1341            p_trx_id          => l_split_trans_id,
1342            p_trx_date        => sysdate,
1343            x_accrual_rec     => l_accrual_rec,
1344            x_stream_tbl      => l_stream_tbl,
1345            p_trx_tbl_code    => 'TAS',
1346            p_trx_type        => 'ALI');
1347 
1348       OKL_STREAMS_SEC_PVT.RESET_REPO_STREAMS; -- MGAAP 7263041
1349       IF (x_return_status = Okl_Api.G_RET_STS_UNEXP_ERROR) THEN
1350          RAISE Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR;
1351       ELSIF (x_return_status = Okl_Api.G_RET_STS_ERROR) THEN
1352          RAISE Okl_Api.G_EXCEPTION_ERROR;
1353       END IF;
1354 
1355       IF (l_stream_tbl.COUNT > 0) THEN
1356          --Bug# 9191475
1357          --l_accrual_rec.trx_number := l_trx_number;
1358          OKL_GENERATE_ACCRUALS_PVT.ADJUST_ACCRUALS (
1359              p_api_version    => p_api_version,
1360              p_init_msg_list  => p_init_msg_list,
1361              x_return_status  => x_return_status,
1362              x_msg_count      => x_msg_count,
1363              x_msg_data       => x_msg_data ,
1364              --Bug# 9191475
1365              --x_trx_number     => l_trx_number,
1366              x_trx_tbl        => lx_trxnum_tbl,
1367              p_accrual_rec    => l_accrual_rec,
1368              p_stream_tbl     => l_stream_tbl,
1369              p_representation_type     => 'SECONDARY');
1370          IF (x_return_status = Okl_Api.G_RET_STS_UNEXP_ERROR) THEN
1371             RAISE Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR;
1372          ELSIF (x_return_status = Okl_Api.G_RET_STS_ERROR) THEN
1373             RAISE Okl_Api.G_EXCEPTION_ERROR;
1374          END IF;
1375       END IF;
1376       -- MGAAP end 7263041
1377 
1378       okl_securitization_pvt.check_khr_securitized(
1379             p_api_version              => p_api_version,
1380             p_init_msg_list            => p_init_msg_list,
1381             x_return_status            => x_return_status,
1382             x_msg_count                => x_msg_count,
1383             x_msg_data                 => x_msg_data,
1384             p_khr_id                   => p_chr_id,
1385             p_effective_date           => sysdate,
1386             x_value                    => l_chr_secure,
1387             x_inv_agmt_chr_id_tbl      => l_inv_agmt_chr_id_tbl);
1388       IF (x_return_status = Okl_Api.G_RET_STS_UNEXP_ERROR) THEN
1389          RAISE Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR;
1390       ELSIF (x_return_status = Okl_Api.G_RET_STS_ERROR) THEN
1391          RAISE Okl_Api.G_EXCEPTION_ERROR;
1392       END IF;
1393 
1394       --Bug# 6788253
1395       IF l_chr_secure = OKL_API.G_TRUE THEN
1396          OKL_SECURITIZATION_PVT.modify_pool_contents(
1397                p_api_version         => p_api_version,
1398                p_init_msg_list       => p_init_msg_list,
1399                p_transaction_reason  => l_trx_reason_asset_split,
1400                p_khr_id              => p_chr_id,
1401                p_transaction_date    => SYSDATE,
1402                p_effective_date      => SYSDATE,
1403                x_return_status       => x_return_status,
1404                x_msg_count           => x_msg_count,
1405                x_msg_data            => x_msg_data);
1406          IF (x_return_status = Okl_Api.G_RET_STS_UNEXP_ERROR) THEN
1407            RAISE Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR;
1408          ELSIF (x_return_status = Okl_Api.G_RET_STS_ERROR) THEN
1409            RAISE Okl_Api.G_EXCEPTION_ERROR;
1410          END IF;
1411 
1412          OKL_STREAM_GENERATOR_PVT.create_disb_streams(
1413               p_api_version      => p_api_version,
1414               p_init_msg_list    => p_init_msg_list,
1415               x_return_status    => x_return_status,
1416               x_msg_count        => x_msg_count,
1417               x_msg_data         => x_msg_data,
1418               p_contract_id      => p_chr_id);
1419          IF (x_return_status = Okl_Api.G_RET_STS_UNEXP_ERROR) THEN
1420            RAISE Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR;
1421          ELSIF (x_return_status = Okl_Api.G_RET_STS_ERROR) THEN
1422            RAISE Okl_Api.G_EXCEPTION_ERROR;
1423          END IF;
1424 
1425          OKL_STREAM_GENERATOR_PVT.create_pv_streams(
1426               p_api_version      => p_api_version,
1427               p_init_msg_list    => p_init_msg_list,
1428               x_return_status    => x_return_status,
1429               x_msg_count        => x_msg_count,
1430               x_msg_data         => x_msg_data,
1431               p_contract_id      => p_chr_id);
1432          IF (x_return_status = Okl_Api.G_RET_STS_UNEXP_ERROR) THEN
1433            RAISE Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR;
1434          ELSIF (x_return_status = Okl_Api.G_RET_STS_ERROR) THEN
1435            RAISE Okl_Api.G_EXCEPTION_ERROR;
1436          END IF;
1437 
1438          OKL_ACCRUAL_SEC_PVT.CREATE_STREAMS(
1439               p_api_version      => p_api_version,
1440               p_init_msg_list    => p_init_msg_list,
1441               x_return_status    => x_return_status,
1442               x_msg_count        => x_msg_count,
1443               x_msg_data         => x_msg_data,
1444               p_khr_id           => p_chr_id);
1445          IF (x_return_status = Okl_Api.G_RET_STS_UNEXP_ERROR) THEN
1446            RAISE Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR;
1447          ELSIF (x_return_status = Okl_Api.G_RET_STS_ERROR) THEN
1448            RAISE Okl_Api.G_EXCEPTION_ERROR;
1449          END IF;
1450 
1451          OKL_CONTRACT_REBOOK_PVT.create_inv_disb_adjustment(
1452               p_api_version      => p_api_version,
1453               p_init_msg_list    => p_init_msg_list,
1454               x_return_status    => x_return_status,
1455               x_msg_count        => x_msg_count,
1456               x_msg_data         => x_msg_data,
1457               p_orig_khr_id      => p_chr_id);
1458          IF (x_return_status = Okl_Api.G_RET_STS_UNEXP_ERROR) THEN
1459            RAISE Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR;
1460          ELSIF (x_return_status = Okl_Api.G_RET_STS_ERROR) THEN
1461            RAISE Okl_Api.G_EXCEPTION_ERROR;
1462          END IF;
1463 
1464          l_trx_number := null; -- MGAAP 7263041
1465          --Bug# 9191475
1466          lx_trxnum_tbl := l_trxnum_init_tbl;
1467          OKL_CONTRACT_REBOOK_PVT.calc_inv_acc_adjustment(
1468               p_api_version     => p_api_version,
1469               p_init_msg_list   => p_init_msg_list,
1470               x_return_status   => x_return_status,
1471               x_msg_count       => x_msg_count,
1472               x_msg_data        => x_msg_data,
1473               p_orig_khr_id     => p_chr_id,
1474               p_trx_id          => l_split_trans_id,
1475               p_trx_date        => sysdate,
1476               x_inv_accrual_rec => l_inv_accrual_rec,
1477               x_inv_stream_tbl  => l_inv_stream_tbl,
1478               p_trx_tbl_code    => 'TAS',
1479               p_trx_type        => 'ALI');
1480          IF (x_return_status = Okl_Api.G_RET_STS_UNEXP_ERROR) THEN
1481             RAISE Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR;
1482          ELSIF (x_return_status = Okl_Api.G_RET_STS_ERROR) THEN
1483             RAISE Okl_Api.G_EXCEPTION_ERROR;
1484          END IF;
1485 
1486          IF (l_inv_stream_tbl.COUNT > 0) THEN
1487             OKL_GENERATE_ACCRUALS_PVT.ADJUST_ACCRUALS (
1488                 p_api_version    => p_api_version,
1489                 p_init_msg_list  => p_init_msg_list,
1490                 x_return_status  => x_return_status,
1491                 x_msg_count      => x_msg_count,
1492                 x_msg_data       => x_msg_data ,
1493                 --Bug# 9191475
1494                 --x_trx_number     => l_trx_number,
1495                 x_trx_tbl        => lx_trxnum_tbl,
1496                 p_accrual_rec    => l_inv_accrual_rec,
1497                 p_stream_tbl     => l_inv_stream_tbl);
1498             IF (x_return_status = Okl_Api.G_RET_STS_UNEXP_ERROR) THEN
1499                RAISE Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR;
1500             ELSIF (x_return_status = Okl_Api.G_RET_STS_ERROR) THEN
1501                RAISE Okl_Api.G_EXCEPTION_ERROR;
1502             END IF;
1503          END IF;
1504 
1505          -- MGAAP start 7263041
1506          IF (l_multi_gaap_yn = 'Y') THEN
1507            OKL_STREAMS_SEC_PVT.SET_REPO_STREAMS;
1508            OKL_CONTRACT_REBOOK_PVT.calc_inv_acc_adjustment(
1509                 p_api_version     => p_api_version,
1510                 p_init_msg_list   => p_init_msg_list,
1511                 x_return_status   => x_return_status,
1512                 x_msg_count       => x_msg_count,
1513                 x_msg_data        => x_msg_data,
1514                 p_orig_khr_id     => p_chr_id,
1515                 p_trx_id          => l_split_trans_id,
1516                 p_trx_date        => sysdate,
1517                 x_inv_accrual_rec => l_inv_accrual_rec,
1518                 x_inv_stream_tbl  => l_inv_stream_tbl,
1519                 p_trx_tbl_code    => 'TAS',
1520                 p_trx_type        => 'ALI',
1521                 p_product_id       => l_reporting_pdt_id); -- MGAAP 7263041
1522 
1523            OKL_STREAMS_SEC_PVT.RESET_REPO_STREAMS;
1524            IF (x_return_status = Okl_Api.G_RET_STS_UNEXP_ERROR) THEN
1525               RAISE Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR;
1526            ELSIF (x_return_status = Okl_Api.G_RET_STS_ERROR) THEN
1527               RAISE Okl_Api.G_EXCEPTION_ERROR;
1528            END IF;
1529 
1530            IF (l_inv_stream_tbl.COUNT > 0) THEN
1531               --Bug# 9191475
1532               --l_inv_accrual_rec.trx_number := l_trx_number;
1533               OKL_GENERATE_ACCRUALS_PVT.ADJUST_ACCRUALS (
1534                   p_api_version    => p_api_version,
1535                   p_init_msg_list  => p_init_msg_list,
1536                   x_return_status  => x_return_status,
1537                   x_msg_count      => x_msg_count,
1538                   x_msg_data       => x_msg_data,
1539                   --Bug# 9191475
1540                   x_trx_tbl        => lx_trxnum_tbl,
1541                   --x_trx_number     => l_trx_number,
1542                   p_accrual_rec    => l_inv_accrual_rec,
1543                   p_stream_tbl     => l_inv_stream_tbl,
1544                   p_representation_type     => 'SECONDARY');
1545               IF (x_return_status = Okl_Api.G_RET_STS_UNEXP_ERROR) THEN
1546                  RAISE Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR;
1547               ELSIF (x_return_status = Okl_Api.G_RET_STS_ERROR) THEN
1548                  RAISE Okl_Api.G_EXCEPTION_ERROR;
1549               END IF;
1550            END IF;
1551          END IF;
1552          -- MGAAP end 7263041
1553       END IF;
1554 
1555       ------------------------------------------------------------------------
1556       --Bug# : R12.B eBTax impact Start
1557       ------------------------------------------------------------------------
1558       okl_process_sales_tax_pvt.calculate_sales_tax(
1559          p_api_version             => p_api_version,
1560          p_init_msg_list           => p_init_msg_list,
1561          x_return_status           => x_return_status,
1562          x_msg_count               => x_msg_count,
1563          x_msg_data                => x_msg_data,
1564          p_source_trx_id           => l_split_trans_id, --<okl_trx_assets.id>,
1565          p_source_trx_name         => 'Split Asset',
1566          p_source_table            => 'OKL_TRX_ASSETS');
1567 
1568          IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
1569              RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
1570          ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
1571              RAISE OKL_API.G_EXCEPTION_ERROR;
1572          END IF;
1573 
1574       ------------------------------------------------------------------------
1575       --Bug# : R12.B eBTax impact End
1576       ------------------------------------------------------------------------
1577 
1578 	 l_trxv_rec.id := l_split_trans_id;
1579 	 l_trxv_rec.tsu_code := 'PROCESSED';
1580 	 OKL_TRX_ASSETS_PUB.update_trx_ass_h_def(
1581 	      p_api_version   => p_api_version,
1582 	      p_init_msg_list => p_init_msg_list,
1583 	      x_return_status => x_return_status,
1584 	      x_msg_count     => x_msg_count,
1585 	      x_msg_data      => x_msg_data,
1586 	      p_thpv_rec      => l_trxv_rec,
1587 	      x_thpv_rec      => lx_trxv_rec);
1588 	 IF (x_return_status = Okl_Api.G_RET_STS_UNEXP_ERROR) THEN
1589 	    RAISE Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR;
1590 	 ELSIF (x_return_status = Okl_Api.G_RET_STS_ERROR) THEN
1591 	    RAISE Okl_Api.G_EXCEPTION_ERROR;
1592 	 END IF;
1593 
1594    -- racheruv: added update of okl_stream_trx_data.last_trx_state
1595      okl_streams_util.update_trx_state(p_chr_id, 'BOTH');
1596    -- end update of okl_stream_trx_data.last_trx_state
1597 
1598    END IF;
1599 
1600    OKL_API.END_ACTIVITY (x_msg_count,
1601                          x_msg_data);
1602  EXCEPTION
1603    WHEN OKL_API.G_EXCEPTION_ERROR THEN
1604    x_return_status := OKL_API.HANDLE_EXCEPTIONS(
1605                               l_api_name,
1606                               G_PKG_NAME,
1607                               'OKL_API.G_RET_STS_ERROR',
1608                               x_msg_count,
1609                               x_msg_data,
1610                               '_PVT');
1611    WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
1612    x_return_status := OKL_API.HANDLE_EXCEPTIONS(
1613                              l_api_name,
1614                              G_PKG_NAME,
1615                              'OKL_API.G_RET_STS_UNEXP_ERROR',
1616                              x_msg_count,
1617                              x_msg_data,
1618                              '_PVT');
1619    WHEN OTHERS THEN
1620    x_return_status := OKL_API.HANDLE_EXCEPTIONS(
1621                              l_api_name,
1622                              G_PKG_NAME,
1623                              'OTHERS',
1624                              x_msg_count,
1625                              x_msg_data,
1626                              '_PVT');
1627 END SPLIT_ASSET_AFTER_YIELD;
1628 --Bug# 6344223
1629 
1630 ------------------------------------------------------------------------------
1631 --Bug# 6326479
1632 --API Name    : process_split_accounting
1633 --Description : Private API to create accounting entries for transaction type
1634 --              'Split Asset' for the new Asset created after split.
1635 --History     :
1636 --              18-Jun-2007    rirawat  Creation
1637 --End of Comments
1638 ------------------------------------------------------------------------------
1639 PROCEDURE process_split_accounting(
1640     p_api_version                  IN NUMBER
1641    ,p_init_msg_list                IN VARCHAR2 DEFAULT OKL_API.G_FALSE
1642    ,x_return_status                OUT NOCOPY VARCHAR2
1643    ,x_msg_count                    OUT NOCOPY NUMBER
1644    ,x_msg_data                     OUT NOCOPY VARCHAR2
1645    ,p_contract_id                  IN  NUMBER
1646    ,p_kle_id                      IN  NUMBER
1647    ,p_transaction_date             IN  DATE)
1648 
1649 IS
1650     l_api_name         CONSTANT VARCHAR2(30) := 'process_split_accounting';
1651     l_api_version      CONSTANT NUMBER       := 1.0;
1652 
1653     l_return_status    VARCHAR2(1) := OKL_API.G_RET_STS_SUCCESS;
1654 
1655      -- Define PL/SQL Records and Tables
1656     l_trxH_in_rec        Okl_Trx_Contracts_Pvt.tcnv_rec_type;
1657     l_trxL_in_rec        Okl_Trx_Contracts_Pvt.tclv_rec_type;
1658     l_trxH_out_rec       Okl_Trx_Contracts_Pvt.tcnv_rec_type;
1659     l_trxL_out_rec       Okl_Trx_Contracts_Pvt.tclv_rec_type;
1660 
1661     -- Define variables
1662     l_post_to_gl_yn   VARCHAR2(1);
1663 
1664     l_amount          NUMBER;
1665     l_init_msg_list   VARCHAR2(1) := OKL_API.G_FALSE;
1666     l_msg_count       NUMBER;
1667     l_msg_data        VARCHAR2(2000);
1668     l_currency_code   okl_txl_cntrct_lns.currency_code%TYPE;
1669 
1670 
1671     CURSOR Product_csr (p_contract_id IN okl_products_v.id%TYPE) IS
1672     SELECT pdt.id                       product_id
1673           ,pdt.name                     product_name
1674           ,khr.sts_code                 contract_status
1675           ,khr.start_date               start_date
1676           ,khr.currency_code            currency_code
1677           ,khr.authoring_org_id         authoring_org_id
1678           ,khr.currency_conversion_rate currency_conversion_rate
1679           ,khr.currency_conversion_type currency_conversion_type
1680           ,khr.currency_conversion_date currency_conversion_date
1681           ,khr.scs_code
1682     FROM   okl_products_v        pdt
1683           ,okl_k_headers_full_v  khr
1684     WHERE  khr.id = p_contract_id
1685     AND    khr.pdt_id = pdt.id;
1686 
1687        -- Get the product type
1688    CURSOR l_product_type_csr ( p_pdt_id IN NUMBER) IS
1689       SELECT  description
1690       FROM    OKL_PRODUCTS_V
1691       WHERE   id = p_pdt_id;
1692 
1693     l_func_curr_code               OKL_K_HEADERS_FULL_V.CURRENCY_CODE%TYPE;
1694     l_chr_curr_code                OKL_K_HEADERS_FULL_V.CURRENCY_CODE%TYPE;
1695     x_currency_conversion_rate	okl_k_headers_full_v.currency_conversion_rate%TYPE;
1696     x_currency_conversion_type	okl_k_headers_full_v.currency_conversion_type%TYPE;
1697     x_currency_conversion_date	okl_k_headers_full_v.currency_conversion_date%TYPE;
1698     l_functional_currency_code VARCHAR2(15);
1699     l_contract_currency_code VARCHAR2(15);
1700     l_converted_amount NUMBER;
1701     l_Product_rec      Product_csr%ROWTYPE;
1702     l_transaction_date DATE;
1703     l_ctxt_val_tbl                  OKL_ACCOUNT_DIST_PUB.ctxt_val_tbl_type;
1704     l_acc_gen_primary_key_tbl       OKL_ACCOUNT_DIST_PUB.acc_gen_primary_key;
1705     l_tmpl_identify_rec  OKL_ACCOUNT_DIST_PVT.TMPL_IDENTIFY_REC_TYPE;
1706     lp_tmpl_identify_rec OKL_ACCOUNT_DIST_PUB.tmpl_identify_rec_type;
1707     l_dist_info_rec      OKL_ACCOUNT_DIST_PVT.dist_info_REC_TYPE;
1708     l_template_tbl       OKL_ACCOUNT_DIST_PVT.AVLV_TBL_TYPE;
1709     l_amount_tbl         OKL_ACCOUNT_DIST_PVT.AMOUNT_TBL_TYPE;
1710     lx_template_tbl                  OKL_ACCOUNT_DIST_PUB.avlv_tbl_type;
1711     l_trx_desc           VARCHAR2(2000);
1712     l_fact_synd_code      FND_LOOKUPS.Lookup_code%TYPE;
1713     l_inv_acct_code       OKC_RULES_B.Rule_Information1%TYPE;
1714     l_try_name              VARCHAR2(30);
1715     l_trans_code            VARCHAR2(30);
1716     l_tcn_type              VARCHAR2(3);
1717     l_trans_meaning         VARCHAR2(200);
1718     l_try_id                NUMBER;
1719     G_NO               CONSTANT VARCHAR2(1)   := 'N';
1720     l_valid_gl_date DATE;
1721     l_product_type                   VARCHAR2(2000);
1722     lp_tclv_rec                      OKL_TRX_CONTRACTS_PUB.tclv_rec_type;
1723     lx_tclv_rec                      OKL_TRX_CONTRACTS_PUB.tclv_rec_type;
1724     li_tclv_rec                      OKL_TRX_CONTRACTS_PUB.tclv_rec_type;
1725     i                                NUMBER;
1726     l_total_amount                   NUMBER := 0;
1727     l_line_number                    NUMBER := 1;
1728     l_hard_coded_amount NUMBER := 100;
1729 
1730     l_tclv_tbl              Okl_trx_contracts_pvt.tclv_tbl_type;
1731     x_tclv_tbl              Okl_trx_contracts_pvt.tclv_tbl_type;
1732     l_tcnv_rec              Okl_trx_contracts_pvt.tcnv_rec_type;
1733     x_tcnv_rec              Okl_trx_contracts_pvt.tcnv_rec_type;
1734 
1735     l_tmpl_identify_tbl     Okl_Account_Dist_Pvt.tmpl_identify_tbl_type;
1736     l_dist_info_tbl         Okl_Account_Dist_Pvt.dist_info_tbl_type;
1737     l_ctxt_tbl              Okl_Account_Dist_Pvt.CTXT_TBL_TYPE;
1738     l_template_out_tbl      Okl_Account_Dist_Pvt.avlv_out_tbl_type;
1739     l_amount_out_tbl        Okl_Account_Dist_Pvt.amount_out_tbl_type;
1740     l_acc_gen_tbl           Okl_Account_Dist_Pvt.ACC_GEN_TBL_TYPE;
1741 
1742     CURSOR fnd_lookups_csr( lkp_type VARCHAR2, mng VARCHAR2 ) IS
1743     select description,
1744            lookup_code
1745     from   fnd_lookup_values
1746     where language = 'US'
1747     and lookup_type = lkp_type
1748     and meaning = mng;
1749 
1750     l_fnd_rec               fnd_lookups_csr%ROWTYPE;
1751 
1752 BEGIN
1753   -- Set API savepoint
1754   SAVEPOINT process_split_accounting_PVT;
1755 
1756   -- Check for call compatibility
1757   IF (NOT FND_API.Compatible_API_Call (l_api_version,
1758                                 	   p_api_version,
1759                                 	   l_api_name,
1760                                 	   G_PKG_NAME ))
1761   THEN
1762     RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
1763   END IF;
1764 
1765   -- Initialize message list if requested
1766   IF (FND_API.to_Boolean(p_init_msg_list)) THEN
1767       FND_MSG_PUB.initialize;
1768    END IF;
1769 
1770    -- Initialize API status to success
1771    x_return_status := OKL_API.G_RET_STS_SUCCESS;
1772    --------------------------------------------------------------------------
1773    -- Initialize API variables
1774    --------------------------------------------------------------------------
1775 
1776    i                := 0;
1777 
1778    l_transaction_date  := p_transaction_date;
1779 
1780    l_trx_desc := 'OKL Accounting Transaction for Split Asset';
1781 
1782    l_post_to_gl_yn := 'Y';
1783 
1784    l_try_name := 'Split Asset';
1785    l_trans_code := 'SPLIT_ASSET';
1786    l_tcn_type := 'SPA';
1787 
1788    l_trans_meaning := OKL_AM_UTIL_PVT.get_lookup_meaning(
1789 		       p_lookup_type  => 'OKL_ACCOUNTING_EVENT_TYPE',
1790 		       p_lookup_code	=>  l_trans_code,
1791 		       p_validate_yn  => 'Y');
1792 
1793 
1794    OKL_AM_UTIL_PVT.get_transaction_id (
1795   	    p_try_name      => l_try_name,
1796           p_language      => 'US',
1797           x_return_status => l_return_status,
1798   	    x_try_id        => l_try_id);
1799 
1800 
1801     -- Get product_id
1802     OPEN  Product_csr(p_contract_id);
1803     FETCH Product_csr INTO l_Product_rec;
1804     IF Product_csr%NOTFOUND THEN
1805       Okl_Api.SET_MESSAGE(G_APP_NAME,
1806                            'OKL_REQUIRED_VALUE',
1807                            OKL_API.G_COL_NAME_TOKEN,
1808                            'Product');
1809       CLOSE Product_csr;
1810       RAISE Okl_Api.G_EXCEPTION_ERROR;
1811     END IF;
1812     CLOSE Product_csr;
1813 
1814     l_currency_code  := l_Product_rec.currency_code;
1815 
1816     --------------------------------------------------------------------------
1817     -- multi-currency setup
1818     --------------------------------------------------------------------------
1819 
1820     l_chr_curr_code  := l_Product_rec.CURRENCY_CODE;
1821 
1822     l_func_curr_code := okl_accounting_util.get_func_curr_code;
1823 
1824     x_currency_conversion_rate := NULL;
1825     x_currency_conversion_type := NULL;
1826     x_currency_conversion_date := NULL;
1827 
1828     IF ( ( l_func_curr_code IS NOT NULL) AND
1829          ( l_chr_curr_code <> l_func_curr_code ) ) THEN
1830 
1831         x_currency_conversion_type := l_Product_rec.currency_conversion_type;
1832         x_currency_conversion_date :=l_transaction_date;
1833 
1834         IF ( l_Product_rec.currency_conversion_type = 'User') THEN
1835             x_currency_conversion_rate := l_Product_rec.currency_conversion_rate;
1836             x_currency_conversion_date := l_Product_rec.currency_conversion_date;
1837         ELSE
1838             x_currency_conversion_rate := okl_accounting_util.get_curr_con_rate(
1839 	                 p_from_curr_code => l_chr_curr_code,
1840 	                 p_to_curr_code   => l_func_curr_code,
1841                        p_con_date  => l_transaction_date,
1842  		           p_con_type => l_Product_rec.currency_conversion_type);
1843 
1844         END IF;
1845 
1846     END IF;
1847 
1848     --------------------------------------------------------------------------
1849     -- Assign passed in record values for transaction header and line
1850     -------------------------------------------------------------------------
1851 
1852     l_trxH_in_rec.khr_id         := p_contract_id;
1853     l_trxH_in_rec.pdt_id         := l_Product_rec.product_id;
1854     l_trxH_in_rec.tcn_type       := l_tcn_type;  --'SPA'
1855     l_trxH_in_rec.currency_code  := l_currency_code;
1856     l_trxH_in_rec.try_id         := l_try_id;
1857     l_trxH_in_rec.description    := l_trx_desc;
1858     l_trxH_in_rec.currency_conversion_rate := x_currency_conversion_rate;
1859     l_trxH_in_rec.currency_conversion_type := x_currency_conversion_type;
1860     l_trxH_in_rec.currency_conversion_date := x_currency_conversion_date;
1861     l_trxH_in_rec.tsu_code                    := 'PROCESSED';
1862     l_trxH_in_rec.date_transaction_occurred  := l_transaction_date;
1863     l_trxH_in_rec.set_of_books_id    := okl_accounting_util.get_set_of_books_id;
1864     l_trxH_in_rec.org_id            := l_Product_rec.authoring_org_id;
1865     --------------------------------------------------------------------------
1866     -- Create transaction Header and line
1867     --------------------------------------------------------------------------
1868     Okl_Trx_Contracts_Pub.create_trx_contracts(
1869              p_api_version      => l_api_version
1870             ,p_init_msg_list    => l_init_msg_list
1871             ,x_return_status    => l_return_status
1872             ,x_msg_count        => l_msg_count
1873             ,x_msg_data         => l_msg_data
1874             ,p_tcnv_rec         => l_trxH_in_rec
1875             ,x_tcnv_rec         => l_trxH_out_rec);
1876 
1877        IF (l_return_status = Okl_Api.G_RET_STS_UNEXP_ERROR) THEN
1878             RAISE Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR;
1879         ELSIF (l_return_Status = Okl_Api.G_RET_STS_ERROR) THEN
1880             RAISE Okl_Api.G_EXCEPTION_ERROR;
1881         END IF;
1882 
1883       IF ((l_trxH_out_rec.id = OKL_API.G_MISS_NUM) OR
1884             (l_trxH_out_rec.id IS NULL) ) THEN
1885             OKL_API.set_message(G_APP_NAME,
1886                                 'OKL_REQUIRED_VALUE',
1887                                  OKL_API.G_COL_NAME_TOKEN,
1888                                 'TRANSACTION_ID');
1889             RAISE OKL_API.G_EXCEPTION_ERROR;
1890         END IF;
1891 
1892     --------------------------------------------------------------------------
1893     -- accounting template record
1894     --------------------------------------------------------------------------
1895 
1896     l_tmpl_identify_rec.TRANSACTION_TYPE_ID := l_try_id;
1897     l_tmpl_identify_rec.PRODUCT_ID := l_Product_rec.product_id;
1898     l_tmpl_identify_rec.memo_yn               :=  G_NO;
1899     l_tmpl_identify_rec.prior_year_yn         :=  G_NO;
1900 
1901      -- get the product type
1902     OPEN  l_product_type_csr ( l_Product_rec.product_id);
1903     FETCH l_product_type_csr INTO l_product_type;
1904     CLOSE l_product_type_csr;
1905 
1906 
1907      -- set the additional parameters with contract_id, line_id and transaction_date
1908      -- to be passed to formula engine
1909 
1910     l_valid_gl_date := OKL_ACCOUNTING_UTIL.get_valid_gl_date( p_gl_date => l_transaction_date);
1911 
1912     --For special accounting treatment : Review whether it is required or not
1913     OKL_SECURITIZATION_PVT.Check_Khr_ia_associated(
1914                                   p_api_version             => p_api_version,
1915                                   p_init_msg_list           => p_init_msg_list,
1916                                   x_return_status           => x_return_status,
1917                                   x_msg_count               => x_msg_count,
1918                                   x_msg_data                => x_msg_data,
1919                                   p_khr_id                  => p_contract_id,
1920                                   p_scs_code            => l_product_rec.scs_code,
1921                                   p_trx_date                => l_transaction_date,
1922                                   x_fact_synd_code          => l_fact_synd_code,
1923                                   x_inv_acct_code           => l_inv_acct_code
1924                                   );
1925 
1926     IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
1927       RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
1928     ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
1929       RAISE OKL_API.G_EXCEPTION_ERROR;
1930     END IF;
1931 
1932     l_tmpl_identify_rec.factoring_synd_flag := l_fact_synd_code;
1933     l_tmpl_identify_rec.investor_code       := l_inv_acct_code;
1934 
1935     OKL_ACCOUNT_DIST_PUB.get_template_info(
1936                 p_api_version     	            => p_api_version,
1937                 p_init_msg_list   	            => OKL_API.G_FALSE,
1938                 x_return_status   	            => l_return_status,
1939                 x_msg_count       	            => x_msg_count,
1940                 x_msg_data        	            => x_msg_data,
1941                 p_tmpl_identify_rec             => l_tmpl_identify_rec,
1942                 x_template_tbl                  => l_template_tbl,
1943                 p_validity_date                 => l_valid_gl_date);
1944 
1945       IF l_return_status <> OKL_API.G_RET_STS_SUCCESS THEN
1946         -- No accounting templates found matching the transaction type TRX_TYPE
1947         -- and product  PRODUCT.
1948         OKL_API.set_message(
1949                              p_app_name      => G_APP_NAME,
1950                              p_msg_name   => 'OKL_AM_NO_ACC_TEMPLATES',
1951                              p_token1        => 'TRX_TYPE',
1952                              p_token1_value  => l_trans_meaning,
1953                              p_token2        => 'PRODUCT',
1954                              p_token2_value  => l_product_type);
1955 
1956       END IF;
1957 
1958       IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
1959         RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
1960       ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
1961         RAISE OKL_API.G_EXCEPTION_ERROR;
1962       END IF;
1963 
1964       -- If no templates present
1965       IF l_template_tbl.COUNT = 0 THEN
1966         -- No accounting templates found matching the transaction type TRX_TYPE
1967         -- and product  PRODUCT.
1968         OKL_API.set_message(
1969                              p_app_name      => G_APP_NAME,
1970                              p_msg_name      => 'OKL_AM_NO_ACC_TEMPLATES',
1971                              p_token1        => 'TRX_TYPE',
1972                              p_token1_value  => l_trans_meaning,
1973                              p_token2        => 'PRODUCT',
1974                              p_token2_value  => l_product_type);
1975 
1976 
1977         RAISE OKL_API.G_EXCEPTION_ERROR;
1978 
1979       END IF;
1980 
1981      --Build the transaction line table of records
1982      FOR i IN l_template_tbl.FIRST..l_template_tbl.LAST
1983      LOOP
1984              l_tclv_tbl(i).line_number := i;
1985              l_tclv_tbl(i).khr_id := p_contract_id;
1986              l_tclv_tbl(i).kle_id := p_kle_id;
1987              l_tclv_tbl(i).sty_id := l_template_tbl(i).sty_id;
1988              l_tclv_tbl(i).tcl_type := l_tcn_type;  --'SPA';
1989              l_tclv_tbl(i).description := l_trx_desc;
1990              l_tclv_tbl(i).tcn_id := l_trxh_out_rec.id;
1991              l_tclv_tbl(i).currency_code := l_currency_code;
1992              l_tclv_tbl(i).org_id := l_Product_rec.authoring_org_id;
1993       END LOOP;
1994 
1995       --Call to create transaction lines
1996 
1997       Okl_Trx_Contracts_Pub.create_trx_cntrct_lines(
1998         p_api_version      => l_api_version
1999        ,p_init_msg_list    => l_init_msg_list
2000        ,x_return_status    => x_return_status
2001        ,x_msg_count        => l_msg_count
2002        ,x_msg_data         => l_msg_data
2003        ,p_tclv_tbl         => l_tclv_tbl
2004        ,x_tclv_tbl         => x_tclv_tbl);
2005 
2006       IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
2007         RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
2008       ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
2009         RAISE OKL_API.G_EXCEPTION_ERROR;
2010       END IF;
2011 
2012       /* Populating the tmpl_identify_tbl  from the template_tbl returned by get_template_info*/
2013 
2014       FOR i in l_template_tbl.FIRST.. l_template_tbl.LAST
2015       LOOP
2016         l_tmpl_identify_tbl(i).product_id          := l_Product_rec.product_id;
2017         l_tmpl_identify_tbl(i).transaction_type_id := l_try_id;
2018         l_tmpl_identify_tbl(i).stream_type_id      := l_template_tbl(i).sty_id;
2019         l_tmpl_identify_tbl(i).advance_arrears     := l_template_tbl(i).advance_arrears;
2020         l_tmpl_identify_tbl(i).prior_year_yn       := l_template_tbl(i).prior_year_yn;
2021         l_tmpl_identify_tbl(i).memo_yn             := l_template_tbl(i).memo_yn;
2022         l_tmpl_identify_tbl(i).factoring_synd_flag := l_template_tbl(i).factoring_synd_flag;
2023         l_tmpl_identify_tbl(i).investor_code       := l_template_tbl(i).inv_code;
2024         l_tmpl_identify_tbl(i).SYNDICATION_CODE    := l_template_tbl(i).syt_code;
2025         l_tmpl_identify_tbl(i).FACTORING_CODE      := l_template_tbl(i).fac_code;
2026       END LOOP;
2027 
2028       -- for account generator
2029       OKL_ACC_CALL_PVT.okl_populate_acc_gen (
2030         p_contract_id       => p_contract_id,
2031         p_contract_line_id  => p_kle_id,
2032         x_acc_gen_tbl       => l_acc_gen_primary_key_tbl,
2033         x_return_status     => l_return_status);
2034 
2035       -- Raise exception to rollback to savepoint for this block
2036       IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
2037         RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
2038       ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
2039         RAISE OKL_API.G_EXCEPTION_ERROR;
2040       END IF;
2041 
2042       /* Populating the dist_info_Tbl */
2043       FOR i in x_tclv_tbl.FIRST..x_tclv_tbl.LAST
2044       LOOP
2045       --Assigning the account generator table
2046         l_acc_gen_tbl(i).acc_gen_key_tbl := l_acc_gen_primary_key_tbl;
2047         l_acc_gen_tbl(i).source_id :=  x_tclv_tbl(i).id;
2048 
2049         --Bug# 6189396
2050         l_ctxt_val_tbl := okl_execute_formula_pub.g_additional_parameters;
2051 
2052         l_dist_info_tbl(i).SOURCE_ID := x_tclv_tbl(i).id;
2053         l_dist_info_tbl(i).SOURCE_TABLE := 'OKL_TXL_CNTRCT_LNS';
2054         l_dist_info_tbl(i).GL_REVERSAL_FLAG := 'N';
2055         l_dist_info_tbl(i).POST_TO_GL := l_post_to_gl_yn;
2056         l_dist_info_tbl(i).CONTRACT_ID := p_contract_id;
2057         l_dist_info_tbl(i).contract_line_id := p_kle_id;
2058 
2059         l_dist_info_tbl(i).currency_conversion_rate := x_currency_conversion_rate;
2060         l_dist_info_tbl(i).currency_conversion_type := x_currency_conversion_type;
2061         l_dist_info_tbl(i).currency_conversion_date := x_currency_conversion_date;
2062         l_dist_info_tbl(i).currency_code  := l_currency_code;
2063         l_dist_info_tbl(i).ACCOUNTING_DATE := l_trxh_out_rec.date_transaction_occurred;
2064       END LOOP;
2065 
2066       /* Making the new single accounting engine call*/
2067       Okl_Account_Dist_Pvt.CREATE_ACCOUNTING_DIST(
2068         p_api_version        => l_api_version,
2069         p_init_msg_list      => p_init_msg_list,
2070         x_return_status      => x_return_status,
2071         x_msg_count          => x_msg_count,
2072         x_msg_data           => x_msg_data,
2073         p_tmpl_identify_tbl  => l_tmpl_identify_tbl,
2074         p_dist_info_tbl      => l_dist_info_tbl,
2075         p_ctxt_val_tbl       => l_ctxt_tbl,
2076         p_acc_gen_primary_key_tbl  => l_acc_gen_tbl,
2077         x_template_tbl       => l_template_out_tbl,
2078         x_amount_tbl         => l_amount_out_tbl,
2079 	  p_trx_header_id      => l_trxH_out_rec.id);
2080 
2081       IF (x_return_status = Okl_Api.G_RET_STS_UNEXP_ERROR) THEN
2082         RAISE Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR;
2083       ELSIF (x_return_status = Okl_Api.G_RET_STS_ERROR) THEN
2084         RAISE Okl_Api.G_EXCEPTION_ERROR;
2085       END IF;
2086 
2087       OPEN  fnd_lookups_csr('OKL_TRANSACTION_STATUS', 'Processed');
2088       FETCH fnd_lookups_csr INTO l_fnd_rec;
2089       IF fnd_lookups_csr%NOTFOUND THEN
2090         Okl_Api.SET_MESSAGE(G_APP_NAME, OKL_API.G_INVALID_VALUE,OKL_API.G_COL_NAME_TOKEN,l_try_name);
2091         CLOSE fnd_lookups_csr;
2092         RAISE Okl_Api.G_EXCEPTION_ERROR;
2093       END IF;
2094       CLOSE fnd_lookups_csr;
2095 
2096        --From the l_amount_out_tbl returned , the transaction line amount and header amount need to be updated back on the contract
2097        l_tclv_tbl := x_tclv_tbl;
2098        l_tcnv_rec := l_trxH_out_rec;
2099 
2100        If l_tclv_tbl.COUNT > 0 then
2101          FOR i in l_tclv_tbl.FIRST..l_tclv_tbl.LAST LOOP
2102            l_amount_tbl.delete;
2103            If l_amount_out_tbl.COUNT > 0 then
2104               For k in l_amount_out_tbl.FIRST..l_amount_out_tbl.LAST LOOP
2105                   IF l_tclv_tbl(i).id = l_amount_out_tbl(k).source_id THEN
2106                       l_amount_tbl := l_amount_out_tbl(k).amount_tbl;
2107                       l_tclv_tbl(i).currency_code := l_currency_code;
2108                       IF l_amount_tbl.COUNT > 0 THEN
2109                           FOR j in l_amount_tbl.FIRST..l_amount_tbl.LAST LOOP
2110                               l_tclv_tbl(i).amount := nvl(l_tclv_tbl(i).amount,0)  + l_amount_tbl(j);
2111                           END LOOP; -- for j in
2112                       END IF;-- If l_amount_tbl.COUNT
2113                   END IF; ---- IF l_tclv_tbl(i).id
2114               END LOOP; -- For k in
2115            END IF; -- If l_amount_out_tbl.COUNT
2116            l_tcnv_rec.amount := nvl(l_tcnv_rec.amount,0) + l_tclv_tbl(i).amount;
2117            l_tcnv_rec.currency_code := l_currency_code;
2118            l_tcnv_rec.tsu_code      := l_fnd_rec.lookup_code;
2119          END LOOP; -- For i in
2120        End If; -- If l_tclv_tbl.COUNT
2121 
2122       --Making the call to update the amounts on transaction header and line
2123       Okl_Trx_Contracts_Pub.update_trx_contracts
2124                            (p_api_version => p_api_version
2125                            ,p_init_msg_list => p_init_msg_list
2126                            ,x_return_status => x_return_status
2127                            ,x_msg_count => x_msg_count
2128                            ,x_msg_data => x_msg_data
2129                            ,p_tcnv_rec => l_tcnv_rec
2130                            ,p_tclv_tbl => l_tclv_tbl
2131                            ,x_tcnv_rec => x_tcnv_rec
2132                            ,x_tclv_tbl => x_tclv_tbl );
2133 
2134       IF (x_return_status = Okl_Api.G_RET_STS_UNEXP_ERROR) THEN
2135         RAISE Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR;
2136       ELSIF (x_return_status = Okl_Api.G_RET_STS_ERROR) THEN
2137         RAISE Okl_Api.G_EXCEPTION_ERROR;
2138       END IF;
2139 
2140       OKL_MULTIGAAP_ENGINE_PVT.CREATE_SEC_REP_TRX
2141                            (p_api_version => p_api_version
2142                            ,p_init_msg_list => p_init_msg_list
2143                            ,x_return_status => x_return_status
2144                            ,x_msg_count => x_msg_count
2145                            ,x_msg_data => x_msg_data
2146                            ,P_TCNV_REC => x_tcnv_rec
2147                            ,P_TCLV_TBL => x_tclv_tbl
2148                            ,p_ctxt_val_tbl => l_ctxt_tbl
2149                            ,p_acc_gen_primary_key_tbl => l_acc_gen_primary_key_tbl);
2150 
2151       IF (x_return_status = Okl_Api.G_RET_STS_UNEXP_ERROR) THEN
2152         RAISE Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR;
2153       ELSIF (x_return_status = Okl_Api.G_RET_STS_ERROR) THEN
2154         RAISE Okl_Api.G_EXCEPTION_ERROR;
2155       END IF;
2156 
2157 
2158   -- Get message count and if count is 1, get message info
2159   FND_MSG_PUB.Count_And_Get
2160     (p_count          =>      x_msg_count,
2161      p_data           =>      x_msg_data);
2162 
2163 EXCEPTION
2164   WHEN OKL_API.G_EXCEPTION_ERROR THEN
2165     ROLLBACK TO process_split_accounting_PVT;
2166     x_return_status := OKL_API.G_RET_STS_ERROR;
2167     FND_MSG_PUB.Count_And_Get
2168       (p_count         =>      x_msg_count,
2169        p_data          =>      x_msg_data);
2170 
2171   WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
2172     ROLLBACK TO process_split_accounting_PVT;
2173     x_return_status := OKL_API.G_RET_STS_UNEXP_ERROR;
2174     FND_MSG_PUB.Count_And_Get
2175       (p_count         =>      x_msg_count,
2176        p_data          =>      x_msg_data);
2177 
2178   WHEN OTHERS THEN
2179 	ROLLBACK TO process_split_accounting_PVT;
2180       x_return_status := OKL_API.G_RET_STS_UNEXP_ERROR ;
2181       OKL_API.Set_Message(p_app_name      => G_APP_NAME,
2182                           p_msg_name      => G_UNEXPECTED_ERROR,
2183                           p_token1        => G_SQLCODE_TOKEN,
2184                           p_token1_value  => SQLCODE,
2185                           p_token2        => G_SQLERRM_TOKEN,
2186                           p_token2_value  => SQLERRM);
2187       FND_MSG_PUB.Count_And_Get
2188         (p_count         =>      x_msg_count,
2189          p_data          =>      x_msg_data);
2190 
2191 END process_split_accounting;
2192 
2193 ------------------------------------------------------------------------------
2194   --Bug# 5946411
2195   --Start of comments
2196   --
2197   --Procedure Name        : get_deprn_reserve
2198   --Purpose               : Get Depreciation Reserve- used internally
2199   --Modification History  :
2200   --02-May-2007    avsingh   Created
2201   --                         To get accumulated depreciation of an asset
2202   --                         As per Bug# 6027547 raised on FA, the suggestion
2203   --                         from FA is to back out depreciation reserve
2204   --                         if cost is being adjusted in the period of
2205   --                         of addition.
2206   ------------------------------------------------------------------------------
2207   PROCEDURE get_deprn_reserve
2208                    (p_api_version     IN  NUMBER,
2209                     p_init_msg_list   IN  VARCHAR2,
2210                     x_return_status   OUT NOCOPY VARCHAR2,
2211                     x_msg_count       OUT NOCOPY NUMBER,
2212                     x_msg_data        OUT NOCOPY VARCHAR2,
2213                     p_asset_id        IN  NUMBER,
2214                     p_book_type_code  IN  VARCHAR2,
2215                     x_asset_deprn_rec   OUT NOCOPY FA_API_TYPES.asset_deprn_rec_type) IS
2216 
2217     l_return_status   VARCHAR2(1) := OKL_API.G_RET_STS_SUCCESS;
2218     l_api_name        CONSTANT VARCHAR2(30) := 'GET_DEPRN_RESERVE';
2219     l_api_version	CONSTANT NUMBER	:= 1.0;
2220 
2221     l_asset_hdr_rec            FA_API_TYPES.asset_hdr_rec_type;
2222     l_asset_fin_rec            FA_API_TYPES.asset_fin_rec_type;
2223     l_asset_deprn_rec          FA_API_TYPES.asset_deprn_rec_type;
2224 
2225     l_deprn_reserve            NUMBER;
2226 
2227   BEGIN
2228      --call start activity to set savepoint
2229      l_return_status := OKL_API.START_ACTIVITY( substr(l_api_name,1,26),
2230                                                 p_init_msg_list,
2231                                                 '_PVT',
2232                                                 x_return_status);
2233      IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
2234        RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
2235      ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
2236        RAISE OKL_API.G_EXCEPTION_ERROR;
2237      END IF;
2238 
2239      l_asset_hdr_rec.asset_id          := p_asset_id;
2240      l_asset_hdr_rec.book_type_code    := p_book_type_code;
2241 
2242      if NOT fa_cache_pkg.fazcbc(x_book => l_asset_hdr_rec.book_type_code) then
2243        OKL_API.SET_MESSAGE(p_app_name     => g_app_name,
2244                            p_msg_name     => 'OKL_LLA_FA_CACHE_ERROR'
2245                           );
2246        Raise OKL_API.G_EXCEPTION_ERROR;
2247      end if;
2248 
2249      -- To fetch Depreciation Reserve
2250      if not FA_UTIL_PVT.get_asset_deprn_rec
2251                 (p_asset_hdr_rec         => l_asset_hdr_rec ,
2252                  px_asset_deprn_rec      => l_asset_deprn_rec,
2253                  p_period_counter        => NULL,
2254                  p_mrc_sob_type_code     => 'P'
2255                  ) then
2256        OKL_API.SET_MESSAGE(p_app_name     => g_app_name,
2257                            p_msg_name     => 'OKL_LLA_FA_DEPRN_REC_ERROR'
2258                           );
2259        Raise OKL_API.G_EXCEPTION_ERROR;
2260      end if;
2261 
2262      x_asset_deprn_rec := l_asset_deprn_rec;
2263 
2264      --Call end Activity
2265      OKL_API.END_ACTIVITY(x_msg_count, x_msg_data);
2266   EXCEPTION
2267     WHEN OKL_API.G_EXCEPTION_ERROR Then
2268       x_return_status :=OKL_API.HANDLE_EXCEPTIONS
2269       (
2270       l_api_name,
2271       G_PKG_NAME,
2272       'OKL_API.G_RET_STS_ERROR',
2273       x_msg_count,
2274       x_msg_data,
2275       '_PVT'
2276       );
2277     WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
2278       x_return_status :=OKL_API.HANDLE_EXCEPTIONS
2279       (
2280       l_api_name,
2281       G_PKG_NAME,
2282       'OKL_API.G_RET_STS_UNEXP_ERROR',
2283       x_msg_count,
2284       x_msg_data,
2285       '_PVT'
2286       );
2287     WHEN OTHERS THEN
2288       x_return_status :=OKL_API.HANDLE_EXCEPTIONS
2289       (
2290       l_api_name,
2291       G_PKG_NAME,
2292       'OTHERS',
2293       x_msg_count,
2294       x_msg_data,
2295       '_PVT'
2296       );
2297   END get_deprn_reserve;
2298 --Bug# 5946411 End
2299 -----------------------------------------------------------------
2300 --Bug# 5946411: ER
2301 --added procedure to create split asset return
2302 -----------------------------------------------------------------
2303  PROCEDURE create_split_asset_return(  p_api_version   IN  NUMBER,
2304                               p_init_msg_list IN  VARCHAR2,
2305                               x_return_status OUT NOCOPY VARCHAR2,
2306                               x_msg_count     OUT NOCOPY NUMBER,
2307                               x_msg_data      OUT NOCOPY VARCHAR2,
2308                               p_kle_id        IN  NUMBER,
2309                               p_cle_tbl       IN  cle_tbl_type,
2310                               p_txlv_rec      IN  txlv_rec_type
2311                               ) IS
2312   l_api_name             CONSTANT VARCHAR2(30) := 'create_split_asset_return';
2313   l_api_version          CONSTANT NUMBER := 1.0;
2314   lp_artv_rec             OKL_AM_ASSET_RETURN_PUB.artv_rec_type;
2315   lp_upd_artv_rec             OKL_AM_ASSET_RETURN_PUB.artv_rec_type;
2316   lx_artv_rec             OKL_AM_ASSET_RETURN_PUB.artv_rec_type;
2317     -- Get asset return for asset with status Scheduled
2318    CURSOR l_asset_return_csr ( p_kle_id IN NUMBER) IS
2319     SELECT  id,
2320             RMR_ID,
2321             ART1_CODE,
2322             RELOCATE_ASSET_YN,
2323             VOLUNTARY_YN,
2324             COMMMERCIALLY_REAS_SALE_YN,
2325             ORG_ID,
2326             FLOOR_PRICE,
2327             NEW_ITEM_PRICE,
2328             NEW_ITEM_NUMBER,
2329             ASSET_RELOCATED_YN,
2330             REPURCHASE_AGMT_YN,
2331             CURRENCY_CODE,
2332             CURRENCY_CONVERSION_CODE,
2333             CURRENCY_CONVERSION_TYPE,
2334             CURRENCY_CONVERSION_RATE,
2335             CURRENCY_CONVERSION_DATE,
2336             --Bug# 6336455
2337             LEGAL_ENTITY_ID
2338     FROM   OKL_ASSET_RETURNS_b
2339     WHERE  kle_id = p_kle_id
2340     AND    ars_code = 'SCHEDULED';
2341    -- Get the non-cancelled asset return for asset
2342     CURSOR l_check_asset_return_csr ( p_kle_id IN NUMBER) IS
2343     select 'N' from dual
2344     where exists (
2345     SELECT 1
2346     FROM   OKL_ASSET_RETURNS_V
2347     WHERE  kle_id = p_kle_id
2348     AND    ars_code <> 'CANCELLED'
2349     );
2350     cursor l_term_date_csr ( p_kle_id IN NUMBER)
2351     IS
2352     select date_terminated
2353     from okc_k_lines_b
2354     where id=p_kle_id;
2355     CURSOR l_trmnt_line_csr(p_cle_id IN OKC_K_LINES_B.ID%TYPE)
2356     IS
2357     SELECT cle.id id
2358     FROM okc_k_lines_b cle
2359     CONNECT BY PRIOR cle.id = cle.cle_id
2360     START WITH cle.id = p_cle_id;
2361     l_return_needed         VARCHAR2(1) := 'Y';
2362     l_asset_return_rec l_asset_return_csr%ROWTYPE;
2363     l_source_cle_id NUMBER;
2364     i                       NUMBER := 1;
2365     l_parent_unit NUMBER;
2366     l_child_unit NUMBER;
2367     l_split_factor NUMBER;
2368     l_term_date DATE;
2369     l_clev_rec               OKL_OKC_MIGRATION_PVT.clev_rec_type;
2370     l_klev_rec               OKL_CONTRACT_PUB.klev_rec_type;
2371     lx_clev_rec              OKL_OKC_MIGRATION_PVT.clev_rec_type;
2372     lx_klev_rec              OKL_CONTRACT_PUB.klev_rec_type;
2373     l_chld_total_flr_price NUMBER:=0.0;
2374   begin
2375     x_return_status := OKL_API.G_RET_STS_SUCCESS;
2376     -- Call start_activity to create savepoint, check compatibility
2377     -- and initialize message list
2378     x_return_status := OKL_API.START_ACTIVITY (
2379                                l_api_name
2380                                ,p_init_msg_list
2381                                ,'_PVT'
2382                                ,x_return_status);
2383    -- Check if activity started successfully
2384    IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
2385       RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
2386    ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
2387       RAISE OKL_API.G_EXCEPTION_ERROR;
2388    END IF;
2389    l_source_cle_id :=p_kle_id;
2390    --dbms_output.put_line(' l_source_cle_id'||l_source_cle_id);
2391  FOR  l_asset_return_rec in l_asset_return_csr(l_source_cle_id)
2392    LOOP
2393     --dbms_output.put_line('CSAR--> found');
2394    IF p_cle_tbl.COUNT > 0 THEN
2395     --get the split factor
2396     if NVL(p_txlv_rec.SPLIT_INTO_SINGLES_FLAG,'X')='Y' THEN
2397         l_parent_unit :=1;
2398         l_child_unit:=1;
2399      else
2400        l_parent_unit:= p_txlv_rec.CURRENT_UNITS - NVL(p_txlv_rec.SPLIT_INTO_UNITS,0);
2401        l_child_unit:=p_txlv_rec.SPLIT_INTO_UNITS;
2402     end if;
2403   -- dbms_output.put_line('l_parent_unit-->'||l_parent_unit);
2404   -- dbms_output.put_line('l_child_unit-->'||l_child_unit);
2405     --get the termination date
2406     OPEN l_term_date_csr(l_source_cle_id);
2407     FETCH l_term_date_csr INTO l_term_date;
2408     CLOSE l_term_date_csr;
2409    FOR i IN p_cle_tbl.FIRST..p_cle_tbl.LAST
2410     LOOP
2411     --dbms_output.put_line('procssing --> '|| p_cle_tbl(i).cle_id);
2412      if l_source_cle_id <> p_cle_tbl(i).cle_id then
2413         l_split_factor:=l_child_unit/p_txlv_rec.current_units;
2414        -- dbms_output.put_line('CSAR-->child l_split_factor>'||l_split_factor);
2415         -- Check if return created
2416         l_return_needed:='Y';
2417         OPEN  l_check_asset_return_csr (p_cle_tbl(i).cle_id);
2418         FETCH l_check_asset_return_csr INTO l_return_needed;
2419         CLOSE l_check_asset_return_csr;
2420         IF l_return_needed='Y' THEN
2421         --dbms_output.put_line('Creating asset return for >'||p_cle_tbl(i).cle_id);
2422 		lp_artv_rec.KLE_ID	:=  p_cle_tbl(i).cle_id;
2423 		lp_artv_rec.RMR_ID	:= l_asset_return_rec.RMR_ID;
2424 		lp_artv_rec.ARS_CODE := 'SCHEDULED';--l_asset_return_rec.ARS_CODE;
2425 	--	lp_artv_rec.IMR_ID	:= l_asset_return_rec.IMR_ID;
2426 		lp_artv_rec.ART1_CODE	:= l_asset_return_rec.ART1_CODE;
2427 		lp_artv_rec.RELOCATE_ASSET_YN	:= l_asset_return_rec.RELOCATE_ASSET_YN;
2428 		lp_artv_rec.VOLUNTARY_YN	:= l_asset_return_rec.VOLUNTARY_YN;
2429  		lp_artv_rec.COMMMERCIALLY_REAS_SALE_YN	:= l_asset_return_rec.COMMMERCIALLY_REAS_SALE_YN;
2430 		lp_artv_rec.ORG_ID	:= l_asset_return_rec.ORG_ID;
2431     	lp_artv_rec.FLOOR_PRICE	:=  l_split_factor * NVL(l_asset_return_rec.FLOOR_PRICE,0.0);
2432     	l_chld_total_flr_price := l_chld_total_flr_price+NVL(lp_artv_rec.FLOOR_PRICE,0.0);
2433     --	lp_artv_rec.NEW_ITEM_PRICE	:= l_split_factor * NVL(l_asset_return_rec.NEW_ITEM_PRICE,0.0);
2434     --	lp_artv_rec.NEW_ITEM_NUMBER	:= l_asset_return_rec.NEW_ITEM_NUMBER;
2435 		lp_artv_rec.ASSET_RELOCATED_YN	:= l_asset_return_rec.ASSET_RELOCATED_YN;
2436 		lp_artv_rec.REPURCHASE_AGMT_YN	:= l_asset_return_rec.REPURCHASE_AGMT_YN;
2437 		lp_artv_rec.CURRENCY_CODE	:= l_asset_return_rec.CURRENCY_CODE;
2438 		lp_artv_rec.CURRENCY_CONVERSION_CODE	:= l_asset_return_rec.CURRENCY_CONVERSION_CODE;
2439 		lp_artv_rec.CURRENCY_CONVERSION_TYPE	:= l_asset_return_rec.CURRENCY_CONVERSION_TYPE;
2440 		lp_artv_rec.CURRENCY_CONVERSION_RATE	:= l_asset_return_rec.CURRENCY_CONVERSION_RATE;
2441 		lp_artv_rec.CURRENCY_CONVERSION_DATE	:= l_asset_return_rec.CURRENCY_CONVERSION_DATE;
2442 
2443             --Bug# 6336455
2444             lp_artv_rec.LEGAL_ENTITY_ID := l_asset_return_rec.LEGAL_ENTITY_ID;
2445 
2446         -- call insert of tapi
2447        OKL_ASSET_RETURNS_PUB.insert_asset_returns(
2448 	    p_api_version              => p_api_version,
2449         p_init_msg_list            => OKL_API.G_FALSE,
2450         x_return_status            => x_return_status,
2451         x_msg_count                => x_msg_count,
2452         x_msg_data                 => x_msg_data,
2453         p_artv_rec                 => lp_artv_rec,
2454         x_artv_rec                 => lx_artv_rec);
2455       -- dbms_output.put_line('Calling OKL_ASSET_RETURNS_PUB.insert_asset_returns  status >'||x_return_status);
2456       IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
2457        RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
2458       ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
2459        RAISE OKL_API.G_EXCEPTION_ERROR;
2460       END IF;
2461       --upade the termination date on the lines and subliines
2462        FOR r_trmnt_line_csr IN
2463           l_trmnt_line_csr(p_cle_id => p_cle_tbl(i).cle_id) LOOP
2464           l_clev_rec.id              := r_trmnt_line_csr.id;
2465           l_klev_rec.id              := r_trmnt_line_csr.id;
2466           l_clev_rec.date_terminated := l_term_date;
2467           OKL_CONTRACT_PUB.update_contract_line(
2468                            p_api_version    => l_api_version,
2469                            p_init_msg_list  => p_init_msg_list,
2470                            x_return_status  => x_return_status,
2471                            x_msg_count      => x_msg_count,
2472                            x_msg_data       => x_msg_data,
2473                            p_clev_rec       => l_clev_rec,
2474                            p_klev_rec       => l_klev_rec,
2475                            x_clev_rec       => lx_clev_rec,
2476                            x_klev_rec       => lx_klev_rec);
2477           IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
2478               RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
2479           ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
2480                RAISE OKL_API.G_EXCEPTION_ERROR;
2481           END IF;
2482         END LOOP; --inner loop
2483       END IF; --return needed
2484       END IF; --soucer id<> pkle_id
2485     END LOOP; -- p_cle_tbl loop end
2486     -- this is parent asset so adjust the floor price
2487      lp_upd_artv_rec.id:=l_asset_return_rec.id;
2488      lp_upd_artv_rec.FLOOR_PRICE := NVL(l_asset_return_rec.FLOOR_PRICE,0.0)-l_chld_total_flr_price;
2489      -- call update of tapi
2490      OKL_ASSET_RETURNS_PUB.update_asset_returns(
2491       p_api_version        => p_api_version,
2492       p_init_msg_list      =>  OKL_API.G_FALSE,
2493       x_return_status      => x_return_status,
2494       x_msg_count          => x_msg_count,
2495       x_msg_data           => x_msg_data,
2496       p_artv_rec           => lp_upd_artv_rec,
2497       x_artv_rec           => lx_artv_rec);
2498     -- dbms_output.put_line('Calling OKL_ASSET_RETURNS_PUB.update_asset_returns  status >'||x_return_status);
2499      IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
2500       RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
2501      ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
2502       RAISE OKL_API.G_EXCEPTION_ERROR;
2503      END IF;
2504    END IF; --p_cle_tbl >0
2505   END LOOP; --aset rturn record
2506    OKL_API.END_ACTIVITY (x_msg_count,x_msg_data );
2507     EXCEPTION
2508     WHEN OKL_API.G_EXCEPTION_ERROR THEN
2509     x_return_status := OKL_API.HANDLE_EXCEPTIONS(
2510                                l_api_name,
2511                                G_PKG_NAME,
2512                                'OKL_API.G_RET_STS_ERROR',
2513                                x_msg_count,
2514                                x_msg_data,
2515                                '_PVT');
2516     WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
2517     x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
2518                               l_api_name,
2519                               G_PKG_NAME,
2520                               'OKL_API.G_RET_STS_UNEXP_ERROR',
2521                               x_msg_count,
2522                               x_msg_data,
2523                               '_PVT');
2524     WHEN OTHERS THEN
2525     x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
2526                               l_api_name,
2527                               G_PKG_NAME,
2528                               'OTHERS',
2529                               x_msg_count,
2530                               x_msg_data,
2531                               '_PVT');
2532    end create_split_asset_return;
2533 
2534 -----------------------------------------------
2535 -- Bug# 5946411: ER
2536 -- added procedure to check pending transaction
2537 -----------------------------------------------
2538   PROCEDURE Check_Offlease_Trans(p_api_version    IN  NUMBER,
2539                               p_init_msg_list  IN  VARCHAR2,
2540                               x_return_status  OUT NOCOPY VARCHAR2,
2541                               x_msg_count      OUT NOCOPY NUMBER,
2542                               x_msg_data       OUT NOCOPY VARCHAR2,
2543                               p_cle_id         IN  NUMBER
2544                               ) is
2545   l_return_status        VARCHAR2(1)  DEFAULT OKL_API.G_RET_STS_SUCCESS;
2546   l_api_name             CONSTANT VARCHAR2(30) := 'CHECK_OFFLEASE_TRANS';
2547   l_api_version          CONSTANT NUMBER := 1.0;
2548 
2549    --cursor to fetch the corporate and tax book for the given asset
2550    CURSOR l_okxassetlines_csr(p_kle_id IN NUMBER) IS
2551    SELECT o.asset_id, o.asset_number, o.corporate_book, a.cost, o.depreciation_category, a.original_cost, o.current_units,
2552           o.dnz_chr_id ,a.book_type_code, b.book_class, a.prorate_convention_code
2553    FROM   okx_asset_lines_v o, fa_books a, fa_book_controls b
2554    WHERE  o.parent_line_id = p_kle_id
2555    AND    o.asset_id = a.asset_id
2556    AND    a.book_type_code = b.book_type_code
2557    AND    a.date_ineffective IS NULL
2558    AND    a.transaction_header_id_out IS NULL
2559    ORDER BY book_class;
2560 
2561    CURSOR l_offlseassettrx_csr(cp_trx_date IN DATE, cp_asset_number IN VARCHAR2) IS
2562    SELECT h.tsu_code, h.tas_type,  h.date_trans_occurred, l.dnz_asset_id,
2563           l.asset_number, l.kle_id ,l.DNZ_KHR_ID
2564    FROM   OKL_TRX_ASSETS h, OKL_TXL_ASSETS_B l
2565    WHERE  h.id = l.tas_id
2566    AND    h.date_trans_occurred <= cp_trx_date
2567    AND    h.tas_type in ('AMT','AUD','AUS')
2568    AND    l.asset_number = cp_asset_number;
2569 
2570  l_okxassetlines_rec         l_okxassetlines_csr%ROWTYPE;
2571  l_name               OKL_TXL_ASSETS_B.asset_number%TYPE;
2572  l_trx_status         VARCHAR2(30);
2573 
2574 
2575   BEGIN
2576         -- Call start_activity to create savepoint, check compatibility
2577       -- and initialize message list
2578       x_return_status := OKL_API.START_ACTIVITY (
2579                                  l_api_name
2580                                  ,p_init_msg_list
2581                                  ,'_PVT'
2582                                  ,x_return_status);
2583       -- Check if activity started successfully
2584       IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
2585          RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
2586       ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
2587          RAISE OKL_API.G_EXCEPTION_ERROR;
2588       END IF;
2589 
2590     FOR l_okxassetlines_rec IN l_okxassetlines_csr(p_cle_id) LOOP
2591         l_name:=l_okxassetlines_rec.asset_number;
2592         l_trx_status := NULL;
2593         FOR  l_offlseassettrx_rec IN l_offlseassettrx_csr(sysdate,l_name) LOOP
2594 			      l_trx_status := l_offlseassettrx_rec.tsu_code;
2595 			      IF l_trx_status IN ('ENTERED','ERROR') THEN
2596 			         EXIT;
2597 			      END IF;
2598 		 END LOOP;
2599         IF l_trx_status IN ('ENTERED','ERROR') THEN -- if any trx has this status
2600            --dbms_output.put_line('Pending transactions');
2601                   x_return_status := OKL_API.G_RET_STS_ERROR;
2602                   OKL_API.set_message( p_app_name      => 'OKL',
2603                                p_msg_name      => 'OKL_AM_PENDING_OFFLEASE',
2604                                p_token1        => 'ASSET_NUMBER',
2605                                p_token1_value  => l_name);
2606                   RAISE OKL_API.G_EXCEPTION_ERROR;
2607         end if ;
2608    end loop;
2609    OKL_API.END_ACTIVITY (x_msg_count,x_msg_data );
2610  EXCEPTION
2611       WHEN OKL_API.G_EXCEPTION_ERROR THEN
2612       IF l_offlseassettrx_csr%ISOPEN THEN
2613           CLOSE l_offlseassettrx_csr;
2614       END IF;
2615      IF l_okxassetlines_csr%ISOPEN THEN
2616           CLOSE l_okxassetlines_csr;
2617       END IF;
2618       x_return_status := OKL_API.HANDLE_EXCEPTIONS(
2619                                l_api_name,
2620                                G_PKG_NAME,
2621                                'OKL_API.G_RET_STS_ERROR',
2622                                x_msg_count,
2623                                x_msg_data,
2624                                '_PVT');
2625      WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
2626       IF l_offlseassettrx_csr%ISOPEN THEN
2627           CLOSE l_offlseassettrx_csr;
2628       END IF;
2629       IF l_okxassetlines_csr%ISOPEN THEN
2630           CLOSE l_okxassetlines_csr;
2631       END IF;
2632       x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
2633                               l_api_name,
2634                               G_PKG_NAME,
2635                               'OKL_API.G_RET_STS_UNEXP_ERROR',
2636                               x_msg_count,
2637                               x_msg_data,
2638                               '_PVT');
2639      WHEN OTHERS THEN
2640      IF l_offlseassettrx_csr%ISOPEN THEN
2641           CLOSE l_offlseassettrx_csr;
2642       END IF;
2643      IF l_okxassetlines_csr%ISOPEN THEN
2644           CLOSE l_okxassetlines_csr;
2645       END IF;
2646       x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
2647                               l_api_name,
2648                               G_PKG_NAME,
2649                               'OTHERS',
2650                               x_msg_count,
2651                               x_msg_data,
2652                               '_PVT');
2653   END Check_Offlease_Trans;
2654 
2655 --------------
2656 --Bug# 3156924
2657 --------------
2658 --date validation routine
2659 --should be called from UI(revision page only ):
2660 
2661   PROCEDURE validate_trx_date(p_api_version    IN  NUMBER,
2662                               p_init_msg_list  IN  VARCHAR2,
2663                               x_return_status  OUT NOCOPY VARCHAR2,
2664                               x_msg_count      OUT NOCOPY NUMBER,
2665                               x_msg_data       OUT NOCOPY VARCHAR2,
2666                               p_chr_id         IN  NUMBER,
2667                               p_trx_date       IN  VARCHAR2) IS
2668 
2669   l_return_status        VARCHAR2(1)  DEFAULT OKL_API.G_RET_STS_SUCCESS;
2670   l_api_name             CONSTANT VARCHAR2(30) := 'VALIDATE_TRX_DATE';
2671   l_api_version          CONSTANT NUMBER := 1.0;
2672 
2673 
2674   l_date_valid VARCHAR2(1) DEFAULT 'N';
2675   l_trx_date   DATE ;
2676 
2677   --cursor to check the date validity wrt contract dates
2678   CURSOR l_chrb_csr(ptrxdate IN DATE, pchrid IN NUMBER, pdateformat IN VARCHAR2) IS
2679   SELECT 'Y'                                  date_valid,
2680          TO_CHAR(chrb.start_date,pdateformat) con_start_date,
2681          TO_CHAR(chrb.end_date,pdateformat)   con_end_date,
2682          chrb.sts_code                        sts_code
2683   FROM   okc_k_headers_b chrb
2684   WHERE  ptrxdate BETWEEN TRUNC(chrb.start_date) AND TRUNC(chrb.end_date)
2685   AND    chrb.id = pchrid;
2686 
2687   l_chrb_rec         l_chrb_csr%ROWTYPE;
2688   l_icx_date_format  VARCHAR2(240);
2689 
2690 
2691   BEGIN
2692       x_return_status := l_return_status;
2693 
2694       -- Call start_activity to create savepoint, check compatibility
2695       -- and initialize message list
2696       x_return_status := OKL_API.START_ACTIVITY (
2697                                  l_api_name
2698                                  ,p_init_msg_list
2699                                  ,'_PVT'
2700                                  ,x_return_status);
2701       -- Check if activity started successfully
2702       IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
2703          RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
2704       ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
2705          RAISE OKL_API.G_EXCEPTION_ERROR;
2706       END IF;
2707 
2708       --0. verify date format
2709       BEGIN
2710           l_icx_date_format := fnd_profile.value('ICX_DATE_FORMAT_MASK');
2711           l_trx_date := TO_DATE(p_trx_date, l_icx_date_format);
2712           EXCEPTION
2713           WHEN OTHERS THEN
2714               okl_api.set_message(
2715                              G_APP_NAME,
2716                              G_LLA_INVALID_DATE_FORMAT,
2717                              'DATE_FORMAT',
2718                              l_icx_date_format,
2719                              'COL_NAME',
2720                              'Revision Date'
2721                             );
2722               x_return_status := OKL_API.G_RET_STS_ERROR;
2723       END;
2724 
2725       IF x_return_status <> OKL_API.G_RET_STS_SUCCESS THEN
2726           RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
2727       END IF;
2728 
2729 
2730       --1. Transaction date is required
2731       IF NVL(p_trx_date,okl_api.g_miss_char) = okl_api.g_miss_char THEN
2732          okl_api.set_message(
2733                              G_APP_NAME,
2734                              G_LLA_MISSING_TRX_DATE
2735                             );
2736          x_return_status := OKL_API.G_RET_STS_ERROR;
2737          RAISE OKL_API.G_EXCEPTION_ERROR;
2738       END IF;
2739 
2740       --2. Transaction date is between contract start and end date
2741       l_date_valid := 'N';
2742       OPEN l_chrb_csr(ptrxdate => l_trx_date, pchrid => p_chr_id, pdateformat => l_icx_date_format);
2743       FETCH l_chrb_csr INTO l_chrb_rec;
2744       IF l_chrb_csr%NOTFOUND THEN
2745           NULL;
2746       ELSE
2747           l_date_valid := l_chrb_rec.date_valid;
2748       END IF;
2749       CLOSE l_chrb_csr;
2750 
2751 
2752       IF (l_date_valid = 'N') THEN
2753          okl_api.set_message(
2754                              G_APP_NAME,
2755                              G_LLA_WRONG_TRX_DATE,
2756                              'START_DATE',
2757                              l_chrb_rec.con_start_date,
2758                              'END_DATE',
2759                              l_chrb_rec.con_end_date
2760                             );
2761          x_return_status := OKL_API.G_RET_STS_ERROR;
2762          RAISE OKL_API.G_EXCEPTION_ERROR;
2763       END IF;
2764 
2765       --3. contracts which are not active can not be split asset
2766       IF (NVL(l_chrb_rec.sts_code,OKL_API.G_MISS_CHAR) <> 'BOOKED') THEN
2767          okl_api.set_message(
2768                              G_APP_NAME,
2769                              G_LLA_REV_ONLY_BOOKED
2770                             );
2771          x_return_status := OKL_API.G_RET_STS_ERROR;
2772          RAISE OKL_API.G_EXCEPTION_ERROR;
2773       END IF;
2774       OKL_API.END_ACTIVITY (x_msg_count,
2775                           x_msg_data );
2776       EXCEPTION
2777       WHEN OKL_API.G_EXCEPTION_ERROR THEN
2778       IF l_chrb_csr%ISOPEN THEN
2779           CLOSE l_chrb_csr;
2780       END IF;
2781       x_return_status := OKL_API.HANDLE_EXCEPTIONS(
2782                                l_api_name,
2783                                G_PKG_NAME,
2784                                'OKL_API.G_RET_STS_ERROR',
2785                                x_msg_count,
2786                                x_msg_data,
2787                                '_PVT');
2788       WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
2789       IF l_chrb_csr%ISOPEN THEN
2790           CLOSE l_chrb_csr;
2791       END IF;
2792       x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
2793                               l_api_name,
2794                               G_PKG_NAME,
2795                               'OKL_API.G_RET_STS_UNEXP_ERROR',
2796                               x_msg_count,
2797                               x_msg_data,
2798                               '_PVT');
2799       WHEN OTHERS THEN
2800       IF l_chrb_csr%ISOPEN THEN
2801           CLOSE l_chrb_csr;
2802       END IF;
2803       x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
2804                               l_api_name,
2805                               G_PKG_NAME,
2806                               'OTHERS',
2807                               x_msg_count,
2808                               x_msg_data,
2809                               '_PVT');
2810 
2811   END validate_trx_date;
2812 
2813 -----------------------------------------------------------------
2814 --01-Mar-2004: Bug# 3156924
2815 --overloaded will be called locally from create_split_transaction
2816 -----------------------------------------------------------------
2817   PROCEDURE validate_trx_date(p_api_version    IN  NUMBER,
2818                               p_init_msg_list  IN  VARCHAR2,
2819                               x_return_status  OUT NOCOPY VARCHAR2,
2820                               x_msg_count      OUT NOCOPY NUMBER,
2821                               x_msg_data       OUT NOCOPY VARCHAR2,
2822                               p_cle_id         IN  NUMBER,
2823                               p_trx_date       IN  DATE) IS
2824 
2825   l_return_status        VARCHAR2(1)  DEFAULT OKL_API.G_RET_STS_SUCCESS;
2826   l_api_name             CONSTANT VARCHAR2(30) := 'VALIDATE_TRX_DATE';
2827   l_api_version          CONSTANT NUMBER := 1.0;
2828 
2829 
2830   l_date_valid VARCHAR2(1) DEFAULT 'N';
2831 
2832   --cursor to check the date validity wrt contract dates
2833   --Bug# 5946411: ER
2834   /*
2835   CURSOR l_cleb_csr(ptrxdate IN DATE, pcleid IN NUMBER, pdateformat IN VARCHAR2) IS
2836   SELECT 'Y'                                  date_valid,
2837          TO_CHAR(cleb.start_date,pdateformat) line_start_date,
2838          TO_CHAR(cleb.end_date,pdateformat)   line_end_date,
2839          cleb.sts_code                        sts_code
2840   FROM   okc_k_lines_b cleb
2841   WHERE  ptrxdate BETWEEN TRUNC(cleb.start_date) AND TRUNC(cleb.end_date)
2842   AND    cleb.id = pcleid;
2843   */
2844   CURSOR l_cleb_csr(pcleid IN NUMBER, pdateformat IN VARCHAR2) IS
2845   SELECT TO_CHAR(cleb.start_date,pdateformat) line_start_date,
2846          TO_CHAR(cleb.end_date,pdateformat)   line_end_date,
2847          cleb.sts_code                        sts_code,
2848          trunc(cleb.start_date)  cle_start_date,
2849          TRUNC(cleb.end_date)    cle_end_date
2850   FROM   okc_k_lines_b cleb
2851   WHERE  cleb.id = pcleid;
2852   --Bug# 5946411: ER end
2853 
2854   /*  --Added by HARIVEN - cursor to fetch the Start and  End Date
2855   CURSOR l_strdate_csr(pcleid IN NUMBER, pdateformat IN VARCHAR2) IS
2856   SELECT 'Y'                                  date_valid,
2857          TO_CHAR(cleb.start_date,pdateformat) line_start_date,
2858          TO_CHAR(cleb.end_date,pdateformat)   line_end_date,
2859          cleb.sts_code                        sts_code
2860   FROM   okc_k_lines_b cleb
2861   WHERE  cleb.id = pcleid;*/
2862 
2863   l_cleb_rec         l_cleb_csr%ROWTYPE;
2864   l_icx_date_format  VARCHAR2(240);
2865 
2866 
2867   BEGIN
2868       x_return_status := l_return_status;
2869 
2870       -- Call start_activity to create savepoint, check compatibility
2871       -- and initialize message list
2872       x_return_status := OKL_API.START_ACTIVITY (
2873                                  l_api_name
2874                                  ,p_init_msg_list
2875                                  ,'_PVT'
2876                                  ,x_return_status);
2877       -- Check if activity started successfully
2878       IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
2879          RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
2880       ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
2881          RAISE OKL_API.G_EXCEPTION_ERROR;
2882       END IF;
2883 
2884       --1. Transaction date is required
2885       IF NVL(p_trx_date,okl_api.g_miss_date) = okl_api.g_miss_date THEN
2886          okl_api.set_message(
2887                              G_APP_NAME,
2888                              G_LLA_MISSING_TRX_DATE
2889                             );
2890          x_return_status := OKL_API.G_RET_STS_ERROR;
2891          RAISE OKL_API.G_EXCEPTION_ERROR;
2892       END IF;
2893 
2894       l_icx_date_format := NVL(fnd_profile.value('ICX_DATE_FORMAT_MASK'),'DD-MON-YYYY');
2895       --2. Transaction date is between contract start and end date
2896       --Bug# 5946411: ER
2897       /*
2898       l_date_valid := 'N';
2899       OPEN l_cleb_csr(ptrxdate => p_trx_date, pcleid => p_cle_id, pdateformat => l_icx_date_format);
2900       FETCH l_cleb_csr INTO l_cleb_rec;
2901       IF l_cleb_csr%NOTFOUND THEN
2902           NULL;
2903       ELSE
2904           l_date_valid := l_cleb_rec.date_valid;
2905       END IF;
2906       CLOSE l_cleb_csr;
2907       */
2908       l_date_valid := 'Y';
2909       OPEN l_cleb_csr( pcleid => p_cle_id, pdateformat => l_icx_date_format);
2910       FETCH l_cleb_csr INTO l_cleb_rec;
2911       IF l_cleb_csr%NOTFOUND THEN
2912           NULL;
2913       ELSE
2914           if (l_cleb_rec.sts_code  = 'BOOKED')
2915              AND NOT (p_trx_date BETWEEN l_cleb_rec.cle_start_date AND l_cleb_rec.cle_end_date) THEN
2916             l_date_valid := 'N';
2917           end if;
2918       END IF;
2919       CLOSE l_cleb_csr;
2920 
2921       --Bug# 5946411: ER End
2922 
2923 
2924       IF (l_date_valid = 'N') THEN
2925       /*OPEN l_strdate_csr(pcleid => p_cle_id, pdateformat => l_icx_date_format);
2926       FETCH l_strdate_csr INTO l_cleb_rec;
2927       IF l_strdate_csr%NOTFOUND THEN
2928           NULL;
2929       ELSE
2930           l_date_valid := l_cleb_rec.date_valid;
2931       END IF;
2932       CLOSE l_strdate_csr;*/
2933          okl_api.set_message(
2934                              G_APP_NAME,
2935                              G_LLA_WRONG_TRX_DATE,
2936                              'START_DATE',
2937                              l_cleb_rec.line_start_date,
2938                              'END_DATE',
2939                              l_cleb_rec.line_end_date
2940                             );
2941          x_return_status := OKL_API.G_RET_STS_ERROR;
2942          RAISE OKL_API.G_EXCEPTION_ERROR;
2943       END IF;
2944       EXCEPTION
2945       WHEN OKL_API.G_EXCEPTION_ERROR THEN
2946       IF l_cleb_csr%ISOPEN THEN
2947           CLOSE l_cleb_csr;
2948       END IF;
2949       x_return_status := OKL_API.HANDLE_EXCEPTIONS(
2950                                l_api_name,
2951                                G_PKG_NAME,
2952                                'OKL_API.G_RET_STS_ERROR',
2953                                x_msg_count,
2954                                x_msg_data,
2955                                '_PVT');
2956       WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
2957       IF l_cleb_csr%ISOPEN THEN
2958           CLOSE l_cleb_csr;
2959       END IF;
2960       x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
2961                               l_api_name,
2962                               G_PKG_NAME,
2963                               'OKL_API.G_RET_STS_UNEXP_ERROR',
2964                               x_msg_count,
2965                               x_msg_data,
2966                               '_PVT');
2967       WHEN OTHERS THEN
2968       IF l_cleb_csr%ISOPEN THEN
2969           CLOSE l_cleb_csr;
2970       END IF;
2971       x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
2972                               l_api_name,
2973                               G_PKG_NAME,
2974                               'OTHERS',
2975                               x_msg_count,
2976                               x_msg_data,
2977                               '_PVT');
2978 
2979   END validate_trx_date;
2980 ---------------
2981 --Bug# 3156924
2982 --------------
2983 -------------------------------------------------------------------------------
2984 --Function to get Asset Line Record
2985 ------------------------------------------------------------------------------
2986 FUNCTION get_ast_line(p_cle_id IN NUMBER,
2987                       x_no_data_found OUT NOCOPY BOOLEAN)
2988 RETURN ast_line_rec_type IS
2989 CURSOR ast_line_curs(p_cle_id IN NUMBER) IS
2990 SELECT
2991         ID1,
2992         ID2,
2993         NAME,
2994         DESCRIPTION,
2995         ITEM_DESCRIPTION,
2996         COMMENTS,
2997         CHR_ID,
2998         DNZ_CHR_ID,
2999         LTY_CODE,
3000         LSE_TYPE,
3001         LSE_PARENT_ID,
3002         PARENT_LINE_ID,
3003         LINE_NUMBER,
3004         DATE_TERMINATED,
3005         START_DATE_ACTIVE,
3006         END_DATE_ACTIVE,
3007         STATUS,
3008         ASSET_ID,
3009         QUANTITY,
3010         UNIT_OF_MEASURE_CODE,
3011         ASSET_NUMBER,
3012         CORPORATE_BOOK,
3013         LIFE_IN_MONTHS,
3014         ORIGINAL_COST,
3015         COST,
3016         ADJUSTED_COST,
3017         TAG_NUMBER,
3018         CURRENT_UNITS,
3019         SERIAL_NUMBER,
3020         REVAL_CEILING,
3021         NEW_USED,
3022         IN_SERVICE_DATE,
3023         MANUFACTURER_NAME,
3024         MODEL_NUMBER,
3025         ASSET_TYPE,
3026         SALVAGE_VALUE,
3027         PERCENT_SALVAGE_VALUE,
3028         DEPRECIATION_CATEGORY,
3029         DEPRN_START_DATE,
3030         DEPRN_METHOD_CODE,
3031         RATE_ADJUSTMENT_FACTOR,
3032         BASIC_RATE,
3033         ADJUSTED_RATE,
3034         RECOVERABLE_COST,
3035         ORG_ID,
3036         SET_OF_BOOKS_ID,
3037     PROPERTY_TYPE_CODE,
3038     PROPERTY_1245_1250_CODE,
3039     IN_USE_FLAG,
3040     OWNED_LEASED,
3041     INVENTORIAL,
3042     LINE_STATUS
3043 FROM    OKX_ASSET_LINES_V
3044 WHERE   parent_line_id = p_cle_id;
3045 l_ast_line_rec ast_line_rec_type;
3046 BEGIN
3047     x_no_data_found := TRUE;
3048     OPEN  ast_line_curs(p_cle_id);
3049     FETCH ast_line_curs INTO
3050         l_ast_line_rec.ID1,
3051         l_ast_line_rec.ID2,
3052         l_ast_line_rec.NAME,
3053         l_ast_line_rec.DESCRIPTION,
3054         l_ast_line_rec.ITEM_DESCRIPTION,
3055         l_ast_line_rec.COMMENTS,
3056         l_ast_line_rec.CHR_ID,
3057         l_ast_line_rec.DNZ_CHR_ID,
3058         l_ast_line_rec.LTY_CODE,
3059         l_ast_line_rec.LSE_TYPE,
3060         l_ast_line_rec.LSE_PARENT_ID,
3061         l_ast_line_rec.PARENT_LINE_ID,
3062         l_ast_line_rec.LINE_NUMBER,
3063         l_ast_line_rec.DATE_TERMINATED,
3064         l_ast_line_rec.START_DATE_ACTIVE,
3065         l_ast_line_rec.END_DATE_ACTIVE,
3066         l_ast_line_rec.STATUS,
3067         l_ast_line_rec.ASSET_ID,
3068         l_ast_line_rec.QUANTITY,
3069         l_ast_line_rec.UNIT_OF_MEASURE_CODE,
3070         l_ast_line_rec.ASSET_NUMBER,
3071         l_ast_line_rec.CORPORATE_BOOK,
3072         l_ast_line_rec.LIFE_IN_MONTHS,
3073         l_ast_line_rec.ORIGINAL_COST,
3074         l_ast_line_rec.COST,
3075         l_ast_line_rec.ADJUSTED_COST,
3076         l_ast_line_rec.TAG_NUMBER,
3077         l_ast_line_rec.CURRENT_UNITS,
3078         l_ast_line_rec.SERIAL_NUMBER,
3079         l_ast_line_rec.REVAL_CEILING,
3080         l_ast_line_rec.NEW_USED,
3081         l_ast_line_rec.IN_SERVICE_DATE,
3082         l_ast_line_rec.MANUFACTURER_NAME,
3083         l_ast_line_rec.MODEL_NUMBER,
3084         l_ast_line_rec.ASSET_TYPE,
3085         l_ast_line_rec.SALVAGE_VALUE,
3086         l_ast_line_rec.PERCENT_SALVAGE_VALUE,
3087         l_ast_line_rec.DEPRECIATION_CATEGORY,
3088         l_ast_line_rec.DEPRN_START_DATE,
3089         l_ast_line_rec.DEPRN_METHOD_CODE,
3090         l_ast_line_rec.RATE_ADJUSTMENT_FACTOR,
3091         l_ast_line_rec.BASIC_RATE,
3092         l_ast_line_rec.ADJUSTED_RATE,
3093         l_ast_line_rec.RECOVERABLE_COST,
3094         l_ast_line_rec.ORG_ID,
3095         l_ast_line_rec.SET_OF_BOOKS_ID,
3096     l_ast_line_rec.PROPERTY_TYPE_CODE,
3097     l_ast_line_rec.PROPERTY_1245_1250_CODE,
3098     l_ast_line_rec.IN_USE_FLAG,
3099     l_ast_line_rec.OWNED_LEASED,
3100     l_ast_line_rec.INVENTORIAL,
3101     l_ast_line_rec.LINE_STATUS;
3102 
3103         x_no_data_found := ast_line_curs%NOTFOUND;
3104         CLOSE  ast_line_curs;
3105         RETURN (l_ast_line_rec);
3106     END get_ast_line;
3107     FUNCTION get_ast_line (p_cle_id IN NUMBER) RETURN  ast_line_rec_type IS
3108        l_row_not_found    BOOLEAN := TRUE;
3109     BEGIN
3110         RETURN (get_ast_line(p_cle_id,l_row_not_found));
3111     END get_ast_line;
3112 --------------------------------------------------------------------------------
3113 --Function to get txl details for a given tal_id
3114 --------------------------------------------------------------------------------
3115 FUNCTION get_txlv_rec (
3116     p_kle_id         IN  NUMBER,
3117     x_no_data_found  OUT NOCOPY BOOLEAN
3118   ) RETURN txlv_rec_type IS
3119     CURSOR txlv_csr (p_kle_id                 IN NUMBER) IS
3120     SELECT ID,
3121            OBJECT_VERSION_NUMBER,
3122            SFWT_FLAG,
3123            TAS_ID,
3124            ILO_ID,
3125            ILO_ID_OLD,
3126            IAY_ID,
3127            IAY_ID_NEW,
3128            KLE_ID,
3129            DNZ_KHR_ID,
3130            LINE_NUMBER,
3131            ORG_ID,
3132            TAL_TYPE,
3133            ASSET_NUMBER,
3134            DESCRIPTION,
3135            FA_LOCATION_ID,
3136            ORIGINAL_COST,
3137            CURRENT_UNITS,
3138            MANUFACTURER_NAME,
3139            YEAR_MANUFACTURED,
3140            SUPPLIER_ID,
3141            USED_ASSET_YN,
3142            TAG_NUMBER,
3143            MODEL_NUMBER,
3144            CORPORATE_BOOK,
3145            DATE_PURCHASED,
3146            DATE_DELIVERY,
3147            IN_SERVICE_DATE,
3148            LIFE_IN_MONTHS,
3149            DEPRECIATION_ID,
3150            DEPRECIATION_COST,
3151            DEPRN_METHOD,
3152            DEPRN_RATE,
3153            SALVAGE_VALUE,
3154            PERCENT_SALVAGE_VALUE,
3155 --Bug# 2981308
3156            ASSET_KEY_ID,
3157            ATTRIBUTE_CATEGORY,
3158            ATTRIBUTE1,
3159            ATTRIBUTE2,
3160            ATTRIBUTE3,
3161            ATTRIBUTE4,
3162            ATTRIBUTE5,
3163            ATTRIBUTE6,
3164            ATTRIBUTE7,
3165            ATTRIBUTE8,
3166            ATTRIBUTE9,
3167            ATTRIBUTE10,
3168            ATTRIBUTE11,
3169            ATTRIBUTE12,
3170            ATTRIBUTE13,
3171            ATTRIBUTE14,
3172            ATTRIBUTE15,
3173            CREATED_BY,
3174            CREATION_DATE,
3175            LAST_UPDATED_BY,
3176            LAST_UPDATE_DATE,
3177            LAST_UPDATE_LOGIN,
3178            DEPRECIATE_YN,
3179            HOLD_PERIOD_DAYS,
3180            OLD_SALVAGE_VALUE,
3181            NEW_RESIDUAL_VALUE,
3182            OLD_RESIDUAL_VALUE,
3183            UNITS_RETIRED,
3184            COST_RETIRED,
3185            SALE_PROCEEDS,
3186            REMOVAL_COST,
3187            DNZ_ASSET_ID,
3188            DATE_DUE,
3189            REP_ASSET_ID,
3190            LKE_ASSET_ID,
3191            MATCH_AMOUNT,
3192            SPLIT_INTO_SINGLES_FLAG,
3193            SPLIT_INTO_UNITS,
3194 --Bug #2723498 : 11.5.9 - Multi currency compliance
3195            CURRENCY_CODE,
3196            CURRENCY_CONVERSION_TYPE,
3197            CURRENCY_CONVERSION_RATE,
3198            CURRENCY_CONVERSION_DATE
3199 -- Multi-Currency Change
3200      FROM  Okl_Txl_Assets_V
3201      WHERE okl_txl_assets_v.kle_id  = p_kle_id
3202      AND   EXISTS (SELECT NULL
3203                    FROM   okl_trx_Assets   trx,
3204                           okl_trx_types_tl ttyp
3205                    WHERE  trx.id = okl_txl_assets_v.tas_id
3206                    AND    trx.tsu_code  = 'ENTERED'
3207                    AND    trx.try_id    = ttyp.id
3208                    AND    ttyp.name     = 'Split Asset'
3209                    AND    ttyp.LANGUAGE = 'US');
3210 
3211     l_txlv_rec                     txlv_rec_type;
3212   BEGIN
3213     x_no_data_found := TRUE;
3214     -- Get current database values
3215     OPEN txlv_csr (p_kle_id => p_kle_id);
3216     FETCH txlv_csr INTO
3217               l_txlv_rec.ID,
3218               l_txlv_rec.OBJECT_VERSION_NUMBER,
3219               l_txlv_rec.SFWT_FLAG,
3220               l_txlv_rec.TAS_ID,
3221               l_txlv_rec.ILO_ID,
3222               l_txlv_rec.ILO_ID_OLD,
3223               l_txlv_rec.IAY_ID,
3224               l_txlv_rec.IAY_ID_NEW,
3225               l_txlv_rec.KLE_ID,
3226               l_txlv_rec.DNZ_KHR_ID,
3227               l_txlv_rec.LINE_NUMBER,
3228               l_txlv_rec.ORG_ID,
3229               l_txlv_rec.TAL_TYPE,
3230               l_txlv_rec.ASSET_NUMBER,
3231               l_txlv_rec.DESCRIPTION,
3232               l_txlv_rec.FA_LOCATION_ID,
3233               l_txlv_rec.ORIGINAL_COST,
3234               l_txlv_rec.CURRENT_UNITS,
3235               l_txlv_rec.MANUFACTURER_NAME,
3236               l_txlv_rec.YEAR_MANUFACTURED,
3237               l_txlv_rec.SUPPLIER_ID,
3238               l_txlv_rec.USED_ASSET_YN,
3239               l_txlv_rec.TAG_NUMBER,
3240               l_txlv_rec.MODEL_NUMBER,
3241               l_txlv_rec.CORPORATE_BOOK,
3242               l_txlv_rec.DATE_PURCHASED,
3243               l_txlv_rec.DATE_DELIVERY,
3244               l_txlv_rec.IN_SERVICE_DATE,
3245               l_txlv_rec.LIFE_IN_MONTHS,
3246               l_txlv_rec.DEPRECIATION_ID,
3247               l_txlv_rec.DEPRECIATION_COST,
3248               l_txlv_rec.DEPRN_METHOD,
3249               l_txlv_rec.DEPRN_RATE,
3250               l_txlv_rec.SALVAGE_VALUE,
3251               l_txlv_rec.PERCENT_SALVAGE_VALUE,
3252 --Bug# 2981308 :
3253               l_txlv_rec.ASSET_KEY_ID,
3254               l_txlv_rec.ATTRIBUTE_CATEGORY,
3255               l_txlv_rec.ATTRIBUTE1,
3256               l_txlv_rec.ATTRIBUTE2,
3257               l_txlv_rec.ATTRIBUTE3,
3258               l_txlv_rec.ATTRIBUTE4,
3259               l_txlv_rec.ATTRIBUTE5,
3260               l_txlv_rec.ATTRIBUTE6,
3261               l_txlv_rec.ATTRIBUTE7,
3262               l_txlv_rec.ATTRIBUTE8,
3263               l_txlv_rec.ATTRIBUTE9,
3264               l_txlv_rec.ATTRIBUTE10,
3265               l_txlv_rec.ATTRIBUTE11,
3266               l_txlv_rec.ATTRIBUTE12,
3267               l_txlv_rec.ATTRIBUTE13,
3268               l_txlv_rec.ATTRIBUTE14,
3269               l_txlv_rec.ATTRIBUTE15,
3270               l_txlv_rec.CREATED_BY,
3271               l_txlv_rec.CREATION_DATE,
3272               l_txlv_rec.LAST_UPDATED_BY,
3273               l_txlv_rec.LAST_UPDATE_DATE,
3274               l_txlv_rec.LAST_UPDATE_LOGIN,
3275               l_txlv_rec.DEPRECIATE_YN,
3276               l_txlv_rec.HOLD_PERIOD_DAYS,
3277               l_txlv_rec.OLD_SALVAGE_VALUE,
3278               l_txlv_rec.NEW_RESIDUAL_VALUE,
3279               l_txlv_rec.OLD_RESIDUAL_VALUE,
3280               l_txlv_rec.UNITS_RETIRED,
3281               l_txlv_rec.COST_RETIRED,
3282               l_txlv_rec.SALE_PROCEEDS,
3283               l_txlv_rec.REMOVAL_COST,
3284               l_txlv_rec.DNZ_ASSET_ID,
3285               l_txlv_rec.DATE_DUE,
3286               l_txlv_rec.REP_ASSET_ID,
3287               l_txlv_rec.LKE_ASSET_ID,
3288               l_txlv_rec.MATCH_AMOUNT,
3289               l_txlv_rec.SPLIT_INTO_SINGLES_FLAG,
3290               l_txlv_rec.SPLIT_INTO_UNITS,
3291 -- Multi-Currency Change
3292               l_txlv_rec.CURRENCY_CODE,
3293               l_txlv_rec.CURRENCY_CONVERSION_TYPE,
3294               l_txlv_rec.CURRENCY_CONVERSION_RATE,
3295               l_txlv_rec.CURRENCY_CONVERSION_DATE
3296               ;
3297 -- Multi-Currency Change
3298     x_no_data_found := txlv_csr%NOTFOUND;
3299     CLOSE txlv_csr;
3300     RETURN(l_txlv_rec);
3301 END get_txlv_rec;
3302 --------------------------------------------------------------------------------
3303 --Function to get trx details for a given tal_id
3304 --------------------------------------------------------------------------------
3305 FUNCTION get_trx_details (
3306     p_tal_id                       IN  NUMBER,
3307     x_no_data_found                OUT NOCOPY BOOLEAN
3308   ) RETURN txdv_tbl_type IS
3309     CURSOR txdv_csr(p_tal_id                 IN NUMBER) IS
3310     SELECT
3311             ID,
3312             OBJECT_VERSION_NUMBER,
3313             TAL_ID,
3314             TARGET_KLE_ID,
3315             LINE_DETAIL_NUMBER,
3316             ASSET_NUMBER,
3317             DESCRIPTION,
3318             QUANTITY,
3319             COST,
3320             TAX_BOOK,
3321             LIFE_IN_MONTHS_TAX,
3322             DEPRN_METHOD_TAX,
3323             DEPRN_RATE_TAX,
3324             SALVAGE_VALUE,
3325             SPLIT_PERCENT,
3326             INVENTORY_ITEM_ID,
3327             ATTRIBUTE_CATEGORY,
3328             ATTRIBUTE1,
3329             ATTRIBUTE2,
3330             ATTRIBUTE3,
3331             ATTRIBUTE4,
3332             ATTRIBUTE5,
3333             ATTRIBUTE6,
3334             ATTRIBUTE7,
3335             ATTRIBUTE8,
3336             ATTRIBUTE9,
3337             ATTRIBUTE10,
3338             ATTRIBUTE11,
3339             ATTRIBUTE12,
3340             ATTRIBUTE13,
3341             ATTRIBUTE14,
3342             ATTRIBUTE15,
3343             CREATED_BY,
3344             CREATION_DATE,
3345             LAST_UPDATED_BY,
3346             LAST_UPDATE_DATE,
3347             LAST_UPDATE_LOGIN,
3348 --Bug #2723498 : 11.5.9 - Multi currency compliance
3349             CURRENCY_CODE,
3350             CURRENCY_CONVERSION_TYPE,
3351             CURRENCY_CONVERSION_RATE,
3352             CURRENCY_CONVERSION_DATE
3353      FROM  Okl_Txd_Assets_v txdv
3354      WHERE  txdv.tal_id = p_tal_id
3355      ORDER  BY NVL(target_kle_id,-1)
3356      --Bug# 3502142
3357              , NVL(split_percent,-1);
3358 
3359     l_txdv_rec                      txdv_rec_type;
3360     l_txdv_tbl                      txdv_tbl_type;
3361     r_count                         NUMBER DEFAULT 0;
3362   BEGIN
3363     x_no_data_found := TRUE;
3364     -- Get current database values
3365     OPEN txdv_csr (p_tal_id);
3366     LOOP
3367     FETCH txdv_csr INTO
3368               l_txdv_rec.ID,
3369               l_txdv_rec.OBJECT_VERSION_NUMBER,
3370               l_txdv_rec.TAL_ID,
3371               l_txdv_rec.TARGET_KLE_ID,
3372               l_txdv_rec.LINE_DETAIL_NUMBER,
3373               l_txdv_rec.ASSET_NUMBER,
3374               l_txdv_rec.description,
3375               l_txdv_rec.QUANTITY,
3376               l_txdv_rec.COST,
3377               l_txdv_rec.TAX_BOOK,
3378               l_txdv_rec.LIFE_IN_MONTHS_TAX,
3379               l_txdv_rec.DEPRN_METHOD_TAX,
3380               l_txdv_rec.DEPRN_RATE_TAX,
3381               l_txdv_rec.SALVAGE_VALUE,
3382               l_txdv_rec.SPLIT_PERCENT,
3383               l_txdv_rec.INVENTORY_ITEM_ID,
3384               l_txdv_rec.ATTRIBUTE_CATEGORY,
3385               l_txdv_rec.ATTRIBUTE1,
3386               l_txdv_rec.ATTRIBUTE2,
3387               l_txdv_rec.ATTRIBUTE3,
3388               l_txdv_rec.ATTRIBUTE4,
3389               l_txdv_rec.ATTRIBUTE5,
3390               l_txdv_rec.ATTRIBUTE6,
3391               l_txdv_rec.ATTRIBUTE7,
3392               l_txdv_rec.ATTRIBUTE8,
3393               l_txdv_rec.ATTRIBUTE9,
3394               l_txdv_rec.ATTRIBUTE10,
3395               l_txdv_rec.ATTRIBUTE11,
3396               l_txdv_rec.ATTRIBUTE12,
3397               l_txdv_rec.ATTRIBUTE13,
3398               l_txdv_rec.ATTRIBUTE14,
3399               l_txdv_rec.ATTRIBUTE15,
3400               l_txdv_rec.CREATED_BY,
3401               l_txdv_rec.CREATION_DATE,
3402               l_txdv_rec.LAST_UPDATED_BY,
3403               l_txdv_rec.LAST_UPDATE_DATE,
3404               l_txdv_rec.LAST_UPDATE_LOGIN,
3405 -- Multi-Currency Change
3406               l_txdv_rec.CURRENCY_CODE,
3407               l_txdv_rec.CURRENCY_CONVERSION_TYPE,
3408               l_txdv_rec.CURRENCY_CONVERSION_RATE,
3409               l_txdv_rec.CURRENCY_CONVERSION_DATE;
3410 -- Multi-Currency Change
3411               EXIT WHEN txdv_csr%NOTFOUND;
3412               r_count := txdv_csr%rowcount;
3413               l_txdv_tbl(r_count) := l_txdv_rec;
3414     END LOOP;
3415     CLOSE txdv_csr;
3416     IF r_count <> 0 THEN
3417        x_no_data_found := FALSE;
3418     ELSIF r_count = 0 THEN
3419        x_no_data_found := TRUE;
3420     END IF;
3421     RETURN(l_txdv_tbl);
3422 END get_trx_details;
3423 --------------------------------------------------------------------------------
3424 --Function to verify whether the generated split asset number exists in FA
3425 --------------------------------------------------------------------------------
3426 FUNCTION Asset_Number_Exists(p_asset_number IN VARCHAR2,
3427                              x_asset_exists OUT NOCOPY VARCHAR2) RETURN VARCHAR2 IS
3428     l_asset_exists VARCHAR2(1) DEFAULT 'N';
3429     l_return_status VARCHAR2(1) DEFAULT OKL_API.G_RET_STS_SUCCESS;
3430 
3431     --chk for asset in FA
3432     CURSOR asset_chk_curs1 (p_asset_number IN VARCHAR2) IS
3433     SELECT 'Y'
3434     FROM   okx_assets_v okx
3435     WHERE  okx.asset_number = p_asset_number;
3436 
3437     --chk for asset on asset line
3438     CURSOR asset_chk_curs2 (p_asset_number IN VARCHAR2) IS
3439     SELECT 'Y'
3440     FROM   okl_k_lines_full_v kle,
3441            okc_line_styles_b  lse
3442     WHERE  kle.name = p_asset_number
3443     AND    kle.lse_id = lse.id
3444     --and    lse.lty_code = 'FIXED_ASSET';
3445     --Bug# 3222804
3446     AND    lse.lty_code = 'FREE_FORM1';
3447 
3448     --check for asset on an split asset transaction
3449     CURSOR asset_chk_curs3 (p_asset_number IN VARCHAR2) IS
3450     SELECT 'Y'
3451     FROM   okl_txd_assets_b txd
3452     WHERE  NVL(txd.asset_number,'-999999999999999') = p_asset_number
3453     AND    EXISTS (SELECT NULL
3454                    FROM   okl_trx_Assets   trx,
3455                           okl_trx_types_tl ttyp,
3456                           okl_txl_assets_b txl
3457                    WHERE  trx.id        = txl.tas_id
3458                    AND    trx.try_id    = ttyp.id
3459                    AND    ttyp.name     = 'Split Asset'
3460                    AND    ttyp.LANGUAGE = 'US'
3461                    AND    txl.id        = txd.tal_id);
3462 
3463 
3464 BEGIN
3465    l_return_status := OKL_API.G_RET_STS_SUCCESS;
3466    --dbms_output.put_line('Asset Number'||p_asset_number);
3467    l_asset_exists := 'N';
3468    OPEN asset_chk_curs1(p_asset_number);
3469        FETCH asset_chk_curs1 INTO l_asset_exists;
3470        IF asset_chk_curs1%NOTFOUND THEN
3471           OPEN asset_chk_curs2(p_asset_number);
3472               FETCH asset_chk_curs2 INTO l_asset_exists;
3473               IF asset_chk_curs2%NOTFOUND THEN
3474                   OPEN asset_chk_curs3(p_asset_number);
3475                       FETCH asset_chk_curs3 INTO l_asset_exists;
3476                       IF asset_chk_curs3%NOTFOUND THEN
3477                           NULL;
3478                       END IF;
3479                   CLOSE asset_chk_curs3;
3480               END IF;
3481            CLOSE asset_chk_curs2;
3482        END IF;
3483    CLOSE asset_chk_curs1;
3484    x_asset_exists := l_asset_exists;
3485    --return status to caller
3486    RETURN(l_return_status);
3487    EXCEPTION
3488    WHEN OTHERS THEN
3489       -- store SQL error message on message stack for caller
3490       OKL_API.set_message(
3491               G_APP_NAME,
3492               G_UNEXPECTED_ERROR,
3493               G_SQLCODE_TOKEN,
3494               SQLCODE,
3495               G_SQLERRM_TOKEN,
3496               SQLERRM);
3497        --close the cursor
3498        IF asset_chk_curs1%ISOPEN THEN
3499           CLOSE asset_chk_curs1;
3500        END IF;
3501        IF asset_chk_curs2%ISOPEN THEN
3502           CLOSE asset_chk_curs2;
3503        END IF;
3504        IF asset_chk_curs3%ISOPEN THEN
3505           CLOSE asset_chk_curs3;
3506        END IF;
3507        --send back status to caller
3508        l_return_status := OKL_API.G_RET_STS_UNEXP_ERROR;
3509        RETURN(l_return_status);
3510 END Asset_Number_Exists;
3511 --------------------------------------------------------------------------------
3512 --Function to validate okl_txd_Assets_v attributes
3513 --------------------------------------------------------------------------------
3514 FUNCTION Validate_Attributes (p_txdv_rec IN txdv_rec_type)
3515   RETURN VARCHAR2 IS
3516 
3517    l_return_status VARCHAR2(3) := OKL_API.G_RET_STS_SUCCESS;
3518 
3519     --chk for asset in FA
3520     CURSOR asset_chk_curs1 (p_asset_number IN VARCHAR2) IS
3521     SELECT 'Y'
3522     FROM   okx_assets_v okx
3523     WHERE  okx.asset_number = p_asset_number;
3524 
3525     --chk for asset on asset line
3526     CURSOR asset_chk_curs2 (p_asset_number IN VARCHAR2) IS
3527     SELECT 'Y'
3528     FROM   okl_k_lines_full_v kle,
3529            okc_line_styles_b  lse
3530     WHERE  kle.name = p_asset_number
3531     AND    kle.lse_id = lse.id
3532     AND    lse.lty_code = 'FIXED_ASSET';
3533 
3534 
3535     --check for asset on an split asset transaction
3536     CURSOR asset_chk_curs3 (p_asset_number IN VARCHAR2, p_txdv_id IN NUMBER) IS
3537     SELECT 'Y'
3538     FROM   okl_txd_assets_b txd,
3539            okl_txl_assets_b txl,
3540            okl_trx_types_tl ttyp,
3541            okl_trx_assets   trx
3542     WHERE  NVL(txd.asset_number,'-999999999999999') = p_asset_number
3543     AND    txd.tal_id    = txl.id
3544     AND    txl.tas_id    = trx.id
3545     AND    trx.try_id    = ttyp.id
3546     AND    ttyp.name     = 'Split Asset'
3547     AND    ttyp.LANGUAGE = 'US'
3548     AND    NVL(txd.target_kle_id,-99) <> txl.kle_id
3549     AND    trx.tsu_code = 'ENTERED'
3550     AND    txd.id <> p_txdv_id;
3551 
3552    --check for asset on create asset or rebook transaction
3553    CURSOR asset_chk_curs4 (p_asset_number IN VARCHAR2) IS
3554    SELECT 'Y'
3555    FROM   okl_txl_assets_b txl
3556    WHERE  txl.asset_number = p_asset_number
3557    AND    txl.tal_type IN ('ALI','CRB'); --only transactions apart from split which create a new line
3558 
3559 
3560    l_txdv_rec      txdv_rec_type;
3561    l_asset_exists  VARCHAR2(1) DEFAULT 'N';
3562 
3563 BEGIN
3564     l_txdv_rec := p_txdv_rec;
3565     l_return_status := OKL_API.G_RET_STS_SUCCESS;
3566     --1.Validate existence of asset number
3567     IF (l_txdv_rec.asset_number IS NULL) OR (l_txdv_rec.asset_number = OKL_API.G_MISS_CHAR) THEN
3568      -- store SQL error message on message stack
3569        OKL_API.set_message(p_app_name     => G_APP_NAME,
3570                            p_msg_name     => G_ASSET_REQUIRED);
3571        l_return_status := OKL_API.G_RET_STS_ERROR;
3572        -- halt validation as it is a required field
3573        RAISE G_EXCEPTION_HALT_VALIDATION;
3574     ELSE
3575        IF LENGTH(l_txdv_rec.asset_number) > 15 THEN
3576            -- store SQL error message on message stack
3577            OKL_API.set_message(p_app_name     => G_APP_NAME,
3578                                p_msg_name     => G_ASSET_LENGTH);
3579            l_return_status := OKL_API.G_RET_STS_ERROR;
3580            -- halt validation as it is a required field
3581            RAISE G_EXCEPTION_HALT_VALIDATION;
3582        ELSE
3583            l_asset_exists := 'N';
3584            OPEN asset_chk_curs1(l_txdv_rec.asset_number);
3585            FETCH asset_chk_curs1 INTO l_asset_exists;
3586            IF asset_chk_curs1%NOTFOUND THEN
3587                OPEN asset_chk_curs2(l_txdv_rec.asset_number);
3588                FETCH asset_chk_curs2 INTO l_asset_exists;
3589                IF asset_chk_curs2%NOTFOUND THEN
3590                   OPEN asset_chk_curs3(l_txdv_rec.asset_number,l_txdv_rec.id);
3591                       FETCH asset_chk_curs3 INTO l_asset_exists;
3592                       IF asset_chk_curs3%NOTFOUND THEN
3593                           OPEN asset_chk_curs4 (l_txdv_rec.asset_number);
3594                           FETCH asset_chk_curs4 INTO l_asset_exists;
3595                           IF asset_chk_curs4%NOTFOUND THEN
3596                               NULL;
3597                           END IF;
3598                       END IF;
3599                   CLOSE asset_chk_curs3;
3600               END IF;
3601               CLOSE asset_chk_curs2;
3602            END IF;
3603            CLOSE asset_chk_curs1;
3604            IF l_asset_exists = 'Y' THEN
3605               -- store SQL error message on message stack
3606               OKL_API.Set_Message(p_app_name     => G_APP_NAME,
3607                                   p_msg_name     => G_NOT_UNIQUE,
3608                                   p_token1       => G_COL_NAME_TOKEN,
3609                                   p_token1_value => 'Asset Number '|| l_txdv_rec.asset_number);
3610               l_return_status := OKL_API.G_RET_STS_ERROR;
3611               -- halt validation as it is a required field
3612               RAISE G_EXCEPTION_HALT_VALIDATION;
3613            END IF;
3614       END IF;
3615    END IF;
3616    RETURN(l_return_status);
3617 
3618    EXCEPTION
3619    WHEN G_EXCEPTION_HALT_VALIDATION THEN
3620         RETURN(l_return_status);
3621    WHEN OTHERS THEN
3622       -- store SQL error message on message stack for caller
3623       OKL_API.set_message(
3624               G_APP_NAME,
3625               G_UNEXPECTED_ERROR,
3626               G_SQLCODE_TOKEN,
3627               SQLCODE,
3628               G_SQLERRM_TOKEN,
3629               SQLERRM);
3630        --close the cursor
3631        IF asset_chk_curs1%ISOPEN THEN
3632           CLOSE asset_chk_curs1;
3633        END IF;
3634        IF asset_chk_curs2%ISOPEN THEN
3635           CLOSE asset_chk_curs2;
3636        END IF;
3637        IF asset_chk_curs3%ISOPEN THEN
3638           CLOSE asset_chk_curs3;
3639        END IF;
3640        IF asset_chk_curs4%ISOPEN THEN
3641           CLOSE asset_chk_curs4;
3642        END IF;
3643        --send back status to caller
3644        l_return_status := OKL_API.G_RET_STS_UNEXP_ERROR;
3645        RETURN(l_return_status);
3646 END Validate_Attributes;
3647 -------------------------------------------------------------------------------
3648 --Function to verify TRY_ID for the transaction try_id
3649 -------------------------------------------------------------------------------
3650 FUNCTION get_try_id(p_try_name  IN  OKL_TRX_TYPES_V.NAME%TYPE,
3651                     x_try_id    OUT NOCOPY OKC_LINE_STYLES_V.ID%TYPE)
3652   RETURN VARCHAR2 IS
3653     x_return_status            VARCHAR2(3) := OKL_API.G_RET_STS_SUCCESS;
3654     CURSOR c_get_try_id(p_try_name  OKL_TRX_TYPES_V.NAME%TYPE) IS
3655     SELECT id
3656     FROM   OKL_TRX_TYPES_TL
3657     WHERE UPPER(name) = UPPER(p_try_name)
3658     AND   LANGUAGE = 'US';
3659 BEGIN
3660    IF (p_try_name = OKL_API.G_MISS_CHAR) OR
3661        (p_try_name IS NULL) THEN
3662        -- store SQL error message on message stack
3663        OKL_API.set_message(p_app_name     => G_APP_NAME,
3664                            p_msg_name     => G_NO_DATA_FOUND,
3665                            p_token1       => G_COL_NAME_TOKEN,
3666                            p_token1_value => p_try_name);
3667        -- halt validation as it is a required field
3668        RAISE G_EXCEPTION_STOP_VALIDATION;
3669     END IF;
3670     OPEN c_get_try_id(p_try_name);
3671     FETCH c_get_try_id INTO x_try_id;
3672     IF c_get_try_id%NOTFOUND THEN
3673        OKL_API.set_message(p_app_name     => G_APP_NAME,
3674                            p_msg_name     => G_NO_DATA_FOUND,
3675                            p_token1       => G_COL_NAME_TOKEN,
3676                            p_token1_value => p_try_name);
3677        RAISE G_EXCEPTION_HALT_VALIDATION;
3678     END IF;
3679     CLOSE c_get_try_id;
3680     RETURN x_return_status;
3681   EXCEPTION
3682     WHEN G_EXCEPTION_STOP_VALIDATION THEN
3683     -- We are here since the field is required
3684     -- Notify Error
3685     x_return_status := OKL_API.G_RET_STS_ERROR;
3686     WHEN G_EXCEPTION_HALT_VALIDATION THEN
3687     -- We are here b'cause we have no parent record
3688     -- If the cursor is open then it has to be closed
3689      IF c_get_try_id%ISOPEN THEN
3690         CLOSE c_get_try_id;
3691      END IF;
3692     -- notify caller of an error
3693     x_return_status := OKL_API.G_RET_STS_ERROR;
3694     WHEN OTHERS THEN
3695       -- store SQL error message on message stack for caller
3696       OKL_API.set_message(
3697               G_APP_NAME,
3698               G_UNEXPECTED_ERROR,
3699               G_SQLCODE_TOKEN,
3700               SQLCODE,
3701               G_SQLERRM_TOKEN,
3702               SQLERRM);
3703      -- notify caller of an UNEXPECTED error
3704      x_return_status := OKL_API.G_RET_STS_UNEXP_ERROR;
3705      -- if the cursor is open
3706      IF c_get_try_id%ISOPEN THEN
3707         CLOSE c_get_try_id;
3708      END IF;
3709      RETURN(x_return_status);
3710  END get_try_id;
3711 --------------------------------------------------------------------------------
3712 --Function to verify whether the line id is correct or not
3713 --------------------------------------------------------------------------------
3714 FUNCTION verify_cle_id(p_cle_id IN NUMBER) RETURN VARCHAR2 IS
3715         CURSOR Chk_Top_Line(p_cle_id IN NUMBER) IS
3716         SELECT 'Y'
3717         FROM   OKC_K_LINES_B cle
3718         WHERE  cle.id = p_cle_id
3719         AND        EXISTS (SELECT '1'
3720                    FROM   OKC_LINE_STYLES_B lse
3721                        WHERE  lse.id = cle.lse_id
3722                    AND    lse.lty_code = G_FIN_AST_LTY_CODE
3723                    AND    lse.lse_type = G_TOP_LINE_STYLE)
3724         AND        EXISTS (SELECT '1'
3725                            FROM OKC_SUBCLASS_TOP_LINE stl,
3726                                 OKC_K_HEADERS_B CHR
3727                            WHERE stl.lse_id = cle.lse_id
3728                            AND   stl.scs_code = CHR.scs_code
3729                            AND   CHR.id = cle.chr_id);
3730     l_chk_top_line VARCHAR2(1) DEFAULT 'N';
3731     l_return_status VARCHAR2(1) DEFAULT OKL_API.G_RET_STS_SUCCESS;
3732 BEGIN
3733     OPEN Chk_Top_Line(p_cle_id);
3734     FETCH Chk_Top_Line INTO l_chk_top_line;
3735         IF chk_top_line%NOTFOUND THEN
3736            ----dbms_output.put_line('Not a correct top line id');
3737            NULL;
3738         END IF;
3739     CLOSE Chk_Top_Line;
3740     IF l_chk_top_line <> 'Y' THEN
3741         OKL_API.SET_MESSAGE(p_app_name     => g_app_name,
3742                                 p_msg_name     => G_INVALID_TOP_LINE);
3743         l_return_status := OKL_API.G_RET_STS_ERROR;
3744     END IF;
3745     RETURN(l_return_status);
3746     EXCEPTION
3747     WHEN OTHERS THEN
3748     l_return_status := OKL_API.G_RET_STS_UNEXP_ERROR;
3749     OKL_API.set_message(
3750             G_APP_NAME,
3751             G_UNEXPECTED_ERROR,
3752             G_SQLCODE_TOKEN,
3753             SQLCODE,
3754             G_SQLERRM_TOKEN,
3755             SQLERRM);
3756     IF Chk_top_line%ISOPEN THEN
3757         CLOSE Chk_top_line;
3758     END IF;
3759     RETURN(l_return_status);
3760 END verify_cle_id;
3761 -------------------------------------------------------------------------------
3762 --Function to get FA location id. An asset after being sent to FA may have been
3763 -- assigned to different FA locations. Since OKL takes only only one FA location
3764 --right now , we will pick up only one location.
3765 ------------------------------------------------------------------------------
3766 FUNCTION get_fa_location (p_asset_id IN VARCHAR2,
3767                              p_book_type_code IN VARCHAR2,
3768                              x_location_id OUT NOCOPY NUMBER)
3769 RETURN VARCHAR2 IS
3770     CURSOR fa_location_curs(p_asset_id       IN VARCHAR2,
3771                             p_book_type_code IN VARCHAR2) IS
3772     SELECT location_id
3773     FROM   okx_ast_dst_hst_v
3774     WHERE  asset_id = p_asset_id
3775     AND    book_type_code = p_book_type_code
3776     AND    status = 'A'
3777     AND    NVL(start_date_active,SYSDATE) <= SYSDATE
3778     AND    NVL(end_date_active,SYSDATE+1) > SYSDATE
3779     AND    transaction_header_id_out IS NULL
3780     AND    retirement_id IS NULL
3781     AND    ROWNUM < 2;
3782 --This is strange way to get one location
3783 --since asset can be assigned to multiple
3784 --fa locations. But till we know what we have to do
3785 --this is it.
3786     l_return_status VARCHAR2(1) := OKL_API.G_RET_STS_SUCCESS;
3787     l_location_id   NUMBER DEFAULT NULL;
3788 BEGIN
3789     l_return_status := OKL_API.G_RET_STS_SUCCESS;
3790     OPEN fa_location_curs(p_asset_id,
3791                           p_book_type_code);
3792        FETCH fa_location_curs
3793        INTO  l_location_id;
3794        IF fa_location_curs%NOTFOUND THEN
3795           NULL; --location not found that is not a problem
3796                 --as it is not a mandatory field
3797        END IF;
3798     CLOSE fa_location_curs;
3799     RETURN(l_return_status);
3800     EXCEPTION
3801     WHEN OTHERS THEN
3802          -- notify caller of an UNEXPECTED error
3803          l_return_status := OKL_API.G_RET_STS_UNEXP_ERROR;
3804          OKL_API.set_message(
3805             G_APP_NAME,
3806             G_UNEXPECTED_ERROR,
3807             G_SQLCODE_TOKEN,
3808             SQLCODE,
3809             G_SQLERRM_TOKEN,
3810             SQLERRM);
3811          -- if the cursor is open
3812          IF fa_location_curs%ISOPEN THEN
3813             CLOSE fa_location_curs;
3814           END IF;
3815      RETURN(l_return_status);
3816 END Get_fa_Location;
3817 --------------------------------------------------------------------------------
3818 --Procedure to create transaction header (OKL_TRX_ASSETS_V)
3819 --------------------------------------------------------------------------------
3820 PROCEDURE Create_trx_header(
3821             p_api_version    IN  NUMBER,
3822             p_init_msg_list  IN  VARCHAR2 DEFAULT OKL_API.G_FALSE,
3823             x_return_status  OUT NOCOPY VARCHAR2,
3824             x_msg_count      OUT NOCOPY NUMBER,
3825             x_msg_data       OUT NOCOPY VARCHAR2,
3826             p_trxv_rec       IN  trxv_rec_type,
3827             x_trxv_rec       OUT NOCOPY trxv_rec_type) IS
3828     l_api_name      CONSTANT VARCHAR2(30) := 'CREATE_TRX_HEADER';
3829   BEGIN
3830     x_return_status      := OKL_API.G_RET_STS_SUCCESS;
3831     -- Call start_activity to create savepoint, check compatibility
3832     -- and initialize message list
3833     x_return_status := OKL_API.START_ACTIVITY (
3834                                l_api_name
3835                                ,p_init_msg_list
3836                                ,'_PVT'
3837                                ,x_return_status);
3838     -- Check if activity started successfully
3839     IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
3840        RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
3841     ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
3842        RAISE OKL_API.G_EXCEPTION_ERROR;
3843     END IF;
3844     -- evaluate conditions, build outcomes for true conditions and
3845     -- put them on outcome queue
3846     OKL_TRX_ASSETS_PUB.create_trx_ass_h_def(
3847                        p_api_version    => p_api_version,
3848                        p_init_msg_list  => p_init_msg_list,
3849                        x_return_status  => x_return_status,
3850                        x_msg_count      => x_msg_count,
3851                        x_msg_data       => x_msg_data,
3852                        p_thpv_rec       => p_trxv_rec,
3853                        x_thpv_rec       => x_trxv_rec);
3854 
3855     IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
3856        RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
3857     ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
3858        RAISE OKL_API.G_EXCEPTION_ERROR;
3859     END IF;
3860     OKL_API.END_ACTIVITY (x_msg_count,
3861                           x_msg_data );
3862   EXCEPTION
3863     WHEN OKL_API.G_EXCEPTION_ERROR THEN
3864     x_return_status := OKL_API.HANDLE_EXCEPTIONS(
3865                                l_api_name,
3866                                G_PKG_NAME,
3867                                'OKC_API.G_RET_STS_ERROR',
3868                                x_msg_count,
3869                                x_msg_data,
3870                                '_PVT');
3871     WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
3872     x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
3873                               l_api_name,
3874                               G_PKG_NAME,
3875                               'OKC_API.G_RET_STS_UNEXP_ERROR',
3876                               x_msg_count,
3877                               x_msg_data,
3878                               '_PVT');
3879     WHEN OTHERS THEN
3880     x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
3881                               l_api_name,
3882                               G_PKG_NAME,
3883                               'OTHERS',
3884                               x_msg_count,
3885                               x_msg_data,
3886                               '_PVT');
3887   END Create_trx_header;
3888 --------------------------------------------------------------------------------
3889 --PROCEDURE to update transaction_header (OKL_TRX_ASSETS_V)
3890 --------------------------------------------------------------------------------
3891 PROCEDURE Update_trx_header(
3892             p_api_version    IN  NUMBER,
3893             p_init_msg_list  IN  VARCHAR2 DEFAULT OKL_API.G_FALSE,
3894             x_return_status  OUT NOCOPY VARCHAR2,
3895             x_msg_count      OUT NOCOPY NUMBER,
3896             x_msg_data       OUT NOCOPY VARCHAR2,
3897             p_trxv_rec       IN  trxv_rec_type,
3898             x_trxv_rec       OUT NOCOPY trxv_rec_type) IS
3899     l_api_name      CONSTANT VARCHAR2(30) := 'UPDATE_TRX_HEADER';
3900   BEGIN
3901     x_return_status        := OKL_API.G_RET_STS_SUCCESS;
3902     -- Call start_activity to create savepoint, check compatibility
3903     -- and initialize message list
3904     x_return_status := OKL_API.START_ACTIVITY (
3905                                l_api_name
3906                                ,p_init_msg_list
3907                                ,'_PVT'
3908                                ,x_return_status);
3909     -- Check if activity started successfully
3910     IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
3911        RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
3912     ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
3913        RAISE OKL_API.G_EXCEPTION_ERROR;
3914     END IF;
3915     -- evaluate conditions, build outcomes for true conditions and
3916     -- put them on outcome queue
3917     OKL_TRX_ASSETS_PUB.update_trx_ass_h_def(
3918                        p_api_version    => p_api_version,
3919                        p_init_msg_list  => p_init_msg_list,
3920                        x_return_status  => x_return_status,
3921                        x_msg_count      => x_msg_count,
3922                        x_msg_data       => x_msg_data,
3923                        p_thpv_rec       => p_trxv_rec,
3924                        x_thpv_rec       => x_trxv_rec);
3925 
3926     IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
3927        RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
3928     ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
3929        RAISE OKL_API.G_EXCEPTION_ERROR;
3930     END IF;
3931 
3932     OKL_API.END_ACTIVITY (x_msg_count,
3933                           x_msg_data );
3934   EXCEPTION
3935     WHEN OKC_API.G_EXCEPTION_ERROR THEN
3936     x_return_status := OKL_API.HANDLE_EXCEPTIONS(
3937                                l_api_name,
3938                                G_PKG_NAME,
3939                                'OKC_API.G_RET_STS_ERROR',
3940                                x_msg_count,
3941                                x_msg_data,
3942                                '_PVT');
3943     WHEN OKC_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
3944     x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
3945                               l_api_name,
3946                               G_PKG_NAME,
3947                               'OKC_API.G_RET_STS_UNEXP_ERROR',
3948                               x_msg_count,
3949                               x_msg_data,
3950                               '_PVT');
3951     WHEN OTHERS THEN
3952     x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
3953                               l_api_name,
3954                               G_PKG_NAME,
3955                               'OTHERS',
3956                               x_msg_count,
3957                               x_msg_data,
3958                               '_PVT');
3959 END Update_trx_header;
3960 --------------------------------------------------------------------------------
3961 --Procedure to create split transaction details (okl_txd_assets_b)
3962 --Bug# 2798006 : Modifications for Loan contract - instead of reading values from
3963 --p_ast_line_rec will read from p_txlv_rec
3964 --------------------------------------------------------------------------------
3965 PROCEDURE Create_trx_details(p_api_version    IN  NUMBER,
3966                              p_init_msg_list  IN  VARCHAR2 DEFAULT OKL_API.G_FALSE,
3967                              x_return_status  OUT NOCOPY VARCHAR2,
3968                              x_msg_count      OUT NOCOPY NUMBER,
3969                              x_msg_data       OUT NOCOPY VARCHAR2,
3970                              p_ast_line_rec   IN  ast_line_rec_type,
3971                              p_txlv_rec       IN  txlv_rec_type,
3972                              x_txdv_tbl       OUT NOCOPY txdv_tbl_type) IS
3973 
3974 l_return_status        VARCHAR2(1)  DEFAULT OKL_API.G_RET_STS_SUCCESS;
3975 l_api_name             CONSTANT VARCHAR2(30) := 'CREATE_TRX_DETAILS';
3976 l_api_version          CONSTANT NUMBER := 1.0;
3977 
3978 l_split_into_individuals_yn VARCHAR2(1);
3979 l_split_into_units          NUMBER;
3980 l_units_on_child_line       NUMBER;
3981 l_total_salvage_value       NUMBER;
3982 l_total_cost                NUMBER;
3983 l_total_quantity            NUMBER;
3984 l_txdv_rec                  txdv_rec_type;
3985 l_txdv_rec_out              txdv_rec_type;
3986 
3987 l_asset_exists         VARCHAR2(1) DEFAULT 'N';
3988 j                      NUMBER      DEFAULT 0; --counter for generating split asset numbers
3989 i                      NUMBER      DEFAULT 0;
3990 l_split_unit_count     NUMBER      DEFAULT 0;
3991 
3992 BEGIN
3993      x_return_status := OKL_API.G_RET_STS_SUCCESS;
3994     -- Call start_activity to create savepoint, check compatibility
3995     -- and initialize message list
3996     x_return_status := OKL_API.START_ACTIVITY (
3997                                l_api_name
3998                                ,p_init_msg_list
3999                                ,'_PVT'
4000                                ,x_return_status);
4001     -- Check if activity started successfully
4002     IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
4003        RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
4004     ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
4005        RAISE OKL_API.G_EXCEPTION_ERROR;
4006     END IF;
4007 
4008     l_split_into_individuals_yn := NVL(p_txlv_rec.SPLIT_INTO_SINGLES_FLAG,'N');
4009     --dbms_output.put_line('Split into individuals'||l_split_into_individuals_yn);
4010     --dbms_output.put_line('ast rec current units'||to_char(p_ast_line_rec.current_units));
4011     --dbms_output.put_line('txlv rec units retired'||to_char(p_txlv_rec.split_into_units));
4012     --prepared record for OKL_TXD_ASSETS_V
4013     IF  l_split_into_individuals_yn = 'Y' THEN
4014         --l_split_into_units := p_ast_line_rec.current_units;
4015         l_split_into_units := p_txlv_rec.current_units;
4016         l_units_on_child_line := 1;
4017     ELSIF NVL(l_split_into_individuals_yn,'N') = 'N' THEN
4018         l_split_into_units := 2;
4019         -- l_units_on_child_line := p_split_into_units;
4020         l_units_on_child_line := p_txlv_rec.SPLIT_INTO_UNITS;
4021     END IF;
4022         l_total_salvage_value := 0;
4023         l_total_cost := 0;
4024         l_total_quantity := 0;
4025         --dbms_output.put_line('Split into units'||to_char(l_split_into_units));
4026         --dbms_output.put_line('units on child line'||to_char(l_units_on_child_line));
4027         FOR i IN 1..(l_split_into_units - 1)
4028         LOOP
4029             --dbms_output.put_line('Into split loop');
4030             l_txdv_rec.tal_id := p_txlv_rec.id;
4031             l_txdv_rec.line_detail_number := i + 1;
4032             --l_txdv_rec.description := p_ast_line_rec.description;
4033             l_txdv_rec.description := p_txlv_rec.description;
4034             --dbms_output.put_line('Description from FA'|| p_ast_line_rec.description);
4035 
4036             --generate an asset number which does not exist in FA
4037             j := j+1;
4038             LOOP
4039                 --dbms_output.put_line('Into asset number gen loop');
4040                 --dbms_output.put_line('Asset Number'||p_ast_line_rec.asset_number||'.'||to_char(j));
4041                 SELECT 'OKL'||TO_CHAR(okl_fan_seq.NEXTVAL)
4042                 INTO l_txdv_rec.asset_number FROM dual;
4043                 --dbms_output.put_line('Asset Number'||l_txdv_rec.asset_number);
4044                 x_return_status := Asset_Number_Exists(l_txdv_rec.asset_number,l_asset_exists);
4045                 --dbms_output.put_line('after asset number validate'||x_return_status);
4046                 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
4047                     RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
4048                 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
4049                     RAISE OKL_API.G_EXCEPTION_ERROR;
4050                 END IF;
4051                 IF l_asset_exists = 'Y' THEN
4052                    j:= j+1;
4053                 ELSIF l_asset_exists = 'N' THEN
4054                     EXIT;
4055                 END IF;
4056             END LOOP;
4057             --dbms_output.put_line('Out of generation of asset number');
4058             l_txdv_rec.quantity := l_units_on_child_line;
4059             --l_txdv_rec.cost     := (p_ast_line_rec.cost/p_ast_line_rec.current_units)*l_units_on_child_line;
4060             l_txdv_rec.cost     := (p_txlv_rec.depreciation_cost/p_txlv_rec.current_units)*l_units_on_child_line;
4061             --l_txdv_rec.salvage_value := (p_ast_line_rec.salvage_value/p_ast_line_rec.current_units)*l_units_on_child_line;
4062             l_txdv_rec.salvage_value := (p_txlv_rec.salvage_value/p_txlv_rec.current_units)*l_units_on_child_line;
4063             l_total_cost := l_total_cost + l_txdv_rec.cost;
4064             l_total_salvage_value := l_total_salvage_value + l_txdv_rec.salvage_value;
4065             l_total_quantity := l_total_quantity + l_units_on_child_line;
4066 
4067             ---Bug#2723498 : 11.5.9 Currency conversion
4068             l_txdv_rec.currency_code            := p_txlv_rec.currency_code;
4069             --bug fix# 2770114
4070             --l_txdv_rec.currency_conversion_type := p_txlv_rec.currency_code;
4071             l_txdv_rec.currency_conversion_type := p_txlv_rec.currency_conversion_type;
4072             l_txdv_rec.currency_conversion_rate := p_txlv_rec.currency_conversion_rate;
4073             l_txdv_rec.currency_conversion_date := p_txlv_rec.currency_conversion_date;
4074             ---Bug#2723498 : 11.5.9 Currency conversion
4075 
4076             --dbms_output.put_line('Creating trx detail for child asset');
4077             --dbms_output.put_line('Before Creating trx detail for child asset'||l_txdv_rec.description);
4078             OKL_TXD_ASSETS_PUB.create_txd_asset_def(p_api_version   =>  p_api_version,
4079                                                     p_init_msg_list =>  p_init_msg_list,
4080                                                     x_return_status =>  x_return_status,
4081                                                     x_msg_count     =>  x_msg_count,
4082                                                     x_msg_data      =>  x_msg_data,
4083                                                     p_adpv_rec      =>  l_txdv_rec,
4084                                                     x_adpv_rec      =>  l_txdv_rec_out);
4085             --dbms_output.put_line('After Creating trx detail for child asset'||x_return_status);
4086             --dbms_output.put_line('After Creating trx detail for child asset'||l_txdv_rec_out.description);
4087             IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
4088                  RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
4089             ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
4090                  RAISE OKL_API.G_EXCEPTION_ERROR;
4091             END IF;
4092             l_split_unit_count := i;
4093             x_txdv_tbl(l_split_unit_count) := l_txdv_rec_out;
4094         END LOOP;
4095         --split record for the parent asset
4096         l_txdv_rec.tal_id := p_txlv_rec.id;
4097         --l_txdv_rec.target_kle_id := p_ast_line_rec.id1;
4098         l_txdv_rec.target_kle_id := p_txlv_rec.kle_id;
4099         l_txdv_rec.line_detail_number := 1;
4100         --l_txdv_rec.description := p_ast_line_rec.description;
4101         l_txdv_rec.description := p_txlv_rec.description;
4102         --l_txdv_rec.asset_number := p_ast_line_rec.asset_number;
4103         l_txdv_rec.asset_number := p_txlv_rec.asset_number;
4104         --l_txdv_rec.quantity := (p_ast_line_rec.current_units - l_total_quantity);
4105         l_txdv_rec.quantity := (p_txlv_rec.current_units - l_total_quantity);
4106 
4107         ------------------------------------------------------------------------
4108         --quantity less that 1 is possible in FA
4109         --If l_txdv_rec.quantity < 1 Then
4110             --l_txdv_rec.quantity := 1;
4111         --End If;
4112         --quantity less than 1 is possible in FA
4113         ------------------------------------------------------------------------
4114         --l_txdv_rec.cost     := (p_ast_line_rec.cost - l_total_cost);
4115         l_txdv_rec.cost     := (p_txlv_rec.depreciation_cost - l_total_cost);
4116         --l_txdv_rec.salvage_value := (p_ast_line_rec.salvage_value - l_total_salvage_value);
4117         l_txdv_rec.salvage_value := (p_txlv_rec.salvage_value - l_total_salvage_value);
4118 
4119         ---Bug#2723498 : 11.5.9 Currency conversion
4120         l_txdv_rec.currency_code := p_txlv_rec.currency_code;
4121         --Bug# 2770114
4122         --l_txdv_rec.currency_conversion_type := p_txlv_rec.currency_code;
4123         l_txdv_rec.currency_conversion_type := p_txlv_rec.currency_conversion_type;
4124         l_txdv_rec.currency_conversion_rate := p_txlv_rec.currency_conversion_rate;
4125         l_txdv_rec.currency_conversion_date := p_txlv_rec.currency_conversion_date;
4126         ---Bug#2723498 : 11.5.9 Currency conversion
4127 
4128         --dbms_output.put_line('before Creating trx detail for parent asset'||x_return_status);
4129         OKL_TXD_ASSETS_PUB.create_txd_asset_def(p_api_version   =>  p_api_version,
4130                                                 p_init_msg_list =>  p_init_msg_list,
4131                                                 x_return_status =>  x_return_status,
4132                                                 x_msg_count     =>  x_msg_count,
4133                                                 x_msg_data      =>  x_msg_data,
4134                                                 p_adpv_rec      =>  l_txdv_rec,
4135                                                 x_adpv_rec      =>  l_txdv_rec_out);
4136                 --dbms_output.put_line('after Creating trx detail for parent asset'||x_return_status);
4137         --dbms_output.put_line('After Creating trx detail for child asset'||x_return_status);
4138         --dbms_output.put_line('After Creating trx detail for child asset'||l_txdv_rec_out.description);
4139         IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
4140             RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
4141         ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
4142             RAISE OKL_API.G_EXCEPTION_ERROR;
4143         END IF;
4144         x_txdv_tbl(l_split_unit_count + 1) := l_txdv_rec_out;
4145        OKL_API.END_ACTIVITY (x_msg_count,
4146                             x_msg_data );
4147        EXCEPTION
4148        WHEN OKL_API.G_EXCEPTION_ERROR THEN
4149        x_return_status := OKL_API.HANDLE_EXCEPTIONS(
4150                                l_api_name,
4151                                G_PKG_NAME,
4152                                'OKL_API.G_RET_STS_ERROR',
4153                                x_msg_count,
4154                                x_msg_data,
4155                                '_PVT');
4156        WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
4157        x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
4158                               l_api_name,
4159                               G_PKG_NAME,
4160                               'OKL_API.G_RET_STS_UNEXP_ERROR',
4161                               x_msg_count,
4162                               x_msg_data,
4163                               '_PVT');
4164        WHEN OTHERS THEN
4165        x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
4166                               l_api_name,
4167                               G_PKG_NAME,
4168                               'OTHERS',
4169                               x_msg_count,
4170                               x_msg_data,
4171                               '_PVT');
4172 
4173 END Create_Trx_details;
4174 --------------------------------------------------------------------------------
4175 --Start of Comments
4176 --Bug #2723498 : 11.5.9 enhancement for splitting assets by serial number
4177 --API Name    : is_serialized
4178 --Description : Function to find if asset is serialized
4179 --History     : 03-Nov-2002   avsingh  Creation (for asset split by serial numbers)
4180 --End of comments
4181 --------------------------------------------------------------------------------
4182 FUNCTION is_serialized(p_cle_id IN NUMBER) RETURN VARCHAR2 IS
4183 --Bug Fix # 2887948
4184 --Cursor to check whether inventory item is serialized
4185 CURSOR chk_srl_csr (fin_ast_id IN NUMBER) IS
4186 SELECT mtl.serial_number_control_code,
4187        mtl.inventory_item_id,
4188        mtl.organization_id
4189 FROM   mtl_system_items  mtl,
4190        okc_k_items       model_cim,
4191        okc_k_lines_b     model_cle,
4192        okc_line_styles_b model_lse
4193 WHERE  model_cim.object1_id2       = TO_CHAR(mtl.organization_id)
4194 AND    model_cim.object1_id1       = mtl.inventory_item_id
4195 AND    model_cim.jtot_object1_code = 'OKX_SYSITEM'
4196 AND    model_cim.cle_id            = model_cle.id
4197 AND    model_cim.dnz_chr_id        = model_cle.dnz_chr_id
4198 AND    model_cle.cle_id            = fin_ast_id
4199 AND    model_cle.lse_id            = model_lse.id
4200 AND    model_lse.lty_code          = 'ITEM';
4201 
4202 chk_srl_rec  chk_srl_csr%ROWTYPE;
4203 
4204 l_serialized VARCHAR2(1) DEFAULT OKL_API.G_FALSE;
4205 
4206 BEGIN
4207     l_serialized := OKL_API.G_FALSE;
4208     --user needs to select serial numbers to split out
4209     OPEN chk_srl_csr (fin_ast_id => p_cle_id);
4210     FETCH chk_srl_csr INTO chk_srl_rec;
4211     IF chk_srl_csr%NOTFOUND THEN
4212         NULL;
4213     END IF;
4214     CLOSE chk_srl_csr;
4215 
4216     IF chk_srl_rec.serial_number_control_code IN (2,5,6) THEN
4217     -- asset inventory item is serial number controlled
4218         l_serialized := OKL_API.G_TRUE;
4219     END IF;
4220 
4221     RETURN (l_serialized);
4222 END is_serialized;
4223 --------------------------------------------------------------------------------
4224 --Start of Comments
4225 --Bug # 2726870 : 11.5.9 enhancement for splitting assets by serial number
4226 --API Name    : Is_Inv_Item_Serialized
4227 --Description : API will determine whether inv item is serialized or not
4228 --History     : 03-Nov-2002   avsingh  Creation (for asset split by serial numbers)
4229 --End of comments
4230 --------------------------------------------------------------------------------
4231 PROCEDURE Is_Inv_Item_Serialized(p_api_version      IN  NUMBER,
4232                                  p_init_msg_list    IN  VARCHAR2,
4233                                  x_return_status    OUT NOCOPY VARCHAR2,
4234                                  x_msg_count        OUT NOCOPY NUMBER,
4235                                  x_msg_data         OUT NOCOPY VARCHAR2,
4236                                  p_inv_item_id      IN  NUMBER,
4237                                  p_chr_id           IN  NUMBER,
4238                                  p_cle_id           IN  NUMBER,
4239                                  x_serialized       OUT NOCOPY VARCHAR2) IS
4240 l_api_version CONSTANT NUMBER := 1.0;
4241 l_api_name    VARCHAR2(30) := 'IS_INV_ITEM_SERIALIZED';
4242 
4243 l_serialized VARCHAR2(1) DEFAULT OKL_API.G_FALSE;
4244 
4245 --cursor to find serialized
4246 CURSOR srl_ctrl_csr (p_inv_item_id IN NUMBER,
4247                      p_chr_id IN NUMBER) IS
4248 SELECT mtl.serial_number_control_code
4249 FROM   mtl_system_items  mtl,
4250        okc_k_headers_b chrb
4251 WHERE  mtl.inventory_item_id = p_inv_item_id
4252 AND    mtl.organization_id   = chrb.inv_organization_id
4253 --BUG# 3489089
4254 AND    chrb.id               = p_chr_id;
4255 
4256 --cursor2  to find serialized
4257 CURSOR srl_ctrl_csr2 (p_inv_item_id IN NUMBER,
4258                       p_cle_id IN NUMBER) IS
4259 SELECT mtl.serial_number_control_code
4260 FROM   mtl_system_items     mtl,
4261        okc_k_headers_b      chrb,
4262        okc_k_lines_b        cleb
4263 WHERE  mtl.inventory_item_id = p_inv_item_id
4264 AND    mtl.organization_id   = chrb.inv_organization_id
4265 AND    chrb.id               = cleb.dnz_chr_id
4266 AND    cleb.id               = p_cle_id;
4267 
4268 l_srl_control_code   mtl_system_items.serial_number_control_code%TYPE;
4269 
4270 l_exception_halt     EXCEPTION;
4271 
4272 BEGIN
4273    x_serialized := OKL_API.G_FALSE;
4274    x_return_status := OKL_API.START_ACTIVITY (
4275                                l_api_name
4276                                ,p_init_msg_list
4277                                ,'_PVT'
4278                                ,x_return_status);
4279     -- Check if activity started successfully
4280     IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
4281        RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
4282     ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
4283        RAISE OKL_API.G_EXCEPTION_ERROR;
4284     END IF;
4285 
4286     l_serialized := OKL_API.G_FALSE;
4287     IF p_chr_id IS NOT NULL OR p_chr_id <> OKL_API.G_MISS_NUM THEN
4288         OPEN srl_ctrl_csr (p_inv_item_id => p_inv_item_id,
4289                            p_chr_id      => p_chr_id);
4290         FETCH srl_ctrl_csr INTO
4291           l_srl_control_code;
4292         CLOSE srl_ctrl_csr;
4293     ELSIF p_cle_id IS NOT NULL OR p_cle_id <> OKL_API.G_MISS_NUM THEN
4294         OPEN srl_ctrl_csr2 (p_inv_item_id => p_inv_item_id,
4295                             p_cle_id      => p_cle_id);
4296         FETCH srl_ctrl_csr2 INTO
4297           l_srl_control_code;
4298         CLOSE srl_ctrl_csr2;
4299     ELSE
4300          RAISE l_exception_halt;
4301     END IF;
4302 
4303     IF NVL(l_srl_control_code,0) IN (2,5,6) THEN
4304         l_serialized := OKL_API.G_TRUE;
4305     END IF;
4306    x_serialized := l_serialized;
4307    OKL_API.END_ACTIVITY (x_msg_count,
4308                           x_msg_data );
4309     EXCEPTION
4310     WHEN l_exception_halt THEN
4311         NULL;
4312     WHEN OKL_API.G_EXCEPTION_ERROR THEN
4313     x_return_status := OKL_API.HANDLE_EXCEPTIONS(
4314                                l_api_name,
4315                                G_PKG_NAME,
4316                                'OKL_API.G_RET_STS_ERROR',
4317                                x_msg_count,
4318                                x_msg_data,
4319                                '_PVT');
4320     WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
4321     x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
4322                               l_api_name,
4323                               G_PKG_NAME,
4324                               'OKL_API.G_RET_STS_UNEXP_ERROR',
4325                               x_msg_count,
4326                               x_msg_data,
4327                               '_PVT');
4328     WHEN OTHERS THEN
4329     x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
4330                               l_api_name,
4331                               G_PKG_NAME,
4332                               'OTHERS',
4333                               x_msg_count,
4334                               x_msg_data,
4335                               '_PVT');
4336 END Is_Inv_Item_Serialized;
4337 --------------------------------------------------------------------------------
4338 --Start of Comments
4339 --Bug # 2726870 : 11.5.9 enhancement for Splitting Asets by serial number
4340 --API Name    : Is_Asset_Serialized
4341 --Description : API will find if asset is serialized
4342 --------------------------------------------------------------------------------
4343 PROCEDURE Is_Asset_Serialized(p_api_version      IN  NUMBER,
4344                               p_init_msg_list    IN  VARCHAR2,
4345                               x_return_status    OUT NOCOPY VARCHAR2,
4346                               x_msg_count        OUT NOCOPY NUMBER,
4347                               x_msg_data         OUT NOCOPY VARCHAR2,
4348                               p_cle_id           IN  NUMBER,
4349                               x_serialized       OUT NOCOPY VARCHAR2) IS
4350 
4351 l_api_version CONSTANT NUMBER := 1.0;
4352 l_api_name    VARCHAR2(30) := 'IS_ASSET_SERIALIZED';
4353 
4354 l_serialized VARCHAR2(1) DEFAULT OKL_API.G_FALSE;
4355 BEGIN
4356    x_serialized     := OKL_API.G_FALSE;
4357    x_return_status := OKL_API.START_ACTIVITY (
4358                                l_api_name
4359                                ,p_init_msg_list
4360                                ,'_PVT'
4361                                ,x_return_status);
4362     -- Check if activity started successfully
4363     IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
4364        RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
4365     ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
4366        RAISE OKL_API.G_EXCEPTION_ERROR;
4367     END IF;
4368 
4369    l_serialized := OKL_API.G_FALSE;
4370    l_serialized := Is_serialized(p_cle_id => p_cle_id);
4371    x_serialized := l_serialized;
4372    OKL_API.END_ACTIVITY (x_msg_count,
4373                           x_msg_data );
4374     EXCEPTION
4375     WHEN OKL_API.G_EXCEPTION_ERROR THEN
4376     x_return_status := OKL_API.HANDLE_EXCEPTIONS(
4377                                l_api_name,
4378                                G_PKG_NAME,
4379                                'OKL_API.G_RET_STS_ERROR',
4380                                x_msg_count,
4381                                x_msg_data,
4382                                '_PVT');
4383     WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
4384     x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
4385                               l_api_name,
4386                               G_PKG_NAME,
4387                               'OKL_API.G_RET_STS_UNEXP_ERROR',
4388                               x_msg_count,
4389                               x_msg_data,
4390                               '_PVT');
4391     WHEN OTHERS THEN
4392     x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
4393                               l_api_name,
4394                               G_PKG_NAME,
4395                               'OTHERS',
4396                               x_msg_count,
4397                               x_msg_data,
4398                               '_PVT');
4399 END Is_Asset_Serialized;
4400 --------------------------------------------------------------------------------
4401 --Start of Comments
4402 --Bug # 2726870 : 11.5.9 enhancement for splitting assets by serial number
4403 --API Name    : Asset_Not_Srlz_Halt
4404 --              (Stop_if_Asset_Not_Serialized)
4405 --Description : API to be clled from UI - will raise Error if Asset not serialized
4406 --History     : 03-Nov-2002   avsingh  Creation (for asset split by serial numbers)
4407 --End of comments
4408 --------------------------------------------------------------------------------
4409 PROCEDURE Asset_Not_Srlz_Halt(p_api_version      IN  NUMBER,
4410                               p_init_msg_list    IN  VARCHAR2,
4411                               x_return_status    OUT NOCOPY VARCHAR2,
4412                               x_msg_count        OUT NOCOPY NUMBER,
4413                               x_msg_data         OUT NOCOPY VARCHAR2,
4414                               p_cle_id           IN  NUMBER,
4415                               x_serialized       OUT NOCOPY VARCHAR2) IS
4416 l_api_version CONSTANT NUMBER := 1.0;
4417 l_api_name    VARCHAR2(30) := 'ASSET_NOT_SRLZ_HALT';
4418 
4419 l_serialized VARCHAR2(1) DEFAULT OKL_API.G_FALSE;
4420 BEGIN
4421 -----
4422    x_return_status := OKL_API.START_ACTIVITY (
4423                                l_api_name
4424                                ,p_init_msg_list
4425                                ,'_PVT'
4426                                ,x_return_status);
4427     -- Check if activity started successfully
4428     IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
4429        RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
4430     ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
4431        RAISE OKL_API.G_EXCEPTION_ERROR;
4432     END IF;
4433 
4434    l_serialized := OKL_API.G_FALSE;
4435    x_serialized := l_serialized;
4436    Is_Asset_Serialized(p_api_version     => p_api_version,
4437                        p_init_msg_list   => p_init_msg_list,
4438                        x_return_status   => x_return_status,
4439                        x_msg_count       => x_msg_count,
4440                        x_msg_data        => x_msg_data,
4441                        p_cle_id          => p_cle_id,
4442                        x_serialized      => l_serialized);
4443 
4444    IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
4445       RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
4446    ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
4447       RAISE OKL_API.G_EXCEPTION_ERROR;
4448    END IF;
4449    x_serialized := l_serialized;
4450    IF l_serialized = OKL_API.G_FALSE THEN
4451        OKL_API.set_message(p_app_name     => G_APP_NAME,
4452                            p_msg_name     => G_ASSET_NOT_SERIALIZED);
4453         x_return_status := OKL_API.G_RET_STS_ERROR;
4454    END IF;
4455 
4456    OKL_API.END_ACTIVITY (x_msg_count,
4457                          x_msg_data );
4458     EXCEPTION
4459     WHEN OKL_API.G_EXCEPTION_ERROR THEN
4460     x_return_status := OKL_API.HANDLE_EXCEPTIONS(
4461                                l_api_name,
4462                                G_PKG_NAME,
4463                                'OKL_API.G_RET_STS_ERROR',
4464                                x_msg_count,
4465                                x_msg_data,
4466                                '_PVT');
4467     WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
4468     x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
4469                               l_api_name,
4470                               G_PKG_NAME,
4471                               'OKL_API.G_RET_STS_UNEXP_ERROR',
4472                               x_msg_count,
4473                               x_msg_data,
4474                               '_PVT');
4475     WHEN OTHERS THEN
4476     x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
4477                               l_api_name,
4478                               G_PKG_NAME,
4479                               'OTHERS',
4480                               x_msg_count,
4481                               x_msg_data,
4482                               '_PVT');
4483 END Asset_Not_Srlz_Halt;
4484 --------------------------------------------------------------------------------
4485 --Start of Comments
4486 --Bug # 2726870 : 11.5.9 enhancement for splitting assets by serial number
4487 --API Name    : Item_Not_Srlz_Halt
4488 --              (Stop_if_Asset_Not_Serialized)
4489 --Description : API to be clled from UI - will raise Error if Asset not serialized
4490 --History     : 03-Nov-2002   avsingh  Creation (for asset split by serial numbers)
4491 --End of comments
4492 --------------------------------------------------------------------------------
4493 PROCEDURE Item_Not_Srlz_Halt(p_api_version       IN  NUMBER,
4494                               p_init_msg_list    IN  VARCHAR2,
4495                               x_return_status    OUT NOCOPY VARCHAR2,
4496                               x_msg_count        OUT NOCOPY NUMBER,
4497                               x_msg_data         OUT NOCOPY VARCHAR2,
4498                               p_inv_item_id      IN  NUMBER,
4499                               p_chr_id           IN  NUMBER,
4500                               p_cle_id           IN  NUMBER,
4501                               x_serialized       OUT NOCOPY VARCHAR2) IS
4502 l_api_version CONSTANT NUMBER := 1.0;
4503 l_api_name    VARCHAR2(30) := 'ITEM_NOT_SRLZ_HALT';
4504 
4505 l_serialized VARCHAR2(1) DEFAULT OKL_API.G_FALSE;
4506 BEGIN
4507 -----
4508    x_return_status := OKL_API.START_ACTIVITY (
4509                                l_api_name
4510                                ,p_init_msg_list
4511                                ,'_PVT'
4512                                ,x_return_status);
4513     -- Check if activity started successfully
4514     IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
4515        RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
4516     ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
4517        RAISE OKL_API.G_EXCEPTION_ERROR;
4518     END IF;
4519 
4520    l_serialized := OKL_API.G_FALSE;
4521    x_serialized := l_serialized;
4522    Is_Inv_Item_Serialized(p_api_version     => p_api_version,
4523                           p_init_msg_list   => p_init_msg_list,
4524                           x_return_status   => x_return_status,
4525                           x_msg_count       => x_msg_count,
4526                           x_msg_data        => x_msg_data,
4527                           p_inv_item_id     => p_inv_item_id,
4528                           p_chr_id          => p_chr_id,
4529                           p_cle_id          => p_cle_id,
4530                           x_serialized      => l_serialized);
4531 
4532    IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
4533       RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
4534    ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
4535       RAISE OKL_API.G_EXCEPTION_ERROR;
4536    END IF;
4537    x_serialized := l_serialized;
4538    IF l_serialized = OKL_API.G_FALSE THEN
4539        OKL_API.set_message(p_app_name     => G_APP_NAME,
4540                            p_msg_name     => G_ASSET_NOT_SERIALIZED);
4541         x_return_status := OKL_API.G_RET_STS_ERROR;
4542    END IF;
4543 
4544    OKL_API.END_ACTIVITY (x_msg_count,
4545                          x_msg_data );
4546     EXCEPTION
4547     WHEN OKL_API.G_EXCEPTION_ERROR THEN
4548     x_return_status := OKL_API.HANDLE_EXCEPTIONS(
4549                                l_api_name,
4550                                G_PKG_NAME,
4551                                'OKL_API.G_RET_STS_ERROR',
4552                                x_msg_count,
4553                                x_msg_data,
4554                                '_PVT');
4555     WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
4556     x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
4557                               l_api_name,
4558                               G_PKG_NAME,
4559                               'OKL_API.G_RET_STS_UNEXP_ERROR',
4560                               x_msg_count,
4561                               x_msg_data,
4562                               '_PVT');
4563     WHEN OTHERS THEN
4564     x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
4565                               l_api_name,
4566                               G_PKG_NAME,
4567                               'OTHERS',
4568                               x_msg_count,
4569                               x_msg_data,
4570                               '_PVT');
4571 END Item_Not_Srlz_Halt;
4572 --------------------------------------------------------------------------------
4573 --Start of Comments
4574 --Bug # 2726870 : 11.5.9 enhancement for splitting assets by serial number
4575 --API Name    : Validate_Serial_Number
4576 --Description : LOCAL API will validate serial number
4577 --History     : 03-Nov-2002   avsingh  Creation (for asset split by serial numbers)
4578 --End of comments
4579 --------------------------------------------------------------------------------
4580 PROCEDURE Validate_Serial_Number(x_return_status OUT nocopy VARCHAR2,
4581                                  p_serial_number IN VARCHAR2) IS
4582      l_serial_number okl_txl_itm_insts.serial_number%TYPE;
4583 
4584      --Cursor to find existence
4585      CURSOR srl_num_csr (Srl_Number IN VARCHAR2) IS
4586      SELECT serial_number
4587      FROM   csi_item_instances
4588      WHERE  serial_number = Srl_Number;
4589 
4590      l_csi_srl_number csi_item_instances.serial_number%TYPE DEFAULT NULL;
4591 
4592 BEGIN
4593      x_return_status := OKL_API.G_RET_STS_SUCCESS;
4594      l_serial_number := p_serial_number;
4595      IF l_serial_number IS NULL OR l_serial_number = OKL_API.G_MISS_CHAR THEN
4596          -- store SQL error message on message stack
4597          OKL_API.set_message(p_app_name     => G_APP_NAME,
4598                              p_msg_name     => G_NO_MATCHING_RECORD,
4599                              p_token1       => G_COL_NAME_TOKEN,
4600                              p_token1_value => 'serial_number');
4601         x_return_status := OKL_API.G_RET_STS_ERROR;
4602      ELSE
4603         l_csi_srl_number := NULL;
4604         OPEN srl_num_csr (Srl_Number => l_serial_number);
4605         FETCH srl_num_csr INTO l_csi_srl_number;
4606         IF srl_num_csr%NOTFOUND THEN
4607            NULL;
4608         END IF;
4609         CLOSE srl_num_csr;
4610 
4611         IF l_csi_srl_number IS NOT NULL
4612            AND l_csi_srl_number = l_serial_number THEN
4613            OKL_API.Set_Message(p_app_name     => G_APP_NAME,
4614                                p_msg_name     => G_SRL_NUM_DUPLICATE,
4615                                p_token1       => G_COL_NAME_TOKEN,
4616                                p_token1_value => l_serial_number);
4617            x_return_status := OKL_API.G_RET_STS_ERROR;
4618         END IF;
4619     END IF;
4620     EXCEPTION
4621     WHEN OTHERS THEN
4622          x_return_status := OKL_API.G_RET_STS_UNEXP_ERROR;
4623 END Validate_Serial_Number;
4624 ---------------------------------------------------------------------------------------------------------------
4625   FUNCTION generate_instance_number_ib(x_instance_number_ib  OUT NOCOPY OKL_TXL_ITM_INSTS_V.INSTANCE_NUMBER_IB%TYPE)
4626   RETURN VARCHAR2 IS
4627     x_return_status            VARCHAR2(3) := OKL_API.G_RET_STS_SUCCESS;
4628     -- cursor to get sequence number for asset number
4629     CURSOR c_instance_no_ib IS
4630     SELECT TO_CHAR(OKL_IBN_SEQ.NEXTVAL)
4631     FROM dual;
4632   BEGIN
4633     OPEN  c_instance_no_ib;
4634     FETCH c_instance_no_ib INTO x_instance_number_ib;
4635     IF (c_instance_no_ib%NOTFOUND) THEN
4636       x_return_status := OKC_API.G_RET_STS_ERROR;
4637       OKL_API.SET_MESSAGE(p_app_name     => g_app_name,
4638                           p_msg_name     => g_unexpected_error,
4639                           p_token1       => g_sqlcode_token,
4640                           p_token1_value => SQLCODE,
4641                           p_token2       => g_sqlerrm_token,
4642                           p_token2_value => SQLERRM);
4643     END IF;
4644     CLOSE c_instance_no_ib;
4645     RETURN x_return_status;
4646   EXCEPTION
4647     WHEN OTHERS THEN
4648       IF c_instance_no_ib%ISOPEN THEN
4649         CLOSE c_instance_no_ib;
4650       END IF;
4651       x_return_status := OKC_API.G_RET_STS_UNEXP_ERROR;
4652       OKL_API.SET_MESSAGE(p_app_name     => g_app_name,
4653                           p_msg_name     => g_unexpected_error,
4654                           p_token1       => g_sqlcode_token,
4655                           p_token1_value => SQLCODE,
4656                           p_token2       => g_sqlerrm_token,
4657                           p_token2_value => SQLERRM);
4658     RETURN x_return_status;
4659   END generate_instance_number_ib;
4660 --------------------------------------------------------------------------------
4661 --Start of Comments
4662 --Bug # 2726870: 11.5.9 enhancement for splitting assets by serial number
4663 --API Name    : create_split_comp_srl_num
4664 --Description : API will create serial_number records in OKL_TXL_ITM_INSTS_V
4665 --              If financial asset inventory item is serialized for a split asset
4666 --              component
4667 --History     : 03-Nov-2002   avsingh  Creation (for asset split by serial numbers)
4668 --                                     Bug# 7047938
4669 --              17-May-2008   avsingh  After OA migration tal_id is not being
4670 --                                     passed from the UI as part of the input
4671 --                                     record. Added l_tal_csr to fetch it based
4672 --                                     on asd id
4673 --End of comments
4674 --------------------------------------------------------------------------------
4675 PROCEDURE create_split_comp_srl_num(p_api_version      IN  NUMBER,
4676                                     p_init_msg_list    IN  VARCHAR2,
4677                                     x_return_status    OUT NOCOPY VARCHAR2,
4678                                     x_msg_count        OUT NOCOPY NUMBER,
4679                                     x_msg_data         OUT NOCOPY VARCHAR2,
4680                                     p_itiv_tbl         IN  itiv_tbl_type,
4681                                     x_itiv_tbl         OUT NOCOPY itiv_tbl_type) IS
4682 
4683 l_api_name   VARCHAR2(30) := 'CREATE_SPLIT_COMP_SRL_NUM';
4684 l_api_version CONSTANT NUMBER := 1.0;
4685 
4686 --Cursor to get inventory organization ids
4687 CURSOR inv_org_csr (p_tal_id IN NUMBER, p_asd_id IN NUMBER) IS
4688 SELECT mp.master_organization_id,
4689        chrb.inv_organization_id,
4690        txdb.inventory_item_id
4691 FROM   mtl_parameters mp,
4692        okc_k_headers_b chrb,
4693        okc_k_lines_b  cleb,
4694        okl_txl_Assets_b txlb,
4695        okl_txd_assets_b txdb
4696 WHERE  mp.organization_id = chrb.inv_organization_id
4697 AND    chrb.id            = cleb.dnz_chr_id
4698 AND    cleb.id            = txlb.kle_id
4699 AND    txlb.id            = p_tal_id
4700 AND    txdb.id            = p_asd_id;
4701 
4702 l_mast_org_id mtl_parameters.master_organization_id%TYPE;
4703 l_inv_org_id  okc_k_headers_b.inv_organization_id%TYPE;
4704 l_inv_item_id okl_txd_assets_b.inventory_item_id%TYPE;
4705 
4706 --Cursor to get location of parent instance from IB
4707 CURSOR ib_loc_csr (p_tal_id IN NUMBER) IS
4708 SELECT txlb.kle_id  fa_cle_id,
4709        ib_cle.id ib_cle_id,
4710        txlb.tas_id,
4711        csi.location_id,  --hz_locations
4712        csi.install_location_id,
4713        --Bug# 3569441
4714        csi.install_location_type_code,  --hz_party_sites, hz_locations
4715        csi.instance_number
4716 FROM   csi_item_instances  csi,
4717        csi_instance_statuses csi_inst_sts,
4718        okc_k_items         ib_cim,
4719        okc_k_lines_b       ib_cle,
4720        okc_line_styles_b   ib_lse,
4721        okc_k_lines_b       inst_cle,
4722        okc_line_styles_b   inst_lse,
4723        okc_statuses_b      inst_sts,
4724        okc_k_lines_b       fa_cle,
4725        okc_line_styles_b   fa_lse,
4726        okl_txl_assets_b    txlb
4727 WHERE  csi.instance_id    = TO_NUMBER(ib_cim.object1_id1)
4728 AND    csi_inst_sts.instance_status_id = csi.instance_status_id
4729 AND    NVL(csi_inst_sts.terminated_flag,'N') = 'N'
4730 AND    ib_cim.cle_id      = ib_cle.id
4731 AND    ib_cim.dnz_chr_id  = ib_cle.dnz_chr_id
4732 AND    ib_cle.cle_id      = inst_cle.id
4733 AND    ib_cle.dnz_chr_id  = inst_cle.dnz_chr_id
4734 AND    ib_cle.lse_id      = ib_lse.id
4735 AND    ib_lse.lty_code    = 'INST_ITEM'
4736 AND    inst_cle.cle_id    = fa_cle.cle_id
4737 AND    inst_cle.dnz_chr_id = fa_cle.dnz_chr_id
4738 AND    inst_cle.lse_id    = inst_lse.id
4739 AND    inst_lse.lty_code  = 'FREE_FORM2'
4740 AND    inst_sts.code      = inst_cle.sts_code
4741 AND    INST_STS.STE_CODE NOT IN ('HOLD', 'EXPIRED', 'TERMINATED', 'CANCELLED')
4742 AND    fa_cle.id          = txlb.kle_id
4743 AND    fa_cle.lse_id      = fa_lse.id
4744 AND    fa_lse.lty_code    = 'FIXED_ASSET'
4745 AND    txlb.id            = p_tal_id;
4746 
4747 l_fa_cle_id           okc_k_lines_b.id%TYPE;
4748 l_ib_cle_id           okc_k_lines_b.id%TYPE;
4749 l_tas_id              okl_txl_assets_b.tas_id%TYPE;
4750 l_location_id         csi_item_instances.location_id%TYPE;
4751 l_install_location_id csi_item_instances.install_location_id%TYPE;
4752 --BUG# 3569441
4753 l_location_type_code  csi_item_instances.install_location_type_code%TYPE;
4754 l_instance_number_csi csi_item_instances.instance_number%TYPE;
4755 
4756 --Cursor to get install site use id
4757 CURSOR inst_site_csr (pty_site_id IN NUMBER) IS
4758 SELECT TO_CHAR(Party_site_use_id) party_site_use_id
4759 FROM   hz_party_site_uses
4760 WHERE  party_site_id = pty_site_id
4761 AND    site_use_type = 'INSTALL_AT';
4762 
4763 
4764   --BUG# 3569441
4765   CURSOR inst_loc_csr (loc_id IN NUMBER) IS
4766   SELECT TO_CHAR(psu.party_site_use_id) party_site_use_id
4767   FROM   hz_party_site_uses psu,
4768          hz_party_sites     ps
4769   WHERE  psu.party_site_id    = ps.party_site_id
4770   AND    psu.site_use_type    = 'INSTALL_AT'
4771   AND    ps.location_id       = loc_id;
4772 
4773   --Cursor to get address for error
4774   CURSOR l_address_csr (pty_site_id IN NUMBER ) IS
4775   SELECT SUBSTR(arp_addr_label_pkg.format_address(NULL,hl.address1,hl.address2,hl.address3, hl.address4,hl.city,hl.county,hl.state,hl.province,hl.postal_code,NULL,hl.country,NULL, NULL,NULL,NULL,NULL,NULL,NULL,'n','n',80,1,1),1,80)
4776   FROM hz_locations hl,
4777        hz_party_sites ps
4778   WHERE hl.location_id = ps.location_id
4779   AND   ps.party_site_id = pty_site_id;
4780 
4781   CURSOR l_address_csr2 (loc_id IN NUMBER) IS
4782   SELECT SUBSTR(arp_addr_label_pkg.format_address(NULL,hl.address1,hl.address2,hl.address3, hl.address4,hl.city,hl.county,hl.state,hl.province,hl.postal_code,NULL,hl.country,NULL, NULL,NULL,NULL,NULL,NULL,NULL,'n','n',80,1,1),1,80)
4783   FROM hz_locations hl
4784   WHERE hl.location_id = loc_id;
4785 
4786   l_address VARCHAR2(80);
4787   --END BUG# 3569441
4788 
4789 l_party_site_use_id   okl_txl_itm_insts.object_id1_new%TYPE;
4790 l_itiv_tbl            itiv_tbl_type;
4791 l_itiv_rec            itiv_rec_type;
4792 lx_itiv_rec           itiv_rec_type;
4793 i                     NUMBER;
4794 j                     NUMBER;
4795 l_instance_number     OKL_TXL_ITM_INSTS.instance_number_ib%TYPE;
4796 
4797 --Bug # 7047938
4798 cursor l_tal_csr (p_asd_id in number) is
4799 select tal_id
4800 from   okl_txd_assets_b
4801 where  id = p_asd_id;
4802 
4803 l_tal_id okl_txd_assets_b.tal_id%TYPE;
4804 --Bug 7047938 End
4805 BEGIN
4806 ----
4807    x_return_status := OKL_API.START_ACTIVITY (
4808                                l_api_name
4809                                ,p_init_msg_list
4810                                ,'_PVT'
4811                                ,x_return_status);
4812     -- Check if activity started successfully
4813     IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
4814        RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
4815     ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
4816        RAISE OKL_API.G_EXCEPTION_ERROR;
4817     END IF;
4818 
4819     l_itiv_tbl := p_itiv_tbl;
4820     IF l_itiv_tbl.COUNT > 0 THEN
4821         --Bug # 7047938
4822         If l_itiv_tbl(1).tal_id is NULL OR l_itiv_tbl(1).tal_id = OKL_API.G_MISS_NUM
4823         then
4824             open l_tal_csr (p_asd_id => l_itiv_tbl(1).asd_id);
4825             Fetch l_tal_csr into l_tal_id;
4826             close l_tal_csr;
4827             for j in l_itiv_tbl.FIRST..l_itiv_tbl.LAST
4828             LOOP
4829                 l_itiv_tbl(j).tal_id := l_tal_id;
4830             END LOOP;
4831         End If;
4832         --Bug # 7047938 End
4833       --get inv org id
4834       OPEN inv_org_csr (p_tal_id => l_itiv_tbl(1).tal_id,
4835                         p_asd_id => l_itiv_tbl(1).asd_id);
4836       FETCH inv_org_csr INTO
4837                         l_mast_org_id,
4838                         l_inv_org_id,
4839                         l_inv_item_id;
4840       IF inv_org_csr%NOTFOUND THEN
4841          NULL; --this is not feasible
4842       END IF;
4843       CLOSE inv_org_csr;
4844 
4845       --get locations
4846       OPEN ib_loc_csr (p_tal_id => l_itiv_tbl(1).tal_id);
4847       FETCH ib_loc_csr INTO
4848                       l_fa_cle_id,
4849                       l_ib_cle_id,
4850                       l_tas_id,
4851                       l_location_id,
4852                       l_install_location_id,
4853                       --Bug# 3569441
4854                       l_location_type_code,
4855                       l_instance_number_csi;
4856       IF ib_loc_csr%NOTFOUND THEN
4857           NULL; -- should not happen
4858       END IF;
4859       CLOSE ib_loc_csr;
4860 
4861       --BUG# 3569441
4862       IF NVL(l_location_type_code,OKL_API.G_MISS_CHAR)  NOT IN ('HZ_LOCATIONS','HZ_PARTY_SITES') THEN
4863           --RAISE ERROR
4864           OKL_API.Set_Message(p_app_name     => G_APP_NAME,
4865                               p_msg_name     => G_INVALID_INSTALL_LOC_TYPE,
4866                               p_token1       => G_LOCATION_TYPE_TOKEN,
4867                               p_token1_value => l_location_type_code,
4868                               p_token2       => G_LOC_TYPE1_TOKEN,
4869                               p_token2_value => 'HZ_PARTY_SITES',
4870                               p_token3       => G_LOC_TYPE2_TOKEN,
4871                               p_token3_value => 'HZ_LOCATIONS');
4872           x_return_status := OKL_API.G_RET_STS_ERROR;
4873           RAISE OKL_API.G_EXCEPTION_ERROR;
4874 
4875       ELSIF NVL(l_location_type_code,OKL_API.G_MISS_CHAR) = 'HZ_PARTY_SITES' THEN
4876 
4877           --get site use id
4878           OPEN inst_site_csr(pty_site_id => l_install_location_id);
4879           FETCH inst_site_csr INTO l_party_site_use_id;
4880           IF inst_site_csr%NOTFOUND THEN
4881              OPEN l_address_csr(pty_site_id => l_install_location_id);
4882              FETCH l_address_csr INTO l_address;
4883              CLOSE l_address_csr;
4884              --Raise Error : not defined as install_at
4885              OKL_API.Set_Message(p_app_name  => G_APP_NAME,
4886                               p_msg_name     => G_MISSING_USAGE,
4887                               p_token1       => G_USAGE_TYPE_TOKEN,
4888                               p_token1_value => 'INSTALL_AT',
4889                               p_token2       => G_ADDRESS_TOKEN,
4890                               p_token2_value => l_address,
4891                               p_token3       => G_INSTANCE_NUMBER_TOKEN,
4892                               p_token3_value => l_instance_number_csi);
4893               x_return_status := OKL_API.G_RET_STS_ERROR;
4894               RAISE OKL_API.G_EXCEPTION_ERROR;
4895           END IF;
4896           CLOSE inst_site_csr;
4897 
4898       ELSIF NVL(l_location_type_code,OKL_API.G_MISS_CHAR) = 'HZ_LOCATIONS' THEN
4899 
4900          --get site use id
4901           OPEN inst_loc_csr(loc_id => l_install_location_id);
4902           FETCH inst_loc_csr INTO l_party_site_use_id;
4903           IF inst_loc_csr%NOTFOUND THEN
4904              OPEN l_address_csr2(loc_id => l_install_location_id);
4905              FETCH l_address_csr2 INTO l_address;
4906              CLOSE l_address_csr2;
4907              --Raise Error : not defined as install_at
4908              OKL_API.Set_Message(p_app_name  => G_APP_NAME,
4909                               p_msg_name     => G_MISSING_USAGE,
4910                               p_token1       => G_USAGE_TYPE_TOKEN,
4911                               p_token1_value => 'INSTALL_AT',
4912                               p_token2       => G_ADDRESS_TOKEN,
4913                               p_token2_value => l_address,
4914                               p_token3       => G_INSTANCE_NUMBER_TOKEN,
4915                               p_token3_value => l_instance_number_csi);
4916               x_return_status := OKL_API.G_RET_STS_ERROR;
4917               RAISE OKL_API.G_EXCEPTION_ERROR;
4918           END IF;
4919           CLOSE inst_loc_csr;
4920       END IF;
4921       --End BUG# 3569441
4922 
4923       j := 1;
4924       FOR i IN 1..l_itiv_tbl.LAST LOOP
4925           IF l_itiv_tbl(i).id IS NULL OR l_itiv_tbl(i).id = OKL_API.G_MISS_NUM THEN
4926 
4927              l_itiv_rec := l_itiv_tbl(i);
4928              --l_itiv_rec.kle_id := l_ib_cle_id;
4929              l_itiv_rec.kle_id := l_fa_cle_id;
4930              l_itiv_rec.tal_type := 'ALI';
4931              l_itiv_rec.tas_id   := l_tas_id;
4932              l_itiv_rec.line_number := i;
4933              l_itiv_rec.object_id1_new := l_party_site_use_id;
4934              l_itiv_rec.object_id2_new := '#';
4935              l_itiv_rec.jtot_object_code_new := 'OKX_PARTSITE';
4936              l_itiv_rec.object_id1_old := l_party_site_use_id;
4937              l_itiv_rec.object_id2_old := '#';
4938              l_itiv_rec.jtot_object_code_old := 'OKX_PARTSITE';
4939              l_itiv_rec.inventory_org_id := l_inv_org_id;
4940              l_itiv_rec.mfg_serial_number_yn := 'N';
4941              l_itiv_rec.inventory_item_id    := l_inv_item_id;
4942              l_itiv_rec.inv_master_org_id := l_mast_org_id;
4943              l_itiv_rec.selected_for_split_flag := 'Y';
4944 
4945 
4946              Validate_Serial_Number(x_return_status => x_return_status,
4947                                     p_serial_number => l_itiv_rec.serial_number);
4948              IF x_return_status <> OKL_API.G_RET_STS_SUCCESS THEN
4949                  RAISE OKL_API.G_EXCEPTION_ERROR;
4950              END IF;
4951 
4952              x_return_status := generate_instance_number_ib(x_instance_number_ib => l_instance_number);
4953              IF x_return_status <> OKL_API.G_RET_STS_SUCCESS THEN
4954                  RAISE OKL_API.G_EXCEPTION_ERROR;
4955              END IF;
4956              l_itiv_rec.instance_number_ib := l_instance_number;
4957              --create record
4958              okl_txl_itm_insts_pub.create_txl_itm_insts
4959                                     (p_api_version   => p_api_version,
4960                                      p_init_msg_list => p_init_msg_list,
4961                                      x_return_status => x_return_status,
4962                                      x_msg_count     => x_msg_count,
4963                                      x_msg_data      => x_msg_data,
4964                                      p_iipv_rec      => l_itiv_rec,
4965                                      x_iipv_rec      => lx_itiv_rec);
4966              IF x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR THEN
4967                  RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
4968              ELSIF x_return_status = OKL_API.G_RET_STS_ERROR THEN
4969                  RAISE OKL_API.G_EXCEPTION_ERROR;
4970              END IF;
4971              j:= j+1;
4972              x_itiv_tbl(j) := lx_itiv_rec;
4973           END IF;
4974      END LOOP;
4975    END IF;
4976    OKL_API.END_ACTIVITY (x_msg_count,
4977                           x_msg_data );
4978     EXCEPTION
4979     WHEN OKL_API.G_EXCEPTION_ERROR THEN
4980     x_return_status := OKL_API.HANDLE_EXCEPTIONS(
4981                                l_api_name,
4982                                G_PKG_NAME,
4983                                'OKL_API.G_RET_STS_ERROR',
4984                                x_msg_count,
4985                                x_msg_data,
4986                                '_PVT');
4987     WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
4988     x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
4989                               l_api_name,
4990                               G_PKG_NAME,
4991                               'OKL_API.G_RET_STS_UNEXP_ERROR',
4992                               x_msg_count,
4993                               x_msg_data,
4994                               '_PVT');
4995     WHEN OTHERS THEN
4996     x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
4997                               l_api_name,
4998                               G_PKG_NAME,
4999                               'OTHERS',
5000                               x_msg_count,
5001                               x_msg_data,
5002                               '_PVT');
5003 END create_split_comp_srl_num;
5004 --Bug#3222804 - serial number control based on setup in leasing inv org
5005 --------------------------------------------------------------------------------
5006 --Start of Comments
5007 --API Name    : validate_srl_num_control
5008 --Description : Local API to validate whether serial # control code is in sync with
5009 --              existing serial numbers in Install Base.
5010 --History     : 20-Nov-2003   avsingh  Creation
5011 --End of comments
5012 --------------------------------------------------------------------------------
5013 PROCEDURE validate_srl_num_control(p_api_version               IN  NUMBER,
5014                                    p_init_msg_list             IN  VARCHAR2,
5015                                    x_return_status             OUT NOCOPY VARCHAR2,
5016                                    x_msg_count                 OUT NOCOPY NUMBER,
5017                                    x_msg_data                  OUT NOCOPY VARCHAR2,
5018                                    p_cle_id                    IN  NUMBER,
5019                                    p_split_into_individuals_yn IN VARCHAR2,
5020                                    p_split_into_units          IN NUMBER,
5021                                    p_tal_id                    IN NUMBER) IS
5022 
5023   l_api_name   VARCHAR2(30) := 'VALIDATE_SRL_NUM_CONTROL';
5024   l_api_version CONSTANT NUMBER := 1.0;
5025 
5026 l_serialized        VARCHAR2(1) DEFAULT OKL_API.G_FALSE;
5027 
5028 --cursor for asset_number
5029 CURSOR asset_num_csr (P_fin_ast_id IN NUMBER) IS
5030 SELECT name
5031 FROM   okc_k_lines_tl
5032 WHERE  id = p_fin_ast_id;
5033 
5034 l_asset_number OKC_K_LINES_TL.NAME%TYPE;
5035 
5036 --Bug# 3222804 : serial # control based on leasing inv org setup
5037 --cursor to find serialized item instances in installed base
5038 CURSOR l_srl_no_count_csr(fin_ast_id IN NUMBER) IS
5039 SELECT
5040        COUNT(1)
5041 FROM   csi_item_instances  csi,
5042        okc_k_items         ib_cim,
5043        okc_k_lines_b       ib_cle,
5044        okc_line_styles_b   ib_lse,
5045        okc_k_lines_b       inst_cle,
5046        okc_line_styles_b   inst_lse,
5047        okc_statuses_b      inst_sts
5048 WHERE  csi.instance_id    = TO_NUMBER(ib_cim.object1_id1)
5049 AND    ib_cim.cle_id      = ib_cle.id
5050 AND    ib_cim.dnz_chr_id  = ib_cle.dnz_chr_id
5051 AND    ib_cle.cle_id      = inst_cle.id
5052 AND    ib_cle.dnz_chr_id  = inst_cle.dnz_chr_id
5053 AND    ib_cle.lse_id      = ib_lse.id
5054 AND    ib_lse.lty_code    = 'INST_ITEM'
5055 AND    inst_cle.cle_id    = fin_ast_id
5056 AND    inst_cle.lse_id    = inst_lse.id
5057 AND    inst_lse.lty_code  = 'FREE_FORM2'
5058 AND    inst_sts.code      = inst_cle.sts_code
5059 --Bug# 5946411: ER
5060 --AND    INST_STS.STE_CODE NOT IN ('HOLD', 'EXPIRED', 'TERMINATED', 'CANCELLED');
5061 AND    INST_STS.STE_CODE NOT IN ('HOLD', 'CANCELLED');
5062 --Bug# 5946411: ER end
5063 
5064 l_srl_no_count NUMBER DEFAULT 0;
5065 
5066 --cursor to get txl quantity
5067 CURSOR l_txlqty_csr (p_tal_id IN NUMBER) IS
5068 SELECT txl.current_units
5069 FROM   okl_txl_assets_b txl
5070 WHERE  id   = p_tal_id;
5071 
5072 l_txlqty NUMBER DEFAULT NULL;
5073 
5074 BEGIN
5075 
5076     x_return_status := OKL_API.G_RET_STS_SUCCESS;
5077 
5078     -- Call start_activity to create savepoint, check compatibility
5079     -- and initialize message list
5080     x_return_status := OKL_API.START_ACTIVITY (
5081                                l_api_name
5082                                ,p_init_msg_list
5083                                ,'_PVT'
5084                                ,x_return_status);
5085     -- Check if activity started successfully
5086     IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
5087        RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
5088     ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
5089        RAISE OKL_API.G_EXCEPTION_ERROR;
5090     END IF;
5091 
5092     IF (NVL(p_split_into_individuals_yn,'N') = 'Y')
5093        OR
5094        (NVL(p_split_into_individuals_yn,'N') = 'N' AND NVL(p_split_into_units,OKL_API.G_MISS_NUM) <> OKL_API.G_MISS_NUM) THEN
5095        --check if serialization has been done properly
5096        l_txlqty := NULL;
5097        OPEN l_txlqty_csr(p_tal_id => p_tal_id);
5098        FETCH l_txlqty_csr INTO l_txlqty;
5099        IF l_txlqty_csr%NOTFOUND THEN
5100            NULL;
5101        END IF;
5102        CLOSE l_txlqty_csr;
5103        IF NVL(l_txlqty,OKL_API.G_MISS_NUM) <> OKL_API.G_MISS_NUM THEN
5104 
5105         l_serialized := Is_Serialized(p_cle_id => p_cle_id);
5106         IF (l_serialized = OKL_API.G_TRUE) THEN
5107             --fetch total instances to find if qantity matches
5108 
5109             l_srl_no_count := 0;
5110             OPEN l_srl_no_count_csr( fin_ast_id => p_cle_id);
5111             FETCH l_srl_no_count_csr INTO l_srl_no_count;
5112             IF l_srl_no_count_csr%NOTFOUND THEN
5113                 NULL;
5114             END IF;
5115             CLOSE l_srl_no_count_csr;
5116 
5117             IF l_srl_no_count = 1 AND l_txlqty  <> 1 THEN
5118 
5119                 l_asset_number := NULL;
5120                 OPEN asset_num_csr(p_fin_ast_id => p_cle_id);
5121                 FETCH asset_num_csr INTO l_asset_number;
5122                 IF asset_num_csr%NOTFOUND THEN
5123                     NULL;
5124                 END IF;
5125                 CLOSE asset_num_csr;
5126 
5127                 OKL_API.set_message(p_app_name     => G_APP_NAME,
5128                                     p_msg_name     => G_NOT_SERIALIZED_IN_IB,
5129                                     p_token1       => G_ASSET_NUMBER_TOKEN,
5130                                     p_token1_value => l_Asset_number
5131                                     );
5132                 --raise error
5133                 RAISE OKL_API.G_EXCEPTION_ERROR;
5134 
5135             ELSIF l_srl_no_count <> l_txlqty THEN
5136 
5137                 l_asset_number := NULL;
5138                 OPEN asset_num_csr(p_fin_ast_id => p_cle_id);
5139                 FETCH asset_num_csr INTO l_asset_number;
5140                 IF asset_num_csr%NOTFOUND THEN
5141                     NULL;
5142                 END IF;
5143                 CLOSE asset_num_csr;
5144 
5145 
5146                 OKL_API.set_message(p_app_name     => G_APP_NAME,
5147                                     p_msg_name     => G_SERIAL_NUMBER_MISMATCH,
5148                                     p_token1       => G_ASSET_NUMBER_TOKEN,
5149                                     p_token1_value => l_Asset_number
5150                                     );
5151                 --raise error
5152                 RAISE OKL_API.G_EXCEPTION_ERROR;
5153 
5154             ELSIF l_srl_no_count =  l_txlqty THEN
5155                 --data in installed base is correct
5156                 NULL;
5157             END IF;
5158 
5159         ELSIF l_serialized = OKL_API.G_FALSE THEN
5160             --fetch total instances to find if qantity matches
5161 
5162             l_srl_no_count := 0;
5163             OPEN l_srl_no_count_csr( fin_ast_id => p_cle_id);
5164             FETCH l_srl_no_count_csr INTO l_srl_no_count;
5165             IF l_srl_no_count_csr%NOTFOUND THEN
5166                 NULL;
5167             END IF;
5168             CLOSE l_srl_no_count_csr;
5169 
5170             IF l_srl_no_count <> 1 AND l_srl_no_count = l_txlqty THEN
5171                 --error asset is serilized in Installed Base
5172                 l_asset_number := NULL;
5173                 OPEN asset_num_csr(p_fin_ast_id => p_cle_id);
5174                 FETCH asset_num_csr INTO l_asset_number;
5175                 IF asset_num_csr%NOTFOUND THEN
5176                     NULL;
5177                 END IF;
5178                 CLOSE asset_num_csr;
5179 
5180                 OKL_API.set_message(p_app_name     => G_APP_NAME,
5181                                     p_msg_name     => G_SERIALIZED_IN_IB,
5182                                     p_token1       => G_ASSET_NUMBER_TOKEN,
5183                                     p_token1_value => l_Asset_number
5184                                     );
5185                 --raise error
5186                 RAISE OKL_API.G_EXCEPTION_ERROR;
5187 
5188             ELSIF l_srl_no_count <> 1 AND l_srl_no_count <> l_txlqty THEN
5189                 --error in installed base data
5190                 l_asset_number := NULL;
5191                 OPEN asset_num_csr(p_fin_ast_id => p_cle_id);
5192                 FETCH asset_num_csr INTO l_asset_number;
5193                 IF asset_num_csr%NOTFOUND THEN
5194                     NULL;
5195                 END IF;
5196 
5197                OKL_API.set_message(p_app_name     => G_APP_NAME,
5198                                     p_msg_name     => G_SERIAL_NUMBER_MISMATCH,
5199                                     p_token1       => G_ASSET_NUMBER_TOKEN,
5200                                     p_token1_value => l_Asset_number
5201                                     );
5202                 --raise error
5203                 RAISE OKL_API.G_EXCEPTION_ERROR;
5204 
5205             ELSIF l_srl_no_count = 1 THEN
5206                 --data in installed base is correct
5207                 NULL;
5208             END IF;
5209         END IF;
5210     END IF;
5211 
5212     ELSIF NVL(p_split_into_individuals_yn,'N') = 'X' THEN
5213        NULL; -- user will have to create new serail numbers
5214     END IF;
5215      OKL_API.END_ACTIVITY (x_msg_count,
5216                           x_msg_data );
5217 EXCEPTION
5218     WHEN OKL_API.G_EXCEPTION_ERROR THEN
5219     x_return_status := OKL_API.HANDLE_EXCEPTIONS(
5220                                l_api_name,
5221                                G_PKG_NAME,
5222                                'OKL_API.G_RET_STS_ERROR',
5223                                x_msg_count,
5224                                x_msg_data,
5225                                '_PVT');
5226     WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
5227     x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
5228                               l_api_name,
5229                               G_PKG_NAME,
5230                               'OKL_API.G_RET_STS_UNEXP_ERROR',
5231                               x_msg_count,
5232                               x_msg_data,
5233                               '_PVT');
5234     WHEN OTHERS THEN
5235     x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
5236                               l_api_name,
5237                               G_PKG_NAME,
5238                               'OTHERS',
5239                               x_msg_count,
5240                               x_msg_data,
5241                               '_PVT');
5242 END  validate_srl_num_control;
5243 --End Bug# 3222804 : serial number control setup in Leasing Inv Org
5244 --------------------------------------------------------------------------------
5245 --Start of Comments
5246 --Bug #2723498 : 11.5.9 enhancement for splitting assets by serial number
5247 --API Name    : create_srl_num_trx
5248 --Description : Local API will create serial_number records in OKL_TXL_ITM_INSTS_V
5249 --              If financial asset inventory item is serialized
5250 --History     : 03-Nov-2002   avsingh  Creation (for asset split by serial numbers)
5251 --End of comments
5252 --------------------------------------------------------------------------------
5253 PROCEDURE create_srl_num_trx(p_api_version               IN  NUMBER,
5254                              p_init_msg_list             IN  VARCHAR2,
5255                              x_return_status             OUT NOCOPY VARCHAR2,
5256                              x_msg_count                 OUT NOCOPY NUMBER,
5257                              x_msg_data                  OUT NOCOPY VARCHAR2,
5258                              p_cle_id                    IN  NUMBER,
5259                              p_split_into_individuals_yn IN VARCHAR2,
5260                              p_split_into_units          IN NUMBER,
5261                              p_ib_tbl                    IN ib_tbl_type,
5262                              p_tas_id                    IN NUMBER,
5263                              p_tal_id                    IN NUMBER,
5264                              p_asd_id                    IN NUMBER) IS
5265 
5266 l_api_name   VARCHAR2(30) := 'CREATE_SRL_NUM_TRX';
5267 l_api_version CONSTANT NUMBER := 1.0;
5268 
5269 
5270 --Cursor to get all the serial numbers
5271 CURSOR srl_num_csr(fin_ast_id IN NUMBER) IS
5272 SELECT ib_cle.id  ib_cle_id,
5273        csi.instance_id,
5274        csi.serial_number,
5275        csi.instance_number,
5276        csi.inv_organization_id,
5277        csi.inventory_item_id,
5278        csi.inv_master_organization_id,
5279        csi.unit_of_measure,
5280        csi.quantity,
5281        csi.instance_status_id,
5282        csi.location_id,  --hz_locations
5283        csi.install_location_id,
5284        --BUG# 3569441
5285        csi.install_location_type_code   --hz_party_sites OR hz_loactions
5286 FROM   csi_item_instances  csi,
5287        okc_k_items         ib_cim,
5288        okc_k_lines_b       ib_cle,
5289        okc_line_styles_b   ib_lse,
5290        okc_k_lines_b       inst_cle,
5291        okc_line_styles_b   inst_lse,
5292        okc_statuses_b      inst_sts
5293 WHERE  csi.instance_id    = TO_NUMBER(ib_cim.object1_id1)
5294 AND    ib_cim.cle_id      = ib_cle.id
5295 AND    ib_cim.dnz_chr_id  = ib_cle.dnz_chr_id
5296 AND    ib_cle.cle_id      = inst_cle.id
5297 AND    ib_cle.dnz_chr_id  = inst_cle.dnz_chr_id
5298 AND    ib_cle.lse_id      = ib_lse.id
5299 AND    ib_lse.lty_code    = 'INST_ITEM'
5300 AND    inst_cle.cle_id    = fin_ast_id
5301 AND    inst_cle.lse_id    = inst_lse.id
5302 AND    inst_lse.lty_code  = 'FREE_FORM2'
5303 AND    inst_sts.code      = inst_cle.sts_code
5304 --Bug# 5946411: ER
5305 --AND    INST_STS.STE_CODE NOT IN ('HOLD', 'EXPIRED', 'TERMINATED', 'CANCELLED');
5306 AND    INST_STS.STE_CODE NOT IN ('HOLD', 'CANCELLED');
5307 --Bug# 5946411: ER--end
5308 
5309 
5310 srl_num_rec  srl_num_csr%ROWTYPE;
5311 
5312 -- Cursor to get all the serial numbers if ib line id table is passed as input
5313 -- This will be done by asset managment during asset level termination
5314 CURSOR srl_num_csr2(fin_ast_id IN NUMBER, p_ib_cle_id IN VARCHAR2) IS
5315 SELECT ib_cle.id  ib_cle_id,
5316        csi.instance_id,
5317        csi.serial_number,
5318        csi.instance_number,
5319        csi.inv_organization_id,
5320        csi.inventory_item_id,
5321        csi.inv_master_organization_id,
5322        csi.unit_of_measure,
5323        csi.quantity,
5324        csi.instance_status_id,
5325        csi.location_id,  --hz_locations
5326        csi.install_location_id,
5327        --BUG# 3569441
5328        csi.install_location_type_code   --hz_party_sites OR hz_locations
5329 FROM   csi_item_instances  csi,
5330        okc_k_items         ib_cim,
5331        okc_k_lines_b       ib_cle,
5332        okc_line_styles_b   ib_lse,
5333        okc_k_lines_b       inst_cle,
5334        okc_line_styles_b   inst_lse,
5335        okc_statuses_b      inst_sts
5336 WHERE  csi.instance_id    = TO_NUMBER(ib_cim.object1_id1)
5337 AND    ib_cim.cle_id      = ib_cle.id
5338 AND    ib_cim.dnz_chr_id  = ib_cle.dnz_chr_id
5339 AND    ib_cle.cle_id      = inst_cle.id
5340 AND    ib_cle.dnz_chr_id  = inst_cle.dnz_chr_id
5341 AND    ib_cle.lse_id      = ib_lse.id
5342 AND    ib_cle.id          = p_ib_cle_id
5343 AND    ib_lse.lty_code    = 'INST_ITEM'
5344 AND    inst_cle.cle_id    = fin_ast_id
5345 AND    inst_cle.lse_id    = inst_lse.id
5346 AND    inst_lse.lty_code  = 'FREE_FORM2'
5347 AND    inst_sts.code      = inst_cle.sts_code
5348 --Bug# 5946411: ER
5349 --AND    INST_STS.STE_CODE NOT IN ('HOLD', 'EXPIRED', 'TERMINATED', 'CANCELLED');
5350 AND    INST_STS.STE_CODE NOT IN ('HOLD', 'CANCELLED');
5351 --Bug# 5946411: ER -- End
5352 
5353 srl_num_rec2  srl_num_csr2%ROWTYPE;
5354 
5355 l_iipv_tbl   okl_txl_itm_insts_pub.iipv_tbl_type;
5356 i            NUMBER DEFAULT 0;
5357 lx_iipv_tbl  okl_txl_itm_insts_pub.iipv_tbl_type;
5358 
5359 --Cursor to get install site use id
5360 CURSOR inst_site_csr (pty_site_id IN NUMBER) IS
5361 SELECT TO_CHAR(Party_site_use_id) party_site_use_id
5362 FROM   hz_party_site_uses
5363 WHERE  party_site_id = pty_site_id
5364 AND    site_use_type = 'INSTALL_AT';
5365 
5366   --BUG# 3569441
5367   CURSOR inst_loc_csr (loc_id IN NUMBER) IS
5368   SELECT TO_CHAR(psu.party_site_use_id) party_site_use_id
5369   FROM  hz_party_site_uses psu,
5370         hz_party_sites     ps
5371   WHERE psu.party_site_id   = ps.party_site_id
5372   AND   psu.site_use_type   = 'INSTALL_AT'
5373   AND   ps.location_id      = loc_id;
5374 
5375   CURSOR l_address_csr (pty_site_id IN NUMBER ) IS
5376   SELECT SUBSTR(arp_addr_label_pkg.format_address(NULL,hl.address1,hl.address2,hl.address3, hl.address4,hl.city,hl.county,hl.state,hl.province,hl.postal_code,NULL,hl.country,NULL, NULL,NULL,NULL,NULL,NULL,NULL,'n','n',80,1,1),1,80)
5377   FROM hz_locations hl,
5378        hz_party_sites ps
5379   WHERE hl.location_id = ps.location_id
5380   AND   ps.party_site_id = pty_site_id;
5381 
5382   CURSOR l_address_csr2 (loc_id IN NUMBER) IS
5383   SELECT SUBSTR(arp_addr_label_pkg.format_address(NULL,hl.address1,hl.address2,hl.address3, hl.address4,hl.city,hl.county,hl.state,hl.province,hl.postal_code,NULL,hl.country,NULL, NULL,NULL,NULL,NULL,NULL,NULL,'n','n',80,1,1),1,80)
5384   FROM hz_locations hl
5385   WHERE hl.location_id = loc_id;
5386 
5387   l_address VARCHAR2(80);
5388   --END BUG# 3569441
5389 
5390 l_pty_site_use_id   okl_txl_itm_insts.object_id1_new%TYPE;
5391 l_error_condition   EXCEPTION;
5392 
5393 l_ib_tbl            ib_tbl_type;
5394 l_serialized        VARCHAR2(1) DEFAULT OKL_API.G_FALSE;
5395 
5396 --cursor for asset_number
5397 CURSOR asset_num_csr (P_fin_ast_id IN NUMBER) IS
5398 SELECT name
5399 FROM   okc_k_lines_tl
5400 WHERE  id = p_fin_ast_id;
5401 
5402 l_asset_number OKC_K_LINES_TL.NAME%TYPE;
5403 
5404 BEGIN
5405     x_return_status := OKL_API.G_RET_STS_SUCCESS;
5406 
5407     -- Call start_activity to create savepoint, check compatibility
5408     -- and initialize message list
5409     x_return_status := OKL_API.START_ACTIVITY (
5410                                l_api_name
5411                                ,p_init_msg_list
5412                                ,'_PVT'
5413                                ,x_return_status);
5414     -- Check if activity started successfully
5415     IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
5416        RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
5417     ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
5418        RAISE OKL_API.G_EXCEPTION_ERROR;
5419     END IF;
5420 
5421     --Bug# 3222804 : Serial number control to be based on leasing inv org setup
5422     validate_srl_num_control(
5423                    p_api_version               => p_api_version,
5424                    p_init_msg_list             => p_init_msg_list,
5425                    x_return_status             => x_return_status,
5426                    x_msg_count                 => x_msg_count,
5427                    x_msg_data                  => x_msg_data,
5428                    p_cle_id                    => p_cle_id,
5429                    p_split_into_individuals_yn => p_split_into_individuals_yn,
5430                    p_split_into_units          => p_split_into_units,
5431                    p_tal_id                    => p_tal_id);
5432 
5433     IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
5434        RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
5435     ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
5436        RAISE OKL_API.G_EXCEPTION_ERROR;
5437     END IF;
5438     --Bug# 3222804 : Serial number control to be based on leasing inv org setup
5439 
5440     l_ib_tbl       := p_ib_tbl;
5441     IF NVL(p_split_into_individuals_yn,'N') = 'Y' THEN
5442        NULL; --no need to create srl num transactions
5443     ELSIF NVL(p_split_into_individuals_yn,'N') = 'X' THEN
5444        NULL; -- user will have to create new serail numbers
5445     ELSIF NVL(p_split_into_individuals_yn,'N') = 'N' AND NVL(p_split_into_units,0) > 0  THEN
5446        --user needs to select serial numbers to split
5447        l_serialized := is_serialized(p_cle_id => p_cle_id);
5448        IF (l_serialized = OKL_API.G_TRUE) THEN
5449           -- asset inventory item is serial number controlled
5450           IF l_ib_tbl.COUNT <> 0 THEN
5451              FOR i IN 1..l_ib_tbl.LAST
5452              LOOP
5453                  OPEN srl_num_csr2(fin_Ast_id => p_cle_id, p_ib_cle_id => l_ib_tbl(i).id);
5454                  FETCH srl_num_csr2 INTO srl_num_rec2;
5455                  IF srl_num_csr2%NOTFOUND THEN
5456                     --Serial number does not belong to asset. Please select correct serial number to split.
5457                     l_asset_number := NULL;
5458                     OPEN asset_num_csr(p_fin_ast_id => p_cle_id);
5459                     FETCH asset_num_csr INTO l_asset_number;
5460                     IF asset_num_csr%NOTFOUND THEN
5461                         NULL;
5462                     END IF;
5463                     CLOSE asset_num_csr;
5464 
5465                     OKL_API.set_message(p_app_name     => G_APP_NAME,
5466                                         p_msg_name     => G_IB_INSTANCE_MISMATCH,
5467                                         p_token1       => G_ASSET_NUMBER_TOKEN,
5468                                         p_token1_value => l_Asset_number,
5469                                         p_token2       => G_IB_LINE_TOKEN,
5470                                         p_token2_value => TO_CHAR(l_ib_tbl(i).id));
5471                     --raise error
5472                     RAISE OKL_API.G_EXCEPTION_ERROR;
5473                  END IF;
5474                  l_iipv_tbl(i).tas_id             := p_tas_id;
5475                  l_iipv_tbl(i).tal_id             := p_tal_id;
5476                  l_iipv_tbl(i).kle_id             := srl_num_rec2.ib_cle_id;
5477                  l_iipv_tbl(i).tal_type           := 'ALI'; -- hardcoded for split asset
5478                  l_iipv_tbl(i).line_number        := i;
5479                  l_iipv_tbl(i).instance_number_ib := srl_num_rec2.instance_number;
5480 
5481                  --fetch party site use id
5482                  l_pty_site_use_id := NULL;
5483                  --BUG# 3569441 :
5484                  IF NVL(srl_num_rec2.install_location_type_code,OKL_API.G_MISS_CHAR) NOT IN ('HZ_LOCATIONS','HZ_PARTY_SITES') THEN
5485 
5486                      --Raise Error
5487                      OKL_API.Set_Message(p_app_name     => G_APP_NAME,
5488                                   p_msg_name     => G_INVALID_INSTALL_LOC_TYPE,
5489                                   p_token1       => G_LOCATION_TYPE_TOKEN,
5490                                   p_token1_value => srl_num_rec2.install_location_type_code,
5491                                   p_token2       => G_LOC_TYPE1_TOKEN,
5492                                   p_token2_value => 'HZ_PARTY_SITES',
5493                                   p_token3       => G_LOC_TYPE2_TOKEN,
5494                                   p_token3_value => 'HZ_LOCATIONS');
5495                       x_return_status := OKL_API.G_RET_STS_ERROR;
5496                       RAISE OKL_API.G_EXCEPTION_ERROR;
5497 
5498                  ELSIF NVL(srl_num_rec2.install_location_type_code,OKL_API.G_MISS_CHAR)  = 'HZ_PARTY_SITES' THEN
5499 
5500                      OPEN inst_site_csr(srl_num_rec2.install_location_id);
5501                      FETCH inst_site_csr INTO l_pty_site_use_id;
5502                      IF inst_site_csr%NOTFOUND THEN
5503                          OPEN l_address_csr(pty_site_id => srl_num_rec2.install_location_id);
5504                          FETCH l_address_csr INTO l_address;
5505                          CLOSE l_address_csr;
5506                          --Raise Error : not defined as install_at
5507                          OKL_API.Set_Message(p_app_name  => G_APP_NAME,
5508                               p_msg_name     => G_MISSING_USAGE,
5509                               p_token1       => G_USAGE_TYPE_TOKEN,
5510                               p_token1_value => 'INSTALL_AT',
5511                               p_token2       => G_ADDRESS_TOKEN,
5512                               p_token2_value => l_address,
5513                               p_token3       => G_INSTANCE_NUMBER_TOKEN,
5514                               p_token3_value => srl_num_rec2.instance_number);
5515                           x_return_status := OKL_API.G_RET_STS_ERROR;
5516                           RAISE OKL_API.G_EXCEPTION_ERROR;
5517                          --l_pty_site_use_id := '-1';
5518                      END IF;
5519                      CLOSE inst_site_csr;
5520 
5521                  ELSIF NVL(srl_num_rec2.install_location_type_code, OKL_API.G_MISS_CHAR) = 'HZ_LOCATIONS' THEN
5522 
5523                      OPEN inst_loc_csr(srl_num_rec2.install_location_id);
5524                      FETCH inst_loc_csr INTO l_pty_site_use_id;
5525                      IF inst_loc_csr%NOTFOUND THEN
5526                          --l_pty_site_use_id := '-1';
5527                          OPEN l_address_csr2(loc_id => srl_num_rec2.install_location_id);
5528                          FETCH l_address_csr2 INTO l_address;
5529                          CLOSE l_address_csr2;
5530                          --Raise Error : not defined as install_at
5531                          OKL_API.Set_Message(p_app_name  => G_APP_NAME,
5532                                   p_msg_name     => G_MISSING_USAGE,
5533                                   p_token1       => G_USAGE_TYPE_TOKEN,
5534                                   p_token1_value => 'INSTALL_AT',
5535                                   p_token2       => G_ADDRESS_TOKEN,
5536                                   p_token2_value => l_address,
5537                                   p_token3       => G_INSTANCE_NUMBER_TOKEN,
5538                                   p_token3_value => srl_num_rec2.instance_number);
5539                          x_return_status := OKL_API.G_RET_STS_ERROR;
5540                          RAISE OKL_API.G_EXCEPTION_ERROR;
5541                      END IF;
5542                      CLOSE inst_loc_csr;
5543 
5544                  END IF;
5545                  --End Bug # 3569441
5546 
5547                  l_iipv_tbl(i).object_id1_new         := l_pty_site_use_id;
5548                  l_iipv_tbl(i).object_id2_new         := '#';
5549                  l_iipv_tbl(i).jtot_object_code_new    := 'OKX_PARTSITE';
5550                  l_iipv_tbl(i).object_id1_old         := l_pty_site_use_id;
5551                  l_iipv_tbl(i).object_id2_old         := '#';
5552                  l_iipv_tbl(i).jtot_object_code_old    := 'OKX_PARTSITE';
5553                  l_iipv_tbl(i).inventory_org_id        := srl_num_rec2.inv_organization_id;
5554                  l_iipv_tbl(i).serial_number           := srl_num_rec2.serial_number;
5555                  l_iipv_tbl(i).mfg_serial_number_yn    := 'N';
5556                  l_iipv_tbl(i).inventory_item_id       := srl_num_rec2.inventory_item_id;
5557                  l_iipv_tbl(i).INV_MASTER_ORG_ID       := srl_num_rec2.inv_master_organization_id;
5558                  l_iipv_tbl(i).dnz_cle_id              := p_cle_id;
5559                  l_iipv_tbl(i).instance_id             := srl_num_rec2.instance_id;
5560                  l_iipv_tbl(i).selected_for_split_flag := 'Y';
5561                  l_iipv_tbl(i).asd_id                  := p_asd_id;
5562                 --Bug fix # 2753141
5563                 CLOSE srl_num_csr2;
5564               END LOOP;
5565           ELSE --srl_tbl count is zero
5566               --get all the serial numbers
5567               i := 0;
5568               OPEN srl_num_csr (fin_Ast_id => p_cle_id);
5569               LOOP
5570                   FETCH srl_num_csr INTO srl_num_rec;
5571                   EXIT WHEN  srl_num_csr%NOTFOUND;
5572                   i := i + 1;
5573                   l_iipv_tbl(i).tas_id             := p_tas_id;
5574                   l_iipv_tbl(i).tal_id             := p_tal_id;
5575                   l_iipv_tbl(i).kle_id             := srl_num_rec.ib_cle_id;
5576                   l_iipv_tbl(i).tal_type           := 'ALI'; -- hardcoded for split asset
5577                   l_iipv_tbl(i).line_number        := i;
5578                   l_iipv_tbl(i).instance_number_ib := srl_num_rec.instance_number;
5579 
5580                   --fetch party site use id
5581                   l_pty_site_use_id := NULL;
5582                   --BUG# 3569441
5583                   IF NVL(srl_num_rec.install_location_type_code,OKL_API.G_MISS_CHAR) NOT IN ('HZ_LOCATIONS','HZ_PARTY_SITES') THEN
5584 
5585                       --Raise Error
5586                       OKL_API.Set_Message(p_app_name     => G_APP_NAME,
5587                                   p_msg_name     => G_INVALID_INSTALL_LOC_TYPE,
5588                                   p_token1       => G_LOCATION_TYPE_TOKEN,
5589                                   p_token1_value => srl_num_rec.install_location_type_code,
5590                                   p_token2       => G_LOC_TYPE1_TOKEN,
5591                                   p_token2_value => 'HZ_PARTY_SITES',
5592                                   p_token3       => G_LOC_TYPE2_TOKEN,
5593                                   p_token3_value => 'HZ_LOCATIONS');
5594                       x_return_status := OKL_API.G_RET_STS_ERROR;
5595                       RAISE OKL_API.G_EXCEPTION_ERROR;
5596 
5597                   ELSIF NVL(srl_num_rec.install_location_type_code,OKL_API.G_MISS_CHAR) = 'HZ_PARTY_SITES' THEN
5598 
5599                       OPEN inst_site_csr(srl_num_rec.install_location_id);
5600                       FETCH inst_site_csr INTO l_pty_site_use_id;
5601                       IF inst_site_csr%NOTFOUND THEN
5602                           OPEN l_address_csr(pty_site_id => srl_num_rec2.install_location_id);
5603                           FETCH l_address_csr INTO l_address;
5604                           CLOSE l_address_csr;
5605                           --Raise Error : not defined as install_at
5606                           OKL_API.Set_Message(p_app_name  => G_APP_NAME,
5607                               p_msg_name     => G_MISSING_USAGE,
5608                               p_token1       => G_USAGE_TYPE_TOKEN,
5609                               p_token1_value => 'INSTALL_AT',
5610                               p_token2       => G_ADDRESS_TOKEN,
5611                               p_token2_value => l_address,
5612                               p_token3       => G_INSTANCE_NUMBER_TOKEN,
5613                               p_token3_value => srl_num_rec.instance_number);
5614                           x_return_status := OKL_API.G_RET_STS_ERROR;
5615                           RAISE OKL_API.G_EXCEPTION_ERROR;
5616                       END IF;
5617 
5618                       CLOSE inst_site_csr;
5619                   ELSIF NVL(srl_num_rec.install_location_type_code,OKL_API.G_MISS_CHAR) = 'HZ_LOCATIONS' THEN
5620 
5621                       OPEN inst_loc_csr(srl_num_rec.install_location_id);
5622                       FETCH inst_loc_csr INTO l_pty_site_use_id;
5623                       IF inst_loc_csr%NOTFOUND THEN
5624                           OPEN l_address_csr2(loc_id => srl_num_rec2.install_location_id);
5625                           FETCH l_address_csr2 INTO l_address;
5626                           CLOSE l_address_csr2;
5627                           --Raise Error : not defined as install_at
5628                           OKL_API.Set_Message(p_app_name  => G_APP_NAME,
5629                               p_msg_name     => G_MISSING_USAGE,
5630                               p_token1       => G_USAGE_TYPE_TOKEN,
5631                               p_token1_value => 'INSTALL_AT',
5632                               p_token2       => G_ADDRESS_TOKEN,
5633                               p_token2_value => l_address,
5634                               p_token3       => G_INSTANCE_NUMBER_TOKEN,
5635                               p_token3_value => srl_num_rec.instance_number);
5636                           x_return_status := OKL_API.G_RET_STS_ERROR;
5637                           RAISE OKL_API.G_EXCEPTION_ERROR;
5638                       END IF;
5639                       CLOSE inst_loc_csr;
5640 
5641                   END IF;
5642                   --BUG# 3569441
5643 
5644 
5645                   l_iipv_tbl(i).object_id1_new         := l_pty_site_use_id;
5646                   l_iipv_tbl(i).object_id2_new         := '#';
5647                   l_iipv_tbl(i).jtot_object_code_new    := 'OKX_PARTSITE';
5648                   l_iipv_tbl(i).object_id1_old         := l_pty_site_use_id;
5649                   l_iipv_tbl(i).object_id2_old         := '#';
5650                   l_iipv_tbl(i).jtot_object_code_old    := 'OKX_PARTSITE';
5651                   l_iipv_tbl(i).inventory_org_id        := srl_num_rec.inv_organization_id;
5652                   l_iipv_tbl(i).serial_number           := srl_num_rec.serial_number;
5653                   l_iipv_tbl(i).mfg_serial_number_yn    := 'N';
5654                   l_iipv_tbl(i).inventory_item_id       := srl_num_rec.inventory_item_id;
5655                   l_iipv_tbl(i).INV_MASTER_ORG_ID       := srl_num_rec.inv_master_organization_id;
5656                   l_iipv_tbl(i).dnz_cle_id              := p_cle_id;
5657                   l_iipv_tbl(i).instance_id             := srl_num_rec.instance_id;
5658                   l_iipv_tbl(i).selected_for_split_flag := 'N';
5659                   l_iipv_tbl(i).asd_id                  := p_asd_id;
5660 
5661               END LOOP;
5662               CLOSE srl_num_csr;
5663           END IF; --srl_tbl count is = 0
5664           IF l_iipv_tbl.COUNT  > 0 THEN
5665               --call api to create records for srl num trx
5666               okl_txl_itm_insts_pub.create_txl_itm_insts(
5667                    p_api_version    => p_api_version,
5668                    p_init_msg_list  => p_init_msg_list,
5669                    x_return_status  => x_return_status,
5670                    x_msg_count      => x_msg_count,
5671                    x_msg_data       => x_msg_data,
5672                    p_iipv_tbl       => l_iipv_tbl,
5673                    x_iipv_tbl       => lx_iipv_tbl);
5674 
5675               IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
5676                   RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
5677               ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
5678                   RAISE OKL_API.G_EXCEPTION_ERROR;
5679               END IF;
5680 
5681           END IF;
5682        --Bug# 3222804 : serial # control based on leasing inv org setup
5683        ELSIF l_serialized = OKL_API.G_FALSE THEN
5684            NULL;
5685        END IF; -- if srl number controlled
5686    END IF;
5687    l_iipv_tbl.DELETE;
5688      OKL_API.END_ACTIVITY (x_msg_count,
5689                           x_msg_data );
5690 EXCEPTION
5691     WHEN OKL_API.G_EXCEPTION_ERROR THEN
5692     x_return_status := OKL_API.HANDLE_EXCEPTIONS(
5693                                l_api_name,
5694                                G_PKG_NAME,
5695                                'OKL_API.G_RET_STS_ERROR',
5696                                x_msg_count,
5697                                x_msg_data,
5698                                '_PVT');
5699     WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
5700     x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
5701                               l_api_name,
5702                               G_PKG_NAME,
5703                               'OKL_API.G_RET_STS_UNEXP_ERROR',
5704                               x_msg_count,
5705                               x_msg_data,
5706                               '_PVT');
5707     WHEN OTHERS THEN
5708     x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
5709                               l_api_name,
5710                               G_PKG_NAME,
5711                               'OTHERS',
5712                               x_msg_count,
5713                               x_msg_data,
5714                               '_PVT');
5715 END  create_srl_num_trx;
5716 --Bug #2723498 : 11.5.9 Split by serial numbers enhancement
5717 FUNCTION Check_If_Loan(p_cle_id IN NUMBER,
5718                        x_return_status OUT nocopy VARCHAR2) RETURN VARCHAR2 IS
5719 --cursor to get deal type
5720 CURSOR l_dealtyp_csr(PCleId IN NUMBER) IS
5721 SELECT khr.deal_type
5722 FROM   okl_k_headers khr,
5723        okc_k_headers_b chrb,
5724        okc_k_lines_b   cleb
5725 WHERE  khr.id = chrb.id
5726 AND    chrb.id = cleb.dnz_chr_id
5727 AND    cleb.id = PCleId;
5728 
5729 l_deal_type okl_k_headers.deal_type%TYPE;
5730 l_loan_yn   VARCHAR2(1) DEFAULT 'N';
5731 
5732 BEGIN
5733 ----
5734     x_return_status := OKL_API.G_RET_STS_SUCCESS;
5735     OPEN l_dealtyp_csr (PCleId => p_cle_id);
5736     FETCH l_dealtyp_csr INTO l_deal_type;
5737     IF l_dealtyp_csr%NOTFOUND THEN
5738         NULL;
5739     END IF;
5740     CLOSE l_dealtyp_csr;
5741 
5742     IF NVL(l_deal_type,'X') IN ('LOAN','LOAN-REVOLVING') THEN
5743         l_loan_yn := 'Y';
5744     ELSE
5745         l_loan_yn := 'N';
5746     END IF;
5747 
5748     RETURN(l_loan_yn);
5749     EXCEPTION
5750     WHEN OTHERS THEN
5751          x_return_status := OKL_API.G_RET_STS_ERROR;
5752 ----
5753 END Check_If_Loan;
5754 
5755 --------------------------------------------------------------------------------
5756 --Start of Comments
5757 --API Name    : Create_Split_Transaction
5758 --Description : Process API to create Split Aseet Transaction Records in
5759 --              OKL_TXL_ASSETS_V and OKL_TXD_ASSETS_V
5760 --              1. Take the line details to be split
5761 --              2. Set the status of the contract as inactive
5762 --              3. Create and save source record into okl_trx_assets_v
5763 --              4. Create and save target record into okl_txd_assets_v
5764 --History     :
5765 --              10-OCT-2001    avsingh  Creation
5766 --              12-Dec-2002    avsingh  Overloaded the procedure to take p_srl_tbl
5767 --                                      as IN parameter. This will be directly called
5768 --                                      by Asset management line level termination
5769 --                                      Process. The old call is kept for backward
5770 --                                      compatability. It will be still used from
5771 --                                      the split asset UI.
5772 --              30-Jan-2004    avsingh  Bug# 3156924
5773 --                                      Overloaded the procedure to accept
5774 --                                      trx_date
5775 --              16-Aug-2005    smadhava Bug# 4542290 Variable Rate Enhancement
5776 --End of Comments
5777 ------------------------------------------------------------------------------
5778 PROCEDURE Create_Split_Transaction(p_api_version               IN  NUMBER,
5779                                    p_init_msg_list             IN  VARCHAR2,
5780                                    x_return_status             OUT NOCOPY VARCHAR2,
5781                                    x_msg_count                 OUT NOCOPY NUMBER,
5782                                    x_msg_data                  OUT NOCOPY VARCHAR2,
5783                                    p_cle_id                    IN  NUMBER,
5784                                    p_split_into_individuals_yn IN  VARCHAR2,
5785                                    p_split_into_units          IN  NUMBER,
5786                                    p_ib_tbl                    IN  ib_tbl_type,
5787                                    --Bug# 3156924
5788                                    p_trx_date                  IN  DATE,
5789                                    --bug# 3156924
5790                                    x_txdv_tbl                  OUT NOCOPY txdv_tbl_type,
5791                                    x_txlv_rec                  OUT NOCOPY txlv_rec_type,
5792                                    x_trxv_rec                  OUT NOCOPY trxv_rec_type) IS
5793 
5794 l_return_status        VARCHAR2(1)  DEFAULT OKL_API.G_RET_STS_SUCCESS;
5795 l_api_name             CONSTANT VARCHAR2(30) := 'CREATE_SPLIT_TRANSACTION';
5796 l_api_version          CONSTANT NUMBER := 1.0;
5797 
5798 --cursor to check presence of an already active transaction
5799 CURSOR chk_split_trx(p_cle_id IN NUMBER) IS
5800 SELECT txl.id,             --tal_id
5801        txl.SPLIT_INTO_SINGLES_FLAG,  --p_split_into_individuals_yn
5802        txl.SPLIT_INTO_UNITS,  --p_split_into_units
5803        --Bug# 3156924
5804        tas.DATE_TRANS_OCCURRED,
5805        tas.ID
5806 FROM   OKL_TXL_ASSETS_B txl,
5807        OKL_TRX_ASSETS   tas
5808 WHERE  txl.kle_id = p_cle_id
5809 AND    txl.tas_id = tas.id
5810 AND    txl.tal_type = 'ALI'
5811 AND    tas.tas_type = 'ALI'
5812 AND    tas.tsu_code = 'ENTERED'
5813 AND    EXISTS (SELECT NULL
5814                    FROM
5815                           okl_trx_types_tl ttyp
5816                    WHERE  tas.try_id    = ttyp.id
5817                    AND    ttyp.name     = 'Split Asset'
5818                    AND    ttyp.LANGUAGE = 'US');
5819 
5820 --for split asset components
5821 --cursor to check whether split asset comonent
5822 
5823 l_split_into_ind_yn    VARCHAR2(1) DEFAULT 'Z';
5824 l_split_units          NUMBER DEFAULT 0;
5825 l_tal_id               NUMBER;
5826 --Bug# 3156924
5827 l_trx_date             okl_trx_assets.DATE_TRANS_OCCURRED%TYPE;
5828 l_tas_id               okl_trx_assets.ID%TYPE;
5829 
5830 
5831 l_trxv_rec             trxv_rec_type;
5832 l_txlv_rec             txlv_rec_type;
5833 l_txdv_rec             txdv_rec_type;
5834 l_txdv_rec_out         txdv_rec_type;
5835 l_txdv_tbl             txdv_tbl_type;
5836 l_ast_line_rec         ast_line_rec_type;
5837 l_fa_location_id       NUMBER;
5838 l_row_not_found        BOOLEAN := TRUE;
5839 l_total_cost           NUMBER;
5840 l_total_salvage_value  NUMBER;
5841 l_units_on_child_line  NUMBER;
5842 l_total_quantity       NUMBER;
5843 l_split_into_units     NUMBER;
5844 l_asset_exists         VARCHAR2(1) DEFAULT 'N';
5845 j                      NUMBER      DEFAULT 0; --counter for generating split asset numbers
5846 l_no_txd_data_found    BOOLEAN DEFAULT TRUE;
5847 
5848 --Bug #2723498 11.5.9 enhancement - Splitting assets by serial numbers
5849 --check if serial number data exists
5850 --cursor to check whether srl number data exists
5851 CURSOR srl_exist_chk (p_tal_id IN NUMBER) IS
5852 SELECT '!'
5853 FROM   dual
5854 WHERE  EXISTS
5855 (SELECT 1
5856 FROM   okl_txl_itm_insts
5857 WHERE  tal_id = p_tal_id
5858 AND    tal_type = 'ALI');
5859 
5860 l_srl_exists VARCHAR2(1) DEFAULT '?';
5861 
5862 --Bug #2723498 11.5.9 enhancement - Splitting assets by serial numbers
5863 --cursor to fetch all the serail numbers
5864 CURSOR get_srl_csr (p_tal_id IN NUMBER) IS
5865 SELECT id
5866 FROM   okl_txl_itm_insts
5867 WHERE  tal_id = p_tal_id
5868 AND    tal_type = 'ALI';
5869 
5870 l_iipv_tbl   okl_txl_itm_insts_pub.iipv_tbl_type;
5871 l_iipv_count NUMBER;
5872 l_iipv_id    NUMBER;
5873 
5874 l_ib_tbl    ib_tbl_type;
5875 
5876 --Bug #2723498 11.5.9 - Multi Currency
5877 CURSOR curr_conv_csr (PCleId IN NUMBER) IS
5878 SELECT khrv.currency_code,
5879        khrv.currency_conversion_type,
5880        khrv.currency_conversion_rate,
5881        khrv.currency_conversion_date,
5882        khrv.start_date
5883 FROM   okl_k_headers_full_v khrv,
5884        okc_k_lines_b        cle
5885 WHERE  khrv.id         = cle.dnz_chr_id
5886 AND    cle.id  = PCleId;
5887 
5888 curr_conv_rec curr_conv_csr%ROWTYPE;
5889 
5890 
5891 --Bug# 2798006 : split asset for loan contracts
5892 CURSOR loan_ast_csr (PCleId IN NUMBER) IS
5893 SELECT
5894         cle_fa.id               kle_id,
5895         clet.name               NAME,
5896         clet.item_description   DESCRIPTION,
5897         cle.chr_id              CHR_ID,
5898         cle.dnz_chr_id          DNZ_CHR_ID,
5899         cle.id                  PARENT_LINE_ID,
5900         cle.start_date          START_DATE_ACTIVE,
5901         cle.end_date            END_DATE_ACTIVE,
5902         cim_fa.number_of_items  CURRENT_UNITS,
5903         clet.name               ASSET_NUMBER,
5904         kle.OEC                 ORIGINAL_COST,
5905         kle.OEC                 COST,
5906         cle.sts_code            LINE_STATUS
5907 FROM    okc_k_items           cim_fa,
5908         okc_k_lines_b         cle_fa,
5909         okc_line_styles_b     lse_fa,
5910         okl_k_lines           kle,
5911         okc_k_lines_tl        clet,
5912         okc_k_lines_b         cle
5913 WHERE   cim_fa.cle_id     = cle_fa.id
5914 AND     cle_fa.cle_id     = cle.id
5915 AND     cle_fa.dnz_chr_id = cle.dnz_chr_id
5916 AND     cle_fa.lse_id     = lse_fa.id
5917 AND     lse_fa.lty_code   = 'FIXED_ASSET'
5918 AND     kle.id            = cle.id
5919 AND     clet.id           = cle.id
5920 AND     clet.LANGUAGE     = USERENV('LANG')
5921 AND     cle.id            = PCleId;
5922 
5923 l_loan_ast_rec loan_ast_csr%ROWTYPE;
5924 l_loan_yn      VARCHAR2(1) DEFAULT 'N';
5925 l_fa_exists    VARCHAR2(1) DEFAULT 'N';
5926 
5927 --Bug Fix # 2881114
5928 --Cursor to check whether asset is linked to service contract
5929 CURSOR lnk_to_srv_csr(p_cle_id IN NUMBER) IS
5930 SELECT '!'
5931 FROM   dual
5932 WHERE  EXISTS
5933        (
5934         SELECT '1'
5935         FROM
5936                okc_k_headers_b   oks_chrb,
5937                okc_line_styles_b oks_cov_pd_lse,
5938                okc_k_lines_b     oks_cov_pd_cleb,
5939                okc_k_rel_objs    krel,
5940                okc_line_styles_b lnk_srv_lse,
5941                okc_statuses_b    lnk_srv_sts,
5942                okc_k_lines_b     lnk_srv_cleb,
5943                okc_k_items       lnk_srv_cim
5944         WHERE  oks_chrb.scs_code            = 'SERVICE'
5945         AND    oks_chrb.id                  = oks_cov_pd_cleb.dnz_chr_id
5946         AND    oks_cov_pd_cleb.lse_id       = oks_cov_pd_lse.id
5947         AND    oks_cov_pd_lse.lty_code      = 'COVER_PROD'
5948         AND    '#'                          = krel.object1_id2
5949         AND    oks_cov_pd_cleb.id           = krel.object1_id1
5950         AND    krel.rty_code                = 'OKLSRV'
5951         AND    krel.chr_id                  = lnk_srv_cleb.dnz_chr_id
5952         AND    krel.cle_id                  = lnk_srv_cleb.id
5953         AND    lnk_srv_cleb.lse_id          = lnk_srv_lse.id
5954         AND    lnk_srv_lse.lty_code         = 'LINK_SERV_ASSET'
5955         AND    lnk_srv_cleb.sts_code        = lnk_srv_sts.code
5956         AND    lnk_srv_sts.ste_code NOT IN ('HOLD','EXPIRED','TERMINATED','CANCELLED')
5957         AND    lnk_srv_cleb.dnz_chr_id       = lnk_srv_cim.dnz_chr_id
5958         AND    lnk_srv_cleb.id               = lnk_srv_cim.cle_id
5959         AND    lnk_srv_cim.jtot_object1_code = 'OKX_COVASST'
5960         AND    lnk_srv_cim.object1_id2       = '#'
5961         AND    lnk_srv_cim.object1_id1       = TO_CHAR(p_cle_id)
5962        );
5963 
5964 l_lnk_to_srv  VARCHAR2(1) DEFAULT '?';
5965 
5966   --Bug# 2981308 : cursor to fetch asset key ccid
5967   CURSOR l_fab_csr(p_asset_id IN NUMBER) IS
5968   SELECT fab.asset_key_ccid
5969   FROM   fa_additions_b fab
5970   WHERE  fab.asset_id = p_asset_id;
5971 
5972   l_asset_key_id   fa_additions_b.asset_key_ccid%TYPE;
5973   --Bug# 2981308
5974 
5975   --Bug# 3783518
5976   CURSOR l_chr_csr(p_cle_id IN NUMBER) IS
5977   SELECT dnz_chr_id
5978   FROM okc_k_lines_b
5979   WHERE id = p_cle_id;
5980 
5981   l_chr_id okc_k_headers_b.id%TYPE;
5982 
5983   --cursor to check if contract has re-lease assets
5984   -- Bug# 4631549
5985   -- Disable split asset process for
5986   -- Re-lease contract and Re-lease asset flows
5987   CURSOR l_chk_rel_ast_csr (p_chr_id IN NUMBER,p_cle_id IN NUMBER) IS
5988   --Bug# 15992711 : The re-leased flag is no longer checked at contract header
5989   --                but needs to be validated at contract line
5990   --                Cursor modified to include validation at asset line level
5991   --Start Modification 120.61.12010000.11 8-Feb-2013 Pratirao
5992   /*
5993   SELECT '!'
5994   FROM   OKC_RULES_B rul
5995   WHERE  rul.dnz_chr_id = p_chr_id
5996   AND    rul.rule_information_category = 'LARLES'
5997   AND    NVL(rule_information1,'N') = 'Y';
5998   */
5999 
6000 
6001   SELECT NVL(kle.re_lease_yn,'N')
6002   FROM   OKC_K_HEADERS_B   chr
6003         ,okc_k_lines_b     cle
6004         ,okl_k_lines       kle
6005   WHERE  chr.id     = cle.chr_id
6006   and    chr.id     = cle.dnz_chr_id
6007   and    cle.id     = kle.id
6008   and    chr.id     = p_chr_id  --p_contract_id;
6009   and    cle.id     = p_cle_id; --Added for Bug# 16496239 pratirao 15-Mar-2013
6010 
6011   --Bug# 15992711 End Modification
6012 
6013 
6014  l_rel_ast VARCHAR2(1);
6015  -- Bug# 4542290 - smadhava - Added - Start
6016  l_pdt_params_rec OKL_SETUPPRODUCTS_PUB.pdt_parameters_rec_type;
6017  l_rev_recog_meaning     OKL_PRODUCT_PARAMETERS_V.REVENUE_RECOGNITION_MEANING%TYPE;
6018 
6019     CURSOR get_prod_param_values(cp_name OKL_PDT_QUALITYS.NAME%TYPE
6020                                , cp_value OKL_PQY_VALUES.VALUE%TYPE) IS
6021     SELECT
6022          QVE.DESCRIPTION
6023       FROM
6024          OKL_PDT_QUALITYS PQY
6025        , OKL_PQY_VALUES QVE
6026      WHERE
6027           QVE.PQY_ID = PQY.ID
6028       AND PQY.NAME   = cp_name
6029       AND QVE.VALUE  = cp_value;
6030 
6031  -- Bug# 4542290 - smadhava - Added - End
6032 
6033  --Added by dpsingh for LE uptake
6034   CURSOR contract_num_csr (p_ctr_id1 NUMBER) IS
6035   SELECT  contract_number
6036   FROM OKC_K_HEADERS_B
6037   WHERE id = p_ctr_id1;
6038 
6039   l_cntrct_number          OKC_K_HEADERS_B.CONTRACT_NUMBER%TYPE;
6040   l_legal_entity_id          NUMBER;
6041 
6042 BEGIN
6043     --dbms_output.put_line('before start activity');
6044     x_return_status := OKL_API.G_RET_STS_SUCCESS;
6045     -- Call start_activity to create savepoint, check compatibility
6046     -- and initialize message list
6047     x_return_status := OKL_API.START_ACTIVITY (
6048                                l_api_name
6049                                ,p_init_msg_list
6050                                ,'_PVT'
6051                                ,x_return_status);
6052     -- Check if activity started successfully
6053     IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
6054        RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
6055     ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
6056        RAISE OKL_API.G_EXCEPTION_ERROR;
6057     END IF;
6058     l_ib_tbl := p_ib_tbl;
6059     --Bug# 6612475
6060     --1. Validate Split Request
6061     Validate_Split_Request
6062      (p_api_version               => p_api_version
6063      ,p_init_msg_list             => p_init_msg_list
6064      ,x_return_status             => x_return_status
6065      ,x_msg_count                 => x_msg_count
6066      ,x_msg_data                  => x_msg_data
6067      ,p_cle_id                    => p_cle_id
6068      ,p_split_into_individuals_yn => p_split_into_individuals_yn
6069      ,p_split_into_units          => p_split_into_units
6070      ,p_revision_date             => p_trx_date
6071      );
6072 
6073     IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
6074        RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
6075     ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
6076        RAISE OKL_API.G_EXCEPTION_ERROR;
6077     END IF;
6078 
6079     --Commenting this validation as it is redundant now
6080     --because of newly added Validate_Split_Request
6081     --1.Verify p_cle_id
6082     --x_return_status := verify_cle_id(p_cle_id => p_cle_id);
6083     --IF x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR THEN
6084         --RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
6085     --ELSIF x_return_status = OKL_API.G_RET_STS_ERROR THEN
6086         --RAISE OKL_API.G_EXCEPTION_ERROR;
6087     --END IF;
6088     --Bug# 6612475 End
6089 
6090     --Bug# 3783518: start
6091     -- Do not allow split asset for contracts with release assets
6092     OPEN l_chr_csr(p_cle_id => p_cle_id);
6093     FETCH l_chr_csr INTO l_chr_id;
6094     CLOSE l_chr_csr;
6095 
6096     -- Bug# 4542290 - smadhava - Added - Start
6097     -- Obtain the product parameter - Revenue Recognition method
6098     OKL_K_RATE_PARAMS_PVT.get_product(
6099             p_api_version       => p_api_version,
6100             p_init_msg_list     => p_init_msg_list,
6101             x_return_status     => x_return_status,
6102             x_msg_count         => x_msg_count,
6103             x_msg_data          => x_msg_data,
6104             p_khr_id            => l_chr_id,
6105             x_pdt_parameter_rec => l_pdt_params_rec);
6106 
6107     IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
6108        RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
6109     ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
6110        RAISE OKL_API.G_EXCEPTION_ERROR;
6111     END IF;
6112 
6113     -- Raise an error if the Revenue Recognition Method is 'Actual' or 'Estimated and Actual'
6114     IF ( l_pdt_params_rec.Revenue_Recognition_Method = G_RRB_ESTIMATED OR
6115          l_pdt_params_rec.Revenue_Recognition_Method = G_RRB_ACTUAL) THEN
6116       OPEN get_prod_param_values('REVENUE_RECOGNITION_METHOD',
6117                                  l_pdt_params_rec.Revenue_Recognition_Method);
6118         FETCH get_prod_param_values INTO l_rev_recog_meaning;
6119       CLOSE get_prod_param_values;
6120 
6121       OKL_API.set_message(p_app_name     => G_APP_NAME,
6122                           p_msg_name     => G_RRB_SPLIT_ASSET_NOT_ALLWD,
6123                           p_token1       => G_METHOD,
6124                           p_token1_value => l_rev_recog_meaning);
6125       RAISE OKL_API.G_EXCEPTION_ERROR;
6126     END IF;
6127     -- Bug# 4542290 - smadhava - Added - End
6128 
6129     l_rel_ast := '?';
6130     --check for release assets in a contract
6131     OPEN l_chk_rel_ast_csr (p_chr_id => l_chr_id
6132                            ,p_cle_id => p_cle_id --Added for Bug# 16496239 pratirao 15-Mar-2013
6133                            );
6134     FETCH l_chk_rel_ast_csr INTO l_rel_ast;
6135     CLOSE l_chk_rel_ast_csr;
6136 
6137     FND_FILE.PUT_LINE(FND_FILE.LOG,'l_rel_ast: '||l_rel_ast);
6138     --IF l_rel_ast = '!' THEN
6139     IF l_rel_ast ='Y' THEN
6140       OKL_API.set_message(p_app_name     => G_APP_NAME,
6141                           p_msg_name     => 'OKL_REL_ASSET_SPLIT_NOT_ALLWD');
6142       RAISE OKL_API.G_EXCEPTION_ERROR;
6143     END IF;
6144     --Bug# 3783518: end
6145 
6146     --Bug Fix # 2881114
6147     --check whether asset is linked to service contract
6148     l_lnk_to_srv := '?';
6149     OPEN lnk_to_srv_csr (p_cle_id => p_cle_id);
6150         FETCH lnk_to_srv_csr INTO l_lnk_to_srv;
6151         IF lnk_to_srv_csr%NOTFOUND THEN
6152             NULL;
6153         END IF;
6154     CLOSE lnk_to_srv_csr;
6155 
6156     IF l_lnk_to_srv = '!' THEN
6157         OKL_API.set_message(p_app_name     => G_APP_NAME,
6158                             p_msg_name     => G_ASSET_LINKED_TO_SERVICE);
6159         RAISE OKL_API.G_EXCEPTION_ERROR;
6160     END IF;
6161     --Bug Fix # 2881114 End
6162 
6163     --2.Set the status of the Contract Line on HOLD
6164     --study the contract status concurrent program
6165     --possibly call it from here.
6166     --3.create and save split asset transaction
6167     l_trxv_rec.tas_type   := 'ALI';
6168     l_trxv_rec.tsu_code   := 'ENTERED';
6169     ----------------------------------
6170     --Bug# 3156924
6171     --validate trx_date :
6172     validate_trx_date(p_api_version    => p_api_version,
6173                       p_init_msg_list  => p_init_msg_list,
6174                       x_return_status  => x_return_status,
6175                       x_msg_count      => x_msg_count,
6176                       x_msg_data       => x_msg_data,
6177                       p_cle_id         => p_cle_id,
6178 
6179                       p_trx_date       => p_trx_date);
6180     IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
6181        RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
6182     ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
6183        RAISE OKL_API.G_EXCEPTION_ERROR;
6184     END IF;
6185 
6186    --Bug# 5946411 :ER Added offlease pending transaction message
6187     Check_Offlease_Trans(p_api_version    => p_api_version,
6188                       p_init_msg_list  => p_init_msg_list,
6189                       x_return_status  => x_return_status,
6190                       x_msg_count      => x_msg_count,
6191                       x_msg_data       => x_msg_data,
6192                       p_cle_id         => p_cle_id
6193                       );
6194     IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
6195        RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
6196     ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
6197        RAISE OKL_API.G_EXCEPTION_ERROR;
6198     END IF;
6199    --Bug# 5946411 :ER end
6200     --l_trxv_rec.date_trans_occurred := sysdate;
6201     l_trxv_rec.date_trans_occurred := p_trx_date;
6202 
6203     --Added by dpsingh for LE Uptake
6204 
6205     l_legal_entity_id  := OKL_LEGAL_ENTITY_UTIL.get_khr_le_id(l_chr_id) ;
6206     IF  l_legal_entity_id IS NOT NULL THEN
6207        l_trxv_rec.legal_entity_id :=  l_legal_entity_id;
6208     ELSE
6209         -- get the contract number
6210        OPEN contract_num_csr(l_chr_id);
6211        FETCH contract_num_csr INTO l_cntrct_number;
6212        CLOSE contract_num_csr;
6213 	Okl_Api.set_message(p_app_name     => g_app_name,
6214                              p_msg_name     => 'OKL_LE_NOT_EXIST_CNTRCT',
6215 			     p_token1           =>  'CONTRACT_NUMBER',
6216 			     p_token1_value  =>  l_cntrct_number);
6217          RAISE OKL_API.G_EXCEPTION_ERROR;
6218     END IF;
6219     -------------------------------------
6220     --++++++++++++++++++++testing ty id only++++++++++++++++++++++
6221     x_return_status := get_try_id(p_try_name => G_TRY_NAME,
6222                                   x_try_id   => l_trxv_rec.try_id);
6223     IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
6224        RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
6225     ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
6226        RAISE OKL_API.G_EXCEPTION_ERROR;
6227     END IF;
6228     --++++++++++++++++++++testing ty id only++++++++++++++++++++++
6229     --Check if a 'ENTRED' unprocessed split transaction alreadt exists for this line
6230     --dbms_output.put_line('Before chk_split_trx cursor fetch');
6231     l_ast_line_rec := get_ast_line(p_cle_id,l_row_not_found);
6232     --dbms_output.put_line('After fetching asset line '||l_ast_line_rec.description);
6233     l_fa_exists := 'N';
6234     IF (l_row_not_found) THEN
6235        --Bug #2798006 : call create split transaction for Loans
6236        l_loan_yn := 'N';
6237        l_loan_yn := Check_If_Loan(P_Cle_Id        => p_cle_id,
6238                                   x_return_status => x_return_status);
6239 
6240        IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
6241            RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
6242        ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
6243            RAISE OKL_API.G_EXCEPTION_ERROR;
6244        END IF;
6245 
6246        IF l_loan_yn = 'N' THEN
6247            OKL_API.set_message(p_app_name     => G_APP_NAME,
6248                                p_msg_name     => G_SPLIT_ASSET_NOT_FOUND);
6249            RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
6250        ELSIF l_loan_yn = 'Y' THEN
6251            --open cursor to get asset information from OKL tables
6252            OPEN loan_ast_csr(PCleId => p_cle_id);
6253            FETCH loan_ast_csr INTO l_loan_ast_rec;
6254            IF loan_ast_csr%NOTFOUND THEN
6255                OKL_API.set_message(p_app_name     => G_APP_NAME,
6256                                    p_msg_name     => G_SPLIT_ASSET_NOT_FOUND);
6257                RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
6258            ELSE
6259                l_fa_exists := 'N';
6260            END IF;
6261         END IF;
6262         --Bug# 2798006 end.
6263     ELSE
6264         l_fa_exists := 'Y';
6265     END IF;
6266     -- avsingh : added on 10-Aug-2002 : To Prevent Single unit assets to split into
6267     -- individuals
6268     IF (l_ast_line_rec.current_units = 1 AND l_loan_yn = 'N') OR
6269        (l_loan_ast_rec.current_units = 1 AND l_loan_yn = 'Y') THEN
6270        IF NVL(p_split_into_individuals_yn,'N') = 'Y' OR NVL(p_split_into_units,0) > 0 THEN
6271 
6272          --Bug# 6336455: Display appropriate error message when
6273          -- splitting an off-lease asset
6274          IF (l_ast_line_rec.line_status IN ('TERMINATED','EXPIRED')) OR
6275             (l_loan_ast_rec.line_status IN ('TERMINATED','EXPIRED')) THEN
6276 
6277                   OKL_API.set_message(p_app_name     => G_APP_NAME,
6278                                       p_msg_name     => 'OKL_AM_SINGLE_UNIT_SPLIT');
6279                   RAISE OKL_API.G_EXCEPTION_ERROR;
6280 
6281          ELSE
6282 	          --Changed message name by bkatraga for bug 9548880
6283                   OKL_API.set_message(p_app_name     => G_APP_NAME,
6284                                       p_msg_name     => G_SPLIT_UNIT_NOT_ALLWD);
6285                   RAISE OKL_API.G_EXCEPTION_ERROR;
6286 
6287          END IF;
6288          --Bug# 6336455: end
6289        END IF;
6290     END IF;
6291 
6292 
6293     OPEN chk_split_trx(p_cle_id => l_ast_line_rec.id1);
6294         FETCH chk_split_trx INTO
6295                             l_tal_id,
6296                             l_split_into_ind_yn,
6297                             l_split_units,
6298                             --Bug# 3156924
6299                             l_trx_date,
6300                             l_tas_id;
6301         --dbms_output.put_line('After chk_split_trx cursor fetch');
6302         IF chk_split_trx%NOTFOUND THEN
6303             --create new transaction (header, line and detail)
6304             -- Now creating the new header record
6305             --dbms_output.put_line('After chk_split_trx cursor fetch - trx not found.');
6306             Create_trx_header(p_api_version    => p_api_version,
6307                               p_init_msg_list  => p_init_msg_list,
6308                               x_return_status  => x_return_status,
6309                               x_msg_count      => x_msg_count,
6310                               x_msg_data       => x_msg_data,
6311                               p_trxv_rec       => l_trxv_rec,
6312                               x_trxv_rec       => x_trxv_rec);
6313             --dbms_output.put_line('After creating trx header'||x_return_status);
6314            IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
6315                RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
6316            ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
6317                RAISE OKL_API.G_EXCEPTION_ERROR;
6318            END IF;
6319 
6320         --Prepare txl record for insert into OKL_TXL_ASSETS_V
6321 
6322         IF l_fa_exists = 'Y' THEN
6323             l_txlv_rec.tas_id       := x_trxv_rec.id;
6324             l_txlv_rec.kle_id       := l_ast_line_rec.id1;
6325             l_txlv_rec.dnz_khr_id   := l_ast_line_rec.dnz_chr_id;
6326             l_txlv_rec.asset_number := l_ast_line_rec.name;
6327             l_txlv_rec.description  := l_ast_line_rec.description;
6328             x_return_status := Get_Fa_Location(l_ast_line_rec.asset_id,
6329                                                l_ast_line_rec.corporate_book,
6330                                                l_fa_location_id);
6331             --dbms_output.put_line('After fetching fa location id'||x_return_status);
6332             IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
6333                 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
6334             ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
6335                 RAISE OKL_API.G_EXCEPTION_ERROR;
6336             END IF;
6337             l_txlv_rec.fa_location_id := l_fa_location_id;
6338             l_txlv_rec.original_cost := l_ast_line_rec.original_cost;
6339             l_txlv_rec.current_units := l_ast_line_rec.current_units;
6340             IF l_ast_line_rec.new_used = 'NEW' THEN
6341                 l_txlv_rec.used_asset_yn := 'Y';
6342             ELSIF l_ast_line_rec.new_used = 'USED' THEN
6343                 l_txlv_rec.used_asset_yn := 'N';
6344             END IF;
6345 
6346             l_txlv_rec.tag_number            := l_ast_line_rec.tag_number;
6347             l_txlv_rec.model_number          := l_ast_line_rec.model_number;
6348             l_txlv_rec.corporate_book        := l_ast_line_rec.corporate_book;
6349             l_txlv_rec.in_service_date       := l_ast_line_rec.in_service_date;
6350             l_txlv_rec.org_id                := l_ast_line_rec.org_id;
6351             l_txlv_rec.depreciation_id       := l_ast_line_rec.depreciation_category;
6352             l_txlv_rec.life_in_months        := l_ast_line_rec.life_in_months;
6353             l_txlv_rec.depreciation_cost     := l_ast_line_rec.cost;
6354             l_txlv_rec.deprn_method          := l_ast_line_rec.deprn_method_code;
6355             l_txlv_rec.deprn_rate            := l_ast_line_rec.basic_rate;
6356             l_txlv_rec.salvage_value         := l_ast_line_rec.salvage_value;
6357             l_txlv_rec.percent_salvage_value := l_ast_line_rec.percent_salvage_value;
6358 
6359             --------------------------------------
6360             --Bug# 2981308 : fetch asset key ccid
6361             --------------------------------------
6362             OPEN l_fab_csr(p_asset_id => l_ast_line_rec.asset_id);
6363             FETCH l_fab_csr INTO l_asset_key_id;
6364             IF l_fab_csr%NOTFOUND THEN
6365                 NULL;
6366             END IF;
6367             CLOSE l_fab_csr;
6368 
6369             l_txlv_rec.asset_key_id         := l_asset_key_id;
6370             -------------------------------------
6371             --bug# 2981308 : fetch asset key ccid
6372             ------------------------------------
6373 
6374         ELSIF l_fa_exists = 'N' THEN
6375             l_txlv_rec.tas_id        := x_trxv_rec.id;
6376             l_txlv_rec.kle_id        := l_loan_ast_rec.kle_id;
6377             l_txlv_rec.dnz_khr_id    := l_loan_ast_rec.dnz_chr_id;
6378             l_txlv_rec.asset_number  := l_loan_ast_rec.asset_number;
6379             l_txlv_rec.description   := l_loan_ast_rec.description;
6380             l_txlv_rec.original_cost := l_loan_ast_rec.original_cost;
6381             l_txlv_rec.current_units := l_loan_ast_rec.current_units;
6382             l_txlv_rec.used_asset_yn := 'Y';
6383             l_txlv_rec.depreciation_cost  := l_loan_ast_rec.cost;
6384         END IF;
6385         l_txlv_rec.SPLIT_INTO_SINGLES_FLAG := p_split_into_individuals_yn;
6386         l_txlv_rec.SPLIT_INTO_UNITS        := p_split_into_units;
6387 
6388 
6389         IF (l_txlv_rec.tal_type = OKC_API.G_MISS_CHAR OR
6390             l_txlv_rec.tal_type IS NULL) THEN
6391             l_txlv_rec.tal_type       := 'ALI';
6392         END IF;
6393         IF (l_txlv_rec.line_number = OKC_API.G_MISS_NUM OR
6394             l_txlv_rec.line_number IS NULL) THEN
6395             l_txlv_rec.line_number       := 1;
6396         ELSE
6397             l_txlv_rec.line_number       := l_txlv_rec.line_number + 1;
6398         END IF;
6399 
6400         --Bug# : Multi Currency
6401         OPEN curr_conv_csr (PCleId => p_cle_id);
6402         FETCH  curr_conv_csr INTO curr_conv_rec;
6403         IF curr_conv_csr%NOTFOUND THEN
6404             NULL;
6405         END IF;
6406         CLOSE curr_conv_csr;
6407 
6408         l_txlv_rec.currency_code            := curr_conv_rec.currency_code;
6409         l_txlv_rec.currency_conversion_type := curr_conv_rec.currency_conversion_type;
6410         l_txlv_rec.currency_conversion_rate := curr_conv_rec.currency_conversion_rate;
6411         l_txlv_rec.currency_conversion_date := curr_conv_rec.currency_conversion_date;
6412 
6413         --create asset line transaction
6414         OKL_TXL_ASSETS_PUB.create_txl_asset_def(
6415                            p_api_version    => p_api_version,
6416                            p_init_msg_list  => p_init_msg_list,
6417                            x_return_status  => x_return_status,
6418                            x_msg_count      => x_msg_count,
6419                            x_msg_data       => x_msg_data,
6420                            p_tlpv_rec       => l_txlv_rec,
6421                            x_tlpv_rec       => x_txlv_rec);
6422                 --dbms_output.put_line('After creating transaction line'||x_return_status);
6423         IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
6424            RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
6425         ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
6426            RAISE OKL_API.G_EXCEPTION_ERROR;
6427         END IF;
6428 
6429         --call to create record for OKL_TXD_ASSETS_V
6430         --dbms_output.put_line('when fresh trx '||l_ast_line_rec.description);
6431         IF NVL(p_split_into_individuals_yn,'N') = 'X' THEN
6432            --split asset component transaction details will not be created
6433             NULL;
6434         ELSE
6435             Create_trx_details(p_api_version    => p_api_version,
6436                                p_init_msg_list  => p_init_msg_list,
6437                                x_return_status  => x_return_status,
6438                                x_msg_count      => x_msg_count,
6439                                x_msg_data       => x_msg_data,
6440                                p_ast_line_rec   => l_ast_line_rec,
6441                                p_txlv_rec       => x_txlv_rec,
6442                                x_txdv_tbl       => x_txdv_tbl);
6443 
6444             --dbms_output.put_line('After creating trx details'||x_return_status);
6445             IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
6446                RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
6447             ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
6448                RAISE OKL_API.G_EXCEPTION_ERROR;
6449             END IF;
6450         END IF;
6451 
6452         --Bug #2723498 : 11.5.9 enahncement split asset by serial numbers
6453         --call to create serial number transaction
6454         create_srl_num_trx(p_api_version               => p_api_version,
6455                            p_init_msg_list             => p_init_msg_list,
6456                            x_return_status             => x_return_status,
6457                            x_msg_count                 => x_msg_count,
6458                            x_msg_data                  => x_msg_data,
6459                            p_cle_id                    => p_cle_id,
6460                            p_split_into_individuals_yn => p_split_into_individuals_yn,
6461                            p_split_into_units          => p_split_into_units,
6462                            p_ib_tbl                    => l_ib_tbl,
6463                            p_tas_id                    => x_txlv_rec.tas_id,
6464                            p_tal_id                    => x_txlv_rec.id,
6465                            p_asd_id                    => NULL);
6466         IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
6467            RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
6468         ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
6469            RAISE OKL_API.G_EXCEPTION_ERROR;
6470         END IF;
6471         --Bug #2723498 : 11.5.9 enahncement split asset by serial numbers end
6472 
6473     ELSE --chk_split_trx%FOUND
6474        -- If yes then chk if split parameters are same
6475        --dbms_output.put_line('transaction found');
6476        IF NVL(p_split_into_individuals_yn,'N') <> 'X' AND  NVL(l_split_into_ind_yn,'N') = 'X' THEN
6477 
6478           --split asset component transactions exist
6479           OKL_API.set_message(p_app_name     => G_APP_NAME,
6480                               p_msg_name     => G_SPLIT_AST_COMP_TRX);
6481           RAISE OKL_API.G_EXCEPTION_ERROR;
6482 
6483        ELSIF NVL(p_split_into_individuals_yn,'N') = 'X' AND  NVL(l_split_into_ind_yn,'N') <> 'X' THEN
6484 
6485            --split asset transactions exist
6486           OKL_API.set_message(p_app_name     => G_APP_NAME,
6487                               p_msg_name     => G_SPLIT_ASSET_TRX);
6488           RAISE OKL_API.G_EXCEPTION_ERROR;
6489 
6490        ELSIF (NVL(p_split_into_individuals_yn,'N') = NVL(l_split_into_ind_yn,'N') AND NVL(p_split_into_units,0) = NVL(l_split_units,0)
6491               --Bug# 3156924 :
6492               AND TRUNC(p_trx_date) = TRUNC(l_trx_date)) THEN
6493            -- If yes then do nothing
6494            NULL;
6495            --dbms_output.put_line('no change transaction found - doing nothing');
6496        ELSIF (NVL(p_split_into_individuals_yn,'N') <> 'X') AND
6497              (NVL(p_split_into_individuals_yn,'N') <> NVL(l_split_into_ind_yn,'N') OR NVL(p_split_into_units,0) <> NVL(l_split_units,0)
6498               --Bug# 3156924 :
6499               OR TRUNC(p_trx_date) <> TRUNC(l_trx_date)) THEN
6500        -- else
6501            -------------------------------------------------
6502            --Bug# 3156924
6503            ------------------------------------------------
6504            --update transaction header for transaction date
6505            l_trxv_rec.id := l_tas_id;
6506            l_trxv_rec.date_trans_occurred := p_trx_date;
6507            OKL_TRX_ASSETS_PUB.update_trx_ass_h_def(
6508                           p_api_version   => p_api_version,
6509                           p_init_msg_list => p_init_msg_list,
6510                           x_return_status => x_return_status,
6511                           x_msg_count     => x_msg_count,
6512                           x_msg_data      => x_msg_data,
6513                           p_thpv_rec      => l_trxv_rec,
6514                           x_thpv_rec      => x_trxv_rec);
6515 
6516            --dbms_output.put_line('after updating contract trx status to processed '||x_return_status);
6517            IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
6518                RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
6519            ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
6520                RAISE OKL_API.G_EXCEPTION_ERROR;
6521            END IF;
6522            -------------------------------------------------
6523            --Bug# 3156924
6524            ------------------------------------------------
6525 
6526            --update transaction lines for split assets
6527            l_txlv_rec.id := l_tal_id;
6528            --l_txlv_rec.depreciate_yn := p_split_into_individuals_yn;
6529            --l_txlv_rec.units_retired := p_split_into_units;
6530            l_txlv_rec.SPLIT_INTO_SINGLES_FLAG := p_split_into_individuals_yn;
6531            l_txlv_rec.SPLIT_INTO_UNITS        := p_split_into_units;
6532            OKL_TXL_ASSETS_PUB.update_txl_asset_def(
6533                            p_api_version    => p_api_version,
6534                            p_init_msg_list  => p_init_msg_list,
6535                            x_return_status  => x_return_status,
6536                            x_msg_count      => x_msg_count,
6537                            x_msg_data       => x_msg_data,
6538                            p_tlpv_rec       => l_txlv_rec,
6539                            x_tlpv_rec       => x_txlv_rec);
6540            IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
6541                RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
6542            ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
6543                RAISE OKL_API.G_EXCEPTION_ERROR;
6544            END IF;
6545 
6546            --fetch transaction details
6547            l_txdv_tbl := get_trx_details(p_tal_id         => x_txlv_rec.id,
6548                                          x_no_data_found  => l_no_txd_data_found);
6549            IF l_no_txd_data_found THEN
6550                NULL;
6551                --dbms_output.put_line('No Transaction Details Found');
6552                        --call to create record for OKL_TXD_ASSETS_V
6553                --dbms_output.put_line('when txd assets not found '||l_ast_line_rec.description);
6554                Create_trx_details(p_api_version    => p_api_version,
6555                            p_init_msg_list  => p_init_msg_list,
6556                            x_return_status  => x_return_status,
6557                            x_msg_count      => x_msg_count,
6558                            x_msg_data       => x_msg_data,
6559                            p_ast_line_rec   => l_ast_line_rec,
6560                            p_txlv_rec       => x_txlv_rec,
6561                            x_txdv_tbl       => x_txdv_tbl);
6562 
6563                IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
6564                     RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
6565                ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
6566                     RAISE OKL_API.G_EXCEPTION_ERROR;
6567                END IF;
6568 
6569            ELSE
6570                -- delete transaction details and approprately create new transaction details
6571                OKL_TXD_ASSETS_PUB.delete_txd_asset_def(p_api_version   => p_api_version,
6572                                                        p_init_msg_list  => p_init_msg_list,
6573                                                        x_return_status  => x_return_status,
6574                                                        x_msg_count      => x_msg_count,
6575                                                        x_msg_data       => x_msg_data,
6576                                                        p_adpv_tbl       => l_txdv_tbl);
6577 
6578                IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
6579                    RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
6580                ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
6581                    RAISE OKL_API.G_EXCEPTION_ERROR;
6582                END IF;
6583 --Bug fix# 2744213 : positioning of end if
6584 --            End If;
6585 
6586             -- create new transaction details
6587             --call to create record for OKL_TXD_ASSETS_V
6588             --dbms_output.put_line('after deleting txd assets '||l_ast_line_rec.description);
6589             Create_trx_details(p_api_version    => p_api_version,
6590                                p_init_msg_list  => p_init_msg_list,
6591                                x_return_status  => x_return_status,
6592                                x_msg_count      => x_msg_count,
6593                                x_msg_data       => x_msg_data,
6594                                p_ast_line_rec   => l_ast_line_rec,
6595                                p_txlv_rec       => x_txlv_rec,
6596                                x_txdv_tbl       => x_txdv_tbl);
6597 
6598            IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
6599                RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
6600            ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
6601                RAISE OKL_API.G_EXCEPTION_ERROR;
6602            END IF;
6603         END IF;
6604 
6605         --Bug #2723498 11.5.9 enhancement - Splitting assets by serial numbers
6606         --check if serial number data exists
6607 
6608         l_srl_exists := '?';
6609         OPEN srl_exist_chk(x_txlv_rec.id);
6610         FETCH srl_exist_chk INTO l_srl_exists;
6611         IF srl_exist_chk%NOTFOUND THEN
6612             NULL;
6613         END IF;
6614         CLOSE srl_exist_chk;
6615 
6616         IF l_srl_exists = '!' THEN
6617 
6618             l_iipv_count := 0;
6619             OPEN get_srl_csr(x_txlv_rec.id);
6620             LOOP
6621                 FETCH  get_srl_csr INTO l_iipv_id;
6622                 EXIT WHEN get_srl_csr%NOTFOUND;
6623                 l_iipv_count := l_iipv_count + 1;
6624                 l_iipv_tbl(l_iipv_count).id := l_iipv_id;
6625             END LOOP;
6626             CLOSE get_srl_csr;
6627 
6628             IF l_iipv_tbl.COUNT > 0 THEN
6629                 --delete the old records
6630                 okl_txl_itm_insts_pub.delete_txl_itm_insts(
6631                    p_api_version   => p_api_version,
6632                    p_init_msg_list => p_init_msg_list,
6633                    x_return_status => x_return_status,
6634                    x_msg_count     => x_msg_count,
6635                    x_msg_data      => x_msg_data,
6636                    p_iipv_tbl      => l_iipv_tbl);
6637 
6638                IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
6639                    RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
6640                ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
6641                    RAISE OKL_API.G_EXCEPTION_ERROR;
6642                END IF;
6643             END IF;
6644 
6645             --create new srl numbers if required
6646             create_srl_num_trx(p_api_version           => p_api_version,
6647                            p_init_msg_list             => p_init_msg_list,
6648                            x_return_status             => x_return_status,
6649                            x_msg_count                 => x_msg_count,
6650                            x_msg_data                  => x_msg_data,
6651                            p_cle_id                    => p_cle_id,
6652                            p_split_into_individuals_yn => p_split_into_individuals_yn,
6653                            p_split_into_units          => p_split_into_units,
6654                            p_ib_tbl                    => l_ib_tbl,
6655                            p_tas_id                    => x_txlv_rec.tas_id,
6656                            p_tal_id                    => x_txlv_rec.id,
6657                            p_asd_id                    => NULL);
6658 
6659             IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
6660                 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
6661             ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
6662                RAISE OKL_API.G_EXCEPTION_ERROR;
6663             END IF;
6664 
6665         ELSIF l_srl_exists = '?' THEN
6666              --create new srl numbers if required
6667             create_srl_num_trx(p_api_version               => p_api_version,
6668                                p_init_msg_list             => p_init_msg_list,
6669                                x_return_status             => x_return_status,
6670                                x_msg_count                 => x_msg_count,
6671                                x_msg_data                  => x_msg_data,
6672                                p_cle_id                    => p_cle_id,
6673                                p_split_into_individuals_yn => p_split_into_individuals_yn,
6674                                p_split_into_units          => p_split_into_units,
6675                                p_ib_tbl                    => l_ib_tbl,
6676                                p_tas_id                    => x_txlv_rec.tas_id,
6677                                p_tal_id                    => x_txlv_rec.id,
6678                                p_asd_id                    => NULL);
6679 
6680             IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
6681                 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
6682             ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
6683                RAISE OKL_API.G_EXCEPTION_ERROR;
6684             END IF;
6685         END IF; -- srl number exists
6686         --Bug #2723498 11.5.9 enhancement - Splitting assets by serial numbers
6687      --Bug fix# 2744213 : positioning of end if
6688      END IF; -- chenges in transaction
6689     END IF;
6690     OKL_API.END_ACTIVITY (x_msg_count,
6691                          x_msg_data );
6692 
6693     EXCEPTION
6694     WHEN OKL_API.G_EXCEPTION_ERROR THEN
6695     x_return_status := OKL_API.HANDLE_EXCEPTIONS(
6696                                l_api_name,
6697                                G_PKG_NAME,
6698                                'OKL_API.G_RET_STS_ERROR',
6699                                x_msg_count,
6700                                x_msg_data,
6701                                '_PVT');
6702     WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
6703     x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
6704                               l_api_name,
6705                               G_PKG_NAME,
6706                               'OKL_API.G_RET_STS_UNEXP_ERROR',
6707                               x_msg_count,
6708                               x_msg_data,
6709                               '_PVT');
6710     WHEN OTHERS THEN
6711     x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
6712                               l_api_name,
6713                               G_PKG_NAME,
6714                               'OTHERS',
6715                               x_msg_count,
6716                               x_msg_data,
6717                               '_PVT');
6718 
6719 END Create_Split_Transaction;
6720 ------------------------------------------------------------------------------
6721 --Bug# 3156924
6722 --API Name    : Create_Split_Transaction
6723 --Description : Process API to create Split Aseet Transaction Records in
6724 --              OKL_TXL_ASSETS_V and OKL_TXD_ASSETS_V
6725 --Note        : Original split asset trx creation callo has been overloaded
6726 --              to include p_trx_date(trx_date) as parameter. This old
6727 --              signature preserved for backward compatability. It will
6728 --              create split asset transaction on SYSDATE
6729 --History     :
6730 --              30-Jan-2004    avsingh  Creation
6731 --End of Comments
6732 ------------------------------------------------------------------------------
6733 PROCEDURE Create_Split_Transaction(p_api_version               IN  NUMBER,
6734                                    p_init_msg_list             IN  VARCHAR2,
6735                                    x_return_status             OUT NOCOPY VARCHAR2,
6736                                    x_msg_count                 OUT NOCOPY NUMBER,
6737                                    x_msg_data                  OUT NOCOPY VARCHAR2,
6738                                    p_cle_id                    IN  NUMBER,
6739                                    p_split_into_individuals_yn IN  VARCHAR2,
6740                                    p_split_into_units          IN  NUMBER,
6741                                    p_ib_tbl                    IN  ib_tbl_type,
6742                                    x_txdv_tbl                  OUT NOCOPY txdv_tbl_type,
6743                                    x_txlv_rec                  OUT NOCOPY txlv_rec_type,
6744                                    x_trxv_rec                  OUT NOCOPY trxv_rec_type) IS
6745 
6746 l_return_status        VARCHAR2(1)  DEFAULT OKL_API.G_RET_STS_SUCCESS;
6747 l_api_name             CONSTANT VARCHAR2(30) := 'CREATE_SPLIT_TRANSACTION';
6748 l_api_version          CONSTANT NUMBER := 1.0;
6749 
6750 l_trx_date             DATE := SYSDATE;
6751 
6752 BEGIN
6753     x_return_status := OKL_API.G_RET_STS_SUCCESS;
6754     -- Call start_activity to create savepoint, check compatibility
6755     -- and initialize message list
6756     x_return_status := OKL_API.START_ACTIVITY (
6757                                l_api_name
6758                                ,p_init_msg_list
6759                                ,'_PVT'
6760                                ,x_return_status);
6761     -- Check if activity started successfully
6762     IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
6763        RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
6764     ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
6765        RAISE OKL_API.G_EXCEPTION_ERROR;
6766     END IF;
6767 
6768     --call the overloded procedure :
6769     Create_Split_Transaction(p_api_version               => p_api_version,
6770                              p_init_msg_list             => p_init_msg_list,
6771                              x_return_status             => x_return_status,
6772                              x_msg_count                 => x_msg_count,
6773                              x_msg_data                  => x_msg_data,
6774                              p_cle_id                    => p_cle_id,
6775                              p_split_into_individuals_yn => p_split_into_individuals_yn,
6776                              p_split_into_units          => p_split_into_units,
6777                              p_ib_tbl                    => p_ib_tbl,
6778                              --Bug# 3156924
6779                              p_trx_date                  => l_trx_date,
6780                              x_txdv_tbl                  => x_txdv_tbl,
6781                              x_txlv_rec                  => x_txlv_rec,
6782                              x_trxv_rec                  => x_trxv_rec);
6783 
6784     IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
6785        RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
6786     ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
6787        RAISE OKL_API.G_EXCEPTION_ERROR;
6788     END IF;
6789     OKL_API.END_ACTIVITY (x_msg_count,
6790                          x_msg_data );
6791 
6792     EXCEPTION
6793     WHEN OKL_API.G_EXCEPTION_ERROR THEN
6794     x_return_status := OKL_API.HANDLE_EXCEPTIONS(
6795                                l_api_name,
6796                                G_PKG_NAME,
6797                                'OKL_API.G_RET_STS_ERROR',
6798                                x_msg_count,
6799                                x_msg_data,
6800                                '_PVT');
6801     WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
6802     x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
6803                               l_api_name,
6804                               G_PKG_NAME,
6805                               'OKL_API.G_RET_STS_UNEXP_ERROR',
6806                               x_msg_count,
6807                               x_msg_data,
6808                               '_PVT');
6809     WHEN OTHERS THEN
6810     x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
6811                               l_api_name,
6812                               G_PKG_NAME,
6813                               'OTHERS',
6814                               x_msg_count,
6815                               x_msg_data,
6816                               '_PVT');
6817 
6818 END Create_Split_Transaction;
6819 -------------------------------------------------------------------------------------
6820 --Bug# 3156924
6821 --API Name    : Create_Split_Transaction
6822 --Description : Process API to create Split Aseet Transaction Records in
6823 --              OKL_TXL_ASSETS_V and OKL_TXD_ASSETS_V
6824 --Note        : New signature added to accomodate p_trx_date being passed. This is
6825 --              the one called from the UI. This will create transactions in OKL
6826 --              _TXL_ITM_INSTS if the asset is serialized ad being split by units
6827 --             UI will mark the selected records as selected_for_split_flag = 'Y'
6828 --             for all the assets being split out
6829 --History     :
6830 --              30-Jan-2004    avsingh  Creation
6831 --End of Comments
6832 ------------------------------------------------------------------------------
6833 PROCEDURE Create_Split_Transaction(p_api_version   IN  NUMBER,
6834                                    p_init_msg_list IN  VARCHAR2,
6835                                    x_return_status OUT NOCOPY VARCHAR2,
6836                                    x_msg_count     OUT NOCOPY NUMBER,
6837                                    x_msg_data      OUT NOCOPY VARCHAR2,
6838                                    p_cle_id        IN  NUMBER,
6839                                    p_split_into_individuals_yn IN VARCHAR2,
6840                                    p_split_into_units IN NUMBER,
6841                                    p_trx_date  IN  DATE,
6842                                    x_txdv_tbl  OUT NOCOPY txdv_tbl_type,
6843                                    x_txlv_rec  OUT NOCOPY txlv_rec_type,
6844                                    x_trxv_rec  OUT NOCOPY trxv_rec_type) IS
6845 
6846 l_return_status        VARCHAR2(1)  DEFAULT OKL_API.G_RET_STS_SUCCESS;
6847 l_api_name             CONSTANT VARCHAR2(30) := 'CREATE_SPLIT_TRANSACTION';
6848 l_api_version          CONSTANT NUMBER := 1.0;
6849 l_ib_tbl               ib_tbl_type;
6850 
6851     /*
6852     -- mvasudev, 08/23/2004
6853     -- Added PROCEDURE to enable Business Event
6854     */
6855         PROCEDURE raise_business_event(
6856            x_return_status OUT NOCOPY VARCHAR2
6857     )
6858         IS
6859        CURSOR l_okl_cle_chr_csr IS
6860        SELECT dnz_chr_id
6861        FROM   okc_k_lines_b
6862        WHERE  id = p_cle_id;
6863 
6864       l_parameter_list           wf_parameter_list_t;
6865         BEGIN
6866 
6867        FOR l_okl_cle_chr_rec IN l_okl_cle_chr_csr
6868            LOOP
6869 
6870                  wf_event.AddParameterToList(G_WF_ITM_CONTRACT_ID,l_okl_cle_chr_rec.dnz_chr_id,l_parameter_list);
6871                  wf_event.AddParameterToList(G_WF_ITM_ASSET_ID,p_cle_id,l_parameter_list);
6872                  wf_event.AddParameterToList(G_WF_ITM_TRANS_DATE,fnd_date.date_to_canonical(p_trx_date),l_parameter_list);
6873 
6874          OKL_WF_PVT.raise_event (p_api_version    => p_api_version,
6875                                  p_init_msg_list  => p_init_msg_list,
6876                                                                  x_return_status  => x_return_status,
6877                                                                  x_msg_count      => x_msg_count,
6878                                                                  x_msg_data       => x_msg_data,
6879                                                                  p_event_name     => G_WF_EVT_KHR_SPLIT_ASSET_REQ,
6880                                                                  p_parameters     => l_parameter_list);
6881 
6882           END LOOP;
6883 
6884      EXCEPTION
6885      WHEN OTHERS THEN
6886        x_return_status := OKL_API.G_RET_STS_UNEXP_ERROR;
6887        RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
6888      END raise_business_event;
6889 
6890     /*
6891     -- mvasudev, 08/23/2004
6892     -- END, PROCEDURE to enable Business Event
6893     */
6894 
6895 BEGIN
6896     x_return_status := OKL_API.G_RET_STS_SUCCESS;
6897     -- Call start_activity to create savepoint, check compatibility
6898     -- and initialize message list
6899     x_return_status := OKL_API.START_ACTIVITY (
6900                                l_api_name
6901                                ,p_init_msg_list
6902                                ,'_PVT'
6903                                ,x_return_status);
6904     -- Check if activity started successfully
6905     IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
6906        RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
6907     ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
6908        RAISE OKL_API.G_EXCEPTION_ERROR;
6909     END IF;
6910 
6911     --call the overloded procedure :
6912     Create_Split_Transaction(p_api_version               => p_api_version,
6913                              p_init_msg_list             => p_init_msg_list,
6914                              x_return_status             => x_return_status,
6915                              x_msg_count                 => x_msg_count,
6916                              x_msg_data                  => x_msg_data,
6917                              p_cle_id                    => p_cle_id,
6918                              p_split_into_individuals_yn => p_split_into_individuals_yn,
6919                              p_split_into_units          => p_split_into_units,
6920                              p_ib_tbl                    => l_ib_tbl,
6921                              p_trx_date                  => p_trx_date,
6922                              x_txdv_tbl                  => x_txdv_tbl,
6923                              x_txlv_rec                  => x_txlv_rec,
6924                              x_trxv_rec                  => x_trxv_rec);
6925 
6926 
6927     IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
6928        RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
6929     ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
6930        RAISE OKL_API.G_EXCEPTION_ERROR;
6931     END IF;
6932 
6933        /*
6934        -- mvasudev, 08/23/2004
6935        -- Code change to enable Business Event
6936        */
6937         raise_business_event(x_return_status => x_return_status);
6938         IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
6939            RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
6940         ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
6941            RAISE OKL_API.G_EXCEPTION_ERROR;
6942         END IF;
6943 
6944        /*
6945        -- mvasudev, 08/23/2004
6946        -- END, Code change to enable Business Event
6947    */
6948 
6949     OKL_API.END_ACTIVITY (x_msg_count,
6950                          x_msg_data );
6951 
6952     EXCEPTION
6953     WHEN OKL_API.G_EXCEPTION_ERROR THEN
6954     x_return_status := OKL_API.HANDLE_EXCEPTIONS(
6955                                l_api_name,
6956                                G_PKG_NAME,
6957                                'OKL_API.G_RET_STS_ERROR',
6958                                x_msg_count,
6959                                x_msg_data,
6960                                '_PVT');
6961     WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
6962     x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
6963                               l_api_name,
6964                               G_PKG_NAME,
6965                               'OKL_API.G_RET_STS_UNEXP_ERROR',
6966                               x_msg_count,
6967                               x_msg_data,
6968                               '_PVT');
6969     WHEN OTHERS THEN
6970     x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
6971                               l_api_name,
6972                               G_PKG_NAME,
6973                               'OTHERS',
6974                               x_msg_count,
6975                               x_msg_data,
6976                               '_PVT');
6977 
6978 END Create_Split_Transaction;
6979 ---------------
6980 --Bug# 3156924
6981 ---------------
6982 --Bug #2723498 : 11.5.9 Split by serial numbers enhancement
6983 --------------------------------------------------------------------------------
6984 --Start of Comments
6985 --API Name    : Create_Split_Transaction
6986 --Description : Process API to create Split Aseet Transaction Records in
6987 --              OKL_TXL_ASSETS_V and OKL_TXD_ASSETS_V
6988 --              1. Take the line details to be split
6989 --              2. Set the status of the contract as inactive
6990 --              3. Create and save source record into okl_trx_assets_v
6991 --              4. Create and save target record into okl_txd_assets_v
6992 --Note        : old signature kept for backward compatability. This will be the
6993 --              the one called from the UI. This will create transactions in OKL
6994 --              _TXL_ITM_INSTS if the asset is serialized ad being split by units
6995 --             UI will mark the selected records as selected_for_split_flag = 'Y'
6996 --             for all the assets being split out
6997 --History     :
6998 --              10-OCT-2001    avsingh  Creation
6999 --End of Comments
7000 ------------------------------------------------------------------------------
7001 PROCEDURE Create_Split_Transaction(p_api_version   IN  NUMBER,
7002                                    p_init_msg_list IN  VARCHAR2,
7003                                    x_return_status OUT NOCOPY VARCHAR2,
7004                                    x_msg_count     OUT NOCOPY NUMBER,
7005                                    x_msg_data      OUT NOCOPY VARCHAR2,
7006                                    p_cle_id        IN  NUMBER,
7007                                    p_split_into_individuals_yn IN VARCHAR2,
7008                                    p_split_into_units IN NUMBER,
7009                                    x_txdv_tbl  OUT NOCOPY txdv_tbl_type,
7010                                    x_txlv_rec  OUT NOCOPY txlv_rec_type,
7011                                    x_trxv_rec  OUT NOCOPY trxv_rec_type) IS
7012 
7013 l_return_status        VARCHAR2(1)  DEFAULT OKL_API.G_RET_STS_SUCCESS;
7014 l_api_name             CONSTANT VARCHAR2(30) := 'CREATE_SPLIT_TRANSACTION';
7015 l_api_version          CONSTANT NUMBER := 1.0;
7016 l_ib_tbl               ib_tbl_type;
7017 BEGIN
7018     x_return_status := OKL_API.G_RET_STS_SUCCESS;
7019     -- Call start_activity to create savepoint, check compatibility
7020     -- and initialize message list
7021     x_return_status := OKL_API.START_ACTIVITY (
7022                                l_api_name
7023                                ,p_init_msg_list
7024                                ,'_PVT'
7025                                ,x_return_status);
7026     -- Check if activity started successfully
7027     IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
7028        RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
7029     ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
7030        RAISE OKL_API.G_EXCEPTION_ERROR;
7031     END IF;
7032 
7033     --call the overloded procedure :
7034     Create_Split_Transaction(p_api_version               => p_api_version,
7035                              p_init_msg_list             => p_init_msg_list,
7036                              x_return_status             => x_return_status,
7037                              x_msg_count                 => x_msg_count,
7038                              x_msg_data                  => x_msg_data,
7039                              p_cle_id                    => p_cle_id,
7040                              p_split_into_individuals_yn => p_split_into_individuals_yn,
7041                              p_split_into_units          => p_split_into_units,
7042                              p_ib_tbl                    => l_ib_tbl,
7043                              x_txdv_tbl                  => x_txdv_tbl,
7044                              x_txlv_rec                  => x_txlv_rec,
7045                              x_trxv_rec                  => x_trxv_rec);
7046 
7047     IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
7048        RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
7049     ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
7050        RAISE OKL_API.G_EXCEPTION_ERROR;
7051     END IF;
7052     OKL_API.END_ACTIVITY (x_msg_count,
7053                          x_msg_data );
7054 
7055     EXCEPTION
7056     WHEN OKL_API.G_EXCEPTION_ERROR THEN
7057     x_return_status := OKL_API.HANDLE_EXCEPTIONS(
7058                                l_api_name,
7059                                G_PKG_NAME,
7060                                'OKL_API.G_RET_STS_ERROR',
7061                                x_msg_count,
7062                                x_msg_data,
7063                                '_PVT');
7064     WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
7065     x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
7066                               l_api_name,
7067                               G_PKG_NAME,
7068                               'OKL_API.G_RET_STS_UNEXP_ERROR',
7069                               x_msg_count,
7070                               x_msg_data,
7071                               '_PVT');
7072     WHEN OTHERS THEN
7073     x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
7074                               l_api_name,
7075                               G_PKG_NAME,
7076                               'OTHERS',
7077                               x_msg_count,
7078                               x_msg_data,
7079                               '_PVT');
7080 
7081 END Create_Split_Transaction;
7082 --------------------------------------------------------------------------------
7083 --Start of Comments
7084 --Procedure Name  :  Update Split transaction
7085 --Description     :  Updates the split asset number and description
7086 --                   on transaction details table
7087 --History         :
7088 --                   08-Apr-2001  ashish.singh Created
7089 --End of Comments
7090 --------------------------------------------------------------------------------
7091 PROCEDURE Update_Split_Transaction(p_api_version   IN  NUMBER,
7092                                    p_init_msg_list IN  VARCHAR2,
7093                                    x_return_status OUT NOCOPY VARCHAR2,
7094                                    x_msg_count     OUT NOCOPY NUMBER,
7095                                    x_msg_data      OUT NOCOPY VARCHAR2,
7096                                    p_cle_id        IN  NUMBER,
7097                                    p_txdv_tbl      IN  txdv_tbl_type,
7098                                    x_txdv_tbl      OUT NOCOPY txdv_tbl_type) IS
7099 
7100  l_return_status        VARCHAR2(1)  DEFAULT OKL_API.G_RET_STS_SUCCESS;
7101  l_api_name             CONSTANT VARCHAR2(30) := 'UPDATE_SPLIT_TRX';
7102  l_api_version          CONSTANT NUMBER := 1.0;
7103 
7104   CURSOR fa_line_csr(p_cle_id IN NUMBER) IS
7105   SELECT cle.id
7106   FROM   OKC_K_LINES_B cle,
7107          OKC_LINE_STYLES_B lse
7108   WHERE  cle.cle_id = p_cle_id
7109   AND    cle.lse_id = lse.id
7110   AND    lse.lty_code = 'FIXED_ASSET'
7111    --Bug# 2761799 : Do not check for active status on sysdate
7112   --AND    trunc(nvl(start_date,sysdate)) <= trunc(sysdate)
7113   --AND    trunc(nvl(end_date,sysdate+1)) > trunc(sysdate)
7114   --Bug# 5946411: ER :commented following
7115  -- AND    cle.sts_code = 'BOOKED';
7116  ;
7117   --Bug# 5946411: ER End
7118   l_txlv_rec  txlv_rec_type;
7119   l_txdv_tbl  txdv_tbl_type;
7120   l_txdv_rec  txdv_rec_type;
7121   lx_txdv_rec txdv_rec_type;
7122   lx_txdv_tbl txdv_tbl_type;
7123 
7124   l_no_data_found BOOLEAN DEFAULT TRUE;
7125   l_fa_line_id    NUMBER;
7126 
7127   j NUMBER;
7128 
7129 BEGIN
7130 
7131   -- Call start_activity to create savepoint, check compatibility
7132   -- and initialize message list
7133   x_return_status := OKL_API.START_ACTIVITY (
7134                                l_api_name
7135                                ,p_init_msg_list
7136                                ,'_PVT'
7137                                ,x_return_status);
7138    -- Check if activity started successfully
7139    IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
7140        RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
7141    ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
7142        RAISE OKL_API.G_EXCEPTION_ERROR;
7143    END IF;
7144 
7145   --Verify cle_id
7146   x_return_status := verify_cle_id(p_cle_id => p_cle_id);
7147   IF x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR THEN
7148         RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
7149   ELSIF x_return_status = OKL_API.G_RET_STS_ERROR THEN
7150         RAISE OKL_API.G_EXCEPTION_ERROR;
7151   END IF;
7152 
7153   --get fixed asset line
7154   OPEN   fa_line_csr(p_cle_id => p_cle_id) ;
7155   FETCH  fa_line_csr INTO l_fa_line_id;
7156   IF fa_line_csr%NOTFOUND THEN
7157       NULL; --not exactly
7158   ELSE
7159       l_txlv_rec := get_txlv_rec(l_fa_line_id, l_no_data_found);
7160       IF l_no_data_found THEN
7161           NULL;
7162           --dbms_output.put_line('No pending Split Asset Transactions for this Asset');
7163           OKL_API.set_message(p_app_name     => G_APP_NAME,
7164                               p_msg_name     => G_SPLIT_AST_TRX_NOT_FOUND
7165                               );
7166       ELSE
7167             l_txdv_tbl := p_txdv_tbl;
7168             --1. update txd assets
7169             IF l_txdv_tbl.LAST IS NOT NULL THEN
7170             j := 0;
7171             LOOP
7172                 IF l_txdv_tbl.LAST = j THEN
7173                     EXIT;
7174             ELSE
7175                 j := j+1;
7176                 --dbms_output.put_line('J ='||to_char(j));
7177                 l_txdv_rec.id := l_txdv_tbl(j).id;
7178                 --Bug# 4994713: convert asset number to upper case
7179                 l_txdv_rec.asset_number := UPPER(l_txdv_tbl(j).asset_number);
7180                 l_txdv_rec.description := l_txdv_tbl(j).description;
7181                 --dbms_output.put_line('l_txdv_rec.id'||to_char(l_txdv_rec.id));
7182                 IF (l_txdv_rec.id IS NULL) OR (l_txdv_rec.id = OKL_API.G_MISS_NUM) THEN
7183                     EXIT;
7184                 ELSE
7185 
7186                     OKL_TXD_ASSETS_PUB.update_txd_asset_def(
7187                               p_api_version    => p_api_version,
7188                               p_init_msg_list  => p_init_msg_list,
7189                               x_return_status  => x_return_status,
7190                               x_msg_count      => x_msg_count,
7191                               x_msg_data       => x_msg_data,
7192                               p_adpv_rec       => l_txdv_rec,
7193                               x_adpv_rec       => lx_txdv_rec);
7194                     --dbms_output.put_line('after updating the transaction details for asset number '||l_txdv_rec.asset_number||':'||x_return_status);
7195                     IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
7196                         RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
7197                     ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
7198                         RAISE OKL_API.G_EXCEPTION_ERROR;
7199                     END IF;
7200                     ---
7201 
7202                     IF lx_txdv_rec.target_kle_id IS NULL THEN
7203                         x_return_status := validate_attributes(p_txdv_rec => lx_txdv_rec);
7204 
7205                         IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
7206                             RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
7207                         ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
7208                             RAISE OKL_API.G_EXCEPTION_ERROR;
7209                         END IF;
7210                    END IF;
7211 
7212                     --validate if original asset number has been modified
7213                     IF l_txlv_rec.kle_id = lx_txdv_rec.target_kle_id THEN
7214                        IF (lx_txdv_rec.asset_number <> l_txlv_rec.asset_number)
7215                          OR (lx_txdv_rec.description <> l_txlv_rec.description) THEN
7216                            OKL_API.Set_message(p_app_name  => G_APP_NAME,
7217                                                p_msg_name  => G_SPLIT_PARENT_NUMBER_CHANGE);
7218                            RAISE OKL_API.G_EXCEPTION_ERROR;
7219                        END IF;
7220                     END IF;
7221 
7222                     lx_txdv_tbl(j) := lx_txdv_rec;
7223                  END IF;
7224             END IF;
7225             END LOOP;
7226          END IF;
7227       -----
7228       END IF;
7229    END IF;
7230    x_txdv_tbl := lx_txdv_tbl;
7231    OKL_API.END_ACTIVITY (x_msg_count,
7232                           x_msg_data );
7233     EXCEPTION
7234     WHEN OKL_API.G_EXCEPTION_ERROR THEN
7235     x_return_status := OKL_API.HANDLE_EXCEPTIONS(
7236                                l_api_name,
7237                                G_PKG_NAME,
7238                                'OKL_API.G_RET_STS_ERROR',
7239                                x_msg_count,
7240                                x_msg_data,
7241                                '_PVT');
7242     WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
7243     x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
7244                               l_api_name,
7245                               G_PKG_NAME,
7246                               'OKL_API.G_RET_STS_UNEXP_ERROR',
7247                               x_msg_count,
7248                               x_msg_data,
7249                               '_PVT');
7250     WHEN OTHERS THEN
7251     x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
7252                               l_api_name,
7253                               G_PKG_NAME,
7254                               'OTHERS',
7255                               x_msg_count,
7256                               x_msg_data,
7257                               '_PVT');
7258 END Update_Split_Transaction;
7259 ---------------------------------------------------------------------------
7260   -- FUNCTION get_rec for: OKC_K_ITEMS_V
7261 ---------------------------------------------------------------------------
7262   FUNCTION get_cimv_rec (
7263     p_cle_id                       IN  NUMBER,
7264     x_no_data_found                OUT NOCOPY BOOLEAN
7265   ) RETURN cimv_rec_type IS
7266     CURSOR okc_cimv_csr (p_cle_id                 IN NUMBER) IS
7267     SELECT
7268             ID,
7269             OBJECT_VERSION_NUMBER,
7270             CLE_ID,
7271             CHR_ID,
7272             CLE_ID_FOR,
7273             DNZ_CHR_ID,
7274             OBJECT1_ID1,
7275             OBJECT1_ID2,
7276             JTOT_OBJECT1_CODE,
7277             UOM_CODE,
7278             EXCEPTION_YN,
7279             NUMBER_OF_ITEMS,
7280             UPG_ORIG_SYSTEM_REF,
7281             UPG_ORIG_SYSTEM_REF_ID,
7282             PRICED_ITEM_YN,
7283             CREATED_BY,
7284             CREATION_DATE,
7285             LAST_UPDATED_BY,
7286             LAST_UPDATE_DATE,
7287             LAST_UPDATE_LOGIN
7288       FROM Okc_K_Items_V
7289      WHERE okc_k_items_v.cle_id     = p_cle_id;
7290     l_cimv_rec                     cimv_rec_type;
7291   BEGIN
7292     x_no_data_found := TRUE;
7293     -- Get current database values
7294     OPEN okc_cimv_csr (p_cle_id);
7295     FETCH okc_cimv_csr INTO
7296               l_cimv_rec.ID,
7297               l_cimv_rec.OBJECT_VERSION_NUMBER,
7298               l_cimv_rec.CLE_ID,
7299               l_cimv_rec.CHR_ID,
7300               l_cimv_rec.CLE_ID_FOR,
7301               l_cimv_rec.DNZ_CHR_ID,
7302               l_cimv_rec.OBJECT1_ID1,
7303               l_cimv_rec.OBJECT1_ID2,
7304               l_cimv_rec.JTOT_OBJECT1_CODE,
7305               l_cimv_rec.UOM_CODE,
7306               l_cimv_rec.EXCEPTION_YN,
7307               l_cimv_rec.NUMBER_OF_ITEMS,
7308               l_cimv_rec.UPG_ORIG_SYSTEM_REF,
7309               l_cimv_rec.UPG_ORIG_SYSTEM_REF_ID,
7310               l_cimv_rec.PRICED_ITEM_YN,
7311               l_cimv_rec.CREATED_BY,
7312               l_cimv_rec.CREATION_DATE,
7313               l_cimv_rec.LAST_UPDATED_BY,
7314               l_cimv_rec.LAST_UPDATE_DATE,
7315               l_cimv_rec.LAST_UPDATE_LOGIN;
7316     x_no_data_found := okc_cimv_csr%NOTFOUND;
7317     CLOSE okc_cimv_csr;
7318     RETURN(l_cimv_rec);
7319   END get_cimv_rec;
7320 
7321   FUNCTION get_cimv_rec (
7322     p_cle_id                     IN NUMBER
7323   ) RETURN cimv_rec_type IS
7324     l_row_notfound                 BOOLEAN := TRUE;
7325   BEGIN
7326     RETURN(get_cimv_rec(p_cle_id, l_row_notfound));
7327   END get_cimv_rec;
7328 ---------------------------------------------------------------------------
7329 -- FUNCTION get_rec for: OKL_K_LINES_V
7330 ---------------------------------------------------------------------------
7331 FUNCTION get_klev_rec (
7332     p_cle_id                       IN  NUMBER,
7333     x_no_data_found                OUT NOCOPY BOOLEAN
7334   ) RETURN klev_rec_type IS
7335     CURSOR okl_k_lines_v_csr (p_id                 IN NUMBER) IS
7336       SELECT
7337         ID,
7338         OBJECT_VERSION_NUMBER,
7339         KLE_ID,
7340         STY_ID,
7341         PRC_CODE,
7342         FCG_CODE,
7343         NTY_CODE,
7344         ESTIMATED_OEC,
7345         LAO_AMOUNT,
7346         TITLE_DATE,
7347         FEE_CHARGE,
7348         LRS_PERCENT,
7349         INITIAL_DIRECT_COST,
7350         PERCENT_STAKE,
7351         PERCENT,
7352         EVERGREEN_PERCENT,
7353         AMOUNT_STAKE,
7354         OCCUPANCY,
7355         COVERAGE,
7356         RESIDUAL_PERCENTAGE,
7357         DATE_LAST_INSPECTION,
7358         DATE_SOLD,
7359         LRV_AMOUNT,
7360         CAPITAL_REDUCTION,
7361         DATE_NEXT_INSPECTION_DUE,
7362         DATE_RESIDUAL_LAST_REVIEW,
7363         DATE_LAST_REAMORTISATION,
7364         VENDOR_ADVANCE_PAID,
7365         WEIGHTED_AVERAGE_LIFE,
7366         TRADEIN_AMOUNT,
7367         BOND_EQUIVALENT_YIELD,
7368         TERMINATION_PURCHASE_AMOUNT,
7369         REFINANCE_AMOUNT,
7370         YEAR_BUILT,
7371         DELIVERED_DATE,
7372         CREDIT_TENANT_YN,
7373         DATE_LAST_CLEANUP,
7374         YEAR_OF_MANUFACTURE,
7375         COVERAGE_RATIO,
7376         REMARKETED_AMOUNT,
7377         GROSS_SQUARE_FOOTAGE,
7378         PRESCRIBED_ASSET_YN,
7379         DATE_REMARKETED,
7380         NET_RENTABLE,
7381         REMARKET_MARGIN,
7382         DATE_LETTER_ACCEPTANCE,
7383         REPURCHASED_AMOUNT,
7384         DATE_COMMITMENT_EXPIRATION,
7385         DATE_REPURCHASED,
7386         DATE_APPRAISAL,
7387         RESIDUAL_VALUE,
7388         APPRAISAL_VALUE,
7389         SECURED_DEAL_YN,
7390         GAIN_LOSS,
7391         FLOOR_AMOUNT,
7392         RE_LEASE_YN,
7393         PREVIOUS_CONTRACT,
7394         TRACKED_RESIDUAL,
7395         DATE_TITLE_RECEIVED,
7396         AMOUNT,
7397         ATTRIBUTE_CATEGORY,
7398         ATTRIBUTE1,
7399         ATTRIBUTE2,
7400         ATTRIBUTE3,
7401         ATTRIBUTE4,
7402         ATTRIBUTE5,
7403         ATTRIBUTE6,
7404         ATTRIBUTE7,
7405         ATTRIBUTE8,
7406         ATTRIBUTE9,
7407         ATTRIBUTE10,
7408         ATTRIBUTE11,
7409         ATTRIBUTE12,
7410         ATTRIBUTE13,
7411         ATTRIBUTE14,
7412         ATTRIBUTE15,
7413         STY_ID_FOR,
7414         CLG_ID,
7415         CREATED_BY,
7416         CREATION_DATE,
7417         LAST_UPDATED_BY,
7418         LAST_UPDATE_DATE,
7419         LAST_UPDATE_LOGIN,
7420         DATE_FUNDING,
7421         DATE_FUNDING_REQUIRED,
7422         DATE_ACCEPTED,
7423         DATE_DELIVERY_EXPECTED,
7424         OEC,
7425         CAPITAL_AMOUNT,
7426         RESIDUAL_GRNTY_AMOUNT,
7427         RESIDUAL_CODE,
7428         RVI_PREMIUM,
7429         CREDIT_NATURE,
7430         CAPITALIZED_INTEREST,
7431         CAPITAL_REDUCTION_PERCENT,
7432         DATE_PAY_INVESTOR_START,
7433         PAY_INVESTOR_FREQUENCY,
7434         PAY_INVESTOR_EVENT,
7435         PAY_INVESTOR_REMITTANCE_DAYS,
7436         --Bug# 2998115
7437         FEE_TYPE,
7438 --Bug# 3143522 : Subsidies
7439        SUBSIDY_ID,
7440        --SUBSIDIZED_OEC,
7441        --SUBSIDIZED_CAP_AMOUNT,
7442        PRE_TAX_YIELD,
7443        AFTER_TAX_YIELD,
7444        IMPLICIT_INTEREST_RATE,
7445        IMPLICIT_NON_IDC_INTEREST_RATE,
7446        PRE_TAX_IRR,
7447        AFTER_TAX_IRR,
7448        SUBSIDY_OVERRIDE_AMOUNT,
7449 --quote
7450        SUB_PRE_TAX_YIELD,
7451        SUB_AFTER_TAX_YIELD,
7452        SUB_IMPL_INTEREST_RATE,
7453        SUB_IMPL_NON_IDC_INT_RATE,
7454        SUB_PRE_TAX_IRR,
7455        SUB_AFTER_TAX_IRR,
7456 --Bug# 2994971
7457        ITEM_INSURANCE_CATEGORY,
7458 --Bug# 3973640 : 11.5.10+ schema changes
7459        QTE_ID,
7460        FUNDING_DATE,
7461        STREAM_TYPE_SUBCLASS
7462        -- Bug#4508050 - smadhava - Added - Start
7463        , FEE_PURPOSE_CODE
7464        , DATE_FUNDING_EXPECTED
7465        , DATE_DELIVERY_EXPECTED
7466        , MANUFACTURER_NAME
7467        , MODEL_NUMBER
7468        , DOWN_PAYMENT_RECEIVER_CODE
7469        , CAPITALIZE_DOWN_PAYMENT_YN
7470        -- Bug#4508050 - smadhava - Added - End
7471        --Bug# 4631549
7472        ,Expected_asset_cost
7473 
7474       FROM OKL_K_LINES_V
7475       WHERE OKL_K_LINES_V.id     = p_id;
7476       l_klev_rec                   klev_rec_type;
7477   BEGIN
7478 
7479     x_no_data_found := TRUE;
7480     -- Get current database values
7481     OPEN okl_k_lines_v_csr (p_cle_id);
7482     FETCH okl_k_lines_v_csr INTO
7483        l_klev_rec.ID,
7484         l_klev_rec.OBJECT_VERSION_NUMBER,
7485         l_klev_rec.KLE_ID,
7486         l_klev_rec.STY_ID,
7487         l_klev_rec.PRC_CODE,
7488         l_klev_rec.FCG_CODE,
7489         l_klev_rec.NTY_CODE,
7490         l_klev_rec.ESTIMATED_OEC,
7491         l_klev_rec.LAO_AMOUNT,
7492         l_klev_rec.TITLE_DATE,
7493         l_klev_rec.FEE_CHARGE,
7494         l_klev_rec.LRS_PERCENT,
7495         l_klev_rec.INITIAL_DIRECT_COST,
7496         l_klev_rec.PERCENT_STAKE,
7497         l_klev_rec.PERCENT,
7498         l_klev_rec.EVERGREEN_PERCENT,
7499         l_klev_rec.AMOUNT_STAKE,
7500         l_klev_rec.OCCUPANCY,
7501         l_klev_rec.COVERAGE,
7502         l_klev_rec.RESIDUAL_PERCENTAGE,
7503         l_klev_rec.DATE_LAST_INSPECTION,
7504         l_klev_rec.DATE_SOLD,
7505         l_klev_rec.LRV_AMOUNT,
7506         l_klev_rec.CAPITAL_REDUCTION,
7507         l_klev_rec.DATE_NEXT_INSPECTION_DUE,
7508         l_klev_rec.DATE_RESIDUAL_LAST_REVIEW,
7509         l_klev_rec.DATE_LAST_REAMORTISATION,
7510         l_klev_rec.VENDOR_ADVANCE_PAID,
7511         l_klev_rec.WEIGHTED_AVERAGE_LIFE,
7512         l_klev_rec.TRADEIN_AMOUNT,
7513         l_klev_rec.BOND_EQUIVALENT_YIELD,
7514         l_klev_rec.TERMINATION_PURCHASE_AMOUNT,
7515         l_klev_rec.REFINANCE_AMOUNT,
7516         l_klev_rec.YEAR_BUILT,
7517         l_klev_rec.DELIVERED_DATE,
7518         l_klev_rec.CREDIT_TENANT_YN,
7519         l_klev_rec.DATE_LAST_CLEANUP,
7520         l_klev_rec.YEAR_OF_MANUFACTURE,
7521         l_klev_rec.COVERAGE_RATIO,
7522         l_klev_rec.REMARKETED_AMOUNT,
7523         l_klev_rec.GROSS_SQUARE_FOOTAGE,
7524         l_klev_rec.PRESCRIBED_ASSET_YN,
7525         l_klev_rec.DATE_REMARKETED,
7526         l_klev_rec.NET_RENTABLE,
7527         l_klev_rec.REMARKET_MARGIN,
7528         l_klev_rec.DATE_LETTER_ACCEPTANCE,
7529         l_klev_rec.REPURCHASED_AMOUNT,
7530         l_klev_rec.DATE_COMMITMENT_EXPIRATION,
7531         l_klev_rec.DATE_REPURCHASED,
7532         l_klev_rec.DATE_APPRAISAL,
7533         l_klev_rec.RESIDUAL_VALUE,
7534         l_klev_rec.APPRAISAL_VALUE,
7535         l_klev_rec.SECURED_DEAL_YN,
7536         l_klev_rec.GAIN_LOSS,
7537         l_klev_rec.FLOOR_AMOUNT,
7538         l_klev_rec.RE_LEASE_YN,
7539         l_klev_rec.PREVIOUS_CONTRACT,
7540         l_klev_rec.TRACKED_RESIDUAL,
7541         l_klev_rec.DATE_TITLE_RECEIVED,
7542         l_klev_rec.AMOUNT,
7543         l_klev_rec.ATTRIBUTE_CATEGORY,
7544         l_klev_rec.ATTRIBUTE1,
7545         l_klev_rec.ATTRIBUTE2,
7546         l_klev_rec.ATTRIBUTE3,
7547         l_klev_rec.ATTRIBUTE4,
7548         l_klev_rec.ATTRIBUTE5,
7549         l_klev_rec.ATTRIBUTE6,
7550         l_klev_rec.ATTRIBUTE7,
7551         l_klev_rec.ATTRIBUTE8,
7552         l_klev_rec.ATTRIBUTE9,
7553         l_klev_rec.ATTRIBUTE10,
7554         l_klev_rec.ATTRIBUTE11,
7555         l_klev_rec.ATTRIBUTE12,
7556         l_klev_rec.ATTRIBUTE13,
7557         l_klev_rec.ATTRIBUTE14,
7558         l_klev_rec.ATTRIBUTE15,
7559         l_klev_rec.STY_ID_FOR,
7560         l_klev_rec.CLG_ID,
7561         l_klev_rec.CREATED_BY,
7562         l_klev_rec.CREATION_DATE,
7563         l_klev_rec.LAST_UPDATED_BY,
7564         l_klev_rec.LAST_UPDATE_DATE,
7565         l_klev_rec.LAST_UPDATE_LOGIN,
7566         l_klev_rec.DATE_FUNDING,
7567         l_klev_rec.DATE_FUNDING_REQUIRED,
7568         l_klev_rec.DATE_ACCEPTED,
7569         l_klev_rec.DATE_DELIVERY_EXPECTED,
7570         l_klev_rec.OEC,
7571         l_klev_rec.CAPITAL_AMOUNT,
7572         l_klev_rec.RESIDUAL_GRNTY_AMOUNT,
7573         l_klev_rec.RESIDUAL_CODE,
7574         l_klev_rec.RVI_PREMIUM,
7575         l_klev_rec.CREDIT_NATURE,
7576         l_klev_rec.CAPITALIZED_INTEREST,
7577         l_klev_rec.CAPITAL_REDUCTION_PERCENT,
7578         l_klev_rec.DATE_PAY_INVESTOR_START,
7579         l_klev_rec.PAY_INVESTOR_FREQUENCY,
7580         l_klev_rec.PAY_INVESTOR_EVENT,
7581         l_klev_rec.PAY_INVESTOR_REMITTANCE_DAYS,
7582         --Bug# 2998115:
7583         l_klev_rec.FEE_TYPE,
7584 --Bug#3143522 : Subsidies
7585        l_klev_rec.SUBSIDY_ID,
7586        --l_klev_rec.SUBSIDIZED_OEC,
7587        --l_klev_rec.SUBSIDIZED_CAP_AMOUNT,
7588        l_klev_rec.PRE_TAX_YIELD,
7589        l_klev_rec.AFTER_TAX_YIELD,
7590        l_klev_rec.IMPLICIT_INTEREST_RATE,
7591        l_klev_rec.IMPLICIT_NON_IDC_INTEREST_RATE,
7592        l_klev_rec.PRE_TAX_IRR,
7593        l_klev_rec.AFTER_TAX_IRR,
7594        l_klev_rec.SUBSIDY_OVERRIDE_AMOUNT,
7595 --quote
7596        l_klev_rec.SUB_PRE_TAX_YIELD,
7597        l_klev_rec.SUB_AFTER_TAX_YIELD,
7598        l_klev_rec.SUB_IMPL_INTEREST_RATE,
7599        l_klev_rec.SUB_IMPL_NON_IDC_INT_RATE,
7600        l_klev_rec.SUB_PRE_TAX_IRR,
7601        l_klev_rec.SUB_AFTER_TAX_IRR,
7602 --Bug# 2994971 :
7603        l_klev_rec.ITEM_INSURANCE_CATEGORY,
7604 --Bug# 3973640 : 11.5.10+ schema changes
7605        l_klev_rec.QTE_ID,
7606        l_klev_rec.FUNDING_DATE,
7607        l_klev_rec.STREAM_TYPE_SUBCLASS
7608        -- Bug#4508050 - smadhava - Added - Start
7609        , l_klev_rec.FEE_PURPOSE_CODE
7610        , l_klev_rec.DATE_FUNDING_EXPECTED
7611        , l_klev_rec.DATE_DELIVERY_EXPECTED
7612        , l_klev_rec.MANUFACTURER_NAME
7613        , l_klev_rec.MODEL_NUMBER
7614        , l_klev_rec.DOWN_PAYMENT_RECEIVER_CODE
7615        , l_klev_rec.CAPITALIZE_DOWN_PAYMENT_YN
7616        -- Bug#4508050 - smadhava - Added - End
7617        --Bug# 4631549
7618        ,l_klev_rec.Expected_Asset_Cost
7619 ;
7620     x_no_data_found := okl_k_lines_v_csr%NOTFOUND;
7621     CLOSE okl_k_lines_v_csr;
7622     RETURN(l_klev_rec);
7623   END get_klev_rec;
7624 
7625 FUNCTION get_klev_rec (
7626     p_cle_id                    IN NUMBER
7627   ) RETURN klev_rec_type IS
7628     l_row_notfound                 BOOLEAN := TRUE;
7629   BEGIN
7630     RETURN(get_klev_rec(p_cle_id, l_row_notfound));
7631 END get_klev_rec;
7632 ---------------------------------------------------------------------------
7633 -- FUNCTION get_rec for: OKC_K_LINES_V
7634 ---------------------------------------------------------------------------
7635 FUNCTION get_clev_rec (
7636     p_cle_id                     IN NUMBER,
7637     x_no_data_found                OUT NOCOPY BOOLEAN
7638   ) RETURN clev_rec_type IS
7639     CURSOR okc_clev_csr (p_id IN NUMBER) IS
7640     SELECT
7641             ID,
7642             OBJECT_VERSION_NUMBER,
7643             SFWT_FLAG,
7644             CHR_ID,
7645             CLE_ID,
7646             LSE_ID,
7647             LINE_NUMBER,
7648             STS_CODE,
7649             DISPLAY_SEQUENCE,
7650             TRN_CODE,
7651             DNZ_CHR_ID,
7652             COMMENTS,
7653             ITEM_DESCRIPTION,
7654                   OKE_BOE_DESCRIPTION,
7655             HIDDEN_IND,
7656                   PRICE_UNIT,
7657                   PRICE_UNIT_PERCENT,
7658             PRICE_NEGOTIATED,
7659                PRICE_NEGOTIATED_RENEWED,
7660             PRICE_LEVEL_IND,
7661             INVOICE_LINE_LEVEL_IND,
7662             DPAS_RATING,
7663             BLOCK23TEXT,
7664             EXCEPTION_YN,
7665             TEMPLATE_USED,
7666             DATE_TERMINATED,
7667             NAME,
7668             START_DATE,
7669             END_DATE,
7670                   DATE_RENEWED,
7671             UPG_ORIG_SYSTEM_REF,
7672             UPG_ORIG_SYSTEM_REF_ID,
7673              ORIG_SYSTEM_SOURCE_CODE,
7674              ORIG_SYSTEM_ID1,
7675              ORIG_SYSTEM_REFERENCE1,
7676             ATTRIBUTE_CATEGORY,
7677             ATTRIBUTE1,
7678             ATTRIBUTE2,
7679             ATTRIBUTE3,
7680             ATTRIBUTE4,
7681             ATTRIBUTE5,
7682             ATTRIBUTE6,
7683             ATTRIBUTE7,
7684             ATTRIBUTE8,
7685             ATTRIBUTE9,
7686             ATTRIBUTE10,
7687             ATTRIBUTE11,
7688             ATTRIBUTE12,
7689             ATTRIBUTE13,
7690             ATTRIBUTE14,
7691             ATTRIBUTE15,
7692             CREATED_BY,
7693             CREATION_DATE,
7694             LAST_UPDATED_BY,
7695             LAST_UPDATE_DATE,
7696             PRICE_TYPE,
7697             CURRENCY_CODE,
7698                 CURRENCY_CODE_RENEWED,
7699             LAST_UPDATE_LOGIN
7700       FROM Okc_K_Lines_V
7701      WHERE okc_k_lines_v.id     = p_id;
7702     l_clev_rec                     clev_rec_type;
7703   BEGIN
7704     x_no_data_found := TRUE;
7705     -- Get current database values
7706     OPEN okc_clev_csr (p_cle_id);
7707     FETCH okc_clev_csr INTO
7708               l_clev_rec.ID,
7709               l_clev_rec.OBJECT_VERSION_NUMBER,
7710               l_clev_rec.SFWT_FLAG,
7711               l_clev_rec.CHR_ID,
7712               l_clev_rec.CLE_ID,
7713               l_clev_rec.LSE_ID,
7714               l_clev_rec.LINE_NUMBER,
7715               l_clev_rec.STS_CODE,
7716               l_clev_rec.DISPLAY_SEQUENCE,
7717               l_clev_rec.TRN_CODE,
7718               l_clev_rec.DNZ_CHR_ID,
7719               l_clev_rec.COMMENTS,
7720               l_clev_rec.ITEM_DESCRIPTION,
7721                     l_clev_rec.OKE_BOE_DESCRIPTION,
7722               l_clev_rec.HIDDEN_IND,
7723                     l_clev_rec.PRICE_UNIT,
7724                     l_clev_rec.PRICE_UNIT_PERCENT,
7725               l_clev_rec.PRICE_NEGOTIATED,
7726                     l_clev_rec.PRICE_NEGOTIATED_RENEWED,
7727               l_clev_rec.PRICE_LEVEL_IND,
7728               l_clev_rec.INVOICE_LINE_LEVEL_IND,
7729               l_clev_rec.DPAS_RATING,
7730               l_clev_rec.BLOCK23TEXT,
7731               l_clev_rec.EXCEPTION_YN,
7732               l_clev_rec.TEMPLATE_USED,
7733               l_clev_rec.DATE_TERMINATED,
7734               l_clev_rec.NAME,
7735               l_clev_rec.START_DATE,
7736               l_clev_rec.END_DATE,
7737                     l_clev_rec.DATE_RENEWED,
7738               l_clev_rec.UPG_ORIG_SYSTEM_REF,
7739               l_clev_rec.UPG_ORIG_SYSTEM_REF_ID,
7740               l_clev_rec.ORIG_SYSTEM_SOURCE_CODE,
7741               l_clev_rec.ORIG_SYSTEM_ID1,
7742               l_clev_rec.ORIG_SYSTEM_REFERENCE1,
7743               l_clev_rec.ATTRIBUTE_CATEGORY,
7744               l_clev_rec.ATTRIBUTE1,
7745               l_clev_rec.ATTRIBUTE2,
7746               l_clev_rec.ATTRIBUTE3,
7747               l_clev_rec.ATTRIBUTE4,
7748               l_clev_rec.ATTRIBUTE5,
7749               l_clev_rec.ATTRIBUTE6,
7750               l_clev_rec.ATTRIBUTE7,
7751               l_clev_rec.ATTRIBUTE8,
7752               l_clev_rec.ATTRIBUTE9,
7753               l_clev_rec.ATTRIBUTE10,
7754               l_clev_rec.ATTRIBUTE11,
7755               l_clev_rec.ATTRIBUTE12,
7756               l_clev_rec.ATTRIBUTE13,
7757               l_clev_rec.ATTRIBUTE14,
7758               l_clev_rec.ATTRIBUTE15,
7759               l_clev_rec.CREATED_BY,
7760               l_clev_rec.CREATION_DATE,
7761               l_clev_rec.LAST_UPDATED_BY,
7762               l_clev_rec.LAST_UPDATE_DATE,
7763               l_clev_rec.PRICE_TYPE,
7764               l_clev_rec.CURRENCY_CODE,
7765                   l_clev_rec.CURRENCY_CODE_RENEWED,
7766               l_clev_rec.LAST_UPDATE_LOGIN;
7767     x_no_data_found := okc_clev_csr%NOTFOUND;
7768     CLOSE okc_clev_csr;
7769     RETURN(l_clev_rec);
7770 END get_clev_rec;
7771 
7772 FUNCTION get_clev_rec (
7773     p_cle_id                     IN NUMBER
7774   ) RETURN clev_rec_type IS
7775     l_row_notfound                 BOOLEAN := TRUE;
7776 BEGIN
7777     RETURN(get_clev_rec(p_cle_id, l_row_notfound));
7778 END get_clev_rec;
7779 --Bug #2648280 Begin
7780 --------------------------------------------------------------------------------
7781 -- Procedure to split streams : will be called after split asset processing
7782 -- Bug #2648280  - During the split asset process streams were not getting split
7783 -- for the financial asset lines getting split. Splitting of streams being done
7784 -- in this procedure
7785 -- Bug # 2723498 : 11.5.9 Enhancement Multi-GAAP support . Split reporting streams
7786 --------------------------------------------------------------------------------
7787 PROCEDURE split_streams(p_api_version      IN  NUMBER,
7788                         p_init_msg_list    IN  VARCHAR2,
7789                         x_return_status    OUT NOCOPY   VARCHAR2,
7790                         x_msg_count        OUT NOCOPY   NUMBER,
7791                         x_msg_data         OUT NOCOPY   VARCHAR2,
7792                         p_txl_id           IN  NUMBER)  AS
7793 
7794     l_api_name          CONSTANT VARCHAR2(256) := 'SPLIT_STREAMS';
7795     l_api_version       CONSTANT NUMBER       := 1.0;
7796     l_return_status     VARCHAR2(1)           := OKL_API.G_RET_STS_SUCCESS;
7797 
7798 
7799     l_stmv_rec Okl_Streams_pub.stmv_rec_type;
7800     l_selv_tbl Okl_Streams_pub.selv_tbl_type;
7801     x_stmv_rec Okl_Streams_pub.stmv_rec_type;
7802     x_selv_tbl Okl_Streams_pub.selv_tbl_type;
7803 
7804     --Cursor to fetch split child records (for split asset as well as split asset into components)
7805     CURSOR l_split_trx_csr1(p_trxline_id IN NUMBER) IS
7806     SELECT txd.split_percent,
7807            txl.kle_id,
7808            txd.target_kle_id,
7809            cle.cle_id  cle_id,
7810            target_cle.cle_id target_cle_id,
7811            txd.quantity,
7812            txl.current_units
7813     FROM   okl_txd_assets_b  txd,
7814            okl_txl_Assets_b  txl,
7815            okc_k_lines_b     cle,
7816            okc_k_lines_b     target_cle
7817     WHERE  txl.tal_type  = 'ALI'
7818     AND    txd.tal_id    = txl.id
7819     AND    txl.id        = p_trxline_id
7820     AND    txl.kle_id    <> txd.target_kle_id
7821     AND    cle.id        = txl.kle_id
7822     AND    target_cle.id = txd.target_kle_id
7823     --Bug# 3502142
7824     ORDER BY NVL(txd.split_percent,-1);
7825 
7826     --Bug# 3502142
7827     subtype l_split_trx_rec is l_split_trx_csr1%ROWTYPE;
7828     type l_split_trx_tbl is table of l_split_trx_rec INDEX BY BINARY_INTEGER;
7829     l_split_trx_tbl1 l_split_trx_tbl;
7830 
7831     --Cursor to fetch split parent record for Split Asset (Not split Asset into components)
7832     CURSOR l_split_trx_csr2(p_trxline_id IN NUMBER) IS
7833     SELECT txd.split_percent,
7834            txl.kle_id,
7835            txd.target_kle_id,
7836            cle.cle_id  cle_id,
7837            target_cle.cle_id target_cle_id,
7838            txd.quantity,
7839            txl.current_units
7840     FROM   okl_txd_assets_b  txd,
7841            okl_txl_Assets_b  txl,
7842            okc_k_lines_b     cle,
7843            okc_k_lines_b     target_cle
7844     WHERE  txl.tal_type  = 'ALI'
7845     AND    txd.tal_id    = txl.id
7846     AND    txl.id        = p_trxline_id
7847     AND    txl.kle_id    = txd.target_kle_id
7848     AND    cle.id        = txl.kle_id
7849     AND    target_cle.id = txd.target_kle_id;
7850 
7851 
7852 
7853     l_split_trx_rec1  l_split_trx_csr1%ROWTYPE;
7854     l_split_trx_rec2  l_split_trx_csr2%ROWTYPE;
7855 
7856         l_kle_id          NUMBER;
7857     l_split_factor    NUMBER;
7858 
7859     --Bug# 3066375:
7860     --Cursor to find any linked asset lines
7861     CURSOR l_lnk_asst_csr1 (p_cle_id IN NUMBER, p_target_cle_id IN NUMBER) IS
7862     SELECT lnk_cle.id,
7863            lnk_target_cle.id,
7864            --Bug 3502142
7865            lnk_target_cle.cle_id
7866     FROM   okc_k_lines_b     lnk_cle,
7867            okc_k_items       lnk_cim,
7868            okc_line_styles_b lnk_lse,
7869            okc_k_lines_b     lnk_target_cle,
7870            okc_k_items       lnk_target_cim,
7871            okc_line_styles_b lnk_target_lse
7872     WHERE  lnk_cim.object1_id1              = TO_CHAR(p_cle_id)
7873     AND    lnk_cim.object1_id2              = '#'
7874     AND    lnk_cim.jtot_object1_code        = 'OKX_COVASST'
7875     AND    lnk_cle.id                       = lnk_cim.cle_id
7876     AND    lnk_cle.dnz_chr_id               = lnk_cim.dnz_chr_id
7877     AND    lnk_cle.lse_id                   = lnk_lse.id
7878     AND    lnk_lse.lty_code                 IN ('LINK_FEE_ASSET','LINK_SERV_ASSET','LINK_USAGE_ASSET')
7879     AND    lnk_target_cim.object1_id1       = TO_CHAR(p_target_cle_id)
7880     AND    lnk_target_cim.object1_id2       = '#'
7881     AND    lnk_target_cim.jtot_object1_code = 'OKX_COVASST'
7882     AND    lnk_target_cle.id                = lnk_target_cim.cle_id
7883     AND    lnk_target_cle.dnz_chr_id        = lnk_target_cim.dnz_chr_id
7884     AND    lnk_target_cle.lse_id            = lnk_target_lse.id
7885     AND    lnk_target_lse.lty_code          IN ('LINK_FEE_ASSET','LINK_SERV_ASSET','LINK_USAGE_ASSET')
7886     AND    lnk_cle.cle_id                   = lnk_target_cle.cle_id
7887     AND    lnk_cle.id                      <> lnk_target_cle.id
7888     AND    lnk_cle.dnz_chr_id               = lnk_target_cle.dnz_chr_id;
7889 
7890     CURSOR l_lnk_asst_csr2 (p_cle_id IN NUMBER, p_target_cle_id IN NUMBER) IS
7891     SELECT lnk_cle.id,
7892            lnk_target_cle.id,
7893            --Bug 3502142
7894            lnk_target_cle.cle_id
7895     FROM   okc_k_lines_b     lnk_cle,
7896            okc_k_items       lnk_cim,
7897            okc_line_styles_b lnk_lse,
7898            okc_k_lines_b     lnk_target_cle,
7899            okc_k_items       lnk_target_cim,
7900            okc_line_styles_b lnk_target_lse
7901     WHERE  lnk_cim.object1_id1              = TO_CHAR(p_cle_id)
7902     AND    lnk_cim.object1_id2              = '#'
7903     AND    lnk_cim.jtot_object1_code        = 'OKX_COVASST'
7904     AND    lnk_cle.id                       = lnk_cim.cle_id
7905     AND    lnk_cle.dnz_chr_id               = lnk_cim.dnz_chr_id
7906     AND    lnk_cle.lse_id                   = lnk_lse.id
7907     AND    lnk_lse.lty_code                 IN ('LINK_FEE_ASSET','LINK_SERV_ASSET','LINK_USAGE_ASSET')
7908     AND    lnk_target_cim.object1_id1       = TO_CHAR(p_target_cle_id)
7909     AND    lnk_target_cim.object1_id2       = '#'
7910     AND    lnk_target_cim.jtot_object1_code = 'OKX_COVASST'
7911     AND    lnk_target_cle.id                = lnk_target_cim.cle_id
7912     AND    lnk_target_cle.dnz_chr_id        = lnk_target_cim.dnz_chr_id
7913     AND    lnk_target_cle.lse_id            = lnk_target_lse.id
7914     AND    lnk_target_lse.lty_code          IN ('LINK_FEE_ASSET','LINK_SERV_ASSET','LINK_USAGE_ASSET')
7915     AND    lnk_cle.cle_id                   = lnk_target_cle.cle_id
7916     AND    lnk_cle.id                       = lnk_target_cle.id
7917     AND    lnk_cle.dnz_chr_id               = lnk_target_cle.dnz_chr_id;
7918 
7919 
7920     l_lnk_cle_id         okc_k_lines_b.id%TYPE;
7921     l_lnk_target_cle_id  okc_k_lines_b.id%TYPE;
7922 
7923     -- Bug# 3502142
7924     l_lnk_top_cle_id     okc_k_lines_b.id%TYPE;
7925     --Bug# 6344223
7926     l_highest_split_comp_amt VARCHAR2(30);
7927     l_count NUMBER;
7928 
7929 --------------------------------------------------------------------------------
7930 -- Local procedure to do split streams processing
7931 -- IN parameters - p_kle_id (child top line)
7932 --               - p_parent_kle_id (parent top line)
7933 --               - p_split_factor (split factor)
7934 --------------------------------------------------------------------------------
7935     PROCEDURE Process_Split_Streams(p_api_version      IN  NUMBER,
7936                           p_init_msg_list    IN  VARCHAR2,
7937                           x_return_status    OUT NOCOPY   VARCHAR2,
7938                           x_msg_count        OUT NOCOPY   NUMBER,
7939                           x_msg_data         OUT NOCOPY   VARCHAR2,
7940                           p_kle_id           IN  NUMBER,
7941                           p_split_factor     IN  NUMBER,
7942                           p_parent_kle_id    IN  NUMBER,
7943                           p_txl_id           IN  NUMBER,
7944                           --Bug# 6344223
7945                           p_highest_split_comp_amt IN VARCHAR2 DEFAULT 'N') IS
7946 
7947     l_stmv_rec      Okl_Streams_pub.stmv_rec_type;
7948     l_selv_tbl      Okl_Streams_pub.selv_tbl_type;
7949     l_stmv_rec_hist Okl_Streams_pub.stmv_rec_type;
7950     l_selv_tbl_hist Okl_Streams_pub.selv_tbl_type;
7951     x_stmv_rec      Okl_Streams_pub.stmv_rec_type;
7952     x_selv_tbl      Okl_Streams_pub.selv_tbl_type;
7953 
7954 
7955     CURSOR l_strm_csr ( kleId NUMBER, status VARCHAR2) IS
7956     SELECT str.Id,
7957            str.transaction_number,
7958            str.sgn_code SGN_CODE,
7959            str.khr_id,
7960            str.sty_id,
7961            str.say_code,
7962            str.active_yn,
7963            str.kle_id,
7964            --Bug# 3502142
7965            str.purpose_code,
7966            str.comments,
7967            str.date_current,
7968            -- Bug# 4775555
7969            sty.stream_type_purpose,
7970            --Bug# 6344223
7971            str.link_hist_stream_id
7972     FROM okl_streams str,
7973          okl_strm_type_b sty
7974     WHERE
7975     str.kle_id = kleId
7976     AND str.say_code = status
7977     AND str.sty_id = sty.id;
7978 
7979     --Bug# 3502142
7980     CURSOR l_strmele_csr( kleId NUMBER, styId NUMBER, strId NUMBER,
7981                           purposeCode VARCHAR2, activeYn VARCHAR2) IS
7982     SELECT ele.id,
7983            ele.DATE_BILLED,
7984            ele.STREAM_ELEMENT_DATE,
7985            ele.AMOUNT,
7986            ele.ACCRUED_YN,
7987            ele.comments,
7988            str.transaction_number,
7989            str.sgn_code SGN_CODE,
7990            ele.stm_id STM_ID,
7991            ele.se_line_number SE_LINE_NUMBER
7992     FROM  okl_strm_elements ele,
7993           okl_streams str
7994     WHERE ele.stm_id = str.id
7995     AND str.id     = strId
7996     AND str.kle_id = kleId
7997     AND str.sty_id = styId
7998     AND UPPER(str.say_code) = 'CURR'
7999     AND UPPER(str.active_yn) = activeYn
8000     AND NVL(str.purpose_code,'ORIG') = purposeCode
8001     ORDER BY 3;
8002 
8003     l_strms_rec       l_strm_csr%ROWTYPE;
8004     l_strmele_rec     l_strmele_csr%ROWTYPE;
8005     i                 NUMBER;
8006     l_kle_id          NUMBER;
8007 
8008     --cursor to fetch transaction number
8009     CURSOR l_sifseq_csr IS
8010     SELECT okl_sif_seq.NEXTVAL
8011     FROM   dual;
8012 
8013     -- Bug# 3502142: start
8014     CURSOR curr_code_csr(p_kle_id IN NUMBER) IS
8015     SELECT currency_code
8016     FROM okc_k_lines_b
8017     WHERE id = p_kle_id;
8018 
8019     l_currency_code OKC_K_LINES_B.currency_code%type;
8020 
8021     l_active_yn          OKL_STREAMS.ACTIVE_YN%TYPE;
8022 
8023     --Bug# 4775555
8024     l_stmv_rec_temp Okl_Streams_pub.stmv_rec_type;
8025 
8026    --Bug# 6344223
8027    CURSOR l_txd_csr(p_trxline_id IN NUMBER) IS
8028     SELECT txd.id,
8029            txd.split_percent,
8030            txl.kle_id,
8031            txd.target_kle_id,
8032            cle.cle_id  cle_id,
8033            target_cle.cle_id target_cle_id,
8034            txd.quantity,
8035            txl.current_units
8036     FROM   okl_txd_assets_b  txd,
8037            okl_txl_Assets_b  txl,
8038            okc_k_lines_b     cle,
8039            okc_k_lines_b     target_cle
8040     WHERE  txl.tal_type  = 'ALI'
8041     AND    txd.tal_id    = txl.id
8042     AND    txl.id        = p_trxline_id
8043     AND    txl.kle_id    <> txd.target_kle_id
8044     AND    cle.id        = txl.kle_id
8045     AND    target_cle.id = txd.target_kle_id;
8046 
8047 
8048   l_split_pymt NUMBER;
8049   l_split_pymt_sum NUMBER;
8050   l_child_split_factor NUMBER;
8051   l_rounded_amount NUMBER;
8052   l_child_amount NUMBER;
8053 
8054   BEGIN
8055         x_return_status :=  OKL_API.G_RET_STS_SUCCESS;
8056 
8057         IF ( p_parent_kle_id = p_kle_id ) THEN
8058                     l_kle_id := p_kle_id;
8059                 ELSE
8060                     l_kle_id := p_parent_kle_id;
8061         END IF;
8062 
8063         -- Bug# 3502142
8064         open curr_code_csr(p_kle_id => p_kle_id);
8065         fetch curr_code_csr into l_currency_code;
8066         close curr_code_csr;
8067 
8068         FOR l_strms_rec IN l_strm_csr( l_kle_id, 'CURR' )
8069         LOOP
8070 
8071           -- Bug# 4775555
8072           -- Disbursement Basis streams should only be Historized here
8073           -- They will be recreated later by the call to
8074           -- okl_stream_generator_pvt.create_disb_streams
8075           IF (l_strms_rec.stream_type_purpose
8076                IN ('INVESTOR_RENT_DISB_BASIS',
8077                    'INVESTOR_RESIDUAL_DISB_BASIS','INVESTOR_PRINCIPAL_DISB_BASIS','INVESTOR_INTEREST_DISB_BASIS')) THEN
8078 
8079             IF (p_parent_kle_id = p_kle_id) THEN
8080 
8081               l_stmv_rec_hist              := l_stmv_rec_temp;
8082               l_stmv_rec_hist.id           := l_strms_rec.id;
8083               l_stmv_rec_hist.kle_id       := l_kle_id;
8084               l_stmv_rec_hist.say_code     := 'HIST';
8085               l_stmv_rec_hist.active_yn    := 'N';
8086               l_stmv_rec_hist.date_history := SYSDATE;
8087               --Bug# 6344223
8088 		  l_stmv_rec_hist.link_hist_stream_id := l_strms_rec.link_hist_stream_id;
8089               Okl_Streams_Pub.update_streams(
8090                 p_api_version   => l_api_version
8091                ,p_init_msg_list => p_init_msg_list
8092                ,x_return_status => x_return_status
8093                ,x_msg_count     => x_msg_count
8094                ,x_msg_data      => x_msg_data
8095                ,p_stmv_rec      => l_stmv_rec_hist
8096                ,x_stmv_rec      => x_stmv_rec);
8097 
8098                IF (x_return_status <> OKL_API.G_RET_STS_SUCCESS) THEN
8099                    RAISE G_EXCEPTION_HALT_VALIDATION;
8100                END IF;
8101 
8102             END IF;
8103 
8104           ELSE
8105 
8106             l_stmv_rec.sty_id := l_strms_rec.sty_id;
8107             --l_stmv_rec.khr_id := p_chr_id;
8108             l_stmv_rec.khr_id := l_strms_rec.khr_id;
8109 
8110             IF ((p_parent_kle_id = p_kle_id ) AND (p_split_factor = 0)) THEN
8111                 l_stmv_rec.say_code := 'HIST';
8112                 l_stmv_rec.active_yn := 'N';
8113                 l_stmv_rec.date_history := SYSDATE;
8114                 --Bug# 6344223
8115                 l_stmv_rec.link_hist_stream_id := l_strms_rec.link_hist_stream_id;
8116             ELSE
8117                 l_stmv_rec.say_code := 'CURR';
8118                 --Bug# 6344223
8119                 l_stmv_rec.link_hist_stream_id := l_strms_rec.id;
8120                 --Bug# 3502142
8121                 --l_stmv_rec.active_yn := 'Y';
8122                 --l_stmv_rec.date_current := SYSDATE;
8123             END IF;
8124             --Bug# 3502142
8125             --l_stmv_rec.active_yn := 'Y';
8126             --l_stmv_rec.date_current := SYSDATE;
8127             l_stmv_rec.transaction_number := l_strms_rec.transaction_number;
8128             l_stmv_rec.sgn_code := l_strms_rec.sgn_code;
8129             --Bug# 3502142
8130             l_stmv_rec.purpose_code := l_strms_rec.purpose_code;
8131             l_stmv_rec.active_yn := l_strms_rec.active_yn;
8132             l_stmv_rec.comments := l_strms_rec.comments;
8133             l_stmv_rec.date_current := l_strms_rec.date_current;
8134 
8135             i := 0;
8136             -- Bug# 3502142
8137 
8138             if NVL(l_strms_rec.purpose_code,'ORIG') = 'ORIG' then
8139               l_active_yn := 'Y';
8140             elsif l_strms_rec.purpose_code = 'REPORT' then
8141               l_active_yn := 'N';
8142             end if;
8143 
8144             FOR l_strmele_rec IN l_strmele_csr(l_kle_id, l_strms_rec.sty_id, l_strms_rec.id,
8145                                                NVL(l_strms_rec.purpose_code,'ORIG'), l_active_yn)
8146               LOOP
8147                 i := i + 1;
8148                 l_selv_tbl(i).accrued_yn          := l_strmele_rec.accrued_yn;
8149                 l_selv_tbl(i).stream_element_date := l_strmele_rec.stream_element_date;
8150                 l_selv_tbl(i).date_billed         := l_strmele_rec.date_billed;
8151                 l_selv_tbl(i).se_line_number      := l_strmele_rec.SE_LINE_NUMBER;
8152                 l_selv_tbl(i).comments            := l_strmele_rec.comments;
8153 
8154                 IF p_split_factor <> 0 THEN
8155                    --for parent line adjust the stream element amount
8156                    l_split_pymt_sum := 0;
8157 
8158                      --get the sum of stream element amount for child asset if
8159                      -- calculating cost for the parent line or for the
8160                      -- child line with highest split percent
8161                     IF (p_parent_kle_id = p_kle_id ) OR (p_highest_split_comp_amt='Y') THEN
8162 
8163                            FOR l_txd_rec in l_txd_csr(p_txl_id)
8164                            LOOP
8165                             IF NVL(l_txd_rec.split_percent,0) IN (0,OKL_API.G_MISS_NUM) THEN
8166                               l_child_split_factor := l_txd_rec.quantity/l_txd_rec.current_units;
8167                            ELSE
8168                               l_child_split_factor := l_txd_rec.split_percent/100;
8169                            END IF;
8170                             l_split_pymt := l_strmele_rec.amount * l_child_split_factor;
8171                             okl_accounting_util.round_amount(
8172                                                          p_api_version    => p_api_version,
8173                                                          p_init_msg_list  => p_init_msg_list,
8174                                                          x_return_status  => x_return_status,
8175                                                          x_msg_count      => x_msg_count,
8176                                                          x_msg_data       => x_msg_data,
8177                                                          p_amount         => l_split_pymt,
8178                                                          p_currency_code  => l_currency_code,
8179                                                          p_round_option   => 'STM',
8180                                                          x_rounded_amount => l_rounded_amount
8181                                                          );
8182                             IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
8183                               RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
8184                             ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
8185                               RAISE OKL_API.G_EXCEPTION_ERROR;
8186                             END IF;
8187                             l_split_pymt_sum := l_split_pymt_sum + l_rounded_amount;
8188                           END LOOP;
8189                       END IF;
8190 
8191                      IF (p_parent_kle_id = p_kle_id ) THEN
8192                            --for split by unit--
8193                           l_selv_tbl(i).amount :=l_strmele_rec.amount - l_split_pymt_sum;
8194 
8195                      ELSE
8196                            --claculate the amount for child line
8197                            l_child_amount :=l_strmele_rec.amount * p_split_factor;
8198                            okl_accounting_util.round_amount(
8199                                                        p_api_version    => p_api_version,
8200                                                          p_init_msg_list  => p_init_msg_list,
8201                                                          x_return_status  => x_return_status,
8202                                                          x_msg_count      => x_msg_count,
8203                                                          x_msg_data       => x_msg_data,
8204                                                          p_amount         => l_child_amount,
8205                                                          p_currency_code  => l_currency_code,
8206                                                          p_round_option   => 'STM',
8207                                                          x_rounded_amount => l_rounded_amount
8208                                                          );
8209                            IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
8210                               RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
8211                             ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
8212                               RAISE OKL_API.G_EXCEPTION_ERROR;
8213                            END IF;
8214                            l_child_amount :=l_rounded_amount;
8215                            --adjust the amount for highest asset percent if split by component
8216                            if p_highest_split_comp_amt='Y' THEN
8217                                l_selv_tbl(i).amount :=l_child_amount+ l_strmele_rec.amount - l_split_pymt_sum;
8218                             else
8219                                -- no adjustment required
8220                                l_selv_tbl(i).amount :=l_child_amount;
8221                            END IF;
8222 
8223                         END IF; --end if for parent line check
8224                        --dbms_output.put_line('l_selv_tbl(i).amount  '||l_selv_tbl(i).amount );
8225                 END IF; --p_split_factor
8226                 -----------------------------------------------------------------
8227                 --If (p_parent_kle_id = p_kle_id ) then
8228                     --l_selv_tbl(i).stm_id := l_strms_rec.id;
8229                     --l_selv_tbl(i).id     := l_strmele_rec.id;
8230                 --End If;
8231                 -----------------------------------------------------------------
8232                 l_selv_tbl_hist(i)        := l_selv_tbl(i);
8233                 l_selv_tbl_hist(i).amount := l_strmele_rec.amount;
8234                 l_selv_tbl_hist(i).stm_id := l_strms_rec.id;
8235                 l_selv_tbl_hist(i).id     := l_strmele_rec.id;
8236 
8237             END LOOP;
8238 
8239             IF (i <> 0) THEN
8240             IF (p_parent_kle_id = p_kle_id ) THEN
8241                 ------------------------------------------------------------------------
8242                 --Bug# : historize old streams and recreate with new values for old asset
8243                 ------------------------------------------------------------------------
8244                 l_stmv_rec_hist          := l_stmv_rec;
8245                 l_stmv_rec_hist.id       := l_strms_rec.id;
8246                 l_stmv_rec_hist.kle_id   := l_kle_id;
8247                 l_stmv_rec_hist.say_code := 'HIST';
8248                 l_stmv_rec_hist.active_yn := 'N';
8249                 l_stmv_rec_hist.date_history := SYSDATE;
8250                 --Bug# 6344223
8251                 l_stmv_rec_hist.link_hist_stream_id := l_strms_rec.link_hist_stream_id;
8252                 Okl_Streams_Pub.update_streams(
8253                                p_api_version   => l_api_version
8254                               ,p_init_msg_list => p_init_msg_list
8255                               ,x_return_status => x_return_status
8256                               ,x_msg_count     => x_msg_count
8257                               ,x_msg_data      => x_msg_data
8258                               ,p_stmv_rec      => l_stmv_rec_hist
8259                               ,p_selv_tbl      => l_selv_tbl_hist
8260                               ,x_stmv_rec      => x_stmv_rec
8261                               ,x_selv_tbl      => x_selv_tbl);
8262 
8263                IF (x_return_status <> OKL_API.G_RET_STS_SUCCESS) THEN
8264                    RAISE G_EXCEPTION_HALT_VALIDATION;
8265                END IF;
8266 
8267                IF (p_split_factor <> 0 ) THEN
8268                    l_stmv_rec.kle_id := l_kle_id;
8269                    l_stmv_rec.sgn_code := 'MANL';
8270                    l_stmv_rec.comments := 'Generated manually during split asset from parent transaction number '||TO_CHAR(l_stmv_rec.transaction_number);
8271                    OPEN l_sifseq_csr;
8272                    FETCH l_sifseq_csr INTO l_stmv_rec.transaction_number;
8273                    CLOSE l_sifseq_csr;
8274                    --Bug# 3502142
8275                    l_stmv_rec.date_current := SYSDATE;
8276 
8277                    Okl_Streams_Pub.create_streams(
8278                                p_api_version   => l_api_version
8279                               ,p_init_msg_list => p_init_msg_list
8280                               ,x_return_status => x_return_status
8281                               ,x_msg_count     => x_msg_count
8282                               ,x_msg_data      => x_msg_data
8283                               ,p_stmv_rec      => l_stmv_rec
8284                               ,p_selv_tbl      => l_selv_tbl
8285                               ,x_stmv_rec      => x_stmv_rec
8286                               ,x_selv_tbl      => x_selv_tbl);
8287 
8288                    IF (x_return_status <> OKL_API.G_RET_STS_SUCCESS) THEN
8289                        RAISE G_EXCEPTION_HALT_VALIDATION;
8290                    END IF;
8291                 END IF;
8292 
8293             ELSE
8294 
8295                 l_stmv_rec.kle_id := p_kle_id;
8296                 l_stmv_rec.sgn_code := 'MANL';
8297                 --Bug# 3502142
8298                 l_stmv_rec.comments := 'Generated manually during split asset from parent transaction number '||TO_CHAR(l_stmv_rec.transaction_number);
8299                 OPEN l_sifseq_csr;
8300                 FETCH l_sifseq_csr INTO l_stmv_rec.transaction_number;
8301                 CLOSE l_sifseq_csr;
8302                 --Bug# 3502142
8303                 l_stmv_rec.date_current := SYSDATE;
8304 
8305                 Okl_Streams_Pub.create_streams(
8306                                p_api_version   => l_api_version
8307                               ,p_init_msg_list => p_init_msg_list
8308                               ,x_return_status => x_return_status
8309                               ,x_msg_count     => x_msg_count
8310                               ,x_msg_data      => x_msg_data
8311                               ,p_stmv_rec      => l_stmv_rec
8312                               ,p_selv_tbl      => l_selv_tbl
8313                               ,x_stmv_rec      => x_stmv_rec
8314                               ,x_selv_tbl      => x_selv_tbl);
8315 
8316                IF (x_return_status <> OKL_API.G_RET_STS_SUCCESS) THEN
8317                    RAISE G_EXCEPTION_HALT_VALIDATION;
8318                END IF;
8319 
8320 
8321             END IF;
8322             ELSE
8323                NULL;
8324             END IF;
8325 
8326             l_selv_tbl.DELETE(1, l_selv_tbl.LAST);
8327             l_selv_tbl_hist.DELETE(1, l_selv_tbl.LAST);
8328 
8329           END IF;
8330         END LOOP;
8331 
8332   EXCEPTION
8333   WHEN G_EXCEPTION_HALT_VALIDATION THEN
8334       IF l_strm_csr%ISOPEN THEN
8335           CLOSE l_strm_csr;
8336       END IF;
8337       IF l_strmele_csr%ISOPEN THEN
8338           CLOSE l_strmele_csr;
8339       END IF;
8340       NULL;
8341   WHEN OTHERS THEN
8342       IF l_strm_csr%ISOPEN THEN
8343           CLOSE l_strm_csr;
8344       END IF;
8345       IF l_strmele_csr%ISOPEN THEN
8346           CLOSE l_strmele_csr;
8347       END IF;
8348       x_return_status := OKL_API.G_RET_STS_ERROR;
8349 
8350 END process_split_streams;
8351 /*begin main body*/
8352 BEGIN
8353 
8354     x_return_status := l_return_status;
8355 
8356     --open cursor only for parent records as should not
8357     --update the parent streams till all child lines are fixed.
8358     --Bug# 3502142
8359     l_count := 0;
8360     --Bug# 6344223
8361     l_highest_split_comp_amt := 'N';
8362 
8363     FOR  l_split_trx_rec1 IN l_split_trx_csr1 (p_trxLine_id => p_txl_id) LOOP
8364       l_count := l_count + 1;
8365       l_split_trx_tbl1(l_count) := l_split_trx_rec1;
8366     END LOOP;
8367 
8368     IF (l_count > 0) THEN
8369       FOR i IN l_split_trx_tbl1.FIRST .. l_split_trx_tbl1.LAST
8370       LOOP
8371 
8372         l_split_trx_rec1 :=  l_split_trx_tbl1(i);
8373 
8374         IF NVL(l_split_trx_rec1.split_percent,0) NOT IN (0,OKL_API.G_MISS_NUM) THEN
8375            l_split_factor := (l_split_trx_rec1.split_percent/100);
8376 
8377            --Bug# 3502142
8378            --Bug# 6344223
8379            IF i = l_split_trx_tbl1.LAST THEN
8380              l_highest_split_comp_amt := 'Y';
8381            ELSE
8382              l_highest_split_comp_amt := 'N';
8383            END IF;
8384         ELSE
8385             --1. By comparing the cost and quantities on txlv record and txdv record find the split factor
8386             l_split_factor    := l_split_trx_rec1.quantity/l_split_trx_rec1.current_units;
8387         END IF;
8388         --split streams for split child lines
8389         Process_split_streams(p_api_version    => p_api_version,
8390                               p_init_msg_list  => p_init_msg_list,
8391                               x_return_status  => x_return_status,
8392                               x_msg_count      => x_msg_count,
8393                               x_msg_data       => x_msg_data,
8394                               p_kle_id         => l_split_trx_rec1.target_cle_id,
8395                               p_split_factor   => l_split_factor,
8396                               p_parent_kle_id  => l_split_trx_rec1.cle_id,
8397                               --Bug# 3502142
8398                               p_txl_id         => p_txl_id,
8399                               --Bug# 6344223
8400                               p_highest_split_comp_amt => l_highest_split_comp_amt);
8401 
8402 
8403         IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
8404             RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
8405         ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
8406             RAISE OKL_API.G_EXCEPTION_ERROR;
8407         END IF;
8408 
8409         --Bug# 3066375:: split streams attached to linked asset lines
8410         OPEN l_lnk_asst_csr1(p_cle_id => l_split_trx_rec1.cle_id, p_target_cle_id => l_split_trx_rec1.target_cle_id);
8411         LOOP
8412             --Bug# 3502142
8413             FETCH l_lnk_asst_csr1 INTO l_lnk_cle_id, l_lnk_target_cle_id,l_lnk_top_cle_id;
8414             EXIT WHEN l_lnk_asst_csr1%NOTFOUND;
8415             Process_split_streams(p_api_version    => p_api_version,
8416                                   p_init_msg_list  => p_init_msg_list,
8417                                   x_return_status  => x_return_status,
8418                                   x_msg_count      => x_msg_count,
8419                                   x_msg_data       => x_msg_data,
8420                                   p_kle_id         => l_lnk_target_cle_id,
8421                                   p_split_factor   => l_split_factor,
8422                                   p_parent_kle_id  => l_lnk_cle_id,
8423                                   --Bug# 3502142
8424                                   p_txl_id         => p_txl_id,
8425                                   --Bug# 6344223
8426                                   p_highest_split_comp_amt => l_highest_split_comp_amt);
8427 
8428 
8429             IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
8430                 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
8431             ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
8432                 RAISE OKL_API.G_EXCEPTION_ERROR;
8433             END IF;
8434         END LOOP;
8435         CLOSE l_lnk_asst_csr1;
8436 
8437       END LOOP;
8438     END IF;
8439 
8440      IF NVL(l_split_trx_rec1.split_percent,0) NOT IN (0,OKL_API.G_MISS_NUM) THEN
8441      --split asset component : Process_split_streams to historize for parent line
8442          Process_split_streams(p_api_version    => p_api_version,
8443                                p_init_msg_list  => p_init_msg_list,
8444                                x_return_status  => x_return_status,
8445                                x_msg_count      => x_msg_count,
8446                                x_msg_data       => x_msg_data,
8447                                p_kle_id         => l_split_trx_rec1.cle_id,
8448                                p_split_factor   => 0,
8449                                p_parent_kle_id  => l_split_trx_rec1.cle_id,
8450                                --Bug# 3502142
8451                                p_txl_id         => p_txl_id,
8452                                --Bug# 6344223
8453                                p_highest_split_comp_amt => 'N');
8454 
8455          IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
8456              RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
8457          ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
8458              RAISE OKL_API.G_EXCEPTION_ERROR;
8459          END IF;
8460 
8461          --Bug# 3066375: split streams attached to linked asset lines
8462          OPEN l_lnk_asst_csr1(p_cle_id => l_split_trx_rec1.cle_id, p_target_cle_id => l_split_trx_rec1.target_cle_id);
8463          LOOP
8464              --Bug# 3502142
8465              FETCH l_lnk_asst_csr1 INTO l_lnk_cle_id, l_lnk_target_cle_id, l_lnk_top_cle_id;
8466              EXIT WHEN l_lnk_asst_csr1%NOTFOUND;
8467              Process_split_streams(p_api_version    => p_api_version,
8468                                    p_init_msg_list  => p_init_msg_list,
8469                                    x_return_status  => x_return_status,
8470                                    x_msg_count      => x_msg_count,
8471                                    x_msg_data       => x_msg_data,
8472                                    p_kle_id         => l_lnk_cle_id,
8473                                    p_split_factor   => 0,
8474                                    p_parent_kle_id  => l_lnk_cle_id,
8475                                    --Bug# 3502142
8476                                    p_txl_id         => p_txl_id,
8477                                    --Bug# 6344223
8478                                    p_highest_split_comp_amt => 'N');
8479 
8480 
8481              IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
8482                  RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
8483              ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
8484                  RAISE OKL_API.G_EXCEPTION_ERROR;
8485              END IF;
8486          END LOOP;
8487          CLOSE l_lnk_asst_csr1;
8488 
8489      ELSE
8490 
8491          --split asset case : get percent for parent split
8492          --
8493          OPEN l_split_trx_csr2 (p_trxLine_id => p_txl_id);
8494          FETCH l_split_trx_csr2 INTO l_split_trx_rec2;
8495          IF l_split_trx_csr2%NOTFOUND THEN
8496              NULL;
8497          ELSE
8498              --split streams for split parent
8499              l_split_factor    := (l_split_trx_rec2.quantity/l_split_trx_rec2.current_units);
8500 
8501              Process_split_streams(p_api_version    => p_api_version,
8502                                    p_init_msg_list  => p_init_msg_list,
8503                                    x_return_status  => x_return_status,
8504                                    x_msg_count      => x_msg_count,
8505                                    x_msg_data       => x_msg_data,
8506                                    p_kle_id         => l_split_trx_rec2.target_cle_id,
8507                                    p_split_factor   => l_split_factor,
8508                                    p_parent_kle_id  => l_split_trx_rec2.cle_id,
8509                                    --Bug# 3502142
8510                                    p_txl_id         => p_txl_id,
8511                                    --Bug# 6344223
8512                                    p_highest_split_comp_amt => 'N');
8513 
8514 
8515              IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
8516                  RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
8517              ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
8518                  RAISE OKL_API.G_EXCEPTION_ERROR;
8519              END IF;
8520 
8521              --Bug# 3066375: split streams attached to linked asset lines
8522              OPEN l_lnk_asst_csr2(p_cle_id => l_split_trx_rec2.cle_id, p_target_cle_id => l_split_trx_rec2.target_cle_id);
8523              LOOP
8524                  --Bug# 3502142
8525                  FETCH l_lnk_asst_csr2 INTO l_lnk_cle_id, l_lnk_target_cle_id,l_lnk_top_cle_id;
8526                  EXIT WHEN l_lnk_asst_csr2%NOTFOUND;
8527                  Process_split_streams(p_api_version    => p_api_version,
8528                                        p_init_msg_list  => p_init_msg_list,
8529                                        x_return_status  => x_return_status,
8530                                        x_msg_count      => x_msg_count,
8531                                        x_msg_data       => x_msg_data,
8532                                        p_kle_id         => l_lnk_target_cle_id,
8533                                        p_split_factor   => l_split_factor,
8534                                        p_parent_kle_id  => l_lnk_cle_id,
8535                                        --Bug# 3502142
8536                                        p_txl_id         => p_txl_id,
8537                                        --Bug# 6344223
8538                                        p_highest_split_comp_amt => 'N');
8539 
8540                 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
8541                     RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
8542                 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
8543                     RAISE OKL_API.G_EXCEPTION_ERROR;
8544                 END IF;
8545              END LOOP;
8546              CLOSE l_lnk_asst_csr2;
8547 
8548          END IF;
8549          CLOSE l_split_trx_csr2;
8550 
8551          NULL;
8552     END IF;
8553 
8554     EXCEPTION
8555     WHEN OKL_API.G_EXCEPTION_ERROR THEN
8556 
8557     IF l_split_trx_csr1%ISOPEN THEN
8558         CLOSE l_split_trx_csr1;
8559     END IF;
8560 
8561     IF l_split_trx_csr2%ISOPEN THEN
8562         CLOSE l_split_trx_csr2;
8563     END IF;
8564 
8565     WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
8566 
8567     IF l_split_trx_csr1%ISOPEN THEN
8568         CLOSE l_split_trx_csr1;
8569     END IF;
8570 
8571     IF l_split_trx_csr2%ISOPEN THEN
8572         CLOSE l_split_trx_csr2;
8573     END IF;
8574 
8575     IF l_lnk_asst_csr1%ISOPEN THEN
8576         CLOSE l_lnk_asst_csr1;
8577     END IF;
8578 
8579     IF l_lnk_asst_csr2%ISOPEN THEN
8580         CLOSE l_lnk_asst_csr2;
8581     END IF;
8582 
8583     WHEN OTHERS THEN
8584 
8585     IF l_split_trx_csr1%ISOPEN THEN
8586         CLOSE l_split_trx_csr1;
8587     END IF;
8588 
8589     IF l_split_trx_csr2%ISOPEN THEN
8590         CLOSE l_split_trx_csr2;
8591     END IF;
8592 
8593     IF l_lnk_asst_csr1%ISOPEN THEN
8594         CLOSE l_lnk_asst_csr1;
8595     END IF;
8596 
8597     IF l_lnk_asst_csr2%ISOPEN THEN
8598         CLOSE l_lnk_asst_csr2;
8599     END IF;
8600 
8601     x_return_status := OKL_API.G_RET_STS_UNEXP_ERROR;
8602 END Split_Streams;
8603 --Bug #2648280 End
8604 
8605 ---------------
8606 --Bug# 2994971
8607 ---------------
8608   PROCEDURE populate_insurance_category(p_api_version   IN NUMBER,
8609                                         p_init_msg_list IN VARCHAR2 DEFAULT OKL_API.G_FALSE,
8610                                         x_return_status OUT NOCOPY VARCHAR2,
8611                                         x_msg_count     OUT NOCOPY NUMBER,
8612                                         x_msg_data      OUT NOCOPY VARCHAR2,
8613                                         p_cle_id        IN  NUMBER,
8614                                         p_inv_item_id   IN  NUMBER,
8615                                         p_inv_org_id    IN  NUMBER) IS
8616 
8617   l_api_name   CONSTANT VARCHAR2(30) := 'POPULATE_INS_CATEGORY';
8618 
8619   --cursor to get asset category
8620   CURSOR l_msi_csr(p_inv_item_id IN NUMBER,
8621                    p_inv_org_id  IN NUMBER) IS
8622   SELECT msi.asset_category_id
8623   FROM   mtl_system_items msi
8624   WHERE  msi.organization_id   = p_inv_org_id
8625   AND    msi.inventory_item_id = p_inv_item_id;
8626 
8627   l_asset_category_id mtl_system_items.asset_category_id%TYPE DEFAULT NULL;
8628   l_clev_rec  okl_okc_migration_pvt.clev_rec_type;
8629   l_klev_rec  okl_contract_pub.klev_rec_type;
8630   lx_clev_rec  okl_okc_migration_pvt.clev_rec_type;
8631   lx_klev_rec  okl_contract_pub.klev_rec_type;
8632 
8633 
8634   BEGIN
8635 
8636     x_return_status          := OKL_API.G_RET_STS_SUCCESS;
8637     -- Call start_activity to create savepoint, check compatibility
8638     -- and initialize message list
8639     x_return_status := OKL_API.START_ACTIVITY (l_api_name
8640                                                ,p_init_msg_list
8641                                                ,'_PVT'
8642                                                ,x_return_status);
8643     -- Check if activity started successfully
8644     IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
8645        RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
8646     ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
8647        RAISE OKL_API.G_EXCEPTION_ERROR;
8648     END IF;
8649 
8650     --fetch asset category
8651     l_asset_category_id := NULL;
8652     OPEN l_msi_csr (p_inv_item_id => p_inv_item_id,
8653                     p_inv_org_id  => p_inv_org_id);
8654     FETCH l_msi_csr INTO l_asset_category_id;
8655     IF l_msi_csr%NOTFOUND THEN
8656         NULL;
8657     END IF;
8658     CLOSE l_msi_csr;
8659 
8660 
8661     l_clev_rec.id := p_cle_id;
8662     l_klev_rec.id := p_cle_id;
8663     l_klev_rec.item_insurance_category := l_asset_category_id;
8664 
8665     okl_contract_pub.update_contract_line(
8666                          p_api_version   => p_api_version,
8667                          p_init_msg_list => p_init_msg_list,
8668                          x_return_status => x_return_status,
8669                          x_msg_count     => x_msg_count,
8670                          x_msg_data      => x_msg_data,
8671                          p_clev_rec      => l_clev_rec,
8672                          p_klev_rec      => l_klev_rec,
8673                          x_clev_rec      => lx_clev_rec,
8674                          x_klev_rec      => lx_klev_rec
8675                          );
8676 
8677     IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
8678         RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
8679     ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
8680         RAISE OKL_API.G_EXCEPTION_ERROR;
8681     END IF;
8682 
8683     OKL_API.END_ACTIVITY (x_msg_count,
8684                           x_msg_data );
8685   EXCEPTION
8686     WHEN OKL_API.G_EXCEPTION_ERROR THEN
8687     IF l_msi_csr%ISOPEN THEN
8688        CLOSE l_msi_csr;
8689     END IF;
8690     x_return_status := OKL_API.HANDLE_EXCEPTIONS(
8691                                l_api_name,
8692                                G_PKG_NAME,
8693                                'OKL_API.G_RET_STS_ERROR',
8694                                x_msg_count,
8695                                x_msg_data,
8696                                '_PVT');
8697     WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
8698     IF l_msi_csr%ISOPEN THEN
8699        CLOSE l_msi_csr;
8700     END IF;
8701     x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
8702                                l_api_name,
8703                                G_PKG_NAME,
8704                                'OKL_API.G_RET_STS_UNEXP_ERROR',
8705                                x_msg_count,
8706                                x_msg_data,
8707                                '_PVT');
8708     WHEN OTHERS THEN
8709     IF l_msi_csr%ISOPEN THEN
8710        CLOSE l_msi_csr;
8711     END IF;
8712     x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
8713                               l_api_name,
8714                               G_PKG_NAME,
8715                               'OTHERS',
8716                               x_msg_count,
8717                               x_msg_data,
8718                               '_PVT');
8719 END POPULATE_INSURANCE_CATEGORY;
8720 -------------------
8721 --Bug# 2994971
8722 ------------------
8723 --------------------------------------------------------------------------------
8724 --Procedure to adjust the quantities on copied split lines
8725 --modified for Bug# 2648280 - null amounts to remain null on copied lines
8726 --------------------------------------------------------------------------------
8727 PROCEDURE Adjust_Split_Lines(
8728              p_api_version    IN  NUMBER,
8729              p_init_msg_list  IN  VARCHAR2 DEFAULT OKL_API.G_FALSE,
8730              x_return_status  OUT NOCOPY VARCHAR2,
8731              x_msg_count      OUT NOCOPY NUMBER,
8732              x_msg_data       OUT NOCOPY VARCHAR2,
8733              p_cle_id         IN  NUMBER, --id of the new top line after copy or parent top line
8734              p_parent_line_id IN  NUMBER, --parent top line id which is split
8735              p_txdv_rec       IN  txdv_rec_type,
8736              p_txlv_rec       IN  txlv_rec_type,
8737              --Bug# 3502142
8738              p_round_split_comp_amt IN VARCHAR2 DEFAULT 'N') IS
8739 
8740 l_return_status    VARCHAR2(1)  DEFAULT OKL_API.G_RET_STS_SUCCESS;
8741 l_api_name         CONSTANT VARCHAR2(30) := 'ADJUST_SPLIT_LINES';
8742 l_api_version      CONSTANT NUMBER := 1.0;
8743 
8744 l_parent_cost      NUMBER;
8745 l_parent_quantity  NUMBER;
8746 l_child_cost       NUMBER;
8747 l_child_quantity   NUMBER;
8748 l_split_factor     NUMBER;
8749 l_no_data_found    BOOLEAN;
8750 l_cimv_rec         cimv_rec_type;
8751 l_cimv_rec_out     cimv_rec_type;
8752 lupd_cimv_rec      cimv_rec_type;
8753 l_klev_rec         klev_rec_type;
8754 l_klev_rec_out     klev_rec_type;
8755 l_clev_rec         clev_rec_type;
8756 l_clev_rec_out     clev_rec_type;
8757 
8758 
8759 l_lnk_klev_rec klev_rec_type;
8760 l_lnk_clev_rec clev_rec_type;
8761 l_lnk_klev_old_rec klev_rec_type;
8762 l_lnk_clev_old_rec clev_rec_type;
8763 
8764 lx_lnk_klev_rec klev_rec_type;
8765 lx_lnk_clev_rec clev_rec_type;
8766 lx_lnk_klev_old_rec klev_rec_type;
8767 lx_lnk_clev_old_rec clev_rec_type;
8768 
8769 l_lnk_cimv_rec  cimv_rec_type;
8770 lx_lnk_cimv_rec cimv_rec_type;
8771 l_lnk_cimv_old_rec  cimv_rec_type;
8772 lx_lnk_cimv_old_rec cimv_rec_type;
8773 
8774 
8775 CURSOR c_lines(p_cle_id IN NUMBER) IS
8776     SELECT LEVEL,
8777         id,
8778                 chr_id,
8779                 cle_id,
8780                 dnz_chr_id,
8781         lse_id
8782     FROM         okc_k_lines_b
8783     CONNECT BY  PRIOR id = cle_id
8784     START WITH  id = p_cle_id;
8785 
8786 CURSOR c_lty_code(p_lse_id IN NUMBER) IS
8787     SELECT lty_code
8788     FROM   okc_line_styles_b
8789     WHERE  id = p_lse_id;
8790 
8791 --Bug# 3897490 : modified cursor to join to SLH row
8792 --Bug# 3066375 : modified cursor
8793 CURSOR l_sll_cur (p_cle_id IN NUMBER) IS
8794 SELECT rul.id                         sll_id,
8795        rul.jtot_object1_code,
8796        rul.object1_id1,
8797        rul.object1_id2,
8798        rul.jtot_object2_code,
8799        rul.object2_id2,
8800        --nvl(rul.Rule_information6,'0') amount_sll,
8801        rul.Rule_information6           amount_sll,
8802        rul.object2_id1                slh_id,
8803        rul.rule_information1,
8804        rul.rule_information2,
8805        rul.rule_information3,
8806        rul.rule_information4,
8807        rul.rule_information5,
8808        rul.rule_information7,
8809        rul.rule_information8 amount_stub,
8810        rul.rule_information9,
8811        rul.rule_information10,
8812        rul.rule_information11,
8813        rul.rule_information12,
8814        rul.rule_information13,
8815        rul.rule_information14,
8816        rul.rule_information15,
8817        rul_slh.jtot_object1_code strm_type_source,
8818        rul_slh.object1_id1       strm_type_id1,
8819        rul_slh.object1_id2       strm_type_id2,
8820        cleb.currency_code
8821 FROM   okc_rules_b rul,
8822        okc_rule_groups_b rgp,
8823        okc_rules_b rul_slh,
8824        okc_k_lines_b cleb
8825 --Bug# : 3124577 - 11.5.10 : Rule Migration
8826 WHERE  rul.rule_information_category = 'LASLL'
8827 --where  rul.rule_information_category = 'SLL'
8828 AND    rul.rgp_id   = rgp.id
8829 AND    rgp.rgd_code = 'LALEVL'
8830 and    rgp.cle_id   = cleb.id
8831 and    cleb.id      = p_cle_id
8832 AND    rul_slh.id = rul.object2_id1
8833 AND    rul_slh.rgp_id   = rgp.id
8834 AND    rul_slh.rule_information_category = 'LASLH'
8835 ORDER BY rul_slh.object1_id1;
8836 
8837 l_sll_rec l_sll_cur%ROWTYPE;
8838 
8839 --Bug# 3897490: SLH details are now fetched by cursor l_sll_cur
8840 /*--Bug : 3066375
8841 CURSOR l_slh_cur (p_rul_id IN NUMBER) IS
8842 SELECT rul.id                slh_id,
8843        rul.jtot_object1_code strm_type_source,
8844        rul.object1_id1       strm_type_id1,
8845        rul.object1_id2       strm_type_id2
8846 FROM   okc_rules_b rul
8847 WHERE  rul.id = p_rul_id
8848 --Bug# - 3124577: 11.5.10 :---Rule Migration
8849 AND    rul.rule_information_category = 'LASLH';
8850 --And    rul.rule_information_category = 'SLH';
8851 */
8852 
8853 l_slh_rul_id               okc_rules_b.id%TYPE;
8854 l_strm_type_source         okc_rules_b.jtot_object1_code%TYPE;
8855 l_strm_type_id1            okc_rules_b.object1_id1%TYPE;
8856 l_strm_type_id2            okc_rules_b.object1_id2%TYPE;
8857 
8858 
8859 
8860 
8861 --Bug# 2881114 - modified cursor
8862 CURSOR l_lnk_asst_cur (p_cle_id IN NUMBER) IS
8863 SELECT cle.cle_id          srv_fee_line_id,
8864        cle.id              lnk_line_id
8865 FROM   OKC_K_LINES_B       cle,
8866        OKC_LINE_STYLES_B   lse,
8867        OKC_STATUSES_B      sts,
8868        OKC_K_ITEMS         cim,
8869        OKC_K_LINES_B       fin_asst_line
8870 WHERE  cle.lse_id                 = lse.id
8871 AND    lse.lty_code               IN ('LINK_FEE_ASSET','LINK_SERV_ASSET','LINK_USAGE_ASSET')
8872 AND    cle.dnz_chr_id             = fin_asst_line.dnz_chr_id
8873 AND    sts.code = cle.sts_code
8874 AND    sts.ste_code NOT IN ('HOLD','EXPIRED','TERMINATED','CANCELLED')
8875 AND    cim.cle_id      = cle.id
8876 AND    cim.dnz_chr_id  = cle.dnz_chr_id
8877 AND    cim.object1_id1 = TO_CHAR(p_cle_id)
8878 AND    cim.object1_id2 = '#'
8879 AND    cim.jtot_object1_code = 'OKX_COVASST'
8880 AND    cim.dnz_chr_id = fin_asst_line.dnz_chr_id
8881 AND    fin_asst_line.id = p_cle_id;
8882 
8883 l_srv_fee_line_id OKC_K_LINES_B.cle_id%TYPE;
8884 l_lnk_line_id     OKC_K_LINES_B.id%TYPE;
8885 
8886 
8887 l_level         NUMBER;
8888 l_cle_id        NUMBER;
8889 l_chr_id        NUMBER;
8890 l_parent_cle_id NUMBER;
8891 l_dnz_chr_id    NUMBER;
8892 l_lse_id        NUMBER;
8893 l_lty_code      VARCHAR2(30);
8894 l_txdv_rec      txdv_rec_type;
8895 l_txdv_rec_out  txdv_rec_type;
8896 
8897 l_sll_id              OKC_RULES_B.ID%TYPE;
8898 l_amount_sll          OKC_RULES_B.Rule_Information6%TYPE;
8899 l_slh_id              OKC_RULES_B.OBJECT2_ID1%TYPE;
8900 L_UPDATED_SLL_AMOUNT  NUMBER;
8901 --Bug# 2757289 : For Payment stubs
8902 l_updated_stub_amount NUMBER;
8903 
8904 l_rulv_rec      OKL_RULE_PUB.rulv_rec_type;
8905 l_rulv_rec_out  OKL_RULE_PUB.rulv_rec_type;
8906 
8907 --Bug# 3066375:
8908 l_rgpv_rec     OKL_RULE_PUB.rgpv_rec_type;
8909 lx_rgpv_rec    OKL_RULE_PUB.rgpv_rec_type;
8910 
8911 l_sll_rulv_rec   OKL_RULE_PUB.rulv_rec_type;
8912 lx_sll_rulv_rec  OKL_RULE_PUB.rulv_rec_type;
8913 l_slh_rulv_rec   OKL_RULE_PUB.rulv_rec_type;
8914 lx_slh_rulv_rec  OKL_RULE_PUB.rulv_rec_type;
8915 
8916 --Bug#3143522 : Subsidies enhancement
8917 --cursor to fetch associated subsidy details
8918   CURSOR l_sub_csr (p_asset_cle_id IN NUMBER) IS
8919   SELECT
8920        kle_sub.subsidy_id                subsidy_id
8921        ,cleb_sub.id                      subsidy_cle_id
8922        ,clet_sub.name                    name
8923        ,clet_sub.item_description        description
8924        ,kle_sub.amount                   amount
8925        ,kle_sub.subsidy_override_amount  subsidy_override_amount
8926        ,cleb_sub.dnz_chr_id              dnz_chr_id
8927        ,cleb_asst.id                     asset_cle_id
8928        ,cplb.id                          cpl_id
8929        ,pov.vendor_id                    vendor_id
8930        ,pov.vendor_name                  vendor_name
8931        ,clet_asst.name                   asset_number
8932        ,cleb_sub.orig_system_id1         parent_sub_cle_id
8933   FROM
8934       po_vendors          pov,
8935       okc_k_party_roles_b cplb,
8936       okl_k_lines         kle_sub,
8937       okc_k_lines_tl      clet_sub,
8938       okc_k_lines_b       cleb_sub,
8939       okc_line_styles_b   lseb_sub,
8940       okc_k_lines_tl      clet_asst,
8941       okc_k_lines_b       cleb_asst
8942   WHERE
8943       pov.vendor_id              = cplb.object1_id1
8944   AND cplb.object1_id2           = '#'
8945   AND cplb.jtot_object1_code     = 'OKX_VENDOR'
8946   AND cplb.dnz_chr_id            = cleb_sub.dnz_chr_id
8947   AND cplb.cle_id                = cleb_sub.id
8948   AND cplb.chr_id                IS NULL
8949   AND cplb.rle_code              = 'OKL_VENDOR'
8950   AND kle_sub.id                 = cleb_sub.id
8951   AND clet_sub.id                = cleb_sub.id
8952   AND clet_sub.LANGUAGE          = USERENV('LANG')
8953   AND cleb_sub.cle_id            = cleb_asst.id
8954   AND cleb_sub.dnz_chr_id        = cleb_asst.dnz_chr_id
8955   AND cleb_sub.sts_code         <> 'ABANDONED'
8956   AND lseb_sub.id                = cleb_sub.lse_id
8957   AND lseb_sub.lty_code          = 'SUBSIDY'
8958   AND clet_asst.id               = cleb_asst.id
8959   AND clet_asst.LANGUAGE         =USERENV('LANG')
8960   AND cleb_asst.id               = p_asset_cle_id;
8961 
8962   l_sub_rec l_sub_csr%ROWTYPE;
8963 
8964   l_asb_rec okl_asset_subsidy_pvt.asb_rec_type;
8965 
8966 
8967   --cursor to select supplier invoice details to copy
8968   CURSOR l_sid_csr (p_cle_id IN NUMBER) IS
8969   SELECT
8970         sid.ID
8971         ,sid.OBJECT_VERSION_NUMBER
8972         ,sid.CLE_ID
8973         ,sid.FA_CLE_ID
8974         ,sid.INVOICE_NUMBER
8975         ,sid.DATE_INVOICED
8976         ,sid.DATE_DUE
8977         ,sid.SHIPPING_ADDRESS_ID1
8978         ,sid.SHIPPING_ADDRESS_ID2
8979         ,sid.SHIPPING_ADDRESS_CODE
8980         ,sid.ATTRIBUTE_CATEGORY
8981         ,sid.ATTRIBUTE1
8982         ,sid.ATTRIBUTE2
8983         ,sid.ATTRIBUTE3
8984         ,sid.ATTRIBUTE4
8985         ,sid.ATTRIBUTE5
8986         ,sid.ATTRIBUTE6
8987         ,sid.ATTRIBUTE7
8988         ,sid.ATTRIBUTE8
8989         ,sid.ATTRIBUTE9
8990         ,sid.ATTRIBUTE10
8991         ,sid.ATTRIBUTE11
8992         ,sid.ATTRIBUTE12
8993         ,sid.ATTRIBUTE13
8994         ,sid.ATTRIBUTE14
8995         ,sid.ATTRIBUTE15
8996         ,sid.CREATED_BY
8997         ,sid.CREATION_DATE
8998         ,sid.LAST_UPDATED_BY
8999         ,sid.LAST_UPDATE_DATE
9000         ,sid.LAST_UPDATE_LOGIN
9001         ,cleb_fa.id  fixed_asset_cle_id
9002   FROM  okl_supp_invoice_dtls sid,
9003         okc_k_lines_b         cleb_fa,
9004         okc_line_styles_b     lseb_fa,
9005         okc_k_lines_b         cleb
9006   WHERE sid.cle_id         = cleb.orig_system_id1
9007   AND   cleb_fa.cle_id     = cleb.cle_id
9008   AND   cleb_fa.dnz_chr_id = cleb.dnz_chr_id
9009   AND   lseb_fa.id         = cleb_fa.lse_id
9010   AND   lseb_fa.lty_code   = 'FIXED_ASSET'
9011   AND   cleb.id            = p_cle_id;
9012 
9013   l_sid_rec l_sid_csr%ROWTYPE;
9014   l_sidv_rec okl_supp_invoice_dtls_pub.sidv_rec_type;
9015   lx_sidv_rec okl_supp_invoice_dtls_pub.sidv_rec_type;
9016   ----------------
9017   --Bug# 2994971
9018   ---------------
9019   l_inv_item_id   NUMBER;
9020   l_inv_org_id    NUMBER;
9021 
9022   --Bug# 3897490
9023   l_strm_type_id   OKC_RULES_B.OBJECT1_ID1%TYPE;
9024 
9025   --Bug# 3502142
9026   l_rounded_amount NUMBER;
9027 
9028   CURSOR l_txd_csr(p_tal_id IN NUMBER,
9029                    p_cle_id IN NUMBER) IS
9030   SELECT id,
9031          quantity,
9032          split_percent
9033   FROM okl_txd_assets_b txd
9034   WHERE txd.tal_id = p_tal_id
9035   AND NVL(txd.target_kle_id,-1) <> p_cle_id;
9036 
9037   l_sll_amount  NUMBER;
9038   l_stub_amount NUMBER;
9039   l_sll_split_factor NUMBER;
9040   l_split_pymt NUMBER;
9041   l_split_pymt_sum NUMBER;
9042 
9043   CURSOR l_new_lnk_assts_cur (p_chr_id IN NUMBER,
9044                               p_cle_id IN NUMBER) IS
9045   SELECT cle.id
9046   FROM   OKC_K_LINES_B       cle
9047   WHERE  cle.dnz_chr_id      = p_chr_id
9048   AND    cle.orig_system_id1 = p_cle_id;
9049 
9050   l_target_kle_id NUMBER;
9051 
9052   CURSOR l_fa_line_csr(p_chr_id IN NUMBER,
9053                        p_cle_id IN NUMBER) IS
9054   SELECT cle.id
9055   FROM okc_k_lines_b cle,
9056        okc_line_styles_b lse
9057   WHERE cle.cle_id = p_cle_id
9058   AND   cle.dnz_chr_id = p_chr_id
9059   AND   cle.lse_id = lse.id
9060   AND   lse.lty_code = 'FIXED_ASSET';
9061 
9062  -- Bug# 5946411: ER
9063   --cursor to check the status of asset
9064   CURSOR l_cleb_sts_csr(pcleid IN NUMBER) IS
9065   SELECT cleb.sts_code sts_code
9066   FROM   okc_k_lines_b cleb
9067   WHERE  cleb.id = pcleid;
9068   l_cle_status okc_k_lines_b.sts_code%TYPE;
9069   -- Bug# 5946411: ER End
9070 
9071   --Bug# 6344223 : Start
9072    l_fa_line_id NUMBER;
9073   l_klev_round_out     klev_rec_type;
9074   l_clev_round_out     clev_rec_type;
9075   --Bug# 6344223 : end
9076 BEGIN
9077    x_return_status := OKL_API.G_RET_STS_SUCCESS;
9078     -- Call start_activity to create savepoint, check compatibility
9079     -- and initialize message list
9080     x_return_status := OKL_API.START_ACTIVITY (
9081                                l_api_name
9082                                ,p_init_msg_list
9083                                ,'_PVT'
9084                                ,x_return_status);
9085     -- Check if activity started successfully
9086     IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
9087        RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
9088     ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
9089        RAISE OKL_API.G_EXCEPTION_ERROR;
9090     END IF;
9091     IF NVL(p_txdv_rec.split_percent,0)  NOT IN (0,OKL_API.G_MISS_NUM) THEN
9092         l_split_factor := (p_txdv_rec.split_percent/100);
9093     ELSE
9094         --1. By comparing the cost and quantities on txlv record and txdv record find the split factor
9095         l_parent_cost     := p_txlv_rec.depreciation_cost;
9096         l_parent_quantity := p_txlv_rec.current_units;
9097         l_child_cost      := p_txdv_rec.cost;
9098         l_child_quantity  := p_txdv_rec.quantity;
9099         l_split_factor    := p_txdv_rec.quantity/p_txlv_rec.current_units;
9100    END IF;
9101   -- Bug# 5946411: ER
9102    -- get the status of the parent line id
9103     OPEN l_cleb_sts_csr(  p_txlv_rec.kle_id);
9104     FETCH l_cleb_sts_csr INTO l_cle_status;
9105     close l_cleb_sts_csr;
9106     --dbms_output.put_line('Adjust_split_lines--p_txlv_rec.kle_id'||p_txlv_rec.kle_id);
9107     --dbms_output.put_line('Status set as l_cle_status'||l_cle_status);
9108   -- Bug# 5946411: ER End
9109 --2. Select split lines using connect by prior starting with top line (p_clev_id)
9110     OPEN c_lines(p_cle_id);
9111     ---For each line selected in 2
9112     ---2.1 depending on the line style  recalculate the amount and unit fields
9113     ---2.2 Call Update Line API to update the line with recalculated amounts and units
9114     LOOP
9115         FETCH c_lines INTO l_level,
9116                            l_cle_id,
9117                            l_chr_id,
9118                            l_parent_cle_id,
9119                            l_dnz_chr_id,
9120                            l_lse_id;
9121         EXIT WHEN c_lines%NOTFOUND;
9122         OPEN c_lty_code(l_lse_id);
9123         FETCH c_lty_code INTO l_lty_code;
9124         IF c_lty_code%NOTFOUND THEN
9125             --dbms_output.put_line('lty_code not found for lse_id "'||to_char(l_lse_id));
9126             --handle error appropriately
9127             OKL_API.SET_MESSAGE(p_app_name     => g_app_name,
9128                                                 p_msg_name     => G_LTY_CODE_NOT_FOUND
9129                                                );
9130             RAISE OKL_API.G_EXCEPTION_ERROR;
9131         END IF;
9132         CLOSE c_lty_code;
9133 
9134         --Bug# 6344223 : start
9135         IF l_lty_code ='FIXED_ASSET' THEN
9136             l_fa_line_id := l_cle_id;
9137         END IF;
9138         --Bug# 6344223 : End
9139 
9140         --dbms_output.put_line(l_lty_code);
9141         --update transaction details and item links on lines
9142         IF l_lty_code IN ('ITEM','ADD_ITEM','FIXED_ASSET','INST_ITEM','LINK_SERV_ASSET',
9143                           'LINK_FEE_ASSET','LINK_USAGE_ASSET') THEN
9144             l_cimv_rec := get_cimv_rec(p_cle_id => l_cle_id);
9145             IF l_lty_code <> 'INST_ITEM' THEN
9146                 IF NVL(p_txdv_rec.split_percent,0)  NOT IN (0,OKL_API.G_MISS_NUM) THEN
9147                     --number of items will remain same in case of split asset components
9148                     l_cimv_rec.number_of_items := l_cimv_rec.number_of_items;
9149                 ELSE
9150                     l_cimv_rec.number_of_items := (l_split_factor*l_cimv_rec.number_of_items);
9151                 END IF;
9152             END IF;
9153             IF (l_lty_code = 'FIXED_ASSET') AND (NVL(p_txdv_rec.target_kle_id,-99) <> p_txlv_rec.kle_id) THEN
9154                 l_txdv_rec := p_txdv_rec;
9155                 l_txdv_rec.target_kle_id := l_cle_id;
9156                 --update txd record to indicate correct target_kle_id
9157                 --dbms_output.put_line('before updating txd target kle_id :'||to_char(l_cle_id));
9158                 OKL_TXD_ASSETS_PUB.update_txd_asset_def(p_api_version    => p_api_version,
9159                                                         p_init_msg_list  => p_init_msg_list,
9160                                                         x_return_status  => x_return_status,
9161                                                         x_msg_count      => x_msg_count,
9162                                                         x_msg_data       => x_msg_data,
9163                                                         p_adpv_rec       => l_txdv_rec,
9164                                                         x_adpv_rec       => l_txdv_rec_out);
9165                 --dbms_output.put_line('target kle_id :'||l_txdv_rec_out.target_kle_id);
9166                 --dbms_output.put_line('After updating trx details:'||x_return_status);
9167                 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
9168                    RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
9169                 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
9170                    RAISE OKL_API.G_EXCEPTION_ERROR;
9171                 END IF;
9172             END IF;
9173 
9174             --update the number of items on model and fa lines
9175             --Bug#5559502 --Modification Start
9176             --Update number of items for ADDON record in OKC_K_ITEMS table
9177             IF l_lty_code IN ('ADD_ITEM','ITEM','FIXED_ASSET') THEN
9178             --Bug#5559502 --Modification End
9179                 IF (l_cimv_rec.id IS NOT NULL) OR (l_cimv_rec.id <> OKL_API.G_MISS_NUM) THEN
9180                         --dbms_output.put_line('cimv rec id'|| to_char(l_cimv_rec.id));
9181                         lupd_cimv_rec.id              := l_cimv_rec.id;
9182                         --dbms_output.put_line('Split Factor '|| to_char(l_split_factor));
9183                         --dbms_output.put_line('Split Factor '|| to_char(p_txlv_rec.current_units));
9184                         IF NVL(p_txdv_rec.split_percent,0)  NOT IN (0,OKL_API.G_MISS_NUM) THEN
9185                             --number of items will remain same in case of split asset components
9186                             lupd_cimv_rec.number_of_items := p_txlv_rec.current_units;
9187                             --if it is split asset component update the inventory item on model line
9188                             IF l_lty_code = ('ITEM') THEN
9189                                 lupd_cimv_rec.object1_id1       := TO_CHAR(p_txdv_rec.inventory_item_id);
9190                                 --dbms_output.put_line('object1_id1 '||lupd_cimv_rec.object1_id1);
9191                                 lupd_cimv_rec.object1_id2       := l_cimv_rec.object1_id2;
9192                                 --dbms_output.put_line('object1_id2 '||lupd_cimv_rec.object1_id2);
9193                                 lupd_cimv_rec.jtot_object1_code := l_cimv_rec.jtot_object1_code;
9194                                 --dbms_output.put_line('object_code '||lupd_cimv_rec.jtot_object1_code);
9195                                 --dbms_output.put_line('ITEM_ID '||to_char(lupd_cimv_rec.id));
9196 
9197                                 ---------------
9198                                 --Bug# 2994971
9199                                 ---------------
9200                                 IF NVL(lupd_cimv_rec.object1_id1,okl_api.g_miss_char) <> OKL_API.G_MISS_CHAR AND
9201                                    NVL(lupd_cimv_rec.object1_id2,okl_api.g_miss_char) <> OKL_API.G_MISS_CHAR THEN
9202 
9203                                     --Bug# 3438811 :
9204                                     l_inv_item_id  := TO_NUMBER(lupd_cimv_rec.object1_id1);
9205                                     l_inv_org_id   := TO_NUMBER(lupd_cimv_rec.object1_id2);
9206                                     --l_inv_item_id  := to_char(lupd_cimv_rec.object1_id1);
9207                                     --l_inv_org_id   := to_char(lupd_cimv_rec.object1_id2);
9208 
9209                                     populate_insurance_category(p_api_version   => p_api_version,
9210                                        p_init_msg_list => p_init_msg_list,
9211                                        x_return_status => x_return_status,
9212                                        x_msg_count     => x_msg_count,
9213                                        x_msg_data      => x_msg_data,
9214                                        p_cle_id        => l_parent_cle_id,
9215                                        p_inv_item_id   => l_inv_item_id,
9216                                        p_inv_org_id    => l_inv_org_id);
9217                                    IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
9218                                        RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
9219                                    ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
9220                                        RAISE OKL_API.G_EXCEPTION_ERROR;
9221                                    END IF;
9222                                END IF;
9223                                ---------------
9224                                --Bug# 2994971
9225                                ---------------
9226 
9227                             ELSE
9228                                 lupd_cimv_rec.object1_id1       := l_cimv_rec.object1_id1;
9229                                 --dbms_output.put_line('object1_id1 '||lupd_cimv_rec.object1_id1);
9230                                 lupd_cimv_rec.object1_id2       := l_cimv_rec.object1_id2;
9231                                 --dbms_output.put_line('object1_id2 '||lupd_cimv_rec.object1_id2);
9232                                 lupd_cimv_rec.jtot_object1_code := l_cimv_rec.jtot_object1_code;
9233                                 --dbms_output.put_line('object_code '||lupd_cimv_rec.jtot_object1_code);
9234                                 --dbms_output.put_line('ITEM_ID '||to_char(lupd_cimv_rec.id));
9235                             END IF;
9236                         ELSE
9237                             --lupd_cimv_rec.number_of_items := (l_split_factor*nvl(p_txlv_rec.current_units,0));
9238                             --Bug#2761799 - did a round as whole number of units may not be found as split factor
9239                             --is being calculated earlier - so rounding issues
9240                             --lupd_cimv_rec.number_of_items := (l_split_factor*p_txlv_rec.current_units);
9241                             lupd_cimv_rec.number_of_items := ROUND((l_split_factor*p_txlv_rec.current_units));
9242                         END IF;
9243 
9244                             --dbms_output.put_line('Number of items'|| to_char(lupd_cimv_rec.number_of_items));
9245                             --update the item record
9246                         OKL_OKC_MIGRATION_PVT.update_contract_item( p_api_version       => p_api_version,
9247                                                                     p_init_msg_list     => p_init_msg_list,
9248                                                                     x_return_status     => x_return_status,
9249                                                                     x_msg_count     => x_msg_count,
9250                                                                     x_msg_data      => x_msg_data,
9251                                                                     p_cimv_rec      => lupd_cimv_rec,
9252                                                                     x_cimv_rec      => l_cimv_rec_out);
9253                         --dbms_output.put_line('After updating contract item to nulls :'||x_return_status);
9254                         IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
9255                             RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
9256                         ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
9257                             RAISE OKL_API.G_EXCEPTION_ERROR;
9258                         END IF;
9259                      --End If;
9260                 END IF;
9261 
9262          END IF;
9263 
9264 
9265         END IF;
9266 
9267         l_klev_rec := get_klev_rec(p_cle_id => l_cle_id);
9268         l_clev_rec := get_clev_rec(p_cle_id => l_cle_id);
9269 
9270    --Bug# 6344223 : Start
9271      IF (NVL(p_txdv_rec.target_kle_id,-99) = p_txlv_rec.kle_id)
9272         OR p_round_split_comp_amt = 'Y' THEN
9273         --get the rounding logic
9274          get_split_round_amount(
9275                               p_api_version   =>p_api_version
9276                              ,p_init_msg_list =>p_init_msg_list
9277                              ,x_return_status =>x_return_status
9278                              ,x_msg_count     =>x_msg_count
9279                              ,x_msg_data      =>x_msg_data
9280                              ,p_txl_id        =>p_txlv_rec.id
9281                              ,p_split_factor  =>l_split_factor
9282                              ,p_klev_rec      =>l_klev_rec
9283                              ,p_clev_rec      =>l_clev_rec
9284                              ,x_klev_rec      =>l_klev_round_out
9285                              ,x_clev_rec      =>l_clev_round_out
9286                              );
9287           --dbms_output.put_line('After get_split_round_amount :'||x_return_status);
9288 
9289           IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
9290               RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
9291           ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
9292                RAISE OKL_API.G_EXCEPTION_ERROR;
9293           END IF;
9294 
9295           l_klev_rec :=l_klev_round_out;
9296           l_clev_rec :=l_clev_round_out;
9297 
9298      ELSE
9299     --Bug# 6344223 : End
9300         --
9301         l_klev_rec.ESTIMATED_OEC := (l_split_factor * l_klev_rec.ESTIMATED_OEC);
9302         l_klev_rec.LAO_AMOUNT    := (l_split_factor * l_klev_rec.LAO_AMOUNT);
9303         l_klev_rec.FEE_CHARGE    := (l_split_factor * l_klev_rec.FEE_CHARGE);
9304         l_klev_rec.INITIAL_DIRECT_COST := (l_split_factor * l_klev_rec.INITIAL_DIRECT_COST);
9305         l_klev_rec.AMOUNT_STAKE := (l_split_factor * l_klev_rec.AMOUNT_STAKE);
9306         l_klev_rec.LRV_AMOUNT := (l_split_factor * l_klev_rec.LRV_AMOUNT);
9307         l_klev_rec.COVERAGE := (l_split_factor * l_klev_rec.COVERAGE);
9308         l_klev_rec.CAPITAL_REDUCTION := (l_split_factor * l_klev_rec.CAPITAL_REDUCTION);
9309         l_klev_rec.VENDOR_ADVANCE_PAID := (l_split_factor * l_klev_rec.VENDOR_ADVANCE_PAID);
9310         l_klev_rec.TRADEIN_AMOUNT := (l_split_factor * l_klev_rec.TRADEIN_AMOUNT);
9311         l_klev_rec.BOND_EQUIVALENT_YIELD :=  (l_split_factor * l_klev_rec.BOND_EQUIVALENT_YIELD);
9312         l_klev_rec.TERMINATION_PURCHASE_AMOUNT :=(l_split_factor * l_klev_rec.TERMINATION_PURCHASE_AMOUNT);
9313         l_klev_rec.REFINANCE_AMOUNT := (l_split_factor * l_klev_rec.REFINANCE_AMOUNT);
9314         l_klev_rec.REMARKETED_AMOUNT := (l_split_factor * l_klev_rec.REMARKETED_AMOUNT);
9315         l_klev_rec.REMARKET_MARGIN :=  (l_split_factor * l_klev_rec.REMARKET_MARGIN);
9316         l_klev_rec.REPURCHASED_AMOUNT := (l_split_factor * l_klev_rec.REPURCHASED_AMOUNT);
9317         l_klev_rec.RESIDUAL_VALUE := (l_split_factor * l_klev_rec.RESIDUAL_VALUE);
9318         l_klev_rec.APPRAISAL_VALUE := (l_split_factor * l_klev_rec.APPRAISAL_VALUE);
9319         l_klev_rec.GAIN_LOSS := (l_split_factor * l_klev_rec.GAIN_LOSS);
9320         l_klev_rec.FLOOR_AMOUNT := (l_split_factor * l_klev_rec.FLOOR_AMOUNT);
9321         l_klev_rec.TRACKED_RESIDUAL := (l_split_factor * l_klev_rec.TRACKED_RESIDUAL);
9322         l_klev_rec.AMOUNT := (l_split_factor * l_klev_rec.AMOUNT);
9323         l_klev_rec.OEC := (l_split_factor * l_klev_rec.OEC);
9324         l_klev_rec.CAPITAL_AMOUNT := (l_split_factor * l_klev_rec.CAPITAL_AMOUNT);
9325         l_klev_rec.RESIDUAL_GRNTY_AMOUNT := (l_split_factor * l_klev_rec.RESIDUAL_GRNTY_AMOUNT);
9326         l_klev_rec.RVI_PREMIUM := (l_split_factor * l_klev_rec.RVI_PREMIUM);
9327         l_klev_rec.CAPITALIZED_INTEREST := (l_split_factor * l_klev_rec.CAPITALIZED_INTEREST);
9328         --
9329         --Bug#3143522 : Subsidies additional columns
9330         l_klev_rec.SUBSIDY_OVERRIDE_AMOUNT := (l_split_factor * l_klev_rec.SUBSIDY_OVERRIDE_AMOUNT);
9331         --Bug#3143522 : Subsidy additional columns
9332 
9333         --Bug#4631549 :
9334         l_klev_rec.Expected_Asset_Cost := (l_split_factor * l_klev_rec.Expected_Asset_Cost);
9335         --Bug# 4631549
9336 
9337         IF (NVL(p_txdv_rec.target_kle_id,-99) <> p_txlv_rec.kle_id) THEN
9338             l_clev_rec.ORIG_SYSTEM_SOURCE_CODE := 'OKL_SPLIT';
9339         END IF;
9340         --Bug# 5946411: ER
9341         --set the status same as that of the parent line
9342         --l_clev_rec.STS_CODE                := 'BOOKED';
9343         l_clev_rec.STS_CODE:=l_cle_status;
9344          --Bug# 5946411: ER End
9345 
9346         --price unit to be split only for split into components
9347         IF NVL(p_txdv_rec.split_percent,0)  IN (0,OKL_API.G_MISS_NUM)
9348         THEN
9349             NULL;
9350         ELSIF NVL(p_txdv_rec.split_percent,0) NOT IN (0,OKL_API.G_MISS_NUM) THEN
9351             --
9352             l_clev_rec.price_unit              := (l_split_factor * l_clev_rec.price_unit);
9353             l_clev_rec.price_negotiated        := (l_split_factor * l_clev_rec.price_negotiated);
9354             l_clev_rec.price_negotiated_renewed        := (l_split_factor * l_clev_rec.price_negotiated_renewed);
9355 
9356         END IF;
9357      --Bug# 6344223
9358      END IF;
9359         --update asset number on top line
9360         IF l_lty_code IN ('FREE_FORM1','FIXED_ASSET') THEN
9361             l_clev_rec.name             := p_txdv_rec.asset_number;
9362             l_clev_rec.item_description := p_txdv_rec.description;
9363         END IF;
9364 
9365         --Call api to update line
9366         OKL_CONTRACT_PUB.update_contract_line(
9367                          p_api_version    => p_api_version,
9368                          p_init_msg_list  => p_init_msg_list,
9369                          x_return_status  => x_return_status,
9370                          x_msg_count      => x_msg_count,
9371                          x_msg_data       => x_msg_data,
9372                          p_clev_rec       => l_clev_rec,
9373                          p_klev_rec       => l_klev_rec,
9374                          x_clev_rec       => l_clev_rec_out,
9375                          x_klev_rec       => l_klev_rec_out);
9376         --dbms_output.put_line('After updating contract line :'||x_return_status);
9377         IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
9378                 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
9379         ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
9380                 RAISE OKL_API.G_EXCEPTION_ERROR;
9381         END IF;
9382 
9383         -------------------------------------------------------
9384         --Bug# 3143522: subsidies - Validate all associated subsidies
9385         ------------------------------------------------------
9386         IF l_lty_code = 'FREE_FORM1' THEN
9387             --check if any subsidies exist and are valid
9388             OPEN l_sub_csr (p_asset_cle_id => l_cle_id);
9389             LOOP
9390                 FETCH l_sub_csr INTO l_sub_rec;
9391                 EXIT WHEN l_sub_csr%NOTFOUND;
9392                 --check whether subsidy is valid for the asset :
9393                 l_asb_rec.SUBSIDY_ID              :=  l_sub_rec.SUBSIDY_ID;
9394                 l_asb_rec.SUBSIDY_CLE_ID          :=  l_sub_rec.SUBSIDY_CLE_ID;
9395                 l_asb_rec.NAME                    :=  l_sub_rec.NAME;
9396                 l_asb_rec.DESCRIPTION             :=  l_sub_rec.DESCRIPTION;
9397                 l_asb_rec.AMOUNT                  :=  l_sub_rec.AMOUNT;
9398                 l_asb_rec.SUBSIDY_OVERRIDE_AMOUNT :=  l_sub_rec.SUBSIDY_OVERRIDE_AMOUNT;
9399                 l_asb_rec.DNZ_CHR_ID              :=  l_sub_rec.DNZ_CHR_ID;
9400                 l_asb_rec.ASSET_CLE_ID            :=  l_sub_rec.ASSET_CLE_ID;
9401                 l_asb_rec.CPL_ID                  :=  l_sub_rec.CPL_ID;
9402                 l_asb_rec.VENDOR_ID               :=  l_sub_rec.VENDOR_ID;
9403                 l_asb_rec.VENDOR_NAME             :=  l_sub_rec.VENDOR_NAME;
9404 
9405                 --call api to validate asset subsidy
9406                 okl_asset_subsidy_pvt.validate_asset_subsidy(
9407                                       p_api_version    => p_api_version,
9408                                       p_init_msg_list  => p_init_msg_list,
9409                                       x_return_status  => x_return_status,
9410                                       x_msg_count      => x_msg_count,
9411                                       x_msg_data       => x_msg_data,
9412                                       p_asb_rec        => l_asb_rec);
9413 
9414                 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
9415                     RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
9416                 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
9417                     RAISE OKL_API.G_EXCEPTION_ERROR;
9418                 END IF;
9419 
9420                /*------------------Commented as this will be done as part of copy lines now
9421                 ------------------------------------------
9422                 --create party payment details from parent
9423                 ------------------------------------------
9424                  ---------------------------------Commented as this being done in copy lines base proc*/
9425              END LOOP;
9426              CLOSE l_sub_csr;
9427          END IF;
9428          ------------------------------------------------------
9429          --Bug# 3143522 : End Subsidies
9430          ------------------------------------------------------
9431          ------------------------------------------------------
9432          --to_copy supplier invoice details linked to model line
9433          ------------------------------------------------------
9434          IF l_lty_code = 'ITEM' THEN
9435              IF (NVL(p_txdv_rec.target_kle_id,-99) <> p_txlv_rec.kle_id) THEN --is new line
9436                  OPEN l_sid_csr(p_cle_id => l_cle_id);
9437                  FETCH l_sid_csr INTO l_sid_rec;
9438                  IF l_sid_csr%NOTFOUND THEN
9439                     NULL;
9440                  ELSE
9441                      l_sidv_rec.CLE_ID                :=  l_cle_id;
9442                      l_sidv_rec.FA_CLE_ID             :=  l_sid_rec.fixed_asset_cle_id;
9443                      l_sidv_rec.INVOICE_NUMBER        :=  l_sid_rec.invoice_number;
9444                      l_sidv_rec.DATE_INVOICED         :=  l_sid_rec.date_invoiced;
9445                      l_sidv_rec.DATE_DUE              :=  l_sid_rec.date_due;
9446                      l_sidv_rec.SHIPPING_ADDRESS_ID1  :=  l_sid_rec.shipping_address_id1;
9447                      l_sidv_rec.SHIPPING_ADDRESS_ID2  :=  l_sid_rec.shipping_address_id2;
9448                      l_sidv_rec.SHIPPING_ADDRESS_CODE :=  l_sid_rec.shipping_address_code;
9449                      l_sidv_rec.ATTRIBUTE_CATEGORY    :=  l_sid_rec.attribute_category;
9450                      l_sidv_rec.ATTRIBUTE1            :=  l_sid_rec.attribute1;
9451                      l_sidv_rec.ATTRIBUTE2            :=  l_sid_rec.attribute2;
9452                      l_sidv_rec.ATTRIBUTE3            :=  l_sid_rec.attribute3;
9453                      l_sidv_rec.ATTRIBUTE4            :=  l_sid_rec.attribute4;
9454                      l_sidv_rec.ATTRIBUTE5            :=  l_sid_rec.attribute5;
9455                      l_sidv_rec.ATTRIBUTE6            :=  l_sid_rec.attribute6;
9456                      l_sidv_rec.ATTRIBUTE7            :=  l_sid_rec.attribute7;
9457                      l_sidv_rec.ATTRIBUTE8            :=  l_sid_rec.attribute8;
9458                      l_sidv_rec.ATTRIBUTE9            :=  l_sid_rec.attribute9;
9459                      l_sidv_rec.ATTRIBUTE10           :=  l_sid_rec.attribute10;
9460                      l_sidv_rec.ATTRIBUTE11           :=  l_sid_rec.attribute11;
9461                      l_sidv_rec.ATTRIBUTE12           :=  l_sid_rec.attribute12;
9462                      l_sidv_rec.ATTRIBUTE13           :=  l_sid_rec.attribute13;
9463                      l_sidv_rec.ATTRIBUTE14           :=  l_sid_rec.attribute14;
9464                      l_sidv_rec.ATTRIBUTE15           :=  l_sid_rec.attribute15;
9465 
9466                      --------------------------------------------
9467                      --call api to create supplier invoice dtls
9468                      -------------------------------------------
9469                      OKL_SUPP_INVOICE_DTLS_PUB.Create_sup_inv_dtls
9470                                     (p_api_version   => p_api_version,
9471                                      p_init_msg_list => p_init_msg_list,
9472                                      x_return_status => x_return_status,
9473                                      x_msg_count     => x_msg_count,
9474                                      x_msg_data      => x_msg_data,
9475                                      p_sidv_rec      => l_sidv_rec,
9476                                      x_sidv_rec      => lx_sidv_rec);
9477 
9478                     IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
9479                         RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
9480                     ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
9481                         RAISE OKL_API.G_EXCEPTION_ERROR;
9482                     END IF;
9483 
9484                  END IF;
9485              END IF;
9486          END IF;
9487 
9488     END LOOP;
9489     CLOSE c_lines;
9490 
9491     --after completing adjustment on lines
9492     --adjust rule amounts SLL/SLH
9493 
9494     --Bug# 3502142
9495     IF (NVL(p_txdv_rec.target_kle_id,-1) <> p_txlv_rec.kle_id) AND
9496        (p_round_split_comp_amt = 'N') THEN -- child line
9497 
9498       OPEN l_sll_cur(p_cle_id => p_cle_id);
9499       LOOP
9500         l_updated_sll_amount := NULL;
9501         l_updated_stub_amount := NULL;
9502         FETCH l_sll_cur INTO l_sll_rec;
9503         EXIT WHEN l_sll_cur%NOTFOUND;
9504 
9505         l_updated_sll_amount := TO_NUMBER(l_sll_rec.amount_sll)*l_split_factor;
9506         --Bug# 4028371
9507         --Bug# 3502142: Use Streams Rounding Option
9508         okl_accounting_util.round_amount(
9509                                          p_api_version    => p_api_version,
9510                                          p_init_msg_list  => p_init_msg_list,
9511                                          x_return_status  => x_return_status,
9512                                          x_msg_count      => x_msg_count,
9513                                          x_msg_data       => x_msg_data,
9514                                          p_amount         => l_updated_sll_amount,
9515                                          p_currency_code  => l_sll_rec.currency_code,
9516                                          p_round_option   => 'STM',
9517                                          x_rounded_amount => l_rounded_amount
9518                                          );
9519         IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
9520           RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
9521         ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
9522           RAISE OKL_API.G_EXCEPTION_ERROR;
9523         END IF;
9524 
9525         l_updated_sll_amount := l_rounded_amount;
9526 
9527         --Bug# 2757289 :enhancement for stub payments
9528         l_updated_stub_amount := TO_NUMBER(l_sll_rec.amount_stub)*l_split_factor;
9529         --Bug# 4028371
9530         --Bug# 3502142: Use Streams Rounding Option
9531         okl_accounting_util.round_amount(
9532                                          p_api_version    => p_api_version,
9533                                          p_init_msg_list  => p_init_msg_list,
9534                                          x_return_status  => x_return_status,
9535                                          x_msg_count      => x_msg_count,
9536                                          x_msg_data       => x_msg_data,
9537                                          p_amount         => l_updated_stub_amount,
9538                                          p_currency_code  => l_sll_rec.currency_code,
9539                                          p_round_option   => 'STM',
9540                                          x_rounded_amount => l_rounded_amount
9541                                          );
9542         IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
9543           RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
9544         ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
9545           RAISE OKL_API.G_EXCEPTION_ERROR;
9546         END IF;
9547 
9548         l_updated_stub_amount := l_rounded_amount;
9549 
9550         --update the rule record
9551         l_rulv_rec.id                 := l_sll_rec.sll_id;
9552         IF NVL(l_updated_sll_amount,OKL_API.G_MISS_NUM) <> OKL_API.G_MISS_NUM THEN
9553             l_rulv_rec.rule_information6  := l_updated_sll_amount;
9554         ELSIF NVL(l_updated_sll_amount,OKL_API.G_MISS_NUM) = OKL_API.G_MISS_NUM THEN
9555             l_rulv_rec.rule_information6 := NULL;
9556         END IF;
9557         --Bug# 2757289 :enhancement for stub payments
9558         IF NVL(l_updated_stub_amount,OKL_API.G_MISS_NUM) <> OKL_API.G_MISS_NUM THEN
9559             l_rulv_rec.rule_information8  := l_updated_stub_amount;
9560         ELSIF NVL(l_updated_stub_amount,OKL_API.G_MISS_NUM) = OKL_API.G_MISS_NUM THEN
9561             l_rulv_rec.rule_information8 := NULL;
9562         END IF;
9563 
9564         OKL_RULE_PUB.update_rule(
9565                       p_api_version    => p_api_version,
9566                       p_init_msg_list  => p_init_msg_list,
9567                       x_return_status  => x_return_status,
9568                       x_msg_count      => x_msg_count,
9569                       x_msg_data       => x_msg_data,
9570                       p_rulv_rec       => l_rulv_rec,
9571                       x_rulv_rec       => l_rulv_rec_out);
9572         --dbms_output.put_line('After updating payments :'||x_return_status);
9573         IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
9574                 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
9575         ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
9576                 RAISE OKL_API.G_EXCEPTION_ERROR;
9577         END IF;
9578       END LOOP;
9579       CLOSE l_sll_cur;
9580 
9581     ELSE -- parent line
9582 
9583       -- Apply Rounding Difference to
9584       -- Parent Line for Split assets into Units
9585       -- Largest asset cost for Split assets into Components
9586 
9587         OPEN l_sll_cur(p_cle_id => p_cle_id);
9588         LOOP
9589           FETCH l_sll_cur INTO l_sll_rec;
9590           EXIT WHEN l_sll_cur%NOTFOUND;
9591 
9592           l_sll_amount := TO_NUMBER(l_sll_rec.amount_sll);
9593           l_stub_amount := TO_NUMBER(l_sll_rec.amount_stub);
9594 
9595           l_split_pymt_sum := 0;
9596 
9597           -- Split into units
9598           IF NVL(p_txdv_rec.split_percent,0) IN (0,OKL_API.G_MISS_NUM) THEN
9599             l_target_kle_id := p_txlv_rec.kle_id;
9600 
9601           -- Split into components
9602           ELSE
9603             open l_fa_line_csr(p_chr_id => p_txlv_rec.dnz_khr_id
9604                               ,p_cle_id => p_cle_id);
9605             fetch l_fa_line_csr into l_target_kle_id;
9606             close l_fa_line_csr;
9607           END IF;
9608 
9609           FOR l_txd_rec in l_txd_csr(p_tal_id  => p_txlv_rec.id
9610                                     ,p_cle_id  => l_target_kle_id)
9611           LOOP
9612 
9613             IF NVL(p_txdv_rec.split_percent,0) IN (0,OKL_API.G_MISS_NUM) THEN
9614               l_sll_split_factor := l_txd_rec.quantity/p_txlv_rec.current_units;
9615             ELSE
9616               l_sll_split_factor := l_txd_rec.split_percent/100;
9617             END IF;
9618 
9619             IF NVL(l_sll_amount,OKL_API.G_MISS_NUM) <> OKL_API.G_MISS_NUM THEN
9620               l_split_pymt := l_sll_amount * l_sll_split_factor;
9621             ELSIF NVL(l_stub_amount,OKL_API.G_MISS_NUM) <> OKL_API.G_MISS_NUM THEN
9622               l_split_pymt := l_stub_amount * l_sll_split_factor;
9623             END IF;
9624 
9625             okl_accounting_util.round_amount(
9626                                          p_api_version    => p_api_version,
9627                                          p_init_msg_list  => p_init_msg_list,
9628                                          x_return_status  => x_return_status,
9629                                          x_msg_count      => x_msg_count,
9630                                          x_msg_data       => x_msg_data,
9631                                          p_amount         => l_split_pymt,
9632                                          p_currency_code  => l_sll_rec.currency_code,
9633                                          p_round_option   => 'STM',
9634                                          x_rounded_amount => l_rounded_amount
9635                                          );
9636             IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
9637               RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
9638             ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
9639               RAISE OKL_API.G_EXCEPTION_ERROR;
9640             END IF;
9641 
9642             l_split_pymt_sum := l_split_pymt_sum + l_rounded_amount;
9643 
9644           END LOOP;
9645 
9646           --update the rule record
9647           l_rulv_rec.id                 := l_sll_rec.sll_id;
9648           IF NVL(l_sll_amount,OKL_API.G_MISS_NUM) <> OKL_API.G_MISS_NUM THEN
9649             l_rulv_rec.rule_information6  := TO_CHAR(l_sll_amount - l_split_pymt_sum);
9650           ELSIF NVL(l_sll_amount,OKL_API.G_MISS_NUM) = OKL_API.G_MISS_NUM THEN
9651             l_rulv_rec.rule_information6 := NULL;
9652           END IF;
9653           --Bug# 2757289 :enhancement for stub payments
9654           IF NVL(l_stub_amount,OKL_API.G_MISS_NUM) <> OKL_API.G_MISS_NUM THEN
9655             l_rulv_rec.rule_information8  := TO_CHAR(l_stub_amount - l_split_pymt_sum);
9656           ELSIF NVL(l_stub_amount,OKL_API.G_MISS_NUM) = OKL_API.G_MISS_NUM THEN
9657             l_rulv_rec.rule_information8 := NULL;
9658           END IF;
9659 
9660           OKL_RULE_PUB.update_rule(
9661                       p_api_version    => p_api_version,
9662                       p_init_msg_list  => p_init_msg_list,
9663                       x_return_status  => x_return_status,
9664                       x_msg_count      => x_msg_count,
9665                       x_msg_data       => x_msg_data,
9666                       p_rulv_rec       => l_rulv_rec,
9667                       x_rulv_rec       => l_rulv_rec_out);
9668           --dbms_output.put_line('After updating payments :'||x_return_status);
9669           IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
9670                 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
9671           ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
9672                 RAISE OKL_API.G_EXCEPTION_ERROR;
9673           END IF;
9674         END LOOP;
9675         CLOSE l_sll_cur;
9676     END IF;
9677 
9678     --Bug Fix# 2881114 :
9679     --find out if the parent top line is linked to an asset/fee line
9680     -- Bug# 3502142
9681     IF (NVL(p_txdv_rec.target_kle_id,-1) <> p_txlv_rec.kle_id) AND
9682        (p_round_split_comp_amt = 'N') THEN -- it is a child line
9683 
9684         --get if top line is linked to an asset
9685         OPEN l_lnk_asst_cur (p_cle_id => p_parent_line_id);
9686         LOOP
9687             FETCH l_lnk_asst_cur INTO
9688                   l_srv_fee_line_id,
9689                   l_lnk_line_id;
9690             EXIT WHEN l_lnk_asst_cur%NOTFOUND;
9691             --create new linked line and update old line
9692             l_lnk_klev_rec := get_klev_rec(p_cle_id        => l_lnk_line_id,
9693                                            x_no_data_found => l_no_data_found);
9694             IF l_no_data_found THEN
9695                 NULL;
9696                 --raise appropriate error
9697             ELSE
9698             --End If;
9699                 l_lnk_klev_old_rec := l_lnk_klev_rec;
9700 
9701                 l_lnk_clev_rec := get_clev_rec(p_cle_id        => l_lnk_line_id,
9702                                                x_no_data_found => l_no_data_found);
9703                 IF l_no_data_found THEN
9704                     NULL;
9705                     --raise appropriate error
9706                 ELSE
9707                 --End If;
9708                     l_lnk_clev_old_rec := l_lnk_clev_rec;
9709                     --adjusted entries
9710                     --
9711                     l_lnk_klev_rec.ESTIMATED_OEC := (l_split_factor * l_lnk_klev_rec.ESTIMATED_OEC);
9712                     l_lnk_klev_rec.LAO_AMOUNT    := (l_split_factor * l_lnk_klev_rec.LAO_AMOUNT);
9713                     l_lnk_klev_rec.FEE_CHARGE    := (l_split_factor * l_lnk_klev_rec.FEE_CHARGE);
9714                     l_lnk_klev_rec.INITIAL_DIRECT_COST := (l_split_factor * l_lnk_klev_rec.INITIAL_DIRECT_COST);
9715                     l_lnk_klev_rec.AMOUNT_STAKE := (l_split_factor * l_lnk_klev_rec.AMOUNT_STAKE);
9716                     l_lnk_klev_rec.LRV_AMOUNT := (l_split_factor * l_lnk_klev_rec.LRV_AMOUNT);
9717                     l_lnk_klev_rec.COVERAGE := (l_split_factor * l_lnk_klev_rec.COVERAGE);
9718                     l_lnk_klev_rec.CAPITAL_REDUCTION := (l_split_factor * l_lnk_klev_rec.CAPITAL_REDUCTION);
9719                     l_lnk_klev_rec.VENDOR_ADVANCE_PAID := (l_split_factor * l_lnk_klev_rec.VENDOR_ADVANCE_PAID);
9720                     l_lnk_klev_rec.TRADEIN_AMOUNT := (l_split_factor * l_lnk_klev_rec.TRADEIN_AMOUNT);
9721                     l_lnk_klev_rec.BOND_EQUIVALENT_YIELD :=  (l_split_factor * l_lnk_klev_rec.BOND_EQUIVALENT_YIELD);
9722                     l_lnk_klev_rec.TERMINATION_PURCHASE_AMOUNT :=(l_split_factor * l_lnk_klev_rec.TERMINATION_PURCHASE_AMOUNT);
9723                     l_lnk_klev_rec.REFINANCE_AMOUNT := (l_split_factor * l_lnk_klev_rec.REFINANCE_AMOUNT);
9724                     l_lnk_klev_rec.REMARKETED_AMOUNT := (l_split_factor * l_lnk_klev_rec.REMARKETED_AMOUNT);
9725                     l_lnk_klev_rec.REMARKET_MARGIN :=  (l_split_factor * l_lnk_klev_rec.REMARKET_MARGIN);
9726                     l_lnk_klev_rec.REPURCHASED_AMOUNT := (l_split_factor * l_lnk_klev_rec.REPURCHASED_AMOUNT);
9727                     l_lnk_klev_rec.RESIDUAL_VALUE := (l_split_factor * l_lnk_klev_rec.RESIDUAL_VALUE);
9728                     l_lnk_klev_rec.APPRAISAL_VALUE := (l_split_factor * l_lnk_klev_rec.APPRAISAL_VALUE);
9729                     l_lnk_klev_rec.GAIN_LOSS := (l_split_factor * l_lnk_klev_rec.GAIN_LOSS);
9730                     l_lnk_klev_rec.FLOOR_AMOUNT := (l_split_factor * l_lnk_klev_rec.FLOOR_AMOUNT);
9731                     l_lnk_klev_rec.TRACKED_RESIDUAL := (l_split_factor * l_lnk_klev_rec.TRACKED_RESIDUAL);
9732                     l_lnk_klev_rec.AMOUNT := (l_split_factor * l_lnk_klev_rec.AMOUNT);
9733                     l_lnk_klev_rec.OEC := (l_split_factor * l_lnk_klev_rec.OEC);
9734                     l_lnk_klev_rec.CAPITAL_AMOUNT := (l_split_factor * l_lnk_klev_rec.CAPITAL_AMOUNT);
9735                     l_lnk_klev_rec.RESIDUAL_GRNTY_AMOUNT := (l_split_factor * l_lnk_klev_rec.RESIDUAL_GRNTY_AMOUNT);
9736                     l_lnk_klev_rec.RVI_PREMIUM := (l_split_factor * l_lnk_klev_rec.RVI_PREMIUM);
9737                     --
9738                     --Bug# 3143522 : Subsidy New Columns
9739                     ---
9740                     l_lnk_klev_rec.SUBSIDY_OVERRIDE_AMOUNT := (l_split_factor * l_lnk_klev_rec.SUBSIDY_OVERRIDE_AMOUNT);
9741                     --
9742                     --price unit to be split only for split into components
9743                     --old record to be adjusted only for normal split asset
9744                     IF NVL(p_txdv_rec.split_percent,0)  IN (0,OKL_API.G_MISS_NUM)
9745                     THEN
9746                         NULL;
9747                     ELSIF NVL(p_txdv_rec.split_percent,0) NOT IN (0,OKL_API.G_MISS_NUM) THEN
9748                         --
9749                         l_lnk_clev_rec.price_unit := (l_split_factor * l_lnk_clev_rec.price_unit);
9750                         l_lnk_clev_rec.price_negotiated := (l_split_factor * l_lnk_clev_rec.price_negotiated);
9751                         l_lnk_clev_rec.price_negotiated_renewed := (l_split_factor * l_lnk_clev_rec.price_negotiated_renewed);
9752                         --make the old line as 'ABANDONED'
9753                         --l_lnk_clev_old_rec.sts_code := 'ABANDONED';
9754                     END IF;
9755                     l_lnk_clev_rec.ORIG_SYSTEM_ID1       := l_lnk_clev_rec.ID;
9756                     l_lnk_clev_rec.ID                    := OKL_API.G_MISS_NUM;
9757                     l_lnk_clev_rec.OBJECT_VERSION_NUMBER := OKL_API.G_MISS_NUM;
9758                     l_lnk_clev_rec.SFWT_FLAG             := OKL_API.G_MISS_CHAR;
9759                     l_lnk_clev_rec.LINE_NUMBER           := OKL_API.G_MISS_NUM;
9760                     l_lnk_clev_rec.DISPLAY_SEQUENCE      := l_clev_rec.DISPLAY_SEQUENCE + 1;
9761                     --l_lnk_clev_rec.START_DATE            :=  sysdate;
9762                     --l_clev_rec.END_DATE         :=
9763                     l_lnk_clev_rec.ORIG_SYSTEM_SOURCE_CODE := 'OKL_SPLIT';
9764                     l_lnk_clev_rec.CREATED_BY        := OKL_API.G_MISS_NUM;
9765                     l_lnk_clev_rec.CREATION_DATE     := OKL_API.G_MISS_DATE;
9766                     l_lnk_clev_rec.LAST_UPDATED_BY   := OKL_API.G_MISS_NUM;
9767                     l_lnk_clev_rec.LAST_UPDATE_DATE  := OKL_API.G_MISS_DATE;
9768                     l_lnk_clev_rec.LAST_UPDATE_LOGIN := OKL_API.G_MISS_NUM;
9769                      --Bug# 5946411: ER
9770                     --set the status same as that of the parent line
9771                     --make new line as BOOKED
9772                     --l_lnk_clev_rec.STS_CODE          := 'BOOKED';
9773                     l_lnk_clev_rec.STS_CODE :=l_cle_status;
9774                     --dbms_output.put_line('Status set as l_lnk_clev_rec'||l_lnk_clev_rec.STS_CODE);
9775                      --Bug# 5946411: ER End
9776                     --bug# 3066375
9777                     l_lnk_clev_rec.name              := l_txdv_rec.asset_number;
9778                     l_lnk_clev_rec.item_description  := l_txdv_rec.description;
9779                     ----
9780                     l_lnk_klev_rec.ID := OKL_API.G_MISS_NUM;
9781                     l_lnk_klev_rec.OBJECT_VERSION_NUMBER := OKL_API.G_MISS_NUM;
9782                     l_lnk_klev_rec.CREATED_BY := OKL_API.G_MISS_NUM;
9783                     l_lnk_klev_rec.CREATION_DATE := OKL_API.G_MISS_DATE;
9784                     l_klev_rec.LAST_UPDATED_BY := OKL_API.G_MISS_NUM;
9785                     l_klev_rec.LAST_UPDATE_DATE := OKL_API.G_MISS_DATE;
9786                     l_klev_rec.LAST_UPDATE_LOGIN := OKL_API.G_MISS_NUM;
9787 
9788 
9789                     OKL_CONTRACT_PUB.create_contract_line(
9790                          p_api_version    => p_api_version,
9791                          p_init_msg_list  => p_init_msg_list,
9792                          x_return_status  => x_return_status,
9793                          x_msg_count      => x_msg_count,
9794                          x_msg_data       => x_msg_data,
9795                          p_clev_rec       => l_lnk_clev_rec,
9796                          p_klev_rec       => l_lnk_klev_rec,
9797                          x_clev_rec       => lx_lnk_clev_rec,
9798                          x_klev_rec       => lx_lnk_klev_rec);
9799                     --dbms_output.put_line('After creating service fee link line :'||x_return_status);
9800                     IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
9801                         RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
9802                     ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
9803                         RAISE OKL_API.G_EXCEPTION_ERROR;
9804                     END IF;
9805 
9806                     l_lnk_cimv_rec := get_cimv_rec(p_cle_id => l_lnk_line_id, x_no_data_found => l_no_data_found);
9807 
9808                     IF l_no_data_found THEN
9809                         NULL;
9810                     --raise appropriate error
9811                     ELSE
9812                     --End If;
9813                         l_lnk_cimv_old_rec := l_lnk_cimv_rec;
9814                         l_lnk_cimv_rec.ID                         := OKL_API.G_MISS_NUM;
9815                         l_lnk_cimv_rec.OBJECT_VERSION_NUMBER      := OKL_API.G_MISS_NUM;
9816                         l_lnk_cimv_rec.OBJECT1_ID1                := TO_CHAR(p_cle_id);
9817                         l_lnk_cimv_rec.CLE_ID                     := lx_lnk_clev_rec.id;
9818 
9819                         IF NVL(p_txdv_rec.split_percent,0)  NOT IN (0,OKL_API.G_MISS_NUM) THEN
9820                             --number of items will remain same in case of split asset components
9821                             l_lnk_cimv_rec.NUMBER_OF_ITEMS        := l_lnk_cimv_rec.NUMBER_OF_ITEMS;
9822                         ELSE
9823                              --number of items will be split in case of normal split asset
9824                             l_lnk_cimv_rec.NUMBER_OF_ITEMS        := l_lnk_cimv_rec.NUMBER_OF_ITEMS * l_split_factor;
9825                         END IF;
9826 
9827                         l_lnk_cimv_rec.CREATED_BY                 := OKL_API.G_MISS_NUM;
9828                         l_lnk_cimv_rec.CREATION_DATE              := OKL_API.G_MISS_DATE;
9829                         l_lnk_cimv_rec.LAST_UPDATED_BY            := OKL_API.G_MISS_NUM;
9830                         l_lnk_cimv_rec.LAST_UPDATE_DATE           := OKL_API.G_MISS_DATE;
9831                         l_lnk_cimv_rec.LAST_UPDATE_LOGIN          := OKL_API.G_MISS_NUM;
9832 
9833                         OKL_OKC_MIGRATION_PVT.create_contract_item( p_api_version       => p_api_version,
9834                                                        p_init_msg_list  => p_init_msg_list,
9835                                                        x_return_status  => x_return_status,
9836                                                        x_msg_count          => x_msg_count,
9837                                                        x_msg_data           => x_msg_data,
9838                                                        p_cimv_rec           => l_lnk_cimv_rec,
9839                                                        x_cimv_rec           => lx_lnk_cimv_rec);
9840 
9841                         IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
9842                             RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
9843                         ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
9844                             RAISE OKL_API.G_EXCEPTION_ERROR;
9845                         END IF;
9846 
9847                    END IF;
9848                END IF;
9849           END IF;
9850 
9851           --Bug#3066375 : Split the payments attached to the covered asset line
9852           --adjust rule amounts SLL/SLH
9853           --Bug# 3897490 : Fix creation of SLH and SLL lines when more than one
9854           --payment types are defined at service subline level
9855           l_strm_type_id := NULL;
9856           OPEN l_sll_cur(p_cle_id =>  l_lnk_line_id);
9857           LOOP
9858               l_updated_sll_amount := NULL;
9859               --Bug# 275289 : For stub payments
9860               l_updated_stub_amount := NULL;
9861               FETCH l_sll_cur INTO l_sll_rec;
9862               EXIT WHEN l_sll_cur%NOTFOUND;
9863 
9864               -------------------------------------------------------------
9865               --create LALEVL,SLH and SLL against new linked asset line :
9866               --30-oct-03: 3143522 - LALEVL to be created only once
9867               IF l_sll_cur%RowCount = 1 THEN
9868                   l_rgpv_rec.rgd_code      :=  'LALEVL';
9869                   l_rgpv_rec.cle_id        :=  lx_lnk_clev_rec.id;
9870                   l_rgpv_rec.dnz_chr_id    :=  lx_lnk_clev_rec.dnz_chr_id;
9871                   l_rgpv_rec.rgp_type      :=  'KRG';
9872 
9873                   OKL_RULE_PUB.create_rule_group(
9874                    p_api_version                =>  p_api_version,
9875                    p_init_msg_list              =>  p_init_msg_list,
9876                    x_return_status              =>  x_return_status,
9877                    x_msg_count                  =>  x_msg_count,
9878                    x_msg_data                   =>  x_msg_data,
9879                    p_rgpv_rec                   =>  l_rgpv_rec,
9880                    x_rgpv_rec                   =>  lx_rgpv_rec);
9881 
9882                    --dbms_output.put_line('After updating payments :'||x_return_status);
9883                    IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
9884                        RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
9885                    ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
9886                        RAISE OKL_API.G_EXCEPTION_ERROR;
9887                    END IF;
9888                END IF;
9889 
9890                   --Bug# 3897490
9891                   IF (l_strm_type_id IS NULL OR l_strm_type_id <> l_sll_rec.strm_type_id1) THEN
9892                   --30-oct-03  : 3143522 - SLH should be created only once
9893 
9894                       --create slh
9895                       l_slh_rulv_rec.rgp_id                    := lx_rgpv_rec.id;
9896                       l_slh_rulv_rec.rule_information_category := 'LASLH';
9897                       l_slh_rulv_rec.jtot_object1_code         := l_sll_rec.strm_type_source;
9898                       l_slh_rulv_rec.object1_id1               := l_sll_rec.strm_type_id1;
9899                       l_slh_rulv_rec.object1_id2               := l_sll_rec.strm_type_id2;
9900                       l_slh_rulv_rec.dnz_chr_id                := lx_rgpv_rec.dnz_chr_id;
9901                       l_slh_rulv_rec.std_template_yn           := 'N';
9902                       l_slh_rulv_rec.warn_yn                   := 'N';
9903                       l_slh_rulv_rec.template_yn               := 'N';
9904 
9905                       OKL_RULE_PUB.create_rule(
9906                           p_api_version         => p_api_version,
9907                           p_init_msg_list       => p_init_msg_list,
9908                           x_return_status       => x_return_status,
9909                           x_msg_count           => x_msg_count,
9910                           x_msg_data            => x_msg_data,
9911                           p_rulv_rec            => l_slh_rulv_rec,
9912                           x_rulv_rec            => lx_slh_rulv_rec);
9913 
9914                       --dbms_output.put_line('After updating payments :'||x_return_status);
9915                       IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
9916                           RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
9917                       ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
9918                           RAISE OKL_API.G_EXCEPTION_ERROR;
9919                       END IF;
9920 
9921                       --Bug# 3897490
9922                       l_strm_type_id := l_sll_rec.strm_type_id1;
9923                   END IF;
9924 
9925                   --create sll
9926                   l_sll_rulv_rec.dnz_chr_id                := lx_rgpv_rec.dnz_chr_id;
9927                   l_sll_rulv_rec.rgp_id                    := lx_rgpv_rec.id;
9928                   l_sll_rulv_rec.std_template_yn           := lx_slh_rulv_rec.std_template_yn;
9929                   l_sll_rulv_rec.warn_yn                   := lx_slh_rulv_rec.warn_yn;
9930                   l_sll_rulv_rec.template_yn               := lx_slh_rulv_rec.template_yn;
9931                   l_sll_rulv_rec.rule_information_category := 'LASLL';
9932                   l_sll_rulv_rec.jtot_object1_code         := l_sll_rec.jtot_object1_code;
9933                   l_sll_rulv_rec.object1_id1               := l_sll_rec.object1_id1;
9934                   l_sll_rulv_rec.object1_id2               := l_sll_Rec.object1_id2;
9935                   l_sll_rulv_rec.jtot_object2_code         := l_sll_rec.jtot_object2_code;
9936                   l_sll_rulv_rec.object2_id1               := lx_slh_rulv_rec.id;
9937     -- ansethur 28-feb-08 bug # 6697542
9938                   l_sll_rulv_rec.object2_id2               :=  '#' ; -- l_sll_rec.object2_id2;
9939     -- ansethur 28-feb-08 bug # 6697542
9940                   l_sll_rulv_rec.rule_information1         := l_sll_rec.rule_information1;
9941                   l_sll_rulv_rec.rule_information2         := l_sll_rec.rule_information2;
9942                   l_sll_rulv_rec.rule_information3         := l_sll_rec.rule_information3;
9943                   l_sll_rulv_rec.rule_information4         := l_sll_rec.rule_information4;
9944                   l_sll_rulv_rec.rule_information5         := l_sll_rec.rule_information5;
9945                   IF NVL(TO_NUMBER(l_sll_rec.amount_sll)*l_split_factor,OKL_API.G_MISS_NUM) <> OKL_API.G_MISS_NUM THEN
9946 
9947                       --Bug# 4028371
9948                       --Bug# 3502142: Use Streams Rounding Option
9949                       l_updated_sll_amount := TO_NUMBER(l_sll_rec.amount_sll)*l_split_factor;
9950                       okl_accounting_util.round_amount(
9951                                          p_api_version    => p_api_version,
9952                                          p_init_msg_list  => p_init_msg_list,
9953                                          x_return_status  => x_return_status,
9954                                          x_msg_count      => x_msg_count,
9955                                          x_msg_data       => x_msg_data,
9956                                          p_amount         => l_updated_sll_amount,
9957                                          p_currency_code  => l_sll_rec.currency_code,
9958                                          p_round_option   => 'STM',
9959                                          x_rounded_amount => l_rounded_amount
9960                                          );
9961                       IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
9962                         RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
9963                       ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
9964                         RAISE OKL_API.G_EXCEPTION_ERROR;
9965                       END IF;
9966 
9967                       l_updated_sll_amount := l_rounded_amount;
9968                       l_sll_rulv_rec.rule_information6         := l_updated_sll_amount;
9969 
9970                   ELSIF NVL(TO_NUMBER(l_sll_rec.amount_sll)*l_split_factor,OKL_API.G_MISS_NUM) = OKL_API.G_MISS_NUM THEN
9971                       l_sll_rulv_rec.rule_information6 := NULL;
9972                   END IF;
9973                   l_sll_rulv_rec.rule_information7         := l_sll_rec.rule_information7;
9974                   --Bug# 2757289 : For stup payments
9975                   IF NVL(TO_NUMBER(l_sll_rec.amount_stub)*l_split_factor,OKL_API.G_MISS_NUM) <> OKL_API.G_MISS_NUM THEN
9976 
9977                       --Bug# 4028371
9978                       --Bug# 3502142: Use Streams Rounding Option
9979                       l_updated_stub_amount := TO_NUMBER(l_sll_rec.amount_stub)*l_split_factor;
9980                       okl_accounting_util.round_amount(
9981                                          p_api_version    => p_api_version,
9982                                          p_init_msg_list  => p_init_msg_list,
9983                                          x_return_status  => x_return_status,
9984                                          x_msg_count      => x_msg_count,
9985                                          x_msg_data       => x_msg_data,
9986                                          p_amount         => l_updated_stub_amount,
9987                                          p_currency_code  => l_sll_rec.currency_code,
9988                                          p_round_option   => 'STM',
9989                                          x_rounded_amount => l_rounded_amount
9990                                          );
9991                       IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
9992                         RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
9993                       ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
9994                         RAISE OKL_API.G_EXCEPTION_ERROR;
9995                       END IF;
9996 
9997                       l_updated_stub_amount := l_rounded_amount;
9998                       l_sll_rulv_rec.rule_information8         := l_updated_stub_amount;
9999 
10000                   ELSIF NVL(TO_NUMBER(l_sll_rec.amount_stub)*l_split_factor,OKL_API.G_MISS_NUM) = OKL_API.G_MISS_NUM THEN
10001                       l_sll_rulv_rec.rule_information8 := NULL;
10002                   END IF;
10003                   --l_sll_rulv_rec.rule_information8         := l_sll_rec.rule_information8;
10004                   l_sll_rulv_rec.rule_information9         := l_sll_rec.rule_information9;
10005                   l_sll_rulv_rec.rule_information10        := l_sll_rec.rule_information10;
10006                   l_sll_rulv_rec.rule_information11        := l_sll_rec.rule_information11;
10007                   l_sll_rulv_rec.rule_information12        := l_sll_rec.rule_information12;
10008                   l_sll_rulv_rec.rule_information13        := l_sll_rec.rule_information13;
10009                   l_sll_rulv_rec.rule_information14        := l_sll_rec.rule_information14;
10010                   l_sll_rulv_rec.rule_information15        := l_sll_rec.rule_information15;
10011 
10012                   OKL_RULE_PUB.create_rule(
10013                       p_api_version         => p_api_version,
10014                       p_init_msg_list       => p_init_msg_list,
10015                       x_return_status       => x_return_status,
10016                       x_msg_count           => x_msg_count,
10017                       x_msg_data            => x_msg_data,
10018                       p_rulv_rec            => l_sll_rulv_rec,
10019                       x_rulv_rec            => lx_sll_rulv_rec);
10020 
10021                   --dbms_output.put_line('After updating payments :'||x_return_status);
10022                   IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
10023                       RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
10024                   ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
10025                       RAISE OKL_API.G_EXCEPTION_ERROR;
10026                   END IF;
10027 
10028               ------------------------------------------------------------------------
10029 
10030           END LOOP;
10031           CLOSE l_sll_cur;
10032           --End Bug# 3066375
10033 
10034     END LOOP;
10035     CLOSE l_lnk_asst_cur;
10036 
10037     --Bug# 3502142
10038     ELSE -- Parent line
10039 
10040       -- For Split Asset into Units, Update Parent linked asset
10041       --  line after all child linked lines have been created
10042 
10043       -- For Split Asset into Components, create linked asset
10044       -- line for largest asset cost after all other child linked lines
10045       -- have been created
10046 
10047         OPEN l_lnk_asst_cur (p_cle_id => p_parent_line_id);
10048         LOOP
10049             FETCH l_lnk_asst_cur INTO
10050                   l_srv_fee_line_id,
10051                   l_lnk_line_id;
10052             EXIT WHEN l_lnk_asst_cur%NOTFOUND;
10053 
10054             l_lnk_klev_rec := get_klev_rec(p_cle_id        => l_lnk_line_id,
10055                                            x_no_data_found => l_no_data_found);
10056             IF l_no_data_found THEN
10057                 NULL;
10058                 --raise appropriate error
10059             ELSE
10060                 l_lnk_klev_old_rec := l_lnk_klev_rec;
10061 
10062                 l_lnk_clev_rec := get_clev_rec(p_cle_id        => l_lnk_line_id,
10063                                                x_no_data_found => l_no_data_found);
10064                 IF l_no_data_found THEN
10065                   NULL;
10066                   --raise appropriate error
10067                 ELSE
10068                   l_lnk_clev_old_rec := l_lnk_clev_rec;
10069 
10070                   FOR l_new_lnk_assts_rec in l_new_lnk_assts_cur
10071                                              (p_chr_id => l_lnk_clev_old_rec.dnz_chr_id,
10072                                               p_cle_id => l_lnk_line_id) LOOP
10073 
10074                       l_lnk_klev_rec := get_klev_rec(p_cle_id        => l_new_lnk_assts_rec.id,
10075                                                      x_no_data_found => l_no_data_found);
10076                       IF l_no_data_found THEN
10077                           NULL;
10078                           --raise appropriate error
10079                       ELSE
10080                         l_lnk_klev_old_rec.ESTIMATED_OEC := l_lnk_klev_old_rec.ESTIMATED_OEC - l_lnk_klev_rec.ESTIMATED_OEC;
10081                         l_lnk_klev_old_rec.LAO_AMOUNT    := l_lnk_klev_old_rec.LAO_AMOUNT - l_lnk_klev_rec.LAO_AMOUNT;
10082                         l_lnk_klev_old_rec.FEE_CHARGE    :=  l_lnk_klev_old_rec.FEE_CHARGE - l_lnk_klev_rec.FEE_CHARGE;
10083                         l_lnk_klev_old_rec.INITIAL_DIRECT_COST := l_lnk_klev_old_rec.INITIAL_DIRECT_COST - l_lnk_klev_rec.INITIAL_DIRECT_COST;
10084                         l_lnk_klev_old_rec.AMOUNT_STAKE :=  l_lnk_klev_old_rec.AMOUNT_STAKE - l_lnk_klev_rec.AMOUNT_STAKE;
10085                         l_lnk_klev_old_rec.LRV_AMOUNT := l_lnk_klev_old_rec.LRV_AMOUNT - l_lnk_klev_rec.LRV_AMOUNT;
10086                         l_lnk_klev_old_rec.COVERAGE := l_lnk_klev_old_rec.COVERAGE - l_lnk_klev_rec.COVERAGE;
10087                         l_lnk_klev_old_rec.CAPITAL_REDUCTION := l_lnk_klev_old_rec.CAPITAL_REDUCTION - l_lnk_klev_rec.CAPITAL_REDUCTION;
10088                         l_lnk_klev_old_rec.VENDOR_ADVANCE_PAID := l_lnk_klev_old_rec.VENDOR_ADVANCE_PAID - l_lnk_klev_rec.VENDOR_ADVANCE_PAID;
10089                         l_lnk_klev_old_rec.TRADEIN_AMOUNT := l_lnk_klev_old_rec.TRADEIN_AMOUNT - l_lnk_klev_rec.TRADEIN_AMOUNT;
10090                         l_lnk_klev_old_rec.BOND_EQUIVALENT_YIELD :=  l_lnk_klev_old_rec.BOND_EQUIVALENT_YIELD - l_lnk_klev_rec.BOND_EQUIVALENT_YIELD;
10091                         l_lnk_klev_old_rec.TERMINATION_PURCHASE_AMOUNT :=l_lnk_klev_old_rec.TERMINATION_PURCHASE_AMOUNT - l_lnk_klev_rec.TERMINATION_PURCHASE_AMOUNT;
10092                         l_lnk_klev_old_rec.REFINANCE_AMOUNT := l_lnk_klev_old_rec.REFINANCE_AMOUNT - l_lnk_klev_rec.REFINANCE_AMOUNT;
10093                         l_lnk_klev_old_rec.REMARKETED_AMOUNT := l_lnk_klev_old_rec.REMARKETED_AMOUNT - l_lnk_klev_rec.REMARKETED_AMOUNT;
10094                         l_lnk_klev_old_rec.REMARKET_MARGIN :=  l_lnk_klev_old_rec.REMARKET_MARGIN - l_lnk_klev_rec.REMARKET_MARGIN;
10095                         l_lnk_klev_old_rec.REPURCHASED_AMOUNT := l_lnk_klev_old_rec.REPURCHASED_AMOUNT - l_lnk_klev_rec.REPURCHASED_AMOUNT;
10096                         l_lnk_klev_old_rec.RESIDUAL_VALUE := l_lnk_klev_old_rec.RESIDUAL_VALUE - l_lnk_klev_rec.RESIDUAL_VALUE;
10097                         l_lnk_klev_old_rec.APPRAISAL_VALUE := l_lnk_klev_old_rec.APPRAISAL_VALUE - l_lnk_klev_rec.APPRAISAL_VALUE;
10098                         l_lnk_klev_old_rec.GAIN_LOSS := l_lnk_klev_old_rec.GAIN_LOSS - l_lnk_klev_rec.GAIN_LOSS;
10099                         l_lnk_klev_old_rec.FLOOR_AMOUNT := l_lnk_klev_old_rec.FLOOR_AMOUNT -l_lnk_klev_rec.FLOOR_AMOUNT;
10100                         l_lnk_klev_old_rec.TRACKED_RESIDUAL := l_lnk_klev_old_rec.TRACKED_RESIDUAL - l_lnk_klev_rec.TRACKED_RESIDUAL;
10101                         l_lnk_klev_old_rec.AMOUNT := l_lnk_klev_old_rec.AMOUNT - l_lnk_klev_rec.AMOUNT;
10102                         l_lnk_klev_old_rec.OEC := l_lnk_klev_old_rec.OEC - l_lnk_klev_rec.OEC;
10103                         l_lnk_klev_old_rec.CAPITAL_AMOUNT := l_lnk_klev_old_rec.CAPITAL_AMOUNT - l_lnk_klev_rec.CAPITAL_AMOUNT;
10104                         l_lnk_klev_old_rec.RESIDUAL_GRNTY_AMOUNT := l_lnk_klev_old_rec.RESIDUAL_GRNTY_AMOUNT - l_lnk_klev_rec.RESIDUAL_GRNTY_AMOUNT;
10105                         l_lnk_klev_old_rec.RVI_PREMIUM := l_lnk_klev_old_rec.RVI_PREMIUM - l_lnk_klev_rec.RVI_PREMIUM;
10106                         l_lnk_klev_old_rec.SUBSIDY_OVERRIDE_AMOUNT := l_lnk_klev_old_rec.SUBSIDY_OVERRIDE_AMOUNT - l_lnk_klev_rec.SUBSIDY_OVERRIDE_AMOUNT;
10107                       END IF;
10108                   END LOOP;
10109 
10110                   -- Split into units
10111                   IF NVL(p_txdv_rec.split_percent,0) IN (0,OKL_API.G_MISS_NUM) THEN
10112 
10113                     --update contract line
10114                     OKL_CONTRACT_PUB.update_contract_line(
10115                          p_api_version    => p_api_version,
10116                          p_init_msg_list  => p_init_msg_list,
10117                          x_return_status  => x_return_status,
10118                          x_msg_count      => x_msg_count,
10119                          x_msg_data       => x_msg_data,
10120                          p_clev_rec       => l_lnk_clev_old_rec,
10121                          p_klev_rec       => l_lnk_klev_old_rec,
10122                          x_clev_rec       => lx_lnk_clev_old_rec,
10123                          x_klev_rec       => lx_lnk_klev_old_rec);
10124                     --dbms_output.put_line('After updating service fee link line :'||x_return_status);
10125                     IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
10126                       RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
10127                     ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
10128                       RAISE OKL_API.G_EXCEPTION_ERROR;
10129                     END IF;
10130 
10131                   -- Split into components
10132                   ELSIF NVL(p_txdv_rec.split_percent,0) NOT IN (0,OKL_API.G_MISS_NUM) THEN
10133 
10134                     l_lnk_klev_rec := l_lnk_klev_old_rec;
10135                     --
10136                     l_lnk_clev_rec.price_unit := (l_split_factor * l_lnk_clev_rec.price_unit);
10137                     l_lnk_clev_rec.price_negotiated := (l_split_factor * l_lnk_clev_rec.price_negotiated);
10138                     l_lnk_clev_rec.price_negotiated_renewed := (l_split_factor * l_lnk_clev_rec.price_negotiated_renewed);
10139 
10140                     l_lnk_clev_rec.ORIG_SYSTEM_ID1       := l_lnk_clev_rec.ID;
10141                     l_lnk_clev_rec.ID                    := OKL_API.G_MISS_NUM;
10142                     l_lnk_clev_rec.OBJECT_VERSION_NUMBER := OKL_API.G_MISS_NUM;
10143                     l_lnk_clev_rec.SFWT_FLAG             := OKL_API.G_MISS_CHAR;
10144                     l_lnk_clev_rec.LINE_NUMBER           := OKL_API.G_MISS_NUM;
10145                     l_lnk_clev_rec.DISPLAY_SEQUENCE      := l_clev_rec.DISPLAY_SEQUENCE + 1;
10146 
10147                       l_lnk_clev_rec.ORIG_SYSTEM_SOURCE_CODE := 'OKL_SPLIT';
10148                     l_lnk_clev_rec.CREATED_BY        := OKL_API.G_MISS_NUM;
10149                     l_lnk_clev_rec.CREATION_DATE     := OKL_API.G_MISS_DATE;
10150                     l_lnk_clev_rec.LAST_UPDATED_BY   := OKL_API.G_MISS_NUM;
10151                     l_lnk_clev_rec.LAST_UPDATE_DATE  := OKL_API.G_MISS_DATE;
10152                     l_lnk_clev_rec.LAST_UPDATE_LOGIN := OKL_API.G_MISS_NUM;
10153                     --make new line as BOOKED
10154                     l_lnk_clev_rec.STS_CODE          := 'BOOKED';
10155                     --bug# 3066375
10156                     l_lnk_clev_rec.name              := l_txdv_rec.asset_number;
10157                     l_lnk_clev_rec.item_description  := l_txdv_rec.description;
10158                     ----
10159                     l_lnk_klev_rec.ID := OKL_API.G_MISS_NUM;
10160                     l_lnk_klev_rec.OBJECT_VERSION_NUMBER := OKL_API.G_MISS_NUM;
10161                     l_lnk_klev_rec.CREATED_BY := OKL_API.G_MISS_NUM;
10162                     l_lnk_klev_rec.CREATION_DATE := OKL_API.G_MISS_DATE;
10163                     l_klev_rec.LAST_UPDATED_BY := OKL_API.G_MISS_NUM;
10164                     l_klev_rec.LAST_UPDATE_DATE := OKL_API.G_MISS_DATE;
10165                     l_klev_rec.LAST_UPDATE_LOGIN := OKL_API.G_MISS_NUM;
10166 
10167                     OKL_CONTRACT_PUB.create_contract_line(
10168                          p_api_version    => p_api_version,
10169                          p_init_msg_list  => p_init_msg_list,
10170                          x_return_status  => x_return_status,
10171                          x_msg_count      => x_msg_count,
10172                          x_msg_data       => x_msg_data,
10173                          p_clev_rec       => l_lnk_clev_rec,
10174                          p_klev_rec       => l_lnk_klev_rec,
10175                          x_clev_rec       => lx_lnk_clev_rec,
10176                          x_klev_rec       => lx_lnk_klev_rec);
10177                     --dbms_output.put_line('After creating service fee link line :'||x_return_status);
10178                     IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
10179                         RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
10180                     ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
10181                         RAISE OKL_API.G_EXCEPTION_ERROR;
10182                     END IF;
10183 
10184                   END IF;
10185 
10186                   l_lnk_cimv_rec := get_cimv_rec(p_cle_id => l_lnk_line_id, x_no_data_found => l_no_data_found);
10187 
10188                   IF l_no_data_found THEN
10189                       NULL;
10190                   --raise appropriate error
10191                   ELSE
10192                     l_lnk_cimv_old_rec := l_lnk_cimv_rec;
10193 
10194                     -- Split into units
10195                     IF NVL(p_txdv_rec.split_percent,0) IN (0,OKL_API.G_MISS_NUM) THEN
10196 
10197                       FOR l_new_lnk_assts_rec in l_new_lnk_assts_cur
10198                                              (p_chr_id => l_lnk_clev_old_rec.dnz_chr_id,
10199                                               p_cle_id => l_lnk_line_id) LOOP
10200 
10201                         l_lnk_cimv_rec := get_cimv_rec(p_cle_id => l_new_lnk_assts_rec.id,
10202                                                        x_no_data_found => l_no_data_found);
10203                         IF l_no_data_found THEN
10204                           NULL;
10205                           --raise appropriate error
10206                         ELSE
10207                           --number of items will be split in case of normal split asset
10208                           l_lnk_cimv_old_rec.NUMBER_OF_ITEMS  := l_lnk_cimv_old_rec.NUMBER_OF_ITEMS - l_lnk_cimv_rec.NUMBER_OF_ITEMS;
10209                         END IF;
10210                       END LOOP;
10211 
10212                       --update original item record
10213                       OKL_OKC_MIGRATION_PVT.update_contract_item( p_api_version => p_api_version,
10214                                                        p_init_msg_list  => p_init_msg_list,
10215                                                        x_return_status  => x_return_status,
10216                                                        x_msg_count      => x_msg_count,
10217                                                        x_msg_data             => x_msg_data,
10218                                                        p_cimv_rec             => l_lnk_cimv_old_rec,
10219                                                        x_cimv_rec             => lx_lnk_cimv_old_rec);
10220 
10221                       IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
10222                         RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
10223                       ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
10224                         RAISE OKL_API.G_EXCEPTION_ERROR;
10225                       END IF;
10226 
10227                     -- Split into components
10228                     ELSIF NVL(p_txdv_rec.split_percent,0) NOT IN (0,OKL_API.G_MISS_NUM) THEN
10229 
10230                        l_lnk_cimv_rec.ID                         := OKL_API.G_MISS_NUM;
10231                        l_lnk_cimv_rec.OBJECT_VERSION_NUMBER      := OKL_API.G_MISS_NUM;
10232                        l_lnk_cimv_rec.OBJECT1_ID1                := TO_CHAR(p_cle_id);
10233                        l_lnk_cimv_rec.CLE_ID                     := lx_lnk_clev_rec.id;
10234 
10235                        l_lnk_cimv_rec.CREATED_BY                 := OKL_API.G_MISS_NUM;
10236                        l_lnk_cimv_rec.CREATION_DATE              := OKL_API.G_MISS_DATE;
10237                        l_lnk_cimv_rec.LAST_UPDATED_BY            := OKL_API.G_MISS_NUM;
10238                        l_lnk_cimv_rec.LAST_UPDATE_DATE           := OKL_API.G_MISS_DATE;
10239                        l_lnk_cimv_rec.LAST_UPDATE_LOGIN          := OKL_API.G_MISS_NUM;
10240 
10241                        OKL_OKC_MIGRATION_PVT.create_contract_item( p_api_version        => p_api_version,
10242                                                        p_init_msg_list  => p_init_msg_list,
10243                                                        x_return_status  => x_return_status,
10244                                                        x_msg_count          => x_msg_count,
10245                                                        x_msg_data           => x_msg_data,
10246                                                        p_cimv_rec           => l_lnk_cimv_rec,
10247                                                        x_cimv_rec           => lx_lnk_cimv_rec);
10248 
10249                        IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
10250                             RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
10251                        ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
10252                             RAISE OKL_API.G_EXCEPTION_ERROR;
10253                        END IF;
10254                     END IF;
10255 
10256                   END IF; -- cimv rec found
10257                 END IF; -- clev rec found
10258             END IF; --klev rec found
10259 
10260             l_strm_type_id := NULL;
10261             OPEN l_sll_cur(p_cle_id =>  l_lnk_line_id);
10262             LOOP
10263               FETCH l_sll_cur INTO l_sll_rec;
10264               EXIT WHEN l_sll_cur%NOTFOUND;
10265 
10266                 l_sll_amount := TO_NUMBER(l_sll_rec.amount_sll);
10267                 l_stub_amount := TO_NUMBER(l_sll_rec.amount_stub);
10268 
10269                 l_split_pymt_sum := 0;
10270 
10271                 -- Split into units
10272                 IF NVL(p_txdv_rec.split_percent,0) IN (0,OKL_API.G_MISS_NUM) THEN
10273                   l_target_kle_id := p_txlv_rec.kle_id;
10274 
10275                 -- Split into components
10276                 ELSE
10277                   open l_fa_line_csr(p_chr_id => p_txlv_rec.dnz_khr_id
10278                                     ,p_cle_id => p_cle_id);
10279                   fetch l_fa_line_csr into l_target_kle_id;
10280                   close l_fa_line_csr;
10281                 END IF;
10282 
10283                 FOR l_txd_rec in l_txd_csr(p_tal_id  => p_txlv_rec.id
10284                                           ,p_cle_id  => l_target_kle_id)
10285                 LOOP
10286 
10287                   IF NVL(p_txdv_rec.split_percent,0) IN (0,OKL_API.G_MISS_NUM) THEN
10288                     l_sll_split_factor := l_txd_rec.quantity/p_txlv_rec.current_units;
10289                   ELSE
10290                     l_sll_split_factor := l_txd_rec.split_percent/100;
10291                   END IF;
10292 
10293                   IF NVL(l_sll_amount,OKL_API.G_MISS_NUM) <> OKL_API.G_MISS_NUM THEN
10294                     l_split_pymt := l_sll_amount * l_sll_split_factor;
10295                   ELSIF NVL(l_stub_amount,OKL_API.G_MISS_NUM) <> OKL_API.G_MISS_NUM THEN
10296                     l_split_pymt := l_stub_amount * l_sll_split_factor;
10297                   END IF;
10298 
10299                   okl_accounting_util.round_amount(
10300                                          p_api_version    => p_api_version,
10301                                          p_init_msg_list  => p_init_msg_list,
10302                                          x_return_status  => x_return_status,
10303                                          x_msg_count      => x_msg_count,
10304                                          x_msg_data       => x_msg_data,
10305                                          p_amount         => l_split_pymt,
10306                                          p_currency_code  => l_sll_rec.currency_code,
10307                                          p_round_option   => 'STM',
10308                                          x_rounded_amount => l_rounded_amount
10309                                          );
10310                   IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
10311                     RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
10312                   ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
10313                     RAISE OKL_API.G_EXCEPTION_ERROR;
10314                   END IF;
10315 
10316                   l_split_pymt_sum := l_split_pymt_sum + l_rounded_amount;
10317 
10318                 END LOOP;
10319 
10320                 -- Split into units
10321                 IF NVL(p_txdv_rec.split_percent,0) IN (0,OKL_API.G_MISS_NUM) THEN
10322 
10323                   --update the rule record
10324                   l_rulv_rec.id                 := l_sll_rec.sll_id;
10325                   IF NVL(l_sll_amount,OKL_API.G_MISS_NUM) <> OKL_API.G_MISS_NUM THEN
10326                     l_rulv_rec.rule_information6  := TO_CHAR(l_sll_amount - l_split_pymt_sum);
10327                   ELSIF NVL(l_sll_amount,OKL_API.G_MISS_NUM) = OKL_API.G_MISS_NUM THEN
10328                     l_rulv_rec.rule_information6 := NULL;
10329                   END IF;
10330 
10331                   IF NVL(l_stub_amount,OKL_API.G_MISS_NUM) <> OKL_API.G_MISS_NUM THEN
10332                     l_rulv_rec.rule_information8  := TO_CHAR(l_stub_amount - l_split_pymt_sum);
10333                   ELSIF NVL(l_stub_amount,OKL_API.G_MISS_NUM) = OKL_API.G_MISS_NUM THEN
10334                     l_rulv_rec.rule_information8 := NULL;
10335                   END IF;
10336 
10337                   OKL_RULE_PUB.update_rule(
10338                             p_api_version    => p_api_version,
10339                             p_init_msg_list  => p_init_msg_list,
10340                             x_return_status  => x_return_status,
10341                             x_msg_count      => x_msg_count,
10342                             x_msg_data       => x_msg_data,
10343                             p_rulv_rec       => l_rulv_rec,
10344                             x_rulv_rec       => l_rulv_rec_out);
10345 
10346                   --dbms_output.put_line('After updating payments :'||x_return_status);
10347                   IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
10348                       RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
10349                   ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
10350                       RAISE OKL_API.G_EXCEPTION_ERROR;
10351                   END IF;
10352 
10353                 -- Split into components
10354                 ELSIF NVL(p_txdv_rec.split_percent,0) NOT IN (0,OKL_API.G_MISS_NUM) THEN
10355 
10356                   IF l_sll_cur%RowCount = 1 THEN
10357                     l_rgpv_rec.rgd_code      :=  'LALEVL';
10358                     l_rgpv_rec.cle_id        :=  lx_lnk_clev_rec.id;
10359                     l_rgpv_rec.dnz_chr_id    :=  lx_lnk_clev_rec.dnz_chr_id;
10360                     l_rgpv_rec.rgp_type      :=  'KRG';
10361 
10362                     OKL_RULE_PUB.create_rule_group(
10363                      p_api_version                =>  p_api_version,
10364                      p_init_msg_list              =>  p_init_msg_list,
10365                      x_return_status              =>  x_return_status,
10366                      x_msg_count                  =>  x_msg_count,
10367                      x_msg_data                   =>  x_msg_data,
10368                      p_rgpv_rec                   =>  l_rgpv_rec,
10369                      x_rgpv_rec                   =>  lx_rgpv_rec);
10370 
10371                     --dbms_output.put_line('After updating payments :'||x_return_status);
10372                     IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
10373                       RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
10374                     ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
10375                       RAISE OKL_API.G_EXCEPTION_ERROR;
10376                     END IF;
10377                   END IF;
10378 
10379                   --Bug# 3897490
10380                   IF (l_strm_type_id IS NULL OR l_strm_type_id <> l_sll_rec.strm_type_id1) THEN
10381                   --30-oct-03  : 3143522 - SLH should be created only once
10382                       --create slh
10383                       l_slh_rulv_rec.rgp_id                    := lx_rgpv_rec.id;
10384                       l_slh_rulv_rec.rule_information_category := 'LASLH';
10385                       l_slh_rulv_rec.jtot_object1_code         := l_sll_rec.strm_type_source;
10386                       l_slh_rulv_rec.object1_id1               := l_sll_rec.strm_type_id1;
10387                       l_slh_rulv_rec.object1_id2               := l_sll_rec.strm_type_id2;
10388                       l_slh_rulv_rec.dnz_chr_id                := lx_rgpv_rec.dnz_chr_id;
10389                       l_slh_rulv_rec.std_template_yn           := 'N';
10390                       l_slh_rulv_rec.warn_yn                   := 'N';
10391                       l_slh_rulv_rec.template_yn               := 'N';
10392 
10393                       OKL_RULE_PUB.create_rule(
10394                           p_api_version         => p_api_version,
10395                           p_init_msg_list       => p_init_msg_list,
10396                           x_return_status       => x_return_status,
10397                           x_msg_count           => x_msg_count,
10398                           x_msg_data            => x_msg_data,
10399                           p_rulv_rec            => l_slh_rulv_rec,
10400                           x_rulv_rec            => lx_slh_rulv_rec);
10401 
10402                       --dbms_output.put_line('After updating payments :'||x_return_status);
10403                       IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
10404                           RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
10405                       ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
10406                           RAISE OKL_API.G_EXCEPTION_ERROR;
10407                       END IF;
10408 
10409                       --Bug# 3897490
10410                       l_strm_type_id := l_sll_rec.strm_type_id1;
10411                   END IF;
10412 
10413                   --create sll
10414                   l_sll_rulv_rec.dnz_chr_id                := lx_rgpv_rec.dnz_chr_id;
10415                   l_sll_rulv_rec.rgp_id                    := lx_rgpv_rec.id;
10416                   l_sll_rulv_rec.std_template_yn           := lx_slh_rulv_rec.std_template_yn;
10417                   l_sll_rulv_rec.warn_yn                   := lx_slh_rulv_rec.warn_yn;
10418                   l_sll_rulv_rec.template_yn               := lx_slh_rulv_rec.template_yn;
10419                   l_sll_rulv_rec.rule_information_category := 'LASLL';
10420                   l_sll_rulv_rec.jtot_object1_code         := l_sll_rec.jtot_object1_code;
10421                   l_sll_rulv_rec.object1_id1               := l_sll_rec.object1_id1;
10422                   l_sll_rulv_rec.object1_id2               := l_sll_Rec.object1_id2;
10423                   l_sll_rulv_rec.jtot_object2_code         := l_sll_rec.jtot_object2_code;
10424                   l_sll_rulv_rec.object2_id1               := lx_slh_rulv_rec.id;
10425     -- ansethur 28-feb-08 bug # 6697542
10426                   l_sll_rulv_rec.object2_id2               :=  '#' ; -- l_sll_rec.object2_id2;
10427     -- ansethur 28-feb-08 bug # 6697542
10428                   l_sll_rulv_rec.rule_information1         := l_sll_rec.rule_information1;
10429                   l_sll_rulv_rec.rule_information2         := l_sll_rec.rule_information2;
10430                   l_sll_rulv_rec.rule_information3         := l_sll_rec.rule_information3;
10431                   l_sll_rulv_rec.rule_information4         := l_sll_rec.rule_information4;
10432                   l_sll_rulv_rec.rule_information5         := l_sll_rec.rule_information5;
10433 
10434                   IF NVL(TO_NUMBER(l_sll_rec.amount_sll),OKL_API.G_MISS_NUM) <> OKL_API.G_MISS_NUM THEN
10435 
10436                       --Bug# 4028371
10437                       --Bug# 3502142: Use Streams Rounding Option
10438                       l_updated_sll_amount := TO_NUMBER(l_sll_rec.amount_sll) - l_split_pymt_sum;
10439                       okl_accounting_util.round_amount(
10440                                          p_api_version    => p_api_version,
10441                                          p_init_msg_list  => p_init_msg_list,
10442                                          x_return_status  => x_return_status,
10443                                          x_msg_count      => x_msg_count,
10444                                          x_msg_data       => x_msg_data,
10445                                          p_amount         => l_updated_sll_amount,
10446                                          p_currency_code  => l_sll_rec.currency_code,
10447                                          p_round_option   => 'STM',
10448                                          x_rounded_amount => l_rounded_amount
10449                                          );
10450                       IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
10451                         RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
10452                       ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
10453                         RAISE OKL_API.G_EXCEPTION_ERROR;
10454                       END IF;
10455 
10456                       l_updated_sll_amount := l_rounded_amount;
10457                       l_sll_rulv_rec.rule_information6         := l_updated_sll_amount;
10458 
10459                   ELSIF NVL(TO_NUMBER(l_sll_rec.amount_sll),OKL_API.G_MISS_NUM) = OKL_API.G_MISS_NUM THEN
10460                       l_sll_rulv_rec.rule_information6 := NULL;
10461                   END IF;
10462                   l_sll_rulv_rec.rule_information7         := l_sll_rec.rule_information7;
10463                   --Bug# 2757289 : For stup payments
10464                   IF NVL(TO_NUMBER(l_sll_rec.amount_stub),OKL_API.G_MISS_NUM) <> OKL_API.G_MISS_NUM THEN
10465 
10466                       --Bug# 4028371
10467                       --Bug# 3502142: Use Streams Rounding Option
10468                       l_updated_stub_amount := TO_NUMBER(l_sll_rec.amount_stub) - l_split_pymt_sum;
10469                       okl_accounting_util.round_amount(
10470                                          p_api_version    => p_api_version,
10471                                          p_init_msg_list  => p_init_msg_list,
10472                                          x_return_status  => x_return_status,
10473                                          x_msg_count      => x_msg_count,
10474                                          x_msg_data       => x_msg_data,
10475                                          p_amount         => l_updated_stub_amount,
10476                                          p_currency_code  => l_sll_rec.currency_code,
10477                                          p_round_option   => 'STM',
10478                                          x_rounded_amount => l_rounded_amount
10479                                          );
10480                       IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
10481                         RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
10482                       ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
10483                         RAISE OKL_API.G_EXCEPTION_ERROR;
10484                       END IF;
10485 
10486                       l_updated_stub_amount := l_rounded_amount;
10487                       l_sll_rulv_rec.rule_information8         := l_updated_stub_amount;
10488 
10489                   ELSIF NVL(TO_NUMBER(l_sll_rec.amount_stub),OKL_API.G_MISS_NUM) = OKL_API.G_MISS_NUM THEN
10490                       l_sll_rulv_rec.rule_information8 := NULL;
10491                   END IF;
10492                   --l_sll_rulv_rec.rule_information8         := l_sll_rec.rule_information8;
10493                   l_sll_rulv_rec.rule_information9         := l_sll_rec.rule_information9;
10494                   l_sll_rulv_rec.rule_information10        := l_sll_rec.rule_information10;
10495                   l_sll_rulv_rec.rule_information11        := l_sll_rec.rule_information11;
10496                   l_sll_rulv_rec.rule_information12        := l_sll_rec.rule_information12;
10497                   l_sll_rulv_rec.rule_information13        := l_sll_rec.rule_information13;
10498                   l_sll_rulv_rec.rule_information14        := l_sll_rec.rule_information14;
10499                   l_sll_rulv_rec.rule_information15        := l_sll_rec.rule_information15;
10500 
10501                   OKL_RULE_PUB.create_rule(
10502                       p_api_version         => p_api_version,
10503                       p_init_msg_list       => p_init_msg_list,
10504                       x_return_status       => x_return_status,
10505                       x_msg_count           => x_msg_count,
10506                       x_msg_data            => x_msg_data,
10507                       p_rulv_rec            => l_sll_rulv_rec,
10508                       x_rulv_rec            => lx_sll_rulv_rec);
10509 
10510                   --dbms_output.put_line('After updating payments :'||x_return_status);
10511                   IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
10512                       RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
10513                   ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
10514                       RAISE OKL_API.G_EXCEPTION_ERROR;
10515                   END IF;
10516 
10517                 END IF;
10518 
10519             END LOOP;
10520             CLOSE l_sll_cur;
10521         END LOOP;
10522         CLOSE l_lnk_asst_cur;
10523     END IF;
10524     --will also have to think about UBB
10525 
10526     --Bug# 6344223
10527     --update unit cost
10528    adjust_unit_cost(p_api_version   => p_api_version,
10529                     p_init_msg_list =>p_init_msg_list,
10530                     x_return_status =>x_return_status,
10531                     x_msg_count     =>x_msg_count,
10532                     x_msg_data      =>x_msg_data,
10533                     p_cle_id        =>l_fa_line_id ,
10534                     p_txdv_rec      =>p_txdv_rec,
10535                     p_txlv_rec      =>p_txlv_rec
10536                     );
10537     IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
10538          RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
10539     ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
10540          RAISE OKL_API.G_EXCEPTION_ERROR;
10541     END IF;
10542 
10543    -- Bug# 6344223
10544 
10545     OKL_API.END_ACTIVITY (x_msg_count,
10546                           x_msg_data );
10547     EXCEPTION
10548     WHEN OKL_API.G_EXCEPTION_ERROR THEN
10549     x_return_status := OKL_API.HANDLE_EXCEPTIONS(
10550                                l_api_name,
10551                                G_PKG_NAME,
10552                                'OKL_API.G_RET_STS_ERROR',
10553                                x_msg_count,
10554                                x_msg_data,
10555                                '_PVT');
10556     WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
10557     x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
10558                               l_api_name,
10559                               G_PKG_NAME,
10560                               'OKL_API.G_RET_STS_UNEXP_ERROR',
10561                               x_msg_count,
10562                               x_msg_data,
10563                               '_PVT');
10564     WHEN OTHERS THEN
10565     x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
10566                               l_api_name,
10567                               G_PKG_NAME,
10568                               'OTHERS',
10569                               x_msg_count,
10570                               x_msg_data,
10571                               '_PVT');
10572 END Adjust_Split_Lines;
10573 --------------------------------------------------------------------------------
10574 --Start of Comments
10575 --Procedure Name : ABANDON_PARENT_ASSET
10576 --Description    : Abandons Parent Asset for Split Asset Component Parent
10577 --History        :
10578 --                 24-Jul-2002  ashish.singh Created
10579 --End of Comments
10580 --------------------------------------------------------------------------------
10581 PROCEDURE ABANDON_PARENT_ASSET(
10582                 p_api_version    IN  NUMBER,
10583                 p_init_msg_list  IN  VARCHAR2 DEFAULT OKL_API.G_FALSE,
10584                 x_return_status  OUT NOCOPY VARCHAR2,
10585                 x_msg_count      OUT NOCOPY NUMBER,
10586                 x_msg_data       OUT NOCOPY VARCHAR2,
10587                 p_cle_id         IN  NUMBER) IS
10588 
10589 l_return_status        VARCHAR2(1)  DEFAULT OKL_API.G_RET_STS_SUCCESS;
10590 l_api_name             CONSTANT VARCHAR2(30) := 'ABANDON_PARENT_ASSET';
10591 l_api_version          CONSTANT NUMBER := 1.0;
10592 
10593 CURSOR c_lines_cur(p_cle_id IN NUMBER) IS
10594     SELECT LEVEL,
10595            id,
10596                    chr_id,
10597                    cle_id,
10598                    dnz_chr_id,
10599            lse_id
10600     FROM   okc_k_lines_b
10601     CONNECT BY  PRIOR id = cle_id
10602     START WITH  id = p_cle_id;
10603 
10604     c_lines_rec c_lines_cur%ROWTYPE;
10605     l_clev_rec  okl_okc_migration_pvt.clev_rec_type;
10606     lx_clev_rec okl_okc_migration_pvt.clev_rec_type;
10607 
10608 --Bug#3066375 :
10609 --Cursor to fetch linked asset lines for parent asset being abandoned
10610 CURSOR l_lnk_asst_csr (p_cle_id IN NUMBER) IS
10611 SELECT lnk_cleb.id lnk_cle_id
10612 FROM   okc_k_lines_b       lnk_cleb,
10613        okc_line_styles_b   lnk_lseb,
10614        okc_statuses_b      lnk_stsb,
10615        okc_k_items         lnk_cim
10616 WHERE  lnk_cleb.id         = lnk_cim.cle_id
10617 AND    lnk_cleb.dnz_chr_id = lnk_cim.dnz_chr_id
10618 AND    lnk_cleb.lse_id     = lnk_lseb.id
10619 AND    lnk_lseb.lty_code IN
10620        ('LINK_FEE_ASSET','LINK_SERV_ASSET','LINK_USAGE_ASSET')
10621 AND    lnk_cleb.sts_code   =  lnk_stsb.code
10622 AND    lnk_stsb.ste_code NOT IN ('HOLD','EXPIRED','TERMINATED','CANCELLED')
10623 AND    lnk_cim.object1_id1 = TO_CHAR(p_cle_id)
10624 AND    lnk_cim.object1_id2 = '#'
10625 AND    lnk_cim.jtot_object1_code = 'OKX_COVASST';
10626 
10627 l_lnk_cle_id okc_k_lines_b.id%TYPE;
10628 l_lnk_clev_rec  okl_okc_migration_pvt.clev_rec_type;
10629 lx_lnk_clev_rec okl_okc_migration_pvt.clev_rec_type;
10630 
10631 BEGIN
10632 -----
10633     x_return_status := OKL_API.G_RET_STS_SUCCESS;
10634     -- Call start_activity to create savepoint, check compatibility
10635     -- and initialize message list
10636     x_return_status := OKL_API.START_ACTIVITY (
10637                                l_api_name
10638                                ,p_init_msg_list
10639                                ,'_PVT'
10640                                ,x_return_status);
10641     -- Check if activity started successfully
10642     IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
10643        RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
10644     ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
10645        RAISE OKL_API.G_EXCEPTION_ERROR;
10646     END IF;
10647 
10648    OPEN c_lines_cur(p_cle_id => p_cle_id);
10649    LOOP
10650        FETCH c_lines_cur INTO c_lines_rec;
10651        EXIT WHEN c_lines_cur%NOTFOUND;
10652        l_clev_rec.id := c_lines_rec.id;
10653        l_clev_rec.sts_code := 'ABANDONED';
10654 
10655        okl_okc_migration_pvt.update_contract_line(
10656             p_api_version        => p_api_version,
10657             p_init_msg_list      => p_init_msg_list,
10658             x_return_status      => x_return_status,
10659             x_msg_count          => x_msg_count,
10660             x_msg_data           => x_msg_data,
10661             p_clev_rec           => l_clev_rec,
10662             x_clev_rec           => lx_clev_rec);
10663 
10664         --Bug# 3066375 : abandon linked asset lines
10665         OPEN l_lnk_asst_csr(p_cle_id => p_cle_id);
10666         LOOP
10667             FETCH l_lnk_asst_csr INTO l_lnk_cle_id;
10668             EXIT WHEN l_lnk_asst_csr%NOTFOUND;
10669             l_lnk_clev_rec.id := l_lnk_cle_id;
10670             l_lnk_clev_rec.sts_code := 'ABANDONED';
10671 
10672             okl_okc_migration_pvt.update_contract_line(
10673             p_api_version        => p_api_version,
10674             p_init_msg_list      => p_init_msg_list,
10675             x_return_status      => x_return_status,
10676             x_msg_count          => x_msg_count,
10677             x_msg_data           => x_msg_data,
10678             p_clev_rec           => l_lnk_clev_rec,
10679             x_clev_rec           => lx_lnk_clev_rec);
10680 
10681             IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
10682                 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
10683             ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
10684                 RAISE OKL_API.G_EXCEPTION_ERROR;
10685             END IF;
10686 
10687          END LOOP;
10688          CLOSE l_lnk_asst_csr;
10689          --Bug# 3066375 end.
10690 
10691     END LOOP;
10692     CLOSE c_lines_cur;
10693     --will also have to think about UBB
10694     OKL_API.END_ACTIVITY (x_msg_count,
10695                           x_msg_data );
10696     EXCEPTION
10697     WHEN OKL_API.G_EXCEPTION_ERROR THEN
10698     x_return_status := OKL_API.HANDLE_EXCEPTIONS(
10699                                l_api_name,
10700                                G_PKG_NAME,
10701                                'OKL_API.G_RET_STS_ERROR',
10702                                x_msg_count,
10703                                x_msg_data,
10704                                '_PVT');
10705     WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
10706     x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
10707                               l_api_name,
10708                               G_PKG_NAME,
10709                               'OKL_API.G_RET_STS_UNEXP_ERROR',
10710                               x_msg_count,
10711                               x_msg_data,
10712                               '_PVT');
10713     WHEN OTHERS THEN
10714     x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
10715                               l_api_name,
10716                               G_PKG_NAME,
10717                               'OTHERS',
10718                               x_msg_count,
10719                               x_msg_data,
10720                               '_PVT');
10721 END ABANDON_PARENT_ASSET;
10722 
10723 --Bug# 6061103
10724 PROCEDURE is_evergreen_df_lease
10725                    (p_api_version     IN  NUMBER,
10726                     p_init_msg_list   IN  VARCHAR2,
10727                     x_return_status   OUT NOCOPY VARCHAR2,
10728                     x_msg_count       OUT NOCOPY NUMBER,
10729                     x_msg_data        OUT NOCOPY VARCHAR2,
10730                     p_cle_id          IN  NUMBER,
10731                     p_book_type_code  IN VARCHAR2,
10732                     p_asset_status    IN VARCHAR2,
10733                     p_pdt_id          IN NUMBER,
10734                     p_start_date      IN DATE,
10735                     x_amortization_date OUT NOCOPY DATE,
10736                     x_special_treatment_required OUT NOCOPY VARCHAR2
10737                    )     IS
10738  l_return_status        VARCHAR2(1)  default OKL_API.G_RET_STS_SUCCESS;
10739  l_api_name             CONSTANT varchar2(30) := 'is_evergreen_df_lease';
10740  l_api_version          CONSTANT NUMBER := 1.0;
10741 --cursor to find book class
10742    CURSOR l_book_class_cur(p_book_type_code IN VARCHAR2) IS
10743    SELECT book_class
10744    FROM   okx_asst_bk_controls_v
10745    WHERE  book_type_code = p_book_type_code;
10746    l_book_class okx_asst_bk_controls_v.book_class%TYPE;
10747  l_contract_number       OKC_K_HEADERS_B.contract_number%TYPE;
10748  l_scs_code          Varchar2(30);
10749  l_sts_code          Varchar2(30);
10750  l_deal_type         Varchar2(30);
10751  l_pdt_id            Number;
10752  l_start_date        Date;
10753  l_asset_status okc_k_lines_b.sts_code%TYPE;
10754  l_chr_id NUMBER;
10755  l_amortization_date DATE;
10756  l_special_treatment_required VARCHAR2(1);
10757  l_pdt_date                DATE;
10758  l_pdtv_rec                okl_setupproducts_pub.pdtv_rec_type;
10759  l_pdt_parameter_rec       okl_setupproducts_pub.pdt_parameters_rec_type;
10760  l_rep_pdt_parameter_rec   okl_setupproducts_pub.pdt_parameters_rec_type;
10761  l_reporting_product       OKL_PRODUCTS_V.NAME%TYPE;
10762  l_no_data_found           BOOLEAN;
10763  l_rep_pdt_id NUMBER;
10764  l_rep_deal_type           okl_product_parameters_v.deal_type%TYPE;
10765  l_tax_owner         Varchar2(150);
10766  l_rep_tax_owner         Varchar2(150);
10767  l_Multi_GAAP_YN     Varchar2(1);
10768  l_mg_rep_book             fa_book_controls.book_type_code%TYPE;
10769   l_amortization_start_date DATE:=NULL;
10770   -- CURSOR TO GET MAX OFF LEASE TRX DATESELECT
10771    Cursor tax_off_trx_amt(p_asset_id in number, p_tax_book in varchar2) is
10772     select  tas.date_trans_occurred
10773     FROM   OKL_TRX_ASSETS tas,
10774           OKL_TXL_ASSETS_B tal,
10775           OKL_TXD_ASSETS_B txl
10776    WHERE tas.id = tal.tas_id
10777    AND   tal.id = txl.tal_id
10778    AND   txl.tax_book  = p_tax_book
10779    AND    tas.tsu_code  = 'PROCESSED'
10780    AND    tas.tas_type in ('AMT')
10781    And tal.kle_id = p_asset_id;
10782    Cursor corp_off_trx_amt(p_asset_id in number, p_corp_book in varchar2) is
10783    SELECT
10784           tas.date_trans_occurred
10785    FROM   OKL_TRX_ASSETS tas,
10786           OKL_TXL_ASSETS_B tal,
10787           OKL_TXD_ASSETS_B txd
10788    WHERE tas.id = tal.tas_id
10789    AND   tal.corporate_book  = P_corp_book
10790    AND    tas.tsu_code = 'PROCESSED'
10791    AND   tas.tas_type in ('AMT')
10792    And   tal.kle_id = p_asset_id
10793    AND   tal.id = txd.tal_id(+)
10794    AND   TAX_BOOK IS NULL ;
10795     Cursor tax_off_trx_aus(p_asset_id in number, p_tax_book in varchar2) is
10796     select  tas.date_trans_occurred
10797     FROM   OKL_TRX_ASSETS tas,
10798           OKL_TXL_ASSETS_B tal,
10799           OKL_TXD_ASSETS_B txl
10800    WHERE tas.id = tal.tas_id
10801    AND   tal.id = txl.tal_id
10802    AND   txl.tax_book  = p_tax_book
10803    AND    tas.tsu_code  = 'PROCESSED'
10804    AND    tas.tas_type in ('AUS')
10805    And tal.kle_id = p_asset_id;
10806    Cursor corp_off_trx_aus(p_asset_id in number, p_corp_book in varchar2) is
10807    SELECT
10808           tas.date_trans_occurred
10809    FROM   OKL_TRX_ASSETS tas,
10810           OKL_TXL_ASSETS_B tal,
10811           OKL_TXD_ASSETS_B txd
10812    WHERE tas.id = tal.tas_id
10813    AND   tal.corporate_book  = P_corp_book
10814    AND    tas.tsu_code = 'PROCESSED'
10815    AND    tas.tas_type in ('AUS')
10816    And tal.kle_id = p_asset_id
10817    AND   tal.id = txd.tal_id(+)
10818    AND   TAX_BOOK IS NULL ;
10819    l_trans_date_aus DATE;
10820    l_trans_date_amt DATE;
10821 BEGIN
10822      --call start activity to set savepoint
10823     l_return_status := OKL_API.START_ACTIVITY( substr(l_api_name,1,26),
10824                                                 p_init_msg_list,
10825                                                 '_PVT',
10826                                                 x_return_status);
10827     IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
10828       RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
10829     ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
10830       RAISE OKL_API.G_EXCEPTION_ERROR;
10831     END IF;
10832    l_pdtv_rec.id    := p_pdt_id;
10833    l_no_data_found  := TRUE;
10834    l_pdt_date :=p_start_date;
10835    okl_setupproducts_pub.Getpdt_parameters(p_api_version      => p_api_version,
10836                                              p_init_msg_list     => p_init_msg_list,
10837                       			             x_return_status     => l_return_status,
10838             			                     x_no_data_found     => l_no_data_found,
10839                               		         x_msg_count         => x_msg_count,
10840                               		         x_msg_data          => x_msg_data,
10841 					                         p_pdtv_rec          => l_pdtv_rec,
10842 					                         p_product_date      => l_pdt_date,
10843 					                         p_pdt_parameter_rec => l_pdt_parameter_rec);
10844      IF l_return_status <> OKC_API.G_RET_STS_SUCCESS THEN
10845         -- Error getting financial product parameters for contract CONTRACT_NUMBER.
10846         OKC_API.set_message(  p_app_name      => 'OKL',
10847                            p_msg_name      => 'OKL_AM_FIN_PROD_PARAM_ERR',
10848                            p_token1        =>  'CONTRACT_NUMBER',
10849                            p_token1_value  =>  l_contract_number);
10850          RAISE OKL_API.G_EXCEPTION_ERROR;
10851      END IF;
10852      --dbms_output.put_line('l_pdt_parameter_rec.reporting_pdt_id '||l_pdt_parameter_rec.reporting_pdt_id );
10853      l_mg_rep_book :=NULL;
10854       if l_pdt_parameter_rec.reporting_pdt_id IS NULL Then
10855          l_rep_pdt_id    := Null;
10856          l_tax_owner     := l_pdt_parameter_rec.tax_owner;
10857          l_deal_type     :=  l_pdt_parameter_rec.deal_type;
10858          l_rep_deal_type := Null;
10859          l_rep_tax_owner :=NULL;
10860       Else
10861          l_rep_pdt_id    := l_pdt_parameter_rec.reporting_pdt_id;
10862          l_tax_owner     := l_pdt_parameter_rec.tax_owner;
10863          l_deal_type     :=  l_pdt_parameter_rec.deal_type;
10864          --get reporting product param values
10865          l_no_data_found := TRUE;
10866          l_pdtv_rec.id := l_rep_pdt_id;
10867          IF l_rep_pdt_id IS NOT NULL AND l_rep_pdt_id <> OKC_API.G_MISS_NUM THEN
10868           okl_setupproducts_pub.Getpdt_parameters(p_api_version      => p_api_version,
10869                                                  p_init_msg_list     => p_init_msg_list,
10870                                                  x_return_status     => l_return_status,
10871                                                  x_no_data_found     => l_no_data_found,
10872                                  		         x_msg_count         => x_msg_count,
10873                                  		         x_msg_data          => x_msg_data,
10874     					                         p_pdtv_rec          => l_pdtv_rec,
10875     					                         p_product_date      => l_pdt_date,
10876     					                         p_pdt_parameter_rec => l_rep_pdt_parameter_rec);
10877           IF l_return_status <> OKL_API.G_RET_STS_SUCCESS Then
10878                 -- Error getting reporting product parameters for contract CONTRACT_NUMBER.
10879                 OKC_API.set_message(  p_app_name      => 'OKL',
10880                                   p_msg_name      => 'OKL_AM_REP_PROD_PARAM_ERR',
10881                                   p_token1        => 'CONTRACT_NUMBER',
10882                                   p_token1_value  => l_contract_number);
10883                 RAISE OKL_API.G_EXCEPTION_ERROR;
10884           Else
10885              l_rep_deal_type :=  l_rep_pdt_parameter_rec.deal_type;
10886              l_rep_tax_owner := l_rep_pdt_parameter_rec.tax_owner;
10887              IF l_rep_deal_type IS NULL OR l_rep_deal_type = OKC_API.G_MISS_CHAR THEN
10888                     --Deal Type not defined for Reporting product REP_PROD.
10889                     OKC_API.set_message(  p_app_name      => 'OKL',
10890                                  p_msg_name      => 'OKL_AM_NO_MG_DEAL_TYPE',
10891                                  p_token1        => 'REP_PROD',
10892                                  p_token1_value  => l_reporting_product);
10893                     RAISE OKL_API.G_EXCEPTION_ERROR;
10894              End If;
10895              l_Multi_GAAP_YN := 'Y';
10896          End If;
10897          -- get the MG reporting book
10898          -- Bug#6695409
10899            l_mg_rep_book := OKL_SYSTEM_PARAMS_ALL_PUB.get_system_param_value(OKL_SYSTEM_PARAMS_ALL_PUB.G_RPT_PROD_BOOK_TYPE_CODE);
10900 
10901            IF l_mg_rep_book IS NULL THEN
10902                     --Multi GAAP Reporting Book is not defined.
10903                    OKL_API.set_message(  p_app_name      => 'OKL',
10904                               p_msg_name      => 'OKL_AM_NO_MG_REP_BOOK');
10905                    RAISE OKL_API.G_EXCEPTION_ERROR;
10906           END IF; --mg book
10907          END IF; --l_rep_pdt_id IS not null
10908        END IF;  --reporting_pdt_id IS NULL
10909      l_book_class := NULL;
10910      OPEN l_book_class_cur(p_book_type_code => p_book_type_code);
10911          FETCH l_book_class_cur INTO l_book_class;
10912          IF l_book_class_cur%NOTFOUND THEN
10913              NULL;
10914          END IF;
10915      CLOSE l_book_class_cur;
10916      l_special_treatment_required :='N';
10917      IF p_asset_status IN ('TERMINATED','EXPIRED','EVERGREEN') THEN
10918          IF (l_book_class = 'CORPORATE') AND (l_deal_type in ('LEASEDF','LEASEST')) then
10919              --rirawat
10920              open corp_off_trx_aus(p_cle_id , p_book_type_code);
10921              FETCH corp_off_trx_aus INTO l_amortization_date;
10922              close  corp_off_trx_aus ;
10923              IF l_amortization_date IS NULL THEN
10924                  open corp_off_trx_amt(p_cle_id , p_book_type_code);
10925                  FETCH corp_off_trx_amt INTO l_amortization_date;
10926                  close  corp_off_trx_amt ;
10927              END IF ;
10928              --l_amortization_date := sysdate;
10929              l_special_treatment_required := 'Y';
10930          elsif ((l_book_class = 'TAX') and (l_Multi_GAAP_YN = 'Y') and (l_rep_deal_type  in ('LEASEDF','LEASEST')) and (p_book_type_code = l_mg_rep_book)) then
10931              --rirawat
10932              open  tax_off_trx_aus(p_cle_id , p_book_type_code);
10933              FETCH tax_off_trx_aus INTO l_amortization_date;
10934              close tax_off_trx_aus ;
10935              IF l_amortization_date IS NULL THEN
10936               open tax_off_trx_amt(p_cle_id , p_book_type_code);
10937               FETCH tax_off_trx_amt INTO l_amortization_date;
10938               close tax_off_trx_amt ;
10939              END IF;
10940              --l_amortization_date := sysdate;
10941              l_special_treatment_required := 'Y';
10942          elsif ((l_book_class = 'TAX') and (l_tax_owner ='LESSEE')) THEN
10943              open  tax_off_trx_aus(p_cle_id , p_book_type_code);
10944              FETCH tax_off_trx_aus INTO l_amortization_date;
10945              close tax_off_trx_aus ;
10946              IF l_amortization_date IS NULL THEN
10947               open tax_off_trx_amt(p_cle_id , p_book_type_code);
10948               FETCH tax_off_trx_amt INTO l_amortization_date;
10949               close tax_off_trx_amt ;
10950              END IF;
10951              --l_amortization_date := sysdate;
10952              l_special_treatment_required := 'Y';
10953          END IF;
10954      END IF;
10955      x_amortization_date := l_amortization_date;
10956      x_special_treatment_required := l_special_treatment_required;
10957      --Call end Activity
10958      OKL_API.END_ACTIVITY(x_msg_count, x_msg_data);
10959  EXCEPTION
10960     WHEN OKL_API.G_EXCEPTION_ERROR THEN
10961     x_return_status := OKL_API.HANDLE_EXCEPTIONS(
10962                                l_api_name,
10963                                G_PKG_NAME,
10964                                'OKL_API.G_RET_STS_ERROR',
10965                                x_msg_count,
10966                                x_msg_data,
10967                                '_PVT');
10968     WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
10969     x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
10970                               l_api_name,
10971                               G_PKG_NAME,
10972                               'OKL_API.G_RET_STS_UNEXP_ERROR',
10973                               x_msg_count,
10974                               x_msg_data,
10975                               '_PVT');
10976     WHEN OTHERS THEN
10977     x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
10978                               l_api_name,
10979                               G_PKG_NAME,
10980                               'OTHERS',
10981                               x_msg_count,
10982                               x_msg_data,
10983                               '_PVT');
10984 END;
10985 --------------------------------------------------------------------------------
10986 --Start of Comments
10987 --Procedure Name : FIXED_ASSET_ADD
10988 --Description    : Calls FA additions api to create new assets for
10989 --                 and split children
10990 --History        :
10991 --                 28-Nov-2001  ashish.singh Created
10992 --               Bug# 6373605 (OKL.R12.B SLA CRs
10993 --               p_sla_source_header_id    IN Number,
10994 --                  ID of source OKL_TRX_ASSETS record
10995 --               p_sla_source_header_table IN Varchar2,
10996 --                  'OKL_TRX_ASSETS'
10997 --               p_sla_source_try_id       IN Number,
10998 --                   OKL_TRX_ASSETS.try_id (transaction type id)
10999 --               p_sla_source_line_id      IN Number,
11000 --                   ID of line table (OKL_TXL_ASSETS_B or
11001 --                                     OKL_TXD_ASSETS_B
11002 --               p_sla_source_line_table   IN Varchar2,
11003 --                    OKL_TXL_ASSETS_B or OKL_TXD_ASSETS_B
11004 --               p_sla_source_chr_id       IN Number,
11005 --                    Contract id of the contract on which
11006 --                    source transaction happened
11007 --               p_sla_source_kle_id       IN Number,
11008 --                    Financial asset line id (lse_id = 33)
11009 --               p_sla_asset_chr_id        IN Number,
11010 --                    Contract on which asset is present
11011 --                    at the time of transaction (in case of
11012 --                    online rebook transaction is against the rebook
11013 --                    copy contract whereas the asset is on
11014 --                    original contract
11015 --End of Comments
11016 --------------------------------------------------------------------------------
11017 PROCEDURE FIXED_ASSET_ADD   (p_api_version   IN  NUMBER,
11018                              p_init_msg_list IN  VARCHAR2 DEFAULT OKL_API.G_FALSE,
11019                              x_return_status OUT NOCOPY VARCHAR2,
11020                              x_msg_count     OUT NOCOPY NUMBER,
11021                              x_msg_data      OUT NOCOPY VARCHAR2,
11022                              p_ast_line_rec  IN  ast_line_rec_type,
11023                              p_txlv_rec      IN  txlv_rec_type,
11024                              p_txdv_rec      IN  txdv_rec_type,
11025                              --3156924
11026                              p_trx_date      IN  DATE,
11027                              p_trx_number    IN  NUMBER,
11028                              --Bug# 6373605--SLA populate source
11029                              p_sla_source_header_id    IN Number,
11030                              p_sla_source_header_table IN Varchar2,
11031                              p_sla_source_try_id       IN Number,
11032                              p_sla_source_line_id      IN Number,
11033                              p_sla_source_line_table   IN Varchar2,
11034                              p_sla_source_chr_id       IN Number,
11035                              p_sla_source_kle_id       IN Number,
11036                              p_sla_asset_chr_id        IN Number,
11037                              --Bug# 6373605--SLA populate source
11038                              --Bug# 4028371
11039                              x_fa_trx_date   OUT NOCOPY date,
11040                              x_asset_hdr_rec OUT NOCOPY FA_API_TYPES.asset_hdr_rec_type) IS
11041 
11042 l_return_status        VARCHAR2(1)  DEFAULT OKL_API.G_RET_STS_SUCCESS;
11043 l_api_name             CONSTANT VARCHAR2(30) := 'FIXED_ASSET_ADD';
11044 l_api_version          CONSTANT NUMBER := 1.0;
11045 
11046 l_trans_rec                FA_API_TYPES.trans_rec_type;
11047 l_dist_trans_rec           FA_API_TYPES.trans_rec_type;
11048 l_asset_hdr_rec            FA_API_TYPES.asset_hdr_rec_type;
11049 l_asset_desc_rec           FA_API_TYPES.asset_desc_rec_type;
11050 l_asset_cat_rec            FA_API_TYPES.asset_cat_rec_type;
11051 l_asset_type_rec           FA_API_TYPES.asset_type_rec_type;
11052 l_asset_fin_rec            FA_API_TYPES.asset_fin_rec_type;
11053 --l_asset_fin_glob_dff_rec   FA_API_TYPES.asset_fin_glob_dff_rec_type;
11054 l_asset_deprn_rec          FA_API_TYPES.asset_deprn_rec_type;
11055 l_asset_dist_rec           FA_API_TYPES.asset_dist_rec_type;
11056 l_asset_dist_tbl           FA_API_TYPES.asset_dist_tbl_type;
11057 l_inv_tbl                  FA_API_TYPES.inv_tbl_type;
11058 l_asset_hierarchy_rec      fa_api_types.asset_hierarchy_rec_type;
11059 
11060 l_split_factor             NUMBER;
11061 
11062 --cursor to get asset key ccid
11063    CURSOR asset_k_ccid_cur(p_asset_id IN NUMBER) IS
11064    SELECT asset_key_ccid
11065    FROM   fa_additions
11066    WHERE  asset_id = p_asset_id;
11067 
11068 --cursor to get depreciation info
11069   CURSOR  deprn_cur (p_asset_id        IN NUMBER,
11070                      p_book_type_code  IN VARCHAR2,
11071                      p_split_factor IN NUMBER) IS
11072   SELECT  ytd_deprn           - (ytd_deprn -(ytd_deprn*p_split_factor)),
11073           deprn_reserve       - (deprn_reserve -(deprn_reserve*p_split_factor)),
11074           prior_fy_expense    - (prior_fy_expense-(prior_fy_expense*p_split_factor)),
11075           bonus_ytd_deprn     - (bonus_ytd_deprn-(bonus_ytd_deprn*p_split_factor)),
11076           bonus_deprn_reserve - (bonus_deprn_reserve-(bonus_deprn_reserve*p_split_factor))
11077    FROM   okx_ast_dprtns_v
11078    WHERE  asset_id       = p_asset_id
11079    AND    book_type_code = p_book_type_code
11080    AND    deprn_run_date = (SELECT MAX(deprn_run_date)
11081                             FROM   okx_ast_dprtns_v
11082                             WHERE  asset_id       = p_asset_id
11083                             AND    book_type_code = p_book_type_code);
11084 
11085 --cursor to get asset distribution rec
11086    CURSOR     ast_dist_cur (p_asset_id        IN NUMBER,
11087                             p_book_type_code  IN VARCHAR2,
11088                             p_units           IN NUMBER) IS
11089    SELECT --p_txdv_rec.quantity,
11090           --p_ast_line_rec.current_units,
11091           p_units,
11092           assigned_to,
11093           code_combination_id,
11094           location_id,
11095           p_units
11096           --p_txdv_rec.quantity
11097           --p_ast_line_rec.current_units
11098    FROM   okx_ast_dst_hst_v
11099    WHERE  asset_id       = p_asset_id
11100    AND    book_type_code = p_book_type_code
11101    AND    transaction_header_id_out IS NULL
11102    AND    retirement_id IS NULL;
11103 
11104    -- Bug# 5946411 -- start
11105    CURSOR ast_dep_limit_csr (p_asset_id        IN NUMBER,
11106                              p_book_type_code  IN VARCHAR2
11107                             ) IS
11108    SELECT ALLOWED_DEPRN_LIMIT,
11109           ALLOWED_DEPRN_LIMIT_AMOUNT
11110           ,DEPRN_LIMIT_TYPE
11111           ,DEPRECIATE_FLAG
11112           --Bug# 6152614
11113           ,PRORATE_CONVENTION_CODE
11114           ,PRORATE_DATE
11115    FROM   FA_books
11116    WHERE  asset_id       = p_asset_id
11117    AND    book_type_code = p_book_type_code
11118    AND    transaction_header_id_out IS NULL;
11119 
11120    l_allowed_deprn_limit  FA_books.ALLOWED_DEPRN_LIMIT%TYPE;
11121    l_allowed_deprn_limit_amount FA_books.allowed_deprn_limit_amount%type;
11122    l_deprn_limit_type  FA_books.DEPRN_LIMIT_TYPE%TYPE;
11123    l_depreciate_flag   FA_books.DEPRECIATE_FLAG%TYPE;
11124    -- Bug# 5946411 -- end
11125    -- Bug# 6152614
11126    l_prorate_convention_code   FA_books.PRORATE_CONVENTION_CODE%TYPE;
11127    l_prorate_date   FA_books.PRORATE_DATE%TYPE;
11128 
11129 --cursor to fetch already created asset id if book_class is TAX ie. corp book is already created
11130    CURSOR  get_ast_id_cur (p_asset_number    IN VARCHAR2,
11131                            p_book_type_code  IN VARCHAR2) IS
11132    SELECT DECODE(bkc.book_class,'CORPORATE',NULL,'TAX',ast.asset_id)
11133    FROM   okx_assets_v ast,
11134           okx_asst_bk_controls_v bkc
11135    WHERE  ast.asset_number             = p_asset_number
11136    AND    ast.corporate_book           = bkc.mass_copy_source_book
11137    AND    bkc.book_type_code           = p_book_type_code;
11138 
11139   --3156924:
11140   l_calling_interface Varchar2(30) := 'OKLRSPAB:Split Asset';
11141 
11142   --Bug# 5946411
11143   l_asset_hdr_orig_rec            FA_API_TYPES.asset_hdr_rec_type;
11144 
11145  -- bug 6061103 -- start
11146   CURSOR l_cleb_sts_csr(pcleid IN NUMBER) IS
11147  SELECT cleb.sts_code sts_code,
11148         cleb.dnz_chr_id chr_id,
11149         khr.PDT_ID,
11150         chr.START_DATE
11151  FROM   okc_k_lines_b cleb,
11152         okl_k_headers khr,
11153         OKC_K_HEADERS_B chr
11154  WHERE  cleb.id = pcleid
11155          and khr.id = cleb.dnz_chr_id
11156          and chr.id = khr.id;
11157    l_cle_status okc_k_lines_b.sts_code%TYPE;
11158  --cursor to find book class
11159    CURSOR l_book_class_cur(p_book_type_code IN VARCHAR2) IS
11160    SELECT book_class
11161    FROM   okx_asst_bk_controls_v
11162    WHERE  book_type_code = p_book_type_code;
11163    l_book_class okx_asst_bk_controls_v.book_class%TYPE;
11164    l_pdt_id            Number;
11165  l_start_date        Date;
11166  l_chr_id        number;
11167   l_temp_cost    number;
11168    l_temp_original_cost      number;
11169    l_temp_salvage_value  number;
11170    l_temp_ytd_deprn  number;
11171 l_temp_deprn_reserve number;
11172 l_temp_prior_fy_expense number;
11173 l_temp_bonus_ytd_deprn number;
11174 l_temp_bonus_deprn_reserve number;
11175   l_amortization_date DATE;
11176  l_special_treatment_required VARCHAR2(1);
11177  l_adj_trans_rec               FA_API_TYPES.trans_rec_type;
11178 l_adj_asset_fin_rec_adj       FA_API_TYPES.asset_fin_rec_type;
11179 l_adj_asset_fin_rec_new       FA_API_TYPES.asset_fin_rec_type;
11180 l_adj_asset_fin_mrc_tbl_new   FA_API_TYPES.asset_fin_tbl_type;
11181 --l_asset_fin_glob_dff_rec  FA_API_TYPES.asset_fin_glob_dff_rec_type;
11182 l_adj_inv_trans_rec           FA_API_TYPES.inv_trans_rec_type;
11183 l_adj_inv_tbl                 FA_API_TYPES.inv_tbl_type;
11184 l_adj_inv_rate_tbl            FA_API_TYPES.inv_rate_tbl_type;
11185 l_adj_asset_deprn_rec_adj     FA_API_TYPES.asset_deprn_rec_type;
11186 l_adj_asset_deprn_rec_new     FA_API_TYPES.asset_deprn_rec_type;
11187 l_adj_asset_deprn_mrc_tbl_new FA_API_TYPES.asset_deprn_tbl_type;
11188 l_adj_inv_rec                 FA_API_TYPES.inv_rec_type;
11189 l_adj_asset_deprn_rec         FA_API_TYPES.asset_deprn_rec_type;
11190 l_adj_group_recalss_option_rec FA_API_TYPES.group_reclass_options_rec_type;
11191 -- bug 6061103 -- end
11192 
11193   --Bug# 6373605 begin
11194   l_fxhv_rec okl_sla_acc_sources_pvt.fxhv_rec_type;
11195   l_fxlv_rec okl_sla_acc_sources_pvt.fxlv_rec_type;
11196   --Bug# 6373605 end
11197 
11198 --Bug# 6955027
11199 x_log_level_rec              FA_API_TYPES.log_level_rec_type;
11200 
11201 BEGIN
11202      x_return_status := OKL_API.G_RET_STS_SUCCESS;
11203     -- Call start_activity to create savepoint, check compatibility
11204     -- and initialize message list
11205     x_return_status := OKL_API.START_ACTIVITY (
11206                                l_api_name
11207                                ,p_init_msg_list
11208                                ,'_PVT'
11209                                ,x_return_status);
11210     -- Check if activity started successfully
11211     IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
11212        RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
11213     ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
11214        RAISE OKL_API.G_EXCEPTION_ERROR;
11215     END IF;
11216 
11217    --dbms_output.enable(1000000);
11218 
11219    --FA_SRVR_MSG.Init_Server_Message;
11220    --FA_DEBUG_PKG.Initialize;
11221 
11222    --Bug# 6955027
11223    IF NOT FA_TRX_APPROVAL_PKG.faxcat
11224           (X_book              => p_ast_line_rec.corporate_book,
11225            X_asset_id          => p_ast_line_rec.asset_id,
11226            X_trx_type          => 'ADJUSTMENT',
11227            X_trx_date          => NULL,
11228            X_init_message_flag => 'NO',
11229            p_log_level_rec     => x_log_level_rec) then
11230       RAISE OKL_API.G_EXCEPTION_ERROR;
11231    END IF;
11232    --Bug# 6955027
11233 
11234    -----------------
11235    --trans_rec_info
11236    -----------------
11237    l_trans_rec.transaction_type_code         := 'ADDITION'; --optional
11238    --Bug# 3156924 :
11239    --l_trans_rec.transaction_date_entered      := p_ast_line_rec.in_service_date; --optional.defaults to dpis
11240    --l_trans_rec.transaction_date_entered      := p_trx_date; --optional.defaults to dpis
11241    l_trans_rec.who_info.last_updated_by      := FND_GLOBAL.USER_ID;
11242    --l_trans_rec.calling_interface             := 'OKL SPLIT ASSET';
11243    --Bug# 3156924 :
11244    l_trans_rec.calling_interface             := l_calling_interface; --optional
11245    l_trans_rec.transaction_name              := SUBSTR(TO_CHAR(p_trx_number),1,20); --optional
11246 
11247 
11248    ---------------
11249    --hdr_rec info
11250    --------------
11251    l_asset_hdr_rec.book_type_code    := p_ast_line_rec.corporate_book;
11252    l_asset_hdr_rec.set_of_books_id   := p_ast_line_rec.set_of_books_id;
11253    l_asset_hdr_rec.asset_id          := NULL;
11254 
11255    --for tax books fetch the asset id
11256    OPEN  get_ast_id_cur (p_asset_number    => p_txdv_rec.asset_number,
11257                          p_book_type_code  => p_ast_line_rec.corporate_book);
11258        FETCH get_ast_id_cur INTO l_asset_hdr_rec.asset_id;
11259        IF get_ast_id_cur%NOTFOUND THEN
11260            NULL;
11261        END IF;
11262    CLOSE get_ast_id_cur;
11263 
11264    ---------------
11265    -- desc info
11266    ---------------
11267    l_asset_desc_rec.asset_number       := p_txdv_rec.asset_number;
11268    l_asset_desc_rec.description        := p_txdv_rec.description;
11269    l_asset_desc_rec.manufacturer_name  := p_ast_line_rec.manufacturer_name;
11270    l_asset_desc_rec.in_use_flag        := p_ast_line_rec.in_use_flag;
11271    l_asset_desc_rec.inventorial        := p_ast_line_rec.inventorial;
11272    l_asset_desc_rec.property_type_code := p_ast_line_rec.property_type_code;
11273    l_asset_desc_rec.property_1245_1250_code     := p_ast_line_rec.property_1245_1250_code;
11274    l_asset_desc_rec.owned_leased       := p_ast_line_rec.owned_leased;
11275    l_asset_desc_rec.new_used           := p_ast_line_rec.new_used;
11276    --Bug# 2761799: model number not being copied
11277    l_asset_desc_rec.model_number       := p_ast_line_rec.model_number;
11278 
11279 
11280    OPEN asset_k_ccid_cur(p_asset_id => p_ast_line_rec.asset_id);
11281        FETCH asset_k_ccid_cur INTO l_asset_desc_rec.asset_key_ccid;
11282        IF asset_k_ccid_cur%NOTFOUND THEN
11283            NULL;
11284        END IF;
11285    CLOSE asset_k_ccid_cur;
11286 
11287    IF NVL(p_txdv_rec.split_percent,0) NOT IN (0,OKL_API.G_MISS_NUM) THEN
11288         l_split_factor := (p_txdv_rec.split_percent/100);
11289         l_asset_desc_rec.current_units := p_ast_line_rec.current_units;
11290    ELSE
11291         l_split_factor := (p_txdv_rec.quantity/p_txlv_rec.current_units);
11292          --l_asset_desc_rec.current_units                := p_txdv_rec.quantity;
11293         l_asset_desc_rec.current_units                := p_ast_line_rec.current_units -
11294                                                     (p_ast_line_rec.current_units -
11295                                                      (p_ast_line_rec.current_units*l_split_factor)
11296                                                       );
11297    END IF;
11298 
11299 
11300    --original_units - (original_units - (original_units*split_factor))
11301    --this should actually be on the current quantity and not on the qty when trx was saved
11302    --modify it later
11303 
11304    ----------------------
11305    --asset_type_rec info
11306    ---------------------
11307    l_asset_type_rec.asset_type := p_ast_line_rec.asset_type;
11308 
11309    ----------------------
11310    --asset_cat_rec_info
11311    ---------------------
11312    l_asset_cat_rec.category_id  := p_ast_line_rec.depreciation_category;
11313 
11314    --asset_fin_rec
11315    l_asset_fin_rec.set_of_books_id         := p_ast_line_rec.set_of_books_id;
11316    --3156924
11317    l_asset_fin_rec.date_placed_in_service  := p_ast_line_rec.in_service_date;
11318    --l_asset_fin_rec.date_placed_in_service  := p_trx_date;
11319    l_asset_fin_rec.deprn_method_code       := p_ast_line_rec.deprn_method_code;
11320    l_asset_fin_rec.life_in_months          := p_ast_line_rec.life_in_months;
11321    l_asset_fin_rec.cost                    := p_ast_line_rec.cost          -(p_ast_line_rec.cost- (p_ast_line_rec.cost*l_split_factor));
11322    l_asset_fin_rec.original_cost           := p_ast_line_rec.original_cost -(p_ast_line_rec.original_cost - (p_ast_line_rec.original_cost*l_split_factor));
11323    l_asset_fin_rec.salvage_value           := p_ast_line_rec.salvage_value -(p_ast_line_rec.salvage_value -(p_ast_line_rec.salvage_value*l_split_factor));
11324    l_asset_fin_rec.basic_rate              := p_ast_line_rec.basic_rate;
11325    l_asset_fin_rec.adjusted_rate           := p_ast_line_rec.adjusted_rate;
11326    l_asset_fin_rec.percent_salvage_value   := p_ast_line_rec.percent_salvage_value;
11327    l_asset_fin_rec.rate_adjustment_factor  := 1;
11328 
11329    -- Bug# 5946411 -- start
11330    OPEN  ast_dep_limit_csr (p_asset_id       => p_ast_line_rec.asset_id,
11331                             p_book_type_code => p_ast_line_rec.corporate_book);
11332 
11333    FETCH ast_dep_limit_csr INTO l_allowed_deprn_limit,
11334                             l_allowed_deprn_limit_amount,
11335                             l_deprn_limit_type,
11336                             l_depreciate_flag
11337                             --Bug# 6152614
11338                             ,l_prorate_convention_code
11339                             ,l_prorate_date;
11340 
11341    IF ast_dep_limit_csr%NOTFOUND THEN
11342         NULL;
11343    END IF;
11344    CLOSE ast_dep_limit_csr;
11345    l_asset_fin_rec.allowed_deprn_limit := l_allowed_deprn_limit;
11346    l_asset_fin_rec.allowed_deprn_limit_amount := l_allowed_deprn_limit_amount;
11347    -- Bug# 6152614
11348    l_asset_fin_rec.prorate_convention_code := l_prorate_convention_code;
11349    l_asset_fin_rec.prorate_date :=  l_prorate_date;
11350    -- Bug# 5946411 -- end
11351 
11352    --Bug# 6373605 start
11353    l_asset_fin_rec.contract_id            := p_sla_asset_chr_id;
11354    --Bug# 6373605 end
11355 
11356    -----------------
11357    --Bug# 3156924
11358    ----------------
11359    --l_asset_fin_rec.depreciate_flag         := 'YES';
11360 
11361    l_asset_deprn_rec.set_of_books_id := p_ast_line_rec.set_of_books_id;
11362 
11363    /* Bug# 5946411
11364     --commented following and added FA_UTIL to retrive asset deprn_rec
11365 
11366    OPEN  deprn_cur (p_asset_id       => p_ast_line_rec.asset_id,
11367                     p_book_type_code => p_ast_line_rec.corporate_book,
11368                     p_split_factor   => l_split_factor);
11369 
11370        FETCH deprn_cur INTO l_asset_deprn_rec.ytd_deprn,
11371                             l_asset_deprn_rec.deprn_reserve,
11372                             l_asset_deprn_rec.prior_fy_expense,
11373                             l_asset_deprn_rec.bonus_ytd_deprn,
11374                             l_asset_deprn_rec.bonus_deprn_reserve;
11375        IF deprn_cur%NOTFOUND THEN
11376            NULL;
11377        END IF;
11378    CLOSE deprn_cur;
11379 
11380    */
11381    l_asset_fin_rec.depreciate_flag := l_depreciate_flag;
11382    l_asset_fin_rec.deprn_limit_type :=l_deprn_limit_type;
11383    if NOT fa_cache_pkg.fazcbc(x_book => p_ast_line_rec.corporate_book) then
11384        OKL_API.SET_MESSAGE(p_app_name     => g_app_name,
11385                            p_msg_name     => 'OKL_LLA_FA_CACHE_ERROR'
11386                           );
11387        Raise OKL_API.G_EXCEPTION_ERROR;
11388    end if;
11389    l_asset_hdr_orig_rec.asset_id:=p_ast_line_rec.asset_id;
11390    l_asset_hdr_orig_rec.book_type_code    := p_ast_line_rec.corporate_book;
11391    -- To fetch Depreciation Reserve
11392    if not FA_UTIL_PVT.get_asset_deprn_rec
11393                 (p_asset_hdr_rec         => l_asset_hdr_orig_rec ,
11394                  px_asset_deprn_rec      => l_asset_deprn_rec,
11395                  p_period_counter        => NULL,
11396                  p_mrc_sob_type_code     => 'P'
11397                  ) then
11398        OKL_API.SET_MESSAGE(p_app_name     => g_app_name,
11399                            p_msg_name     => 'OKL_LLA_FA_DEPRN_REC_ERROR'
11400                           );
11401        Raise OKL_API.G_EXCEPTION_ERROR;
11402    end if;
11403    l_asset_deprn_rec.ytd_deprn:= l_asset_deprn_rec.ytd_deprn - (l_asset_deprn_rec.ytd_deprn -(l_asset_deprn_rec.ytd_deprn*l_split_factor));
11404    l_asset_deprn_rec.deprn_reserve:= l_asset_deprn_rec.deprn_reserve       - (l_asset_deprn_rec.deprn_reserve -(l_asset_deprn_rec.deprn_reserve*l_split_factor));
11405    l_asset_deprn_rec.prior_fy_expense:=l_asset_deprn_rec.prior_fy_expense    - (l_asset_deprn_rec.prior_fy_expense-(l_asset_deprn_rec.prior_fy_expense*l_split_factor));
11406    l_asset_deprn_rec.bonus_ytd_deprn:=l_asset_deprn_rec.bonus_ytd_deprn     - (l_asset_deprn_rec.bonus_ytd_deprn-(l_asset_deprn_rec.bonus_ytd_deprn*l_split_factor));
11407    l_asset_deprn_rec.bonus_deprn_reserve:=l_asset_deprn_rec.bonus_deprn_reserve - (l_asset_deprn_rec.bonus_deprn_reserve-(l_asset_deprn_rec.bonus_deprn_reserve*l_split_factor));
11408 
11409    -- Bug# 6189396 -- start
11410    okl_execute_formula_pub.g_additional_parameters(1).name := 'SPLIT_ASSET_DEPRN_RESRVE';
11411    okl_execute_formula_pub.g_additional_parameters(1).value := to_char(l_asset_deprn_rec.deprn_reserve);
11412    -- Bug# 6189396 -- end
11413 
11414    ---------------------------------------------------------------------------------------
11415    --Bug# 3156924 : Due to partial retirement ytd_deprn may get greater than deprn_reserve
11416    ---------------------------------------------------------------------------------------
11417    IF l_asset_deprn_rec.ytd_deprn > l_asset_deprn_rec.deprn_reserve THEN
11418       l_asset_deprn_rec.ytd_deprn := l_asset_deprn_rec.deprn_reserve;
11419    END IF;
11420 
11421    --asset_dist_rec
11422    OPEN     ast_dist_cur (p_asset_id        => p_ast_line_rec.asset_id,
11423                           p_book_type_code  => p_ast_line_rec.corporate_book,
11424                           p_units           => l_asset_desc_rec.current_units);
11425 
11426        FETCH     ast_dist_cur INTO l_asset_dist_rec.units_assigned,
11427                                    l_asset_dist_rec.assigned_to,
11428                                    l_asset_dist_rec.expense_ccid,
11429                                    l_asset_dist_rec.location_ccid,
11430                                    l_asset_dist_rec.transaction_units;
11431 
11432        IF  ast_dist_cur%NOTFOUND THEN
11433            NULL;
11434        END IF;
11435 
11436    CLOSE ast_dist_cur;
11437 
11438       -- bug 6061103 start
11439     OPEN l_cleb_sts_csr(  p_txlv_rec.kle_id);
11440     FETCH l_cleb_sts_csr INTO l_cle_status, l_chr_id, l_pdt_id, l_start_date ;
11441     close l_cleb_sts_csr;
11442      is_evergreen_df_lease
11443                    (p_api_version     =>  p_api_version,
11444                     p_init_msg_list   =>  p_init_msg_list,
11445                     x_return_status   =>  x_return_status,
11446                     x_msg_count       =>  x_msg_count,
11447                     x_msg_data        =>  x_msg_data,
11448                     p_cle_id          =>  p_ast_line_rec.PARENT_LINE_ID ,--p_ast_line_rec.asset_id, rirawat
11449                     p_book_type_code   =>  p_ast_line_rec.corporate_book,
11450                     p_asset_status    => l_cle_status,
11451                     p_pdt_id          => l_pdt_id,
11452                     p_start_date      => l_start_date,
11453                     x_amortization_date => l_amortization_date,
11454                     x_special_treatment_required => l_special_treatment_required);
11455            IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
11456                RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
11457            ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
11458                RAISE OKL_API.G_EXCEPTION_ERROR;
11459            END IF;
11460     if (l_special_treatment_required = 'Y') then
11461          l_temp_cost := l_asset_fin_rec.cost;
11462          l_temp_original_cost := l_asset_fin_rec.original_cost;
11463          l_temp_salvage_value := l_asset_fin_rec.salvage_value;
11464          l_temp_ytd_deprn := l_asset_deprn_rec.ytd_deprn;
11465          l_temp_deprn_reserve := l_asset_deprn_rec.deprn_reserve;
11466          l_temp_prior_fy_expense := l_asset_deprn_rec.prior_fy_expense;
11467          l_temp_bonus_ytd_deprn := l_asset_deprn_rec.bonus_ytd_deprn ;
11468          l_temp_bonus_deprn_reserve := l_asset_deprn_rec.bonus_deprn_reserve;
11469          l_asset_fin_rec.cost              := 0;
11470          l_asset_fin_rec.original_cost           := 0;
11471          l_asset_fin_rec.salvage_value           := 0 ;
11472          l_asset_deprn_rec.ytd_deprn:= 0;
11473          l_asset_deprn_rec.deprn_reserve:= 0;
11474          l_asset_deprn_rec.prior_fy_expense:= 0;
11475          l_asset_deprn_rec.bonus_ytd_deprn:= 0;
11476          l_asset_deprn_rec.bonus_deprn_reserve:= 0;
11477    end if;
11478      -- bug 6061103 end
11479    l_asset_dist_tbl(1) := l_asset_dist_rec;
11480 
11481    --dbms_output.put_line('Add '||l_asset_desc_rec.asset_number || ' Deprn reserve '||to_char(l_asset_deprn_rec.deprn_reserve));
11482    -- call the api
11483    fa_addition_pub.do_addition
11484       (p_api_version             => p_api_version,
11485        p_init_msg_list           => OKL_API.G_FALSE,
11486        p_commit                  => OKL_API.G_FALSE,
11487        p_validation_level        => FND_API.G_VALID_LEVEL_FULL,
11488        x_return_status           => x_return_status,
11489        x_msg_count               => x_msg_count,
11490        x_msg_data                => x_msg_data,
11491        --Bug# 3156924
11492        p_calling_fn              => l_calling_interface,
11493        px_trans_rec              => l_trans_rec,
11494        px_dist_trans_rec         => l_dist_trans_rec,
11495        px_asset_hdr_rec          => l_asset_hdr_rec,
11496        px_asset_desc_rec         => l_asset_desc_rec,
11497        px_asset_type_rec         => l_asset_type_rec,
11498        px_asset_cat_rec          => l_asset_cat_rec,
11499        px_asset_hierarchy_rec    => l_asset_hierarchy_rec,
11500        px_asset_fin_rec          => l_asset_fin_rec,
11501        px_asset_deprn_rec        => l_asset_deprn_rec,
11502        px_asset_dist_tbl         => l_asset_dist_tbl,
11503        px_inv_tbl                => l_inv_tbl
11504       );
11505 
11506      --dbms_output.put_line(x_return_status);
11507      IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
11508          RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
11509      ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
11510          RAISE OKL_API.G_EXCEPTION_ERROR;
11511      END IF;
11512 
11513       --bug# 6373605 -- call populate sla sources
11514       l_fxhv_rec.source_id := p_sla_source_header_id;
11515       l_fxhv_rec.source_table := p_sla_source_header_table;
11516       l_fxhv_rec.khr_id := p_sla_source_chr_id;
11517       l_fxhv_rec.try_id := p_sla_source_try_id;
11518 
11519       l_fxlv_rec.source_id := p_sla_source_line_id;
11520       l_fxlv_rec.source_table := p_sla_source_line_table;
11521       l_fxlv_rec.kle_id := p_sla_source_kle_id;
11522 
11523       l_fxlv_rec.asset_id := l_asset_hdr_rec.asset_id;
11524       l_fxlv_rec.fa_transaction_id := l_trans_rec.transaction_header_id;
11525       l_fxlv_rec.asset_book_type_name := l_asset_hdr_rec.book_type_code;
11526 
11527       OKL_SLA_ACC_SOURCES_PVT.populate_sources(
11528       p_api_version  => p_api_version
11529      ,p_init_msg_list => p_init_msg_list
11530      ,p_fxhv_rec => l_fxhv_rec
11531      ,p_fxlv_rec => l_fxlv_rec
11532      ,x_return_status => x_return_status
11533      ,x_msg_count    => x_msg_count
11534      ,x_msg_data    => x_msg_data
11535       );
11536      IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
11537          RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
11538      ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
11539          RAISE OKL_API.G_EXCEPTION_ERROR;
11540      END IF;
11541      --bug# 6373605 -- call populate SLA sources
11542 
11543      --Bug# 6061103
11544      if (l_special_treatment_required = 'Y') and (l_temp_cost <> 0) then
11545          l_adj_trans_rec.transaction_subtype     := 'AMORTIZED';
11546          --Bug# 6331465
11547          --l_adj_trans_rec.amortization_start_date := l_amortization_date;
11548          l_adj_trans_rec.transaction_name  := SUBSTR(TO_CHAR(p_trx_number),1,20); --optional
11549          l_adj_trans_rec.calling_interface := l_calling_interface; --optional
11550          l_adj_asset_fin_rec_adj.cost              := l_temp_cost;
11551          l_adj_asset_fin_rec_adj.original_cost           := l_temp_original_cost;
11552          l_adj_asset_fin_rec_adj.salvage_value           := l_temp_salvage_value ;
11553          l_adj_asset_deprn_rec_adj.ytd_deprn:= l_temp_ytd_deprn;
11554          l_adj_asset_deprn_rec_adj.deprn_reserve:= l_temp_deprn_reserve;
11555          l_adj_asset_deprn_rec_adj.prior_fy_expense:= l_temp_prior_fy_expense;
11556          l_adj_asset_deprn_rec_adj.bonus_ytd_deprn:= l_temp_bonus_ytd_deprn;
11557          l_adj_asset_deprn_rec_adj.bonus_deprn_reserve:= l_temp_bonus_deprn_reserve;
11558 
11559          FA_ADJUSTMENT_PUB.do_adjustment
11560           (p_api_version             => p_api_version,
11561            p_init_msg_list           => p_init_msg_list,
11562            p_commit                  => OKL_API.G_FALSE,
11563            p_validation_level        => FND_API.G_VALID_LEVEL_FULL,
11564            x_return_status           => x_return_status,
11565            x_msg_count               => x_msg_count,
11566            x_msg_data                => x_msg_data,
11567            --Bug# 3156924
11568            --p_calling_fn              => null,
11569            p_calling_fn              => l_calling_interface,
11570            px_trans_rec              => l_adj_trans_rec,
11571            px_asset_hdr_rec          => l_asset_hdr_rec,
11572            p_asset_fin_rec_adj       => l_adj_asset_fin_rec_adj,
11573            x_asset_fin_rec_new       => l_adj_asset_fin_rec_new,
11574            x_asset_fin_mrc_tbl_new   => l_adj_asset_fin_mrc_tbl_new,
11575            px_inv_trans_rec          => l_adj_inv_trans_rec,
11576            px_inv_tbl                => l_adj_inv_tbl,
11577            p_asset_deprn_rec_adj     => l_adj_asset_deprn_rec_adj,
11578            x_asset_deprn_rec_new     => l_adj_asset_deprn_rec_new,
11579            x_asset_deprn_mrc_tbl_new => l_adj_asset_deprn_mrc_tbl_new,
11580            p_group_reclass_options_rec => l_adj_group_recalss_option_rec
11581           );
11582           --dbms_output.put_line('After calling FA adjustment Api '||x_return_status);
11583          IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
11584            RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
11585          ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
11586            RAISE OKL_API.G_EXCEPTION_ERROR;
11587          END IF;
11588 
11589          --bug# 6373605 -- call populate sla sources
11590          l_fxhv_rec.source_id := p_sla_source_header_id;
11591          l_fxhv_rec.source_table := p_sla_source_header_table;
11592          l_fxhv_rec.khr_id := p_sla_source_chr_id;
11593          l_fxhv_rec.try_id := p_sla_source_try_id;
11594 
11595          l_fxlv_rec.source_id := p_sla_source_line_id;
11596          l_fxlv_rec.source_table := p_sla_source_line_table;
11597          l_fxlv_rec.kle_id := p_sla_source_kle_id;
11598 
11599          l_fxlv_rec.asset_id := l_asset_hdr_rec.asset_id;
11600          l_fxlv_rec.fa_transaction_id := l_adj_trans_rec.transaction_header_id;
11601          l_fxlv_rec.asset_book_type_name := l_asset_hdr_rec.book_type_code;
11602 
11603          OKL_SLA_ACC_SOURCES_PVT.populate_sources(
11604            p_api_version  => p_api_version
11605            ,p_init_msg_list => p_init_msg_list
11606            ,p_fxhv_rec => l_fxhv_rec
11607            ,p_fxlv_rec => l_fxlv_rec
11608            ,x_return_status => x_return_status
11609            ,x_msg_count    => x_msg_count
11610            ,x_msg_data    => x_msg_data
11611           );
11612          IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
11613            RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
11614          ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
11615            RAISE OKL_API.G_EXCEPTION_ERROR;
11616          END IF;
11617          --bug# 6373605 -- call populate SLA sources
11618 
11619      end if;
11620      x_asset_hdr_rec := l_asset_hdr_rec;
11621      --Bug# 4028371
11622      x_fa_trx_date   := l_adj_trans_rec.transaction_date_entered;  -- for 6061103 chaged to adj
11623 
11624      OKL_API.END_ACTIVITY (x_msg_count,
11625                           x_msg_data );
11626     EXCEPTION
11627     WHEN OKL_API.G_EXCEPTION_ERROR THEN
11628     x_return_status := OKL_API.HANDLE_EXCEPTIONS(
11629                                l_api_name,
11630                                G_PKG_NAME,
11631                                'OKL_API.G_RET_STS_ERROR',
11632                                x_msg_count,
11633                                x_msg_data,
11634                                '_PVT');
11635     WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
11636     x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
11637                               l_api_name,
11638                               G_PKG_NAME,
11639                               'OKL_API.G_RET_STS_UNEXP_ERROR',
11640                               x_msg_count,
11641                               x_msg_data,
11642                               '_PVT');
11643     WHEN OTHERS THEN
11644     x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
11645                               l_api_name,
11646                               G_PKG_NAME,
11647                               'OTHERS',
11648                               x_msg_count,
11649                               x_msg_data,
11650                               '_PVT');
11651 END FIXED_ASSET_ADD;
11652 --Bug# 3156924
11653 --------------------------------------------------------------------------------
11654 --Start of Comments
11655 --Procedure Name : FIXED_ASSET_UNIT_ADJUST
11656 --Description    : Does unit adjustment on parent asset (source asset to split) in FA
11657 --History        :
11658 --                 26-Feb-2004  ashish.singh Created
11659 --End of Comments
11660 --------------------------------------------------------------------------------
11661   PROCEDURE FIXED_ASSET_unit_adjust
11662                              (p_api_version   IN  NUMBER,
11663                               p_init_msg_list IN  VARCHAR2 DEFAULT OKL_API.G_FALSE,
11664                               x_return_status OUT NOCOPY VARCHAR2,
11665                               x_msg_count     OUT NOCOPY NUMBER,
11666                               x_msg_data      OUT NOCOPY VARCHAR2,
11667                               p_ast_line_rec  IN  ast_line_rec_type,
11668                               p_txlv_rec      IN  txlv_rec_type,
11669                               p_txdv_rec      IN  txdv_rec_type,
11670                               --Bug# 3156924
11671                               p_trx_date      IN  DATE,
11672                               p_trx_number  IN  NUMBER,
11673                               --Bug# 4028371
11674                               x_fa_trx_date OUT NOCOPY DATE) IS
11675 
11676   l_return_status        VARCHAR2(1)  DEFAULT OKL_API.G_RET_STS_SUCCESS;
11677   l_api_name             CONSTANT VARCHAR2(30) := 'FIXED_ASSET_UNIT_ADJ';
11678   l_api_version          CONSTANT NUMBER := 1.0;
11679 
11680 
11681   l_trans_rec          fa_api_types.trans_rec_type;
11682   l_asset_hdr_rec      fa_api_types.asset_hdr_rec_type;
11683   l_asset_dist_tbl     fa_api_types.asset_dist_tbl_type;
11684 
11685   l_calling_interface  VARCHAR2(30) := 'OKL:Split Asset';
11686   l_units_to_adjust    NUMBER;
11687   i                    NUMBER;
11688   l_split_factor       NUMBER;
11689 
11690 
11691    --cursor to get the distributions
11692    CURSOR    l_dist_curs(p_asset_id       IN NUMBER,
11693                         p_corporate_book IN VARCHAR2) IS
11694    SELECT  units_assigned,
11695            distribution_id
11696    FROM    OKX_AST_DST_HST_V
11697    WHERE   asset_id = p_ast_line_rec.asset_id
11698    AND     book_type_code = p_ast_line_rec.corporate_book
11699    AND     transaction_header_id_out IS NULL
11700    AND     retirement_id IS NULL;
11701 
11702    l_units_assigned   NUMBER;
11703    l_distribution_id  NUMBER;
11704 
11705   BEGIN
11706       x_return_status := OKL_API.G_RET_STS_SUCCESS;
11707       -- Call start_activity to create savepoint, check compatibility
11708       -- and initialize message list
11709       x_return_status := OKL_API.START_ACTIVITY (
11710                                l_api_name
11711                                ,p_init_msg_list
11712                                ,'_PVT'
11713                                ,x_return_status);
11714       -- Check if activity started successfully
11715       IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
11716          RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
11717       ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
11718          RAISE OKL_API.G_EXCEPTION_ERROR;
11719       END IF;
11720 
11721       l_split_factor           := (p_txdv_rec.quantity/p_txlv_rec.current_units);
11722       l_asset_hdr_rec.asset_id := p_ast_line_rec.asset_id;
11723       l_asset_hdr_rec.book_type_code := p_ast_line_rec.corporate_book;
11724 
11725       -- transaction date must be filled in if performing
11726       -- prior period transfer
11727       l_trans_rec.transaction_date_entered := NULL;
11728       l_trans_rec.transaction_name          := SUBSTR(TO_CHAR(p_trx_number),1,20);
11729       l_trans_rec.calling_interface         := l_calling_interface;
11730       l_trans_rec.who_info.last_updated_by := FND_GLOBAL.USER_ID;
11731       l_trans_rec.who_info.last_update_login := FND_GLOBAL.LOGIN_ID;
11732 
11733 
11734       l_asset_dist_tbl.DELETE;
11735 
11736       l_units_to_adjust := p_ast_line_rec.current_units - (p_ast_line_rec.current_units*l_split_factor);
11737 
11738        --dbms_output.put_line('Units to adjust outside loop'||l_units_to_adjust );
11739        i := 1;
11740        OPEN l_dist_curs(p_ast_line_rec.asset_id, p_ast_line_rec.corporate_book);
11741        LOOP
11742            FETCH l_dist_curs INTO l_units_assigned, l_distribution_id;
11743            EXIT WHEN l_dist_curs%NOTFOUND;
11744            IF l_units_to_adjust = 0 THEN
11745               EXIT;
11746            ELSIF l_units_to_adjust >= l_units_assigned THEN
11747               l_asset_dist_tbl(i).distribution_id := l_distribution_id;
11748               l_asset_dist_tbl(i).transaction_units := (-1)*l_units_assigned;
11749               --dbms_output.put_line('Units to adjust '||to_char(l_asset_dist_tbl(i).transaction_units));
11750               l_asset_dist_tbl(i).units_assigned := NULL;
11751               l_asset_dist_tbl(i).assigned_to := NULL;
11752               l_asset_dist_tbl(i).expense_ccid := NULL;
11753               l_asset_dist_tbl(i).location_ccid := NULL;
11754               l_units_to_adjust := l_units_to_adjust - l_units_assigned;
11755               i := i + 1;
11756            ELSIF l_units_to_adjust < l_units_assigned THEN
11757               l_asset_dist_tbl(i).distribution_id := l_distribution_id;
11758               l_asset_dist_tbl(i).transaction_units := (-1)*l_units_to_adjust;
11759               --dbms_output.put_line('Units to adjust '||to_char(l_asset_dist_tbl(i).transaction_units));
11760               l_asset_dist_tbl(i).units_assigned := NULL;
11761               l_asset_dist_tbl(i).assigned_to := NULL;
11762               l_asset_dist_tbl(i).expense_ccid := NULL;
11763               l_asset_dist_tbl(i).location_ccid := NULL;
11764               l_units_to_adjust := l_units_to_adjust - l_units_to_adjust;
11765               i := i + 1;
11766            END IF;
11767        END LOOP;
11768        CLOSE l_dist_curs;
11769 
11770       FA_UNIT_ADJ_PUB.do_unit_adjustment(
11771            p_api_version       => p_api_version,
11772            p_init_msg_list      => FND_API.G_FALSE,
11773            p_commit            => FND_API.G_FALSE,
11774            p_validation_level  => FND_API.G_VALID_LEVEL_FULL,
11775            --bug# 3156924 :
11776            p_calling_fn        => l_calling_interface,
11777            --p_calling_fn        => NULL,
11778            x_return_status     => x_return_status,
11779            x_msg_count         => x_msg_count,
11780            x_msg_data          => x_msg_data,
11781            px_trans_rec        => l_trans_rec,
11782            px_asset_hdr_rec    => l_asset_hdr_rec,
11783            px_asset_dist_tbl   => l_asset_dist_tbl);
11784 
11785          --dbms_output.put_line('After calling FA unit adjust Api '||x_return_status);
11786      IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
11787          RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
11788      ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
11789          RAISE OKL_API.G_EXCEPTION_ERROR;
11790      END IF;
11791      OKL_API.END_ACTIVITY (x_msg_count,
11792                           x_msg_data );
11793      EXCEPTION
11794      WHEN OKL_API.G_EXCEPTION_ERROR THEN
11795      x_return_status := OKL_API.HANDLE_EXCEPTIONS(
11796                                 l_api_name,
11797                                G_PKG_NAME,
11798                                'OKL_API.G_RET_STS_ERROR',
11799                                x_msg_count,
11800                                x_msg_data,
11801                                '_PVT');
11802      WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
11803      x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
11804                               l_api_name,
11805                               G_PKG_NAME,
11806                               'OKL_API.G_RET_STS_UNEXP_ERROR',
11807                               x_msg_count,
11808                               x_msg_data,
11809                               '_PVT');
11810      WHEN OTHERS THEN
11811     x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
11812                               l_api_name,
11813                               G_PKG_NAME,
11814                               'OTHERS',
11815                               x_msg_count,
11816                               x_msg_data,
11817                               '_PVT');
11818 END FIXED_ASSET_unit_ADJUST;
11819 --Bug# 3156924
11820 --------------------------------------------------------------------------------
11821 --Start of Comments
11822 --Procedure Name : FIXED_ASSET_RETIRE
11823 --Description    : Retires the Parent fixed Asset (source asset to split) in FA
11824 --History        :
11825 --                 20-Dec-2001  ashish.singh Created
11826 --                 24-Jul-2002  ashish.singh Modified to take care of Full
11827 --                              retirement for split asset compoents
11828 --End of Comments
11829 --------------------------------------------------------------------------------
11830 PROCEDURE FIXED_ASSET_RETIRE (p_api_version   IN  NUMBER,
11831                               p_init_msg_list IN  VARCHAR2 DEFAULT OKL_API.G_FALSE,
11832                               x_return_status OUT NOCOPY VARCHAR2,
11833                               x_msg_count     OUT NOCOPY NUMBER,
11834                               x_msg_data      OUT NOCOPY VARCHAR2,
11835                               p_ast_line_rec  IN  ast_line_rec_type,
11836                               p_txlv_rec      IN  txlv_rec_type,
11837                               p_txdv_rec      IN  txdv_rec_type,
11838                               --Bug# 3156924
11839                               p_trx_date      IN  DATE,
11840                               p_trx_number  IN  NUMBER,
11841                               --Bug# 4028371
11842                               x_fa_trx_date OUT NOCOPY date) IS
11843 
11844    l_return_status        VARCHAR2(1)  DEFAULT OKL_API.G_RET_STS_SUCCESS;
11845    l_api_name             CONSTANT VARCHAR2(30) := 'FIXED_ASSET_RETIRE';
11846    l_api_version          CONSTANT NUMBER := 1.0;
11847 
11848    l_user_id                 NUMBER := 1001; -- USER_ID must properly be set to run calc gain/loss
11849    l_request_id              NUMBER;
11850    l_split_factor            NUMBER;
11851    l_units_to_retire         NUMBER;
11852 
11853    /* define local record types */
11854    l_trans_rec              FA_API_TYPES.trans_rec_type;
11855    l_asset_hdr_rec          FA_API_TYPES.asset_hdr_rec_type;
11856    l_asset_retire_rec       FA_API_TYPES.asset_retire_rec_type;
11857    l_asset_dist_tbl         FA_API_TYPES.asset_dist_tbl_type;
11858    l_subcomp_tbl            FA_API_TYPES.subcomp_tbl_type;
11859    l_inv_tbl                FA_API_TYPES.inv_tbl_type;
11860    l_dist_trans_rec         FA_API_TYPES.trans_rec_type;
11861 
11862 
11863    l_commit                VARCHAR2(1) := FND_API.G_FALSE;
11864    l_validation_level      NUMBER := FND_API.G_VALID_LEVEL_FULL;
11865    l_calling_fn            VARCHAR2(80) := 'OKL_SPLIT_ASSET_PVT';
11866 
11867    i                       NUMBER := 0;
11868 
11869    --cursor to get the distributions
11870    CURSOR    l_dist_curs(p_asset_id       IN NUMBER,
11871                          p_corporate_book IN VARCHAR2) IS
11872    SELECT  units_assigned,
11873            distribution_id
11874    FROM    OKX_AST_DST_HST_V
11875    WHERE   asset_id = p_ast_line_rec.asset_id
11876    AND     book_type_code = p_ast_line_rec.corporate_book
11877    AND     transaction_header_id_out IS NULL
11878    AND     retirement_id IS NULL;
11879 
11880    l_units_assigned   NUMBER;
11881    l_distribution_id  NUMBER;
11882 
11883 --cursor to find book class
11884    CURSOR l_book_class_cur(p_book_type_code IN VARCHAR2) IS
11885    SELECT book_class
11886    FROM   okx_asst_bk_controls_v
11887    WHERE  book_type_code = p_book_type_code;
11888 
11889    l_book_class okx_asst_bk_controls_v.book_class%TYPE;
11890 
11891 --debug variables
11892   api_error EXCEPTION;
11893   mesg_count NUMBER;
11894   temp_str   VARCHAR2(2000);
11895 
11896   --Bug# 3156924 : cursor to get retirement prorate convention from defaults
11897   CURSOR l_fcbd_csr (p_book_type_code IN VARCHAR2,
11898                      p_category_id IN NUMBER,
11899                      p_dpis        IN DATE) IS
11900   SELECT retirement_prorate_convention
11901   FROM   fa_category_book_defaults
11902   WHERE  book_type_code = p_book_type_code
11903   AND    category_id    = p_category_id
11904   AND    p_dpis BETWEEN start_dpis AND NVL(end_dpis,p_dpis);
11905 
11906   l_retire_prorate_convention fa_category_book_defaults.retirement_prorate_convention%TYPE;
11907 
11908     --Bug# 3156924 :
11909    l_calling_interface     CONSTANT VARCHAR2(30) := 'OKLRSPAB:Split Asset';
11910    --Bug# 4028371
11911    l_fa_unit_adj_date      date;
11912 
11913 
11914 BEGIN
11915 
11916      x_return_status := OKL_API.G_RET_STS_SUCCESS;
11917     -- Call start_activity to create savepoint, check compatibility
11918     -- and initialize message list
11919     x_return_status := OKL_API.START_ACTIVITY (
11920                                l_api_name
11921                                ,p_init_msg_list
11922                                ,'_PVT'
11923                                ,x_return_status);
11924     -- Check if activity started successfully
11925     IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
11926        RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
11927     ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
11928        RAISE OKL_API.G_EXCEPTION_ERROR;
11929     END IF;
11930 
11931 
11932    --dbms_output.disable;
11933    --dbms_output.enable(1000000);
11934    --dbms_output.put_line('begin');
11935    --fa_srvr_msg.init_server_message;
11936    --fa_debug_pkg.set_debug_flag(debug_flag => 'YES');
11937 
11938    -- Get standard who info
11939    l_request_id := fnd_global.conc_request_id;
11940    fnd_profile.get('LOGIN_ID', l_trans_rec.who_info.last_update_login);
11941    fnd_profile.get('USER_ID', l_trans_rec.who_info.last_updated_by);
11942    IF (l_trans_rec.who_info.last_updated_by IS NULL) THEN
11943       l_trans_rec.who_info.last_updated_by := -1;
11944    END IF;
11945    IF (l_trans_rec.who_info.last_update_login IS NULL) THEN
11946       l_trans_rec.who_info.last_update_login := -1;
11947    END IF;
11948 
11949    l_trans_rec.who_info.last_update_date := SYSDATE;
11950    l_trans_rec.who_info.creation_date    :=  l_trans_rec.who_info.last_update_date;
11951    l_trans_rec.who_info.created_by       :=  l_trans_rec.who_info.last_updated_by;
11952 
11953    l_trans_rec.transaction_type_code    := NULL; -- this will be determined inside API
11954    l_trans_rec.transaction_date_entered := NULL; --defaults to dpis
11955    --Bug# 3156924 :
11956    l_trans_rec.calling_interface        := l_calling_interface;
11957    l_trans_rec.transaction_name         := SUBSTR(TO_CHAR(p_trx_number),1,20);
11958 
11959    l_asset_hdr_rec.asset_id           := p_ast_line_rec.asset_id;
11960    l_asset_hdr_rec.book_type_code     := p_ast_line_rec.corporate_book;
11961    l_asset_hdr_rec.period_of_addition := NULL;
11962 
11963    l_split_factor := (p_txdv_rec.quantity/p_txlv_rec.current_units);
11964 
11965    --Bug# 3156924 :
11966    OPEN l_fcbd_csr(p_book_type_code   => l_asset_hdr_rec.book_type_code,
11967                    p_category_id      => p_ast_line_rec.depreciation_category,
11968                    p_dpis             => p_ast_line_rec.in_service_date);
11969 
11970    FETCH l_fcbd_csr INTO l_retire_prorate_convention;
11971    IF l_fcbd_csr%NOTFOUND THEN
11972        NULL;
11973    END IF;
11974    CLOSE l_fcbd_csr;
11975 
11976    --l_asset_retire_rec.retirement_prorate_convention := 'MID-MONTH';
11977    l_asset_retire_rec.retirement_prorate_convention := l_retire_prorate_convention;
11978     -- what should retirement prorate convntion be
11979    --l_asset_retire_rec.date_retired := NULL; -- will be current period by default
11980    --3156924 :
11981    --l_asset_retire_rec.date_retired := p_trx_date; -- will be current period by default
11982 
11983    IF NVL(p_txdv_rec.split_percent,0) <> 0 OR p_txdv_rec.split_percent <> OKL_API.G_MISS_NUM THEN
11984        --fully retire for split asset compoents
11985        l_asset_retire_rec.units_retired := NULL;
11986        l_asset_retire_rec.cost_retired := p_ast_line_rec.cost;
11987    ELSE
11988       --partially retire for normal split asset
11989       --Bug# 3156924 : either units or cost should be retired
11990       --l_asset_retire_rec.units_retired := p_ast_line_rec.current_units -(p_ast_line_rec.current_units*l_split_factor);
11991       --l_asset_retire_rec.cost_retired := 30000;
11992       l_asset_retire_rec.cost_retired := p_ast_line_rec.cost - (p_ast_line_rec.cost*l_split_factor);
11993    END IF;
11994 
11995    l_asset_retire_rec.proceeds_of_sale := 0;
11996    l_asset_retire_rec.cost_of_removal := 0;
11997    l_asset_retire_rec.retirement_type_code := FND_PROFILE.VALUE('OKL_SPLIT_ASSET_RETIRE_TYPE');
11998    --l_asset_retire_rec.retirement_type_code := 'SPLIT';
11999    l_asset_retire_rec.trade_in_asset_id := NULL;
12000    --l_asset_retire_rec.calculate_gain_loss := FND_API.G_FALSE;
12001    l_asset_retire_rec.calculate_gain_loss := FND_API.G_TRUE;
12002    --assign this to FND_API.G_TRUE if it is required to calculate the gain loss
12003 
12004    fnd_profile.put('USER_ID',l_user_id);
12005 
12006    IF NVL(p_txdv_rec.split_percent,0) <> 0 OR p_txdv_rec.split_percent <> OKL_API.G_MISS_NUM THEN
12007       --no need to do distribution level retirements as full retirment being done
12008       -- for split asset components
12009       NULL;
12010    ELSE
12011 
12012       --do distribution level unit adjustments
12013       l_book_class := NULL;
12014 
12015       OPEN l_book_class_cur(p_book_type_code => p_ast_line_rec.corporate_book);
12016           FETCH l_book_class_cur INTO l_book_class;
12017           IF l_book_class_cur%NOTFOUND THEN
12018              NULL;
12019           END IF;
12020       CLOSE l_book_class_cur;
12021 
12022 
12023       IF l_book_class = 'CORPORATE' THEN
12024           --Bug# 3156924 : either do cost retire or units retire
12025           FIXED_ASSET_unit_adjust
12026                              (p_api_version   => p_api_version ,
12027                               p_init_msg_list => p_init_msg_list,
12028                               x_return_status => x_return_status,
12029                               x_msg_count     => x_msg_count,
12030                               x_msg_data      => x_msg_data,
12031                               p_ast_line_rec  => p_ast_line_rec,
12032                               p_txlv_rec      => p_txlv_rec,
12033                               p_txdv_rec      => p_txdv_rec,
12034                               --Bug# 3156924
12035                               p_trx_date      => p_trx_date,
12036                               p_trx_number    => p_trx_number,
12037                               --Bug# 4028371
12038                               x_fa_trx_date   => l_fa_unit_adj_date);
12039 
12040           IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
12041               RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
12042           ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
12043               RAISE OKL_API.G_EXCEPTION_ERROR;
12044           END IF;
12045           --Bug# 3156924
12046          /*---------------commented; either retire cost or units---------------------------------------
12047          --l_asset_dist_tbl.delete;
12048          --how to find which distribution to retire from ??
12049         --l_units_to_retire := p_ast_line_rec.current_units -(p_ast_line_rec.current_units*l_split_factor);
12050         --i := 1;
12051         --open l_dist_curs(p_ast_line_rec.asset_id, p_ast_line_rec.corporate_book);
12052         --Loop
12053             --Fetch l_dist_curs into l_units_assigned, l_distribution_id;
12054             --Exit When l_dist_curs%NOTFOUND;
12055             --If l_units_to_retire = 0 Then
12056                --Exit;
12057             --Elsif l_units_to_retire >= l_units_assigned Then
12058                --l_asset_dist_tbl(i).distribution_id := l_distribution_id;
12059                --l_asset_dist_tbl(i).transaction_units := (-1)*l_units_assigned;
12060                --l_asset_dist_tbl(i).units_assigned := null;
12061                --l_asset_dist_tbl(i).assigned_to := null;
12062                --l_asset_dist_tbl(i).expense_ccid := null;
12063                --l_asset_dist_tbl(i).location_ccid := null;
12064                --l_units_to_retire := l_units_to_retire - l_units_assigned;
12065                --i := i + 1;
12066             --Elsif l_units_to_retire < l_units_assigned Then
12067                --l_asset_dist_tbl(i).distribution_id := l_distribution_id;
12068                --l_asset_dist_tbl(i).transaction_units := (-1)*l_units_to_retire;
12069                --l_asset_dist_tbl(i).units_assigned := null;
12070                --l_asset_dist_tbl(i).assigned_to := null;
12071                --l_asset_dist_tbl(i).expense_ccid := null;
12072                --l_asset_dist_tbl(i).location_ccid := null;
12073                --l_units_to_retire := l_units_to_retire - l_units_to_retire;
12074                --i := i + 1;
12075             --End If;
12076          --End Loop;
12077          --close l_dist_curs;
12078          -------------------------------------------------------------------------------------------------*/
12079          --end of commented code : 3156924
12080      END IF;
12081    --bug# 3156924
12082    END IF;
12083 
12084 --   l_asset_dist_tbl(2).distribution_id := 1338;
12085 --   l_asset_dist_tbl(2).transaction_units := -1;
12086 --   l_asset_dist_tbl(2).units_assigned := null;
12087 --   l_asset_dist_tbl(2).assigned_to := null;
12088 --   l_asset_dist_tbl(2).expense_ccid := null;
12089 --   l_asset_dist_tbl(2).location_ccid := null;
12090 
12091 
12092    FA_RETIREMENT_PUB.do_retirement
12093    (p_api_version               => p_api_version
12094    ,p_init_msg_list             => p_init_msg_list
12095    ,p_commit                    => l_commit
12096    ,p_validation_level          => l_validation_level
12097    --Bug# 3156924:
12098    --,p_calling_fn                => l_calling_fn
12099    ,p_calling_fn                => l_calling_interface
12100    ,x_return_status             => x_return_status
12101    ,x_msg_count                 => x_msg_count
12102    ,x_msg_data                  => x_msg_data
12103    ,px_trans_rec                => l_trans_rec
12104    ,px_dist_trans_rec           => l_dist_trans_rec
12105    ,px_asset_hdr_rec            => l_asset_hdr_rec
12106    ,px_asset_retire_rec         => l_asset_retire_rec
12107    ,p_asset_dist_tbl            => l_asset_dist_tbl
12108    ,p_subcomp_tbl               => l_subcomp_tbl
12109    ,p_inv_tbl                   => l_inv_tbl
12110    );
12111 
12112 /*--------------------FA Debugging Code Commented ------------------------------
12113     if x_return_status = FND_API.G_FALSE then
12114       raise api_error;
12115    end if;
12116 
12117    -- Dump Debug messages when run in debug mode to log file
12118    if (fa_debug_pkg.print_debug) then
12119       fa_debug_pkg.Write_Debug_Log;
12120    end if;
12121 
12122    fa_srvr_msg.add_message(
12123          calling_fn => l_calling_fn,
12124          name       => 'FA_SHARED_END_SUCCESS',
12125          token1     => 'PROGRAM',
12126          value1     => 'RETIREMENT_API');
12127 
12128    mesg_count := fnd_msg_pub.count_msg;
12129 
12130    if (mesg_count > 0) then
12131         temp_str := fnd_msg_pub.get(fnd_msg_pub.G_FIRST, fnd_api.G_FALSE);
12132         --dbms_output.put_line('dump: ' || temp_str);
12133 
12134         for I in 1..(mesg_count -1) loop
12135             temp_str := fnd_msg_pub.get(fnd_msg_pub.G_NEXT, fnd_api.G_FALSE);
12136             --dbms_output.put_line('dump: ' || temp_str);
12137         end loop;
12138     else
12139         --dbms_output.put_line('dump: NO MESSAGE !');
12140     end if;
12141 --------------------FA Debugging Code Commented END------------------------------*/
12142      --dbms_output.put_line('After do retirement :'||x_return_status);
12143 
12144      IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
12145          RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
12146      ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
12147          RAISE OKL_API.G_EXCEPTION_ERROR;
12148      END IF;
12149      --Bug# 3156924
12150      --End If;
12151      --x_asset_hdr_rec := l_asset_hdr_rec;
12152      --Bug# 4028371
12153      x_fa_trx_date    := l_trans_rec.transaction_date_entered;
12154      OKL_API.END_ACTIVITY (x_msg_count,
12155                           x_msg_data );
12156     EXCEPTION
12157     WHEN OKL_API.G_EXCEPTION_ERROR THEN
12158     x_return_status := OKL_API.HANDLE_EXCEPTIONS(
12159                                l_api_name,
12160                                G_PKG_NAME,
12161                                'OKL_API.G_RET_STS_ERROR',
12162                                x_msg_count,
12163                                x_msg_data,
12164                                '_PVT');
12165     WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
12166     x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
12167                               l_api_name,
12168                               G_PKG_NAME,
12169                               'OKL_API.G_RET_STS_UNEXP_ERROR',
12170                               x_msg_count,
12171                               x_msg_data,
12172                               '_PVT');
12173 /*--------------------FA Debugging Code Commented -------------------------------
12174        when api_error then
12175        ROLLBACK WORK;
12176 
12177        fa_srvr_msg.add_message(
12178          calling_fn => l_calling_fn,
12179          name       => 'FA_SHARED_PROGRAM_FAILED',
12180          token1     => 'PROGRAM',
12181          value1     => l_calling_fn);
12182 
12183        mesg_count := fnd_msg_pub.count_msg;
12184        if (mesg_count > 0) then
12185           temp_str := fnd_msg_pub.get(fnd_msg_pub.G_FIRST, fnd_api.G_FALSE);
12186           --dbms_output.put_line('dump: ' || temp_str);
12187 
12188           for I in 1..(mesg_count -1) loop
12189               temp_str := fnd_msg_pub.get(fnd_msg_pub.G_NEXT, fnd_api.G_FALSE);
12190               --dbms_output.put_line('dump: ' || temp_str);
12191           end loop;
12192        else
12193           --dbms_output.put_line('dump: NO MESSAGE !');
12194        end if;
12195 --------------------FA Debugging Code Commented END -----------------------------*/
12196         WHEN OTHERS THEN
12197         x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
12198                               l_api_name,
12199                               G_PKG_NAME,
12200                               'OTHERS',
12201                               x_msg_count,
12202                               x_msg_data,
12203                               '_PVT');
12204 
12205 
12206 END FIXED_ASSET_RETIRE;
12207 --------------------------------------------------------------------------------
12208 --Start of Comments
12209 --Procedure Name : Fixed_Asset_Adjust
12210 --Description    : Adjusts the Parent fixed Asset (source asset to split) in FA
12211 --History        :
12212 --                 29-Nov-2001  ashish.singh Created
12213 --                 25-JUL-2002  ashish.singh Enhancement for Fixed Asset componet
12214 --                                           split
12215 --               Bug# 6373605 -R12.B SAL CRs
12216 --               New IN parameters as descriped earlier in
12217 --               FIXED_ASSET_ADD
12218 --End of Comments
12219 --------------------------------------------------------------------------------
12220 PROCEDURE FIXED_ASSET_ADJUST(p_api_version   IN  NUMBER,
12221                              p_init_msg_list IN  VARCHAR2 DEFAULT OKL_API.G_FALSE,
12222                              x_return_status OUT NOCOPY VARCHAR2,
12223                              x_msg_count     OUT NOCOPY NUMBER,
12224                              x_msg_data      OUT NOCOPY VARCHAR2,
12225                              p_ast_line_rec  IN  ast_line_rec_type,
12226                              p_txlv_rec      IN  txlv_rec_type,
12227                              p_txdv_rec      IN  txdv_rec_type,
12228                              --Bug# 3156924
12229                              p_trx_date      IN  DATE,
12230                              p_trx_number  IN  NUMBER,
12231                              --Bug# 6373605--SLA populate source
12232                              p_sla_source_header_id    IN Number,
12233                              p_sla_source_header_table IN Varchar2,
12234                              p_sla_source_try_id       IN Number,
12235                              p_sla_source_line_id      IN Number,
12236                              p_sla_source_line_table   IN Varchar2,
12237                              p_sla_source_chr_id       IN Number,
12238                              p_sla_source_kle_id       IN Number,
12239                              --Bug# 6373605--SLA populate source
12240                              --Bug# 4028371
12241                              x_fa_trx_date  OUT NOCOPY DATE) IS
12242 
12243 l_return_status        VARCHAR2(1)  DEFAULT OKL_API.G_RET_STS_SUCCESS;
12244 l_api_name             CONSTANT VARCHAR2(30) := 'FIXED_ASSET_ADJUST';
12245 l_api_version          CONSTANT NUMBER := 1.0;
12246 
12247 l_trans_rec               FA_API_TYPES.trans_rec_type;
12248 l_asset_hdr_rec           FA_API_TYPES.asset_hdr_rec_type;
12249 l_asset_fin_rec_adj       FA_API_TYPES.asset_fin_rec_type;
12250 l_asset_fin_rec_new       FA_API_TYPES.asset_fin_rec_type;
12251 l_asset_fin_mrc_tbl_new   FA_API_TYPES.asset_fin_tbl_type;
12252 --l_asset_fin_glob_dff_rec  FA_API_TYPES.asset_fin_glob_dff_rec_type;
12253 l_inv_trans_rec           FA_API_TYPES.inv_trans_rec_type;
12254 l_inv_tbl                 FA_API_TYPES.inv_tbl_type;
12255 l_asset_deprn_rec_adj     FA_API_TYPES.asset_deprn_rec_type;
12256 l_asset_deprn_rec_new     FA_API_TYPES.asset_deprn_rec_type;
12257 l_asset_deprn_mrc_tbl_new FA_API_TYPES.asset_deprn_tbl_type;
12258 l_inv_rec                 FA_API_TYPES.inv_rec_type;
12259 l_asset_deprn_rec         FA_API_TYPES.asset_deprn_rec_type;
12260 l_group_recalss_option_rec FA_API_TYPES.group_reclass_options_rec_type;
12261 
12262 --parameters for unit adjustment
12263 l_asset_dist_tbl             FA_API_TYPES.asset_dist_tbl_type;
12264 l_trans_rec_ua               FA_API_TYPES.trans_rec_type;
12265 l_asset_hdr_rec_ua           FA_API_TYPES.asset_hdr_rec_type;
12266 
12267 
12268 l_split_factor            NUMBER;
12269 l_units_to_adjust         NUMBER;
12270 i                         NUMBER;
12271 
12272  --cursor to get the distributions
12273    CURSOR    l_dist_curs(p_asset_id       IN NUMBER,
12274                         p_corporate_book IN VARCHAR2) IS
12275    SELECT  units_assigned,
12276            distribution_id
12277    FROM    OKX_AST_DST_HST_V
12278    WHERE   asset_id = p_ast_line_rec.asset_id
12279    AND     book_type_code = p_ast_line_rec.corporate_book
12280    AND     transaction_header_id_out IS NULL
12281    AND     retirement_id IS NULL;
12282 
12283    l_units_assigned   NUMBER;
12284    l_distribution_id  NUMBER;
12285 
12286 --cursor to find book class
12287    CURSOR l_book_class_cur(p_book_type_code IN VARCHAR2) IS
12288    SELECT book_class
12289    FROM   okx_asst_bk_controls_v
12290    WHERE  book_type_code = p_book_type_code;
12291 
12292    l_book_class okx_asst_bk_controls_v.book_class%TYPE;
12293 
12294 --cursor to get depreciation info
12295 
12296   CURSOR  deprn_cur (p_asset_id        IN NUMBER,
12297                      p_book_type_code  IN VARCHAR2,
12298                      p_split_factor    IN NUMBER) IS
12299             -- gk removed below 2 params for bug 5946411
12300   SELECT  -- -1 * (ytd_deprn -(ytd_deprn*p_split_factor)),
12301           -- -1 * (deprn_reserve -(deprn_reserve*p_split_factor)),
12302           -1 * (prior_fy_expense-(prior_fy_expense*p_split_factor)),
12303           -1 * (bonus_ytd_deprn-(bonus_ytd_deprn*p_split_factor)),
12304           -1 * (bonus_deprn_reserve-(bonus_deprn_reserve*p_split_factor))
12305    FROM   okx_ast_dprtns_v
12306    WHERE  asset_id       = p_asset_id
12307    AND    book_type_code = p_book_type_code
12308    AND    deprn_run_date = (SELECT MAX(deprn_run_date)
12309                             FROM   okx_ast_dprtns_v
12310                             WHERE  asset_id       = p_asset_id
12311                             AND    book_type_code = p_book_type_code);
12312 
12313 
12314 
12315   CURSOR  deprn_cur2 (p_asset_id        IN NUMBER,
12316                       p_book_type_code  IN VARCHAR2) IS
12317             -- gk removed below 2 params for bug 5946411
12318   SELECT   -- -1 * ytd_deprn,
12319            -- -1 * deprn_reserve,
12320            -1 * prior_fy_expense,
12321            -1 * bonus_ytd_deprn,
12322            -1 * bonus_deprn_reserve
12323    FROM   okx_ast_dprtns_v
12324    WHERE  asset_id       = p_asset_id
12325    AND    book_type_code = p_book_type_code
12326    AND    deprn_run_date = (SELECT MAX(deprn_run_date)
12327                             FROM   okx_ast_dprtns_v
12328                             WHERE  asset_id       = p_asset_id
12329                             AND    book_type_code = p_book_type_code);
12330 
12331    --Bug# 4028371 :
12332    l_calling_interface     CONSTANT VARCHAR2(30) := 'OKLRSPAB:Split Asset';
12333 
12334    --Bug# 6373605 begin
12335    l_fxhv_rec okl_sla_acc_sources_pvt.fxhv_rec_type;
12336    l_fxlv_rec okl_sla_acc_sources_pvt.fxlv_rec_type;
12337    --Bug# 6373605 end
12338 
12339 -- Bug# 5946411: ER
12340   --cursor to check the status of asset
12341  /* CURSOR l_cleb_sts_csr(pcleid IN NUMBER) IS
12342   SELECT cleb.sts_code sts_code,cleb.dnz_chr_id chr_id
12343   FROM   okc_k_lines_b cleb
12344   WHERE  cleb.id = pcleid;
12345   l_cle_status okc_k_lines_b.sts_code%TYPE;  */
12346  -- Bug# 6061103
12347  CURSOR l_cleb_sts_csr(pcleid IN NUMBER) IS
12348  SELECT cleb.sts_code sts_code,
12349         cleb.dnz_chr_id chr_id,
12350         khr.PDT_ID,
12351         chr.START_DATE
12352  FROM   okc_k_lines_b cleb,
12353         okl_k_headers khr,
12354         OKC_K_HEADERS_B chr
12355  WHERE  cleb.id = pcleid
12356          and khr.id = cleb.dnz_chr_id
12357          and chr.id = khr.id;
12358   l_cle_status okc_k_lines_b.sts_code%TYPE;
12359 
12360   --cursor to get the amortization date
12361   cursor l_max_amortize_date_csr (p_asset_id IN NUMBER,p_book_type_code IN VARCHAR2) is
12362   select max(th.amortization_start_date) amortization_start_date
12363   from   fa_transaction_headers th,
12364           fa_books inbk,
12365           fa_books outbk
12366   where  inbk.asset_id = p_asset_id
12367   and    inbk.book_type_code = p_book_type_code
12368   and    outbk.asset_id(+) = p_asset_id
12369   and    outbk.book_type_code(+) = p_book_type_code
12370   and    inbk.transaction_header_id_in = th.transaction_header_id
12371   and    outbk.transaction_header_id_out(+) = th.transaction_header_id
12372   and    th.asset_id = p_asset_id
12373   and    th.book_type_code = p_book_type_code
12374   and    th.transaction_type_code not in ('TRANSFER OUT', 'TRANSFER IN',
12375                                             'TRANSFER', 'TRANSFER IN/VOID',
12376                                             'RECLASS', 'UNIT ADJUSTMENT',
12377                                             'REINSTATEMENT');
12378   l_amortization_start_date DATE:=NULL;
12379 -- Bug# 5946411: ER End
12380 
12381  -- Bug# 6061103
12382  l_amortization_date DATE;
12383  l_special_treatment_required VARCHAR2(1);
12384  l_pdt_id            Number;
12385  l_start_date        Date;
12386  l_chr_id        number;
12387  -- Bug# 6061103 end
12388 
12389 --Bug# 5946411: avsingh - parameters for getting depreciation reserve
12390   l_fa_asset_hdr_rec   FA_API_TYPES.asset_hdr_rec_type;
12391   l_fa_asset_deprn_rec FA_API_TYPES.asset_deprn_rec_type;
12392 BEGIN
12393      x_return_status := OKL_API.G_RET_STS_SUCCESS;
12394    --call start activity to set savepoint
12395      x_return_status := OKL_API.START_ACTIVITY( SUBSTR(l_api_name,1,26),
12396                                                        p_init_msg_list,
12397                                                    '_PVT',
12398                                                        x_return_status);
12399      IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
12400                 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
12401      ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
12402                 RAISE OKL_API.G_EXCEPTION_ERROR;
12403      END IF;
12404 
12405    --------------------
12406    -- asset header info
12407    -------------------
12408    l_asset_hdr_rec.asset_id       := p_ast_line_rec.asset_id;
12409    l_asset_hdr_rec.book_type_code := p_ast_line_rec.corporate_book;
12410 
12411    ----------------
12412    -- trans struct
12413    ----------------
12414    -- from the dld :
12415    -- You must populate the transaction type code as. This applies to any asset
12416    -- type. The transaction subtype will default to 'EXPENSED' so u should popul
12417    -- ate the transaction subtype with 'AMORTIZED' if you wish to instead
12418    -- amortize the adjustment. If transaction subtype is AMORTIZED, you must also
12419    -- provide the amortization start date
12420 
12421    --Bug# 3156924 :
12422    --l_trans_rec.transaction_type_code   := 'ADJUSTMENT'; --will be derived as per DOC
12423    --l_trans_rec.transaction_subtype     := 'AMORTIZED';
12424    --by default will be 'EXPENSED'
12425    --l_trans_rec.amortization_start_date := to_date('01-JAN-1995','DD-MON-YYYY');
12426 
12427    --Bug# 3156924 :
12428    --l_trans_rec.amortization_start_date    := p_trx_date; --required only if amortize
12429    --l_trans_rec.transaction_date_entered := p_trx_date; --will be derived as per DOC
12430    --l_trans_rec.amortization_start_date := p_ast_line_rec.in_service_date;
12431 
12432 
12433    --Bug# 3783518: Cost adjustment on Split to be Amortized
12434    l_trans_rec.transaction_subtype     := 'AMORTIZED';
12435 
12436     --Bug# 5946411: ER
12437     -- l_trans_rec.amortization_start_date := p_ast_line_rec.in_service_date;
12438     --dbms_output.put_line('l_trans_rec.amortization_start_date '||l_trans_rec.amortization_start_date);
12439     l_amortization_start_date:=NULL;
12440     -- get the status of the parent line id
12441     OPEN l_cleb_sts_csr(  p_txlv_rec.kle_id);
12442     FETCH l_cleb_sts_csr INTO l_cle_status, l_chr_id, l_pdt_id, l_start_date ;
12443     close l_cleb_sts_csr;
12444     -- Bug# 6061103 start
12445      is_evergreen_df_lease
12446                    (p_api_version     =>  p_api_version,
12447                     p_init_msg_list   =>  p_init_msg_list,
12448                     x_return_status   =>  x_return_status,
12449                     x_msg_count       =>  x_msg_count,
12450                     x_msg_data        =>  x_msg_data,
12451                     p_cle_id          =>p_ast_line_rec.PARENT_LINE_ID, -- p_ast_line_rec.asset_id,
12452                     p_book_type_code   =>  p_ast_line_rec.corporate_book,
12453                     p_asset_status    => l_cle_status,
12454                     p_pdt_id          => l_pdt_id,
12455                     p_start_date      => l_start_date,
12456                     x_amortization_date => l_amortization_date,
12457                     x_special_treatment_required => l_special_treatment_required);
12458            IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
12459                RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
12460            ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
12461                RAISE OKL_API.G_EXCEPTION_ERROR;
12462            END IF;
12463     if l_special_treatment_required = 'Y' then
12464         l_trans_rec.amortization_start_date := l_amortization_date;
12465         --rirawat : Handle scenario for asset with no off lease transaction
12466         IF l_amortization_date IS NULL THEN
12467          OKL_API.SET_MESSAGE(p_app_name     =>  g_app_name,
12468                                         p_msg_name     =>  'OKL_LA_SPLIT_NOT_ALLOWED'
12469                                         );
12470          RAISE OKL_API.G_EXCEPTION_ERROR;
12471         END IF;
12472     else
12473      -- Bug# 6061103 end
12474    --dbms_output.put_line('Status set as l_cle_status'||l_cle_status);
12475  /*   IF l_cle_status IN ('TERMINATED','EXPIRED') THEN
12476      --To prevent following FA error FA_INVALID_AMOUNT_ADJUSTMENT:
12477      -- 'The amounts you entered cause the results of the adjustment to be
12478      -- invalid for the amortization date you entered.'
12479      -- do the adjustement on the last amortization date
12480      open l_max_amortize_date_csr(p_ast_line_rec.asset_id,p_ast_line_rec.corporate_book);
12481      fetch l_max_amortize_date_csr into l_amortization_start_date;
12482      close l_max_amortize_date_csr;
12483     ELSE
12484      l_trans_rec.amortization_start_date := p_ast_line_rec.in_service_date;
12485    END IF;
12486    if l_amortization_start_date IS NOT NULL THEN
12487      l_trans_rec.amortization_start_date := l_amortization_start_date;
12488    ELSE */
12489      l_trans_rec.amortization_start_date := p_ast_line_rec.in_service_date;
12490  --  END IF;
12491    end if; -- 6061103 end if;
12492     --Bug# 5946411: ER End
12493 
12494    --Bug# 3156924 :
12495    l_trans_rec.transaction_name  := SUBSTR(TO_CHAR(p_trx_number),1,20); --optional
12496    l_trans_rec.calling_interface := l_calling_interface; --optional
12497 
12498    IF NVL(p_txdv_rec.split_percent,0) <> 0 OR p_txdv_rec.split_percent <> OKL_API.G_MISS_NUM THEN
12499        l_split_factor := (p_txdv_rec.split_percent/100);
12500    ELSE
12501        l_split_factor := (p_txdv_rec.quantity/p_txlv_rec.current_units);
12502    END IF;
12503 
12504    -----------
12505    -- fin info
12506    -----------
12507    l_asset_fin_rec_adj.set_of_books_id := p_ast_line_rec.set_of_books_id;
12508    --should take the true snapshot at this point in time and not from split trx
12509    --this is just for testing
12510    --l_asset_fin_rec_adj.cost := p_txdv_rec.cost;
12511    --l_asset_fin_rec_adj.salvage_value := p_ast_line_rec.salvage_value*l_split_factor;
12512    --
12513    --------------------
12514    --Bug #2723498 11.5.9 enhancement fix :
12515    --                For Direct Finance Lease Asset cost for original asset will be zero
12516    --                Calling adjustment API for already zero cost gives error msg. this if clause
12517    --                to avoid that
12518    --This is fixed in branch by bug#2598894
12519    --------------------
12520    IF p_ast_line_rec.cost = 0 THEN
12521        --do not call adjustments for DFL contracts
12522        NULL;
12523    ELSE
12524        IF NVL(p_txdv_rec.split_percent,0) <> 0 OR p_txdv_rec.split_percent <> OKL_API.G_MISS_NUM THEN
12525            l_asset_fin_rec_adj.cost :=  - p_ast_line_rec.cost;
12526            --Bug# 3950089
12527            If (p_ast_line_rec.percent_salvage_value is not null) Then
12528              l_asset_fin_rec_adj.percent_salvage_value :=  - p_ast_line_rec.percent_salvage_value;
12529            Else
12530              l_asset_fin_rec_adj.salvage_value :=  - p_ast_line_rec.salvage_value;
12531            End If;
12532        ELSE
12533            l_asset_fin_rec_adj.cost := (p_ast_line_rec.cost*l_split_factor) - p_ast_line_rec.cost;
12534            --Bug# 3950089
12535            If (p_ast_line_rec.percent_salvage_value is not null) Then
12536              l_asset_fin_rec_adj.percent_salvage_value := 0;
12537            Else
12538              l_asset_fin_rec_adj.salvage_value := (p_ast_line_rec.salvage_value*l_split_factor) - p_ast_line_rec.salvage_value;
12539            End If;
12540        END IF;
12541        --
12542 
12543        --asset_deprn_rec
12544        l_asset_deprn_rec_adj.set_of_books_id := p_ast_line_rec.set_of_books_id;
12545 
12546        ---------------------------------------------------------------------------------------------
12547        --Bug# 5946411 : avsingh
12548        -- If adjustment being done in period of addition depreciation reserve needs to be backed out
12549        ---------------------------------------------------------------------------------------------
12550        --1. Check if adjustment is being made in the period of addition of the asset
12551        ---------------------------------------------------------------------------------------------
12552        l_fa_asset_hdr_rec.asset_id       := p_ast_line_rec.asset_id;
12553        l_fa_asset_hdr_rec.book_type_code := p_ast_line_rec.corporate_book;
12554 
12555        If NOT fa_cache_pkg.fazcbc(x_book => l_fa_asset_hdr_rec.book_type_code) then
12556            OKL_API.SET_MESSAGE(p_app_name     => g_app_name,
12557                                p_msg_name     => 'OKL_LLA_FA_CACHE_ERROR'
12558                               );
12559            Raise OKL_API.G_EXCEPTION_ERROR;
12560        end if;
12561 
12562        --Bug# 6804043: In R12 codeline, do not back out depreciation reserve
12563        --              when cost adjustment is done in period of addition
12564        /*
12565        If not FA_ASSET_VAL_PVT.validate_period_of_addition
12566              (p_asset_id            => l_fa_asset_hdr_rec.asset_id,
12567               p_book                => l_fa_asset_hdr_rec.book_type_code,
12568               p_mode                => 'ABSOLUTE',
12569               px_period_of_addition => l_fa_asset_hdr_rec.period_of_addition
12570              ) then
12571            OKL_API.SET_MESSAGE(p_app_name     => g_app_name,
12572                                p_msg_name     => 'OKL_LLA_FA_POA_ERROR'
12573                               );
12574            Raise OKL_API.G_EXCEPTION_ERROR;
12575        end if;
12576 
12577 
12578        If nvl(l_fa_asset_hdr_rec.period_of_addition,'N') = 'Y' Then
12579            --------------------------------------
12580            --2. Get the depreciation reserve
12581            --------------------------------------
12582            get_deprn_reserve
12583                    (p_api_version      =>  p_api_version,
12584                     p_init_msg_list    =>  p_init_msg_list,
12585                     x_return_status    =>  x_return_status,
12586                     x_msg_count        =>  x_msg_count,
12587                     x_msg_data         =>  x_msg_data,
12588                     p_asset_id         =>  p_ast_line_rec.asset_id,
12589                     p_book_type_code   =>  p_ast_line_rec.corporate_book,
12590                     x_asset_deprn_rec  =>  l_fa_asset_deprn_rec);
12591 
12592            IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
12593                RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
12594            ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
12595                RAISE OKL_API.G_EXCEPTION_ERROR;
12596            END IF;
12597 
12598           If l_fa_asset_deprn_rec.deprn_reserve > 0 then
12599                l_asset_deprn_rec_adj.deprn_reserve := (-1) * l_fa_asset_deprn_rec.deprn_reserve;
12600            End If;
12601            If l_fa_asset_deprn_rec.ytd_deprn > 0 then
12602                l_asset_deprn_rec_adj.ytd_deprn     := (-1) * l_fa_asset_deprn_rec.ytd_deprn;
12603            End If;
12604            If l_fa_asset_deprn_rec.prior_fy_expense > 0 then
12605                l_asset_deprn_rec_adj.prior_fy_expense := (-1) * l_fa_asset_deprn_rec.prior_fy_expense;
12606            End If;
12607            If l_fa_asset_deprn_rec.bonus_ytd_deprn > 0 then
12608                l_asset_deprn_rec_adj.bonus_ytd_deprn  := (-1) * l_fa_asset_deprn_rec.bonus_ytd_deprn;
12609            End If;
12610            If l_fa_asset_deprn_rec.bonus_deprn_reserve > 0 then
12611                l_asset_deprn_rec_adj.bonus_deprn_reserve := (-1) * l_fa_asset_deprn_rec.bonus_deprn_reserve;
12612            End If;
12613 
12614        End If;
12615        --End Bug# 5946411
12616        */
12617        --End Bug# 6804043
12618 
12619        /***** Commented as part of Bug # 5946411****************************************************/
12620        /*--avsingh : commented - As per FA no depreciation should be passed during Adjustments if it
12621          -- adjustment is not period of addition
12622        IF (p_ast_line_rec.cost + l_asset_fin_rec_adj.cost) = 0 THEN
12623           --dbms_output.put_line('opening deprn_cur2');
12624            OPEN  deprn_cur2 (p_asset_id       => p_ast_line_rec.asset_id,
12625                              p_book_type_code => p_ast_line_rec.corporate_book);
12626 -- gk removed below 2 params for bug 5946411
12627                FETCH deprn_cur2 INTO --l_asset_deprn_rec_adj.ytd_deprn,
12628                                      --l_asset_deprn_rec_adj.deprn_reserve,
12629                                      l_asset_deprn_rec_adj.prior_fy_expense,
12630                                      l_asset_deprn_rec_adj.bonus_ytd_deprn,
12631                                      l_asset_deprn_rec_adj.bonus_deprn_reserve;
12632                IF deprn_cur2%NOTFOUND THEN
12633                    NULL;
12634                END IF;
12635            CLOSE deprn_cur2;
12636        ELSE
12637           --dbms_output.put_line('opening deprn_cur');
12638            OPEN  deprn_cur (p_asset_id       => p_ast_line_rec.asset_id,
12639                             p_book_type_code => p_ast_line_rec.corporate_book,
12640                             p_split_factor   => l_split_factor);
12641 -- gk removed below 2 params for bug 5946411
12642                FETCH deprn_cur INTO --l_asset_deprn_rec_adj.ytd_deprn,
12643                                     --l_asset_deprn_rec_adj.deprn_reserve,
12644                                     l_asset_deprn_rec_adj.prior_fy_expense,
12645                                     l_asset_deprn_rec_adj.bonus_ytd_deprn,
12646                                     l_asset_deprn_rec_adj.bonus_deprn_reserve;
12647                IF deprn_cur%NOTFOUND THEN
12648                    NULL;
12649                END IF;
12650            CLOSE deprn_cur;
12651        END IF;
12652        ---------------End of Commented Code for Bug# 5946411-----------------------------------------------------*/
12653 
12654        --dbms_output.put_line('Deprn reserve '||to_char(l_asset_deprn_rec_adj.deprn_reserve));
12655        FA_ADJUSTMENT_PUB.do_adjustment
12656           (p_api_version             => p_api_version,
12657            p_init_msg_list           => p_init_msg_list,
12658            p_commit                  => OKL_API.G_FALSE,
12659            p_validation_level        => FND_API.G_VALID_LEVEL_FULL,
12660            x_return_status           => x_return_status,
12661            x_msg_count               => x_msg_count,
12662            x_msg_data                => x_msg_data,
12663            --Bug# 3156924
12664            --p_calling_fn              => null,
12665            p_calling_fn              => l_calling_interface,
12666            px_trans_rec              => l_trans_rec,
12667            px_asset_hdr_rec          => l_asset_hdr_rec,
12668            p_asset_fin_rec_adj       => l_asset_fin_rec_adj,
12669            x_asset_fin_rec_new       => l_asset_fin_rec_new,
12670            x_asset_fin_mrc_tbl_new   => l_asset_fin_mrc_tbl_new,
12671            px_inv_trans_rec          => l_inv_trans_rec,
12672            px_inv_tbl                => l_inv_tbl,
12673            p_asset_deprn_rec_adj     => l_asset_deprn_rec_adj,
12674            x_asset_deprn_rec_new     => l_asset_deprn_rec_new,
12675            x_asset_deprn_mrc_tbl_new => l_asset_deprn_mrc_tbl_new,
12676            p_group_reclass_options_rec => l_group_recalss_option_rec
12677           );
12678           --dbms_output.put_line('After calling FA adjustment Api '||x_return_status);
12679        IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
12680            RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
12681        ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
12682            RAISE OKL_API.G_EXCEPTION_ERROR;
12683        END IF;
12684 
12685         --Bug# 4028371 :
12686        x_fa_trx_date := l_trans_rec.transaction_date_entered;
12687 
12688    --bug# 6373605 -- call populate sla sources
12689       l_fxhv_rec.source_id := p_sla_source_header_id;
12690       l_fxhv_rec.source_table := p_sla_source_header_table;
12691       l_fxhv_rec.khr_id := p_sla_source_chr_id;
12692       l_fxhv_rec.try_id := p_sla_source_try_id;
12693 
12694       l_fxlv_rec.source_id := p_sla_source_line_id;
12695       l_fxlv_rec.source_table := p_sla_source_line_table;
12696       l_fxlv_rec.kle_id := p_sla_source_kle_id;
12697 
12698       l_fxlv_rec.asset_id := l_asset_hdr_rec.asset_id;
12699       l_fxlv_rec.fa_transaction_id := l_trans_rec.transaction_header_id;
12700       l_fxlv_rec.asset_book_type_name := l_asset_hdr_rec.book_type_code;
12701 
12702       OKL_SLA_ACC_SOURCES_PVT.populate_sources(
12703       p_api_version  => p_api_version
12704      ,p_init_msg_list => p_init_msg_list
12705      ,p_fxhv_rec => l_fxhv_rec
12706      ,p_fxlv_rec => l_fxlv_rec
12707      ,x_return_status => x_return_status
12708      ,x_msg_count    => x_msg_count
12709      ,x_msg_data    => x_msg_data
12710       );
12711      IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
12712          RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
12713      ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
12714          RAISE OKL_API.G_EXCEPTION_ERROR;
12715      END IF;
12716      --bug# 6373605 -- call populate SLA sources
12717 
12718      END IF;
12719 
12720      l_book_class := NULL;
12721      OPEN l_book_class_cur(p_book_type_code => p_ast_line_rec.corporate_book);
12722          FETCH l_book_class_cur INTO l_book_class;
12723          IF l_book_class_cur%NOTFOUND THEN
12724              NULL;
12725          END IF;
12726      CLOSE l_book_class_cur;
12727 
12728      IF l_book_class = 'CORPORATE' THEN
12729          --dbms_output.put_line('In adjust split units book type code '|| p_ast_line_rec.corporate_book);
12730          --now do the unit adjustments
12731          l_asset_hdr_rec_ua.asset_id             := p_ast_line_rec.asset_id;
12732          l_asset_hdr_rec_ua.book_type_code       := p_ast_line_rec.corporate_book;
12733 
12734         --l_trans_rec_ua.transaction_type_code    := NULL;
12735         --l_trans_rec_ua.transaction_subtype      := NULL;
12736         --l_trans_rec_ua.amortization_start_date := to_date('01-JAN-1995','DD-MON-YYYY');
12737         --l_trans_rec_ua.amortization_start_date   := NULL;
12738         --l_trans_rec_ua.transaction_date_entered  := p_ast_line_rec.in_service_date;
12739         --Bug# 3156924 :
12740         --l_trans_rec_ua.transaction_date_entered  := null;
12741         --l_trans_rec_ua.transaction_date_entered  := p_trx_date;
12742         -- Bug# 6061103 -- start
12743         l_trans_rec_ua.amortization_start_date   := p_ast_line_rec.in_service_date;
12744         -- Bug# 6061103 -- end
12745         l_trans_rec_ua.transaction_name          := SUBSTR(TO_CHAR(p_trx_number),1,20);
12746         l_trans_rec_ua.calling_interface         := l_calling_interface;
12747 
12748         l_trans_rec_ua.who_info.last_updated_by := FND_GLOBAL.USER_ID;
12749         l_trans_rec_ua.who_info.last_update_login := FND_GLOBAL.LOGIN_ID;
12750 
12751 
12752        --how to find which distribution to adjust from ??
12753        l_asset_dist_tbl.DELETE;
12754        --dbms_output.put_line('split factor '||to_char(l_split_factor));
12755        --dbms_output.put_line('current units '||to_char(p_ast_line_rec.current_units));
12756 
12757        IF NVL(p_txdv_rec.split_percent,0) <> 0 OR p_txdv_rec.split_percent <> OKL_API.G_MISS_NUM THEN
12758            --l_units_to_adjust := p_ast_line_rec.current_units;
12759            NULL;
12760        ELSE
12761            l_units_to_adjust := p_ast_line_rec.current_units - (p_ast_line_rec.current_units*l_split_factor);
12762        --End If;
12763 
12764        --dbms_output.put_line('Units to adjust outside loop'||l_units_to_adjust );
12765        i := 1;
12766        OPEN l_dist_curs(p_ast_line_rec.asset_id, p_ast_line_rec.corporate_book);
12767        LOOP
12768            FETCH l_dist_curs INTO l_units_assigned, l_distribution_id;
12769            EXIT WHEN l_dist_curs%NOTFOUND;
12770            IF l_units_to_adjust = 0 THEN
12771               EXIT;
12772            ELSIF l_units_to_adjust >= l_units_assigned THEN
12773               l_asset_dist_tbl(i).distribution_id := l_distribution_id;
12774               l_asset_dist_tbl(i).transaction_units := (-1)*l_units_assigned;
12775               --dbms_output.put_line('Units to adjust '||to_char(l_asset_dist_tbl(i).transaction_units));
12776               l_asset_dist_tbl(i).units_assigned := NULL;
12777               l_asset_dist_tbl(i).assigned_to := NULL;
12778               l_asset_dist_tbl(i).expense_ccid := NULL;
12779               l_asset_dist_tbl(i).location_ccid := NULL;
12780               l_units_to_adjust := l_units_to_adjust - l_units_assigned;
12781               i := i + 1;
12782            ELSIF l_units_to_adjust < l_units_assigned THEN
12783               l_asset_dist_tbl(i).distribution_id := l_distribution_id;
12784               l_asset_dist_tbl(i).transaction_units := (-1)*l_units_to_adjust;
12785               --dbms_output.put_line('Units to adjust '||to_char(l_asset_dist_tbl(i).transaction_units));
12786               l_asset_dist_tbl(i).units_assigned := NULL;
12787               l_asset_dist_tbl(i).assigned_to := NULL;
12788               l_asset_dist_tbl(i).expense_ccid := NULL;
12789               l_asset_dist_tbl(i).location_ccid := NULL;
12790               l_units_to_adjust := l_units_to_adjust - l_units_to_adjust;
12791               i := i + 1;
12792            END IF;
12793        END LOOP;
12794        CLOSE l_dist_curs;
12795 
12796       FA_UNIT_ADJ_PUB.do_unit_adjustment(
12797            p_api_version       => p_api_version,
12798            p_init_msg_list      => FND_API.G_FALSE,
12799            p_commit            => FND_API.G_FALSE,
12800            p_validation_level  => FND_API.G_VALID_LEVEL_FULL,
12801            --bug# 3156924 :
12802            p_calling_fn        => l_calling_interface,
12803            --p_calling_fn        => NULL,
12804            x_return_status     => x_return_status,
12805            x_msg_count         => x_msg_count,
12806            x_msg_data          => x_msg_data,
12807            px_trans_rec        => l_trans_rec_ua,
12808            px_asset_hdr_rec    => l_asset_hdr_rec_ua,
12809            px_asset_dist_tbl   => l_asset_dist_tbl);
12810 
12811          --dbms_output.put_line('After calling FA unit adjust Api '||x_return_status);
12812      IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
12813          RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
12814      ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
12815          RAISE OKL_API.G_EXCEPTION_ERROR;
12816      END IF;
12817 
12818       --bug# 6373605 -- call populate sla sources
12819       l_fxhv_rec.source_id := p_sla_source_header_id;
12820       l_fxhv_rec.source_table := p_sla_source_header_table;
12821       l_fxhv_rec.khr_id := p_sla_source_chr_id;
12822       l_fxhv_rec.try_id := p_sla_source_try_id;
12823 
12824       l_fxlv_rec.source_id := p_sla_source_line_id;
12825       l_fxlv_rec.source_table := p_sla_source_line_table;
12826       l_fxlv_rec.kle_id := p_sla_source_kle_id;
12827 
12828       l_fxlv_rec.asset_id := l_asset_hdr_rec_ua.asset_id;
12829       l_fxlv_rec.fa_transaction_id := l_trans_rec_ua.transaction_header_id;
12830       l_fxlv_rec.asset_book_type_name := l_asset_hdr_rec_ua.book_type_code;
12831 
12832       OKL_SLA_ACC_SOURCES_PVT.populate_sources(
12833       p_api_version  => p_api_version
12834      ,p_init_msg_list => p_init_msg_list
12835      ,p_fxhv_rec => l_fxhv_rec
12836      ,p_fxlv_rec => l_fxlv_rec
12837      ,x_return_status => x_return_status
12838      ,x_msg_count    => x_msg_count
12839      ,x_msg_data    => x_msg_data
12840       );
12841 
12842      IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
12843          RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
12844      ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
12845          RAISE OKL_API.G_EXCEPTION_ERROR;
12846      END IF;
12847      --bug# 6373605 -- call populate SLA sources
12848 
12849     END IF;
12850     END IF;
12851      OKL_API.END_ACTIVITY (x_msg_count,
12852                           x_msg_data );
12853     EXCEPTION
12854     WHEN OKL_API.G_EXCEPTION_ERROR THEN
12855     x_return_status := OKL_API.HANDLE_EXCEPTIONS(
12856                                l_api_name,
12857                                G_PKG_NAME,
12858                                'OKL_API.G_RET_STS_ERROR',
12859                                x_msg_count,
12860                                x_msg_data,
12861                                '_PVT');
12862     WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
12863     x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
12864                               l_api_name,
12865                               G_PKG_NAME,
12866                               'OKL_API.G_RET_STS_UNEXP_ERROR',
12867                               x_msg_count,
12868                               x_msg_data,
12869                               '_PVT');
12870     WHEN OTHERS THEN
12871     x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
12872                               l_api_name,
12873                               G_PKG_NAME,
12874                               'OTHERS',
12875                               x_msg_count,
12876                               x_msg_data,
12877                               '_PVT');
12878 END FIXED_ASSET_ADJUST;
12879 ------------------------------------------------------------------------------
12880   --Start of comments
12881   --
12882   --Procedure Name        : get_trx_rec
12883   --Purpose               : Gets source transaction record for IB interface
12884   --Modification History  :
12885   --15-Jun-2001    ashish.singh  Created
12886   --Notes :  Assigns values to transaction_type_id and source_line_ref_id
12887   --End of Comments
12888 ------------------------------------------------------------------------------
12889   PROCEDURE get_trx_rec
12890     (p_api_version                  IN  NUMBER,
12891          p_init_msg_list                IN  VARCHAR2 DEFAULT OKL_API.G_FALSE,
12892          x_return_status                OUT NOCOPY VARCHAR2,
12893          x_msg_count                    OUT NOCOPY NUMBER,
12894          x_msg_data                     OUT NOCOPY VARCHAR2,
12895      p_cle_id                       IN  NUMBER,
12896      p_transaction_type             IN  VARCHAR2,
12897      x_trx_rec                      OUT NOCOPY CSI_DATASTRUCTURES_PUB.transaction_rec) IS
12898 
12899      l_return_status     VARCHAR2(1) := OKL_API.G_RET_STS_SUCCESS;
12900      l_api_name          CONSTANT VARCHAR2(30) := 'GET_TRX_REC';
12901      l_api_version           CONSTANT NUMBER    := 1.0;
12902 
12903 --Following cursor assumes that a transaction type called
12904 --'OKL_BOOK'  will be seeded in IB
12905      CURSOR okl_trx_type_csr(p_transaction_type IN VARCHAR2)IS
12906             SELECT transaction_type_id
12907             FROM   CSI_TXN_TYPES
12908             WHERE  source_transaction_type = p_transaction_type;
12909      l_trx_type_id NUMBER;
12910  BEGIN
12911      OPEN okl_trx_type_csr(p_transaction_type);
12912         FETCH okl_trx_type_csr
12913         INTO  l_trx_type_id;
12914         IF okl_trx_type_csr%NOTFOUND THEN
12915            --OKL LINE ACTIVATION not seeded as a source transaction in IB
12916            OKL_API.SET_MESSAGE(p_app_name     => g_app_name,
12917                                                p_msg_name     => G_IB_TXN_TYPE_NOT_FOUND,
12918                                                p_token1       => G_TXN_TYPE_TOKEN,
12919                                                p_token1_value => p_transaction_type
12920                                             );
12921            RAISE OKL_API.G_EXCEPTION_ERROR;
12922         END IF;
12923      CLOSE okl_trx_type_csr;
12924      --Assign transaction Type id to seeded value in cs_lookups
12925      x_trx_rec.transaction_type_id := l_trx_type_id;
12926      --Assign Source Line Ref id to contract line id of IB instance line
12927      x_trx_rec.source_line_ref_id := p_cle_id;
12928      x_trx_rec.transaction_date := SYSDATE;
12929      --confirm whether this has to be sysdate or creation date on line
12930      x_trx_rec.source_transaction_date := SYSDATE;
12931     EXCEPTION
12932     WHEN OKL_API.G_EXCEPTION_ERROR THEN
12933       x_return_status :=OKL_API.HANDLE_EXCEPTIONS
12934       (
12935         l_api_name,
12936         G_PKG_NAME,
12937         'OKL_API.G_RET_STS_ERROR',
12938         x_msg_count,
12939         x_msg_data,
12940         '_PVT'
12941       );
12942     WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
12943       x_return_status :=OKL_API.HANDLE_EXCEPTIONS
12944       (
12945         l_api_name,
12946         G_PKG_NAME,
12947         'OKL_API.G_RET_STS_UNEXP_ERROR',
12948         x_msg_count,
12949         x_msg_data,
12950         '_PVT'
12951       );
12952     WHEN OTHERS THEN
12953       x_return_status :=OKL_API.HANDLE_EXCEPTIONS
12954       (
12955         l_api_name,
12956         G_PKG_NAME,
12957         'OTHERS',
12958         x_msg_count,
12959         x_msg_data,
12960         '_PVT'
12961       );
12962 END get_trx_rec;
12963 ------------------------------------------------------------------------------
12964   --Start of comments
12965   --
12966   --Procedure Name        : get_party_rec
12967   --Purpose               : Gets Party records for IB interface
12968   --Modification History  :
12969   --15-Jun-2001    avsingh   Created
12970   --Notes : Takes chr_id as input and tries to get the party role
12971   --        for that contract for party role = 'LESSEE'
12972   --        Assuming that LESSEE will be the owner of the IB instance
12973   --End of Comments
12974 ------------------------------------------------------------------------------
12975   PROCEDURE get_party_rec
12976         (p_api_version                  IN  NUMBER,
12977          p_init_msg_list                IN  VARCHAR2 DEFAULT OKL_API.G_FALSE,
12978          x_return_status                OUT NOCOPY VARCHAR2,
12979          x_msg_count                    OUT NOCOPY NUMBER,
12980          x_msg_data                     OUT NOCOPY VARCHAR2,
12981      p_chrv_id                      IN  NUMBER,
12982      x_party_tbl                    OUT NOCOPY CSI_DATASTRUCTURES_PUB.party_tbl) IS
12983 
12984      l_party_tab         OKL_JTOT_EXTRACT.party_tab_type;
12985      l_return_status     VARCHAR2(1) := OKL_API.G_RET_STS_SUCCESS;
12986      l_api_name          CONSTANT VARCHAR2(30) := 'GET_PARTY_REC';
12987      l_api_version           CONSTANT NUMBER    := 1.0;
12988 
12989      l_index         NUMBER;
12990 
12991 BEGIN
12992     --call start activity to set savepoint
12993      l_return_status := OKL_API.START_ACTIVITY( SUBSTR(l_api_name,1,26),
12994                                                        p_init_msg_list,
12995                                                    '_PVT',
12996                                                        x_return_status);
12997      IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
12998                 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
12999      ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
13000                 RAISE OKL_API.G_EXCEPTION_ERROR;
13001      END IF;
13002 
13003     --get Party
13004     OKL_JTOT_EXTRACT.Get_Party(p_api_version     =>  p_api_version,
13005                                p_init_msg_list   =>  p_init_msg_list,
13006                                x_return_status   =>  x_return_status,
13007                                x_msg_count       =>  x_msg_count,
13008                                x_msg_data        =>  x_msg_data,
13009                                p_chr_id          =>  p_chrv_id,
13010                                p_cle_id          =>  NULL,
13011                                p_role_code       =>  G_ITM_INST_PARTY,
13012                                p_intent          =>  G_CONTRACT_INTENT,
13013                                x_party_tab       =>  l_party_tab);
13014 
13015    IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
13016                     RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
13017        ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
13018                     RAISE OKL_API.G_EXCEPTION_ERROR;
13019     END IF;
13020 
13021     FOR l_index IN 1..l_party_tab.LAST
13022     LOOP
13023         x_party_tbl(l_index).party_id := l_party_tab(l_index).id1;
13024         x_party_tbl(l_index).party_source_table := G_PARTY_SRC_TABLE;
13025         x_party_tbl(l_index).relationship_type_code := G_PARTY_RELATIONSHIP;
13026         x_party_tbl(l_index).contact_flag := 'N';
13027         --dbms_output.put_line('party_id' || to_char(l_index)||'-'||to_char(x_party_tbl(l_index).party_id));
13028     END LOOP;
13029 
13030     IF (l_index = 0) THEN
13031         --no owner party record found
13032         OKL_API.SET_MESSAGE(p_app_name     => g_app_name,
13033                                             p_msg_name     => G_PARTY_NOT_FOUND,
13034                                             p_token1       => G_ROLE_CODE_TOKEN,
13035                                             p_token1_value => G_ITM_INST_PARTY
13036                                          );
13037         RAISE OKL_API.G_EXCEPTION_ERROR;
13038     END IF;
13039 
13040     --Call end Activity
13041     OKL_API.END_ACTIVITY(x_msg_count, x_msg_data);
13042     EXCEPTION
13043     WHEN OKL_API.G_EXCEPTION_ERROR THEN
13044       x_return_status :=OKL_API.HANDLE_EXCEPTIONS
13045       (
13046         l_api_name,
13047         G_PKG_NAME,
13048         'OKL_API.G_RET_STS_ERROR',
13049         x_msg_count,
13050         x_msg_data,
13051         '_PVT'
13052       );
13053     WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
13054       x_return_status :=OKL_API.HANDLE_EXCEPTIONS
13055       (
13056         l_api_name,
13057         G_PKG_NAME,
13058         'OKL_API.G_RET_STS_UNEXP_ERROR',
13059         x_msg_count,
13060         x_msg_data,
13061         '_PVT'
13062       );
13063     WHEN OTHERS THEN
13064       x_return_status :=OKL_API.HANDLE_EXCEPTIONS
13065       (
13066         l_api_name,
13067         G_PKG_NAME,
13068         'OTHERS',
13069         x_msg_count,
13070         x_msg_data,
13071         '_PVT'
13072       );
13073 END get_party_rec;
13074 --------------------------------------------------------------------------------
13075 --Start of comments
13076 --Procedure Name : delete_instance_lines(Local)
13077 --Description    : deletes split our instance lines in case of serialized split asset
13078 --Created for Bug# 2726870 : Split assets by serial numbers
13079 --End of comments
13080 --------------------------------------------------------------------------------
13081 PROCEDURE delete_instance_lines(p_api_version   IN  NUMBER,
13082                                 p_init_msg_list IN  VARCHAR2 DEFAULT OKL_API.G_FALSE,
13083                                 x_return_status OUT NOCOPY VARCHAR2,
13084                                 x_msg_count     OUT NOCOPY NUMBER,
13085                                 x_msg_data      OUT NOCOPY VARCHAR2,
13086                                 p_inst_cle_id   IN  NUMBER,
13087                                 p_ib_cle_id     IN  NUMBER) IS
13088 
13089   l_return_status        VARCHAR2(1)  DEFAULT OKL_API.G_RET_STS_SUCCESS;
13090   l_api_name             CONSTANT VARCHAR2(30) := 'DELETE_INSTANCE_LINES';
13091   l_api_version          CONSTANT NUMBER := 1.0;
13092 
13093   l_inst_cle_id           OKC_K_LINES_B.ID%TYPE;
13094   l_ib_cle_id             OKC_K_LINES_B.ID%TYPE;
13095 
13096   l_inst_clev_rec         okc_contract_pub.clev_rec_type;
13097   l_ib_clev_rec           okc_contract_pub.clev_rec_type;
13098   lx_inst_clev_rec        okc_contract_pub.clev_rec_type;
13099   lx_ib_clev_rec          okc_contract_pub.clev_rec_type;
13100 
13101   l_inst_klev_rec         okl_kle_pvt.klev_rec_type;
13102   l_ib_klev_rec           okl_kle_pvt.klev_rec_type;
13103 
13104 
13105 BEGIN
13106     x_return_status := OKL_API.G_RET_STS_SUCCESS;
13107 
13108     x_return_status := OKL_API.START_ACTIVITY (
13109                                l_api_name
13110                                ,p_init_msg_list
13111                                ,'_PVT'
13112                                ,x_return_status);
13113     -- Check if activity started successfully
13114     IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
13115        RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
13116     ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
13117        RAISE OKL_API.G_EXCEPTION_ERROR;
13118     END IF;
13119 
13120     l_inst_cle_id      := p_inst_cle_id;
13121     l_ib_cle_id        := p_ib_cle_id;
13122     l_inst_klev_rec.id :=  l_inst_cle_id;
13123     l_ib_klev_rec.id   :=  l_ib_cle_id;
13124     l_inst_clev_rec.id :=  l_inst_cle_id;
13125     l_ib_clev_rec.id   :=  l_ib_cle_id;
13126 
13127     l_inst_clev_rec.sts_code :=  'ABANDONED';
13128     l_ib_clev_rec.sts_code   :=  'ABANDONED';
13129 
13130     ---update status of the line
13131     OKC_CONTRACT_PUB.update_contract_line(
13132                      p_api_version    => p_api_version,
13133                      p_init_msg_list  => p_init_msg_list,
13134                      x_return_status  => x_return_status,
13135                      x_msg_count      => x_msg_count,
13136                      x_msg_data       => x_msg_data,
13137                      p_clev_rec       => l_ib_clev_rec,
13138                      x_clev_rec       => lx_ib_clev_rec);
13139     IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
13140         RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
13141     ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
13142         RAISE OKL_API.G_EXCEPTION_ERROR;
13143     END IF;
13144 
13145     --Call line deletion API.
13146     OKC_CONTRACT_PUB.delete_contract_line(
13147                      p_api_version    => p_api_version,
13148                      p_init_msg_list  => p_init_msg_list,
13149                      x_return_status  => x_return_status,
13150                      x_msg_count      => x_msg_count,
13151                      x_msg_data       => x_msg_data,
13152                      p_line_id        => l_ib_cle_id);
13153     IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
13154         RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
13155     ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
13156         RAISE OKL_API.G_EXCEPTION_ERROR;
13157     END IF;
13158 
13159     -- delete shadows explicitly
13160     OKL_KLE_PVT.delete_row(
13161               p_api_version             => l_api_version,
13162               p_init_msg_list   => p_init_msg_list,
13163               x_return_status   => x_return_status,
13164               x_msg_count               => x_msg_count,
13165               x_msg_data                => x_msg_data,
13166               p_klev_rec                => l_ib_klev_rec);
13167 
13168     IF x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR THEN
13169         RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
13170     ELSIF x_return_status = OKL_API.G_RET_STS_ERROR THEN
13171         RAISE OKL_API.G_EXCEPTION_ERROR;
13172     END IF;
13173 
13174     ---update status of the line
13175     OKC_CONTRACT_PUB.update_contract_line(
13176                      p_api_version    => p_api_version,
13177                      p_init_msg_list  => p_init_msg_list,
13178                      x_return_status  => x_return_status,
13179                      x_msg_count      => x_msg_count,
13180                      x_msg_data       => x_msg_data,
13181                      p_clev_rec       => l_inst_clev_rec,
13182                      x_clev_rec       => lx_inst_clev_rec);
13183     IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
13184         RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
13185     ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
13186         RAISE OKL_API.G_EXCEPTION_ERROR;
13187     END IF;
13188 
13189     --Call line deletion API
13190     OKC_CONTRACT_PUB.delete_contract_line(
13191                      p_api_version    => p_api_version,
13192                      p_init_msg_list  => p_init_msg_list,
13193                      x_return_status  => x_return_status,
13194                      x_msg_count      => x_msg_count,
13195                      x_msg_data       => x_msg_data,
13196                      p_line_id        => l_inst_cle_id);
13197     IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
13198         RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
13199     ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
13200         RAISE OKL_API.G_EXCEPTION_ERROR;
13201     END IF;
13202 
13203     -- delete shadows explicitly
13204     OKL_KLE_PVT.delete_row(
13205               p_api_version             => l_api_version,
13206               p_init_msg_list   => p_init_msg_list,
13207               x_return_status   => x_return_status,
13208               x_msg_count               => x_msg_count,
13209               x_msg_data                => x_msg_data,
13210               p_klev_rec                => l_ib_klev_rec);
13211 
13212     IF x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR THEN
13213         RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
13214     ELSIF x_return_status = OKL_API.G_RET_STS_ERROR THEN
13215         RAISE OKL_API.G_EXCEPTION_ERROR;
13216     END IF;
13217 
13218     --Bug# 7033247: Deleted the wrongly pasted
13219     --duplicate lines of code from below:
13220 
13221     OKL_API.END_ACTIVITY (x_msg_count,
13222                           x_msg_data );
13223     EXCEPTION
13224     WHEN OKL_API.G_EXCEPTION_ERROR THEN
13225     x_return_status := OKL_API.HANDLE_EXCEPTIONS(
13226                                l_api_name,
13227                                G_PKG_NAME,
13228                                'OKL_API.G_RET_STS_ERROR',
13229                                x_msg_count,
13230                                x_msg_data,
13231                                '_PVT');
13232     WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
13233     x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
13234                               l_api_name,
13235                               G_PKG_NAME,
13236                               'OKL_API.G_RET_STS_UNEXP_ERROR',
13237                               x_msg_count,
13238                               x_msg_data,
13239                               '_PVT');
13240     WHEN OTHERS THEN
13241     x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
13242                               l_api_name,
13243                               G_PKG_NAME,
13244                               'OTHERS',
13245                               x_msg_count,
13246                               x_msg_data,
13247                               '_PVT');
13248 END delete_instance_lines;
13249 --------------------------------------------------------------------------------
13250 --Start of comments
13251 --Procedure Name : Create_ib_instance
13252 --Description    : procedure creates split child ib instance
13253 --Modified for Bug# 2648280 : to take care of IB fix on expire instance API
13254 --end of comments
13255 --------------------------------------------------------------------------------
13256 PROCEDURE create_ib_instance(p_api_version   IN  NUMBER,
13257                              p_init_msg_list IN  VARCHAR2 DEFAULT OKL_API.G_FALSE,
13258                              x_return_status OUT NOCOPY VARCHAR2,
13259                              x_msg_count     OUT NOCOPY NUMBER,
13260                              x_msg_data      OUT NOCOPY VARCHAR2,
13261                              p_csi_id1       IN  VARCHAR2,
13262                              p_csi_id2       IN  VARCHAR2,
13263                              p_ib_cle_id     IN  NUMBER,
13264                              p_chr_id        IN  NUMBER,
13265                              p_split_qty     IN  NUMBER,
13266                              p_txdv_rec      IN  txdv_rec_type,
13267                              x_instance_id   OUT NOCOPY NUMBER) IS
13268 
13269   l_return_status        VARCHAR2(1)  DEFAULT OKL_API.G_RET_STS_SUCCESS;
13270   l_api_name             CONSTANT VARCHAR2(30) := 'CREATE_IB_INSTANCE';
13271   l_api_version          CONSTANT NUMBER := 1.0;
13272 
13273   --instance query recs
13274   l_instance_query_rec           CSI_DATASTRUCTURES_PUB.instance_query_rec;
13275   l_party_query_rec              CSI_DATASTRUCTURES_PUB.party_query_rec;
13276   l_account_query_rec            CSI_DATASTRUCTURES_PUB.party_account_query_rec;
13277   l_instance_header_tbl          CSI_DATASTRUCTURES_PUB.instance_header_tbl;
13278 
13279   --instance recs for creation
13280   l_instance_rec                 CSI_DATASTRUCTURES_PUB.instance_rec;
13281   l_ext_attrib_values_tbl        CSI_DATASTRUCTURES_PUB.extend_attrib_values_tbl;
13282   l_party_tbl                    CSI_DATASTRUCTURES_PUB.party_tbl;
13283   l_party_tbl_in                 CSI_DATASTRUCTURES_PUB.party_tbl;
13284   l_account_tbl                  CSI_DATASTRUCTURES_PUB.party_account_tbl;
13285   l_pricing_attrib_tbl           CSI_DATASTRUCTURES_PUB.pricing_attribs_tbl;
13286   l_org_assignments_tbl          CSI_DATASTRUCTURES_PUB.organization_units_tbl;
13287   l_asset_assignment_tbl         CSI_DATASTRUCTURES_PUB.instance_asset_tbl;
13288   l_txn_rec                      CSI_DATASTRUCTURES_PUB.transaction_rec;
13289 
13290   --original instance updation parameters
13291   l_upd_instance_rec                 CSI_DATASTRUCTURES_PUB.instance_rec;
13292   l_upd_ext_attrib_values_tbl        CSI_DATASTRUCTURES_PUB.extend_attrib_values_tbl;
13293   l_upd_party_tbl                    CSI_DATASTRUCTURES_PUB.party_tbl;
13294   l_upd_party_tbl_in                 CSI_DATASTRUCTURES_PUB.party_tbl;
13295   l_upd_account_tbl                  CSI_DATASTRUCTURES_PUB.party_account_tbl;
13296   l_upd_pricing_attrib_tbl           CSI_DATASTRUCTURES_PUB.pricing_attribs_tbl;
13297   l_upd_org_assignments_tbl          CSI_DATASTRUCTURES_PUB.organization_units_tbl;
13298   l_upd_asset_assignment_tbl         CSI_DATASTRUCTURES_PUB.instance_asset_tbl;
13299   l_upd_txn_rec                      CSI_DATASTRUCTURES_PUB.transaction_rec;
13300   l_upd_instance_id_lst              CSI_DATASTRUCTURES_PUB.id_tbl;
13301 
13302   l_exp_txn_rec                      CSI_DATASTRUCTURES_PUB.transaction_rec;
13303   l_exp_instance_id_lst              CSI_DATASTRUCTURES_PUB.id_tbl;
13304 
13305 
13306   l_no_data_found                BOOLEAN;
13307 
13308   --cursor to fetch customer account
13309   /*--Bug# 3124577: 11.5.10 : Rule Migration--------------------------------------
13310   CURSOR party_account_csr(p_chrv_id IN NUMBER) is
13311   SELECT  to_number(rulv.object1_id1)
13312   FROM    OKC_RULES_V rulv
13313   WHERE   rulv.rule_information_category = G_CUST_ACCT_RULE
13314   AND     rulv.dnz_chr_id = p_chrv_id
13315   AND     exists (select '1'
13316                   from    OKC_RULE_GROUPS_V rgpv
13317                   where   rgpv.chr_id = p_chrv_id
13318                   and     rgpv.rgd_code = G_CUST_ACCT_RULE_GROUP
13319                   and     rgpv.id       = rulv.rgp_id);
13320   --------------------------------------Bug# 3124577 : 11.5.10 Rule Migration----*/
13321 
13322   CURSOR party_account_csr(p_chrv_id IN NUMBER) IS
13323   SELECT chrb.cust_acct_id
13324   FROM   OKC_K_HEADERS_B chrb
13325   WHERE  chrb.id = p_chrv_id;
13326 
13327   l_party_account              NUMBER;
13328 
13329   --bug# 2648280
13330   --modified to get all the terminated statuses
13331   CURSOR inst_sts_csr(p_status_name IN VARCHAR2) IS
13332   SELECT instance_status_id
13333   FROM   CSI_INSTANCE_STATUSES
13334   WHERE  NVL(TERMINATED_FLAG,'N') = 'Y'
13335   AND    name = p_status_name;
13336 
13337   l_expired_status_id csi_instance_statuses.instance_status_id%TYPE DEFAULT NULL;
13338 
13339   l_active_instances_only VARCHAR2(1);
13340 
13341   --Bug # 2726870 11.5.9 enhancements - split asset into components
13342   --cursor to check if instance is to be split out in case of split asset by serial numbers
13343   CURSOR chk_instance_csr (PInstanceId IN NUMBER,PTalId IN NUMBER ) IS
13344   SELECT '!'
13345   FROM   OKL_TXL_ITM_INSTS iti
13346   WHERE  iti.instance_id                      = PInstanceId
13347   AND    iti.tal_id                           = PTalId
13348   AND    NVL(iti.selected_for_split_flag,'N') = 'Y'
13349   AND    iti.tal_type                         = 'ALI';
13350 
13351   l_instance_for_split   VARCHAR2(1) DEFAULT '?';
13352 
13353   --cursor to get the instance line id for parent asset line for delete
13354   CURSOR get_instance_cle_csr (PInstanceId IN NUMBER, PTalId IN NUMBER, PChrId IN NUMBER) IS
13355   SELECT inst_cle.id      inst_cle_id,
13356          ib_cle.id        ib_cle_id
13357   FROM
13358          okc_k_items       ib_cim,
13359          okc_k_lines_b     ib_cle,
13360          okc_line_styles_b ib_lse,
13361          okc_k_lines_b     inst_cle,
13362          okc_line_styles_b inst_lse,
13363          okc_k_lines_b     fa_cle,
13364          okc_line_styles_b fa_lse,
13365          okl_txl_Assets_b  tal
13366   WHERE  ib_cim.object1_id1       = TO_CHAR(PInstanceId)
13367   AND    ib_cim.object1_id2       = '#'
13368   AND    ib_cim.jtot_object1_code = 'OKX_IB_ITEM'
13369   AND    ib_cim.cle_id            = ib_cle.id
13370   AND    ib_cim.dnz_chr_id        = ib_cle.dnz_chr_id
13371   AND    ib_cle.cle_id            = inst_cle.id
13372   AND    ib_cle.dnz_chr_id        = inst_cle.dnz_chr_id
13373   AND    ib_cle.lse_id            = ib_lse.id
13374   AND    ib_lse.lty_code          = 'INST_ITEM'
13375   AND    inst_cle.cle_id          = fa_cle.cle_id
13376   AND    inst_cle.dnz_chr_id      = fa_cle.dnz_chr_id
13377   AND    inst_cle.lse_id          = inst_lse.id
13378   AND    inst_lse.lty_code        = 'FREE_FORM2'
13379   AND    fa_cle.id                = tal.kle_id
13380   AND    fa_cle.dnz_chr_id        = PChrId
13381   AND    fa_cle.lse_id            = fa_lse.id
13382   AND    fa_lse.lty_code          = 'FIXED_ASSET'
13383   AND    tal.id                   = PTalId;
13384 
13385   l_inst_cle_id    OKC_K_LINES_B.ID%TYPE;
13386   l_ib_cle_id      OKC_K_LINES_B.ID%TYPE;
13387 
13388 --Cursors for Split asset components which are serialized
13389   CURSOR get_instance_cle_csr2 (PTarget_kle_id IN NUMBER, PChrId IN NUMBER) IS
13390   SELECT inst_cle.id  inst_cle_id,
13391          ib_cim.id    ib_cim_id
13392   FROM
13393          okc_k_items       ib_cim,
13394          okc_k_lines_b     ib_cle,
13395          okc_line_styles_b ib_lse,
13396          okc_k_lines_b     inst_cle,
13397          okc_line_styles_b inst_lse,
13398          okc_k_lines_b     fa_cle,
13399          okc_line_styles_b fa_lse
13400   WHERE
13401          ib_cim.cle_id            = ib_cle.id
13402   AND    ib_cim.dnz_chr_id        = ib_cle.dnz_chr_id
13403   AND    ib_cle.cle_id            = inst_cle.id
13404   AND    ib_cle.dnz_chr_id        = inst_cle.dnz_chr_id
13405   AND    ib_cle.lse_id            = ib_lse.id
13406   AND    ib_lse.lty_code          = 'INST_ITEM'
13407   AND    inst_cle.cle_id          = fa_cle.cle_id
13408   AND    inst_cle.dnz_chr_id      = fa_cle.dnz_chr_id
13409   AND    inst_cle.lse_id          = inst_lse.id
13410   AND    inst_lse.lty_code        = 'FREE_FORM1'
13411   AND    fa_cle.id                = PTarget_kle_id
13412   AND    fa_cle.dnz_chr_id        = PChrId
13413   AND    fa_cle.lse_id            = fa_lse.id
13414   AND    fa_lse.lty_code          = 'FIXED_ASSET';
13415 
13416 
13417   l_ib_cim_id      OKC_K_ITEMS.ID%TYPE;
13418   l_serialized     VARCHAR2(1) DEFAULT okl_api.g_false;
13419 
13420   --cursor to get the serial numbers for serialized split asset components
13421   CURSOR comp_srl_csr (p_asd_id IN NUMBER) IS
13422   SELECT serial_number,
13423          id
13424   FROM   okl_txl_itm_insts
13425   WHERE  asd_id = p_asd_id
13426   AND    NVL(selected_for_split_flag,'N') = 'Y';
13427 
13428   l_itiv_id  OKL_TXL_ITM_INSTS.ID%TYPE;
13429 
13430   l_iipv_rec  OKL_TXL_ITM_INSTS_PUB.iipv_rec_type;
13431   lx_iipv_rec OKL_TXL_ITM_INSTS_PUB.iipv_rec_type;
13432 
13433 
13434 BEGIN
13435     x_return_status := OKL_API.G_RET_STS_SUCCESS;
13436     -- Call start_activity to create savepoint, check compatibility
13437     -- and initialize message list
13438     x_return_status := OKL_API.START_ACTIVITY (
13439                                l_api_name
13440                                ,p_init_msg_list
13441                                ,'_PVT'
13442                                ,x_return_status);
13443     -- Check if activity started successfully
13444     IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
13445        RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
13446     ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
13447        RAISE OKL_API.G_EXCEPTION_ERROR;
13448     END IF;
13449 
13450     --get item instance record
13451     --l_instance_rec := get_csi_rec(p_csi_id1 => p_csi_id1,
13452     --                              p_csi_id2 => p_csi_id2,
13453     --                              x_no_data_found => l_no_data_found);
13454 
13455     l_instance_query_rec.instance_id := p_csi_id1;
13456 
13457     --split asset into components modfn.
13458     IF NVL(p_txdv_rec.split_percent,0) NOT IN (0,OKL_API.G_MISS_NUM) THEN
13459        l_active_instances_only := FND_API.G_FALSE;
13460     ELSE
13461        l_active_instances_only := FND_API.G_TRUE;
13462     END IF;
13463 
13464     csi_item_instance_pub.get_item_instances (
13465          p_api_version           => p_api_version,
13466          p_commit                => FND_API.G_FALSE,
13467          p_init_msg_list         => FND_API.G_FALSE,
13468          p_validation_level      => FND_API.G_VALID_LEVEL_FULL,
13469          p_instance_query_rec    => l_instance_query_rec,
13470          p_party_query_rec       => l_party_query_rec,
13471          p_account_query_rec     => l_account_query_rec,
13472          p_transaction_id        => NULL,
13473          p_resolve_id_columns    => FND_API.G_FALSE,
13474          p_active_instance_only  => l_active_instances_only,
13475          --modfn for split asset component
13476          --p_active_instance_only  => FND_API.TRUE,
13477          x_instance_header_tbl   => l_instance_header_tbl,
13478          x_return_status         => x_return_status,
13479          x_msg_count             => x_msg_count,
13480          x_msg_data              => x_msg_data);
13481 
13482      --dbms_output.put_line('After calling IB API for query status '||x_return_status);
13483      --dbms_output.put_line('After calling IB API for query instance_id '||to_char(l_instance_header_tbl(1).instance_id));
13484      IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
13485          RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
13486      ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
13487          RAISE OKL_API.G_EXCEPTION_ERROR;
13488      ELSIF (NVL (l_instance_header_tbl.COUNT, 0) <> 1) THEN
13489         RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
13490      END IF;
13491 
13492      --bug# 2982927 : resetting okc inv org again from k header :
13493      okl_context.set_okc_org_context(p_chr_id => p_chr_id);
13494      --bug# 2982927
13495 
13496      --BUG#  3489089 :
13497      l_instance_rec.vld_organization_id         := okl_context.get_okc_organization_id;
13498      --BUG# 3489089
13499 
13500      l_instance_rec.instance_id                 := l_instance_header_tbl(1).instance_id;
13501      l_instance_rec.instance_number             := l_instance_header_tbl(1).instance_number;
13502      l_instance_rec.external_reference          := l_instance_header_tbl(1).external_reference;
13503      l_instance_rec.INVENTORY_ITEM_ID           := l_instance_header_tbl(1).INVENTORY_ITEM_ID;
13504      l_instance_rec.INVENTORY_REVISION          := l_instance_header_tbl(1).INVENTORY_REVISION;
13505      l_instance_rec.INV_MASTER_ORGANIZATION_ID  := l_instance_header_tbl(1).INV_MASTER_ORGANIZATION_ID;
13506      l_instance_rec.SERIAL_NUMBER               := l_instance_header_tbl(1).SERIAL_NUMBER;
13507      l_instance_rec.MFG_SERIAL_NUMBER_FLAG      := l_instance_header_tbl(1).MFG_SERIAL_NUMBER_FLAG;
13508      l_instance_rec.LOT_NUMBER                  := l_instance_header_tbl(1).LOT_NUMBER;
13509      l_instance_rec.QUANTITY                    := l_instance_header_tbl(1).QUANTITY;
13510      l_instance_rec.UNIT_OF_MEASURE             := l_instance_header_tbl(1).UNIT_OF_MEASURE;
13511      l_instance_rec.ACCOUNTING_CLASS_CODE       := l_instance_header_tbl(1).ACCOUNTING_CLASS_CODE;
13512      l_instance_rec.INSTANCE_CONDITION_ID       := l_instance_header_tbl(1).INSTANCE_CONDITION_ID;
13513      l_instance_rec.INSTANCE_STATUS_ID          := l_instance_header_tbl(1).INSTANCE_STATUS_ID;
13514      l_instance_rec.CUSTOMER_VIEW_FLAG          := l_instance_header_tbl(1).CUSTOMER_VIEW_FLAG;
13515      l_instance_rec.MERCHANT_VIEW_FLAG          := l_instance_header_tbl(1).MERCHANT_VIEW_FLAG;
13516      l_instance_rec.SELLABLE_FLAG               := l_instance_header_tbl(1).SELLABLE_FLAG;
13517      l_instance_rec.SYSTEM_ID                   := l_instance_header_tbl(1).SYSTEM_ID;
13518      l_instance_rec.INSTANCE_TYPE_CODE          := l_instance_header_tbl(1).INSTANCE_TYPE_CODE;
13519      l_instance_rec.LOCATION_TYPE_CODE          := l_instance_header_tbl(1).LOCATION_TYPE_CODE;
13520      l_instance_rec.LOCATION_ID                 := l_instance_header_tbl(1).LOCATION_ID;
13521      l_instance_rec.INV_ORGANIZATION_ID         := l_instance_header_tbl(1).INV_ORGANIZATION_ID;
13522      l_instance_rec.INV_SUBINVENTORY_NAME       := l_instance_header_tbl(1).INV_SUBINVENTORY_NAME;
13523      l_instance_rec.INV_LOCATOR_ID              := l_instance_header_tbl(1).INV_LOCATOR_ID;
13524      l_instance_rec.PA_PROJECT_ID               := l_instance_header_tbl(1).PA_PROJECT_ID;
13525      l_instance_rec.PA_PROJECT_TASK_ID          := l_instance_header_tbl(1).PA_PROJECT_TASK_ID;
13526      l_instance_rec.IN_TRANSIT_ORDER_LINE_ID    := l_instance_header_tbl(1).IN_TRANSIT_ORDER_LINE_ID;
13527      l_instance_rec.WIP_JOB_ID                  := l_instance_header_tbl(1).WIP_JOB_ID;
13528      l_instance_rec.PO_ORDER_LINE_ID            := l_instance_header_tbl(1).PO_ORDER_LINE_ID;
13529      l_instance_rec.LAST_OE_ORDER_LINE_ID       := l_instance_header_tbl(1).LAST_OE_ORDER_LINE_ID;
13530      l_instance_rec.LAST_OE_RMA_LINE_ID         := l_instance_header_tbl(1).LAST_OE_RMA_LINE_ID;
13531      l_instance_rec.LAST_PO_PO_LINE_ID          := l_instance_header_tbl(1).LAST_PO_PO_LINE_ID;
13532      l_instance_rec.LAST_OE_PO_NUMBER           := l_instance_header_tbl(1).LAST_OE_PO_NUMBER;
13533      l_instance_rec.LAST_WIP_JOB_ID             := l_instance_header_tbl(1).LAST_WIP_JOB_ID;
13534      l_instance_rec.LAST_PA_PROJECT_ID          := l_instance_header_tbl(1).LAST_PA_PROJECT_ID;
13535      l_instance_rec.LAST_PA_TASK_ID             := l_instance_header_tbl(1).LAST_PA_TASK_ID;
13536      l_instance_rec.LAST_OE_AGREEMENT_ID        := l_instance_header_tbl(1).LAST_OE_AGREEMENT_ID;
13537      l_instance_rec.INSTALL_DATE                := l_instance_header_tbl(1).INSTALL_DATE;
13538      l_instance_rec.MANUALLY_CREATED_FLAG       := l_instance_header_tbl(1).MANUALLY_CREATED_FLAG;
13539      l_instance_rec.RETURN_BY_DATE              := l_instance_header_tbl(1).RETURN_BY_DATE;
13540      l_instance_rec.ACTUAL_RETURN_DATE          := l_instance_header_tbl(1).ACTUAL_RETURN_DATE;
13541      l_instance_rec.CREATION_COMPLETE_FLAG      := l_instance_header_tbl(1).CREATION_COMPLETE_FLAG;
13542      l_instance_rec.COMPLETENESS_FLAG           := l_instance_header_tbl(1).COMPLETENESS_FLAG;
13543      l_instance_rec.LAST_TXN_LINE_DETAIL_ID     := l_instance_header_tbl(1).LAST_TXN_LINE_DETAIL_ID;
13544      l_instance_rec.INSTALL_LOCATION_TYPE_CODE  := l_instance_header_tbl(1).INSTALL_LOCATION_TYPE_CODE;
13545      l_instance_rec.INSTALL_LOCATION_ID         := l_instance_header_tbl(1).INSTALL_LOCATION_ID;
13546      l_instance_rec.INSTANCE_USAGE_CODE         := l_instance_header_tbl(1).INSTANCE_USAGE_CODE;
13547      l_instance_rec.OBJECT_VERSION_NUMBER       := l_instance_header_tbl(1).OBJECT_VERSION_NUMBER;
13548 
13549      IF NVL(p_txdv_rec.split_percent,0) NOT IN (0,OKL_API.G_MISS_NUM) THEN --splitting into components
13550          --expire original item instances
13551          l_expired_status_id := NULL;
13552          OPEN inst_sts_csr(p_status_name => l_instance_rec.instance_status_id);
13553          FETCH inst_sts_csr INTO l_expired_status_id;
13554          IF inst_sts_csr%NOTFOUND THEN
13555              --get trx record
13556              get_trx_rec(p_api_version      => p_api_version,
13557                          p_init_msg_list    => p_init_msg_list,
13558                          x_return_status    => x_return_status,
13559                          x_msg_count        => x_msg_count,
13560                          x_msg_data         => x_msg_data,
13561                          p_cle_id           => p_ib_cle_id,
13562                          p_transaction_type => G_IB_SPLIT_TXN_TYPE,
13563                          x_trx_rec          => l_exp_txn_rec);
13564 
13565             IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
13566                 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
13567             ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
13568                 RAISE OKL_API.G_EXCEPTION_ERROR;
13569             END IF;
13570 
13571             l_instance_rec.INSTANCE_STATUS_ID := NULL;
13572             csi_item_instance_pub.expire_item_instance
13573                   (p_api_version         => p_api_version
13574                   ,p_commit              => fnd_api.g_false
13575                   ,p_init_msg_list       => p_init_msg_list
13576                   ,p_validation_level    => fnd_api.g_valid_level_full
13577                   ,p_instance_rec        => l_instance_rec
13578                   ,p_expire_children     => fnd_api.g_false
13579                   ,p_txn_rec             => l_exp_txn_rec
13580                   ,x_instance_id_lst     => l_exp_instance_id_lst
13581                   ,x_return_status       => x_return_status
13582                   ,x_msg_count           => x_msg_count
13583                   ,x_msg_data            => x_msg_data);
13584 
13585             IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
13586                RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
13587             ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
13588                RAISE OKL_API.G_EXCEPTION_ERROR;
13589             END IF;
13590 
13591             --bug# 2982927 : resetting okc inv org again from k header :
13592             okl_context.set_okc_org_context(p_chr_id => p_chr_id);
13593             --bug# 2982927
13594 
13595         ELSE
13596 
13597             NULL;
13598 
13599         END IF;
13600 
13601         --Bug # 2726870 :11.5.9 enhancement Split asset by serial numbers for Split Asset by components
13602         l_serialized := OKL_API.G_FALSE;
13603         Is_Inv_Item_Serialized(p_api_version      => p_api_version,
13604                                p_init_msg_list    => p_init_msg_list,
13605                                x_return_status    => x_return_status,
13606                                x_msg_count        => x_msg_count,
13607                                x_msg_data         => x_msg_data,
13608                                p_inv_item_id      => p_txdv_rec.inventory_item_id,
13609                                p_chr_id           => p_chr_id,
13610                                p_cle_id           => NULL,
13611                                x_serialized       => l_serialized);
13612          IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
13613             RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
13614          ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
13615             RAISE OKL_API.G_EXCEPTION_ERROR;
13616          END IF;
13617 
13618          --If l_serialized = OKL_API.G_FALSE Then
13619              --if not serialized create new instances normally
13620              IF l_serialized = OKL_API.G_FALSE THEN
13621                  l_instance_rec.serial_number  := NULL;
13622                  l_instance_rec.quantity       := p_split_qty;
13623              ELSIF l_serialized = OKL_API.G_TRUE THEN
13624                  --set serial number
13625                  OPEN comp_srl_csr (p_asd_id => p_txdv_rec.id);
13626                  FETCH comp_srl_csr INTO l_instance_rec.serial_number,
13627                                          l_itiv_id;
13628                  IF comp_srl_csr%NOTFOUND THEN
13629                      l_instance_rec.serial_number  := NULL;
13630                  END IF;
13631                  CLOSE comp_srl_csr;
13632                  IF l_itiv_id IS NOT NULL OR l_itiv_id <> OKL_API.G_MISS_NUM THEN
13633                      --update the serail number record as processed
13634                      l_iipv_rec.id := l_itiv_id;
13635                      l_iipv_rec.selected_for_split_flag := 'P';
13636                      --dbms_output.put_line('before update of txl itm insts sts'||x_return_status);
13637                      --dbms_output.put_line('before update of txl itm insts sts'||to_char(l_iipv_rec.id));
13638                      --dbms_output.put_line('before update of txl itm insts sts'||to_char(l_iipv_rec.kle_id));
13639                      okl_txl_itm_insts_pub.update_txl_itm_insts
13640                                          (p_api_version   => p_api_version,
13641                                           p_init_msg_list => p_init_msg_list,
13642                                           x_return_status => x_return_status,
13643                                           x_msg_count     => x_msg_count,
13644                                           x_msg_data      => x_msg_data,
13645                                           p_iipv_rec      => l_iipv_rec,
13646                                           x_iipv_rec      => lx_iipv_rec);
13647                      --dbms_output.put_line('after update of txl itm insts sts'||x_return_status);
13648                      IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
13649                          RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
13650                      ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
13651                          RAISE OKL_API.G_EXCEPTION_ERROR;
13652                      END IF;
13653                  END IF;
13654                  l_instance_rec.quantity   := 1;
13655              END IF;
13656 
13657              l_instance_rec.INSTANCE_STATUS_ID := NULL;
13658 
13659              -- now process for new ib instance creation.
13660              --get trx record
13661              l_instance_rec.instance_id            := NULL;
13662              l_instance_rec.instance_number        := NULL;
13663              --l_instance_rec.serial_number          := Null;
13664              l_instance_rec.creation_complete_flag := NULL;
13665              --l_instance_rec.quantity               := p_split_qty;
13666              l_instance_rec.object_version_number  := NULL;
13667              l_instance_rec.inventory_item_id      := p_txdv_rec.inventory_item_id;
13668              --Bug# 3066375:
13669              l_instance_rec.call_contracts         := okl_api.g_false;
13670 
13671 
13672              get_trx_rec(p_api_version      => p_api_version,
13673                          p_init_msg_list    => p_init_msg_list,
13674                          x_return_status    => x_return_status,
13675                          x_msg_count        => x_msg_count,
13676                          x_msg_data         => x_msg_data,
13677                          p_cle_id           => p_ib_cle_id,
13678                          p_transaction_type => G_IB_SPLIT_TXN_TYPE,
13679                          x_trx_rec          => l_txn_rec);
13680 
13681             IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
13682                 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
13683             ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
13684                 RAISE OKL_API.G_EXCEPTION_ERROR;
13685             END IF;
13686 
13687             --get party tbl
13688             get_party_rec(p_api_version      => p_api_version,
13689                           p_init_msg_list    => p_init_msg_list,
13690                           x_return_status    => x_return_status,
13691                           x_msg_count        => x_msg_count,
13692                           x_msg_data         => x_msg_data,
13693                           p_chrv_id          => p_chr_id,
13694                           x_party_tbl        => l_party_tbl);
13695 
13696             IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
13697                 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
13698             ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
13699                 RAISE OKL_API.G_EXCEPTION_ERROR;
13700             END IF;
13701 
13702             --get party accoutnt id
13703             l_party_account := NULL;
13704             OPEN party_account_csr(p_chrv_id => p_chr_id);
13705                 FETCH party_account_csr INTO
13706                                            l_party_account;
13707                 IF party_account_csr%NOTFOUND THEN
13708                     --raise error for unable to find inv mstr org
13709                     OKL_API.SET_MESSAGE(p_app_name     =>  g_app_name,
13710                                         p_msg_name     =>  G_CUST_ACCOUNT_FOUND,
13711                                         p_token1       =>  G_CONTRACT_ID_TOKEN,
13712                                         p_token1_value =>  TO_CHAR(p_chr_id)
13713                                         );
13714                     RAISE OKL_API.G_EXCEPTION_ERROR;
13715                 ELSE
13716                      NULL;
13717                 END IF;
13718            CLOSE party_account_csr;
13719 
13720            l_account_tbl(1).instance_party_id := l_party_tbl(1).party_id;
13721            l_account_tbl(1).party_account_id  := l_party_account;
13722            l_account_tbl(1).relationship_type_code := G_PARTY_RELATIONSHIP;
13723            --l_account_tbl(1).active_start_date := sysdate;
13724            l_account_tbl(1).parent_tbl_index := 1;
13725 
13726            --dbms_output.put_line('before calling ib API');
13727 
13728            csi_item_instance_pub.create_item_instance(p_api_version           =>  p_api_version,
13729                                                       p_commit                =>  fnd_api.g_false,
13730                                                       p_init_msg_list         =>  p_init_msg_list,
13731                                                       p_instance_rec          =>  l_instance_rec,
13732                                                       p_validation_level      =>  fnd_api.g_valid_level_full,
13733                                                       p_ext_attrib_values_tbl =>  l_ext_attrib_values_tbl,
13734                                                       p_party_tbl             =>  l_party_tbl,
13735                                                       p_account_tbl           =>  l_account_tbl,
13736                                                       p_pricing_attrib_tbl    =>  l_pricing_attrib_tbl,
13737                                                       p_org_assignments_tbl   =>  l_org_assignments_tbl,
13738                                                       p_asset_assignment_tbl  =>  l_asset_assignment_tbl,
13739                                                       p_txn_rec               =>  l_txn_rec,
13740                                                       x_return_status         =>  x_return_status,
13741                                                       x_msg_count             =>  x_msg_count,
13742                                                       x_msg_data              =>  x_msg_data);
13743 
13744              --dbms_output.put_line('After calling IB API status '||x_return_status);
13745              --dbms_output.put_line('After calling IB API instance_id '||to_char(l_instance_rec.instance_id));
13746 
13747             IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
13748                 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
13749             ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
13750                 RAISE OKL_API.G_EXCEPTION_ERROR;
13751             END IF;
13752 
13753             --bug# 2982927 : resetting okc inv org again from k header :
13754             okl_context.set_okc_org_context(p_chr_id => p_chr_id);
13755             --bug# 2982927
13756 
13757             x_instance_id := l_instance_rec.instance_id;
13758 
13759         --Elsif l_serialized = OKL_API.G_TRUE Then
13760 
13761              --1. read from the split transaction to create new serial numbers
13762              --2. For each record create instance in IB
13763              --3. Loop through all the created instances
13764              --4.    fetch existing ib line
13765              --        If line found  update id1,id2
13766              --        else create new ib line and plug in id1,id2
13767              --Null;
13768         --End If; --serialized
13769 
13770      ELSE --for normal split assets
13771 
13772          --Bug # 2726870 :11.5.9 enhancement Split asset by serial numbers for Split Asset by components
13773          l_serialized := OKL_API.G_FALSE;
13774          Is_Inv_Item_Serialized(p_api_version      => p_api_version,
13775                                  p_init_msg_list    => p_init_msg_list,
13776                                  x_return_status    => x_return_status,
13777                                  x_msg_count        => x_msg_count,
13778                                  x_msg_data         => x_msg_data,
13779                                  p_inv_item_id      => l_instance_rec.inventory_item_id,
13780                                  p_chr_id           => p_chr_id,
13781                                  p_cle_id           => NULL,
13782                                  x_serialized       => l_serialized);
13783          IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
13784              RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
13785          ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
13786              RAISE OKL_API.G_EXCEPTION_ERROR;
13787          END IF;
13788 
13789          IF (l_instance_rec.quantity = 1) OR
13790              (l_instance_rec.quantity - p_split_qty) <= 0 THEN -- this will never be the case
13791              NULL; -- no need to update quantity - item instance may be serailized
13792 
13793              --Bug # 2726870 11.5.9 enhancements - split asset into components
13794              IF l_serialized = OKL_API.G_TRUE THEN
13795                  l_instance_for_split := '?';
13796                  OPEN chk_instance_csr(PInstanceId => l_instance_rec.instance_id,
13797                                        PTalId      => P_txdv_rec.tal_id);
13798                  FETCH chk_instance_csr INTO l_instance_for_split;
13799                  IF chk_instance_csr%NOTFOUND THEN
13800                      NULL;
13801                  END IF;
13802                  CLOSE chk_instance_csr;
13803 
13804                  IF l_instance_for_split = '!' THEN
13805                     --delete instance line from parent asset
13806                     --dbms_output.put_line('instance for split');
13807                     OPEN get_instance_cle_csr (PInstanceId => l_instance_rec.instance_id,
13808                                                PTalId      => P_txdv_rec.tal_id,
13809                                                PChrId      => p_chr_id);
13810                     FETCH  get_instance_cle_csr INTO l_inst_cle_id, l_ib_cle_id;
13811                     IF get_instance_cle_csr%NOTFOUND THEN
13812                         NULL;
13813                     ELSE
13814                         --Call line deletion API
13815                         delete_instance_lines(
13816                                                p_api_version    => p_api_version,
13817                                                p_init_msg_list  => p_init_msg_list,
13818                                                x_return_status  => x_return_status,
13819                                                x_msg_count      => x_msg_count,
13820                                                x_msg_data       => x_msg_data,
13821                                                p_inst_cle_id    => l_inst_cle_id,
13822                                                p_ib_cle_id      => l_ib_cle_id);
13823                         IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
13824                             RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
13825                         ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
13826                             RAISE OKL_API.G_EXCEPTION_ERROR;
13827                         END IF;
13828                     END IF;
13829                     x_instance_id := l_instance_rec.instance_id;
13830                  END IF; -- If item instance is selected for serial split
13831              END IF;--if serialized
13832 
13833          ELSE
13834 
13835              --do csi adjustment
13836              l_upd_instance_rec.instance_id           := l_instance_rec.instance_id;
13837              l_upd_instance_rec.quantity              := (l_instance_rec.quantity - p_split_qty);
13838              l_upd_instance_rec.object_version_number := l_instance_rec.object_version_number;
13839 
13840              --get trx record
13841              get_trx_rec(p_api_version      => p_api_version,
13842                          p_init_msg_list    => p_init_msg_list,
13843                          x_return_status    => x_return_status,
13844                          x_msg_count        => x_msg_count,
13845                          x_msg_data         => x_msg_data,
13846                          p_cle_id           => p_ib_cle_id,
13847                          p_transaction_type => G_IB_SPLIT_TXN_TYPE,
13848                          x_trx_rec          => l_upd_txn_rec);
13849 
13850              l_upd_txn_rec.transaction_quantity := (-1)* p_split_qty;
13851 
13852              csi_item_instance_pub.update_item_instance
13853                    (
13854                     p_api_version           => p_api_version
13855                    ,p_commit                => fnd_api.g_false
13856                    ,p_init_msg_list         => p_init_msg_list
13857                    ,p_validation_level      => fnd_api.g_valid_level_full
13858                    ,p_instance_rec          => l_upd_instance_rec
13859                    ,p_ext_attrib_values_tbl => l_upd_ext_attrib_values_tbl
13860                    ,p_party_tbl             => l_upd_party_tbl
13861                    ,p_account_tbl           => l_upd_account_tbl
13862                    ,p_pricing_attrib_tbl    => l_upd_pricing_attrib_tbl
13863                    ,p_org_assignments_tbl   => l_upd_org_assignments_tbl
13864                    ,p_asset_assignment_tbl  => l_upd_asset_assignment_tbl
13865                    ,p_txn_rec               => l_upd_txn_rec
13866                    ,x_instance_id_lst       => l_upd_instance_id_lst
13867                    ,x_return_status         => x_return_status
13868                    ,x_msg_count             => x_msg_count
13869                    ,x_msg_data              => x_msg_data
13870                    );
13871 
13872               --dbms_output.put_line('After calling IB API for update status '||x_return_status);
13873               --dbms_output.put_line('After calling IB API update instance_id '||to_char(l_instance_rec.instance_id));
13874               IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
13875                   RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
13876               ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
13877                   RAISE OKL_API.G_EXCEPTION_ERROR;
13878               END IF;
13879 
13880               --bug# 2982927 : resetting okc inv org again from k header :
13881               okl_context.set_okc_org_context(p_chr_id => p_chr_id);
13882               --bug# 2982927
13883 
13884            END IF;
13885 
13886 
13887            IF  (l_serialized = OKL_API.G_TRUE) THEN
13888                NULL;
13889                --dbms_output.put_line('Serialized');
13890                x_instance_id := l_instance_rec.instance_id;
13891            ELSE
13892                --dbms_output.put_line('Not Serialized');
13893                -- now process for new ib instance creation.
13894                --get trx record
13895                l_instance_rec.instance_id            := NULL;
13896                l_instance_rec.instance_number        := NULL;
13897                l_instance_rec.serial_number          := NULL;
13898                l_instance_rec.creation_complete_flag := NULL;
13899                l_instance_rec.quantity               := p_split_qty;
13900                l_instance_rec.object_version_number  := NULL;
13901                --Bug# 3066375:
13902                l_instance_rec.call_contracts         := okl_api.g_false;
13903 
13904 
13905                get_trx_rec(p_api_version      => p_api_version,
13906                            p_init_msg_list    => p_init_msg_list,
13907                            x_return_status    => x_return_status,
13908                            x_msg_count        => x_msg_count,
13909                            x_msg_data         => x_msg_data,
13910                            p_cle_id           => p_ib_cle_id,
13911                            p_transaction_type => G_IB_SPLIT_TXN_TYPE,
13912                            x_trx_rec          => l_txn_rec);
13913 
13914                IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
13915                    RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
13916                ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
13917                    RAISE OKL_API.G_EXCEPTION_ERROR;
13918                END IF;
13919 
13920                --get party tbl
13921                get_party_rec(p_api_version      => p_api_version,
13922                          p_init_msg_list    => p_init_msg_list,
13923                          x_return_status    => x_return_status,
13924                          x_msg_count        => x_msg_count,
13925                          x_msg_data         => x_msg_data,
13926                          p_chrv_id          => p_chr_id,
13927                          x_party_tbl        => l_party_tbl);
13928 
13929                IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
13930                    RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
13931                ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
13932                    RAISE OKL_API.G_EXCEPTION_ERROR;
13933                END IF;
13934 
13935                --get party accoutnt id
13936                l_party_account := NULL;
13937                OPEN party_account_csr(p_chrv_id => p_chr_id);
13938                   FETCH party_account_csr INTO
13939                                            l_party_account;
13940                    IF party_account_csr%NOTFOUND THEN
13941                        --raise error for unable to find inv mstr org
13942                        OKL_API.SET_MESSAGE(p_app_name     =>  g_app_name,
13943                                            p_msg_name     =>  G_CUST_ACCOUNT_FOUND,
13944                                            p_token1       =>  G_CONTRACT_ID_TOKEN,
13945                                            p_token1_value =>  TO_CHAR(p_chr_id)
13946                                            );
13947                        RAISE OKL_API.G_EXCEPTION_ERROR;
13948                    ELSE
13949                        NULL;
13950                    END IF;
13951                CLOSE party_account_csr;
13952 
13953                l_account_tbl(1).instance_party_id := l_party_tbl(1).party_id;
13954                l_account_tbl(1).party_account_id  := l_party_account;
13955                l_account_tbl(1).relationship_type_code := G_PARTY_RELATIONSHIP;
13956                --l_account_tbl(1).active_start_date := sysdate;
13957                l_account_tbl(1).parent_tbl_index := 1;
13958 
13959                --dbms_output.put_line('before calling ib API');
13960 
13961                csi_item_instance_pub.create_item_instance(p_api_version           =>  p_api_version,
13962                                                           p_commit                =>  fnd_api.g_false,
13963                                                           p_init_msg_list         =>  p_init_msg_list,
13964                                                           p_instance_rec          =>  l_instance_rec,
13965                                                           p_validation_level      =>  fnd_api.g_valid_level_full,
13966                                                           p_ext_attrib_values_tbl =>  l_ext_attrib_values_tbl,
13967                                                           p_party_tbl             =>  l_party_tbl,
13968                                                           p_account_tbl           =>  l_account_tbl,
13969                                                           p_pricing_attrib_tbl    =>  l_pricing_attrib_tbl,
13970                                                           p_org_assignments_tbl   =>  l_org_assignments_tbl,
13971                                                           p_asset_assignment_tbl  =>  l_asset_assignment_tbl,
13972                                                           p_txn_rec               =>  l_txn_rec,
13973                                                           x_return_status         =>  x_return_status,
13974                                                           x_msg_count             =>  x_msg_count,
13975                                                           x_msg_data              =>  x_msg_data);
13976 
13977                --dbms_output.put_line('After calling IB API status '||x_return_status);
13978                --dbms_output.put_line('After calling IB API instance_id '||to_char(l_instance_rec.instance_id));
13979 
13980                IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
13981                    RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
13982                ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
13983                    RAISE OKL_API.G_EXCEPTION_ERROR;
13984                END IF;
13985 
13986                --bug# 2982927 : resetting okc inv org again from k header :
13987                okl_context.set_okc_org_context(p_chr_id => p_chr_id);
13988                --bug# 2982927
13989 
13990            END IF; --If serail number split
13991            x_instance_id := l_instance_rec.instance_id;
13992     END IF; --type of split
13993 
13994     OKL_API.END_ACTIVITY (x_msg_count,
13995                           x_msg_data );
13996     EXCEPTION
13997     WHEN OKL_API.G_EXCEPTION_ERROR THEN
13998     x_return_status := OKL_API.HANDLE_EXCEPTIONS(
13999                                l_api_name,
14000                                G_PKG_NAME,
14001                                'OKL_API.G_RET_STS_ERROR',
14002                                x_msg_count,
14003                                x_msg_data,
14004                                '_PVT');
14005     WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
14006     x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
14007                               l_api_name,
14008                               G_PKG_NAME,
14009                               'OKL_API.G_RET_STS_UNEXP_ERROR',
14010                               x_msg_count,
14011                               x_msg_data,
14012                               '_PVT');
14013     WHEN OTHERS THEN
14014     x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
14015                               l_api_name,
14016                               G_PKG_NAME,
14017                               'OTHERS',
14018                               x_msg_count,
14019                               x_msg_data,
14020                               '_PVT');
14021 END create_ib_instance;
14022 --------------------------------------------------------------------------------
14023 --Start of Comments
14024 --Procedure Name : consolidate_ib_lines (local)
14025 --Description    : Will consoldate the ib lines for split asset into
14026 --                 components when either source or target asset is serialized
14027 --History        :
14028 --                 30-Jan-2003  ashish.singh Created
14029 --End of Comments
14030 --------------------------------------------------------------------------------
14031 PROCEDURE consolidate_ib_lines(p_api_version   IN  NUMBER,
14032                                p_init_msg_list IN  VARCHAR2,
14033                                x_return_status OUT NOCOPY VARCHAR2,
14034                                x_msg_count     OUT NOCOPY NUMBER,
14035                                x_msg_data      OUT NOCOPY VARCHAR2,
14036                                p_txdv_rec      IN  txdv_rec_type,
14037                                p_txlv_rec      IN  txlv_rec_type
14038                                ) IS
14039 l_return_status        VARCHAR2(1)  DEFAULT OKL_API.G_RET_STS_SUCCESS;
14040 l_api_name             CONSTANT VARCHAR2(30) := 'CONSOLIDATE_IB_LINES';
14041 l_api_version          CONSTANT NUMBER := 1.0;
14042 
14043 --Cursor to get model line inventory item on parent line
14044 CURSOR inv_itm_csr(p_fa_line_id IN NUMBER) IS
14045 SELECT cim_model.object1_id1,
14046        cim_model.object1_id2,
14047        cle_fa.dnz_chr_id,
14048        cle_fa.cle_id
14049 FROM   okc_k_items        cim_model,
14050        okc_k_lines_b      cle_model,
14051        okc_line_styles_b  lse_model,
14052        okc_k_lines_b      cle_fa
14053 WHERE  cim_model.dnz_chr_id = cle_model.dnz_chr_id
14054 AND    cim_model.cle_id     = cle_model.id
14055 AND    cle_model.lse_id     = lse_model.id
14056 AND    lse_model.lty_code   = 'ITEM'
14057 AND    cle_model.cle_id     = cle_fa.cle_id
14058 AND    cle_model.dnz_chr_id = cle_fa.dnz_chr_id
14059 AND    cle_fa.id            = p_fa_line_id;
14060 
14061 l_object1_id1        OKC_K_ITEMS.object1_id1%TYPE;
14062 l_object1_id2        OKC_K_ITEMS.object1_id2%TYPE;
14063 l_chr_id             NUMBER;
14064 l_cle_id             NUMBER; --top line id
14065 
14066 l_parent_serialized  VARCHAR2(1) DEFAULT OKL_API.G_FALSE;
14067 l_child_serialized   VARCHAR2(1) DEFAULT OKL_API.G_FALSE;
14068 
14069 --Cursor to fetch ib instances
14070 CURSOR ib_inst_csr(p_fin_ast_id IN NUMBER) IS
14071 SELECT cle_ib.id,
14072        cle_inst.id
14073 FROM   okc_k_lines_b     cle_ib,
14074        okc_line_styles_b lse_ib,
14075        okc_k_lines_b     cle_inst,
14076        okc_line_styles_b lse_inst
14077 WHERE  cle_ib.lse_id      = lse_ib.id
14078 AND    lse_ib.lty_code    = 'INST_ITEM'
14079 AND    cle_ib.dnz_chr_id  = cle_inst.dnz_chr_id
14080 AND    cle_ib.cle_id      = cle_inst.id
14081 AND    cle_inst.lse_id    = lse_inst.id
14082 AND    lse_inst.lty_code  = 'FREE_FORM2'
14083 AND    cle_inst.cle_id    = p_fin_ast_id;
14084 
14085 l_ib_cle_id      OKC_K_LINES_B.ID%TYPE;
14086 l_inst_cle_id    OKC_K_LINES_B.ID%TYPE;
14087 
14088 --Cursor to fetch new ib instance lines
14089 --Cursor ib_inst_csr(p_fin_ast_id IN NUMBER) is
14090 CURSOR new_ib_inst_csr(p_txd_id IN NUMBER) IS
14091 SELECT cle_ib.id,
14092        cle_inst.id
14093 FROM   okc_k_lines_b     cle_ib,
14094        okc_line_styles_b lse_ib,
14095        okc_k_lines_b     cle_inst,
14096        okc_line_styles_b lse_inst,
14097        okc_k_lines_b     cle_fa,
14098        okl_txd_assets_b  txdb
14099 WHERE  cle_ib.lse_id      = lse_ib.id
14100 AND    lse_ib.lty_code    = 'INST_ITEM'
14101 AND    cle_ib.dnz_chr_id  = cle_inst.dnz_chr_id
14102 AND    cle_ib.cle_id      = cle_inst.id
14103 AND    cle_inst.lse_id    = lse_inst.id
14104 AND    lse_inst.lty_code  = 'FREE_FORM2'
14105 AND    cle_inst.cle_id    =  cle_fa.cle_id
14106 AND    cle_fa.id          = txdb.target_kle_id
14107 AND    txdb.id            = p_txd_id;
14108 
14109 l_tgt_ib_cle_id       OKC_K_LINES_B.ID%TYPE;
14110 l_tgt_inst_cle_id     OKC_K_LINES_B.ID%TYPE;
14111 
14112 
14113 --cursor to fetch child asset top line is
14114 CURSOR child_cle_csr(p_txd_id IN NUMBER) IS
14115 SELECT cle_fa.cle_id
14116 FROM   okc_k_lines_b  cle_fa,
14117        okl_txd_assets_b txdb
14118 WHERE  cle_fa.id = txdb.target_kle_id
14119 AND    txdb.id    = p_txd_id;
14120 
14121 l_target_cle_id   OKC_K_LINES_B.ID%TYPE;
14122 l_new_inst_cle_id OKC_K_LINES_B.ID%TYPE;
14123 
14124 --cursor to fetch the newly created ib line
14125 CURSOR new_ib_csr(p_new_inst_id IN NUMBER) IS
14126 SELECT id
14127 FROM   okc_k_lines_b cle_new_ib
14128 WHERE  cle_new_ib.cle_id = p_new_inst_id;
14129 
14130 l_new_ib_cle_id OKC_K_LINES_B.ID%TYPE;
14131 
14132 --table of line records for updating statuses of the new lines
14133 l_clev_tbl      OKL_OKC_MIGRATION_PVT.clev_tbl_type;
14134 lx_clev_tbl      OKL_OKC_MIGRATION_PVT.clev_tbl_type;
14135 j               NUMBER DEFAULT 0;
14136 
14137  -- Bug# 5946411: ER
14138   --cursor to check the status of asset
14139   CURSOR l_cleb_sts_csr(pcleid IN NUMBER) IS
14140   SELECT cleb.sts_code sts_code
14141   FROM   okc_k_lines_b cleb
14142   WHERE  cleb.id = pcleid;
14143   l_cle_status okc_k_lines_b.sts_code%TYPE;
14144   -- Bug# 5946411: ER End
14145 BEGIN
14146      x_return_status := OKL_API.G_RET_STS_SUCCESS;
14147     -- Call start_activity to create savepoint, check compatibility
14148     -- and initialize message list
14149     x_return_status := OKL_API.START_ACTIVITY (
14150                                l_api_name
14151                                ,p_init_msg_list
14152                                ,'_PVT'
14153                                ,x_return_status);
14154     -- Check if activity started successfully
14155     IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
14156        RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
14157     ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
14158        RAISE OKL_API.G_EXCEPTION_ERROR;
14159     END IF;
14160   -- Bug# 5946411: ER
14161    -- get the status of the parent line id
14162     OPEN l_cleb_sts_csr(  p_txlv_rec.kle_id);
14163     FETCH l_cleb_sts_csr INTO l_cle_status;
14164     close l_cleb_sts_csr;
14165     --dbms_output.put_line('consolidate_ib_line--p_txlv_rec.kle_id'||p_txlv_rec.kle_id);
14166     --dbms_output.put_line('Status set as l_cle_status'||l_cle_status);
14167   -- Bug# 5946411: ER End
14168 
14169     OPEN inv_itm_csr(p_fa_line_id => p_txlv_rec.kle_id);
14170     FETCH inv_itm_csr INTO l_object1_id1,
14171                            l_object1_id2,
14172                            l_chr_id,
14173                            l_cle_id;
14174     CLOSE inv_itm_csr;
14175 
14176     --evaluate if parent asset is serialized
14177     l_parent_serialized := OKL_API.G_FALSE;
14178     Is_Inv_Item_Serialized(p_api_version      => p_api_version,
14179                            p_init_msg_list    => p_init_msg_list,
14180                            x_return_status    => x_return_status,
14181                            x_msg_count        => x_msg_count,
14182                            x_msg_data         => x_msg_data,
14183                            p_inv_item_id      => TO_NUMBER(l_object1_id1),
14184                            p_chr_id           => l_chr_id,
14185                            p_cle_id           => NULL,
14186                            x_serialized       => l_parent_serialized);
14187     --dbms_output.put_line('After parent serialized '||x_return_status);
14188     IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
14189        RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
14190     ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
14191        RAISE OKL_API.G_EXCEPTION_ERROR;
14192     END IF;
14193 
14194     --evaluate if child asset is serialized
14195     l_child_serialized := OKL_API.G_FALSE;
14196     Is_Inv_Item_Serialized(p_api_version      => p_api_version,
14197                            p_init_msg_list    => p_init_msg_list,
14198                            x_return_status    => x_return_status,
14199                            x_msg_count        => x_msg_count,
14200                            x_msg_data         => x_msg_data,
14201                            p_inv_item_id      => p_txdv_rec.inventory_item_id,
14202                            p_chr_id           => l_chr_id,
14203                            p_cle_id           => NULL,
14204                            x_serialized       => l_child_serialized);
14205     --dbms_output.put_line('After child serialized '||x_return_status);
14206     IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
14207        RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
14208     ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
14209        RAISE OKL_API.G_EXCEPTION_ERROR;
14210     END IF;
14211 
14212     IF l_parent_serialized = OKL_API.G_FALSE AND l_child_serialized = OKL_API.G_FALSE THEN
14213         --dbms_output.put_line('Both not serialized '||x_return_status);
14214         NULL;
14215     ELSIF l_parent_serialized = OKL_API.G_TRUE AND l_child_serialized = OKL_API.G_TRUE THEN
14216         --dbms_output.put_line('Both serialized '||x_return_status);
14217         NULL;
14218     ELSIF l_parent_serialized = OKL_API.G_TRUE AND l_child_serialized = OKL_API.G_FALSE THEN
14219         --dbms_output.put_line('Parent serialized,Child not'||x_return_status);
14220         --trim extra ib instance lines from child
14221         FOR i IN 1..(p_txlv_rec.current_units -1)
14222         LOOP
14223             --Open ib_inst_csr(p_fin_ast_id => l_cle_id);
14224             OPEN new_ib_inst_csr(p_txd_id => p_txdv_rec.id);
14225             FETCH new_ib_inst_csr INTO l_tgt_ib_cle_id,
14226                                        l_tgt_inst_cle_id;
14227             CLOSE new_ib_inst_csr;
14228             delete_instance_lines(p_api_version   => p_api_version,
14229                                   p_init_msg_list => p_init_msg_list,
14230                                   x_return_status => x_return_status,
14231                                   x_msg_count     => x_msg_count,
14232                                   x_msg_data      => x_msg_data,
14233                                   p_inst_cle_id   => l_tgt_inst_cle_id,
14234                                   p_ib_cle_id     => l_tgt_ib_cle_id);
14235         END LOOP;
14236 
14237     ELSIF l_parent_serialized = OKL_API.G_FALSE AND l_child_serialized = OKL_API.G_TRUE THEN
14238         --dbms_output.put_line('Add extra ib instance line to child '||x_return_status);
14239         --Add extra ib instance line to child
14240         OPEN ib_inst_csr(p_fin_ast_id => l_cle_id);
14241             FETCH ib_inst_csr INTO l_ib_cle_id,
14242                                    l_inst_cle_id;
14243         CLOSE ib_inst_csr;
14244 
14245         OPEN child_cle_csr(p_txd_id => p_txdv_rec.id);
14246             FETCH child_cle_csr INTO l_target_cle_id;
14247         CLOSE child_cle_csr;
14248 
14249         j := 0;
14250         FOR i IN 1..(p_txlv_rec.current_units-1)
14251         LOOP
14252             --dbms_output.put_line('before Copying lines '||to_char(i)||x_return_status);
14253             --dbms_output.put_line('source cle '||to_char(l_inst_cle_id)||x_return_status);
14254             --dbms_output.put_line('target cle '||to_char(l_target_cle_id)||x_return_status);
14255 
14256             OKL_COPY_CONTRACT_PUB.COPY_CONTRACT_LINES(
14257                 p_api_version       => p_api_version,
14258                 p_init_msg_list     => p_init_msg_list,
14259                 x_return_status     => x_return_status,
14260                 x_msg_count         => x_msg_count,
14261                 x_msg_data          => x_msg_data,
14262                 p_from_cle_id       => l_inst_cle_id,
14263                 p_to_cle_id         => l_target_cle_id,
14264                 p_to_chr_id         => NULL,
14265                 p_to_template_yn        => 'N',
14266                 p_copy_reference        =>  'COPY',
14267                 p_copy_line_party_yn => 'Y',
14268                 p_renew_ref_yn       => 'N',
14269                 x_cle_id                     => l_new_inst_cle_id);
14270 
14271             --dbms_output.put_line('After Copying lines '||to_char(i)||x_return_status);
14272             IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
14273                 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
14274             ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
14275                 RAISE OKL_API.G_EXCEPTION_ERROR;
14276             END IF;
14277             --making the line table for update of status
14278             j := j+1;
14279             l_clev_tbl(j).id       :=   l_new_inst_cle_id;
14280             --Bug# 5946411: ER
14281             --l_clev_tbl(j).sts_code :=   'BOOKED';
14282             l_clev_tbl(j).sts_code:=l_cle_status;
14283             --dbms_output.put_line('consolidate_ib_lines l_clev_tbl(j).sts_code-->'||l_clev_tbl(j).sts_code);
14284             --Bug# 5946411: ER End
14285             OPEN new_ib_csr(p_new_inst_id=> l_new_inst_cle_id);
14286               FETCH  new_ib_csr INTO  l_new_ib_cle_id;
14287             CLOSE new_ib_csr;
14288             j := j+1;
14289             l_clev_tbl(j).id := l_new_ib_cle_id;
14290             --Bug# 5946411: ER
14291             --l_clev_tbl(j).sts_code :=   'BOOKED';
14292             l_clev_tbl(j).sts_code :=  l_cle_status;
14293             --dbms_output.put_line('consolidate_ib_lines * l_clev_tbl(j).sts_code-->'||l_clev_tbl(j).sts_code);
14294             --Bug# 5946411: ER End
14295             --
14296          END LOOP;
14297          --change status of newly created lines to BOOKED
14298          IF l_clev_tbl.COUNT > 0 THEN
14299              OKL_OKC_MIGRATION_PVT.update_contract_line(
14300                 p_api_version       => p_api_version,
14301                 p_init_msg_list     => p_init_msg_list,
14302                 x_return_status     => x_return_status,
14303                 x_msg_count         => x_msg_count,
14304                 x_msg_data          => x_msg_data,
14305                 p_restricted_update     => OKC_API.G_FALSE,
14306                 p_clev_tbl          => l_clev_tbl,
14307                 x_clev_tbl          => lx_clev_tbl);
14308 
14309              IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
14310                  RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
14311              ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
14312                  RAISE OKL_API.G_EXCEPTION_ERROR;
14313              END IF;
14314          END IF;
14315      END IF;
14316     OKL_API.END_ACTIVITY (x_msg_count,
14317                           x_msg_data );
14318     EXCEPTION
14319     WHEN OKL_API.G_EXCEPTION_ERROR THEN
14320     x_return_status := OKL_API.HANDLE_EXCEPTIONS(
14321                                l_api_name,
14322                                G_PKG_NAME,
14323                                'OKL_API.G_RET_STS_ERROR',
14324                                x_msg_count,
14325                                x_msg_data,
14326                                '_PVT');
14327     WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
14328     x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
14329                               l_api_name,
14330                               G_PKG_NAME,
14331                               'OKL_API.G_RET_STS_UNEXP_ERROR',
14332                               x_msg_count,
14333                               x_msg_data,
14334                               '_PVT');
14335     WHEN OTHERS THEN
14336     x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
14337                               l_api_name,
14338                               G_PKG_NAME,
14339                               'OTHERS',
14340                               x_msg_count,
14341                               x_msg_data,
14342                               '_PVT');
14343 END consolidate_ib_lines;
14344 --------------------------------------------------------------------------------
14345 --Start of Comments
14346 --Procedure Name : Relink_Ib_Lines
14347 --Description    : Local procedure will be called if invnetory item is serial
14348 --                 Number Controlled and split criteria is split into individu
14349 --                 -als
14350 --History        :
14351 --                 20-Nov-2003 avsingh  Bug#3222804
14352 --                                      Fixed as part of this bug
14353 --End of Comments
14354 --------------------------------------------------------------------------------
14355   PROCEDURE Relink_Ib_Lines(  p_api_version   IN  NUMBER,
14356                               p_init_msg_list IN  VARCHAR2,
14357                               x_return_status OUT NOCOPY VARCHAR2,
14358                               x_msg_count     OUT NOCOPY NUMBER,
14359                               x_msg_data      OUT NOCOPY VARCHAR2,
14360                               p_txlv_rec      IN  txlv_rec_type) IS
14361 
14362   l_return_status        VARCHAR2(1)  DEFAULT OKL_API.G_RET_STS_SUCCESS;
14363   l_api_name             CONSTANT VARCHAR2(30) := 'RELINK_IB_LINES';
14364   l_api_version          CONSTANT NUMBER := 1.0;
14365 
14366   --cursor to fetch top line id for a fixed asset line
14367   CURSOR l_cleb_csr (p_cle_id IN NUMBER) IS
14368   SELECT cleb.cle_id
14369   FROM   okc_k_lines_b cleb
14370   WHERE  cleb.id = p_cle_id;
14371 
14372   l_parent_fina_cle_id  NUMBER DEFAULT NULL;
14373   l_child_fina_cle_id   NUMBER DEFAULT NULL;
14374 
14375 
14376   --cursor to fetch child instance lines
14377   CURSOR l_target_kle_csr(p_tal_id IN NUMBER) IS
14378   SELECT txdb.target_kle_id
14379   FROM   okl_txd_assets_b txdb
14380   WHERE  txdb.tal_id = p_tal_id;
14381 
14382   l_target_kle_id  NUMBER DEFAULT 0;
14383 
14384   --cursor to fetch Inastance line id
14385   CURSOR l_instcle_csr(p_cle_id IN NUMBER) IS
14386   SELECT cleb.id
14387   FROM   okc_k_lines_b     cleb,
14388          okc_line_styles_b lseb
14389   WHERE  lseb.id          = cleb.lse_id
14390   AND    lseb.lty_code    = 'FREE_FORM2'
14391   AND    cleb.sts_code    <> 'ABANDONED'
14392   AND    cleb.cle_id       = p_cle_id;
14393 
14394   l_instcle_id  NUMBER DEFAULT NULL;
14395 
14396   l_clev_rec    okl_okc_migration_pvt.clev_rec_type;
14397   lx_clev_rec   okl_okc_migration_pvt.clev_rec_type;
14398 
14399   l_serialized VARCHAR2(1) DEFAULT OKL_API.G_FALSE;
14400 
14401 BEGIN
14402 
14403     x_return_status := OKL_API.G_RET_STS_SUCCESS;
14404     -- Call start_activity to create savepoint, check compatibility
14405     -- and initialize message list
14406     x_return_status := OKL_API.START_ACTIVITY (
14407                                l_api_name
14408                                ,p_init_msg_list
14409                                ,'_PVT'
14410                                ,x_return_status);
14411     -- Check if activity started successfully
14412     IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
14413        RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
14414     ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
14415        RAISE OKL_API.G_EXCEPTION_ERROR;
14416     END IF;
14417 
14418     --get the top line id for parent fixed asset line
14419 
14420     OPEN l_cleb_csr(p_cle_id => p_txlv_rec.kle_id);
14421     FETCH l_cleb_csr INTO l_parent_fina_cle_id;
14422     IF l_cleb_csr%NOTFOUND THEN
14423         NULL;
14424     END IF;
14425     CLOSE l_cleb_csr;
14426 
14427     IF NVL(l_parent_fina_cle_id,OKL_API.G_MISS_NUM) <> OKL_API.G_MISS_NUM THEN
14428 
14429         l_serialized := is_serialized(p_cle_id => l_parent_fina_cle_id);
14430         IF l_serialized = OKL_API.G_TRUE THEN
14431             l_target_kle_id := NULL;
14432             OPEN l_target_kle_csr(p_tal_id => p_txlv_rec.id);
14433             LOOP
14434                 FETCH l_target_kle_csr INTO l_target_kle_id;
14435                 EXIT WHEN l_target_kle_csr%NOTFOUND;
14436                 IF l_target_kle_id = p_txlv_rec.kle_id THEN
14437                     NULL;
14438                 ELSE
14439                     l_child_fina_cle_id := NULL;
14440                     OPEN l_cleb_csr(p_cle_id => l_target_kle_id);
14441                     FETCH l_cleb_csr INTO l_child_fina_cle_id;
14442                     IF l_cleb_csr%NOTFOUND THEN
14443                         NULL;
14444                     END IF;
14445                     CLOSE l_cleb_csr;
14446 
14447                     IF NVL(l_child_fina_cle_id,OKL_API.G_MISS_NUM) <> OKL_API.G_MISS_NUM  THEN
14448                         l_instcle_id := NULL;
14449                         OPEN l_instcle_csr(p_cle_id => l_parent_fina_cle_id);
14450                         FETCH l_instcle_csr INTO l_instcle_id;
14451                         IF l_instcle_csr%NOTFOUND THEN
14452                             NULL;
14453                         END IF;
14454                         CLOSE l_instcle_csr;
14455                         IF NVL(l_instcle_id,OKL_API.G_MISS_NUM) <> OKL_API.G_MISS_NUM THEN
14456                             l_clev_rec.id     := l_instcle_id;
14457                             l_clev_rec.cle_id := l_child_fina_cle_id;
14458                             OKL_OKC_MIGRATION_PVT.update_contract_line(p_api_version         => p_api_version,
14459                                                                       p_init_msg_list   => p_init_msg_list,
14460                                                                       x_return_status   => x_return_status,
14461                                                                       x_msg_count           => x_msg_count,
14462                                                                       x_msg_data            => x_msg_data,
14463                                                                       p_clev_rec            => l_clev_rec,
14464                                                                       x_clev_rec            => lx_clev_rec);
14465                             --dbms_output.put_line('after updating contract item for Asset link '||x_return_status);
14466                             IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
14467                                 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
14468                             ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR)  THEN
14469                                 RAISE OKL_API.G_EXCEPTION_ERROR;
14470                             END IF;
14471                         END IF;
14472                     END IF;
14473                 END IF;
14474             END LOOP;
14475             CLOSE l_target_kle_csr;
14476         ELSIF l_serialized = OKL_API.G_FALSE THEN
14477 
14478             --this processing will be done in the create instance routine
14479             --as new IB instances need to be created
14480             NULL;
14481 
14482         END IF;
14483     END IF;
14484     OKL_API.END_ACTIVITY (x_msg_count,
14485                           x_msg_data );
14486   EXCEPTION
14487     WHEN OKL_API.G_EXCEPTION_ERROR THEN
14488     x_return_status := OKL_API.HANDLE_EXCEPTIONS(
14489                                l_api_name,
14490                                G_PKG_NAME,
14491                                'OKL_API.G_RET_STS_ERROR',
14492                                x_msg_count,
14493                                x_msg_data,
14494                                '_PVT');
14495     WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
14496     x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
14497                               l_api_name,
14498                               G_PKG_NAME,
14499                               'OKL_API.G_RET_STS_UNEXP_ERROR',
14500                               x_msg_count,
14501                               x_msg_data,
14502                               '_PVT');
14503     WHEN OTHERS THEN
14504     x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
14505                               l_api_name,
14506                               G_PKG_NAME,
14507                               'OTHERS',
14508                               x_msg_count,
14509                               x_msg_data,
14510                               '_PVT');
14511 END Relink_Ib_Lines;
14512 --------------------------------------------------------------------------------
14513 --Bug#       : 11.5.10
14514 --Name       : recalculate_costs
14515 --Creation   : 23-Sep-2003
14516 --Purpose    : Local procedure to recalculate and update costs on split lines
14517 --------------------------------------------------------------------------------
14518 PROCEDURE recalculate_costs(
14519           p_api_version     IN NUMBER,
14520           p_init_msg_list   IN VARCHAR2,
14521           x_return_status   OUT NOCOPY VARCHAR2,
14522           x_msg_count       OUT NOCOPY NUMBER,
14523           x_msg_data        OUT NOCOPY VARCHAR2,
14524           p_chr_id          IN  NUMBER,
14525           p_cle_tbl         IN  cle_tbl_type
14526           ) IS
14527 
14528 l_return_status        VARCHAR2(1)  DEFAULT OKL_API.G_RET_STS_SUCCESS;
14529 l_api_name             CONSTANT VARCHAR2(30) := 'RECALCULATE_COSTS';
14530 l_api_version          CONSTANT NUMBER := 1.0;
14531 
14532 l_oec               NUMBER;
14533 l_cap_amount        NUMBER;
14534 l_residual_value    NUMBER;
14535 
14536 
14537 l_clev_rec             okl_okc_migration_pvt.clev_rec_type;
14538 l_klev_rec             okl_contract_pub.klev_rec_type;
14539 lx_clev_rec            okl_okc_migration_pvt.clev_rec_type;
14540 lx_klev_rec            okl_contract_pub.klev_rec_type;
14541 
14542 i                  NUMBER;
14543 
14544 BEGIN
14545 
14546     x_return_status := OKL_API.G_RET_STS_SUCCESS;
14547     -- Call start_activity to create savepoint, check compatibility
14548     -- and initialize message list
14549     x_return_status := OKL_API.START_ACTIVITY (
14550                                l_api_name
14551                                ,p_init_msg_list
14552                                ,'_PVT'
14553                                ,x_return_status);
14554     -- Check if activity started successfully
14555     IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
14556        RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
14557     ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
14558        RAISE OKL_API.G_EXCEPTION_ERROR;
14559     END IF;
14560 
14561     IF p_cle_tbl.COUNT > 0 THEN
14562     FOR i IN p_cle_tbl.FIRST..p_cle_tbl.LAST
14563     LOOP
14564         --calculate and update subsidised OEC ,  Capital Amount, Residual Value
14565         OKL_EXECUTE_FORMULA_PUB.EXECUTE(p_api_version   => p_api_version,
14566                                         p_init_msg_list => p_init_msg_list,
14567                                         x_return_status => x_return_status,
14568                                         x_msg_count     => x_msg_count,
14569                                         x_msg_data      => x_msg_data,
14570                                         p_formula_name  => G_FORMULA_OEC,
14571                                         p_contract_id   => p_chr_id,
14572                                         p_line_id       => p_cle_tbl(i).cle_id,
14573                                         x_value         => l_oec);
14574 
14575         IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
14576             RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
14577         ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
14578             RAISE OKL_API.G_EXCEPTION_ERROR;
14579         END IF;
14580 
14581         OKL_EXECUTE_FORMULA_PUB.EXECUTE(p_api_version   => p_api_version,
14582                                         p_init_msg_list => p_init_msg_list,
14583                                         x_return_status => x_return_status,
14584                                         x_msg_count     => x_msg_count,
14585                                         x_msg_data      => x_msg_data,
14586                                         p_formula_name  => G_FORMULA_CAP,
14587                                         p_contract_id   => p_chr_id,
14588                                         p_line_id       => p_cle_tbl(i).cle_id,
14589                                         x_value         => l_cap_amount);
14590 
14591         IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
14592             RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
14593         ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
14594             RAISE OKL_API.G_EXCEPTION_ERROR;
14595         END IF;
14596 
14597         OKL_EXECUTE_FORMULA_PUB.EXECUTE(p_api_version   => p_api_version,
14598                                         p_init_msg_list => p_init_msg_list,
14599                                         x_return_status => x_return_status,
14600                                         x_msg_count     => x_msg_count,
14601                                         x_msg_data      => x_msg_data,
14602                                         p_formula_name  => G_FORMULA_RES,
14603                                         p_contract_id   => p_chr_id,
14604                                         p_line_id       => p_cle_tbl(i).cle_id,
14605                                         x_value         => l_residual_value);
14606 
14607         IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
14608              RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
14609         ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
14610              RAISE OKL_API.G_EXCEPTION_ERROR;
14611         END IF;
14612 
14613         ----------------------------------------------------------------------
14614         --call api to update costs on asset line
14615         ----------------------------------------------------------------------
14616         l_clev_rec.id                    := p_cle_tbl(i).cle_id;
14617         l_klev_rec.id                    := p_cle_tbl(i).cle_id;
14618         l_klev_rec.oec                   := l_oec;
14619         l_klev_rec.capital_amount        := l_cap_amount;
14620         l_klev_rec.residual_value        := l_residual_value;
14621 
14622 
14623         okl_contract_pub.update_contract_line
14624         (p_api_version   => p_api_version,
14625          p_init_msg_list => p_init_msg_list,
14626          x_return_status => x_return_status,
14627          x_msg_count     => x_msg_count,
14628          x_msg_data      => x_msg_data,
14629          p_clev_rec      => l_clev_rec,
14630          p_klev_rec      => l_klev_rec,
14631          x_clev_rec      => lx_clev_rec,
14632          x_klev_rec      => lx_klev_rec
14633          );
14634 
14635         IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
14636            RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
14637         ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
14638            RAISE OKL_API.G_EXCEPTION_ERROR;
14639         END IF;
14640     END LOOP;
14641     END IF;
14642 
14643     OKL_API.END_ACTIVITY (x_msg_count,x_msg_data );
14644     EXCEPTION
14645     WHEN OKL_API.G_EXCEPTION_ERROR THEN
14646     x_return_status := OKL_API.HANDLE_EXCEPTIONS(
14647                                l_api_name,
14648                                G_PKG_NAME,
14649                                'OKL_API.G_RET_STS_ERROR',
14650                                x_msg_count,
14651                                x_msg_data,
14652                                '_PVT');
14653     WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
14654     x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
14655                               l_api_name,
14656                               G_PKG_NAME,
14657                               'OKL_API.G_RET_STS_UNEXP_ERROR',
14658                               x_msg_count,
14659                               x_msg_data,
14660                               '_PVT');
14661     WHEN OTHERS THEN
14662     x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
14663                               l_api_name,
14664                               G_PKG_NAME,
14665                               'OTHERS',
14666                               x_msg_count,
14667                               x_msg_data,
14668                               '_PVT');
14669 END recalculate_costs;
14670 --------------------------------------------------------------------------------
14671 --Start of Comments
14672 --Procedure Name : Split_Asset
14673 --Description    : Selects the split Asset transaction against the line
14674 --                 and splits the Asset in OKL and FA
14675 --History        :
14676 --                 03-Nov-2001  ashish.singh Created
14677 --                 12-Aug-2005  smadhava Fix for Bug# 4508050
14678 --End of Comments
14679 --------------------------------------------------------------------------------
14680 PROCEDURE Split_Fixed_Asset(p_api_version   IN  NUMBER,
14681                             p_init_msg_list IN  VARCHAR2,
14682                             x_return_status OUT NOCOPY VARCHAR2,
14683                             x_msg_count     OUT NOCOPY NUMBER,
14684                             x_msg_data      OUT NOCOPY VARCHAR2,
14685                             p_txdv_tbl      IN  txdv_tbl_type,
14686                             p_txlv_rec      IN  txlv_rec_type,
14687                             x_cle_tbl       OUT NOCOPY cle_tbl_type,
14688                             --Bug# 6344223
14689                             p_source_call   IN VARCHAR2 DEFAULT 'UI') IS
14690 
14691 l_return_status        VARCHAR2(1)  DEFAULT OKL_API.G_RET_STS_SUCCESS;
14692 l_api_name             CONSTANT VARCHAR2(30) := 'SPLIT_FIXED_ASSET';
14693 l_api_version          CONSTANT NUMBER := 1.0;
14694 
14695 CURSOR k_line_curs(p_fa_line_id IN NUMBER) IS
14696 SELECT cle_id,
14697        dnz_chr_id,
14698        --Bug# 6373605 start
14699        sts_code
14700        --Bug# 6373605 end
14701 FROM   okc_k_lines_b
14702 WHERE  id = p_fa_line_id;
14703 
14704 l_source_cle_id NUMBER;
14705 l_chr_id        NUMBER;
14706 i               NUMBER;
14707 --Bug# 6373605 start
14708 l_sts_code      okc_k_lines_b.STS_CODE%TYPE;
14709 --Bug# 6373605 end
14710 
14711 l_txdv_rec      txdv_rec_type;
14712 l_txlv_rec      txlv_rec_type;
14713 
14714 l_split_cle_id  NUMBER;
14715 l_split_cle_id_orig  NUMBER; -- 7626121
14716 l_cle_tbl       cle_tbl_type;
14717 l_ast_line_rec  ast_line_rec_type;
14718 
14719 CURSOR c_cim(p_id IN NUMBER) IS
14720 SELECT id,
14721        cle_id
14722 FROM   okc_k_items cim
14723 WHERE  EXISTS
14724 (SELECT '1'
14725 FROM    okl_txd_assets_b txd
14726 WHERE   txd.target_kle_id = cim.cle_id
14727 AND     txd.id = p_id
14728 );
14729 
14730 l_asset_hdr_rec FA_API_TYPES.asset_hdr_rec_type;
14731 l_cim_id        NUMBER;
14732 l_cimv_rec      cimv_rec_type;
14733 l_cimv_rec_out  cimv_rec_type;
14734 l_cim_cle_id    NUMBER;
14735 
14736 CURSOR ib_item_cur (p_fa_line_id IN NUMBER) IS
14737 SELECT cim.object1_id1,
14738        cim.object1_id2,
14739        cim.id,
14740        cim.cle_id,
14741        cim.dnz_chr_id
14742 FROM   OKC_K_ITEMS         cim,
14743        OKC_K_LINES_B       inst_item,
14744        OKC_LINE_STYLES_B   inst_item_lse,
14745        OKC_K_LINES_B       f_frm2,
14746        OKC_LINE_STYLES_B   f_frm2_lse,
14747        OKC_K_LINES_B       fa
14748 WHERE cim.cle_id = inst_item.id
14749 AND   cim.dnz_chr_id = inst_item.dnz_chr_id
14750 AND   inst_item.cle_id = f_frm2.id
14751 AND   inst_item.lse_id = inst_item_lse.id
14752 AND   inst_item_lse.lty_code = 'INST_ITEM'
14753 AND   f_frm2.cle_id = fa.cle_id
14754 AND   f_frm2.lse_id = f_frm2_lse.id
14755 AND   f_frm2_lse.lty_code = 'FREE_FORM2'
14756 AND   fa.id = p_fa_line_id;
14757 
14758 l_csi_id1               okc_k_items.object1_id1%TYPE;
14759 l_csi_id2               okc_k_items.object1_id2%TYPE;
14760 l_csi_cim_id            okc_k_items.id%TYPE;
14761 l_csi_cle_id            okc_k_items.cle_id%TYPE;
14762 l_csi_chr_id            okc_k_items.dnz_chr_id%TYPE;
14763 l_csi_number_of_items   okc_k_items.number_of_items%TYPE;
14764 
14765 l_csi_instance_id NUMBER;
14766 
14767 l_trxv_rec        trxv_rec_type;
14768 lx_trxv_rec       trxv_rec_type;
14769 
14770 l_txdv_tbl        txdv_tbl_type;
14771 
14772 --cursor to find if asset added in current period
14773 CURSOR check_period_of_addition(p_asset_id       IN NUMBER,
14774                                 p_book_type_code IN VARCHAR2) IS
14775 SELECT 'Y' -- 'Y' if the current period of the asset is period of addition.
14776 FROM dual
14777 WHERE NOT EXISTS
14778      (SELECT 'x'
14779       FROM   fa_deprn_summary
14780       WHERE  asset_id = p_asset_id
14781       AND    book_type_code = p_book_type_code
14782       AND    deprn_amount <> 0
14783       AND    deprn_source_code = 'DEPRN'
14784      );
14785 l_check_period_of_addition    VARCHAR2(1) DEFAULT NULL;
14786 
14787 --cursor to get all books  for parent asset
14788 CURSOR all_books_curs(p_asset_id IN NUMBER) IS
14789 SELECT
14790     id1,
14791     id2,
14792     name,
14793     description,
14794     book_type_code,
14795     book_class,
14796     asset_id,
14797     asset_number,
14798     serial_number,
14799     salvage_value,
14800     percent_salvage_value,
14801     life_in_months,
14802     acquisition_date,
14803     original_cost,
14804     cost,
14805     adjusted_cost,
14806     tag_number,
14807     current_units,
14808     reval_ceiling,
14809     new_used,
14810     manufacturer_name,
14811     model_number,
14812     asset_type,
14813     depreciation_category,
14814     deprn_start_date,
14815     deprn_method_code,
14816     rate_adjustment_factor,
14817     basic_rate,
14818     adjusted_rate,
14819     start_date_active,
14820     end_date_active,
14821     status,
14822     primary_uom_code,
14823     recoverable_cost,
14824     org_id,
14825     set_of_books_id
14826 FROM  OKX_AST_BKS_V
14827 WHERE TRUNC(NVL(start_date_active,SYSDATE)) <= TRUNC(SYSDATE)
14828 AND   TRUNC(NVL(end_date_active,SYSDATE+1)) >TRUNC(SYSDATE)
14829 AND   book_class IN ('CORPORATE','TAX')
14830 AND   asset_id = p_asset_id
14831 ORDER BY book_class,asset_id;
14832 
14833 l_all_books_rec  all_books_curs%ROWTYPE;
14834 
14835 --Bug #2723498 :11.5.9 split asset by serial numbers
14836 CURSOR get_dup_inst_csr (p_asd_id IN NUMBER) IS
14837 SELECT f_frm2.id           instance_id,
14838        inst_item.id        ib_line_id
14839 FROM   OKC_K_ITEMS         cim,
14840        OKC_K_LINES_B       inst_item,
14841        OKC_LINE_STYLES_B   inst_item_lse,
14842        OKC_K_LINES_B       f_frm2,
14843        OKC_LINE_STYLES_B   f_frm2_lse,
14844        OKC_K_LINES_B       fa,
14845        OKL_TXD_ASSETS_B    asd
14846 WHERE  cim.cle_id             = inst_item.id
14847 AND    cim.dnz_chr_id         = inst_item.dnz_chr_id
14848 AND    inst_item.cle_id       = f_frm2.id
14849 AND    inst_item.lse_id       = inst_item_lse.id
14850 AND    inst_item_lse.lty_code = 'INST_ITEM'
14851 AND    f_frm2.cle_id          = fa.cle_id
14852 AND    f_frm2.lse_id          = f_frm2_lse.id
14853 AND    f_frm2_lse.lty_code    = 'FREE_FORM2'
14854 AND    fa.id                  = asd.target_kle_id
14855 AND    asd.id                 = p_asd_id
14856 AND    EXISTS (SELECT   NULL
14857                FROM     OKC_K_ITEMS         cim_p,
14858                         OKC_K_LINES_B       inst_item_p,
14859                         OKC_LINE_STYLES_B   inst_item_lse_p,
14860                         OKC_K_LINES_B       f_frm2_p,
14861                         OKC_LINE_STYLES_B   f_frm2_lse_p,
14862                         OKC_K_LINES_B       fa_p,
14863                         OKL_TXL_ASSETS_B    tal
14864                  WHERE  cim_p.object1_id1         = cim.object1_id1
14865                  AND    cim_p.object1_id2         = cim.object1_id2
14866                  AND    cim_p.jtot_object1_code   = cim.jtot_object1_code
14867                  AND    cim_p.dnz_chr_id          = cim.dnz_chr_id
14868                  AND    cim_p.cle_id              = inst_item_p.id
14869                  AND    cim_p.dnz_chr_id          = inst_item_p.dnz_chr_id
14870                  AND    inst_item_p.cle_id        = f_frm2_p.id
14871                  AND    inst_item_p.lse_id        = inst_item_lse_p.id
14872                  AND    inst_item_lse_p.lty_code  = 'INST_ITEM'
14873                  AND    f_frm2_p.cle_id           = fa_p.cle_id
14874                  AND    f_frm2_p.lse_id           = f_frm2_lse_p.id
14875                  AND    f_frm2_lse_p.lty_code     = 'FREE_FORM2'
14876                  AND    fa_p.id                     = tal.kle_id
14877                  AND    tal.id                    = asd.tal_id
14878                  );
14879 
14880 l_dup_inst_cle_id   OKC_K_LINES_B.ID%TYPE;
14881 l_dup_ib_cle_id   OKC_K_LINES_B.ID%TYPE;
14882 
14883 --Bug# : cursor to check if split is called by asset level termination process
14884 CURSOR asset_trmn_csr(pcleid IN NUMBER) IS
14885 SELECT '!'
14886 FROM   DUAL
14887 WHERE  EXISTS
14888   (SELECT 1
14889   FROM    okl_trx_quotes_b h,
14890           okl_txl_quote_lines_b l,
14891           okl_trx_contracts t,
14892           okl_k_headers k
14893   WHERE   h.id = l.qte_id
14894   AND     h.id = t.qte_id
14895   AND     h.khr_id = k.id
14896   AND     ((  k.deal_type LIKE 'LEASE%' AND h.qtp_code IN
14897            ('TER_PURCHASE','TER_RECOURSE','TER_ROLL_PURCHASE','TER_MAN_PURCHASE'))
14898            OR
14899            (k.deal_type LIKE 'LOAN%' )
14900           )
14901   AND     l.qlt_code = 'AMCFIA'
14902   AND     l.quote_quantity < l.asset_quantity
14903   AND     l.kle_id = pcleid
14904   AND     t.tcn_type = 'ALT'
14905   --rkuttiya added for 12.1.1 Multi GAAP
14906   AND     t.representation_type = 'PRIMARY'
14907   --
14908   --Bug# 6043327  : R12B SLA impact
14909   --AND     t.tsu_code = 'WORKING'
14910   AND     t.tmt_status_code = 'WORKING'
14911   );
14912 
14913 l_asset_trmn_exists VARCHAR2(1) DEFAULT '?';
14914 
14915 l_loan_yn     VARCHAR2(1) DEFAULT 'N';
14916 l_fa_exists   VARCHAR2(1) DEFAULT 'N';
14917 l_row_not_found BOOLEAN DEFAULT FALSE;
14918 
14919 --------------------------------------
14920 --Bug# : 11.5.10 : Securitization impact
14921 -------------------------------------
14922 l_is_asset_securitized VARCHAR2(1);
14923 l_inv_agmt_chr_id_tbl okl_securitization_pvt.inv_agmt_chr_id_tbl_type;
14924 l_trx_reason_asset_split VARCHAR2(20) := okl_securitization_pvt.g_trx_reason_Asset_split;
14925 --------------------------------------
14926 --Bug# : 11.5.10 : Securitization impact
14927 -------------------------------------
14928 
14929   --Bug# 3156924 : cursor to get transaction date and transaction number from transaction
14930   CURSOR l_trx_csr (ptrxid IN NUMBER) IS
14931   SELECT DATE_TRANS_OCCURRED,
14932          TRANS_NUMBER,
14933          --Bug# 6373605 start
14934          TRY_ID
14935          --Bug# 6373605 end
14936   FROM   OKL_TRX_ASSETS
14937   WHERE  id = ptrxid;
14938 
14939   l_trx_rec l_trx_csr%ROWTYPE;
14940 
14941   --Bg# 4028371
14942   l_fa_retire_date  date;
14943   l_fa_adj_date     date;
14944   l_fa_add_date     date;
14945 
14946   l_talv_date_rec            okl_tal_pvt.talv_rec_type;
14947   lx_talv_date_rec           okl_tal_pvt.talv_rec_type;
14948   --Bug# 4028371
14949 
14950   --Bug# 3502142
14951   l_round_split_comp_amt varchar2(30);
14952 
14953   --Bug# 4631549
14954   --cursor to fetch re-lease contract flag
14955   cursor l_chrb_csr (p_chr_id in number) is
14956   select chrb.orig_system_source_code
14957   from   okc_k_headers_b chrb
14958   where  chrb.id = p_chr_id;
14959 
14960   l_chrb_rec l_chrb_csr%ROWTYPE;
14961 
14962 
14963   --Bug# 15992711 : Added Cursor to check Re-Lease asset at line level
14964   --Start Modification 120.61.12010000.11 18-Jan-2013 Pratirao
14965   CURSOR l_lin_rel_ast_csr(p_cle_id in number) IS
14966   SELECT KLE.re_lease_yn
14967   FROM   okl_k_lines kle
14968   WHERE  kle.id = p_cle_id;
14969 
14970   l_lin_rel_ast_rec  l_lin_rel_ast_csr%ROWTYPE;
14971 
14972   --Bug# 15992711 End Modification
14973 
14974   --cursor to fetch expected asset cost
14975   cursor l_exp_cost_csr(p_cle_id in number) is
14976   select kle.expected_asset_cost
14977   from   okl_k_lines kle
14978   where  kle.id = p_cle_id;
14979 
14980   l_exp_cost_rec l_exp_cost_csr%ROWTYPE;
14981 
14982   l_clev_exp_cost_rec  okl_okc_migration_pvt.clev_rec_type;
14983   lx_clev_exp_cost_rec okl_okc_migration_pvt.clev_rec_type;
14984   l_klev_exp_cost_rec  okl_contract_pub.klev_rec_type;
14985   lx_klev_exp_cost_rec  okl_contract_pub.klev_rec_type;
14986 
14987   --Bug# 6373605 start
14988   l_sla_asset_chr_id NUMBER;
14989   --Bug# 6373605 end
14990 
14991 BEGIN
14992     x_return_status := OKL_API.G_RET_STS_SUCCESS;
14993     -- Call start_activity to create savepoint, check compatibility
14994     -- and initialize message list
14995     x_return_status := OKL_API.START_ACTIVITY (
14996                                l_api_name
14997                                ,p_init_msg_list
14998                                ,'_PVT'
14999                                ,x_return_status);
15000     -- Check if activity started successfully
15001     IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
15002        RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
15003     ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
15004        RAISE OKL_API.G_EXCEPTION_ERROR;
15005     END IF;
15006 
15007     l_txdv_tbl := p_txdv_tbl;
15008 
15009     --Bug# 3156924 : Get the transaction details
15010     OPEN l_trx_csr(ptrxid => p_txlv_rec.tas_id);
15011     FETCH l_trx_csr INTO l_trx_rec;
15012     IF l_trx_csr%NOTFOUND THEN
15013         NULL;
15014     END IF;
15015     CLOSE l_trx_csr;
15016     --Bug# 3156924 end
15017 
15018     --2. get financial asset line id and chr_id
15019     OPEN k_line_curs(p_fa_line_id => p_txlv_rec.kle_id);
15020     FETCH k_line_curs INTO l_source_cle_id, l_chr_id,
15021                            --Bug# 6373605 start
15022                            l_sts_code;
15023                            --Bug# 6373605 end
15024     IF k_line_curs%NOTFOUND THEN
15025        --dbms_output.put_line('unable to find financial asset line for fixed asset line!!!');
15026        --handle error appropraitely
15027        OKL_API.set_message(p_app_name     => G_APP_NAME,
15028                            p_msg_name     => G_NO_DATA_FOUND,
15029                            p_token1       => 'COL_NAME',
15030                            p_token1_value => 'Financial Asset Line');
15031         RAISE OKL_API.G_EXCEPTION_ERROR;
15032     END IF;
15033     CLOSE k_line_curs;
15034 
15035 
15036     --Bug# 15992711 : Added to check Re-Lease asset at line level
15037     --Start of Modification 120.61.12010000.11 18-Jan-2013 Pratirao
15038 
15039     OPEN  l_lin_rel_ast_csr(p_cle_id => l_source_cle_id);
15040     FETCH l_lin_rel_ast_csr INTO l_lin_rel_ast_rec;
15041     CLOSE l_lin_rel_ast_csr;
15042 
15043     IF NVL(l_lin_rel_ast_rec.re_lease_yn,'a') = 'Y' THEN
15044        OKL_API.set_message(p_app_name     => G_APP_NAME,
15045 	                   p_msg_name     => 'OKL_REL_ASSET_SPLIT_NOT_ALLWD');
15046        RAISE OKL_API.G_EXCEPTION_ERROR;
15047 
15048     END IF;
15049 
15050     --Bug# 15992711 End of Modification
15051 
15052 
15053 
15054 
15055 
15056 
15057 
15058 
15059 
15060 
15061 
15062     --Bug# 2982927 : Resetting okc inv organization id from k header
15063     okl_context.set_okc_org_context(p_chr_id => l_chr_id);
15064     --Bug# 2982927
15065 
15066     --Bug# 3222804 : Serial number control to be based on leasing inv org setup
15067     validate_srl_num_control(
15068                    p_api_version               => p_api_version,
15069                    p_init_msg_list             => p_init_msg_list,
15070                    x_return_status             => x_return_status,
15071                    x_msg_count                 => x_msg_count,
15072                    x_msg_data                  => x_msg_data,
15073                    p_cle_id                    => l_source_cle_id,
15074                    p_split_into_individuals_yn => p_txlv_rec.split_into_singles_flag,
15075                    p_split_into_units          => p_txlv_rec.split_into_units,
15076                    p_tal_id                    => p_txlv_rec.id);
15077 
15078     IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
15079        RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
15080     ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
15081        RAISE OKL_API.G_EXCEPTION_ERROR;
15082     END IF;
15083     --Bug# 3222804 : Serial number control to be based on leasing inv org setup
15084 
15085     --1. get values for the parent asset
15086     l_fa_exists := 'N';
15087     l_ast_line_rec := get_ast_line(l_source_cle_id,l_row_not_found);
15088     --dbms_output.put_line('After fetching asset line '||l_ast_line_rec.description);
15089     IF (l_row_not_found) THEN
15090        --Bug #2798006 : call create split transaction for Loans
15091        l_loan_yn := 'N';
15092        l_loan_yn := Check_If_Loan(P_Cle_Id        => l_source_cle_id,
15093                                   x_return_status => x_return_status);
15094 
15095        IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
15096            RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
15097        ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
15098            RAISE OKL_API.G_EXCEPTION_ERROR;
15099        END IF;
15100 
15101        IF l_loan_yn = 'N' THEN
15102            OKL_API.set_message(p_app_name     => G_APP_NAME,
15103                                p_msg_name     => G_SPLIT_ASSET_NOT_FOUND);
15104            RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
15105        ELSIF l_loan_yn = 'Y' THEN
15106            l_fa_exists := 'N';
15107        END IF;
15108     ELSE
15109        l_fa_exists := 'Y';
15110     END IF;
15111     --Bug# 2798006 end.
15112 --------------------------------------------------------------------------------
15113         i := 1;
15114         LOOP
15115         ------------------------------------------------------------------------
15116         -- Normal split asset parent adjustments
15117         IF (l_txdv_tbl(i).target_kle_id IS NOT NULL AND l_txdv_tbl(i).target_kle_id = p_txlv_rec.kle_id) THEN
15118            --this record needs asset adjustment only
15119            --no line creation is required
15120            --1.Call local procedure to adjust quantities and amounts
15121            l_txdv_rec := l_txdv_tbl(i);
15122            l_txlv_rec := p_txlv_rec;
15123            --dbms_output.put_line('before adjusting split lines');
15124            Adjust_Split_Lines(
15125                 p_api_version    => p_api_version,
15126                 p_init_msg_list  => p_init_msg_list,
15127                 x_return_status  => x_return_status,
15128                 x_msg_count      => x_msg_count,
15129                 x_msg_data       => x_msg_data,
15130                 p_cle_id         => l_source_cle_id,
15131                 p_parent_line_id => l_source_cle_id,
15132                 p_txdv_rec       => l_txdv_rec,
15133                 p_txlv_rec       => l_txlv_rec);
15134             --dbms_output.put_line('after adjusting split lines'||x_return_status);
15135             IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
15136                 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
15137             ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
15138                 RAISE OKL_API.G_EXCEPTION_ERROR;
15139             END IF;
15140 
15141            --2. Call Asset Retire Api -
15142            -- to confirm with Mukul whether retirement or
15143            -- adjustment will
15144 
15145           IF l_fa_exists = 'Y' THEN
15146                --to get all books for this asset
15147               OPEN all_books_curs(p_asset_id => l_ast_line_rec.asset_id);
15148               LOOP
15149                   FETCH all_books_curs INTO l_all_books_rec;
15150                   EXIT WHEN all_books_curs%NOTFOUND;
15151                   --reinitialize l_Ast_line_rec
15152                   l_ast_line_rec.START_DATE_ACTIVE         := l_all_books_rec.start_date_active;
15153                   l_ast_line_rec.END_DATE_ACTIVE           := l_all_books_rec.end_date_active;
15154                   l_ast_line_rec.ASSET_ID                  := l_all_books_rec.asset_id;
15155                   l_ast_line_rec.QUANTITY                  := l_all_books_rec.current_units;
15156                   l_ast_line_rec.ASSET_NUMBER              := l_all_books_rec.asset_number;
15157                   l_ast_line_rec.CORPORATE_BOOK            := l_all_books_rec.book_type_code; --this will be tax book in case of tax books inspite of var name
15158                   l_ast_line_rec.LIFE_IN_MONTHS            := l_all_books_rec.life_in_months;
15159                   l_ast_line_rec.ORIGINAL_COST             := l_all_books_rec.original_cost;
15160                   l_ast_line_rec.COST                      := l_all_books_rec.cost;
15161                   l_ast_line_rec.ADJUSTED_COST             := l_all_books_rec.adjusted_cost;
15162                   l_ast_line_rec.TAG_NUMBER                := l_all_books_rec.tag_number;
15163                   l_ast_line_rec.CURRENT_UNITS             := l_all_books_rec.current_units ;
15164                   l_ast_line_rec.SERIAL_NUMBER             := l_all_books_rec.serial_number;
15165                   l_ast_line_rec.REVAL_CEILING             := l_all_books_rec.reval_ceiling;
15166                   l_ast_line_rec.NEW_USED                  := l_all_books_rec.new_used;
15167                   l_ast_line_rec.IN_SERVICE_DATE           := l_all_books_rec.acquisition_date;
15168                   l_ast_line_rec.MANUFACTURER_NAME         := l_all_books_rec.manufacturer_name;
15169                   l_ast_line_rec.MODEL_NUMBER              := l_all_books_rec.model_number;
15170                   l_ast_line_rec.ASSET_TYPE                := l_all_books_rec.asset_type;
15171                   l_ast_line_rec.SALVAGE_VALUE             := l_all_books_rec.salvage_value;
15172                   l_ast_line_rec.PERCENT_SALVAGE_VALUE     := l_all_books_rec.percent_salvage_value;
15173                   l_ast_line_rec.DEPRECIATION_CATEGORY     := l_all_books_rec.depreciation_category;
15174                   l_ast_line_rec.DEPRN_START_DATE          := l_all_books_rec.deprn_start_date;
15175                   l_ast_line_rec.DEPRN_METHOD_CODE         := l_all_books_rec.deprn_method_code;
15176                   l_ast_line_rec.RATE_ADJUSTMENT_FACTOR    := l_all_books_rec.rate_adjustment_factor;
15177                   l_ast_line_rec.BASIC_RATE                := l_all_books_rec.basic_rate;
15178                   l_ast_line_rec.ADJUSTED_RATE             := l_all_books_rec.adjusted_rate;
15179                   l_ast_line_rec.RECOVERABLE_COST          := l_all_books_rec.recoverable_cost;
15180                   l_ast_line_rec.ORG_ID                    := l_all_books_rec.org_id;
15181                   l_ast_line_rec.SET_OF_BOOKS_ID           := l_all_books_rec.set_of_books_id;
15182 
15183                    --check period of addition
15184                   l_check_period_of_Addition := 'N';
15185                   OPEN check_period_of_addition(p_asset_id       => l_ast_line_rec.asset_id,
15186                                                 p_book_type_code => l_ast_line_rec.corporate_book);
15187                       FETCH check_period_of_addition INTO l_check_period_of_Addition;
15188                       IF check_period_of_addition%NOTFOUND THEN
15189                           NULL;
15190                       END IF;
15191                   CLOSE check_period_of_addition;
15192 
15193                   /* Bug#4508050 - smadhava - Modified - Start*/
15194                   -- Commented code to avoid retiring of original asset after splitting
15195                   /*
15196                    IF NVL(l_check_period_of_addition,'N') = 'N' THEN
15197                    --dbms_output.put_line('before retiring fA'||x_return_status);
15198                    --check if call is being made from asset level termination process
15199                        l_asset_trmn_exists := '?';
15200                        OPEN asset_trmn_csr(pcleid => l_source_cle_id);
15201                        FETCH asset_trmn_csr INTO l_asset_trmn_exists;
15202                        IF asset_trmn_csr%NOTFOUND THEN
15203                            NULL;
15204                        END IF;
15205                        CLOSE asset_trmn_csr;
15206 
15207                        IF l_asset_trmn_exists = '!' THEN --exists
15208                           --call special procedure for asset level termination : suspen retirement
15209                           NULL;
15210                        ELSIF l_asset_trmn_exists = '?' THEN --does not exist
15211                            --Bug# : 3156924 : cost retirement for all books
15212                            --If (l_all_books_rec.book_class = 'CORPORATE') Then
15213                                FIXED_ASSET_RETIRE(p_api_version    =>  p_api_version,
15214                                                   p_init_msg_list =>  p_init_msg_list,
15215                                                   x_return_status =>  x_return_status,
15216                                                   x_msg_count     =>  x_msg_count,
15217                                                   x_msg_data      =>  x_msg_data,
15218                                                   p_ast_line_rec  =>  l_ast_line_rec,
15219                                                   p_txlv_rec      =>  l_txlv_rec,
15220                                                   p_txdv_rec      =>  l_txdv_rec,
15221                                                   --Bug# 3156924
15222                                                   p_trx_date       => l_trx_rec.date_trans_occurred,
15223                                                   p_trx_number   => l_trx_rec.trans_number,
15224                                                   --Bug# 4028371
15225                                                   x_fa_trx_date  => l_fa_retire_date);
15226 
15227                                --dbms_output.put_line('after retiring fA'||x_return_status);
15228                                IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
15229                                    RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
15230                                ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
15231                                    RAISE OKL_API.G_EXCEPTION_ERROR;
15232                                END IF;
15233                         */
15234                        /* Bug#4508050 - smadhava - Modified - End*/
15235                             --Bug# 3156924
15236                            /*
15237                            ElsIf (l_all_books_rec.book_class = 'TAX') Then
15238                                -- since FA does not allow unit retirements on tax books
15239                                -- we have to restore to doing adjustments here for tax books
15240                                FIXED_ASSET_ADJUST(p_api_version   => p_api_version,
15241                                                   p_init_msg_list  => p_init_msg_list,
15242                                                   x_return_status  => x_return_status,
15243                                                   x_msg_count      => x_msg_count,
15244                                                   x_msg_data       => x_msg_data,
15245                                                   p_ast_line_rec   => l_ast_line_rec,
15246                                                   p_txlv_rec       => l_txlv_rec,
15247                                                   p_txdv_rec       => l_txdv_rec,
15248                                                   --3156924
15249                                                   p_trx_date       => l_trx_rec.date_trans_occurred,
15250                                                   p_trx_number   => l_trx_rec.trans_number,
15251                                                   --Bug# 4028371
15252                                                   x_fa_trx_date    => l_fa_adj_date);
15253 
15254                                --dbms_output.put_line('after adjusting fA'||x_return_status);
15255                                IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
15256                                    RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
15257                                ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
15258                                    RAISE OKL_API.G_EXCEPTION_ERROR;
15259                                END IF;
15260                            End If;
15261                            */
15262                   /* Bug#4508050 - smadhava - Modified - Start*/
15263                   /*
15264                        END IF; --asset_trmn_exists
15265                    ELSIF NVL(l_check_period_of_addition,'N') = 'Y' THEN
15266                   */
15267                   /* Bug#4508050 - smadhava - Modified - End*/
15268                        --dbms_output.put_line('before adjusting fA'||x_return_status);
15269                        --dbms_output.put_line('before adjusting fA units'||to_char(l_ast_line_rec.current_units));
15270                        FIXED_ASSET_ADJUST(p_api_version   => p_api_version,
15271                                           p_init_msg_list  => p_init_msg_list,
15272                                           x_return_status  => x_return_status,
15273                                           x_msg_count      => x_msg_count,
15274                                           x_msg_data       => x_msg_data,
15275                                           p_ast_line_rec   => l_ast_line_rec,
15276                                           p_txlv_rec       => l_txlv_rec,
15277                                           p_txdv_rec       => l_txdv_rec,
15278                                           --3156924
15279                                           p_trx_date       => l_trx_rec.date_trans_occurred,
15280                                           p_trx_number   => l_trx_rec.trans_number,
15281                     --Bug# 6373605--SLA populate source
15282                     p_sla_source_header_id    => l_txlv_rec.tas_id,
15283                     p_sla_source_header_table => 'OKL_TRX_ASSETS',
15284                     p_sla_source_try_id       => l_trx_rec.try_id,
15285                     p_sla_source_line_id      => l_txlv_rec.id,
15286                     p_sla_source_line_table   => 'OKL_TXL_ASSETS_B',
15287                     p_sla_source_chr_id       => l_chr_id,
15288                     p_sla_source_kle_id       => l_source_cle_id,
15289                     --Bug# 6373605--SLA populate sources
15290                                           --Bug# 4028371
15291                                           x_fa_trx_date    => l_fa_adj_date);
15292 
15293                        --dbms_output.put_line('after adjusting fA'||x_return_status);
15294                        IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
15295                            RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
15296                        ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
15297                            RAISE OKL_API.G_EXCEPTION_ERROR;
15298                        END IF;
15299                    /* Bug#4508050 - smadhava - Modified - Start*/
15300                    /*
15301                    END IF;
15302                    */
15303                    /* Bug#4508050 - smadhava - Modified - End*/
15304                END LOOP;
15305                CLOSE all_books_curs;
15306                --adjustments done for all the books
15307            END IF; --l_fa_exists
15308            --3. Put record onto the lines table
15309            l_cle_tbl(i).cle_id := l_source_cle_id;
15310 
15311        ELSIF l_txdv_tbl(i).target_kle_id IS NULL THEN
15312 
15313            --1.Call to Copy Lines api to create split line
15314            OKL_COPY_CONTRACT_PUB.COPY_CONTRACT_LINES(
15315                 p_api_version       => p_api_version,
15316                 p_init_msg_list     => p_init_msg_list,
15317                 x_return_status     => x_return_status,
15318                 x_msg_count         => x_msg_count,
15319                 x_msg_data          => x_msg_data,
15320                 p_from_cle_id       => l_source_cle_id,
15321                 p_to_cle_id         => NULL,
15322                 p_to_chr_id         => l_chr_id,
15323                 p_to_template_yn        => 'N',
15324                 p_copy_reference        =>  'COPY',
15325                 p_copy_line_party_yn => 'Y',
15326                 p_renew_ref_yn       => 'N',
15327                 x_cle_id                     => l_split_cle_id);
15328 
15329             IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
15330                 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
15331             ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
15332                 RAISE OKL_API.G_EXCEPTION_ERROR;
15333             END IF;
15334 
15335             --Bug# 4631549 : If release contract copy expected_asset_cost from source line to target line
15336             Open l_chrb_csr (p_chr_id => l_chr_id);
15337             fetch l_chrb_csr into l_chrb_rec;
15338             close l_chrb_csr;
15339 
15340             If nvl(l_chrb_rec.orig_system_source_code,OKL_API.G_MISS_CHAR) = 'OKL_RELEASE' then
15341                 open l_exp_cost_csr(p_cle_id => l_source_cle_id);
15342                 fetch l_exp_cost_csr into l_exp_cost_rec;
15343                 close l_exp_cost_csr;
15344 
15345                 l_clev_exp_cost_rec.id := l_split_cle_id;
15346                 l_klev_exp_cost_rec.id := l_split_cle_id;
15347                 l_klev_exp_cost_rec.expected_asset_cost := l_exp_cost_rec.expected_asset_cost;
15348 
15349                 OKL_CONTRACT_PUB.update_contract_line(
15350                   p_api_version         => p_api_version,
15351                   p_init_msg_list       => p_init_msg_list,
15352                   x_return_status       => x_return_status,
15353                   x_msg_count           => x_msg_count,
15354                   x_msg_data            => x_msg_data,
15355                   p_clev_rec            => l_clev_exp_cost_rec,
15356                   p_klev_rec            => l_klev_exp_cost_rec,
15357                   x_clev_rec            => lx_clev_exp_cost_rec,
15358                   x_klev_rec            => lx_klev_exp_cost_rec
15359                   );
15360 
15361                  IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
15362                      RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
15363                  ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) then
15364                      RAISE OKL_API.G_EXCEPTION_ERROR;
15365                  END IF;
15366              End If;
15367 
15368            --2. Call local procedure to adjust quantities and amounts
15369            --3. Call local procedure to null out line source references on copied lines
15370            l_txdv_rec := l_txdv_tbl(i);
15371            l_txlv_rec := p_txlv_rec;
15372 
15373            --Bug# 3502142
15374            l_round_split_comp_amt := 'N';
15375            IF (i = l_txdv_tbl.LAST) AND
15376               (NVL(l_txdv_tbl(i).split_percent,0) > 0 OR l_txdv_tbl(i).split_percent <> OKL_API.G_MISS_NUM) THEN
15377              l_round_split_comp_amt := 'Y';
15378            END IF;
15379 
15380            Adjust_Split_Lines(
15381                 p_api_version    => p_api_version,
15382                 p_init_msg_list  => p_init_msg_list,
15383                 x_return_status  => x_return_status,
15384                 x_msg_count      => x_msg_count,
15385                 x_msg_data       => x_msg_data,
15386                 p_cle_id         => l_split_cle_id,
15387                 p_parent_line_id => l_source_cle_id,
15388                 p_txdv_rec       => l_txdv_rec,
15389                 p_txlv_rec       => l_txlv_rec,
15390                 p_round_split_comp_amt => l_round_split_comp_amt);
15391 
15392             IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
15393                 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
15394             ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
15395                 RAISE OKL_API.G_EXCEPTION_ERROR;
15396             END IF;
15397             IF l_fa_exists = 'Y' THEN
15398                 --to get all books for this asset
15399                 OPEN all_books_curs(p_asset_id => l_ast_line_rec.asset_id);
15400                 LOOP
15401                     FETCH all_books_curs INTO l_all_books_rec;
15402                     EXIT WHEN all_books_curs%NOTFOUND;
15403                     --reinitialize l_Ast_line_rec
15404                     l_ast_line_rec.START_DATE_ACTIVE         := l_all_books_rec.start_date_active;
15405                     l_ast_line_rec.END_DATE_ACTIVE           := l_all_books_rec.end_date_active;
15406                     l_ast_line_rec.ASSET_ID                  := l_all_books_rec.asset_id;
15407                     l_ast_line_rec.QUANTITY                  := l_all_books_rec.current_units;
15408                     l_ast_line_rec.ASSET_NUMBER              := l_all_books_rec.asset_number;
15409                     l_ast_line_rec.CORPORATE_BOOK            := l_all_books_rec.book_type_code; --this will be tax book in case of tax books inspite of var name
15410                     l_ast_line_rec.LIFE_IN_MONTHS            := l_all_books_rec.life_in_months;
15411                     l_ast_line_rec.ORIGINAL_COST             := l_all_books_rec.original_cost;
15412                     l_ast_line_rec.COST                      := l_all_books_rec.cost;
15413                     l_ast_line_rec.ADJUSTED_COST             := l_all_books_rec.adjusted_cost;
15414                     l_ast_line_rec.TAG_NUMBER                := l_all_books_rec.tag_number;
15415                     l_ast_line_rec.CURRENT_UNITS             := l_all_books_rec.current_units ;
15416                     l_ast_line_rec.SERIAL_NUMBER             := l_all_books_rec.serial_number;
15417                     l_ast_line_rec.REVAL_CEILING             := l_all_books_rec.reval_ceiling;
15418                     l_ast_line_rec.NEW_USED                  := l_all_books_rec.new_used;
15419                     l_ast_line_rec.IN_SERVICE_DATE           := l_all_books_rec.acquisition_date;
15420                     l_ast_line_rec.MANUFACTURER_NAME         := l_all_books_rec.manufacturer_name;
15421                     l_ast_line_rec.MODEL_NUMBER              := l_all_books_rec.model_number;
15422                     l_ast_line_rec.ASSET_TYPE                := l_all_books_rec.asset_type;
15423                     l_ast_line_rec.SALVAGE_VALUE             := l_all_books_rec.salvage_value;
15424                     l_ast_line_rec.PERCENT_SALVAGE_VALUE     := l_all_books_rec.percent_salvage_value;
15425                     l_ast_line_rec.DEPRECIATION_CATEGORY     := l_all_books_rec.depreciation_category;
15426                     l_ast_line_rec.DEPRN_START_DATE          := l_all_books_rec.deprn_start_date;
15427                     l_ast_line_rec.DEPRN_METHOD_CODE         := l_all_books_rec.deprn_method_code;
15428                     l_ast_line_rec.RATE_ADJUSTMENT_FACTOR    := l_all_books_rec.rate_adjustment_factor;
15429                     l_ast_line_rec.BASIC_RATE                := l_all_books_rec.basic_rate;
15430                     l_ast_line_rec.ADJUSTED_RATE             := l_all_books_rec.adjusted_rate;
15431                     l_ast_line_rec.RECOVERABLE_COST          := l_all_books_rec.recoverable_cost;
15432                     l_ast_line_rec.ORG_ID                    := l_all_books_rec.org_id;
15433                     l_ast_line_rec.SET_OF_BOOKS_ID           := l_all_books_rec.set_of_books_id;
15434 
15435                     --Bug# 6373605 start
15436                     If nvl(l_sts_code,OKL_API.G_MISS_CHAR) in
15437 ('TERMINATED','EXPIRED') Then
15438                         l_sla_asset_chr_id := NULL;
15439                     Else
15440                         l_sla_asset_chr_id := l_chr_id;
15441                     End If;
15442                     --Bug# 6373605
15443 
15444                     --4. Call Local procedure to add asset
15445                     FIXED_ASSET_ADD(p_api_version   => p_api_version,
15446                                     p_init_msg_list => p_init_msg_list,
15447                                     x_return_status => x_return_status,
15448                                     x_msg_count     => x_msg_count,
15449                                     x_msg_data      => x_msg_data,
15450                                     p_ast_line_rec  => l_ast_line_rec,
15451                                     p_txlv_rec      => l_txlv_rec,
15452                                     p_txdv_rec      => l_txdv_rec,
15453                                     --3156924
15454                                     p_trx_date       => l_trx_rec.date_trans_occurred,
15455                                     p_trx_number   => l_trx_rec.trans_number,
15456           --Bug# 6373605--SLA populate source
15457           p_sla_source_header_id    => l_txlv_rec.tas_id,
15458           p_sla_source_header_table => 'OKL_TRX_ASSETS',
15459           p_sla_source_try_id       => l_trx_rec.try_id,
15460           p_sla_source_line_id      => l_txdv_rec.id,
15461           p_sla_source_line_table   => 'OKL_TXD_ASSETS_B',
15462           p_sla_source_chr_id       => l_chr_id,
15463           p_sla_source_kle_id       => l_split_cle_id,
15464           p_sla_asset_chr_id        => l_sla_asset_chr_id,
15465           --Bug# 6373605--SLA populate sources
15466                                     --Bug# 4028371
15467                                     x_fa_trx_date   => l_fa_add_date,
15468                                     x_asset_hdr_rec => l_asset_hdr_rec);
15469                     --dbms_output.put_line('after adding fixed asset '||x_return_status);
15470                     --dbms_output.put_line('after adding fixed asset '||to_char(l_asset_hdr_rec.asset_id));
15471                     IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
15472                         RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
15473                     ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
15474                         RAISE OKL_API.G_EXCEPTION_ERROR;
15475                     END IF;
15476 
15477                     --Bug# 4028371
15478                     --update the fa trx date on transaction line
15479                     If l_all_books_rec.book_class = 'CORPORATE' then
15480                         l_talv_date_rec.id          := l_txlv_rec.id;
15481                         l_talv_date_rec.fa_trx_date := l_fa_add_date;
15482                         l_split_cle_id_orig := l_split_cle_id;
15483 
15484                         okl_tal_pvt.update_row
15485                                         (p_api_version   => p_api_version,
15486                                          p_init_msg_list => p_init_msg_list,
15487                                          x_return_status => x_return_status,
15488                                          x_msg_count     => x_msg_count,
15489                                          x_msg_data      => x_msg_data,
15490                                          p_talv_rec      => l_talv_date_rec,
15491                                          x_talv_rec      => lx_talv_date_rec);
15492                         IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
15493                             RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
15494                         ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
15495                             RAISE OKL_API.G_EXCEPTION_ERROR;
15496                         END IF;
15497 
15498                         --Bug# 6326479
15499                           /* 7626121 commented out from here and moved outside
15500                               process_split_accounting(
15501                             p_api_version   => p_api_version
15502                            ,p_init_msg_list => p_init_msg_list
15503                            ,x_return_status => x_return_status
15504                            ,x_msg_count     => x_msg_count
15505                            ,x_msg_data      => x_msg_data
15506                            ,p_contract_id   => l_chr_id
15507                            ,p_kle_id        => l_split_cle_id
15508                            ,p_transaction_date=>l_trx_rec.date_trans_occurred
15509                            );
15510 
15511                         IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
15512                            RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
15513                         ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
15514                            RAISE OKL_API.G_EXCEPTION_ERROR;
15515                         END IF; */
15516 
15517                         -- Bug# 6189396 -- start
15518                        okl_execute_formula_pub.g_additional_parameters(1).name := '';
15519                        okl_execute_formula_pub.g_additional_parameters(1).value := null;
15520                         -- Bug# 6189396 -- end
15521 
15522                      End If;
15523                      --End Bug# 4028371
15524                 END LOOP;
15525                 CLOSE all_books_curs;
15526 
15527                            -- Bug 7626121
15528                               process_split_accounting(
15529                             p_api_version   => p_api_version
15530                            ,p_init_msg_list => p_init_msg_list
15531                            ,x_return_status => x_return_status
15532                            ,x_msg_count     => x_msg_count
15533                            ,x_msg_data      => x_msg_data
15534                            ,p_contract_id   => l_chr_id
15535                            ,p_kle_id        => l_split_cle_id_orig
15536                            ,p_transaction_date=>l_trx_rec.date_trans_occurred
15537                            );
15538 
15539                         IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
15540                            RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
15541                         ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
15542                            RAISE OKL_API.G_EXCEPTION_ERROR;
15543                         END IF;
15544 
15545                        okl_execute_formula_pub.g_additional_parameters(1).name := '';
15546                        okl_execute_formula_pub.g_additional_parameters(1).value := null;
15547            END IF; --l_fa_exists
15548            --5. Tie back new asset records to OKL
15549            --dbms_output.put_line('before fetching the cim_id for FA link');
15550            OPEN c_cim(l_txdv_rec.id);
15551            LOOP
15552                FETCH c_cim INTO l_cim_id,l_cim_cle_id;
15553                --dbms_output.put_line('in fetching the cim_id for FA link'||to_char(l_cim_id));
15554                EXIT WHEN c_cim%NOTFOUND;
15555                IF l_fa_exists = 'Y' THEN
15556                    l_cimv_rec.id := l_cim_id;
15557                    l_cimv_rec.object1_id1 := l_asset_hdr_rec.asset_id;
15558                    l_cimv_rec.object1_id2 := '#';
15559                    l_cimv_rec.jtot_object1_code := 'OKX_ASSET';
15560                    l_cimv_rec.number_of_items := l_txdv_rec.quantity;
15561                    --dbms_output.put_line('Asset Id :'||to_char(l_asset_hdr_rec.asset_id));
15562 
15563                    OKL_OKC_MIGRATION_PVT.update_contract_item(p_api_version         => p_api_version,
15564                                                               p_init_msg_list   => p_init_msg_list,
15565                                                               x_return_status   => x_return_status,
15566                                                               x_msg_count           => x_msg_count,
15567                                                               x_msg_data            => x_msg_data,
15568                                                               p_cimv_rec            => l_cimv_rec,
15569                                                               x_cimv_rec            => l_cimv_rec_out);
15570                     --dbms_output.put_line('after updating contract item for Asset link '||x_return_status);
15571                     IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
15572                         RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
15573                     ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR)  THEN
15574                         RAISE OKL_API.G_EXCEPTION_ERROR;
15575                     END IF;
15576                 END IF; --l_fa_exits
15577                 -- take care of the ib instances for this FA line
15578                  --dbms_output.put_line('before splitting IB instances fa_line_id'||to_char(l_cimv_rec_out.cle_id));
15579                  --bug# : serial number processing for split asset by serial numbers - consolidate ib lines
15580 
15581                  IF NVL(l_txdv_rec.split_percent,0) NOT IN (0,OKL_API.G_MISS_NUM) THEN -- Is serialized
15582                     --consolidate the ib lines
15583                     consolidate_ib_lines(p_api_version   => p_api_version,
15584                                          p_init_msg_list => p_init_msg_list,
15585                                          x_return_status => x_return_status,
15586                                          x_msg_count     => x_msg_count,
15587                                          x_msg_data      => x_msg_data,
15588                                          p_txdv_rec      => l_txdv_rec,
15589                                          p_txlv_rec      => l_txlv_rec
15590                                         );
15591                     --dbms_output.put_line('After consolidating ib lines'||x_return_status);
15592                     IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
15593                         RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
15594                     ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
15595                         RAISE OKL_API.G_EXCEPTION_ERROR;
15596                     END IF;
15597                  END IF;
15598 
15599                  --bug# : serial number processing for split asset by serial numbers - consolidate ib lines
15600                  --OPEN   ib_item_cur(p_fa_line_id => l_cimv_rec_out.cle_id);
15601                  OPEN   ib_item_cur(p_fa_line_id => l_cim_cle_id);
15602                  LOOP
15603                      FETCH  ib_item_cur INTO l_csi_id1,
15604                                              l_csi_id2,
15605                                              l_csi_cim_id,
15606                                              l_csi_cle_id,
15607                                              l_csi_chr_id;
15608 
15609                      EXIT WHEN ib_item_cur%NOTFOUND;
15610                      --create split ib instance
15611                      --dbms_output.put_line('Before Create ib instance csi id1:'|| x_return_status);
15612                      create_ib_instance(p_api_version   => p_api_version,
15613                                         p_init_msg_list => p_init_msg_list,
15614                                         x_return_status => x_return_status,
15615                                         x_msg_count     => x_msg_count,
15616                                         x_msg_data      => x_msg_data,
15617                                         p_csi_id1       => l_csi_id1,
15618                                         p_csi_id2       => l_csi_id2,
15619                                         p_ib_cle_id     => l_csi_cle_id,
15620                                         p_chr_id        => l_csi_chr_id,
15621                                         p_split_qty     => l_txdv_rec.quantity,
15622                                         --new parameter added for split asset into components feature
15623                                         p_txdv_rec      => l_txdv_rec,
15624                                         x_instance_id   => l_csi_instance_id);
15625 
15626                       --dbms_output.put_line('After Create ib instance '||x_return_status||':'||to_char(l_csi_instance_id));
15627                       IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
15628                           RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
15629                       ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
15630                           RAISE OKL_API.G_EXCEPTION_ERROR;
15631                       END IF;
15632 
15633                       --update the coressponding okc_k_item record
15634                       l_cimv_rec.id := l_csi_cim_id;
15635                       l_cimv_rec.object1_id1 := TO_CHAR(l_csi_instance_id);
15636                       l_cimv_rec.object1_id2 := '#';
15637                       l_cimv_rec.jtot_object1_code := 'OKX_IB_ITEM';
15638 
15639                       OKL_OKC_MIGRATION_PVT.update_contract_item(p_api_version      => p_api_version,
15640                                                                  p_init_msg_list        => p_init_msg_list,
15641                                                                  x_return_status        => x_return_status,
15642                                                                  x_msg_count        => x_msg_count,
15643                                                                  x_msg_data             => x_msg_data,
15644                                                                  p_cimv_rec             => l_cimv_rec,
15645                                                                  x_cimv_rec             => l_cimv_rec_out);
15646 
15647                        --dbms_output.put_line('after updating contract item for IB link '||x_return_status);
15648                        IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
15649                            RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
15650                        ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
15651                            RAISE OKL_API.G_EXCEPTION_ERROR;
15652                        END IF;
15653                     END LOOP;
15654                  CLOSE ib_item_cur;
15655 
15656                  --Bug# 115.9 - Split by serial numbers
15657                  --consolidate if serialized and delete duplicate instance lines on child
15658                  --do it only for normal split assets as logic for split asset into compoets to be worked out
15659                  IF NVL(l_txdv_rec.split_percent,0) IN (0,OKL_API.G_MISS_NUM) THEN
15660                  ----
15661                  OPEN get_dup_inst_csr (p_asd_id        => l_txdv_rec.id);
15662                  LOOP
15663                      FETCH get_dup_inst_csr INTO l_dup_inst_cle_id, l_dup_ib_cle_id;
15664                      EXIT WHEN get_dup_inst_csr%NOTFOUND;
15665                      --Call line deletion API
15666                      delete_instance_lines(
15667                                                p_api_version    => p_api_version,
15668                                                p_init_msg_list  => p_init_msg_list,
15669                                                x_return_status  => x_return_status,
15670                                                x_msg_count      => x_msg_count,
15671                                                x_msg_data       => x_msg_data,
15672                                                p_inst_cle_id    => l_dup_inst_cle_id,
15673                                                p_ib_cle_id      => l_dup_ib_cle_id);
15674                      IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
15675                          RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
15676                      ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
15677                          RAISE OKL_API.G_EXCEPTION_ERROR;
15678                      END IF;
15679                  END LOOP;
15680                  CLOSE get_dup_inst_csr;
15681                  ----
15682                  END IF;
15683                  --Bug# 115.9 - Split by serial numbers
15684 
15685 
15686             END LOOP;
15687             CLOSE c_cim;
15688            --6. Update the lines table
15689            l_cle_tbl(i).cle_id := l_split_cle_id;
15690        END IF;
15691        IF (i=l_txdv_tbl.LAST) THEN
15692 
15693 
15694             IF (i = l_txdv_tbl.LAST) AND
15695                (NVL(l_txdv_tbl(i).split_percent,0) > 0 OR l_txdv_tbl(i).split_percent <> OKL_API.G_MISS_NUM) THEN
15696                --special processing for split asset components the original asset has to be retired completely
15697                 --1.Abandon the old asset line as we have created assets
15698                 Abandon_Parent_Asset(
15699                     p_api_version    => p_api_version,
15700                     p_init_msg_list  => p_init_msg_list,
15701                     x_return_status  => x_return_status,
15702                     x_msg_count      => x_msg_count,
15703                     x_msg_data       => x_msg_data,
15704                     p_cle_id         => l_source_cle_id);
15705 
15706                IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
15707                    RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
15708                ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
15709                    RAISE OKL_API.G_EXCEPTION_ERROR;
15710                END IF;
15711                IF l_fa_exists = 'Y' THEN
15712                    --2.Fully retire the Asset
15713                    OPEN all_books_curs(p_asset_id => l_ast_line_rec.asset_id);
15714                    LOOP
15715                        FETCH all_books_curs INTO l_all_books_rec;
15716                        EXIT WHEN all_books_curs%NOTFOUND;
15717                        --reinitialize l_Ast_line_rec
15718                        l_ast_line_rec.START_DATE_ACTIVE         := l_all_books_rec.start_date_active;
15719                        l_ast_line_rec.END_DATE_ACTIVE           := l_all_books_rec.end_date_active;
15720                        l_ast_line_rec.ASSET_ID                  := l_all_books_rec.asset_id;
15721                        l_ast_line_rec.QUANTITY                  := l_all_books_rec.current_units;
15722                        l_ast_line_rec.ASSET_NUMBER              := l_all_books_rec.asset_number;
15723                        l_ast_line_rec.CORPORATE_BOOK            := l_all_books_rec.book_type_code; --this will be tax book in case of tax books inspite of var name
15724                        l_ast_line_rec.LIFE_IN_MONTHS            := l_all_books_rec.life_in_months;
15725                        l_ast_line_rec.ORIGINAL_COST             := l_all_books_rec.original_cost;
15726                        l_ast_line_rec.COST                      := l_all_books_rec.cost;
15727                        l_ast_line_rec.ADJUSTED_COST             := l_all_books_rec.adjusted_cost;
15728                        l_ast_line_rec.TAG_NUMBER                := l_all_books_rec.tag_number;
15729                        l_ast_line_rec.CURRENT_UNITS             := l_all_books_rec.current_units ;
15730                        l_ast_line_rec.SERIAL_NUMBER             := l_all_books_rec.serial_number;
15731                        l_ast_line_rec.REVAL_CEILING             := l_all_books_rec.reval_ceiling;
15732                        l_ast_line_rec.NEW_USED                  := l_all_books_rec.new_used;
15733                        l_ast_line_rec.IN_SERVICE_DATE           := l_all_books_rec.acquisition_date;
15734                        l_ast_line_rec.MANUFACTURER_NAME         := l_all_books_rec.manufacturer_name;
15735                        l_ast_line_rec.MODEL_NUMBER              := l_all_books_rec.model_number;
15736                        l_ast_line_rec.ASSET_TYPE                := l_all_books_rec.asset_type;
15737                        l_ast_line_rec.SALVAGE_VALUE             := l_all_books_rec.salvage_value;
15738                        l_ast_line_rec.PERCENT_SALVAGE_VALUE     := l_all_books_rec.percent_salvage_value;
15739                        l_ast_line_rec.DEPRECIATION_CATEGORY     := l_all_books_rec.depreciation_category;
15740                        l_ast_line_rec.DEPRN_START_DATE          := l_all_books_rec.deprn_start_date;
15741                        l_ast_line_rec.DEPRN_METHOD_CODE         := l_all_books_rec.deprn_method_code;
15742                        l_ast_line_rec.RATE_ADJUSTMENT_FACTOR    := l_all_books_rec.rate_adjustment_factor;
15743                        l_ast_line_rec.BASIC_RATE                := l_all_books_rec.basic_rate;
15744                        l_ast_line_rec.ADJUSTED_RATE             := l_all_books_rec.adjusted_rate;
15745                        l_ast_line_rec.RECOVERABLE_COST          := l_all_books_rec.recoverable_cost;
15746                        l_ast_line_rec.ORG_ID                    := l_all_books_rec.org_id;
15747                        l_ast_line_rec.SET_OF_BOOKS_ID           := l_all_books_rec.set_of_books_id;
15748 
15749                        --check period of addition
15750                        l_check_period_of_Addition := 'N';
15751                        OPEN check_period_of_addition(p_asset_id       => l_ast_line_rec.asset_id,
15752                                                      p_book_type_code => l_ast_line_rec.corporate_book);
15753                            FETCH check_period_of_addition INTO l_check_period_of_Addition;
15754                            IF check_period_of_addition%NOTFOUND THEN
15755                                NULL;
15756                            END IF;
15757                        CLOSE check_period_of_addition;
15758 
15759                        /* Bug#4508050 - smadhava - Modified - Start*/
15760                        /*
15761                        IF NVL(l_check_period_of_addition,'N') = 'N' THEN
15762                        --dbms_output.put_line('before retiring fA'||x_return_status);
15763 
15764                            FIXED_ASSET_RETIRE(p_api_version    =>  p_api_version,
15765                                               p_init_msg_list =>  p_init_msg_list,
15766                                               x_return_status =>  x_return_status,
15767                                               x_msg_count     =>  x_msg_count,
15768                                               x_msg_data      =>  x_msg_data,
15769                                               p_ast_line_rec  =>  l_ast_line_rec,
15770                                               p_txlv_rec      =>  l_txlv_rec,
15771                                               p_txdv_rec      =>  l_txdv_rec,
15772                                               --Bug# 3156924
15773                                               p_trx_date       => l_trx_rec.date_trans_occurred,
15774                                               p_trx_number   => l_trx_rec.trans_number,
15775                                               x_fa_trx_date  => l_fa_retire_date);
15776                            --dbms_output.put_line('after retiring fA'||x_return_status);
15777                            IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
15778                                RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
15779                            ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
15780                                RAISE OKL_API.G_EXCEPTION_ERROR;
15781                            END IF;
15782                        ELSIF NVL(l_check_period_of_addition,'N') = 'Y' THEN
15783                         */
15784                        /* Bug#4508050 - smadhava - Modified - End*/
15785 
15786                        --ElsIf nvl(l_check_period_of_addition,'N') in ('Y','N') Then
15787                        --dbms_output.put_line('before adjusting fA'||x_return_status);
15788                        --dbms_output.put_line('before adjusting fA units'||to_char(l_ast_line_rec.current_units));
15789                            FIXED_ASSET_ADJUST(p_api_version   => p_api_version,
15790                                               p_init_msg_list  => p_init_msg_list,
15791                                               x_return_status  => x_return_status,
15792                                               x_msg_count      => x_msg_count,
15793                                               x_msg_data       => x_msg_data,
15794                                               p_ast_line_rec   => l_ast_line_rec,
15795                                               p_txlv_rec       => l_txlv_rec,
15796                                               p_txdv_rec       => l_txdv_rec,
15797                                               --3156924
15798                                               p_trx_date       => l_trx_rec.date_trans_occurred,
15799                                               p_trx_number   => l_trx_rec.trans_number,
15800                     --Bug# 6373605--SLA populate source
15801                     p_sla_source_header_id    => l_txlv_rec.tas_id,
15802                     p_sla_source_header_table => 'OKL_TRX_ASSETS',
15803                     p_sla_source_try_id       => l_trx_rec.try_id,
15804                     p_sla_source_line_id      => l_txlv_rec.id,
15805                     p_sla_source_line_table   => 'OKL_TXL_ASSETS_B',
15806                     p_sla_source_chr_id       => l_chr_id,
15807                     p_sla_source_kle_id       => l_source_cle_id,
15808                     --Bug# 6373605--SLA populate sources
15809                                               x_fa_trx_date    => l_fa_adj_date);
15810 
15811                            --dbms_output.put_line('after adjusting fA'||x_return_status);
15812                            IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
15813                                RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
15814                            ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
15815                                RAISE OKL_API.G_EXCEPTION_ERROR;
15816                            END IF;
15817                        /* Bug#4508050 - smadhava - Modified - Start*/
15818                        /*
15819                        END IF;
15820                        */
15821                        /* Bug#4508050 - smadhava - Modified - End*/
15822                     END LOOP;
15823                     CLOSE all_books_curs;
15824                     --adjustments done for all the books
15825                 END IF; --l_fa_exists
15826             -- end of full retirement for split asset into components parent asset
15827             END IF;
15828             --now exit out of the loop
15829             EXIT;
15830        ELSE
15831             i := i + 1;
15832             --dbms_output.put_line('number of split records processed'||to_char(i));
15833        END IF;
15834     END LOOP;
15835     --End If;--unable to track unchanged
15836 
15837     --Bug# 3222804 : relink ib lines in case split into individual units
15838     --and serialized
15839     IF NVL(l_txlv_rec.split_into_singles_flag,'N')  = 'Y' THEN
15840         Relink_Ib_Lines(p_api_version    => p_api_version,
15841                         p_init_msg_list  => p_init_msg_list,
15842                         x_return_status  => x_return_status,
15843                         x_msg_count      => x_msg_count,
15844                         x_msg_data       => x_msg_data,
15845                         p_txlv_rec       => l_txlv_rec);
15846 
15847         --dbms_output.put_line('after calling process streams '|| x_return_status);
15848         IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
15849              RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
15850         ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
15851              RAISE OKL_API.G_EXCEPTION_ERROR;
15852         END IF;
15853     END IF;
15854     --Bug# 3257326 End : relink ib lines in case split into individual units
15855 
15856     x_cle_tbl := l_cle_tbl;
15857     --Bug#2648280 Begin
15858     --dbms_output.put_line('Before calling process streams'|| x_return_status);
15859     --rounding streams could be an issue:
15860     split_streams(p_api_version    => p_api_version,
15861                   p_init_msg_list  => p_init_msg_list,
15862                   x_return_status  => x_return_status,
15863                   x_msg_count      => x_msg_count,
15864                   x_msg_data       => x_msg_data,
15865                   p_txl_id         => l_txlv_rec.id);
15866     --dbms_output.put_line('after calling process streams '|| x_return_status);
15867     IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
15868          RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
15869     ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
15870          RAISE OKL_API.G_EXCEPTION_ERROR;
15871     END IF;
15872     --Bug#2648280 End
15873 
15874     ------------------------------------------------------------------------
15875     --Bug# : 11.5.10 Recalculate costs on impacted lines and update
15876     ------------------------------------------------------------------------
15877   --Bug# 5946411: ER
15878   --recalculate only if split asset have status : BOOKED/EVERGREEN
15879   --dbms_output.put_line('before calling recalculate  l_sts_code'||l_sts_code);
15880   IF (l_sts_code IN ('BOOKED','EVERGREEN')) THEN
15881 
15882     recalculate_costs(
15883                         p_api_version         => p_api_version,
15884                         p_init_msg_list       => p_init_msg_list,
15885                         x_return_status       => x_return_status,
15886                         x_msg_count           => x_msg_count,
15887                         x_msg_data            => x_msg_data,
15888                         p_chr_id              => l_chr_id,
15889                         p_cle_tbl             => x_cle_tbl);
15890 
15891      IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
15892          RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
15893      ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
15894          RAISE OKL_API.G_EXCEPTION_ERROR;
15895      END IF;
15896     END IF;
15897 
15898     --Bug# 6788253
15899     --call API check if asset is securitized
15900     OKL_SECURITIZATION_PVT.check_kle_securitized(
15901                             p_api_version         => p_api_version,
15902                             p_init_msg_list       => p_init_msg_list,
15903                             x_return_status       => x_return_status,
15904                             x_msg_count           => x_msg_count,
15905                             x_msg_data            => x_msg_data,
15906                             p_kle_id              => l_source_cle_id,
15907                             p_effective_date      => SYSDATE,
15908                             x_value               => l_is_asset_securitized,
15909                             x_inv_agmt_chr_id_tbl => l_inv_agmt_chr_id_tbl);
15910     --dbms_output.put_line('SFA-0 : calling check_kle_securitized--status >'||x_return_status);
15911     IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
15912       RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
15913     ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
15914       RAISE OKL_API.G_EXCEPTION_ERROR;
15915     END IF;
15916 
15917     IF l_is_asset_securitized = OKL_API.G_TRUE THEN
15918      --call API to modify pool contents
15919 
15920       OKL_SECURITIZATION_PVT.modify_pool_contents(
15921                             p_api_version         => p_api_version,
15922                             p_init_msg_list       => p_init_msg_list,
15923                             x_return_status       => x_return_status,
15924                             x_msg_count           => x_msg_count,
15925                             x_msg_data            => x_msg_data,
15926                             p_transaction_reason  => l_trx_reason_asset_split,
15927                             p_khr_id              => l_chr_id,
15928                             p_kle_id              => l_source_cle_id,
15929                             p_split_kle_ids       => x_cle_tbl,
15930                             p_transaction_date    => SYSDATE,
15931                             p_effective_date      => SYSDATE);
15932 
15933       IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
15934         RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
15935       ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
15936         RAISE OKL_API.G_EXCEPTION_ERROR;
15937       END IF;
15938     END IF;
15939 
15940     --Bug# 6344223
15941     IF (l_sts_code = 'BOOKED') AND (p_source_call = 'UI') THEN
15942         sync_streams( p_api_version     => p_api_version,
15943                       p_init_msg_list   => p_init_msg_list,
15944                       x_return_status   => x_return_status,
15945                       x_msg_count       => x_msg_count,
15946                       x_msg_data        => x_msg_data,
15947                       p_chr_id          => l_chr_id );
15948 
15949         IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
15950              RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
15951         ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
15952              RAISE OKL_API.G_EXCEPTION_ERROR;
15953         END IF;
15954 
15955     ELSE
15956         -------------------------------------------------------------------------
15957         --Bug# : 11.5.10 Securitization impact
15958         -------------------------------------------------------------------------
15959          IF l_is_asset_securitized = OKL_API.G_TRUE THEN
15960 
15961              -- Bug# 4775555
15962              -- Historize and Re-create Disbursement Basis Streams
15963              OKL_STREAM_GENERATOR_PVT.create_disb_streams(
15964                  p_api_version         => p_api_version,
15965                  p_init_msg_list       => p_init_msg_list,
15966                  x_return_status       => x_return_status,
15967                  x_msg_count           => x_msg_count,
15968                  x_msg_data            => x_msg_data,
15969                  p_contract_id         => l_chr_id
15970               );
15971 
15972              IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
15973                  RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
15974              ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
15975                  RAISE OKL_API.G_EXCEPTION_ERROR;
15976              END IF;
15977 
15978             --Bug# 6344223
15979              okl_stream_generator_pvt.create_pv_streams(
15980                    p_api_version         => 1.0,
15981                    p_init_msg_list       => OKC_API.G_FALSE,
15982                    x_return_status       => x_return_status,
15983                    x_msg_count           => x_msg_count,
15984                    x_msg_data            => x_msg_data,
15985                    p_contract_id         => l_chr_id
15986                    );
15987 
15988              IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
15989                  RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
15990              ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
15991                  RAISE OKL_API.G_EXCEPTION_ERROR;
15992              END IF;
15993 
15994              okl_contract_rebook_pvt.create_inv_disb_adjustment(
15995                    p_api_version         => 1.0,
15996                    p_init_msg_list       => OKC_API.G_FALSE,
15997                    x_return_status       => x_return_status,
15998                    x_msg_count           => x_msg_count,
15999                    x_msg_data            => x_msg_data,
16000                    p_orig_khr_id         => l_chr_id
16001                    );
16002 
16003 
16004              IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
16005                  RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
16006              ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
16007                  RAISE OKL_API.G_EXCEPTION_ERROR;
16008              END IF;
16009             --Bug# 6344223 : End
16010         END IF;
16011 
16012 
16013         -------------------------------------------------------------------------
16014         --Bug# : 11.5.10 Securitization impact End
16015         -------------------------------------------------------------------------
16016       -- Bug# 5946411: ER
16017       IF (l_sts_code IN ('TERMINATED','EXPIRED')) THEN
16018         create_split_asset_return (
16019                        p_api_version         =>  p_api_version,
16020                         p_init_msg_list       => p_init_msg_list,
16021                         x_return_status       => x_return_status,
16022                         x_msg_count           => x_msg_count,
16023                         x_msg_data            => x_msg_data,
16024                         p_kle_id             => l_source_cle_id,
16025                         p_cle_tbl             => x_cle_tbl,
16026                         p_txlv_rec            => l_txlv_rec
16027                         );
16028 
16029         IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
16030           RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
16031         ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
16032           RAISE OKL_API.G_EXCEPTION_ERROR;
16033         END IF;
16034       END IF;
16035       --Bug# 5946411: ER end
16036 
16037       ------------------------------------------------------------------------
16038       --Bug# : R12.B eBTax impact Start
16039       ------------------------------------------------------------------------
16040       okl_process_sales_tax_pvt.calculate_sales_tax(
16041          p_api_version             => p_api_version,
16042          p_init_msg_list           => p_init_msg_list,
16043          x_return_status           => x_return_status,
16044          x_msg_count               => x_msg_count,
16045          x_msg_data                => x_msg_data,
16046          p_source_trx_id           =>  p_txlv_rec.tas_id, --<okl_trx_assets.id>,
16047          p_source_trx_name         => 'Split Asset',
16048          p_source_table            => 'OKL_TRX_ASSETS');
16049 
16050          IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
16051              RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
16052          ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
16053              RAISE OKL_API.G_EXCEPTION_ERROR;
16054          END IF;
16055 
16056       ------------------------------------------------------------------------
16057       --Bug# : R12.B eBTax impact End
16058       ------------------------------------------------------------------------
16059 
16060     --update the transaction record to processed.
16061     l_trxv_rec.id := p_txlv_rec.tas_id;
16062     l_trxv_rec.tsu_code := 'PROCESSED';
16063     OKL_TRX_ASSETS_PUB.update_trx_ass_h_def(
16064                         p_api_version   => p_api_version,
16065                         p_init_msg_list => p_init_msg_list,
16066                         x_return_status => x_return_status,
16067                         x_msg_count     => x_msg_count,
16068                         x_msg_data      => x_msg_data,
16069                         p_thpv_rec      => l_trxv_rec,
16070                         x_thpv_rec      => lx_trxv_rec);
16071 
16072      --dbms_output.put_line('after updating contract trx status to processed '||x_return_status);
16073      IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
16074          RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
16075      ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
16076          RAISE OKL_API.G_EXCEPTION_ERROR;
16077      END IF;
16078 
16079  END IF;
16080      OKL_API.END_ACTIVITY (x_msg_count,
16081                           x_msg_data );
16082 EXCEPTION
16083     WHEN OKL_API.G_EXCEPTION_ERROR THEN
16084     x_return_status := OKL_API.HANDLE_EXCEPTIONS(
16085                                l_api_name,
16086                                G_PKG_NAME,
16087                                'OKL_API.G_RET_STS_ERROR',
16088                                x_msg_count,
16089                                x_msg_data,
16090                                '_PVT');
16091     WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
16092     x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
16093                               l_api_name,
16094                               G_PKG_NAME,
16095                               'OKL_API.G_RET_STS_UNEXP_ERROR',
16096                               x_msg_count,
16097                               x_msg_data,
16098                               '_PVT');
16099     WHEN OTHERS THEN
16100     x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
16101                               l_api_name,
16102                               G_PKG_NAME,
16103                               'OTHERS',
16104                               x_msg_count,
16105                               x_msg_data,
16106                               '_PVT');
16107 END Split_Fixed_Asset;
16108 ------------------------------------------------------------------------------
16109 -- PROCEDURE version_contract
16110 --
16111 --  This procedure versions contract, i.e. making a contract Version History
16112 --
16113 -- Calls:
16114 -- Called By:
16115 ------------------------------------------------------------------------------
16116   PROCEDURE version_contract(
16117                              x_return_status OUT NOCOPY VARCHAR2,
16118                              x_msg_count     OUT NOCOPY NUMBER,
16119                              x_msg_data      OUT NOCOPY VARCHAR2,
16120                              p_chr_id        IN  OKC_K_HEADERS_V.ID%TYPE
16121                             ) IS
16122 
16123   l_proc_name VARCHAR2(35) := 'VERSION_CONTRACT';
16124   l_cvmv_rec  okl_okc_migration_pvt.cvmv_rec_type;
16125   x_cvmv_rec  okl_okc_migration_pvt.cvmv_rec_type;
16126 
16127   BEGIN
16128 
16129     x_return_status := OKC_API.G_RET_STS_SUCCESS;
16130 
16131     l_cvmv_rec.chr_id := p_chr_id;
16132     okl_version_pub.version_contract(
16133                                      p_api_version => 1.0,
16134                                      p_init_msg_list => OKC_API.G_FALSE,
16135                                      x_return_status => x_return_status,
16136                                      x_msg_count     => x_msg_count,
16137                                      x_msg_data      => x_msg_data,
16138                                      p_cvmv_rec      => l_cvmv_rec,
16139                                      x_cvmv_rec      => x_cvmv_rec --,
16140                                      --p_commit        => OKC_API.G_FALSE
16141                                     );
16142     RETURN;
16143 
16144   END version_contract;
16145 --------------------------------------------------------------------------------
16146 --Start of Comments
16147 --Procedure Name : Split_Asset
16148 --Description    : Selects the split Asset transaction against the line
16149 --                 and splits the Asset in OKL and FA
16150 --History        :
16151 --                 08-Apr-2001  ashish.singh Created
16152 --End of Comments
16153 --------------------------------------------------------------------------------
16154 PROCEDURE Split_Fixed_Asset(p_api_version   IN  NUMBER,
16155                             p_init_msg_list IN  VARCHAR2,
16156                             x_return_status OUT NOCOPY VARCHAR2,
16157                             x_msg_count     OUT NOCOPY NUMBER,
16158                             x_msg_data      OUT NOCOPY VARCHAR2,
16159                             p_cle_id        IN  NUMBER,
16160                             x_cle_tbl       OUT NOCOPY cle_tbl_type,
16161                             --Bug# 6344223
16162                             p_source_call   IN VARCHAR2 DEFAULT 'UI') IS
16163 
16164  l_return_status        VARCHAR2(1)  DEFAULT OKL_API.G_RET_STS_SUCCESS;
16165  l_api_name             CONSTANT VARCHAR2(30) := 'SPLIT_FIXED_ASSET';
16166  l_api_version          CONSTANT NUMBER := 1.0;
16167 
16168   CURSOR fa_line_csr(p_cle_id IN NUMBER) IS
16169   SELECT cle.id,
16170          cle.dnz_chr_id
16171   FROM   OKC_K_LINES_B cle,
16172          OKC_LINE_STYLES_B lse
16173   WHERE  cle.cle_id = p_cle_id
16174   AND    cle.lse_id = lse.id
16175   AND    lse.lty_code = 'FIXED_ASSET'
16176 --Bug Fix# 2744213 - 2761799
16177 --  should not check for effectivity on sysdate
16178 --  AND    trunc(nvl(start_date,sysdate)) <= trunc(sysdate)
16179 --  AND    trunc(nvl(end_date,sysdate+1)) > trunc(sysdate)
16180  --Bug# 5946411: ER
16181  --commented the status as it should consider all kind of contract
16182  -- AND    cle.sts_code = 'BOOKED';
16183  ;
16184   --Bug# 5946411: ER end
16185 
16186   l_txlv_rec  txlv_rec_type;
16187   l_txdv_tbl  txdv_tbl_type;
16188 
16189   l_no_data_found BOOLEAN DEFAULT TRUE;
16190   l_fa_line_id    NUMBER;
16191   l_chr_id        OKC_K_LINES_B.dnz_chr_id%TYPE;
16192 
16193 i NUMBER;
16194 
16195 --Bug #2723498: 11.5.9 Split Asset by serial Number enhancement
16196 CURSOR srl_num_csr1 (PTalid IN NUMBER) IS
16197 SELECT COUNT(iti.serial_number)
16198 FROM   okl_txl_itm_insts iti
16199 WHERE  iti.tal_id = PTalid
16200 AND    tal_type   = 'ALI'
16201 AND    NVL(selected_for_split_flag,'N') = 'Y';
16202 
16203 
16204 CURSOR srl_num_csr2 (PTalId IN NUMBER,
16205                      PTxdId IN NUMBER) IS
16206 SELECT COUNT(iti.serial_number)
16207 FROM   okl_txl_itm_insts iti
16208 WHERE  iti.tal_id = PTalId
16209 AND    iti.asd_id = PTxdId
16210 AND    tal_type   = 'ALI'
16211 AND    NVL(selected_for_split_flag,'N') = 'Y';
16212 
16213 l_serial_count NUMBER;
16214 
16215 --cursor for asset_number
16216 CURSOR asset_num_csr (P_fin_ast_id IN NUMBER) IS
16217 SELECT name
16218 FROM   okc_k_lines_tl
16219 WHERE  id = p_fin_ast_id;
16220 
16221 l_asset_number OKC_K_LINES_TL.NAME%TYPE;
16222 
16223 --cursor to fetch serial number control code
16224 CURSOR srl_ctrl_csr (PInvItmId       IN NUMBER,
16225                      P_fin_ast_id    IN NUMBER) IS
16226 SELECT mtl.serial_number_control_code
16227 FROM   mtl_system_items     mtl,
16228        okc_k_headers_b      CHR,
16229        okc_k_lines_b        cle
16230 WHERE  mtl.inventory_item_id = PInvItmId
16231 AND    mtl.organization_id   = CHR.INV_ORGANIZATION_ID
16232 AND    CHR.id                = cle.chr_id
16233 AND    cle.id                = P_fin_ast_id;
16234 
16235 
16236 l_srl_control_code    mtl_system_items.serial_number_control_code%TYPE;
16237 
16238 l_serialized          VARCHAR2(1) DEFAULT OKL_API.G_FALSE;
16239 
16240   --Bug# 5946411: ER
16241     CURSOR c_get_sts_code(p_chr_id NUMBER)
16242     IS
16243     SELECT st.ste_code
16244     FROM OKC_K_HEADERS_V chr,
16245          okc_statuses_b st
16246     WHERE chr.id = p_chr_id
16247     and st.code = chr.sts_code;
16248    lv_sts_code               OKC_K_HEADERS_V.STS_CODE%TYPE;
16249     --Bug# 5946411: ER end
16250     /*
16251     -- mvasudev, 08/23/2004
16252     -- Added PROCEDURE to enable Business Event
16253     */
16254            CURSOR l_cle_tas_csr
16255            IS
16256            SELECT cleb.dnz_chr_id,
16257                   tasb.date_trans_occurred
16258            FROM   okl_trx_assets tasb
16259                  ,okl_txl_assets_b txlb
16260                  ,okc_k_lines_b cleb
16261                          ,okc_line_styles_b lseb
16262            WHERE txlb.tas_id = tasb.id
16263            AND cleb.id = txlb.kle_id
16264            AND cleb.cle_id = p_cle_id
16265            AND cleb.lse_id = lseb.id
16266            AND lseb.lty_Code = 'FIXED_ASSET'
16267            AND tasb.tsu_code = 'ENTERED';
16268 
16269            l_dnz_chr_id NUMBER;
16270            l_trx_date DATE;
16271 
16272         PROCEDURE raise_business_event
16273         (p_dnz_chr_id IN NUMBER,
16274          p_trx_date IN DATE,
16275          x_return_status OUT NOCOPY VARCHAR2
16276         )
16277         IS
16278 
16279 
16280       l_parameter_list           wf_parameter_list_t;
16281         BEGIN
16282           x_return_status := OKL_API.G_RET_STS_SUCCESS;
16283 
16284                  wf_event.AddParameterToList(G_WF_ITM_CONTRACT_ID,l_dnz_chr_id,l_parameter_list);
16285                  wf_event.AddParameterToList(G_WF_ITM_ASSET_ID,p_cle_id,l_parameter_list);
16286                  wf_event.AddParameterToList(G_WF_ITM_TRANS_DATE,fnd_date.date_to_canonical(l_trx_date),l_parameter_list);
16287 
16288          OKL_WF_PVT.raise_event (p_api_version    => p_api_version,
16289                                  p_init_msg_list  => p_init_msg_list,
16290                                                                  x_return_status  => x_return_status,
16291                                                                  x_msg_count      => x_msg_count,
16292                                                                  x_msg_data       => x_msg_data,
16293                                                                  p_event_name     => G_WF_EVT_KHR_SPLIT_ASSET_COMP,
16294                                                                  p_parameters     => l_parameter_list);
16295 
16296 
16297      EXCEPTION
16298      WHEN OTHERS THEN
16299        x_return_status := OKL_API.G_RET_STS_UNEXP_ERROR;
16300        RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
16301      END raise_business_event;
16302 
16303     /*
16304     -- mvasudev, 08/23/2004
16305     -- END, PROCEDURE to enable Business Event
16306     */
16307 
16308 BEGIN
16309 
16310   -- Call start_activity to create savepoint, check compatibility
16311   -- and initialize message list
16312   x_return_status := OKL_API.START_ACTIVITY (
16313                                l_api_name
16314                                ,p_init_msg_list
16315                                ,'_PVT'
16316                                ,x_return_status);
16317    -- Check if activity started successfully
16318    IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
16319        RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
16320     ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
16321        RAISE OKL_API.G_EXCEPTION_ERROR;
16322     END IF;
16323 
16324   --Verify cle_id
16325   x_return_status := verify_cle_id(p_cle_id => p_cle_id);
16326   IF x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR THEN
16327         RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
16328   ELSIF x_return_status = OKL_API.G_RET_STS_ERROR THEN
16329         RAISE OKL_API.G_EXCEPTION_ERROR;
16330   END IF;
16331 
16332   --get fixed asset line
16333   OPEN   fa_line_csr(p_cle_id => p_cle_id) ;
16334   FETCH  fa_line_csr INTO l_fa_line_id, l_chr_id;
16335   IF fa_line_csr%NOTFOUND THEN
16336        NULL; --not exactly
16337        OKL_API.set_message(p_app_name     => G_APP_NAME,
16338                            p_msg_name     => G_INACTIVE_ASSET
16339                            );
16340         RAISE OKL_API.G_EXCEPTION_ERROR;
16341   ELSE
16342       /*
16343       -- mvasudev, 10/28/2004
16344       -- Fetch parameters for Business Event enabling
16345       */
16346          FOR l_cle_tas_rec IN l_cle_tas_csr
16347          LOOP
16348           l_dnz_chr_id := l_cle_tas_rec.dnz_chr_id;
16349           l_trx_date := l_cle_tas_rec.date_trans_occurred;
16350          END LOOP;
16351       /*
16352       -- mvasudev, 10/28/2004
16353       -- END, Fetch parameters for Business Event enabling
16354       */
16355 
16356       l_txlv_rec := get_txlv_rec(l_fa_line_id, l_no_data_found);
16357       IF l_no_data_found THEN
16358           NULL;
16359           --dbms_output.put_line('No pending Split Asset Transactions FOR this Asset');
16360           OKL_API.set_message(p_app_name     => G_APP_NAME,
16361                               p_msg_name     => G_SPLIT_AST_TRX_NOT_FOUND
16362                               );
16363           RAISE OKL_API.G_EXCEPTION_ERROR;
16364       ELSE
16365           --dbms_output.put_line('txlv id FOR FETCH OF txd '|| to_char(l_txlv_rec.id));
16366           l_txdv_tbl := get_trx_details (
16367                                          p_tal_id  => l_txlv_rec.id,
16368                                          x_no_data_found => l_no_data_found
16369                                          );
16370           IF l_no_data_found THEN
16371               NULL;
16372               --dbms_output.put_line('NO_DATA_FOUND FOR trx detail');
16373               OKL_API.set_message(p_app_name     => G_APP_NAME,
16374                                   p_msg_name     => G_SPLIT_AST_TRX_NOT_FOUND
16375                                  );
16376               RAISE OKL_API.G_EXCEPTION_ERROR;
16377 
16378           ELSE
16379 
16380             --Bug #2723498 : 11.5.9 Split by serial numbers validation
16381             --1. validate for split into units
16382 
16383             IF NVL(l_txlv_rec.SPLIT_INTO_SINGLES_FLAG,'N') = 'N' AND
16384                NVL(l_txlv_rec.split_into_units,0) <> 0 THEN
16385                l_serialized := OKL_API.G_FALSE;
16386                l_serialized := Is_Serialized(p_cle_id => p_cle_id);
16387                IF (l_serialized = OKL_API.G_TRUE) THEN
16388                    OPEN  srl_num_csr1 (PTalid => l_txlv_rec.id);
16389                    FETCH srl_num_csr1 INTO l_serial_count;
16390                    IF srl_num_csr1%NOTFOUND THEN
16391                        NULL; --it is count cursor so should not happen
16392                    END IF;
16393                    CLOSE srl_num_csr1;
16394 
16395                    IF (l_serial_Count <> NVL(l_txlv_rec.split_into_units,0)) THEN
16396                        --Inventory item for asset is serialized. Please select split_into_units
16397                        --serial nubers to split.
16398                         l_asset_number := NULL;
16399                         OPEN asset_num_csr(p_fin_ast_id => p_cle_id);
16400                         FETCH asset_num_csr INTO l_asset_number;
16401                         IF asset_num_csr%NOTFOUND THEN
16402                             NULL;
16403                         END IF;
16404                         CLOSE asset_num_csr;
16405 
16406                        OKL_API.set_message(p_app_name     => G_APP_NAME,
16407                                            p_msg_name     => G_SPLIT_SERIAL_NOT_FOUND,
16408                                            p_token1       => G_ASSET_NUMBER_TOKEN,
16409                                            p_token1_value => l_asset_number,
16410                                            p_token2       => G_SPLIT_UNITS_TOKEN,
16411                                            p_token2_value => TO_CHAR(l_txlv_rec.split_into_units)
16412                                           );
16413                        --raise exception
16414                        RAISE OKL_API.G_EXCEPTION_ERROR;
16415                    END IF;
16416                END IF;
16417             END IF;
16418 
16419             --2. validate for split asset into components
16420             IF NVL(l_txlv_rec.SPLIT_INTO_SINGLES_FLAG,'N') = 'X' THEN
16421                 IF l_txdv_tbl.COUNT > 0 THEN
16422                     FOR i IN 1..l_txdv_tbl.COUNT
16423                     LOOP
16424                         l_serial_count := 0;
16425                         OPEN srl_ctrl_csr (PInvItmId       => l_txdv_tbl(i).inventory_item_id,
16426                                            P_fin_ast_id    => p_cle_id);
16427                         FETCH  srl_ctrl_csr
16428                         INTO   l_srl_control_code;
16429                         IF srl_ctrl_csr%NOTFOUND THEN
16430                            NULL; -- will not happen
16431                         END IF;
16432                         CLOSE srl_ctrl_csr;
16433 
16434 
16435                         IF NVL(l_srl_control_code,0) IN (2,5,6) THEN
16436                             --is serialized
16437                             --Bug fix #2744213 : invalid cursor
16438                             --slr_num_csr1 was being checked after opening srl_num_csr2
16439                             OPEN srl_num_csr2(PTalId => l_txlv_rec.id,
16440                                               PTxdId => l_txdv_tbl(i).id);
16441                             FETCH srl_num_csr2 INTO l_serial_count;
16442                             IF srl_num_csr2%NOTFOUND THEN
16443                                 NULL; --it is count cursor so should not happen
16444                             END IF;
16445                             CLOSE srl_num_csr2;
16446 
16447                             IF  (l_serial_count <> l_txdv_tbl(i).quantity) THEN
16448                                 --Inventory item for asset is serialized. Please select split_into_units
16449                                 --serial nubers to split.
16450 
16451                                 OKL_API.set_message(p_app_name     => G_APP_NAME,
16452                                                     p_msg_name     => G_SPLIT_SERIAL_NOT_FOUND,
16453                                                     p_token1       => G_ASSET_NUMBER_TOKEN,
16454                                                     p_token1_value => l_txdv_tbl(i).Asset_Number,
16455                                                     p_token2       => G_SPLIT_UNITS_TOKEN,
16456                                                     p_token2_value => TO_CHAR(l_txdv_tbl(i).quantity)
16457                                                    );
16458                                 --raise exception
16459                                 RAISE OKL_API.G_EXCEPTION_ERROR;
16460                             END IF;
16461                         END IF;
16462                     END LOOP; -- txdv_tbl
16463                  END IF;-- txdv_tb.count > 0
16464              END IF;
16465             --Bug #2723498 : 11.5.9 Split by serial numbers validation End
16466 
16467             --Bug# 5946411: ER
16468             -- Get the sts code since we can version only active contract
16469             -- Required to perform split for the Expired contract
16470             OPEN  c_get_sts_code(l_chr_id);
16471             FETCH c_get_sts_code INTO lv_sts_code;
16472             CLOSE c_get_sts_code;
16473             --Bug# 5946411: ER End
16474             IF NVL(lv_sts_code,'X') = 'ACTIVE' THEN
16475             --version contract
16476             version_contract(
16477                              x_return_status => x_return_status,
16478                              x_msg_count     => x_msg_count,
16479                              x_msg_data      => x_msg_data,
16480                              p_chr_id        => l_chr_id
16481                              );
16482             IF x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR THEN
16483                 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
16484             ELSIF x_return_status = OKL_API.G_RET_STS_ERROR THEN
16485                 RAISE OKL_API.G_EXCEPTION_ERROR;
16486             END IF;
16487             END IF; --Bug# 5946411: ER
16488 
16489             --Call split asset for transactions to be processed
16490             Split_Fixed_Asset(p_api_version   => p_api_version,
16491                                 p_init_msg_list => p_init_msg_list,
16492                                 x_return_status => x_return_status,
16493                                 x_msg_count     => x_msg_count,
16494                                 x_msg_data      => x_msg_data,
16495                                 p_txdv_tbl      => l_txdv_tbl,
16496                                 p_txlv_rec      => l_txlv_rec,
16497                                 x_cle_tbl       => x_cle_tbl,
16498                                 --Bug# 6344223
16499                                 p_source_call   => p_source_call);
16500 
16501               IF x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR THEN
16502                   RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
16503               ELSIF x_return_status = OKL_API.G_RET_STS_ERROR THEN
16504                   RAISE OKL_API.G_EXCEPTION_ERROR;
16505               END IF;
16506            END IF;
16507       END IF;
16508   END IF;
16509 
16510      /*
16511    -- mvasudev, 08/23/2004
16512    -- Code change to enable Business Event
16513    */
16514         raise_business_event(p_dnz_chr_id => l_dnz_chr_id,
16515                              p_trx_date => l_trx_date,
16516                              x_return_status => x_return_status);
16517     IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
16518        RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
16519     ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
16520        RAISE OKL_API.G_EXCEPTION_ERROR;
16521     END IF;
16522 
16523    /*
16524    -- mvasudev, 08/23/2004
16525    -- END, Code change to enable Business Event
16526    */
16527 
16528    OKL_API.END_ACTIVITY (x_msg_count,
16529                           x_msg_data );
16530 
16531     EXCEPTION
16532     WHEN OKL_API.G_EXCEPTION_ERROR THEN
16533     x_return_status := OKL_API.HANDLE_EXCEPTIONS(
16534                                l_api_name,
16535                                G_PKG_NAME,
16536                                'OKL_API.G_RET_STS_ERROR',
16537                                x_msg_count,
16538                                x_msg_data,
16539                                '_PVT');
16540     WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
16541     x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
16542                               l_api_name,
16543                               G_PKG_NAME,
16544                               'OKL_API.G_RET_STS_UNEXP_ERROR',
16545                               x_msg_count,
16546                               x_msg_data,
16547                               '_PVT');
16548     WHEN OTHERS THEN
16549     x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
16550                               l_api_name,
16551                               G_PKG_NAME,
16552                               'OTHERS',
16553                               x_msg_count,
16554                               x_msg_data,
16555                               '_PVT');
16556 
16557 END Split_Fixed_Asset;
16558 --------------------------------------------------------------------------------
16559 --Start of Comments
16560 --Procedure Name  : Cancel_Split_Asset_Trs
16561 --Description     : Marks the split asset transaction as cancelled
16562 --History        :
16563 --                 03-Sep-2002  ashish.singh Created
16564 --End of Comments
16565 --------------------------------------------------------------------------------
16566 PROCEDURE Cancel_Split_Asset_Trs
16567                            (p_api_version   IN  NUMBER,
16568                             p_init_msg_list IN  VARCHAR2 DEFAULT OKL_API.G_FALSE,
16569                             x_return_status OUT NOCOPY   VARCHAR2,
16570                             x_msg_count     OUT NOCOPY   NUMBER,
16571                             x_msg_data      OUT NOCOPY   VARCHAR2,
16572                             p_cle_id        IN  NUMBER) IS
16573 
16574  l_return_status        VARCHAR2(1)  DEFAULT OKL_API.G_RET_STS_SUCCESS;
16575  l_api_name             CONSTANT VARCHAR2(30) := 'CANCEL_SPLIT_ASSET_TRS';
16576  l_api_version          CONSTANT NUMBER := 1.0;
16577 
16578   --Cursor to get the fixed Asset Line Id
16579   CURSOR l_fixedasst_csr (p_finasst_line IN NUMBER) IS
16580   SELECT cle.id        fixedasst_line
16581   FROM   OKC_K_LINES_B cle,
16582          OKC_LINE_STYLES_B lse
16583   WHERE  cle.cle_id   = p_finasst_line
16584   AND    cle.lse_id   = lse.id
16585   AND    lse.lty_code = 'FIXED_ASSET';
16586 
16587   l_fixedasst_line  OKC_K_LINES_B.ID%TYPE;
16588 
16589   --Cursor to find kle_id split transaction lines to be cancelled..
16590   CURSOR l_tal_csr(p_fixedasst_line IN NUMBER) IS
16591   SELECT tal.id       tal_id,
16592          tas.id       tas_id
16593   FROM   OKL_TRX_ASSETS   TAS,
16594          OKL_TXL_ASSETS_B TAL
16595   WHERE  tas.id  = tal.tas_id
16596   AND    tas.tsu_code = 'ENTERED'
16597   AND    tas.tas_type = 'ALI'
16598   AND    tal.tal_type = 'ALI'
16599   AND    tal.kle_id   = p_fixedasst_line;
16600 
16601   l_tas_id    OKL_TRX_ASSETS.ID%TYPE;
16602   l_tal_id    OKL_TXL_ASSETS_B.ID%TYPE;
16603   l_cle_id    OKC_K_LINES_B.ID%TYPE;
16604 
16605   l_tasv_rec   okl_trx_assets_pub.thpv_rec_type;
16606   lx_tasv_rec  okl_trx_assets_pub.thpv_rec_type;
16607 
16608 BEGIN
16609     -- Call start_activity to create savepoint, check compatibility
16610     -- and initialize message list
16611     x_return_status := OKL_API.START_ACTIVITY (
16612                                l_api_name
16613                                ,p_init_msg_list
16614                                ,'_PVT'
16615                                ,x_return_status);
16616      -- Check if activity started successfully
16617      IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
16618          RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
16619      ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
16620          RAISE OKL_API.G_EXCEPTION_ERROR;
16621      END IF;
16622 
16623     l_cle_id := p_cle_id;
16624     --1.Verify p_cle_id
16625     x_return_status := verify_cle_id(p_cle_id => l_cle_id);
16626     IF x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR THEN
16627         RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
16628     ELSIF x_return_status = OKL_API.G_RET_STS_ERROR THEN
16629         RAISE OKL_API.G_EXCEPTION_ERROR;
16630     END IF;
16631 
16632     -- get fixedasset line id
16633     OPEN l_fixedasst_csr(p_finasst_line => l_cle_id);
16634     FETCH l_fixedasst_csr INTO l_fixedasst_line;
16635     IF l_fixedasst_csr%NOTFOUND THEN
16636         NULL;
16637     ELSE
16638         OPEN l_tal_csr(p_fixedasst_line => l_fixedasst_line);
16639         FETCH l_tal_csr INTO l_tal_id, l_tas_id;
16640         IF l_tal_csr%NOTFOUND THEN
16641            OKL_API.set_message(p_app_name     => G_APP_NAME,
16642                                p_msg_name     => G_SPLIT_AST_TRX_NOT_FOUND
16643                               );
16644           RAISE OKL_API.G_EXCEPTION_ERROR;
16645         ELSE
16646             --update the transaction status to cancelled
16647             l_tasv_rec.id       := l_tas_id;
16648             l_tasv_rec.tsu_code := 'CANCELED';
16649             --update split transaction header
16650             OKL_TRX_ASSETS_PUB.update_trx_ass_h_def(
16651              p_api_version     => p_api_version,
16652              p_init_msg_list   => p_init_msg_list,
16653              x_return_status   => x_return_status,
16654              x_msg_count       => x_msg_count,
16655              x_msg_data        => x_msg_data,
16656              p_thpv_rec        => l_tasv_rec,
16657              x_thpv_rec        => lx_tasv_rec);
16658 
16659             IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
16660                 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
16661             ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
16662                 RAISE OKL_API.G_EXCEPTION_ERROR;
16663             END IF;
16664         END IF;
16665         CLOSE l_tal_csr;
16666     END IF; --l_fixedasst_csr%NOTFOUND
16667     CLOSE l_fixedasst_csr;
16668     OKL_API.END_ACTIVITY (x_msg_count,
16669                           x_msg_data );
16670     EXCEPTION
16671     WHEN OKL_API.G_EXCEPTION_ERROR THEN
16672     x_return_status := OKL_API.HANDLE_EXCEPTIONS(
16673                                l_api_name,
16674                                G_PKG_NAME,
16675                                'OKL_API.G_RET_STS_ERROR',
16676                                x_msg_count,
16677                                x_msg_data,
16678                                '_PVT');
16679     WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
16680     x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
16681                               l_api_name,
16682                               G_PKG_NAME,
16683                               'OKL_API.G_RET_STS_UNEXP_ERROR',
16684                               x_msg_count,
16685                               x_msg_data,
16686                               '_PVT');
16687     WHEN OTHERS THEN
16688     x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
16689                               l_api_name,
16690                               G_PKG_NAME,
16691                               'OTHERS',
16692                               x_msg_count,
16693                               x_msg_data,
16694                               '_PVT');
16695 END Cancel_Split_Asset_Trs;
16696 Procedure check_ser_num_checked(x_return_status OUT NOCOPY VARCHAR2,
16697                             x_msg_count     OUT NOCOPY NUMBER,
16698                             x_msg_data      OUT NOCOPY VARCHAR2,
16699                             p_cle_id        IN  NUMBER) is
16700 
16701  l_return_status        VARCHAR2(1)  DEFAULT OKL_API.G_RET_STS_SUCCESS;
16702  l_api_name             CONSTANT VARCHAR2(30) := 'CHECK_SER_NUM_CHECKED';
16703  l_api_version          CONSTANT NUMBER := 1.0;
16704 
16705   CURSOR fa_line_csr(p_cle_id IN NUMBER) IS
16706   SELECT cle.id,
16707          cle.dnz_chr_id
16708   FROM   OKC_K_LINES_B cle,
16709          OKC_LINE_STYLES_B lse
16710   WHERE  cle.cle_id = p_cle_id
16711   AND    cle.lse_id = lse.id
16712   AND    lse.lty_code = 'FIXED_ASSET';
16713 
16714   l_txlv_rec  txlv_rec_type;
16715   l_txdv_tbl  txdv_tbl_type;
16716 
16717   l_no_data_found BOOLEAN DEFAULT TRUE;
16718   l_fa_line_id    NUMBER;
16719   l_chr_id        OKC_K_LINES_B.dnz_chr_id%TYPE;
16720 
16721 i NUMBER;
16722 
16723 CURSOR srl_num_csr1 (PTalid IN NUMBER) IS
16724 SELECT COUNT(iti.serial_number)
16725 FROM   okl_txl_itm_insts iti
16726 WHERE  iti.tal_id = PTalid
16727 AND    tal_type   = 'ALI'
16728 AND    NVL(selected_for_split_flag,'N') = 'Y';
16729 
16730 l_serial_count NUMBER;
16731 
16732 --cursor for asset_number
16733 CURSOR asset_num_csr (P_fin_ast_id IN NUMBER) IS
16734 SELECT name
16735 FROM   okc_k_lines_tl
16736 WHERE  id = p_fin_ast_id;
16737 
16738 l_asset_number OKC_K_LINES_TL.NAME%TYPE;
16739 
16740 BEGIN
16741 
16742 --  dbms_output.put_line('start');
16743   -- Call start_activity to create savepoint, check compatibility
16744   -- and initialize message list
16745   x_return_status := OKL_API.START_ACTIVITY (
16746                                l_api_name
16747                                ,OKL_API.G_FALSE
16748                                ,'_PVT'
16749                                ,x_return_status);
16750    -- Check if activity started successfully
16751    IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
16752        RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
16753     ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
16754        RAISE OKL_API.G_EXCEPTION_ERROR;
16755     END IF;
16756 --  dbms_output.put_line('ebd activity');
16757   --Verify cle_id
16758   x_return_status := verify_cle_id(p_cle_id => p_cle_id);
16759 --  dbms_output.put_line('x_return_status after verify : ' || x_return_status);
16760   IF x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR THEN
16761         RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
16762   ELSIF x_return_status = OKL_API.G_RET_STS_ERROR THEN
16763         RAISE OKL_API.G_EXCEPTION_ERROR;
16764   END IF;
16765 
16766 --  dbms_output.put_line('b4 fa_line_csr');
16767   --get fixed asset line
16768   OPEN   fa_line_csr(p_cle_id => p_cle_id) ;
16769   FETCH  fa_line_csr INTO l_fa_line_id, l_chr_id;
16770   IF fa_line_csr%NOTFOUND THEN
16771        NULL; --not exactly
16772        OKL_API.set_message(p_app_name     => G_APP_NAME,
16773                            p_msg_name     => G_INACTIVE_ASSET
16774                            );
16775         RAISE OKL_API.G_EXCEPTION_ERROR;
16776   ELSE
16777       l_txlv_rec := get_txlv_rec(l_fa_line_id, l_no_data_found);
16778       IF l_no_data_found THEN
16779           NULL;
16780           OKL_API.set_message(p_app_name     => G_APP_NAME,
16781                               p_msg_name     => G_SPLIT_AST_TRX_NOT_FOUND
16782                               );
16783           RAISE OKL_API.G_EXCEPTION_ERROR;
16784       ELSE
16785           l_txdv_tbl := get_trx_details (
16786                                          p_tal_id  => l_txlv_rec.id,
16787                                          x_no_data_found => l_no_data_found
16788                                          );
16789           IF l_no_data_found THEN
16790               NULL;
16791               OKL_API.set_message(p_app_name     => G_APP_NAME,
16792                                   p_msg_name     => G_SPLIT_AST_TRX_NOT_FOUND
16793                                  );
16794               RAISE OKL_API.G_EXCEPTION_ERROR;
16795 
16796           ELSE
16797             IF NVL(l_txlv_rec.SPLIT_INTO_SINGLES_FLAG,'N') = 'N' AND
16798                NVL(l_txlv_rec.split_into_units,0) <> 0 THEN
16799 --                   dbms_output.put_line('b4 srl_num_csr1:' || l_serial_count);
16800                    OPEN  srl_num_csr1 (PTalid => l_txlv_rec.id);
16801                    FETCH srl_num_csr1 INTO l_serial_count;
16802                    IF srl_num_csr1%NOTFOUND THEN
16803                        NULL; --it is count cursor so should not happen
16804                    END IF;
16805                    CLOSE srl_num_csr1;
16806                    IF (l_serial_Count <> NVL(l_txlv_rec.split_into_units,0))
16807 THEN
16808                    --Inventory item for asset is serialized. Please select
16809                        --serial nubers to split.
16810                         l_asset_number := NULL;
16811 --                        dbms_output.put_line('b4 asset_num_csr:');
16812                         OPEN asset_num_csr(p_fin_ast_id => p_cle_id);
16813                         FETCH asset_num_csr INTO l_asset_number;
16814                         IF asset_num_csr%NOTFOUND THEN
16815                             NULL;
16816                         END IF;
16817                         CLOSE asset_num_csr;
16818 --                        dbms_output.put_line('after asset_num_csr:');
16819                        OKL_API.set_message(p_app_name     => G_APP_NAME,
16820                                            p_msg_name     =>
16821 G_SPLIT_SERIAL_NOT_FOUND,
16822                                            p_token1       =>
16823 G_ASSET_NUMBER_TOKEN,
16824                                            p_token1_value => l_asset_number,
16825                                            p_token2       =>
16826 G_SPLIT_UNITS_TOKEN,
16827                                            p_token2_value =>
16828 TO_CHAR(l_txlv_rec.split_into_units)
16829                                           );
16830                        --raise exception
16831                        RAISE OKL_API.G_EXCEPTION_ERROR;
16832                    END IF;
16833             END IF;
16834         END IF;
16835       END IF;
16836     END IF;
16837     exception
16838     WHEN OKL_API.G_EXCEPTION_ERROR THEN
16839     x_return_status := OKL_API.HANDLE_EXCEPTIONS(
16840                                l_api_name,
16841                                G_PKG_NAME,
16842                                'OKL_API.G_RET_STS_ERROR',
16843                                x_msg_count,
16844                                x_msg_data,
16845                                '_PVT');
16846     WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
16847     x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
16848                               l_api_name,
16849                               G_PKG_NAME,
16850                               'OKL_API.G_RET_STS_UNEXP_ERROR',
16851                               x_msg_count,
16852                               x_msg_data,
16853                               '_PVT');
16854     WHEN OTHERS THEN
16855     x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
16856                               l_api_name,
16857                               G_PKG_NAME,
16858                               'OTHERS',
16859                               x_msg_count,
16860                               x_msg_data,
16861                               '_PVT');
16862 end check_ser_num_checked;
16863 END Okl_Split_Asset_Pvt;