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.61.12010000.7 2009/01/12 23:04:20 apaul ship $ */
3 --------------------------------------------------------------------------------
4 --GLOBAL VARIBLES
5 --------------------------------------------------------------------------------
6 G_FIN_AST_LTY_CODE           CONSTANT VARCHAR2(30) := 'FREE_FORM1';
7 --------------------------------------------------------------------------------
8 -- GLOBAL MESSAGE CONSTANTS
9 --------------------------------------------------------------------------------
10   G_FND_APP                     CONSTANT  VARCHAR2(200) := OKL_API.G_FND_APP;
11   G_APP_NAME                    CONSTANT  VARCHAR2(3)   := OKL_API.G_APP_NAME;
12   G_UNEXPECTED_ERROR            CONSTANT  VARCHAR2(200) := 'OKL_CONTRACTS_UNEXPECTED_ERROR';
13   G_COL_NAME_TOKEN              CONSTANT  VARCHAR2(200) := OKL_API.G_COL_NAME_TOKEN;
14   G_PARENT_TABLE_TOKEN          CONSTANT  VARCHAR2(200) := OKL_API.G_PARENT_TABLE_TOKEN;
15   G_CHILD_TABLE_TOKEN           CONSTANT  VARCHAR2(200) := OKL_API.G_CHILD_TABLE_TOKEN;
16   G_SQLERRM_TOKEN               CONSTANT  VARCHAR2(200) := 'SQLerrm';
17   G_SQLCODE_TOKEN               CONSTANT  VARCHAR2(200) := 'SQLcode';
18   -- Bug# 4542290 - smadhava - Added - Start
19   G_METHOD  CONSTANT VARCHAR2(200) := 'METHOD';
20   -- Bug# 4542290 - smadhava - Added - End
21 --------------------------------------------------------------------------------
22 -- GLOBAL OKL MESSAGES
23 --------------------------------------------------------------------------------
24 G_INVALID_TOP_LINE             CONSTANT VARCHAR2(200) := 'OKL_LLA_LINE_STYLE';
25 G_TOP_LINE_STYLE               CONSTANT VARCHAR2(30)  := 'TLS';
26 G_SPLIT_ASSET_NOT_FOUND        CONSTANT VARCHAR2(200) := 'OKL_LLA_SPLIT_ASSET_NOT_FOUND';
27 G_SPLIT_AST_TRX_NOT_FOUND      CONSTANT VARCHAR2(200) := 'OKL_LLA_SPLIT_AST_TRX';
28 G_SPLIT_PARENT_NUMBER_CHANGE   CONSTANT VARCHAR2(200) := 'OKL_LLA_SPLIT_PARENT_NUMBER';
29 G_LTY_CODE_NOT_FOUND           CONSTANT VARCHAR2(200) := 'OKL_LLA_SPLIT_PARENT_NUMBER';
30 G_NO_DATA_FOUND                CONSTANT VARCHAR2(200) := 'OKL_NO_DATA_FOUND';
31 G_INACTIVE_ASSET               CONSTANT VARCHAR2(200) := 'OKL_LLA_INACTIVE_ASSET';
32 G_SPLIT_ASSET_TRX              CONSTANT VARCHAR2(200) := 'OKL_LLA_PEND_SPLT_AST_TRX';
33 G_SPLIT_AST_COMP_TRX           CONSTANT VARCHAR2(200) := 'OKL_LLA_PEND_SPLT_COMP_TRX';
34 G_ASSET_REQUIRED               CONSTANT VARCHAR2(200) := 'OKL_LLA_ASSET_REQUIRED';
35 G_DUPLICATE_ASSET              CONSTANT VARCHAR2(200) := 'OKL_LLA_ASSET_NUMBER';
36 G_ASSET_LENGTH                 CONSTANT VARCHAR2(200) := 'OKL_LLA_AST_LEN';
37 G_NOT_UNIQUE                   CONSTANT VARCHAR2(30)  := 'OKL_LLA_NOT_UNIQUE';
38 G_SINGLE_UNIT_ASSET            CONSTANT VARCHAR2(200) := 'OKL_LLA_SINGLE_UNIT_SPLIT';
39 -- Bug# 4542290 - smadhava - Added - Start
40 G_RRB_SPLIT_ASSET_NOT_ALLWD    CONSTANT VARCHAR2(200) := 'OKL_LLA_RRB_SPLIT_NOT_ALLWD';
41 -- Bug# 4542290 - smadhava - Added - End
42 --------------------------------------------------------------------------------
43 -- GLOBAL EXCEPTION
44 --------------------------------------------------------------------------------
45   G_EXCEPTION_HALT_VALIDATION             EXCEPTION;
46   G_EXCEPTION_STOP_VALIDATION             EXCEPTION;
47   G_API_TYPE                    CONSTANT  VARCHAR2(4) := '_PVT';
48   G_API_VERSION                 CONSTANT  NUMBER := 1.0;
49   G_SCOPE                       CONSTANT  VARCHAR2(4) := '_PVT';
50 
51  -- GLOBAL VARIABLES
52 --------------------------------------------------------------------------------
53   G_PKG_NAME                    CONSTANT  VARCHAR2(200) := 'OKL_SPLIT_ASSET_PVT';
54   G_TRY_NAME                              OKL_TRX_TYPES_V.NAME%TYPE       := 'Split Asset';
55   G_TRY_TYPE                              OKL_TRX_TYPES_V.TRY_TYPE%TYPE   := 'TIE';
56 --------------------------------------------------------------------------------
57 --Globals for csi item instance
58 --------------------------------------------------------------------------------
59 G_IB_TXN_TYPE_NOT_FOUND     CONSTANT VARCHAR2(200) := 'OKL_LLA_IB_TXN_TYPE_NOT_FOUND';
60 G_TXN_TYPE_TOKEN            CONSTANT VARCHAR2(30)  := 'TXN_TYPE';
61 G_ITM_INST_PARTY            CONSTANT VARCHAR2(30)  := 'LESSEE';
62 G_CONTRACT_INTENT           CONSTANT VARCHAR2(1)   := 'S';
63 G_PARTY_SRC_TABLE           CONSTANT VARCHAR2(30)  := 'HZ_PARTIES';
64 G_PARTY_RELATIONSHIP        CONSTANT VARCHAR2(30)  := 'OWNER';
65 G_PARTY_NOT_FOUND           CONSTANT VARCHAR2(200) := 'OKL_LLA_PARTY_NOT_FOUND';
66 G_ROLE_CODE_TOKEN           CONSTANT VARCHAR2(30)  := 'RLE_CODE';
67 G_CUST_ACCT_RULE            CONSTANT VARCHAR2(30)  := 'CAN';
68 G_CUST_ACCT_RULE_GROUP      CONSTANT VARCHAR2(30)  := 'LACAN';
69 G_CONTRACT_ID_TOKEN         CONSTANT VARCHAR2(200) := 'CONTRACT_ID';
70 G_IB_SPLIT_TXN_TYPE         CONSTANT VARCHAR2(30)  := 'OKL_SPLITA';
71 G_CUST_ACCOUNT_FOUND        CONSTANT VARCHAR2(200) := 'OKL_LLA_CUST_ACCT_NOT_FOUND';
72 --------------------------------------------------------------------------------
73 --Bug#2723498 : 11.5.9 Enhancement Split asset by serial numbers message constants
74 --------------------------------------------------------------------------------
75 G_IB_INSTANCE_MISMATCH        CONSTANT VARCHAR2(200) := 'OKL_LLA_SPA_INSTANCE_MISMATCH';
76 G_IB_LINE_TOKEN               CONSTANT VARCHAR2(200) := 'IB_LINE_ID';
77 G_ASSET_NUMBER_TOKEN          CONSTANT VARCHAR2(200) := 'ASSET_NUMBER';
78 G_SPLIT_SERIAL_NOT_FOUND      CONSTANT VARCHAR2(200) := 'OKL_LLA_SPA_SERIAL_NOT_FOUND';
79 G_SPLIT_UNITS_TOKEN           CONSTANT VARCHAR2(200) := 'SPLIT_UNITS';
80 G_SRL_NUM_DUPLICATE           CONSTANT VARCHAR2(200) := 'OKL_LLA_SERIAL_NUM_DUP';
81 G_NO_MATCHING_RECORD          CONSTANT VARCHAR2(200) := 'OKL_LLA_NO_MATCHING_RECORD';
82 G_ASSET_NOT_SERIALIZED        CONSTANT VARCHAR2(200) := 'OKL_LLA_SPA_NOT_SERIALIZED';
83 --Bug Fix # 2881114
84 G_ASSET_LINKED_TO_SERVICE     CONSTANT VARCHAR2(200) := 'OKL_LLA_SPA_SERVICE_LINKED';
85 --Bug# : 11.5.10
86 G_FORMULA_OEC                           OKL_FORMULAE_V.NAME%TYPE := 'LINE_OEC';
87 G_FORMULA_CAP                           OKL_FORMULAE_V.NAME%TYPE := 'LINE_CAP_AMNT';
88 G_FORMULA_RES                           OKL_FORMULAE_V.NAME%TYPE := 'LINE_RESIDUAL_VALUE';
89 --Bug# 3222804 : serial number control by leasing inv org setups
90 G_SERIALIZED_IN_IB            CONSTANT VARCHAR2(200) := 'OKL_SERIAL_CONTROL_MISMATCH';
91 G_NOT_SERIALIZED_IN_IB        CONSTANT VARCHAR2(200) := 'OKL_SERIAL_CONTROL_MISMATCH_2';
92 G_SERIAL_NUMBER_MISMATCH      CONSTANT VARCHAR2(200) := 'OKL_SERIAL_NUMBER_MISMATCH';
93 
94 --Bug# 3156924 :
95  G_LLA_MISSING_TRX_DATE     CONSTANT VARCHAR2(200) := 'OKL_LLA_MISSING_TRX_DATE';
96  G_LLA_WRONG_TRX_DATE       CONSTANT VARCHAR2(200) := 'OKL_LLA_WRONG_TRX_DATE';
97  G_LLA_REV_ONLY_BOOKED      CONSTANT VARCHAR2(200) := 'OKL_LLA_REV_ONLY_BOOKED';
98  G_LLA_INVALID_DATE_FORMAT  CONSTANT VARCHAR2(200) := 'OKL_LLA_INVALID_DATE_FORMAT';
99 
100 --BUG# 3569441
101   G_INVALID_INSTALL_LOC_TYPE CONSTANT VARCHAR2(200) := 'OKL_INVALID_INSTALL_LOC_TYPE';
102   G_LOCATION_TYPE_TOKEN      CONSTANT VARCHAR2(30)  := 'LOCATION_TYPE';
103   G_LOC_TYPE1_TOKEN          CONSTANT VARCHAR2(30)  := 'LOCATION_TYPE1';
104   G_LOC_TYPE2_TOKEN          CONSTANT VARCHAR2(30)  := 'LOCATION_TYPE2';
105 
106   G_MISSING_USAGE            CONSTANT VARCHAR2(200) := 'OKL_INSTALL_LOC_MISSING_USAGE';
107   G_USAGE_TYPE_TOKEN         CONSTANT VARCHAR2(30)  := 'USAGE_TYPE';
108   G_ADDRESS_TOKEN            CONSTANT VARCHAR2(30)  := 'ADDRESS';
109   G_INSTANCE_NUMBER_TOKEN    CONSTANT VARCHAR2(30)  := 'INSTANCE_NUMBER';
110 --END BUG# 3569441
111 
112    /*
113    -- mvasudev, 08/23/2004
114    -- Added Constants to enable Business Event
115    */
116    G_WF_EVT_KHR_SPLIT_ASSET_REQ  CONSTANT VARCHAR2(64) := 'oracle.apps.okl.la.lease_contract.split_asset_by_units_requested';
117    G_WF_EVT_KHR_SPLIT_ASSET_COMP CONSTANT VARCHAR2(64) := 'oracle.apps.okl.la.lease_contract.split_asset_by_units_completed';
118 
119    G_WF_ITM_CONTRACT_ID CONSTANT VARCHAR2(20)  := 'CONTRACT_ID';
120    G_WF_ITM_ASSET_ID CONSTANT VARCHAR2(10)  := 'ASSET_ID';
121    G_WF_ITM_TRANS_DATE CONSTANT VARCHAR2(20)    := 'TRANSACTION_DATE';
122    -- Bug# 4542290 - smadhava - Added - Start
123    G_RRB_ESTIMATED CONSTANT OKL_PQY_VALUES_V.VALUE%TYPE := 'ESTIMATED_AND_BILLED';
124    G_RRB_ACTUAL     CONSTANT OKL_PQY_VALUES_V.VALUE%TYPE := 'ACTUAL';
125   -- Bug# 4542290 - smadhava - Added - End
126 
127 --Bug# 6612475 Start
128 ------------------------------------------------------------------------------
129 --Bug # 6612475
130 --API Name    : Validate_Split_Request
131 --Description : This will validate the split asset request parameters
132 --              and will be called from Create_Split_Transaction
133 -- History    :
134 --              07-May-2008   avsingh   Creation
135 --
136 -- End of Comments
137 -----------------------------------------------------------------------------
138   Procedure Validate_Split_Request
139      (p_api_version    IN  NUMBER
140      ,p_init_msg_list  IN  VARCHAR2
141      ,x_return_status  OUT NOCOPY VARCHAR2
142      ,x_msg_count      OUT NOCOPY NUMBER
143      ,x_msg_data       OUT NOCOPY VARCHAR2
144      ,p_cle_id         IN  NUMBER
145      ,p_split_into_individuals_yn IN VARCHAR2
146      ,p_split_into_units IN NUMBER
147      ,p_revision_date    IN DATE
148      ) IS
149 
150   l_api_name             CONSTANT VARCHAR2(30) := 'VALIDATE_SPLIT_REQUEST';
151   l_valid_asset_flag     VARCHAR2(1);
152 
153   cursor l_cle_csr (p_cle_id in number) is
154   select 'Y'
155   from   okc_k_lines_b cleb
156   where  id = p_cle_id
157   and    lse_id = 33;
158 
159   l_return_status VARCHAR2(1) := OKL_API.G_RET_STS_SUCCESS;
160 
161   Begin
162       x_return_status := OKL_API.G_RET_STS_SUCCESS;
163       -- Call start_activity to create savepoint, check compatibility
164       -- and initialize message list
165       x_return_status := OKL_API.START_ACTIVITY (
166                                l_api_name
167                                ,p_init_msg_list
168                                ,'_PVT'
169                                ,x_return_status);
170       -- Check if activity started successfully
171       IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
172          RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
173       ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
174          RAISE OKL_API.G_EXCEPTION_ERROR;
175       END IF;
176       --1. Validate Revision Date
177       IF p_revision_date is NULL or p_revision_date = OKL_API.G_MISS_DATE Then
178           OKL_API.SET_MESSAGE(p_app_name => g_app_name,
179                               p_msg_name => 'OKL_LP_REQUIRED_VALUE',
180                               p_token1   => 'COLUMN_PROMPT',
181                               p_token1_value => 'Revision Date'
182                              );
183           l_return_status := OKL_API.G_RET_STS_ERROR;
184       END IF;
185       --2. Validate the Asset Id
186       If nvl(p_cle_id, OKL_API.G_MISS_NUM) = OKL_API.G_MISS_NUM then
187           --Asset Number to split is andatory
188           OKL_API.SET_MESSAGE(p_app_name => g_app_name,
189                               p_msg_name => 'OKL_LP_REQUIRED_VALUE',
190                               p_token1   => 'COLUMN_PROMPT',
191                               p_token1_value => 'Asset'
192                              );
193            l_return_status := OKL_API.G_RET_STS_ERROR;
194       ElsIf nvl(p_cle_id,OKL_API.G_MISS_NUM) <> OKL_API.G_MISS_NUM then
195           --find out whether the asset number provided is valid
196           l_valid_asset_flag := 'N';
197           Open l_cle_csr(p_cle_id => p_cle_id);
198           Fetch l_cle_csr into l_valid_asset_flag;
199           Close l_cle_csr;
200           If l_valid_asset_flag = 'N' Then
201               OKL_API.SET_MESSAGE(p_app_name     => g_app_name,
202                               p_msg_name     => 'OKL_LLA_NO_DATA_FOUND',
203                               p_token1       => 'COL_NAME',
204                               p_token1_value => 'Asset'
205                              );
206                l_return_status := OKL_API.G_RET_STS_ERROR;
207           End If;
208       End If;
209       --3. validate units to split
210       If (
211            (nvl(p_split_into_individuals_yn, OKL_API.G_MISS_CHAR) =
212             OKL_API.G_MISS_CHAR
213            ) OR (p_split_into_individuals_yn = 'N')
214          )  AND
215         nvl(p_split_into_units, OKL_API.G_MISS_NUM) = OKL_API.G_MISS_NUM Then
216           OKL_API.SET_MESSAGE(p_app_name     => g_app_name,
217                               p_msg_name     => 'OKL_LLA_INVALID_SPLIT_OPTION',
218                               p_token1       => 'COL_NAME1',
219                               p_token1_value => 'Split Into Single Units',
220                               p_token2       => 'COL_NAME2',
221                               p_token2_value => 'Number of Units'
222                              );
223            l_return_status := OKL_API.G_RET_STS_ERROR;
224       ElsIf nvl(p_split_into_units, OKL_API.G_MISS_NUM) <> OKL_API.G_MISS_NUM
225       Then
226           If nvl(p_split_into_units, OKL_API.G_MISS_NUM) <= 0 Then
227               OKL_API.SET_MESSAGE(p_app_name     => g_app_name,
228                                   p_msg_name     => 'OKL_AM_REQ_FIELD_POS_ERR',
229                                   p_token1       => 'PROMPT',
230                                   p_token1_value => 'Number of Units'
231                                  );
232               l_return_status := OKL_API.G_RET_STS_ERROR;
233            End If;
234       End IF;
235 
236       x_return_status := l_return_status;
237 
238       --Call end Activity
239       OKL_API.END_ACTIVITY(x_msg_count, x_msg_data);
240   EXCEPTION
241     WHEN OKL_API.G_EXCEPTION_ERROR Then
242       x_return_status :=OKL_API.HANDLE_EXCEPTIONS
243       (
244       l_api_name,
245       G_PKG_NAME,
246       'OKL_API.G_RET_STS_ERROR',
247       x_msg_count,
248       x_msg_data,
249       '_PVT'
250       );
251     WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
252       x_return_status :=OKL_API.HANDLE_EXCEPTIONS
253       (
254       l_api_name,
255       G_PKG_NAME,
256       'OKL_API.G_RET_STS_UNEXP_ERROR',
257       x_msg_count,
258       x_msg_data,
259       '_PVT'
260       );
261     WHEN OTHERS THEN
262       x_return_status :=OKL_API.HANDLE_EXCEPTIONS
263       (
264       l_api_name,
265       G_PKG_NAME,
266       'OTHERS',
267       x_msg_count,
268       x_msg_data,
269       '_PVT'
270       );
271   End  Validate_Split_Request;
272 --Bug# 6612475 End;
273 
274 
275 --Bug# 6344223
276 ------------------------------------------------------------------------------
277 --Bug# 6344223
278 --API Name    : get_split_round_amount
279 --Description : API to adjust the amounts which are not evenly divisible such
280 --		that the remainder is allocated to either the child asset
281 --		holding the same asset number as the parent asset or the asset
282 --		with the largest percentage of cost (when splitting into
283 --		components).
284 --History     :
285 --              09-Aug-2007    rirawat  Creation
286 --End of Comments
287 ------------------------------------------------------------------------------
288 PROCEDURE get_split_round_amount(
289      p_api_version    IN  NUMBER
290     ,p_init_msg_list  IN  VARCHAR2
291     ,x_return_status  OUT NOCOPY VARCHAR2
292     ,x_msg_count      OUT NOCOPY NUMBER
293     ,x_msg_data       OUT NOCOPY VARCHAR2
294     ,p_txl_id             IN NUMBER
295     ,p_split_factor       IN NUMBER
296     ,p_klev_rec           IN  klev_rec_type
297     ,p_clev_rec           IN clev_rec_type
298     ,x_klev_rec           OUT NOCOPY klev_rec_type
299     ,x_clev_rec           OUT NOCOPY clev_rec_type
300 ) IS
301 
302    l_return_status        VARCHAR2(1)  DEFAULT OKL_API.G_RET_STS_SUCCESS;
303    l_api_name             CONSTANT VARCHAR2(30) := 'get_split_round_amount';
304    l_api_version          CONSTANT NUMBER := 1.0;
305 
306    --Fix Bug# 2727161
307    CURSOR curr_hdr_csr (p_chr_id OKC_K_HEADERS_B.ID%TYPE) IS
308    SELECT currency_code
309    FROM   okc_k_headers_b
310    WHERE  id = p_chr_id;
311 
312    CURSOR curr_ln_csr (p_line_id OKC_K_HEADERS_B.ID%TYPE) IS
313    SELECT h.currency_code
314    FROM   okc_k_headers_b h,
315           okc_k_lines_b l
316    WHERE  h.id = l.dnz_chr_id
317    AND    l.id = p_line_id;
318 
319    l_conv_amount   NUMBER;
320    l_currency_code OKC_K_LINES_B.CURRENCY_CODE%TYPE;
321 
322 
323 CURSOR l_txd_csr(p_trxline_id IN NUMBER) IS
324       SELECT txd.id,
325            txd.split_percent,
326            txl.kle_id,
327            txd.target_kle_id,
328            txd.quantity,
329            txl.current_units
330     FROM   okl_txd_assets_b  txd,
331            okl_txl_Assets_b  txl
332     WHERE  txl.tal_type  = 'ALI'
333     AND    txd.tal_id    = txl.id
334     AND    txl.id        = p_trxline_id
335     --Bug# 6898798 start
336     ORDER BY nvl(txd.split_percent,-1);
337     --Bug# 6898798 end
338 
339 
340 l_child_split_factor NUMBER :=0;
341 
342 l_klev_rec_sum        klev_rec_type;
343 l_klev_rec_out     klev_rec_type;
344 l_clev_rec_sum         clev_rec_type;
345 l_clev_rec_out     clev_rec_type;
346 
347 l_klev_rec        klev_rec_type;
348 l_clev_rec         clev_rec_type;
349 l_split_by_unit varchar2(1):='N' ;
350 
351 FUNCTION round_amount(
352    p_currency_code      IN VARCHAR2
353   ,p_amount             IN NUMBER
354 ) RETURN NUMBER
355 IS
356 l_round_amount NUMBER;
357 BEGIN
358    l_round_amount:=p_amount;
359 
360    IF (p_amount IS NOT NULL
361          AND
362          p_amount <> OKL_API.G_MISS_NUM) THEN
363 
364          l_round_amount := NULL;
365 
366          l_round_amount := okl_accounting_util.cross_currency_round_amount(
367                                           p_amount        => p_amount,
368                                           p_currency_code => p_currency_code
369                                          );
370     END IF;
371  RETURN l_round_amount;
372 
373 EXCEPTION
374     WHEN OTHERS THEN
375       OKL_API.Set_Message(p_app_name      => OKL_API.G_APP_NAME,
376                           p_msg_name      => 'OKL_UNEXPECTED_ERROR',
377                           p_token1        => 'OKL_SQLCODE',
378                           p_token1_value  => SQLCODE,
379                           p_token2        => 'OKL_SQLERRM',
380                           p_token2_value  => SQLERRM);
381 
382      RETURN NULL;
383 END;
384 
385 
386 BEGIN
387     -- Call start_activity to create savepoint, check compatibility
388     -- and initialize message list
389     x_return_status := OKL_API.START_ACTIVITY (
390                                  l_api_name
391                                  ,p_init_msg_list
392                                  ,'_PVT'
393                                  ,x_return_status);
394       -- Check if activity started successfully
395     IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
396         RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
397     ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
398         RAISE OKL_API.G_EXCEPTION_ERROR;
399     END IF;
400 
401      l_currency_code := '?';
402      OPEN curr_hdr_csr (p_clev_rec.dnz_chr_id);
403      FETCH curr_hdr_csr INTO l_currency_code;
404      CLOSE curr_hdr_csr;
405 
406     IF (l_currency_code = '?') THEN
407          --
408          -- Get currency_code
409          -- Using line_id
410          --
411         OPEN curr_ln_csr (p_clev_rec.id);
412         FETCH curr_ln_csr INTO l_currency_code;
413         CLOSE curr_ln_csr;
414     END IF;
415 
416     IF (l_currency_code = '?') THEN -- Fatal error, Not a valid currency_code
417        RAISE OKL_API.G_EXCEPTION_ERROR;
418     END IF;
419 
420     l_klev_rec_out:=p_klev_rec;
421     l_clev_rec_out:=p_clev_rec;
422 
423     --Initialize
424     l_klev_rec_sum.ESTIMATED_OEC :=0;
425     l_klev_rec_sum.LAO_AMOUNT :=0;
426     l_klev_rec_sum.CAPITAL_REDUCTION :=0;
427     l_klev_rec_sum.FEE_CHARGE    :=0;
428     l_klev_rec_sum.INITIAL_DIRECT_COST :=0;
429     l_klev_rec_sum.AMOUNT_STAKE :=0;
430     l_klev_rec_sum.LRV_AMOUNT :=0;
431     l_klev_rec_sum.COVERAGE :=0;
432     l_klev_rec_sum.VENDOR_ADVANCE_PAID :=0;
433     l_klev_rec_sum.TRADEIN_AMOUNT :=0;
434     l_klev_rec_sum.BOND_EQUIVALENT_YIELD :=0;
435     l_klev_rec_sum.TERMINATION_PURCHASE_AMOUNT :=0;
436     l_klev_rec_sum.REFINANCE_AMOUNT :=0;
437     l_klev_rec_sum.REMARKETED_AMOUNT :=0;
438     l_klev_rec_sum.REMARKET_MARGIN :=0;
439     l_klev_rec_sum.REPURCHASED_AMOUNT :=0;
440     l_klev_rec_sum.RESIDUAL_VALUE :=0;
441     l_klev_rec_sum.APPRAISAL_VALUE :=0;
442     l_klev_rec_sum.GAIN_LOSS :=0;
443     l_klev_rec_sum.FLOOR_AMOUNT :=0;
444     l_klev_rec_sum.TRACKED_RESIDUAL :=0;
445     l_klev_rec_sum.AMOUNT :=0;
446     l_klev_rec_sum.OEC :=0;
447     l_klev_rec_sum.CAPITAL_AMOUNT :=0;
448     l_klev_rec_sum.RESIDUAL_GRNTY_AMOUNT :=0;
449     l_klev_rec_sum.RVI_PREMIUM :=0;
450     l_klev_rec_sum.CAPITALIZED_INTEREST :=0;
451     l_klev_rec_sum.SUBSIDY_OVERRIDE_AMOUNT :=0;
452     l_klev_rec_sum.Expected_Asset_Cost :=0;
453 
454     l_clev_rec_sum.price_unit:=0;
455     l_clev_rec_sum.price_negotiated:=0;
456     l_clev_rec_sum.price_negotiated_renewed:=0;
457 
458 
459   for l_txd_rec in l_txd_csr(p_txl_id)
460    loop
461     if nvl(l_txd_rec.split_percent,0) in (0,okl_api.g_miss_num) then
462       l_child_split_factor := l_txd_rec.quantity/l_txd_rec.current_units;
463       l_split_by_unit:='Y';
464     else
465       l_child_split_factor := l_txd_rec.split_percent/100;
466        l_split_by_unit:='N';
467     end if;
468 
469     l_klev_rec_sum.ESTIMATED_OEC := l_klev_rec_sum.ESTIMATED_OEC +
470                                 round_amount(l_currency_code,l_child_split_factor * p_klev_rec.ESTIMATED_OEC);
471     l_klev_rec_sum.LAO_AMOUNT    := l_klev_rec_sum.LAO_AMOUNT+
472                                   round_amount(l_currency_code,l_child_split_factor * p_klev_rec.LAO_AMOUNT);
473     l_klev_rec_sum.CAPITAL_REDUCTION := l_klev_rec_sum.CAPITAL_REDUCTION
474                                     + round_amount(l_currency_code,l_child_split_factor * p_klev_rec.CAPITAL_REDUCTION);
475     l_klev_rec_sum.FEE_CHARGE    := l_klev_rec_sum.FEE_CHARGE
476                                     + round_amount(l_currency_code,l_child_split_factor * p_klev_rec.FEE_CHARGE);
477     l_klev_rec_sum.INITIAL_DIRECT_COST := l_klev_rec_sum.INITIAL_DIRECT_COST
478                                     + round_amount(l_currency_code,l_child_split_factor * p_klev_rec.INITIAL_DIRECT_COST);
479     l_klev_rec_sum.AMOUNT_STAKE := l_klev_rec_sum.AMOUNT_STAKE
480                                     + round_amount(l_currency_code,l_child_split_factor * p_klev_rec.AMOUNT_STAKE);
481     l_klev_rec_sum.LRV_AMOUNT := l_klev_rec_sum.LRV_AMOUNT
482                                     + round_amount(l_currency_code,l_child_split_factor * p_klev_rec.LRV_AMOUNT);
483     l_klev_rec_sum.COVERAGE := l_klev_rec_sum.COVERAGE
484                                     + round_amount(l_currency_code,l_child_split_factor * p_klev_rec.COVERAGE);
485     l_klev_rec_sum.VENDOR_ADVANCE_PAID := l_klev_rec_sum.VENDOR_ADVANCE_PAID
486                                     + round_amount(l_currency_code,l_child_split_factor * p_klev_rec.VENDOR_ADVANCE_PAID);
487     l_klev_rec_sum.TRADEIN_AMOUNT := l_klev_rec_sum.TRADEIN_AMOUNT
488                                     + round_amount(l_currency_code,l_child_split_factor * p_klev_rec.TRADEIN_AMOUNT);
489     l_klev_rec_sum.BOND_EQUIVALENT_YIELD := l_klev_rec_sum.BOND_EQUIVALENT_YIELD
490                                     + round_amount(l_currency_code,l_child_split_factor * p_klev_rec.BOND_EQUIVALENT_YIELD);
491     l_klev_rec_sum.TERMINATION_PURCHASE_AMOUNT := l_klev_rec_sum.TERMINATION_PURCHASE_AMOUNT
492                                     + round_amount(l_currency_code,l_child_split_factor * p_klev_rec.TERMINATION_PURCHASE_AMOUNT);
493     l_klev_rec_sum.REFINANCE_AMOUNT := l_klev_rec_sum.REFINANCE_AMOUNT
494                                     + round_amount(l_currency_code,l_child_split_factor * p_klev_rec.REFINANCE_AMOUNT);
495     l_klev_rec_sum.REMARKETED_AMOUNT := l_klev_rec_sum.REMARKETED_AMOUNT
496                                     + round_amount(l_currency_code,l_child_split_factor * p_klev_rec.REMARKETED_AMOUNT);
497     l_klev_rec_sum.REMARKET_MARGIN := l_klev_rec_sum.REMARKET_MARGIN
498                                     + round_amount(l_currency_code,l_child_split_factor * p_klev_rec.REMARKET_MARGIN);
499     l_klev_rec_sum.REPURCHASED_AMOUNT := l_klev_rec_sum.REPURCHASED_AMOUNT
500                                     + round_amount(l_currency_code,l_child_split_factor * p_klev_rec.REPURCHASED_AMOUNT);
501     l_klev_rec_sum.RESIDUAL_VALUE := l_klev_rec_sum.RESIDUAL_VALUE
502                                     + round_amount(l_currency_code,l_child_split_factor * p_klev_rec.RESIDUAL_VALUE);
503     l_klev_rec_sum.APPRAISAL_VALUE := l_klev_rec_sum.APPRAISAL_VALUE
504                                     + round_amount(l_currency_code,l_child_split_factor * p_klev_rec.APPRAISAL_VALUE);
505     l_klev_rec_sum.GAIN_LOSS := l_klev_rec_sum.GAIN_LOSS
506                                     + round_amount(l_currency_code,l_child_split_factor * p_klev_rec.GAIN_LOSS);
507     l_klev_rec_sum.FLOOR_AMOUNT := l_klev_rec_sum.FLOOR_AMOUNT
508                                     + round_amount(l_currency_code,l_child_split_factor * p_klev_rec.FLOOR_AMOUNT);
509     l_klev_rec_sum.TRACKED_RESIDUAL := l_klev_rec_sum.TRACKED_RESIDUAL
510                                     + round_amount(l_currency_code,l_child_split_factor * p_klev_rec.TRACKED_RESIDUAL);
511     l_klev_rec_sum.AMOUNT := l_klev_rec_sum.AMOUNT
512                                     + round_amount(l_currency_code,l_child_split_factor * p_klev_rec.AMOUNT);
513     l_klev_rec_sum.OEC := l_klev_rec_sum.OEC
514                                     + round_amount(l_currency_code,l_child_split_factor * p_klev_rec.OEC);
515     l_klev_rec_sum.CAPITAL_AMOUNT := l_klev_rec_sum.CAPITAL_AMOUNT
516                                     + round_amount(l_currency_code,l_child_split_factor * p_klev_rec.CAPITAL_AMOUNT);
517     l_klev_rec_sum.RESIDUAL_GRNTY_AMOUNT := l_klev_rec_sum.RESIDUAL_GRNTY_AMOUNT
518                                     + round_amount(l_currency_code,l_child_split_factor * p_klev_rec.RESIDUAL_GRNTY_AMOUNT);
519     l_klev_rec_sum.RVI_PREMIUM := l_klev_rec_sum.RVI_PREMIUM
520                                     + round_amount(l_currency_code,l_child_split_factor * p_klev_rec.RVI_PREMIUM);
521     l_klev_rec_sum.CAPITALIZED_INTEREST := l_klev_rec_sum.CAPITALIZED_INTEREST
522                                     + round_amount(l_currency_code,l_child_split_factor * p_klev_rec.CAPITALIZED_INTEREST);
523     l_klev_rec_sum.SUBSIDY_OVERRIDE_AMOUNT := l_klev_rec_sum.SUBSIDY_OVERRIDE_AMOUNT
524                                     + round_amount(l_currency_code,l_child_split_factor * p_klev_rec.SUBSIDY_OVERRIDE_AMOUNT);
525     l_klev_rec_sum.Expected_Asset_Cost := l_klev_rec_sum.Expected_Asset_Cost
526                                     + round_amount(l_currency_code,l_child_split_factor * p_klev_rec.Expected_Asset_Cost);
527     l_clev_rec_sum.price_unit      := l_clev_rec_sum.price_unit
528                                      + round_amount(l_currency_code,l_child_split_factor * p_clev_rec.price_unit);
529     l_clev_rec_sum.price_negotiated := l_clev_rec_sum.price_negotiated
530                             + round_amount(l_currency_code,l_child_split_factor * p_clev_rec.price_negotiated);
531     l_clev_rec_sum.price_negotiated_renewed := l_clev_rec_sum.price_negotiated_renewed
532                             + round_amount(l_currency_code,l_child_split_factor * p_clev_rec.price_negotiated_renewed);
533 
534    end loop;
535 
536     --Bug# 6788253: Replaced l_child_split_factor with p_split_factor in below code that calculates split values
537     --              for the asset line to which rounding differences are applied.
538 
539     IF l_split_by_unit ='N' THEN
540       --unit price to be changed in split by component only
541        l_clev_rec_out.price_unit := round_amount(l_currency_code,p_split_factor * p_clev_rec.price_unit )
542                                        + (p_clev_rec.price_unit - l_clev_rec_sum.price_unit);
543        l_clev_rec_out.price_negotiated := round_amount(l_currency_code,p_split_factor * p_clev_rec.price_negotiated )
544                                        + (p_clev_rec.price_negotiated - l_clev_rec_sum.price_negotiated);
545        l_clev_rec_out.price_negotiated_renewed :=
546                                     round_amount(l_currency_code,p_split_factor * p_clev_rec.price_negotiated_renewed )
547                                      + (p_clev_rec.price_negotiated_renewed - l_clev_rec_sum.price_negotiated_renewed);
548     END IF;
549 
550 
551    l_klev_rec_out.LAO_AMOUNT := round_amount(l_currency_code,p_split_factor * p_klev_rec.LAO_AMOUNT )
552 				  +  p_klev_rec.LAO_AMOUNT - l_klev_rec_sum.LAO_AMOUNT;
553    l_klev_rec_out.ESTIMATED_OEC := round_amount(l_currency_code,p_split_factor * p_klev_rec.ESTIMATED_OEC )
554 				  +  p_klev_rec.ESTIMATED_OEC - l_klev_rec_sum.ESTIMATED_OEC;
555    l_klev_rec_out.CAPITAL_REDUCTION := round_amount(l_currency_code,p_split_factor * p_klev_rec.CAPITAL_REDUCTION )
556 				  +  p_klev_rec.CAPITAL_REDUCTION - l_klev_rec_sum.CAPITAL_REDUCTION;
557    l_klev_rec_out.FEE_CHARGE := round_amount(l_currency_code,p_split_factor * p_klev_rec.FEE_CHARGE )
558 				  +  p_klev_rec.FEE_CHARGE - l_klev_rec_sum.FEE_CHARGE;
559    l_klev_rec_out.INITIAL_DIRECT_COST := round_amount(l_currency_code,p_split_factor * p_klev_rec.INITIAL_DIRECT_COST )
560 				  +  p_klev_rec.INITIAL_DIRECT_COST - l_klev_rec_sum.INITIAL_DIRECT_COST;
561    l_klev_rec_out.AMOUNT_STAKE := round_amount(l_currency_code,p_split_factor * p_klev_rec.AMOUNT_STAKE )
562 				  +  p_klev_rec.AMOUNT_STAKE - l_klev_rec_sum.AMOUNT_STAKE;
563    l_klev_rec_out.LRV_AMOUNT := round_amount(l_currency_code,p_split_factor * p_klev_rec.LRV_AMOUNT )
564 				  +  p_klev_rec.LRV_AMOUNT - l_klev_rec_sum.LRV_AMOUNT;
565    l_klev_rec_out.COVERAGE := round_amount(l_currency_code,p_split_factor * p_klev_rec.COVERAGE )
566 				  +  p_klev_rec.COVERAGE - l_klev_rec_sum.COVERAGE;
567    l_klev_rec_out.VENDOR_ADVANCE_PAID := round_amount(l_currency_code,p_split_factor * p_klev_rec.VENDOR_ADVANCE_PAID )
568 				  +  p_klev_rec.VENDOR_ADVANCE_PAID - l_klev_rec_sum.VENDOR_ADVANCE_PAID;
569    l_klev_rec_out.TRADEIN_AMOUNT := round_amount(l_currency_code,p_split_factor * p_klev_rec.TRADEIN_AMOUNT )
570 				  +  p_klev_rec.TRADEIN_AMOUNT - l_klev_rec_sum.TRADEIN_AMOUNT;
571    l_klev_rec_out.BOND_EQUIVALENT_YIELD := round_amount(l_currency_code,p_split_factor * p_klev_rec.BOND_EQUIVALENT_YIELD )
572 				  +  p_klev_rec.BOND_EQUIVALENT_YIELD - l_klev_rec_sum.BOND_EQUIVALENT_YIELD;
573    l_klev_rec_out.TERMINATION_PURCHASE_AMOUNT := round_amount(l_currency_code,p_split_factor * p_klev_rec.TERMINATION_PURCHASE_AMOUNT )
574 				  +  p_klev_rec.TERMINATION_PURCHASE_AMOUNT - l_klev_rec_sum.TERMINATION_PURCHASE_AMOUNT;
575    l_klev_rec_out.REFINANCE_AMOUNT := round_amount(l_currency_code,p_split_factor * p_klev_rec.REFINANCE_AMOUNT )
576 				  +  p_klev_rec.REFINANCE_AMOUNT - l_klev_rec_sum.REFINANCE_AMOUNT;
577    l_klev_rec_out.REMARKETED_AMOUNT := round_amount(l_currency_code,p_split_factor * p_klev_rec.REMARKETED_AMOUNT )
578 				  +  p_klev_rec.REMARKETED_AMOUNT - l_klev_rec_sum.REMARKETED_AMOUNT;
579    l_klev_rec_out.REMARKET_MARGIN := round_amount(l_currency_code,p_split_factor * p_klev_rec.REMARKET_MARGIN )
580 				  +  p_klev_rec.REMARKET_MARGIN - l_klev_rec_sum.REMARKET_MARGIN;
581    l_klev_rec_out.REPURCHASED_AMOUNT := round_amount(l_currency_code,p_split_factor * p_klev_rec.REPURCHASED_AMOUNT )
582 				  +  p_klev_rec.REPURCHASED_AMOUNT - l_klev_rec_sum.REPURCHASED_AMOUNT;
583    l_klev_rec_out.RESIDUAL_VALUE := round_amount(l_currency_code,p_split_factor * p_klev_rec.RESIDUAL_VALUE )
584 				  +  p_klev_rec.RESIDUAL_VALUE - l_klev_rec_sum.RESIDUAL_VALUE;
585    l_klev_rec_out.APPRAISAL_VALUE := round_amount(l_currency_code,p_split_factor * p_klev_rec.APPRAISAL_VALUE )
586 				  +  p_klev_rec.APPRAISAL_VALUE - l_klev_rec_sum.APPRAISAL_VALUE;
587    l_klev_rec_out.GAIN_LOSS := round_amount(l_currency_code,p_split_factor * p_klev_rec.GAIN_LOSS )
588 				  +  p_klev_rec.GAIN_LOSS - l_klev_rec_sum.GAIN_LOSS;
589    l_klev_rec_out.FLOOR_AMOUNT := round_amount(l_currency_code,p_split_factor * p_klev_rec.FLOOR_AMOUNT )
590 				  +  p_klev_rec.FLOOR_AMOUNT - l_klev_rec_sum.FLOOR_AMOUNT;
591    l_klev_rec_out.TRACKED_RESIDUAL := round_amount(l_currency_code,p_split_factor * p_klev_rec.TRACKED_RESIDUAL )
592 				  +  p_klev_rec.TRACKED_RESIDUAL - l_klev_rec_sum.TRACKED_RESIDUAL;
593    l_klev_rec_out.AMOUNT := round_amount(l_currency_code,p_split_factor * p_klev_rec.AMOUNT )
594 				  +  p_klev_rec.AMOUNT - l_klev_rec_sum.AMOUNT;
595    l_klev_rec_out.OEC := round_amount(l_currency_code,p_split_factor * p_klev_rec.OEC )
596 				  +  p_klev_rec.OEC - l_klev_rec_sum.OEC;
597    l_klev_rec_out.CAPITAL_AMOUNT := round_amount(l_currency_code,p_split_factor * p_klev_rec.CAPITAL_AMOUNT )
598 				  +  p_klev_rec.CAPITAL_AMOUNT - l_klev_rec_sum.CAPITAL_AMOUNT;
599    l_klev_rec_out.RESIDUAL_GRNTY_AMOUNT := round_amount(l_currency_code,p_split_factor * p_klev_rec.RESIDUAL_GRNTY_AMOUNT )
600 				  +  p_klev_rec.RESIDUAL_GRNTY_AMOUNT - l_klev_rec_sum.RESIDUAL_GRNTY_AMOUNT;
601    l_klev_rec_out.RVI_PREMIUM := round_amount(l_currency_code,p_split_factor * p_klev_rec.RVI_PREMIUM )
602 				  +  p_klev_rec.RVI_PREMIUM - l_klev_rec_sum.RVI_PREMIUM;
603    l_klev_rec_out.CAPITALIZED_INTEREST := round_amount(l_currency_code,p_split_factor * p_klev_rec.CAPITALIZED_INTEREST )
604 				  +  p_klev_rec.CAPITALIZED_INTEREST - l_klev_rec_sum.CAPITALIZED_INTEREST;
605    l_klev_rec_out.SUBSIDY_OVERRIDE_AMOUNT := round_amount(l_currency_code,p_split_factor * p_klev_rec.SUBSIDY_OVERRIDE_AMOUNT )
606 				  +  p_klev_rec.SUBSIDY_OVERRIDE_AMOUNT - l_klev_rec_sum.SUBSIDY_OVERRIDE_AMOUNT;
607    l_klev_rec_out.Expected_Asset_Cost := round_amount(l_currency_code,p_split_factor * p_klev_rec.Expected_Asset_Cost )
608 				  +  p_klev_rec.Expected_Asset_Cost - l_klev_rec_sum.Expected_Asset_Cost;
609 
610    x_klev_rec:=l_klev_rec_out;
611    x_clev_rec:=l_clev_rec_out;
612 
613    OKL_API.END_ACTIVITY (x_msg_count, x_msg_data);
614 
615 EXCEPTION
616 
617       WHEN OKL_API.G_EXCEPTION_ERROR THEN
618       l_return_status := OKL_API.HANDLE_EXCEPTIONS(
619                                l_api_name,
620                                G_PKG_NAME,
621                                'OKL_API.G_RET_STS_ERROR',
622                                x_msg_count,
623                                x_msg_data,
624                                '_PVT');
625      WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
626       l_return_status :=OKL_API.HANDLE_EXCEPTIONS(
627                               l_api_name,
628                               G_PKG_NAME,
629                               'OKL_API.G_RET_STS_UNEXP_ERROR',
630                               x_msg_count,
631                               x_msg_data,
632                               '_PVT');
633      WHEN OTHERS THEN
634       l_return_status :=OKL_API.HANDLE_EXCEPTIONS(
635                               l_api_name,
636                               G_PKG_NAME,
637                               'OTHERS',
638                               x_msg_count,
639                               x_msg_data,
640                               '_PVT');
641 
642 END get_split_round_amount;
643 
644 --Bug# 6344223
645 ------------------------------------------------------------------------------
646 --Bug# 6344223
647 --API Name    : adjust_unit_cost
648 --Description : API to adjust the unit price when payment type is
649 --              PRINCIPAL PAYMENT.
650 --History     :
651 --              25-Jul-2007    rirawat  Creation
652 --End of Comments
653 ------------------------------------------------------------------------------
654 
655 procedure adjust_unit_cost( p_api_version    IN  NUMBER,
656                             p_init_msg_list  IN  VARCHAR2,
657                             x_return_status  OUT NOCOPY VARCHAR2,
658                             x_msg_count      OUT NOCOPY NUMBER,
659                             x_msg_data       OUT NOCOPY VARCHAR2,
660                             p_cle_id NUMBER,
661                             p_txdv_rec       IN  txdv_rec_type,
662                             p_txlv_rec       IN  txlv_rec_type
663 ) IS
664 
665 
666     l_return_status        VARCHAR2(1)  DEFAULT OKL_API.G_RET_STS_SUCCESS;
667     l_api_name             CONSTANT VARCHAR2(30) := 'adjust_unit_cost';
668     l_api_version          CONSTANT NUMBER := 1.0;
669 
670     l_fa_line_id NUMBER;
671     l_chr_id NUMBER;
672     l_tot_principal_payment NUMBER;
673     l_principal_payment_found varchar2(1) := 'N';
674     l_rule_id  number;
675     l_curr_cle_id NUMBER;
676 
677 
678    rec_count   NUMBER;
679    subtype klev_tbl_type is OKL_CONTRACT_PUB.klev_tbl_type;
680    subtype clev_tbl_type is OKL_OKC_MIGRATION_PVT.clev_tbl_type;
681 
682    l_clev_price_tbl   clev_tbl_type;
683    lx_clev_price_tbl  clev_tbl_type;
684    l_klev_price_tbl   klev_tbl_type;
685    lx_klev_price_tbl  klev_tbl_type;
686 
687    CURSOR k_line_curs(p_fa_line_id IN NUMBER) IS
688     SELECT cle.cle_id , sts.ste_code
689     FROM   okc_k_lines_b cle , OKC_STATUSES_B sts
690     WHERE  id = p_fa_line_id
691     and cle.sts_code = sts.code;
692 
693   l_ste_code OKC_STATUSES_B.STE_CODE%TYPE;
694 
695   --cursor to get model and fixed asset lines
696   cursor l_cleb_csr (p_cle_id in number,
697                      p_chr_id in number,
698                      p_lty_code in varchar2) is
699   select cleb.id,
700          cleb.price_unit
701   from   okc_k_lines_b cleb,
702          okc_line_styles_b lseb
703   where  cleb.cle_id      = p_cle_id
704   and    cleb.dnz_chr_id  = p_chr_id
705   and    cleb.lse_id      = lseb.id
706   and    lseb.lty_code    = p_lty_code;
707 
708     l_cleb_rec  l_cleb_csr%ROWTYPE;
709     CURSOR l_pmnt_strm_check(p_chrId NUMBER,
710                              p_cle_id NUMBER
711                              ) IS
712     SELECT crl.id
713     FROM   OKC_RULE_GROUPS_B crg,
714            OKC_RULES_B crl,
715            OKL_STRM_TYPE_B stty
716     WHERE  stty.id = crl.object1_id1
717            AND stty.stream_type_purpose = 'PRINCIPAL_PAYMENT'
718            AND crl.rgp_id = crg.id
719            AND crg.RGD_CODE = 'LALEVL'
720            AND crl.RULE_INFORMATION_CATEGORY = 'LASLH'
721            AND crg.dnz_chr_id = p_chrId
722            and cle_id = p_cle_id;
723 
724   CURSOR l_pmnt_strm_check2(
725                    rgcode OKC_RULE_GROUPS_B.RGD_CODE%TYPE,
726                    rlcat  OKC_RULES_B.RULE_INFORMATION_CATEGORY%TYPE,
727                    pmnt_strm_purpose OKL_STRM_TYPE_B.STREAM_TYPE_PURPOSE%TYPE,
728                    chrId NUMBER) IS
729     SELECT crg.cle_id,
730            crl.id,
731            crl.object1_id1,
732            crl.RULE_INFORMATION1,
733            crl.RULE_INFORMATION2,
734            crl.RULE_INFORMATION3,
735            crl.RULE_INFORMATION4,
736            crl.RULE_INFORMATION5,
737            crl.RULE_INFORMATION6,
738            crl.RULE_INFORMATION10,
739            crl.RULE_INFORMATION11
740     FROM   OKC_RULE_GROUPS_B crg,
741            OKC_RULES_B crl,
742            OKL_STRM_TYPE_B stty
743     WHERE  stty.id = crl.object1_id1
744            AND stty.stream_type_purpose = pmnt_strm_purpose
745            AND crl.rgp_id = crg.id
746            AND crg.RGD_CODE = rgcode
747            AND crl.RULE_INFORMATION_CATEGORY = rlcat
748            AND crg.dnz_chr_id = chrId;
749 
750   l_pmnt_strm_check_rec2 l_pmnt_strm_check2%ROWTYPE;
751 
752     CURSOR l_pmnt_lns_in_hdr(p_id OKC_RULES_B.ID%TYPE,
753                              chrId NUMBER) IS
754     SELECT
755     crl2.object1_id1,
756     crl2.object1_id2,
757     crl2.rule_information2,
758     NVL(crl2.rule_information3,0) rule_information3,
759     crl2.rule_information4,
760     crl2.rule_information5,
761     crl2.rule_information6,
762     crl2.rule_information7,
763     crl2.rule_information8,
764     crl2.rule_information10
765     FROM   OKC_RULES_B crl1, OKC_RULES_B crl2
766     WHERE crl1.id = crl2.object2_id1
767     AND crl1.id = p_id
768     AND crl2.RULE_INFORMATION_CATEGORY = 'LASLL'
769     AND crl1.RULE_INFORMATION_CATEGORY = 'LASLH'
770     AND crl1.dnz_chr_id = chrId
771     AND crl2.dnz_chr_id = chrId
772     ORDER BY crl2.rule_information2 ASC;
773 
774 
775  CURSOR l_pmnt_lns_in_hdr2(p_id OKC_RULES_B.ID%TYPE, chrId NUMBER) IS
776     SELECT
777     crl2.object1_id1,
778     crl2.object1_id2,
779     crl2.rule_information2,
780     NVL(crl2.rule_information3,0) rule_information3,
781     crl2.rule_information4,
782     crl2.rule_information5,
783     crl2.rule_information6,
784     crl2.rule_information7,
785     crl2.rule_information8,
786     crl2.rule_information10
787     FROM   OKC_RULES_B crl1, OKC_RULES_B crl2
788     WHERE crl1.id = crl2.object2_id1
789     AND crl1.id = p_id
790     AND crl2.RULE_INFORMATION_CATEGORY = 'LASLL'
791     AND crl1.RULE_INFORMATION_CATEGORY = 'LASLH'
792     AND crl1.dnz_chr_id = chrId
793     AND crl2.dnz_chr_id = chrId
794     ORDER BY crl2.rule_information2 ASC;
795 
796     l_pmnt_lns_in_hdr_rec2 l_pmnt_lns_in_hdr2%ROWTYPE;
797 
798     cursor l_kleb_csr (p_cle_id in number) IS
799     select CAPITALIZE_DOWN_PAYMENT_YN ,
800            CAPITAL_REDUCTION
801     from  okl_k_lines
802     where id=p_cle_id ;
803 
804     l_kleb_rec  l_kleb_csr%ROWTYPE;
805 
806   l_capitalize_downpayment_yn VARCHAR2(1):='N';
807   l_capital_reduction NUMBER;
808 
809   l_pmnt_strm_check_rec l_pmnt_strm_check%ROWTYPE;
810   l_pmnt_lns_in_hdr_rec l_pmnt_lns_in_hdr%ROWTYPE;
811 
812 
813   l_child_unit_cost       NUMBER;
814   l_child_quantity   NUMBER;
815   l_amort_subsidy_amount NUMBER;
816   l_total_amount NUMBER;
817   l_tot_unsched_prin_payment NUMBER;
818 
819     FUNCTION tot_unsched_prin_payment(
820                                       x_return_status OUT NOCOPY VARCHAR2,
821                                       p_chr_id IN NUMBER,
822                                       p_kle_id IN NUMBER) RETURN NUMBER IS
823     l_tot_amount NUMBER := 0;
824     BEGIN
825      x_return_status := Okl_Api.G_RET_STS_SUCCESS;
826      FOR l_pmnt_strm_check_rec2 IN l_pmnt_strm_check2('LALEVL','LASLH','UNSCHEDULED_PRINCIPAL_PAYMENT', p_chr_id)
827      LOOP
828        IF (l_pmnt_strm_check_rec2.cle_id = p_kle_id) THEN
829          FOR l_pmnt_lns_in_hdr_rec2 IN l_pmnt_lns_in_hdr2(l_pmnt_strm_check_rec2.id ,p_chr_id)
830          LOOP
831            l_tot_amount := l_tot_amount + NVL(l_pmnt_lns_in_hdr_rec2.rule_information8,0);
832          END LOOP;
833        END IF;
834      END LOOP;
835 
836      RETURN(l_tot_amount);
837 
838      EXCEPTION WHEN OTHERS THEN
839        --print('Exception In tot_unsched_prin_payment...sqlcode=' || sqlcode || ' sqlerrm=' || sqlerrm);
840        x_return_status := Okl_Api.G_RET_STS_ERROR;
841        RETURN(0);
842     END; -- tot_unsched_prin_payment
843 
844 
845  begin
846 
847     -- Call start_activity to create savepoint, check compatibility
848     -- and initialize message list
849     x_return_status := OKL_API.START_ACTIVITY (
850                                  l_api_name
851                                  ,p_init_msg_list
852                                  ,'_PVT'
853                                  ,x_return_status);
854       -- Check if activity started successfully
855     IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
856         RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
857     ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
858         RAISE OKL_API.G_EXCEPTION_ERROR;
859     END IF;
860 
861     l_fa_line_id:= p_cle_id;
862     l_chr_id:= p_txlv_rec.dnz_khr_id;
863 
864     OPEN k_line_curs(l_fa_line_id);
865     FETCH k_line_curs INTO l_curr_cle_id,l_ste_code;
866     IF k_line_curs%NOTFOUND THEN
867        NULL;
868     END IF;
869     CLOSE k_line_curs;
870 
871     IF l_ste_code NOT IN ('CANCELLED','TERMINATED','HOLD','EXPIRED') THEN
872 
873     l_tot_principal_payment:=0;
874 
875     --check whether principal payment exists
876 
877     l_principal_payment_found:='Y';
878 
879     OPEN l_pmnt_strm_check(l_chr_id,l_curr_cle_id);
880     FETCH l_pmnt_strm_check into l_rule_id;
881     IF l_pmnt_strm_check%NOTFOUND THEN
882         l_principal_payment_found:='N';
883     ELSE
884         l_principal_payment_found:='Y';
885     END IF;
886     close l_pmnt_strm_check;
887 
888 
889     IF l_principal_payment_found='Y' THEN
890          --get the total principal payment amount
891         FOR l_pmnt_lns_in_hdr_rec IN l_pmnt_lns_in_hdr(l_rule_id ,l_chr_id)
892         LOOP
893           l_tot_principal_payment := l_tot_principal_payment +
894           NVL(l_pmnt_lns_in_hdr_rec.rule_information3,0) * NVL(l_pmnt_lns_in_hdr_rec.rule_information6, 0) +
895           NVL(l_pmnt_lns_in_hdr_rec.rule_information8, 0);
896         END LOOP;
897 
898        ---------get subsidy amount if any--
899         l_amort_subsidy_amount :=0;
900         Okl_Subsidy_Process_Pvt.get_asset_subsidy_amount(
901             p_api_version                  => 1.0,
902             p_init_msg_list                => Okl_Api.G_FALSE,
903             x_return_status                => l_return_status,
904             x_msg_count                    => x_msg_count,
905             x_msg_data                     => x_msg_data,
906             p_asset_cle_id                 => l_curr_cle_id,
907             p_accounting_method            => 'AMORTIZE',
908             x_subsidy_amount               => l_amort_subsidy_amount);
909 
910        l_amort_subsidy_amount:=NVL(l_amort_subsidy_amount,0);
911 
912 
913      -- get capitalized downpayment amount --------
914 
915       l_capital_reduction :=0;
916 
917       open l_kleb_csr(p_cle_id   => l_curr_cle_id);
918       fetch l_kleb_csr into l_kleb_rec;
919       If l_kleb_csr%NOTFOUND THEN
920           l_capital_reduction :=0;
921       Else
922         IF NVL(l_kleb_rec.CAPITALIZE_DOWN_PAYMENT_YN,'X')='Y' THEN
923             l_capital_reduction :=  NVL(l_kleb_rec.CAPITAL_REDUCTION,0);
924         END IF;
925       End if;
926      -----------------------------------
927        --Total Unscheduled Principal Payment
928       l_tot_unsched_prin_payment :=
929                    tot_unsched_prin_payment(l_return_status,
930                                      l_chr_id, l_curr_cle_id);
931 
932       --total amount
933       l_total_amount := l_amort_subsidy_amount + l_tot_principal_payment
934                         +l_capital_reduction + l_tot_unsched_prin_payment ;
935 
936 
937       IF NVL(p_txlv_rec.SPLIT_INTO_SINGLES_FLAG,'X')='Y' THEN
938          l_child_quantity:=1;
939       ELSE
940          l_child_quantity  := p_txdv_rec.quantity;
941       END IF;
942 
943       --evaluate the unit cost
944       l_child_unit_cost := l_total_amount/l_child_quantity ;
945 
946 
947       --Update the contract line with the unit cost
948 
949       rec_count:=0;
950       rec_count                              := rec_count+1;
951       l_clev_price_tbl(rec_count).id         := l_fa_line_id;
952       l_klev_price_tbl(rec_count).id         := l_fa_line_id;
953       l_clev_price_tbl(rec_count).price_unit := l_child_unit_cost;
954 
955       open l_cleb_csr(p_cle_id   => l_curr_cle_id,
956                       p_chr_id   => l_chr_id,
957                       p_lty_code => 'ITEM');
958       fetch l_cleb_csr into l_cleb_rec;
959       If l_cleb_csr%NOTFOUND then
960           Null;
961       Else
962           rec_count                              := rec_count+1;
963           l_clev_price_tbl(rec_count).id         := l_cleb_rec.id;
964           l_klev_price_tbl(rec_count).id         := l_cleb_rec.id;
965           l_clev_price_tbl(rec_count).price_unit := l_child_unit_cost;
966 
967       End If;
968       close l_cleb_csr;
969 
970       --Call api to update line
971      OKL_CONTRACT_PUB.update_contract_line(
972                   p_api_version    => p_api_version,
973                   p_init_msg_list  => p_init_msg_list,
974                   x_return_status  => x_return_status,
975                   x_msg_count      => x_msg_count,
976                   x_msg_data       => x_msg_data,
977                   p_clev_tbl       => l_clev_price_tbl,
978                   p_klev_tbl       => l_klev_price_tbl,
979                   x_clev_tbl       => lx_clev_price_tbl,
980                   x_klev_tbl       => lx_klev_price_tbl);
981 
982         --dbms_output.put_line('After updating contract line :'||x_return_status);
983         IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
984                 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
985         ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
986                 RAISE OKL_API.G_EXCEPTION_ERROR;
987         END IF;
988       END IF; -- l_principal_payment_found
989   END IF; --l_ste_code
990 
991 EXCEPTION
992       WHEN OKL_API.G_EXCEPTION_ERROR THEN
993       x_return_status := OKL_API.HANDLE_EXCEPTIONS(
994                                l_api_name,
995                                G_PKG_NAME,
996                                'OKL_API.G_RET_STS_ERROR',
997                                x_msg_count,
998                                x_msg_data,
999                                '_PVT');
1000      WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
1001       x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
1002                               l_api_name,
1003                               G_PKG_NAME,
1004                               'OKL_API.G_RET_STS_UNEXP_ERROR',
1005                               x_msg_count,
1006                               x_msg_data,
1007                               '_PVT');
1008      WHEN OTHERS THEN
1009       x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
1010                               l_api_name,
1011                               G_PKG_NAME,
1012                               'OTHERS',
1013                               x_msg_count,
1014                               x_msg_data,
1015                               '_PVT');
1016 end adjust_unit_cost;
1017 
1018 
1019 --Bug# 6344223
1020 ------------------------------------------------------------------------------
1021 --Bug# 6344223
1022 --API Name    : SYNC_STREAMS
1023 --Description : API to perform stream generation processing for Split asset.
1024 --History     :
1025 --              25-Jul-2007    rirawat  Creation
1026 --End of Comments
1027 ------------------------------------------------------------------------------
1028 PROCEDURE sync_streams(p_api_version    IN  NUMBER,
1029                               p_init_msg_list  IN  VARCHAR2,
1030                               x_return_status  OUT NOCOPY VARCHAR2,
1031                               x_msg_count      OUT NOCOPY NUMBER,
1032                               x_msg_data       OUT NOCOPY VARCHAR2,
1033                               p_chr_id         IN  NUMBER ) IS
1034 
1035 
1036     l_api_name               CONSTANT VARCHAR2(30) := 'sync_streams';
1037     l_api_version            CONSTANT NUMBER := 1.0;
1038 
1039     l_trx_number           NUMBER;
1040     l_trx_status           VARCHAR2(100);
1041 BEGIN
1042      -- Call start_activity to create savepoint, check compatibility
1043      -- and initialize message list
1044      x_return_status := OKL_API.START_ACTIVITY (
1045                              l_api_name
1046                              ,p_init_msg_list
1047                              ,'_PVT'
1048                              ,x_return_status);
1049      -- Check if activity started successfully
1050      IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
1051        RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
1052      ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
1053        RAISE OKL_API.G_EXCEPTION_ERROR;
1054      END IF;
1055 
1056      okl_contract_status_pub.update_contract_status(
1057             p_api_version      => l_api_version,
1058             p_init_msg_list    => p_init_msg_list,
1059             x_return_status    => x_return_status,
1060             x_msg_count        => x_msg_count,
1061             x_msg_data         => x_msg_data,
1062             p_khr_status       => 'PASSED',
1063             p_chr_id           => p_chr_id);
1064       IF (x_return_status = Okl_Api.G_RET_STS_UNEXP_ERROR) THEN
1065           RAISE Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR;
1066       ELSIF (x_return_status = Okl_Api.G_RET_STS_ERROR) THEN
1067           RAISE Okl_Api.G_EXCEPTION_ERROR;
1068       END IF;
1069 
1070       --cascade status to lines
1071       okl_contract_status_pub.cascade_lease_status(
1072            p_api_version      => l_api_version,
1073            p_init_msg_list    => p_init_msg_list,
1074            x_return_status    => x_return_status,
1075            x_msg_count        => x_msg_count,
1076            x_msg_data         => x_msg_data,
1077            p_chr_id           => p_chr_id);
1078 
1079       IF (x_return_status = Okl_Api.G_RET_STS_UNEXP_ERROR) THEN
1080           RAISE Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR;
1081       ELSIF (x_return_status = Okl_Api.G_RET_STS_ERROR) THEN
1082           RAISE Okl_Api.G_EXCEPTION_ERROR;
1083       END IF;
1084 
1085      OKL_LA_STREAM_PUB.GEN_INTR_EXTR_STREAM (
1086                                       p_api_version         => l_api_version,
1087                                       p_init_msg_list       => p_init_msg_list,
1088                                       x_return_status       => x_return_status,
1089                                       x_msg_count           => x_msg_count,
1090                                       x_msg_data            => x_msg_data,
1091                                       p_khr_id              => p_chr_id,
1092                                       p_generation_ctx_code => 'AUTH',
1093                                       x_trx_number          => l_trx_number,
1094                                       x_trx_status          => l_trx_status);
1095 
1096     -- check if activity started successfully
1097     IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
1098       RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
1099     ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
1100       RAISE OKL_API.G_EXCEPTION_ERROR;
1101     END IF;
1102    OKL_API.END_ACTIVITY (x_msg_count,
1103                          x_msg_data);
1104  EXCEPTION
1105    WHEN OKL_API.G_EXCEPTION_ERROR THEN
1106    x_return_status := OKL_API.HANDLE_EXCEPTIONS(
1107                               l_api_name,
1108                               G_PKG_NAME,
1109                               'OKL_API.G_RET_STS_ERROR',
1110                               x_msg_count,
1111                               x_msg_data,
1112                               '_PVT');
1113    WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
1114    x_return_status := OKL_API.HANDLE_EXCEPTIONS(
1115                              l_api_name,
1116                              G_PKG_NAME,
1117                              'OKL_API.G_RET_STS_UNEXP_ERROR',
1118                              x_msg_count,
1119                              x_msg_data,
1120                              '_PVT');
1121    WHEN OTHERS THEN
1122    x_return_status := OKL_API.HANDLE_EXCEPTIONS(
1123                              l_api_name,
1124                              G_PKG_NAME,
1125                              'OTHERS',
1126                              x_msg_count,
1127                              x_msg_data,
1128                              '_PVT');
1129 
1130 END sync_streams;
1131 
1132 
1133 
1134 --Bug# 6344223
1135 ------------------------------------------------------------------------------
1136 --Bug# 6344223
1137 --API Name    : SPLIT_ASSET_AFTER_YIELD
1138 --Description : API to perform post stream generation processing for Split asset.
1139 --History     :
1140 --              25-Jul-2007    bkatraga  Creation
1141 --End of Comments
1142 ------------------------------------------------------------------------------
1143 PROCEDURE SPLIT_ASSET_AFTER_YIELD (p_api_version   IN  NUMBER,
1144                                    p_init_msg_list IN  VARCHAR2 DEFAULT OKL_API.G_FALSE,
1145                                    x_return_status OUT NOCOPY   VARCHAR2,
1146                                    x_msg_count     OUT NOCOPY   NUMBER,
1147                                    x_msg_data      OUT NOCOPY   VARCHAR2,
1148                                    p_chr_id        IN  NUMBER) IS
1149 
1150 l_return_status          VARCHAR2(1)  DEFAULT OKL_API.G_RET_STS_SUCCESS;
1151 l_api_name               CONSTANT VARCHAR2(30) := 'SPLIT_ASSET_AFTER_YIELD';
1152 l_api_version            CONSTANT NUMBER := 1.0;
1153 l_split_trx_flag         VARCHAR2(1);
1154 l_accrual_rec            OKL_GENERATE_ACCRUALS_PVT.adjust_accrual_rec_type;
1155 l_stream_tbl             OKL_GENERATE_ACCRUALS_PVT.stream_tbl_type;
1156 l_chr_secure             VARCHAR2(3) := OKL_API.G_FALSE;
1157 l_inv_agmt_chr_id_tbl    OKL_SECURITIZATION_PVT.inv_agmt_chr_id_tbl_type;
1158 l_inv_accrual_rec        OKL_GENERATE_ACCRUALS_PVT.adjust_accrual_rec_type;
1159 l_inv_stream_tbl         OKL_GENERATE_ACCRUALS_PVT.stream_tbl_type;
1160 l_trxv_rec               trxv_rec_type;
1161 lx_trxv_rec              trxv_rec_type;
1162 l_split_trans_id         OKL_TRX_ASSETS.ID%TYPE;
1163 l_trx_number             OKL_TRX_CONTRACTS.TRX_NUMBER%TYPE := null; -- MGAAP
1164 l_trx_reason_asset_split VARCHAR2(20) := OKL_SECURITIZATION_PVT.G_TRX_REASON_ASSET_SPLIT;
1165 
1166 --Cursor to check whether split asset transaction is in progress for the contract
1167 CURSOR check_split_trx_csr IS
1168  SELECT tas.id
1169    FROM OKL_TXL_ASSETS_B txl, OKL_TRX_ASSETS tas
1170   WHERE txl.tal_type= 'ALI'
1171     AND txl.dnz_khr_id = p_chr_id
1172     AND txl.tas_id = tas.id
1173     AND tas.tas_type = 'ALI'
1174     AND tas.tsu_code = 'ENTERED';
1175 
1176 -- MGAAP start 7263041
1177 CURSOR check_csr(p_chr_id NUMBER) IS
1178 SELECT A.MULTI_GAAP_YN,
1179        B.REPORTING_PDT_ID
1180 FROM   OKL_K_HEADERS A,
1181        OKL_PRODUCTS B
1182 WHERE  A.ID = p_chr_id
1183 AND    A.PDT_ID = B.ID;
1184 
1185 l_multi_gaap_yn OKL_K_HEADERS.MULTI_GAAP_YN%TYPE;
1186 l_reporting_pdt_id OKL_PRODUCTS.REPORTING_PDT_ID%TYPE;
1187 -- MGAAP start 7263041
1188 
1189 BEGIN
1190   -- Call start_activity to create savepoint, check compatibility
1191   -- and initialize message list
1192   x_return_status := OKL_API.START_ACTIVITY (
1193                              l_api_name
1194                              ,p_init_msg_list
1195                              ,'_PVT'
1196                              ,x_return_status);
1197    -- Check if activity started successfully
1198    IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
1199        RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
1200    ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
1201        RAISE OKL_API.G_EXCEPTION_ERROR;
1202    END IF;
1203 
1204    -- MGAAP start 7263041
1205    OPEN check_csr(p_chr_id);
1206    FETCH check_csr
1207    INTO  l_multi_gaap_yn, l_reporting_pdt_id;
1208    CLOSE check_csr;
1209    -- MGAAP end 7263041
1210 
1211    OPEN check_split_trx_csr;
1212    FETCH check_split_trx_csr INTO l_split_trans_id;
1213    CLOSE check_split_trx_csr;
1214 
1215    --Split asset transaction exists for the contract
1216    IF(l_split_trans_id IS NOT NULL) THEN
1217       okl_contract_status_pub.update_contract_status(
1218             p_api_version      => p_api_version,
1219             p_init_msg_list    => p_init_msg_list,
1220             x_return_status    => x_return_status,
1221             x_msg_count        => x_msg_count,
1222             x_msg_data         => x_msg_data,
1223             p_khr_status       => 'BOOKED',
1224             p_chr_id           => p_chr_id);
1225       IF (x_return_status = Okl_Api.G_RET_STS_UNEXP_ERROR) THEN
1226           RAISE Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR;
1227       ELSIF (x_return_status = Okl_Api.G_RET_STS_ERROR) THEN
1228           RAISE Okl_Api.G_EXCEPTION_ERROR;
1229       END IF;
1230 
1231       --cascade status to lines
1232       okl_contract_status_pub.cascade_lease_status(
1233            p_api_version      => p_api_version,
1234            p_init_msg_list    => p_init_msg_list,
1235            x_return_status    => x_return_status,
1236            x_msg_count        => x_msg_count,
1237            x_msg_data         => x_msg_data,
1238            p_chr_id           => p_chr_id);
1239       IF (x_return_status = Okl_Api.G_RET_STS_UNEXP_ERROR) THEN
1240           RAISE Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR;
1241       ELSIF (x_return_status = Okl_Api.G_RET_STS_ERROR) THEN
1242           RAISE Okl_Api.G_EXCEPTION_ERROR;
1243       END IF;
1244 
1245       --Bug# 6336455
1246       -- R12B Authoring OA Migration
1247       -- Update the status of the Submit Contract task to Complete
1248       OKL_BOOK_CONTROLLER_PVT.update_book_controller_trx(
1249         p_api_version        => p_api_version,
1250         p_init_msg_list      => p_init_msg_list,
1251         x_return_status      => x_return_status,
1252         x_msg_count          => x_msg_count,
1253         x_msg_data           => x_msg_data,
1254         p_khr_id             => p_chr_id ,
1255         p_prog_short_name    => OKL_BOOK_CONTROLLER_PVT.G_SUBMIT_CONTRACT,
1256         p_progress_status    => OKL_BOOK_CONTROLLER_PVT.G_PROG_STS_COMPLETE);
1257 
1258       IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
1259         Raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
1260       ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) then
1261         Raise OKL_API.G_EXCEPTION_ERROR;
1262       END IF;
1263 
1264       OKL_CONTRACT_REBOOK_PVT.create_billing_adjustment(
1265            p_api_version     => p_api_version,
1266            p_init_msg_list   => p_init_msg_list,
1267            x_return_status   => x_return_status,
1268            x_msg_count       => x_msg_count,
1269            x_msg_data        => x_msg_data,
1270            p_rbk_khr_id      => p_chr_id,
1271            p_orig_khr_id     => p_chr_id,
1272            p_trx_id          => l_split_trans_id,
1273            p_trx_date        => sysdate);
1274       IF (x_return_status = Okl_Api.G_RET_STS_UNEXP_ERROR) THEN
1275          RAISE Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR;
1276       ELSIF (x_return_status = Okl_Api.G_RET_STS_ERROR) THEN
1277          RAISE Okl_Api.G_EXCEPTION_ERROR;
1278       END IF;
1279 
1280       OKL_STREAMS_SEC_PVT.RESET_REPO_STREAMS; -- MGAAP 7263041
1281       OKL_CONTRACT_REBOOK_PVT.calc_accrual_adjustment(
1282            p_api_version     => p_api_version,
1283            p_init_msg_list   => p_init_msg_list,
1284            x_return_status   => x_return_status,
1285            x_msg_count       => x_msg_count,
1286            x_msg_data        => x_msg_data,
1287            p_rbk_khr_id      => p_chr_id,
1288            p_orig_khr_id     => p_chr_id,
1289            p_trx_id          => l_split_trans_id,
1290            p_trx_date        => sysdate,
1291            x_accrual_rec     => l_accrual_rec,
1292            x_stream_tbl      => l_stream_tbl,
1293            p_trx_tbl_code    => 'TAS',
1294            p_trx_type        => 'ALI');
1295       IF (x_return_status = Okl_Api.G_RET_STS_UNEXP_ERROR) THEN
1296          RAISE Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR;
1297       ELSIF (x_return_status = Okl_Api.G_RET_STS_ERROR) THEN
1298          RAISE Okl_Api.G_EXCEPTION_ERROR;
1299       END IF;
1300 
1301       IF (l_stream_tbl.COUNT > 0) THEN
1302          OKL_GENERATE_ACCRUALS_PVT.ADJUST_ACCRUALS (
1303              p_api_version    => p_api_version,
1304              p_init_msg_list  => p_init_msg_list,
1305              x_return_status  => x_return_status,
1306              x_msg_count      => x_msg_count,
1307              x_msg_data       => x_msg_data ,
1308              x_trx_number     => l_trx_number,
1309              p_accrual_rec    => l_accrual_rec,
1310              p_stream_tbl     => l_stream_tbl);
1311          IF (x_return_status = Okl_Api.G_RET_STS_UNEXP_ERROR) THEN
1312             RAISE Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR;
1313          ELSIF (x_return_status = Okl_Api.G_RET_STS_ERROR) THEN
1314             RAISE Okl_Api.G_EXCEPTION_ERROR;
1315          END IF;
1316       END IF;
1317 
1318       -- MGAAP start 7263041
1319       OKL_STREAMS_SEC_PVT.SET_REPO_STREAMS; -- MGAAP 7263041
1320       OKL_CONTRACT_REBOOK_PVT.calc_accrual_adjustment(
1321            p_api_version     => p_api_version,
1322            p_init_msg_list   => p_init_msg_list,
1323            x_return_status   => x_return_status,
1324            x_msg_count       => x_msg_count,
1325            x_msg_data        => x_msg_data,
1326            p_rbk_khr_id      => p_chr_id,
1327            p_orig_khr_id     => p_chr_id,
1328            p_trx_id          => l_split_trans_id,
1329            p_trx_date        => sysdate,
1330            x_accrual_rec     => l_accrual_rec,
1331            x_stream_tbl      => l_stream_tbl,
1332            p_trx_tbl_code    => 'TAS',
1333            p_trx_type        => 'ALI');
1334 
1335       OKL_STREAMS_SEC_PVT.RESET_REPO_STREAMS; -- MGAAP 7263041
1336       IF (x_return_status = Okl_Api.G_RET_STS_UNEXP_ERROR) THEN
1337          RAISE Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR;
1338       ELSIF (x_return_status = Okl_Api.G_RET_STS_ERROR) THEN
1339          RAISE Okl_Api.G_EXCEPTION_ERROR;
1340       END IF;
1341 
1342       IF (l_stream_tbl.COUNT > 0) THEN
1343          l_accrual_rec.trx_number := l_trx_number;
1344          OKL_GENERATE_ACCRUALS_PVT.ADJUST_ACCRUALS (
1345              p_api_version    => p_api_version,
1346              p_init_msg_list  => p_init_msg_list,
1347              x_return_status  => x_return_status,
1348              x_msg_count      => x_msg_count,
1349              x_msg_data       => x_msg_data ,
1350              x_trx_number     => l_trx_number,
1351              p_accrual_rec    => l_accrual_rec,
1352              p_stream_tbl     => l_stream_tbl,
1353              p_representation_type     => 'SECONDARY');
1354          IF (x_return_status = Okl_Api.G_RET_STS_UNEXP_ERROR) THEN
1355             RAISE Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR;
1356          ELSIF (x_return_status = Okl_Api.G_RET_STS_ERROR) THEN
1357             RAISE Okl_Api.G_EXCEPTION_ERROR;
1358          END IF;
1359       END IF;
1360       -- MGAAP end 7263041
1361 
1362       okl_securitization_pvt.check_khr_securitized(
1363             p_api_version              => p_api_version,
1364             p_init_msg_list            => p_init_msg_list,
1365             x_return_status            => x_return_status,
1366             x_msg_count                => x_msg_count,
1367             x_msg_data                 => x_msg_data,
1368             p_khr_id                   => p_chr_id,
1369             p_effective_date           => sysdate,
1370             x_value                    => l_chr_secure,
1371             x_inv_agmt_chr_id_tbl      => l_inv_agmt_chr_id_tbl);
1372       IF (x_return_status = Okl_Api.G_RET_STS_UNEXP_ERROR) THEN
1373          RAISE Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR;
1374       ELSIF (x_return_status = Okl_Api.G_RET_STS_ERROR) THEN
1375          RAISE Okl_Api.G_EXCEPTION_ERROR;
1376       END IF;
1377 
1378       --Bug# 6788253
1379       IF l_chr_secure = OKL_API.G_TRUE THEN
1380          OKL_SECURITIZATION_PVT.modify_pool_contents(
1381                p_api_version         => p_api_version,
1382                p_init_msg_list       => p_init_msg_list,
1383                p_transaction_reason  => l_trx_reason_asset_split,
1384                p_khr_id              => p_chr_id,
1385                p_transaction_date    => SYSDATE,
1386                p_effective_date      => SYSDATE,
1387                x_return_status       => x_return_status,
1388                x_msg_count           => x_msg_count,
1389                x_msg_data            => x_msg_data);
1390          IF (x_return_status = Okl_Api.G_RET_STS_UNEXP_ERROR) THEN
1391            RAISE Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR;
1392          ELSIF (x_return_status = Okl_Api.G_RET_STS_ERROR) THEN
1393            RAISE Okl_Api.G_EXCEPTION_ERROR;
1394          END IF;
1395 
1396          OKL_STREAM_GENERATOR_PVT.create_disb_streams(
1397               p_api_version      => p_api_version,
1398               p_init_msg_list    => p_init_msg_list,
1399               x_return_status    => x_return_status,
1400               x_msg_count        => x_msg_count,
1401               x_msg_data         => x_msg_data,
1402               p_contract_id      => p_chr_id);
1403          IF (x_return_status = Okl_Api.G_RET_STS_UNEXP_ERROR) THEN
1404            RAISE Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR;
1405          ELSIF (x_return_status = Okl_Api.G_RET_STS_ERROR) THEN
1406            RAISE Okl_Api.G_EXCEPTION_ERROR;
1407          END IF;
1408 
1409          OKL_STREAM_GENERATOR_PVT.create_pv_streams(
1410               p_api_version      => p_api_version,
1411               p_init_msg_list    => p_init_msg_list,
1412               x_return_status    => x_return_status,
1413               x_msg_count        => x_msg_count,
1414               x_msg_data         => x_msg_data,
1415               p_contract_id      => p_chr_id);
1416          IF (x_return_status = Okl_Api.G_RET_STS_UNEXP_ERROR) THEN
1417            RAISE Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR;
1418          ELSIF (x_return_status = Okl_Api.G_RET_STS_ERROR) THEN
1419            RAISE Okl_Api.G_EXCEPTION_ERROR;
1420          END IF;
1421 
1422          OKL_ACCRUAL_SEC_PVT.CREATE_STREAMS(
1423               p_api_version      => p_api_version,
1424               p_init_msg_list    => p_init_msg_list,
1425               x_return_status    => x_return_status,
1426               x_msg_count        => x_msg_count,
1427               x_msg_data         => x_msg_data,
1428               p_khr_id           => p_chr_id);
1429          IF (x_return_status = Okl_Api.G_RET_STS_UNEXP_ERROR) THEN
1430            RAISE Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR;
1431          ELSIF (x_return_status = Okl_Api.G_RET_STS_ERROR) THEN
1432            RAISE Okl_Api.G_EXCEPTION_ERROR;
1433          END IF;
1434 
1435          OKL_CONTRACT_REBOOK_PVT.create_inv_disb_adjustment(
1436               p_api_version      => p_api_version,
1437               p_init_msg_list    => p_init_msg_list,
1438               x_return_status    => x_return_status,
1439               x_msg_count        => x_msg_count,
1440               x_msg_data         => x_msg_data,
1441               p_orig_khr_id      => p_chr_id);
1442          IF (x_return_status = Okl_Api.G_RET_STS_UNEXP_ERROR) THEN
1443            RAISE Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR;
1444          ELSIF (x_return_status = Okl_Api.G_RET_STS_ERROR) THEN
1445            RAISE Okl_Api.G_EXCEPTION_ERROR;
1446          END IF;
1447 
1448          l_trx_number := null; -- MGAAP 7263041
1449          OKL_CONTRACT_REBOOK_PVT.calc_inv_acc_adjustment(
1450               p_api_version     => p_api_version,
1451               p_init_msg_list   => p_init_msg_list,
1452               x_return_status   => x_return_status,
1453               x_msg_count       => x_msg_count,
1454               x_msg_data        => x_msg_data,
1455               p_orig_khr_id     => p_chr_id,
1456               p_trx_id          => l_split_trans_id,
1457               p_trx_date        => sysdate,
1458               x_inv_accrual_rec => l_inv_accrual_rec,
1459               x_inv_stream_tbl  => l_inv_stream_tbl,
1460               p_trx_tbl_code    => 'TAS',
1461               p_trx_type        => 'ALI');
1462          IF (x_return_status = Okl_Api.G_RET_STS_UNEXP_ERROR) THEN
1463             RAISE Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR;
1464          ELSIF (x_return_status = Okl_Api.G_RET_STS_ERROR) THEN
1465             RAISE Okl_Api.G_EXCEPTION_ERROR;
1466          END IF;
1467 
1468          IF (l_inv_stream_tbl.COUNT > 0) THEN
1469             OKL_GENERATE_ACCRUALS_PVT.ADJUST_ACCRUALS (
1470                 p_api_version    => p_api_version,
1471                 p_init_msg_list  => p_init_msg_list,
1472                 x_return_status  => x_return_status,
1473                 x_msg_count      => x_msg_count,
1474                 x_msg_data       => x_msg_data ,
1475                 x_trx_number     => l_trx_number,
1476                 p_accrual_rec    => l_inv_accrual_rec,
1477                 p_stream_tbl     => l_inv_stream_tbl);
1478             IF (x_return_status = Okl_Api.G_RET_STS_UNEXP_ERROR) THEN
1479                RAISE Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR;
1480             ELSIF (x_return_status = Okl_Api.G_RET_STS_ERROR) THEN
1481                RAISE Okl_Api.G_EXCEPTION_ERROR;
1482             END IF;
1483          END IF;
1484 
1485          -- MGAAP start 7263041
1486          IF (l_multi_gaap_yn = 'Y') THEN
1487            OKL_STREAMS_SEC_PVT.SET_REPO_STREAMS;
1488            OKL_CONTRACT_REBOOK_PVT.calc_inv_acc_adjustment(
1489                 p_api_version     => p_api_version,
1490                 p_init_msg_list   => p_init_msg_list,
1491                 x_return_status   => x_return_status,
1492                 x_msg_count       => x_msg_count,
1493                 x_msg_data        => x_msg_data,
1494                 p_orig_khr_id     => p_chr_id,
1495                 p_trx_id          => l_split_trans_id,
1496                 p_trx_date        => sysdate,
1497                 x_inv_accrual_rec => l_inv_accrual_rec,
1498                 x_inv_stream_tbl  => l_inv_stream_tbl,
1499                 p_trx_tbl_code    => 'TAS',
1500                 p_trx_type        => 'ALI',
1501                 p_product_id       => l_reporting_pdt_id); -- MGAAP 7263041
1502 
1503            OKL_STREAMS_SEC_PVT.RESET_REPO_STREAMS;
1504            IF (x_return_status = Okl_Api.G_RET_STS_UNEXP_ERROR) THEN
1505               RAISE Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR;
1506            ELSIF (x_return_status = Okl_Api.G_RET_STS_ERROR) THEN
1507               RAISE Okl_Api.G_EXCEPTION_ERROR;
1508            END IF;
1509 
1510            IF (l_inv_stream_tbl.COUNT > 0) THEN
1511               l_inv_accrual_rec.trx_number := l_trx_number;
1512               OKL_GENERATE_ACCRUALS_PVT.ADJUST_ACCRUALS (
1513                   p_api_version    => p_api_version,
1514                   p_init_msg_list  => p_init_msg_list,
1515                   x_return_status  => x_return_status,
1516                   x_msg_count      => x_msg_count,
1517                   x_msg_data       => x_msg_data ,
1518                   x_trx_number     => l_trx_number,
1519                   p_accrual_rec    => l_inv_accrual_rec,
1520                   p_stream_tbl     => l_inv_stream_tbl,
1521                   p_representation_type     => 'SECONDARY');
1522               IF (x_return_status = Okl_Api.G_RET_STS_UNEXP_ERROR) THEN
1523                  RAISE Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR;
1524               ELSIF (x_return_status = Okl_Api.G_RET_STS_ERROR) THEN
1525                  RAISE Okl_Api.G_EXCEPTION_ERROR;
1526               END IF;
1527            END IF;
1528          END IF;
1529          -- MGAAP end 7263041
1530       END IF;
1531 
1532       ------------------------------------------------------------------------
1533       --Bug# : R12.B eBTax impact Start
1534       ------------------------------------------------------------------------
1535       okl_process_sales_tax_pvt.calculate_sales_tax(
1536          p_api_version             => p_api_version,
1537          p_init_msg_list           => p_init_msg_list,
1538          x_return_status           => x_return_status,
1539          x_msg_count               => x_msg_count,
1540          x_msg_data                => x_msg_data,
1541          p_source_trx_id           => l_split_trans_id, --<okl_trx_assets.id>,
1542          p_source_trx_name         => 'Split Asset',
1543          p_source_table            => 'OKL_TRX_ASSETS');
1544 
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 
1551       ------------------------------------------------------------------------
1552       --Bug# : R12.B eBTax impact End
1553       ------------------------------------------------------------------------
1554 
1555 	 l_trxv_rec.id := l_split_trans_id;
1556 	 l_trxv_rec.tsu_code := 'PROCESSED';
1557 	 OKL_TRX_ASSETS_PUB.update_trx_ass_h_def(
1558 	      p_api_version   => p_api_version,
1559 	      p_init_msg_list => p_init_msg_list,
1560 	      x_return_status => x_return_status,
1561 	      x_msg_count     => x_msg_count,
1562 	      x_msg_data      => x_msg_data,
1563 	      p_thpv_rec      => l_trxv_rec,
1564 	      x_thpv_rec      => lx_trxv_rec);
1565 	 IF (x_return_status = Okl_Api.G_RET_STS_UNEXP_ERROR) THEN
1566 	    RAISE Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR;
1567 	 ELSIF (x_return_status = Okl_Api.G_RET_STS_ERROR) THEN
1568 	    RAISE Okl_Api.G_EXCEPTION_ERROR;
1569 	 END IF;
1570    END IF;
1571 
1572    OKL_API.END_ACTIVITY (x_msg_count,
1573                          x_msg_data);
1574  EXCEPTION
1575    WHEN OKL_API.G_EXCEPTION_ERROR THEN
1576    x_return_status := OKL_API.HANDLE_EXCEPTIONS(
1577                               l_api_name,
1578                               G_PKG_NAME,
1579                               'OKL_API.G_RET_STS_ERROR',
1580                               x_msg_count,
1581                               x_msg_data,
1582                               '_PVT');
1583    WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
1584    x_return_status := OKL_API.HANDLE_EXCEPTIONS(
1585                              l_api_name,
1586                              G_PKG_NAME,
1587                              'OKL_API.G_RET_STS_UNEXP_ERROR',
1588                              x_msg_count,
1589                              x_msg_data,
1590                              '_PVT');
1591    WHEN OTHERS THEN
1592    x_return_status := OKL_API.HANDLE_EXCEPTIONS(
1593                              l_api_name,
1594                              G_PKG_NAME,
1595                              'OTHERS',
1596                              x_msg_count,
1597                              x_msg_data,
1598                              '_PVT');
1599 END SPLIT_ASSET_AFTER_YIELD;
1600 --Bug# 6344223
1601 
1602 ------------------------------------------------------------------------------
1603 --Bug# 6326479
1604 --API Name    : process_split_accounting
1605 --Description : Private API to create accounting entries for transaction type
1606 --              'Split Asset' for the new Asset created after split.
1607 --History     :
1608 --              18-Jun-2007    rirawat  Creation
1609 --End of Comments
1610 ------------------------------------------------------------------------------
1611 PROCEDURE process_split_accounting(
1612     p_api_version                  IN NUMBER
1613    ,p_init_msg_list                IN VARCHAR2 DEFAULT OKL_API.G_FALSE
1614    ,x_return_status                OUT NOCOPY VARCHAR2
1615    ,x_msg_count                    OUT NOCOPY NUMBER
1616    ,x_msg_data                     OUT NOCOPY VARCHAR2
1617    ,p_contract_id                  IN  NUMBER
1618    ,p_kle_id                      IN  NUMBER
1619    ,p_transaction_date             IN  DATE)
1620 
1621 IS
1622     l_api_name         CONSTANT VARCHAR2(30) := 'process_split_accounting';
1623     l_api_version      CONSTANT NUMBER       := 1.0;
1624 
1625     l_return_status    VARCHAR2(1) := OKL_API.G_RET_STS_SUCCESS;
1626 
1627      -- Define PL/SQL Records and Tables
1628     l_trxH_in_rec        Okl_Trx_Contracts_Pvt.tcnv_rec_type;
1629     l_trxL_in_rec        Okl_Trx_Contracts_Pvt.tclv_rec_type;
1630     l_trxH_out_rec       Okl_Trx_Contracts_Pvt.tcnv_rec_type;
1631     l_trxL_out_rec       Okl_Trx_Contracts_Pvt.tclv_rec_type;
1632 
1633     -- Define variables
1634     l_post_to_gl_yn   VARCHAR2(1);
1635 
1636     l_amount          NUMBER;
1637     l_init_msg_list   VARCHAR2(1) := OKL_API.G_FALSE;
1638     l_msg_count       NUMBER;
1639     l_msg_data        VARCHAR2(2000);
1640     l_currency_code   okl_txl_cntrct_lns.currency_code%TYPE;
1641 
1642 
1643     CURSOR Product_csr (p_contract_id IN okl_products_v.id%TYPE) IS
1644     SELECT pdt.id                       product_id
1645           ,pdt.name                     product_name
1646           ,khr.sts_code                 contract_status
1647           ,khr.start_date               start_date
1648           ,khr.currency_code            currency_code
1649           ,khr.authoring_org_id         authoring_org_id
1650           ,khr.currency_conversion_rate currency_conversion_rate
1651           ,khr.currency_conversion_type currency_conversion_type
1652           ,khr.currency_conversion_date currency_conversion_date
1653           ,khr.scs_code
1654     FROM   okl_products_v        pdt
1655           ,okl_k_headers_full_v  khr
1656     WHERE  khr.id = p_contract_id
1657     AND    khr.pdt_id = pdt.id;
1658 
1659        -- Get the product type
1660    CURSOR l_product_type_csr ( p_pdt_id IN NUMBER) IS
1661       SELECT  description
1662       FROM    OKL_PRODUCTS_V
1663       WHERE   id = p_pdt_id;
1664 
1665     l_func_curr_code               OKL_K_HEADERS_FULL_V.CURRENCY_CODE%TYPE;
1666     l_chr_curr_code                OKL_K_HEADERS_FULL_V.CURRENCY_CODE%TYPE;
1667     x_currency_conversion_rate	okl_k_headers_full_v.currency_conversion_rate%TYPE;
1668     x_currency_conversion_type	okl_k_headers_full_v.currency_conversion_type%TYPE;
1669     x_currency_conversion_date	okl_k_headers_full_v.currency_conversion_date%TYPE;
1670     l_functional_currency_code VARCHAR2(15);
1671     l_contract_currency_code VARCHAR2(15);
1672     l_converted_amount NUMBER;
1673     l_Product_rec      Product_csr%ROWTYPE;
1674     l_transaction_date DATE;
1675     l_ctxt_val_tbl                  OKL_ACCOUNT_DIST_PUB.ctxt_val_tbl_type;
1676     l_acc_gen_primary_key_tbl       OKL_ACCOUNT_DIST_PUB.acc_gen_primary_key;
1677     l_tmpl_identify_rec  OKL_ACCOUNT_DIST_PVT.TMPL_IDENTIFY_REC_TYPE;
1678     lp_tmpl_identify_rec OKL_ACCOUNT_DIST_PUB.tmpl_identify_rec_type;
1679     l_dist_info_rec      OKL_ACCOUNT_DIST_PVT.dist_info_REC_TYPE;
1680     l_template_tbl       OKL_ACCOUNT_DIST_PVT.AVLV_TBL_TYPE;
1681     l_amount_tbl         OKL_ACCOUNT_DIST_PVT.AMOUNT_TBL_TYPE;
1682     lx_template_tbl                  OKL_ACCOUNT_DIST_PUB.avlv_tbl_type;
1683     l_trx_desc           VARCHAR2(2000);
1684     l_fact_synd_code      FND_LOOKUPS.Lookup_code%TYPE;
1685     l_inv_acct_code       OKC_RULES_B.Rule_Information1%TYPE;
1686     l_try_name              VARCHAR2(30);
1687     l_trans_code            VARCHAR2(30);
1688     l_tcn_type              VARCHAR2(3);
1689     l_trans_meaning         VARCHAR2(200);
1690     l_try_id                NUMBER;
1691     G_NO               CONSTANT VARCHAR2(1)   := 'N';
1692     l_valid_gl_date DATE;
1693     l_product_type                   VARCHAR2(2000);
1694     lp_tclv_rec                      OKL_TRX_CONTRACTS_PUB.tclv_rec_type;
1695     lx_tclv_rec                      OKL_TRX_CONTRACTS_PUB.tclv_rec_type;
1696     li_tclv_rec                      OKL_TRX_CONTRACTS_PUB.tclv_rec_type;
1697     i                                NUMBER;
1698     l_total_amount                   NUMBER := 0;
1699     l_line_number                    NUMBER := 1;
1700     l_hard_coded_amount NUMBER := 100;
1701 
1702     l_tclv_tbl              Okl_trx_contracts_pvt.tclv_tbl_type;
1703     x_tclv_tbl              Okl_trx_contracts_pvt.tclv_tbl_type;
1704     l_tcnv_rec              Okl_trx_contracts_pvt.tcnv_rec_type;
1705     x_tcnv_rec              Okl_trx_contracts_pvt.tcnv_rec_type;
1706 
1707     l_tmpl_identify_tbl     Okl_Account_Dist_Pvt.tmpl_identify_tbl_type;
1708     l_dist_info_tbl         Okl_Account_Dist_Pvt.dist_info_tbl_type;
1709     l_ctxt_tbl              Okl_Account_Dist_Pvt.CTXT_TBL_TYPE;
1710     l_template_out_tbl      Okl_Account_Dist_Pvt.avlv_out_tbl_type;
1711     l_amount_out_tbl        Okl_Account_Dist_Pvt.amount_out_tbl_type;
1712     l_acc_gen_tbl           Okl_Account_Dist_Pvt.ACC_GEN_TBL_TYPE;
1713 
1714     CURSOR fnd_lookups_csr( lkp_type VARCHAR2, mng VARCHAR2 ) IS
1715     select description,
1716            lookup_code
1717     from   fnd_lookup_values
1718     where language = 'US'
1719     and lookup_type = lkp_type
1720     and meaning = mng;
1721 
1722     l_fnd_rec               fnd_lookups_csr%ROWTYPE;
1723 
1724 BEGIN
1725   -- Set API savepoint
1726   SAVEPOINT process_split_accounting_PVT;
1727 
1728   -- Check for call compatibility
1729   IF (NOT FND_API.Compatible_API_Call (l_api_version,
1730                                 	   p_api_version,
1731                                 	   l_api_name,
1732                                 	   G_PKG_NAME ))
1733   THEN
1734     RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
1735   END IF;
1736 
1737   -- Initialize message list if requested
1738   IF (FND_API.to_Boolean(p_init_msg_list)) THEN
1739       FND_MSG_PUB.initialize;
1740    END IF;
1741 
1742    -- Initialize API status to success
1743    x_return_status := OKL_API.G_RET_STS_SUCCESS;
1744    --------------------------------------------------------------------------
1745    -- Initialize API variables
1746    --------------------------------------------------------------------------
1747 
1748    i                := 0;
1749 
1750    l_transaction_date  := p_transaction_date;
1751 
1752    l_trx_desc := 'OKL Accounting Transaction for Split Asset';
1753 
1754    l_post_to_gl_yn := 'Y';
1755 
1756    l_try_name := 'Split Asset';
1757    l_trans_code := 'SPLIT_ASSET';
1758    l_tcn_type := 'SPA';
1759 
1760    l_trans_meaning := OKL_AM_UTIL_PVT.get_lookup_meaning(
1761 		       p_lookup_type  => 'OKL_ACCOUNTING_EVENT_TYPE',
1762 		       p_lookup_code	=>  l_trans_code,
1763 		       p_validate_yn  => 'Y');
1764 
1765 
1766    OKL_AM_UTIL_PVT.get_transaction_id (
1767   	    p_try_name      => l_try_name,
1768           p_language      => 'US',
1769           x_return_status => l_return_status,
1770   	    x_try_id        => l_try_id);
1771 
1772 
1773     -- Get product_id
1774     OPEN  Product_csr(p_contract_id);
1775     FETCH Product_csr INTO l_Product_rec;
1776     IF Product_csr%NOTFOUND THEN
1777       Okl_Api.SET_MESSAGE(G_APP_NAME,
1778                            'OKL_REQUIRED_VALUE',
1779                            OKL_API.G_COL_NAME_TOKEN,
1780                            'Product');
1781       CLOSE Product_csr;
1782       RAISE Okl_Api.G_EXCEPTION_ERROR;
1783     END IF;
1784     CLOSE Product_csr;
1785 
1786     l_currency_code  := l_Product_rec.currency_code;
1787 
1788     --------------------------------------------------------------------------
1789     -- multi-currency setup
1790     --------------------------------------------------------------------------
1791 
1792     l_chr_curr_code  := l_Product_rec.CURRENCY_CODE;
1793 
1794     l_func_curr_code := okl_accounting_util.get_func_curr_code;
1795 
1796     x_currency_conversion_rate := NULL;
1797     x_currency_conversion_type := NULL;
1798     x_currency_conversion_date := NULL;
1799 
1800     IF ( ( l_func_curr_code IS NOT NULL) AND
1801          ( l_chr_curr_code <> l_func_curr_code ) ) THEN
1802 
1803         x_currency_conversion_type := l_Product_rec.currency_conversion_type;
1804         x_currency_conversion_date :=l_transaction_date;
1805 
1806         IF ( l_Product_rec.currency_conversion_type = 'User') THEN
1807             x_currency_conversion_rate := l_Product_rec.currency_conversion_rate;
1808             x_currency_conversion_date := l_Product_rec.currency_conversion_date;
1809         ELSE
1810             x_currency_conversion_rate := okl_accounting_util.get_curr_con_rate(
1811 	                 p_from_curr_code => l_chr_curr_code,
1812 	                 p_to_curr_code   => l_func_curr_code,
1813                        p_con_date  => l_transaction_date,
1814  		           p_con_type => l_Product_rec.currency_conversion_type);
1815 
1816         END IF;
1817 
1818     END IF;
1819 
1820     --------------------------------------------------------------------------
1821     -- Assign passed in record values for transaction header and line
1822     -------------------------------------------------------------------------
1823 
1824     l_trxH_in_rec.khr_id         := p_contract_id;
1825     l_trxH_in_rec.pdt_id         := l_Product_rec.product_id;
1826     l_trxH_in_rec.tcn_type       := l_tcn_type;  --'SPA'
1827     l_trxH_in_rec.currency_code  := l_currency_code;
1828     l_trxH_in_rec.try_id         := l_try_id;
1829     l_trxH_in_rec.description    := l_trx_desc;
1830     l_trxH_in_rec.currency_conversion_rate := x_currency_conversion_rate;
1831     l_trxH_in_rec.currency_conversion_type := x_currency_conversion_type;
1832     l_trxH_in_rec.currency_conversion_date := x_currency_conversion_date;
1833     l_trxH_in_rec.tsu_code                    := 'PROCESSED';
1834     l_trxH_in_rec.date_transaction_occurred  := l_transaction_date;
1835     l_trxH_in_rec.set_of_books_id    := okl_accounting_util.get_set_of_books_id;
1836     l_trxH_in_rec.org_id            := l_Product_rec.authoring_org_id;
1837     --------------------------------------------------------------------------
1838     -- Create transaction Header and line
1839     --------------------------------------------------------------------------
1840     Okl_Trx_Contracts_Pub.create_trx_contracts(
1841              p_api_version      => l_api_version
1842             ,p_init_msg_list    => l_init_msg_list
1843             ,x_return_status    => l_return_status
1844             ,x_msg_count        => l_msg_count
1845             ,x_msg_data         => l_msg_data
1846             ,p_tcnv_rec         => l_trxH_in_rec
1847             ,x_tcnv_rec         => l_trxH_out_rec);
1848 
1849        IF (l_return_status = Okl_Api.G_RET_STS_UNEXP_ERROR) THEN
1850             RAISE Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR;
1851         ELSIF (l_return_Status = Okl_Api.G_RET_STS_ERROR) THEN
1852             RAISE Okl_Api.G_EXCEPTION_ERROR;
1853         END IF;
1854 
1855       IF ((l_trxH_out_rec.id = OKL_API.G_MISS_NUM) OR
1856             (l_trxH_out_rec.id IS NULL) ) THEN
1857             OKL_API.set_message(G_APP_NAME,
1858                                 'OKL_REQUIRED_VALUE',
1859                                  OKL_API.G_COL_NAME_TOKEN,
1860                                 'TRANSACTION_ID');
1861             RAISE OKL_API.G_EXCEPTION_ERROR;
1862         END IF;
1863 
1864     --------------------------------------------------------------------------
1865     -- accounting template record
1866     --------------------------------------------------------------------------
1867 
1868     l_tmpl_identify_rec.TRANSACTION_TYPE_ID := l_try_id;
1869     l_tmpl_identify_rec.PRODUCT_ID := l_Product_rec.product_id;
1870     l_tmpl_identify_rec.memo_yn               :=  G_NO;
1871     l_tmpl_identify_rec.prior_year_yn         :=  G_NO;
1872 
1873      -- get the product type
1874     OPEN  l_product_type_csr ( l_Product_rec.product_id);
1875     FETCH l_product_type_csr INTO l_product_type;
1876     CLOSE l_product_type_csr;
1877 
1878 
1879      -- set the additional parameters with contract_id, line_id and transaction_date
1880      -- to be passed to formula engine
1881 
1882     l_valid_gl_date := OKL_ACCOUNTING_UTIL.get_valid_gl_date( p_gl_date => l_transaction_date);
1883 
1884     --For special accounting treatment : Review whether it is required or not
1885     OKL_SECURITIZATION_PVT.Check_Khr_ia_associated(
1886                                   p_api_version             => p_api_version,
1887                                   p_init_msg_list           => p_init_msg_list,
1888                                   x_return_status           => x_return_status,
1889                                   x_msg_count               => x_msg_count,
1890                                   x_msg_data                => x_msg_data,
1891                                   p_khr_id                  => p_contract_id,
1892                                   p_scs_code            => l_product_rec.scs_code,
1893                                   p_trx_date                => l_transaction_date,
1894                                   x_fact_synd_code          => l_fact_synd_code,
1895                                   x_inv_acct_code           => l_inv_acct_code
1896                                   );
1897 
1898     IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
1899       RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
1900     ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
1901       RAISE OKL_API.G_EXCEPTION_ERROR;
1902     END IF;
1903 
1904     l_tmpl_identify_rec.factoring_synd_flag := l_fact_synd_code;
1905     l_tmpl_identify_rec.investor_code       := l_inv_acct_code;
1906 
1907     OKL_ACCOUNT_DIST_PUB.get_template_info(
1908                 p_api_version     	            => p_api_version,
1909                 p_init_msg_list   	            => OKL_API.G_FALSE,
1910                 x_return_status   	            => l_return_status,
1911                 x_msg_count       	            => x_msg_count,
1912                 x_msg_data        	            => x_msg_data,
1913                 p_tmpl_identify_rec             => l_tmpl_identify_rec,
1914                 x_template_tbl                  => l_template_tbl,
1915                 p_validity_date                 => l_valid_gl_date);
1916 
1917       IF l_return_status <> OKL_API.G_RET_STS_SUCCESS THEN
1918         -- No accounting templates found matching the transaction type TRX_TYPE
1919         -- and product  PRODUCT.
1920         OKL_API.set_message(
1921                              p_app_name      => G_APP_NAME,
1922                              p_msg_name   => 'OKL_AM_NO_ACC_TEMPLATES',
1923                              p_token1        => 'TRX_TYPE',
1924                              p_token1_value  => l_trans_meaning,
1925                              p_token2        => 'PRODUCT',
1926                              p_token2_value  => l_product_type);
1927 
1928       END IF;
1929 
1930       IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
1931         RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
1932       ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
1933         RAISE OKL_API.G_EXCEPTION_ERROR;
1934       END IF;
1935 
1936       -- If no templates present
1937       IF l_template_tbl.COUNT = 0 THEN
1938         -- No accounting templates found matching the transaction type TRX_TYPE
1939         -- and product  PRODUCT.
1940         OKL_API.set_message(
1941                              p_app_name      => G_APP_NAME,
1942                              p_msg_name      => 'OKL_AM_NO_ACC_TEMPLATES',
1943                              p_token1        => 'TRX_TYPE',
1944                              p_token1_value  => l_trans_meaning,
1945                              p_token2        => 'PRODUCT',
1946                              p_token2_value  => l_product_type);
1947 
1948 
1949         RAISE OKL_API.G_EXCEPTION_ERROR;
1950 
1951       END IF;
1952 
1953      --Build the transaction line table of records
1954      FOR i IN l_template_tbl.FIRST..l_template_tbl.LAST
1955      LOOP
1956              l_tclv_tbl(i).line_number := i;
1957              l_tclv_tbl(i).khr_id := p_contract_id;
1958              l_tclv_tbl(i).kle_id := p_kle_id;
1959              l_tclv_tbl(i).sty_id := l_template_tbl(i).sty_id;
1960              l_tclv_tbl(i).tcl_type := l_tcn_type;  --'SPA';
1961              l_tclv_tbl(i).description := l_trx_desc;
1962              l_tclv_tbl(i).tcn_id := l_trxh_out_rec.id;
1963              l_tclv_tbl(i).currency_code := l_currency_code;
1964              l_tclv_tbl(i).org_id := l_Product_rec.authoring_org_id;
1965       END LOOP;
1966 
1967       --Call to create transaction lines
1968 
1969       Okl_Trx_Contracts_Pub.create_trx_cntrct_lines(
1970         p_api_version      => l_api_version
1971        ,p_init_msg_list    => l_init_msg_list
1972        ,x_return_status    => x_return_status
1973        ,x_msg_count        => l_msg_count
1974        ,x_msg_data         => l_msg_data
1975        ,p_tclv_tbl         => l_tclv_tbl
1976        ,x_tclv_tbl         => x_tclv_tbl);
1977 
1978       IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
1979         RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
1980       ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
1981         RAISE OKL_API.G_EXCEPTION_ERROR;
1982       END IF;
1983 
1984       /* Populating the tmpl_identify_tbl  from the template_tbl returned by get_template_info*/
1985 
1986       FOR i in l_template_tbl.FIRST.. l_template_tbl.LAST
1987       LOOP
1988         l_tmpl_identify_tbl(i).product_id          := l_Product_rec.product_id;
1989         l_tmpl_identify_tbl(i).transaction_type_id := l_try_id;
1990         l_tmpl_identify_tbl(i).stream_type_id      := l_template_tbl(i).sty_id;
1991         l_tmpl_identify_tbl(i).advance_arrears     := l_template_tbl(i).advance_arrears;
1992         l_tmpl_identify_tbl(i).prior_year_yn       := l_template_tbl(i).prior_year_yn;
1993         l_tmpl_identify_tbl(i).memo_yn             := l_template_tbl(i).memo_yn;
1994         l_tmpl_identify_tbl(i).factoring_synd_flag := l_template_tbl(i).factoring_synd_flag;
1995         l_tmpl_identify_tbl(i).investor_code       := l_template_tbl(i).inv_code;
1996         l_tmpl_identify_tbl(i).SYNDICATION_CODE    := l_template_tbl(i).syt_code;
1997         l_tmpl_identify_tbl(i).FACTORING_CODE      := l_template_tbl(i).fac_code;
1998       END LOOP;
1999 
2000       -- for account generator
2001       OKL_ACC_CALL_PVT.okl_populate_acc_gen (
2002         p_contract_id       => p_contract_id,
2003         p_contract_line_id  => p_kle_id,
2004         x_acc_gen_tbl       => l_acc_gen_primary_key_tbl,
2005         x_return_status     => l_return_status);
2006 
2007       -- Raise exception to rollback to savepoint for this block
2008       IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
2009         RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
2010       ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
2011         RAISE OKL_API.G_EXCEPTION_ERROR;
2012       END IF;
2013 
2014       /* Populating the dist_info_Tbl */
2015       FOR i in x_tclv_tbl.FIRST..x_tclv_tbl.LAST
2016       LOOP
2017       --Assigning the account generator table
2018         l_acc_gen_tbl(i).acc_gen_key_tbl := l_acc_gen_primary_key_tbl;
2019         l_acc_gen_tbl(i).source_id :=  x_tclv_tbl(i).id;
2020 
2021         --Bug# 6189396
2022         l_ctxt_val_tbl := okl_execute_formula_pub.g_additional_parameters;
2023 
2024         l_dist_info_tbl(i).SOURCE_ID := x_tclv_tbl(i).id;
2025         l_dist_info_tbl(i).SOURCE_TABLE := 'OKL_TXL_CNTRCT_LNS';
2026         l_dist_info_tbl(i).GL_REVERSAL_FLAG := 'N';
2027         l_dist_info_tbl(i).POST_TO_GL := l_post_to_gl_yn;
2028         l_dist_info_tbl(i).CONTRACT_ID := p_contract_id;
2029         l_dist_info_tbl(i).contract_line_id := p_kle_id;
2030 
2031         l_dist_info_tbl(i).currency_conversion_rate := x_currency_conversion_rate;
2032         l_dist_info_tbl(i).currency_conversion_type := x_currency_conversion_type;
2033         l_dist_info_tbl(i).currency_conversion_date := x_currency_conversion_date;
2034         l_dist_info_tbl(i).currency_code  := l_currency_code;
2035         l_dist_info_tbl(i).ACCOUNTING_DATE := l_trxh_out_rec.date_transaction_occurred;
2036       END LOOP;
2037 
2038       /* Making the new single accounting engine call*/
2039       Okl_Account_Dist_Pvt.CREATE_ACCOUNTING_DIST(
2040         p_api_version        => l_api_version,
2041         p_init_msg_list      => p_init_msg_list,
2042         x_return_status      => x_return_status,
2043         x_msg_count          => x_msg_count,
2044         x_msg_data           => x_msg_data,
2045         p_tmpl_identify_tbl  => l_tmpl_identify_tbl,
2046         p_dist_info_tbl      => l_dist_info_tbl,
2047         p_ctxt_val_tbl       => l_ctxt_tbl,
2048         p_acc_gen_primary_key_tbl  => l_acc_gen_tbl,
2049         x_template_tbl       => l_template_out_tbl,
2050         x_amount_tbl         => l_amount_out_tbl,
2051 	  p_trx_header_id      => l_trxH_out_rec.id);
2052 
2053       IF (x_return_status = Okl_Api.G_RET_STS_UNEXP_ERROR) THEN
2054         RAISE Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR;
2055       ELSIF (x_return_status = Okl_Api.G_RET_STS_ERROR) THEN
2056         RAISE Okl_Api.G_EXCEPTION_ERROR;
2057       END IF;
2058 
2059       OPEN  fnd_lookups_csr('OKL_TRANSACTION_STATUS', 'Processed');
2060       FETCH fnd_lookups_csr INTO l_fnd_rec;
2061       IF fnd_lookups_csr%NOTFOUND THEN
2062         Okl_Api.SET_MESSAGE(G_APP_NAME, OKL_API.G_INVALID_VALUE,OKL_API.G_COL_NAME_TOKEN,l_try_name);
2063         CLOSE fnd_lookups_csr;
2064         RAISE Okl_Api.G_EXCEPTION_ERROR;
2065       END IF;
2066       CLOSE fnd_lookups_csr;
2067 
2068        --From the l_amount_out_tbl returned , the transaction line amount and header amount need to be updated back on the contract
2069        l_tclv_tbl := x_tclv_tbl;
2070        l_tcnv_rec := l_trxH_out_rec;
2071 
2072        If l_tclv_tbl.COUNT > 0 then
2073          FOR i in l_tclv_tbl.FIRST..l_tclv_tbl.LAST LOOP
2074            l_amount_tbl.delete;
2075            If l_amount_out_tbl.COUNT > 0 then
2076               For k in l_amount_out_tbl.FIRST..l_amount_out_tbl.LAST LOOP
2077                   IF l_tclv_tbl(i).id = l_amount_out_tbl(k).source_id THEN
2078                       l_amount_tbl := l_amount_out_tbl(k).amount_tbl;
2079                       l_tclv_tbl(i).currency_code := l_currency_code;
2080                       IF l_amount_tbl.COUNT > 0 THEN
2081                           FOR j in l_amount_tbl.FIRST..l_amount_tbl.LAST LOOP
2082                               l_tclv_tbl(i).amount := nvl(l_tclv_tbl(i).amount,0)  + l_amount_tbl(j);
2083                           END LOOP; -- for j in
2084                       END IF;-- If l_amount_tbl.COUNT
2085                   END IF; ---- IF l_tclv_tbl(i).id
2086               END LOOP; -- For k in
2087            END IF; -- If l_amount_out_tbl.COUNT
2088            l_tcnv_rec.amount := nvl(l_tcnv_rec.amount,0) + l_tclv_tbl(i).amount;
2089            l_tcnv_rec.currency_code := l_currency_code;
2090            l_tcnv_rec.tsu_code      := l_fnd_rec.lookup_code;
2091          END LOOP; -- For i in
2092        End If; -- If l_tclv_tbl.COUNT
2093 
2094       --Making the call to update the amounts on transaction header and line
2095       Okl_Trx_Contracts_Pub.update_trx_contracts
2096                            (p_api_version => p_api_version
2097                            ,p_init_msg_list => p_init_msg_list
2098                            ,x_return_status => x_return_status
2099                            ,x_msg_count => x_msg_count
2100                            ,x_msg_data => x_msg_data
2101                            ,p_tcnv_rec => l_tcnv_rec
2102                            ,p_tclv_tbl => l_tclv_tbl
2103                            ,x_tcnv_rec => x_tcnv_rec
2104                            ,x_tclv_tbl => x_tclv_tbl );
2105 
2106       IF (x_return_status = Okl_Api.G_RET_STS_UNEXP_ERROR) THEN
2107         RAISE Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR;
2108       ELSIF (x_return_status = Okl_Api.G_RET_STS_ERROR) THEN
2109         RAISE Okl_Api.G_EXCEPTION_ERROR;
2110       END IF;
2111 
2112       OKL_MULTIGAAP_ENGINE_PVT.CREATE_SEC_REP_TRX
2113                            (p_api_version => p_api_version
2114                            ,p_init_msg_list => p_init_msg_list
2115                            ,x_return_status => x_return_status
2116                            ,x_msg_count => x_msg_count
2117                            ,x_msg_data => x_msg_data
2118                            ,P_TCNV_REC => x_tcnv_rec
2119                            ,P_TCLV_TBL => x_tclv_tbl
2120                            ,p_ctxt_val_tbl => l_ctxt_tbl
2121                            ,p_acc_gen_primary_key_tbl => l_acc_gen_primary_key_tbl);
2122 
2123       IF (x_return_status = Okl_Api.G_RET_STS_UNEXP_ERROR) THEN
2124         RAISE Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR;
2125       ELSIF (x_return_status = Okl_Api.G_RET_STS_ERROR) THEN
2126         RAISE Okl_Api.G_EXCEPTION_ERROR;
2127       END IF;
2128 
2129 
2130   -- Get message count and if count is 1, get message info
2131   FND_MSG_PUB.Count_And_Get
2132     (p_count          =>      x_msg_count,
2133      p_data           =>      x_msg_data);
2134 
2135 EXCEPTION
2136   WHEN OKL_API.G_EXCEPTION_ERROR THEN
2137     ROLLBACK TO process_split_accounting_PVT;
2138     x_return_status := OKL_API.G_RET_STS_ERROR;
2139     FND_MSG_PUB.Count_And_Get
2140       (p_count         =>      x_msg_count,
2141        p_data          =>      x_msg_data);
2142 
2143   WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
2144     ROLLBACK TO process_split_accounting_PVT;
2145     x_return_status := OKL_API.G_RET_STS_UNEXP_ERROR;
2146     FND_MSG_PUB.Count_And_Get
2147       (p_count         =>      x_msg_count,
2148        p_data          =>      x_msg_data);
2149 
2150   WHEN OTHERS THEN
2151 	ROLLBACK TO process_split_accounting_PVT;
2152       x_return_status := OKL_API.G_RET_STS_UNEXP_ERROR ;
2153       OKL_API.Set_Message(p_app_name      => G_APP_NAME,
2154                           p_msg_name      => G_UNEXPECTED_ERROR,
2155                           p_token1        => G_SQLCODE_TOKEN,
2156                           p_token1_value  => SQLCODE,
2157                           p_token2        => G_SQLERRM_TOKEN,
2158                           p_token2_value  => SQLERRM);
2159       FND_MSG_PUB.Count_And_Get
2160         (p_count         =>      x_msg_count,
2161          p_data          =>      x_msg_data);
2162 
2163 END process_split_accounting;
2164 
2165 ------------------------------------------------------------------------------
2166   --Bug# 5946411
2167   --Start of comments
2168   --
2169   --Procedure Name        : get_deprn_reserve
2170   --Purpose               : Get Depreciation Reserve- used internally
2171   --Modification History  :
2172   --02-May-2007    avsingh   Created
2173   --                         To get accumulated depreciation of an asset
2174   --                         As per Bug# 6027547 raised on FA, the suggestion
2175   --                         from FA is to back out depreciation reserve
2176   --                         if cost is being adjusted in the period of
2177   --                         of addition.
2178   ------------------------------------------------------------------------------
2179   PROCEDURE get_deprn_reserve
2180                    (p_api_version     IN  NUMBER,
2181                     p_init_msg_list   IN  VARCHAR2,
2182                     x_return_status   OUT NOCOPY VARCHAR2,
2183                     x_msg_count       OUT NOCOPY NUMBER,
2184                     x_msg_data        OUT NOCOPY VARCHAR2,
2185                     p_asset_id        IN  NUMBER,
2186                     p_book_type_code  IN  VARCHAR2,
2187                     x_asset_deprn_rec   OUT NOCOPY FA_API_TYPES.asset_deprn_rec_type) IS
2188 
2189     l_return_status   VARCHAR2(1) := OKL_API.G_RET_STS_SUCCESS;
2190     l_api_name        CONSTANT VARCHAR2(30) := 'GET_DEPRN_RESERVE';
2191     l_api_version	CONSTANT NUMBER	:= 1.0;
2192 
2193     l_asset_hdr_rec            FA_API_TYPES.asset_hdr_rec_type;
2194     l_asset_fin_rec            FA_API_TYPES.asset_fin_rec_type;
2195     l_asset_deprn_rec          FA_API_TYPES.asset_deprn_rec_type;
2196 
2197     l_deprn_reserve            NUMBER;
2198 
2199   BEGIN
2200      --call start activity to set savepoint
2201      l_return_status := OKL_API.START_ACTIVITY( substr(l_api_name,1,26),
2202                                                 p_init_msg_list,
2203                                                 '_PVT',
2204                                                 x_return_status);
2205      IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
2206        RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
2207      ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
2208        RAISE OKL_API.G_EXCEPTION_ERROR;
2209      END IF;
2210 
2211      l_asset_hdr_rec.asset_id          := p_asset_id;
2212      l_asset_hdr_rec.book_type_code    := p_book_type_code;
2213 
2214      if NOT fa_cache_pkg.fazcbc(x_book => l_asset_hdr_rec.book_type_code) then
2215        OKL_API.SET_MESSAGE(p_app_name     => g_app_name,
2216                            p_msg_name     => 'OKL_LLA_FA_CACHE_ERROR'
2217                           );
2218        Raise OKL_API.G_EXCEPTION_ERROR;
2219      end if;
2220 
2221      -- To fetch Depreciation Reserve
2222      if not FA_UTIL_PVT.get_asset_deprn_rec
2223                 (p_asset_hdr_rec         => l_asset_hdr_rec ,
2224                  px_asset_deprn_rec      => l_asset_deprn_rec,
2225                  p_period_counter        => NULL,
2226                  p_mrc_sob_type_code     => 'P'
2227                  ) then
2228        OKL_API.SET_MESSAGE(p_app_name     => g_app_name,
2229                            p_msg_name     => 'OKL_LLA_FA_DEPRN_REC_ERROR'
2230                           );
2231        Raise OKL_API.G_EXCEPTION_ERROR;
2232      end if;
2233 
2234      x_asset_deprn_rec := l_asset_deprn_rec;
2235 
2236      --Call end Activity
2237      OKL_API.END_ACTIVITY(x_msg_count, x_msg_data);
2238   EXCEPTION
2239     WHEN OKL_API.G_EXCEPTION_ERROR Then
2240       x_return_status :=OKL_API.HANDLE_EXCEPTIONS
2241       (
2242       l_api_name,
2243       G_PKG_NAME,
2244       'OKL_API.G_RET_STS_ERROR',
2245       x_msg_count,
2246       x_msg_data,
2247       '_PVT'
2248       );
2249     WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
2250       x_return_status :=OKL_API.HANDLE_EXCEPTIONS
2251       (
2252       l_api_name,
2253       G_PKG_NAME,
2254       'OKL_API.G_RET_STS_UNEXP_ERROR',
2255       x_msg_count,
2256       x_msg_data,
2257       '_PVT'
2258       );
2259     WHEN OTHERS THEN
2260       x_return_status :=OKL_API.HANDLE_EXCEPTIONS
2261       (
2262       l_api_name,
2263       G_PKG_NAME,
2264       'OTHERS',
2265       x_msg_count,
2266       x_msg_data,
2267       '_PVT'
2268       );
2269   END get_deprn_reserve;
2270 --Bug# 5946411 End
2271 -----------------------------------------------------------------
2272 --Bug# 5946411: ER
2273 --added procedure to create split asset return
2274 -----------------------------------------------------------------
2275  PROCEDURE create_split_asset_return(  p_api_version   IN  NUMBER,
2276                               p_init_msg_list IN  VARCHAR2,
2277                               x_return_status OUT NOCOPY VARCHAR2,
2278                               x_msg_count     OUT NOCOPY NUMBER,
2279                               x_msg_data      OUT NOCOPY VARCHAR2,
2280                               p_kle_id        IN  NUMBER,
2281                               p_cle_tbl       IN  cle_tbl_type,
2282                               p_txlv_rec      IN  txlv_rec_type
2283                               ) IS
2284   l_api_name             CONSTANT VARCHAR2(30) := 'create_split_asset_return';
2285   l_api_version          CONSTANT NUMBER := 1.0;
2286   lp_artv_rec             OKL_AM_ASSET_RETURN_PUB.artv_rec_type;
2287   lp_upd_artv_rec             OKL_AM_ASSET_RETURN_PUB.artv_rec_type;
2288   lx_artv_rec             OKL_AM_ASSET_RETURN_PUB.artv_rec_type;
2289     -- Get asset return for asset with status Scheduled
2290    CURSOR l_asset_return_csr ( p_kle_id IN NUMBER) IS
2291     SELECT  id,
2292             RMR_ID,
2293             ART1_CODE,
2294             RELOCATE_ASSET_YN,
2295             VOLUNTARY_YN,
2296             COMMMERCIALLY_REAS_SALE_YN,
2297             ORG_ID,
2298             FLOOR_PRICE,
2299             NEW_ITEM_PRICE,
2300             NEW_ITEM_NUMBER,
2301             ASSET_RELOCATED_YN,
2302             REPURCHASE_AGMT_YN,
2303             CURRENCY_CODE,
2304             CURRENCY_CONVERSION_CODE,
2305             CURRENCY_CONVERSION_TYPE,
2306             CURRENCY_CONVERSION_RATE,
2307             CURRENCY_CONVERSION_DATE,
2308             --Bug# 6336455
2309             LEGAL_ENTITY_ID
2310     FROM   OKL_ASSET_RETURNS_b
2311     WHERE  kle_id = p_kle_id
2312     AND    ars_code = 'SCHEDULED';
2313    -- Get the non-cancelled asset return for asset
2314     CURSOR l_check_asset_return_csr ( p_kle_id IN NUMBER) IS
2315     select 'N' from dual
2316     where exists (
2317     SELECT 1
2318     FROM   OKL_ASSET_RETURNS_V
2319     WHERE  kle_id = p_kle_id
2320     AND    ars_code <> 'CANCELLED'
2321     );
2322     cursor l_term_date_csr ( p_kle_id IN NUMBER)
2323     IS
2324     select date_terminated
2325     from okc_k_lines_b
2326     where id=p_kle_id;
2327     CURSOR l_trmnt_line_csr(p_cle_id IN OKC_K_LINES_B.ID%TYPE)
2328     IS
2329     SELECT cle.id id
2330     FROM okc_k_lines_b cle
2331     CONNECT BY PRIOR cle.id = cle.cle_id
2332     START WITH cle.id = p_cle_id;
2333     l_return_needed         VARCHAR2(1) := 'Y';
2334     l_asset_return_rec l_asset_return_csr%ROWTYPE;
2335     l_source_cle_id NUMBER;
2336     i                       NUMBER := 1;
2337     l_parent_unit NUMBER;
2338     l_child_unit NUMBER;
2339     l_split_factor NUMBER;
2340     l_term_date DATE;
2341     l_clev_rec               OKL_OKC_MIGRATION_PVT.clev_rec_type;
2342     l_klev_rec               OKL_CONTRACT_PUB.klev_rec_type;
2343     lx_clev_rec              OKL_OKC_MIGRATION_PVT.clev_rec_type;
2344     lx_klev_rec              OKL_CONTRACT_PUB.klev_rec_type;
2345     l_chld_total_flr_price NUMBER:=0.0;
2346   begin
2347     x_return_status := OKL_API.G_RET_STS_SUCCESS;
2348     -- Call start_activity to create savepoint, check compatibility
2349     -- and initialize message list
2350     x_return_status := OKL_API.START_ACTIVITY (
2351                                l_api_name
2352                                ,p_init_msg_list
2353                                ,'_PVT'
2354                                ,x_return_status);
2355    -- Check if activity started successfully
2356    IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
2357       RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
2358    ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
2359       RAISE OKL_API.G_EXCEPTION_ERROR;
2360    END IF;
2361    l_source_cle_id :=p_kle_id;
2362    --dbms_output.put_line(' l_source_cle_id'||l_source_cle_id);
2363  FOR  l_asset_return_rec in l_asset_return_csr(l_source_cle_id)
2364    LOOP
2365     --dbms_output.put_line('CSAR--> found');
2366    IF p_cle_tbl.COUNT > 0 THEN
2367     --get the split factor
2368     if NVL(p_txlv_rec.SPLIT_INTO_SINGLES_FLAG,'X')='Y' THEN
2369         l_parent_unit :=1;
2370         l_child_unit:=1;
2371      else
2372        l_parent_unit:= p_txlv_rec.CURRENT_UNITS - NVL(p_txlv_rec.SPLIT_INTO_UNITS,0);
2373        l_child_unit:=p_txlv_rec.SPLIT_INTO_UNITS;
2374     end if;
2375   -- dbms_output.put_line('l_parent_unit-->'||l_parent_unit);
2376   -- dbms_output.put_line('l_child_unit-->'||l_child_unit);
2377     --get the termination date
2378     OPEN l_term_date_csr(l_source_cle_id);
2379     FETCH l_term_date_csr INTO l_term_date;
2380     CLOSE l_term_date_csr;
2381    FOR i IN p_cle_tbl.FIRST..p_cle_tbl.LAST
2382     LOOP
2383     --dbms_output.put_line('procssing --> '|| p_cle_tbl(i).cle_id);
2384      if l_source_cle_id <> p_cle_tbl(i).cle_id then
2385         l_split_factor:=l_child_unit/p_txlv_rec.current_units;
2386        -- dbms_output.put_line('CSAR-->child l_split_factor>'||l_split_factor);
2387         -- Check if return created
2388         l_return_needed:='Y';
2389         OPEN  l_check_asset_return_csr (p_cle_tbl(i).cle_id);
2390         FETCH l_check_asset_return_csr INTO l_return_needed;
2391         CLOSE l_check_asset_return_csr;
2392         IF l_return_needed='Y' THEN
2393         --dbms_output.put_line('Creating asset return for >'||p_cle_tbl(i).cle_id);
2394 		lp_artv_rec.KLE_ID	:=  p_cle_tbl(i).cle_id;
2395 		lp_artv_rec.RMR_ID	:= l_asset_return_rec.RMR_ID;
2396 		lp_artv_rec.ARS_CODE := 'SCHEDULED';--l_asset_return_rec.ARS_CODE;
2397 	--	lp_artv_rec.IMR_ID	:= l_asset_return_rec.IMR_ID;
2398 		lp_artv_rec.ART1_CODE	:= l_asset_return_rec.ART1_CODE;
2399 		lp_artv_rec.RELOCATE_ASSET_YN	:= l_asset_return_rec.RELOCATE_ASSET_YN;
2400 		lp_artv_rec.VOLUNTARY_YN	:= l_asset_return_rec.VOLUNTARY_YN;
2401  		lp_artv_rec.COMMMERCIALLY_REAS_SALE_YN	:= l_asset_return_rec.COMMMERCIALLY_REAS_SALE_YN;
2402 		lp_artv_rec.ORG_ID	:= l_asset_return_rec.ORG_ID;
2403     	lp_artv_rec.FLOOR_PRICE	:=  l_split_factor * NVL(l_asset_return_rec.FLOOR_PRICE,0.0);
2404     	l_chld_total_flr_price := l_chld_total_flr_price+NVL(lp_artv_rec.FLOOR_PRICE,0.0);
2405     --	lp_artv_rec.NEW_ITEM_PRICE	:= l_split_factor * NVL(l_asset_return_rec.NEW_ITEM_PRICE,0.0);
2406     --	lp_artv_rec.NEW_ITEM_NUMBER	:= l_asset_return_rec.NEW_ITEM_NUMBER;
2407 		lp_artv_rec.ASSET_RELOCATED_YN	:= l_asset_return_rec.ASSET_RELOCATED_YN;
2408 		lp_artv_rec.REPURCHASE_AGMT_YN	:= l_asset_return_rec.REPURCHASE_AGMT_YN;
2409 		lp_artv_rec.CURRENCY_CODE	:= l_asset_return_rec.CURRENCY_CODE;
2410 		lp_artv_rec.CURRENCY_CONVERSION_CODE	:= l_asset_return_rec.CURRENCY_CONVERSION_CODE;
2411 		lp_artv_rec.CURRENCY_CONVERSION_TYPE	:= l_asset_return_rec.CURRENCY_CONVERSION_TYPE;
2412 		lp_artv_rec.CURRENCY_CONVERSION_RATE	:= l_asset_return_rec.CURRENCY_CONVERSION_RATE;
2413 		lp_artv_rec.CURRENCY_CONVERSION_DATE	:= l_asset_return_rec.CURRENCY_CONVERSION_DATE;
2414 
2415             --Bug# 6336455
2416             lp_artv_rec.LEGAL_ENTITY_ID := l_asset_return_rec.LEGAL_ENTITY_ID;
2417 
2418         -- call insert of tapi
2419        OKL_ASSET_RETURNS_PUB.insert_asset_returns(
2420 	    p_api_version              => p_api_version,
2421         p_init_msg_list            => OKL_API.G_FALSE,
2422         x_return_status            => x_return_status,
2423         x_msg_count                => x_msg_count,
2424         x_msg_data                 => x_msg_data,
2425         p_artv_rec                 => lp_artv_rec,
2426         x_artv_rec                 => lx_artv_rec);
2427       -- dbms_output.put_line('Calling OKL_ASSET_RETURNS_PUB.insert_asset_returns  status >'||x_return_status);
2428       IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
2429        RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
2430       ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
2431        RAISE OKL_API.G_EXCEPTION_ERROR;
2432       END IF;
2433       --upade the termination date on the lines and subliines
2434        FOR r_trmnt_line_csr IN
2435           l_trmnt_line_csr(p_cle_id => p_cle_tbl(i).cle_id) LOOP
2436           l_clev_rec.id              := r_trmnt_line_csr.id;
2437           l_klev_rec.id              := r_trmnt_line_csr.id;
2438           l_clev_rec.date_terminated := l_term_date;
2439           OKL_CONTRACT_PUB.update_contract_line(
2440                            p_api_version    => l_api_version,
2441                            p_init_msg_list  => p_init_msg_list,
2442                            x_return_status  => x_return_status,
2443                            x_msg_count      => x_msg_count,
2444                            x_msg_data       => x_msg_data,
2445                            p_clev_rec       => l_clev_rec,
2446                            p_klev_rec       => l_klev_rec,
2447                            x_clev_rec       => lx_clev_rec,
2448                            x_klev_rec       => lx_klev_rec);
2449           IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
2450               RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
2451           ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
2452                RAISE OKL_API.G_EXCEPTION_ERROR;
2453           END IF;
2454         END LOOP; --inner loop
2455       END IF; --return needed
2456       END IF; --soucer id<> pkle_id
2457     END LOOP; -- p_cle_tbl loop end
2458     -- this is parent asset so adjust the floor price
2459      lp_upd_artv_rec.id:=l_asset_return_rec.id;
2460      lp_upd_artv_rec.FLOOR_PRICE := NVL(l_asset_return_rec.FLOOR_PRICE,0.0)-l_chld_total_flr_price;
2461      -- call update of tapi
2462      OKL_ASSET_RETURNS_PUB.update_asset_returns(
2463       p_api_version        => p_api_version,
2464       p_init_msg_list      =>  OKL_API.G_FALSE,
2465       x_return_status      => x_return_status,
2466       x_msg_count          => x_msg_count,
2467       x_msg_data           => x_msg_data,
2468       p_artv_rec           => lp_upd_artv_rec,
2469       x_artv_rec           => lx_artv_rec);
2470     -- dbms_output.put_line('Calling OKL_ASSET_RETURNS_PUB.update_asset_returns  status >'||x_return_status);
2471      IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
2472       RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
2473      ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
2474       RAISE OKL_API.G_EXCEPTION_ERROR;
2475      END IF;
2476    END IF; --p_cle_tbl >0
2477   END LOOP; --aset rturn record
2478    OKL_API.END_ACTIVITY (x_msg_count,x_msg_data );
2479     EXCEPTION
2480     WHEN OKL_API.G_EXCEPTION_ERROR THEN
2481     x_return_status := OKL_API.HANDLE_EXCEPTIONS(
2482                                l_api_name,
2483                                G_PKG_NAME,
2484                                'OKL_API.G_RET_STS_ERROR',
2485                                x_msg_count,
2486                                x_msg_data,
2487                                '_PVT');
2488     WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
2489     x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
2490                               l_api_name,
2491                               G_PKG_NAME,
2492                               'OKL_API.G_RET_STS_UNEXP_ERROR',
2493                               x_msg_count,
2494                               x_msg_data,
2495                               '_PVT');
2496     WHEN OTHERS THEN
2497     x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
2498                               l_api_name,
2499                               G_PKG_NAME,
2500                               'OTHERS',
2501                               x_msg_count,
2502                               x_msg_data,
2503                               '_PVT');
2504    end create_split_asset_return;
2505 
2506 -----------------------------------------------
2507 -- Bug# 5946411: ER
2508 -- added procedure to check pending transaction
2509 -----------------------------------------------
2510   PROCEDURE Check_Offlease_Trans(p_api_version    IN  NUMBER,
2511                               p_init_msg_list  IN  VARCHAR2,
2512                               x_return_status  OUT NOCOPY VARCHAR2,
2513                               x_msg_count      OUT NOCOPY NUMBER,
2514                               x_msg_data       OUT NOCOPY VARCHAR2,
2515                               p_cle_id         IN  NUMBER
2516                               ) is
2517   l_return_status        VARCHAR2(1)  DEFAULT OKL_API.G_RET_STS_SUCCESS;
2518   l_api_name             CONSTANT VARCHAR2(30) := 'CHECK_OFFLEASE_TRANS';
2519   l_api_version          CONSTANT NUMBER := 1.0;
2520 
2521    --cursor to fetch the corporate and tax book for the given asset
2522    CURSOR l_okxassetlines_csr(p_kle_id IN NUMBER) IS
2523    SELECT o.asset_id, o.asset_number, o.corporate_book, a.cost, o.depreciation_category, a.original_cost, o.current_units,
2524           o.dnz_chr_id ,a.book_type_code, b.book_class, a.prorate_convention_code
2525    FROM   okx_asset_lines_v o, fa_books a, fa_book_controls b
2526    WHERE  o.parent_line_id = p_kle_id
2527    AND    o.asset_id = a.asset_id
2528    AND    a.book_type_code = b.book_type_code
2529    AND    a.date_ineffective IS NULL
2530    AND    a.transaction_header_id_out IS NULL
2531    ORDER BY book_class;
2532 
2533    CURSOR l_offlseassettrx_csr(cp_trx_date IN DATE, cp_asset_number IN VARCHAR2) IS
2534    SELECT h.tsu_code, h.tas_type,  h.date_trans_occurred, l.dnz_asset_id,
2535           l.asset_number, l.kle_id ,l.DNZ_KHR_ID
2536    FROM   OKL_TRX_ASSETS h, OKL_TXL_ASSETS_B l
2537    WHERE  h.id = l.tas_id
2538    AND    h.date_trans_occurred <= cp_trx_date
2539    AND    h.tas_type in ('AMT','AUD','AUS')
2540    AND    l.asset_number = cp_asset_number;
2541 
2542  l_okxassetlines_rec         l_okxassetlines_csr%ROWTYPE;
2543  l_name               OKL_TXL_ASSETS_B.asset_number%TYPE;
2544  l_trx_status         VARCHAR2(30);
2545 
2546 
2547   BEGIN
2548         -- Call start_activity to create savepoint, check compatibility
2549       -- and initialize message list
2550       x_return_status := OKL_API.START_ACTIVITY (
2551                                  l_api_name
2552                                  ,p_init_msg_list
2553                                  ,'_PVT'
2554                                  ,x_return_status);
2555       -- Check if activity started successfully
2556       IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
2557          RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
2558       ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
2559          RAISE OKL_API.G_EXCEPTION_ERROR;
2560       END IF;
2561 
2562     FOR l_okxassetlines_rec IN l_okxassetlines_csr(p_cle_id) LOOP
2563         l_name:=l_okxassetlines_rec.asset_number;
2564         l_trx_status := NULL;
2565         FOR  l_offlseassettrx_rec IN l_offlseassettrx_csr(sysdate,l_name) LOOP
2566 			      l_trx_status := l_offlseassettrx_rec.tsu_code;
2567 			      IF l_trx_status IN ('ENTERED','ERROR') THEN
2568 			         EXIT;
2569 			      END IF;
2570 		 END LOOP;
2571         IF l_trx_status IN ('ENTERED','ERROR') THEN -- if any trx has this status
2572            --dbms_output.put_line('Pending transactions');
2573                   x_return_status := OKL_API.G_RET_STS_ERROR;
2574                   OKL_API.set_message( p_app_name      => 'OKL',
2575                                p_msg_name      => 'OKL_AM_PENDING_OFFLEASE',
2576                                p_token1        => 'ASSET_NUMBER',
2577                                p_token1_value  => l_name);
2578                   RAISE OKL_API.G_EXCEPTION_ERROR;
2579         end if ;
2580    end loop;
2581    OKL_API.END_ACTIVITY (x_msg_count,x_msg_data );
2582  EXCEPTION
2583       WHEN OKL_API.G_EXCEPTION_ERROR THEN
2584       IF l_offlseassettrx_csr%ISOPEN THEN
2585           CLOSE l_offlseassettrx_csr;
2586       END IF;
2587      IF l_okxassetlines_csr%ISOPEN THEN
2588           CLOSE l_okxassetlines_csr;
2589       END IF;
2590       x_return_status := OKL_API.HANDLE_EXCEPTIONS(
2591                                l_api_name,
2592                                G_PKG_NAME,
2593                                'OKL_API.G_RET_STS_ERROR',
2594                                x_msg_count,
2595                                x_msg_data,
2596                                '_PVT');
2597      WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
2598       IF l_offlseassettrx_csr%ISOPEN THEN
2599           CLOSE l_offlseassettrx_csr;
2600       END IF;
2601       IF l_okxassetlines_csr%ISOPEN THEN
2602           CLOSE l_okxassetlines_csr;
2603       END IF;
2604       x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
2605                               l_api_name,
2606                               G_PKG_NAME,
2607                               'OKL_API.G_RET_STS_UNEXP_ERROR',
2608                               x_msg_count,
2609                               x_msg_data,
2610                               '_PVT');
2611      WHEN OTHERS 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                               'OTHERS',
2622                               x_msg_count,
2623                               x_msg_data,
2624                               '_PVT');
2625   END Check_Offlease_Trans;
2626 
2627 --------------
2628 --Bug# 3156924
2629 --------------
2630 --date validation routine
2631 --should be called from UI(revision page only ):
2632 
2633   PROCEDURE validate_trx_date(p_api_version    IN  NUMBER,
2634                               p_init_msg_list  IN  VARCHAR2,
2635                               x_return_status  OUT NOCOPY VARCHAR2,
2636                               x_msg_count      OUT NOCOPY NUMBER,
2637                               x_msg_data       OUT NOCOPY VARCHAR2,
2638                               p_chr_id         IN  NUMBER,
2639                               p_trx_date       IN  VARCHAR2) IS
2640 
2641   l_return_status        VARCHAR2(1)  DEFAULT OKL_API.G_RET_STS_SUCCESS;
2642   l_api_name             CONSTANT VARCHAR2(30) := 'VALIDATE_TRX_DATE';
2643   l_api_version          CONSTANT NUMBER := 1.0;
2644 
2645 
2646   l_date_valid VARCHAR2(1) DEFAULT 'N';
2647   l_trx_date   DATE ;
2648 
2649   --cursor to check the date validity wrt contract dates
2650   CURSOR l_chrb_csr(ptrxdate IN DATE, pchrid IN NUMBER, pdateformat IN VARCHAR2) IS
2651   SELECT 'Y'                                  date_valid,
2652          TO_CHAR(chrb.start_date,pdateformat) con_start_date,
2653          TO_CHAR(chrb.end_date,pdateformat)   con_end_date,
2654          chrb.sts_code                        sts_code
2655   FROM   okc_k_headers_b chrb
2656   WHERE  ptrxdate BETWEEN TRUNC(chrb.start_date) AND TRUNC(chrb.end_date)
2657   AND    chrb.id = pchrid;
2658 
2659   l_chrb_rec         l_chrb_csr%ROWTYPE;
2660   l_icx_date_format  VARCHAR2(240);
2661 
2662 
2663   BEGIN
2664       x_return_status := l_return_status;
2665 
2666       -- Call start_activity to create savepoint, check compatibility
2667       -- and initialize message list
2668       x_return_status := OKL_API.START_ACTIVITY (
2669                                  l_api_name
2670                                  ,p_init_msg_list
2671                                  ,'_PVT'
2672                                  ,x_return_status);
2673       -- Check if activity started successfully
2674       IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
2675          RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
2676       ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
2677          RAISE OKL_API.G_EXCEPTION_ERROR;
2678       END IF;
2679 
2680       --0. verify date format
2681       BEGIN
2682           l_icx_date_format := fnd_profile.value('ICX_DATE_FORMAT_MASK');
2683           l_trx_date := TO_DATE(p_trx_date, l_icx_date_format);
2684           EXCEPTION
2685           WHEN OTHERS THEN
2686               okl_api.set_message(
2687                              G_APP_NAME,
2688                              G_LLA_INVALID_DATE_FORMAT,
2689                              'DATE_FORMAT',
2690                              l_icx_date_format,
2691                              'COL_NAME',
2692                              'Revision Date'
2693                             );
2694               x_return_status := OKL_API.G_RET_STS_ERROR;
2695       END;
2696 
2697       IF x_return_status <> OKL_API.G_RET_STS_SUCCESS THEN
2698           RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
2699       END IF;
2700 
2701 
2702       --1. Transaction date is required
2703       IF NVL(p_trx_date,okl_api.g_miss_char) = okl_api.g_miss_char THEN
2704          okl_api.set_message(
2705                              G_APP_NAME,
2706                              G_LLA_MISSING_TRX_DATE
2707                             );
2708          x_return_status := OKL_API.G_RET_STS_ERROR;
2709          RAISE OKL_API.G_EXCEPTION_ERROR;
2710       END IF;
2711 
2712       --2. Transaction date is between contract start and end date
2713       l_date_valid := 'N';
2714       OPEN l_chrb_csr(ptrxdate => l_trx_date, pchrid => p_chr_id, pdateformat => l_icx_date_format);
2715       FETCH l_chrb_csr INTO l_chrb_rec;
2716       IF l_chrb_csr%NOTFOUND THEN
2717           NULL;
2718       ELSE
2719           l_date_valid := l_chrb_rec.date_valid;
2720       END IF;
2721       CLOSE l_chrb_csr;
2722 
2723 
2724       IF (l_date_valid = 'N') THEN
2725          okl_api.set_message(
2726                              G_APP_NAME,
2727                              G_LLA_WRONG_TRX_DATE,
2728                              'START_DATE',
2729                              l_chrb_rec.con_start_date,
2730                              'END_DATE',
2731                              l_chrb_rec.con_end_date
2732                             );
2733          x_return_status := OKL_API.G_RET_STS_ERROR;
2734          RAISE OKL_API.G_EXCEPTION_ERROR;
2735       END IF;
2736 
2737       --3. contracts which are not active can not be split asset
2738       IF (NVL(l_chrb_rec.sts_code,OKL_API.G_MISS_CHAR) <> 'BOOKED') THEN
2739          okl_api.set_message(
2740                              G_APP_NAME,
2741                              G_LLA_REV_ONLY_BOOKED
2742                             );
2743          x_return_status := OKL_API.G_RET_STS_ERROR;
2744          RAISE OKL_API.G_EXCEPTION_ERROR;
2745       END IF;
2746       OKL_API.END_ACTIVITY (x_msg_count,
2747                           x_msg_data );
2748       EXCEPTION
2749       WHEN OKL_API.G_EXCEPTION_ERROR THEN
2750       IF l_chrb_csr%ISOPEN THEN
2751           CLOSE l_chrb_csr;
2752       END IF;
2753       x_return_status := OKL_API.HANDLE_EXCEPTIONS(
2754                                l_api_name,
2755                                G_PKG_NAME,
2756                                'OKL_API.G_RET_STS_ERROR',
2757                                x_msg_count,
2758                                x_msg_data,
2759                                '_PVT');
2760       WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
2761       IF l_chrb_csr%ISOPEN THEN
2762           CLOSE l_chrb_csr;
2763       END IF;
2764       x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
2765                               l_api_name,
2766                               G_PKG_NAME,
2767                               'OKL_API.G_RET_STS_UNEXP_ERROR',
2768                               x_msg_count,
2769                               x_msg_data,
2770                               '_PVT');
2771       WHEN OTHERS THEN
2772       IF l_chrb_csr%ISOPEN THEN
2773           CLOSE l_chrb_csr;
2774       END IF;
2775       x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
2776                               l_api_name,
2777                               G_PKG_NAME,
2778                               'OTHERS',
2779                               x_msg_count,
2780                               x_msg_data,
2781                               '_PVT');
2782 
2783   END validate_trx_date;
2784 
2785 -----------------------------------------------------------------
2786 --01-Mar-2004: Bug# 3156924
2787 --overloaded will be called locally from create_split_transaction
2788 -----------------------------------------------------------------
2789   PROCEDURE validate_trx_date(p_api_version    IN  NUMBER,
2790                               p_init_msg_list  IN  VARCHAR2,
2791                               x_return_status  OUT NOCOPY VARCHAR2,
2792                               x_msg_count      OUT NOCOPY NUMBER,
2793                               x_msg_data       OUT NOCOPY VARCHAR2,
2794                               p_cle_id         IN  NUMBER,
2795                               p_trx_date       IN  DATE) IS
2796 
2797   l_return_status        VARCHAR2(1)  DEFAULT OKL_API.G_RET_STS_SUCCESS;
2798   l_api_name             CONSTANT VARCHAR2(30) := 'VALIDATE_TRX_DATE';
2799   l_api_version          CONSTANT NUMBER := 1.0;
2800 
2801 
2802   l_date_valid VARCHAR2(1) DEFAULT 'N';
2803 
2804   --cursor to check the date validity wrt contract dates
2805   --Bug# 5946411: ER
2806   /*
2807   CURSOR l_cleb_csr(ptrxdate IN DATE, pcleid IN NUMBER, pdateformat IN VARCHAR2) IS
2808   SELECT 'Y'                                  date_valid,
2809          TO_CHAR(cleb.start_date,pdateformat) line_start_date,
2810          TO_CHAR(cleb.end_date,pdateformat)   line_end_date,
2811          cleb.sts_code                        sts_code
2812   FROM   okc_k_lines_b cleb
2813   WHERE  ptrxdate BETWEEN TRUNC(cleb.start_date) AND TRUNC(cleb.end_date)
2814   AND    cleb.id = pcleid;
2815   */
2816   CURSOR l_cleb_csr(pcleid IN NUMBER, pdateformat IN VARCHAR2) IS
2817   SELECT TO_CHAR(cleb.start_date,pdateformat) line_start_date,
2818          TO_CHAR(cleb.end_date,pdateformat)   line_end_date,
2819          cleb.sts_code                        sts_code,
2820          trunc(cleb.start_date)  cle_start_date,
2821          TRUNC(cleb.end_date)    cle_end_date
2822   FROM   okc_k_lines_b cleb
2823   WHERE  cleb.id = pcleid;
2824   --Bug# 5946411: ER end
2825 
2826   /*  --Added by HARIVEN - cursor to fetch the Start and  End Date
2827   CURSOR l_strdate_csr(pcleid IN NUMBER, pdateformat IN VARCHAR2) IS
2828   SELECT 'Y'                                  date_valid,
2829          TO_CHAR(cleb.start_date,pdateformat) line_start_date,
2830          TO_CHAR(cleb.end_date,pdateformat)   line_end_date,
2831          cleb.sts_code                        sts_code
2832   FROM   okc_k_lines_b cleb
2833   WHERE  cleb.id = pcleid;*/
2834 
2835   l_cleb_rec         l_cleb_csr%ROWTYPE;
2836   l_icx_date_format  VARCHAR2(240);
2837 
2838 
2839   BEGIN
2840       x_return_status := l_return_status;
2841 
2842       -- Call start_activity to create savepoint, check compatibility
2843       -- and initialize message list
2844       x_return_status := OKL_API.START_ACTIVITY (
2845                                  l_api_name
2846                                  ,p_init_msg_list
2847                                  ,'_PVT'
2848                                  ,x_return_status);
2849       -- Check if activity started successfully
2850       IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
2851          RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
2852       ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
2853          RAISE OKL_API.G_EXCEPTION_ERROR;
2854       END IF;
2855 
2856       --1. Transaction date is required
2857       IF NVL(p_trx_date,okl_api.g_miss_date) = okl_api.g_miss_date THEN
2858          okl_api.set_message(
2859                              G_APP_NAME,
2860                              G_LLA_MISSING_TRX_DATE
2861                             );
2862          x_return_status := OKL_API.G_RET_STS_ERROR;
2863          RAISE OKL_API.G_EXCEPTION_ERROR;
2864       END IF;
2865 
2866       l_icx_date_format := NVL(fnd_profile.value('ICX_DATE_FORMAT_MASK'),'DD-MON-YYYY');
2867       --2. Transaction date is between contract start and end date
2868       --Bug# 5946411: ER
2869       /*
2870       l_date_valid := 'N';
2871       OPEN l_cleb_csr(ptrxdate => p_trx_date, pcleid => p_cle_id, pdateformat => l_icx_date_format);
2872       FETCH l_cleb_csr INTO l_cleb_rec;
2873       IF l_cleb_csr%NOTFOUND THEN
2874           NULL;
2875       ELSE
2876           l_date_valid := l_cleb_rec.date_valid;
2877       END IF;
2878       CLOSE l_cleb_csr;
2879       */
2880       l_date_valid := 'Y';
2881       OPEN l_cleb_csr( pcleid => p_cle_id, pdateformat => l_icx_date_format);
2882       FETCH l_cleb_csr INTO l_cleb_rec;
2883       IF l_cleb_csr%NOTFOUND THEN
2884           NULL;
2885       ELSE
2886           if (l_cleb_rec.sts_code  = 'BOOKED')
2887              AND NOT (p_trx_date BETWEEN l_cleb_rec.cle_start_date AND l_cleb_rec.cle_end_date) THEN
2888             l_date_valid := 'N';
2889           end if;
2890       END IF;
2891       CLOSE l_cleb_csr;
2892 
2893       --Bug# 5946411: ER End
2894 
2895 
2896       IF (l_date_valid = 'N') THEN
2897       /*OPEN l_strdate_csr(pcleid => p_cle_id, pdateformat => l_icx_date_format);
2898       FETCH l_strdate_csr INTO l_cleb_rec;
2899       IF l_strdate_csr%NOTFOUND THEN
2900           NULL;
2901       ELSE
2902           l_date_valid := l_cleb_rec.date_valid;
2903       END IF;
2904       CLOSE l_strdate_csr;*/
2905          okl_api.set_message(
2906                              G_APP_NAME,
2907                              G_LLA_WRONG_TRX_DATE,
2908                              'START_DATE',
2909                              l_cleb_rec.line_start_date,
2910                              'END_DATE',
2911                              l_cleb_rec.line_end_date
2912                             );
2913          x_return_status := OKL_API.G_RET_STS_ERROR;
2914          RAISE OKL_API.G_EXCEPTION_ERROR;
2915       END IF;
2916       EXCEPTION
2917       WHEN OKL_API.G_EXCEPTION_ERROR THEN
2918       IF l_cleb_csr%ISOPEN THEN
2919           CLOSE l_cleb_csr;
2920       END IF;
2921       x_return_status := OKL_API.HANDLE_EXCEPTIONS(
2922                                l_api_name,
2923                                G_PKG_NAME,
2924                                'OKL_API.G_RET_STS_ERROR',
2925                                x_msg_count,
2926                                x_msg_data,
2927                                '_PVT');
2928       WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
2929       IF l_cleb_csr%ISOPEN THEN
2930           CLOSE l_cleb_csr;
2931       END IF;
2932       x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
2933                               l_api_name,
2934                               G_PKG_NAME,
2935                               'OKL_API.G_RET_STS_UNEXP_ERROR',
2936                               x_msg_count,
2937                               x_msg_data,
2938                               '_PVT');
2939       WHEN OTHERS THEN
2940       IF l_cleb_csr%ISOPEN THEN
2941           CLOSE l_cleb_csr;
2942       END IF;
2943       x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
2944                               l_api_name,
2945                               G_PKG_NAME,
2946                               'OTHERS',
2947                               x_msg_count,
2948                               x_msg_data,
2949                               '_PVT');
2950 
2951   END validate_trx_date;
2952 ---------------
2953 --Bug# 3156924
2954 --------------
2955 -------------------------------------------------------------------------------
2956 --Function to get Asset Line Record
2957 ------------------------------------------------------------------------------
2958 FUNCTION get_ast_line(p_cle_id IN NUMBER,
2959                       x_no_data_found OUT NOCOPY BOOLEAN)
2960 RETURN ast_line_rec_type IS
2961 CURSOR ast_line_curs(p_cle_id IN NUMBER) IS
2962 SELECT
2963         ID1,
2964         ID2,
2965         NAME,
2966         DESCRIPTION,
2967         ITEM_DESCRIPTION,
2968         COMMENTS,
2969         CHR_ID,
2970         DNZ_CHR_ID,
2971         LTY_CODE,
2972         LSE_TYPE,
2973         LSE_PARENT_ID,
2974         PARENT_LINE_ID,
2975         LINE_NUMBER,
2976         DATE_TERMINATED,
2977         START_DATE_ACTIVE,
2978         END_DATE_ACTIVE,
2979         STATUS,
2980         ASSET_ID,
2981         QUANTITY,
2982         UNIT_OF_MEASURE_CODE,
2983         ASSET_NUMBER,
2984         CORPORATE_BOOK,
2985         LIFE_IN_MONTHS,
2986         ORIGINAL_COST,
2987         COST,
2988         ADJUSTED_COST,
2989         TAG_NUMBER,
2990         CURRENT_UNITS,
2991         SERIAL_NUMBER,
2992         REVAL_CEILING,
2993         NEW_USED,
2994         IN_SERVICE_DATE,
2995         MANUFACTURER_NAME,
2996         MODEL_NUMBER,
2997         ASSET_TYPE,
2998         SALVAGE_VALUE,
2999         PERCENT_SALVAGE_VALUE,
3000         DEPRECIATION_CATEGORY,
3001         DEPRN_START_DATE,
3002         DEPRN_METHOD_CODE,
3003         RATE_ADJUSTMENT_FACTOR,
3004         BASIC_RATE,
3005         ADJUSTED_RATE,
3006         RECOVERABLE_COST,
3007         ORG_ID,
3008         SET_OF_BOOKS_ID,
3009     PROPERTY_TYPE_CODE,
3010     PROPERTY_1245_1250_CODE,
3011     IN_USE_FLAG,
3012     OWNED_LEASED,
3013     INVENTORIAL,
3014     LINE_STATUS
3015 FROM    OKX_ASSET_LINES_V
3016 WHERE   parent_line_id = p_cle_id;
3017 l_ast_line_rec ast_line_rec_type;
3018 BEGIN
3019     x_no_data_found := TRUE;
3020     OPEN  ast_line_curs(p_cle_id);
3021     FETCH ast_line_curs INTO
3022         l_ast_line_rec.ID1,
3023         l_ast_line_rec.ID2,
3024         l_ast_line_rec.NAME,
3025         l_ast_line_rec.DESCRIPTION,
3026         l_ast_line_rec.ITEM_DESCRIPTION,
3027         l_ast_line_rec.COMMENTS,
3028         l_ast_line_rec.CHR_ID,
3029         l_ast_line_rec.DNZ_CHR_ID,
3030         l_ast_line_rec.LTY_CODE,
3031         l_ast_line_rec.LSE_TYPE,
3032         l_ast_line_rec.LSE_PARENT_ID,
3033         l_ast_line_rec.PARENT_LINE_ID,
3034         l_ast_line_rec.LINE_NUMBER,
3035         l_ast_line_rec.DATE_TERMINATED,
3036         l_ast_line_rec.START_DATE_ACTIVE,
3037         l_ast_line_rec.END_DATE_ACTIVE,
3038         l_ast_line_rec.STATUS,
3039         l_ast_line_rec.ASSET_ID,
3040         l_ast_line_rec.QUANTITY,
3041         l_ast_line_rec.UNIT_OF_MEASURE_CODE,
3042         l_ast_line_rec.ASSET_NUMBER,
3043         l_ast_line_rec.CORPORATE_BOOK,
3044         l_ast_line_rec.LIFE_IN_MONTHS,
3045         l_ast_line_rec.ORIGINAL_COST,
3046         l_ast_line_rec.COST,
3047         l_ast_line_rec.ADJUSTED_COST,
3048         l_ast_line_rec.TAG_NUMBER,
3049         l_ast_line_rec.CURRENT_UNITS,
3050         l_ast_line_rec.SERIAL_NUMBER,
3051         l_ast_line_rec.REVAL_CEILING,
3052         l_ast_line_rec.NEW_USED,
3053         l_ast_line_rec.IN_SERVICE_DATE,
3054         l_ast_line_rec.MANUFACTURER_NAME,
3055         l_ast_line_rec.MODEL_NUMBER,
3056         l_ast_line_rec.ASSET_TYPE,
3057         l_ast_line_rec.SALVAGE_VALUE,
3058         l_ast_line_rec.PERCENT_SALVAGE_VALUE,
3059         l_ast_line_rec.DEPRECIATION_CATEGORY,
3060         l_ast_line_rec.DEPRN_START_DATE,
3061         l_ast_line_rec.DEPRN_METHOD_CODE,
3062         l_ast_line_rec.RATE_ADJUSTMENT_FACTOR,
3063         l_ast_line_rec.BASIC_RATE,
3064         l_ast_line_rec.ADJUSTED_RATE,
3065         l_ast_line_rec.RECOVERABLE_COST,
3066         l_ast_line_rec.ORG_ID,
3067         l_ast_line_rec.SET_OF_BOOKS_ID,
3068     l_ast_line_rec.PROPERTY_TYPE_CODE,
3069     l_ast_line_rec.PROPERTY_1245_1250_CODE,
3070     l_ast_line_rec.IN_USE_FLAG,
3071     l_ast_line_rec.OWNED_LEASED,
3072     l_ast_line_rec.INVENTORIAL,
3073     l_ast_line_rec.LINE_STATUS;
3074 
3075         x_no_data_found := ast_line_curs%NOTFOUND;
3076         CLOSE  ast_line_curs;
3077         RETURN (l_ast_line_rec);
3078     END get_ast_line;
3079     FUNCTION get_ast_line (p_cle_id IN NUMBER) RETURN  ast_line_rec_type IS
3080        l_row_not_found    BOOLEAN := TRUE;
3081     BEGIN
3082         RETURN (get_ast_line(p_cle_id,l_row_not_found));
3083     END get_ast_line;
3084 --------------------------------------------------------------------------------
3085 --Function to get txl details for a given tal_id
3086 --------------------------------------------------------------------------------
3087 FUNCTION get_txlv_rec (
3088     p_kle_id         IN  NUMBER,
3089     x_no_data_found  OUT NOCOPY BOOLEAN
3090   ) RETURN txlv_rec_type IS
3091     CURSOR txlv_csr (p_kle_id                 IN NUMBER) IS
3092     SELECT ID,
3093            OBJECT_VERSION_NUMBER,
3094            SFWT_FLAG,
3095            TAS_ID,
3096            ILO_ID,
3097            ILO_ID_OLD,
3098            IAY_ID,
3099            IAY_ID_NEW,
3100            KLE_ID,
3101            DNZ_KHR_ID,
3102            LINE_NUMBER,
3103            ORG_ID,
3104            TAL_TYPE,
3105            ASSET_NUMBER,
3106            DESCRIPTION,
3107            FA_LOCATION_ID,
3108            ORIGINAL_COST,
3109            CURRENT_UNITS,
3110            MANUFACTURER_NAME,
3111            YEAR_MANUFACTURED,
3112            SUPPLIER_ID,
3113            USED_ASSET_YN,
3114            TAG_NUMBER,
3115            MODEL_NUMBER,
3116            CORPORATE_BOOK,
3117            DATE_PURCHASED,
3118            DATE_DELIVERY,
3119            IN_SERVICE_DATE,
3120            LIFE_IN_MONTHS,
3121            DEPRECIATION_ID,
3122            DEPRECIATION_COST,
3123            DEPRN_METHOD,
3124            DEPRN_RATE,
3125            SALVAGE_VALUE,
3126            PERCENT_SALVAGE_VALUE,
3127 --Bug# 2981308
3128            ASSET_KEY_ID,
3129            ATTRIBUTE_CATEGORY,
3130            ATTRIBUTE1,
3131            ATTRIBUTE2,
3132            ATTRIBUTE3,
3133            ATTRIBUTE4,
3134            ATTRIBUTE5,
3135            ATTRIBUTE6,
3136            ATTRIBUTE7,
3137            ATTRIBUTE8,
3138            ATTRIBUTE9,
3139            ATTRIBUTE10,
3140            ATTRIBUTE11,
3141            ATTRIBUTE12,
3142            ATTRIBUTE13,
3143            ATTRIBUTE14,
3144            ATTRIBUTE15,
3145            CREATED_BY,
3146            CREATION_DATE,
3147            LAST_UPDATED_BY,
3148            LAST_UPDATE_DATE,
3149            LAST_UPDATE_LOGIN,
3150            DEPRECIATE_YN,
3151            HOLD_PERIOD_DAYS,
3152            OLD_SALVAGE_VALUE,
3153            NEW_RESIDUAL_VALUE,
3154            OLD_RESIDUAL_VALUE,
3155            UNITS_RETIRED,
3156            COST_RETIRED,
3157            SALE_PROCEEDS,
3158            REMOVAL_COST,
3159            DNZ_ASSET_ID,
3160            DATE_DUE,
3161            REP_ASSET_ID,
3162            LKE_ASSET_ID,
3163            MATCH_AMOUNT,
3164            SPLIT_INTO_SINGLES_FLAG,
3165            SPLIT_INTO_UNITS,
3166 --Bug #2723498 : 11.5.9 - Multi currency compliance
3167            CURRENCY_CODE,
3168            CURRENCY_CONVERSION_TYPE,
3169            CURRENCY_CONVERSION_RATE,
3170            CURRENCY_CONVERSION_DATE
3171 -- Multi-Currency Change
3172      FROM  Okl_Txl_Assets_V
3173      WHERE okl_txl_assets_v.kle_id  = p_kle_id
3174      AND   EXISTS (SELECT NULL
3175                    FROM   okl_trx_Assets   trx,
3176                           okl_trx_types_tl ttyp
3177                    WHERE  trx.id = okl_txl_assets_v.tas_id
3178                    AND    trx.tsu_code  = 'ENTERED'
3179                    AND    trx.try_id    = ttyp.id
3180                    AND    ttyp.name     = 'Split Asset'
3181                    AND    ttyp.LANGUAGE = 'US');
3182 
3183     l_txlv_rec                     txlv_rec_type;
3184   BEGIN
3185     x_no_data_found := TRUE;
3186     -- Get current database values
3187     OPEN txlv_csr (p_kle_id => p_kle_id);
3188     FETCH txlv_csr INTO
3189               l_txlv_rec.ID,
3190               l_txlv_rec.OBJECT_VERSION_NUMBER,
3191               l_txlv_rec.SFWT_FLAG,
3192               l_txlv_rec.TAS_ID,
3193               l_txlv_rec.ILO_ID,
3194               l_txlv_rec.ILO_ID_OLD,
3195               l_txlv_rec.IAY_ID,
3196               l_txlv_rec.IAY_ID_NEW,
3197               l_txlv_rec.KLE_ID,
3198               l_txlv_rec.DNZ_KHR_ID,
3199               l_txlv_rec.LINE_NUMBER,
3200               l_txlv_rec.ORG_ID,
3201               l_txlv_rec.TAL_TYPE,
3202               l_txlv_rec.ASSET_NUMBER,
3203               l_txlv_rec.DESCRIPTION,
3204               l_txlv_rec.FA_LOCATION_ID,
3205               l_txlv_rec.ORIGINAL_COST,
3206               l_txlv_rec.CURRENT_UNITS,
3207               l_txlv_rec.MANUFACTURER_NAME,
3208               l_txlv_rec.YEAR_MANUFACTURED,
3209               l_txlv_rec.SUPPLIER_ID,
3210               l_txlv_rec.USED_ASSET_YN,
3211               l_txlv_rec.TAG_NUMBER,
3212               l_txlv_rec.MODEL_NUMBER,
3213               l_txlv_rec.CORPORATE_BOOK,
3214               l_txlv_rec.DATE_PURCHASED,
3215               l_txlv_rec.DATE_DELIVERY,
3216               l_txlv_rec.IN_SERVICE_DATE,
3217               l_txlv_rec.LIFE_IN_MONTHS,
3218               l_txlv_rec.DEPRECIATION_ID,
3219               l_txlv_rec.DEPRECIATION_COST,
3220               l_txlv_rec.DEPRN_METHOD,
3221               l_txlv_rec.DEPRN_RATE,
3222               l_txlv_rec.SALVAGE_VALUE,
3223               l_txlv_rec.PERCENT_SALVAGE_VALUE,
3224 --Bug# 2981308 :
3225               l_txlv_rec.ASSET_KEY_ID,
3226               l_txlv_rec.ATTRIBUTE_CATEGORY,
3227               l_txlv_rec.ATTRIBUTE1,
3228               l_txlv_rec.ATTRIBUTE2,
3229               l_txlv_rec.ATTRIBUTE3,
3230               l_txlv_rec.ATTRIBUTE4,
3231               l_txlv_rec.ATTRIBUTE5,
3232               l_txlv_rec.ATTRIBUTE6,
3233               l_txlv_rec.ATTRIBUTE7,
3234               l_txlv_rec.ATTRIBUTE8,
3235               l_txlv_rec.ATTRIBUTE9,
3236               l_txlv_rec.ATTRIBUTE10,
3237               l_txlv_rec.ATTRIBUTE11,
3238               l_txlv_rec.ATTRIBUTE12,
3239               l_txlv_rec.ATTRIBUTE13,
3240               l_txlv_rec.ATTRIBUTE14,
3241               l_txlv_rec.ATTRIBUTE15,
3242               l_txlv_rec.CREATED_BY,
3243               l_txlv_rec.CREATION_DATE,
3244               l_txlv_rec.LAST_UPDATED_BY,
3245               l_txlv_rec.LAST_UPDATE_DATE,
3246               l_txlv_rec.LAST_UPDATE_LOGIN,
3247               l_txlv_rec.DEPRECIATE_YN,
3248               l_txlv_rec.HOLD_PERIOD_DAYS,
3249               l_txlv_rec.OLD_SALVAGE_VALUE,
3250               l_txlv_rec.NEW_RESIDUAL_VALUE,
3251               l_txlv_rec.OLD_RESIDUAL_VALUE,
3252               l_txlv_rec.UNITS_RETIRED,
3253               l_txlv_rec.COST_RETIRED,
3254               l_txlv_rec.SALE_PROCEEDS,
3255               l_txlv_rec.REMOVAL_COST,
3256               l_txlv_rec.DNZ_ASSET_ID,
3257               l_txlv_rec.DATE_DUE,
3258               l_txlv_rec.REP_ASSET_ID,
3259               l_txlv_rec.LKE_ASSET_ID,
3260               l_txlv_rec.MATCH_AMOUNT,
3261               l_txlv_rec.SPLIT_INTO_SINGLES_FLAG,
3262               l_txlv_rec.SPLIT_INTO_UNITS,
3263 -- Multi-Currency Change
3264               l_txlv_rec.CURRENCY_CODE,
3265               l_txlv_rec.CURRENCY_CONVERSION_TYPE,
3266               l_txlv_rec.CURRENCY_CONVERSION_RATE,
3267               l_txlv_rec.CURRENCY_CONVERSION_DATE
3268               ;
3269 -- Multi-Currency Change
3270     x_no_data_found := txlv_csr%NOTFOUND;
3271     CLOSE txlv_csr;
3272     RETURN(l_txlv_rec);
3273 END get_txlv_rec;
3274 --------------------------------------------------------------------------------
3275 --Function to get trx details for a given tal_id
3276 --------------------------------------------------------------------------------
3277 FUNCTION get_trx_details (
3278     p_tal_id                       IN  NUMBER,
3279     x_no_data_found                OUT NOCOPY BOOLEAN
3280   ) RETURN txdv_tbl_type IS
3281     CURSOR txdv_csr(p_tal_id                 IN NUMBER) IS
3282     SELECT
3283             ID,
3284             OBJECT_VERSION_NUMBER,
3285             TAL_ID,
3286             TARGET_KLE_ID,
3287             LINE_DETAIL_NUMBER,
3288             ASSET_NUMBER,
3289             DESCRIPTION,
3290             QUANTITY,
3291             COST,
3292             TAX_BOOK,
3293             LIFE_IN_MONTHS_TAX,
3294             DEPRN_METHOD_TAX,
3295             DEPRN_RATE_TAX,
3296             SALVAGE_VALUE,
3297             SPLIT_PERCENT,
3298             INVENTORY_ITEM_ID,
3299             ATTRIBUTE_CATEGORY,
3300             ATTRIBUTE1,
3301             ATTRIBUTE2,
3302             ATTRIBUTE3,
3303             ATTRIBUTE4,
3304             ATTRIBUTE5,
3305             ATTRIBUTE6,
3306             ATTRIBUTE7,
3307             ATTRIBUTE8,
3308             ATTRIBUTE9,
3309             ATTRIBUTE10,
3310             ATTRIBUTE11,
3311             ATTRIBUTE12,
3312             ATTRIBUTE13,
3313             ATTRIBUTE14,
3314             ATTRIBUTE15,
3315             CREATED_BY,
3316             CREATION_DATE,
3317             LAST_UPDATED_BY,
3318             LAST_UPDATE_DATE,
3319             LAST_UPDATE_LOGIN,
3320 --Bug #2723498 : 11.5.9 - Multi currency compliance
3321             CURRENCY_CODE,
3322             CURRENCY_CONVERSION_TYPE,
3323             CURRENCY_CONVERSION_RATE,
3324             CURRENCY_CONVERSION_DATE
3325      FROM  Okl_Txd_Assets_v txdv
3326      WHERE  txdv.tal_id = p_tal_id
3327      ORDER  BY NVL(target_kle_id,-1)
3328      --Bug# 3502142
3329              , NVL(split_percent,-1);
3330 
3331     l_txdv_rec                      txdv_rec_type;
3332     l_txdv_tbl                      txdv_tbl_type;
3333     r_count                         NUMBER DEFAULT 0;
3334   BEGIN
3335     x_no_data_found := TRUE;
3336     -- Get current database values
3337     OPEN txdv_csr (p_tal_id);
3338     LOOP
3339     FETCH txdv_csr INTO
3340               l_txdv_rec.ID,
3341               l_txdv_rec.OBJECT_VERSION_NUMBER,
3342               l_txdv_rec.TAL_ID,
3343               l_txdv_rec.TARGET_KLE_ID,
3344               l_txdv_rec.LINE_DETAIL_NUMBER,
3345               l_txdv_rec.ASSET_NUMBER,
3346               l_txdv_rec.description,
3347               l_txdv_rec.QUANTITY,
3348               l_txdv_rec.COST,
3349               l_txdv_rec.TAX_BOOK,
3350               l_txdv_rec.LIFE_IN_MONTHS_TAX,
3351               l_txdv_rec.DEPRN_METHOD_TAX,
3352               l_txdv_rec.DEPRN_RATE_TAX,
3353               l_txdv_rec.SALVAGE_VALUE,
3354               l_txdv_rec.SPLIT_PERCENT,
3355               l_txdv_rec.INVENTORY_ITEM_ID,
3356               l_txdv_rec.ATTRIBUTE_CATEGORY,
3357               l_txdv_rec.ATTRIBUTE1,
3358               l_txdv_rec.ATTRIBUTE2,
3359               l_txdv_rec.ATTRIBUTE3,
3360               l_txdv_rec.ATTRIBUTE4,
3361               l_txdv_rec.ATTRIBUTE5,
3362               l_txdv_rec.ATTRIBUTE6,
3363               l_txdv_rec.ATTRIBUTE7,
3364               l_txdv_rec.ATTRIBUTE8,
3365               l_txdv_rec.ATTRIBUTE9,
3366               l_txdv_rec.ATTRIBUTE10,
3367               l_txdv_rec.ATTRIBUTE11,
3368               l_txdv_rec.ATTRIBUTE12,
3369               l_txdv_rec.ATTRIBUTE13,
3370               l_txdv_rec.ATTRIBUTE14,
3371               l_txdv_rec.ATTRIBUTE15,
3372               l_txdv_rec.CREATED_BY,
3373               l_txdv_rec.CREATION_DATE,
3374               l_txdv_rec.LAST_UPDATED_BY,
3375               l_txdv_rec.LAST_UPDATE_DATE,
3376               l_txdv_rec.LAST_UPDATE_LOGIN,
3377 -- Multi-Currency Change
3378               l_txdv_rec.CURRENCY_CODE,
3379               l_txdv_rec.CURRENCY_CONVERSION_TYPE,
3380               l_txdv_rec.CURRENCY_CONVERSION_RATE,
3381               l_txdv_rec.CURRENCY_CONVERSION_DATE;
3382 -- Multi-Currency Change
3383               EXIT WHEN txdv_csr%NOTFOUND;
3384               r_count := txdv_csr%rowcount;
3385               l_txdv_tbl(r_count) := l_txdv_rec;
3386     END LOOP;
3387     CLOSE txdv_csr;
3388     IF r_count <> 0 THEN
3389        x_no_data_found := FALSE;
3390     ELSIF r_count = 0 THEN
3391        x_no_data_found := TRUE;
3392     END IF;
3393     RETURN(l_txdv_tbl);
3394 END get_trx_details;
3395 --------------------------------------------------------------------------------
3396 --Function to verify whether the generated split asset number exists in FA
3397 --------------------------------------------------------------------------------
3398 FUNCTION Asset_Number_Exists(p_asset_number IN VARCHAR2,
3399                              x_asset_exists OUT NOCOPY VARCHAR2) RETURN VARCHAR2 IS
3400     l_asset_exists VARCHAR2(1) DEFAULT 'N';
3401     l_return_status VARCHAR2(1) DEFAULT OKL_API.G_RET_STS_SUCCESS;
3402 
3403     --chk for asset in FA
3404     CURSOR asset_chk_curs1 (p_asset_number IN VARCHAR2) IS
3405     SELECT 'Y'
3406     FROM   okx_assets_v okx
3407     WHERE  okx.asset_number = p_asset_number;
3408 
3409     --chk for asset on asset line
3410     CURSOR asset_chk_curs2 (p_asset_number IN VARCHAR2) IS
3411     SELECT 'Y'
3412     FROM   okl_k_lines_full_v kle,
3413            okc_line_styles_b  lse
3414     WHERE  kle.name = p_asset_number
3415     AND    kle.lse_id = lse.id
3416     --and    lse.lty_code = 'FIXED_ASSET';
3417     --Bug# 3222804
3418     AND    lse.lty_code = 'FREE_FORM1';
3419 
3420     --check for asset on an split asset transaction
3421     CURSOR asset_chk_curs3 (p_asset_number IN VARCHAR2) IS
3422     SELECT 'Y'
3423     FROM   okl_txd_assets_b txd
3424     WHERE  NVL(txd.asset_number,'-999999999999999') = p_asset_number
3425     AND    EXISTS (SELECT NULL
3426                    FROM   okl_trx_Assets   trx,
3427                           okl_trx_types_tl ttyp,
3428                           okl_txl_assets_b txl
3429                    WHERE  trx.id        = txl.tas_id
3430                    AND    trx.try_id    = ttyp.id
3431                    AND    ttyp.name     = 'Split Asset'
3432                    AND    ttyp.LANGUAGE = 'US'
3433                    AND    txl.id        = txd.tal_id);
3434 
3435 
3436 BEGIN
3437    l_return_status := OKL_API.G_RET_STS_SUCCESS;
3438    --dbms_output.put_line('Asset Number'||p_asset_number);
3439    l_asset_exists := 'N';
3440    OPEN asset_chk_curs1(p_asset_number);
3441        FETCH asset_chk_curs1 INTO l_asset_exists;
3442        IF asset_chk_curs1%NOTFOUND THEN
3443           OPEN asset_chk_curs2(p_asset_number);
3444               FETCH asset_chk_curs2 INTO l_asset_exists;
3445               IF asset_chk_curs2%NOTFOUND THEN
3446                   OPEN asset_chk_curs3(p_asset_number);
3447                       FETCH asset_chk_curs3 INTO l_asset_exists;
3448                       IF asset_chk_curs3%NOTFOUND THEN
3449                           NULL;
3450                       END IF;
3451                   CLOSE asset_chk_curs3;
3452               END IF;
3453            CLOSE asset_chk_curs2;
3454        END IF;
3455    CLOSE asset_chk_curs1;
3456    x_asset_exists := l_asset_exists;
3457    --return status to caller
3458    RETURN(l_return_status);
3459    EXCEPTION
3460    WHEN OTHERS THEN
3461       -- store SQL error message on message stack for caller
3462       OKL_API.set_message(
3463               G_APP_NAME,
3464               G_UNEXPECTED_ERROR,
3465               G_SQLCODE_TOKEN,
3466               SQLCODE,
3467               G_SQLERRM_TOKEN,
3468               SQLERRM);
3469        --close the cursor
3470        IF asset_chk_curs1%ISOPEN THEN
3471           CLOSE asset_chk_curs1;
3472        END IF;
3473        IF asset_chk_curs2%ISOPEN THEN
3474           CLOSE asset_chk_curs2;
3475        END IF;
3476        IF asset_chk_curs3%ISOPEN THEN
3477           CLOSE asset_chk_curs3;
3478        END IF;
3479        --send back status to caller
3480        l_return_status := OKL_API.G_RET_STS_UNEXP_ERROR;
3481        RETURN(l_return_status);
3482 END Asset_Number_Exists;
3483 --------------------------------------------------------------------------------
3484 --Function to validate okl_txd_Assets_v attributes
3485 --------------------------------------------------------------------------------
3486 FUNCTION Validate_Attributes (p_txdv_rec IN txdv_rec_type)
3487   RETURN VARCHAR2 IS
3488 
3489    l_return_status VARCHAR2(3) := OKL_API.G_RET_STS_SUCCESS;
3490 
3491     --chk for asset in FA
3492     CURSOR asset_chk_curs1 (p_asset_number IN VARCHAR2) IS
3493     SELECT 'Y'
3494     FROM   okx_assets_v okx
3495     WHERE  okx.asset_number = p_asset_number;
3496 
3497     --chk for asset on asset line
3498     CURSOR asset_chk_curs2 (p_asset_number IN VARCHAR2) IS
3499     SELECT 'Y'
3500     FROM   okl_k_lines_full_v kle,
3501            okc_line_styles_b  lse
3502     WHERE  kle.name = p_asset_number
3503     AND    kle.lse_id = lse.id
3504     AND    lse.lty_code = 'FIXED_ASSET';
3505 
3506 
3507     --check for asset on an split asset transaction
3508     CURSOR asset_chk_curs3 (p_asset_number IN VARCHAR2, p_txdv_id IN NUMBER) IS
3509     SELECT 'Y'
3510     FROM   okl_txd_assets_b txd,
3511            okl_txl_assets_b txl,
3512            okl_trx_types_tl ttyp,
3513            okl_trx_assets   trx
3514     WHERE  NVL(txd.asset_number,'-999999999999999') = p_asset_number
3515     AND    txd.tal_id    = txl.id
3516     AND    txl.tas_id    = trx.id
3517     AND    trx.try_id    = ttyp.id
3518     AND    ttyp.name     = 'Split Asset'
3519     AND    ttyp.LANGUAGE = 'US'
3520     AND    NVL(txd.target_kle_id,-99) <> txl.kle_id
3521     AND    trx.tsu_code = 'ENTERED'
3522     AND    txd.id <> p_txdv_id;
3523 
3524    --check for asset on create asset or rebook transaction
3525    CURSOR asset_chk_curs4 (p_asset_number IN VARCHAR2) IS
3526    SELECT 'Y'
3527    FROM   okl_txl_assets_b txl
3528    WHERE  txl.asset_number = p_asset_number
3529    AND    txl.tal_type IN ('ALI','CRB'); --only transactions apart from split which create a new line
3530 
3531 
3532    l_txdv_rec      txdv_rec_type;
3533    l_asset_exists  VARCHAR2(1) DEFAULT 'N';
3534 
3535 BEGIN
3536     l_txdv_rec := p_txdv_rec;
3537     l_return_status := OKL_API.G_RET_STS_SUCCESS;
3538     --1.Validate existence of asset number
3539     IF (l_txdv_rec.asset_number IS NULL) OR (l_txdv_rec.asset_number = OKL_API.G_MISS_CHAR) THEN
3540      -- store SQL error message on message stack
3541        OKL_API.set_message(p_app_name     => G_APP_NAME,
3542                            p_msg_name     => G_ASSET_REQUIRED);
3543        l_return_status := OKL_API.G_RET_STS_ERROR;
3544        -- halt validation as it is a required field
3545        RAISE G_EXCEPTION_HALT_VALIDATION;
3546     ELSE
3547        IF LENGTH(l_txdv_rec.asset_number) > 15 THEN
3548            -- store SQL error message on message stack
3549            OKL_API.set_message(p_app_name     => G_APP_NAME,
3550                                p_msg_name     => G_ASSET_LENGTH);
3551            l_return_status := OKL_API.G_RET_STS_ERROR;
3552            -- halt validation as it is a required field
3553            RAISE G_EXCEPTION_HALT_VALIDATION;
3554        ELSE
3555            l_asset_exists := 'N';
3556            OPEN asset_chk_curs1(l_txdv_rec.asset_number);
3557            FETCH asset_chk_curs1 INTO l_asset_exists;
3558            IF asset_chk_curs1%NOTFOUND THEN
3559                OPEN asset_chk_curs2(l_txdv_rec.asset_number);
3560                FETCH asset_chk_curs2 INTO l_asset_exists;
3561                IF asset_chk_curs2%NOTFOUND THEN
3562                   OPEN asset_chk_curs3(l_txdv_rec.asset_number,l_txdv_rec.id);
3563                       FETCH asset_chk_curs3 INTO l_asset_exists;
3564                       IF asset_chk_curs3%NOTFOUND THEN
3565                           OPEN asset_chk_curs4 (l_txdv_rec.asset_number);
3566                           FETCH asset_chk_curs4 INTO l_asset_exists;
3567                           IF asset_chk_curs4%NOTFOUND THEN
3568                               NULL;
3569                           END IF;
3570                       END IF;
3571                   CLOSE asset_chk_curs3;
3572               END IF;
3573               CLOSE asset_chk_curs2;
3574            END IF;
3575            CLOSE asset_chk_curs1;
3576            IF l_asset_exists = 'Y' THEN
3577               -- store SQL error message on message stack
3578               OKL_API.Set_Message(p_app_name     => G_APP_NAME,
3579                                   p_msg_name     => G_NOT_UNIQUE,
3580                                   p_token1       => G_COL_NAME_TOKEN,
3581                                   p_token1_value => 'Asset Number '|| l_txdv_rec.asset_number);
3582               l_return_status := OKL_API.G_RET_STS_ERROR;
3583               -- halt validation as it is a required field
3584               RAISE G_EXCEPTION_HALT_VALIDATION;
3585            END IF;
3586       END IF;
3587    END IF;
3588    RETURN(l_return_status);
3589 
3590    EXCEPTION
3591    WHEN G_EXCEPTION_HALT_VALIDATION THEN
3592         RETURN(l_return_status);
3593    WHEN OTHERS THEN
3594       -- store SQL error message on message stack for caller
3595       OKL_API.set_message(
3596               G_APP_NAME,
3597               G_UNEXPECTED_ERROR,
3598               G_SQLCODE_TOKEN,
3599               SQLCODE,
3600               G_SQLERRM_TOKEN,
3601               SQLERRM);
3602        --close the cursor
3603        IF asset_chk_curs1%ISOPEN THEN
3604           CLOSE asset_chk_curs1;
3605        END IF;
3606        IF asset_chk_curs2%ISOPEN THEN
3607           CLOSE asset_chk_curs2;
3608        END IF;
3609        IF asset_chk_curs3%ISOPEN THEN
3610           CLOSE asset_chk_curs3;
3611        END IF;
3612        IF asset_chk_curs4%ISOPEN THEN
3613           CLOSE asset_chk_curs4;
3614        END IF;
3615        --send back status to caller
3616        l_return_status := OKL_API.G_RET_STS_UNEXP_ERROR;
3617        RETURN(l_return_status);
3618 END Validate_Attributes;
3619 -------------------------------------------------------------------------------
3620 --Function to verify TRY_ID for the transaction try_id
3621 -------------------------------------------------------------------------------
3622 FUNCTION get_try_id(p_try_name  IN  OKL_TRX_TYPES_V.NAME%TYPE,
3623                     x_try_id    OUT NOCOPY OKC_LINE_STYLES_V.ID%TYPE)
3624   RETURN VARCHAR2 IS
3625     x_return_status            VARCHAR2(3) := OKL_API.G_RET_STS_SUCCESS;
3626     CURSOR c_get_try_id(p_try_name  OKL_TRX_TYPES_V.NAME%TYPE) IS
3627     SELECT id
3628     FROM   OKL_TRX_TYPES_TL
3629     WHERE UPPER(name) = UPPER(p_try_name)
3630     AND   LANGUAGE = 'US';
3631 BEGIN
3632    IF (p_try_name = OKL_API.G_MISS_CHAR) OR
3633        (p_try_name IS NULL) THEN
3634        -- store SQL error message on message stack
3635        OKL_API.set_message(p_app_name     => G_APP_NAME,
3636                            p_msg_name     => G_NO_DATA_FOUND,
3637                            p_token1       => G_COL_NAME_TOKEN,
3638                            p_token1_value => p_try_name);
3639        -- halt validation as it is a required field
3640        RAISE G_EXCEPTION_STOP_VALIDATION;
3641     END IF;
3642     OPEN c_get_try_id(p_try_name);
3643     FETCH c_get_try_id INTO x_try_id;
3644     IF c_get_try_id%NOTFOUND THEN
3645        OKL_API.set_message(p_app_name     => G_APP_NAME,
3646                            p_msg_name     => G_NO_DATA_FOUND,
3647                            p_token1       => G_COL_NAME_TOKEN,
3648                            p_token1_value => p_try_name);
3649        RAISE G_EXCEPTION_HALT_VALIDATION;
3650     END IF;
3651     CLOSE c_get_try_id;
3652     RETURN x_return_status;
3653   EXCEPTION
3654     WHEN G_EXCEPTION_STOP_VALIDATION THEN
3655     -- We are here since the field is required
3656     -- Notify Error
3657     x_return_status := OKL_API.G_RET_STS_ERROR;
3658     WHEN G_EXCEPTION_HALT_VALIDATION THEN
3659     -- We are here b'cause we have no parent record
3660     -- If the cursor is open then it has to be closed
3661      IF c_get_try_id%ISOPEN THEN
3662         CLOSE c_get_try_id;
3663      END IF;
3664     -- notify caller of an error
3665     x_return_status := OKL_API.G_RET_STS_ERROR;
3666     WHEN OTHERS THEN
3667       -- store SQL error message on message stack for caller
3668       OKL_API.set_message(
3669               G_APP_NAME,
3670               G_UNEXPECTED_ERROR,
3671               G_SQLCODE_TOKEN,
3672               SQLCODE,
3673               G_SQLERRM_TOKEN,
3674               SQLERRM);
3675      -- notify caller of an UNEXPECTED error
3676      x_return_status := OKL_API.G_RET_STS_UNEXP_ERROR;
3677      -- if the cursor is open
3678      IF c_get_try_id%ISOPEN THEN
3679         CLOSE c_get_try_id;
3680      END IF;
3681      RETURN(x_return_status);
3682  END get_try_id;
3683 --------------------------------------------------------------------------------
3684 --Function to verify whether the line id is correct or not
3685 --------------------------------------------------------------------------------
3686 FUNCTION verify_cle_id(p_cle_id IN NUMBER) RETURN VARCHAR2 IS
3687         CURSOR Chk_Top_Line(p_cle_id IN NUMBER) IS
3688         SELECT 'Y'
3689         FROM   OKC_K_LINES_B cle
3690         WHERE  cle.id = p_cle_id
3691         AND        EXISTS (SELECT '1'
3692                    FROM   OKC_LINE_STYLES_B lse
3693                        WHERE  lse.id = cle.lse_id
3694                    AND    lse.lty_code = G_FIN_AST_LTY_CODE
3695                    AND    lse.lse_type = G_TOP_LINE_STYLE)
3696         AND        EXISTS (SELECT '1'
3697                            FROM OKC_SUBCLASS_TOP_LINE stl,
3698                                 OKC_K_HEADERS_B CHR
3699                            WHERE stl.lse_id = cle.lse_id
3700                            AND   stl.scs_code = CHR.scs_code
3701                            AND   CHR.id = cle.chr_id);
3702     l_chk_top_line VARCHAR2(1) DEFAULT 'N';
3703     l_return_status VARCHAR2(1) DEFAULT OKL_API.G_RET_STS_SUCCESS;
3704 BEGIN
3705     OPEN Chk_Top_Line(p_cle_id);
3706     FETCH Chk_Top_Line INTO l_chk_top_line;
3707         IF chk_top_line%NOTFOUND THEN
3708            ----dbms_output.put_line('Not a correct top line id');
3709            NULL;
3710         END IF;
3711     CLOSE Chk_Top_Line;
3712     IF l_chk_top_line <> 'Y' THEN
3713         OKL_API.SET_MESSAGE(p_app_name     => g_app_name,
3714                                 p_msg_name     => G_INVALID_TOP_LINE);
3715         l_return_status := OKL_API.G_RET_STS_ERROR;
3716     END IF;
3717     RETURN(l_return_status);
3718     EXCEPTION
3719     WHEN OTHERS THEN
3720     l_return_status := OKL_API.G_RET_STS_UNEXP_ERROR;
3721     OKL_API.set_message(
3722             G_APP_NAME,
3723             G_UNEXPECTED_ERROR,
3724             G_SQLCODE_TOKEN,
3725             SQLCODE,
3726             G_SQLERRM_TOKEN,
3727             SQLERRM);
3728     IF Chk_top_line%ISOPEN THEN
3729         CLOSE Chk_top_line;
3730     END IF;
3731     RETURN(l_return_status);
3732 END verify_cle_id;
3733 -------------------------------------------------------------------------------
3734 --Function to get FA location id. An asset after being sent to FA may have been
3735 -- assigned to different FA locations. Since OKL takes only only one FA location
3736 --right now , we will pick up only one location.
3737 ------------------------------------------------------------------------------
3738 FUNCTION get_fa_location (p_asset_id IN VARCHAR2,
3739                              p_book_type_code IN VARCHAR2,
3740                              x_location_id OUT NOCOPY NUMBER)
3741 RETURN VARCHAR2 IS
3742     CURSOR fa_location_curs(p_asset_id       IN VARCHAR2,
3743                             p_book_type_code IN VARCHAR2) IS
3744     SELECT location_id
3745     FROM   okx_ast_dst_hst_v
3746     WHERE  asset_id = p_asset_id
3747     AND    book_type_code = p_book_type_code
3748     AND    status = 'A'
3749     AND    NVL(start_date_active,SYSDATE) <= SYSDATE
3750     AND    NVL(end_date_active,SYSDATE+1) > SYSDATE
3751     AND    transaction_header_id_out IS NULL
3752     AND    retirement_id IS NULL
3753     AND    ROWNUM < 2;
3754 --This is strange way to get one location
3755 --since asset can be assigned to multiple
3756 --fa locations. But till we know what we have to do
3757 --this is it.
3758     l_return_status VARCHAR2(1) := OKL_API.G_RET_STS_SUCCESS;
3759     l_location_id   NUMBER DEFAULT NULL;
3760 BEGIN
3761     l_return_status := OKL_API.G_RET_STS_SUCCESS;
3762     OPEN fa_location_curs(p_asset_id,
3763                           p_book_type_code);
3764        FETCH fa_location_curs
3765        INTO  l_location_id;
3766        IF fa_location_curs%NOTFOUND THEN
3767           NULL; --location not found that is not a problem
3768                 --as it is not a mandatory field
3769        END IF;
3770     CLOSE fa_location_curs;
3771     RETURN(l_return_status);
3772     EXCEPTION
3773     WHEN OTHERS THEN
3774          -- notify caller of an UNEXPECTED error
3775          l_return_status := OKL_API.G_RET_STS_UNEXP_ERROR;
3776          OKL_API.set_message(
3777             G_APP_NAME,
3778             G_UNEXPECTED_ERROR,
3779             G_SQLCODE_TOKEN,
3780             SQLCODE,
3781             G_SQLERRM_TOKEN,
3782             SQLERRM);
3783          -- if the cursor is open
3784          IF fa_location_curs%ISOPEN THEN
3785             CLOSE fa_location_curs;
3786           END IF;
3787      RETURN(l_return_status);
3788 END Get_fa_Location;
3789 --------------------------------------------------------------------------------
3790 --Procedure to create transaction header (OKL_TRX_ASSETS_V)
3791 --------------------------------------------------------------------------------
3792 PROCEDURE Create_trx_header(
3793             p_api_version    IN  NUMBER,
3794             p_init_msg_list  IN  VARCHAR2 DEFAULT OKL_API.G_FALSE,
3795             x_return_status  OUT NOCOPY VARCHAR2,
3796             x_msg_count      OUT NOCOPY NUMBER,
3797             x_msg_data       OUT NOCOPY VARCHAR2,
3798             p_trxv_rec       IN  trxv_rec_type,
3799             x_trxv_rec       OUT NOCOPY trxv_rec_type) IS
3800     l_api_name      CONSTANT VARCHAR2(30) := 'CREATE_TRX_HEADER';
3801   BEGIN
3802     x_return_status      := OKL_API.G_RET_STS_SUCCESS;
3803     -- Call start_activity to create savepoint, check compatibility
3804     -- and initialize message list
3805     x_return_status := OKL_API.START_ACTIVITY (
3806                                l_api_name
3807                                ,p_init_msg_list
3808                                ,'_PVT'
3809                                ,x_return_status);
3810     -- Check if activity started successfully
3811     IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
3812        RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
3813     ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
3814        RAISE OKL_API.G_EXCEPTION_ERROR;
3815     END IF;
3816     -- evaluate conditions, build outcomes for true conditions and
3817     -- put them on outcome queue
3818     OKL_TRX_ASSETS_PUB.create_trx_ass_h_def(
3819                        p_api_version    => p_api_version,
3820                        p_init_msg_list  => p_init_msg_list,
3821                        x_return_status  => x_return_status,
3822                        x_msg_count      => x_msg_count,
3823                        x_msg_data       => x_msg_data,
3824                        p_thpv_rec       => p_trxv_rec,
3825                        x_thpv_rec       => x_trxv_rec);
3826 
3827     IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
3828        RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
3829     ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
3830        RAISE OKL_API.G_EXCEPTION_ERROR;
3831     END IF;
3832     OKL_API.END_ACTIVITY (x_msg_count,
3833                           x_msg_data );
3834   EXCEPTION
3835     WHEN OKL_API.G_EXCEPTION_ERROR THEN
3836     x_return_status := OKL_API.HANDLE_EXCEPTIONS(
3837                                l_api_name,
3838                                G_PKG_NAME,
3839                                'OKC_API.G_RET_STS_ERROR',
3840                                x_msg_count,
3841                                x_msg_data,
3842                                '_PVT');
3843     WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
3844     x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
3845                               l_api_name,
3846                               G_PKG_NAME,
3847                               'OKC_API.G_RET_STS_UNEXP_ERROR',
3848                               x_msg_count,
3849                               x_msg_data,
3850                               '_PVT');
3851     WHEN OTHERS THEN
3852     x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
3853                               l_api_name,
3854                               G_PKG_NAME,
3855                               'OTHERS',
3856                               x_msg_count,
3857                               x_msg_data,
3858                               '_PVT');
3859   END Create_trx_header;
3860 --------------------------------------------------------------------------------
3861 --PROCEDURE to update transaction_header (OKL_TRX_ASSETS_V)
3862 --------------------------------------------------------------------------------
3863 PROCEDURE Update_trx_header(
3864             p_api_version    IN  NUMBER,
3865             p_init_msg_list  IN  VARCHAR2 DEFAULT OKL_API.G_FALSE,
3866             x_return_status  OUT NOCOPY VARCHAR2,
3867             x_msg_count      OUT NOCOPY NUMBER,
3868             x_msg_data       OUT NOCOPY VARCHAR2,
3869             p_trxv_rec       IN  trxv_rec_type,
3870             x_trxv_rec       OUT NOCOPY trxv_rec_type) IS
3871     l_api_name      CONSTANT VARCHAR2(30) := 'UPDATE_TRX_HEADER';
3872   BEGIN
3873     x_return_status        := OKL_API.G_RET_STS_SUCCESS;
3874     -- Call start_activity to create savepoint, check compatibility
3875     -- and initialize message list
3876     x_return_status := OKL_API.START_ACTIVITY (
3877                                l_api_name
3878                                ,p_init_msg_list
3879                                ,'_PVT'
3880                                ,x_return_status);
3881     -- Check if activity started successfully
3882     IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
3883        RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
3884     ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
3885        RAISE OKL_API.G_EXCEPTION_ERROR;
3886     END IF;
3887     -- evaluate conditions, build outcomes for true conditions and
3888     -- put them on outcome queue
3889     OKL_TRX_ASSETS_PUB.update_trx_ass_h_def(
3890                        p_api_version    => p_api_version,
3891                        p_init_msg_list  => p_init_msg_list,
3892                        x_return_status  => x_return_status,
3893                        x_msg_count      => x_msg_count,
3894                        x_msg_data       => x_msg_data,
3895                        p_thpv_rec       => p_trxv_rec,
3896                        x_thpv_rec       => x_trxv_rec);
3897 
3898     IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
3899        RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
3900     ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
3901        RAISE OKL_API.G_EXCEPTION_ERROR;
3902     END IF;
3903 
3904     OKL_API.END_ACTIVITY (x_msg_count,
3905                           x_msg_data );
3906   EXCEPTION
3907     WHEN OKC_API.G_EXCEPTION_ERROR THEN
3908     x_return_status := OKL_API.HANDLE_EXCEPTIONS(
3909                                l_api_name,
3910                                G_PKG_NAME,
3911                                'OKC_API.G_RET_STS_ERROR',
3912                                x_msg_count,
3913                                x_msg_data,
3914                                '_PVT');
3915     WHEN OKC_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
3916     x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
3917                               l_api_name,
3918                               G_PKG_NAME,
3919                               'OKC_API.G_RET_STS_UNEXP_ERROR',
3920                               x_msg_count,
3921                               x_msg_data,
3922                               '_PVT');
3923     WHEN OTHERS THEN
3924     x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
3925                               l_api_name,
3926                               G_PKG_NAME,
3927                               'OTHERS',
3928                               x_msg_count,
3929                               x_msg_data,
3930                               '_PVT');
3931 END Update_trx_header;
3932 --------------------------------------------------------------------------------
3933 --Procedure to create split transaction details (okl_txd_assets_b)
3934 --Bug# 2798006 : Modifications for Loan contract - instead of reading values from
3935 --p_ast_line_rec will read from p_txlv_rec
3936 --------------------------------------------------------------------------------
3937 PROCEDURE Create_trx_details(p_api_version    IN  NUMBER,
3938                              p_init_msg_list  IN  VARCHAR2 DEFAULT OKL_API.G_FALSE,
3939                              x_return_status  OUT NOCOPY VARCHAR2,
3940                              x_msg_count      OUT NOCOPY NUMBER,
3941                              x_msg_data       OUT NOCOPY VARCHAR2,
3942                              p_ast_line_rec   IN  ast_line_rec_type,
3943                              p_txlv_rec       IN  txlv_rec_type,
3944                              x_txdv_tbl       OUT NOCOPY txdv_tbl_type) IS
3945 
3946 l_return_status        VARCHAR2(1)  DEFAULT OKL_API.G_RET_STS_SUCCESS;
3947 l_api_name             CONSTANT VARCHAR2(30) := 'CREATE_TRX_DETAILS';
3948 l_api_version          CONSTANT NUMBER := 1.0;
3949 
3950 l_split_into_individuals_yn VARCHAR2(1);
3951 l_split_into_units          NUMBER;
3952 l_units_on_child_line       NUMBER;
3953 l_total_salvage_value       NUMBER;
3954 l_total_cost                NUMBER;
3955 l_total_quantity            NUMBER;
3956 l_txdv_rec                  txdv_rec_type;
3957 l_txdv_rec_out              txdv_rec_type;
3958 
3959 l_asset_exists         VARCHAR2(1) DEFAULT 'N';
3960 j                      NUMBER      DEFAULT 0; --counter for generating split asset numbers
3961 i                      NUMBER      DEFAULT 0;
3962 l_split_unit_count     NUMBER      DEFAULT 0;
3963 
3964 BEGIN
3965      x_return_status := OKL_API.G_RET_STS_SUCCESS;
3966     -- Call start_activity to create savepoint, check compatibility
3967     -- and initialize message list
3968     x_return_status := OKL_API.START_ACTIVITY (
3969                                l_api_name
3970                                ,p_init_msg_list
3971                                ,'_PVT'
3972                                ,x_return_status);
3973     -- Check if activity started successfully
3974     IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
3975        RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
3976     ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
3977        RAISE OKL_API.G_EXCEPTION_ERROR;
3978     END IF;
3979 
3980     l_split_into_individuals_yn := NVL(p_txlv_rec.SPLIT_INTO_SINGLES_FLAG,'N');
3981     --dbms_output.put_line('Split into individuals'||l_split_into_individuals_yn);
3982     --dbms_output.put_line('ast rec current units'||to_char(p_ast_line_rec.current_units));
3983     --dbms_output.put_line('txlv rec units retired'||to_char(p_txlv_rec.split_into_units));
3984     --prepared record for OKL_TXD_ASSETS_V
3985     IF  l_split_into_individuals_yn = 'Y' THEN
3986         --l_split_into_units := p_ast_line_rec.current_units;
3987         l_split_into_units := p_txlv_rec.current_units;
3988         l_units_on_child_line := 1;
3989     ELSIF NVL(l_split_into_individuals_yn,'N') = 'N' THEN
3990         l_split_into_units := 2;
3991         -- l_units_on_child_line := p_split_into_units;
3992         l_units_on_child_line := p_txlv_rec.SPLIT_INTO_UNITS;
3993     END IF;
3994         l_total_salvage_value := 0;
3995         l_total_cost := 0;
3996         l_total_quantity := 0;
3997         --dbms_output.put_line('Split into units'||to_char(l_split_into_units));
3998         --dbms_output.put_line('units on child line'||to_char(l_units_on_child_line));
3999         FOR i IN 1..(l_split_into_units - 1)
4000         LOOP
4001             --dbms_output.put_line('Into split loop');
4002             l_txdv_rec.tal_id := p_txlv_rec.id;
4003             l_txdv_rec.line_detail_number := i + 1;
4004             --l_txdv_rec.description := p_ast_line_rec.description;
4005             l_txdv_rec.description := p_txlv_rec.description;
4006             --dbms_output.put_line('Description from FA'|| p_ast_line_rec.description);
4007 
4008             --generate an asset number which does not exist in FA
4009             j := j+1;
4010             LOOP
4011                 --dbms_output.put_line('Into asset number gen loop');
4012                 --dbms_output.put_line('Asset Number'||p_ast_line_rec.asset_number||'.'||to_char(j));
4013                 SELECT 'OKL'||TO_CHAR(okl_fan_seq.NEXTVAL)
4014                 INTO l_txdv_rec.asset_number FROM dual;
4015                 --dbms_output.put_line('Asset Number'||l_txdv_rec.asset_number);
4016                 x_return_status := Asset_Number_Exists(l_txdv_rec.asset_number,l_asset_exists);
4017                 --dbms_output.put_line('after asset number validate'||x_return_status);
4018                 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
4019                     RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
4020                 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
4021                     RAISE OKL_API.G_EXCEPTION_ERROR;
4022                 END IF;
4023                 IF l_asset_exists = 'Y' THEN
4024                    j:= j+1;
4025                 ELSIF l_asset_exists = 'N' THEN
4026                     EXIT;
4027                 END IF;
4028             END LOOP;
4029             --dbms_output.put_line('Out of generation of asset number');
4030             l_txdv_rec.quantity := l_units_on_child_line;
4031             --l_txdv_rec.cost     := (p_ast_line_rec.cost/p_ast_line_rec.current_units)*l_units_on_child_line;
4032             l_txdv_rec.cost     := (p_txlv_rec.depreciation_cost/p_txlv_rec.current_units)*l_units_on_child_line;
4033             --l_txdv_rec.salvage_value := (p_ast_line_rec.salvage_value/p_ast_line_rec.current_units)*l_units_on_child_line;
4034             l_txdv_rec.salvage_value := (p_txlv_rec.salvage_value/p_txlv_rec.current_units)*l_units_on_child_line;
4035             l_total_cost := l_total_cost + l_txdv_rec.cost;
4036             l_total_salvage_value := l_total_salvage_value + l_txdv_rec.salvage_value;
4037             l_total_quantity := l_total_quantity + l_units_on_child_line;
4038 
4039             ---Bug#2723498 : 11.5.9 Currency conversion
4040             l_txdv_rec.currency_code            := p_txlv_rec.currency_code;
4041             --bug fix# 2770114
4042             --l_txdv_rec.currency_conversion_type := p_txlv_rec.currency_code;
4043             l_txdv_rec.currency_conversion_type := p_txlv_rec.currency_conversion_type;
4044             l_txdv_rec.currency_conversion_rate := p_txlv_rec.currency_conversion_rate;
4045             l_txdv_rec.currency_conversion_date := p_txlv_rec.currency_conversion_date;
4046             ---Bug#2723498 : 11.5.9 Currency conversion
4047 
4048             --dbms_output.put_line('Creating trx detail for child asset');
4049             --dbms_output.put_line('Before Creating trx detail for child asset'||l_txdv_rec.description);
4050             OKL_TXD_ASSETS_PUB.create_txd_asset_def(p_api_version   =>  p_api_version,
4051                                                     p_init_msg_list =>  p_init_msg_list,
4052                                                     x_return_status =>  x_return_status,
4053                                                     x_msg_count     =>  x_msg_count,
4054                                                     x_msg_data      =>  x_msg_data,
4055                                                     p_adpv_rec      =>  l_txdv_rec,
4056                                                     x_adpv_rec      =>  l_txdv_rec_out);
4057             --dbms_output.put_line('After Creating trx detail for child asset'||x_return_status);
4058             --dbms_output.put_line('After Creating trx detail for child asset'||l_txdv_rec_out.description);
4059             IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
4060                  RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
4061             ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
4062                  RAISE OKL_API.G_EXCEPTION_ERROR;
4063             END IF;
4064             l_split_unit_count := i;
4065             x_txdv_tbl(l_split_unit_count) := l_txdv_rec_out;
4066         END LOOP;
4067         --split record for the parent asset
4068         l_txdv_rec.tal_id := p_txlv_rec.id;
4069         --l_txdv_rec.target_kle_id := p_ast_line_rec.id1;
4070         l_txdv_rec.target_kle_id := p_txlv_rec.kle_id;
4071         l_txdv_rec.line_detail_number := 1;
4072         --l_txdv_rec.description := p_ast_line_rec.description;
4073         l_txdv_rec.description := p_txlv_rec.description;
4074         --l_txdv_rec.asset_number := p_ast_line_rec.asset_number;
4075         l_txdv_rec.asset_number := p_txlv_rec.asset_number;
4076         --l_txdv_rec.quantity := (p_ast_line_rec.current_units - l_total_quantity);
4077         l_txdv_rec.quantity := (p_txlv_rec.current_units - l_total_quantity);
4078 
4079         ------------------------------------------------------------------------
4080         --quantity less that 1 is possible in FA
4081         --If l_txdv_rec.quantity < 1 Then
4082             --l_txdv_rec.quantity := 1;
4083         --End If;
4084         --quantity less than 1 is possible in FA
4085         ------------------------------------------------------------------------
4086         --l_txdv_rec.cost     := (p_ast_line_rec.cost - l_total_cost);
4087         l_txdv_rec.cost     := (p_txlv_rec.depreciation_cost - l_total_cost);
4088         --l_txdv_rec.salvage_value := (p_ast_line_rec.salvage_value - l_total_salvage_value);
4089         l_txdv_rec.salvage_value := (p_txlv_rec.salvage_value - l_total_salvage_value);
4090 
4091         ---Bug#2723498 : 11.5.9 Currency conversion
4092         l_txdv_rec.currency_code := p_txlv_rec.currency_code;
4093         --Bug# 2770114
4094         --l_txdv_rec.currency_conversion_type := p_txlv_rec.currency_code;
4095         l_txdv_rec.currency_conversion_type := p_txlv_rec.currency_conversion_type;
4096         l_txdv_rec.currency_conversion_rate := p_txlv_rec.currency_conversion_rate;
4097         l_txdv_rec.currency_conversion_date := p_txlv_rec.currency_conversion_date;
4098         ---Bug#2723498 : 11.5.9 Currency conversion
4099 
4100         --dbms_output.put_line('before Creating trx detail for parent asset'||x_return_status);
4101         OKL_TXD_ASSETS_PUB.create_txd_asset_def(p_api_version   =>  p_api_version,
4102                                                 p_init_msg_list =>  p_init_msg_list,
4103                                                 x_return_status =>  x_return_status,
4104                                                 x_msg_count     =>  x_msg_count,
4105                                                 x_msg_data      =>  x_msg_data,
4106                                                 p_adpv_rec      =>  l_txdv_rec,
4107                                                 x_adpv_rec      =>  l_txdv_rec_out);
4108                 --dbms_output.put_line('after Creating trx detail for parent asset'||x_return_status);
4109         --dbms_output.put_line('After Creating trx detail for child asset'||x_return_status);
4110         --dbms_output.put_line('After Creating trx detail for child asset'||l_txdv_rec_out.description);
4111         IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
4112             RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
4113         ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
4114             RAISE OKL_API.G_EXCEPTION_ERROR;
4115         END IF;
4116         x_txdv_tbl(l_split_unit_count + 1) := l_txdv_rec_out;
4117        OKL_API.END_ACTIVITY (x_msg_count,
4118                             x_msg_data );
4119        EXCEPTION
4120        WHEN OKL_API.G_EXCEPTION_ERROR THEN
4121        x_return_status := OKL_API.HANDLE_EXCEPTIONS(
4122                                l_api_name,
4123                                G_PKG_NAME,
4124                                'OKL_API.G_RET_STS_ERROR',
4125                                x_msg_count,
4126                                x_msg_data,
4127                                '_PVT');
4128        WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
4129        x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
4130                               l_api_name,
4131                               G_PKG_NAME,
4132                               'OKL_API.G_RET_STS_UNEXP_ERROR',
4133                               x_msg_count,
4134                               x_msg_data,
4135                               '_PVT');
4136        WHEN OTHERS THEN
4137        x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
4138                               l_api_name,
4139                               G_PKG_NAME,
4140                               'OTHERS',
4141                               x_msg_count,
4142                               x_msg_data,
4143                               '_PVT');
4144 
4145 END Create_Trx_details;
4146 --------------------------------------------------------------------------------
4147 --Start of Comments
4148 --Bug #2723498 : 11.5.9 enhancement for splitting assets by serial number
4149 --API Name    : is_serialized
4150 --Description : Function to find if asset is serialized
4151 --History     : 03-Nov-2002   avsingh  Creation (for asset split by serial numbers)
4152 --End of comments
4153 --------------------------------------------------------------------------------
4154 FUNCTION is_serialized(p_cle_id IN NUMBER) RETURN VARCHAR2 IS
4155 --Bug Fix # 2887948
4156 --Cursor to check whether inventory item is serialized
4157 CURSOR chk_srl_csr (fin_ast_id IN NUMBER) IS
4158 SELECT mtl.serial_number_control_code,
4159        mtl.inventory_item_id,
4160        mtl.organization_id
4161 FROM   mtl_system_items  mtl,
4162        okc_k_items       model_cim,
4163        okc_k_lines_b     model_cle,
4164        okc_line_styles_b model_lse
4165 WHERE  model_cim.object1_id2       = TO_CHAR(mtl.organization_id)
4166 AND    model_cim.object1_id1       = mtl.inventory_item_id
4167 AND    model_cim.jtot_object1_code = 'OKX_SYSITEM'
4168 AND    model_cim.cle_id            = model_cle.id
4169 AND    model_cim.dnz_chr_id        = model_cle.dnz_chr_id
4170 AND    model_cle.cle_id            = fin_ast_id
4171 AND    model_cle.lse_id            = model_lse.id
4172 AND    model_lse.lty_code          = 'ITEM';
4173 
4174 chk_srl_rec  chk_srl_csr%ROWTYPE;
4175 
4176 l_serialized VARCHAR2(1) DEFAULT OKL_API.G_FALSE;
4177 
4178 BEGIN
4179     l_serialized := OKL_API.G_FALSE;
4180     --user needs to select serial numbers to split out
4181     OPEN chk_srl_csr (fin_ast_id => p_cle_id);
4182     FETCH chk_srl_csr INTO chk_srl_rec;
4183     IF chk_srl_csr%NOTFOUND THEN
4184         NULL;
4185     END IF;
4186     CLOSE chk_srl_csr;
4187 
4188     IF chk_srl_rec.serial_number_control_code IN (2,5,6) THEN
4189     -- asset inventory item is serial number controlled
4190         l_serialized := OKL_API.G_TRUE;
4191     END IF;
4192 
4193     RETURN (l_serialized);
4194 END is_serialized;
4195 --------------------------------------------------------------------------------
4196 --Start of Comments
4197 --Bug # 2726870 : 11.5.9 enhancement for splitting assets by serial number
4198 --API Name    : Is_Inv_Item_Serialized
4199 --Description : API will determine whether inv item is serialized or not
4200 --History     : 03-Nov-2002   avsingh  Creation (for asset split by serial numbers)
4201 --End of comments
4202 --------------------------------------------------------------------------------
4203 PROCEDURE Is_Inv_Item_Serialized(p_api_version      IN  NUMBER,
4204                                  p_init_msg_list    IN  VARCHAR2,
4205                                  x_return_status    OUT NOCOPY VARCHAR2,
4206                                  x_msg_count        OUT NOCOPY NUMBER,
4207                                  x_msg_data         OUT NOCOPY VARCHAR2,
4208                                  p_inv_item_id      IN  NUMBER,
4209                                  p_chr_id           IN  NUMBER,
4210                                  p_cle_id           IN  NUMBER,
4211                                  x_serialized       OUT NOCOPY VARCHAR2) IS
4212 l_api_version CONSTANT NUMBER := 1.0;
4213 l_api_name    VARCHAR2(30) := 'IS_INV_ITEM_SERIALIZED';
4214 
4215 l_serialized VARCHAR2(1) DEFAULT OKL_API.G_FALSE;
4216 
4217 --cursor to find serialized
4218 CURSOR srl_ctrl_csr (p_inv_item_id IN NUMBER,
4219                      p_chr_id IN NUMBER) IS
4220 SELECT mtl.serial_number_control_code
4221 FROM   mtl_system_items  mtl,
4222        okc_k_headers_b chrb
4223 WHERE  mtl.inventory_item_id = p_inv_item_id
4224 AND    mtl.organization_id   = chrb.inv_organization_id
4225 --BUG# 3489089
4226 AND    chrb.id               = p_chr_id;
4227 
4228 --cursor2  to find serialized
4229 CURSOR srl_ctrl_csr2 (p_inv_item_id IN NUMBER,
4230                       p_cle_id IN NUMBER) IS
4231 SELECT mtl.serial_number_control_code
4232 FROM   mtl_system_items     mtl,
4233        okc_k_headers_b      chrb,
4234        okc_k_lines_b        cleb
4235 WHERE  mtl.inventory_item_id = p_inv_item_id
4236 AND    mtl.organization_id   = chrb.inv_organization_id
4237 AND    chrb.id               = cleb.dnz_chr_id
4238 AND    cleb.id               = p_cle_id;
4239 
4240 l_srl_control_code   mtl_system_items.serial_number_control_code%TYPE;
4241 
4242 l_exception_halt     EXCEPTION;
4243 
4244 BEGIN
4245    x_serialized := OKL_API.G_FALSE;
4246    x_return_status := OKL_API.START_ACTIVITY (
4247                                l_api_name
4248                                ,p_init_msg_list
4249                                ,'_PVT'
4250                                ,x_return_status);
4251     -- Check if activity started successfully
4252     IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
4253        RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
4254     ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
4255        RAISE OKL_API.G_EXCEPTION_ERROR;
4256     END IF;
4257 
4258     l_serialized := OKL_API.G_FALSE;
4259     IF p_chr_id IS NOT NULL OR p_chr_id <> OKL_API.G_MISS_NUM THEN
4260         OPEN srl_ctrl_csr (p_inv_item_id => p_inv_item_id,
4261                            p_chr_id      => p_chr_id);
4262         FETCH srl_ctrl_csr INTO
4263           l_srl_control_code;
4264         CLOSE srl_ctrl_csr;
4265     ELSIF p_cle_id IS NOT NULL OR p_cle_id <> OKL_API.G_MISS_NUM THEN
4266         OPEN srl_ctrl_csr2 (p_inv_item_id => p_inv_item_id,
4267                             p_cle_id      => p_cle_id);
4268         FETCH srl_ctrl_csr2 INTO
4269           l_srl_control_code;
4270         CLOSE srl_ctrl_csr2;
4271     ELSE
4272          RAISE l_exception_halt;
4273     END IF;
4274 
4275     IF NVL(l_srl_control_code,0) IN (2,5,6) THEN
4276         l_serialized := OKL_API.G_TRUE;
4277     END IF;
4278    x_serialized := l_serialized;
4279    OKL_API.END_ACTIVITY (x_msg_count,
4280                           x_msg_data );
4281     EXCEPTION
4282     WHEN l_exception_halt THEN
4283         NULL;
4284     WHEN OKL_API.G_EXCEPTION_ERROR THEN
4285     x_return_status := OKL_API.HANDLE_EXCEPTIONS(
4286                                l_api_name,
4287                                G_PKG_NAME,
4288                                'OKL_API.G_RET_STS_ERROR',
4289                                x_msg_count,
4290                                x_msg_data,
4291                                '_PVT');
4292     WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
4293     x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
4294                               l_api_name,
4295                               G_PKG_NAME,
4296                               'OKL_API.G_RET_STS_UNEXP_ERROR',
4297                               x_msg_count,
4298                               x_msg_data,
4299                               '_PVT');
4300     WHEN OTHERS THEN
4301     x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
4302                               l_api_name,
4303                               G_PKG_NAME,
4304                               'OTHERS',
4305                               x_msg_count,
4306                               x_msg_data,
4307                               '_PVT');
4308 END Is_Inv_Item_Serialized;
4309 --------------------------------------------------------------------------------
4310 --Start of Comments
4311 --Bug # 2726870 : 11.5.9 enhancement for Splitting Asets by serial number
4312 --API Name    : Is_Asset_Serialized
4313 --Description : API will find if asset is serialized
4314 --------------------------------------------------------------------------------
4315 PROCEDURE Is_Asset_Serialized(p_api_version      IN  NUMBER,
4316                               p_init_msg_list    IN  VARCHAR2,
4317                               x_return_status    OUT NOCOPY VARCHAR2,
4318                               x_msg_count        OUT NOCOPY NUMBER,
4319                               x_msg_data         OUT NOCOPY VARCHAR2,
4320                               p_cle_id           IN  NUMBER,
4321                               x_serialized       OUT NOCOPY VARCHAR2) IS
4322 
4323 l_api_version CONSTANT NUMBER := 1.0;
4324 l_api_name    VARCHAR2(30) := 'IS_ASSET_SERIALIZED';
4325 
4326 l_serialized VARCHAR2(1) DEFAULT OKL_API.G_FALSE;
4327 BEGIN
4328    x_serialized     := OKL_API.G_FALSE;
4329    x_return_status := OKL_API.START_ACTIVITY (
4330                                l_api_name
4331                                ,p_init_msg_list
4332                                ,'_PVT'
4333                                ,x_return_status);
4334     -- Check if activity started successfully
4335     IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
4336        RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
4337     ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
4338        RAISE OKL_API.G_EXCEPTION_ERROR;
4339     END IF;
4340 
4341    l_serialized := OKL_API.G_FALSE;
4342    l_serialized := Is_serialized(p_cle_id => p_cle_id);
4343    x_serialized := l_serialized;
4344    OKL_API.END_ACTIVITY (x_msg_count,
4345                           x_msg_data );
4346     EXCEPTION
4347     WHEN OKL_API.G_EXCEPTION_ERROR THEN
4348     x_return_status := OKL_API.HANDLE_EXCEPTIONS(
4349                                l_api_name,
4350                                G_PKG_NAME,
4351                                'OKL_API.G_RET_STS_ERROR',
4352                                x_msg_count,
4353                                x_msg_data,
4354                                '_PVT');
4355     WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
4356     x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
4357                               l_api_name,
4358                               G_PKG_NAME,
4359                               'OKL_API.G_RET_STS_UNEXP_ERROR',
4360                               x_msg_count,
4361                               x_msg_data,
4362                               '_PVT');
4363     WHEN OTHERS THEN
4364     x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
4365                               l_api_name,
4366                               G_PKG_NAME,
4367                               'OTHERS',
4368                               x_msg_count,
4369                               x_msg_data,
4370                               '_PVT');
4371 END Is_Asset_Serialized;
4372 --------------------------------------------------------------------------------
4373 --Start of Comments
4374 --Bug # 2726870 : 11.5.9 enhancement for splitting assets by serial number
4375 --API Name    : Asset_Not_Srlz_Halt
4376 --              (Stop_if_Asset_Not_Serialized)
4377 --Description : API to be clled from UI - will raise Error if Asset not serialized
4378 --History     : 03-Nov-2002   avsingh  Creation (for asset split by serial numbers)
4379 --End of comments
4380 --------------------------------------------------------------------------------
4381 PROCEDURE Asset_Not_Srlz_Halt(p_api_version      IN  NUMBER,
4382                               p_init_msg_list    IN  VARCHAR2,
4383                               x_return_status    OUT NOCOPY VARCHAR2,
4384                               x_msg_count        OUT NOCOPY NUMBER,
4385                               x_msg_data         OUT NOCOPY VARCHAR2,
4386                               p_cle_id           IN  NUMBER,
4387                               x_serialized       OUT NOCOPY VARCHAR2) IS
4388 l_api_version CONSTANT NUMBER := 1.0;
4389 l_api_name    VARCHAR2(30) := 'ASSET_NOT_SRLZ_HALT';
4390 
4391 l_serialized VARCHAR2(1) DEFAULT OKL_API.G_FALSE;
4392 BEGIN
4393 -----
4394    x_return_status := OKL_API.START_ACTIVITY (
4395                                l_api_name
4396                                ,p_init_msg_list
4397                                ,'_PVT'
4398                                ,x_return_status);
4399     -- Check if activity started successfully
4400     IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
4401        RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
4402     ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
4403        RAISE OKL_API.G_EXCEPTION_ERROR;
4404     END IF;
4405 
4406    l_serialized := OKL_API.G_FALSE;
4407    x_serialized := l_serialized;
4408    Is_Asset_Serialized(p_api_version     => p_api_version,
4409                        p_init_msg_list   => p_init_msg_list,
4410                        x_return_status   => x_return_status,
4411                        x_msg_count       => x_msg_count,
4412                        x_msg_data        => x_msg_data,
4413                        p_cle_id          => p_cle_id,
4414                        x_serialized      => l_serialized);
4415 
4416    IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
4417       RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
4418    ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
4419       RAISE OKL_API.G_EXCEPTION_ERROR;
4420    END IF;
4421    x_serialized := l_serialized;
4422    IF l_serialized = OKL_API.G_FALSE THEN
4423        OKL_API.set_message(p_app_name     => G_APP_NAME,
4424                            p_msg_name     => G_ASSET_NOT_SERIALIZED);
4425         x_return_status := OKL_API.G_RET_STS_ERROR;
4426    END IF;
4427 
4428    OKL_API.END_ACTIVITY (x_msg_count,
4429                          x_msg_data );
4430     EXCEPTION
4431     WHEN OKL_API.G_EXCEPTION_ERROR THEN
4432     x_return_status := OKL_API.HANDLE_EXCEPTIONS(
4433                                l_api_name,
4434                                G_PKG_NAME,
4435                                'OKL_API.G_RET_STS_ERROR',
4436                                x_msg_count,
4437                                x_msg_data,
4438                                '_PVT');
4439     WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
4440     x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
4441                               l_api_name,
4442                               G_PKG_NAME,
4443                               'OKL_API.G_RET_STS_UNEXP_ERROR',
4444                               x_msg_count,
4445                               x_msg_data,
4446                               '_PVT');
4447     WHEN OTHERS THEN
4448     x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
4449                               l_api_name,
4450                               G_PKG_NAME,
4451                               'OTHERS',
4452                               x_msg_count,
4453                               x_msg_data,
4454                               '_PVT');
4455 END Asset_Not_Srlz_Halt;
4456 --------------------------------------------------------------------------------
4457 --Start of Comments
4458 --Bug # 2726870 : 11.5.9 enhancement for splitting assets by serial number
4459 --API Name    : Item_Not_Srlz_Halt
4460 --              (Stop_if_Asset_Not_Serialized)
4461 --Description : API to be clled from UI - will raise Error if Asset not serialized
4462 --History     : 03-Nov-2002   avsingh  Creation (for asset split by serial numbers)
4463 --End of comments
4464 --------------------------------------------------------------------------------
4465 PROCEDURE Item_Not_Srlz_Halt(p_api_version       IN  NUMBER,
4466                               p_init_msg_list    IN  VARCHAR2,
4467                               x_return_status    OUT NOCOPY VARCHAR2,
4468                               x_msg_count        OUT NOCOPY NUMBER,
4469                               x_msg_data         OUT NOCOPY VARCHAR2,
4470                               p_inv_item_id      IN  NUMBER,
4471                               p_chr_id           IN  NUMBER,
4472                               p_cle_id           IN  NUMBER,
4473                               x_serialized       OUT NOCOPY VARCHAR2) IS
4474 l_api_version CONSTANT NUMBER := 1.0;
4475 l_api_name    VARCHAR2(30) := 'ITEM_NOT_SRLZ_HALT';
4476 
4477 l_serialized VARCHAR2(1) DEFAULT OKL_API.G_FALSE;
4478 BEGIN
4479 -----
4480    x_return_status := OKL_API.START_ACTIVITY (
4481                                l_api_name
4482                                ,p_init_msg_list
4483                                ,'_PVT'
4484                                ,x_return_status);
4485     -- Check if activity started successfully
4486     IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
4487        RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
4488     ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
4489        RAISE OKL_API.G_EXCEPTION_ERROR;
4490     END IF;
4491 
4492    l_serialized := OKL_API.G_FALSE;
4493    x_serialized := l_serialized;
4494    Is_Inv_Item_Serialized(p_api_version     => p_api_version,
4495                           p_init_msg_list   => p_init_msg_list,
4496                           x_return_status   => x_return_status,
4497                           x_msg_count       => x_msg_count,
4498                           x_msg_data        => x_msg_data,
4499                           p_inv_item_id     => p_inv_item_id,
4500                           p_chr_id          => p_chr_id,
4501                           p_cle_id          => p_cle_id,
4502                           x_serialized      => l_serialized);
4503 
4504    IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
4505       RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
4506    ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
4507       RAISE OKL_API.G_EXCEPTION_ERROR;
4508    END IF;
4509    x_serialized := l_serialized;
4510    IF l_serialized = OKL_API.G_FALSE THEN
4511        OKL_API.set_message(p_app_name     => G_APP_NAME,
4512                            p_msg_name     => G_ASSET_NOT_SERIALIZED);
4513         x_return_status := OKL_API.G_RET_STS_ERROR;
4514    END IF;
4515 
4516    OKL_API.END_ACTIVITY (x_msg_count,
4517                          x_msg_data );
4518     EXCEPTION
4519     WHEN OKL_API.G_EXCEPTION_ERROR THEN
4520     x_return_status := OKL_API.HANDLE_EXCEPTIONS(
4521                                l_api_name,
4522                                G_PKG_NAME,
4523                                'OKL_API.G_RET_STS_ERROR',
4524                                x_msg_count,
4525                                x_msg_data,
4526                                '_PVT');
4527     WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
4528     x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
4529                               l_api_name,
4530                               G_PKG_NAME,
4531                               'OKL_API.G_RET_STS_UNEXP_ERROR',
4532                               x_msg_count,
4533                               x_msg_data,
4534                               '_PVT');
4535     WHEN OTHERS THEN
4536     x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
4537                               l_api_name,
4538                               G_PKG_NAME,
4539                               'OTHERS',
4540                               x_msg_count,
4541                               x_msg_data,
4542                               '_PVT');
4543 END Item_Not_Srlz_Halt;
4544 --------------------------------------------------------------------------------
4545 --Start of Comments
4546 --Bug # 2726870 : 11.5.9 enhancement for splitting assets by serial number
4547 --API Name    : Validate_Serial_Number
4548 --Description : LOCAL API will validate serial number
4549 --History     : 03-Nov-2002   avsingh  Creation (for asset split by serial numbers)
4550 --End of comments
4551 --------------------------------------------------------------------------------
4552 PROCEDURE Validate_Serial_Number(x_return_status OUT nocopy VARCHAR2,
4553                                  p_serial_number IN VARCHAR2) IS
4554      l_serial_number okl_txl_itm_insts.serial_number%TYPE;
4555 
4556      --Cursor to find existence
4557      CURSOR srl_num_csr (Srl_Number IN VARCHAR2) IS
4558      SELECT serial_number
4559      FROM   csi_item_instances
4560      WHERE  serial_number = Srl_Number;
4561 
4562      l_csi_srl_number csi_item_instances.serial_number%TYPE DEFAULT NULL;
4563 
4564 BEGIN
4565      x_return_status := OKL_API.G_RET_STS_SUCCESS;
4566      l_serial_number := p_serial_number;
4567      IF l_serial_number IS NULL OR l_serial_number = OKL_API.G_MISS_CHAR THEN
4568          -- store SQL error message on message stack
4569          OKL_API.set_message(p_app_name     => G_APP_NAME,
4570                              p_msg_name     => G_NO_MATCHING_RECORD,
4571                              p_token1       => G_COL_NAME_TOKEN,
4572                              p_token1_value => 'serial_number');
4573         x_return_status := OKL_API.G_RET_STS_ERROR;
4574      ELSE
4575         l_csi_srl_number := NULL;
4576         OPEN srl_num_csr (Srl_Number => l_serial_number);
4577         FETCH srl_num_csr INTO l_csi_srl_number;
4578         IF srl_num_csr%NOTFOUND THEN
4579            NULL;
4580         END IF;
4581         CLOSE srl_num_csr;
4582 
4583         IF l_csi_srl_number IS NOT NULL
4584            AND l_csi_srl_number = l_serial_number THEN
4585            OKL_API.Set_Message(p_app_name     => G_APP_NAME,
4586                                p_msg_name     => G_SRL_NUM_DUPLICATE,
4587                                p_token1       => G_COL_NAME_TOKEN,
4588                                p_token1_value => l_serial_number);
4589            x_return_status := OKL_API.G_RET_STS_ERROR;
4590         END IF;
4591     END IF;
4592     EXCEPTION
4593     WHEN OTHERS THEN
4594          x_return_status := OKL_API.G_RET_STS_UNEXP_ERROR;
4595 END Validate_Serial_Number;
4596 ---------------------------------------------------------------------------------------------------------------
4597   FUNCTION generate_instance_number_ib(x_instance_number_ib  OUT NOCOPY OKL_TXL_ITM_INSTS_V.INSTANCE_NUMBER_IB%TYPE)
4598   RETURN VARCHAR2 IS
4599     x_return_status            VARCHAR2(3) := OKL_API.G_RET_STS_SUCCESS;
4600     -- cursor to get sequence number for asset number
4601     CURSOR c_instance_no_ib IS
4602     SELECT TO_CHAR(OKL_IBN_SEQ.NEXTVAL)
4603     FROM dual;
4604   BEGIN
4605     OPEN  c_instance_no_ib;
4606     FETCH c_instance_no_ib INTO x_instance_number_ib;
4607     IF (c_instance_no_ib%NOTFOUND) THEN
4608       x_return_status := OKC_API.G_RET_STS_ERROR;
4609       OKL_API.SET_MESSAGE(p_app_name     => g_app_name,
4610                           p_msg_name     => g_unexpected_error,
4611                           p_token1       => g_sqlcode_token,
4612                           p_token1_value => SQLCODE,
4613                           p_token2       => g_sqlerrm_token,
4614                           p_token2_value => SQLERRM);
4615     END IF;
4616     CLOSE c_instance_no_ib;
4617     RETURN x_return_status;
4618   EXCEPTION
4619     WHEN OTHERS THEN
4620       IF c_instance_no_ib%ISOPEN THEN
4621         CLOSE c_instance_no_ib;
4622       END IF;
4623       x_return_status := OKC_API.G_RET_STS_UNEXP_ERROR;
4624       OKL_API.SET_MESSAGE(p_app_name     => g_app_name,
4625                           p_msg_name     => g_unexpected_error,
4626                           p_token1       => g_sqlcode_token,
4627                           p_token1_value => SQLCODE,
4628                           p_token2       => g_sqlerrm_token,
4629                           p_token2_value => SQLERRM);
4630     RETURN x_return_status;
4631   END generate_instance_number_ib;
4632 --------------------------------------------------------------------------------
4633 --Start of Comments
4634 --Bug # 2726870: 11.5.9 enhancement for splitting assets by serial number
4635 --API Name    : create_split_comp_srl_num
4636 --Description : API will create serial_number records in OKL_TXL_ITM_INSTS_V
4637 --              If financial asset inventory item is serialized for a split asset
4638 --              component
4639 --History     : 03-Nov-2002   avsingh  Creation (for asset split by serial numbers)
4640 --                                     Bug# 7047938
4641 --              17-May-2008   avsingh  After OA migration tal_id is not being
4642 --                                     passed from the UI as part of the input
4643 --                                     record. Added l_tal_csr to fetch it based
4644 --                                     on asd id
4645 --End of comments
4646 --------------------------------------------------------------------------------
4647 PROCEDURE create_split_comp_srl_num(p_api_version      IN  NUMBER,
4648                                     p_init_msg_list    IN  VARCHAR2,
4649                                     x_return_status    OUT NOCOPY VARCHAR2,
4650                                     x_msg_count        OUT NOCOPY NUMBER,
4651                                     x_msg_data         OUT NOCOPY VARCHAR2,
4652                                     p_itiv_tbl         IN  itiv_tbl_type,
4653                                     x_itiv_tbl         OUT NOCOPY itiv_tbl_type) IS
4654 
4655 l_api_name   VARCHAR2(30) := 'CREATE_SPLIT_COMP_SRL_NUM';
4656 l_api_version CONSTANT NUMBER := 1.0;
4657 
4658 --Cursor to get inventory organization ids
4659 CURSOR inv_org_csr (p_tal_id IN NUMBER, p_asd_id IN NUMBER) IS
4660 SELECT mp.master_organization_id,
4661        chrb.inv_organization_id,
4662        txdb.inventory_item_id
4663 FROM   mtl_parameters mp,
4664        okc_k_headers_b chrb,
4665        okc_k_lines_b  cleb,
4666        okl_txl_Assets_b txlb,
4667        okl_txd_assets_b txdb
4668 WHERE  mp.organization_id = chrb.inv_organization_id
4669 AND    chrb.id            = cleb.dnz_chr_id
4670 AND    cleb.id            = txlb.kle_id
4671 AND    txlb.id            = p_tal_id
4672 AND    txdb.id            = p_asd_id;
4673 
4674 l_mast_org_id mtl_parameters.master_organization_id%TYPE;
4675 l_inv_org_id  okc_k_headers_b.inv_organization_id%TYPE;
4676 l_inv_item_id okl_txd_assets_b.inventory_item_id%TYPE;
4677 
4678 --Cursor to get location of parent instance from IB
4679 CURSOR ib_loc_csr (p_tal_id IN NUMBER) IS
4680 SELECT txlb.kle_id  fa_cle_id,
4681        ib_cle.id ib_cle_id,
4682        txlb.tas_id,
4683        csi.location_id,  --hz_locations
4684        csi.install_location_id,
4685        --Bug# 3569441
4686        csi.install_location_type_code,  --hz_party_sites, hz_locations
4687        csi.instance_number
4688 FROM   csi_item_instances  csi,
4689        csi_instance_statuses csi_inst_sts,
4690        okc_k_items         ib_cim,
4691        okc_k_lines_b       ib_cle,
4692        okc_line_styles_b   ib_lse,
4693        okc_k_lines_b       inst_cle,
4694        okc_line_styles_b   inst_lse,
4695        okc_statuses_b      inst_sts,
4696        okc_k_lines_b       fa_cle,
4697        okc_line_styles_b   fa_lse,
4698        okl_txl_assets_b    txlb
4699 WHERE  csi.instance_id    = TO_NUMBER(ib_cim.object1_id1)
4700 AND    csi_inst_sts.instance_status_id = csi.instance_status_id
4701 AND    NVL(csi_inst_sts.terminated_flag,'N') = 'N'
4702 AND    ib_cim.cle_id      = ib_cle.id
4703 AND    ib_cim.dnz_chr_id  = ib_cle.dnz_chr_id
4704 AND    ib_cle.cle_id      = inst_cle.id
4705 AND    ib_cle.dnz_chr_id  = inst_cle.dnz_chr_id
4706 AND    ib_cle.lse_id      = ib_lse.id
4707 AND    ib_lse.lty_code    = 'INST_ITEM'
4708 AND    inst_cle.cle_id    = fa_cle.cle_id
4709 AND    inst_cle.dnz_chr_id = fa_cle.dnz_chr_id
4710 AND    inst_cle.lse_id    = inst_lse.id
4711 AND    inst_lse.lty_code  = 'FREE_FORM2'
4712 AND    inst_sts.code      = inst_cle.sts_code
4713 AND    INST_STS.STE_CODE NOT IN ('HOLD', 'EXPIRED', 'TERMINATED', 'CANCELLED')
4714 AND    fa_cle.id          = txlb.kle_id
4715 AND    fa_cle.lse_id      = fa_lse.id
4716 AND    fa_lse.lty_code    = 'FIXED_ASSET'
4717 AND    txlb.id            = p_tal_id;
4718 
4719 l_fa_cle_id           okc_k_lines_b.id%TYPE;
4720 l_ib_cle_id           okc_k_lines_b.id%TYPE;
4721 l_tas_id              okl_txl_assets_b.tas_id%TYPE;
4722 l_location_id         csi_item_instances.location_id%TYPE;
4723 l_install_location_id csi_item_instances.install_location_id%TYPE;
4724 --BUG# 3569441
4725 l_location_type_code  csi_item_instances.install_location_type_code%TYPE;
4726 l_instance_number_csi csi_item_instances.instance_number%TYPE;
4727 
4728 --Cursor to get install site use id
4729 CURSOR inst_site_csr (pty_site_id IN NUMBER) IS
4730 SELECT TO_CHAR(Party_site_use_id) party_site_use_id
4731 FROM   hz_party_site_uses
4732 WHERE  party_site_id = pty_site_id
4733 AND    site_use_type = 'INSTALL_AT';
4734 
4735 
4736   --BUG# 3569441
4737   CURSOR inst_loc_csr (loc_id IN NUMBER) IS
4738   SELECT TO_CHAR(psu.party_site_use_id) party_site_use_id
4739   FROM   hz_party_site_uses psu,
4740          hz_party_sites     ps
4741   WHERE  psu.party_site_id    = ps.party_site_id
4742   AND    psu.site_use_type    = 'INSTALL_AT'
4743   AND    ps.location_id       = loc_id;
4744 
4745   --Cursor to get address for error
4746   CURSOR l_address_csr (pty_site_id IN NUMBER ) IS
4747   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)
4748   FROM hz_locations hl,
4749        hz_party_sites ps
4750   WHERE hl.location_id = ps.location_id
4751   AND   ps.party_site_id = pty_site_id;
4752 
4753   CURSOR l_address_csr2 (loc_id IN NUMBER) IS
4754   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)
4755   FROM hz_locations hl
4756   WHERE hl.location_id = loc_id;
4757 
4758   l_address VARCHAR2(80);
4759   --END BUG# 3569441
4760 
4761 l_party_site_use_id   okl_txl_itm_insts.object_id1_new%TYPE;
4762 l_itiv_tbl            itiv_tbl_type;
4763 l_itiv_rec            itiv_rec_type;
4764 lx_itiv_rec           itiv_rec_type;
4765 i                     NUMBER;
4766 j                     NUMBER;
4767 l_instance_number     OKL_TXL_ITM_INSTS.instance_number_ib%TYPE;
4768 
4769 --Bug # 7047938
4770 cursor l_tal_csr (p_asd_id in number) is
4771 select tal_id
4772 from   okl_txd_assets_b
4773 where  id = p_asd_id;
4774 
4775 l_tal_id okl_txd_assets_b.tal_id%TYPE;
4776 --Bug 7047938 End
4777 BEGIN
4778 ----
4779    x_return_status := OKL_API.START_ACTIVITY (
4780                                l_api_name
4781                                ,p_init_msg_list
4782                                ,'_PVT'
4783                                ,x_return_status);
4784     -- Check if activity started successfully
4785     IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
4786        RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
4787     ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
4788        RAISE OKL_API.G_EXCEPTION_ERROR;
4789     END IF;
4790 
4791     l_itiv_tbl := p_itiv_tbl;
4792     IF l_itiv_tbl.COUNT > 0 THEN
4793         --Bug # 7047938
4794         If l_itiv_tbl(1).tal_id is NULL OR l_itiv_tbl(1).tal_id = OKL_API.G_MISS_NUM
4795         then
4796             open l_tal_csr (p_asd_id => l_itiv_tbl(1).asd_id);
4797             Fetch l_tal_csr into l_tal_id;
4798             close l_tal_csr;
4799             for j in l_itiv_tbl.FIRST..l_itiv_tbl.LAST
4800             LOOP
4801                 l_itiv_tbl(j).tal_id := l_tal_id;
4802             END LOOP;
4803         End If;
4804         --Bug # 7047938 End
4805       --get inv org id
4806       OPEN inv_org_csr (p_tal_id => l_itiv_tbl(1).tal_id,
4807                         p_asd_id => l_itiv_tbl(1).asd_id);
4808       FETCH inv_org_csr INTO
4809                         l_mast_org_id,
4810                         l_inv_org_id,
4811                         l_inv_item_id;
4812       IF inv_org_csr%NOTFOUND THEN
4813          NULL; --this is not feasible
4814       END IF;
4815       CLOSE inv_org_csr;
4816 
4817       --get locations
4818       OPEN ib_loc_csr (p_tal_id => l_itiv_tbl(1).tal_id);
4819       FETCH ib_loc_csr INTO
4820                       l_fa_cle_id,
4821                       l_ib_cle_id,
4822                       l_tas_id,
4823                       l_location_id,
4824                       l_install_location_id,
4825                       --Bug# 3569441
4826                       l_location_type_code,
4827                       l_instance_number_csi;
4828       IF ib_loc_csr%NOTFOUND THEN
4829           NULL; -- should not happen
4830       END IF;
4831       CLOSE ib_loc_csr;
4832 
4833       --BUG# 3569441
4834       IF NVL(l_location_type_code,OKL_API.G_MISS_CHAR)  NOT IN ('HZ_LOCATIONS','HZ_PARTY_SITES') THEN
4835           --RAISE ERROR
4836           OKL_API.Set_Message(p_app_name     => G_APP_NAME,
4837                               p_msg_name     => G_INVALID_INSTALL_LOC_TYPE,
4838                               p_token1       => G_LOCATION_TYPE_TOKEN,
4839                               p_token1_value => l_location_type_code,
4840                               p_token2       => G_LOC_TYPE1_TOKEN,
4841                               p_token2_value => 'HZ_PARTY_SITES',
4842                               p_token3       => G_LOC_TYPE2_TOKEN,
4843                               p_token3_value => 'HZ_LOCATIONS');
4844           x_return_status := OKL_API.G_RET_STS_ERROR;
4845           RAISE OKL_API.G_EXCEPTION_ERROR;
4846 
4847       ELSIF NVL(l_location_type_code,OKL_API.G_MISS_CHAR) = 'HZ_PARTY_SITES' THEN
4848 
4849           --get site use id
4850           OPEN inst_site_csr(pty_site_id => l_install_location_id);
4851           FETCH inst_site_csr INTO l_party_site_use_id;
4852           IF inst_site_csr%NOTFOUND THEN
4853              OPEN l_address_csr(pty_site_id => l_install_location_id);
4854              FETCH l_address_csr INTO l_address;
4855              CLOSE l_address_csr;
4856              --Raise Error : not defined as install_at
4857              OKL_API.Set_Message(p_app_name  => G_APP_NAME,
4858                               p_msg_name     => G_MISSING_USAGE,
4859                               p_token1       => G_USAGE_TYPE_TOKEN,
4860                               p_token1_value => 'INSTALL_AT',
4861                               p_token2       => G_ADDRESS_TOKEN,
4862                               p_token2_value => l_address,
4863                               p_token3       => G_INSTANCE_NUMBER_TOKEN,
4864                               p_token3_value => l_instance_number_csi);
4865               x_return_status := OKL_API.G_RET_STS_ERROR;
4866               RAISE OKL_API.G_EXCEPTION_ERROR;
4867           END IF;
4868           CLOSE inst_site_csr;
4869 
4870       ELSIF NVL(l_location_type_code,OKL_API.G_MISS_CHAR) = 'HZ_LOCATIONS' THEN
4871 
4872          --get site use id
4873           OPEN inst_loc_csr(loc_id => l_install_location_id);
4874           FETCH inst_loc_csr INTO l_party_site_use_id;
4875           IF inst_loc_csr%NOTFOUND THEN
4876              OPEN l_address_csr2(loc_id => l_install_location_id);
4877              FETCH l_address_csr2 INTO l_address;
4878              CLOSE l_address_csr2;
4879              --Raise Error : not defined as install_at
4880              OKL_API.Set_Message(p_app_name  => G_APP_NAME,
4881                               p_msg_name     => G_MISSING_USAGE,
4882                               p_token1       => G_USAGE_TYPE_TOKEN,
4883                               p_token1_value => 'INSTALL_AT',
4884                               p_token2       => G_ADDRESS_TOKEN,
4885                               p_token2_value => l_address,
4886                               p_token3       => G_INSTANCE_NUMBER_TOKEN,
4887                               p_token3_value => l_instance_number_csi);
4888               x_return_status := OKL_API.G_RET_STS_ERROR;
4889               RAISE OKL_API.G_EXCEPTION_ERROR;
4890           END IF;
4891           CLOSE inst_loc_csr;
4892       END IF;
4893       --End BUG# 3569441
4894 
4895       j := 1;
4896       FOR i IN 1..l_itiv_tbl.LAST LOOP
4897           IF l_itiv_tbl(i).id IS NULL OR l_itiv_tbl(i).id = OKL_API.G_MISS_NUM THEN
4898 
4899              l_itiv_rec := l_itiv_tbl(i);
4900              --l_itiv_rec.kle_id := l_ib_cle_id;
4901              l_itiv_rec.kle_id := l_fa_cle_id;
4902              l_itiv_rec.tal_type := 'ALI';
4903              l_itiv_rec.tas_id   := l_tas_id;
4904              l_itiv_rec.line_number := i;
4905              l_itiv_rec.object_id1_new := l_party_site_use_id;
4906              l_itiv_rec.object_id2_new := '#';
4907              l_itiv_rec.jtot_object_code_new := 'OKX_PARTSITE';
4908              l_itiv_rec.object_id1_old := l_party_site_use_id;
4909              l_itiv_rec.object_id2_old := '#';
4910              l_itiv_rec.jtot_object_code_old := 'OKX_PARTSITE';
4911              l_itiv_rec.inventory_org_id := l_inv_org_id;
4912              l_itiv_rec.mfg_serial_number_yn := 'N';
4913              l_itiv_rec.inventory_item_id    := l_inv_item_id;
4914              l_itiv_rec.inv_master_org_id := l_mast_org_id;
4915              l_itiv_rec.selected_for_split_flag := 'Y';
4916 
4917 
4918              Validate_Serial_Number(x_return_status => x_return_status,
4919                                     p_serial_number => l_itiv_rec.serial_number);
4920              IF x_return_status <> OKL_API.G_RET_STS_SUCCESS THEN
4921                  RAISE OKL_API.G_EXCEPTION_ERROR;
4922              END IF;
4923 
4924              x_return_status := generate_instance_number_ib(x_instance_number_ib => l_instance_number);
4925              IF x_return_status <> OKL_API.G_RET_STS_SUCCESS THEN
4926                  RAISE OKL_API.G_EXCEPTION_ERROR;
4927              END IF;
4928              l_itiv_rec.instance_number_ib := l_instance_number;
4929              --create record
4930              okl_txl_itm_insts_pub.create_txl_itm_insts
4931                                     (p_api_version   => p_api_version,
4932                                      p_init_msg_list => p_init_msg_list,
4933                                      x_return_status => x_return_status,
4934                                      x_msg_count     => x_msg_count,
4935                                      x_msg_data      => x_msg_data,
4936                                      p_iipv_rec      => l_itiv_rec,
4937                                      x_iipv_rec      => lx_itiv_rec);
4938              IF x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR THEN
4939                  RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
4940              ELSIF x_return_status = OKL_API.G_RET_STS_ERROR THEN
4941                  RAISE OKL_API.G_EXCEPTION_ERROR;
4942              END IF;
4943              j:= j+1;
4944              x_itiv_tbl(j) := lx_itiv_rec;
4945           END IF;
4946      END LOOP;
4947    END IF;
4948    OKL_API.END_ACTIVITY (x_msg_count,
4949                           x_msg_data );
4950     EXCEPTION
4951     WHEN OKL_API.G_EXCEPTION_ERROR THEN
4952     x_return_status := OKL_API.HANDLE_EXCEPTIONS(
4953                                l_api_name,
4954                                G_PKG_NAME,
4955                                'OKL_API.G_RET_STS_ERROR',
4956                                x_msg_count,
4957                                x_msg_data,
4958                                '_PVT');
4959     WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
4960     x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
4961                               l_api_name,
4962                               G_PKG_NAME,
4963                               'OKL_API.G_RET_STS_UNEXP_ERROR',
4964                               x_msg_count,
4965                               x_msg_data,
4966                               '_PVT');
4967     WHEN OTHERS THEN
4968     x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
4969                               l_api_name,
4970                               G_PKG_NAME,
4971                               'OTHERS',
4972                               x_msg_count,
4973                               x_msg_data,
4974                               '_PVT');
4975 END create_split_comp_srl_num;
4976 --Bug#3222804 - serial number control based on setup in leasing inv org
4977 --------------------------------------------------------------------------------
4978 --Start of Comments
4979 --API Name    : validate_srl_num_control
4980 --Description : Local API to validate whether serial # control code is in sync with
4981 --              existing serial numbers in Install Base.
4982 --History     : 20-Nov-2003   avsingh  Creation
4983 --End of comments
4984 --------------------------------------------------------------------------------
4985 PROCEDURE validate_srl_num_control(p_api_version               IN  NUMBER,
4986                                    p_init_msg_list             IN  VARCHAR2,
4987                                    x_return_status             OUT NOCOPY VARCHAR2,
4988                                    x_msg_count                 OUT NOCOPY NUMBER,
4989                                    x_msg_data                  OUT NOCOPY VARCHAR2,
4990                                    p_cle_id                    IN  NUMBER,
4991                                    p_split_into_individuals_yn IN VARCHAR2,
4992                                    p_split_into_units          IN NUMBER,
4993                                    p_tal_id                    IN NUMBER) IS
4994 
4995   l_api_name   VARCHAR2(30) := 'VALIDATE_SRL_NUM_CONTROL';
4996   l_api_version CONSTANT NUMBER := 1.0;
4997 
4998 l_serialized        VARCHAR2(1) DEFAULT OKL_API.G_FALSE;
4999 
5000 --cursor for asset_number
5001 CURSOR asset_num_csr (P_fin_ast_id IN NUMBER) IS
5002 SELECT name
5003 FROM   okc_k_lines_tl
5004 WHERE  id = p_fin_ast_id;
5005 
5006 l_asset_number OKC_K_LINES_TL.NAME%TYPE;
5007 
5008 --Bug# 3222804 : serial # control based on leasing inv org setup
5009 --cursor to find serialized item instances in installed base
5010 CURSOR l_srl_no_count_csr(fin_ast_id IN NUMBER) IS
5011 SELECT
5012        COUNT(1)
5013 FROM   csi_item_instances  csi,
5014        okc_k_items         ib_cim,
5015        okc_k_lines_b       ib_cle,
5016        okc_line_styles_b   ib_lse,
5017        okc_k_lines_b       inst_cle,
5018        okc_line_styles_b   inst_lse,
5019        okc_statuses_b      inst_sts
5020 WHERE  csi.instance_id    = TO_NUMBER(ib_cim.object1_id1)
5021 AND    ib_cim.cle_id      = ib_cle.id
5022 AND    ib_cim.dnz_chr_id  = ib_cle.dnz_chr_id
5023 AND    ib_cle.cle_id      = inst_cle.id
5024 AND    ib_cle.dnz_chr_id  = inst_cle.dnz_chr_id
5025 AND    ib_cle.lse_id      = ib_lse.id
5026 AND    ib_lse.lty_code    = 'INST_ITEM'
5027 AND    inst_cle.cle_id    = fin_ast_id
5028 AND    inst_cle.lse_id    = inst_lse.id
5029 AND    inst_lse.lty_code  = 'FREE_FORM2'
5030 AND    inst_sts.code      = inst_cle.sts_code
5031 --Bug# 5946411: ER
5032 --AND    INST_STS.STE_CODE NOT IN ('HOLD', 'EXPIRED', 'TERMINATED', 'CANCELLED');
5033 AND    INST_STS.STE_CODE NOT IN ('HOLD', 'CANCELLED');
5034 --Bug# 5946411: ER end
5035 
5036 l_srl_no_count NUMBER DEFAULT 0;
5037 
5038 --cursor to get txl quantity
5039 CURSOR l_txlqty_csr (p_tal_id IN NUMBER) IS
5040 SELECT txl.current_units
5041 FROM   okl_txl_assets_b txl
5042 WHERE  id   = p_tal_id;
5043 
5044 l_txlqty NUMBER DEFAULT NULL;
5045 
5046 BEGIN
5047 
5048     x_return_status := OKL_API.G_RET_STS_SUCCESS;
5049 
5050     -- Call start_activity to create savepoint, check compatibility
5051     -- and initialize message list
5052     x_return_status := OKL_API.START_ACTIVITY (
5053                                l_api_name
5054                                ,p_init_msg_list
5055                                ,'_PVT'
5056                                ,x_return_status);
5057     -- Check if activity started successfully
5058     IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
5059        RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
5060     ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
5061        RAISE OKL_API.G_EXCEPTION_ERROR;
5062     END IF;
5063 
5064     IF (NVL(p_split_into_individuals_yn,'N') = 'Y')
5065        OR
5066        (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
5067        --check if serialization has been done properly
5068        l_txlqty := NULL;
5069        OPEN l_txlqty_csr(p_tal_id => p_tal_id);
5070        FETCH l_txlqty_csr INTO l_txlqty;
5071        IF l_txlqty_csr%NOTFOUND THEN
5072            NULL;
5073        END IF;
5074        CLOSE l_txlqty_csr;
5075        IF NVL(l_txlqty,OKL_API.G_MISS_NUM) <> OKL_API.G_MISS_NUM THEN
5076 
5077         l_serialized := Is_Serialized(p_cle_id => p_cle_id);
5078         IF (l_serialized = OKL_API.G_TRUE) THEN
5079             --fetch total instances to find if qantity matches
5080 
5081             l_srl_no_count := 0;
5082             OPEN l_srl_no_count_csr( fin_ast_id => p_cle_id);
5083             FETCH l_srl_no_count_csr INTO l_srl_no_count;
5084             IF l_srl_no_count_csr%NOTFOUND THEN
5085                 NULL;
5086             END IF;
5087             CLOSE l_srl_no_count_csr;
5088 
5089             IF l_srl_no_count = 1 AND l_txlqty  <> 1 THEN
5090 
5091                 l_asset_number := NULL;
5092                 OPEN asset_num_csr(p_fin_ast_id => p_cle_id);
5093                 FETCH asset_num_csr INTO l_asset_number;
5094                 IF asset_num_csr%NOTFOUND THEN
5095                     NULL;
5096                 END IF;
5097                 CLOSE asset_num_csr;
5098 
5099                 OKL_API.set_message(p_app_name     => G_APP_NAME,
5100                                     p_msg_name     => G_NOT_SERIALIZED_IN_IB,
5101                                     p_token1       => G_ASSET_NUMBER_TOKEN,
5102                                     p_token1_value => l_Asset_number
5103                                     );
5104                 --raise error
5105                 RAISE OKL_API.G_EXCEPTION_ERROR;
5106 
5107             ELSIF l_srl_no_count <> l_txlqty THEN
5108 
5109                 l_asset_number := NULL;
5110                 OPEN asset_num_csr(p_fin_ast_id => p_cle_id);
5111                 FETCH asset_num_csr INTO l_asset_number;
5112                 IF asset_num_csr%NOTFOUND THEN
5113                     NULL;
5114                 END IF;
5115                 CLOSE asset_num_csr;
5116 
5117 
5118                 OKL_API.set_message(p_app_name     => G_APP_NAME,
5119                                     p_msg_name     => G_SERIAL_NUMBER_MISMATCH,
5120                                     p_token1       => G_ASSET_NUMBER_TOKEN,
5121                                     p_token1_value => l_Asset_number
5122                                     );
5123                 --raise error
5124                 RAISE OKL_API.G_EXCEPTION_ERROR;
5125 
5126             ELSIF l_srl_no_count =  l_txlqty THEN
5127                 --data in installed base is correct
5128                 NULL;
5129             END IF;
5130 
5131         ELSIF l_serialized = OKL_API.G_FALSE THEN
5132             --fetch total instances to find if qantity matches
5133 
5134             l_srl_no_count := 0;
5135             OPEN l_srl_no_count_csr( fin_ast_id => p_cle_id);
5136             FETCH l_srl_no_count_csr INTO l_srl_no_count;
5137             IF l_srl_no_count_csr%NOTFOUND THEN
5138                 NULL;
5139             END IF;
5140             CLOSE l_srl_no_count_csr;
5141 
5142             IF l_srl_no_count <> 1 AND l_srl_no_count = l_txlqty THEN
5143                 --error asset is serilized in Installed Base
5144                 l_asset_number := NULL;
5145                 OPEN asset_num_csr(p_fin_ast_id => p_cle_id);
5146                 FETCH asset_num_csr INTO l_asset_number;
5147                 IF asset_num_csr%NOTFOUND THEN
5148                     NULL;
5149                 END IF;
5150                 CLOSE asset_num_csr;
5151 
5152                 OKL_API.set_message(p_app_name     => G_APP_NAME,
5153                                     p_msg_name     => G_SERIALIZED_IN_IB,
5154                                     p_token1       => G_ASSET_NUMBER_TOKEN,
5155                                     p_token1_value => l_Asset_number
5156                                     );
5157                 --raise error
5158                 RAISE OKL_API.G_EXCEPTION_ERROR;
5159 
5160             ELSIF l_srl_no_count <> 1 AND l_srl_no_count <> l_txlqty THEN
5161                 --error in installed base data
5162                 l_asset_number := NULL;
5163                 OPEN asset_num_csr(p_fin_ast_id => p_cle_id);
5164                 FETCH asset_num_csr INTO l_asset_number;
5165                 IF asset_num_csr%NOTFOUND THEN
5166                     NULL;
5167                 END IF;
5168 
5169                OKL_API.set_message(p_app_name     => G_APP_NAME,
5170                                     p_msg_name     => G_SERIAL_NUMBER_MISMATCH,
5171                                     p_token1       => G_ASSET_NUMBER_TOKEN,
5172                                     p_token1_value => l_Asset_number
5173                                     );
5174                 --raise error
5175                 RAISE OKL_API.G_EXCEPTION_ERROR;
5176 
5177             ELSIF l_srl_no_count = 1 THEN
5178                 --data in installed base is correct
5179                 NULL;
5180             END IF;
5181         END IF;
5182     END IF;
5183 
5184     ELSIF NVL(p_split_into_individuals_yn,'N') = 'X' THEN
5185        NULL; -- user will have to create new serail numbers
5186     END IF;
5187      OKL_API.END_ACTIVITY (x_msg_count,
5188                           x_msg_data );
5189 EXCEPTION
5190     WHEN OKL_API.G_EXCEPTION_ERROR THEN
5191     x_return_status := OKL_API.HANDLE_EXCEPTIONS(
5192                                l_api_name,
5193                                G_PKG_NAME,
5194                                'OKL_API.G_RET_STS_ERROR',
5195                                x_msg_count,
5196                                x_msg_data,
5197                                '_PVT');
5198     WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
5199     x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
5200                               l_api_name,
5201                               G_PKG_NAME,
5202                               'OKL_API.G_RET_STS_UNEXP_ERROR',
5203                               x_msg_count,
5204                               x_msg_data,
5205                               '_PVT');
5206     WHEN OTHERS THEN
5207     x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
5208                               l_api_name,
5209                               G_PKG_NAME,
5210                               'OTHERS',
5211                               x_msg_count,
5212                               x_msg_data,
5213                               '_PVT');
5214 END  validate_srl_num_control;
5215 --End Bug# 3222804 : serial number control setup in Leasing Inv Org
5216 --------------------------------------------------------------------------------
5217 --Start of Comments
5218 --Bug #2723498 : 11.5.9 enhancement for splitting assets by serial number
5219 --API Name    : create_srl_num_trx
5220 --Description : Local API will create serial_number records in OKL_TXL_ITM_INSTS_V
5221 --              If financial asset inventory item is serialized
5222 --History     : 03-Nov-2002   avsingh  Creation (for asset split by serial numbers)
5223 --End of comments
5224 --------------------------------------------------------------------------------
5225 PROCEDURE create_srl_num_trx(p_api_version               IN  NUMBER,
5226                              p_init_msg_list             IN  VARCHAR2,
5227                              x_return_status             OUT NOCOPY VARCHAR2,
5228                              x_msg_count                 OUT NOCOPY NUMBER,
5229                              x_msg_data                  OUT NOCOPY VARCHAR2,
5230                              p_cle_id                    IN  NUMBER,
5231                              p_split_into_individuals_yn IN VARCHAR2,
5232                              p_split_into_units          IN NUMBER,
5233                              p_ib_tbl                    IN ib_tbl_type,
5234                              p_tas_id                    IN NUMBER,
5235                              p_tal_id                    IN NUMBER,
5236                              p_asd_id                    IN NUMBER) IS
5237 
5238 l_api_name   VARCHAR2(30) := 'CREATE_SRL_NUM_TRX';
5239 l_api_version CONSTANT NUMBER := 1.0;
5240 
5241 
5242 --Cursor to get all the serial numbers
5243 CURSOR srl_num_csr(fin_ast_id IN NUMBER) IS
5244 SELECT ib_cle.id  ib_cle_id,
5245        csi.instance_id,
5246        csi.serial_number,
5247        csi.instance_number,
5248        csi.inv_organization_id,
5249        csi.inventory_item_id,
5250        csi.inv_master_organization_id,
5251        csi.unit_of_measure,
5252        csi.quantity,
5253        csi.instance_status_id,
5254        csi.location_id,  --hz_locations
5255        csi.install_location_id,
5256        --BUG# 3569441
5257        csi.install_location_type_code   --hz_party_sites OR hz_loactions
5258 FROM   csi_item_instances  csi,
5259        okc_k_items         ib_cim,
5260        okc_k_lines_b       ib_cle,
5261        okc_line_styles_b   ib_lse,
5262        okc_k_lines_b       inst_cle,
5263        okc_line_styles_b   inst_lse,
5264        okc_statuses_b      inst_sts
5265 WHERE  csi.instance_id    = TO_NUMBER(ib_cim.object1_id1)
5266 AND    ib_cim.cle_id      = ib_cle.id
5267 AND    ib_cim.dnz_chr_id  = ib_cle.dnz_chr_id
5268 AND    ib_cle.cle_id      = inst_cle.id
5269 AND    ib_cle.dnz_chr_id  = inst_cle.dnz_chr_id
5270 AND    ib_cle.lse_id      = ib_lse.id
5271 AND    ib_lse.lty_code    = 'INST_ITEM'
5272 AND    inst_cle.cle_id    = fin_ast_id
5273 AND    inst_cle.lse_id    = inst_lse.id
5274 AND    inst_lse.lty_code  = 'FREE_FORM2'
5275 AND    inst_sts.code      = inst_cle.sts_code
5276 --Bug# 5946411: ER
5277 --AND    INST_STS.STE_CODE NOT IN ('HOLD', 'EXPIRED', 'TERMINATED', 'CANCELLED');
5278 AND    INST_STS.STE_CODE NOT IN ('HOLD', 'CANCELLED');
5279 --Bug# 5946411: ER--end
5280 
5281 
5282 srl_num_rec  srl_num_csr%ROWTYPE;
5283 
5284 -- Cursor to get all the serial numbers if ib line id table is passed as input
5285 -- This will be done by asset managment during asset level termination
5286 CURSOR srl_num_csr2(fin_ast_id IN NUMBER, p_ib_cle_id IN VARCHAR2) IS
5287 SELECT ib_cle.id  ib_cle_id,
5288        csi.instance_id,
5289        csi.serial_number,
5290        csi.instance_number,
5291        csi.inv_organization_id,
5292        csi.inventory_item_id,
5293        csi.inv_master_organization_id,
5294        csi.unit_of_measure,
5295        csi.quantity,
5296        csi.instance_status_id,
5297        csi.location_id,  --hz_locations
5298        csi.install_location_id,
5299        --BUG# 3569441
5300        csi.install_location_type_code   --hz_party_sites OR hz_locations
5301 FROM   csi_item_instances  csi,
5302        okc_k_items         ib_cim,
5303        okc_k_lines_b       ib_cle,
5304        okc_line_styles_b   ib_lse,
5305        okc_k_lines_b       inst_cle,
5306        okc_line_styles_b   inst_lse,
5307        okc_statuses_b      inst_sts
5308 WHERE  csi.instance_id    = TO_NUMBER(ib_cim.object1_id1)
5309 AND    ib_cim.cle_id      = ib_cle.id
5310 AND    ib_cim.dnz_chr_id  = ib_cle.dnz_chr_id
5311 AND    ib_cle.cle_id      = inst_cle.id
5312 AND    ib_cle.dnz_chr_id  = inst_cle.dnz_chr_id
5313 AND    ib_cle.lse_id      = ib_lse.id
5314 AND    ib_cle.id          = p_ib_cle_id
5315 AND    ib_lse.lty_code    = 'INST_ITEM'
5316 AND    inst_cle.cle_id    = fin_ast_id
5317 AND    inst_cle.lse_id    = inst_lse.id
5318 AND    inst_lse.lty_code  = 'FREE_FORM2'
5319 AND    inst_sts.code      = inst_cle.sts_code
5320 --Bug# 5946411: ER
5321 --AND    INST_STS.STE_CODE NOT IN ('HOLD', 'EXPIRED', 'TERMINATED', 'CANCELLED');
5322 AND    INST_STS.STE_CODE NOT IN ('HOLD', 'CANCELLED');
5323 --Bug# 5946411: ER -- End
5324 
5325 srl_num_rec2  srl_num_csr2%ROWTYPE;
5326 
5327 l_iipv_tbl   okl_txl_itm_insts_pub.iipv_tbl_type;
5328 i            NUMBER DEFAULT 0;
5329 lx_iipv_tbl  okl_txl_itm_insts_pub.iipv_tbl_type;
5330 
5331 --Cursor to get install site use id
5332 CURSOR inst_site_csr (pty_site_id IN NUMBER) IS
5333 SELECT TO_CHAR(Party_site_use_id) party_site_use_id
5334 FROM   hz_party_site_uses
5335 WHERE  party_site_id = pty_site_id
5336 AND    site_use_type = 'INSTALL_AT';
5337 
5338   --BUG# 3569441
5339   CURSOR inst_loc_csr (loc_id IN NUMBER) IS
5340   SELECT TO_CHAR(psu.party_site_use_id) party_site_use_id
5341   FROM  hz_party_site_uses psu,
5342         hz_party_sites     ps
5343   WHERE psu.party_site_id   = ps.party_site_id
5344   AND   psu.site_use_type   = 'INSTALL_AT'
5345   AND   ps.location_id      = loc_id;
5346 
5347   CURSOR l_address_csr (pty_site_id IN NUMBER ) IS
5348   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)
5349   FROM hz_locations hl,
5350        hz_party_sites ps
5351   WHERE hl.location_id = ps.location_id
5352   AND   ps.party_site_id = pty_site_id;
5353 
5354   CURSOR l_address_csr2 (loc_id IN NUMBER) IS
5355   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)
5356   FROM hz_locations hl
5357   WHERE hl.location_id = loc_id;
5358 
5359   l_address VARCHAR2(80);
5360   --END BUG# 3569441
5361 
5362 l_pty_site_use_id   okl_txl_itm_insts.object_id1_new%TYPE;
5363 l_error_condition   EXCEPTION;
5364 
5365 l_ib_tbl            ib_tbl_type;
5366 l_serialized        VARCHAR2(1) DEFAULT OKL_API.G_FALSE;
5367 
5368 --cursor for asset_number
5369 CURSOR asset_num_csr (P_fin_ast_id IN NUMBER) IS
5370 SELECT name
5371 FROM   okc_k_lines_tl
5372 WHERE  id = p_fin_ast_id;
5373 
5374 l_asset_number OKC_K_LINES_TL.NAME%TYPE;
5375 
5376 BEGIN
5377     x_return_status := OKL_API.G_RET_STS_SUCCESS;
5378 
5379     -- Call start_activity to create savepoint, check compatibility
5380     -- and initialize message list
5381     x_return_status := OKL_API.START_ACTIVITY (
5382                                l_api_name
5383                                ,p_init_msg_list
5384                                ,'_PVT'
5385                                ,x_return_status);
5386     -- Check if activity started successfully
5387     IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
5388        RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
5389     ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
5390        RAISE OKL_API.G_EXCEPTION_ERROR;
5391     END IF;
5392 
5393     --Bug# 3222804 : Serial number control to be based on leasing inv org setup
5394     validate_srl_num_control(
5395                    p_api_version               => p_api_version,
5396                    p_init_msg_list             => p_init_msg_list,
5397                    x_return_status             => x_return_status,
5398                    x_msg_count                 => x_msg_count,
5399                    x_msg_data                  => x_msg_data,
5400                    p_cle_id                    => p_cle_id,
5401                    p_split_into_individuals_yn => p_split_into_individuals_yn,
5402                    p_split_into_units          => p_split_into_units,
5403                    p_tal_id                    => p_tal_id);
5404 
5405     IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
5406        RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
5407     ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
5408        RAISE OKL_API.G_EXCEPTION_ERROR;
5409     END IF;
5410     --Bug# 3222804 : Serial number control to be based on leasing inv org setup
5411 
5412     l_ib_tbl       := p_ib_tbl;
5413     IF NVL(p_split_into_individuals_yn,'N') = 'Y' THEN
5414        NULL; --no need to create srl num transactions
5415     ELSIF NVL(p_split_into_individuals_yn,'N') = 'X' THEN
5416        NULL; -- user will have to create new serail numbers
5417     ELSIF NVL(p_split_into_individuals_yn,'N') = 'N' AND NVL(p_split_into_units,0) > 0  THEN
5418        --user needs to select serial numbers to split
5419        l_serialized := is_serialized(p_cle_id => p_cle_id);
5420        IF (l_serialized = OKL_API.G_TRUE) THEN
5421           -- asset inventory item is serial number controlled
5422           IF l_ib_tbl.COUNT <> 0 THEN
5423              FOR i IN 1..l_ib_tbl.LAST
5424              LOOP
5425                  OPEN srl_num_csr2(fin_Ast_id => p_cle_id, p_ib_cle_id => l_ib_tbl(i).id);
5426                  FETCH srl_num_csr2 INTO srl_num_rec2;
5427                  IF srl_num_csr2%NOTFOUND THEN
5428                     --Serial number does not belong to asset. Please select correct serial number to split.
5429                     l_asset_number := NULL;
5430                     OPEN asset_num_csr(p_fin_ast_id => p_cle_id);
5431                     FETCH asset_num_csr INTO l_asset_number;
5432                     IF asset_num_csr%NOTFOUND THEN
5433                         NULL;
5434                     END IF;
5435                     CLOSE asset_num_csr;
5436 
5437                     OKL_API.set_message(p_app_name     => G_APP_NAME,
5438                                         p_msg_name     => G_IB_INSTANCE_MISMATCH,
5439                                         p_token1       => G_ASSET_NUMBER_TOKEN,
5440                                         p_token1_value => l_Asset_number,
5441                                         p_token2       => G_IB_LINE_TOKEN,
5442                                         p_token2_value => TO_CHAR(l_ib_tbl(i).id));
5443                     --raise error
5444                     RAISE OKL_API.G_EXCEPTION_ERROR;
5445                  END IF;
5446                  l_iipv_tbl(i).tas_id             := p_tas_id;
5447                  l_iipv_tbl(i).tal_id             := p_tal_id;
5448                  l_iipv_tbl(i).kle_id             := srl_num_rec2.ib_cle_id;
5449                  l_iipv_tbl(i).tal_type           := 'ALI'; -- hardcoded for split asset
5450                  l_iipv_tbl(i).line_number        := i;
5451                  l_iipv_tbl(i).instance_number_ib := srl_num_rec2.instance_number;
5452 
5453                  --fetch party site use id
5454                  l_pty_site_use_id := NULL;
5455                  --BUG# 3569441 :
5456                  IF NVL(srl_num_rec2.install_location_type_code,OKL_API.G_MISS_CHAR) NOT IN ('HZ_LOCATIONS','HZ_PARTY_SITES') THEN
5457 
5458                      --Raise Error
5459                      OKL_API.Set_Message(p_app_name     => G_APP_NAME,
5460                                   p_msg_name     => G_INVALID_INSTALL_LOC_TYPE,
5461                                   p_token1       => G_LOCATION_TYPE_TOKEN,
5462                                   p_token1_value => srl_num_rec2.install_location_type_code,
5463                                   p_token2       => G_LOC_TYPE1_TOKEN,
5464                                   p_token2_value => 'HZ_PARTY_SITES',
5465                                   p_token3       => G_LOC_TYPE2_TOKEN,
5466                                   p_token3_value => 'HZ_LOCATIONS');
5467                       x_return_status := OKL_API.G_RET_STS_ERROR;
5468                       RAISE OKL_API.G_EXCEPTION_ERROR;
5469 
5470                  ELSIF NVL(srl_num_rec2.install_location_type_code,OKL_API.G_MISS_CHAR)  = 'HZ_PARTY_SITES' THEN
5471 
5472                      OPEN inst_site_csr(srl_num_rec2.install_location_id);
5473                      FETCH inst_site_csr INTO l_pty_site_use_id;
5474                      IF inst_site_csr%NOTFOUND THEN
5475                          OPEN l_address_csr(pty_site_id => srl_num_rec2.install_location_id);
5476                          FETCH l_address_csr INTO l_address;
5477                          CLOSE l_address_csr;
5478                          --Raise Error : not defined as install_at
5479                          OKL_API.Set_Message(p_app_name  => G_APP_NAME,
5480                               p_msg_name     => G_MISSING_USAGE,
5481                               p_token1       => G_USAGE_TYPE_TOKEN,
5482                               p_token1_value => 'INSTALL_AT',
5483                               p_token2       => G_ADDRESS_TOKEN,
5484                               p_token2_value => l_address,
5485                               p_token3       => G_INSTANCE_NUMBER_TOKEN,
5486                               p_token3_value => srl_num_rec2.instance_number);
5487                           x_return_status := OKL_API.G_RET_STS_ERROR;
5488                           RAISE OKL_API.G_EXCEPTION_ERROR;
5489                          --l_pty_site_use_id := '-1';
5490                      END IF;
5491                      CLOSE inst_site_csr;
5492 
5493                  ELSIF NVL(srl_num_rec2.install_location_type_code, OKL_API.G_MISS_CHAR) = 'HZ_LOCATIONS' THEN
5494 
5495                      OPEN inst_loc_csr(srl_num_rec2.install_location_id);
5496                      FETCH inst_loc_csr INTO l_pty_site_use_id;
5497                      IF inst_loc_csr%NOTFOUND THEN
5498                          --l_pty_site_use_id := '-1';
5499                          OPEN l_address_csr2(loc_id => srl_num_rec2.install_location_id);
5500                          FETCH l_address_csr2 INTO l_address;
5501                          CLOSE l_address_csr2;
5502                          --Raise Error : not defined as install_at
5503                          OKL_API.Set_Message(p_app_name  => G_APP_NAME,
5504                                   p_msg_name     => G_MISSING_USAGE,
5505                                   p_token1       => G_USAGE_TYPE_TOKEN,
5506                                   p_token1_value => 'INSTALL_AT',
5507                                   p_token2       => G_ADDRESS_TOKEN,
5508                                   p_token2_value => l_address,
5509                                   p_token3       => G_INSTANCE_NUMBER_TOKEN,
5510                                   p_token3_value => srl_num_rec2.instance_number);
5511                          x_return_status := OKL_API.G_RET_STS_ERROR;
5512                          RAISE OKL_API.G_EXCEPTION_ERROR;
5513                      END IF;
5514                      CLOSE inst_loc_csr;
5515 
5516                  END IF;
5517                  --End Bug # 3569441
5518 
5519                  l_iipv_tbl(i).object_id1_new         := l_pty_site_use_id;
5520                  l_iipv_tbl(i).object_id2_new         := '#';
5521                  l_iipv_tbl(i).jtot_object_code_new    := 'OKX_PARTSITE';
5522                  l_iipv_tbl(i).object_id1_old         := l_pty_site_use_id;
5523                  l_iipv_tbl(i).object_id2_old         := '#';
5524                  l_iipv_tbl(i).jtot_object_code_old    := 'OKX_PARTSITE';
5525                  l_iipv_tbl(i).inventory_org_id        := srl_num_rec2.inv_organization_id;
5526                  l_iipv_tbl(i).serial_number           := srl_num_rec2.serial_number;
5527                  l_iipv_tbl(i).mfg_serial_number_yn    := 'N';
5528                  l_iipv_tbl(i).inventory_item_id       := srl_num_rec2.inventory_item_id;
5529                  l_iipv_tbl(i).INV_MASTER_ORG_ID       := srl_num_rec2.inv_master_organization_id;
5530                  l_iipv_tbl(i).dnz_cle_id              := p_cle_id;
5531                  l_iipv_tbl(i).instance_id             := srl_num_rec2.instance_id;
5532                  l_iipv_tbl(i).selected_for_split_flag := 'Y';
5533                  l_iipv_tbl(i).asd_id                  := p_asd_id;
5534                 --Bug fix # 2753141
5535                 CLOSE srl_num_csr2;
5536               END LOOP;
5537           ELSE --srl_tbl count is zero
5538               --get all the serial numbers
5539               i := 0;
5540               OPEN srl_num_csr (fin_Ast_id => p_cle_id);
5541               LOOP
5542                   FETCH srl_num_csr INTO srl_num_rec;
5543                   EXIT WHEN  srl_num_csr%NOTFOUND;
5544                   i := i + 1;
5545                   l_iipv_tbl(i).tas_id             := p_tas_id;
5546                   l_iipv_tbl(i).tal_id             := p_tal_id;
5547                   l_iipv_tbl(i).kle_id             := srl_num_rec.ib_cle_id;
5548                   l_iipv_tbl(i).tal_type           := 'ALI'; -- hardcoded for split asset
5549                   l_iipv_tbl(i).line_number        := i;
5550                   l_iipv_tbl(i).instance_number_ib := srl_num_rec.instance_number;
5551 
5552                   --fetch party site use id
5553                   l_pty_site_use_id := NULL;
5554                   --BUG# 3569441
5555                   IF NVL(srl_num_rec.install_location_type_code,OKL_API.G_MISS_CHAR) NOT IN ('HZ_LOCATIONS','HZ_PARTY_SITES') THEN
5556 
5557                       --Raise Error
5558                       OKL_API.Set_Message(p_app_name     => G_APP_NAME,
5559                                   p_msg_name     => G_INVALID_INSTALL_LOC_TYPE,
5560                                   p_token1       => G_LOCATION_TYPE_TOKEN,
5561                                   p_token1_value => srl_num_rec.install_location_type_code,
5562                                   p_token2       => G_LOC_TYPE1_TOKEN,
5563                                   p_token2_value => 'HZ_PARTY_SITES',
5564                                   p_token3       => G_LOC_TYPE2_TOKEN,
5565                                   p_token3_value => 'HZ_LOCATIONS');
5566                       x_return_status := OKL_API.G_RET_STS_ERROR;
5567                       RAISE OKL_API.G_EXCEPTION_ERROR;
5568 
5569                   ELSIF NVL(srl_num_rec.install_location_type_code,OKL_API.G_MISS_CHAR) = 'HZ_PARTY_SITES' THEN
5570 
5571                       OPEN inst_site_csr(srl_num_rec.install_location_id);
5572                       FETCH inst_site_csr INTO l_pty_site_use_id;
5573                       IF inst_site_csr%NOTFOUND THEN
5574                           OPEN l_address_csr(pty_site_id => srl_num_rec2.install_location_id);
5575                           FETCH l_address_csr INTO l_address;
5576                           CLOSE l_address_csr;
5577                           --Raise Error : not defined as install_at
5578                           OKL_API.Set_Message(p_app_name  => G_APP_NAME,
5579                               p_msg_name     => G_MISSING_USAGE,
5580                               p_token1       => G_USAGE_TYPE_TOKEN,
5581                               p_token1_value => 'INSTALL_AT',
5582                               p_token2       => G_ADDRESS_TOKEN,
5583                               p_token2_value => l_address,
5584                               p_token3       => G_INSTANCE_NUMBER_TOKEN,
5585                               p_token3_value => srl_num_rec.instance_number);
5586                           x_return_status := OKL_API.G_RET_STS_ERROR;
5587                           RAISE OKL_API.G_EXCEPTION_ERROR;
5588                       END IF;
5589 
5590                       CLOSE inst_site_csr;
5591                   ELSIF NVL(srl_num_rec.install_location_type_code,OKL_API.G_MISS_CHAR) = 'HZ_LOCATIONS' THEN
5592 
5593                       OPEN inst_loc_csr(srl_num_rec.install_location_id);
5594                       FETCH inst_loc_csr INTO l_pty_site_use_id;
5595                       IF inst_loc_csr%NOTFOUND THEN
5596                           OPEN l_address_csr2(loc_id => srl_num_rec2.install_location_id);
5597                           FETCH l_address_csr2 INTO l_address;
5598                           CLOSE l_address_csr2;
5599                           --Raise Error : not defined as install_at
5600                           OKL_API.Set_Message(p_app_name  => G_APP_NAME,
5601                               p_msg_name     => G_MISSING_USAGE,
5602                               p_token1       => G_USAGE_TYPE_TOKEN,
5603                               p_token1_value => 'INSTALL_AT',
5604                               p_token2       => G_ADDRESS_TOKEN,
5605                               p_token2_value => l_address,
5606                               p_token3       => G_INSTANCE_NUMBER_TOKEN,
5607                               p_token3_value => srl_num_rec.instance_number);
5608                           x_return_status := OKL_API.G_RET_STS_ERROR;
5609                           RAISE OKL_API.G_EXCEPTION_ERROR;
5610                       END IF;
5611                       CLOSE inst_loc_csr;
5612 
5613                   END IF;
5614                   --BUG# 3569441
5615 
5616 
5617                   l_iipv_tbl(i).object_id1_new         := l_pty_site_use_id;
5618                   l_iipv_tbl(i).object_id2_new         := '#';
5619                   l_iipv_tbl(i).jtot_object_code_new    := 'OKX_PARTSITE';
5620                   l_iipv_tbl(i).object_id1_old         := l_pty_site_use_id;
5621                   l_iipv_tbl(i).object_id2_old         := '#';
5622                   l_iipv_tbl(i).jtot_object_code_old    := 'OKX_PARTSITE';
5623                   l_iipv_tbl(i).inventory_org_id        := srl_num_rec.inv_organization_id;
5624                   l_iipv_tbl(i).serial_number           := srl_num_rec.serial_number;
5625                   l_iipv_tbl(i).mfg_serial_number_yn    := 'N';
5626                   l_iipv_tbl(i).inventory_item_id       := srl_num_rec.inventory_item_id;
5627                   l_iipv_tbl(i).INV_MASTER_ORG_ID       := srl_num_rec.inv_master_organization_id;
5628                   l_iipv_tbl(i).dnz_cle_id              := p_cle_id;
5629                   l_iipv_tbl(i).instance_id             := srl_num_rec.instance_id;
5630                   l_iipv_tbl(i).selected_for_split_flag := 'N';
5631                   l_iipv_tbl(i).asd_id                  := p_asd_id;
5632 
5633               END LOOP;
5634               CLOSE srl_num_csr;
5635           END IF; --srl_tbl count is = 0
5636           IF l_iipv_tbl.COUNT  > 0 THEN
5637               --call api to create records for srl num trx
5638               okl_txl_itm_insts_pub.create_txl_itm_insts(
5639                    p_api_version    => p_api_version,
5640                    p_init_msg_list  => p_init_msg_list,
5641                    x_return_status  => x_return_status,
5642                    x_msg_count      => x_msg_count,
5643                    x_msg_data       => x_msg_data,
5644                    p_iipv_tbl       => l_iipv_tbl,
5645                    x_iipv_tbl       => lx_iipv_tbl);
5646 
5647               IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
5648                   RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
5649               ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
5650                   RAISE OKL_API.G_EXCEPTION_ERROR;
5651               END IF;
5652 
5653           END IF;
5654        --Bug# 3222804 : serial # control based on leasing inv org setup
5655        ELSIF l_serialized = OKL_API.G_FALSE THEN
5656            NULL;
5657        END IF; -- if srl number controlled
5658    END IF;
5659    l_iipv_tbl.DELETE;
5660      OKL_API.END_ACTIVITY (x_msg_count,
5661                           x_msg_data );
5662 EXCEPTION
5663     WHEN OKL_API.G_EXCEPTION_ERROR THEN
5664     x_return_status := OKL_API.HANDLE_EXCEPTIONS(
5665                                l_api_name,
5666                                G_PKG_NAME,
5667                                'OKL_API.G_RET_STS_ERROR',
5668                                x_msg_count,
5669                                x_msg_data,
5670                                '_PVT');
5671     WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
5672     x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
5673                               l_api_name,
5674                               G_PKG_NAME,
5675                               'OKL_API.G_RET_STS_UNEXP_ERROR',
5676                               x_msg_count,
5677                               x_msg_data,
5678                               '_PVT');
5679     WHEN OTHERS THEN
5680     x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
5681                               l_api_name,
5682                               G_PKG_NAME,
5683                               'OTHERS',
5684                               x_msg_count,
5685                               x_msg_data,
5686                               '_PVT');
5687 END  create_srl_num_trx;
5688 --Bug #2723498 : 11.5.9 Split by serial numbers enhancement
5689 FUNCTION Check_If_Loan(p_cle_id IN NUMBER,
5690                        x_return_status OUT nocopy VARCHAR2) RETURN VARCHAR2 IS
5691 --cursor to get deal type
5692 CURSOR l_dealtyp_csr(PCleId IN NUMBER) IS
5693 SELECT khr.deal_type
5694 FROM   okl_k_headers khr,
5695        okc_k_headers_b chrb,
5696        okc_k_lines_b   cleb
5697 WHERE  khr.id = chrb.id
5698 AND    chrb.id = cleb.dnz_chr_id
5699 AND    cleb.id = PCleId;
5700 
5701 l_deal_type okl_k_headers.deal_type%TYPE;
5702 l_loan_yn   VARCHAR2(1) DEFAULT 'N';
5703 
5704 BEGIN
5705 ----
5706     x_return_status := OKL_API.G_RET_STS_SUCCESS;
5707     OPEN l_dealtyp_csr (PCleId => p_cle_id);
5708     FETCH l_dealtyp_csr INTO l_deal_type;
5709     IF l_dealtyp_csr%NOTFOUND THEN
5710         NULL;
5711     END IF;
5712     CLOSE l_dealtyp_csr;
5713 
5714     IF NVL(l_deal_type,'X') IN ('LOAN','LOAN-REVOLVING') THEN
5715         l_loan_yn := 'Y';
5716     ELSE
5717         l_loan_yn := 'N';
5718     END IF;
5719 
5720     RETURN(l_loan_yn);
5721     EXCEPTION
5722     WHEN OTHERS THEN
5723          x_return_status := OKL_API.G_RET_STS_ERROR;
5724 ----
5725 END Check_If_Loan;
5726 
5727 --------------------------------------------------------------------------------
5728 --Start of Comments
5729 --API Name    : Create_Split_Transaction
5730 --Description : Process API to create Split Aseet Transaction Records in
5731 --              OKL_TXL_ASSETS_V and OKL_TXD_ASSETS_V
5732 --              1. Take the line details to be split
5733 --              2. Set the status of the contract as inactive
5734 --              3. Create and save source record into okl_trx_assets_v
5735 --              4. Create and save target record into okl_txd_assets_v
5736 --History     :
5737 --              10-OCT-2001    avsingh  Creation
5738 --              12-Dec-2002    avsingh  Overloaded the procedure to take p_srl_tbl
5739 --                                      as IN parameter. This will be directly called
5740 --                                      by Asset management line level termination
5741 --                                      Process. The old call is kept for backward
5742 --                                      compatability. It will be still used from
5743 --                                      the split asset UI.
5744 --              30-Jan-2004    avsingh  Bug# 3156924
5745 --                                      Overloaded the procedure to accept
5746 --                                      trx_date
5747 --              16-Aug-2005    smadhava Bug# 4542290 Variable Rate Enhancement
5748 --End of Comments
5749 ------------------------------------------------------------------------------
5750 PROCEDURE Create_Split_Transaction(p_api_version               IN  NUMBER,
5751                                    p_init_msg_list             IN  VARCHAR2,
5752                                    x_return_status             OUT NOCOPY VARCHAR2,
5753                                    x_msg_count                 OUT NOCOPY NUMBER,
5754                                    x_msg_data                  OUT NOCOPY VARCHAR2,
5755                                    p_cle_id                    IN  NUMBER,
5756                                    p_split_into_individuals_yn IN  VARCHAR2,
5757                                    p_split_into_units          IN  NUMBER,
5758                                    p_ib_tbl                    IN  ib_tbl_type,
5759                                    --Bug# 3156924
5760                                    p_trx_date                  IN  DATE,
5761                                    --bug# 3156924
5762                                    x_txdv_tbl                  OUT NOCOPY txdv_tbl_type,
5763                                    x_txlv_rec                  OUT NOCOPY txlv_rec_type,
5764                                    x_trxv_rec                  OUT NOCOPY trxv_rec_type) IS
5765 
5766 l_return_status        VARCHAR2(1)  DEFAULT OKL_API.G_RET_STS_SUCCESS;
5767 l_api_name             CONSTANT VARCHAR2(30) := 'CREATE_SPLIT_TRANSACTION';
5768 l_api_version          CONSTANT NUMBER := 1.0;
5769 
5770 --cursor to check presence of an already active transaction
5771 CURSOR chk_split_trx(p_cle_id IN NUMBER) IS
5772 SELECT txl.id,             --tal_id
5773        txl.SPLIT_INTO_SINGLES_FLAG,  --p_split_into_individuals_yn
5774        txl.SPLIT_INTO_UNITS,  --p_split_into_units
5775        --Bug# 3156924
5776        tas.DATE_TRANS_OCCURRED,
5777        tas.ID
5778 FROM   OKL_TXL_ASSETS_B txl,
5779        OKL_TRX_ASSETS   tas
5780 WHERE  txl.kle_id = p_cle_id
5781 AND    txl.tas_id = tas.id
5782 AND    txl.tal_type = 'ALI'
5783 AND    tas.tas_type = 'ALI'
5784 AND    tas.tsu_code = 'ENTERED'
5785 AND    EXISTS (SELECT NULL
5786                    FROM
5787                           okl_trx_types_tl ttyp
5788                    WHERE  tas.try_id    = ttyp.id
5789                    AND    ttyp.name     = 'Split Asset'
5790                    AND    ttyp.LANGUAGE = 'US');
5791 
5792 --for split asset components
5793 --cursor to check whether split asset comonent
5794 
5795 l_split_into_ind_yn    VARCHAR2(1) DEFAULT 'Z';
5796 l_split_units          NUMBER DEFAULT 0;
5797 l_tal_id               NUMBER;
5798 --Bug# 3156924
5799 l_trx_date             okl_trx_assets.DATE_TRANS_OCCURRED%TYPE;
5800 l_tas_id               okl_trx_assets.ID%TYPE;
5801 
5802 
5803 l_trxv_rec             trxv_rec_type;
5804 l_txlv_rec             txlv_rec_type;
5805 l_txdv_rec             txdv_rec_type;
5806 l_txdv_rec_out         txdv_rec_type;
5807 l_txdv_tbl             txdv_tbl_type;
5808 l_ast_line_rec         ast_line_rec_type;
5809 l_fa_location_id       NUMBER;
5810 l_row_not_found        BOOLEAN := TRUE;
5811 l_total_cost           NUMBER;
5812 l_total_salvage_value  NUMBER;
5813 l_units_on_child_line  NUMBER;
5814 l_total_quantity       NUMBER;
5815 l_split_into_units     NUMBER;
5816 l_asset_exists         VARCHAR2(1) DEFAULT 'N';
5817 j                      NUMBER      DEFAULT 0; --counter for generating split asset numbers
5818 l_no_txd_data_found    BOOLEAN DEFAULT TRUE;
5819 
5820 --Bug #2723498 11.5.9 enhancement - Splitting assets by serial numbers
5821 --check if serial number data exists
5822 --cursor to check whether srl number data exists
5823 CURSOR srl_exist_chk (p_tal_id IN NUMBER) IS
5824 SELECT '!'
5825 FROM   dual
5826 WHERE  EXISTS
5827 (SELECT 1
5828 FROM   okl_txl_itm_insts
5829 WHERE  tal_id = p_tal_id
5830 AND    tal_type = 'ALI');
5831 
5832 l_srl_exists VARCHAR2(1) DEFAULT '?';
5833 
5834 --Bug #2723498 11.5.9 enhancement - Splitting assets by serial numbers
5835 --cursor to fetch all the serail numbers
5836 CURSOR get_srl_csr (p_tal_id IN NUMBER) IS
5837 SELECT id
5838 FROM   okl_txl_itm_insts
5839 WHERE  tal_id = p_tal_id
5840 AND    tal_type = 'ALI';
5841 
5842 l_iipv_tbl   okl_txl_itm_insts_pub.iipv_tbl_type;
5843 l_iipv_count NUMBER;
5844 l_iipv_id    NUMBER;
5845 
5846 l_ib_tbl    ib_tbl_type;
5847 
5848 --Bug #2723498 11.5.9 - Multi Currency
5849 CURSOR curr_conv_csr (PCleId IN NUMBER) IS
5850 SELECT khrv.currency_code,
5851        khrv.currency_conversion_type,
5852        khrv.currency_conversion_rate,
5853        khrv.currency_conversion_date,
5854        khrv.start_date
5855 FROM   okl_k_headers_full_v khrv,
5856        okc_k_lines_b        cle
5857 WHERE  khrv.id         = cle.dnz_chr_id
5858 AND    cle.id  = PCleId;
5859 
5860 curr_conv_rec curr_conv_csr%ROWTYPE;
5861 
5862 
5863 --Bug# 2798006 : split asset for loan contracts
5864 CURSOR loan_ast_csr (PCleId IN NUMBER) IS
5865 SELECT
5866         cle_fa.id               kle_id,
5867         clet.name               NAME,
5868         clet.item_description   DESCRIPTION,
5869         cle.chr_id              CHR_ID,
5870         cle.dnz_chr_id          DNZ_CHR_ID,
5871         cle.id                  PARENT_LINE_ID,
5872         cle.start_date          START_DATE_ACTIVE,
5873         cle.end_date            END_DATE_ACTIVE,
5874         cim_fa.number_of_items  CURRENT_UNITS,
5875         clet.name               ASSET_NUMBER,
5876         kle.OEC                 ORIGINAL_COST,
5877         kle.OEC                 COST,
5878         cle.sts_code            LINE_STATUS
5879 FROM    okc_k_items           cim_fa,
5880         okc_k_lines_b         cle_fa,
5881         okc_line_styles_b     lse_fa,
5882         okl_k_lines           kle,
5883         okc_k_lines_tl        clet,
5884         okc_k_lines_b         cle
5885 WHERE   cim_fa.cle_id     = cle_fa.id
5886 AND     cle_fa.cle_id     = cle.id
5887 AND     cle_fa.dnz_chr_id = cle.dnz_chr_id
5888 AND     cle_fa.lse_id     = lse_fa.id
5889 AND     lse_fa.lty_code   = 'FIXED_ASSET'
5890 AND     kle.id            = cle.id
5891 AND     clet.id           = cle.id
5892 AND     clet.LANGUAGE     = USERENV('LANG')
5893 AND     cle.id            = PCleId;
5894 
5895 l_loan_ast_rec loan_ast_csr%ROWTYPE;
5896 l_loan_yn      VARCHAR2(1) DEFAULT 'N';
5897 l_fa_exists    VARCHAR2(1) DEFAULT 'N';
5898 
5899 --Bug Fix # 2881114
5900 --Cursor to check whether asset is linked to service contract
5901 CURSOR lnk_to_srv_csr(p_cle_id IN NUMBER) IS
5902 SELECT '!'
5903 FROM   dual
5904 WHERE  EXISTS
5905        (
5906         SELECT '1'
5907         FROM
5908                okc_k_headers_b   oks_chrb,
5909                okc_line_styles_b oks_cov_pd_lse,
5910                okc_k_lines_b     oks_cov_pd_cleb,
5911                okc_k_rel_objs    krel,
5912                okc_line_styles_b lnk_srv_lse,
5913                okc_statuses_b    lnk_srv_sts,
5914                okc_k_lines_b     lnk_srv_cleb,
5915                okc_k_items       lnk_srv_cim
5916         WHERE  oks_chrb.scs_code            = 'SERVICE'
5917         AND    oks_chrb.id                  = oks_cov_pd_cleb.dnz_chr_id
5918         AND    oks_cov_pd_cleb.lse_id       = oks_cov_pd_lse.id
5919         AND    oks_cov_pd_lse.lty_code      = 'COVER_PROD'
5920         AND    '#'                          = krel.object1_id2
5921         AND    oks_cov_pd_cleb.id           = krel.object1_id1
5922         AND    krel.rty_code                = 'OKLSRV'
5923         AND    krel.chr_id                  = lnk_srv_cleb.dnz_chr_id
5924         AND    krel.cle_id                  = lnk_srv_cleb.id
5925         AND    lnk_srv_cleb.lse_id          = lnk_srv_lse.id
5926         AND    lnk_srv_lse.lty_code         = 'LINK_SERV_ASSET'
5927         AND    lnk_srv_cleb.sts_code        = lnk_srv_sts.code
5928         AND    lnk_srv_sts.ste_code NOT IN ('HOLD','EXPIRED','TERMINATED','CANCELLED')
5929         AND    lnk_srv_cleb.dnz_chr_id       = lnk_srv_cim.dnz_chr_id
5930         AND    lnk_srv_cleb.id               = lnk_srv_cim.cle_id
5931         AND    lnk_srv_cim.jtot_object1_code = 'OKX_COVASST'
5932         AND    lnk_srv_cim.object1_id2       = '#'
5933         AND    lnk_srv_cim.object1_id1       = TO_CHAR(p_cle_id)
5934        );
5935 
5936 l_lnk_to_srv  VARCHAR2(1) DEFAULT '?';
5937 
5938   --Bug# 2981308 : cursor to fetch asset key ccid
5939   CURSOR l_fab_csr(p_asset_id IN NUMBER) IS
5940   SELECT fab.asset_key_ccid
5941   FROM   fa_additions_b fab
5942   WHERE  fab.asset_id = p_asset_id;
5943 
5944   l_asset_key_id   fa_additions_b.asset_key_ccid%TYPE;
5945   --Bug# 2981308
5946 
5947   --Bug# 3783518
5948   CURSOR l_chr_csr(p_cle_id IN NUMBER) IS
5949   SELECT dnz_chr_id
5950   FROM okc_k_lines_b
5951   WHERE id = p_cle_id;
5952 
5953   l_chr_id okc_k_headers_b.id%TYPE;
5954 
5955   --cursor to check if contract has re-lease assets
5956   -- Bug# 4631549
5957   -- Disable split asset process for
5958   -- Re-lease contract and Re-lease asset flows
5959   CURSOR l_chk_rel_ast_csr (p_chr_id IN NUMBER) IS
5960   SELECT '!'
5961   FROM   OKC_RULES_B rul
5962   WHERE  rul.dnz_chr_id = p_chr_id
5963   AND    rul.rule_information_category = 'LARLES'
5964   AND    NVL(rule_information1,'N') = 'Y';
5965 
5966  l_rel_ast VARCHAR2(1);
5967  -- Bug# 4542290 - smadhava - Added - Start
5968  l_pdt_params_rec OKL_SETUPPRODUCTS_PUB.pdt_parameters_rec_type;
5969  l_rev_recog_meaning     OKL_PRODUCT_PARAMETERS_V.REVENUE_RECOGNITION_MEANING%TYPE;
5970 
5971     CURSOR get_prod_param_values(cp_name OKL_PDT_QUALITYS.NAME%TYPE
5972                                , cp_value OKL_PQY_VALUES.VALUE%TYPE) IS
5973     SELECT
5974          QVE.DESCRIPTION
5975       FROM
5976          OKL_PDT_QUALITYS PQY
5977        , OKL_PQY_VALUES QVE
5978      WHERE
5979           QVE.PQY_ID = PQY.ID
5980       AND PQY.NAME   = cp_name
5981       AND QVE.VALUE  = cp_value;
5982 
5983  -- Bug# 4542290 - smadhava - Added - End
5984 
5985  --Added by dpsingh for LE uptake
5986   CURSOR contract_num_csr (p_ctr_id1 NUMBER) IS
5987   SELECT  contract_number
5988   FROM OKC_K_HEADERS_B
5989   WHERE id = p_ctr_id1;
5990 
5991   l_cntrct_number          OKC_K_HEADERS_B.CONTRACT_NUMBER%TYPE;
5992   l_legal_entity_id          NUMBER;
5993 
5994 BEGIN
5995     --dbms_output.put_line('before start activity');
5996     x_return_status := OKL_API.G_RET_STS_SUCCESS;
5997     -- Call start_activity to create savepoint, check compatibility
5998     -- and initialize message list
5999     x_return_status := OKL_API.START_ACTIVITY (
6000                                l_api_name
6001                                ,p_init_msg_list
6002                                ,'_PVT'
6003                                ,x_return_status);
6004     -- Check if activity started successfully
6005     IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
6006        RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
6007     ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
6008        RAISE OKL_API.G_EXCEPTION_ERROR;
6009     END IF;
6010     l_ib_tbl := p_ib_tbl;
6011     --Bug# 6612475
6012     --1. Validate Split Request
6013     Validate_Split_Request
6014      (p_api_version               => p_api_version
6015      ,p_init_msg_list             => p_init_msg_list
6016      ,x_return_status             => x_return_status
6017      ,x_msg_count                 => x_msg_count
6018      ,x_msg_data                  => x_msg_data
6019      ,p_cle_id                    => p_cle_id
6020      ,p_split_into_individuals_yn => p_split_into_individuals_yn
6021      ,p_split_into_units          => p_split_into_units
6022      ,p_revision_date             => p_trx_date
6023      );
6024 
6025     IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
6026        RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
6027     ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
6028        RAISE OKL_API.G_EXCEPTION_ERROR;
6029     END IF;
6030 
6031     --Commenting this validation as it is redundant now
6032     --because of newly added Validate_Split_Request
6033     --1.Verify p_cle_id
6034     --x_return_status := verify_cle_id(p_cle_id => p_cle_id);
6035     --IF x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR THEN
6036         --RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
6037     --ELSIF x_return_status = OKL_API.G_RET_STS_ERROR THEN
6038         --RAISE OKL_API.G_EXCEPTION_ERROR;
6039     --END IF;
6040     --Bug# 6612475 End
6041 
6042     --Bug# 3783518: start
6043     -- Do not allow split asset for contracts with release assets
6044     OPEN l_chr_csr(p_cle_id => p_cle_id);
6045     FETCH l_chr_csr INTO l_chr_id;
6046     CLOSE l_chr_csr;
6047 
6048     -- Bug# 4542290 - smadhava - Added - Start
6049     -- Obtain the product parameter - Revenue Recognition method
6050     OKL_K_RATE_PARAMS_PVT.get_product(
6051             p_api_version       => p_api_version,
6052             p_init_msg_list     => p_init_msg_list,
6053             x_return_status     => x_return_status,
6054             x_msg_count         => x_msg_count,
6055             x_msg_data          => x_msg_data,
6056             p_khr_id            => l_chr_id,
6057             x_pdt_parameter_rec => l_pdt_params_rec);
6058 
6059     IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
6060        RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
6061     ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
6062        RAISE OKL_API.G_EXCEPTION_ERROR;
6063     END IF;
6064 
6065     -- Raise an error if the Revenue Recognition Method is 'Actual' or 'Estimated and Actual'
6066     IF ( l_pdt_params_rec.Revenue_Recognition_Method = G_RRB_ESTIMATED OR
6067          l_pdt_params_rec.Revenue_Recognition_Method = G_RRB_ACTUAL) THEN
6068       OPEN get_prod_param_values('REVENUE_RECOGNITION_METHOD',
6069                                  l_pdt_params_rec.Revenue_Recognition_Method);
6070         FETCH get_prod_param_values INTO l_rev_recog_meaning;
6071       CLOSE get_prod_param_values;
6072 
6073       OKL_API.set_message(p_app_name     => G_APP_NAME,
6074                           p_msg_name     => G_RRB_SPLIT_ASSET_NOT_ALLWD,
6075                           p_token1       => G_METHOD,
6076                           p_token1_value => l_rev_recog_meaning);
6077       RAISE OKL_API.G_EXCEPTION_ERROR;
6078     END IF;
6079     -- Bug# 4542290 - smadhava - Added - End
6080 
6081     l_rel_ast := '?';
6082     --check for release assets in a contract
6083     OPEN l_chk_rel_ast_csr (p_chr_id => l_chr_id);
6084     FETCH l_chk_rel_ast_csr INTO l_rel_ast;
6085     CLOSE l_chk_rel_ast_csr;
6086 
6087     IF l_rel_ast = '!' THEN
6088       OKL_API.set_message(p_app_name     => G_APP_NAME,
6089                           p_msg_name     => 'OKL_REL_ASSET_SPLIT_NOT_ALLWD');
6090       RAISE OKL_API.G_EXCEPTION_ERROR;
6091     END IF;
6092     --Bug# 3783518: end
6093 
6094     --Bug Fix # 2881114
6095     --check whether asset is linked to service contract
6096     l_lnk_to_srv := '?';
6097     OPEN lnk_to_srv_csr (p_cle_id => p_cle_id);
6098         FETCH lnk_to_srv_csr INTO l_lnk_to_srv;
6099         IF lnk_to_srv_csr%NOTFOUND THEN
6100             NULL;
6101         END IF;
6102     CLOSE lnk_to_srv_csr;
6103 
6104     IF l_lnk_to_srv = '!' THEN
6105         OKL_API.set_message(p_app_name     => G_APP_NAME,
6106                             p_msg_name     => G_ASSET_LINKED_TO_SERVICE);
6107         RAISE OKL_API.G_EXCEPTION_ERROR;
6108     END IF;
6109     --Bug Fix # 2881114 End
6110 
6111     --2.Set the status of the Contract Line on HOLD
6112     --study the contract status concurrent program
6113     --possibly call it from here.
6114     --3.create and save split asset transaction
6115     l_trxv_rec.tas_type   := 'ALI';
6116     l_trxv_rec.tsu_code   := 'ENTERED';
6117     ----------------------------------
6118     --Bug# 3156924
6119     --validate trx_date :
6120     validate_trx_date(p_api_version    => p_api_version,
6121                       p_init_msg_list  => p_init_msg_list,
6122                       x_return_status  => x_return_status,
6123                       x_msg_count      => x_msg_count,
6124                       x_msg_data       => x_msg_data,
6125                       p_cle_id         => p_cle_id,
6126 
6127                       p_trx_date       => p_trx_date);
6128     IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
6129        RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
6130     ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
6131        RAISE OKL_API.G_EXCEPTION_ERROR;
6132     END IF;
6133 
6134    --Bug# 5946411 :ER Added offlease pending transaction message
6135     Check_Offlease_Trans(p_api_version    => p_api_version,
6136                       p_init_msg_list  => p_init_msg_list,
6137                       x_return_status  => x_return_status,
6138                       x_msg_count      => x_msg_count,
6139                       x_msg_data       => x_msg_data,
6140                       p_cle_id         => p_cle_id
6141                       );
6142     IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
6143        RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
6144     ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
6145        RAISE OKL_API.G_EXCEPTION_ERROR;
6146     END IF;
6147    --Bug# 5946411 :ER end
6148     --l_trxv_rec.date_trans_occurred := sysdate;
6149     l_trxv_rec.date_trans_occurred := p_trx_date;
6150 
6151     --Added by dpsingh for LE Uptake
6152 
6153     l_legal_entity_id  := OKL_LEGAL_ENTITY_UTIL.get_khr_le_id(l_chr_id) ;
6154     IF  l_legal_entity_id IS NOT NULL THEN
6155        l_trxv_rec.legal_entity_id :=  l_legal_entity_id;
6156     ELSE
6157         -- get the contract number
6158        OPEN contract_num_csr(l_chr_id);
6159        FETCH contract_num_csr INTO l_cntrct_number;
6160        CLOSE contract_num_csr;
6161 	Okl_Api.set_message(p_app_name     => g_app_name,
6162                              p_msg_name     => 'OKL_LE_NOT_EXIST_CNTRCT',
6163 			     p_token1           =>  'CONTRACT_NUMBER',
6164 			     p_token1_value  =>  l_cntrct_number);
6165          RAISE OKL_API.G_EXCEPTION_ERROR;
6166     END IF;
6167     -------------------------------------
6168     --++++++++++++++++++++testing ty id only++++++++++++++++++++++
6169     x_return_status := get_try_id(p_try_name => G_TRY_NAME,
6170                                   x_try_id   => l_trxv_rec.try_id);
6171     IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
6172        RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
6173     ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
6174        RAISE OKL_API.G_EXCEPTION_ERROR;
6175     END IF;
6176     --++++++++++++++++++++testing ty id only++++++++++++++++++++++
6177     --Check if a 'ENTRED' unprocessed split transaction alreadt exists for this line
6178     --dbms_output.put_line('Before chk_split_trx cursor fetch');
6179     l_ast_line_rec := get_ast_line(p_cle_id,l_row_not_found);
6180     --dbms_output.put_line('After fetching asset line '||l_ast_line_rec.description);
6181     l_fa_exists := 'N';
6182     IF (l_row_not_found) THEN
6183        --Bug #2798006 : call create split transaction for Loans
6184        l_loan_yn := 'N';
6185        l_loan_yn := Check_If_Loan(P_Cle_Id        => p_cle_id,
6186                                   x_return_status => x_return_status);
6187 
6188        IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
6189            RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
6190        ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
6191            RAISE OKL_API.G_EXCEPTION_ERROR;
6192        END IF;
6193 
6194        IF l_loan_yn = 'N' THEN
6195            OKL_API.set_message(p_app_name     => G_APP_NAME,
6196                                p_msg_name     => G_SPLIT_ASSET_NOT_FOUND);
6197            RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
6198        ELSIF l_loan_yn = 'Y' THEN
6199            --open cursor to get asset information from OKL tables
6200            OPEN loan_ast_csr(PCleId => p_cle_id);
6201            FETCH loan_ast_csr INTO l_loan_ast_rec;
6202            IF loan_ast_csr%NOTFOUND THEN
6203                OKL_API.set_message(p_app_name     => G_APP_NAME,
6204                                    p_msg_name     => G_SPLIT_ASSET_NOT_FOUND);
6205                RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
6206            ELSE
6207                l_fa_exists := 'N';
6208            END IF;
6209         END IF;
6210         --Bug# 2798006 end.
6211     ELSE
6212         l_fa_exists := 'Y';
6213     END IF;
6214     -- avsingh : added on 10-Aug-2002 : To Prevent Single unit assets to split into
6215     -- individuals
6216     IF (l_ast_line_rec.current_units = 1 AND l_loan_yn = 'N') OR
6217        (l_loan_ast_rec.current_units = 1 AND l_loan_yn = 'Y') THEN
6218        IF NVL(p_split_into_individuals_yn,'N') = 'Y' OR NVL(p_split_into_units,0) > 0 THEN
6219 
6220          --Bug# 6336455: Display appropriate error message when
6221          -- splitting an off-lease asset
6222          IF (l_ast_line_rec.line_status IN ('TERMINATED','EXPIRED')) OR
6223             (l_loan_ast_rec.line_status IN ('TERMINATED','EXPIRED')) THEN
6224 
6225                   OKL_API.set_message(p_app_name     => G_APP_NAME,
6226                                       p_msg_name     => 'OKL_AM_SINGLE_UNIT_SPLIT');
6227                   RAISE OKL_API.G_EXCEPTION_ERROR;
6228 
6229          ELSE
6230                   OKL_API.set_message(p_app_name     => G_APP_NAME,
6231                                       p_msg_name     => G_SINGLE_UNIT_ASSET);
6232                   RAISE OKL_API.G_EXCEPTION_ERROR;
6233 
6234          END IF;
6235          --Bug# 6336455: end
6236        END IF;
6237     END IF;
6238 
6239 
6240     OPEN chk_split_trx(p_cle_id => l_ast_line_rec.id1);
6241         FETCH chk_split_trx INTO
6242                             l_tal_id,
6243                             l_split_into_ind_yn,
6244                             l_split_units,
6245                             --Bug# 3156924
6246                             l_trx_date,
6247                             l_tas_id;
6248         --dbms_output.put_line('After chk_split_trx cursor fetch');
6249         IF chk_split_trx%NOTFOUND THEN
6250             --create new transaction (header, line and detail)
6251             -- Now creating the new header record
6252             --dbms_output.put_line('After chk_split_trx cursor fetch - trx not found.');
6253             Create_trx_header(p_api_version    => p_api_version,
6254                               p_init_msg_list  => p_init_msg_list,
6255                               x_return_status  => x_return_status,
6256                               x_msg_count      => x_msg_count,
6257                               x_msg_data       => x_msg_data,
6258                               p_trxv_rec       => l_trxv_rec,
6259                               x_trxv_rec       => x_trxv_rec);
6260             --dbms_output.put_line('After creating trx header'||x_return_status);
6261            IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
6262                RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
6263            ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
6264                RAISE OKL_API.G_EXCEPTION_ERROR;
6265            END IF;
6266 
6267         --Prepare txl record for insert into OKL_TXL_ASSETS_V
6268 
6269         IF l_fa_exists = 'Y' THEN
6270             l_txlv_rec.tas_id       := x_trxv_rec.id;
6271             l_txlv_rec.kle_id       := l_ast_line_rec.id1;
6272             l_txlv_rec.dnz_khr_id   := l_ast_line_rec.dnz_chr_id;
6273             l_txlv_rec.asset_number := l_ast_line_rec.name;
6274             l_txlv_rec.description  := l_ast_line_rec.description;
6275             x_return_status := Get_Fa_Location(l_ast_line_rec.asset_id,
6276                                                l_ast_line_rec.corporate_book,
6277                                                l_fa_location_id);
6278             --dbms_output.put_line('After fetching fa location id'||x_return_status);
6279             IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
6280                 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
6281             ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
6282                 RAISE OKL_API.G_EXCEPTION_ERROR;
6283             END IF;
6284             l_txlv_rec.fa_location_id := l_fa_location_id;
6285             l_txlv_rec.original_cost := l_ast_line_rec.original_cost;
6286             l_txlv_rec.current_units := l_ast_line_rec.current_units;
6287             IF l_ast_line_rec.new_used = 'NEW' THEN
6288                 l_txlv_rec.used_asset_yn := 'Y';
6289             ELSIF l_ast_line_rec.new_used = 'USED' THEN
6290                 l_txlv_rec.used_asset_yn := 'N';
6291             END IF;
6292 
6293             l_txlv_rec.tag_number            := l_ast_line_rec.tag_number;
6294             l_txlv_rec.model_number          := l_ast_line_rec.model_number;
6295             l_txlv_rec.corporate_book        := l_ast_line_rec.corporate_book;
6296             l_txlv_rec.in_service_date       := l_ast_line_rec.in_service_date;
6297             l_txlv_rec.org_id                := l_ast_line_rec.org_id;
6298             l_txlv_rec.depreciation_id       := l_ast_line_rec.depreciation_category;
6299             l_txlv_rec.life_in_months        := l_ast_line_rec.life_in_months;
6300             l_txlv_rec.depreciation_cost     := l_ast_line_rec.cost;
6301             l_txlv_rec.deprn_method          := l_ast_line_rec.deprn_method_code;
6302             l_txlv_rec.deprn_rate            := l_ast_line_rec.basic_rate;
6303             l_txlv_rec.salvage_value         := l_ast_line_rec.salvage_value;
6304             l_txlv_rec.percent_salvage_value := l_ast_line_rec.percent_salvage_value;
6305 
6306             --------------------------------------
6307             --Bug# 2981308 : fetch asset key ccid
6308             --------------------------------------
6309             OPEN l_fab_csr(p_asset_id => l_ast_line_rec.asset_id);
6310             FETCH l_fab_csr INTO l_asset_key_id;
6311             IF l_fab_csr%NOTFOUND THEN
6312                 NULL;
6313             END IF;
6314             CLOSE l_fab_csr;
6315 
6316             l_txlv_rec.asset_key_id         := l_asset_key_id;
6317             -------------------------------------
6318             --bug# 2981308 : fetch asset key ccid
6319             ------------------------------------
6320 
6321         ELSIF l_fa_exists = 'N' THEN
6322             l_txlv_rec.tas_id        := x_trxv_rec.id;
6323             l_txlv_rec.kle_id        := l_loan_ast_rec.kle_id;
6324             l_txlv_rec.dnz_khr_id    := l_loan_ast_rec.dnz_chr_id;
6325             l_txlv_rec.asset_number  := l_loan_ast_rec.asset_number;
6326             l_txlv_rec.description   := l_loan_ast_rec.description;
6327             l_txlv_rec.original_cost := l_loan_ast_rec.original_cost;
6328             l_txlv_rec.current_units := l_loan_ast_rec.current_units;
6329             l_txlv_rec.used_asset_yn := 'Y';
6330             l_txlv_rec.depreciation_cost  := l_loan_ast_rec.cost;
6331         END IF;
6332         l_txlv_rec.SPLIT_INTO_SINGLES_FLAG := p_split_into_individuals_yn;
6333         l_txlv_rec.SPLIT_INTO_UNITS        := p_split_into_units;
6334 
6335 
6336         IF (l_txlv_rec.tal_type = OKC_API.G_MISS_CHAR OR
6337             l_txlv_rec.tal_type IS NULL) THEN
6338             l_txlv_rec.tal_type       := 'ALI';
6339         END IF;
6340         IF (l_txlv_rec.line_number = OKC_API.G_MISS_NUM OR
6341             l_txlv_rec.line_number IS NULL) THEN
6342             l_txlv_rec.line_number       := 1;
6343         ELSE
6344             l_txlv_rec.line_number       := l_txlv_rec.line_number + 1;
6345         END IF;
6346 
6347         --Bug# : Multi Currency
6348         OPEN curr_conv_csr (PCleId => p_cle_id);
6349         FETCH  curr_conv_csr INTO curr_conv_rec;
6350         IF curr_conv_csr%NOTFOUND THEN
6351             NULL;
6352         END IF;
6353         CLOSE curr_conv_csr;
6354 
6355         l_txlv_rec.currency_code            := curr_conv_rec.currency_code;
6356         l_txlv_rec.currency_conversion_type := curr_conv_rec.currency_conversion_type;
6357         l_txlv_rec.currency_conversion_rate := curr_conv_rec.currency_conversion_rate;
6358         l_txlv_rec.currency_conversion_date := curr_conv_rec.currency_conversion_date;
6359 
6360         --create asset line transaction
6361         OKL_TXL_ASSETS_PUB.create_txl_asset_def(
6362                            p_api_version    => p_api_version,
6363                            p_init_msg_list  => p_init_msg_list,
6364                            x_return_status  => x_return_status,
6365                            x_msg_count      => x_msg_count,
6366                            x_msg_data       => x_msg_data,
6367                            p_tlpv_rec       => l_txlv_rec,
6368                            x_tlpv_rec       => x_txlv_rec);
6369                 --dbms_output.put_line('After creating transaction line'||x_return_status);
6370         IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
6371            RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
6372         ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
6373            RAISE OKL_API.G_EXCEPTION_ERROR;
6374         END IF;
6375 
6376         --call to create record for OKL_TXD_ASSETS_V
6377         --dbms_output.put_line('when fresh trx '||l_ast_line_rec.description);
6378         IF NVL(p_split_into_individuals_yn,'N') = 'X' THEN
6379            --split asset component transaction details will not be created
6380             NULL;
6381         ELSE
6382             Create_trx_details(p_api_version    => p_api_version,
6383                                p_init_msg_list  => p_init_msg_list,
6384                                x_return_status  => x_return_status,
6385                                x_msg_count      => x_msg_count,
6386                                x_msg_data       => x_msg_data,
6387                                p_ast_line_rec   => l_ast_line_rec,
6388                                p_txlv_rec       => x_txlv_rec,
6389                                x_txdv_tbl       => x_txdv_tbl);
6390 
6391             --dbms_output.put_line('After creating trx details'||x_return_status);
6392             IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
6393                RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
6394             ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
6395                RAISE OKL_API.G_EXCEPTION_ERROR;
6396             END IF;
6397         END IF;
6398 
6399         --Bug #2723498 : 11.5.9 enahncement split asset by serial numbers
6400         --call to create serial number transaction
6401         create_srl_num_trx(p_api_version               => p_api_version,
6402                            p_init_msg_list             => p_init_msg_list,
6403                            x_return_status             => x_return_status,
6404                            x_msg_count                 => x_msg_count,
6405                            x_msg_data                  => x_msg_data,
6406                            p_cle_id                    => p_cle_id,
6407                            p_split_into_individuals_yn => p_split_into_individuals_yn,
6408                            p_split_into_units          => p_split_into_units,
6409                            p_ib_tbl                    => l_ib_tbl,
6410                            p_tas_id                    => x_txlv_rec.tas_id,
6411                            p_tal_id                    => x_txlv_rec.id,
6412                            p_asd_id                    => NULL);
6413         IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
6414            RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
6415         ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
6416            RAISE OKL_API.G_EXCEPTION_ERROR;
6417         END IF;
6418         --Bug #2723498 : 11.5.9 enahncement split asset by serial numbers end
6419 
6420     ELSE --chk_split_trx%FOUND
6421        -- If yes then chk if split parameters are same
6422        --dbms_output.put_line('transaction found');
6423        IF NVL(p_split_into_individuals_yn,'N') <> 'X' AND  NVL(l_split_into_ind_yn,'N') = 'X' THEN
6424 
6425           --split asset component transactions exist
6426           OKL_API.set_message(p_app_name     => G_APP_NAME,
6427                               p_msg_name     => G_SPLIT_AST_COMP_TRX);
6428           RAISE OKL_API.G_EXCEPTION_ERROR;
6429 
6430        ELSIF NVL(p_split_into_individuals_yn,'N') = 'X' AND  NVL(l_split_into_ind_yn,'N') <> 'X' THEN
6431 
6432            --split asset transactions exist
6433           OKL_API.set_message(p_app_name     => G_APP_NAME,
6434                               p_msg_name     => G_SPLIT_ASSET_TRX);
6435           RAISE OKL_API.G_EXCEPTION_ERROR;
6436 
6437        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)
6438               --Bug# 3156924 :
6439               AND TRUNC(p_trx_date) = TRUNC(l_trx_date)) THEN
6440            -- If yes then do nothing
6441            NULL;
6442            --dbms_output.put_line('no change transaction found - doing nothing');
6443        ELSIF (NVL(p_split_into_individuals_yn,'N') <> 'X') AND
6444              (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)
6445               --Bug# 3156924 :
6446               OR TRUNC(p_trx_date) <> TRUNC(l_trx_date)) THEN
6447        -- else
6448            -------------------------------------------------
6449            --Bug# 3156924
6450            ------------------------------------------------
6451            --update transaction header for transaction date
6452            l_trxv_rec.id := l_tas_id;
6453            l_trxv_rec.date_trans_occurred := p_trx_date;
6454            OKL_TRX_ASSETS_PUB.update_trx_ass_h_def(
6455                           p_api_version   => p_api_version,
6456                           p_init_msg_list => p_init_msg_list,
6457                           x_return_status => x_return_status,
6458                           x_msg_count     => x_msg_count,
6459                           x_msg_data      => x_msg_data,
6460                           p_thpv_rec      => l_trxv_rec,
6461                           x_thpv_rec      => x_trxv_rec);
6462 
6463            --dbms_output.put_line('after updating contract trx status to processed '||x_return_status);
6464            IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
6465                RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
6466            ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
6467                RAISE OKL_API.G_EXCEPTION_ERROR;
6468            END IF;
6469            -------------------------------------------------
6470            --Bug# 3156924
6471            ------------------------------------------------
6472 
6473            --update transaction lines for split assets
6474            l_txlv_rec.id := l_tal_id;
6475            --l_txlv_rec.depreciate_yn := p_split_into_individuals_yn;
6476            --l_txlv_rec.units_retired := p_split_into_units;
6477            l_txlv_rec.SPLIT_INTO_SINGLES_FLAG := p_split_into_individuals_yn;
6478            l_txlv_rec.SPLIT_INTO_UNITS        := p_split_into_units;
6479            OKL_TXL_ASSETS_PUB.update_txl_asset_def(
6480                            p_api_version    => p_api_version,
6481                            p_init_msg_list  => p_init_msg_list,
6482                            x_return_status  => x_return_status,
6483                            x_msg_count      => x_msg_count,
6484                            x_msg_data       => x_msg_data,
6485                            p_tlpv_rec       => l_txlv_rec,
6486                            x_tlpv_rec       => x_txlv_rec);
6487            IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
6488                RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
6489            ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
6490                RAISE OKL_API.G_EXCEPTION_ERROR;
6491            END IF;
6492 
6493            --fetch transaction details
6494            l_txdv_tbl := get_trx_details(p_tal_id         => x_txlv_rec.id,
6495                                          x_no_data_found  => l_no_txd_data_found);
6496            IF l_no_txd_data_found THEN
6497                NULL;
6498                --dbms_output.put_line('No Transaction Details Found');
6499                        --call to create record for OKL_TXD_ASSETS_V
6500                --dbms_output.put_line('when txd assets not found '||l_ast_line_rec.description);
6501                Create_trx_details(p_api_version    => p_api_version,
6502                            p_init_msg_list  => p_init_msg_list,
6503                            x_return_status  => x_return_status,
6504                            x_msg_count      => x_msg_count,
6505                            x_msg_data       => x_msg_data,
6506                            p_ast_line_rec   => l_ast_line_rec,
6507                            p_txlv_rec       => x_txlv_rec,
6508                            x_txdv_tbl       => x_txdv_tbl);
6509 
6510                IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
6511                     RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
6512                ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
6513                     RAISE OKL_API.G_EXCEPTION_ERROR;
6514                END IF;
6515 
6516            ELSE
6517                -- delete transaction details and approprately create new transaction details
6518                OKL_TXD_ASSETS_PUB.delete_txd_asset_def(p_api_version   => p_api_version,
6519                                                        p_init_msg_list  => p_init_msg_list,
6520                                                        x_return_status  => x_return_status,
6521                                                        x_msg_count      => x_msg_count,
6522                                                        x_msg_data       => x_msg_data,
6523                                                        p_adpv_tbl       => l_txdv_tbl);
6524 
6525                IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
6526                    RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
6527                ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
6528                    RAISE OKL_API.G_EXCEPTION_ERROR;
6529                END IF;
6530 --Bug fix# 2744213 : positioning of end if
6531 --            End If;
6532 
6533             -- create new transaction details
6534             --call to create record for OKL_TXD_ASSETS_V
6535             --dbms_output.put_line('after deleting txd assets '||l_ast_line_rec.description);
6536             Create_trx_details(p_api_version    => p_api_version,
6537                                p_init_msg_list  => p_init_msg_list,
6538                                x_return_status  => x_return_status,
6539                                x_msg_count      => x_msg_count,
6540                                x_msg_data       => x_msg_data,
6541                                p_ast_line_rec   => l_ast_line_rec,
6542                                p_txlv_rec       => x_txlv_rec,
6543                                x_txdv_tbl       => x_txdv_tbl);
6544 
6545            IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
6546                RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
6547            ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
6548                RAISE OKL_API.G_EXCEPTION_ERROR;
6549            END IF;
6550         END IF;
6551 
6552         --Bug #2723498 11.5.9 enhancement - Splitting assets by serial numbers
6553         --check if serial number data exists
6554 
6555         l_srl_exists := '?';
6556         OPEN srl_exist_chk(x_txlv_rec.id);
6557         FETCH srl_exist_chk INTO l_srl_exists;
6558         IF srl_exist_chk%NOTFOUND THEN
6559             NULL;
6560         END IF;
6561         CLOSE srl_exist_chk;
6562 
6563         IF l_srl_exists = '!' THEN
6564 
6565             l_iipv_count := 0;
6566             OPEN get_srl_csr(x_txlv_rec.id);
6567             LOOP
6568                 FETCH  get_srl_csr INTO l_iipv_id;
6569                 EXIT WHEN get_srl_csr%NOTFOUND;
6570                 l_iipv_count := l_iipv_count + 1;
6571                 l_iipv_tbl(l_iipv_count).id := l_iipv_id;
6572             END LOOP;
6573             CLOSE get_srl_csr;
6574 
6575             IF l_iipv_tbl.COUNT > 0 THEN
6576                 --delete the old records
6577                 okl_txl_itm_insts_pub.delete_txl_itm_insts(
6578                    p_api_version   => p_api_version,
6579                    p_init_msg_list => p_init_msg_list,
6580                    x_return_status => x_return_status,
6581                    x_msg_count     => x_msg_count,
6582                    x_msg_data      => x_msg_data,
6583                    p_iipv_tbl      => l_iipv_tbl);
6584 
6585                IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
6586                    RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
6587                ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
6588                    RAISE OKL_API.G_EXCEPTION_ERROR;
6589                END IF;
6590             END IF;
6591 
6592             --create new srl numbers if required
6593             create_srl_num_trx(p_api_version           => p_api_version,
6594                            p_init_msg_list             => p_init_msg_list,
6595                            x_return_status             => x_return_status,
6596                            x_msg_count                 => x_msg_count,
6597                            x_msg_data                  => x_msg_data,
6598                            p_cle_id                    => p_cle_id,
6599                            p_split_into_individuals_yn => p_split_into_individuals_yn,
6600                            p_split_into_units          => p_split_into_units,
6601                            p_ib_tbl                    => l_ib_tbl,
6602                            p_tas_id                    => x_txlv_rec.tas_id,
6603                            p_tal_id                    => x_txlv_rec.id,
6604                            p_asd_id                    => NULL);
6605 
6606             IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
6607                 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
6608             ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
6609                RAISE OKL_API.G_EXCEPTION_ERROR;
6610             END IF;
6611 
6612         ELSIF l_srl_exists = '?' THEN
6613              --create new srl numbers if required
6614             create_srl_num_trx(p_api_version               => p_api_version,
6615                                p_init_msg_list             => p_init_msg_list,
6616                                x_return_status             => x_return_status,
6617                                x_msg_count                 => x_msg_count,
6618                                x_msg_data                  => x_msg_data,
6619                                p_cle_id                    => p_cle_id,
6620                                p_split_into_individuals_yn => p_split_into_individuals_yn,
6621                                p_split_into_units          => p_split_into_units,
6622                                p_ib_tbl                    => l_ib_tbl,
6623                                p_tas_id                    => x_txlv_rec.tas_id,
6624                                p_tal_id                    => x_txlv_rec.id,
6625                                p_asd_id                    => NULL);
6626 
6627             IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
6628                 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
6629             ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
6630                RAISE OKL_API.G_EXCEPTION_ERROR;
6631             END IF;
6632         END IF; -- srl number exists
6633         --Bug #2723498 11.5.9 enhancement - Splitting assets by serial numbers
6634      --Bug fix# 2744213 : positioning of end if
6635      END IF; -- chenges in transaction
6636     END IF;
6637     OKL_API.END_ACTIVITY (x_msg_count,
6638                          x_msg_data );
6639 
6640     EXCEPTION
6641     WHEN OKL_API.G_EXCEPTION_ERROR THEN
6642     x_return_status := OKL_API.HANDLE_EXCEPTIONS(
6643                                l_api_name,
6644                                G_PKG_NAME,
6645                                'OKL_API.G_RET_STS_ERROR',
6646                                x_msg_count,
6647                                x_msg_data,
6648                                '_PVT');
6649     WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
6650     x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
6651                               l_api_name,
6652                               G_PKG_NAME,
6653                               'OKL_API.G_RET_STS_UNEXP_ERROR',
6654                               x_msg_count,
6655                               x_msg_data,
6656                               '_PVT');
6657     WHEN OTHERS THEN
6658     x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
6659                               l_api_name,
6660                               G_PKG_NAME,
6661                               'OTHERS',
6662                               x_msg_count,
6663                               x_msg_data,
6664                               '_PVT');
6665 
6666 END Create_Split_Transaction;
6667 ------------------------------------------------------------------------------
6668 --Bug# 3156924
6669 --API Name    : Create_Split_Transaction
6670 --Description : Process API to create Split Aseet Transaction Records in
6671 --              OKL_TXL_ASSETS_V and OKL_TXD_ASSETS_V
6672 --Note        : Original split asset trx creation callo has been overloaded
6673 --              to include p_trx_date(trx_date) as parameter. This old
6674 --              signature preserved for backward compatability. It will
6675 --              create split asset transaction on SYSDATE
6676 --History     :
6677 --              30-Jan-2004    avsingh  Creation
6678 --End of Comments
6679 ------------------------------------------------------------------------------
6680 PROCEDURE Create_Split_Transaction(p_api_version               IN  NUMBER,
6681                                    p_init_msg_list             IN  VARCHAR2,
6682                                    x_return_status             OUT NOCOPY VARCHAR2,
6683                                    x_msg_count                 OUT NOCOPY NUMBER,
6684                                    x_msg_data                  OUT NOCOPY VARCHAR2,
6685                                    p_cle_id                    IN  NUMBER,
6686                                    p_split_into_individuals_yn IN  VARCHAR2,
6687                                    p_split_into_units          IN  NUMBER,
6688                                    p_ib_tbl                    IN  ib_tbl_type,
6689                                    x_txdv_tbl                  OUT NOCOPY txdv_tbl_type,
6690                                    x_txlv_rec                  OUT NOCOPY txlv_rec_type,
6691                                    x_trxv_rec                  OUT NOCOPY trxv_rec_type) IS
6692 
6693 l_return_status        VARCHAR2(1)  DEFAULT OKL_API.G_RET_STS_SUCCESS;
6694 l_api_name             CONSTANT VARCHAR2(30) := 'CREATE_SPLIT_TRANSACTION';
6695 l_api_version          CONSTANT NUMBER := 1.0;
6696 
6697 l_trx_date             DATE := SYSDATE;
6698 
6699 BEGIN
6700     x_return_status := OKL_API.G_RET_STS_SUCCESS;
6701     -- Call start_activity to create savepoint, check compatibility
6702     -- and initialize message list
6703     x_return_status := OKL_API.START_ACTIVITY (
6704                                l_api_name
6705                                ,p_init_msg_list
6706                                ,'_PVT'
6707                                ,x_return_status);
6708     -- Check if activity started successfully
6709     IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
6710        RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
6711     ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
6712        RAISE OKL_API.G_EXCEPTION_ERROR;
6713     END IF;
6714 
6715     --call the overloded procedure :
6716     Create_Split_Transaction(p_api_version               => p_api_version,
6717                              p_init_msg_list             => p_init_msg_list,
6718                              x_return_status             => x_return_status,
6719                              x_msg_count                 => x_msg_count,
6720                              x_msg_data                  => x_msg_data,
6721                              p_cle_id                    => p_cle_id,
6722                              p_split_into_individuals_yn => p_split_into_individuals_yn,
6723                              p_split_into_units          => p_split_into_units,
6724                              p_ib_tbl                    => p_ib_tbl,
6725                              --Bug# 3156924
6726                              p_trx_date                  => l_trx_date,
6727                              x_txdv_tbl                  => x_txdv_tbl,
6728                              x_txlv_rec                  => x_txlv_rec,
6729                              x_trxv_rec                  => x_trxv_rec);
6730 
6731     IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
6732        RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
6733     ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
6734        RAISE OKL_API.G_EXCEPTION_ERROR;
6735     END IF;
6736     OKL_API.END_ACTIVITY (x_msg_count,
6737                          x_msg_data );
6738 
6739     EXCEPTION
6740     WHEN OKL_API.G_EXCEPTION_ERROR THEN
6741     x_return_status := OKL_API.HANDLE_EXCEPTIONS(
6742                                l_api_name,
6743                                G_PKG_NAME,
6744                                'OKL_API.G_RET_STS_ERROR',
6745                                x_msg_count,
6746                                x_msg_data,
6747                                '_PVT');
6748     WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
6749     x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
6750                               l_api_name,
6751                               G_PKG_NAME,
6752                               'OKL_API.G_RET_STS_UNEXP_ERROR',
6753                               x_msg_count,
6754                               x_msg_data,
6755                               '_PVT');
6756     WHEN OTHERS THEN
6757     x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
6758                               l_api_name,
6759                               G_PKG_NAME,
6760                               'OTHERS',
6761                               x_msg_count,
6762                               x_msg_data,
6763                               '_PVT');
6764 
6765 END Create_Split_Transaction;
6766 -------------------------------------------------------------------------------------
6767 --Bug# 3156924
6768 --API Name    : Create_Split_Transaction
6769 --Description : Process API to create Split Aseet Transaction Records in
6770 --              OKL_TXL_ASSETS_V and OKL_TXD_ASSETS_V
6771 --Note        : New signature added to accomodate p_trx_date being passed. This is
6772 --              the one called from the UI. This will create transactions in OKL
6773 --              _TXL_ITM_INSTS if the asset is serialized ad being split by units
6774 --             UI will mark the selected records as selected_for_split_flag = 'Y'
6775 --             for all the assets being split out
6776 --History     :
6777 --              30-Jan-2004    avsingh  Creation
6778 --End of Comments
6779 ------------------------------------------------------------------------------
6780 PROCEDURE Create_Split_Transaction(p_api_version   IN  NUMBER,
6781                                    p_init_msg_list IN  VARCHAR2,
6782                                    x_return_status OUT NOCOPY VARCHAR2,
6783                                    x_msg_count     OUT NOCOPY NUMBER,
6784                                    x_msg_data      OUT NOCOPY VARCHAR2,
6785                                    p_cle_id        IN  NUMBER,
6786                                    p_split_into_individuals_yn IN VARCHAR2,
6787                                    p_split_into_units IN NUMBER,
6788                                    p_trx_date  IN  DATE,
6789                                    x_txdv_tbl  OUT NOCOPY txdv_tbl_type,
6790                                    x_txlv_rec  OUT NOCOPY txlv_rec_type,
6791                                    x_trxv_rec  OUT NOCOPY trxv_rec_type) IS
6792 
6793 l_return_status        VARCHAR2(1)  DEFAULT OKL_API.G_RET_STS_SUCCESS;
6794 l_api_name             CONSTANT VARCHAR2(30) := 'CREATE_SPLIT_TRANSACTION';
6795 l_api_version          CONSTANT NUMBER := 1.0;
6796 l_ib_tbl               ib_tbl_type;
6797 
6798     /*
6799     -- mvasudev, 08/23/2004
6800     -- Added PROCEDURE to enable Business Event
6801     */
6802         PROCEDURE raise_business_event(
6803            x_return_status OUT NOCOPY VARCHAR2
6804     )
6805         IS
6806        CURSOR l_okl_cle_chr_csr IS
6807        SELECT dnz_chr_id
6808        FROM   okc_k_lines_b
6809        WHERE  id = p_cle_id;
6810 
6811       l_parameter_list           wf_parameter_list_t;
6812         BEGIN
6813 
6814        FOR l_okl_cle_chr_rec IN l_okl_cle_chr_csr
6815            LOOP
6816 
6817                  wf_event.AddParameterToList(G_WF_ITM_CONTRACT_ID,l_okl_cle_chr_rec.dnz_chr_id,l_parameter_list);
6818                  wf_event.AddParameterToList(G_WF_ITM_ASSET_ID,p_cle_id,l_parameter_list);
6819                  wf_event.AddParameterToList(G_WF_ITM_TRANS_DATE,fnd_date.date_to_canonical(p_trx_date),l_parameter_list);
6820 
6821          OKL_WF_PVT.raise_event (p_api_version    => p_api_version,
6822                                  p_init_msg_list  => p_init_msg_list,
6823                                                                  x_return_status  => x_return_status,
6824                                                                  x_msg_count      => x_msg_count,
6825                                                                  x_msg_data       => x_msg_data,
6826                                                                  p_event_name     => G_WF_EVT_KHR_SPLIT_ASSET_REQ,
6827                                                                  p_parameters     => l_parameter_list);
6828 
6829           END LOOP;
6830 
6831      EXCEPTION
6832      WHEN OTHERS THEN
6833        x_return_status := OKL_API.G_RET_STS_UNEXP_ERROR;
6834        RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
6835      END raise_business_event;
6836 
6837     /*
6838     -- mvasudev, 08/23/2004
6839     -- END, PROCEDURE to enable Business Event
6840     */
6841 
6842 BEGIN
6843     x_return_status := OKL_API.G_RET_STS_SUCCESS;
6844     -- Call start_activity to create savepoint, check compatibility
6845     -- and initialize message list
6846     x_return_status := OKL_API.START_ACTIVITY (
6847                                l_api_name
6848                                ,p_init_msg_list
6849                                ,'_PVT'
6850                                ,x_return_status);
6851     -- Check if activity started successfully
6852     IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
6853        RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
6854     ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
6855        RAISE OKL_API.G_EXCEPTION_ERROR;
6856     END IF;
6857 
6858     --call the overloded procedure :
6859     Create_Split_Transaction(p_api_version               => p_api_version,
6860                              p_init_msg_list             => p_init_msg_list,
6861                              x_return_status             => x_return_status,
6862                              x_msg_count                 => x_msg_count,
6863                              x_msg_data                  => x_msg_data,
6864                              p_cle_id                    => p_cle_id,
6865                              p_split_into_individuals_yn => p_split_into_individuals_yn,
6866                              p_split_into_units          => p_split_into_units,
6867                              p_ib_tbl                    => l_ib_tbl,
6868                              p_trx_date                  => p_trx_date,
6869                              x_txdv_tbl                  => x_txdv_tbl,
6870                              x_txlv_rec                  => x_txlv_rec,
6871                              x_trxv_rec                  => x_trxv_rec);
6872 
6873 
6874     IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
6875        RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
6876     ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
6877        RAISE OKL_API.G_EXCEPTION_ERROR;
6878     END IF;
6879 
6880        /*
6881        -- mvasudev, 08/23/2004
6882        -- Code change to enable Business Event
6883        */
6884         raise_business_event(x_return_status => x_return_status);
6885         IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
6886            RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
6887         ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
6888            RAISE OKL_API.G_EXCEPTION_ERROR;
6889         END IF;
6890 
6891        /*
6892        -- mvasudev, 08/23/2004
6893        -- END, Code change to enable Business Event
6894    */
6895 
6896     OKL_API.END_ACTIVITY (x_msg_count,
6897                          x_msg_data );
6898 
6899     EXCEPTION
6900     WHEN OKL_API.G_EXCEPTION_ERROR THEN
6901     x_return_status := OKL_API.HANDLE_EXCEPTIONS(
6902                                l_api_name,
6903                                G_PKG_NAME,
6904                                'OKL_API.G_RET_STS_ERROR',
6905                                x_msg_count,
6906                                x_msg_data,
6907                                '_PVT');
6908     WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
6909     x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
6910                               l_api_name,
6911                               G_PKG_NAME,
6912                               'OKL_API.G_RET_STS_UNEXP_ERROR',
6913                               x_msg_count,
6914                               x_msg_data,
6915                               '_PVT');
6916     WHEN OTHERS THEN
6917     x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
6918                               l_api_name,
6919                               G_PKG_NAME,
6920                               'OTHERS',
6921                               x_msg_count,
6922                               x_msg_data,
6923                               '_PVT');
6924 
6925 END Create_Split_Transaction;
6926 ---------------
6927 --Bug# 3156924
6928 ---------------
6929 --Bug #2723498 : 11.5.9 Split by serial numbers enhancement
6930 --------------------------------------------------------------------------------
6931 --Start of Comments
6932 --API Name    : Create_Split_Transaction
6933 --Description : Process API to create Split Aseet Transaction Records in
6934 --              OKL_TXL_ASSETS_V and OKL_TXD_ASSETS_V
6935 --              1. Take the line details to be split
6936 --              2. Set the status of the contract as inactive
6937 --              3. Create and save source record into okl_trx_assets_v
6938 --              4. Create and save target record into okl_txd_assets_v
6939 --Note        : old signature kept for backward compatability. This will be the
6940 --              the one called from the UI. This will create transactions in OKL
6941 --              _TXL_ITM_INSTS if the asset is serialized ad being split by units
6942 --             UI will mark the selected records as selected_for_split_flag = 'Y'
6943 --             for all the assets being split out
6944 --History     :
6945 --              10-OCT-2001    avsingh  Creation
6946 --End of Comments
6947 ------------------------------------------------------------------------------
6948 PROCEDURE Create_Split_Transaction(p_api_version   IN  NUMBER,
6949                                    p_init_msg_list IN  VARCHAR2,
6950                                    x_return_status OUT NOCOPY VARCHAR2,
6951                                    x_msg_count     OUT NOCOPY NUMBER,
6952                                    x_msg_data      OUT NOCOPY VARCHAR2,
6953                                    p_cle_id        IN  NUMBER,
6954                                    p_split_into_individuals_yn IN VARCHAR2,
6955                                    p_split_into_units IN NUMBER,
6956                                    x_txdv_tbl  OUT NOCOPY txdv_tbl_type,
6957                                    x_txlv_rec  OUT NOCOPY txlv_rec_type,
6958                                    x_trxv_rec  OUT NOCOPY trxv_rec_type) IS
6959 
6960 l_return_status        VARCHAR2(1)  DEFAULT OKL_API.G_RET_STS_SUCCESS;
6961 l_api_name             CONSTANT VARCHAR2(30) := 'CREATE_SPLIT_TRANSACTION';
6962 l_api_version          CONSTANT NUMBER := 1.0;
6963 l_ib_tbl               ib_tbl_type;
6964 BEGIN
6965     x_return_status := OKL_API.G_RET_STS_SUCCESS;
6966     -- Call start_activity to create savepoint, check compatibility
6967     -- and initialize message list
6968     x_return_status := OKL_API.START_ACTIVITY (
6969                                l_api_name
6970                                ,p_init_msg_list
6971                                ,'_PVT'
6972                                ,x_return_status);
6973     -- Check if activity started successfully
6974     IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
6975        RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
6976     ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
6977        RAISE OKL_API.G_EXCEPTION_ERROR;
6978     END IF;
6979 
6980     --call the overloded procedure :
6981     Create_Split_Transaction(p_api_version               => p_api_version,
6982                              p_init_msg_list             => p_init_msg_list,
6983                              x_return_status             => x_return_status,
6984                              x_msg_count                 => x_msg_count,
6985                              x_msg_data                  => x_msg_data,
6986                              p_cle_id                    => p_cle_id,
6987                              p_split_into_individuals_yn => p_split_into_individuals_yn,
6988                              p_split_into_units          => p_split_into_units,
6989                              p_ib_tbl                    => l_ib_tbl,
6990                              x_txdv_tbl                  => x_txdv_tbl,
6991                              x_txlv_rec                  => x_txlv_rec,
6992                              x_trxv_rec                  => x_trxv_rec);
6993 
6994     IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
6995        RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
6996     ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
6997        RAISE OKL_API.G_EXCEPTION_ERROR;
6998     END IF;
6999     OKL_API.END_ACTIVITY (x_msg_count,
7000                          x_msg_data );
7001 
7002     EXCEPTION
7003     WHEN OKL_API.G_EXCEPTION_ERROR THEN
7004     x_return_status := OKL_API.HANDLE_EXCEPTIONS(
7005                                l_api_name,
7006                                G_PKG_NAME,
7007                                'OKL_API.G_RET_STS_ERROR',
7008                                x_msg_count,
7009                                x_msg_data,
7010                                '_PVT');
7011     WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
7012     x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
7013                               l_api_name,
7014                               G_PKG_NAME,
7015                               'OKL_API.G_RET_STS_UNEXP_ERROR',
7016                               x_msg_count,
7017                               x_msg_data,
7018                               '_PVT');
7019     WHEN OTHERS THEN
7020     x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
7021                               l_api_name,
7022                               G_PKG_NAME,
7023                               'OTHERS',
7024                               x_msg_count,
7025                               x_msg_data,
7026                               '_PVT');
7027 
7028 END Create_Split_Transaction;
7029 --------------------------------------------------------------------------------
7030 --Start of Comments
7031 --Procedure Name  :  Update Split transaction
7032 --Description     :  Updates the split asset number and description
7033 --                   on transaction details table
7034 --History         :
7035 --                   08-Apr-2001  ashish.singh Created
7036 --End of Comments
7037 --------------------------------------------------------------------------------
7038 PROCEDURE Update_Split_Transaction(p_api_version   IN  NUMBER,
7039                                    p_init_msg_list IN  VARCHAR2,
7040                                    x_return_status OUT NOCOPY VARCHAR2,
7041                                    x_msg_count     OUT NOCOPY NUMBER,
7042                                    x_msg_data      OUT NOCOPY VARCHAR2,
7043                                    p_cle_id        IN  NUMBER,
7044                                    p_txdv_tbl      IN  txdv_tbl_type,
7045                                    x_txdv_tbl      OUT NOCOPY txdv_tbl_type) IS
7046 
7047  l_return_status        VARCHAR2(1)  DEFAULT OKL_API.G_RET_STS_SUCCESS;
7048  l_api_name             CONSTANT VARCHAR2(30) := 'UPDATE_SPLIT_TRX';
7049  l_api_version          CONSTANT NUMBER := 1.0;
7050 
7051   CURSOR fa_line_csr(p_cle_id IN NUMBER) IS
7052   SELECT cle.id
7053   FROM   OKC_K_LINES_B cle,
7054          OKC_LINE_STYLES_B lse
7055   WHERE  cle.cle_id = p_cle_id
7056   AND    cle.lse_id = lse.id
7057   AND    lse.lty_code = 'FIXED_ASSET'
7058    --Bug# 2761799 : Do not check for active status on sysdate
7059   --AND    trunc(nvl(start_date,sysdate)) <= trunc(sysdate)
7060   --AND    trunc(nvl(end_date,sysdate+1)) > trunc(sysdate)
7061   --Bug# 5946411: ER :commented following
7062  -- AND    cle.sts_code = 'BOOKED';
7063  ;
7064   --Bug# 5946411: ER End
7065   l_txlv_rec  txlv_rec_type;
7066   l_txdv_tbl  txdv_tbl_type;
7067   l_txdv_rec  txdv_rec_type;
7068   lx_txdv_rec txdv_rec_type;
7069   lx_txdv_tbl txdv_tbl_type;
7070 
7071   l_no_data_found BOOLEAN DEFAULT TRUE;
7072   l_fa_line_id    NUMBER;
7073 
7074   j NUMBER;
7075 
7076 BEGIN
7077 
7078   -- Call start_activity to create savepoint, check compatibility
7079   -- and initialize message list
7080   x_return_status := OKL_API.START_ACTIVITY (
7081                                l_api_name
7082                                ,p_init_msg_list
7083                                ,'_PVT'
7084                                ,x_return_status);
7085    -- Check if activity started successfully
7086    IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
7087        RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
7088    ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
7089        RAISE OKL_API.G_EXCEPTION_ERROR;
7090    END IF;
7091 
7092   --Verify cle_id
7093   x_return_status := verify_cle_id(p_cle_id => p_cle_id);
7094   IF x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR THEN
7095         RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
7096   ELSIF x_return_status = OKL_API.G_RET_STS_ERROR THEN
7097         RAISE OKL_API.G_EXCEPTION_ERROR;
7098   END IF;
7099 
7100   --get fixed asset line
7101   OPEN   fa_line_csr(p_cle_id => p_cle_id) ;
7102   FETCH  fa_line_csr INTO l_fa_line_id;
7103   IF fa_line_csr%NOTFOUND THEN
7104       NULL; --not exactly
7105   ELSE
7106       l_txlv_rec := get_txlv_rec(l_fa_line_id, l_no_data_found);
7107       IF l_no_data_found THEN
7108           NULL;
7109           --dbms_output.put_line('No pending Split Asset Transactions for this Asset');
7110           OKL_API.set_message(p_app_name     => G_APP_NAME,
7111                               p_msg_name     => G_SPLIT_AST_TRX_NOT_FOUND
7112                               );
7113       ELSE
7114             l_txdv_tbl := p_txdv_tbl;
7115             --1. update txd assets
7116             IF l_txdv_tbl.LAST IS NOT NULL THEN
7117             j := 0;
7118             LOOP
7119                 IF l_txdv_tbl.LAST = j THEN
7120                     EXIT;
7121             ELSE
7122                 j := j+1;
7123                 --dbms_output.put_line('J ='||to_char(j));
7124                 l_txdv_rec.id := l_txdv_tbl(j).id;
7125                 --Bug# 4994713: convert asset number to upper case
7126                 l_txdv_rec.asset_number := UPPER(l_txdv_tbl(j).asset_number);
7127                 l_txdv_rec.description := l_txdv_tbl(j).description;
7128                 --dbms_output.put_line('l_txdv_rec.id'||to_char(l_txdv_rec.id));
7129                 IF (l_txdv_rec.id IS NULL) OR (l_txdv_rec.id = OKL_API.G_MISS_NUM) THEN
7130                     EXIT;
7131                 ELSE
7132 
7133                     OKL_TXD_ASSETS_PUB.update_txd_asset_def(
7134                               p_api_version    => p_api_version,
7135                               p_init_msg_list  => p_init_msg_list,
7136                               x_return_status  => x_return_status,
7137                               x_msg_count      => x_msg_count,
7138                               x_msg_data       => x_msg_data,
7139                               p_adpv_rec       => l_txdv_rec,
7140                               x_adpv_rec       => lx_txdv_rec);
7141                     --dbms_output.put_line('after updating the transaction details for asset number '||l_txdv_rec.asset_number||':'||x_return_status);
7142                     IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
7143                         RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
7144                     ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
7145                         RAISE OKL_API.G_EXCEPTION_ERROR;
7146                     END IF;
7147                     ---
7148 
7149                     IF lx_txdv_rec.target_kle_id IS NULL THEN
7150                         x_return_status := validate_attributes(p_txdv_rec => lx_txdv_rec);
7151 
7152                         IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
7153                             RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
7154                         ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
7155                             RAISE OKL_API.G_EXCEPTION_ERROR;
7156                         END IF;
7157                    END IF;
7158 
7159                     --validate if original asset number has been modified
7160                     IF l_txlv_rec.kle_id = lx_txdv_rec.target_kle_id THEN
7161                        IF (lx_txdv_rec.asset_number <> l_txlv_rec.asset_number)
7162                          OR (lx_txdv_rec.description <> l_txlv_rec.description) THEN
7163                            OKL_API.Set_message(p_app_name  => G_APP_NAME,
7164                                                p_msg_name  => G_SPLIT_PARENT_NUMBER_CHANGE);
7165                            RAISE OKL_API.G_EXCEPTION_ERROR;
7166                        END IF;
7167                     END IF;
7168 
7169                     lx_txdv_tbl(j) := lx_txdv_rec;
7170                  END IF;
7171             END IF;
7172             END LOOP;
7173          END IF;
7174       -----
7175       END IF;
7176    END IF;
7177    x_txdv_tbl := lx_txdv_tbl;
7178    OKL_API.END_ACTIVITY (x_msg_count,
7179                           x_msg_data );
7180     EXCEPTION
7181     WHEN OKL_API.G_EXCEPTION_ERROR THEN
7182     x_return_status := OKL_API.HANDLE_EXCEPTIONS(
7183                                l_api_name,
7184                                G_PKG_NAME,
7185                                'OKL_API.G_RET_STS_ERROR',
7186                                x_msg_count,
7187                                x_msg_data,
7188                                '_PVT');
7189     WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
7190     x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
7191                               l_api_name,
7192                               G_PKG_NAME,
7193                               'OKL_API.G_RET_STS_UNEXP_ERROR',
7194                               x_msg_count,
7195                               x_msg_data,
7196                               '_PVT');
7197     WHEN OTHERS THEN
7198     x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
7199                               l_api_name,
7200                               G_PKG_NAME,
7201                               'OTHERS',
7202                               x_msg_count,
7203                               x_msg_data,
7204                               '_PVT');
7205 END Update_Split_Transaction;
7206 ---------------------------------------------------------------------------
7207   -- FUNCTION get_rec for: OKC_K_ITEMS_V
7208 ---------------------------------------------------------------------------
7209   FUNCTION get_cimv_rec (
7210     p_cle_id                       IN  NUMBER,
7211     x_no_data_found                OUT NOCOPY BOOLEAN
7212   ) RETURN cimv_rec_type IS
7213     CURSOR okc_cimv_csr (p_cle_id                 IN NUMBER) IS
7214     SELECT
7215             ID,
7216             OBJECT_VERSION_NUMBER,
7217             CLE_ID,
7218             CHR_ID,
7219             CLE_ID_FOR,
7220             DNZ_CHR_ID,
7221             OBJECT1_ID1,
7222             OBJECT1_ID2,
7223             JTOT_OBJECT1_CODE,
7224             UOM_CODE,
7225             EXCEPTION_YN,
7226             NUMBER_OF_ITEMS,
7227             UPG_ORIG_SYSTEM_REF,
7228             UPG_ORIG_SYSTEM_REF_ID,
7229             PRICED_ITEM_YN,
7230             CREATED_BY,
7231             CREATION_DATE,
7232             LAST_UPDATED_BY,
7233             LAST_UPDATE_DATE,
7234             LAST_UPDATE_LOGIN
7235       FROM Okc_K_Items_V
7236      WHERE okc_k_items_v.cle_id     = p_cle_id;
7237     l_cimv_rec                     cimv_rec_type;
7238   BEGIN
7239     x_no_data_found := TRUE;
7240     -- Get current database values
7241     OPEN okc_cimv_csr (p_cle_id);
7242     FETCH okc_cimv_csr INTO
7243               l_cimv_rec.ID,
7244               l_cimv_rec.OBJECT_VERSION_NUMBER,
7245               l_cimv_rec.CLE_ID,
7246               l_cimv_rec.CHR_ID,
7247               l_cimv_rec.CLE_ID_FOR,
7248               l_cimv_rec.DNZ_CHR_ID,
7249               l_cimv_rec.OBJECT1_ID1,
7250               l_cimv_rec.OBJECT1_ID2,
7251               l_cimv_rec.JTOT_OBJECT1_CODE,
7252               l_cimv_rec.UOM_CODE,
7253               l_cimv_rec.EXCEPTION_YN,
7254               l_cimv_rec.NUMBER_OF_ITEMS,
7255               l_cimv_rec.UPG_ORIG_SYSTEM_REF,
7256               l_cimv_rec.UPG_ORIG_SYSTEM_REF_ID,
7257               l_cimv_rec.PRICED_ITEM_YN,
7258               l_cimv_rec.CREATED_BY,
7259               l_cimv_rec.CREATION_DATE,
7260               l_cimv_rec.LAST_UPDATED_BY,
7261               l_cimv_rec.LAST_UPDATE_DATE,
7262               l_cimv_rec.LAST_UPDATE_LOGIN;
7263     x_no_data_found := okc_cimv_csr%NOTFOUND;
7264     CLOSE okc_cimv_csr;
7265     RETURN(l_cimv_rec);
7266   END get_cimv_rec;
7267 
7268   FUNCTION get_cimv_rec (
7269     p_cle_id                     IN NUMBER
7270   ) RETURN cimv_rec_type IS
7271     l_row_notfound                 BOOLEAN := TRUE;
7272   BEGIN
7273     RETURN(get_cimv_rec(p_cle_id, l_row_notfound));
7274   END get_cimv_rec;
7275 ---------------------------------------------------------------------------
7276 -- FUNCTION get_rec for: OKL_K_LINES_V
7277 ---------------------------------------------------------------------------
7278 FUNCTION get_klev_rec (
7279     p_cle_id                       IN  NUMBER,
7280     x_no_data_found                OUT NOCOPY BOOLEAN
7281   ) RETURN klev_rec_type IS
7282     CURSOR okl_k_lines_v_csr (p_id                 IN NUMBER) IS
7283       SELECT
7284         ID,
7285         OBJECT_VERSION_NUMBER,
7286         KLE_ID,
7287         STY_ID,
7288         PRC_CODE,
7289         FCG_CODE,
7290         NTY_CODE,
7291         ESTIMATED_OEC,
7292         LAO_AMOUNT,
7293         TITLE_DATE,
7294         FEE_CHARGE,
7295         LRS_PERCENT,
7296         INITIAL_DIRECT_COST,
7297         PERCENT_STAKE,
7298         PERCENT,
7299         EVERGREEN_PERCENT,
7300         AMOUNT_STAKE,
7301         OCCUPANCY,
7302         COVERAGE,
7303         RESIDUAL_PERCENTAGE,
7304         DATE_LAST_INSPECTION,
7305         DATE_SOLD,
7306         LRV_AMOUNT,
7307         CAPITAL_REDUCTION,
7308         DATE_NEXT_INSPECTION_DUE,
7309         DATE_RESIDUAL_LAST_REVIEW,
7310         DATE_LAST_REAMORTISATION,
7311         VENDOR_ADVANCE_PAID,
7312         WEIGHTED_AVERAGE_LIFE,
7313         TRADEIN_AMOUNT,
7314         BOND_EQUIVALENT_YIELD,
7315         TERMINATION_PURCHASE_AMOUNT,
7316         REFINANCE_AMOUNT,
7317         YEAR_BUILT,
7318         DELIVERED_DATE,
7319         CREDIT_TENANT_YN,
7320         DATE_LAST_CLEANUP,
7321         YEAR_OF_MANUFACTURE,
7322         COVERAGE_RATIO,
7323         REMARKETED_AMOUNT,
7324         GROSS_SQUARE_FOOTAGE,
7325         PRESCRIBED_ASSET_YN,
7326         DATE_REMARKETED,
7327         NET_RENTABLE,
7328         REMARKET_MARGIN,
7329         DATE_LETTER_ACCEPTANCE,
7330         REPURCHASED_AMOUNT,
7331         DATE_COMMITMENT_EXPIRATION,
7332         DATE_REPURCHASED,
7333         DATE_APPRAISAL,
7334         RESIDUAL_VALUE,
7335         APPRAISAL_VALUE,
7336         SECURED_DEAL_YN,
7337         GAIN_LOSS,
7338         FLOOR_AMOUNT,
7339         RE_LEASE_YN,
7340         PREVIOUS_CONTRACT,
7341         TRACKED_RESIDUAL,
7342         DATE_TITLE_RECEIVED,
7343         AMOUNT,
7344         ATTRIBUTE_CATEGORY,
7345         ATTRIBUTE1,
7346         ATTRIBUTE2,
7347         ATTRIBUTE3,
7348         ATTRIBUTE4,
7349         ATTRIBUTE5,
7350         ATTRIBUTE6,
7351         ATTRIBUTE7,
7352         ATTRIBUTE8,
7353         ATTRIBUTE9,
7354         ATTRIBUTE10,
7355         ATTRIBUTE11,
7356         ATTRIBUTE12,
7357         ATTRIBUTE13,
7358         ATTRIBUTE14,
7359         ATTRIBUTE15,
7360         STY_ID_FOR,
7361         CLG_ID,
7362         CREATED_BY,
7363         CREATION_DATE,
7364         LAST_UPDATED_BY,
7365         LAST_UPDATE_DATE,
7366         LAST_UPDATE_LOGIN,
7367         DATE_FUNDING,
7368         DATE_FUNDING_REQUIRED,
7369         DATE_ACCEPTED,
7370         DATE_DELIVERY_EXPECTED,
7371         OEC,
7372         CAPITAL_AMOUNT,
7373         RESIDUAL_GRNTY_AMOUNT,
7374         RESIDUAL_CODE,
7375         RVI_PREMIUM,
7376         CREDIT_NATURE,
7377         CAPITALIZED_INTEREST,
7378         CAPITAL_REDUCTION_PERCENT,
7379         DATE_PAY_INVESTOR_START,
7380         PAY_INVESTOR_FREQUENCY,
7381         PAY_INVESTOR_EVENT,
7382         PAY_INVESTOR_REMITTANCE_DAYS,
7383         --Bug# 2998115
7384         FEE_TYPE,
7385 --Bug# 3143522 : Subsidies
7386        SUBSIDY_ID,
7387        --SUBSIDIZED_OEC,
7388        --SUBSIDIZED_CAP_AMOUNT,
7389        PRE_TAX_YIELD,
7390        AFTER_TAX_YIELD,
7391        IMPLICIT_INTEREST_RATE,
7392        IMPLICIT_NON_IDC_INTEREST_RATE,
7393        PRE_TAX_IRR,
7394        AFTER_TAX_IRR,
7395        SUBSIDY_OVERRIDE_AMOUNT,
7396 --quote
7397        SUB_PRE_TAX_YIELD,
7398        SUB_AFTER_TAX_YIELD,
7399        SUB_IMPL_INTEREST_RATE,
7400        SUB_IMPL_NON_IDC_INT_RATE,
7401        SUB_PRE_TAX_IRR,
7402        SUB_AFTER_TAX_IRR,
7403 --Bug# 2994971
7404        ITEM_INSURANCE_CATEGORY,
7405 --Bug# 3973640 : 11.5.10+ schema changes
7406        QTE_ID,
7407        FUNDING_DATE,
7408        STREAM_TYPE_SUBCLASS
7409        -- Bug#4508050 - smadhava - Added - Start
7410        , FEE_PURPOSE_CODE
7411        , DATE_FUNDING_EXPECTED
7412        , DATE_DELIVERY_EXPECTED
7413        , MANUFACTURER_NAME
7414        , MODEL_NUMBER
7415        , DOWN_PAYMENT_RECEIVER_CODE
7416        , CAPITALIZE_DOWN_PAYMENT_YN
7417        -- Bug#4508050 - smadhava - Added - End
7418        --Bug# 4631549
7419        ,Expected_asset_cost
7420 
7421       FROM OKL_K_LINES_V
7422       WHERE OKL_K_LINES_V.id     = p_id;
7423       l_klev_rec                   klev_rec_type;
7424   BEGIN
7425 
7426     x_no_data_found := TRUE;
7427     -- Get current database values
7428     OPEN okl_k_lines_v_csr (p_cle_id);
7429     FETCH okl_k_lines_v_csr INTO
7430        l_klev_rec.ID,
7431         l_klev_rec.OBJECT_VERSION_NUMBER,
7432         l_klev_rec.KLE_ID,
7433         l_klev_rec.STY_ID,
7434         l_klev_rec.PRC_CODE,
7435         l_klev_rec.FCG_CODE,
7436         l_klev_rec.NTY_CODE,
7437         l_klev_rec.ESTIMATED_OEC,
7438         l_klev_rec.LAO_AMOUNT,
7439         l_klev_rec.TITLE_DATE,
7440         l_klev_rec.FEE_CHARGE,
7441         l_klev_rec.LRS_PERCENT,
7442         l_klev_rec.INITIAL_DIRECT_COST,
7443         l_klev_rec.PERCENT_STAKE,
7444         l_klev_rec.PERCENT,
7445         l_klev_rec.EVERGREEN_PERCENT,
7446         l_klev_rec.AMOUNT_STAKE,
7447         l_klev_rec.OCCUPANCY,
7448         l_klev_rec.COVERAGE,
7449         l_klev_rec.RESIDUAL_PERCENTAGE,
7450         l_klev_rec.DATE_LAST_INSPECTION,
7451         l_klev_rec.DATE_SOLD,
7452         l_klev_rec.LRV_AMOUNT,
7453         l_klev_rec.CAPITAL_REDUCTION,
7454         l_klev_rec.DATE_NEXT_INSPECTION_DUE,
7455         l_klev_rec.DATE_RESIDUAL_LAST_REVIEW,
7456         l_klev_rec.DATE_LAST_REAMORTISATION,
7457         l_klev_rec.VENDOR_ADVANCE_PAID,
7458         l_klev_rec.WEIGHTED_AVERAGE_LIFE,
7459         l_klev_rec.TRADEIN_AMOUNT,
7460         l_klev_rec.BOND_EQUIVALENT_YIELD,
7461         l_klev_rec.TERMINATION_PURCHASE_AMOUNT,
7462         l_klev_rec.REFINANCE_AMOUNT,
7463         l_klev_rec.YEAR_BUILT,
7464         l_klev_rec.DELIVERED_DATE,
7465         l_klev_rec.CREDIT_TENANT_YN,
7466         l_klev_rec.DATE_LAST_CLEANUP,
7467         l_klev_rec.YEAR_OF_MANUFACTURE,
7468         l_klev_rec.COVERAGE_RATIO,
7469         l_klev_rec.REMARKETED_AMOUNT,
7470         l_klev_rec.GROSS_SQUARE_FOOTAGE,
7471         l_klev_rec.PRESCRIBED_ASSET_YN,
7472         l_klev_rec.DATE_REMARKETED,
7473         l_klev_rec.NET_RENTABLE,
7474         l_klev_rec.REMARKET_MARGIN,
7475         l_klev_rec.DATE_LETTER_ACCEPTANCE,
7476         l_klev_rec.REPURCHASED_AMOUNT,
7477         l_klev_rec.DATE_COMMITMENT_EXPIRATION,
7478         l_klev_rec.DATE_REPURCHASED,
7479         l_klev_rec.DATE_APPRAISAL,
7480         l_klev_rec.RESIDUAL_VALUE,
7481         l_klev_rec.APPRAISAL_VALUE,
7482         l_klev_rec.SECURED_DEAL_YN,
7483         l_klev_rec.GAIN_LOSS,
7484         l_klev_rec.FLOOR_AMOUNT,
7485         l_klev_rec.RE_LEASE_YN,
7486         l_klev_rec.PREVIOUS_CONTRACT,
7487         l_klev_rec.TRACKED_RESIDUAL,
7488         l_klev_rec.DATE_TITLE_RECEIVED,
7489         l_klev_rec.AMOUNT,
7490         l_klev_rec.ATTRIBUTE_CATEGORY,
7491         l_klev_rec.ATTRIBUTE1,
7492         l_klev_rec.ATTRIBUTE2,
7493         l_klev_rec.ATTRIBUTE3,
7494         l_klev_rec.ATTRIBUTE4,
7495         l_klev_rec.ATTRIBUTE5,
7496         l_klev_rec.ATTRIBUTE6,
7497         l_klev_rec.ATTRIBUTE7,
7498         l_klev_rec.ATTRIBUTE8,
7499         l_klev_rec.ATTRIBUTE9,
7500         l_klev_rec.ATTRIBUTE10,
7501         l_klev_rec.ATTRIBUTE11,
7502         l_klev_rec.ATTRIBUTE12,
7503         l_klev_rec.ATTRIBUTE13,
7504         l_klev_rec.ATTRIBUTE14,
7505         l_klev_rec.ATTRIBUTE15,
7506         l_klev_rec.STY_ID_FOR,
7507         l_klev_rec.CLG_ID,
7508         l_klev_rec.CREATED_BY,
7509         l_klev_rec.CREATION_DATE,
7510         l_klev_rec.LAST_UPDATED_BY,
7511         l_klev_rec.LAST_UPDATE_DATE,
7512         l_klev_rec.LAST_UPDATE_LOGIN,
7513         l_klev_rec.DATE_FUNDING,
7514         l_klev_rec.DATE_FUNDING_REQUIRED,
7515         l_klev_rec.DATE_ACCEPTED,
7516         l_klev_rec.DATE_DELIVERY_EXPECTED,
7517         l_klev_rec.OEC,
7518         l_klev_rec.CAPITAL_AMOUNT,
7519         l_klev_rec.RESIDUAL_GRNTY_AMOUNT,
7520         l_klev_rec.RESIDUAL_CODE,
7521         l_klev_rec.RVI_PREMIUM,
7522         l_klev_rec.CREDIT_NATURE,
7523         l_klev_rec.CAPITALIZED_INTEREST,
7524         l_klev_rec.CAPITAL_REDUCTION_PERCENT,
7525         l_klev_rec.DATE_PAY_INVESTOR_START,
7526         l_klev_rec.PAY_INVESTOR_FREQUENCY,
7527         l_klev_rec.PAY_INVESTOR_EVENT,
7528         l_klev_rec.PAY_INVESTOR_REMITTANCE_DAYS,
7529         --Bug# 2998115:
7530         l_klev_rec.FEE_TYPE,
7531 --Bug#3143522 : Subsidies
7532        l_klev_rec.SUBSIDY_ID,
7533        --l_klev_rec.SUBSIDIZED_OEC,
7534        --l_klev_rec.SUBSIDIZED_CAP_AMOUNT,
7535        l_klev_rec.PRE_TAX_YIELD,
7536        l_klev_rec.AFTER_TAX_YIELD,
7537        l_klev_rec.IMPLICIT_INTEREST_RATE,
7538        l_klev_rec.IMPLICIT_NON_IDC_INTEREST_RATE,
7539        l_klev_rec.PRE_TAX_IRR,
7540        l_klev_rec.AFTER_TAX_IRR,
7541        l_klev_rec.SUBSIDY_OVERRIDE_AMOUNT,
7542 --quote
7543        l_klev_rec.SUB_PRE_TAX_YIELD,
7544        l_klev_rec.SUB_AFTER_TAX_YIELD,
7545        l_klev_rec.SUB_IMPL_INTEREST_RATE,
7546        l_klev_rec.SUB_IMPL_NON_IDC_INT_RATE,
7547        l_klev_rec.SUB_PRE_TAX_IRR,
7548        l_klev_rec.SUB_AFTER_TAX_IRR,
7549 --Bug# 2994971 :
7550        l_klev_rec.ITEM_INSURANCE_CATEGORY,
7551 --Bug# 3973640 : 11.5.10+ schema changes
7552        l_klev_rec.QTE_ID,
7553        l_klev_rec.FUNDING_DATE,
7554        l_klev_rec.STREAM_TYPE_SUBCLASS
7555        -- Bug#4508050 - smadhava - Added - Start
7556        , l_klev_rec.FEE_PURPOSE_CODE
7557        , l_klev_rec.DATE_FUNDING_EXPECTED
7558        , l_klev_rec.DATE_DELIVERY_EXPECTED
7559        , l_klev_rec.MANUFACTURER_NAME
7560        , l_klev_rec.MODEL_NUMBER
7561        , l_klev_rec.DOWN_PAYMENT_RECEIVER_CODE
7562        , l_klev_rec.CAPITALIZE_DOWN_PAYMENT_YN
7563        -- Bug#4508050 - smadhava - Added - End
7564        --Bug# 4631549
7565        ,l_klev_rec.Expected_Asset_Cost
7566 ;
7567     x_no_data_found := okl_k_lines_v_csr%NOTFOUND;
7568     CLOSE okl_k_lines_v_csr;
7569     RETURN(l_klev_rec);
7570   END get_klev_rec;
7571 
7572 FUNCTION get_klev_rec (
7573     p_cle_id                    IN NUMBER
7574   ) RETURN klev_rec_type IS
7575     l_row_notfound                 BOOLEAN := TRUE;
7576   BEGIN
7577     RETURN(get_klev_rec(p_cle_id, l_row_notfound));
7578 END get_klev_rec;
7579 ---------------------------------------------------------------------------
7580 -- FUNCTION get_rec for: OKC_K_LINES_V
7581 ---------------------------------------------------------------------------
7582 FUNCTION get_clev_rec (
7583     p_cle_id                     IN NUMBER,
7584     x_no_data_found                OUT NOCOPY BOOLEAN
7585   ) RETURN clev_rec_type IS
7586     CURSOR okc_clev_csr (p_id IN NUMBER) IS
7587     SELECT
7588             ID,
7589             OBJECT_VERSION_NUMBER,
7590             SFWT_FLAG,
7591             CHR_ID,
7592             CLE_ID,
7593             LSE_ID,
7594             LINE_NUMBER,
7595             STS_CODE,
7596             DISPLAY_SEQUENCE,
7597             TRN_CODE,
7598             DNZ_CHR_ID,
7599             COMMENTS,
7600             ITEM_DESCRIPTION,
7601                   OKE_BOE_DESCRIPTION,
7602             HIDDEN_IND,
7603                   PRICE_UNIT,
7604                   PRICE_UNIT_PERCENT,
7605             PRICE_NEGOTIATED,
7606                PRICE_NEGOTIATED_RENEWED,
7607             PRICE_LEVEL_IND,
7608             INVOICE_LINE_LEVEL_IND,
7609             DPAS_RATING,
7610             BLOCK23TEXT,
7611             EXCEPTION_YN,
7612             TEMPLATE_USED,
7613             DATE_TERMINATED,
7614             NAME,
7615             START_DATE,
7616             END_DATE,
7617                   DATE_RENEWED,
7618             UPG_ORIG_SYSTEM_REF,
7619             UPG_ORIG_SYSTEM_REF_ID,
7620              ORIG_SYSTEM_SOURCE_CODE,
7621              ORIG_SYSTEM_ID1,
7622              ORIG_SYSTEM_REFERENCE1,
7623             ATTRIBUTE_CATEGORY,
7624             ATTRIBUTE1,
7625             ATTRIBUTE2,
7626             ATTRIBUTE3,
7627             ATTRIBUTE4,
7628             ATTRIBUTE5,
7629             ATTRIBUTE6,
7630             ATTRIBUTE7,
7631             ATTRIBUTE8,
7632             ATTRIBUTE9,
7633             ATTRIBUTE10,
7634             ATTRIBUTE11,
7635             ATTRIBUTE12,
7636             ATTRIBUTE13,
7637             ATTRIBUTE14,
7638             ATTRIBUTE15,
7639             CREATED_BY,
7640             CREATION_DATE,
7641             LAST_UPDATED_BY,
7642             LAST_UPDATE_DATE,
7643             PRICE_TYPE,
7644             CURRENCY_CODE,
7645                 CURRENCY_CODE_RENEWED,
7646             LAST_UPDATE_LOGIN
7647       FROM Okc_K_Lines_V
7648      WHERE okc_k_lines_v.id     = p_id;
7649     l_clev_rec                     clev_rec_type;
7650   BEGIN
7651     x_no_data_found := TRUE;
7652     -- Get current database values
7653     OPEN okc_clev_csr (p_cle_id);
7654     FETCH okc_clev_csr INTO
7655               l_clev_rec.ID,
7656               l_clev_rec.OBJECT_VERSION_NUMBER,
7657               l_clev_rec.SFWT_FLAG,
7658               l_clev_rec.CHR_ID,
7659               l_clev_rec.CLE_ID,
7660               l_clev_rec.LSE_ID,
7661               l_clev_rec.LINE_NUMBER,
7662               l_clev_rec.STS_CODE,
7663               l_clev_rec.DISPLAY_SEQUENCE,
7664               l_clev_rec.TRN_CODE,
7665               l_clev_rec.DNZ_CHR_ID,
7666               l_clev_rec.COMMENTS,
7667               l_clev_rec.ITEM_DESCRIPTION,
7668                     l_clev_rec.OKE_BOE_DESCRIPTION,
7669               l_clev_rec.HIDDEN_IND,
7670                     l_clev_rec.PRICE_UNIT,
7671                     l_clev_rec.PRICE_UNIT_PERCENT,
7672               l_clev_rec.PRICE_NEGOTIATED,
7673                     l_clev_rec.PRICE_NEGOTIATED_RENEWED,
7674               l_clev_rec.PRICE_LEVEL_IND,
7675               l_clev_rec.INVOICE_LINE_LEVEL_IND,
7676               l_clev_rec.DPAS_RATING,
7677               l_clev_rec.BLOCK23TEXT,
7678               l_clev_rec.EXCEPTION_YN,
7679               l_clev_rec.TEMPLATE_USED,
7680               l_clev_rec.DATE_TERMINATED,
7681               l_clev_rec.NAME,
7682               l_clev_rec.START_DATE,
7683               l_clev_rec.END_DATE,
7684                     l_clev_rec.DATE_RENEWED,
7685               l_clev_rec.UPG_ORIG_SYSTEM_REF,
7686               l_clev_rec.UPG_ORIG_SYSTEM_REF_ID,
7687               l_clev_rec.ORIG_SYSTEM_SOURCE_CODE,
7688               l_clev_rec.ORIG_SYSTEM_ID1,
7689               l_clev_rec.ORIG_SYSTEM_REFERENCE1,
7690               l_clev_rec.ATTRIBUTE_CATEGORY,
7691               l_clev_rec.ATTRIBUTE1,
7692               l_clev_rec.ATTRIBUTE2,
7693               l_clev_rec.ATTRIBUTE3,
7694               l_clev_rec.ATTRIBUTE4,
7695               l_clev_rec.ATTRIBUTE5,
7696               l_clev_rec.ATTRIBUTE6,
7697               l_clev_rec.ATTRIBUTE7,
7698               l_clev_rec.ATTRIBUTE8,
7699               l_clev_rec.ATTRIBUTE9,
7700               l_clev_rec.ATTRIBUTE10,
7701               l_clev_rec.ATTRIBUTE11,
7702               l_clev_rec.ATTRIBUTE12,
7703               l_clev_rec.ATTRIBUTE13,
7704               l_clev_rec.ATTRIBUTE14,
7705               l_clev_rec.ATTRIBUTE15,
7706               l_clev_rec.CREATED_BY,
7707               l_clev_rec.CREATION_DATE,
7708               l_clev_rec.LAST_UPDATED_BY,
7709               l_clev_rec.LAST_UPDATE_DATE,
7710               l_clev_rec.PRICE_TYPE,
7711               l_clev_rec.CURRENCY_CODE,
7712                   l_clev_rec.CURRENCY_CODE_RENEWED,
7713               l_clev_rec.LAST_UPDATE_LOGIN;
7714     x_no_data_found := okc_clev_csr%NOTFOUND;
7715     CLOSE okc_clev_csr;
7716     RETURN(l_clev_rec);
7717 END get_clev_rec;
7718 
7719 FUNCTION get_clev_rec (
7720     p_cle_id                     IN NUMBER
7721   ) RETURN clev_rec_type IS
7722     l_row_notfound                 BOOLEAN := TRUE;
7723 BEGIN
7724     RETURN(get_clev_rec(p_cle_id, l_row_notfound));
7725 END get_clev_rec;
7726 --Bug #2648280 Begin
7727 --------------------------------------------------------------------------------
7728 -- Procedure to split streams : will be called after split asset processing
7729 -- Bug #2648280  - During the split asset process streams were not getting split
7730 -- for the financial asset lines getting split. Splitting of streams being done
7731 -- in this procedure
7732 -- Bug # 2723498 : 11.5.9 Enhancement Multi-GAAP support . Split reporting streams
7733 --------------------------------------------------------------------------------
7734 PROCEDURE split_streams(p_api_version      IN  NUMBER,
7735                         p_init_msg_list    IN  VARCHAR2,
7736                         x_return_status    OUT NOCOPY   VARCHAR2,
7737                         x_msg_count        OUT NOCOPY   NUMBER,
7738                         x_msg_data         OUT NOCOPY   VARCHAR2,
7739                         p_txl_id           IN  NUMBER)  AS
7740 
7741     l_api_name          CONSTANT VARCHAR2(256) := 'SPLIT_STREAMS';
7742     l_api_version       CONSTANT NUMBER       := 1.0;
7743     l_return_status     VARCHAR2(1)           := OKL_API.G_RET_STS_SUCCESS;
7744 
7745 
7746     l_stmv_rec Okl_Streams_pub.stmv_rec_type;
7747     l_selv_tbl Okl_Streams_pub.selv_tbl_type;
7748     x_stmv_rec Okl_Streams_pub.stmv_rec_type;
7749     x_selv_tbl Okl_Streams_pub.selv_tbl_type;
7750 
7751     --Cursor to fetch split child records (for split asset as well as split asset into components)
7752     CURSOR l_split_trx_csr1(p_trxline_id IN NUMBER) IS
7753     SELECT txd.split_percent,
7754            txl.kle_id,
7755            txd.target_kle_id,
7756            cle.cle_id  cle_id,
7757            target_cle.cle_id target_cle_id,
7758            txd.quantity,
7759            txl.current_units
7760     FROM   okl_txd_assets_b  txd,
7761            okl_txl_Assets_b  txl,
7762            okc_k_lines_b     cle,
7763            okc_k_lines_b     target_cle
7764     WHERE  txl.tal_type  = 'ALI'
7765     AND    txd.tal_id    = txl.id
7766     AND    txl.id        = p_trxline_id
7767     AND    txl.kle_id    <> txd.target_kle_id
7768     AND    cle.id        = txl.kle_id
7769     AND    target_cle.id = txd.target_kle_id
7770     --Bug# 3502142
7771     ORDER BY NVL(txd.split_percent,-1);
7772 
7773     --Bug# 3502142
7774     subtype l_split_trx_rec is l_split_trx_csr1%ROWTYPE;
7775     type l_split_trx_tbl is table of l_split_trx_rec INDEX BY BINARY_INTEGER;
7776     l_split_trx_tbl1 l_split_trx_tbl;
7777 
7778     --Cursor to fetch split parent record for Split Asset (Not split Asset into components)
7779     CURSOR l_split_trx_csr2(p_trxline_id IN NUMBER) IS
7780     SELECT txd.split_percent,
7781            txl.kle_id,
7782            txd.target_kle_id,
7783            cle.cle_id  cle_id,
7784            target_cle.cle_id target_cle_id,
7785            txd.quantity,
7786            txl.current_units
7787     FROM   okl_txd_assets_b  txd,
7788            okl_txl_Assets_b  txl,
7789            okc_k_lines_b     cle,
7790            okc_k_lines_b     target_cle
7791     WHERE  txl.tal_type  = 'ALI'
7792     AND    txd.tal_id    = txl.id
7793     AND    txl.id        = p_trxline_id
7794     AND    txl.kle_id    = txd.target_kle_id
7795     AND    cle.id        = txl.kle_id
7796     AND    target_cle.id = txd.target_kle_id;
7797 
7798 
7799 
7800     l_split_trx_rec1  l_split_trx_csr1%ROWTYPE;
7801     l_split_trx_rec2  l_split_trx_csr2%ROWTYPE;
7802 
7803         l_kle_id          NUMBER;
7804     l_split_factor    NUMBER;
7805 
7806     --Bug# 3066375:
7807     --Cursor to find any linked asset lines
7808     CURSOR l_lnk_asst_csr1 (p_cle_id IN NUMBER, p_target_cle_id IN NUMBER) IS
7809     SELECT lnk_cle.id,
7810            lnk_target_cle.id,
7811            --Bug 3502142
7812            lnk_target_cle.cle_id
7813     FROM   okc_k_lines_b     lnk_cle,
7814            okc_k_items       lnk_cim,
7815            okc_line_styles_b lnk_lse,
7816            okc_k_lines_b     lnk_target_cle,
7817            okc_k_items       lnk_target_cim,
7818            okc_line_styles_b lnk_target_lse
7819     WHERE  lnk_cim.object1_id1              = TO_CHAR(p_cle_id)
7820     AND    lnk_cim.object1_id2              = '#'
7821     AND    lnk_cim.jtot_object1_code        = 'OKX_COVASST'
7822     AND    lnk_cle.id                       = lnk_cim.cle_id
7823     AND    lnk_cle.dnz_chr_id               = lnk_cim.dnz_chr_id
7824     AND    lnk_cle.lse_id                   = lnk_lse.id
7825     AND    lnk_lse.lty_code                 IN ('LINK_FEE_ASSET','LINK_SERV_ASSET','LINK_USAGE_ASSET')
7826     AND    lnk_target_cim.object1_id1       = TO_CHAR(p_target_cle_id)
7827     AND    lnk_target_cim.object1_id2       = '#'
7828     AND    lnk_target_cim.jtot_object1_code = 'OKX_COVASST'
7829     AND    lnk_target_cle.id                = lnk_target_cim.cle_id
7830     AND    lnk_target_cle.dnz_chr_id        = lnk_target_cim.dnz_chr_id
7831     AND    lnk_target_cle.lse_id            = lnk_target_lse.id
7832     AND    lnk_target_lse.lty_code          IN ('LINK_FEE_ASSET','LINK_SERV_ASSET','LINK_USAGE_ASSET')
7833     AND    lnk_cle.cle_id                   = lnk_target_cle.cle_id
7834     AND    lnk_cle.id                      <> lnk_target_cle.id
7835     AND    lnk_cle.dnz_chr_id               = lnk_target_cle.dnz_chr_id;
7836 
7837     CURSOR l_lnk_asst_csr2 (p_cle_id IN NUMBER, p_target_cle_id IN NUMBER) IS
7838     SELECT lnk_cle.id,
7839            lnk_target_cle.id,
7840            --Bug 3502142
7841            lnk_target_cle.cle_id
7842     FROM   okc_k_lines_b     lnk_cle,
7843            okc_k_items       lnk_cim,
7844            okc_line_styles_b lnk_lse,
7845            okc_k_lines_b     lnk_target_cle,
7846            okc_k_items       lnk_target_cim,
7847            okc_line_styles_b lnk_target_lse
7848     WHERE  lnk_cim.object1_id1              = TO_CHAR(p_cle_id)
7849     AND    lnk_cim.object1_id2              = '#'
7850     AND    lnk_cim.jtot_object1_code        = 'OKX_COVASST'
7851     AND    lnk_cle.id                       = lnk_cim.cle_id
7852     AND    lnk_cle.dnz_chr_id               = lnk_cim.dnz_chr_id
7853     AND    lnk_cle.lse_id                   = lnk_lse.id
7854     AND    lnk_lse.lty_code                 IN ('LINK_FEE_ASSET','LINK_SERV_ASSET','LINK_USAGE_ASSET')
7855     AND    lnk_target_cim.object1_id1       = TO_CHAR(p_target_cle_id)
7856     AND    lnk_target_cim.object1_id2       = '#'
7857     AND    lnk_target_cim.jtot_object1_code = 'OKX_COVASST'
7858     AND    lnk_target_cle.id                = lnk_target_cim.cle_id
7859     AND    lnk_target_cle.dnz_chr_id        = lnk_target_cim.dnz_chr_id
7860     AND    lnk_target_cle.lse_id            = lnk_target_lse.id
7861     AND    lnk_target_lse.lty_code          IN ('LINK_FEE_ASSET','LINK_SERV_ASSET','LINK_USAGE_ASSET')
7862     AND    lnk_cle.cle_id                   = lnk_target_cle.cle_id
7863     AND    lnk_cle.id                       = lnk_target_cle.id
7864     AND    lnk_cle.dnz_chr_id               = lnk_target_cle.dnz_chr_id;
7865 
7866 
7867     l_lnk_cle_id         okc_k_lines_b.id%TYPE;
7868     l_lnk_target_cle_id  okc_k_lines_b.id%TYPE;
7869 
7870     -- Bug# 3502142
7871     l_lnk_top_cle_id     okc_k_lines_b.id%TYPE;
7872     --Bug# 6344223
7873     l_highest_split_comp_amt VARCHAR2(30);
7874     l_count NUMBER;
7875 
7876 --------------------------------------------------------------------------------
7877 -- Local procedure to do split streams processing
7878 -- IN parameters - p_kle_id (child top line)
7879 --               - p_parent_kle_id (parent top line)
7880 --               - p_split_factor (split factor)
7881 --------------------------------------------------------------------------------
7882     PROCEDURE Process_Split_Streams(p_api_version      IN  NUMBER,
7883                           p_init_msg_list    IN  VARCHAR2,
7884                           x_return_status    OUT NOCOPY   VARCHAR2,
7885                           x_msg_count        OUT NOCOPY   NUMBER,
7886                           x_msg_data         OUT NOCOPY   VARCHAR2,
7887                           p_kle_id           IN  NUMBER,
7888                           p_split_factor     IN  NUMBER,
7889                           p_parent_kle_id    IN  NUMBER,
7890                           p_txl_id           IN  NUMBER,
7891                           --Bug# 6344223
7892                           p_highest_split_comp_amt IN VARCHAR2 DEFAULT 'N') IS
7893 
7894     l_stmv_rec      Okl_Streams_pub.stmv_rec_type;
7895     l_selv_tbl      Okl_Streams_pub.selv_tbl_type;
7896     l_stmv_rec_hist Okl_Streams_pub.stmv_rec_type;
7897     l_selv_tbl_hist Okl_Streams_pub.selv_tbl_type;
7898     x_stmv_rec      Okl_Streams_pub.stmv_rec_type;
7899     x_selv_tbl      Okl_Streams_pub.selv_tbl_type;
7900 
7901 
7902     CURSOR l_strm_csr ( kleId NUMBER, status VARCHAR2) IS
7903     SELECT str.Id,
7904            str.transaction_number,
7905            str.sgn_code SGN_CODE,
7906            str.khr_id,
7907            str.sty_id,
7908            str.say_code,
7909            str.active_yn,
7910            str.kle_id,
7911            --Bug# 3502142
7912            str.purpose_code,
7913            str.comments,
7914            str.date_current,
7915            -- Bug# 4775555
7916            sty.stream_type_purpose,
7917            --Bug# 6344223
7918            str.link_hist_stream_id
7919     FROM okl_streams str,
7920          okl_strm_type_b sty
7921     WHERE
7922     str.kle_id = kleId
7923     AND str.say_code = status
7924     AND str.sty_id = sty.id;
7925 
7926     --Bug# 3502142
7927     CURSOR l_strmele_csr( kleId NUMBER, styId NUMBER, strId NUMBER,
7928                           purposeCode VARCHAR2, activeYn VARCHAR2) IS
7929     SELECT ele.id,
7930            ele.DATE_BILLED,
7931            ele.STREAM_ELEMENT_DATE,
7932            ele.AMOUNT,
7933            ele.ACCRUED_YN,
7934            ele.comments,
7935            str.transaction_number,
7936            str.sgn_code SGN_CODE,
7937            ele.stm_id STM_ID,
7938            ele.se_line_number SE_LINE_NUMBER
7939     FROM  okl_strm_elements ele,
7940           okl_streams str
7941     WHERE ele.stm_id = str.id
7942     AND str.id     = strId
7943     AND str.kle_id = kleId
7944     AND str.sty_id = styId
7945     AND UPPER(str.say_code) = 'CURR'
7946     AND UPPER(str.active_yn) = activeYn
7947     AND NVL(str.purpose_code,'ORIG') = purposeCode
7948     ORDER BY 3;
7949 
7950     l_strms_rec       l_strm_csr%ROWTYPE;
7951     l_strmele_rec     l_strmele_csr%ROWTYPE;
7952     i                 NUMBER;
7953     l_kle_id          NUMBER;
7954 
7955     --cursor to fetch transaction number
7956     CURSOR l_sifseq_csr IS
7957     SELECT okl_sif_seq.NEXTVAL
7958     FROM   dual;
7959 
7960     -- Bug# 3502142: start
7961     CURSOR curr_code_csr(p_kle_id IN NUMBER) IS
7962     SELECT currency_code
7963     FROM okc_k_lines_b
7964     WHERE id = p_kle_id;
7965 
7966     l_currency_code OKC_K_LINES_B.currency_code%type;
7967 
7968     l_active_yn          OKL_STREAMS.ACTIVE_YN%TYPE;
7969 
7970     --Bug# 4775555
7971     l_stmv_rec_temp Okl_Streams_pub.stmv_rec_type;
7972 
7973    --Bug# 6344223
7974    CURSOR l_txd_csr(p_trxline_id IN NUMBER) IS
7975     SELECT txd.id,
7976            txd.split_percent,
7977            txl.kle_id,
7978            txd.target_kle_id,
7979            cle.cle_id  cle_id,
7980            target_cle.cle_id target_cle_id,
7981            txd.quantity,
7982            txl.current_units
7983     FROM   okl_txd_assets_b  txd,
7984            okl_txl_Assets_b  txl,
7985            okc_k_lines_b     cle,
7986            okc_k_lines_b     target_cle
7987     WHERE  txl.tal_type  = 'ALI'
7988     AND    txd.tal_id    = txl.id
7989     AND    txl.id        = p_trxline_id
7990     AND    txl.kle_id    <> txd.target_kle_id
7991     AND    cle.id        = txl.kle_id
7992     AND    target_cle.id = txd.target_kle_id;
7993 
7994 
7995   l_split_pymt NUMBER;
7996   l_split_pymt_sum NUMBER;
7997   l_child_split_factor NUMBER;
7998   l_rounded_amount NUMBER;
7999   l_child_amount NUMBER;
8000 
8001   BEGIN
8002         x_return_status :=  OKL_API.G_RET_STS_SUCCESS;
8003 
8004         IF ( p_parent_kle_id = p_kle_id ) THEN
8005                     l_kle_id := p_kle_id;
8006                 ELSE
8007                     l_kle_id := p_parent_kle_id;
8008         END IF;
8009 
8010         -- Bug# 3502142
8011         open curr_code_csr(p_kle_id => p_kle_id);
8012         fetch curr_code_csr into l_currency_code;
8013         close curr_code_csr;
8014 
8015         FOR l_strms_rec IN l_strm_csr( l_kle_id, 'CURR' )
8016         LOOP
8017 
8018           -- Bug# 4775555
8019           -- Disbursement Basis streams should only be Historized here
8020           -- They will be recreated later by the call to
8021           -- okl_stream_generator_pvt.create_disb_streams
8022           IF (l_strms_rec.stream_type_purpose
8023                IN ('INVESTOR_RENT_DISB_BASIS',
8024                    'INVESTOR_RESIDUAL_DISB_BASIS','INVESTOR_PRINCIPAL_DISB_BASIS','INVESTOR_INTEREST_DISB_BASIS')) THEN
8025 
8026             IF (p_parent_kle_id = p_kle_id) THEN
8027 
8028               l_stmv_rec_hist              := l_stmv_rec_temp;
8029               l_stmv_rec_hist.id           := l_strms_rec.id;
8030               l_stmv_rec_hist.kle_id       := l_kle_id;
8031               l_stmv_rec_hist.say_code     := 'HIST';
8032               l_stmv_rec_hist.active_yn    := 'N';
8033               l_stmv_rec_hist.date_history := SYSDATE;
8034               --Bug# 6344223
8035 		  l_stmv_rec_hist.link_hist_stream_id := l_strms_rec.link_hist_stream_id;
8036               Okl_Streams_Pub.update_streams(
8037                 p_api_version   => l_api_version
8038                ,p_init_msg_list => p_init_msg_list
8039                ,x_return_status => x_return_status
8040                ,x_msg_count     => x_msg_count
8041                ,x_msg_data      => x_msg_data
8042                ,p_stmv_rec      => l_stmv_rec_hist
8043                ,x_stmv_rec      => x_stmv_rec);
8044 
8045                IF (x_return_status <> OKL_API.G_RET_STS_SUCCESS) THEN
8046                    RAISE G_EXCEPTION_HALT_VALIDATION;
8047                END IF;
8048 
8049             END IF;
8050 
8051           ELSE
8052 
8053             l_stmv_rec.sty_id := l_strms_rec.sty_id;
8054             --l_stmv_rec.khr_id := p_chr_id;
8055             l_stmv_rec.khr_id := l_strms_rec.khr_id;
8056 
8057             IF ((p_parent_kle_id = p_kle_id ) AND (p_split_factor = 0)) THEN
8058                 l_stmv_rec.say_code := 'HIST';
8059                 l_stmv_rec.active_yn := 'N';
8060                 l_stmv_rec.date_history := SYSDATE;
8061                 --Bug# 6344223
8062                 l_stmv_rec.link_hist_stream_id := l_strms_rec.link_hist_stream_id;
8063             ELSE
8064                 l_stmv_rec.say_code := 'CURR';
8065                 --Bug# 6344223
8066                 l_stmv_rec.link_hist_stream_id := l_strms_rec.id;
8067                 --Bug# 3502142
8068                 --l_stmv_rec.active_yn := 'Y';
8069                 --l_stmv_rec.date_current := SYSDATE;
8070             END IF;
8071             --Bug# 3502142
8072             --l_stmv_rec.active_yn := 'Y';
8073             --l_stmv_rec.date_current := SYSDATE;
8074             l_stmv_rec.transaction_number := l_strms_rec.transaction_number;
8075             l_stmv_rec.sgn_code := l_strms_rec.sgn_code;
8076             --Bug# 3502142
8077             l_stmv_rec.purpose_code := l_strms_rec.purpose_code;
8078             l_stmv_rec.active_yn := l_strms_rec.active_yn;
8079             l_stmv_rec.comments := l_strms_rec.comments;
8080             l_stmv_rec.date_current := l_strms_rec.date_current;
8081 
8082             i := 0;
8083             -- Bug# 3502142
8084 
8085             if NVL(l_strms_rec.purpose_code,'ORIG') = 'ORIG' then
8086               l_active_yn := 'Y';
8087             elsif l_strms_rec.purpose_code = 'REPORT' then
8088               l_active_yn := 'N';
8089             end if;
8090 
8091             FOR l_strmele_rec IN l_strmele_csr(l_kle_id, l_strms_rec.sty_id, l_strms_rec.id,
8092                                                NVL(l_strms_rec.purpose_code,'ORIG'), l_active_yn)
8093               LOOP
8094                 i := i + 1;
8095                 l_selv_tbl(i).accrued_yn          := l_strmele_rec.accrued_yn;
8096                 l_selv_tbl(i).stream_element_date := l_strmele_rec.stream_element_date;
8097                 l_selv_tbl(i).date_billed         := l_strmele_rec.date_billed;
8098                 l_selv_tbl(i).se_line_number      := l_strmele_rec.SE_LINE_NUMBER;
8099                 l_selv_tbl(i).comments            := l_strmele_rec.comments;
8100 
8101                 IF p_split_factor <> 0 THEN
8102                    --for parent line adjust the stream element amount
8103                    l_split_pymt_sum := 0;
8104 
8105                      --get the sum of stream element amount for child asset if
8106                      -- calculating cost for the parent line or for the
8107                      -- child line with highest split percent
8108                     IF (p_parent_kle_id = p_kle_id ) OR (p_highest_split_comp_amt='Y') THEN
8109 
8110                            FOR l_txd_rec in l_txd_csr(p_txl_id)
8111                            LOOP
8112                             IF NVL(l_txd_rec.split_percent,0) IN (0,OKL_API.G_MISS_NUM) THEN
8113                               l_child_split_factor := l_txd_rec.quantity/l_txd_rec.current_units;
8114                            ELSE
8115                               l_child_split_factor := l_txd_rec.split_percent/100;
8116                            END IF;
8117                             l_split_pymt := l_strmele_rec.amount * l_child_split_factor;
8118                             okl_accounting_util.round_amount(
8119                                                          p_api_version    => p_api_version,
8120                                                          p_init_msg_list  => p_init_msg_list,
8121                                                          x_return_status  => x_return_status,
8122                                                          x_msg_count      => x_msg_count,
8123                                                          x_msg_data       => x_msg_data,
8124                                                          p_amount         => l_split_pymt,
8125                                                          p_currency_code  => l_currency_code,
8126                                                          p_round_option   => 'STM',
8127                                                          x_rounded_amount => l_rounded_amount
8128                                                          );
8129                             IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
8130                               RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
8131                             ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
8132                               RAISE OKL_API.G_EXCEPTION_ERROR;
8133                             END IF;
8134                             l_split_pymt_sum := l_split_pymt_sum + l_rounded_amount;
8135                           END LOOP;
8136                       END IF;
8137 
8138                      IF (p_parent_kle_id = p_kle_id ) THEN
8139                            --for split by unit--
8140                           l_selv_tbl(i).amount :=l_strmele_rec.amount - l_split_pymt_sum;
8141 
8142                      ELSE
8143                            --claculate the amount for child line
8144                            l_child_amount :=l_strmele_rec.amount * p_split_factor;
8145                            okl_accounting_util.round_amount(
8146                                                        p_api_version    => p_api_version,
8147                                                          p_init_msg_list  => p_init_msg_list,
8148                                                          x_return_status  => x_return_status,
8149                                                          x_msg_count      => x_msg_count,
8150                                                          x_msg_data       => x_msg_data,
8151                                                          p_amount         => l_child_amount,
8152                                                          p_currency_code  => l_currency_code,
8153                                                          p_round_option   => 'STM',
8154                                                          x_rounded_amount => l_rounded_amount
8155                                                          );
8156                            IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
8157                               RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
8158                             ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
8159                               RAISE OKL_API.G_EXCEPTION_ERROR;
8160                            END IF;
8161                            l_child_amount :=l_rounded_amount;
8162                            --adjust the amount for highest asset percent if split by component
8163                            if p_highest_split_comp_amt='Y' THEN
8164                                l_selv_tbl(i).amount :=l_child_amount+ l_strmele_rec.amount - l_split_pymt_sum;
8165                             else
8166                                -- no adjustment required
8167                                l_selv_tbl(i).amount :=l_child_amount;
8168                            END IF;
8169 
8170                         END IF; --end if for parent line check
8171                        --dbms_output.put_line('l_selv_tbl(i).amount  '||l_selv_tbl(i).amount );
8172                 END IF; --p_split_factor
8173                 -----------------------------------------------------------------
8174                 --If (p_parent_kle_id = p_kle_id ) then
8175                     --l_selv_tbl(i).stm_id := l_strms_rec.id;
8176                     --l_selv_tbl(i).id     := l_strmele_rec.id;
8177                 --End If;
8178                 -----------------------------------------------------------------
8179                 l_selv_tbl_hist(i)        := l_selv_tbl(i);
8180                 l_selv_tbl_hist(i).amount := l_strmele_rec.amount;
8181                 l_selv_tbl_hist(i).stm_id := l_strms_rec.id;
8182                 l_selv_tbl_hist(i).id     := l_strmele_rec.id;
8183 
8184             END LOOP;
8185 
8186             IF (i <> 0) THEN
8187             IF (p_parent_kle_id = p_kle_id ) THEN
8188                 ------------------------------------------------------------------------
8189                 --Bug# : historize old streams and recreate with new values for old asset
8190                 ------------------------------------------------------------------------
8191                 l_stmv_rec_hist          := l_stmv_rec;
8192                 l_stmv_rec_hist.id       := l_strms_rec.id;
8193                 l_stmv_rec_hist.kle_id   := l_kle_id;
8194                 l_stmv_rec_hist.say_code := 'HIST';
8195                 l_stmv_rec_hist.active_yn := 'N';
8196                 l_stmv_rec_hist.date_history := SYSDATE;
8197                 --Bug# 6344223
8198                 l_stmv_rec_hist.link_hist_stream_id := l_strms_rec.link_hist_stream_id;
8199                 Okl_Streams_Pub.update_streams(
8200                                p_api_version   => l_api_version
8201                               ,p_init_msg_list => p_init_msg_list
8202                               ,x_return_status => x_return_status
8203                               ,x_msg_count     => x_msg_count
8204                               ,x_msg_data      => x_msg_data
8205                               ,p_stmv_rec      => l_stmv_rec_hist
8206                               ,p_selv_tbl      => l_selv_tbl_hist
8207                               ,x_stmv_rec      => x_stmv_rec
8208                               ,x_selv_tbl      => x_selv_tbl);
8209 
8210                IF (x_return_status <> OKL_API.G_RET_STS_SUCCESS) THEN
8211                    RAISE G_EXCEPTION_HALT_VALIDATION;
8212                END IF;
8213 
8214                IF (p_split_factor <> 0 ) THEN
8215                    l_stmv_rec.kle_id := l_kle_id;
8216                    l_stmv_rec.sgn_code := 'MANL';
8217                    l_stmv_rec.comments := 'Generated manually during split asset from parent transaction number '||TO_CHAR(l_stmv_rec.transaction_number);
8218                    OPEN l_sifseq_csr;
8219                    FETCH l_sifseq_csr INTO l_stmv_rec.transaction_number;
8220                    CLOSE l_sifseq_csr;
8221                    --Bug# 3502142
8222                    l_stmv_rec.date_current := SYSDATE;
8223 
8224                    Okl_Streams_Pub.create_streams(
8225                                p_api_version   => l_api_version
8226                               ,p_init_msg_list => p_init_msg_list
8227                               ,x_return_status => x_return_status
8228                               ,x_msg_count     => x_msg_count
8229                               ,x_msg_data      => x_msg_data
8230                               ,p_stmv_rec      => l_stmv_rec
8231                               ,p_selv_tbl      => l_selv_tbl
8232                               ,x_stmv_rec      => x_stmv_rec
8233                               ,x_selv_tbl      => x_selv_tbl);
8234 
8235                    IF (x_return_status <> OKL_API.G_RET_STS_SUCCESS) THEN
8236                        RAISE G_EXCEPTION_HALT_VALIDATION;
8237                    END IF;
8238                 END IF;
8239 
8240             ELSE
8241 
8242                 l_stmv_rec.kle_id := p_kle_id;
8243                 l_stmv_rec.sgn_code := 'MANL';
8244                 --Bug# 3502142
8245                 l_stmv_rec.comments := 'Generated manually during split asset from parent transaction number '||TO_CHAR(l_stmv_rec.transaction_number);
8246                 OPEN l_sifseq_csr;
8247                 FETCH l_sifseq_csr INTO l_stmv_rec.transaction_number;
8248                 CLOSE l_sifseq_csr;
8249                 --Bug# 3502142
8250                 l_stmv_rec.date_current := SYSDATE;
8251 
8252                 Okl_Streams_Pub.create_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
8259                               ,p_selv_tbl      => l_selv_tbl
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 
8268             END IF;
8269             ELSE
8270                NULL;
8271             END IF;
8272 
8273             l_selv_tbl.DELETE(1, l_selv_tbl.LAST);
8274             l_selv_tbl_hist.DELETE(1, l_selv_tbl.LAST);
8275 
8276           END IF;
8277         END LOOP;
8278 
8279   EXCEPTION
8280   WHEN G_EXCEPTION_HALT_VALIDATION THEN
8281       IF l_strm_csr%ISOPEN THEN
8282           CLOSE l_strm_csr;
8283       END IF;
8284       IF l_strmele_csr%ISOPEN THEN
8285           CLOSE l_strmele_csr;
8286       END IF;
8287       NULL;
8288   WHEN OTHERS THEN
8289       IF l_strm_csr%ISOPEN THEN
8290           CLOSE l_strm_csr;
8291       END IF;
8292       IF l_strmele_csr%ISOPEN THEN
8293           CLOSE l_strmele_csr;
8294       END IF;
8295       x_return_status := OKL_API.G_RET_STS_ERROR;
8296 
8297 END process_split_streams;
8298 /*begin main body*/
8299 BEGIN
8300 
8301     x_return_status := l_return_status;
8302 
8303     --open cursor only for parent records as should not
8304     --update the parent streams till all child lines are fixed.
8305     --Bug# 3502142
8306     l_count := 0;
8307     --Bug# 6344223
8308     l_highest_split_comp_amt := 'N';
8309 
8310     FOR  l_split_trx_rec1 IN l_split_trx_csr1 (p_trxLine_id => p_txl_id) LOOP
8311       l_count := l_count + 1;
8312       l_split_trx_tbl1(l_count) := l_split_trx_rec1;
8313     END LOOP;
8314 
8315     IF (l_count > 0) THEN
8316       FOR i IN l_split_trx_tbl1.FIRST .. l_split_trx_tbl1.LAST
8317       LOOP
8318 
8319         l_split_trx_rec1 :=  l_split_trx_tbl1(i);
8320 
8321         IF NVL(l_split_trx_rec1.split_percent,0) NOT IN (0,OKL_API.G_MISS_NUM) THEN
8322            l_split_factor := (l_split_trx_rec1.split_percent/100);
8323 
8324            --Bug# 3502142
8325            --Bug# 6344223
8326            IF i = l_split_trx_tbl1.LAST THEN
8327              l_highest_split_comp_amt := 'Y';
8328            ELSE
8329              l_highest_split_comp_amt := 'N';
8330            END IF;
8331         ELSE
8332             --1. By comparing the cost and quantities on txlv record and txdv record find the split factor
8333             l_split_factor    := l_split_trx_rec1.quantity/l_split_trx_rec1.current_units;
8334         END IF;
8335         --split streams for split child lines
8336         Process_split_streams(p_api_version    => p_api_version,
8337                               p_init_msg_list  => p_init_msg_list,
8338                               x_return_status  => x_return_status,
8339                               x_msg_count      => x_msg_count,
8340                               x_msg_data       => x_msg_data,
8341                               p_kle_id         => l_split_trx_rec1.target_cle_id,
8342                               p_split_factor   => l_split_factor,
8343                               p_parent_kle_id  => l_split_trx_rec1.cle_id,
8344                               --Bug# 3502142
8345                               p_txl_id         => p_txl_id,
8346                               --Bug# 6344223
8347                               p_highest_split_comp_amt => l_highest_split_comp_amt);
8348 
8349 
8350         IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
8351             RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
8352         ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
8353             RAISE OKL_API.G_EXCEPTION_ERROR;
8354         END IF;
8355 
8356         --Bug# 3066375:: split streams attached to linked asset lines
8357         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);
8358         LOOP
8359             --Bug# 3502142
8360             FETCH l_lnk_asst_csr1 INTO l_lnk_cle_id, l_lnk_target_cle_id,l_lnk_top_cle_id;
8361             EXIT WHEN l_lnk_asst_csr1%NOTFOUND;
8362             Process_split_streams(p_api_version    => p_api_version,
8363                                   p_init_msg_list  => p_init_msg_list,
8364                                   x_return_status  => x_return_status,
8365                                   x_msg_count      => x_msg_count,
8366                                   x_msg_data       => x_msg_data,
8367                                   p_kle_id         => l_lnk_target_cle_id,
8368                                   p_split_factor   => l_split_factor,
8369                                   p_parent_kle_id  => l_lnk_cle_id,
8370                                   --Bug# 3502142
8371                                   p_txl_id         => p_txl_id,
8372                                   --Bug# 6344223
8373                                   p_highest_split_comp_amt => l_highest_split_comp_amt);
8374 
8375 
8376             IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
8377                 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
8378             ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
8379                 RAISE OKL_API.G_EXCEPTION_ERROR;
8380             END IF;
8381         END LOOP;
8382         CLOSE l_lnk_asst_csr1;
8383 
8384       END LOOP;
8385     END IF;
8386 
8387      IF NVL(l_split_trx_rec1.split_percent,0) NOT IN (0,OKL_API.G_MISS_NUM) THEN
8388      --split asset component : Process_split_streams to historize for parent line
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.cle_id,
8395                                p_split_factor   => 0,
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 => 'N');
8401 
8402          IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
8403              RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
8404          ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
8405              RAISE OKL_API.G_EXCEPTION_ERROR;
8406          END IF;
8407 
8408          --Bug# 3066375: split streams attached to linked asset lines
8409          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);
8410          LOOP
8411              --Bug# 3502142
8412              FETCH l_lnk_asst_csr1 INTO l_lnk_cle_id, l_lnk_target_cle_id, l_lnk_top_cle_id;
8413              EXIT WHEN l_lnk_asst_csr1%NOTFOUND;
8414              Process_split_streams(p_api_version    => p_api_version,
8415                                    p_init_msg_list  => p_init_msg_list,
8416                                    x_return_status  => x_return_status,
8417                                    x_msg_count      => x_msg_count,
8418                                    x_msg_data       => x_msg_data,
8419                                    p_kle_id         => l_lnk_cle_id,
8420                                    p_split_factor   => 0,
8421                                    p_parent_kle_id  => l_lnk_cle_id,
8422                                    --Bug# 3502142
8423                                    p_txl_id         => p_txl_id,
8424                                    --Bug# 6344223
8425                                    p_highest_split_comp_amt => 'N');
8426 
8427 
8428              IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
8429                  RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
8430              ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
8431                  RAISE OKL_API.G_EXCEPTION_ERROR;
8432              END IF;
8433          END LOOP;
8434          CLOSE l_lnk_asst_csr1;
8435 
8436      ELSE
8437 
8438          --split asset case : get percent for parent split
8439          --
8440          OPEN l_split_trx_csr2 (p_trxLine_id => p_txl_id);
8441          FETCH l_split_trx_csr2 INTO l_split_trx_rec2;
8442          IF l_split_trx_csr2%NOTFOUND THEN
8443              NULL;
8444          ELSE
8445              --split streams for split parent
8446              l_split_factor    := (l_split_trx_rec2.quantity/l_split_trx_rec2.current_units);
8447 
8448              Process_split_streams(p_api_version    => p_api_version,
8449                                    p_init_msg_list  => p_init_msg_list,
8450                                    x_return_status  => x_return_status,
8451                                    x_msg_count      => x_msg_count,
8452                                    x_msg_data       => x_msg_data,
8453                                    p_kle_id         => l_split_trx_rec2.target_cle_id,
8454                                    p_split_factor   => l_split_factor,
8455                                    p_parent_kle_id  => l_split_trx_rec2.cle_id,
8456                                    --Bug# 3502142
8457                                    p_txl_id         => p_txl_id,
8458                                    --Bug# 6344223
8459                                    p_highest_split_comp_amt => 'N');
8460 
8461 
8462              IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
8463                  RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
8464              ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
8465                  RAISE OKL_API.G_EXCEPTION_ERROR;
8466              END IF;
8467 
8468              --Bug# 3066375: split streams attached to linked asset lines
8469              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);
8470              LOOP
8471                  --Bug# 3502142
8472                  FETCH l_lnk_asst_csr2 INTO l_lnk_cle_id, l_lnk_target_cle_id,l_lnk_top_cle_id;
8473                  EXIT WHEN l_lnk_asst_csr2%NOTFOUND;
8474                  Process_split_streams(p_api_version    => p_api_version,
8475                                        p_init_msg_list  => p_init_msg_list,
8476                                        x_return_status  => x_return_status,
8477                                        x_msg_count      => x_msg_count,
8478                                        x_msg_data       => x_msg_data,
8479                                        p_kle_id         => l_lnk_target_cle_id,
8480                                        p_split_factor   => l_split_factor,
8481                                        p_parent_kle_id  => l_lnk_cle_id,
8482                                        --Bug# 3502142
8483                                        p_txl_id         => p_txl_id,
8484                                        --Bug# 6344223
8485                                        p_highest_split_comp_amt => 'N');
8486 
8487                 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
8488                     RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
8489                 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
8490                     RAISE OKL_API.G_EXCEPTION_ERROR;
8491                 END IF;
8492              END LOOP;
8493              CLOSE l_lnk_asst_csr2;
8494 
8495          END IF;
8496          CLOSE l_split_trx_csr2;
8497 
8498          NULL;
8499     END IF;
8500 
8501     EXCEPTION
8502     WHEN OKL_API.G_EXCEPTION_ERROR THEN
8503 
8504     IF l_split_trx_csr1%ISOPEN THEN
8505         CLOSE l_split_trx_csr1;
8506     END IF;
8507 
8508     IF l_split_trx_csr2%ISOPEN THEN
8509         CLOSE l_split_trx_csr2;
8510     END IF;
8511 
8512     WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
8513 
8514     IF l_split_trx_csr1%ISOPEN THEN
8515         CLOSE l_split_trx_csr1;
8516     END IF;
8517 
8518     IF l_split_trx_csr2%ISOPEN THEN
8519         CLOSE l_split_trx_csr2;
8520     END IF;
8521 
8522     IF l_lnk_asst_csr1%ISOPEN THEN
8523         CLOSE l_lnk_asst_csr1;
8524     END IF;
8525 
8526     IF l_lnk_asst_csr2%ISOPEN THEN
8527         CLOSE l_lnk_asst_csr2;
8528     END IF;
8529 
8530     WHEN OTHERS THEN
8531 
8532     IF l_split_trx_csr1%ISOPEN THEN
8533         CLOSE l_split_trx_csr1;
8534     END IF;
8535 
8536     IF l_split_trx_csr2%ISOPEN THEN
8537         CLOSE l_split_trx_csr2;
8538     END IF;
8539 
8540     IF l_lnk_asst_csr1%ISOPEN THEN
8541         CLOSE l_lnk_asst_csr1;
8542     END IF;
8543 
8544     IF l_lnk_asst_csr2%ISOPEN THEN
8545         CLOSE l_lnk_asst_csr2;
8546     END IF;
8547 
8548     x_return_status := OKL_API.G_RET_STS_UNEXP_ERROR;
8549 END Split_Streams;
8550 --Bug #2648280 End
8551 
8552 ---------------
8553 --Bug# 2994971
8554 ---------------
8555   PROCEDURE populate_insurance_category(p_api_version   IN NUMBER,
8556                                         p_init_msg_list IN VARCHAR2 DEFAULT OKL_API.G_FALSE,
8557                                         x_return_status OUT NOCOPY VARCHAR2,
8558                                         x_msg_count     OUT NOCOPY NUMBER,
8559                                         x_msg_data      OUT NOCOPY VARCHAR2,
8560                                         p_cle_id        IN  NUMBER,
8561                                         p_inv_item_id   IN  NUMBER,
8562                                         p_inv_org_id    IN  NUMBER) IS
8563 
8564   l_api_name   CONSTANT VARCHAR2(30) := 'POPULATE_INS_CATEGORY';
8565 
8566   --cursor to get asset category
8567   CURSOR l_msi_csr(p_inv_item_id IN NUMBER,
8568                    p_inv_org_id  IN NUMBER) IS
8569   SELECT msi.asset_category_id
8570   FROM   mtl_system_items msi
8571   WHERE  msi.organization_id   = p_inv_org_id
8572   AND    msi.inventory_item_id = p_inv_item_id;
8573 
8574   l_asset_category_id mtl_system_items.asset_category_id%TYPE DEFAULT NULL;
8575   l_clev_rec  okl_okc_migration_pvt.clev_rec_type;
8576   l_klev_rec  okl_contract_pub.klev_rec_type;
8577   lx_clev_rec  okl_okc_migration_pvt.clev_rec_type;
8578   lx_klev_rec  okl_contract_pub.klev_rec_type;
8579 
8580 
8581   BEGIN
8582 
8583     x_return_status          := OKL_API.G_RET_STS_SUCCESS;
8584     -- Call start_activity to create savepoint, check compatibility
8585     -- and initialize message list
8586     x_return_status := OKL_API.START_ACTIVITY (l_api_name
8587                                                ,p_init_msg_list
8588                                                ,'_PVT'
8589                                                ,x_return_status);
8590     -- Check if activity started successfully
8591     IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
8592        RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
8593     ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
8594        RAISE OKL_API.G_EXCEPTION_ERROR;
8595     END IF;
8596 
8597     --fetch asset category
8598     l_asset_category_id := NULL;
8599     OPEN l_msi_csr (p_inv_item_id => p_inv_item_id,
8600                     p_inv_org_id  => p_inv_org_id);
8601     FETCH l_msi_csr INTO l_asset_category_id;
8602     IF l_msi_csr%NOTFOUND THEN
8603         NULL;
8604     END IF;
8605     CLOSE l_msi_csr;
8606 
8607 
8608     l_clev_rec.id := p_cle_id;
8609     l_klev_rec.id := p_cle_id;
8610     l_klev_rec.item_insurance_category := l_asset_category_id;
8611 
8612     okl_contract_pub.update_contract_line(
8613                          p_api_version   => p_api_version,
8614                          p_init_msg_list => p_init_msg_list,
8615                          x_return_status => x_return_status,
8616                          x_msg_count     => x_msg_count,
8617                          x_msg_data      => x_msg_data,
8618                          p_clev_rec      => l_clev_rec,
8619                          p_klev_rec      => l_klev_rec,
8620                          x_clev_rec      => lx_clev_rec,
8621                          x_klev_rec      => lx_klev_rec
8622                          );
8623 
8624     IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
8625         RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
8626     ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
8627         RAISE OKL_API.G_EXCEPTION_ERROR;
8628     END IF;
8629 
8630     OKL_API.END_ACTIVITY (x_msg_count,
8631                           x_msg_data );
8632   EXCEPTION
8633     WHEN OKL_API.G_EXCEPTION_ERROR THEN
8634     IF l_msi_csr%ISOPEN THEN
8635        CLOSE l_msi_csr;
8636     END IF;
8637     x_return_status := OKL_API.HANDLE_EXCEPTIONS(
8638                                l_api_name,
8639                                G_PKG_NAME,
8640                                'OKL_API.G_RET_STS_ERROR',
8641                                x_msg_count,
8642                                x_msg_data,
8643                                '_PVT');
8644     WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
8645     IF l_msi_csr%ISOPEN THEN
8646        CLOSE l_msi_csr;
8647     END IF;
8648     x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
8649                                l_api_name,
8650                                G_PKG_NAME,
8651                                'OKL_API.G_RET_STS_UNEXP_ERROR',
8652                                x_msg_count,
8653                                x_msg_data,
8654                                '_PVT');
8655     WHEN OTHERS THEN
8656     IF l_msi_csr%ISOPEN THEN
8657        CLOSE l_msi_csr;
8658     END IF;
8659     x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
8660                               l_api_name,
8661                               G_PKG_NAME,
8662                               'OTHERS',
8663                               x_msg_count,
8664                               x_msg_data,
8665                               '_PVT');
8666 END POPULATE_INSURANCE_CATEGORY;
8667 -------------------
8668 --Bug# 2994971
8669 ------------------
8670 --------------------------------------------------------------------------------
8671 --Procedure to adjust the quantities on copied split lines
8672 --modified for Bug# 2648280 - null amounts to remain null on copied lines
8673 --------------------------------------------------------------------------------
8674 PROCEDURE Adjust_Split_Lines(
8675              p_api_version    IN  NUMBER,
8676              p_init_msg_list  IN  VARCHAR2 DEFAULT OKL_API.G_FALSE,
8677              x_return_status  OUT NOCOPY VARCHAR2,
8678              x_msg_count      OUT NOCOPY NUMBER,
8679              x_msg_data       OUT NOCOPY VARCHAR2,
8680              p_cle_id         IN  NUMBER, --id of the new top line after copy or parent top line
8681              p_parent_line_id IN  NUMBER, --parent top line id which is split
8682              p_txdv_rec       IN  txdv_rec_type,
8683              p_txlv_rec       IN  txlv_rec_type,
8684              --Bug# 3502142
8685              p_round_split_comp_amt IN VARCHAR2 DEFAULT 'N') IS
8686 
8687 l_return_status    VARCHAR2(1)  DEFAULT OKL_API.G_RET_STS_SUCCESS;
8688 l_api_name         CONSTANT VARCHAR2(30) := 'ADJUST_SPLIT_LINES';
8689 l_api_version      CONSTANT NUMBER := 1.0;
8690 
8691 l_parent_cost      NUMBER;
8692 l_parent_quantity  NUMBER;
8693 l_child_cost       NUMBER;
8694 l_child_quantity   NUMBER;
8695 l_split_factor     NUMBER;
8696 l_no_data_found    BOOLEAN;
8697 l_cimv_rec         cimv_rec_type;
8698 l_cimv_rec_out     cimv_rec_type;
8699 lupd_cimv_rec      cimv_rec_type;
8700 l_klev_rec         klev_rec_type;
8701 l_klev_rec_out     klev_rec_type;
8702 l_clev_rec         clev_rec_type;
8703 l_clev_rec_out     clev_rec_type;
8704 
8705 
8706 l_lnk_klev_rec klev_rec_type;
8707 l_lnk_clev_rec clev_rec_type;
8708 l_lnk_klev_old_rec klev_rec_type;
8709 l_lnk_clev_old_rec clev_rec_type;
8710 
8711 lx_lnk_klev_rec klev_rec_type;
8712 lx_lnk_clev_rec clev_rec_type;
8713 lx_lnk_klev_old_rec klev_rec_type;
8714 lx_lnk_clev_old_rec clev_rec_type;
8715 
8716 l_lnk_cimv_rec  cimv_rec_type;
8717 lx_lnk_cimv_rec cimv_rec_type;
8718 l_lnk_cimv_old_rec  cimv_rec_type;
8719 lx_lnk_cimv_old_rec cimv_rec_type;
8720 
8721 
8722 CURSOR c_lines(p_cle_id IN NUMBER) IS
8723     SELECT LEVEL,
8724         id,
8725                 chr_id,
8726                 cle_id,
8727                 dnz_chr_id,
8728         lse_id
8729     FROM         okc_k_lines_b
8730     CONNECT BY  PRIOR id = cle_id
8731     START WITH  id = p_cle_id;
8732 
8733 CURSOR c_lty_code(p_lse_id IN NUMBER) IS
8734     SELECT lty_code
8735     FROM   okc_line_styles_b
8736     WHERE  id = p_lse_id;
8737 
8738 --Bug# 3897490 : modified cursor to join to SLH row
8739 --Bug# 3066375 : modified cursor
8740 CURSOR l_sll_cur (p_cle_id IN NUMBER) IS
8741 SELECT rul.id                         sll_id,
8742        rul.jtot_object1_code,
8743        rul.object1_id1,
8744        rul.object1_id2,
8745        rul.jtot_object2_code,
8746        rul.object2_id2,
8747        --nvl(rul.Rule_information6,'0') amount_sll,
8748        rul.Rule_information6           amount_sll,
8749        rul.object2_id1                slh_id,
8750        rul.rule_information1,
8751        rul.rule_information2,
8752        rul.rule_information3,
8753        rul.rule_information4,
8754        rul.rule_information5,
8755        rul.rule_information7,
8756        rul.rule_information8 amount_stub,
8757        rul.rule_information9,
8758        rul.rule_information10,
8759        rul.rule_information11,
8760        rul.rule_information12,
8761        rul.rule_information13,
8762        rul.rule_information14,
8763        rul.rule_information15,
8764        rul_slh.jtot_object1_code strm_type_source,
8765        rul_slh.object1_id1       strm_type_id1,
8766        rul_slh.object1_id2       strm_type_id2,
8767        cleb.currency_code
8768 FROM   okc_rules_b rul,
8769        okc_rule_groups_b rgp,
8770        okc_rules_b rul_slh,
8771        okc_k_lines_b cleb
8772 --Bug# : 3124577 - 11.5.10 : Rule Migration
8773 WHERE  rul.rule_information_category = 'LASLL'
8774 --where  rul.rule_information_category = 'SLL'
8775 AND    rul.rgp_id   = rgp.id
8776 AND    rgp.rgd_code = 'LALEVL'
8777 and    rgp.cle_id   = cleb.id
8778 and    cleb.id      = p_cle_id
8779 AND    rul_slh.id = rul.object2_id1
8780 AND    rul_slh.rgp_id   = rgp.id
8781 AND    rul_slh.rule_information_category = 'LASLH'
8782 ORDER BY rul_slh.object1_id1;
8783 
8784 l_sll_rec l_sll_cur%ROWTYPE;
8785 
8786 --Bug# 3897490: SLH details are now fetched by cursor l_sll_cur
8787 /*--Bug : 3066375
8788 CURSOR l_slh_cur (p_rul_id IN NUMBER) IS
8789 SELECT rul.id                slh_id,
8790        rul.jtot_object1_code strm_type_source,
8791        rul.object1_id1       strm_type_id1,
8792        rul.object1_id2       strm_type_id2
8793 FROM   okc_rules_b rul
8794 WHERE  rul.id = p_rul_id
8795 --Bug# - 3124577: 11.5.10 :---Rule Migration
8796 AND    rul.rule_information_category = 'LASLH';
8797 --And    rul.rule_information_category = 'SLH';
8798 */
8799 
8800 l_slh_rul_id               okc_rules_b.id%TYPE;
8801 l_strm_type_source         okc_rules_b.jtot_object1_code%TYPE;
8802 l_strm_type_id1            okc_rules_b.object1_id1%TYPE;
8803 l_strm_type_id2            okc_rules_b.object1_id2%TYPE;
8804 
8805 
8806 
8807 
8808 --Bug# 2881114 - modified cursor
8809 CURSOR l_lnk_asst_cur (p_cle_id IN NUMBER) IS
8810 SELECT cle.cle_id          srv_fee_line_id,
8811        cle.id              lnk_line_id
8812 FROM   OKC_K_LINES_B       cle,
8813        OKC_LINE_STYLES_B   lse,
8814        OKC_STATUSES_B      sts,
8815        OKC_K_ITEMS         cim,
8816        OKC_K_LINES_B       fin_asst_line
8817 WHERE  cle.lse_id                 = lse.id
8818 AND    lse.lty_code               IN ('LINK_FEE_ASSET','LINK_SERV_ASSET','LINK_USAGE_ASSET')
8819 AND    cle.dnz_chr_id             = fin_asst_line.dnz_chr_id
8820 AND    sts.code = cle.sts_code
8821 AND    sts.ste_code NOT IN ('HOLD','EXPIRED','TERMINATED','CANCELLED')
8822 AND    cim.cle_id      = cle.id
8823 AND    cim.dnz_chr_id  = cle.dnz_chr_id
8824 AND    cim.object1_id1 = TO_CHAR(p_cle_id)
8825 AND    cim.object1_id2 = '#'
8826 AND    cim.jtot_object1_code = 'OKX_COVASST'
8827 AND    cim.dnz_chr_id = fin_asst_line.dnz_chr_id
8828 AND    fin_asst_line.id = p_cle_id;
8829 
8830 l_srv_fee_line_id OKC_K_LINES_B.cle_id%TYPE;
8831 l_lnk_line_id     OKC_K_LINES_B.id%TYPE;
8832 
8833 
8834 l_level         NUMBER;
8835 l_cle_id        NUMBER;
8836 l_chr_id        NUMBER;
8837 l_parent_cle_id NUMBER;
8838 l_dnz_chr_id    NUMBER;
8839 l_lse_id        NUMBER;
8840 l_lty_code      VARCHAR2(30);
8841 l_txdv_rec      txdv_rec_type;
8842 l_txdv_rec_out  txdv_rec_type;
8843 
8844 l_sll_id              OKC_RULES_B.ID%TYPE;
8845 l_amount_sll          OKC_RULES_B.Rule_Information6%TYPE;
8846 l_slh_id              OKC_RULES_B.OBJECT2_ID1%TYPE;
8847 L_UPDATED_SLL_AMOUNT  NUMBER;
8848 --Bug# 2757289 : For Payment stubs
8849 l_updated_stub_amount NUMBER;
8850 
8851 l_rulv_rec      OKL_RULE_PUB.rulv_rec_type;
8852 l_rulv_rec_out  OKL_RULE_PUB.rulv_rec_type;
8853 
8854 --Bug# 3066375:
8855 l_rgpv_rec     OKL_RULE_PUB.rgpv_rec_type;
8856 lx_rgpv_rec    OKL_RULE_PUB.rgpv_rec_type;
8857 
8858 l_sll_rulv_rec   OKL_RULE_PUB.rulv_rec_type;
8859 lx_sll_rulv_rec  OKL_RULE_PUB.rulv_rec_type;
8860 l_slh_rulv_rec   OKL_RULE_PUB.rulv_rec_type;
8861 lx_slh_rulv_rec  OKL_RULE_PUB.rulv_rec_type;
8862 
8863 --Bug#3143522 : Subsidies enhancement
8864 --cursor to fetch associated subsidy details
8865   CURSOR l_sub_csr (p_asset_cle_id IN NUMBER) IS
8866   SELECT
8867        kle_sub.subsidy_id                subsidy_id
8868        ,cleb_sub.id                      subsidy_cle_id
8869        ,clet_sub.name                    name
8870        ,clet_sub.item_description        description
8871        ,kle_sub.amount                   amount
8872        ,kle_sub.subsidy_override_amount  subsidy_override_amount
8873        ,cleb_sub.dnz_chr_id              dnz_chr_id
8874        ,cleb_asst.id                     asset_cle_id
8875        ,cplb.id                          cpl_id
8876        ,pov.vendor_id                    vendor_id
8877        ,pov.vendor_name                  vendor_name
8878        ,clet_asst.name                   asset_number
8879        ,cleb_sub.orig_system_id1         parent_sub_cle_id
8880   FROM
8881       po_vendors          pov,
8882       okc_k_party_roles_b cplb,
8883       okl_k_lines         kle_sub,
8884       okc_k_lines_tl      clet_sub,
8885       okc_k_lines_b       cleb_sub,
8886       okc_line_styles_b   lseb_sub,
8887       okc_k_lines_tl      clet_asst,
8888       okc_k_lines_b       cleb_asst
8889   WHERE
8890       pov.vendor_id              = cplb.object1_id1
8891   AND cplb.object1_id2           = '#'
8892   AND cplb.jtot_object1_code     = 'OKX_VENDOR'
8893   AND cplb.dnz_chr_id            = cleb_sub.dnz_chr_id
8894   AND cplb.cle_id                = cleb_sub.id
8895   AND cplb.chr_id                IS NULL
8896   AND cplb.rle_code              = 'OKL_VENDOR'
8897   AND kle_sub.id                 = cleb_sub.id
8898   AND clet_sub.id                = cleb_sub.id
8899   AND clet_sub.LANGUAGE          = USERENV('LANG')
8900   AND cleb_sub.cle_id            = cleb_asst.id
8901   AND cleb_sub.dnz_chr_id        = cleb_asst.dnz_chr_id
8902   AND cleb_sub.sts_code         <> 'ABANDONED'
8903   AND lseb_sub.id                = cleb_sub.lse_id
8904   AND lseb_sub.lty_code          = 'SUBSIDY'
8905   AND clet_asst.id               = cleb_asst.id
8906   AND clet_asst.LANGUAGE         =USERENV('LANG')
8907   AND cleb_asst.id               = p_asset_cle_id;
8908 
8909   l_sub_rec l_sub_csr%ROWTYPE;
8910 
8911   l_asb_rec okl_asset_subsidy_pvt.asb_rec_type;
8912 
8913 
8914   --cursor to select supplier invoice details to copy
8915   CURSOR l_sid_csr (p_cle_id IN NUMBER) IS
8916   SELECT
8917         sid.ID
8918         ,sid.OBJECT_VERSION_NUMBER
8919         ,sid.CLE_ID
8920         ,sid.FA_CLE_ID
8921         ,sid.INVOICE_NUMBER
8922         ,sid.DATE_INVOICED
8923         ,sid.DATE_DUE
8924         ,sid.SHIPPING_ADDRESS_ID1
8925         ,sid.SHIPPING_ADDRESS_ID2
8926         ,sid.SHIPPING_ADDRESS_CODE
8927         ,sid.ATTRIBUTE_CATEGORY
8928         ,sid.ATTRIBUTE1
8929         ,sid.ATTRIBUTE2
8930         ,sid.ATTRIBUTE3
8931         ,sid.ATTRIBUTE4
8932         ,sid.ATTRIBUTE5
8933         ,sid.ATTRIBUTE6
8934         ,sid.ATTRIBUTE7
8935         ,sid.ATTRIBUTE8
8936         ,sid.ATTRIBUTE9
8937         ,sid.ATTRIBUTE10
8938         ,sid.ATTRIBUTE11
8939         ,sid.ATTRIBUTE12
8940         ,sid.ATTRIBUTE13
8941         ,sid.ATTRIBUTE14
8942         ,sid.ATTRIBUTE15
8943         ,sid.CREATED_BY
8944         ,sid.CREATION_DATE
8945         ,sid.LAST_UPDATED_BY
8946         ,sid.LAST_UPDATE_DATE
8947         ,sid.LAST_UPDATE_LOGIN
8948         ,cleb_fa.id  fixed_asset_cle_id
8949   FROM  okl_supp_invoice_dtls sid,
8950         okc_k_lines_b         cleb_fa,
8951         okc_line_styles_b     lseb_fa,
8952         okc_k_lines_b         cleb
8953   WHERE sid.cle_id         = cleb.orig_system_id1
8954   AND   cleb_fa.cle_id     = cleb.cle_id
8955   AND   cleb_fa.dnz_chr_id = cleb.dnz_chr_id
8956   AND   lseb_fa.id         = cleb_fa.lse_id
8957   AND   lseb_fa.lty_code   = 'FIXED_ASSET'
8958   AND   cleb.id            = p_cle_id;
8959 
8960   l_sid_rec l_sid_csr%ROWTYPE;
8961   l_sidv_rec okl_supp_invoice_dtls_pub.sidv_rec_type;
8962   lx_sidv_rec okl_supp_invoice_dtls_pub.sidv_rec_type;
8963   ----------------
8964   --Bug# 2994971
8965   ---------------
8966   l_inv_item_id   NUMBER;
8967   l_inv_org_id    NUMBER;
8968 
8969   --Bug# 3897490
8970   l_strm_type_id   OKC_RULES_B.OBJECT1_ID1%TYPE;
8971 
8972   --Bug# 3502142
8973   l_rounded_amount NUMBER;
8974 
8975   CURSOR l_txd_csr(p_tal_id IN NUMBER,
8976                    p_cle_id IN NUMBER) IS
8977   SELECT id,
8978          quantity,
8979          split_percent
8980   FROM okl_txd_assets_b txd
8981   WHERE txd.tal_id = p_tal_id
8982   AND NVL(txd.target_kle_id,-1) <> p_cle_id;
8983 
8984   l_sll_amount  NUMBER;
8985   l_stub_amount NUMBER;
8986   l_sll_split_factor NUMBER;
8987   l_split_pymt NUMBER;
8988   l_split_pymt_sum NUMBER;
8989 
8990   CURSOR l_new_lnk_assts_cur (p_chr_id IN NUMBER,
8991                               p_cle_id IN NUMBER) IS
8992   SELECT cle.id
8993   FROM   OKC_K_LINES_B       cle
8994   WHERE  cle.dnz_chr_id      = p_chr_id
8995   AND    cle.orig_system_id1 = p_cle_id;
8996 
8997   l_target_kle_id NUMBER;
8998 
8999   CURSOR l_fa_line_csr(p_chr_id IN NUMBER,
9000                        p_cle_id IN NUMBER) IS
9001   SELECT cle.id
9002   FROM okc_k_lines_b cle,
9003        okc_line_styles_b lse
9004   WHERE cle.cle_id = p_cle_id
9005   AND   cle.dnz_chr_id = p_chr_id
9006   AND   cle.lse_id = lse.id
9007   AND   lse.lty_code = 'FIXED_ASSET';
9008 
9009  -- Bug# 5946411: ER
9010   --cursor to check the status of asset
9011   CURSOR l_cleb_sts_csr(pcleid IN NUMBER) IS
9012   SELECT cleb.sts_code sts_code
9013   FROM   okc_k_lines_b cleb
9014   WHERE  cleb.id = pcleid;
9015   l_cle_status okc_k_lines_b.sts_code%TYPE;
9016   -- Bug# 5946411: ER End
9017 
9018   --Bug# 6344223 : Start
9019    l_fa_line_id NUMBER;
9020   l_klev_round_out     klev_rec_type;
9021   l_clev_round_out     clev_rec_type;
9022   --Bug# 6344223 : end
9023 BEGIN
9024    x_return_status := OKL_API.G_RET_STS_SUCCESS;
9025     -- Call start_activity to create savepoint, check compatibility
9026     -- and initialize message list
9027     x_return_status := OKL_API.START_ACTIVITY (
9028                                l_api_name
9029                                ,p_init_msg_list
9030                                ,'_PVT'
9031                                ,x_return_status);
9032     -- Check if activity started successfully
9033     IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
9034        RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
9035     ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
9036        RAISE OKL_API.G_EXCEPTION_ERROR;
9037     END IF;
9038     IF NVL(p_txdv_rec.split_percent,0)  NOT IN (0,OKL_API.G_MISS_NUM) THEN
9039         l_split_factor := (p_txdv_rec.split_percent/100);
9040     ELSE
9041         --1. By comparing the cost and quantities on txlv record and txdv record find the split factor
9042         l_parent_cost     := p_txlv_rec.depreciation_cost;
9043         l_parent_quantity := p_txlv_rec.current_units;
9044         l_child_cost      := p_txdv_rec.cost;
9045         l_child_quantity  := p_txdv_rec.quantity;
9046         l_split_factor    := p_txdv_rec.quantity/p_txlv_rec.current_units;
9047    END IF;
9048   -- Bug# 5946411: ER
9049    -- get the status of the parent line id
9050     OPEN l_cleb_sts_csr(  p_txlv_rec.kle_id);
9051     FETCH l_cleb_sts_csr INTO l_cle_status;
9052     close l_cleb_sts_csr;
9053     --dbms_output.put_line('Adjust_split_lines--p_txlv_rec.kle_id'||p_txlv_rec.kle_id);
9054     --dbms_output.put_line('Status set as l_cle_status'||l_cle_status);
9055   -- Bug# 5946411: ER End
9056 --2. Select split lines using connect by prior starting with top line (p_clev_id)
9057     OPEN c_lines(p_cle_id);
9058     ---For each line selected in 2
9059     ---2.1 depending on the line style  recalculate the amount and unit fields
9060     ---2.2 Call Update Line API to update the line with recalculated amounts and units
9061     LOOP
9062         FETCH c_lines INTO l_level,
9063                            l_cle_id,
9064                            l_chr_id,
9065                            l_parent_cle_id,
9066                            l_dnz_chr_id,
9067                            l_lse_id;
9068         EXIT WHEN c_lines%NOTFOUND;
9069         OPEN c_lty_code(l_lse_id);
9070         FETCH c_lty_code INTO l_lty_code;
9071         IF c_lty_code%NOTFOUND THEN
9072             --dbms_output.put_line('lty_code not found for lse_id "'||to_char(l_lse_id));
9073             --handle error appropriately
9074             OKL_API.SET_MESSAGE(p_app_name     => g_app_name,
9075                                                 p_msg_name     => G_LTY_CODE_NOT_FOUND
9076                                                );
9077             RAISE OKL_API.G_EXCEPTION_ERROR;
9078         END IF;
9079         CLOSE c_lty_code;
9080 
9081         --Bug# 6344223 : start
9082         IF l_lty_code ='FIXED_ASSET' THEN
9083             l_fa_line_id := l_cle_id;
9084         END IF;
9085         --Bug# 6344223 : End
9086 
9087         --dbms_output.put_line(l_lty_code);
9088         --update transaction details and item links on lines
9089         IF l_lty_code IN ('ITEM','ADD_ITEM','FIXED_ASSET','INST_ITEM','LINK_SERV_ASSET',
9090                           'LINK_FEE_ASSET','LINK_USAGE_ASSET') THEN
9091             l_cimv_rec := get_cimv_rec(p_cle_id => l_cle_id);
9092             IF l_lty_code <> 'INST_ITEM' THEN
9093                 IF NVL(p_txdv_rec.split_percent,0)  NOT IN (0,OKL_API.G_MISS_NUM) THEN
9094                     --number of items will remain same in case of split asset components
9095                     l_cimv_rec.number_of_items := l_cimv_rec.number_of_items;
9096                 ELSE
9097                     l_cimv_rec.number_of_items := (l_split_factor*l_cimv_rec.number_of_items);
9098                 END IF;
9099             END IF;
9100             IF (l_lty_code = 'FIXED_ASSET') AND (NVL(p_txdv_rec.target_kle_id,-99) <> p_txlv_rec.kle_id) THEN
9101                 l_txdv_rec := p_txdv_rec;
9102                 l_txdv_rec.target_kle_id := l_cle_id;
9103                 --update txd record to indicate correct target_kle_id
9104                 --dbms_output.put_line('before updating txd target kle_id :'||to_char(l_cle_id));
9105                 OKL_TXD_ASSETS_PUB.update_txd_asset_def(p_api_version    => p_api_version,
9106                                                         p_init_msg_list  => p_init_msg_list,
9107                                                         x_return_status  => x_return_status,
9108                                                         x_msg_count      => x_msg_count,
9109                                                         x_msg_data       => x_msg_data,
9110                                                         p_adpv_rec       => l_txdv_rec,
9111                                                         x_adpv_rec       => l_txdv_rec_out);
9112                 --dbms_output.put_line('target kle_id :'||l_txdv_rec_out.target_kle_id);
9113                 --dbms_output.put_line('After updating trx details:'||x_return_status);
9114                 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
9115                    RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
9116                 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
9117                    RAISE OKL_API.G_EXCEPTION_ERROR;
9118                 END IF;
9119             END IF;
9120 
9121             --update the number of items on model and fa lines
9122             --Bug#5559502 --Modification Start
9123             --Update number of items for ADDON record in OKC_K_ITEMS table
9124             IF l_lty_code IN ('ADD_ITEM','ITEM','FIXED_ASSET') THEN
9125             --Bug#5559502 --Modification End
9126                 IF (l_cimv_rec.id IS NOT NULL) OR (l_cimv_rec.id <> OKL_API.G_MISS_NUM) THEN
9127                         --dbms_output.put_line('cimv rec id'|| to_char(l_cimv_rec.id));
9128                         lupd_cimv_rec.id              := l_cimv_rec.id;
9129                         --dbms_output.put_line('Split Factor '|| to_char(l_split_factor));
9130                         --dbms_output.put_line('Split Factor '|| to_char(p_txlv_rec.current_units));
9131                         IF NVL(p_txdv_rec.split_percent,0)  NOT IN (0,OKL_API.G_MISS_NUM) THEN
9132                             --number of items will remain same in case of split asset components
9133                             lupd_cimv_rec.number_of_items := p_txlv_rec.current_units;
9134                             --if it is split asset component update the inventory item on model line
9135                             IF l_lty_code = ('ITEM') THEN
9136                                 lupd_cimv_rec.object1_id1       := TO_CHAR(p_txdv_rec.inventory_item_id);
9137                                 --dbms_output.put_line('object1_id1 '||lupd_cimv_rec.object1_id1);
9138                                 lupd_cimv_rec.object1_id2       := l_cimv_rec.object1_id2;
9139                                 --dbms_output.put_line('object1_id2 '||lupd_cimv_rec.object1_id2);
9140                                 lupd_cimv_rec.jtot_object1_code := l_cimv_rec.jtot_object1_code;
9141                                 --dbms_output.put_line('object_code '||lupd_cimv_rec.jtot_object1_code);
9142                                 --dbms_output.put_line('ITEM_ID '||to_char(lupd_cimv_rec.id));
9143 
9144                                 ---------------
9145                                 --Bug# 2994971
9146                                 ---------------
9147                                 IF NVL(lupd_cimv_rec.object1_id1,okl_api.g_miss_char) <> OKL_API.G_MISS_CHAR AND
9148                                    NVL(lupd_cimv_rec.object1_id2,okl_api.g_miss_char) <> OKL_API.G_MISS_CHAR THEN
9149 
9150                                     --Bug# 3438811 :
9151                                     l_inv_item_id  := TO_NUMBER(lupd_cimv_rec.object1_id1);
9152                                     l_inv_org_id   := TO_NUMBER(lupd_cimv_rec.object1_id2);
9153                                     --l_inv_item_id  := to_char(lupd_cimv_rec.object1_id1);
9154                                     --l_inv_org_id   := to_char(lupd_cimv_rec.object1_id2);
9155 
9156                                     populate_insurance_category(p_api_version   => p_api_version,
9157                                        p_init_msg_list => p_init_msg_list,
9158                                        x_return_status => x_return_status,
9159                                        x_msg_count     => x_msg_count,
9160                                        x_msg_data      => x_msg_data,
9161                                        p_cle_id        => l_parent_cle_id,
9162                                        p_inv_item_id   => l_inv_item_id,
9163                                        p_inv_org_id    => l_inv_org_id);
9164                                    IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
9165                                        RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
9166                                    ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
9167                                        RAISE OKL_API.G_EXCEPTION_ERROR;
9168                                    END IF;
9169                                END IF;
9170                                ---------------
9171                                --Bug# 2994971
9172                                ---------------
9173 
9174                             ELSE
9175                                 lupd_cimv_rec.object1_id1       := l_cimv_rec.object1_id1;
9176                                 --dbms_output.put_line('object1_id1 '||lupd_cimv_rec.object1_id1);
9177                                 lupd_cimv_rec.object1_id2       := l_cimv_rec.object1_id2;
9178                                 --dbms_output.put_line('object1_id2 '||lupd_cimv_rec.object1_id2);
9179                                 lupd_cimv_rec.jtot_object1_code := l_cimv_rec.jtot_object1_code;
9180                                 --dbms_output.put_line('object_code '||lupd_cimv_rec.jtot_object1_code);
9181                                 --dbms_output.put_line('ITEM_ID '||to_char(lupd_cimv_rec.id));
9182                             END IF;
9183                         ELSE
9184                             --lupd_cimv_rec.number_of_items := (l_split_factor*nvl(p_txlv_rec.current_units,0));
9185                             --Bug#2761799 - did a round as whole number of units may not be found as split factor
9186                             --is being calculated earlier - so rounding issues
9187                             --lupd_cimv_rec.number_of_items := (l_split_factor*p_txlv_rec.current_units);
9188                             lupd_cimv_rec.number_of_items := ROUND((l_split_factor*p_txlv_rec.current_units));
9189                         END IF;
9190 
9191                             --dbms_output.put_line('Number of items'|| to_char(lupd_cimv_rec.number_of_items));
9192                             --update the item record
9193                         OKL_OKC_MIGRATION_PVT.update_contract_item( p_api_version       => p_api_version,
9194                                                                     p_init_msg_list     => p_init_msg_list,
9195                                                                     x_return_status     => x_return_status,
9196                                                                     x_msg_count     => x_msg_count,
9197                                                                     x_msg_data      => x_msg_data,
9198                                                                     p_cimv_rec      => lupd_cimv_rec,
9199                                                                     x_cimv_rec      => l_cimv_rec_out);
9200                         --dbms_output.put_line('After updating contract item to nulls :'||x_return_status);
9201                         IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
9202                             RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
9203                         ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
9204                             RAISE OKL_API.G_EXCEPTION_ERROR;
9205                         END IF;
9206                      --End If;
9207                 END IF;
9208 
9209          END IF;
9210 
9211 
9212         END IF;
9213 
9214         l_klev_rec := get_klev_rec(p_cle_id => l_cle_id);
9215         l_clev_rec := get_clev_rec(p_cle_id => l_cle_id);
9216 
9217    --Bug# 6344223 : Start
9218      IF (NVL(p_txdv_rec.target_kle_id,-99) = p_txlv_rec.kle_id)
9219         OR p_round_split_comp_amt = 'Y' THEN
9220         --get the rounding logic
9221          get_split_round_amount(
9222                               p_api_version   =>p_api_version
9223                              ,p_init_msg_list =>p_init_msg_list
9224                              ,x_return_status =>x_return_status
9225                              ,x_msg_count     =>x_msg_count
9226                              ,x_msg_data      =>x_msg_data
9227                              ,p_txl_id        =>p_txlv_rec.id
9228                              ,p_split_factor  =>l_split_factor
9229                              ,p_klev_rec      =>l_klev_rec
9230                              ,p_clev_rec      =>l_clev_rec
9231                              ,x_klev_rec      =>l_klev_round_out
9232                              ,x_clev_rec      =>l_clev_round_out
9233                              );
9234           --dbms_output.put_line('After get_split_round_amount :'||x_return_status);
9235 
9236           IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
9237               RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
9238           ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
9239                RAISE OKL_API.G_EXCEPTION_ERROR;
9240           END IF;
9241 
9242           l_klev_rec :=l_klev_round_out;
9243           l_clev_rec :=l_clev_round_out;
9244 
9245      ELSE
9246     --Bug# 6344223 : End
9247         --
9248         l_klev_rec.ESTIMATED_OEC := (l_split_factor * l_klev_rec.ESTIMATED_OEC);
9249         l_klev_rec.LAO_AMOUNT    := (l_split_factor * l_klev_rec.LAO_AMOUNT);
9250         l_klev_rec.FEE_CHARGE    := (l_split_factor * l_klev_rec.FEE_CHARGE);
9251         l_klev_rec.INITIAL_DIRECT_COST := (l_split_factor * l_klev_rec.INITIAL_DIRECT_COST);
9252         l_klev_rec.AMOUNT_STAKE := (l_split_factor * l_klev_rec.AMOUNT_STAKE);
9253         l_klev_rec.LRV_AMOUNT := (l_split_factor * l_klev_rec.LRV_AMOUNT);
9254         l_klev_rec.COVERAGE := (l_split_factor * l_klev_rec.COVERAGE);
9255         l_klev_rec.CAPITAL_REDUCTION := (l_split_factor * l_klev_rec.CAPITAL_REDUCTION);
9256         l_klev_rec.VENDOR_ADVANCE_PAID := (l_split_factor * l_klev_rec.VENDOR_ADVANCE_PAID);
9257         l_klev_rec.TRADEIN_AMOUNT := (l_split_factor * l_klev_rec.TRADEIN_AMOUNT);
9258         l_klev_rec.BOND_EQUIVALENT_YIELD :=  (l_split_factor * l_klev_rec.BOND_EQUIVALENT_YIELD);
9259         l_klev_rec.TERMINATION_PURCHASE_AMOUNT :=(l_split_factor * l_klev_rec.TERMINATION_PURCHASE_AMOUNT);
9260         l_klev_rec.REFINANCE_AMOUNT := (l_split_factor * l_klev_rec.REFINANCE_AMOUNT);
9261         l_klev_rec.REMARKETED_AMOUNT := (l_split_factor * l_klev_rec.REMARKETED_AMOUNT);
9262         l_klev_rec.REMARKET_MARGIN :=  (l_split_factor * l_klev_rec.REMARKET_MARGIN);
9263         l_klev_rec.REPURCHASED_AMOUNT := (l_split_factor * l_klev_rec.REPURCHASED_AMOUNT);
9264         l_klev_rec.RESIDUAL_VALUE := (l_split_factor * l_klev_rec.RESIDUAL_VALUE);
9265         l_klev_rec.APPRAISAL_VALUE := (l_split_factor * l_klev_rec.APPRAISAL_VALUE);
9266         l_klev_rec.GAIN_LOSS := (l_split_factor * l_klev_rec.GAIN_LOSS);
9267         l_klev_rec.FLOOR_AMOUNT := (l_split_factor * l_klev_rec.FLOOR_AMOUNT);
9268         l_klev_rec.TRACKED_RESIDUAL := (l_split_factor * l_klev_rec.TRACKED_RESIDUAL);
9269         l_klev_rec.AMOUNT := (l_split_factor * l_klev_rec.AMOUNT);
9270         l_klev_rec.OEC := (l_split_factor * l_klev_rec.OEC);
9271         l_klev_rec.CAPITAL_AMOUNT := (l_split_factor * l_klev_rec.CAPITAL_AMOUNT);
9272         l_klev_rec.RESIDUAL_GRNTY_AMOUNT := (l_split_factor * l_klev_rec.RESIDUAL_GRNTY_AMOUNT);
9273         l_klev_rec.RVI_PREMIUM := (l_split_factor * l_klev_rec.RVI_PREMIUM);
9274         l_klev_rec.CAPITALIZED_INTEREST := (l_split_factor * l_klev_rec.CAPITALIZED_INTEREST);
9275         --
9276         --Bug#3143522 : Subsidies additional columns
9277         l_klev_rec.SUBSIDY_OVERRIDE_AMOUNT := (l_split_factor * l_klev_rec.SUBSIDY_OVERRIDE_AMOUNT);
9278         --Bug#3143522 : Subsidy additional columns
9279 
9280         --Bug#4631549 :
9281         l_klev_rec.Expected_Asset_Cost := (l_split_factor * l_klev_rec.Expected_Asset_Cost);
9282         --Bug# 4631549
9283 
9284         IF (NVL(p_txdv_rec.target_kle_id,-99) <> p_txlv_rec.kle_id) THEN
9285             l_clev_rec.ORIG_SYSTEM_SOURCE_CODE := 'OKL_SPLIT';
9286         END IF;
9287         --Bug# 5946411: ER
9288         --set the status same as that of the parent line
9289         --l_clev_rec.STS_CODE                := 'BOOKED';
9290         l_clev_rec.STS_CODE:=l_cle_status;
9291          --Bug# 5946411: ER End
9292 
9293         --price unit to be split only for split into components
9294         IF NVL(p_txdv_rec.split_percent,0)  IN (0,OKL_API.G_MISS_NUM)
9295         THEN
9296             NULL;
9297         ELSIF NVL(p_txdv_rec.split_percent,0) NOT IN (0,OKL_API.G_MISS_NUM) THEN
9298             --
9299             l_clev_rec.price_unit              := (l_split_factor * l_clev_rec.price_unit);
9300             l_clev_rec.price_negotiated        := (l_split_factor * l_clev_rec.price_negotiated);
9301             l_clev_rec.price_negotiated_renewed        := (l_split_factor * l_clev_rec.price_negotiated_renewed);
9302 
9303         END IF;
9304      --Bug# 6344223
9305      END IF;
9306         --update asset number on top line
9307         IF l_lty_code IN ('FREE_FORM1','FIXED_ASSET') THEN
9308             l_clev_rec.name             := p_txdv_rec.asset_number;
9309             l_clev_rec.item_description := p_txdv_rec.description;
9310         END IF;
9311 
9312         --Call api to update line
9313         OKL_CONTRACT_PUB.update_contract_line(
9314                          p_api_version    => p_api_version,
9315                          p_init_msg_list  => p_init_msg_list,
9316                          x_return_status  => x_return_status,
9317                          x_msg_count      => x_msg_count,
9318                          x_msg_data       => x_msg_data,
9319                          p_clev_rec       => l_clev_rec,
9320                          p_klev_rec       => l_klev_rec,
9321                          x_clev_rec       => l_clev_rec_out,
9322                          x_klev_rec       => l_klev_rec_out);
9323         --dbms_output.put_line('After updating contract line :'||x_return_status);
9324         IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
9325                 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
9326         ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
9327                 RAISE OKL_API.G_EXCEPTION_ERROR;
9328         END IF;
9329 
9330         -------------------------------------------------------
9331         --Bug# 3143522: subsidies - Validate all associated subsidies
9332         ------------------------------------------------------
9333         IF l_lty_code = 'FREE_FORM1' THEN
9334             --check if any subsidies exist and are valid
9335             OPEN l_sub_csr (p_asset_cle_id => l_cle_id);
9336             LOOP
9337                 FETCH l_sub_csr INTO l_sub_rec;
9338                 EXIT WHEN l_sub_csr%NOTFOUND;
9339                 --check whether subsidy is valid for the asset :
9340                 l_asb_rec.SUBSIDY_ID              :=  l_sub_rec.SUBSIDY_ID;
9341                 l_asb_rec.SUBSIDY_CLE_ID          :=  l_sub_rec.SUBSIDY_CLE_ID;
9342                 l_asb_rec.NAME                    :=  l_sub_rec.NAME;
9343                 l_asb_rec.DESCRIPTION             :=  l_sub_rec.DESCRIPTION;
9344                 l_asb_rec.AMOUNT                  :=  l_sub_rec.AMOUNT;
9345                 l_asb_rec.SUBSIDY_OVERRIDE_AMOUNT :=  l_sub_rec.SUBSIDY_OVERRIDE_AMOUNT;
9346                 l_asb_rec.DNZ_CHR_ID              :=  l_sub_rec.DNZ_CHR_ID;
9347                 l_asb_rec.ASSET_CLE_ID            :=  l_sub_rec.ASSET_CLE_ID;
9348                 l_asb_rec.CPL_ID                  :=  l_sub_rec.CPL_ID;
9349                 l_asb_rec.VENDOR_ID               :=  l_sub_rec.VENDOR_ID;
9350                 l_asb_rec.VENDOR_NAME             :=  l_sub_rec.VENDOR_NAME;
9351 
9352                 --call api to validate asset subsidy
9353                 okl_asset_subsidy_pvt.validate_asset_subsidy(
9354                                       p_api_version    => p_api_version,
9355                                       p_init_msg_list  => p_init_msg_list,
9356                                       x_return_status  => x_return_status,
9357                                       x_msg_count      => x_msg_count,
9358                                       x_msg_data       => x_msg_data,
9359                                       p_asb_rec        => l_asb_rec);
9360 
9361                 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
9362                     RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
9363                 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
9364                     RAISE OKL_API.G_EXCEPTION_ERROR;
9365                 END IF;
9366 
9367                /*------------------Commented as this will be done as part of copy lines now
9368                 ------------------------------------------
9369                 --create party payment details from parent
9370                 ------------------------------------------
9371                  ---------------------------------Commented as this being done in copy lines base proc*/
9372              END LOOP;
9373              CLOSE l_sub_csr;
9374          END IF;
9375          ------------------------------------------------------
9376          --Bug# 3143522 : End Subsidies
9377          ------------------------------------------------------
9378          ------------------------------------------------------
9379          --to_copy supplier invoice details linked to model line
9380          ------------------------------------------------------
9381          IF l_lty_code = 'ITEM' THEN
9382              IF (NVL(p_txdv_rec.target_kle_id,-99) <> p_txlv_rec.kle_id) THEN --is new line
9383                  OPEN l_sid_csr(p_cle_id => l_cle_id);
9384                  FETCH l_sid_csr INTO l_sid_rec;
9385                  IF l_sid_csr%NOTFOUND THEN
9386                     NULL;
9387                  ELSE
9388                      l_sidv_rec.CLE_ID                :=  l_cle_id;
9389                      l_sidv_rec.FA_CLE_ID             :=  l_sid_rec.fixed_asset_cle_id;
9390                      l_sidv_rec.INVOICE_NUMBER        :=  l_sid_rec.invoice_number;
9391                      l_sidv_rec.DATE_INVOICED         :=  l_sid_rec.date_invoiced;
9392                      l_sidv_rec.DATE_DUE              :=  l_sid_rec.date_due;
9393                      l_sidv_rec.SHIPPING_ADDRESS_ID1  :=  l_sid_rec.shipping_address_id1;
9394                      l_sidv_rec.SHIPPING_ADDRESS_ID2  :=  l_sid_rec.shipping_address_id2;
9395                      l_sidv_rec.SHIPPING_ADDRESS_CODE :=  l_sid_rec.shipping_address_code;
9396                      l_sidv_rec.ATTRIBUTE_CATEGORY    :=  l_sid_rec.attribute_category;
9397                      l_sidv_rec.ATTRIBUTE1            :=  l_sid_rec.attribute1;
9398                      l_sidv_rec.ATTRIBUTE2            :=  l_sid_rec.attribute2;
9399                      l_sidv_rec.ATTRIBUTE3            :=  l_sid_rec.attribute3;
9400                      l_sidv_rec.ATTRIBUTE4            :=  l_sid_rec.attribute4;
9401                      l_sidv_rec.ATTRIBUTE5            :=  l_sid_rec.attribute5;
9402                      l_sidv_rec.ATTRIBUTE6            :=  l_sid_rec.attribute6;
9403                      l_sidv_rec.ATTRIBUTE7            :=  l_sid_rec.attribute7;
9404                      l_sidv_rec.ATTRIBUTE8            :=  l_sid_rec.attribute8;
9405                      l_sidv_rec.ATTRIBUTE9            :=  l_sid_rec.attribute9;
9406                      l_sidv_rec.ATTRIBUTE10           :=  l_sid_rec.attribute10;
9407                      l_sidv_rec.ATTRIBUTE11           :=  l_sid_rec.attribute11;
9408                      l_sidv_rec.ATTRIBUTE12           :=  l_sid_rec.attribute12;
9409                      l_sidv_rec.ATTRIBUTE13           :=  l_sid_rec.attribute13;
9410                      l_sidv_rec.ATTRIBUTE14           :=  l_sid_rec.attribute14;
9411                      l_sidv_rec.ATTRIBUTE15           :=  l_sid_rec.attribute15;
9412 
9413                      --------------------------------------------
9414                      --call api to create supplier invoice dtls
9415                      -------------------------------------------
9416                      OKL_SUPP_INVOICE_DTLS_PUB.Create_sup_inv_dtls
9417                                     (p_api_version   => p_api_version,
9418                                      p_init_msg_list => p_init_msg_list,
9419                                      x_return_status => x_return_status,
9420                                      x_msg_count     => x_msg_count,
9421                                      x_msg_data      => x_msg_data,
9422                                      p_sidv_rec      => l_sidv_rec,
9423                                      x_sidv_rec      => lx_sidv_rec);
9424 
9425                     IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
9426                         RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
9427                     ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
9428                         RAISE OKL_API.G_EXCEPTION_ERROR;
9429                     END IF;
9430 
9431                  END IF;
9432              END IF;
9433          END IF;
9434 
9435     END LOOP;
9436     CLOSE c_lines;
9437 
9438     --after completing adjustment on lines
9439     --adjust rule amounts SLL/SLH
9440 
9441     --Bug# 3502142
9442     IF (NVL(p_txdv_rec.target_kle_id,-1) <> p_txlv_rec.kle_id) AND
9443        (p_round_split_comp_amt = 'N') THEN -- child line
9444 
9445       OPEN l_sll_cur(p_cle_id => p_cle_id);
9446       LOOP
9447         l_updated_sll_amount := NULL;
9448         l_updated_stub_amount := NULL;
9449         FETCH l_sll_cur INTO l_sll_rec;
9450         EXIT WHEN l_sll_cur%NOTFOUND;
9451 
9452         l_updated_sll_amount := TO_NUMBER(l_sll_rec.amount_sll)*l_split_factor;
9453         --Bug# 4028371
9454         --Bug# 3502142: Use Streams Rounding Option
9455         okl_accounting_util.round_amount(
9456                                          p_api_version    => p_api_version,
9457                                          p_init_msg_list  => p_init_msg_list,
9458                                          x_return_status  => x_return_status,
9459                                          x_msg_count      => x_msg_count,
9460                                          x_msg_data       => x_msg_data,
9461                                          p_amount         => l_updated_sll_amount,
9462                                          p_currency_code  => l_sll_rec.currency_code,
9463                                          p_round_option   => 'STM',
9464                                          x_rounded_amount => l_rounded_amount
9465                                          );
9466         IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
9467           RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
9468         ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
9469           RAISE OKL_API.G_EXCEPTION_ERROR;
9470         END IF;
9471 
9472         l_updated_sll_amount := l_rounded_amount;
9473 
9474         --Bug# 2757289 :enhancement for stub payments
9475         l_updated_stub_amount := TO_NUMBER(l_sll_rec.amount_stub)*l_split_factor;
9476         --Bug# 4028371
9477         --Bug# 3502142: Use Streams Rounding Option
9478         okl_accounting_util.round_amount(
9479                                          p_api_version    => p_api_version,
9480                                          p_init_msg_list  => p_init_msg_list,
9481                                          x_return_status  => x_return_status,
9482                                          x_msg_count      => x_msg_count,
9483                                          x_msg_data       => x_msg_data,
9484                                          p_amount         => l_updated_stub_amount,
9485                                          p_currency_code  => l_sll_rec.currency_code,
9486                                          p_round_option   => 'STM',
9487                                          x_rounded_amount => l_rounded_amount
9488                                          );
9489         IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
9490           RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
9491         ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
9492           RAISE OKL_API.G_EXCEPTION_ERROR;
9493         END IF;
9494 
9495         l_updated_stub_amount := l_rounded_amount;
9496 
9497         --update the rule record
9498         l_rulv_rec.id                 := l_sll_rec.sll_id;
9499         IF NVL(l_updated_sll_amount,OKL_API.G_MISS_NUM) <> OKL_API.G_MISS_NUM THEN
9500             l_rulv_rec.rule_information6  := l_updated_sll_amount;
9501         ELSIF NVL(l_updated_sll_amount,OKL_API.G_MISS_NUM) = OKL_API.G_MISS_NUM THEN
9502             l_rulv_rec.rule_information6 := NULL;
9503         END IF;
9504         --Bug# 2757289 :enhancement for stub payments
9505         IF NVL(l_updated_stub_amount,OKL_API.G_MISS_NUM) <> OKL_API.G_MISS_NUM THEN
9506             l_rulv_rec.rule_information8  := l_updated_stub_amount;
9507         ELSIF NVL(l_updated_stub_amount,OKL_API.G_MISS_NUM) = OKL_API.G_MISS_NUM THEN
9508             l_rulv_rec.rule_information8 := NULL;
9509         END IF;
9510 
9511         OKL_RULE_PUB.update_rule(
9512                       p_api_version    => p_api_version,
9513                       p_init_msg_list  => p_init_msg_list,
9514                       x_return_status  => x_return_status,
9515                       x_msg_count      => x_msg_count,
9516                       x_msg_data       => x_msg_data,
9517                       p_rulv_rec       => l_rulv_rec,
9518                       x_rulv_rec       => l_rulv_rec_out);
9519         --dbms_output.put_line('After updating payments :'||x_return_status);
9520         IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
9521                 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
9522         ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
9523                 RAISE OKL_API.G_EXCEPTION_ERROR;
9524         END IF;
9525       END LOOP;
9526       CLOSE l_sll_cur;
9527 
9528     ELSE -- parent line
9529 
9530       -- Apply Rounding Difference to
9531       -- Parent Line for Split assets into Units
9532       -- Largest asset cost for Split assets into Components
9533 
9534         OPEN l_sll_cur(p_cle_id => p_cle_id);
9535         LOOP
9536           FETCH l_sll_cur INTO l_sll_rec;
9537           EXIT WHEN l_sll_cur%NOTFOUND;
9538 
9539           l_sll_amount := TO_NUMBER(l_sll_rec.amount_sll);
9540           l_stub_amount := TO_NUMBER(l_sll_rec.amount_stub);
9541 
9542           l_split_pymt_sum := 0;
9543 
9544           -- Split into units
9545           IF NVL(p_txdv_rec.split_percent,0) IN (0,OKL_API.G_MISS_NUM) THEN
9546             l_target_kle_id := p_txlv_rec.kle_id;
9547 
9548           -- Split into components
9549           ELSE
9550             open l_fa_line_csr(p_chr_id => p_txlv_rec.dnz_khr_id
9551                               ,p_cle_id => p_cle_id);
9552             fetch l_fa_line_csr into l_target_kle_id;
9553             close l_fa_line_csr;
9554           END IF;
9555 
9556           FOR l_txd_rec in l_txd_csr(p_tal_id  => p_txlv_rec.id
9557                                     ,p_cle_id  => l_target_kle_id)
9558           LOOP
9559 
9560             IF NVL(p_txdv_rec.split_percent,0) IN (0,OKL_API.G_MISS_NUM) THEN
9561               l_sll_split_factor := l_txd_rec.quantity/p_txlv_rec.current_units;
9562             ELSE
9563               l_sll_split_factor := l_txd_rec.split_percent/100;
9564             END IF;
9565 
9566             IF NVL(l_sll_amount,OKL_API.G_MISS_NUM) <> OKL_API.G_MISS_NUM THEN
9567               l_split_pymt := l_sll_amount * l_sll_split_factor;
9568             ELSIF NVL(l_stub_amount,OKL_API.G_MISS_NUM) <> OKL_API.G_MISS_NUM THEN
9569               l_split_pymt := l_stub_amount * l_sll_split_factor;
9570             END IF;
9571 
9572             okl_accounting_util.round_amount(
9573                                          p_api_version    => p_api_version,
9574                                          p_init_msg_list  => p_init_msg_list,
9575                                          x_return_status  => x_return_status,
9576                                          x_msg_count      => x_msg_count,
9577                                          x_msg_data       => x_msg_data,
9578                                          p_amount         => l_split_pymt,
9579                                          p_currency_code  => l_sll_rec.currency_code,
9580                                          p_round_option   => 'STM',
9581                                          x_rounded_amount => l_rounded_amount
9582                                          );
9583             IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
9584               RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
9585             ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
9586               RAISE OKL_API.G_EXCEPTION_ERROR;
9587             END IF;
9588 
9589             l_split_pymt_sum := l_split_pymt_sum + l_rounded_amount;
9590 
9591           END LOOP;
9592 
9593           --update the rule record
9594           l_rulv_rec.id                 := l_sll_rec.sll_id;
9595           IF NVL(l_sll_amount,OKL_API.G_MISS_NUM) <> OKL_API.G_MISS_NUM THEN
9596             l_rulv_rec.rule_information6  := TO_CHAR(l_sll_amount - l_split_pymt_sum);
9597           ELSIF NVL(l_sll_amount,OKL_API.G_MISS_NUM) = OKL_API.G_MISS_NUM THEN
9598             l_rulv_rec.rule_information6 := NULL;
9599           END IF;
9600           --Bug# 2757289 :enhancement for stub payments
9601           IF NVL(l_stub_amount,OKL_API.G_MISS_NUM) <> OKL_API.G_MISS_NUM THEN
9602             l_rulv_rec.rule_information8  := TO_CHAR(l_stub_amount - l_split_pymt_sum);
9603           ELSIF NVL(l_stub_amount,OKL_API.G_MISS_NUM) = OKL_API.G_MISS_NUM THEN
9604             l_rulv_rec.rule_information8 := NULL;
9605           END IF;
9606 
9607           OKL_RULE_PUB.update_rule(
9608                       p_api_version    => p_api_version,
9609                       p_init_msg_list  => p_init_msg_list,
9610                       x_return_status  => x_return_status,
9611                       x_msg_count      => x_msg_count,
9612                       x_msg_data       => x_msg_data,
9613                       p_rulv_rec       => l_rulv_rec,
9614                       x_rulv_rec       => l_rulv_rec_out);
9615           --dbms_output.put_line('After updating payments :'||x_return_status);
9616           IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
9617                 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
9618           ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
9619                 RAISE OKL_API.G_EXCEPTION_ERROR;
9620           END IF;
9621         END LOOP;
9622         CLOSE l_sll_cur;
9623     END IF;
9624 
9625     --Bug Fix# 2881114 :
9626     --find out if the parent top line is linked to an asset/fee line
9627     -- Bug# 3502142
9628     IF (NVL(p_txdv_rec.target_kle_id,-1) <> p_txlv_rec.kle_id) AND
9629        (p_round_split_comp_amt = 'N') THEN -- it is a child line
9630 
9631         --get if top line is linked to an asset
9632         OPEN l_lnk_asst_cur (p_cle_id => p_parent_line_id);
9633         LOOP
9634             FETCH l_lnk_asst_cur INTO
9635                   l_srv_fee_line_id,
9636                   l_lnk_line_id;
9637             EXIT WHEN l_lnk_asst_cur%NOTFOUND;
9638             --create new linked line and update old line
9639             l_lnk_klev_rec := get_klev_rec(p_cle_id        => l_lnk_line_id,
9640                                            x_no_data_found => l_no_data_found);
9641             IF l_no_data_found THEN
9642                 NULL;
9643                 --raise appropriate error
9644             ELSE
9645             --End If;
9646                 l_lnk_klev_old_rec := l_lnk_klev_rec;
9647 
9648                 l_lnk_clev_rec := get_clev_rec(p_cle_id        => l_lnk_line_id,
9649                                                x_no_data_found => l_no_data_found);
9650                 IF l_no_data_found THEN
9651                     NULL;
9652                     --raise appropriate error
9653                 ELSE
9654                 --End If;
9655                     l_lnk_clev_old_rec := l_lnk_clev_rec;
9656                     --adjusted entries
9657                     --
9658                     l_lnk_klev_rec.ESTIMATED_OEC := (l_split_factor * l_lnk_klev_rec.ESTIMATED_OEC);
9659                     l_lnk_klev_rec.LAO_AMOUNT    := (l_split_factor * l_lnk_klev_rec.LAO_AMOUNT);
9660                     l_lnk_klev_rec.FEE_CHARGE    := (l_split_factor * l_lnk_klev_rec.FEE_CHARGE);
9661                     l_lnk_klev_rec.INITIAL_DIRECT_COST := (l_split_factor * l_lnk_klev_rec.INITIAL_DIRECT_COST);
9662                     l_lnk_klev_rec.AMOUNT_STAKE := (l_split_factor * l_lnk_klev_rec.AMOUNT_STAKE);
9663                     l_lnk_klev_rec.LRV_AMOUNT := (l_split_factor * l_lnk_klev_rec.LRV_AMOUNT);
9664                     l_lnk_klev_rec.COVERAGE := (l_split_factor * l_lnk_klev_rec.COVERAGE);
9665                     l_lnk_klev_rec.CAPITAL_REDUCTION := (l_split_factor * l_lnk_klev_rec.CAPITAL_REDUCTION);
9666                     l_lnk_klev_rec.VENDOR_ADVANCE_PAID := (l_split_factor * l_lnk_klev_rec.VENDOR_ADVANCE_PAID);
9667                     l_lnk_klev_rec.TRADEIN_AMOUNT := (l_split_factor * l_lnk_klev_rec.TRADEIN_AMOUNT);
9668                     l_lnk_klev_rec.BOND_EQUIVALENT_YIELD :=  (l_split_factor * l_lnk_klev_rec.BOND_EQUIVALENT_YIELD);
9669                     l_lnk_klev_rec.TERMINATION_PURCHASE_AMOUNT :=(l_split_factor * l_lnk_klev_rec.TERMINATION_PURCHASE_AMOUNT);
9670                     l_lnk_klev_rec.REFINANCE_AMOUNT := (l_split_factor * l_lnk_klev_rec.REFINANCE_AMOUNT);
9671                     l_lnk_klev_rec.REMARKETED_AMOUNT := (l_split_factor * l_lnk_klev_rec.REMARKETED_AMOUNT);
9672                     l_lnk_klev_rec.REMARKET_MARGIN :=  (l_split_factor * l_lnk_klev_rec.REMARKET_MARGIN);
9673                     l_lnk_klev_rec.REPURCHASED_AMOUNT := (l_split_factor * l_lnk_klev_rec.REPURCHASED_AMOUNT);
9674                     l_lnk_klev_rec.RESIDUAL_VALUE := (l_split_factor * l_lnk_klev_rec.RESIDUAL_VALUE);
9675                     l_lnk_klev_rec.APPRAISAL_VALUE := (l_split_factor * l_lnk_klev_rec.APPRAISAL_VALUE);
9676                     l_lnk_klev_rec.GAIN_LOSS := (l_split_factor * l_lnk_klev_rec.GAIN_LOSS);
9677                     l_lnk_klev_rec.FLOOR_AMOUNT := (l_split_factor * l_lnk_klev_rec.FLOOR_AMOUNT);
9678                     l_lnk_klev_rec.TRACKED_RESIDUAL := (l_split_factor * l_lnk_klev_rec.TRACKED_RESIDUAL);
9679                     l_lnk_klev_rec.AMOUNT := (l_split_factor * l_lnk_klev_rec.AMOUNT);
9680                     l_lnk_klev_rec.OEC := (l_split_factor * l_lnk_klev_rec.OEC);
9681                     l_lnk_klev_rec.CAPITAL_AMOUNT := (l_split_factor * l_lnk_klev_rec.CAPITAL_AMOUNT);
9682                     l_lnk_klev_rec.RESIDUAL_GRNTY_AMOUNT := (l_split_factor * l_lnk_klev_rec.RESIDUAL_GRNTY_AMOUNT);
9683                     l_lnk_klev_rec.RVI_PREMIUM := (l_split_factor * l_lnk_klev_rec.RVI_PREMIUM);
9684                     --
9685                     --Bug# 3143522 : Subsidy New Columns
9686                     ---
9687                     l_lnk_klev_rec.SUBSIDY_OVERRIDE_AMOUNT := (l_split_factor * l_lnk_klev_rec.SUBSIDY_OVERRIDE_AMOUNT);
9688                     --
9689                     --price unit to be split only for split into components
9690                     --old record to be adjusted only for normal split asset
9691                     IF NVL(p_txdv_rec.split_percent,0)  IN (0,OKL_API.G_MISS_NUM)
9692                     THEN
9693                         NULL;
9694                     ELSIF NVL(p_txdv_rec.split_percent,0) NOT IN (0,OKL_API.G_MISS_NUM) THEN
9695                         --
9696                         l_lnk_clev_rec.price_unit := (l_split_factor * l_lnk_clev_rec.price_unit);
9697                         l_lnk_clev_rec.price_negotiated := (l_split_factor * l_lnk_clev_rec.price_negotiated);
9698                         l_lnk_clev_rec.price_negotiated_renewed := (l_split_factor * l_lnk_clev_rec.price_negotiated_renewed);
9699                         --make the old line as 'ABANDONED'
9700                         --l_lnk_clev_old_rec.sts_code := 'ABANDONED';
9701                     END IF;
9702                     l_lnk_clev_rec.ORIG_SYSTEM_ID1       := l_lnk_clev_rec.ID;
9703                     l_lnk_clev_rec.ID                    := OKL_API.G_MISS_NUM;
9704                     l_lnk_clev_rec.OBJECT_VERSION_NUMBER := OKL_API.G_MISS_NUM;
9705                     l_lnk_clev_rec.SFWT_FLAG             := OKL_API.G_MISS_CHAR;
9706                     l_lnk_clev_rec.LINE_NUMBER           := OKL_API.G_MISS_NUM;
9707                     l_lnk_clev_rec.DISPLAY_SEQUENCE      := l_clev_rec.DISPLAY_SEQUENCE + 1;
9708                     --l_lnk_clev_rec.START_DATE            :=  sysdate;
9709                     --l_clev_rec.END_DATE         :=
9710                     l_lnk_clev_rec.ORIG_SYSTEM_SOURCE_CODE := 'OKL_SPLIT';
9711                     l_lnk_clev_rec.CREATED_BY        := OKL_API.G_MISS_NUM;
9712                     l_lnk_clev_rec.CREATION_DATE     := OKL_API.G_MISS_DATE;
9713                     l_lnk_clev_rec.LAST_UPDATED_BY   := OKL_API.G_MISS_NUM;
9714                     l_lnk_clev_rec.LAST_UPDATE_DATE  := OKL_API.G_MISS_DATE;
9715                     l_lnk_clev_rec.LAST_UPDATE_LOGIN := OKL_API.G_MISS_NUM;
9716                      --Bug# 5946411: ER
9717                     --set the status same as that of the parent line
9718                     --make new line as BOOKED
9719                     --l_lnk_clev_rec.STS_CODE          := 'BOOKED';
9720                     l_lnk_clev_rec.STS_CODE :=l_cle_status;
9721                     --dbms_output.put_line('Status set as l_lnk_clev_rec'||l_lnk_clev_rec.STS_CODE);
9722                      --Bug# 5946411: ER End
9723                     --bug# 3066375
9724                     l_lnk_clev_rec.name              := l_txdv_rec.asset_number;
9725                     l_lnk_clev_rec.item_description  := l_txdv_rec.description;
9726                     ----
9727                     l_lnk_klev_rec.ID := OKL_API.G_MISS_NUM;
9728                     l_lnk_klev_rec.OBJECT_VERSION_NUMBER := OKL_API.G_MISS_NUM;
9729                     l_lnk_klev_rec.CREATED_BY := OKL_API.G_MISS_NUM;
9730                     l_lnk_klev_rec.CREATION_DATE := OKL_API.G_MISS_DATE;
9731                     l_klev_rec.LAST_UPDATED_BY := OKL_API.G_MISS_NUM;
9732                     l_klev_rec.LAST_UPDATE_DATE := OKL_API.G_MISS_DATE;
9733                     l_klev_rec.LAST_UPDATE_LOGIN := OKL_API.G_MISS_NUM;
9734 
9735 
9736                     OKL_CONTRACT_PUB.create_contract_line(
9737                          p_api_version    => p_api_version,
9738                          p_init_msg_list  => p_init_msg_list,
9739                          x_return_status  => x_return_status,
9740                          x_msg_count      => x_msg_count,
9741                          x_msg_data       => x_msg_data,
9742                          p_clev_rec       => l_lnk_clev_rec,
9743                          p_klev_rec       => l_lnk_klev_rec,
9744                          x_clev_rec       => lx_lnk_clev_rec,
9745                          x_klev_rec       => lx_lnk_klev_rec);
9746                     --dbms_output.put_line('After creating service fee link line :'||x_return_status);
9747                     IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
9748                         RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
9749                     ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
9750                         RAISE OKL_API.G_EXCEPTION_ERROR;
9751                     END IF;
9752 
9753                     l_lnk_cimv_rec := get_cimv_rec(p_cle_id => l_lnk_line_id, x_no_data_found => l_no_data_found);
9754 
9755                     IF l_no_data_found THEN
9756                         NULL;
9757                     --raise appropriate error
9758                     ELSE
9759                     --End If;
9760                         l_lnk_cimv_old_rec := l_lnk_cimv_rec;
9761                         l_lnk_cimv_rec.ID                         := OKL_API.G_MISS_NUM;
9762                         l_lnk_cimv_rec.OBJECT_VERSION_NUMBER      := OKL_API.G_MISS_NUM;
9763                         l_lnk_cimv_rec.OBJECT1_ID1                := TO_CHAR(p_cle_id);
9764                         l_lnk_cimv_rec.CLE_ID                     := lx_lnk_clev_rec.id;
9765 
9766                         IF NVL(p_txdv_rec.split_percent,0)  NOT IN (0,OKL_API.G_MISS_NUM) THEN
9767                             --number of items will remain same in case of split asset components
9768                             l_lnk_cimv_rec.NUMBER_OF_ITEMS        := l_lnk_cimv_rec.NUMBER_OF_ITEMS;
9769                         ELSE
9770                              --number of items will be split in case of normal split asset
9771                             l_lnk_cimv_rec.NUMBER_OF_ITEMS        := l_lnk_cimv_rec.NUMBER_OF_ITEMS * l_split_factor;
9772                         END IF;
9773 
9774                         l_lnk_cimv_rec.CREATED_BY                 := OKL_API.G_MISS_NUM;
9775                         l_lnk_cimv_rec.CREATION_DATE              := OKL_API.G_MISS_DATE;
9776                         l_lnk_cimv_rec.LAST_UPDATED_BY            := OKL_API.G_MISS_NUM;
9777                         l_lnk_cimv_rec.LAST_UPDATE_DATE           := OKL_API.G_MISS_DATE;
9778                         l_lnk_cimv_rec.LAST_UPDATE_LOGIN          := OKL_API.G_MISS_NUM;
9779 
9780                         OKL_OKC_MIGRATION_PVT.create_contract_item( p_api_version       => p_api_version,
9781                                                        p_init_msg_list  => p_init_msg_list,
9782                                                        x_return_status  => x_return_status,
9783                                                        x_msg_count          => x_msg_count,
9784                                                        x_msg_data           => x_msg_data,
9785                                                        p_cimv_rec           => l_lnk_cimv_rec,
9786                                                        x_cimv_rec           => lx_lnk_cimv_rec);
9787 
9788                         IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
9789                             RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
9790                         ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
9791                             RAISE OKL_API.G_EXCEPTION_ERROR;
9792                         END IF;
9793 
9794                    END IF;
9795                END IF;
9796           END IF;
9797 
9798           --Bug#3066375 : Split the payments attached to the covered asset line
9799           --adjust rule amounts SLL/SLH
9800           --Bug# 3897490 : Fix creation of SLH and SLL lines when more than one
9801           --payment types are defined at service subline level
9802           l_strm_type_id := NULL;
9803           OPEN l_sll_cur(p_cle_id =>  l_lnk_line_id);
9804           LOOP
9805               l_updated_sll_amount := NULL;
9806               --Bug# 275289 : For stub payments
9807               l_updated_stub_amount := NULL;
9808               FETCH l_sll_cur INTO l_sll_rec;
9809               EXIT WHEN l_sll_cur%NOTFOUND;
9810 
9811               -------------------------------------------------------------
9812               --create LALEVL,SLH and SLL against new linked asset line :
9813               --30-oct-03: 3143522 - LALEVL to be created only once
9814               IF l_sll_cur%RowCount = 1 THEN
9815                   l_rgpv_rec.rgd_code      :=  'LALEVL';
9816                   l_rgpv_rec.cle_id        :=  lx_lnk_clev_rec.id;
9817                   l_rgpv_rec.dnz_chr_id    :=  lx_lnk_clev_rec.dnz_chr_id;
9818                   l_rgpv_rec.rgp_type      :=  'KRG';
9819 
9820                   OKL_RULE_PUB.create_rule_group(
9821                    p_api_version                =>  p_api_version,
9822                    p_init_msg_list              =>  p_init_msg_list,
9823                    x_return_status              =>  x_return_status,
9824                    x_msg_count                  =>  x_msg_count,
9825                    x_msg_data                   =>  x_msg_data,
9826                    p_rgpv_rec                   =>  l_rgpv_rec,
9827                    x_rgpv_rec                   =>  lx_rgpv_rec);
9828 
9829                    --dbms_output.put_line('After updating payments :'||x_return_status);
9830                    IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
9831                        RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
9832                    ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
9833                        RAISE OKL_API.G_EXCEPTION_ERROR;
9834                    END IF;
9835                END IF;
9836 
9837                   --Bug# 3897490
9838                   IF (l_strm_type_id IS NULL OR l_strm_type_id <> l_sll_rec.strm_type_id1) THEN
9839                   --30-oct-03  : 3143522 - SLH should be created only once
9840 
9841                       --create slh
9842                       l_slh_rulv_rec.rgp_id                    := lx_rgpv_rec.id;
9843                       l_slh_rulv_rec.rule_information_category := 'LASLH';
9844                       l_slh_rulv_rec.jtot_object1_code         := l_sll_rec.strm_type_source;
9845                       l_slh_rulv_rec.object1_id1               := l_sll_rec.strm_type_id1;
9846                       l_slh_rulv_rec.object1_id2               := l_sll_rec.strm_type_id2;
9847                       l_slh_rulv_rec.dnz_chr_id                := lx_rgpv_rec.dnz_chr_id;
9848                       l_slh_rulv_rec.std_template_yn           := 'N';
9849                       l_slh_rulv_rec.warn_yn                   := 'N';
9850                       l_slh_rulv_rec.template_yn               := 'N';
9851 
9852                       OKL_RULE_PUB.create_rule(
9853                           p_api_version         => p_api_version,
9854                           p_init_msg_list       => p_init_msg_list,
9855                           x_return_status       => x_return_status,
9856                           x_msg_count           => x_msg_count,
9857                           x_msg_data            => x_msg_data,
9858                           p_rulv_rec            => l_slh_rulv_rec,
9859                           x_rulv_rec            => lx_slh_rulv_rec);
9860 
9861                       --dbms_output.put_line('After updating payments :'||x_return_status);
9862                       IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
9863                           RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
9864                       ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
9865                           RAISE OKL_API.G_EXCEPTION_ERROR;
9866                       END IF;
9867 
9868                       --Bug# 3897490
9869                       l_strm_type_id := l_sll_rec.strm_type_id1;
9870                   END IF;
9871 
9872                   --create sll
9873                   l_sll_rulv_rec.dnz_chr_id                := lx_rgpv_rec.dnz_chr_id;
9874                   l_sll_rulv_rec.rgp_id                    := lx_rgpv_rec.id;
9875                   l_sll_rulv_rec.std_template_yn           := lx_slh_rulv_rec.std_template_yn;
9876                   l_sll_rulv_rec.warn_yn                   := lx_slh_rulv_rec.warn_yn;
9877                   l_sll_rulv_rec.template_yn               := lx_slh_rulv_rec.template_yn;
9878                   l_sll_rulv_rec.rule_information_category := 'LASLL';
9879                   l_sll_rulv_rec.jtot_object1_code         := l_sll_rec.jtot_object1_code;
9880                   l_sll_rulv_rec.object1_id1               := l_sll_rec.object1_id1;
9881                   l_sll_rulv_rec.object1_id2               := l_sll_Rec.object1_id2;
9882                   l_sll_rulv_rec.jtot_object2_code         := l_sll_rec.jtot_object2_code;
9883                   l_sll_rulv_rec.object2_id1               := lx_slh_rulv_rec.id;
9884     -- ansethur 28-feb-08 bug # 6697542
9885                   l_sll_rulv_rec.object2_id2               :=  '#' ; -- l_sll_rec.object2_id2;
9886     -- ansethur 28-feb-08 bug # 6697542
9887                   l_sll_rulv_rec.rule_information1         := l_sll_rec.rule_information1;
9888                   l_sll_rulv_rec.rule_information2         := l_sll_rec.rule_information2;
9889                   l_sll_rulv_rec.rule_information3         := l_sll_rec.rule_information3;
9890                   l_sll_rulv_rec.rule_information4         := l_sll_rec.rule_information4;
9891                   l_sll_rulv_rec.rule_information5         := l_sll_rec.rule_information5;
9892                   IF NVL(TO_NUMBER(l_sll_rec.amount_sll)*l_split_factor,OKL_API.G_MISS_NUM) <> OKL_API.G_MISS_NUM THEN
9893 
9894                       --Bug# 4028371
9895                       --Bug# 3502142: Use Streams Rounding Option
9896                       l_updated_sll_amount := TO_NUMBER(l_sll_rec.amount_sll)*l_split_factor;
9897                       okl_accounting_util.round_amount(
9898                                          p_api_version    => p_api_version,
9899                                          p_init_msg_list  => p_init_msg_list,
9900                                          x_return_status  => x_return_status,
9901                                          x_msg_count      => x_msg_count,
9902                                          x_msg_data       => x_msg_data,
9903                                          p_amount         => l_updated_sll_amount,
9904                                          p_currency_code  => l_sll_rec.currency_code,
9905                                          p_round_option   => 'STM',
9906                                          x_rounded_amount => l_rounded_amount
9907                                          );
9908                       IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
9909                         RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
9910                       ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
9911                         RAISE OKL_API.G_EXCEPTION_ERROR;
9912                       END IF;
9913 
9914                       l_updated_sll_amount := l_rounded_amount;
9915                       l_sll_rulv_rec.rule_information6         := l_updated_sll_amount;
9916 
9917                   ELSIF NVL(TO_NUMBER(l_sll_rec.amount_sll)*l_split_factor,OKL_API.G_MISS_NUM) = OKL_API.G_MISS_NUM THEN
9918                       l_sll_rulv_rec.rule_information6 := NULL;
9919                   END IF;
9920                   l_sll_rulv_rec.rule_information7         := l_sll_rec.rule_information7;
9921                   --Bug# 2757289 : For stup payments
9922                   IF NVL(TO_NUMBER(l_sll_rec.amount_stub)*l_split_factor,OKL_API.G_MISS_NUM) <> OKL_API.G_MISS_NUM THEN
9923 
9924                       --Bug# 4028371
9925                       --Bug# 3502142: Use Streams Rounding Option
9926                       l_updated_stub_amount := TO_NUMBER(l_sll_rec.amount_stub)*l_split_factor;
9927                       okl_accounting_util.round_amount(
9928                                          p_api_version    => p_api_version,
9929                                          p_init_msg_list  => p_init_msg_list,
9930                                          x_return_status  => x_return_status,
9931                                          x_msg_count      => x_msg_count,
9932                                          x_msg_data       => x_msg_data,
9933                                          p_amount         => l_updated_stub_amount,
9934                                          p_currency_code  => l_sll_rec.currency_code,
9935                                          p_round_option   => 'STM',
9936                                          x_rounded_amount => l_rounded_amount
9937                                          );
9938                       IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
9939                         RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
9940                       ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
9941                         RAISE OKL_API.G_EXCEPTION_ERROR;
9942                       END IF;
9943 
9944                       l_updated_stub_amount := l_rounded_amount;
9945                       l_sll_rulv_rec.rule_information8         := l_updated_stub_amount;
9946 
9947                   ELSIF NVL(TO_NUMBER(l_sll_rec.amount_stub)*l_split_factor,OKL_API.G_MISS_NUM) = OKL_API.G_MISS_NUM THEN
9948                       l_sll_rulv_rec.rule_information8 := NULL;
9949                   END IF;
9950                   --l_sll_rulv_rec.rule_information8         := l_sll_rec.rule_information8;
9951                   l_sll_rulv_rec.rule_information9         := l_sll_rec.rule_information9;
9952                   l_sll_rulv_rec.rule_information10        := l_sll_rec.rule_information10;
9953                   l_sll_rulv_rec.rule_information11        := l_sll_rec.rule_information11;
9954                   l_sll_rulv_rec.rule_information12        := l_sll_rec.rule_information12;
9955                   l_sll_rulv_rec.rule_information13        := l_sll_rec.rule_information13;
9956                   l_sll_rulv_rec.rule_information14        := l_sll_rec.rule_information14;
9957                   l_sll_rulv_rec.rule_information15        := l_sll_rec.rule_information15;
9958 
9959                   OKL_RULE_PUB.create_rule(
9960                       p_api_version         => p_api_version,
9961                       p_init_msg_list       => p_init_msg_list,
9962                       x_return_status       => x_return_status,
9963                       x_msg_count           => x_msg_count,
9964                       x_msg_data            => x_msg_data,
9965                       p_rulv_rec            => l_sll_rulv_rec,
9966                       x_rulv_rec            => lx_sll_rulv_rec);
9967 
9968                   --dbms_output.put_line('After updating payments :'||x_return_status);
9969                   IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
9970                       RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
9971                   ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
9972                       RAISE OKL_API.G_EXCEPTION_ERROR;
9973                   END IF;
9974 
9975               ------------------------------------------------------------------------
9976 
9977           END LOOP;
9978           CLOSE l_sll_cur;
9979           --End Bug# 3066375
9980 
9981     END LOOP;
9982     CLOSE l_lnk_asst_cur;
9983 
9984     --Bug# 3502142
9985     ELSE -- Parent line
9986 
9987       -- For Split Asset into Units, Update Parent linked asset
9988       --  line after all child linked lines have been created
9989 
9990       -- For Split Asset into Components, create linked asset
9991       -- line for largest asset cost after all other child linked lines
9992       -- have been created
9993 
9994         OPEN l_lnk_asst_cur (p_cle_id => p_parent_line_id);
9995         LOOP
9996             FETCH l_lnk_asst_cur INTO
9997                   l_srv_fee_line_id,
9998                   l_lnk_line_id;
9999             EXIT WHEN l_lnk_asst_cur%NOTFOUND;
10000 
10001             l_lnk_klev_rec := get_klev_rec(p_cle_id        => l_lnk_line_id,
10002                                            x_no_data_found => l_no_data_found);
10003             IF l_no_data_found THEN
10004                 NULL;
10005                 --raise appropriate error
10006             ELSE
10007                 l_lnk_klev_old_rec := l_lnk_klev_rec;
10008 
10009                 l_lnk_clev_rec := get_clev_rec(p_cle_id        => l_lnk_line_id,
10010                                                x_no_data_found => l_no_data_found);
10011                 IF l_no_data_found THEN
10012                   NULL;
10013                   --raise appropriate error
10014                 ELSE
10015                   l_lnk_clev_old_rec := l_lnk_clev_rec;
10016 
10017                   FOR l_new_lnk_assts_rec in l_new_lnk_assts_cur
10018                                              (p_chr_id => l_lnk_clev_old_rec.dnz_chr_id,
10019                                               p_cle_id => l_lnk_line_id) LOOP
10020 
10021                       l_lnk_klev_rec := get_klev_rec(p_cle_id        => l_new_lnk_assts_rec.id,
10022                                                      x_no_data_found => l_no_data_found);
10023                       IF l_no_data_found THEN
10024                           NULL;
10025                           --raise appropriate error
10026                       ELSE
10027                         l_lnk_klev_old_rec.ESTIMATED_OEC := l_lnk_klev_old_rec.ESTIMATED_OEC - l_lnk_klev_rec.ESTIMATED_OEC;
10028                         l_lnk_klev_old_rec.LAO_AMOUNT    := l_lnk_klev_old_rec.LAO_AMOUNT - l_lnk_klev_rec.LAO_AMOUNT;
10029                         l_lnk_klev_old_rec.FEE_CHARGE    :=  l_lnk_klev_old_rec.FEE_CHARGE - l_lnk_klev_rec.FEE_CHARGE;
10030                         l_lnk_klev_old_rec.INITIAL_DIRECT_COST := l_lnk_klev_old_rec.INITIAL_DIRECT_COST - l_lnk_klev_rec.INITIAL_DIRECT_COST;
10031                         l_lnk_klev_old_rec.AMOUNT_STAKE :=  l_lnk_klev_old_rec.AMOUNT_STAKE - l_lnk_klev_rec.AMOUNT_STAKE;
10032                         l_lnk_klev_old_rec.LRV_AMOUNT := l_lnk_klev_old_rec.LRV_AMOUNT - l_lnk_klev_rec.LRV_AMOUNT;
10033                         l_lnk_klev_old_rec.COVERAGE := l_lnk_klev_old_rec.COVERAGE - l_lnk_klev_rec.COVERAGE;
10034                         l_lnk_klev_old_rec.CAPITAL_REDUCTION := l_lnk_klev_old_rec.CAPITAL_REDUCTION - l_lnk_klev_rec.CAPITAL_REDUCTION;
10035                         l_lnk_klev_old_rec.VENDOR_ADVANCE_PAID := l_lnk_klev_old_rec.VENDOR_ADVANCE_PAID - l_lnk_klev_rec.VENDOR_ADVANCE_PAID;
10036                         l_lnk_klev_old_rec.TRADEIN_AMOUNT := l_lnk_klev_old_rec.TRADEIN_AMOUNT - l_lnk_klev_rec.TRADEIN_AMOUNT;
10037                         l_lnk_klev_old_rec.BOND_EQUIVALENT_YIELD :=  l_lnk_klev_old_rec.BOND_EQUIVALENT_YIELD - l_lnk_klev_rec.BOND_EQUIVALENT_YIELD;
10038                         l_lnk_klev_old_rec.TERMINATION_PURCHASE_AMOUNT :=l_lnk_klev_old_rec.TERMINATION_PURCHASE_AMOUNT - l_lnk_klev_rec.TERMINATION_PURCHASE_AMOUNT;
10039                         l_lnk_klev_old_rec.REFINANCE_AMOUNT := l_lnk_klev_old_rec.REFINANCE_AMOUNT - l_lnk_klev_rec.REFINANCE_AMOUNT;
10040                         l_lnk_klev_old_rec.REMARKETED_AMOUNT := l_lnk_klev_old_rec.REMARKETED_AMOUNT - l_lnk_klev_rec.REMARKETED_AMOUNT;
10041                         l_lnk_klev_old_rec.REMARKET_MARGIN :=  l_lnk_klev_old_rec.REMARKET_MARGIN - l_lnk_klev_rec.REMARKET_MARGIN;
10042                         l_lnk_klev_old_rec.REPURCHASED_AMOUNT := l_lnk_klev_old_rec.REPURCHASED_AMOUNT - l_lnk_klev_rec.REPURCHASED_AMOUNT;
10043                         l_lnk_klev_old_rec.RESIDUAL_VALUE := l_lnk_klev_old_rec.RESIDUAL_VALUE - l_lnk_klev_rec.RESIDUAL_VALUE;
10044                         l_lnk_klev_old_rec.APPRAISAL_VALUE := l_lnk_klev_old_rec.APPRAISAL_VALUE - l_lnk_klev_rec.APPRAISAL_VALUE;
10045                         l_lnk_klev_old_rec.GAIN_LOSS := l_lnk_klev_old_rec.GAIN_LOSS - l_lnk_klev_rec.GAIN_LOSS;
10046                         l_lnk_klev_old_rec.FLOOR_AMOUNT := l_lnk_klev_old_rec.FLOOR_AMOUNT -l_lnk_klev_rec.FLOOR_AMOUNT;
10047                         l_lnk_klev_old_rec.TRACKED_RESIDUAL := l_lnk_klev_old_rec.TRACKED_RESIDUAL - l_lnk_klev_rec.TRACKED_RESIDUAL;
10048                         l_lnk_klev_old_rec.AMOUNT := l_lnk_klev_old_rec.AMOUNT - l_lnk_klev_rec.AMOUNT;
10049                         l_lnk_klev_old_rec.OEC := l_lnk_klev_old_rec.OEC - l_lnk_klev_rec.OEC;
10050                         l_lnk_klev_old_rec.CAPITAL_AMOUNT := l_lnk_klev_old_rec.CAPITAL_AMOUNT - l_lnk_klev_rec.CAPITAL_AMOUNT;
10051                         l_lnk_klev_old_rec.RESIDUAL_GRNTY_AMOUNT := l_lnk_klev_old_rec.RESIDUAL_GRNTY_AMOUNT - l_lnk_klev_rec.RESIDUAL_GRNTY_AMOUNT;
10052                         l_lnk_klev_old_rec.RVI_PREMIUM := l_lnk_klev_old_rec.RVI_PREMIUM - l_lnk_klev_rec.RVI_PREMIUM;
10053                         l_lnk_klev_old_rec.SUBSIDY_OVERRIDE_AMOUNT := l_lnk_klev_old_rec.SUBSIDY_OVERRIDE_AMOUNT - l_lnk_klev_rec.SUBSIDY_OVERRIDE_AMOUNT;
10054                       END IF;
10055                   END LOOP;
10056 
10057                   -- Split into units
10058                   IF NVL(p_txdv_rec.split_percent,0) IN (0,OKL_API.G_MISS_NUM) THEN
10059 
10060                     --update contract line
10061                     OKL_CONTRACT_PUB.update_contract_line(
10062                          p_api_version    => p_api_version,
10063                          p_init_msg_list  => p_init_msg_list,
10064                          x_return_status  => x_return_status,
10065                          x_msg_count      => x_msg_count,
10066                          x_msg_data       => x_msg_data,
10067                          p_clev_rec       => l_lnk_clev_old_rec,
10068                          p_klev_rec       => l_lnk_klev_old_rec,
10069                          x_clev_rec       => lx_lnk_clev_old_rec,
10070                          x_klev_rec       => lx_lnk_klev_old_rec);
10071                     --dbms_output.put_line('After updating service fee link line :'||x_return_status);
10072                     IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
10073                       RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
10074                     ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
10075                       RAISE OKL_API.G_EXCEPTION_ERROR;
10076                     END IF;
10077 
10078                   -- Split into components
10079                   ELSIF NVL(p_txdv_rec.split_percent,0) NOT IN (0,OKL_API.G_MISS_NUM) THEN
10080 
10081                     l_lnk_klev_rec := l_lnk_klev_old_rec;
10082                     --
10083                     l_lnk_clev_rec.price_unit := (l_split_factor * l_lnk_clev_rec.price_unit);
10084                     l_lnk_clev_rec.price_negotiated := (l_split_factor * l_lnk_clev_rec.price_negotiated);
10085                     l_lnk_clev_rec.price_negotiated_renewed := (l_split_factor * l_lnk_clev_rec.price_negotiated_renewed);
10086 
10087                     l_lnk_clev_rec.ORIG_SYSTEM_ID1       := l_lnk_clev_rec.ID;
10088                     l_lnk_clev_rec.ID                    := OKL_API.G_MISS_NUM;
10089                     l_lnk_clev_rec.OBJECT_VERSION_NUMBER := OKL_API.G_MISS_NUM;
10090                     l_lnk_clev_rec.SFWT_FLAG             := OKL_API.G_MISS_CHAR;
10091                     l_lnk_clev_rec.LINE_NUMBER           := OKL_API.G_MISS_NUM;
10092                     l_lnk_clev_rec.DISPLAY_SEQUENCE      := l_clev_rec.DISPLAY_SEQUENCE + 1;
10093 
10094                       l_lnk_clev_rec.ORIG_SYSTEM_SOURCE_CODE := 'OKL_SPLIT';
10095                     l_lnk_clev_rec.CREATED_BY        := OKL_API.G_MISS_NUM;
10096                     l_lnk_clev_rec.CREATION_DATE     := OKL_API.G_MISS_DATE;
10097                     l_lnk_clev_rec.LAST_UPDATED_BY   := OKL_API.G_MISS_NUM;
10098                     l_lnk_clev_rec.LAST_UPDATE_DATE  := OKL_API.G_MISS_DATE;
10099                     l_lnk_clev_rec.LAST_UPDATE_LOGIN := OKL_API.G_MISS_NUM;
10100                     --make new line as BOOKED
10101                     l_lnk_clev_rec.STS_CODE          := 'BOOKED';
10102                     --bug# 3066375
10103                     l_lnk_clev_rec.name              := l_txdv_rec.asset_number;
10104                     l_lnk_clev_rec.item_description  := l_txdv_rec.description;
10105                     ----
10106                     l_lnk_klev_rec.ID := OKL_API.G_MISS_NUM;
10107                     l_lnk_klev_rec.OBJECT_VERSION_NUMBER := OKL_API.G_MISS_NUM;
10108                     l_lnk_klev_rec.CREATED_BY := OKL_API.G_MISS_NUM;
10109                     l_lnk_klev_rec.CREATION_DATE := OKL_API.G_MISS_DATE;
10110                     l_klev_rec.LAST_UPDATED_BY := OKL_API.G_MISS_NUM;
10111                     l_klev_rec.LAST_UPDATE_DATE := OKL_API.G_MISS_DATE;
10112                     l_klev_rec.LAST_UPDATE_LOGIN := OKL_API.G_MISS_NUM;
10113 
10114                     OKL_CONTRACT_PUB.create_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_rec,
10121                          p_klev_rec       => l_lnk_klev_rec,
10122                          x_clev_rec       => lx_lnk_clev_rec,
10123                          x_klev_rec       => lx_lnk_klev_rec);
10124                     --dbms_output.put_line('After creating 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                   END IF;
10132 
10133                   l_lnk_cimv_rec := get_cimv_rec(p_cle_id => l_lnk_line_id, x_no_data_found => l_no_data_found);
10134 
10135                   IF l_no_data_found THEN
10136                       NULL;
10137                   --raise appropriate error
10138                   ELSE
10139                     l_lnk_cimv_old_rec := l_lnk_cimv_rec;
10140 
10141                     -- Split into units
10142                     IF NVL(p_txdv_rec.split_percent,0) IN (0,OKL_API.G_MISS_NUM) THEN
10143 
10144                       FOR l_new_lnk_assts_rec in l_new_lnk_assts_cur
10145                                              (p_chr_id => l_lnk_clev_old_rec.dnz_chr_id,
10146                                               p_cle_id => l_lnk_line_id) LOOP
10147 
10148                         l_lnk_cimv_rec := get_cimv_rec(p_cle_id => l_new_lnk_assts_rec.id,
10149                                                        x_no_data_found => l_no_data_found);
10150                         IF l_no_data_found THEN
10151                           NULL;
10152                           --raise appropriate error
10153                         ELSE
10154                           --number of items will be split in case of normal split asset
10155                           l_lnk_cimv_old_rec.NUMBER_OF_ITEMS  := l_lnk_cimv_old_rec.NUMBER_OF_ITEMS - l_lnk_cimv_rec.NUMBER_OF_ITEMS;
10156                         END IF;
10157                       END LOOP;
10158 
10159                       --update original item record
10160                       OKL_OKC_MIGRATION_PVT.update_contract_item( p_api_version => p_api_version,
10161                                                        p_init_msg_list  => p_init_msg_list,
10162                                                        x_return_status  => x_return_status,
10163                                                        x_msg_count      => x_msg_count,
10164                                                        x_msg_data             => x_msg_data,
10165                                                        p_cimv_rec             => l_lnk_cimv_old_rec,
10166                                                        x_cimv_rec             => lx_lnk_cimv_old_rec);
10167 
10168                       IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
10169                         RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
10170                       ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
10171                         RAISE OKL_API.G_EXCEPTION_ERROR;
10172                       END IF;
10173 
10174                     -- Split into components
10175                     ELSIF NVL(p_txdv_rec.split_percent,0) NOT IN (0,OKL_API.G_MISS_NUM) THEN
10176 
10177                        l_lnk_cimv_rec.ID                         := OKL_API.G_MISS_NUM;
10178                        l_lnk_cimv_rec.OBJECT_VERSION_NUMBER      := OKL_API.G_MISS_NUM;
10179                        l_lnk_cimv_rec.OBJECT1_ID1                := TO_CHAR(p_cle_id);
10180                        l_lnk_cimv_rec.CLE_ID                     := lx_lnk_clev_rec.id;
10181 
10182                        l_lnk_cimv_rec.CREATED_BY                 := OKL_API.G_MISS_NUM;
10183                        l_lnk_cimv_rec.CREATION_DATE              := OKL_API.G_MISS_DATE;
10184                        l_lnk_cimv_rec.LAST_UPDATED_BY            := OKL_API.G_MISS_NUM;
10185                        l_lnk_cimv_rec.LAST_UPDATE_DATE           := OKL_API.G_MISS_DATE;
10186                        l_lnk_cimv_rec.LAST_UPDATE_LOGIN          := OKL_API.G_MISS_NUM;
10187 
10188                        OKL_OKC_MIGRATION_PVT.create_contract_item( p_api_version        => p_api_version,
10189                                                        p_init_msg_list  => p_init_msg_list,
10190                                                        x_return_status  => x_return_status,
10191                                                        x_msg_count          => x_msg_count,
10192                                                        x_msg_data           => x_msg_data,
10193                                                        p_cimv_rec           => l_lnk_cimv_rec,
10194                                                        x_cimv_rec           => lx_lnk_cimv_rec);
10195 
10196                        IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
10197                             RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
10198                        ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
10199                             RAISE OKL_API.G_EXCEPTION_ERROR;
10200                        END IF;
10201                     END IF;
10202 
10203                   END IF; -- cimv rec found
10204                 END IF; -- clev rec found
10205             END IF; --klev rec found
10206 
10207             l_strm_type_id := NULL;
10208             OPEN l_sll_cur(p_cle_id =>  l_lnk_line_id);
10209             LOOP
10210               FETCH l_sll_cur INTO l_sll_rec;
10211               EXIT WHEN l_sll_cur%NOTFOUND;
10212 
10213                 l_sll_amount := TO_NUMBER(l_sll_rec.amount_sll);
10214                 l_stub_amount := TO_NUMBER(l_sll_rec.amount_stub);
10215 
10216                 l_split_pymt_sum := 0;
10217 
10218                 -- Split into units
10219                 IF NVL(p_txdv_rec.split_percent,0) IN (0,OKL_API.G_MISS_NUM) THEN
10220                   l_target_kle_id := p_txlv_rec.kle_id;
10221 
10222                 -- Split into components
10223                 ELSE
10224                   open l_fa_line_csr(p_chr_id => p_txlv_rec.dnz_khr_id
10225                                     ,p_cle_id => p_cle_id);
10226                   fetch l_fa_line_csr into l_target_kle_id;
10227                   close l_fa_line_csr;
10228                 END IF;
10229 
10230                 FOR l_txd_rec in l_txd_csr(p_tal_id  => p_txlv_rec.id
10231                                           ,p_cle_id  => l_target_kle_id)
10232                 LOOP
10233 
10234                   IF NVL(p_txdv_rec.split_percent,0) IN (0,OKL_API.G_MISS_NUM) THEN
10235                     l_sll_split_factor := l_txd_rec.quantity/p_txlv_rec.current_units;
10236                   ELSE
10237                     l_sll_split_factor := l_txd_rec.split_percent/100;
10238                   END IF;
10239 
10240                   IF NVL(l_sll_amount,OKL_API.G_MISS_NUM) <> OKL_API.G_MISS_NUM THEN
10241                     l_split_pymt := l_sll_amount * l_sll_split_factor;
10242                   ELSIF NVL(l_stub_amount,OKL_API.G_MISS_NUM) <> OKL_API.G_MISS_NUM THEN
10243                     l_split_pymt := l_stub_amount * l_sll_split_factor;
10244                   END IF;
10245 
10246                   okl_accounting_util.round_amount(
10247                                          p_api_version    => p_api_version,
10248                                          p_init_msg_list  => p_init_msg_list,
10249                                          x_return_status  => x_return_status,
10250                                          x_msg_count      => x_msg_count,
10251                                          x_msg_data       => x_msg_data,
10252                                          p_amount         => l_split_pymt,
10253                                          p_currency_code  => l_sll_rec.currency_code,
10254                                          p_round_option   => 'STM',
10255                                          x_rounded_amount => l_rounded_amount
10256                                          );
10257                   IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
10258                     RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
10259                   ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
10260                     RAISE OKL_API.G_EXCEPTION_ERROR;
10261                   END IF;
10262 
10263                   l_split_pymt_sum := l_split_pymt_sum + l_rounded_amount;
10264 
10265                 END LOOP;
10266 
10267                 -- Split into units
10268                 IF NVL(p_txdv_rec.split_percent,0) IN (0,OKL_API.G_MISS_NUM) THEN
10269 
10270                   --update the rule record
10271                   l_rulv_rec.id                 := l_sll_rec.sll_id;
10272                   IF NVL(l_sll_amount,OKL_API.G_MISS_NUM) <> OKL_API.G_MISS_NUM THEN
10273                     l_rulv_rec.rule_information6  := TO_CHAR(l_sll_amount - l_split_pymt_sum);
10274                   ELSIF NVL(l_sll_amount,OKL_API.G_MISS_NUM) = OKL_API.G_MISS_NUM THEN
10275                     l_rulv_rec.rule_information6 := NULL;
10276                   END IF;
10277 
10278                   IF NVL(l_stub_amount,OKL_API.G_MISS_NUM) <> OKL_API.G_MISS_NUM THEN
10279                     l_rulv_rec.rule_information8  := TO_CHAR(l_stub_amount - l_split_pymt_sum);
10280                   ELSIF NVL(l_stub_amount,OKL_API.G_MISS_NUM) = OKL_API.G_MISS_NUM THEN
10281                     l_rulv_rec.rule_information8 := NULL;
10282                   END IF;
10283 
10284                   OKL_RULE_PUB.update_rule(
10285                             p_api_version    => p_api_version,
10286                             p_init_msg_list  => p_init_msg_list,
10287                             x_return_status  => x_return_status,
10288                             x_msg_count      => x_msg_count,
10289                             x_msg_data       => x_msg_data,
10290                             p_rulv_rec       => l_rulv_rec,
10291                             x_rulv_rec       => l_rulv_rec_out);
10292 
10293                   --dbms_output.put_line('After updating payments :'||x_return_status);
10294                   IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
10295                       RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
10296                   ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
10297                       RAISE OKL_API.G_EXCEPTION_ERROR;
10298                   END IF;
10299 
10300                 -- Split into components
10301                 ELSIF NVL(p_txdv_rec.split_percent,0) NOT IN (0,OKL_API.G_MISS_NUM) THEN
10302 
10303                   IF l_sll_cur%RowCount = 1 THEN
10304                     l_rgpv_rec.rgd_code      :=  'LALEVL';
10305                     l_rgpv_rec.cle_id        :=  lx_lnk_clev_rec.id;
10306                     l_rgpv_rec.dnz_chr_id    :=  lx_lnk_clev_rec.dnz_chr_id;
10307                     l_rgpv_rec.rgp_type      :=  'KRG';
10308 
10309                     OKL_RULE_PUB.create_rule_group(
10310                      p_api_version                =>  p_api_version,
10311                      p_init_msg_list              =>  p_init_msg_list,
10312                      x_return_status              =>  x_return_status,
10313                      x_msg_count                  =>  x_msg_count,
10314                      x_msg_data                   =>  x_msg_data,
10315                      p_rgpv_rec                   =>  l_rgpv_rec,
10316                      x_rgpv_rec                   =>  lx_rgpv_rec);
10317 
10318                     --dbms_output.put_line('After updating payments :'||x_return_status);
10319                     IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
10320                       RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
10321                     ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
10322                       RAISE OKL_API.G_EXCEPTION_ERROR;
10323                     END IF;
10324                   END IF;
10325 
10326                   --Bug# 3897490
10327                   IF (l_strm_type_id IS NULL OR l_strm_type_id <> l_sll_rec.strm_type_id1) THEN
10328                   --30-oct-03  : 3143522 - SLH should be created only once
10329                       --create slh
10330                       l_slh_rulv_rec.rgp_id                    := lx_rgpv_rec.id;
10331                       l_slh_rulv_rec.rule_information_category := 'LASLH';
10332                       l_slh_rulv_rec.jtot_object1_code         := l_sll_rec.strm_type_source;
10333                       l_slh_rulv_rec.object1_id1               := l_sll_rec.strm_type_id1;
10334                       l_slh_rulv_rec.object1_id2               := l_sll_rec.strm_type_id2;
10335                       l_slh_rulv_rec.dnz_chr_id                := lx_rgpv_rec.dnz_chr_id;
10336                       l_slh_rulv_rec.std_template_yn           := 'N';
10337                       l_slh_rulv_rec.warn_yn                   := 'N';
10338                       l_slh_rulv_rec.template_yn               := 'N';
10339 
10340                       OKL_RULE_PUB.create_rule(
10341                           p_api_version         => p_api_version,
10342                           p_init_msg_list       => p_init_msg_list,
10343                           x_return_status       => x_return_status,
10344                           x_msg_count           => x_msg_count,
10345                           x_msg_data            => x_msg_data,
10346                           p_rulv_rec            => l_slh_rulv_rec,
10347                           x_rulv_rec            => lx_slh_rulv_rec);
10348 
10349                       --dbms_output.put_line('After updating payments :'||x_return_status);
10350                       IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
10351                           RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
10352                       ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
10353                           RAISE OKL_API.G_EXCEPTION_ERROR;
10354                       END IF;
10355 
10356                       --Bug# 3897490
10357                       l_strm_type_id := l_sll_rec.strm_type_id1;
10358                   END IF;
10359 
10360                   --create sll
10361                   l_sll_rulv_rec.dnz_chr_id                := lx_rgpv_rec.dnz_chr_id;
10362                   l_sll_rulv_rec.rgp_id                    := lx_rgpv_rec.id;
10363                   l_sll_rulv_rec.std_template_yn           := lx_slh_rulv_rec.std_template_yn;
10364                   l_sll_rulv_rec.warn_yn                   := lx_slh_rulv_rec.warn_yn;
10365                   l_sll_rulv_rec.template_yn               := lx_slh_rulv_rec.template_yn;
10366                   l_sll_rulv_rec.rule_information_category := 'LASLL';
10367                   l_sll_rulv_rec.jtot_object1_code         := l_sll_rec.jtot_object1_code;
10368                   l_sll_rulv_rec.object1_id1               := l_sll_rec.object1_id1;
10369                   l_sll_rulv_rec.object1_id2               := l_sll_Rec.object1_id2;
10370                   l_sll_rulv_rec.jtot_object2_code         := l_sll_rec.jtot_object2_code;
10371                   l_sll_rulv_rec.object2_id1               := lx_slh_rulv_rec.id;
10372     -- ansethur 28-feb-08 bug # 6697542
10373                   l_sll_rulv_rec.object2_id2               :=  '#' ; -- l_sll_rec.object2_id2;
10374     -- ansethur 28-feb-08 bug # 6697542
10375                   l_sll_rulv_rec.rule_information1         := l_sll_rec.rule_information1;
10376                   l_sll_rulv_rec.rule_information2         := l_sll_rec.rule_information2;
10377                   l_sll_rulv_rec.rule_information3         := l_sll_rec.rule_information3;
10378                   l_sll_rulv_rec.rule_information4         := l_sll_rec.rule_information4;
10379                   l_sll_rulv_rec.rule_information5         := l_sll_rec.rule_information5;
10380 
10381                   IF NVL(TO_NUMBER(l_sll_rec.amount_sll),OKL_API.G_MISS_NUM) <> OKL_API.G_MISS_NUM THEN
10382 
10383                       --Bug# 4028371
10384                       --Bug# 3502142: Use Streams Rounding Option
10385                       l_updated_sll_amount := TO_NUMBER(l_sll_rec.amount_sll) - l_split_pymt_sum;
10386                       okl_accounting_util.round_amount(
10387                                          p_api_version    => p_api_version,
10388                                          p_init_msg_list  => p_init_msg_list,
10389                                          x_return_status  => x_return_status,
10390                                          x_msg_count      => x_msg_count,
10391                                          x_msg_data       => x_msg_data,
10392                                          p_amount         => l_updated_sll_amount,
10393                                          p_currency_code  => l_sll_rec.currency_code,
10394                                          p_round_option   => 'STM',
10395                                          x_rounded_amount => l_rounded_amount
10396                                          );
10397                       IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
10398                         RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
10399                       ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
10400                         RAISE OKL_API.G_EXCEPTION_ERROR;
10401                       END IF;
10402 
10403                       l_updated_sll_amount := l_rounded_amount;
10404                       l_sll_rulv_rec.rule_information6         := l_updated_sll_amount;
10405 
10406                   ELSIF NVL(TO_NUMBER(l_sll_rec.amount_sll),OKL_API.G_MISS_NUM) = OKL_API.G_MISS_NUM THEN
10407                       l_sll_rulv_rec.rule_information6 := NULL;
10408                   END IF;
10409                   l_sll_rulv_rec.rule_information7         := l_sll_rec.rule_information7;
10410                   --Bug# 2757289 : For stup payments
10411                   IF NVL(TO_NUMBER(l_sll_rec.amount_stub),OKL_API.G_MISS_NUM) <> OKL_API.G_MISS_NUM THEN
10412 
10413                       --Bug# 4028371
10414                       --Bug# 3502142: Use Streams Rounding Option
10415                       l_updated_stub_amount := TO_NUMBER(l_sll_rec.amount_stub) - l_split_pymt_sum;
10416                       okl_accounting_util.round_amount(
10417                                          p_api_version    => p_api_version,
10418                                          p_init_msg_list  => p_init_msg_list,
10419                                          x_return_status  => x_return_status,
10420                                          x_msg_count      => x_msg_count,
10421                                          x_msg_data       => x_msg_data,
10422                                          p_amount         => l_updated_stub_amount,
10423                                          p_currency_code  => l_sll_rec.currency_code,
10424                                          p_round_option   => 'STM',
10425                                          x_rounded_amount => l_rounded_amount
10426                                          );
10427                       IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
10428                         RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
10429                       ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
10430                         RAISE OKL_API.G_EXCEPTION_ERROR;
10431                       END IF;
10432 
10433                       l_updated_stub_amount := l_rounded_amount;
10434                       l_sll_rulv_rec.rule_information8         := l_updated_stub_amount;
10435 
10436                   ELSIF NVL(TO_NUMBER(l_sll_rec.amount_stub),OKL_API.G_MISS_NUM) = OKL_API.G_MISS_NUM THEN
10437                       l_sll_rulv_rec.rule_information8 := NULL;
10438                   END IF;
10439                   --l_sll_rulv_rec.rule_information8         := l_sll_rec.rule_information8;
10440                   l_sll_rulv_rec.rule_information9         := l_sll_rec.rule_information9;
10441                   l_sll_rulv_rec.rule_information10        := l_sll_rec.rule_information10;
10442                   l_sll_rulv_rec.rule_information11        := l_sll_rec.rule_information11;
10443                   l_sll_rulv_rec.rule_information12        := l_sll_rec.rule_information12;
10444                   l_sll_rulv_rec.rule_information13        := l_sll_rec.rule_information13;
10445                   l_sll_rulv_rec.rule_information14        := l_sll_rec.rule_information14;
10446                   l_sll_rulv_rec.rule_information15        := l_sll_rec.rule_information15;
10447 
10448                   OKL_RULE_PUB.create_rule(
10449                       p_api_version         => p_api_version,
10450                       p_init_msg_list       => p_init_msg_list,
10451                       x_return_status       => x_return_status,
10452                       x_msg_count           => x_msg_count,
10453                       x_msg_data            => x_msg_data,
10454                       p_rulv_rec            => l_sll_rulv_rec,
10455                       x_rulv_rec            => lx_sll_rulv_rec);
10456 
10457                   --dbms_output.put_line('After updating payments :'||x_return_status);
10458                   IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
10459                       RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
10460                   ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
10461                       RAISE OKL_API.G_EXCEPTION_ERROR;
10462                   END IF;
10463 
10464                 END IF;
10465 
10466             END LOOP;
10467             CLOSE l_sll_cur;
10468         END LOOP;
10469         CLOSE l_lnk_asst_cur;
10470     END IF;
10471     --will also have to think about UBB
10472 
10473     --Bug# 6344223
10474     --update unit cost
10475    adjust_unit_cost(p_api_version   => p_api_version,
10476                     p_init_msg_list =>p_init_msg_list,
10477                     x_return_status =>x_return_status,
10478                     x_msg_count     =>x_msg_count,
10479                     x_msg_data      =>x_msg_data,
10480                     p_cle_id        =>l_fa_line_id ,
10481                     p_txdv_rec      =>p_txdv_rec,
10482                     p_txlv_rec      =>p_txlv_rec
10483                     );
10484     IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
10485          RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
10486     ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
10487          RAISE OKL_API.G_EXCEPTION_ERROR;
10488     END IF;
10489 
10490    -- Bug# 6344223
10491 
10492     OKL_API.END_ACTIVITY (x_msg_count,
10493                           x_msg_data );
10494     EXCEPTION
10495     WHEN OKL_API.G_EXCEPTION_ERROR THEN
10496     x_return_status := OKL_API.HANDLE_EXCEPTIONS(
10497                                l_api_name,
10498                                G_PKG_NAME,
10499                                'OKL_API.G_RET_STS_ERROR',
10500                                x_msg_count,
10501                                x_msg_data,
10502                                '_PVT');
10503     WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
10504     x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
10505                               l_api_name,
10506                               G_PKG_NAME,
10507                               'OKL_API.G_RET_STS_UNEXP_ERROR',
10508                               x_msg_count,
10509                               x_msg_data,
10510                               '_PVT');
10511     WHEN OTHERS THEN
10512     x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
10513                               l_api_name,
10514                               G_PKG_NAME,
10515                               'OTHERS',
10516                               x_msg_count,
10517                               x_msg_data,
10518                               '_PVT');
10519 END Adjust_Split_Lines;
10520 --------------------------------------------------------------------------------
10521 --Start of Comments
10522 --Procedure Name : ABANDON_PARENT_ASSET
10523 --Description    : Abandons Parent Asset for Split Asset Component Parent
10524 --History        :
10525 --                 24-Jul-2002  ashish.singh Created
10526 --End of Comments
10527 --------------------------------------------------------------------------------
10528 PROCEDURE ABANDON_PARENT_ASSET(
10529                 p_api_version    IN  NUMBER,
10530                 p_init_msg_list  IN  VARCHAR2 DEFAULT OKL_API.G_FALSE,
10531                 x_return_status  OUT NOCOPY VARCHAR2,
10532                 x_msg_count      OUT NOCOPY NUMBER,
10533                 x_msg_data       OUT NOCOPY VARCHAR2,
10534                 p_cle_id         IN  NUMBER) IS
10535 
10536 l_return_status        VARCHAR2(1)  DEFAULT OKL_API.G_RET_STS_SUCCESS;
10537 l_api_name             CONSTANT VARCHAR2(30) := 'ABANDON_PARENT_ASSET';
10538 l_api_version          CONSTANT NUMBER := 1.0;
10539 
10540 CURSOR c_lines_cur(p_cle_id IN NUMBER) IS
10541     SELECT LEVEL,
10542            id,
10543                    chr_id,
10544                    cle_id,
10545                    dnz_chr_id,
10546            lse_id
10547     FROM   okc_k_lines_b
10548     CONNECT BY  PRIOR id = cle_id
10549     START WITH  id = p_cle_id;
10550 
10551     c_lines_rec c_lines_cur%ROWTYPE;
10552     l_clev_rec  okl_okc_migration_pvt.clev_rec_type;
10553     lx_clev_rec okl_okc_migration_pvt.clev_rec_type;
10554 
10555 --Bug#3066375 :
10556 --Cursor to fetch linked asset lines for parent asset being abandoned
10557 CURSOR l_lnk_asst_csr (p_cle_id IN NUMBER) IS
10558 SELECT lnk_cleb.id lnk_cle_id
10559 FROM   okc_k_lines_b       lnk_cleb,
10560        okc_line_styles_b   lnk_lseb,
10561        okc_statuses_b      lnk_stsb,
10562        okc_k_items         lnk_cim
10563 WHERE  lnk_cleb.id         = lnk_cim.cle_id
10564 AND    lnk_cleb.dnz_chr_id = lnk_cim.dnz_chr_id
10565 AND    lnk_cleb.lse_id     = lnk_lseb.id
10566 AND    lnk_lseb.lty_code IN
10567        ('LINK_FEE_ASSET','LINK_SERV_ASSET','LINK_USAGE_ASSET')
10568 AND    lnk_cleb.sts_code   =  lnk_stsb.code
10569 AND    lnk_stsb.ste_code NOT IN ('HOLD','EXPIRED','TERMINATED','CANCELLED')
10570 AND    lnk_cim.object1_id1 = TO_CHAR(p_cle_id)
10571 AND    lnk_cim.object1_id2 = '#'
10572 AND    lnk_cim.jtot_object1_code = 'OKX_COVASST';
10573 
10574 l_lnk_cle_id okc_k_lines_b.id%TYPE;
10575 l_lnk_clev_rec  okl_okc_migration_pvt.clev_rec_type;
10576 lx_lnk_clev_rec okl_okc_migration_pvt.clev_rec_type;
10577 
10578 BEGIN
10579 -----
10580     x_return_status := OKL_API.G_RET_STS_SUCCESS;
10581     -- Call start_activity to create savepoint, check compatibility
10582     -- and initialize message list
10583     x_return_status := OKL_API.START_ACTIVITY (
10584                                l_api_name
10585                                ,p_init_msg_list
10586                                ,'_PVT'
10587                                ,x_return_status);
10588     -- Check if activity started successfully
10589     IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
10590        RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
10591     ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
10592        RAISE OKL_API.G_EXCEPTION_ERROR;
10593     END IF;
10594 
10595    OPEN c_lines_cur(p_cle_id => p_cle_id);
10596    LOOP
10597        FETCH c_lines_cur INTO c_lines_rec;
10598        EXIT WHEN c_lines_cur%NOTFOUND;
10599        l_clev_rec.id := c_lines_rec.id;
10600        l_clev_rec.sts_code := 'ABANDONED';
10601 
10602        okl_okc_migration_pvt.update_contract_line(
10603             p_api_version        => p_api_version,
10604             p_init_msg_list      => p_init_msg_list,
10605             x_return_status      => x_return_status,
10606             x_msg_count          => x_msg_count,
10607             x_msg_data           => x_msg_data,
10608             p_clev_rec           => l_clev_rec,
10609             x_clev_rec           => lx_clev_rec);
10610 
10611         --Bug# 3066375 : abandon linked asset lines
10612         OPEN l_lnk_asst_csr(p_cle_id => p_cle_id);
10613         LOOP
10614             FETCH l_lnk_asst_csr INTO l_lnk_cle_id;
10615             EXIT WHEN l_lnk_asst_csr%NOTFOUND;
10616             l_lnk_clev_rec.id := l_lnk_cle_id;
10617             l_lnk_clev_rec.sts_code := 'ABANDONED';
10618 
10619             okl_okc_migration_pvt.update_contract_line(
10620             p_api_version        => p_api_version,
10621             p_init_msg_list      => p_init_msg_list,
10622             x_return_status      => x_return_status,
10623             x_msg_count          => x_msg_count,
10624             x_msg_data           => x_msg_data,
10625             p_clev_rec           => l_lnk_clev_rec,
10626             x_clev_rec           => lx_lnk_clev_rec);
10627 
10628             IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
10629                 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
10630             ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
10631                 RAISE OKL_API.G_EXCEPTION_ERROR;
10632             END IF;
10633 
10634          END LOOP;
10635          CLOSE l_lnk_asst_csr;
10636          --Bug# 3066375 end.
10637 
10638     END LOOP;
10639     CLOSE c_lines_cur;
10640     --will also have to think about UBB
10641     OKL_API.END_ACTIVITY (x_msg_count,
10642                           x_msg_data );
10643     EXCEPTION
10644     WHEN OKL_API.G_EXCEPTION_ERROR THEN
10645     x_return_status := OKL_API.HANDLE_EXCEPTIONS(
10646                                l_api_name,
10647                                G_PKG_NAME,
10648                                'OKL_API.G_RET_STS_ERROR',
10649                                x_msg_count,
10650                                x_msg_data,
10651                                '_PVT');
10652     WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
10653     x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
10654                               l_api_name,
10655                               G_PKG_NAME,
10656                               'OKL_API.G_RET_STS_UNEXP_ERROR',
10657                               x_msg_count,
10658                               x_msg_data,
10659                               '_PVT');
10660     WHEN OTHERS THEN
10661     x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
10662                               l_api_name,
10663                               G_PKG_NAME,
10664                               'OTHERS',
10665                               x_msg_count,
10666                               x_msg_data,
10667                               '_PVT');
10668 END ABANDON_PARENT_ASSET;
10669 
10670 --Bug# 6061103
10671 PROCEDURE is_evergreen_df_lease
10672                    (p_api_version     IN  NUMBER,
10673                     p_init_msg_list   IN  VARCHAR2,
10674                     x_return_status   OUT NOCOPY VARCHAR2,
10675                     x_msg_count       OUT NOCOPY NUMBER,
10676                     x_msg_data        OUT NOCOPY VARCHAR2,
10677                     p_cle_id          IN  NUMBER,
10678                     p_book_type_code  IN VARCHAR2,
10679                     p_asset_status    IN VARCHAR2,
10680                     p_pdt_id          IN NUMBER,
10681                     p_start_date      IN DATE,
10682                     x_amortization_date OUT NOCOPY DATE,
10683                     x_special_treatment_required OUT NOCOPY VARCHAR2
10684                    )     IS
10685  l_return_status        VARCHAR2(1)  default OKL_API.G_RET_STS_SUCCESS;
10686  l_api_name             CONSTANT varchar2(30) := 'is_evergreen_df_lease';
10687  l_api_version          CONSTANT NUMBER := 1.0;
10688 --cursor to find book class
10689    CURSOR l_book_class_cur(p_book_type_code IN VARCHAR2) IS
10690    SELECT book_class
10691    FROM   okx_asst_bk_controls_v
10692    WHERE  book_type_code = p_book_type_code;
10693    l_book_class okx_asst_bk_controls_v.book_class%TYPE;
10694  l_contract_number       OKC_K_HEADERS_B.contract_number%TYPE;
10695  l_scs_code          Varchar2(30);
10696  l_sts_code          Varchar2(30);
10697  l_deal_type         Varchar2(30);
10698  l_pdt_id            Number;
10699  l_start_date        Date;
10700  l_asset_status okc_k_lines_b.sts_code%TYPE;
10701  l_chr_id NUMBER;
10702  l_amortization_date DATE;
10703  l_special_treatment_required VARCHAR2(1);
10704  l_pdt_date                DATE;
10705  l_pdtv_rec                okl_setupproducts_pub.pdtv_rec_type;
10706  l_pdt_parameter_rec       okl_setupproducts_pub.pdt_parameters_rec_type;
10707  l_rep_pdt_parameter_rec   okl_setupproducts_pub.pdt_parameters_rec_type;
10708  l_reporting_product       OKL_PRODUCTS_V.NAME%TYPE;
10709  l_no_data_found           BOOLEAN;
10710  l_rep_pdt_id NUMBER;
10711  l_rep_deal_type           okl_product_parameters_v.deal_type%TYPE;
10712  l_tax_owner         Varchar2(150);
10713  l_rep_tax_owner         Varchar2(150);
10714  l_Multi_GAAP_YN     Varchar2(1);
10715  l_mg_rep_book             fa_book_controls.book_type_code%TYPE;
10716   l_amortization_start_date DATE:=NULL;
10717   -- CURSOR TO GET MAX OFF LEASE TRX DATESELECT
10718    Cursor tax_off_trx_amt(p_asset_id in number, p_tax_book in varchar2) is
10719     select  tas.date_trans_occurred
10720     FROM   OKL_TRX_ASSETS tas,
10721           OKL_TXL_ASSETS_B tal,
10722           OKL_TXD_ASSETS_B txl
10723    WHERE tas.id = tal.tas_id
10724    AND   tal.id = txl.tal_id
10725    AND   txl.tax_book  = p_tax_book
10726    AND    tas.tsu_code  = 'PROCESSED'
10727    AND    tas.tas_type in ('AMT')
10728    And tal.kle_id = p_asset_id;
10729    Cursor corp_off_trx_amt(p_asset_id in number, p_corp_book in varchar2) is
10730    SELECT
10731           tas.date_trans_occurred
10732    FROM   OKL_TRX_ASSETS tas,
10733           OKL_TXL_ASSETS_B tal,
10734           OKL_TXD_ASSETS_B txd
10735    WHERE tas.id = tal.tas_id
10736    AND   tal.corporate_book  = P_corp_book
10737    AND    tas.tsu_code = 'PROCESSED'
10738    AND   tas.tas_type in ('AMT')
10739    And   tal.kle_id = p_asset_id
10740    AND   tal.id = txd.tal_id(+)
10741    AND   TAX_BOOK IS NULL ;
10742     Cursor tax_off_trx_aus(p_asset_id in number, p_tax_book in varchar2) is
10743     select  tas.date_trans_occurred
10744     FROM   OKL_TRX_ASSETS tas,
10745           OKL_TXL_ASSETS_B tal,
10746           OKL_TXD_ASSETS_B txl
10747    WHERE tas.id = tal.tas_id
10748    AND   tal.id = txl.tal_id
10749    AND   txl.tax_book  = p_tax_book
10750    AND    tas.tsu_code  = 'PROCESSED'
10751    AND    tas.tas_type in ('AUS')
10752    And tal.kle_id = p_asset_id;
10753    Cursor corp_off_trx_aus(p_asset_id in number, p_corp_book in varchar2) is
10754    SELECT
10755           tas.date_trans_occurred
10756    FROM   OKL_TRX_ASSETS tas,
10757           OKL_TXL_ASSETS_B tal,
10758           OKL_TXD_ASSETS_B txd
10759    WHERE tas.id = tal.tas_id
10760    AND   tal.corporate_book  = P_corp_book
10761    AND    tas.tsu_code = 'PROCESSED'
10762    AND    tas.tas_type in ('AUS')
10763    And tal.kle_id = p_asset_id
10764    AND   tal.id = txd.tal_id(+)
10765    AND   TAX_BOOK IS NULL ;
10766    l_trans_date_aus DATE;
10767    l_trans_date_amt DATE;
10768 BEGIN
10769      --call start activity to set savepoint
10770     l_return_status := OKL_API.START_ACTIVITY( substr(l_api_name,1,26),
10771                                                 p_init_msg_list,
10772                                                 '_PVT',
10773                                                 x_return_status);
10774     IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
10775       RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
10776     ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
10777       RAISE OKL_API.G_EXCEPTION_ERROR;
10778     END IF;
10779    l_pdtv_rec.id    := p_pdt_id;
10780    l_no_data_found  := TRUE;
10781    l_pdt_date :=p_start_date;
10782    okl_setupproducts_pub.Getpdt_parameters(p_api_version      => p_api_version,
10783                                              p_init_msg_list     => p_init_msg_list,
10784                       			             x_return_status     => l_return_status,
10785             			                     x_no_data_found     => l_no_data_found,
10786                               		         x_msg_count         => x_msg_count,
10787                               		         x_msg_data          => x_msg_data,
10788 					                         p_pdtv_rec          => l_pdtv_rec,
10789 					                         p_product_date      => l_pdt_date,
10790 					                         p_pdt_parameter_rec => l_pdt_parameter_rec);
10791      IF l_return_status <> OKC_API.G_RET_STS_SUCCESS THEN
10792         -- Error getting financial product parameters for contract CONTRACT_NUMBER.
10793         OKC_API.set_message(  p_app_name      => 'OKL',
10794                            p_msg_name      => 'OKL_AM_FIN_PROD_PARAM_ERR',
10795                            p_token1        =>  'CONTRACT_NUMBER',
10796                            p_token1_value  =>  l_contract_number);
10797          RAISE OKL_API.G_EXCEPTION_ERROR;
10798      END IF;
10799      --dbms_output.put_line('l_pdt_parameter_rec.reporting_pdt_id '||l_pdt_parameter_rec.reporting_pdt_id );
10800      l_mg_rep_book :=NULL;
10801       if l_pdt_parameter_rec.reporting_pdt_id IS NULL Then
10802          l_rep_pdt_id    := Null;
10803          l_tax_owner     := l_pdt_parameter_rec.tax_owner;
10804          l_deal_type     :=  l_pdt_parameter_rec.deal_type;
10805          l_rep_deal_type := Null;
10806          l_rep_tax_owner :=NULL;
10807       Else
10808          l_rep_pdt_id    := l_pdt_parameter_rec.reporting_pdt_id;
10809          l_tax_owner     := l_pdt_parameter_rec.tax_owner;
10810          l_deal_type     :=  l_pdt_parameter_rec.deal_type;
10811          --get reporting product param values
10812          l_no_data_found := TRUE;
10813          l_pdtv_rec.id := l_rep_pdt_id;
10814          IF l_rep_pdt_id IS NOT NULL AND l_rep_pdt_id <> OKC_API.G_MISS_NUM THEN
10815           okl_setupproducts_pub.Getpdt_parameters(p_api_version      => p_api_version,
10816                                                  p_init_msg_list     => p_init_msg_list,
10817                                                  x_return_status     => l_return_status,
10818                                                  x_no_data_found     => l_no_data_found,
10819                                  		         x_msg_count         => x_msg_count,
10820                                  		         x_msg_data          => x_msg_data,
10821     					                         p_pdtv_rec          => l_pdtv_rec,
10822     					                         p_product_date      => l_pdt_date,
10823     					                         p_pdt_parameter_rec => l_rep_pdt_parameter_rec);
10824           IF l_return_status <> OKL_API.G_RET_STS_SUCCESS Then
10825                 -- Error getting reporting product parameters for contract CONTRACT_NUMBER.
10826                 OKC_API.set_message(  p_app_name      => 'OKL',
10827                                   p_msg_name      => 'OKL_AM_REP_PROD_PARAM_ERR',
10828                                   p_token1        => 'CONTRACT_NUMBER',
10829                                   p_token1_value  => l_contract_number);
10830                 RAISE OKL_API.G_EXCEPTION_ERROR;
10831           Else
10832              l_rep_deal_type :=  l_rep_pdt_parameter_rec.deal_type;
10833              l_rep_tax_owner := l_rep_pdt_parameter_rec.tax_owner;
10834              IF l_rep_deal_type IS NULL OR l_rep_deal_type = OKC_API.G_MISS_CHAR THEN
10835                     --Deal Type not defined for Reporting product REP_PROD.
10836                     OKC_API.set_message(  p_app_name      => 'OKL',
10837                                  p_msg_name      => 'OKL_AM_NO_MG_DEAL_TYPE',
10838                                  p_token1        => 'REP_PROD',
10839                                  p_token1_value  => l_reporting_product);
10840                     RAISE OKL_API.G_EXCEPTION_ERROR;
10841              End If;
10842              l_Multi_GAAP_YN := 'Y';
10843          End If;
10844          -- get the MG reporting book
10845          -- Bug#6695409
10846            l_mg_rep_book := OKL_SYSTEM_PARAMS_ALL_PUB.get_system_param_value(OKL_SYSTEM_PARAMS_ALL_PUB.G_RPT_PROD_BOOK_TYPE_CODE);
10847 
10848            IF l_mg_rep_book IS NULL THEN
10849                     --Multi GAAP Reporting Book is not defined.
10850                    OKL_API.set_message(  p_app_name      => 'OKL',
10851                               p_msg_name      => 'OKL_AM_NO_MG_REP_BOOK');
10852                    RAISE OKL_API.G_EXCEPTION_ERROR;
10853           END IF; --mg book
10854          END IF; --l_rep_pdt_id IS not null
10855        END IF;  --reporting_pdt_id IS NULL
10856      l_book_class := NULL;
10857      OPEN l_book_class_cur(p_book_type_code => p_book_type_code);
10858          FETCH l_book_class_cur INTO l_book_class;
10859          IF l_book_class_cur%NOTFOUND THEN
10860              NULL;
10861          END IF;
10862      CLOSE l_book_class_cur;
10863      l_special_treatment_required :='N';
10864      IF p_asset_status IN ('TERMINATED','EXPIRED','EVERGREEN') THEN
10865          IF (l_book_class = 'CORPORATE') AND (l_deal_type in ('LEASEDF','LEASEST')) then
10866              --rirawat
10867              open corp_off_trx_aus(p_cle_id , p_book_type_code);
10868              FETCH corp_off_trx_aus INTO l_amortization_date;
10869              close  corp_off_trx_aus ;
10870              IF l_amortization_date IS NULL THEN
10871                  open corp_off_trx_amt(p_cle_id , p_book_type_code);
10872                  FETCH corp_off_trx_amt INTO l_amortization_date;
10873                  close  corp_off_trx_amt ;
10874              END IF ;
10875              --l_amortization_date := sysdate;
10876              l_special_treatment_required := 'Y';
10877          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
10878              --rirawat
10879              open  tax_off_trx_aus(p_cle_id , p_book_type_code);
10880              FETCH tax_off_trx_aus INTO l_amortization_date;
10881              close tax_off_trx_aus ;
10882              IF l_amortization_date IS NULL THEN
10883               open tax_off_trx_amt(p_cle_id , p_book_type_code);
10884               FETCH tax_off_trx_amt INTO l_amortization_date;
10885               close tax_off_trx_amt ;
10886              END IF;
10887              --l_amortization_date := sysdate;
10888              l_special_treatment_required := 'Y';
10889          elsif ((l_book_class = 'TAX') and (l_tax_owner ='LESSEE')) THEN
10890              open  tax_off_trx_aus(p_cle_id , p_book_type_code);
10891              FETCH tax_off_trx_aus INTO l_amortization_date;
10892              close tax_off_trx_aus ;
10893              IF l_amortization_date IS NULL THEN
10894               open tax_off_trx_amt(p_cle_id , p_book_type_code);
10895               FETCH tax_off_trx_amt INTO l_amortization_date;
10896               close tax_off_trx_amt ;
10897              END IF;
10898              --l_amortization_date := sysdate;
10899              l_special_treatment_required := 'Y';
10900          END IF;
10901      END IF;
10902      x_amortization_date := l_amortization_date;
10903      x_special_treatment_required := l_special_treatment_required;
10904      --Call end Activity
10905      OKL_API.END_ACTIVITY(x_msg_count, x_msg_data);
10906  EXCEPTION
10907     WHEN OKL_API.G_EXCEPTION_ERROR THEN
10908     x_return_status := OKL_API.HANDLE_EXCEPTIONS(
10909                                l_api_name,
10910                                G_PKG_NAME,
10911                                'OKL_API.G_RET_STS_ERROR',
10912                                x_msg_count,
10913                                x_msg_data,
10914                                '_PVT');
10915     WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
10916     x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
10917                               l_api_name,
10918                               G_PKG_NAME,
10919                               'OKL_API.G_RET_STS_UNEXP_ERROR',
10920                               x_msg_count,
10921                               x_msg_data,
10922                               '_PVT');
10923     WHEN OTHERS THEN
10924     x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
10925                               l_api_name,
10926                               G_PKG_NAME,
10927                               'OTHERS',
10928                               x_msg_count,
10929                               x_msg_data,
10930                               '_PVT');
10931 END;
10932 --------------------------------------------------------------------------------
10933 --Start of Comments
10934 --Procedure Name : FIXED_ASSET_ADD
10935 --Description    : Calls FA additions api to create new assets for
10936 --                 and split children
10937 --History        :
10938 --                 28-Nov-2001  ashish.singh Created
10939 --               Bug# 6373605 (OKL.R12.B SLA CRs
10940 --               p_sla_source_header_id    IN Number,
10941 --                  ID of source OKL_TRX_ASSETS record
10942 --               p_sla_source_header_table IN Varchar2,
10943 --                  'OKL_TRX_ASSETS'
10944 --               p_sla_source_try_id       IN Number,
10945 --                   OKL_TRX_ASSETS.try_id (transaction type id)
10946 --               p_sla_source_line_id      IN Number,
10947 --                   ID of line table (OKL_TXL_ASSETS_B or
10948 --                                     OKL_TXD_ASSETS_B
10949 --               p_sla_source_line_table   IN Varchar2,
10950 --                    OKL_TXL_ASSETS_B or OKL_TXD_ASSETS_B
10951 --               p_sla_source_chr_id       IN Number,
10952 --                    Contract id of the contract on which
10953 --                    source transaction happened
10954 --               p_sla_source_kle_id       IN Number,
10955 --                    Financial asset line id (lse_id = 33)
10956 --               p_sla_asset_chr_id        IN Number,
10957 --                    Contract on which asset is present
10958 --                    at the time of transaction (in case of
10959 --                    online rebook transaction is against the rebook
10960 --                    copy contract whereas the asset is on
10961 --                    original contract
10962 --End of Comments
10963 --------------------------------------------------------------------------------
10964 PROCEDURE FIXED_ASSET_ADD   (p_api_version   IN  NUMBER,
10965                              p_init_msg_list IN  VARCHAR2 DEFAULT OKL_API.G_FALSE,
10966                              x_return_status OUT NOCOPY VARCHAR2,
10967                              x_msg_count     OUT NOCOPY NUMBER,
10968                              x_msg_data      OUT NOCOPY VARCHAR2,
10969                              p_ast_line_rec  IN  ast_line_rec_type,
10970                              p_txlv_rec      IN  txlv_rec_type,
10971                              p_txdv_rec      IN  txdv_rec_type,
10972                              --3156924
10973                              p_trx_date      IN  DATE,
10974                              p_trx_number    IN  NUMBER,
10975                              --Bug# 6373605--SLA populate source
10976                              p_sla_source_header_id    IN Number,
10977                              p_sla_source_header_table IN Varchar2,
10978                              p_sla_source_try_id       IN Number,
10979                              p_sla_source_line_id      IN Number,
10980                              p_sla_source_line_table   IN Varchar2,
10981                              p_sla_source_chr_id       IN Number,
10982                              p_sla_source_kle_id       IN Number,
10983                              p_sla_asset_chr_id        IN Number,
10984                              --Bug# 6373605--SLA populate source
10985                              --Bug# 4028371
10986                              x_fa_trx_date   OUT NOCOPY date,
10987                              x_asset_hdr_rec OUT NOCOPY FA_API_TYPES.asset_hdr_rec_type) IS
10988 
10989 l_return_status        VARCHAR2(1)  DEFAULT OKL_API.G_RET_STS_SUCCESS;
10990 l_api_name             CONSTANT VARCHAR2(30) := 'FIXED_ASSET_ADD';
10991 l_api_version          CONSTANT NUMBER := 1.0;
10992 
10993 l_trans_rec                FA_API_TYPES.trans_rec_type;
10994 l_dist_trans_rec           FA_API_TYPES.trans_rec_type;
10995 l_asset_hdr_rec            FA_API_TYPES.asset_hdr_rec_type;
10996 l_asset_desc_rec           FA_API_TYPES.asset_desc_rec_type;
10997 l_asset_cat_rec            FA_API_TYPES.asset_cat_rec_type;
10998 l_asset_type_rec           FA_API_TYPES.asset_type_rec_type;
10999 l_asset_fin_rec            FA_API_TYPES.asset_fin_rec_type;
11000 --l_asset_fin_glob_dff_rec   FA_API_TYPES.asset_fin_glob_dff_rec_type;
11001 l_asset_deprn_rec          FA_API_TYPES.asset_deprn_rec_type;
11002 l_asset_dist_rec           FA_API_TYPES.asset_dist_rec_type;
11003 l_asset_dist_tbl           FA_API_TYPES.asset_dist_tbl_type;
11004 l_inv_tbl                  FA_API_TYPES.inv_tbl_type;
11005 l_asset_hierarchy_rec      fa_api_types.asset_hierarchy_rec_type;
11006 
11007 l_split_factor             NUMBER;
11008 
11009 --cursor to get asset key ccid
11010    CURSOR asset_k_ccid_cur(p_asset_id IN NUMBER) IS
11011    SELECT asset_key_ccid
11012    FROM   fa_additions
11013    WHERE  asset_id = p_asset_id;
11014 
11015 --cursor to get depreciation info
11016   CURSOR  deprn_cur (p_asset_id        IN NUMBER,
11017                      p_book_type_code  IN VARCHAR2,
11018                      p_split_factor IN NUMBER) IS
11019   SELECT  ytd_deprn           - (ytd_deprn -(ytd_deprn*p_split_factor)),
11020           deprn_reserve       - (deprn_reserve -(deprn_reserve*p_split_factor)),
11021           prior_fy_expense    - (prior_fy_expense-(prior_fy_expense*p_split_factor)),
11022           bonus_ytd_deprn     - (bonus_ytd_deprn-(bonus_ytd_deprn*p_split_factor)),
11023           bonus_deprn_reserve - (bonus_deprn_reserve-(bonus_deprn_reserve*p_split_factor))
11024    FROM   okx_ast_dprtns_v
11025    WHERE  asset_id       = p_asset_id
11026    AND    book_type_code = p_book_type_code
11027    AND    deprn_run_date = (SELECT MAX(deprn_run_date)
11028                             FROM   okx_ast_dprtns_v
11029                             WHERE  asset_id       = p_asset_id
11030                             AND    book_type_code = p_book_type_code);
11031 
11032 --cursor to get asset distribution rec
11033    CURSOR     ast_dist_cur (p_asset_id        IN NUMBER,
11034                             p_book_type_code  IN VARCHAR2,
11035                             p_units           IN NUMBER) IS
11036    SELECT --p_txdv_rec.quantity,
11037           --p_ast_line_rec.current_units,
11038           p_units,
11039           assigned_to,
11040           code_combination_id,
11041           location_id,
11042           p_units
11043           --p_txdv_rec.quantity
11044           --p_ast_line_rec.current_units
11045    FROM   okx_ast_dst_hst_v
11046    WHERE  asset_id       = p_asset_id
11047    AND    book_type_code = p_book_type_code
11048    AND    transaction_header_id_out IS NULL
11049    AND    retirement_id IS NULL;
11050 
11051    -- Bug# 5946411 -- start
11052    CURSOR ast_dep_limit_csr (p_asset_id        IN NUMBER,
11053                              p_book_type_code  IN VARCHAR2
11054                             ) IS
11055    SELECT ALLOWED_DEPRN_LIMIT,
11056           ALLOWED_DEPRN_LIMIT_AMOUNT
11057           ,DEPRN_LIMIT_TYPE
11058           ,DEPRECIATE_FLAG
11059           --Bug# 6152614
11060           ,PRORATE_CONVENTION_CODE
11061           ,PRORATE_DATE
11062    FROM   FA_books
11063    WHERE  asset_id       = p_asset_id
11064    AND    book_type_code = p_book_type_code
11065    AND    transaction_header_id_out IS NULL;
11066 
11067    l_allowed_deprn_limit  FA_books.ALLOWED_DEPRN_LIMIT%TYPE;
11068    l_allowed_deprn_limit_amount FA_books.allowed_deprn_limit_amount%type;
11069    l_deprn_limit_type  FA_books.DEPRN_LIMIT_TYPE%TYPE;
11070    l_depreciate_flag   FA_books.DEPRECIATE_FLAG%TYPE;
11071    -- Bug# 5946411 -- end
11072    -- Bug# 6152614
11073    l_prorate_convention_code   FA_books.PRORATE_CONVENTION_CODE%TYPE;
11074    l_prorate_date   FA_books.PRORATE_DATE%TYPE;
11075 
11076 --cursor to fetch already created asset id if book_class is TAX ie. corp book is already created
11077    CURSOR  get_ast_id_cur (p_asset_number    IN VARCHAR2,
11078                            p_book_type_code  IN VARCHAR2) IS
11079    SELECT DECODE(bkc.book_class,'CORPORATE',NULL,'TAX',ast.asset_id)
11080    FROM   okx_assets_v ast,
11081           okx_asst_bk_controls_v bkc
11082    WHERE  ast.asset_number             = p_asset_number
11083    AND    ast.corporate_book           = bkc.mass_copy_source_book
11084    AND    bkc.book_type_code           = p_book_type_code;
11085 
11086   --3156924:
11087   l_calling_interface Varchar2(30) := 'OKLRSPAB:Split Asset';
11088 
11089   --Bug# 5946411
11090   l_asset_hdr_orig_rec            FA_API_TYPES.asset_hdr_rec_type;
11091 
11092  -- bug 6061103 -- start
11093   CURSOR l_cleb_sts_csr(pcleid IN NUMBER) IS
11094  SELECT cleb.sts_code sts_code,
11095         cleb.dnz_chr_id chr_id,
11096         khr.PDT_ID,
11097         chr.START_DATE
11098  FROM   okc_k_lines_b cleb,
11099         okl_k_headers khr,
11100         OKC_K_HEADERS_B chr
11101  WHERE  cleb.id = pcleid
11102          and khr.id = cleb.dnz_chr_id
11103          and chr.id = khr.id;
11104    l_cle_status okc_k_lines_b.sts_code%TYPE;
11105  --cursor to find book class
11106    CURSOR l_book_class_cur(p_book_type_code IN VARCHAR2) IS
11107    SELECT book_class
11108    FROM   okx_asst_bk_controls_v
11109    WHERE  book_type_code = p_book_type_code;
11110    l_book_class okx_asst_bk_controls_v.book_class%TYPE;
11111    l_pdt_id            Number;
11112  l_start_date        Date;
11113  l_chr_id        number;
11114   l_temp_cost    number;
11115    l_temp_original_cost      number;
11116    l_temp_salvage_value  number;
11117    l_temp_ytd_deprn  number;
11118 l_temp_deprn_reserve number;
11119 l_temp_prior_fy_expense number;
11120 l_temp_bonus_ytd_deprn number;
11121 l_temp_bonus_deprn_reserve number;
11122   l_amortization_date DATE;
11123  l_special_treatment_required VARCHAR2(1);
11124  l_adj_trans_rec               FA_API_TYPES.trans_rec_type;
11125 l_adj_asset_fin_rec_adj       FA_API_TYPES.asset_fin_rec_type;
11126 l_adj_asset_fin_rec_new       FA_API_TYPES.asset_fin_rec_type;
11127 l_adj_asset_fin_mrc_tbl_new   FA_API_TYPES.asset_fin_tbl_type;
11128 --l_asset_fin_glob_dff_rec  FA_API_TYPES.asset_fin_glob_dff_rec_type;
11129 l_adj_inv_trans_rec           FA_API_TYPES.inv_trans_rec_type;
11130 l_adj_inv_tbl                 FA_API_TYPES.inv_tbl_type;
11131 l_adj_inv_rate_tbl            FA_API_TYPES.inv_rate_tbl_type;
11132 l_adj_asset_deprn_rec_adj     FA_API_TYPES.asset_deprn_rec_type;
11133 l_adj_asset_deprn_rec_new     FA_API_TYPES.asset_deprn_rec_type;
11134 l_adj_asset_deprn_mrc_tbl_new FA_API_TYPES.asset_deprn_tbl_type;
11135 l_adj_inv_rec                 FA_API_TYPES.inv_rec_type;
11136 l_adj_asset_deprn_rec         FA_API_TYPES.asset_deprn_rec_type;
11137 l_adj_group_recalss_option_rec FA_API_TYPES.group_reclass_options_rec_type;
11138 -- bug 6061103 -- end
11139 
11140   --Bug# 6373605 begin
11141   l_fxhv_rec okl_sla_acc_sources_pvt.fxhv_rec_type;
11142   l_fxlv_rec okl_sla_acc_sources_pvt.fxlv_rec_type;
11143   --Bug# 6373605 end
11144 
11145 --Bug# 6955027
11146 x_log_level_rec              FA_API_TYPES.log_level_rec_type;
11147 
11148 BEGIN
11149      x_return_status := OKL_API.G_RET_STS_SUCCESS;
11150     -- Call start_activity to create savepoint, check compatibility
11151     -- and initialize message list
11152     x_return_status := OKL_API.START_ACTIVITY (
11153                                l_api_name
11154                                ,p_init_msg_list
11155                                ,'_PVT'
11156                                ,x_return_status);
11157     -- Check if activity started successfully
11158     IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
11159        RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
11160     ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
11161        RAISE OKL_API.G_EXCEPTION_ERROR;
11162     END IF;
11163 
11164    --dbms_output.enable(1000000);
11165 
11166    --FA_SRVR_MSG.Init_Server_Message;
11167    --FA_DEBUG_PKG.Initialize;
11168 
11169    --Bug# 6955027
11170    IF NOT FA_TRX_APPROVAL_PKG.faxcat
11171           (X_book              => p_ast_line_rec.corporate_book,
11172            X_asset_id          => p_ast_line_rec.asset_id,
11173            X_trx_type          => 'ADJUSTMENT',
11174            X_trx_date          => NULL,
11175            X_init_message_flag => 'NO',
11176            p_log_level_rec     => x_log_level_rec) then
11177       RAISE OKL_API.G_EXCEPTION_ERROR;
11178    END IF;
11179    --Bug# 6955027
11180 
11181    -----------------
11182    --trans_rec_info
11183    -----------------
11184    l_trans_rec.transaction_type_code         := 'ADDITION'; --optional
11185    --Bug# 3156924 :
11186    --l_trans_rec.transaction_date_entered      := p_ast_line_rec.in_service_date; --optional.defaults to dpis
11187    --l_trans_rec.transaction_date_entered      := p_trx_date; --optional.defaults to dpis
11188    l_trans_rec.who_info.last_updated_by      := FND_GLOBAL.USER_ID;
11189    --l_trans_rec.calling_interface             := 'OKL SPLIT ASSET';
11190    --Bug# 3156924 :
11191    l_trans_rec.calling_interface             := l_calling_interface; --optional
11192    l_trans_rec.transaction_name              := SUBSTR(TO_CHAR(p_trx_number),1,20); --optional
11193 
11194 
11195    ---------------
11196    --hdr_rec info
11197    --------------
11198    l_asset_hdr_rec.book_type_code    := p_ast_line_rec.corporate_book;
11199    l_asset_hdr_rec.set_of_books_id   := p_ast_line_rec.set_of_books_id;
11200    l_asset_hdr_rec.asset_id          := NULL;
11201 
11202    --for tax books fetch the asset id
11203    OPEN  get_ast_id_cur (p_asset_number    => p_txdv_rec.asset_number,
11204                          p_book_type_code  => p_ast_line_rec.corporate_book);
11205        FETCH get_ast_id_cur INTO l_asset_hdr_rec.asset_id;
11206        IF get_ast_id_cur%NOTFOUND THEN
11207            NULL;
11208        END IF;
11209    CLOSE get_ast_id_cur;
11210 
11211    ---------------
11212    -- desc info
11213    ---------------
11214    l_asset_desc_rec.asset_number       := p_txdv_rec.asset_number;
11215    l_asset_desc_rec.description        := p_txdv_rec.description;
11216    l_asset_desc_rec.manufacturer_name  := p_ast_line_rec.manufacturer_name;
11217    l_asset_desc_rec.in_use_flag        := p_ast_line_rec.in_use_flag;
11218    l_asset_desc_rec.inventorial        := p_ast_line_rec.inventorial;
11219    l_asset_desc_rec.property_type_code := p_ast_line_rec.property_type_code;
11220    l_asset_desc_rec.property_1245_1250_code     := p_ast_line_rec.property_1245_1250_code;
11221    l_asset_desc_rec.owned_leased       := p_ast_line_rec.owned_leased;
11222    l_asset_desc_rec.new_used           := p_ast_line_rec.new_used;
11223    --Bug# 2761799: model number not being copied
11224    l_asset_desc_rec.model_number       := p_ast_line_rec.model_number;
11225 
11226 
11227    OPEN asset_k_ccid_cur(p_asset_id => p_ast_line_rec.asset_id);
11228        FETCH asset_k_ccid_cur INTO l_asset_desc_rec.asset_key_ccid;
11229        IF asset_k_ccid_cur%NOTFOUND THEN
11230            NULL;
11231        END IF;
11232    CLOSE asset_k_ccid_cur;
11233 
11234    IF NVL(p_txdv_rec.split_percent,0) NOT IN (0,OKL_API.G_MISS_NUM) THEN
11235         l_split_factor := (p_txdv_rec.split_percent/100);
11236         l_asset_desc_rec.current_units := p_ast_line_rec.current_units;
11237    ELSE
11238         l_split_factor := (p_txdv_rec.quantity/p_txlv_rec.current_units);
11239          --l_asset_desc_rec.current_units                := p_txdv_rec.quantity;
11240         l_asset_desc_rec.current_units                := p_ast_line_rec.current_units -
11241                                                     (p_ast_line_rec.current_units -
11242                                                      (p_ast_line_rec.current_units*l_split_factor)
11243                                                       );
11244    END IF;
11245 
11246 
11247    --original_units - (original_units - (original_units*split_factor))
11248    --this should actually be on the current quantity and not on the qty when trx was saved
11249    --modify it later
11250 
11251    ----------------------
11252    --asset_type_rec info
11253    ---------------------
11254    l_asset_type_rec.asset_type := p_ast_line_rec.asset_type;
11255 
11256    ----------------------
11257    --asset_cat_rec_info
11258    ---------------------
11259    l_asset_cat_rec.category_id  := p_ast_line_rec.depreciation_category;
11260 
11261    --asset_fin_rec
11262    l_asset_fin_rec.set_of_books_id         := p_ast_line_rec.set_of_books_id;
11263    --3156924
11264    l_asset_fin_rec.date_placed_in_service  := p_ast_line_rec.in_service_date;
11265    --l_asset_fin_rec.date_placed_in_service  := p_trx_date;
11266    l_asset_fin_rec.deprn_method_code       := p_ast_line_rec.deprn_method_code;
11267    l_asset_fin_rec.life_in_months          := p_ast_line_rec.life_in_months;
11268    l_asset_fin_rec.cost                    := p_ast_line_rec.cost          -(p_ast_line_rec.cost- (p_ast_line_rec.cost*l_split_factor));
11269    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));
11270    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));
11271    l_asset_fin_rec.basic_rate              := p_ast_line_rec.basic_rate;
11272    l_asset_fin_rec.adjusted_rate           := p_ast_line_rec.adjusted_rate;
11273    l_asset_fin_rec.percent_salvage_value   := p_ast_line_rec.percent_salvage_value;
11274    l_asset_fin_rec.rate_adjustment_factor  := 1;
11275 
11276    -- Bug# 5946411 -- start
11277    OPEN  ast_dep_limit_csr (p_asset_id       => p_ast_line_rec.asset_id,
11278                             p_book_type_code => p_ast_line_rec.corporate_book);
11279 
11280    FETCH ast_dep_limit_csr INTO l_allowed_deprn_limit,
11281                             l_allowed_deprn_limit_amount,
11282                             l_deprn_limit_type,
11283                             l_depreciate_flag
11284                             --Bug# 6152614
11285                             ,l_prorate_convention_code
11286                             ,l_prorate_date;
11287 
11288    IF ast_dep_limit_csr%NOTFOUND THEN
11289         NULL;
11290    END IF;
11291    CLOSE ast_dep_limit_csr;
11292    l_asset_fin_rec.allowed_deprn_limit := l_allowed_deprn_limit;
11293    l_asset_fin_rec.allowed_deprn_limit_amount := l_allowed_deprn_limit_amount;
11294    -- Bug# 6152614
11295    l_asset_fin_rec.prorate_convention_code := l_prorate_convention_code;
11296    l_asset_fin_rec.prorate_date :=  l_prorate_date;
11297    -- Bug# 5946411 -- end
11298 
11299    --Bug# 6373605 start
11300    l_asset_fin_rec.contract_id            := p_sla_asset_chr_id;
11301    --Bug# 6373605 end
11302 
11303    -----------------
11304    --Bug# 3156924
11305    ----------------
11306    --l_asset_fin_rec.depreciate_flag         := 'YES';
11307 
11308    l_asset_deprn_rec.set_of_books_id := p_ast_line_rec.set_of_books_id;
11309 
11310    /* Bug# 5946411
11311     --commented following and added FA_UTIL to retrive asset deprn_rec
11312 
11313    OPEN  deprn_cur (p_asset_id       => p_ast_line_rec.asset_id,
11314                     p_book_type_code => p_ast_line_rec.corporate_book,
11315                     p_split_factor   => l_split_factor);
11316 
11317        FETCH deprn_cur INTO l_asset_deprn_rec.ytd_deprn,
11318                             l_asset_deprn_rec.deprn_reserve,
11319                             l_asset_deprn_rec.prior_fy_expense,
11320                             l_asset_deprn_rec.bonus_ytd_deprn,
11321                             l_asset_deprn_rec.bonus_deprn_reserve;
11322        IF deprn_cur%NOTFOUND THEN
11323            NULL;
11324        END IF;
11325    CLOSE deprn_cur;
11326 
11327    */
11328    l_asset_fin_rec.depreciate_flag := l_depreciate_flag;
11329    l_asset_fin_rec.deprn_limit_type :=l_deprn_limit_type;
11330    if NOT fa_cache_pkg.fazcbc(x_book => p_ast_line_rec.corporate_book) then
11331        OKL_API.SET_MESSAGE(p_app_name     => g_app_name,
11332                            p_msg_name     => 'OKL_LLA_FA_CACHE_ERROR'
11333                           );
11334        Raise OKL_API.G_EXCEPTION_ERROR;
11335    end if;
11336    l_asset_hdr_orig_rec.asset_id:=p_ast_line_rec.asset_id;
11337    l_asset_hdr_orig_rec.book_type_code    := p_ast_line_rec.corporate_book;
11338    -- To fetch Depreciation Reserve
11339    if not FA_UTIL_PVT.get_asset_deprn_rec
11340                 (p_asset_hdr_rec         => l_asset_hdr_orig_rec ,
11341                  px_asset_deprn_rec      => l_asset_deprn_rec,
11342                  p_period_counter        => NULL,
11343                  p_mrc_sob_type_code     => 'P'
11344                  ) then
11345        OKL_API.SET_MESSAGE(p_app_name     => g_app_name,
11346                            p_msg_name     => 'OKL_LLA_FA_DEPRN_REC_ERROR'
11347                           );
11348        Raise OKL_API.G_EXCEPTION_ERROR;
11349    end if;
11350    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));
11351    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));
11352    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));
11353    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));
11354    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));
11355 
11356    -- Bug# 6189396 -- start
11357    okl_execute_formula_pub.g_additional_parameters(1).name := 'SPLIT_ASSET_DEPRN_RESRVE';
11358    okl_execute_formula_pub.g_additional_parameters(1).value := to_char(l_asset_deprn_rec.deprn_reserve);
11359    -- Bug# 6189396 -- end
11360 
11361    ---------------------------------------------------------------------------------------
11362    --Bug# 3156924 : Due to partial retirement ytd_deprn may get greater than deprn_reserve
11363    ---------------------------------------------------------------------------------------
11364    IF l_asset_deprn_rec.ytd_deprn > l_asset_deprn_rec.deprn_reserve THEN
11365       l_asset_deprn_rec.ytd_deprn := l_asset_deprn_rec.deprn_reserve;
11366    END IF;
11367 
11368    --asset_dist_rec
11369    OPEN     ast_dist_cur (p_asset_id        => p_ast_line_rec.asset_id,
11370                           p_book_type_code  => p_ast_line_rec.corporate_book,
11371                           p_units           => l_asset_desc_rec.current_units);
11372 
11373        FETCH     ast_dist_cur INTO l_asset_dist_rec.units_assigned,
11374                                    l_asset_dist_rec.assigned_to,
11375                                    l_asset_dist_rec.expense_ccid,
11376                                    l_asset_dist_rec.location_ccid,
11377                                    l_asset_dist_rec.transaction_units;
11378 
11379        IF  ast_dist_cur%NOTFOUND THEN
11380            NULL;
11381        END IF;
11382 
11383    CLOSE ast_dist_cur;
11384 
11385       -- bug 6061103 start
11386     OPEN l_cleb_sts_csr(  p_txlv_rec.kle_id);
11387     FETCH l_cleb_sts_csr INTO l_cle_status, l_chr_id, l_pdt_id, l_start_date ;
11388     close l_cleb_sts_csr;
11389      is_evergreen_df_lease
11390                    (p_api_version     =>  p_api_version,
11391                     p_init_msg_list   =>  p_init_msg_list,
11392                     x_return_status   =>  x_return_status,
11393                     x_msg_count       =>  x_msg_count,
11394                     x_msg_data        =>  x_msg_data,
11395                     p_cle_id          =>  p_ast_line_rec.PARENT_LINE_ID ,--p_ast_line_rec.asset_id, rirawat
11396                     p_book_type_code   =>  p_ast_line_rec.corporate_book,
11397                     p_asset_status    => l_cle_status,
11398                     p_pdt_id          => l_pdt_id,
11399                     p_start_date      => l_start_date,
11400                     x_amortization_date => l_amortization_date,
11401                     x_special_treatment_required => l_special_treatment_required);
11402            IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
11403                RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
11404            ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
11405                RAISE OKL_API.G_EXCEPTION_ERROR;
11406            END IF;
11407     if (l_special_treatment_required = 'Y') then
11408          l_temp_cost := l_asset_fin_rec.cost;
11409          l_temp_original_cost := l_asset_fin_rec.original_cost;
11410          l_temp_salvage_value := l_asset_fin_rec.salvage_value;
11411          l_temp_ytd_deprn := l_asset_deprn_rec.ytd_deprn;
11412          l_temp_deprn_reserve := l_asset_deprn_rec.deprn_reserve;
11413          l_temp_prior_fy_expense := l_asset_deprn_rec.prior_fy_expense;
11414          l_temp_bonus_ytd_deprn := l_asset_deprn_rec.bonus_ytd_deprn ;
11415          l_temp_bonus_deprn_reserve := l_asset_deprn_rec.bonus_deprn_reserve;
11416          l_asset_fin_rec.cost              := 0;
11417          l_asset_fin_rec.original_cost           := 0;
11418          l_asset_fin_rec.salvage_value           := 0 ;
11419          l_asset_deprn_rec.ytd_deprn:= 0;
11420          l_asset_deprn_rec.deprn_reserve:= 0;
11421          l_asset_deprn_rec.prior_fy_expense:= 0;
11422          l_asset_deprn_rec.bonus_ytd_deprn:= 0;
11423          l_asset_deprn_rec.bonus_deprn_reserve:= 0;
11424    end if;
11425      -- bug 6061103 end
11426    l_asset_dist_tbl(1) := l_asset_dist_rec;
11427 
11428    --dbms_output.put_line('Add '||l_asset_desc_rec.asset_number || ' Deprn reserve '||to_char(l_asset_deprn_rec.deprn_reserve));
11429    -- call the api
11430    fa_addition_pub.do_addition
11431       (p_api_version             => p_api_version,
11432        p_init_msg_list           => OKL_API.G_FALSE,
11433        p_commit                  => OKL_API.G_FALSE,
11434        p_validation_level        => FND_API.G_VALID_LEVEL_FULL,
11435        x_return_status           => x_return_status,
11436        x_msg_count               => x_msg_count,
11437        x_msg_data                => x_msg_data,
11438        --Bug# 3156924
11439        p_calling_fn              => l_calling_interface,
11440        px_trans_rec              => l_trans_rec,
11441        px_dist_trans_rec         => l_dist_trans_rec,
11442        px_asset_hdr_rec          => l_asset_hdr_rec,
11443        px_asset_desc_rec         => l_asset_desc_rec,
11444        px_asset_type_rec         => l_asset_type_rec,
11445        px_asset_cat_rec          => l_asset_cat_rec,
11446        px_asset_hierarchy_rec    => l_asset_hierarchy_rec,
11447        px_asset_fin_rec          => l_asset_fin_rec,
11448        px_asset_deprn_rec        => l_asset_deprn_rec,
11449        px_asset_dist_tbl         => l_asset_dist_tbl,
11450        px_inv_tbl                => l_inv_tbl
11451       );
11452 
11453      --dbms_output.put_line(x_return_status);
11454      IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
11455          RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
11456      ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
11457          RAISE OKL_API.G_EXCEPTION_ERROR;
11458      END IF;
11459 
11460       --bug# 6373605 -- call populate sla sources
11461       l_fxhv_rec.source_id := p_sla_source_header_id;
11462       l_fxhv_rec.source_table := p_sla_source_header_table;
11463       l_fxhv_rec.khr_id := p_sla_source_chr_id;
11464       l_fxhv_rec.try_id := p_sla_source_try_id;
11465 
11466       l_fxlv_rec.source_id := p_sla_source_line_id;
11467       l_fxlv_rec.source_table := p_sla_source_line_table;
11468       l_fxlv_rec.kle_id := p_sla_source_kle_id;
11469 
11470       l_fxlv_rec.asset_id := l_asset_hdr_rec.asset_id;
11471       l_fxlv_rec.fa_transaction_id := l_trans_rec.transaction_header_id;
11472       l_fxlv_rec.asset_book_type_name := l_asset_hdr_rec.book_type_code;
11473 
11474       OKL_SLA_ACC_SOURCES_PVT.populate_sources(
11475       p_api_version  => p_api_version
11476      ,p_init_msg_list => p_init_msg_list
11477      ,p_fxhv_rec => l_fxhv_rec
11478      ,p_fxlv_rec => l_fxlv_rec
11479      ,x_return_status => x_return_status
11480      ,x_msg_count    => x_msg_count
11481      ,x_msg_data    => x_msg_data
11482       );
11483      IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
11484          RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
11485      ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
11486          RAISE OKL_API.G_EXCEPTION_ERROR;
11487      END IF;
11488      --bug# 6373605 -- call populate SLA sources
11489 
11490      --Bug# 6061103
11491      if (l_special_treatment_required = 'Y') and (l_temp_cost <> 0) then
11492          l_adj_trans_rec.transaction_subtype     := 'AMORTIZED';
11493          --Bug# 6331465
11494          --l_adj_trans_rec.amortization_start_date := l_amortization_date;
11495          l_adj_trans_rec.transaction_name  := SUBSTR(TO_CHAR(p_trx_number),1,20); --optional
11496          l_adj_trans_rec.calling_interface := l_calling_interface; --optional
11497          l_adj_asset_fin_rec_adj.cost              := l_temp_cost;
11498          l_adj_asset_fin_rec_adj.original_cost           := l_temp_original_cost;
11499          l_adj_asset_fin_rec_adj.salvage_value           := l_temp_salvage_value ;
11500          l_adj_asset_deprn_rec_adj.ytd_deprn:= l_temp_ytd_deprn;
11501          l_adj_asset_deprn_rec_adj.deprn_reserve:= l_temp_deprn_reserve;
11502          l_adj_asset_deprn_rec_adj.prior_fy_expense:= l_temp_prior_fy_expense;
11503          l_adj_asset_deprn_rec_adj.bonus_ytd_deprn:= l_temp_bonus_ytd_deprn;
11504          l_adj_asset_deprn_rec_adj.bonus_deprn_reserve:= l_temp_bonus_deprn_reserve;
11505 
11506          FA_ADJUSTMENT_PUB.do_adjustment
11507           (p_api_version             => p_api_version,
11508            p_init_msg_list           => p_init_msg_list,
11509            p_commit                  => OKL_API.G_FALSE,
11510            p_validation_level        => FND_API.G_VALID_LEVEL_FULL,
11511            x_return_status           => x_return_status,
11512            x_msg_count               => x_msg_count,
11513            x_msg_data                => x_msg_data,
11514            --Bug# 3156924
11515            --p_calling_fn              => null,
11516            p_calling_fn              => l_calling_interface,
11517            px_trans_rec              => l_adj_trans_rec,
11518            px_asset_hdr_rec          => l_asset_hdr_rec,
11519            p_asset_fin_rec_adj       => l_adj_asset_fin_rec_adj,
11520            x_asset_fin_rec_new       => l_adj_asset_fin_rec_new,
11521            x_asset_fin_mrc_tbl_new   => l_adj_asset_fin_mrc_tbl_new,
11522            px_inv_trans_rec          => l_adj_inv_trans_rec,
11523            px_inv_tbl                => l_adj_inv_tbl,
11524            p_asset_deprn_rec_adj     => l_adj_asset_deprn_rec_adj,
11525            x_asset_deprn_rec_new     => l_adj_asset_deprn_rec_new,
11526            x_asset_deprn_mrc_tbl_new => l_adj_asset_deprn_mrc_tbl_new,
11527            p_group_reclass_options_rec => l_adj_group_recalss_option_rec
11528           );
11529           --dbms_output.put_line('After calling FA adjustment Api '||x_return_status);
11530          IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
11531            RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
11532          ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
11533            RAISE OKL_API.G_EXCEPTION_ERROR;
11534          END IF;
11535 
11536          --bug# 6373605 -- call populate sla sources
11537          l_fxhv_rec.source_id := p_sla_source_header_id;
11538          l_fxhv_rec.source_table := p_sla_source_header_table;
11539          l_fxhv_rec.khr_id := p_sla_source_chr_id;
11540          l_fxhv_rec.try_id := p_sla_source_try_id;
11541 
11542          l_fxlv_rec.source_id := p_sla_source_line_id;
11543          l_fxlv_rec.source_table := p_sla_source_line_table;
11544          l_fxlv_rec.kle_id := p_sla_source_kle_id;
11545 
11546          l_fxlv_rec.asset_id := l_asset_hdr_rec.asset_id;
11547          l_fxlv_rec.fa_transaction_id := l_adj_trans_rec.transaction_header_id;
11548          l_fxlv_rec.asset_book_type_name := l_asset_hdr_rec.book_type_code;
11549 
11550          OKL_SLA_ACC_SOURCES_PVT.populate_sources(
11551            p_api_version  => p_api_version
11552            ,p_init_msg_list => p_init_msg_list
11553            ,p_fxhv_rec => l_fxhv_rec
11554            ,p_fxlv_rec => l_fxlv_rec
11555            ,x_return_status => x_return_status
11556            ,x_msg_count    => x_msg_count
11557            ,x_msg_data    => x_msg_data
11558           );
11559          IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
11560            RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
11561          ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
11562            RAISE OKL_API.G_EXCEPTION_ERROR;
11563          END IF;
11564          --bug# 6373605 -- call populate SLA sources
11565 
11566      end if;
11567      x_asset_hdr_rec := l_asset_hdr_rec;
11568      --Bug# 4028371
11569      x_fa_trx_date   := l_adj_trans_rec.transaction_date_entered;  -- for 6061103 chaged to adj
11570 
11571      OKL_API.END_ACTIVITY (x_msg_count,
11572                           x_msg_data );
11573     EXCEPTION
11574     WHEN OKL_API.G_EXCEPTION_ERROR THEN
11575     x_return_status := OKL_API.HANDLE_EXCEPTIONS(
11576                                l_api_name,
11577                                G_PKG_NAME,
11578                                'OKL_API.G_RET_STS_ERROR',
11579                                x_msg_count,
11580                                x_msg_data,
11581                                '_PVT');
11582     WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
11583     x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
11584                               l_api_name,
11585                               G_PKG_NAME,
11586                               'OKL_API.G_RET_STS_UNEXP_ERROR',
11587                               x_msg_count,
11588                               x_msg_data,
11589                               '_PVT');
11590     WHEN OTHERS THEN
11591     x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
11592                               l_api_name,
11593                               G_PKG_NAME,
11594                               'OTHERS',
11595                               x_msg_count,
11596                               x_msg_data,
11597                               '_PVT');
11598 END FIXED_ASSET_ADD;
11599 --Bug# 3156924
11600 --------------------------------------------------------------------------------
11601 --Start of Comments
11602 --Procedure Name : FIXED_ASSET_UNIT_ADJUST
11603 --Description    : Does unit adjustment on parent asset (source asset to split) in FA
11604 --History        :
11605 --                 26-Feb-2004  ashish.singh Created
11606 --End of Comments
11607 --------------------------------------------------------------------------------
11608   PROCEDURE FIXED_ASSET_unit_adjust
11609                              (p_api_version   IN  NUMBER,
11610                               p_init_msg_list IN  VARCHAR2 DEFAULT OKL_API.G_FALSE,
11611                               x_return_status OUT NOCOPY VARCHAR2,
11612                               x_msg_count     OUT NOCOPY NUMBER,
11613                               x_msg_data      OUT NOCOPY VARCHAR2,
11614                               p_ast_line_rec  IN  ast_line_rec_type,
11615                               p_txlv_rec      IN  txlv_rec_type,
11616                               p_txdv_rec      IN  txdv_rec_type,
11617                               --Bug# 3156924
11618                               p_trx_date      IN  DATE,
11619                               p_trx_number  IN  NUMBER,
11620                               --Bug# 4028371
11621                               x_fa_trx_date OUT NOCOPY DATE) IS
11622 
11623   l_return_status        VARCHAR2(1)  DEFAULT OKL_API.G_RET_STS_SUCCESS;
11624   l_api_name             CONSTANT VARCHAR2(30) := 'FIXED_ASSET_UNIT_ADJ';
11625   l_api_version          CONSTANT NUMBER := 1.0;
11626 
11627 
11628   l_trans_rec          fa_api_types.trans_rec_type;
11629   l_asset_hdr_rec      fa_api_types.asset_hdr_rec_type;
11630   l_asset_dist_tbl     fa_api_types.asset_dist_tbl_type;
11631 
11632   l_calling_interface  VARCHAR2(30) := 'OKL:Split Asset';
11633   l_units_to_adjust    NUMBER;
11634   i                    NUMBER;
11635   l_split_factor       NUMBER;
11636 
11637 
11638    --cursor to get the distributions
11639    CURSOR    l_dist_curs(p_asset_id       IN NUMBER,
11640                         p_corporate_book IN VARCHAR2) IS
11641    SELECT  units_assigned,
11642            distribution_id
11643    FROM    OKX_AST_DST_HST_V
11644    WHERE   asset_id = p_ast_line_rec.asset_id
11645    AND     book_type_code = p_ast_line_rec.corporate_book
11646    AND     transaction_header_id_out IS NULL
11647    AND     retirement_id IS NULL;
11648 
11649    l_units_assigned   NUMBER;
11650    l_distribution_id  NUMBER;
11651 
11652   BEGIN
11653       x_return_status := OKL_API.G_RET_STS_SUCCESS;
11654       -- Call start_activity to create savepoint, check compatibility
11655       -- and initialize message list
11656       x_return_status := OKL_API.START_ACTIVITY (
11657                                l_api_name
11658                                ,p_init_msg_list
11659                                ,'_PVT'
11660                                ,x_return_status);
11661       -- Check if activity started successfully
11662       IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
11663          RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
11664       ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
11665          RAISE OKL_API.G_EXCEPTION_ERROR;
11666       END IF;
11667 
11668       l_split_factor           := (p_txdv_rec.quantity/p_txlv_rec.current_units);
11669       l_asset_hdr_rec.asset_id := p_ast_line_rec.asset_id;
11670       l_asset_hdr_rec.book_type_code := p_ast_line_rec.corporate_book;
11671 
11672       -- transaction date must be filled in if performing
11673       -- prior period transfer
11674       l_trans_rec.transaction_date_entered := NULL;
11675       l_trans_rec.transaction_name          := SUBSTR(TO_CHAR(p_trx_number),1,20);
11676       l_trans_rec.calling_interface         := l_calling_interface;
11677       l_trans_rec.who_info.last_updated_by := FND_GLOBAL.USER_ID;
11678       l_trans_rec.who_info.last_update_login := FND_GLOBAL.LOGIN_ID;
11679 
11680 
11681       l_asset_dist_tbl.DELETE;
11682 
11683       l_units_to_adjust := p_ast_line_rec.current_units - (p_ast_line_rec.current_units*l_split_factor);
11684 
11685        --dbms_output.put_line('Units to adjust outside loop'||l_units_to_adjust );
11686        i := 1;
11687        OPEN l_dist_curs(p_ast_line_rec.asset_id, p_ast_line_rec.corporate_book);
11688        LOOP
11689            FETCH l_dist_curs INTO l_units_assigned, l_distribution_id;
11690            EXIT WHEN l_dist_curs%NOTFOUND;
11691            IF l_units_to_adjust = 0 THEN
11692               EXIT;
11693            ELSIF l_units_to_adjust >= l_units_assigned THEN
11694               l_asset_dist_tbl(i).distribution_id := l_distribution_id;
11695               l_asset_dist_tbl(i).transaction_units := (-1)*l_units_assigned;
11696               --dbms_output.put_line('Units to adjust '||to_char(l_asset_dist_tbl(i).transaction_units));
11697               l_asset_dist_tbl(i).units_assigned := NULL;
11698               l_asset_dist_tbl(i).assigned_to := NULL;
11699               l_asset_dist_tbl(i).expense_ccid := NULL;
11700               l_asset_dist_tbl(i).location_ccid := NULL;
11701               l_units_to_adjust := l_units_to_adjust - l_units_assigned;
11702               i := i + 1;
11703            ELSIF l_units_to_adjust < l_units_assigned THEN
11704               l_asset_dist_tbl(i).distribution_id := l_distribution_id;
11705               l_asset_dist_tbl(i).transaction_units := (-1)*l_units_to_adjust;
11706               --dbms_output.put_line('Units to adjust '||to_char(l_asset_dist_tbl(i).transaction_units));
11707               l_asset_dist_tbl(i).units_assigned := NULL;
11708               l_asset_dist_tbl(i).assigned_to := NULL;
11709               l_asset_dist_tbl(i).expense_ccid := NULL;
11710               l_asset_dist_tbl(i).location_ccid := NULL;
11711               l_units_to_adjust := l_units_to_adjust - l_units_to_adjust;
11712               i := i + 1;
11713            END IF;
11714        END LOOP;
11715        CLOSE l_dist_curs;
11716 
11717       FA_UNIT_ADJ_PUB.do_unit_adjustment(
11718            p_api_version       => p_api_version,
11719            p_init_msg_list      => FND_API.G_FALSE,
11720            p_commit            => FND_API.G_FALSE,
11721            p_validation_level  => FND_API.G_VALID_LEVEL_FULL,
11722            --bug# 3156924 :
11723            p_calling_fn        => l_calling_interface,
11724            --p_calling_fn        => NULL,
11725            x_return_status     => x_return_status,
11726            x_msg_count         => x_msg_count,
11727            x_msg_data          => x_msg_data,
11728            px_trans_rec        => l_trans_rec,
11729            px_asset_hdr_rec    => l_asset_hdr_rec,
11730            px_asset_dist_tbl   => l_asset_dist_tbl);
11731 
11732          --dbms_output.put_line('After calling FA unit adjust Api '||x_return_status);
11733      IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
11734          RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
11735      ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
11736          RAISE OKL_API.G_EXCEPTION_ERROR;
11737      END IF;
11738      OKL_API.END_ACTIVITY (x_msg_count,
11739                           x_msg_data );
11740      EXCEPTION
11741      WHEN OKL_API.G_EXCEPTION_ERROR THEN
11742      x_return_status := OKL_API.HANDLE_EXCEPTIONS(
11743                                 l_api_name,
11744                                G_PKG_NAME,
11745                                'OKL_API.G_RET_STS_ERROR',
11746                                x_msg_count,
11747                                x_msg_data,
11748                                '_PVT');
11749      WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
11750      x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
11751                               l_api_name,
11752                               G_PKG_NAME,
11753                               'OKL_API.G_RET_STS_UNEXP_ERROR',
11754                               x_msg_count,
11755                               x_msg_data,
11756                               '_PVT');
11757      WHEN OTHERS THEN
11758     x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
11759                               l_api_name,
11760                               G_PKG_NAME,
11761                               'OTHERS',
11762                               x_msg_count,
11763                               x_msg_data,
11764                               '_PVT');
11765 END FIXED_ASSET_unit_ADJUST;
11766 --Bug# 3156924
11767 --------------------------------------------------------------------------------
11768 --Start of Comments
11769 --Procedure Name : FIXED_ASSET_RETIRE
11770 --Description    : Retires the Parent fixed Asset (source asset to split) in FA
11771 --History        :
11772 --                 20-Dec-2001  ashish.singh Created
11773 --                 24-Jul-2002  ashish.singh Modified to take care of Full
11774 --                              retirement for split asset compoents
11775 --End of Comments
11776 --------------------------------------------------------------------------------
11777 PROCEDURE FIXED_ASSET_RETIRE (p_api_version   IN  NUMBER,
11778                               p_init_msg_list IN  VARCHAR2 DEFAULT OKL_API.G_FALSE,
11779                               x_return_status OUT NOCOPY VARCHAR2,
11780                               x_msg_count     OUT NOCOPY NUMBER,
11781                               x_msg_data      OUT NOCOPY VARCHAR2,
11782                               p_ast_line_rec  IN  ast_line_rec_type,
11783                               p_txlv_rec      IN  txlv_rec_type,
11784                               p_txdv_rec      IN  txdv_rec_type,
11785                               --Bug# 3156924
11786                               p_trx_date      IN  DATE,
11787                               p_trx_number  IN  NUMBER,
11788                               --Bug# 4028371
11789                               x_fa_trx_date OUT NOCOPY date) IS
11790 
11791    l_return_status        VARCHAR2(1)  DEFAULT OKL_API.G_RET_STS_SUCCESS;
11792    l_api_name             CONSTANT VARCHAR2(30) := 'FIXED_ASSET_RETIRE';
11793    l_api_version          CONSTANT NUMBER := 1.0;
11794 
11795    l_user_id                 NUMBER := 1001; -- USER_ID must properly be set to run calc gain/loss
11796    l_request_id              NUMBER;
11797    l_split_factor            NUMBER;
11798    l_units_to_retire         NUMBER;
11799 
11800    /* define local record types */
11801    l_trans_rec              FA_API_TYPES.trans_rec_type;
11802    l_asset_hdr_rec          FA_API_TYPES.asset_hdr_rec_type;
11803    l_asset_retire_rec       FA_API_TYPES.asset_retire_rec_type;
11804    l_asset_dist_tbl         FA_API_TYPES.asset_dist_tbl_type;
11805    l_subcomp_tbl            FA_API_TYPES.subcomp_tbl_type;
11806    l_inv_tbl                FA_API_TYPES.inv_tbl_type;
11807    l_dist_trans_rec         FA_API_TYPES.trans_rec_type;
11808 
11809 
11810    l_commit                VARCHAR2(1) := FND_API.G_FALSE;
11811    l_validation_level      NUMBER := FND_API.G_VALID_LEVEL_FULL;
11812    l_calling_fn            VARCHAR2(80) := 'OKL_SPLIT_ASSET_PVT';
11813 
11814    i                       NUMBER := 0;
11815 
11816    --cursor to get the distributions
11817    CURSOR    l_dist_curs(p_asset_id       IN NUMBER,
11818                          p_corporate_book IN VARCHAR2) IS
11819    SELECT  units_assigned,
11820            distribution_id
11821    FROM    OKX_AST_DST_HST_V
11822    WHERE   asset_id = p_ast_line_rec.asset_id
11823    AND     book_type_code = p_ast_line_rec.corporate_book
11824    AND     transaction_header_id_out IS NULL
11825    AND     retirement_id IS NULL;
11826 
11827    l_units_assigned   NUMBER;
11828    l_distribution_id  NUMBER;
11829 
11830 --cursor to find book class
11831    CURSOR l_book_class_cur(p_book_type_code IN VARCHAR2) IS
11832    SELECT book_class
11833    FROM   okx_asst_bk_controls_v
11834    WHERE  book_type_code = p_book_type_code;
11835 
11836    l_book_class okx_asst_bk_controls_v.book_class%TYPE;
11837 
11838 --debug variables
11839   api_error EXCEPTION;
11840   mesg_count NUMBER;
11841   temp_str   VARCHAR2(2000);
11842 
11843   --Bug# 3156924 : cursor to get retirement prorate convention from defaults
11844   CURSOR l_fcbd_csr (p_book_type_code IN VARCHAR2,
11845                      p_category_id IN NUMBER,
11846                      p_dpis        IN DATE) IS
11847   SELECT retirement_prorate_convention
11848   FROM   fa_category_book_defaults
11849   WHERE  book_type_code = p_book_type_code
11850   AND    category_id    = p_category_id
11851   AND    p_dpis BETWEEN start_dpis AND NVL(end_dpis,p_dpis);
11852 
11853   l_retire_prorate_convention fa_category_book_defaults.retirement_prorate_convention%TYPE;
11854 
11855     --Bug# 3156924 :
11856    l_calling_interface     CONSTANT VARCHAR2(30) := 'OKLRSPAB:Split Asset';
11857    --Bug# 4028371
11858    l_fa_unit_adj_date      date;
11859 
11860 
11861 BEGIN
11862 
11863      x_return_status := OKL_API.G_RET_STS_SUCCESS;
11864     -- Call start_activity to create savepoint, check compatibility
11865     -- and initialize message list
11866     x_return_status := OKL_API.START_ACTIVITY (
11867                                l_api_name
11868                                ,p_init_msg_list
11869                                ,'_PVT'
11870                                ,x_return_status);
11871     -- Check if activity started successfully
11872     IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
11873        RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
11874     ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
11875        RAISE OKL_API.G_EXCEPTION_ERROR;
11876     END IF;
11877 
11878 
11879    --dbms_output.disable;
11880    --dbms_output.enable(1000000);
11881    --dbms_output.put_line('begin');
11882    --fa_srvr_msg.init_server_message;
11883    --fa_debug_pkg.set_debug_flag(debug_flag => 'YES');
11884 
11885    -- Get standard who info
11886    l_request_id := fnd_global.conc_request_id;
11887    fnd_profile.get('LOGIN_ID', l_trans_rec.who_info.last_update_login);
11888    fnd_profile.get('USER_ID', l_trans_rec.who_info.last_updated_by);
11889    IF (l_trans_rec.who_info.last_updated_by IS NULL) THEN
11890       l_trans_rec.who_info.last_updated_by := -1;
11891    END IF;
11892    IF (l_trans_rec.who_info.last_update_login IS NULL) THEN
11893       l_trans_rec.who_info.last_update_login := -1;
11894    END IF;
11895 
11896    l_trans_rec.who_info.last_update_date := SYSDATE;
11897    l_trans_rec.who_info.creation_date    :=  l_trans_rec.who_info.last_update_date;
11898    l_trans_rec.who_info.created_by       :=  l_trans_rec.who_info.last_updated_by;
11899 
11900    l_trans_rec.transaction_type_code    := NULL; -- this will be determined inside API
11901    l_trans_rec.transaction_date_entered := NULL; --defaults to dpis
11902    --Bug# 3156924 :
11903    l_trans_rec.calling_interface        := l_calling_interface;
11904    l_trans_rec.transaction_name         := SUBSTR(TO_CHAR(p_trx_number),1,20);
11905 
11906    l_asset_hdr_rec.asset_id           := p_ast_line_rec.asset_id;
11907    l_asset_hdr_rec.book_type_code     := p_ast_line_rec.corporate_book;
11908    l_asset_hdr_rec.period_of_addition := NULL;
11909 
11910    l_split_factor := (p_txdv_rec.quantity/p_txlv_rec.current_units);
11911 
11912    --Bug# 3156924 :
11913    OPEN l_fcbd_csr(p_book_type_code   => l_asset_hdr_rec.book_type_code,
11914                    p_category_id      => p_ast_line_rec.depreciation_category,
11915                    p_dpis             => p_ast_line_rec.in_service_date);
11916 
11917    FETCH l_fcbd_csr INTO l_retire_prorate_convention;
11918    IF l_fcbd_csr%NOTFOUND THEN
11919        NULL;
11920    END IF;
11921    CLOSE l_fcbd_csr;
11922 
11923    --l_asset_retire_rec.retirement_prorate_convention := 'MID-MONTH';
11924    l_asset_retire_rec.retirement_prorate_convention := l_retire_prorate_convention;
11925     -- what should retirement prorate convntion be
11926    --l_asset_retire_rec.date_retired := NULL; -- will be current period by default
11927    --3156924 :
11928    --l_asset_retire_rec.date_retired := p_trx_date; -- will be current period by default
11929 
11930    IF NVL(p_txdv_rec.split_percent,0) <> 0 OR p_txdv_rec.split_percent <> OKL_API.G_MISS_NUM THEN
11931        --fully retire for split asset compoents
11932        l_asset_retire_rec.units_retired := NULL;
11933        l_asset_retire_rec.cost_retired := p_ast_line_rec.cost;
11934    ELSE
11935       --partially retire for normal split asset
11936       --Bug# 3156924 : either units or cost should be retired
11937       --l_asset_retire_rec.units_retired := p_ast_line_rec.current_units -(p_ast_line_rec.current_units*l_split_factor);
11938       --l_asset_retire_rec.cost_retired := 30000;
11939       l_asset_retire_rec.cost_retired := p_ast_line_rec.cost - (p_ast_line_rec.cost*l_split_factor);
11940    END IF;
11941 
11942    l_asset_retire_rec.proceeds_of_sale := 0;
11943    l_asset_retire_rec.cost_of_removal := 0;
11944    l_asset_retire_rec.retirement_type_code := FND_PROFILE.VALUE('OKL_SPLIT_ASSET_RETIRE_TYPE');
11945    --l_asset_retire_rec.retirement_type_code := 'SPLIT';
11946    l_asset_retire_rec.trade_in_asset_id := NULL;
11947    --l_asset_retire_rec.calculate_gain_loss := FND_API.G_FALSE;
11948    l_asset_retire_rec.calculate_gain_loss := FND_API.G_TRUE;
11949    --assign this to FND_API.G_TRUE if it is required to calculate the gain loss
11950 
11951    fnd_profile.put('USER_ID',l_user_id);
11952 
11953    IF NVL(p_txdv_rec.split_percent,0) <> 0 OR p_txdv_rec.split_percent <> OKL_API.G_MISS_NUM THEN
11954       --no need to do distribution level retirements as full retirment being done
11955       -- for split asset components
11956       NULL;
11957    ELSE
11958 
11959       --do distribution level unit adjustments
11960       l_book_class := NULL;
11961 
11962       OPEN l_book_class_cur(p_book_type_code => p_ast_line_rec.corporate_book);
11963           FETCH l_book_class_cur INTO l_book_class;
11964           IF l_book_class_cur%NOTFOUND THEN
11965              NULL;
11966           END IF;
11967       CLOSE l_book_class_cur;
11968 
11969 
11970       IF l_book_class = 'CORPORATE' THEN
11971           --Bug# 3156924 : either do cost retire or units retire
11972           FIXED_ASSET_unit_adjust
11973                              (p_api_version   => p_api_version ,
11974                               p_init_msg_list => p_init_msg_list,
11975                               x_return_status => x_return_status,
11976                               x_msg_count     => x_msg_count,
11977                               x_msg_data      => x_msg_data,
11978                               p_ast_line_rec  => p_ast_line_rec,
11979                               p_txlv_rec      => p_txlv_rec,
11980                               p_txdv_rec      => p_txdv_rec,
11981                               --Bug# 3156924
11982                               p_trx_date      => p_trx_date,
11983                               p_trx_number    => p_trx_number,
11984                               --Bug# 4028371
11985                               x_fa_trx_date   => l_fa_unit_adj_date);
11986 
11987           IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
11988               RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
11989           ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
11990               RAISE OKL_API.G_EXCEPTION_ERROR;
11991           END IF;
11992           --Bug# 3156924
11993          /*---------------commented; either retire cost or units---------------------------------------
11994          --l_asset_dist_tbl.delete;
11995          --how to find which distribution to retire from ??
11996         --l_units_to_retire := p_ast_line_rec.current_units -(p_ast_line_rec.current_units*l_split_factor);
11997         --i := 1;
11998         --open l_dist_curs(p_ast_line_rec.asset_id, p_ast_line_rec.corporate_book);
11999         --Loop
12000             --Fetch l_dist_curs into l_units_assigned, l_distribution_id;
12001             --Exit When l_dist_curs%NOTFOUND;
12002             --If l_units_to_retire = 0 Then
12003                --Exit;
12004             --Elsif l_units_to_retire >= l_units_assigned Then
12005                --l_asset_dist_tbl(i).distribution_id := l_distribution_id;
12006                --l_asset_dist_tbl(i).transaction_units := (-1)*l_units_assigned;
12007                --l_asset_dist_tbl(i).units_assigned := null;
12008                --l_asset_dist_tbl(i).assigned_to := null;
12009                --l_asset_dist_tbl(i).expense_ccid := null;
12010                --l_asset_dist_tbl(i).location_ccid := null;
12011                --l_units_to_retire := l_units_to_retire - l_units_assigned;
12012                --i := i + 1;
12013             --Elsif l_units_to_retire < l_units_assigned Then
12014                --l_asset_dist_tbl(i).distribution_id := l_distribution_id;
12015                --l_asset_dist_tbl(i).transaction_units := (-1)*l_units_to_retire;
12016                --l_asset_dist_tbl(i).units_assigned := null;
12017                --l_asset_dist_tbl(i).assigned_to := null;
12018                --l_asset_dist_tbl(i).expense_ccid := null;
12019                --l_asset_dist_tbl(i).location_ccid := null;
12020                --l_units_to_retire := l_units_to_retire - l_units_to_retire;
12021                --i := i + 1;
12022             --End If;
12023          --End Loop;
12024          --close l_dist_curs;
12025          -------------------------------------------------------------------------------------------------*/
12026          --end of commented code : 3156924
12027      END IF;
12028    --bug# 3156924
12029    END IF;
12030 
12031 --   l_asset_dist_tbl(2).distribution_id := 1338;
12032 --   l_asset_dist_tbl(2).transaction_units := -1;
12033 --   l_asset_dist_tbl(2).units_assigned := null;
12034 --   l_asset_dist_tbl(2).assigned_to := null;
12035 --   l_asset_dist_tbl(2).expense_ccid := null;
12036 --   l_asset_dist_tbl(2).location_ccid := null;
12037 
12038 
12039    FA_RETIREMENT_PUB.do_retirement
12040    (p_api_version               => p_api_version
12041    ,p_init_msg_list             => p_init_msg_list
12042    ,p_commit                    => l_commit
12043    ,p_validation_level          => l_validation_level
12044    --Bug# 3156924:
12045    --,p_calling_fn                => l_calling_fn
12046    ,p_calling_fn                => l_calling_interface
12047    ,x_return_status             => x_return_status
12048    ,x_msg_count                 => x_msg_count
12049    ,x_msg_data                  => x_msg_data
12050    ,px_trans_rec                => l_trans_rec
12051    ,px_dist_trans_rec           => l_dist_trans_rec
12052    ,px_asset_hdr_rec            => l_asset_hdr_rec
12053    ,px_asset_retire_rec         => l_asset_retire_rec
12054    ,p_asset_dist_tbl            => l_asset_dist_tbl
12055    ,p_subcomp_tbl               => l_subcomp_tbl
12056    ,p_inv_tbl                   => l_inv_tbl
12057    );
12058 
12059 /*--------------------FA Debugging Code Commented ------------------------------
12060     if x_return_status = FND_API.G_FALSE then
12061       raise api_error;
12062    end if;
12063 
12064    -- Dump Debug messages when run in debug mode to log file
12065    if (fa_debug_pkg.print_debug) then
12066       fa_debug_pkg.Write_Debug_Log;
12067    end if;
12068 
12069    fa_srvr_msg.add_message(
12070          calling_fn => l_calling_fn,
12071          name       => 'FA_SHARED_END_SUCCESS',
12072          token1     => 'PROGRAM',
12073          value1     => 'RETIREMENT_API');
12074 
12075    mesg_count := fnd_msg_pub.count_msg;
12076 
12077    if (mesg_count > 0) then
12078         temp_str := fnd_msg_pub.get(fnd_msg_pub.G_FIRST, fnd_api.G_FALSE);
12079         --dbms_output.put_line('dump: ' || temp_str);
12080 
12081         for I in 1..(mesg_count -1) loop
12082             temp_str := fnd_msg_pub.get(fnd_msg_pub.G_NEXT, fnd_api.G_FALSE);
12083             --dbms_output.put_line('dump: ' || temp_str);
12084         end loop;
12085     else
12086         --dbms_output.put_line('dump: NO MESSAGE !');
12087     end if;
12088 --------------------FA Debugging Code Commented END------------------------------*/
12089      --dbms_output.put_line('After do retirement :'||x_return_status);
12090 
12091      IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
12092          RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
12093      ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
12094          RAISE OKL_API.G_EXCEPTION_ERROR;
12095      END IF;
12096      --Bug# 3156924
12097      --End If;
12098      --x_asset_hdr_rec := l_asset_hdr_rec;
12099      --Bug# 4028371
12100      x_fa_trx_date    := l_trans_rec.transaction_date_entered;
12101      OKL_API.END_ACTIVITY (x_msg_count,
12102                           x_msg_data );
12103     EXCEPTION
12104     WHEN OKL_API.G_EXCEPTION_ERROR THEN
12105     x_return_status := OKL_API.HANDLE_EXCEPTIONS(
12106                                l_api_name,
12107                                G_PKG_NAME,
12108                                'OKL_API.G_RET_STS_ERROR',
12109                                x_msg_count,
12110                                x_msg_data,
12111                                '_PVT');
12112     WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
12113     x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
12114                               l_api_name,
12115                               G_PKG_NAME,
12116                               'OKL_API.G_RET_STS_UNEXP_ERROR',
12117                               x_msg_count,
12118                               x_msg_data,
12119                               '_PVT');
12120 /*--------------------FA Debugging Code Commented -------------------------------
12121        when api_error then
12122        ROLLBACK WORK;
12123 
12124        fa_srvr_msg.add_message(
12125          calling_fn => l_calling_fn,
12126          name       => 'FA_SHARED_PROGRAM_FAILED',
12127          token1     => 'PROGRAM',
12128          value1     => l_calling_fn);
12129 
12130        mesg_count := fnd_msg_pub.count_msg;
12131        if (mesg_count > 0) then
12132           temp_str := fnd_msg_pub.get(fnd_msg_pub.G_FIRST, fnd_api.G_FALSE);
12133           --dbms_output.put_line('dump: ' || temp_str);
12134 
12135           for I in 1..(mesg_count -1) loop
12136               temp_str := fnd_msg_pub.get(fnd_msg_pub.G_NEXT, fnd_api.G_FALSE);
12137               --dbms_output.put_line('dump: ' || temp_str);
12138           end loop;
12139        else
12140           --dbms_output.put_line('dump: NO MESSAGE !');
12141        end if;
12142 --------------------FA Debugging Code Commented END -----------------------------*/
12143         WHEN OTHERS THEN
12144         x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
12145                               l_api_name,
12146                               G_PKG_NAME,
12147                               'OTHERS',
12148                               x_msg_count,
12149                               x_msg_data,
12150                               '_PVT');
12151 
12152 
12153 END FIXED_ASSET_RETIRE;
12154 --------------------------------------------------------------------------------
12155 --Start of Comments
12156 --Procedure Name : Fixed_Asset_Adjust
12157 --Description    : Adjusts the Parent fixed Asset (source asset to split) in FA
12158 --History        :
12159 --                 29-Nov-2001  ashish.singh Created
12160 --                 25-JUL-2002  ashish.singh Enhancement for Fixed Asset componet
12161 --                                           split
12162 --               Bug# 6373605 -R12.B SAL CRs
12163 --               New IN parameters as descriped earlier in
12164 --               FIXED_ASSET_ADD
12165 --End of Comments
12166 --------------------------------------------------------------------------------
12167 PROCEDURE FIXED_ASSET_ADJUST(p_api_version   IN  NUMBER,
12168                              p_init_msg_list IN  VARCHAR2 DEFAULT OKL_API.G_FALSE,
12169                              x_return_status OUT NOCOPY VARCHAR2,
12170                              x_msg_count     OUT NOCOPY NUMBER,
12171                              x_msg_data      OUT NOCOPY VARCHAR2,
12172                              p_ast_line_rec  IN  ast_line_rec_type,
12173                              p_txlv_rec      IN  txlv_rec_type,
12174                              p_txdv_rec      IN  txdv_rec_type,
12175                              --Bug# 3156924
12176                              p_trx_date      IN  DATE,
12177                              p_trx_number  IN  NUMBER,
12178                              --Bug# 6373605--SLA populate source
12179                              p_sla_source_header_id    IN Number,
12180                              p_sla_source_header_table IN Varchar2,
12181                              p_sla_source_try_id       IN Number,
12182                              p_sla_source_line_id      IN Number,
12183                              p_sla_source_line_table   IN Varchar2,
12184                              p_sla_source_chr_id       IN Number,
12185                              p_sla_source_kle_id       IN Number,
12186                              --Bug# 6373605--SLA populate source
12187                              --Bug# 4028371
12188                              x_fa_trx_date  OUT NOCOPY DATE) IS
12189 
12190 l_return_status        VARCHAR2(1)  DEFAULT OKL_API.G_RET_STS_SUCCESS;
12191 l_api_name             CONSTANT VARCHAR2(30) := 'FIXED_ASSET_ADJUST';
12192 l_api_version          CONSTANT NUMBER := 1.0;
12193 
12194 l_trans_rec               FA_API_TYPES.trans_rec_type;
12195 l_asset_hdr_rec           FA_API_TYPES.asset_hdr_rec_type;
12196 l_asset_fin_rec_adj       FA_API_TYPES.asset_fin_rec_type;
12197 l_asset_fin_rec_new       FA_API_TYPES.asset_fin_rec_type;
12198 l_asset_fin_mrc_tbl_new   FA_API_TYPES.asset_fin_tbl_type;
12199 --l_asset_fin_glob_dff_rec  FA_API_TYPES.asset_fin_glob_dff_rec_type;
12200 l_inv_trans_rec           FA_API_TYPES.inv_trans_rec_type;
12201 l_inv_tbl                 FA_API_TYPES.inv_tbl_type;
12202 l_asset_deprn_rec_adj     FA_API_TYPES.asset_deprn_rec_type;
12203 l_asset_deprn_rec_new     FA_API_TYPES.asset_deprn_rec_type;
12204 l_asset_deprn_mrc_tbl_new FA_API_TYPES.asset_deprn_tbl_type;
12205 l_inv_rec                 FA_API_TYPES.inv_rec_type;
12206 l_asset_deprn_rec         FA_API_TYPES.asset_deprn_rec_type;
12207 l_group_recalss_option_rec FA_API_TYPES.group_reclass_options_rec_type;
12208 
12209 --parameters for unit adjustment
12210 l_asset_dist_tbl             FA_API_TYPES.asset_dist_tbl_type;
12211 l_trans_rec_ua               FA_API_TYPES.trans_rec_type;
12212 l_asset_hdr_rec_ua           FA_API_TYPES.asset_hdr_rec_type;
12213 
12214 
12215 l_split_factor            NUMBER;
12216 l_units_to_adjust         NUMBER;
12217 i                         NUMBER;
12218 
12219  --cursor to get the distributions
12220    CURSOR    l_dist_curs(p_asset_id       IN NUMBER,
12221                         p_corporate_book IN VARCHAR2) IS
12222    SELECT  units_assigned,
12223            distribution_id
12224    FROM    OKX_AST_DST_HST_V
12225    WHERE   asset_id = p_ast_line_rec.asset_id
12226    AND     book_type_code = p_ast_line_rec.corporate_book
12227    AND     transaction_header_id_out IS NULL
12228    AND     retirement_id IS NULL;
12229 
12230    l_units_assigned   NUMBER;
12231    l_distribution_id  NUMBER;
12232 
12233 --cursor to find book class
12234    CURSOR l_book_class_cur(p_book_type_code IN VARCHAR2) IS
12235    SELECT book_class
12236    FROM   okx_asst_bk_controls_v
12237    WHERE  book_type_code = p_book_type_code;
12238 
12239    l_book_class okx_asst_bk_controls_v.book_class%TYPE;
12240 
12241 --cursor to get depreciation info
12242 
12243   CURSOR  deprn_cur (p_asset_id        IN NUMBER,
12244                      p_book_type_code  IN VARCHAR2,
12245                      p_split_factor    IN NUMBER) IS
12246             -- gk removed below 2 params for bug 5946411
12247   SELECT  -- -1 * (ytd_deprn -(ytd_deprn*p_split_factor)),
12248           -- -1 * (deprn_reserve -(deprn_reserve*p_split_factor)),
12249           -1 * (prior_fy_expense-(prior_fy_expense*p_split_factor)),
12250           -1 * (bonus_ytd_deprn-(bonus_ytd_deprn*p_split_factor)),
12251           -1 * (bonus_deprn_reserve-(bonus_deprn_reserve*p_split_factor))
12252    FROM   okx_ast_dprtns_v
12253    WHERE  asset_id       = p_asset_id
12254    AND    book_type_code = p_book_type_code
12255    AND    deprn_run_date = (SELECT MAX(deprn_run_date)
12256                             FROM   okx_ast_dprtns_v
12257                             WHERE  asset_id       = p_asset_id
12258                             AND    book_type_code = p_book_type_code);
12259 
12260 
12261 
12262   CURSOR  deprn_cur2 (p_asset_id        IN NUMBER,
12263                       p_book_type_code  IN VARCHAR2) IS
12264             -- gk removed below 2 params for bug 5946411
12265   SELECT   -- -1 * ytd_deprn,
12266            -- -1 * deprn_reserve,
12267            -1 * prior_fy_expense,
12268            -1 * bonus_ytd_deprn,
12269            -1 * bonus_deprn_reserve
12270    FROM   okx_ast_dprtns_v
12271    WHERE  asset_id       = p_asset_id
12272    AND    book_type_code = p_book_type_code
12273    AND    deprn_run_date = (SELECT MAX(deprn_run_date)
12274                             FROM   okx_ast_dprtns_v
12275                             WHERE  asset_id       = p_asset_id
12276                             AND    book_type_code = p_book_type_code);
12277 
12278    --Bug# 4028371 :
12279    l_calling_interface     CONSTANT VARCHAR2(30) := 'OKLRSPAB:Split Asset';
12280 
12281    --Bug# 6373605 begin
12282    l_fxhv_rec okl_sla_acc_sources_pvt.fxhv_rec_type;
12283    l_fxlv_rec okl_sla_acc_sources_pvt.fxlv_rec_type;
12284    --Bug# 6373605 end
12285 
12286 -- Bug# 5946411: ER
12287   --cursor to check the status of asset
12288  /* CURSOR l_cleb_sts_csr(pcleid IN NUMBER) IS
12289   SELECT cleb.sts_code sts_code,cleb.dnz_chr_id chr_id
12290   FROM   okc_k_lines_b cleb
12291   WHERE  cleb.id = pcleid;
12292   l_cle_status okc_k_lines_b.sts_code%TYPE;  */
12293  -- Bug# 6061103
12294  CURSOR l_cleb_sts_csr(pcleid IN NUMBER) IS
12295  SELECT cleb.sts_code sts_code,
12296         cleb.dnz_chr_id chr_id,
12297         khr.PDT_ID,
12298         chr.START_DATE
12299  FROM   okc_k_lines_b cleb,
12300         okl_k_headers khr,
12301         OKC_K_HEADERS_B chr
12302  WHERE  cleb.id = pcleid
12303          and khr.id = cleb.dnz_chr_id
12304          and chr.id = khr.id;
12305   l_cle_status okc_k_lines_b.sts_code%TYPE;
12306 
12307   --cursor to get the amortization date
12308   cursor l_max_amortize_date_csr (p_asset_id IN NUMBER,p_book_type_code IN VARCHAR2) is
12309   select max(th.amortization_start_date) amortization_start_date
12310   from   fa_transaction_headers th,
12311           fa_books inbk,
12312           fa_books outbk
12313   where  inbk.asset_id = p_asset_id
12314   and    inbk.book_type_code = p_book_type_code
12315   and    outbk.asset_id(+) = p_asset_id
12316   and    outbk.book_type_code(+) = p_book_type_code
12317   and    inbk.transaction_header_id_in = th.transaction_header_id
12318   and    outbk.transaction_header_id_out(+) = th.transaction_header_id
12319   and    th.asset_id = p_asset_id
12320   and    th.book_type_code = p_book_type_code
12321   and    th.transaction_type_code not in ('TRANSFER OUT', 'TRANSFER IN',
12322                                             'TRANSFER', 'TRANSFER IN/VOID',
12323                                             'RECLASS', 'UNIT ADJUSTMENT',
12324                                             'REINSTATEMENT');
12325   l_amortization_start_date DATE:=NULL;
12326 -- Bug# 5946411: ER End
12327 
12328  -- Bug# 6061103
12329  l_amortization_date DATE;
12330  l_special_treatment_required VARCHAR2(1);
12331  l_pdt_id            Number;
12332  l_start_date        Date;
12333  l_chr_id        number;
12334  -- Bug# 6061103 end
12335 
12336 --Bug# 5946411: avsingh - parameters for getting depreciation reserve
12337   l_fa_asset_hdr_rec   FA_API_TYPES.asset_hdr_rec_type;
12338   l_fa_asset_deprn_rec FA_API_TYPES.asset_deprn_rec_type;
12339 BEGIN
12340      x_return_status := OKL_API.G_RET_STS_SUCCESS;
12341    --call start activity to set savepoint
12342      x_return_status := OKL_API.START_ACTIVITY( SUBSTR(l_api_name,1,26),
12343                                                        p_init_msg_list,
12344                                                    '_PVT',
12345                                                        x_return_status);
12346      IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
12347                 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
12348      ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
12349                 RAISE OKL_API.G_EXCEPTION_ERROR;
12350      END IF;
12351 
12352    --------------------
12353    -- asset header info
12354    -------------------
12355    l_asset_hdr_rec.asset_id       := p_ast_line_rec.asset_id;
12356    l_asset_hdr_rec.book_type_code := p_ast_line_rec.corporate_book;
12357 
12358    ----------------
12359    -- trans struct
12360    ----------------
12361    -- from the dld :
12362    -- You must populate the transaction type code as. This applies to any asset
12363    -- type. The transaction subtype will default to 'EXPENSED' so u should popul
12364    -- ate the transaction subtype with 'AMORTIZED' if you wish to instead
12365    -- amortize the adjustment. If transaction subtype is AMORTIZED, you must also
12366    -- provide the amortization start date
12367 
12368    --Bug# 3156924 :
12369    --l_trans_rec.transaction_type_code   := 'ADJUSTMENT'; --will be derived as per DOC
12370    --l_trans_rec.transaction_subtype     := 'AMORTIZED';
12371    --by default will be 'EXPENSED'
12372    --l_trans_rec.amortization_start_date := to_date('01-JAN-1995','DD-MON-YYYY');
12373 
12374    --Bug# 3156924 :
12375    --l_trans_rec.amortization_start_date    := p_trx_date; --required only if amortize
12376    --l_trans_rec.transaction_date_entered := p_trx_date; --will be derived as per DOC
12377    --l_trans_rec.amortization_start_date := p_ast_line_rec.in_service_date;
12378 
12379 
12380    --Bug# 3783518: Cost adjustment on Split to be Amortized
12381    l_trans_rec.transaction_subtype     := 'AMORTIZED';
12382 
12383     --Bug# 5946411: ER
12384     -- l_trans_rec.amortization_start_date := p_ast_line_rec.in_service_date;
12385     --dbms_output.put_line('l_trans_rec.amortization_start_date '||l_trans_rec.amortization_start_date);
12386     l_amortization_start_date:=NULL;
12387     -- get the status of the parent line id
12388     OPEN l_cleb_sts_csr(  p_txlv_rec.kle_id);
12389     FETCH l_cleb_sts_csr INTO l_cle_status, l_chr_id, l_pdt_id, l_start_date ;
12390     close l_cleb_sts_csr;
12391     -- Bug# 6061103 start
12392      is_evergreen_df_lease
12393                    (p_api_version     =>  p_api_version,
12394                     p_init_msg_list   =>  p_init_msg_list,
12395                     x_return_status   =>  x_return_status,
12396                     x_msg_count       =>  x_msg_count,
12397                     x_msg_data        =>  x_msg_data,
12398                     p_cle_id          =>p_ast_line_rec.PARENT_LINE_ID, -- p_ast_line_rec.asset_id,
12399                     p_book_type_code   =>  p_ast_line_rec.corporate_book,
12400                     p_asset_status    => l_cle_status,
12401                     p_pdt_id          => l_pdt_id,
12402                     p_start_date      => l_start_date,
12403                     x_amortization_date => l_amortization_date,
12404                     x_special_treatment_required => l_special_treatment_required);
12405            IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
12406                RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
12407            ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
12408                RAISE OKL_API.G_EXCEPTION_ERROR;
12409            END IF;
12410     if l_special_treatment_required = 'Y' then
12411         l_trans_rec.amortization_start_date := l_amortization_date;
12412         --rirawat : Handle scenario for asset with no off lease transaction
12413         IF l_amortization_date IS NULL THEN
12414          OKL_API.SET_MESSAGE(p_app_name     =>  g_app_name,
12415                                         p_msg_name     =>  'OKL_LA_SPLIT_NOT_ALLOWED'
12416                                         );
12417          RAISE OKL_API.G_EXCEPTION_ERROR;
12418         END IF;
12419     else
12420      -- Bug# 6061103 end
12421    --dbms_output.put_line('Status set as l_cle_status'||l_cle_status);
12422  /*   IF l_cle_status IN ('TERMINATED','EXPIRED') THEN
12423      --To prevent following FA error FA_INVALID_AMOUNT_ADJUSTMENT:
12424      -- 'The amounts you entered cause the results of the adjustment to be
12425      -- invalid for the amortization date you entered.'
12426      -- do the adjustement on the last amortization date
12427      open l_max_amortize_date_csr(p_ast_line_rec.asset_id,p_ast_line_rec.corporate_book);
12428      fetch l_max_amortize_date_csr into l_amortization_start_date;
12429      close l_max_amortize_date_csr;
12430     ELSE
12431      l_trans_rec.amortization_start_date := p_ast_line_rec.in_service_date;
12432    END IF;
12433    if l_amortization_start_date IS NOT NULL THEN
12434      l_trans_rec.amortization_start_date := l_amortization_start_date;
12435    ELSE */
12436      l_trans_rec.amortization_start_date := p_ast_line_rec.in_service_date;
12437  --  END IF;
12438    end if; -- 6061103 end if;
12439     --Bug# 5946411: ER End
12440 
12441    --Bug# 3156924 :
12442    l_trans_rec.transaction_name  := SUBSTR(TO_CHAR(p_trx_number),1,20); --optional
12443    l_trans_rec.calling_interface := l_calling_interface; --optional
12444 
12445    IF NVL(p_txdv_rec.split_percent,0) <> 0 OR p_txdv_rec.split_percent <> OKL_API.G_MISS_NUM THEN
12446        l_split_factor := (p_txdv_rec.split_percent/100);
12447    ELSE
12448        l_split_factor := (p_txdv_rec.quantity/p_txlv_rec.current_units);
12449    END IF;
12450 
12451    -----------
12452    -- fin info
12453    -----------
12454    l_asset_fin_rec_adj.set_of_books_id := p_ast_line_rec.set_of_books_id;
12455    --should take the true snapshot at this point in time and not from split trx
12456    --this is just for testing
12457    --l_asset_fin_rec_adj.cost := p_txdv_rec.cost;
12458    --l_asset_fin_rec_adj.salvage_value := p_ast_line_rec.salvage_value*l_split_factor;
12459    --
12460    --------------------
12461    --Bug #2723498 11.5.9 enhancement fix :
12462    --                For Direct Finance Lease Asset cost for original asset will be zero
12463    --                Calling adjustment API for already zero cost gives error msg. this if clause
12464    --                to avoid that
12465    --This is fixed in branch by bug#2598894
12466    --------------------
12467    IF p_ast_line_rec.cost = 0 THEN
12468        --do not call adjustments for DFL contracts
12469        NULL;
12470    ELSE
12471        IF NVL(p_txdv_rec.split_percent,0) <> 0 OR p_txdv_rec.split_percent <> OKL_API.G_MISS_NUM THEN
12472            l_asset_fin_rec_adj.cost :=  - p_ast_line_rec.cost;
12473            --Bug# 3950089
12474            If (p_ast_line_rec.percent_salvage_value is not null) Then
12475              l_asset_fin_rec_adj.percent_salvage_value :=  - p_ast_line_rec.percent_salvage_value;
12476            Else
12477              l_asset_fin_rec_adj.salvage_value :=  - p_ast_line_rec.salvage_value;
12478            End If;
12479        ELSE
12480            l_asset_fin_rec_adj.cost := (p_ast_line_rec.cost*l_split_factor) - p_ast_line_rec.cost;
12481            --Bug# 3950089
12482            If (p_ast_line_rec.percent_salvage_value is not null) Then
12483              l_asset_fin_rec_adj.percent_salvage_value := 0;
12484            Else
12485              l_asset_fin_rec_adj.salvage_value := (p_ast_line_rec.salvage_value*l_split_factor) - p_ast_line_rec.salvage_value;
12486            End If;
12487        END IF;
12488        --
12489 
12490        --asset_deprn_rec
12491        l_asset_deprn_rec_adj.set_of_books_id := p_ast_line_rec.set_of_books_id;
12492 
12493        ---------------------------------------------------------------------------------------------
12494        --Bug# 5946411 : avsingh
12495        -- If adjustment being done in period of addition depreciation reserve needs to be backed out
12496        ---------------------------------------------------------------------------------------------
12497        --1. Check if adjustment is being made in the period of addition of the asset
12498        ---------------------------------------------------------------------------------------------
12499        l_fa_asset_hdr_rec.asset_id       := p_ast_line_rec.asset_id;
12500        l_fa_asset_hdr_rec.book_type_code := p_ast_line_rec.corporate_book;
12501 
12502        If NOT fa_cache_pkg.fazcbc(x_book => l_fa_asset_hdr_rec.book_type_code) then
12503            OKL_API.SET_MESSAGE(p_app_name     => g_app_name,
12504                                p_msg_name     => 'OKL_LLA_FA_CACHE_ERROR'
12505                               );
12506            Raise OKL_API.G_EXCEPTION_ERROR;
12507        end if;
12508 
12509        --Bug# 6804043: In R12 codeline, do not back out depreciation reserve
12510        --              when cost adjustment is done in period of addition
12511        /*
12512        If not FA_ASSET_VAL_PVT.validate_period_of_addition
12513              (p_asset_id            => l_fa_asset_hdr_rec.asset_id,
12514               p_book                => l_fa_asset_hdr_rec.book_type_code,
12515               p_mode                => 'ABSOLUTE',
12516               px_period_of_addition => l_fa_asset_hdr_rec.period_of_addition
12517              ) then
12518            OKL_API.SET_MESSAGE(p_app_name     => g_app_name,
12519                                p_msg_name     => 'OKL_LLA_FA_POA_ERROR'
12520                               );
12521            Raise OKL_API.G_EXCEPTION_ERROR;
12522        end if;
12523 
12524 
12525        If nvl(l_fa_asset_hdr_rec.period_of_addition,'N') = 'Y' Then
12526            --------------------------------------
12527            --2. Get the depreciation reserve
12528            --------------------------------------
12529            get_deprn_reserve
12530                    (p_api_version      =>  p_api_version,
12531                     p_init_msg_list    =>  p_init_msg_list,
12532                     x_return_status    =>  x_return_status,
12533                     x_msg_count        =>  x_msg_count,
12534                     x_msg_data         =>  x_msg_data,
12535                     p_asset_id         =>  p_ast_line_rec.asset_id,
12536                     p_book_type_code   =>  p_ast_line_rec.corporate_book,
12537                     x_asset_deprn_rec  =>  l_fa_asset_deprn_rec);
12538 
12539            IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
12540                RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
12541            ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
12542                RAISE OKL_API.G_EXCEPTION_ERROR;
12543            END IF;
12544 
12545           If l_fa_asset_deprn_rec.deprn_reserve > 0 then
12546                l_asset_deprn_rec_adj.deprn_reserve := (-1) * l_fa_asset_deprn_rec.deprn_reserve;
12547            End If;
12548            If l_fa_asset_deprn_rec.ytd_deprn > 0 then
12549                l_asset_deprn_rec_adj.ytd_deprn     := (-1) * l_fa_asset_deprn_rec.ytd_deprn;
12550            End If;
12551            If l_fa_asset_deprn_rec.prior_fy_expense > 0 then
12552                l_asset_deprn_rec_adj.prior_fy_expense := (-1) * l_fa_asset_deprn_rec.prior_fy_expense;
12553            End If;
12554            If l_fa_asset_deprn_rec.bonus_ytd_deprn > 0 then
12555                l_asset_deprn_rec_adj.bonus_ytd_deprn  := (-1) * l_fa_asset_deprn_rec.bonus_ytd_deprn;
12556            End If;
12557            If l_fa_asset_deprn_rec.bonus_deprn_reserve > 0 then
12558                l_asset_deprn_rec_adj.bonus_deprn_reserve := (-1) * l_fa_asset_deprn_rec.bonus_deprn_reserve;
12559            End If;
12560 
12561        End If;
12562        --End Bug# 5946411
12563        */
12564        --End Bug# 6804043
12565 
12566        /***** Commented as part of Bug # 5946411****************************************************/
12567        /*--avsingh : commented - As per FA no depreciation should be passed during Adjustments if it
12568          -- adjustment is not period of addition
12569        IF (p_ast_line_rec.cost + l_asset_fin_rec_adj.cost) = 0 THEN
12570           --dbms_output.put_line('opening deprn_cur2');
12571            OPEN  deprn_cur2 (p_asset_id       => p_ast_line_rec.asset_id,
12572                              p_book_type_code => p_ast_line_rec.corporate_book);
12573 -- gk removed below 2 params for bug 5946411
12574                FETCH deprn_cur2 INTO --l_asset_deprn_rec_adj.ytd_deprn,
12575                                      --l_asset_deprn_rec_adj.deprn_reserve,
12576                                      l_asset_deprn_rec_adj.prior_fy_expense,
12577                                      l_asset_deprn_rec_adj.bonus_ytd_deprn,
12578                                      l_asset_deprn_rec_adj.bonus_deprn_reserve;
12579                IF deprn_cur2%NOTFOUND THEN
12580                    NULL;
12581                END IF;
12582            CLOSE deprn_cur2;
12583        ELSE
12584           --dbms_output.put_line('opening deprn_cur');
12585            OPEN  deprn_cur (p_asset_id       => p_ast_line_rec.asset_id,
12586                             p_book_type_code => p_ast_line_rec.corporate_book,
12587                             p_split_factor   => l_split_factor);
12588 -- gk removed below 2 params for bug 5946411
12589                FETCH deprn_cur INTO --l_asset_deprn_rec_adj.ytd_deprn,
12590                                     --l_asset_deprn_rec_adj.deprn_reserve,
12591                                     l_asset_deprn_rec_adj.prior_fy_expense,
12592                                     l_asset_deprn_rec_adj.bonus_ytd_deprn,
12593                                     l_asset_deprn_rec_adj.bonus_deprn_reserve;
12594                IF deprn_cur%NOTFOUND THEN
12595                    NULL;
12596                END IF;
12597            CLOSE deprn_cur;
12598        END IF;
12599        ---------------End of Commented Code for Bug# 5946411-----------------------------------------------------*/
12600 
12601        --dbms_output.put_line('Deprn reserve '||to_char(l_asset_deprn_rec_adj.deprn_reserve));
12602        FA_ADJUSTMENT_PUB.do_adjustment
12603           (p_api_version             => p_api_version,
12604            p_init_msg_list           => p_init_msg_list,
12605            p_commit                  => OKL_API.G_FALSE,
12606            p_validation_level        => FND_API.G_VALID_LEVEL_FULL,
12607            x_return_status           => x_return_status,
12608            x_msg_count               => x_msg_count,
12609            x_msg_data                => x_msg_data,
12610            --Bug# 3156924
12611            --p_calling_fn              => null,
12612            p_calling_fn              => l_calling_interface,
12613            px_trans_rec              => l_trans_rec,
12614            px_asset_hdr_rec          => l_asset_hdr_rec,
12615            p_asset_fin_rec_adj       => l_asset_fin_rec_adj,
12616            x_asset_fin_rec_new       => l_asset_fin_rec_new,
12617            x_asset_fin_mrc_tbl_new   => l_asset_fin_mrc_tbl_new,
12618            px_inv_trans_rec          => l_inv_trans_rec,
12619            px_inv_tbl                => l_inv_tbl,
12620            p_asset_deprn_rec_adj     => l_asset_deprn_rec_adj,
12621            x_asset_deprn_rec_new     => l_asset_deprn_rec_new,
12622            x_asset_deprn_mrc_tbl_new => l_asset_deprn_mrc_tbl_new,
12623            p_group_reclass_options_rec => l_group_recalss_option_rec
12624           );
12625           --dbms_output.put_line('After calling FA adjustment Api '||x_return_status);
12626        IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
12627            RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
12628        ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
12629            RAISE OKL_API.G_EXCEPTION_ERROR;
12630        END IF;
12631 
12632         --Bug# 4028371 :
12633        x_fa_trx_date := l_trans_rec.transaction_date_entered;
12634 
12635    --bug# 6373605 -- call populate sla sources
12636       l_fxhv_rec.source_id := p_sla_source_header_id;
12637       l_fxhv_rec.source_table := p_sla_source_header_table;
12638       l_fxhv_rec.khr_id := p_sla_source_chr_id;
12639       l_fxhv_rec.try_id := p_sla_source_try_id;
12640 
12641       l_fxlv_rec.source_id := p_sla_source_line_id;
12642       l_fxlv_rec.source_table := p_sla_source_line_table;
12643       l_fxlv_rec.kle_id := p_sla_source_kle_id;
12644 
12645       l_fxlv_rec.asset_id := l_asset_hdr_rec.asset_id;
12646       l_fxlv_rec.fa_transaction_id := l_trans_rec.transaction_header_id;
12647       l_fxlv_rec.asset_book_type_name := l_asset_hdr_rec.book_type_code;
12648 
12649       OKL_SLA_ACC_SOURCES_PVT.populate_sources(
12650       p_api_version  => p_api_version
12651      ,p_init_msg_list => p_init_msg_list
12652      ,p_fxhv_rec => l_fxhv_rec
12653      ,p_fxlv_rec => l_fxlv_rec
12654      ,x_return_status => x_return_status
12655      ,x_msg_count    => x_msg_count
12656      ,x_msg_data    => x_msg_data
12657       );
12658      IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
12659          RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
12660      ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
12661          RAISE OKL_API.G_EXCEPTION_ERROR;
12662      END IF;
12663      --bug# 6373605 -- call populate SLA sources
12664 
12665      END IF;
12666 
12667      l_book_class := NULL;
12668      OPEN l_book_class_cur(p_book_type_code => p_ast_line_rec.corporate_book);
12669          FETCH l_book_class_cur INTO l_book_class;
12670          IF l_book_class_cur%NOTFOUND THEN
12671              NULL;
12672          END IF;
12673      CLOSE l_book_class_cur;
12674 
12675      IF l_book_class = 'CORPORATE' THEN
12676          --dbms_output.put_line('In adjust split units book type code '|| p_ast_line_rec.corporate_book);
12677          --now do the unit adjustments
12678          l_asset_hdr_rec_ua.asset_id             := p_ast_line_rec.asset_id;
12679          l_asset_hdr_rec_ua.book_type_code       := p_ast_line_rec.corporate_book;
12680 
12681         --l_trans_rec_ua.transaction_type_code    := NULL;
12682         --l_trans_rec_ua.transaction_subtype      := NULL;
12683         --l_trans_rec_ua.amortization_start_date := to_date('01-JAN-1995','DD-MON-YYYY');
12684         --l_trans_rec_ua.amortization_start_date   := NULL;
12685         --l_trans_rec_ua.transaction_date_entered  := p_ast_line_rec.in_service_date;
12686         --Bug# 3156924 :
12687         --l_trans_rec_ua.transaction_date_entered  := null;
12688         --l_trans_rec_ua.transaction_date_entered  := p_trx_date;
12689         -- Bug# 6061103 -- start
12690         l_trans_rec_ua.amortization_start_date   := p_ast_line_rec.in_service_date;
12691         -- Bug# 6061103 -- end
12692         l_trans_rec_ua.transaction_name          := SUBSTR(TO_CHAR(p_trx_number),1,20);
12693         l_trans_rec_ua.calling_interface         := l_calling_interface;
12694 
12695         l_trans_rec_ua.who_info.last_updated_by := FND_GLOBAL.USER_ID;
12696         l_trans_rec_ua.who_info.last_update_login := FND_GLOBAL.LOGIN_ID;
12697 
12698 
12699        --how to find which distribution to adjust from ??
12700        l_asset_dist_tbl.DELETE;
12701        --dbms_output.put_line('split factor '||to_char(l_split_factor));
12702        --dbms_output.put_line('current units '||to_char(p_ast_line_rec.current_units));
12703 
12704        IF NVL(p_txdv_rec.split_percent,0) <> 0 OR p_txdv_rec.split_percent <> OKL_API.G_MISS_NUM THEN
12705            --l_units_to_adjust := p_ast_line_rec.current_units;
12706            NULL;
12707        ELSE
12708            l_units_to_adjust := p_ast_line_rec.current_units - (p_ast_line_rec.current_units*l_split_factor);
12709        --End If;
12710 
12711        --dbms_output.put_line('Units to adjust outside loop'||l_units_to_adjust );
12712        i := 1;
12713        OPEN l_dist_curs(p_ast_line_rec.asset_id, p_ast_line_rec.corporate_book);
12714        LOOP
12715            FETCH l_dist_curs INTO l_units_assigned, l_distribution_id;
12716            EXIT WHEN l_dist_curs%NOTFOUND;
12717            IF l_units_to_adjust = 0 THEN
12718               EXIT;
12719            ELSIF l_units_to_adjust >= l_units_assigned THEN
12720               l_asset_dist_tbl(i).distribution_id := l_distribution_id;
12721               l_asset_dist_tbl(i).transaction_units := (-1)*l_units_assigned;
12722               --dbms_output.put_line('Units to adjust '||to_char(l_asset_dist_tbl(i).transaction_units));
12723               l_asset_dist_tbl(i).units_assigned := NULL;
12724               l_asset_dist_tbl(i).assigned_to := NULL;
12725               l_asset_dist_tbl(i).expense_ccid := NULL;
12726               l_asset_dist_tbl(i).location_ccid := NULL;
12727               l_units_to_adjust := l_units_to_adjust - l_units_assigned;
12728               i := i + 1;
12729            ELSIF l_units_to_adjust < l_units_assigned THEN
12730               l_asset_dist_tbl(i).distribution_id := l_distribution_id;
12731               l_asset_dist_tbl(i).transaction_units := (-1)*l_units_to_adjust;
12732               --dbms_output.put_line('Units to adjust '||to_char(l_asset_dist_tbl(i).transaction_units));
12733               l_asset_dist_tbl(i).units_assigned := NULL;
12734               l_asset_dist_tbl(i).assigned_to := NULL;
12735               l_asset_dist_tbl(i).expense_ccid := NULL;
12736               l_asset_dist_tbl(i).location_ccid := NULL;
12737               l_units_to_adjust := l_units_to_adjust - l_units_to_adjust;
12738               i := i + 1;
12739            END IF;
12740        END LOOP;
12741        CLOSE l_dist_curs;
12742 
12743       FA_UNIT_ADJ_PUB.do_unit_adjustment(
12744            p_api_version       => p_api_version,
12745            p_init_msg_list      => FND_API.G_FALSE,
12746            p_commit            => FND_API.G_FALSE,
12747            p_validation_level  => FND_API.G_VALID_LEVEL_FULL,
12748            --bug# 3156924 :
12749            p_calling_fn        => l_calling_interface,
12750            --p_calling_fn        => NULL,
12751            x_return_status     => x_return_status,
12752            x_msg_count         => x_msg_count,
12753            x_msg_data          => x_msg_data,
12754            px_trans_rec        => l_trans_rec_ua,
12755            px_asset_hdr_rec    => l_asset_hdr_rec_ua,
12756            px_asset_dist_tbl   => l_asset_dist_tbl);
12757 
12758          --dbms_output.put_line('After calling FA unit adjust Api '||x_return_status);
12759      IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
12760          RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
12761      ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
12762          RAISE OKL_API.G_EXCEPTION_ERROR;
12763      END IF;
12764 
12765       --bug# 6373605 -- call populate sla sources
12766       l_fxhv_rec.source_id := p_sla_source_header_id;
12767       l_fxhv_rec.source_table := p_sla_source_header_table;
12768       l_fxhv_rec.khr_id := p_sla_source_chr_id;
12769       l_fxhv_rec.try_id := p_sla_source_try_id;
12770 
12771       l_fxlv_rec.source_id := p_sla_source_line_id;
12772       l_fxlv_rec.source_table := p_sla_source_line_table;
12773       l_fxlv_rec.kle_id := p_sla_source_kle_id;
12774 
12775       l_fxlv_rec.asset_id := l_asset_hdr_rec_ua.asset_id;
12776       l_fxlv_rec.fa_transaction_id := l_trans_rec_ua.transaction_header_id;
12777       l_fxlv_rec.asset_book_type_name := l_asset_hdr_rec_ua.book_type_code;
12778 
12779       OKL_SLA_ACC_SOURCES_PVT.populate_sources(
12780       p_api_version  => p_api_version
12781      ,p_init_msg_list => p_init_msg_list
12782      ,p_fxhv_rec => l_fxhv_rec
12783      ,p_fxlv_rec => l_fxlv_rec
12784      ,x_return_status => x_return_status
12785      ,x_msg_count    => x_msg_count
12786      ,x_msg_data    => x_msg_data
12787       );
12788 
12789      IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
12790          RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
12791      ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
12792          RAISE OKL_API.G_EXCEPTION_ERROR;
12793      END IF;
12794      --bug# 6373605 -- call populate SLA sources
12795 
12796     END IF;
12797     END IF;
12798      OKL_API.END_ACTIVITY (x_msg_count,
12799                           x_msg_data );
12800     EXCEPTION
12801     WHEN OKL_API.G_EXCEPTION_ERROR THEN
12802     x_return_status := OKL_API.HANDLE_EXCEPTIONS(
12803                                l_api_name,
12804                                G_PKG_NAME,
12805                                'OKL_API.G_RET_STS_ERROR',
12806                                x_msg_count,
12807                                x_msg_data,
12808                                '_PVT');
12809     WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
12810     x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
12811                               l_api_name,
12812                               G_PKG_NAME,
12813                               'OKL_API.G_RET_STS_UNEXP_ERROR',
12814                               x_msg_count,
12815                               x_msg_data,
12816                               '_PVT');
12817     WHEN OTHERS THEN
12818     x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
12819                               l_api_name,
12820                               G_PKG_NAME,
12821                               'OTHERS',
12822                               x_msg_count,
12823                               x_msg_data,
12824                               '_PVT');
12825 END FIXED_ASSET_ADJUST;
12826 ------------------------------------------------------------------------------
12827   --Start of comments
12828   --
12829   --Procedure Name        : get_trx_rec
12830   --Purpose               : Gets source transaction record for IB interface
12831   --Modification History  :
12832   --15-Jun-2001    ashish.singh  Created
12833   --Notes :  Assigns values to transaction_type_id and source_line_ref_id
12834   --End of Comments
12835 ------------------------------------------------------------------------------
12836   PROCEDURE get_trx_rec
12837     (p_api_version                  IN  NUMBER,
12838          p_init_msg_list                IN  VARCHAR2 DEFAULT OKL_API.G_FALSE,
12839          x_return_status                OUT NOCOPY VARCHAR2,
12840          x_msg_count                    OUT NOCOPY NUMBER,
12841          x_msg_data                     OUT NOCOPY VARCHAR2,
12842      p_cle_id                       IN  NUMBER,
12843      p_transaction_type             IN  VARCHAR2,
12844      x_trx_rec                      OUT NOCOPY CSI_DATASTRUCTURES_PUB.transaction_rec) IS
12845 
12846      l_return_status     VARCHAR2(1) := OKL_API.G_RET_STS_SUCCESS;
12847      l_api_name          CONSTANT VARCHAR2(30) := 'GET_TRX_REC';
12848      l_api_version           CONSTANT NUMBER    := 1.0;
12849 
12850 --Following cursor assumes that a transaction type called
12851 --'OKL_BOOK'  will be seeded in IB
12852      CURSOR okl_trx_type_csr(p_transaction_type IN VARCHAR2)IS
12853             SELECT transaction_type_id
12854             FROM   CSI_TXN_TYPES
12855             WHERE  source_transaction_type = p_transaction_type;
12856      l_trx_type_id NUMBER;
12857  BEGIN
12858      OPEN okl_trx_type_csr(p_transaction_type);
12859         FETCH okl_trx_type_csr
12860         INTO  l_trx_type_id;
12861         IF okl_trx_type_csr%NOTFOUND THEN
12862            --OKL LINE ACTIVATION not seeded as a source transaction in IB
12863            OKL_API.SET_MESSAGE(p_app_name     => g_app_name,
12864                                                p_msg_name     => G_IB_TXN_TYPE_NOT_FOUND,
12865                                                p_token1       => G_TXN_TYPE_TOKEN,
12866                                                p_token1_value => p_transaction_type
12867                                             );
12868            RAISE OKL_API.G_EXCEPTION_ERROR;
12869         END IF;
12870      CLOSE okl_trx_type_csr;
12871      --Assign transaction Type id to seeded value in cs_lookups
12872      x_trx_rec.transaction_type_id := l_trx_type_id;
12873      --Assign Source Line Ref id to contract line id of IB instance line
12874      x_trx_rec.source_line_ref_id := p_cle_id;
12875      x_trx_rec.transaction_date := SYSDATE;
12876      --confirm whether this has to be sysdate or creation date on line
12877      x_trx_rec.source_transaction_date := SYSDATE;
12878     EXCEPTION
12879     WHEN OKL_API.G_EXCEPTION_ERROR THEN
12880       x_return_status :=OKL_API.HANDLE_EXCEPTIONS
12881       (
12882         l_api_name,
12883         G_PKG_NAME,
12884         'OKL_API.G_RET_STS_ERROR',
12885         x_msg_count,
12886         x_msg_data,
12887         '_PVT'
12888       );
12889     WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
12890       x_return_status :=OKL_API.HANDLE_EXCEPTIONS
12891       (
12892         l_api_name,
12893         G_PKG_NAME,
12894         'OKL_API.G_RET_STS_UNEXP_ERROR',
12895         x_msg_count,
12896         x_msg_data,
12897         '_PVT'
12898       );
12899     WHEN OTHERS THEN
12900       x_return_status :=OKL_API.HANDLE_EXCEPTIONS
12901       (
12902         l_api_name,
12903         G_PKG_NAME,
12904         'OTHERS',
12905         x_msg_count,
12906         x_msg_data,
12907         '_PVT'
12908       );
12909 END get_trx_rec;
12910 ------------------------------------------------------------------------------
12911   --Start of comments
12912   --
12913   --Procedure Name        : get_party_rec
12914   --Purpose               : Gets Party records for IB interface
12915   --Modification History  :
12916   --15-Jun-2001    avsingh   Created
12917   --Notes : Takes chr_id as input and tries to get the party role
12918   --        for that contract for party role = 'LESSEE'
12919   --        Assuming that LESSEE will be the owner of the IB instance
12920   --End of Comments
12921 ------------------------------------------------------------------------------
12922   PROCEDURE get_party_rec
12923         (p_api_version                  IN  NUMBER,
12924          p_init_msg_list                IN  VARCHAR2 DEFAULT OKL_API.G_FALSE,
12925          x_return_status                OUT NOCOPY VARCHAR2,
12926          x_msg_count                    OUT NOCOPY NUMBER,
12927          x_msg_data                     OUT NOCOPY VARCHAR2,
12928      p_chrv_id                      IN  NUMBER,
12929      x_party_tbl                    OUT NOCOPY CSI_DATASTRUCTURES_PUB.party_tbl) IS
12930 
12931      l_party_tab         OKL_JTOT_EXTRACT.party_tab_type;
12932      l_return_status     VARCHAR2(1) := OKL_API.G_RET_STS_SUCCESS;
12933      l_api_name          CONSTANT VARCHAR2(30) := 'GET_PARTY_REC';
12934      l_api_version           CONSTANT NUMBER    := 1.0;
12935 
12936      l_index         NUMBER;
12937 
12938 BEGIN
12939     --call start activity to set savepoint
12940      l_return_status := OKL_API.START_ACTIVITY( SUBSTR(l_api_name,1,26),
12941                                                        p_init_msg_list,
12942                                                    '_PVT',
12943                                                        x_return_status);
12944      IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
12945                 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
12946      ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
12947                 RAISE OKL_API.G_EXCEPTION_ERROR;
12948      END IF;
12949 
12950     --get Party
12951     OKL_JTOT_EXTRACT.Get_Party(p_api_version     =>  p_api_version,
12952                                p_init_msg_list   =>  p_init_msg_list,
12953                                x_return_status   =>  x_return_status,
12954                                x_msg_count       =>  x_msg_count,
12955                                x_msg_data        =>  x_msg_data,
12956                                p_chr_id          =>  p_chrv_id,
12957                                p_cle_id          =>  NULL,
12958                                p_role_code       =>  G_ITM_INST_PARTY,
12959                                p_intent          =>  G_CONTRACT_INTENT,
12960                                x_party_tab       =>  l_party_tab);
12961 
12962    IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
12963                     RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
12964        ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
12965                     RAISE OKL_API.G_EXCEPTION_ERROR;
12966     END IF;
12967 
12968     FOR l_index IN 1..l_party_tab.LAST
12969     LOOP
12970         x_party_tbl(l_index).party_id := l_party_tab(l_index).id1;
12971         x_party_tbl(l_index).party_source_table := G_PARTY_SRC_TABLE;
12972         x_party_tbl(l_index).relationship_type_code := G_PARTY_RELATIONSHIP;
12973         x_party_tbl(l_index).contact_flag := 'N';
12974         --dbms_output.put_line('party_id' || to_char(l_index)||'-'||to_char(x_party_tbl(l_index).party_id));
12975     END LOOP;
12976 
12977     IF (l_index = 0) THEN
12978         --no owner party record found
12979         OKL_API.SET_MESSAGE(p_app_name     => g_app_name,
12980                                             p_msg_name     => G_PARTY_NOT_FOUND,
12981                                             p_token1       => G_ROLE_CODE_TOKEN,
12982                                             p_token1_value => G_ITM_INST_PARTY
12983                                          );
12984         RAISE OKL_API.G_EXCEPTION_ERROR;
12985     END IF;
12986 
12987     --Call end Activity
12988     OKL_API.END_ACTIVITY(x_msg_count, x_msg_data);
12989     EXCEPTION
12990     WHEN OKL_API.G_EXCEPTION_ERROR THEN
12991       x_return_status :=OKL_API.HANDLE_EXCEPTIONS
12992       (
12993         l_api_name,
12994         G_PKG_NAME,
12995         'OKL_API.G_RET_STS_ERROR',
12996         x_msg_count,
12997         x_msg_data,
12998         '_PVT'
12999       );
13000     WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
13001       x_return_status :=OKL_API.HANDLE_EXCEPTIONS
13002       (
13003         l_api_name,
13004         G_PKG_NAME,
13005         'OKL_API.G_RET_STS_UNEXP_ERROR',
13006         x_msg_count,
13007         x_msg_data,
13008         '_PVT'
13009       );
13010     WHEN OTHERS THEN
13011       x_return_status :=OKL_API.HANDLE_EXCEPTIONS
13012       (
13013         l_api_name,
13014         G_PKG_NAME,
13015         'OTHERS',
13016         x_msg_count,
13017         x_msg_data,
13018         '_PVT'
13019       );
13020 END get_party_rec;
13021 --------------------------------------------------------------------------------
13022 --Start of comments
13023 --Procedure Name : delete_instance_lines(Local)
13024 --Description    : deletes split our instance lines in case of serialized split asset
13025 --Created for Bug# 2726870 : Split assets by serial numbers
13026 --End of comments
13027 --------------------------------------------------------------------------------
13028 PROCEDURE delete_instance_lines(p_api_version   IN  NUMBER,
13029                                 p_init_msg_list IN  VARCHAR2 DEFAULT OKL_API.G_FALSE,
13030                                 x_return_status OUT NOCOPY VARCHAR2,
13031                                 x_msg_count     OUT NOCOPY NUMBER,
13032                                 x_msg_data      OUT NOCOPY VARCHAR2,
13033                                 p_inst_cle_id   IN  NUMBER,
13034                                 p_ib_cle_id     IN  NUMBER) IS
13035 
13036   l_return_status        VARCHAR2(1)  DEFAULT OKL_API.G_RET_STS_SUCCESS;
13037   l_api_name             CONSTANT VARCHAR2(30) := 'DELETE_INSTANCE_LINES';
13038   l_api_version          CONSTANT NUMBER := 1.0;
13039 
13040   l_inst_cle_id           OKC_K_LINES_B.ID%TYPE;
13041   l_ib_cle_id             OKC_K_LINES_B.ID%TYPE;
13042 
13043   l_inst_clev_rec         okc_contract_pub.clev_rec_type;
13044   l_ib_clev_rec           okc_contract_pub.clev_rec_type;
13045   lx_inst_clev_rec        okc_contract_pub.clev_rec_type;
13046   lx_ib_clev_rec          okc_contract_pub.clev_rec_type;
13047 
13048   l_inst_klev_rec         okl_kle_pvt.klev_rec_type;
13049   l_ib_klev_rec           okl_kle_pvt.klev_rec_type;
13050 
13051 
13052 BEGIN
13053     x_return_status := OKL_API.G_RET_STS_SUCCESS;
13054 
13055     x_return_status := OKL_API.START_ACTIVITY (
13056                                l_api_name
13057                                ,p_init_msg_list
13058                                ,'_PVT'
13059                                ,x_return_status);
13060     -- Check if activity started successfully
13061     IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
13062        RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
13063     ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
13064        RAISE OKL_API.G_EXCEPTION_ERROR;
13065     END IF;
13066 
13067     l_inst_cle_id      := p_inst_cle_id;
13068     l_ib_cle_id        := p_ib_cle_id;
13069     l_inst_klev_rec.id :=  l_inst_cle_id;
13070     l_ib_klev_rec.id   :=  l_ib_cle_id;
13071     l_inst_clev_rec.id :=  l_inst_cle_id;
13072     l_ib_clev_rec.id   :=  l_ib_cle_id;
13073 
13074     l_inst_clev_rec.sts_code :=  'ABANDONED';
13075     l_ib_clev_rec.sts_code   :=  'ABANDONED';
13076 
13077     ---update status of the line
13078     OKC_CONTRACT_PUB.update_contract_line(
13079                      p_api_version    => p_api_version,
13080                      p_init_msg_list  => p_init_msg_list,
13081                      x_return_status  => x_return_status,
13082                      x_msg_count      => x_msg_count,
13083                      x_msg_data       => x_msg_data,
13084                      p_clev_rec       => l_ib_clev_rec,
13085                      x_clev_rec       => lx_ib_clev_rec);
13086     IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
13087         RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
13088     ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
13089         RAISE OKL_API.G_EXCEPTION_ERROR;
13090     END IF;
13091 
13092     --Call line deletion API.
13093     OKC_CONTRACT_PUB.delete_contract_line(
13094                      p_api_version    => p_api_version,
13095                      p_init_msg_list  => p_init_msg_list,
13096                      x_return_status  => x_return_status,
13097                      x_msg_count      => x_msg_count,
13098                      x_msg_data       => x_msg_data,
13099                      p_line_id        => l_ib_cle_id);
13100     IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
13101         RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
13102     ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
13103         RAISE OKL_API.G_EXCEPTION_ERROR;
13104     END IF;
13105 
13106     -- delete shadows explicitly
13107     OKL_KLE_PVT.delete_row(
13108               p_api_version             => l_api_version,
13109               p_init_msg_list   => p_init_msg_list,
13110               x_return_status   => x_return_status,
13111               x_msg_count               => x_msg_count,
13112               x_msg_data                => x_msg_data,
13113               p_klev_rec                => l_ib_klev_rec);
13114 
13115     IF x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR THEN
13116         RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
13117     ELSIF x_return_status = OKL_API.G_RET_STS_ERROR THEN
13118         RAISE OKL_API.G_EXCEPTION_ERROR;
13119     END IF;
13120 
13121     ---update status of the line
13122     OKC_CONTRACT_PUB.update_contract_line(
13123                      p_api_version    => p_api_version,
13124                      p_init_msg_list  => p_init_msg_list,
13125                      x_return_status  => x_return_status,
13126                      x_msg_count      => x_msg_count,
13127                      x_msg_data       => x_msg_data,
13128                      p_clev_rec       => l_inst_clev_rec,
13129                      x_clev_rec       => lx_inst_clev_rec);
13130     IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
13131         RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
13132     ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
13133         RAISE OKL_API.G_EXCEPTION_ERROR;
13134     END IF;
13135 
13136     --Call line deletion API
13137     OKC_CONTRACT_PUB.delete_contract_line(
13138                      p_api_version    => p_api_version,
13139                      p_init_msg_list  => p_init_msg_list,
13140                      x_return_status  => x_return_status,
13141                      x_msg_count      => x_msg_count,
13142                      x_msg_data       => x_msg_data,
13143                      p_line_id        => l_inst_cle_id);
13144     IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
13145         RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
13146     ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
13147         RAISE OKL_API.G_EXCEPTION_ERROR;
13148     END IF;
13149 
13150     -- delete shadows explicitly
13151     OKL_KLE_PVT.delete_row(
13152               p_api_version             => l_api_version,
13153               p_init_msg_list   => p_init_msg_list,
13154               x_return_status   => x_return_status,
13155               x_msg_count               => x_msg_count,
13156               x_msg_data                => x_msg_data,
13157               p_klev_rec                => l_ib_klev_rec);
13158 
13159     IF x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR THEN
13160         RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
13161     ELSIF x_return_status = OKL_API.G_RET_STS_ERROR THEN
13162         RAISE OKL_API.G_EXCEPTION_ERROR;
13163     END IF;
13164 
13165     --Bug# 7033247: Deleted the wrongly pasted
13166     --duplicate lines of code from below:
13167 
13168     OKL_API.END_ACTIVITY (x_msg_count,
13169                           x_msg_data );
13170     EXCEPTION
13171     WHEN OKL_API.G_EXCEPTION_ERROR THEN
13172     x_return_status := OKL_API.HANDLE_EXCEPTIONS(
13173                                l_api_name,
13174                                G_PKG_NAME,
13175                                'OKL_API.G_RET_STS_ERROR',
13176                                x_msg_count,
13177                                x_msg_data,
13178                                '_PVT');
13179     WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
13180     x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
13181                               l_api_name,
13182                               G_PKG_NAME,
13183                               'OKL_API.G_RET_STS_UNEXP_ERROR',
13184                               x_msg_count,
13185                               x_msg_data,
13186                               '_PVT');
13187     WHEN OTHERS THEN
13188     x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
13189                               l_api_name,
13190                               G_PKG_NAME,
13191                               'OTHERS',
13192                               x_msg_count,
13193                               x_msg_data,
13194                               '_PVT');
13195 END delete_instance_lines;
13196 --------------------------------------------------------------------------------
13197 --Start of comments
13198 --Procedure Name : Create_ib_instance
13199 --Description    : procedure creates split child ib instance
13200 --Modified for Bug# 2648280 : to take care of IB fix on expire instance API
13201 --end of comments
13202 --------------------------------------------------------------------------------
13203 PROCEDURE create_ib_instance(p_api_version   IN  NUMBER,
13204                              p_init_msg_list IN  VARCHAR2 DEFAULT OKL_API.G_FALSE,
13205                              x_return_status OUT NOCOPY VARCHAR2,
13206                              x_msg_count     OUT NOCOPY NUMBER,
13207                              x_msg_data      OUT NOCOPY VARCHAR2,
13208                              p_csi_id1       IN  VARCHAR2,
13209                              p_csi_id2       IN  VARCHAR2,
13210                              p_ib_cle_id     IN  NUMBER,
13211                              p_chr_id        IN  NUMBER,
13212                              p_split_qty     IN  NUMBER,
13213                              p_txdv_rec      IN  txdv_rec_type,
13214                              x_instance_id   OUT NOCOPY NUMBER) IS
13215 
13216   l_return_status        VARCHAR2(1)  DEFAULT OKL_API.G_RET_STS_SUCCESS;
13217   l_api_name             CONSTANT VARCHAR2(30) := 'CREATE_IB_INSTANCE';
13218   l_api_version          CONSTANT NUMBER := 1.0;
13219 
13220   --instance query recs
13221   l_instance_query_rec           CSI_DATASTRUCTURES_PUB.instance_query_rec;
13222   l_party_query_rec              CSI_DATASTRUCTURES_PUB.party_query_rec;
13223   l_account_query_rec            CSI_DATASTRUCTURES_PUB.party_account_query_rec;
13224   l_instance_header_tbl          CSI_DATASTRUCTURES_PUB.instance_header_tbl;
13225 
13226   --instance recs for creation
13227   l_instance_rec                 CSI_DATASTRUCTURES_PUB.instance_rec;
13228   l_ext_attrib_values_tbl        CSI_DATASTRUCTURES_PUB.extend_attrib_values_tbl;
13229   l_party_tbl                    CSI_DATASTRUCTURES_PUB.party_tbl;
13230   l_party_tbl_in                 CSI_DATASTRUCTURES_PUB.party_tbl;
13231   l_account_tbl                  CSI_DATASTRUCTURES_PUB.party_account_tbl;
13232   l_pricing_attrib_tbl           CSI_DATASTRUCTURES_PUB.pricing_attribs_tbl;
13233   l_org_assignments_tbl          CSI_DATASTRUCTURES_PUB.organization_units_tbl;
13234   l_asset_assignment_tbl         CSI_DATASTRUCTURES_PUB.instance_asset_tbl;
13235   l_txn_rec                      CSI_DATASTRUCTURES_PUB.transaction_rec;
13236 
13237   --original instance updation parameters
13238   l_upd_instance_rec                 CSI_DATASTRUCTURES_PUB.instance_rec;
13239   l_upd_ext_attrib_values_tbl        CSI_DATASTRUCTURES_PUB.extend_attrib_values_tbl;
13240   l_upd_party_tbl                    CSI_DATASTRUCTURES_PUB.party_tbl;
13241   l_upd_party_tbl_in                 CSI_DATASTRUCTURES_PUB.party_tbl;
13242   l_upd_account_tbl                  CSI_DATASTRUCTURES_PUB.party_account_tbl;
13243   l_upd_pricing_attrib_tbl           CSI_DATASTRUCTURES_PUB.pricing_attribs_tbl;
13244   l_upd_org_assignments_tbl          CSI_DATASTRUCTURES_PUB.organization_units_tbl;
13245   l_upd_asset_assignment_tbl         CSI_DATASTRUCTURES_PUB.instance_asset_tbl;
13246   l_upd_txn_rec                      CSI_DATASTRUCTURES_PUB.transaction_rec;
13247   l_upd_instance_id_lst              CSI_DATASTRUCTURES_PUB.id_tbl;
13248 
13249   l_exp_txn_rec                      CSI_DATASTRUCTURES_PUB.transaction_rec;
13250   l_exp_instance_id_lst              CSI_DATASTRUCTURES_PUB.id_tbl;
13251 
13252 
13253   l_no_data_found                BOOLEAN;
13254 
13255   --cursor to fetch customer account
13256   /*--Bug# 3124577: 11.5.10 : Rule Migration--------------------------------------
13257   CURSOR party_account_csr(p_chrv_id IN NUMBER) is
13258   SELECT  to_number(rulv.object1_id1)
13259   FROM    OKC_RULES_V rulv
13260   WHERE   rulv.rule_information_category = G_CUST_ACCT_RULE
13261   AND     rulv.dnz_chr_id = p_chrv_id
13262   AND     exists (select '1'
13263                   from    OKC_RULE_GROUPS_V rgpv
13264                   where   rgpv.chr_id = p_chrv_id
13265                   and     rgpv.rgd_code = G_CUST_ACCT_RULE_GROUP
13266                   and     rgpv.id       = rulv.rgp_id);
13267   --------------------------------------Bug# 3124577 : 11.5.10 Rule Migration----*/
13268 
13269   CURSOR party_account_csr(p_chrv_id IN NUMBER) IS
13270   SELECT chrb.cust_acct_id
13271   FROM   OKC_K_HEADERS_B chrb
13272   WHERE  chrb.id = p_chrv_id;
13273 
13274   l_party_account              NUMBER;
13275 
13276   --bug# 2648280
13277   --modified to get all the terminated statuses
13278   CURSOR inst_sts_csr(p_status_name IN VARCHAR2) IS
13279   SELECT instance_status_id
13280   FROM   CSI_INSTANCE_STATUSES
13281   WHERE  NVL(TERMINATED_FLAG,'N') = 'Y'
13282   AND    name = p_status_name;
13283 
13284   l_expired_status_id csi_instance_statuses.instance_status_id%TYPE DEFAULT NULL;
13285 
13286   l_active_instances_only VARCHAR2(1);
13287 
13288   --Bug # 2726870 11.5.9 enhancements - split asset into components
13289   --cursor to check if instance is to be split out in case of split asset by serial numbers
13290   CURSOR chk_instance_csr (PInstanceId IN NUMBER,PTalId IN NUMBER ) IS
13291   SELECT '!'
13292   FROM   OKL_TXL_ITM_INSTS iti
13293   WHERE  iti.instance_id                      = PInstanceId
13294   AND    iti.tal_id                           = PTalId
13295   AND    NVL(iti.selected_for_split_flag,'N') = 'Y'
13296   AND    iti.tal_type                         = 'ALI';
13297 
13298   l_instance_for_split   VARCHAR2(1) DEFAULT '?';
13299 
13300   --cursor to get the instance line id for parent asset line for delete
13301   CURSOR get_instance_cle_csr (PInstanceId IN NUMBER, PTalId IN NUMBER, PChrId IN NUMBER) IS
13302   SELECT inst_cle.id      inst_cle_id,
13303          ib_cle.id        ib_cle_id
13304   FROM
13305          okc_k_items       ib_cim,
13306          okc_k_lines_b     ib_cle,
13307          okc_line_styles_b ib_lse,
13308          okc_k_lines_b     inst_cle,
13309          okc_line_styles_b inst_lse,
13310          okc_k_lines_b     fa_cle,
13311          okc_line_styles_b fa_lse,
13312          okl_txl_Assets_b  tal
13313   WHERE  ib_cim.object1_id1       = TO_CHAR(PInstanceId)
13314   AND    ib_cim.object1_id2       = '#'
13315   AND    ib_cim.jtot_object1_code = 'OKX_IB_ITEM'
13316   AND    ib_cim.cle_id            = ib_cle.id
13317   AND    ib_cim.dnz_chr_id        = ib_cle.dnz_chr_id
13318   AND    ib_cle.cle_id            = inst_cle.id
13319   AND    ib_cle.dnz_chr_id        = inst_cle.dnz_chr_id
13320   AND    ib_cle.lse_id            = ib_lse.id
13321   AND    ib_lse.lty_code          = 'INST_ITEM'
13322   AND    inst_cle.cle_id          = fa_cle.cle_id
13323   AND    inst_cle.dnz_chr_id      = fa_cle.dnz_chr_id
13324   AND    inst_cle.lse_id          = inst_lse.id
13325   AND    inst_lse.lty_code        = 'FREE_FORM2'
13326   AND    fa_cle.id                = tal.kle_id
13327   AND    fa_cle.dnz_chr_id        = PChrId
13328   AND    fa_cle.lse_id            = fa_lse.id
13329   AND    fa_lse.lty_code          = 'FIXED_ASSET'
13330   AND    tal.id                   = PTalId;
13331 
13332   l_inst_cle_id    OKC_K_LINES_B.ID%TYPE;
13333   l_ib_cle_id      OKC_K_LINES_B.ID%TYPE;
13334 
13335 --Cursors for Split asset components which are serialized
13336   CURSOR get_instance_cle_csr2 (PTarget_kle_id IN NUMBER, PChrId IN NUMBER) IS
13337   SELECT inst_cle.id  inst_cle_id,
13338          ib_cim.id    ib_cim_id
13339   FROM
13340          okc_k_items       ib_cim,
13341          okc_k_lines_b     ib_cle,
13342          okc_line_styles_b ib_lse,
13343          okc_k_lines_b     inst_cle,
13344          okc_line_styles_b inst_lse,
13345          okc_k_lines_b     fa_cle,
13346          okc_line_styles_b fa_lse
13347   WHERE
13348          ib_cim.cle_id            = ib_cle.id
13349   AND    ib_cim.dnz_chr_id        = ib_cle.dnz_chr_id
13350   AND    ib_cle.cle_id            = inst_cle.id
13351   AND    ib_cle.dnz_chr_id        = inst_cle.dnz_chr_id
13352   AND    ib_cle.lse_id            = ib_lse.id
13353   AND    ib_lse.lty_code          = 'INST_ITEM'
13354   AND    inst_cle.cle_id          = fa_cle.cle_id
13355   AND    inst_cle.dnz_chr_id      = fa_cle.dnz_chr_id
13356   AND    inst_cle.lse_id          = inst_lse.id
13357   AND    inst_lse.lty_code        = 'FREE_FORM1'
13358   AND    fa_cle.id                = PTarget_kle_id
13359   AND    fa_cle.dnz_chr_id        = PChrId
13360   AND    fa_cle.lse_id            = fa_lse.id
13361   AND    fa_lse.lty_code          = 'FIXED_ASSET';
13362 
13363 
13364   l_ib_cim_id      OKC_K_ITEMS.ID%TYPE;
13365   l_serialized     VARCHAR2(1) DEFAULT okl_api.g_false;
13366 
13367   --cursor to get the serial numbers for serialized split asset components
13368   CURSOR comp_srl_csr (p_asd_id IN NUMBER) IS
13369   SELECT serial_number,
13370          id
13371   FROM   okl_txl_itm_insts
13372   WHERE  asd_id = p_asd_id
13373   AND    NVL(selected_for_split_flag,'N') = 'Y';
13374 
13375   l_itiv_id  OKL_TXL_ITM_INSTS.ID%TYPE;
13376 
13377   l_iipv_rec  OKL_TXL_ITM_INSTS_PUB.iipv_rec_type;
13378   lx_iipv_rec OKL_TXL_ITM_INSTS_PUB.iipv_rec_type;
13379 
13380 
13381 BEGIN
13382     x_return_status := OKL_API.G_RET_STS_SUCCESS;
13383     -- Call start_activity to create savepoint, check compatibility
13384     -- and initialize message list
13385     x_return_status := OKL_API.START_ACTIVITY (
13386                                l_api_name
13387                                ,p_init_msg_list
13388                                ,'_PVT'
13389                                ,x_return_status);
13390     -- Check if activity started successfully
13391     IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
13392        RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
13393     ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
13394        RAISE OKL_API.G_EXCEPTION_ERROR;
13395     END IF;
13396 
13397     --get item instance record
13398     --l_instance_rec := get_csi_rec(p_csi_id1 => p_csi_id1,
13399     --                              p_csi_id2 => p_csi_id2,
13400     --                              x_no_data_found => l_no_data_found);
13401 
13402     l_instance_query_rec.instance_id := p_csi_id1;
13403 
13404     --split asset into components modfn.
13405     IF NVL(p_txdv_rec.split_percent,0) NOT IN (0,OKL_API.G_MISS_NUM) THEN
13406        l_active_instances_only := FND_API.G_FALSE;
13407     ELSE
13408        l_active_instances_only := FND_API.G_TRUE;
13409     END IF;
13410 
13411     csi_item_instance_pub.get_item_instances (
13412          p_api_version           => p_api_version,
13413          p_commit                => FND_API.G_FALSE,
13414          p_init_msg_list         => FND_API.G_FALSE,
13415          p_validation_level      => FND_API.G_VALID_LEVEL_FULL,
13416          p_instance_query_rec    => l_instance_query_rec,
13417          p_party_query_rec       => l_party_query_rec,
13418          p_account_query_rec     => l_account_query_rec,
13419          p_transaction_id        => NULL,
13420          p_resolve_id_columns    => FND_API.G_FALSE,
13421          p_active_instance_only  => l_active_instances_only,
13422          --modfn for split asset component
13423          --p_active_instance_only  => FND_API.TRUE,
13424          x_instance_header_tbl   => l_instance_header_tbl,
13425          x_return_status         => x_return_status,
13426          x_msg_count             => x_msg_count,
13427          x_msg_data              => x_msg_data);
13428 
13429      --dbms_output.put_line('After calling IB API for query status '||x_return_status);
13430      --dbms_output.put_line('After calling IB API for query instance_id '||to_char(l_instance_header_tbl(1).instance_id));
13431      IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
13432          RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
13433      ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
13434          RAISE OKL_API.G_EXCEPTION_ERROR;
13435      ELSIF (NVL (l_instance_header_tbl.COUNT, 0) <> 1) THEN
13436         RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
13437      END IF;
13438 
13439      --bug# 2982927 : resetting okc inv org again from k header :
13440      okl_context.set_okc_org_context(p_chr_id => p_chr_id);
13441      --bug# 2982927
13442 
13443      --BUG#  3489089 :
13444      l_instance_rec.vld_organization_id         := okl_context.get_okc_organization_id;
13445      --BUG# 3489089
13446 
13447      l_instance_rec.instance_id                 := l_instance_header_tbl(1).instance_id;
13448      l_instance_rec.instance_number             := l_instance_header_tbl(1).instance_number;
13449      l_instance_rec.external_reference          := l_instance_header_tbl(1).external_reference;
13450      l_instance_rec.INVENTORY_ITEM_ID           := l_instance_header_tbl(1).INVENTORY_ITEM_ID;
13451      l_instance_rec.INVENTORY_REVISION          := l_instance_header_tbl(1).INVENTORY_REVISION;
13452      l_instance_rec.INV_MASTER_ORGANIZATION_ID  := l_instance_header_tbl(1).INV_MASTER_ORGANIZATION_ID;
13453      l_instance_rec.SERIAL_NUMBER               := l_instance_header_tbl(1).SERIAL_NUMBER;
13454      l_instance_rec.MFG_SERIAL_NUMBER_FLAG      := l_instance_header_tbl(1).MFG_SERIAL_NUMBER_FLAG;
13455      l_instance_rec.LOT_NUMBER                  := l_instance_header_tbl(1).LOT_NUMBER;
13456      l_instance_rec.QUANTITY                    := l_instance_header_tbl(1).QUANTITY;
13457      l_instance_rec.UNIT_OF_MEASURE             := l_instance_header_tbl(1).UNIT_OF_MEASURE;
13458      l_instance_rec.ACCOUNTING_CLASS_CODE       := l_instance_header_tbl(1).ACCOUNTING_CLASS_CODE;
13459      l_instance_rec.INSTANCE_CONDITION_ID       := l_instance_header_tbl(1).INSTANCE_CONDITION_ID;
13460      l_instance_rec.INSTANCE_STATUS_ID          := l_instance_header_tbl(1).INSTANCE_STATUS_ID;
13461      l_instance_rec.CUSTOMER_VIEW_FLAG          := l_instance_header_tbl(1).CUSTOMER_VIEW_FLAG;
13462      l_instance_rec.MERCHANT_VIEW_FLAG          := l_instance_header_tbl(1).MERCHANT_VIEW_FLAG;
13463      l_instance_rec.SELLABLE_FLAG               := l_instance_header_tbl(1).SELLABLE_FLAG;
13464      l_instance_rec.SYSTEM_ID                   := l_instance_header_tbl(1).SYSTEM_ID;
13465      l_instance_rec.INSTANCE_TYPE_CODE          := l_instance_header_tbl(1).INSTANCE_TYPE_CODE;
13466      l_instance_rec.LOCATION_TYPE_CODE          := l_instance_header_tbl(1).LOCATION_TYPE_CODE;
13467      l_instance_rec.LOCATION_ID                 := l_instance_header_tbl(1).LOCATION_ID;
13468      l_instance_rec.INV_ORGANIZATION_ID         := l_instance_header_tbl(1).INV_ORGANIZATION_ID;
13469      l_instance_rec.INV_SUBINVENTORY_NAME       := l_instance_header_tbl(1).INV_SUBINVENTORY_NAME;
13470      l_instance_rec.INV_LOCATOR_ID              := l_instance_header_tbl(1).INV_LOCATOR_ID;
13471      l_instance_rec.PA_PROJECT_ID               := l_instance_header_tbl(1).PA_PROJECT_ID;
13472      l_instance_rec.PA_PROJECT_TASK_ID          := l_instance_header_tbl(1).PA_PROJECT_TASK_ID;
13473      l_instance_rec.IN_TRANSIT_ORDER_LINE_ID    := l_instance_header_tbl(1).IN_TRANSIT_ORDER_LINE_ID;
13474      l_instance_rec.WIP_JOB_ID                  := l_instance_header_tbl(1).WIP_JOB_ID;
13475      l_instance_rec.PO_ORDER_LINE_ID            := l_instance_header_tbl(1).PO_ORDER_LINE_ID;
13476      l_instance_rec.LAST_OE_ORDER_LINE_ID       := l_instance_header_tbl(1).LAST_OE_ORDER_LINE_ID;
13477      l_instance_rec.LAST_OE_RMA_LINE_ID         := l_instance_header_tbl(1).LAST_OE_RMA_LINE_ID;
13478      l_instance_rec.LAST_PO_PO_LINE_ID          := l_instance_header_tbl(1).LAST_PO_PO_LINE_ID;
13479      l_instance_rec.LAST_OE_PO_NUMBER           := l_instance_header_tbl(1).LAST_OE_PO_NUMBER;
13480      l_instance_rec.LAST_WIP_JOB_ID             := l_instance_header_tbl(1).LAST_WIP_JOB_ID;
13481      l_instance_rec.LAST_PA_PROJECT_ID          := l_instance_header_tbl(1).LAST_PA_PROJECT_ID;
13482      l_instance_rec.LAST_PA_TASK_ID             := l_instance_header_tbl(1).LAST_PA_TASK_ID;
13483      l_instance_rec.LAST_OE_AGREEMENT_ID        := l_instance_header_tbl(1).LAST_OE_AGREEMENT_ID;
13484      l_instance_rec.INSTALL_DATE                := l_instance_header_tbl(1).INSTALL_DATE;
13485      l_instance_rec.MANUALLY_CREATED_FLAG       := l_instance_header_tbl(1).MANUALLY_CREATED_FLAG;
13486      l_instance_rec.RETURN_BY_DATE              := l_instance_header_tbl(1).RETURN_BY_DATE;
13487      l_instance_rec.ACTUAL_RETURN_DATE          := l_instance_header_tbl(1).ACTUAL_RETURN_DATE;
13488      l_instance_rec.CREATION_COMPLETE_FLAG      := l_instance_header_tbl(1).CREATION_COMPLETE_FLAG;
13489      l_instance_rec.COMPLETENESS_FLAG           := l_instance_header_tbl(1).COMPLETENESS_FLAG;
13490      l_instance_rec.LAST_TXN_LINE_DETAIL_ID     := l_instance_header_tbl(1).LAST_TXN_LINE_DETAIL_ID;
13491      l_instance_rec.INSTALL_LOCATION_TYPE_CODE  := l_instance_header_tbl(1).INSTALL_LOCATION_TYPE_CODE;
13492      l_instance_rec.INSTALL_LOCATION_ID         := l_instance_header_tbl(1).INSTALL_LOCATION_ID;
13493      l_instance_rec.INSTANCE_USAGE_CODE         := l_instance_header_tbl(1).INSTANCE_USAGE_CODE;
13494      l_instance_rec.OBJECT_VERSION_NUMBER       := l_instance_header_tbl(1).OBJECT_VERSION_NUMBER;
13495 
13496      IF NVL(p_txdv_rec.split_percent,0) NOT IN (0,OKL_API.G_MISS_NUM) THEN --splitting into components
13497          --expire original item instances
13498          l_expired_status_id := NULL;
13499          OPEN inst_sts_csr(p_status_name => l_instance_rec.instance_status_id);
13500          FETCH inst_sts_csr INTO l_expired_status_id;
13501          IF inst_sts_csr%NOTFOUND THEN
13502              --get trx record
13503              get_trx_rec(p_api_version      => p_api_version,
13504                          p_init_msg_list    => p_init_msg_list,
13505                          x_return_status    => x_return_status,
13506                          x_msg_count        => x_msg_count,
13507                          x_msg_data         => x_msg_data,
13508                          p_cle_id           => p_ib_cle_id,
13509                          p_transaction_type => G_IB_SPLIT_TXN_TYPE,
13510                          x_trx_rec          => l_exp_txn_rec);
13511 
13512             IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
13513                 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
13514             ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
13515                 RAISE OKL_API.G_EXCEPTION_ERROR;
13516             END IF;
13517 
13518             l_instance_rec.INSTANCE_STATUS_ID := NULL;
13519             csi_item_instance_pub.expire_item_instance
13520                   (p_api_version         => p_api_version
13521                   ,p_commit              => fnd_api.g_false
13522                   ,p_init_msg_list       => p_init_msg_list
13523                   ,p_validation_level    => fnd_api.g_valid_level_full
13524                   ,p_instance_rec        => l_instance_rec
13525                   ,p_expire_children     => fnd_api.g_false
13526                   ,p_txn_rec             => l_exp_txn_rec
13527                   ,x_instance_id_lst     => l_exp_instance_id_lst
13528                   ,x_return_status       => x_return_status
13529                   ,x_msg_count           => x_msg_count
13530                   ,x_msg_data            => x_msg_data);
13531 
13532             IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
13533                RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
13534             ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
13535                RAISE OKL_API.G_EXCEPTION_ERROR;
13536             END IF;
13537 
13538             --bug# 2982927 : resetting okc inv org again from k header :
13539             okl_context.set_okc_org_context(p_chr_id => p_chr_id);
13540             --bug# 2982927
13541 
13542         ELSE
13543 
13544             NULL;
13545 
13546         END IF;
13547 
13548         --Bug # 2726870 :11.5.9 enhancement Split asset by serial numbers for Split Asset by components
13549         l_serialized := OKL_API.G_FALSE;
13550         Is_Inv_Item_Serialized(p_api_version      => p_api_version,
13551                                p_init_msg_list    => p_init_msg_list,
13552                                x_return_status    => x_return_status,
13553                                x_msg_count        => x_msg_count,
13554                                x_msg_data         => x_msg_data,
13555                                p_inv_item_id      => p_txdv_rec.inventory_item_id,
13556                                p_chr_id           => p_chr_id,
13557                                p_cle_id           => NULL,
13558                                x_serialized       => l_serialized);
13559          IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
13560             RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
13561          ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
13562             RAISE OKL_API.G_EXCEPTION_ERROR;
13563          END IF;
13564 
13565          --If l_serialized = OKL_API.G_FALSE Then
13566              --if not serialized create new instances normally
13567              IF l_serialized = OKL_API.G_FALSE THEN
13568                  l_instance_rec.serial_number  := NULL;
13569                  l_instance_rec.quantity       := p_split_qty;
13570              ELSIF l_serialized = OKL_API.G_TRUE THEN
13571                  --set serial number
13572                  OPEN comp_srl_csr (p_asd_id => p_txdv_rec.id);
13573                  FETCH comp_srl_csr INTO l_instance_rec.serial_number,
13574                                          l_itiv_id;
13575                  IF comp_srl_csr%NOTFOUND THEN
13576                      l_instance_rec.serial_number  := NULL;
13577                  END IF;
13578                  CLOSE comp_srl_csr;
13579                  IF l_itiv_id IS NOT NULL OR l_itiv_id <> OKL_API.G_MISS_NUM THEN
13580                      --update the serail number record as processed
13581                      l_iipv_rec.id := l_itiv_id;
13582                      l_iipv_rec.selected_for_split_flag := 'P';
13583                      --dbms_output.put_line('before update of txl itm insts sts'||x_return_status);
13584                      --dbms_output.put_line('before update of txl itm insts sts'||to_char(l_iipv_rec.id));
13585                      --dbms_output.put_line('before update of txl itm insts sts'||to_char(l_iipv_rec.kle_id));
13586                      okl_txl_itm_insts_pub.update_txl_itm_insts
13587                                          (p_api_version   => p_api_version,
13588                                           p_init_msg_list => p_init_msg_list,
13589                                           x_return_status => x_return_status,
13590                                           x_msg_count     => x_msg_count,
13591                                           x_msg_data      => x_msg_data,
13592                                           p_iipv_rec      => l_iipv_rec,
13593                                           x_iipv_rec      => lx_iipv_rec);
13594                      --dbms_output.put_line('after update of txl itm insts sts'||x_return_status);
13595                      IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
13596                          RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
13597                      ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
13598                          RAISE OKL_API.G_EXCEPTION_ERROR;
13599                      END IF;
13600                  END IF;
13601                  l_instance_rec.quantity   := 1;
13602              END IF;
13603 
13604              l_instance_rec.INSTANCE_STATUS_ID := NULL;
13605 
13606              -- now process for new ib instance creation.
13607              --get trx record
13608              l_instance_rec.instance_id            := NULL;
13609              l_instance_rec.instance_number        := NULL;
13610              --l_instance_rec.serial_number          := Null;
13611              l_instance_rec.creation_complete_flag := NULL;
13612              --l_instance_rec.quantity               := p_split_qty;
13613              l_instance_rec.object_version_number  := NULL;
13614              l_instance_rec.inventory_item_id      := p_txdv_rec.inventory_item_id;
13615              --Bug# 3066375:
13616              l_instance_rec.call_contracts         := okl_api.g_false;
13617 
13618 
13619              get_trx_rec(p_api_version      => p_api_version,
13620                          p_init_msg_list    => p_init_msg_list,
13621                          x_return_status    => x_return_status,
13622                          x_msg_count        => x_msg_count,
13623                          x_msg_data         => x_msg_data,
13624                          p_cle_id           => p_ib_cle_id,
13625                          p_transaction_type => G_IB_SPLIT_TXN_TYPE,
13626                          x_trx_rec          => l_txn_rec);
13627 
13628             IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
13629                 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
13630             ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
13631                 RAISE OKL_API.G_EXCEPTION_ERROR;
13632             END IF;
13633 
13634             --get party tbl
13635             get_party_rec(p_api_version      => p_api_version,
13636                           p_init_msg_list    => p_init_msg_list,
13637                           x_return_status    => x_return_status,
13638                           x_msg_count        => x_msg_count,
13639                           x_msg_data         => x_msg_data,
13640                           p_chrv_id          => p_chr_id,
13641                           x_party_tbl        => l_party_tbl);
13642 
13643             IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
13644                 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
13645             ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
13646                 RAISE OKL_API.G_EXCEPTION_ERROR;
13647             END IF;
13648 
13649             --get party accoutnt id
13650             l_party_account := NULL;
13651             OPEN party_account_csr(p_chrv_id => p_chr_id);
13652                 FETCH party_account_csr INTO
13653                                            l_party_account;
13654                 IF party_account_csr%NOTFOUND THEN
13655                     --raise error for unable to find inv mstr org
13656                     OKL_API.SET_MESSAGE(p_app_name     =>  g_app_name,
13657                                         p_msg_name     =>  G_CUST_ACCOUNT_FOUND,
13658                                         p_token1       =>  G_CONTRACT_ID_TOKEN,
13659                                         p_token1_value =>  TO_CHAR(p_chr_id)
13660                                         );
13661                     RAISE OKL_API.G_EXCEPTION_ERROR;
13662                 ELSE
13663                      NULL;
13664                 END IF;
13665            CLOSE party_account_csr;
13666 
13667            l_account_tbl(1).instance_party_id := l_party_tbl(1).party_id;
13668            l_account_tbl(1).party_account_id  := l_party_account;
13669            l_account_tbl(1).relationship_type_code := G_PARTY_RELATIONSHIP;
13670            --l_account_tbl(1).active_start_date := sysdate;
13671            l_account_tbl(1).parent_tbl_index := 1;
13672 
13673            --dbms_output.put_line('before calling ib API');
13674 
13675            csi_item_instance_pub.create_item_instance(p_api_version           =>  p_api_version,
13676                                                       p_commit                =>  fnd_api.g_false,
13677                                                       p_init_msg_list         =>  p_init_msg_list,
13678                                                       p_instance_rec          =>  l_instance_rec,
13679                                                       p_validation_level      =>  fnd_api.g_valid_level_full,
13680                                                       p_ext_attrib_values_tbl =>  l_ext_attrib_values_tbl,
13681                                                       p_party_tbl             =>  l_party_tbl,
13682                                                       p_account_tbl           =>  l_account_tbl,
13683                                                       p_pricing_attrib_tbl    =>  l_pricing_attrib_tbl,
13684                                                       p_org_assignments_tbl   =>  l_org_assignments_tbl,
13685                                                       p_asset_assignment_tbl  =>  l_asset_assignment_tbl,
13686                                                       p_txn_rec               =>  l_txn_rec,
13687                                                       x_return_status         =>  x_return_status,
13688                                                       x_msg_count             =>  x_msg_count,
13689                                                       x_msg_data              =>  x_msg_data);
13690 
13691              --dbms_output.put_line('After calling IB API status '||x_return_status);
13692              --dbms_output.put_line('After calling IB API instance_id '||to_char(l_instance_rec.instance_id));
13693 
13694             IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
13695                 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
13696             ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
13697                 RAISE OKL_API.G_EXCEPTION_ERROR;
13698             END IF;
13699 
13700             --bug# 2982927 : resetting okc inv org again from k header :
13701             okl_context.set_okc_org_context(p_chr_id => p_chr_id);
13702             --bug# 2982927
13703 
13704             x_instance_id := l_instance_rec.instance_id;
13705 
13706         --Elsif l_serialized = OKL_API.G_TRUE Then
13707 
13708              --1. read from the split transaction to create new serial numbers
13709              --2. For each record create instance in IB
13710              --3. Loop through all the created instances
13711              --4.    fetch existing ib line
13712              --        If line found  update id1,id2
13713              --        else create new ib line and plug in id1,id2
13714              --Null;
13715         --End If; --serialized
13716 
13717      ELSE --for normal split assets
13718 
13719          --Bug # 2726870 :11.5.9 enhancement Split asset by serial numbers for Split Asset by components
13720          l_serialized := OKL_API.G_FALSE;
13721          Is_Inv_Item_Serialized(p_api_version      => p_api_version,
13722                                  p_init_msg_list    => p_init_msg_list,
13723                                  x_return_status    => x_return_status,
13724                                  x_msg_count        => x_msg_count,
13725                                  x_msg_data         => x_msg_data,
13726                                  p_inv_item_id      => l_instance_rec.inventory_item_id,
13727                                  p_chr_id           => p_chr_id,
13728                                  p_cle_id           => NULL,
13729                                  x_serialized       => l_serialized);
13730          IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
13731              RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
13732          ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
13733              RAISE OKL_API.G_EXCEPTION_ERROR;
13734          END IF;
13735 
13736          IF (l_instance_rec.quantity = 1) OR
13737              (l_instance_rec.quantity - p_split_qty) <= 0 THEN -- this will never be the case
13738              NULL; -- no need to update quantity - item instance may be serailized
13739 
13740              --Bug # 2726870 11.5.9 enhancements - split asset into components
13741              IF l_serialized = OKL_API.G_TRUE THEN
13742                  l_instance_for_split := '?';
13743                  OPEN chk_instance_csr(PInstanceId => l_instance_rec.instance_id,
13744                                        PTalId      => P_txdv_rec.tal_id);
13745                  FETCH chk_instance_csr INTO l_instance_for_split;
13746                  IF chk_instance_csr%NOTFOUND THEN
13747                      NULL;
13748                  END IF;
13749                  CLOSE chk_instance_csr;
13750 
13751                  IF l_instance_for_split = '!' THEN
13752                     --delete instance line from parent asset
13753                     --dbms_output.put_line('instance for split');
13754                     OPEN get_instance_cle_csr (PInstanceId => l_instance_rec.instance_id,
13755                                                PTalId      => P_txdv_rec.tal_id,
13756                                                PChrId      => p_chr_id);
13757                     FETCH  get_instance_cle_csr INTO l_inst_cle_id, l_ib_cle_id;
13758                     IF get_instance_cle_csr%NOTFOUND THEN
13759                         NULL;
13760                     ELSE
13761                         --Call line deletion API
13762                         delete_instance_lines(
13763                                                p_api_version    => p_api_version,
13764                                                p_init_msg_list  => p_init_msg_list,
13765                                                x_return_status  => x_return_status,
13766                                                x_msg_count      => x_msg_count,
13767                                                x_msg_data       => x_msg_data,
13768                                                p_inst_cle_id    => l_inst_cle_id,
13769                                                p_ib_cle_id      => l_ib_cle_id);
13770                         IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
13771                             RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
13772                         ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
13773                             RAISE OKL_API.G_EXCEPTION_ERROR;
13774                         END IF;
13775                     END IF;
13776                     x_instance_id := l_instance_rec.instance_id;
13777                  END IF; -- If item instance is selected for serial split
13778              END IF;--if serialized
13779 
13780          ELSE
13781 
13782              --do csi adjustment
13783              l_upd_instance_rec.instance_id           := l_instance_rec.instance_id;
13784              l_upd_instance_rec.quantity              := (l_instance_rec.quantity - p_split_qty);
13785              l_upd_instance_rec.object_version_number := l_instance_rec.object_version_number;
13786 
13787              --get trx record
13788              get_trx_rec(p_api_version      => p_api_version,
13789                          p_init_msg_list    => p_init_msg_list,
13790                          x_return_status    => x_return_status,
13791                          x_msg_count        => x_msg_count,
13792                          x_msg_data         => x_msg_data,
13793                          p_cle_id           => p_ib_cle_id,
13794                          p_transaction_type => G_IB_SPLIT_TXN_TYPE,
13795                          x_trx_rec          => l_upd_txn_rec);
13796 
13797              l_upd_txn_rec.transaction_quantity := (-1)* p_split_qty;
13798 
13799              csi_item_instance_pub.update_item_instance
13800                    (
13801                     p_api_version           => p_api_version
13802                    ,p_commit                => fnd_api.g_false
13803                    ,p_init_msg_list         => p_init_msg_list
13804                    ,p_validation_level      => fnd_api.g_valid_level_full
13805                    ,p_instance_rec          => l_upd_instance_rec
13806                    ,p_ext_attrib_values_tbl => l_upd_ext_attrib_values_tbl
13807                    ,p_party_tbl             => l_upd_party_tbl
13808                    ,p_account_tbl           => l_upd_account_tbl
13809                    ,p_pricing_attrib_tbl    => l_upd_pricing_attrib_tbl
13810                    ,p_org_assignments_tbl   => l_upd_org_assignments_tbl
13811                    ,p_asset_assignment_tbl  => l_upd_asset_assignment_tbl
13812                    ,p_txn_rec               => l_upd_txn_rec
13813                    ,x_instance_id_lst       => l_upd_instance_id_lst
13814                    ,x_return_status         => x_return_status
13815                    ,x_msg_count             => x_msg_count
13816                    ,x_msg_data              => x_msg_data
13817                    );
13818 
13819               --dbms_output.put_line('After calling IB API for update status '||x_return_status);
13820               --dbms_output.put_line('After calling IB API update instance_id '||to_char(l_instance_rec.instance_id));
13821               IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
13822                   RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
13823               ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
13824                   RAISE OKL_API.G_EXCEPTION_ERROR;
13825               END IF;
13826 
13827               --bug# 2982927 : resetting okc inv org again from k header :
13828               okl_context.set_okc_org_context(p_chr_id => p_chr_id);
13829               --bug# 2982927
13830 
13831            END IF;
13832 
13833 
13834            IF  (l_serialized = OKL_API.G_TRUE) THEN
13835                NULL;
13836                --dbms_output.put_line('Serialized');
13837                x_instance_id := l_instance_rec.instance_id;
13838            ELSE
13839                --dbms_output.put_line('Not Serialized');
13840                -- now process for new ib instance creation.
13841                --get trx record
13842                l_instance_rec.instance_id            := NULL;
13843                l_instance_rec.instance_number        := NULL;
13844                l_instance_rec.serial_number          := NULL;
13845                l_instance_rec.creation_complete_flag := NULL;
13846                l_instance_rec.quantity               := p_split_qty;
13847                l_instance_rec.object_version_number  := NULL;
13848                --Bug# 3066375:
13849                l_instance_rec.call_contracts         := okl_api.g_false;
13850 
13851 
13852                get_trx_rec(p_api_version      => p_api_version,
13853                            p_init_msg_list    => p_init_msg_list,
13854                            x_return_status    => x_return_status,
13855                            x_msg_count        => x_msg_count,
13856                            x_msg_data         => x_msg_data,
13857                            p_cle_id           => p_ib_cle_id,
13858                            p_transaction_type => G_IB_SPLIT_TXN_TYPE,
13859                            x_trx_rec          => l_txn_rec);
13860 
13861                IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
13862                    RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
13863                ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
13864                    RAISE OKL_API.G_EXCEPTION_ERROR;
13865                END IF;
13866 
13867                --get party tbl
13868                get_party_rec(p_api_version      => p_api_version,
13869                          p_init_msg_list    => p_init_msg_list,
13870                          x_return_status    => x_return_status,
13871                          x_msg_count        => x_msg_count,
13872                          x_msg_data         => x_msg_data,
13873                          p_chrv_id          => p_chr_id,
13874                          x_party_tbl        => l_party_tbl);
13875 
13876                IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
13877                    RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
13878                ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
13879                    RAISE OKL_API.G_EXCEPTION_ERROR;
13880                END IF;
13881 
13882                --get party accoutnt id
13883                l_party_account := NULL;
13884                OPEN party_account_csr(p_chrv_id => p_chr_id);
13885                   FETCH party_account_csr INTO
13886                                            l_party_account;
13887                    IF party_account_csr%NOTFOUND THEN
13888                        --raise error for unable to find inv mstr org
13889                        OKL_API.SET_MESSAGE(p_app_name     =>  g_app_name,
13890                                            p_msg_name     =>  G_CUST_ACCOUNT_FOUND,
13891                                            p_token1       =>  G_CONTRACT_ID_TOKEN,
13892                                            p_token1_value =>  TO_CHAR(p_chr_id)
13893                                            );
13894                        RAISE OKL_API.G_EXCEPTION_ERROR;
13895                    ELSE
13896                        NULL;
13897                    END IF;
13898                CLOSE party_account_csr;
13899 
13900                l_account_tbl(1).instance_party_id := l_party_tbl(1).party_id;
13901                l_account_tbl(1).party_account_id  := l_party_account;
13902                l_account_tbl(1).relationship_type_code := G_PARTY_RELATIONSHIP;
13903                --l_account_tbl(1).active_start_date := sysdate;
13904                l_account_tbl(1).parent_tbl_index := 1;
13905 
13906                --dbms_output.put_line('before calling ib API');
13907 
13908                csi_item_instance_pub.create_item_instance(p_api_version           =>  p_api_version,
13909                                                           p_commit                =>  fnd_api.g_false,
13910                                                           p_init_msg_list         =>  p_init_msg_list,
13911                                                           p_instance_rec          =>  l_instance_rec,
13912                                                           p_validation_level      =>  fnd_api.g_valid_level_full,
13913                                                           p_ext_attrib_values_tbl =>  l_ext_attrib_values_tbl,
13914                                                           p_party_tbl             =>  l_party_tbl,
13915                                                           p_account_tbl           =>  l_account_tbl,
13916                                                           p_pricing_attrib_tbl    =>  l_pricing_attrib_tbl,
13917                                                           p_org_assignments_tbl   =>  l_org_assignments_tbl,
13918                                                           p_asset_assignment_tbl  =>  l_asset_assignment_tbl,
13919                                                           p_txn_rec               =>  l_txn_rec,
13920                                                           x_return_status         =>  x_return_status,
13921                                                           x_msg_count             =>  x_msg_count,
13922                                                           x_msg_data              =>  x_msg_data);
13923 
13924                --dbms_output.put_line('After calling IB API status '||x_return_status);
13925                --dbms_output.put_line('After calling IB API instance_id '||to_char(l_instance_rec.instance_id));
13926 
13927                IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
13928                    RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
13929                ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
13930                    RAISE OKL_API.G_EXCEPTION_ERROR;
13931                END IF;
13932 
13933                --bug# 2982927 : resetting okc inv org again from k header :
13934                okl_context.set_okc_org_context(p_chr_id => p_chr_id);
13935                --bug# 2982927
13936 
13937            END IF; --If serail number split
13938            x_instance_id := l_instance_rec.instance_id;
13939     END IF; --type of split
13940 
13941     OKL_API.END_ACTIVITY (x_msg_count,
13942                           x_msg_data );
13943     EXCEPTION
13944     WHEN OKL_API.G_EXCEPTION_ERROR THEN
13945     x_return_status := OKL_API.HANDLE_EXCEPTIONS(
13946                                l_api_name,
13947                                G_PKG_NAME,
13948                                'OKL_API.G_RET_STS_ERROR',
13949                                x_msg_count,
13950                                x_msg_data,
13951                                '_PVT');
13952     WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
13953     x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
13954                               l_api_name,
13955                               G_PKG_NAME,
13956                               'OKL_API.G_RET_STS_UNEXP_ERROR',
13957                               x_msg_count,
13958                               x_msg_data,
13959                               '_PVT');
13960     WHEN OTHERS THEN
13961     x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
13962                               l_api_name,
13963                               G_PKG_NAME,
13964                               'OTHERS',
13965                               x_msg_count,
13966                               x_msg_data,
13967                               '_PVT');
13968 END create_ib_instance;
13969 --------------------------------------------------------------------------------
13970 --Start of Comments
13971 --Procedure Name : consolidate_ib_lines (local)
13972 --Description    : Will consoldate the ib lines for split asset into
13973 --                 components when either source or target asset is serialized
13974 --History        :
13975 --                 30-Jan-2003  ashish.singh Created
13976 --End of Comments
13977 --------------------------------------------------------------------------------
13978 PROCEDURE consolidate_ib_lines(p_api_version   IN  NUMBER,
13979                                p_init_msg_list IN  VARCHAR2,
13980                                x_return_status OUT NOCOPY VARCHAR2,
13981                                x_msg_count     OUT NOCOPY NUMBER,
13982                                x_msg_data      OUT NOCOPY VARCHAR2,
13983                                p_txdv_rec      IN  txdv_rec_type,
13984                                p_txlv_rec      IN  txlv_rec_type
13985                                ) IS
13986 l_return_status        VARCHAR2(1)  DEFAULT OKL_API.G_RET_STS_SUCCESS;
13987 l_api_name             CONSTANT VARCHAR2(30) := 'CONSOLIDATE_IB_LINES';
13988 l_api_version          CONSTANT NUMBER := 1.0;
13989 
13990 --Cursor to get model line inventory item on parent line
13991 CURSOR inv_itm_csr(p_fa_line_id IN NUMBER) IS
13992 SELECT cim_model.object1_id1,
13993        cim_model.object1_id2,
13994        cle_fa.dnz_chr_id,
13995        cle_fa.cle_id
13996 FROM   okc_k_items        cim_model,
13997        okc_k_lines_b      cle_model,
13998        okc_line_styles_b  lse_model,
13999        okc_k_lines_b      cle_fa
14000 WHERE  cim_model.dnz_chr_id = cle_model.dnz_chr_id
14001 AND    cim_model.cle_id     = cle_model.id
14002 AND    cle_model.lse_id     = lse_model.id
14003 AND    lse_model.lty_code   = 'ITEM'
14004 AND    cle_model.cle_id     = cle_fa.cle_id
14005 AND    cle_model.dnz_chr_id = cle_fa.dnz_chr_id
14006 AND    cle_fa.id            = p_fa_line_id;
14007 
14008 l_object1_id1        OKC_K_ITEMS.object1_id1%TYPE;
14009 l_object1_id2        OKC_K_ITEMS.object1_id2%TYPE;
14010 l_chr_id             NUMBER;
14011 l_cle_id             NUMBER; --top line id
14012 
14013 l_parent_serialized  VARCHAR2(1) DEFAULT OKL_API.G_FALSE;
14014 l_child_serialized   VARCHAR2(1) DEFAULT OKL_API.G_FALSE;
14015 
14016 --Cursor to fetch ib instances
14017 CURSOR ib_inst_csr(p_fin_ast_id IN NUMBER) IS
14018 SELECT cle_ib.id,
14019        cle_inst.id
14020 FROM   okc_k_lines_b     cle_ib,
14021        okc_line_styles_b lse_ib,
14022        okc_k_lines_b     cle_inst,
14023        okc_line_styles_b lse_inst
14024 WHERE  cle_ib.lse_id      = lse_ib.id
14025 AND    lse_ib.lty_code    = 'INST_ITEM'
14026 AND    cle_ib.dnz_chr_id  = cle_inst.dnz_chr_id
14027 AND    cle_ib.cle_id      = cle_inst.id
14028 AND    cle_inst.lse_id    = lse_inst.id
14029 AND    lse_inst.lty_code  = 'FREE_FORM2'
14030 AND    cle_inst.cle_id    = p_fin_ast_id;
14031 
14032 l_ib_cle_id      OKC_K_LINES_B.ID%TYPE;
14033 l_inst_cle_id    OKC_K_LINES_B.ID%TYPE;
14034 
14035 --Cursor to fetch new ib instance lines
14036 --Cursor ib_inst_csr(p_fin_ast_id IN NUMBER) is
14037 CURSOR new_ib_inst_csr(p_txd_id IN NUMBER) IS
14038 SELECT cle_ib.id,
14039        cle_inst.id
14040 FROM   okc_k_lines_b     cle_ib,
14041        okc_line_styles_b lse_ib,
14042        okc_k_lines_b     cle_inst,
14043        okc_line_styles_b lse_inst,
14044        okc_k_lines_b     cle_fa,
14045        okl_txd_assets_b  txdb
14046 WHERE  cle_ib.lse_id      = lse_ib.id
14047 AND    lse_ib.lty_code    = 'INST_ITEM'
14048 AND    cle_ib.dnz_chr_id  = cle_inst.dnz_chr_id
14049 AND    cle_ib.cle_id      = cle_inst.id
14050 AND    cle_inst.lse_id    = lse_inst.id
14051 AND    lse_inst.lty_code  = 'FREE_FORM2'
14052 AND    cle_inst.cle_id    =  cle_fa.cle_id
14053 AND    cle_fa.id          = txdb.target_kle_id
14054 AND    txdb.id            = p_txd_id;
14055 
14056 l_tgt_ib_cle_id       OKC_K_LINES_B.ID%TYPE;
14057 l_tgt_inst_cle_id     OKC_K_LINES_B.ID%TYPE;
14058 
14059 
14060 --cursor to fetch child asset top line is
14061 CURSOR child_cle_csr(p_txd_id IN NUMBER) IS
14062 SELECT cle_fa.cle_id
14063 FROM   okc_k_lines_b  cle_fa,
14064        okl_txd_assets_b txdb
14065 WHERE  cle_fa.id = txdb.target_kle_id
14066 AND    txdb.id    = p_txd_id;
14067 
14068 l_target_cle_id   OKC_K_LINES_B.ID%TYPE;
14069 l_new_inst_cle_id OKC_K_LINES_B.ID%TYPE;
14070 
14071 --cursor to fetch the newly created ib line
14072 CURSOR new_ib_csr(p_new_inst_id IN NUMBER) IS
14073 SELECT id
14074 FROM   okc_k_lines_b cle_new_ib
14075 WHERE  cle_new_ib.cle_id = p_new_inst_id;
14076 
14077 l_new_ib_cle_id OKC_K_LINES_B.ID%TYPE;
14078 
14079 --table of line records for updating statuses of the new lines
14080 l_clev_tbl      OKL_OKC_MIGRATION_PVT.clev_tbl_type;
14081 lx_clev_tbl      OKL_OKC_MIGRATION_PVT.clev_tbl_type;
14082 j               NUMBER DEFAULT 0;
14083 
14084  -- Bug# 5946411: ER
14085   --cursor to check the status of asset
14086   CURSOR l_cleb_sts_csr(pcleid IN NUMBER) IS
14087   SELECT cleb.sts_code sts_code
14088   FROM   okc_k_lines_b cleb
14089   WHERE  cleb.id = pcleid;
14090   l_cle_status okc_k_lines_b.sts_code%TYPE;
14091   -- Bug# 5946411: ER End
14092 BEGIN
14093      x_return_status := OKL_API.G_RET_STS_SUCCESS;
14094     -- Call start_activity to create savepoint, check compatibility
14095     -- and initialize message list
14096     x_return_status := OKL_API.START_ACTIVITY (
14097                                l_api_name
14098                                ,p_init_msg_list
14099                                ,'_PVT'
14100                                ,x_return_status);
14101     -- Check if activity started successfully
14102     IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
14103        RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
14104     ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
14105        RAISE OKL_API.G_EXCEPTION_ERROR;
14106     END IF;
14107   -- Bug# 5946411: ER
14108    -- get the status of the parent line id
14109     OPEN l_cleb_sts_csr(  p_txlv_rec.kle_id);
14110     FETCH l_cleb_sts_csr INTO l_cle_status;
14111     close l_cleb_sts_csr;
14112     --dbms_output.put_line('consolidate_ib_line--p_txlv_rec.kle_id'||p_txlv_rec.kle_id);
14113     --dbms_output.put_line('Status set as l_cle_status'||l_cle_status);
14114   -- Bug# 5946411: ER End
14115 
14116     OPEN inv_itm_csr(p_fa_line_id => p_txlv_rec.kle_id);
14117     FETCH inv_itm_csr INTO l_object1_id1,
14118                            l_object1_id2,
14119                            l_chr_id,
14120                            l_cle_id;
14121     CLOSE inv_itm_csr;
14122 
14123     --evaluate if parent asset is serialized
14124     l_parent_serialized := OKL_API.G_FALSE;
14125     Is_Inv_Item_Serialized(p_api_version      => p_api_version,
14126                            p_init_msg_list    => p_init_msg_list,
14127                            x_return_status    => x_return_status,
14128                            x_msg_count        => x_msg_count,
14129                            x_msg_data         => x_msg_data,
14130                            p_inv_item_id      => TO_NUMBER(l_object1_id1),
14131                            p_chr_id           => l_chr_id,
14132                            p_cle_id           => NULL,
14133                            x_serialized       => l_parent_serialized);
14134     --dbms_output.put_line('After parent serialized '||x_return_status);
14135     IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
14136        RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
14137     ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
14138        RAISE OKL_API.G_EXCEPTION_ERROR;
14139     END IF;
14140 
14141     --evaluate if child asset is serialized
14142     l_child_serialized := OKL_API.G_FALSE;
14143     Is_Inv_Item_Serialized(p_api_version      => p_api_version,
14144                            p_init_msg_list    => p_init_msg_list,
14145                            x_return_status    => x_return_status,
14146                            x_msg_count        => x_msg_count,
14147                            x_msg_data         => x_msg_data,
14148                            p_inv_item_id      => p_txdv_rec.inventory_item_id,
14149                            p_chr_id           => l_chr_id,
14150                            p_cle_id           => NULL,
14151                            x_serialized       => l_child_serialized);
14152     --dbms_output.put_line('After child serialized '||x_return_status);
14153     IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
14154        RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
14155     ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
14156        RAISE OKL_API.G_EXCEPTION_ERROR;
14157     END IF;
14158 
14159     IF l_parent_serialized = OKL_API.G_FALSE AND l_child_serialized = OKL_API.G_FALSE THEN
14160         --dbms_output.put_line('Both not serialized '||x_return_status);
14161         NULL;
14162     ELSIF l_parent_serialized = OKL_API.G_TRUE AND l_child_serialized = OKL_API.G_TRUE THEN
14163         --dbms_output.put_line('Both serialized '||x_return_status);
14164         NULL;
14165     ELSIF l_parent_serialized = OKL_API.G_TRUE AND l_child_serialized = OKL_API.G_FALSE THEN
14166         --dbms_output.put_line('Parent serialized,Child not'||x_return_status);
14167         --trim extra ib instance lines from child
14168         FOR i IN 1..(p_txlv_rec.current_units -1)
14169         LOOP
14170             --Open ib_inst_csr(p_fin_ast_id => l_cle_id);
14171             OPEN new_ib_inst_csr(p_txd_id => p_txdv_rec.id);
14172             FETCH new_ib_inst_csr INTO l_tgt_ib_cle_id,
14173                                        l_tgt_inst_cle_id;
14174             CLOSE new_ib_inst_csr;
14175             delete_instance_lines(p_api_version   => p_api_version,
14176                                   p_init_msg_list => p_init_msg_list,
14177                                   x_return_status => x_return_status,
14178                                   x_msg_count     => x_msg_count,
14179                                   x_msg_data      => x_msg_data,
14180                                   p_inst_cle_id   => l_tgt_inst_cle_id,
14181                                   p_ib_cle_id     => l_tgt_ib_cle_id);
14182         END LOOP;
14183 
14184     ELSIF l_parent_serialized = OKL_API.G_FALSE AND l_child_serialized = OKL_API.G_TRUE THEN
14185         --dbms_output.put_line('Add extra ib instance line to child '||x_return_status);
14186         --Add extra ib instance line to child
14187         OPEN ib_inst_csr(p_fin_ast_id => l_cle_id);
14188             FETCH ib_inst_csr INTO l_ib_cle_id,
14189                                    l_inst_cle_id;
14190         CLOSE ib_inst_csr;
14191 
14192         OPEN child_cle_csr(p_txd_id => p_txdv_rec.id);
14193             FETCH child_cle_csr INTO l_target_cle_id;
14194         CLOSE child_cle_csr;
14195 
14196         j := 0;
14197         FOR i IN 1..(p_txlv_rec.current_units-1)
14198         LOOP
14199             --dbms_output.put_line('before Copying lines '||to_char(i)||x_return_status);
14200             --dbms_output.put_line('source cle '||to_char(l_inst_cle_id)||x_return_status);
14201             --dbms_output.put_line('target cle '||to_char(l_target_cle_id)||x_return_status);
14202 
14203             OKL_COPY_CONTRACT_PUB.COPY_CONTRACT_LINES(
14204                 p_api_version       => p_api_version,
14205                 p_init_msg_list     => p_init_msg_list,
14206                 x_return_status     => x_return_status,
14207                 x_msg_count         => x_msg_count,
14208                 x_msg_data          => x_msg_data,
14209                 p_from_cle_id       => l_inst_cle_id,
14210                 p_to_cle_id         => l_target_cle_id,
14211                 p_to_chr_id         => NULL,
14212                 p_to_template_yn        => 'N',
14213                 p_copy_reference        =>  'COPY',
14214                 p_copy_line_party_yn => 'Y',
14215                 p_renew_ref_yn       => 'N',
14216                 x_cle_id                     => l_new_inst_cle_id);
14217 
14218             --dbms_output.put_line('After Copying lines '||to_char(i)||x_return_status);
14219             IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
14220                 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
14221             ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
14222                 RAISE OKL_API.G_EXCEPTION_ERROR;
14223             END IF;
14224             --making the line table for update of status
14225             j := j+1;
14226             l_clev_tbl(j).id       :=   l_new_inst_cle_id;
14227             --Bug# 5946411: ER
14228             --l_clev_tbl(j).sts_code :=   'BOOKED';
14229             l_clev_tbl(j).sts_code:=l_cle_status;
14230             --dbms_output.put_line('consolidate_ib_lines l_clev_tbl(j).sts_code-->'||l_clev_tbl(j).sts_code);
14231             --Bug# 5946411: ER End
14232             OPEN new_ib_csr(p_new_inst_id=> l_new_inst_cle_id);
14233               FETCH  new_ib_csr INTO  l_new_ib_cle_id;
14234             CLOSE new_ib_csr;
14235             j := j+1;
14236             l_clev_tbl(j).id := l_new_ib_cle_id;
14237             --Bug# 5946411: ER
14238             --l_clev_tbl(j).sts_code :=   'BOOKED';
14239             l_clev_tbl(j).sts_code :=  l_cle_status;
14240             --dbms_output.put_line('consolidate_ib_lines * l_clev_tbl(j).sts_code-->'||l_clev_tbl(j).sts_code);
14241             --Bug# 5946411: ER End
14242             --
14243          END LOOP;
14244          --change status of newly created lines to BOOKED
14245          IF l_clev_tbl.COUNT > 0 THEN
14246              OKL_OKC_MIGRATION_PVT.update_contract_line(
14247                 p_api_version       => p_api_version,
14248                 p_init_msg_list     => p_init_msg_list,
14249                 x_return_status     => x_return_status,
14250                 x_msg_count         => x_msg_count,
14251                 x_msg_data          => x_msg_data,
14252                 p_restricted_update     => OKC_API.G_FALSE,
14253                 p_clev_tbl          => l_clev_tbl,
14254                 x_clev_tbl          => lx_clev_tbl);
14255 
14256              IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
14257                  RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
14258              ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
14259                  RAISE OKL_API.G_EXCEPTION_ERROR;
14260              END IF;
14261          END IF;
14262      END IF;
14263     OKL_API.END_ACTIVITY (x_msg_count,
14264                           x_msg_data );
14265     EXCEPTION
14266     WHEN OKL_API.G_EXCEPTION_ERROR THEN
14267     x_return_status := OKL_API.HANDLE_EXCEPTIONS(
14268                                l_api_name,
14269                                G_PKG_NAME,
14270                                'OKL_API.G_RET_STS_ERROR',
14271                                x_msg_count,
14272                                x_msg_data,
14273                                '_PVT');
14274     WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
14275     x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
14276                               l_api_name,
14277                               G_PKG_NAME,
14278                               'OKL_API.G_RET_STS_UNEXP_ERROR',
14279                               x_msg_count,
14280                               x_msg_data,
14281                               '_PVT');
14282     WHEN OTHERS THEN
14283     x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
14284                               l_api_name,
14285                               G_PKG_NAME,
14286                               'OTHERS',
14287                               x_msg_count,
14288                               x_msg_data,
14289                               '_PVT');
14290 END consolidate_ib_lines;
14291 --------------------------------------------------------------------------------
14292 --Start of Comments
14293 --Procedure Name : Relink_Ib_Lines
14294 --Description    : Local procedure will be called if invnetory item is serial
14295 --                 Number Controlled and split criteria is split into individu
14296 --                 -als
14297 --History        :
14298 --                 20-Nov-2003 avsingh  Bug#3222804
14299 --                                      Fixed as part of this bug
14300 --End of Comments
14301 --------------------------------------------------------------------------------
14302   PROCEDURE Relink_Ib_Lines(  p_api_version   IN  NUMBER,
14303                               p_init_msg_list IN  VARCHAR2,
14304                               x_return_status OUT NOCOPY VARCHAR2,
14305                               x_msg_count     OUT NOCOPY NUMBER,
14306                               x_msg_data      OUT NOCOPY VARCHAR2,
14307                               p_txlv_rec      IN  txlv_rec_type) IS
14308 
14309   l_return_status        VARCHAR2(1)  DEFAULT OKL_API.G_RET_STS_SUCCESS;
14310   l_api_name             CONSTANT VARCHAR2(30) := 'RELINK_IB_LINES';
14311   l_api_version          CONSTANT NUMBER := 1.0;
14312 
14313   --cursor to fetch top line id for a fixed asset line
14314   CURSOR l_cleb_csr (p_cle_id IN NUMBER) IS
14315   SELECT cleb.cle_id
14316   FROM   okc_k_lines_b cleb
14317   WHERE  cleb.id = p_cle_id;
14318 
14319   l_parent_fina_cle_id  NUMBER DEFAULT NULL;
14320   l_child_fina_cle_id   NUMBER DEFAULT NULL;
14321 
14322 
14323   --cursor to fetch child instance lines
14324   CURSOR l_target_kle_csr(p_tal_id IN NUMBER) IS
14325   SELECT txdb.target_kle_id
14326   FROM   okl_txd_assets_b txdb
14327   WHERE  txdb.tal_id = p_tal_id;
14328 
14329   l_target_kle_id  NUMBER DEFAULT 0;
14330 
14331   --cursor to fetch Inastance line id
14332   CURSOR l_instcle_csr(p_cle_id IN NUMBER) IS
14333   SELECT cleb.id
14334   FROM   okc_k_lines_b     cleb,
14335          okc_line_styles_b lseb
14336   WHERE  lseb.id          = cleb.lse_id
14337   AND    lseb.lty_code    = 'FREE_FORM2'
14338   AND    cleb.sts_code    <> 'ABANDONED'
14339   AND    cleb.cle_id       = p_cle_id;
14340 
14341   l_instcle_id  NUMBER DEFAULT NULL;
14342 
14343   l_clev_rec    okl_okc_migration_pvt.clev_rec_type;
14344   lx_clev_rec   okl_okc_migration_pvt.clev_rec_type;
14345 
14346   l_serialized VARCHAR2(1) DEFAULT OKL_API.G_FALSE;
14347 
14348 BEGIN
14349 
14350     x_return_status := OKL_API.G_RET_STS_SUCCESS;
14351     -- Call start_activity to create savepoint, check compatibility
14352     -- and initialize message list
14353     x_return_status := OKL_API.START_ACTIVITY (
14354                                l_api_name
14355                                ,p_init_msg_list
14356                                ,'_PVT'
14357                                ,x_return_status);
14358     -- Check if activity started successfully
14359     IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
14360        RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
14361     ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
14362        RAISE OKL_API.G_EXCEPTION_ERROR;
14363     END IF;
14364 
14365     --get the top line id for parent fixed asset line
14366 
14367     OPEN l_cleb_csr(p_cle_id => p_txlv_rec.kle_id);
14368     FETCH l_cleb_csr INTO l_parent_fina_cle_id;
14369     IF l_cleb_csr%NOTFOUND THEN
14370         NULL;
14371     END IF;
14372     CLOSE l_cleb_csr;
14373 
14374     IF NVL(l_parent_fina_cle_id,OKL_API.G_MISS_NUM) <> OKL_API.G_MISS_NUM THEN
14375 
14376         l_serialized := is_serialized(p_cle_id => l_parent_fina_cle_id);
14377         IF l_serialized = OKL_API.G_TRUE THEN
14378             l_target_kle_id := NULL;
14379             OPEN l_target_kle_csr(p_tal_id => p_txlv_rec.id);
14380             LOOP
14381                 FETCH l_target_kle_csr INTO l_target_kle_id;
14382                 EXIT WHEN l_target_kle_csr%NOTFOUND;
14383                 IF l_target_kle_id = p_txlv_rec.kle_id THEN
14384                     NULL;
14385                 ELSE
14386                     l_child_fina_cle_id := NULL;
14387                     OPEN l_cleb_csr(p_cle_id => l_target_kle_id);
14388                     FETCH l_cleb_csr INTO l_child_fina_cle_id;
14389                     IF l_cleb_csr%NOTFOUND THEN
14390                         NULL;
14391                     END IF;
14392                     CLOSE l_cleb_csr;
14393 
14394                     IF NVL(l_child_fina_cle_id,OKL_API.G_MISS_NUM) <> OKL_API.G_MISS_NUM  THEN
14395                         l_instcle_id := NULL;
14396                         OPEN l_instcle_csr(p_cle_id => l_parent_fina_cle_id);
14397                         FETCH l_instcle_csr INTO l_instcle_id;
14398                         IF l_instcle_csr%NOTFOUND THEN
14399                             NULL;
14400                         END IF;
14401                         CLOSE l_instcle_csr;
14402                         IF NVL(l_instcle_id,OKL_API.G_MISS_NUM) <> OKL_API.G_MISS_NUM THEN
14403                             l_clev_rec.id     := l_instcle_id;
14404                             l_clev_rec.cle_id := l_child_fina_cle_id;
14405                             OKL_OKC_MIGRATION_PVT.update_contract_line(p_api_version         => p_api_version,
14406                                                                       p_init_msg_list   => p_init_msg_list,
14407                                                                       x_return_status   => x_return_status,
14408                                                                       x_msg_count           => x_msg_count,
14409                                                                       x_msg_data            => x_msg_data,
14410                                                                       p_clev_rec            => l_clev_rec,
14411                                                                       x_clev_rec            => lx_clev_rec);
14412                             --dbms_output.put_line('after updating contract item for Asset link '||x_return_status);
14413                             IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
14414                                 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
14415                             ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR)  THEN
14416                                 RAISE OKL_API.G_EXCEPTION_ERROR;
14417                             END IF;
14418                         END IF;
14419                     END IF;
14420                 END IF;
14421             END LOOP;
14422             CLOSE l_target_kle_csr;
14423         ELSIF l_serialized = OKL_API.G_FALSE THEN
14424 
14425             --this processing will be done in the create instance routine
14426             --as new IB instances need to be created
14427             NULL;
14428 
14429         END IF;
14430     END IF;
14431     OKL_API.END_ACTIVITY (x_msg_count,
14432                           x_msg_data );
14433   EXCEPTION
14434     WHEN OKL_API.G_EXCEPTION_ERROR THEN
14435     x_return_status := OKL_API.HANDLE_EXCEPTIONS(
14436                                l_api_name,
14437                                G_PKG_NAME,
14438                                'OKL_API.G_RET_STS_ERROR',
14439                                x_msg_count,
14440                                x_msg_data,
14441                                '_PVT');
14442     WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
14443     x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
14444                               l_api_name,
14445                               G_PKG_NAME,
14446                               'OKL_API.G_RET_STS_UNEXP_ERROR',
14447                               x_msg_count,
14448                               x_msg_data,
14449                               '_PVT');
14450     WHEN OTHERS THEN
14451     x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
14452                               l_api_name,
14453                               G_PKG_NAME,
14454                               'OTHERS',
14455                               x_msg_count,
14456                               x_msg_data,
14457                               '_PVT');
14458 END Relink_Ib_Lines;
14459 --------------------------------------------------------------------------------
14460 --Bug#       : 11.5.10
14461 --Name       : recalculate_costs
14462 --Creation   : 23-Sep-2003
14463 --Purpose    : Local procedure to recalculate and update costs on split lines
14464 --------------------------------------------------------------------------------
14465 PROCEDURE recalculate_costs(
14466           p_api_version     IN NUMBER,
14467           p_init_msg_list   IN VARCHAR2,
14468           x_return_status   OUT NOCOPY VARCHAR2,
14469           x_msg_count       OUT NOCOPY NUMBER,
14470           x_msg_data        OUT NOCOPY VARCHAR2,
14471           p_chr_id          IN  NUMBER,
14472           p_cle_tbl         IN  cle_tbl_type
14473           ) IS
14474 
14475 l_return_status        VARCHAR2(1)  DEFAULT OKL_API.G_RET_STS_SUCCESS;
14476 l_api_name             CONSTANT VARCHAR2(30) := 'RECALCULATE_COSTS';
14477 l_api_version          CONSTANT NUMBER := 1.0;
14478 
14479 l_oec               NUMBER;
14480 l_cap_amount        NUMBER;
14481 l_residual_value    NUMBER;
14482 
14483 
14484 l_clev_rec             okl_okc_migration_pvt.clev_rec_type;
14485 l_klev_rec             okl_contract_pub.klev_rec_type;
14486 lx_clev_rec            okl_okc_migration_pvt.clev_rec_type;
14487 lx_klev_rec            okl_contract_pub.klev_rec_type;
14488 
14489 i                  NUMBER;
14490 
14491 BEGIN
14492 
14493     x_return_status := OKL_API.G_RET_STS_SUCCESS;
14494     -- Call start_activity to create savepoint, check compatibility
14495     -- and initialize message list
14496     x_return_status := OKL_API.START_ACTIVITY (
14497                                l_api_name
14498                                ,p_init_msg_list
14499                                ,'_PVT'
14500                                ,x_return_status);
14501     -- Check if activity started successfully
14502     IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
14503        RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
14504     ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
14505        RAISE OKL_API.G_EXCEPTION_ERROR;
14506     END IF;
14507 
14508     IF p_cle_tbl.COUNT > 0 THEN
14509     FOR i IN p_cle_tbl.FIRST..p_cle_tbl.LAST
14510     LOOP
14511         --calculate and update subsidised OEC ,  Capital Amount, Residual Value
14512         OKL_EXECUTE_FORMULA_PUB.EXECUTE(p_api_version   => p_api_version,
14513                                         p_init_msg_list => p_init_msg_list,
14514                                         x_return_status => x_return_status,
14515                                         x_msg_count     => x_msg_count,
14516                                         x_msg_data      => x_msg_data,
14517                                         p_formula_name  => G_FORMULA_OEC,
14518                                         p_contract_id   => p_chr_id,
14519                                         p_line_id       => p_cle_tbl(i).cle_id,
14520                                         x_value         => l_oec);
14521 
14522         IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
14523             RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
14524         ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
14525             RAISE OKL_API.G_EXCEPTION_ERROR;
14526         END IF;
14527 
14528         OKL_EXECUTE_FORMULA_PUB.EXECUTE(p_api_version   => p_api_version,
14529                                         p_init_msg_list => p_init_msg_list,
14530                                         x_return_status => x_return_status,
14531                                         x_msg_count     => x_msg_count,
14532                                         x_msg_data      => x_msg_data,
14533                                         p_formula_name  => G_FORMULA_CAP,
14534                                         p_contract_id   => p_chr_id,
14535                                         p_line_id       => p_cle_tbl(i).cle_id,
14536                                         x_value         => l_cap_amount);
14537 
14538         IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
14539             RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
14540         ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
14541             RAISE OKL_API.G_EXCEPTION_ERROR;
14542         END IF;
14543 
14544         OKL_EXECUTE_FORMULA_PUB.EXECUTE(p_api_version   => p_api_version,
14545                                         p_init_msg_list => p_init_msg_list,
14546                                         x_return_status => x_return_status,
14547                                         x_msg_count     => x_msg_count,
14548                                         x_msg_data      => x_msg_data,
14549                                         p_formula_name  => G_FORMULA_RES,
14550                                         p_contract_id   => p_chr_id,
14551                                         p_line_id       => p_cle_tbl(i).cle_id,
14552                                         x_value         => l_residual_value);
14553 
14554         IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
14555              RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
14556         ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
14557              RAISE OKL_API.G_EXCEPTION_ERROR;
14558         END IF;
14559 
14560         ----------------------------------------------------------------------
14561         --call api to update costs on asset line
14562         ----------------------------------------------------------------------
14563         l_clev_rec.id                    := p_cle_tbl(i).cle_id;
14564         l_klev_rec.id                    := p_cle_tbl(i).cle_id;
14565         l_klev_rec.oec                   := l_oec;
14566         l_klev_rec.capital_amount        := l_cap_amount;
14567         l_klev_rec.residual_value        := l_residual_value;
14568 
14569 
14570         okl_contract_pub.update_contract_line
14571         (p_api_version   => p_api_version,
14572          p_init_msg_list => p_init_msg_list,
14573          x_return_status => x_return_status,
14574          x_msg_count     => x_msg_count,
14575          x_msg_data      => x_msg_data,
14576          p_clev_rec      => l_clev_rec,
14577          p_klev_rec      => l_klev_rec,
14578          x_clev_rec      => lx_clev_rec,
14579          x_klev_rec      => lx_klev_rec
14580          );
14581 
14582         IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
14583            RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
14584         ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
14585            RAISE OKL_API.G_EXCEPTION_ERROR;
14586         END IF;
14587     END LOOP;
14588     END IF;
14589 
14590     OKL_API.END_ACTIVITY (x_msg_count,x_msg_data );
14591     EXCEPTION
14592     WHEN OKL_API.G_EXCEPTION_ERROR THEN
14593     x_return_status := OKL_API.HANDLE_EXCEPTIONS(
14594                                l_api_name,
14595                                G_PKG_NAME,
14596                                'OKL_API.G_RET_STS_ERROR',
14597                                x_msg_count,
14598                                x_msg_data,
14599                                '_PVT');
14600     WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
14601     x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
14602                               l_api_name,
14603                               G_PKG_NAME,
14604                               'OKL_API.G_RET_STS_UNEXP_ERROR',
14605                               x_msg_count,
14606                               x_msg_data,
14607                               '_PVT');
14608     WHEN OTHERS THEN
14609     x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
14610                               l_api_name,
14611                               G_PKG_NAME,
14612                               'OTHERS',
14613                               x_msg_count,
14614                               x_msg_data,
14615                               '_PVT');
14616 END recalculate_costs;
14617 --------------------------------------------------------------------------------
14618 --Start of Comments
14619 --Procedure Name : Split_Asset
14620 --Description    : Selects the split Asset transaction against the line
14621 --                 and splits the Asset in OKL and FA
14622 --History        :
14623 --                 03-Nov-2001  ashish.singh Created
14624 --                 12-Aug-2005  smadhava Fix for Bug# 4508050
14625 --End of Comments
14626 --------------------------------------------------------------------------------
14627 PROCEDURE Split_Fixed_Asset(p_api_version   IN  NUMBER,
14628                             p_init_msg_list IN  VARCHAR2,
14629                             x_return_status OUT NOCOPY VARCHAR2,
14630                             x_msg_count     OUT NOCOPY NUMBER,
14631                             x_msg_data      OUT NOCOPY VARCHAR2,
14632                             p_txdv_tbl      IN  txdv_tbl_type,
14633                             p_txlv_rec      IN  txlv_rec_type,
14634                             x_cle_tbl       OUT NOCOPY cle_tbl_type,
14635                             --Bug# 6344223
14636                             p_source_call   IN VARCHAR2 DEFAULT 'UI') IS
14637 
14638 l_return_status        VARCHAR2(1)  DEFAULT OKL_API.G_RET_STS_SUCCESS;
14639 l_api_name             CONSTANT VARCHAR2(30) := 'SPLIT_FIXED_ASSET';
14640 l_api_version          CONSTANT NUMBER := 1.0;
14641 
14642 CURSOR k_line_curs(p_fa_line_id IN NUMBER) IS
14643 SELECT cle_id,
14644        dnz_chr_id,
14645        --Bug# 6373605 start
14646        sts_code
14647        --Bug# 6373605 end
14648 FROM   okc_k_lines_b
14649 WHERE  id = p_fa_line_id;
14650 
14651 l_source_cle_id NUMBER;
14652 l_chr_id        NUMBER;
14653 i               NUMBER;
14654 --Bug# 6373605 start
14655 l_sts_code      okc_k_lines_b.STS_CODE%TYPE;
14656 --Bug# 6373605 end
14657 
14658 l_txdv_rec      txdv_rec_type;
14659 l_txlv_rec      txlv_rec_type;
14660 
14661 l_split_cle_id  NUMBER;
14662 l_split_cle_id_orig  NUMBER; -- 7626121
14663 l_cle_tbl       cle_tbl_type;
14664 l_ast_line_rec  ast_line_rec_type;
14665 
14666 CURSOR c_cim(p_id IN NUMBER) IS
14667 SELECT id,
14668        cle_id
14669 FROM   okc_k_items cim
14670 WHERE  EXISTS
14671 (SELECT '1'
14672 FROM    okl_txd_assets_b txd
14673 WHERE   txd.target_kle_id = cim.cle_id
14674 AND     txd.id = p_id
14675 );
14676 
14677 l_asset_hdr_rec FA_API_TYPES.asset_hdr_rec_type;
14678 l_cim_id        NUMBER;
14679 l_cimv_rec      cimv_rec_type;
14680 l_cimv_rec_out  cimv_rec_type;
14681 l_cim_cle_id    NUMBER;
14682 
14683 CURSOR ib_item_cur (p_fa_line_id IN NUMBER) IS
14684 SELECT cim.object1_id1,
14685        cim.object1_id2,
14686        cim.id,
14687        cim.cle_id,
14688        cim.dnz_chr_id
14689 FROM   OKC_K_ITEMS         cim,
14690        OKC_K_LINES_B       inst_item,
14691        OKC_LINE_STYLES_B   inst_item_lse,
14692        OKC_K_LINES_B       f_frm2,
14693        OKC_LINE_STYLES_B   f_frm2_lse,
14694        OKC_K_LINES_B       fa
14695 WHERE cim.cle_id = inst_item.id
14696 AND   cim.dnz_chr_id = inst_item.dnz_chr_id
14697 AND   inst_item.cle_id = f_frm2.id
14698 AND   inst_item.lse_id = inst_item_lse.id
14699 AND   inst_item_lse.lty_code = 'INST_ITEM'
14700 AND   f_frm2.cle_id = fa.cle_id
14701 AND   f_frm2.lse_id = f_frm2_lse.id
14702 AND   f_frm2_lse.lty_code = 'FREE_FORM2'
14703 AND   fa.id = p_fa_line_id;
14704 
14705 l_csi_id1               okc_k_items.object1_id1%TYPE;
14706 l_csi_id2               okc_k_items.object1_id2%TYPE;
14707 l_csi_cim_id            okc_k_items.id%TYPE;
14708 l_csi_cle_id            okc_k_items.cle_id%TYPE;
14709 l_csi_chr_id            okc_k_items.dnz_chr_id%TYPE;
14710 l_csi_number_of_items   okc_k_items.number_of_items%TYPE;
14711 
14712 l_csi_instance_id NUMBER;
14713 
14714 l_trxv_rec        trxv_rec_type;
14715 lx_trxv_rec       trxv_rec_type;
14716 
14717 l_txdv_tbl        txdv_tbl_type;
14718 
14719 --cursor to find if asset added in current period
14720 CURSOR check_period_of_addition(p_asset_id       IN NUMBER,
14721                                 p_book_type_code IN VARCHAR2) IS
14722 SELECT 'Y' -- 'Y' if the current period of the asset is period of addition.
14723 FROM dual
14724 WHERE NOT EXISTS
14725      (SELECT 'x'
14726       FROM   fa_deprn_summary
14727       WHERE  asset_id = p_asset_id
14728       AND    book_type_code = p_book_type_code
14729       AND    deprn_amount <> 0
14730       AND    deprn_source_code = 'DEPRN'
14731      );
14732 l_check_period_of_addition    VARCHAR2(1) DEFAULT NULL;
14733 
14734 --cursor to get all books  for parent asset
14735 CURSOR all_books_curs(p_asset_id IN NUMBER) IS
14736 SELECT
14737     id1,
14738     id2,
14739     name,
14740     description,
14741     book_type_code,
14742     book_class,
14743     asset_id,
14744     asset_number,
14745     serial_number,
14746     salvage_value,
14747     percent_salvage_value,
14748     life_in_months,
14749     acquisition_date,
14750     original_cost,
14751     cost,
14752     adjusted_cost,
14753     tag_number,
14754     current_units,
14755     reval_ceiling,
14756     new_used,
14757     manufacturer_name,
14758     model_number,
14759     asset_type,
14760     depreciation_category,
14761     deprn_start_date,
14762     deprn_method_code,
14763     rate_adjustment_factor,
14764     basic_rate,
14765     adjusted_rate,
14766     start_date_active,
14767     end_date_active,
14768     status,
14769     primary_uom_code,
14770     recoverable_cost,
14771     org_id,
14772     set_of_books_id
14773 FROM  OKX_AST_BKS_V
14774 WHERE TRUNC(NVL(start_date_active,SYSDATE)) <= TRUNC(SYSDATE)
14775 AND   TRUNC(NVL(end_date_active,SYSDATE+1)) >TRUNC(SYSDATE)
14776 AND   book_class IN ('CORPORATE','TAX')
14777 AND   asset_id = p_asset_id
14778 ORDER BY book_class,asset_id;
14779 
14780 l_all_books_rec  all_books_curs%ROWTYPE;
14781 
14782 --Bug #2723498 :11.5.9 split asset by serial numbers
14783 CURSOR get_dup_inst_csr (p_asd_id IN NUMBER) IS
14784 SELECT f_frm2.id           instance_id,
14785        inst_item.id        ib_line_id
14786 FROM   OKC_K_ITEMS         cim,
14787        OKC_K_LINES_B       inst_item,
14788        OKC_LINE_STYLES_B   inst_item_lse,
14789        OKC_K_LINES_B       f_frm2,
14790        OKC_LINE_STYLES_B   f_frm2_lse,
14791        OKC_K_LINES_B       fa,
14792        OKL_TXD_ASSETS_B    asd
14793 WHERE  cim.cle_id             = inst_item.id
14794 AND    cim.dnz_chr_id         = inst_item.dnz_chr_id
14795 AND    inst_item.cle_id       = f_frm2.id
14796 AND    inst_item.lse_id       = inst_item_lse.id
14797 AND    inst_item_lse.lty_code = 'INST_ITEM'
14798 AND    f_frm2.cle_id          = fa.cle_id
14799 AND    f_frm2.lse_id          = f_frm2_lse.id
14800 AND    f_frm2_lse.lty_code    = 'FREE_FORM2'
14801 AND    fa.id                  = asd.target_kle_id
14802 AND    asd.id                 = p_asd_id
14803 AND    EXISTS (SELECT   NULL
14804                FROM     OKC_K_ITEMS         cim_p,
14805                         OKC_K_LINES_B       inst_item_p,
14806                         OKC_LINE_STYLES_B   inst_item_lse_p,
14807                         OKC_K_LINES_B       f_frm2_p,
14808                         OKC_LINE_STYLES_B   f_frm2_lse_p,
14809                         OKC_K_LINES_B       fa_p,
14810                         OKL_TXL_ASSETS_B    tal
14811                  WHERE  cim_p.object1_id1         = cim.object1_id1
14812                  AND    cim_p.object1_id2         = cim.object1_id2
14813                  AND    cim_p.jtot_object1_code   = cim.jtot_object1_code
14814                  AND    cim_p.dnz_chr_id          = cim.dnz_chr_id
14815                  AND    cim_p.cle_id              = inst_item_p.id
14816                  AND    cim_p.dnz_chr_id          = inst_item_p.dnz_chr_id
14817                  AND    inst_item_p.cle_id        = f_frm2_p.id
14818                  AND    inst_item_p.lse_id        = inst_item_lse_p.id
14819                  AND    inst_item_lse_p.lty_code  = 'INST_ITEM'
14820                  AND    f_frm2_p.cle_id           = fa_p.cle_id
14821                  AND    f_frm2_p.lse_id           = f_frm2_lse_p.id
14822                  AND    f_frm2_lse_p.lty_code     = 'FREE_FORM2'
14823                  AND    fa_p.id                     = tal.kle_id
14824                  AND    tal.id                    = asd.tal_id
14825                  );
14826 
14827 l_dup_inst_cle_id   OKC_K_LINES_B.ID%TYPE;
14828 l_dup_ib_cle_id   OKC_K_LINES_B.ID%TYPE;
14829 
14830 --Bug# : cursor to check if split is called by asset level termination process
14831 CURSOR asset_trmn_csr(pcleid IN NUMBER) IS
14832 SELECT '!'
14833 FROM   DUAL
14834 WHERE  EXISTS
14835   (SELECT 1
14836   FROM    okl_trx_quotes_b h,
14837           okl_txl_quote_lines_b l,
14838           okl_trx_contracts t,
14839           okl_k_headers k
14840   WHERE   h.id = l.qte_id
14841   AND     h.id = t.qte_id
14842   AND     h.khr_id = k.id
14843   AND     ((  k.deal_type LIKE 'LEASE%' AND h.qtp_code IN
14844            ('TER_PURCHASE','TER_RECOURSE','TER_ROLL_PURCHASE','TER_MAN_PURCHASE'))
14845            OR
14846            (k.deal_type LIKE 'LOAN%' )
14847           )
14848   AND     l.qlt_code = 'AMCFIA'
14849   AND     l.quote_quantity < l.asset_quantity
14850   AND     l.kle_id = pcleid
14851   AND     t.tcn_type = 'ALT'
14852   --rkuttiya added for 12.1.1 Multi GAAP
14853   AND     t.representation_type = 'PRIMARY'
14854   --
14855   --Bug# 6043327  : R12B SLA impact
14856   --AND     t.tsu_code = 'WORKING'
14857   AND     t.tmt_status_code = 'WORKING'
14858   );
14859 
14860 l_asset_trmn_exists VARCHAR2(1) DEFAULT '?';
14861 
14862 l_loan_yn     VARCHAR2(1) DEFAULT 'N';
14863 l_fa_exists   VARCHAR2(1) DEFAULT 'N';
14864 l_row_not_found BOOLEAN DEFAULT FALSE;
14865 
14866 --------------------------------------
14867 --Bug# : 11.5.10 : Securitization impact
14868 -------------------------------------
14869 l_is_asset_securitized VARCHAR2(1);
14870 l_inv_agmt_chr_id_tbl okl_securitization_pvt.inv_agmt_chr_id_tbl_type;
14871 l_trx_reason_asset_split VARCHAR2(20) := okl_securitization_pvt.g_trx_reason_Asset_split;
14872 --------------------------------------
14873 --Bug# : 11.5.10 : Securitization impact
14874 -------------------------------------
14875 
14876   --Bug# 3156924 : cursor to get transaction date and transaction number from transaction
14877   CURSOR l_trx_csr (ptrxid IN NUMBER) IS
14878   SELECT DATE_TRANS_OCCURRED,
14879          TRANS_NUMBER,
14880          --Bug# 6373605 start
14881          TRY_ID
14882          --Bug# 6373605 end
14883   FROM   OKL_TRX_ASSETS
14884   WHERE  id = ptrxid;
14885 
14886   l_trx_rec l_trx_csr%ROWTYPE;
14887 
14888   --Bg# 4028371
14889   l_fa_retire_date  date;
14890   l_fa_adj_date     date;
14891   l_fa_add_date     date;
14892 
14893   l_talv_date_rec            okl_tal_pvt.talv_rec_type;
14894   lx_talv_date_rec           okl_tal_pvt.talv_rec_type;
14895   --Bug# 4028371
14896 
14897   --Bug# 3502142
14898   l_round_split_comp_amt varchar2(30);
14899 
14900   --Bug# 4631549
14901   --cursor to fetch re-lease contract flag
14902   cursor l_chrb_csr (p_chr_id in number) is
14903   select chrb.orig_system_source_code
14904   from   okc_k_headers_b chrb
14905   where  chrb.id = p_chr_id;
14906 
14907   l_chrb_rec l_chrb_csr%ROWTYPE;
14908 
14909   --cursor to fetch expected asset cost
14910   cursor l_exp_cost_csr(p_cle_id in number) is
14911   select kle.expected_asset_cost
14912   from   okl_k_lines kle
14913   where  kle.id = p_cle_id;
14914 
14915   l_exp_cost_rec l_exp_cost_csr%ROWTYPE;
14916 
14917   l_clev_exp_cost_rec  okl_okc_migration_pvt.clev_rec_type;
14918   lx_clev_exp_cost_rec okl_okc_migration_pvt.clev_rec_type;
14919   l_klev_exp_cost_rec  okl_contract_pub.klev_rec_type;
14920   lx_klev_exp_cost_rec  okl_contract_pub.klev_rec_type;
14921 
14922   --Bug# 6373605 start
14923   l_sla_asset_chr_id NUMBER;
14924   --Bug# 6373605 end
14925 
14926 BEGIN
14927     x_return_status := OKL_API.G_RET_STS_SUCCESS;
14928     -- Call start_activity to create savepoint, check compatibility
14929     -- and initialize message list
14930     x_return_status := OKL_API.START_ACTIVITY (
14931                                l_api_name
14932                                ,p_init_msg_list
14933                                ,'_PVT'
14934                                ,x_return_status);
14935     -- Check if activity started successfully
14936     IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
14937        RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
14938     ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
14939        RAISE OKL_API.G_EXCEPTION_ERROR;
14940     END IF;
14941 
14942     l_txdv_tbl := p_txdv_tbl;
14943 
14944     --Bug# 3156924 : Get the transaction details
14945     OPEN l_trx_csr(ptrxid => p_txlv_rec.tas_id);
14946     FETCH l_trx_csr INTO l_trx_rec;
14947     IF l_trx_csr%NOTFOUND THEN
14948         NULL;
14949     END IF;
14950     CLOSE l_trx_csr;
14951     --Bug# 3156924 end
14952 
14953     --2. get financial asset line id and chr_id
14954     OPEN k_line_curs(p_fa_line_id => p_txlv_rec.kle_id);
14955     FETCH k_line_curs INTO l_source_cle_id, l_chr_id,
14956                            --Bug# 6373605 start
14957                            l_sts_code;
14958                            --Bug# 6373605 end
14959     IF k_line_curs%NOTFOUND THEN
14960        --dbms_output.put_line('unable to find financial asset line for fixed asset line!!!');
14961        --handle error appropraitely
14962        OKL_API.set_message(p_app_name     => G_APP_NAME,
14963                            p_msg_name     => G_NO_DATA_FOUND,
14964                            p_token1       => 'COL_NAME',
14965                            p_token1_value => 'Financial Asset Line');
14966         RAISE OKL_API.G_EXCEPTION_ERROR;
14967     END IF;
14968     CLOSE k_line_curs;
14969 
14970     --Bug# 2982927 : Resetting okc inv organization id from k header
14971     okl_context.set_okc_org_context(p_chr_id => l_chr_id);
14972     --Bug# 2982927
14973 
14974     --Bug# 3222804 : Serial number control to be based on leasing inv org setup
14975     validate_srl_num_control(
14976                    p_api_version               => p_api_version,
14977                    p_init_msg_list             => p_init_msg_list,
14978                    x_return_status             => x_return_status,
14979                    x_msg_count                 => x_msg_count,
14980                    x_msg_data                  => x_msg_data,
14981                    p_cle_id                    => l_source_cle_id,
14982                    p_split_into_individuals_yn => p_txlv_rec.split_into_singles_flag,
14983                    p_split_into_units          => p_txlv_rec.split_into_units,
14984                    p_tal_id                    => p_txlv_rec.id);
14985 
14986     IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
14987        RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
14988     ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
14989        RAISE OKL_API.G_EXCEPTION_ERROR;
14990     END IF;
14991     --Bug# 3222804 : Serial number control to be based on leasing inv org setup
14992 
14993     --1. get values for the parent asset
14994     l_fa_exists := 'N';
14995     l_ast_line_rec := get_ast_line(l_source_cle_id,l_row_not_found);
14996     --dbms_output.put_line('After fetching asset line '||l_ast_line_rec.description);
14997     IF (l_row_not_found) THEN
14998        --Bug #2798006 : call create split transaction for Loans
14999        l_loan_yn := 'N';
15000        l_loan_yn := Check_If_Loan(P_Cle_Id        => l_source_cle_id,
15001                                   x_return_status => x_return_status);
15002 
15003        IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
15004            RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
15005        ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
15006            RAISE OKL_API.G_EXCEPTION_ERROR;
15007        END IF;
15008 
15009        IF l_loan_yn = 'N' THEN
15010            OKL_API.set_message(p_app_name     => G_APP_NAME,
15011                                p_msg_name     => G_SPLIT_ASSET_NOT_FOUND);
15012            RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
15013        ELSIF l_loan_yn = 'Y' THEN
15014            l_fa_exists := 'N';
15015        END IF;
15016     ELSE
15017        l_fa_exists := 'Y';
15018     END IF;
15019     --Bug# 2798006 end.
15020 --------------------------------------------------------------------------------
15021         i := 1;
15022         LOOP
15023         ------------------------------------------------------------------------
15024         -- Normal split asset parent adjustments
15025         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
15026            --this record needs asset adjustment only
15027            --no line creation is required
15028            --1.Call local procedure to adjust quantities and amounts
15029            l_txdv_rec := l_txdv_tbl(i);
15030            l_txlv_rec := p_txlv_rec;
15031            --dbms_output.put_line('before adjusting split lines');
15032            Adjust_Split_Lines(
15033                 p_api_version    => p_api_version,
15034                 p_init_msg_list  => p_init_msg_list,
15035                 x_return_status  => x_return_status,
15036                 x_msg_count      => x_msg_count,
15037                 x_msg_data       => x_msg_data,
15038                 p_cle_id         => l_source_cle_id,
15039                 p_parent_line_id => l_source_cle_id,
15040                 p_txdv_rec       => l_txdv_rec,
15041                 p_txlv_rec       => l_txlv_rec);
15042             --dbms_output.put_line('after adjusting split lines'||x_return_status);
15043             IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
15044                 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
15045             ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
15046                 RAISE OKL_API.G_EXCEPTION_ERROR;
15047             END IF;
15048 
15049            --2. Call Asset Retire Api -
15050            -- to confirm with Mukul whether retirement or
15051            -- adjustment will
15052 
15053           IF l_fa_exists = 'Y' THEN
15054                --to get all books for this asset
15055               OPEN all_books_curs(p_asset_id => l_ast_line_rec.asset_id);
15056               LOOP
15057                   FETCH all_books_curs INTO l_all_books_rec;
15058                   EXIT WHEN all_books_curs%NOTFOUND;
15059                   --reinitialize l_Ast_line_rec
15060                   l_ast_line_rec.START_DATE_ACTIVE         := l_all_books_rec.start_date_active;
15061                   l_ast_line_rec.END_DATE_ACTIVE           := l_all_books_rec.end_date_active;
15062                   l_ast_line_rec.ASSET_ID                  := l_all_books_rec.asset_id;
15063                   l_ast_line_rec.QUANTITY                  := l_all_books_rec.current_units;
15064                   l_ast_line_rec.ASSET_NUMBER              := l_all_books_rec.asset_number;
15065                   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
15066                   l_ast_line_rec.LIFE_IN_MONTHS            := l_all_books_rec.life_in_months;
15067                   l_ast_line_rec.ORIGINAL_COST             := l_all_books_rec.original_cost;
15068                   l_ast_line_rec.COST                      := l_all_books_rec.cost;
15069                   l_ast_line_rec.ADJUSTED_COST             := l_all_books_rec.adjusted_cost;
15070                   l_ast_line_rec.TAG_NUMBER                := l_all_books_rec.tag_number;
15071                   l_ast_line_rec.CURRENT_UNITS             := l_all_books_rec.current_units ;
15072                   l_ast_line_rec.SERIAL_NUMBER             := l_all_books_rec.serial_number;
15073                   l_ast_line_rec.REVAL_CEILING             := l_all_books_rec.reval_ceiling;
15074                   l_ast_line_rec.NEW_USED                  := l_all_books_rec.new_used;
15075                   l_ast_line_rec.IN_SERVICE_DATE           := l_all_books_rec.acquisition_date;
15076                   l_ast_line_rec.MANUFACTURER_NAME         := l_all_books_rec.manufacturer_name;
15077                   l_ast_line_rec.MODEL_NUMBER              := l_all_books_rec.model_number;
15078                   l_ast_line_rec.ASSET_TYPE                := l_all_books_rec.asset_type;
15079                   l_ast_line_rec.SALVAGE_VALUE             := l_all_books_rec.salvage_value;
15080                   l_ast_line_rec.PERCENT_SALVAGE_VALUE     := l_all_books_rec.percent_salvage_value;
15081                   l_ast_line_rec.DEPRECIATION_CATEGORY     := l_all_books_rec.depreciation_category;
15082                   l_ast_line_rec.DEPRN_START_DATE          := l_all_books_rec.deprn_start_date;
15083                   l_ast_line_rec.DEPRN_METHOD_CODE         := l_all_books_rec.deprn_method_code;
15084                   l_ast_line_rec.RATE_ADJUSTMENT_FACTOR    := l_all_books_rec.rate_adjustment_factor;
15085                   l_ast_line_rec.BASIC_RATE                := l_all_books_rec.basic_rate;
15086                   l_ast_line_rec.ADJUSTED_RATE             := l_all_books_rec.adjusted_rate;
15087                   l_ast_line_rec.RECOVERABLE_COST          := l_all_books_rec.recoverable_cost;
15088                   l_ast_line_rec.ORG_ID                    := l_all_books_rec.org_id;
15089                   l_ast_line_rec.SET_OF_BOOKS_ID           := l_all_books_rec.set_of_books_id;
15090 
15091                    --check period of addition
15092                   l_check_period_of_Addition := 'N';
15093                   OPEN check_period_of_addition(p_asset_id       => l_ast_line_rec.asset_id,
15094                                                 p_book_type_code => l_ast_line_rec.corporate_book);
15095                       FETCH check_period_of_addition INTO l_check_period_of_Addition;
15096                       IF check_period_of_addition%NOTFOUND THEN
15097                           NULL;
15098                       END IF;
15099                   CLOSE check_period_of_addition;
15100 
15101                   /* Bug#4508050 - smadhava - Modified - Start*/
15102                   -- Commented code to avoid retiring of original asset after splitting
15103                   /*
15104                    IF NVL(l_check_period_of_addition,'N') = 'N' THEN
15105                    --dbms_output.put_line('before retiring fA'||x_return_status);
15106                    --check if call is being made from asset level termination process
15107                        l_asset_trmn_exists := '?';
15108                        OPEN asset_trmn_csr(pcleid => l_source_cle_id);
15109                        FETCH asset_trmn_csr INTO l_asset_trmn_exists;
15110                        IF asset_trmn_csr%NOTFOUND THEN
15111                            NULL;
15112                        END IF;
15113                        CLOSE asset_trmn_csr;
15114 
15115                        IF l_asset_trmn_exists = '!' THEN --exists
15116                           --call special procedure for asset level termination : suspen retirement
15117                           NULL;
15118                        ELSIF l_asset_trmn_exists = '?' THEN --does not exist
15119                            --Bug# : 3156924 : cost retirement for all books
15120                            --If (l_all_books_rec.book_class = 'CORPORATE') Then
15121                                FIXED_ASSET_RETIRE(p_api_version    =>  p_api_version,
15122                                                   p_init_msg_list =>  p_init_msg_list,
15123                                                   x_return_status =>  x_return_status,
15124                                                   x_msg_count     =>  x_msg_count,
15125                                                   x_msg_data      =>  x_msg_data,
15126                                                   p_ast_line_rec  =>  l_ast_line_rec,
15127                                                   p_txlv_rec      =>  l_txlv_rec,
15128                                                   p_txdv_rec      =>  l_txdv_rec,
15129                                                   --Bug# 3156924
15130                                                   p_trx_date       => l_trx_rec.date_trans_occurred,
15131                                                   p_trx_number   => l_trx_rec.trans_number,
15132                                                   --Bug# 4028371
15133                                                   x_fa_trx_date  => l_fa_retire_date);
15134 
15135                                --dbms_output.put_line('after retiring fA'||x_return_status);
15136                                IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
15137                                    RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
15138                                ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
15139                                    RAISE OKL_API.G_EXCEPTION_ERROR;
15140                                END IF;
15141                         */
15142                        /* Bug#4508050 - smadhava - Modified - End*/
15143                             --Bug# 3156924
15144                            /*
15145                            ElsIf (l_all_books_rec.book_class = 'TAX') Then
15146                                -- since FA does not allow unit retirements on tax books
15147                                -- we have to restore to doing adjustments here for tax books
15148                                FIXED_ASSET_ADJUST(p_api_version   => p_api_version,
15149                                                   p_init_msg_list  => p_init_msg_list,
15150                                                   x_return_status  => x_return_status,
15151                                                   x_msg_count      => x_msg_count,
15152                                                   x_msg_data       => x_msg_data,
15153                                                   p_ast_line_rec   => l_ast_line_rec,
15154                                                   p_txlv_rec       => l_txlv_rec,
15155                                                   p_txdv_rec       => l_txdv_rec,
15156                                                   --3156924
15157                                                   p_trx_date       => l_trx_rec.date_trans_occurred,
15158                                                   p_trx_number   => l_trx_rec.trans_number,
15159                                                   --Bug# 4028371
15160                                                   x_fa_trx_date    => l_fa_adj_date);
15161 
15162                                --dbms_output.put_line('after adjusting fA'||x_return_status);
15163                                IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
15164                                    RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
15165                                ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
15166                                    RAISE OKL_API.G_EXCEPTION_ERROR;
15167                                END IF;
15168                            End If;
15169                            */
15170                   /* Bug#4508050 - smadhava - Modified - Start*/
15171                   /*
15172                        END IF; --asset_trmn_exists
15173                    ELSIF NVL(l_check_period_of_addition,'N') = 'Y' THEN
15174                   */
15175                   /* Bug#4508050 - smadhava - Modified - End*/
15176                        --dbms_output.put_line('before adjusting fA'||x_return_status);
15177                        --dbms_output.put_line('before adjusting fA units'||to_char(l_ast_line_rec.current_units));
15178                        FIXED_ASSET_ADJUST(p_api_version   => p_api_version,
15179                                           p_init_msg_list  => p_init_msg_list,
15180                                           x_return_status  => x_return_status,
15181                                           x_msg_count      => x_msg_count,
15182                                           x_msg_data       => x_msg_data,
15183                                           p_ast_line_rec   => l_ast_line_rec,
15184                                           p_txlv_rec       => l_txlv_rec,
15185                                           p_txdv_rec       => l_txdv_rec,
15186                                           --3156924
15187                                           p_trx_date       => l_trx_rec.date_trans_occurred,
15188                                           p_trx_number   => l_trx_rec.trans_number,
15189                     --Bug# 6373605--SLA populate source
15190                     p_sla_source_header_id    => l_txlv_rec.tas_id,
15191                     p_sla_source_header_table => 'OKL_TRX_ASSETS',
15192                     p_sla_source_try_id       => l_trx_rec.try_id,
15193                     p_sla_source_line_id      => l_txlv_rec.id,
15194                     p_sla_source_line_table   => 'OKL_TXL_ASSETS_B',
15195                     p_sla_source_chr_id       => l_chr_id,
15196                     p_sla_source_kle_id       => l_source_cle_id,
15197                     --Bug# 6373605--SLA populate sources
15198                                           --Bug# 4028371
15199                                           x_fa_trx_date    => l_fa_adj_date);
15200 
15201                        --dbms_output.put_line('after adjusting fA'||x_return_status);
15202                        IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
15203                            RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
15204                        ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
15205                            RAISE OKL_API.G_EXCEPTION_ERROR;
15206                        END IF;
15207                    /* Bug#4508050 - smadhava - Modified - Start*/
15208                    /*
15209                    END IF;
15210                    */
15211                    /* Bug#4508050 - smadhava - Modified - End*/
15212                END LOOP;
15213                CLOSE all_books_curs;
15214                --adjustments done for all the books
15215            END IF; --l_fa_exists
15216            --3. Put record onto the lines table
15217            l_cle_tbl(i).cle_id := l_source_cle_id;
15218 
15219        ELSIF l_txdv_tbl(i).target_kle_id IS NULL THEN
15220 
15221            --1.Call to Copy Lines api to create split line
15222            OKL_COPY_CONTRACT_PUB.COPY_CONTRACT_LINES(
15223                 p_api_version       => p_api_version,
15224                 p_init_msg_list     => p_init_msg_list,
15225                 x_return_status     => x_return_status,
15226                 x_msg_count         => x_msg_count,
15227                 x_msg_data          => x_msg_data,
15228                 p_from_cle_id       => l_source_cle_id,
15229                 p_to_cle_id         => NULL,
15230                 p_to_chr_id         => l_chr_id,
15231                 p_to_template_yn        => 'N',
15232                 p_copy_reference        =>  'COPY',
15233                 p_copy_line_party_yn => 'Y',
15234                 p_renew_ref_yn       => 'N',
15235                 x_cle_id                     => l_split_cle_id);
15236 
15237             IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
15238                 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
15239             ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
15240                 RAISE OKL_API.G_EXCEPTION_ERROR;
15241             END IF;
15242 
15243             --Bug# 4631549 : If release contract copy expected_asset_cost from source line to target line
15244             Open l_chrb_csr (p_chr_id => l_chr_id);
15245             fetch l_chrb_csr into l_chrb_rec;
15246             close l_chrb_csr;
15247 
15248             If nvl(l_chrb_rec.orig_system_source_code,OKL_API.G_MISS_CHAR) = 'OKL_RELEASE' then
15249                 open l_exp_cost_csr(p_cle_id => l_source_cle_id);
15250                 fetch l_exp_cost_csr into l_exp_cost_rec;
15251                 close l_exp_cost_csr;
15252 
15253                 l_clev_exp_cost_rec.id := l_split_cle_id;
15254                 l_klev_exp_cost_rec.id := l_split_cle_id;
15255                 l_klev_exp_cost_rec.expected_asset_cost := l_exp_cost_rec.expected_asset_cost;
15256 
15257                 OKL_CONTRACT_PUB.update_contract_line(
15258                   p_api_version         => p_api_version,
15259                   p_init_msg_list       => p_init_msg_list,
15260                   x_return_status       => x_return_status,
15261                   x_msg_count           => x_msg_count,
15262                   x_msg_data            => x_msg_data,
15263                   p_clev_rec            => l_clev_exp_cost_rec,
15264                   p_klev_rec            => l_klev_exp_cost_rec,
15265                   x_clev_rec            => lx_clev_exp_cost_rec,
15266                   x_klev_rec            => lx_klev_exp_cost_rec
15267                   );
15268 
15269                  IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
15270                      RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
15271                  ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) then
15272                      RAISE OKL_API.G_EXCEPTION_ERROR;
15273                  END IF;
15274              End If;
15275 
15276            --2. Call local procedure to adjust quantities and amounts
15277            --3. Call local procedure to null out line source references on copied lines
15278            l_txdv_rec := l_txdv_tbl(i);
15279            l_txlv_rec := p_txlv_rec;
15280 
15281            --Bug# 3502142
15282            l_round_split_comp_amt := 'N';
15283            IF (i = l_txdv_tbl.LAST) AND
15284               (NVL(l_txdv_tbl(i).split_percent,0) > 0 OR l_txdv_tbl(i).split_percent <> OKL_API.G_MISS_NUM) THEN
15285              l_round_split_comp_amt := 'Y';
15286            END IF;
15287 
15288            Adjust_Split_Lines(
15289                 p_api_version    => p_api_version,
15290                 p_init_msg_list  => p_init_msg_list,
15291                 x_return_status  => x_return_status,
15292                 x_msg_count      => x_msg_count,
15293                 x_msg_data       => x_msg_data,
15294                 p_cle_id         => l_split_cle_id,
15295                 p_parent_line_id => l_source_cle_id,
15296                 p_txdv_rec       => l_txdv_rec,
15297                 p_txlv_rec       => l_txlv_rec,
15298                 p_round_split_comp_amt => l_round_split_comp_amt);
15299 
15300             IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
15301                 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
15302             ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
15303                 RAISE OKL_API.G_EXCEPTION_ERROR;
15304             END IF;
15305             IF l_fa_exists = 'Y' THEN
15306                 --to get all books for this asset
15307                 OPEN all_books_curs(p_asset_id => l_ast_line_rec.asset_id);
15308                 LOOP
15309                     FETCH all_books_curs INTO l_all_books_rec;
15310                     EXIT WHEN all_books_curs%NOTFOUND;
15311                     --reinitialize l_Ast_line_rec
15312                     l_ast_line_rec.START_DATE_ACTIVE         := l_all_books_rec.start_date_active;
15313                     l_ast_line_rec.END_DATE_ACTIVE           := l_all_books_rec.end_date_active;
15314                     l_ast_line_rec.ASSET_ID                  := l_all_books_rec.asset_id;
15315                     l_ast_line_rec.QUANTITY                  := l_all_books_rec.current_units;
15316                     l_ast_line_rec.ASSET_NUMBER              := l_all_books_rec.asset_number;
15317                     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
15318                     l_ast_line_rec.LIFE_IN_MONTHS            := l_all_books_rec.life_in_months;
15319                     l_ast_line_rec.ORIGINAL_COST             := l_all_books_rec.original_cost;
15320                     l_ast_line_rec.COST                      := l_all_books_rec.cost;
15321                     l_ast_line_rec.ADJUSTED_COST             := l_all_books_rec.adjusted_cost;
15322                     l_ast_line_rec.TAG_NUMBER                := l_all_books_rec.tag_number;
15323                     l_ast_line_rec.CURRENT_UNITS             := l_all_books_rec.current_units ;
15324                     l_ast_line_rec.SERIAL_NUMBER             := l_all_books_rec.serial_number;
15325                     l_ast_line_rec.REVAL_CEILING             := l_all_books_rec.reval_ceiling;
15326                     l_ast_line_rec.NEW_USED                  := l_all_books_rec.new_used;
15327                     l_ast_line_rec.IN_SERVICE_DATE           := l_all_books_rec.acquisition_date;
15328                     l_ast_line_rec.MANUFACTURER_NAME         := l_all_books_rec.manufacturer_name;
15329                     l_ast_line_rec.MODEL_NUMBER              := l_all_books_rec.model_number;
15330                     l_ast_line_rec.ASSET_TYPE                := l_all_books_rec.asset_type;
15331                     l_ast_line_rec.SALVAGE_VALUE             := l_all_books_rec.salvage_value;
15332                     l_ast_line_rec.PERCENT_SALVAGE_VALUE     := l_all_books_rec.percent_salvage_value;
15333                     l_ast_line_rec.DEPRECIATION_CATEGORY     := l_all_books_rec.depreciation_category;
15334                     l_ast_line_rec.DEPRN_START_DATE          := l_all_books_rec.deprn_start_date;
15335                     l_ast_line_rec.DEPRN_METHOD_CODE         := l_all_books_rec.deprn_method_code;
15336                     l_ast_line_rec.RATE_ADJUSTMENT_FACTOR    := l_all_books_rec.rate_adjustment_factor;
15337                     l_ast_line_rec.BASIC_RATE                := l_all_books_rec.basic_rate;
15338                     l_ast_line_rec.ADJUSTED_RATE             := l_all_books_rec.adjusted_rate;
15339                     l_ast_line_rec.RECOVERABLE_COST          := l_all_books_rec.recoverable_cost;
15340                     l_ast_line_rec.ORG_ID                    := l_all_books_rec.org_id;
15341                     l_ast_line_rec.SET_OF_BOOKS_ID           := l_all_books_rec.set_of_books_id;
15342 
15343                     --Bug# 6373605 start
15344                     If nvl(l_sts_code,OKL_API.G_MISS_CHAR) in
15345 ('TERMINATED','EXPIRED') Then
15346                         l_sla_asset_chr_id := NULL;
15347                     Else
15348                         l_sla_asset_chr_id := l_chr_id;
15349                     End If;
15350                     --Bug# 6373605
15351 
15352                     --4. Call Local procedure to add asset
15353                     FIXED_ASSET_ADD(p_api_version   => p_api_version,
15354                                     p_init_msg_list => p_init_msg_list,
15355                                     x_return_status => x_return_status,
15356                                     x_msg_count     => x_msg_count,
15357                                     x_msg_data      => x_msg_data,
15358                                     p_ast_line_rec  => l_ast_line_rec,
15359                                     p_txlv_rec      => l_txlv_rec,
15360                                     p_txdv_rec      => l_txdv_rec,
15361                                     --3156924
15362                                     p_trx_date       => l_trx_rec.date_trans_occurred,
15363                                     p_trx_number   => l_trx_rec.trans_number,
15364           --Bug# 6373605--SLA populate source
15365           p_sla_source_header_id    => l_txlv_rec.tas_id,
15366           p_sla_source_header_table => 'OKL_TRX_ASSETS',
15367           p_sla_source_try_id       => l_trx_rec.try_id,
15368           p_sla_source_line_id      => l_txdv_rec.id,
15369           p_sla_source_line_table   => 'OKL_TXD_ASSETS_B',
15370           p_sla_source_chr_id       => l_chr_id,
15371           p_sla_source_kle_id       => l_split_cle_id,
15372           p_sla_asset_chr_id        => l_sla_asset_chr_id,
15373           --Bug# 6373605--SLA populate sources
15374                                     --Bug# 4028371
15375                                     x_fa_trx_date   => l_fa_add_date,
15376                                     x_asset_hdr_rec => l_asset_hdr_rec);
15377                     --dbms_output.put_line('after adding fixed asset '||x_return_status);
15378                     --dbms_output.put_line('after adding fixed asset '||to_char(l_asset_hdr_rec.asset_id));
15379                     IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
15380                         RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
15381                     ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
15382                         RAISE OKL_API.G_EXCEPTION_ERROR;
15383                     END IF;
15384 
15385                     --Bug# 4028371
15386                     --update the fa trx date on transaction line
15387                     If l_all_books_rec.book_class = 'CORPORATE' then
15388                         l_talv_date_rec.id          := l_txlv_rec.id;
15389                         l_talv_date_rec.fa_trx_date := l_fa_add_date;
15390                         l_split_cle_id_orig := l_split_cle_id;
15391 
15392                         okl_tal_pvt.update_row
15393                                         (p_api_version   => p_api_version,
15394                                          p_init_msg_list => p_init_msg_list,
15395                                          x_return_status => x_return_status,
15396                                          x_msg_count     => x_msg_count,
15397                                          x_msg_data      => x_msg_data,
15398                                          p_talv_rec      => l_talv_date_rec,
15399                                          x_talv_rec      => lx_talv_date_rec);
15400                         IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
15401                             RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
15402                         ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
15403                             RAISE OKL_API.G_EXCEPTION_ERROR;
15404                         END IF;
15405 
15406                         --Bug# 6326479
15407                           /* 7626121 commented out from here and moved outside
15408                               process_split_accounting(
15409                             p_api_version   => p_api_version
15410                            ,p_init_msg_list => p_init_msg_list
15411                            ,x_return_status => x_return_status
15412                            ,x_msg_count     => x_msg_count
15413                            ,x_msg_data      => x_msg_data
15414                            ,p_contract_id   => l_chr_id
15415                            ,p_kle_id        => l_split_cle_id
15416                            ,p_transaction_date=>l_trx_rec.date_trans_occurred
15417                            );
15418 
15419                         IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
15420                            RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
15421                         ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
15422                            RAISE OKL_API.G_EXCEPTION_ERROR;
15423                         END IF; */
15424 
15425                         -- Bug# 6189396 -- start
15426                        okl_execute_formula_pub.g_additional_parameters(1).name := '';
15427                        okl_execute_formula_pub.g_additional_parameters(1).value := null;
15428                         -- Bug# 6189396 -- end
15429 
15430                      End If;
15431                      --End Bug# 4028371
15432                 END LOOP;
15433                 CLOSE all_books_curs;
15434 
15435                            -- Bug 7626121
15436                               process_split_accounting(
15437                             p_api_version   => p_api_version
15438                            ,p_init_msg_list => p_init_msg_list
15439                            ,x_return_status => x_return_status
15440                            ,x_msg_count     => x_msg_count
15441                            ,x_msg_data      => x_msg_data
15442                            ,p_contract_id   => l_chr_id
15443                            ,p_kle_id        => l_split_cle_id_orig
15444                            ,p_transaction_date=>l_trx_rec.date_trans_occurred
15445                            );
15446 
15447                         IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
15448                            RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
15449                         ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
15450                            RAISE OKL_API.G_EXCEPTION_ERROR;
15451                         END IF;
15452 
15453                        okl_execute_formula_pub.g_additional_parameters(1).name := '';
15454                        okl_execute_formula_pub.g_additional_parameters(1).value := null;
15455            END IF; --l_fa_exists
15456            --5. Tie back new asset records to OKL
15457            --dbms_output.put_line('before fetching the cim_id for FA link');
15458            OPEN c_cim(l_txdv_rec.id);
15459            LOOP
15460                FETCH c_cim INTO l_cim_id,l_cim_cle_id;
15461                --dbms_output.put_line('in fetching the cim_id for FA link'||to_char(l_cim_id));
15462                EXIT WHEN c_cim%NOTFOUND;
15463                IF l_fa_exists = 'Y' THEN
15464                    l_cimv_rec.id := l_cim_id;
15465                    l_cimv_rec.object1_id1 := l_asset_hdr_rec.asset_id;
15466                    l_cimv_rec.object1_id2 := '#';
15467                    l_cimv_rec.jtot_object1_code := 'OKX_ASSET';
15468                    l_cimv_rec.number_of_items := l_txdv_rec.quantity;
15469                    --dbms_output.put_line('Asset Id :'||to_char(l_asset_hdr_rec.asset_id));
15470 
15471                    OKL_OKC_MIGRATION_PVT.update_contract_item(p_api_version         => p_api_version,
15472                                                               p_init_msg_list   => p_init_msg_list,
15473                                                               x_return_status   => x_return_status,
15474                                                               x_msg_count           => x_msg_count,
15475                                                               x_msg_data            => x_msg_data,
15476                                                               p_cimv_rec            => l_cimv_rec,
15477                                                               x_cimv_rec            => l_cimv_rec_out);
15478                     --dbms_output.put_line('after updating contract item for Asset link '||x_return_status);
15479                     IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
15480                         RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
15481                     ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR)  THEN
15482                         RAISE OKL_API.G_EXCEPTION_ERROR;
15483                     END IF;
15484                 END IF; --l_fa_exits
15485                 -- take care of the ib instances for this FA line
15486                  --dbms_output.put_line('before splitting IB instances fa_line_id'||to_char(l_cimv_rec_out.cle_id));
15487                  --bug# : serial number processing for split asset by serial numbers - consolidate ib lines
15488 
15489                  IF NVL(l_txdv_rec.split_percent,0) NOT IN (0,OKL_API.G_MISS_NUM) THEN -- Is serialized
15490                     --consolidate the ib lines
15491                     consolidate_ib_lines(p_api_version   => p_api_version,
15492                                          p_init_msg_list => p_init_msg_list,
15493                                          x_return_status => x_return_status,
15494                                          x_msg_count     => x_msg_count,
15495                                          x_msg_data      => x_msg_data,
15496                                          p_txdv_rec      => l_txdv_rec,
15497                                          p_txlv_rec      => l_txlv_rec
15498                                         );
15499                     --dbms_output.put_line('After consolidating ib lines'||x_return_status);
15500                     IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
15501                         RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
15502                     ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
15503                         RAISE OKL_API.G_EXCEPTION_ERROR;
15504                     END IF;
15505                  END IF;
15506 
15507                  --bug# : serial number processing for split asset by serial numbers - consolidate ib lines
15508                  --OPEN   ib_item_cur(p_fa_line_id => l_cimv_rec_out.cle_id);
15509                  OPEN   ib_item_cur(p_fa_line_id => l_cim_cle_id);
15510                  LOOP
15511                      FETCH  ib_item_cur INTO l_csi_id1,
15512                                              l_csi_id2,
15513                                              l_csi_cim_id,
15514                                              l_csi_cle_id,
15515                                              l_csi_chr_id;
15516 
15517                      EXIT WHEN ib_item_cur%NOTFOUND;
15518                      --create split ib instance
15519                      --dbms_output.put_line('Before Create ib instance csi id1:'|| x_return_status);
15520                      create_ib_instance(p_api_version   => p_api_version,
15521                                         p_init_msg_list => p_init_msg_list,
15522                                         x_return_status => x_return_status,
15523                                         x_msg_count     => x_msg_count,
15524                                         x_msg_data      => x_msg_data,
15525                                         p_csi_id1       => l_csi_id1,
15526                                         p_csi_id2       => l_csi_id2,
15527                                         p_ib_cle_id     => l_csi_cle_id,
15528                                         p_chr_id        => l_csi_chr_id,
15529                                         p_split_qty     => l_txdv_rec.quantity,
15530                                         --new parameter added for split asset into components feature
15531                                         p_txdv_rec      => l_txdv_rec,
15532                                         x_instance_id   => l_csi_instance_id);
15533 
15534                       --dbms_output.put_line('After Create ib instance '||x_return_status||':'||to_char(l_csi_instance_id));
15535                       IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
15536                           RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
15537                       ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
15538                           RAISE OKL_API.G_EXCEPTION_ERROR;
15539                       END IF;
15540 
15541                       --update the coressponding okc_k_item record
15542                       l_cimv_rec.id := l_csi_cim_id;
15543                       l_cimv_rec.object1_id1 := TO_CHAR(l_csi_instance_id);
15544                       l_cimv_rec.object1_id2 := '#';
15545                       l_cimv_rec.jtot_object1_code := 'OKX_IB_ITEM';
15546 
15547                       OKL_OKC_MIGRATION_PVT.update_contract_item(p_api_version      => p_api_version,
15548                                                                  p_init_msg_list        => p_init_msg_list,
15549                                                                  x_return_status        => x_return_status,
15550                                                                  x_msg_count        => x_msg_count,
15551                                                                  x_msg_data             => x_msg_data,
15552                                                                  p_cimv_rec             => l_cimv_rec,
15553                                                                  x_cimv_rec             => l_cimv_rec_out);
15554 
15555                        --dbms_output.put_line('after updating contract item for IB link '||x_return_status);
15556                        IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
15557                            RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
15558                        ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
15559                            RAISE OKL_API.G_EXCEPTION_ERROR;
15560                        END IF;
15561                     END LOOP;
15562                  CLOSE ib_item_cur;
15563 
15564                  --Bug# 115.9 - Split by serial numbers
15565                  --consolidate if serialized and delete duplicate instance lines on child
15566                  --do it only for normal split assets as logic for split asset into compoets to be worked out
15567                  IF NVL(l_txdv_rec.split_percent,0) IN (0,OKL_API.G_MISS_NUM) THEN
15568                  ----
15569                  OPEN get_dup_inst_csr (p_asd_id        => l_txdv_rec.id);
15570                  LOOP
15571                      FETCH get_dup_inst_csr INTO l_dup_inst_cle_id, l_dup_ib_cle_id;
15572                      EXIT WHEN get_dup_inst_csr%NOTFOUND;
15573                      --Call line deletion API
15574                      delete_instance_lines(
15575                                                p_api_version    => p_api_version,
15576                                                p_init_msg_list  => p_init_msg_list,
15577                                                x_return_status  => x_return_status,
15578                                                x_msg_count      => x_msg_count,
15579                                                x_msg_data       => x_msg_data,
15580                                                p_inst_cle_id    => l_dup_inst_cle_id,
15581                                                p_ib_cle_id      => l_dup_ib_cle_id);
15582                      IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
15583                          RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
15584                      ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
15585                          RAISE OKL_API.G_EXCEPTION_ERROR;
15586                      END IF;
15587                  END LOOP;
15588                  CLOSE get_dup_inst_csr;
15589                  ----
15590                  END IF;
15591                  --Bug# 115.9 - Split by serial numbers
15592 
15593 
15594             END LOOP;
15595             CLOSE c_cim;
15596            --6. Update the lines table
15597            l_cle_tbl(i).cle_id := l_split_cle_id;
15598        END IF;
15599        IF (i=l_txdv_tbl.LAST) THEN
15600 
15601 
15602             IF (i = l_txdv_tbl.LAST) AND
15603                (NVL(l_txdv_tbl(i).split_percent,0) > 0 OR l_txdv_tbl(i).split_percent <> OKL_API.G_MISS_NUM) THEN
15604                --special processing for split asset components the original asset has to be retired completely
15605                 --1.Abandon the old asset line as we have created assets
15606                 Abandon_Parent_Asset(
15607                     p_api_version    => p_api_version,
15608                     p_init_msg_list  => p_init_msg_list,
15609                     x_return_status  => x_return_status,
15610                     x_msg_count      => x_msg_count,
15611                     x_msg_data       => x_msg_data,
15612                     p_cle_id         => l_source_cle_id);
15613 
15614                IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
15615                    RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
15616                ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
15617                    RAISE OKL_API.G_EXCEPTION_ERROR;
15618                END IF;
15619                IF l_fa_exists = 'Y' THEN
15620                    --2.Fully retire the Asset
15621                    OPEN all_books_curs(p_asset_id => l_ast_line_rec.asset_id);
15622                    LOOP
15623                        FETCH all_books_curs INTO l_all_books_rec;
15624                        EXIT WHEN all_books_curs%NOTFOUND;
15625                        --reinitialize l_Ast_line_rec
15626                        l_ast_line_rec.START_DATE_ACTIVE         := l_all_books_rec.start_date_active;
15627                        l_ast_line_rec.END_DATE_ACTIVE           := l_all_books_rec.end_date_active;
15628                        l_ast_line_rec.ASSET_ID                  := l_all_books_rec.asset_id;
15629                        l_ast_line_rec.QUANTITY                  := l_all_books_rec.current_units;
15630                        l_ast_line_rec.ASSET_NUMBER              := l_all_books_rec.asset_number;
15631                        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
15632                        l_ast_line_rec.LIFE_IN_MONTHS            := l_all_books_rec.life_in_months;
15633                        l_ast_line_rec.ORIGINAL_COST             := l_all_books_rec.original_cost;
15634                        l_ast_line_rec.COST                      := l_all_books_rec.cost;
15635                        l_ast_line_rec.ADJUSTED_COST             := l_all_books_rec.adjusted_cost;
15636                        l_ast_line_rec.TAG_NUMBER                := l_all_books_rec.tag_number;
15637                        l_ast_line_rec.CURRENT_UNITS             := l_all_books_rec.current_units ;
15638                        l_ast_line_rec.SERIAL_NUMBER             := l_all_books_rec.serial_number;
15639                        l_ast_line_rec.REVAL_CEILING             := l_all_books_rec.reval_ceiling;
15640                        l_ast_line_rec.NEW_USED                  := l_all_books_rec.new_used;
15641                        l_ast_line_rec.IN_SERVICE_DATE           := l_all_books_rec.acquisition_date;
15642                        l_ast_line_rec.MANUFACTURER_NAME         := l_all_books_rec.manufacturer_name;
15643                        l_ast_line_rec.MODEL_NUMBER              := l_all_books_rec.model_number;
15644                        l_ast_line_rec.ASSET_TYPE                := l_all_books_rec.asset_type;
15645                        l_ast_line_rec.SALVAGE_VALUE             := l_all_books_rec.salvage_value;
15646                        l_ast_line_rec.PERCENT_SALVAGE_VALUE     := l_all_books_rec.percent_salvage_value;
15647                        l_ast_line_rec.DEPRECIATION_CATEGORY     := l_all_books_rec.depreciation_category;
15648                        l_ast_line_rec.DEPRN_START_DATE          := l_all_books_rec.deprn_start_date;
15649                        l_ast_line_rec.DEPRN_METHOD_CODE         := l_all_books_rec.deprn_method_code;
15650                        l_ast_line_rec.RATE_ADJUSTMENT_FACTOR    := l_all_books_rec.rate_adjustment_factor;
15651                        l_ast_line_rec.BASIC_RATE                := l_all_books_rec.basic_rate;
15652                        l_ast_line_rec.ADJUSTED_RATE             := l_all_books_rec.adjusted_rate;
15653                        l_ast_line_rec.RECOVERABLE_COST          := l_all_books_rec.recoverable_cost;
15654                        l_ast_line_rec.ORG_ID                    := l_all_books_rec.org_id;
15655                        l_ast_line_rec.SET_OF_BOOKS_ID           := l_all_books_rec.set_of_books_id;
15656 
15657                        --check period of addition
15658                        l_check_period_of_Addition := 'N';
15659                        OPEN check_period_of_addition(p_asset_id       => l_ast_line_rec.asset_id,
15660                                                      p_book_type_code => l_ast_line_rec.corporate_book);
15661                            FETCH check_period_of_addition INTO l_check_period_of_Addition;
15662                            IF check_period_of_addition%NOTFOUND THEN
15663                                NULL;
15664                            END IF;
15665                        CLOSE check_period_of_addition;
15666 
15667                        /* Bug#4508050 - smadhava - Modified - Start*/
15668                        /*
15669                        IF NVL(l_check_period_of_addition,'N') = 'N' THEN
15670                        --dbms_output.put_line('before retiring fA'||x_return_status);
15671 
15672                            FIXED_ASSET_RETIRE(p_api_version    =>  p_api_version,
15673                                               p_init_msg_list =>  p_init_msg_list,
15674                                               x_return_status =>  x_return_status,
15675                                               x_msg_count     =>  x_msg_count,
15676                                               x_msg_data      =>  x_msg_data,
15677                                               p_ast_line_rec  =>  l_ast_line_rec,
15678                                               p_txlv_rec      =>  l_txlv_rec,
15679                                               p_txdv_rec      =>  l_txdv_rec,
15680                                               --Bug# 3156924
15681                                               p_trx_date       => l_trx_rec.date_trans_occurred,
15682                                               p_trx_number   => l_trx_rec.trans_number,
15683                                               x_fa_trx_date  => l_fa_retire_date);
15684                            --dbms_output.put_line('after retiring fA'||x_return_status);
15685                            IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
15686                                RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
15687                            ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
15688                                RAISE OKL_API.G_EXCEPTION_ERROR;
15689                            END IF;
15690                        ELSIF NVL(l_check_period_of_addition,'N') = 'Y' THEN
15691                         */
15692                        /* Bug#4508050 - smadhava - Modified - End*/
15693 
15694                        --ElsIf nvl(l_check_period_of_addition,'N') in ('Y','N') Then
15695                        --dbms_output.put_line('before adjusting fA'||x_return_status);
15696                        --dbms_output.put_line('before adjusting fA units'||to_char(l_ast_line_rec.current_units));
15697                            FIXED_ASSET_ADJUST(p_api_version   => p_api_version,
15698                                               p_init_msg_list  => p_init_msg_list,
15699                                               x_return_status  => x_return_status,
15700                                               x_msg_count      => x_msg_count,
15701                                               x_msg_data       => x_msg_data,
15702                                               p_ast_line_rec   => l_ast_line_rec,
15703                                               p_txlv_rec       => l_txlv_rec,
15704                                               p_txdv_rec       => l_txdv_rec,
15705                                               --3156924
15706                                               p_trx_date       => l_trx_rec.date_trans_occurred,
15707                                               p_trx_number   => l_trx_rec.trans_number,
15708                     --Bug# 6373605--SLA populate source
15709                     p_sla_source_header_id    => l_txlv_rec.tas_id,
15710                     p_sla_source_header_table => 'OKL_TRX_ASSETS',
15711                     p_sla_source_try_id       => l_trx_rec.try_id,
15712                     p_sla_source_line_id      => l_txlv_rec.id,
15713                     p_sla_source_line_table   => 'OKL_TXL_ASSETS_B',
15714                     p_sla_source_chr_id       => l_chr_id,
15715                     p_sla_source_kle_id       => l_source_cle_id,
15716                     --Bug# 6373605--SLA populate sources
15717                                               x_fa_trx_date    => l_fa_adj_date);
15718 
15719                            --dbms_output.put_line('after adjusting fA'||x_return_status);
15720                            IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
15721                                RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
15722                            ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
15723                                RAISE OKL_API.G_EXCEPTION_ERROR;
15724                            END IF;
15725                        /* Bug#4508050 - smadhava - Modified - Start*/
15726                        /*
15727                        END IF;
15728                        */
15729                        /* Bug#4508050 - smadhava - Modified - End*/
15730                     END LOOP;
15731                     CLOSE all_books_curs;
15732                     --adjustments done for all the books
15733                 END IF; --l_fa_exists
15734             -- end of full retirement for split asset into components parent asset
15735             END IF;
15736             --now exit out of the loop
15737             EXIT;
15738        ELSE
15739             i := i + 1;
15740             --dbms_output.put_line('number of split records processed'||to_char(i));
15741        END IF;
15742     END LOOP;
15743     --End If;--unable to track unchanged
15744 
15745     --Bug# 3222804 : relink ib lines in case split into individual units
15746     --and serialized
15747     IF NVL(l_txlv_rec.split_into_singles_flag,'N')  = 'Y' THEN
15748         Relink_Ib_Lines(p_api_version    => p_api_version,
15749                         p_init_msg_list  => p_init_msg_list,
15750                         x_return_status  => x_return_status,
15751                         x_msg_count      => x_msg_count,
15752                         x_msg_data       => x_msg_data,
15753                         p_txlv_rec       => l_txlv_rec);
15754 
15755         --dbms_output.put_line('after calling process streams '|| x_return_status);
15756         IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
15757              RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
15758         ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
15759              RAISE OKL_API.G_EXCEPTION_ERROR;
15760         END IF;
15761     END IF;
15762     --Bug# 3257326 End : relink ib lines in case split into individual units
15763 
15764     x_cle_tbl := l_cle_tbl;
15765     --Bug#2648280 Begin
15766     --dbms_output.put_line('Before calling process streams'|| x_return_status);
15767     --rounding streams could be an issue:
15768     split_streams(p_api_version    => p_api_version,
15769                   p_init_msg_list  => p_init_msg_list,
15770                   x_return_status  => x_return_status,
15771                   x_msg_count      => x_msg_count,
15772                   x_msg_data       => x_msg_data,
15773                   p_txl_id         => l_txlv_rec.id);
15774     --dbms_output.put_line('after calling process streams '|| x_return_status);
15775     IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
15776          RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
15777     ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
15778          RAISE OKL_API.G_EXCEPTION_ERROR;
15779     END IF;
15780     --Bug#2648280 End
15781 
15782     ------------------------------------------------------------------------
15783     --Bug# : 11.5.10 Recalculate costs on impacted lines and update
15784     ------------------------------------------------------------------------
15785   --Bug# 5946411: ER
15786   --recalculate only if split asset have status : BOOKED/EVERGREEN
15787   --dbms_output.put_line('before calling recalculate  l_sts_code'||l_sts_code);
15788   IF (l_sts_code IN ('BOOKED','EVERGREEN')) THEN
15789 
15790     recalculate_costs(
15791                         p_api_version         => p_api_version,
15792                         p_init_msg_list       => p_init_msg_list,
15793                         x_return_status       => x_return_status,
15794                         x_msg_count           => x_msg_count,
15795                         x_msg_data            => x_msg_data,
15796                         p_chr_id              => l_chr_id,
15797                         p_cle_tbl             => x_cle_tbl);
15798 
15799      IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
15800          RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
15801      ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
15802          RAISE OKL_API.G_EXCEPTION_ERROR;
15803      END IF;
15804     END IF;
15805 
15806     --Bug# 6788253
15807     --call API check if asset is securitized
15808     OKL_SECURITIZATION_PVT.check_kle_securitized(
15809                             p_api_version         => p_api_version,
15810                             p_init_msg_list       => p_init_msg_list,
15811                             x_return_status       => x_return_status,
15812                             x_msg_count           => x_msg_count,
15813                             x_msg_data            => x_msg_data,
15814                             p_kle_id              => l_source_cle_id,
15815                             p_effective_date      => SYSDATE,
15816                             x_value               => l_is_asset_securitized,
15817                             x_inv_agmt_chr_id_tbl => l_inv_agmt_chr_id_tbl);
15818     --dbms_output.put_line('SFA-0 : calling check_kle_securitized--status >'||x_return_status);
15819     IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
15820       RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
15821     ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
15822       RAISE OKL_API.G_EXCEPTION_ERROR;
15823     END IF;
15824 
15825     IF l_is_asset_securitized = OKL_API.G_TRUE THEN
15826      --call API to modify pool contents
15827 
15828       OKL_SECURITIZATION_PVT.modify_pool_contents(
15829                             p_api_version         => p_api_version,
15830                             p_init_msg_list       => p_init_msg_list,
15831                             x_return_status       => x_return_status,
15832                             x_msg_count           => x_msg_count,
15833                             x_msg_data            => x_msg_data,
15834                             p_transaction_reason  => l_trx_reason_asset_split,
15835                             p_khr_id              => l_chr_id,
15836                             p_kle_id              => l_source_cle_id,
15837                             p_split_kle_ids       => x_cle_tbl,
15838                             p_transaction_date    => SYSDATE,
15839                             p_effective_date      => SYSDATE);
15840 
15841       IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
15842         RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
15843       ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
15844         RAISE OKL_API.G_EXCEPTION_ERROR;
15845       END IF;
15846     END IF;
15847 
15848     --Bug# 6344223
15849     IF (l_sts_code = 'BOOKED') AND (p_source_call = 'UI') THEN
15850         sync_streams( p_api_version     => p_api_version,
15851                       p_init_msg_list   => p_init_msg_list,
15852                       x_return_status   => x_return_status,
15853                       x_msg_count       => x_msg_count,
15854                       x_msg_data        => x_msg_data,
15855                       p_chr_id          => l_chr_id );
15856 
15857         IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
15858              RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
15859         ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
15860              RAISE OKL_API.G_EXCEPTION_ERROR;
15861         END IF;
15862 
15863     ELSE
15864         -------------------------------------------------------------------------
15865         --Bug# : 11.5.10 Securitization impact
15866         -------------------------------------------------------------------------
15867          IF l_is_asset_securitized = OKL_API.G_TRUE THEN
15868 
15869              -- Bug# 4775555
15870              -- Historize and Re-create Disbursement Basis Streams
15871              OKL_STREAM_GENERATOR_PVT.create_disb_streams(
15872                  p_api_version         => p_api_version,
15873                  p_init_msg_list       => p_init_msg_list,
15874                  x_return_status       => x_return_status,
15875                  x_msg_count           => x_msg_count,
15876                  x_msg_data            => x_msg_data,
15877                  p_contract_id         => l_chr_id
15878               );
15879 
15880              IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
15881                  RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
15882              ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
15883                  RAISE OKL_API.G_EXCEPTION_ERROR;
15884              END IF;
15885 
15886             --Bug# 6344223
15887              okl_stream_generator_pvt.create_pv_streams(
15888                    p_api_version         => 1.0,
15889                    p_init_msg_list       => OKC_API.G_FALSE,
15890                    x_return_status       => x_return_status,
15891                    x_msg_count           => x_msg_count,
15892                    x_msg_data            => x_msg_data,
15893                    p_contract_id         => l_chr_id
15894                    );
15895 
15896              IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
15897                  RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
15898              ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
15899                  RAISE OKL_API.G_EXCEPTION_ERROR;
15900              END IF;
15901 
15902              okl_contract_rebook_pvt.create_inv_disb_adjustment(
15903                    p_api_version         => 1.0,
15904                    p_init_msg_list       => OKC_API.G_FALSE,
15905                    x_return_status       => x_return_status,
15906                    x_msg_count           => x_msg_count,
15907                    x_msg_data            => x_msg_data,
15908                    p_orig_khr_id         => l_chr_id
15909                    );
15910 
15911 
15912              IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
15913                  RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
15914              ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
15915                  RAISE OKL_API.G_EXCEPTION_ERROR;
15916              END IF;
15917             --Bug# 6344223 : End
15918         END IF;
15919 
15920 
15921         -------------------------------------------------------------------------
15922         --Bug# : 11.5.10 Securitization impact End
15923         -------------------------------------------------------------------------
15924       -- Bug# 5946411: ER
15925       IF (l_sts_code IN ('TERMINATED','EXPIRED')) THEN
15926         create_split_asset_return (
15927                        p_api_version         =>  p_api_version,
15928                         p_init_msg_list       => p_init_msg_list,
15929                         x_return_status       => x_return_status,
15930                         x_msg_count           => x_msg_count,
15931                         x_msg_data            => x_msg_data,
15932                         p_kle_id             => l_source_cle_id,
15933                         p_cle_tbl             => x_cle_tbl,
15934                         p_txlv_rec            => l_txlv_rec
15935                         );
15936 
15937         IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
15938           RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
15939         ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
15940           RAISE OKL_API.G_EXCEPTION_ERROR;
15941         END IF;
15942       END IF;
15943       --Bug# 5946411: ER end
15944 
15945       ------------------------------------------------------------------------
15946       --Bug# : R12.B eBTax impact Start
15947       ------------------------------------------------------------------------
15948       okl_process_sales_tax_pvt.calculate_sales_tax(
15949          p_api_version             => p_api_version,
15950          p_init_msg_list           => p_init_msg_list,
15951          x_return_status           => x_return_status,
15952          x_msg_count               => x_msg_count,
15953          x_msg_data                => x_msg_data,
15954          p_source_trx_id           =>  p_txlv_rec.tas_id, --<okl_trx_assets.id>,
15955          p_source_trx_name         => 'Split Asset',
15956          p_source_table            => 'OKL_TRX_ASSETS');
15957 
15958          IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
15959              RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
15960          ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
15961              RAISE OKL_API.G_EXCEPTION_ERROR;
15962          END IF;
15963 
15964       ------------------------------------------------------------------------
15965       --Bug# : R12.B eBTax impact End
15966       ------------------------------------------------------------------------
15967 
15968     --update the transaction record to processed.
15969     l_trxv_rec.id := p_txlv_rec.tas_id;
15970     l_trxv_rec.tsu_code := 'PROCESSED';
15971     OKL_TRX_ASSETS_PUB.update_trx_ass_h_def(
15972                         p_api_version   => p_api_version,
15973                         p_init_msg_list => p_init_msg_list,
15974                         x_return_status => x_return_status,
15975                         x_msg_count     => x_msg_count,
15976                         x_msg_data      => x_msg_data,
15977                         p_thpv_rec      => l_trxv_rec,
15978                         x_thpv_rec      => lx_trxv_rec);
15979 
15980      --dbms_output.put_line('after updating contract trx status to processed '||x_return_status);
15981      IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
15982          RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
15983      ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
15984          RAISE OKL_API.G_EXCEPTION_ERROR;
15985      END IF;
15986 
15987  END IF;
15988      OKL_API.END_ACTIVITY (x_msg_count,
15989                           x_msg_data );
15990 EXCEPTION
15991     WHEN OKL_API.G_EXCEPTION_ERROR THEN
15992     x_return_status := OKL_API.HANDLE_EXCEPTIONS(
15993                                l_api_name,
15994                                G_PKG_NAME,
15995                                'OKL_API.G_RET_STS_ERROR',
15996                                x_msg_count,
15997                                x_msg_data,
15998                                '_PVT');
15999     WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
16000     x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
16001                               l_api_name,
16002                               G_PKG_NAME,
16003                               'OKL_API.G_RET_STS_UNEXP_ERROR',
16004                               x_msg_count,
16005                               x_msg_data,
16006                               '_PVT');
16007     WHEN OTHERS THEN
16008     x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
16009                               l_api_name,
16010                               G_PKG_NAME,
16011                               'OTHERS',
16012                               x_msg_count,
16013                               x_msg_data,
16014                               '_PVT');
16015 END Split_Fixed_Asset;
16016 ------------------------------------------------------------------------------
16017 -- PROCEDURE version_contract
16018 --
16019 --  This procedure versions contract, i.e. making a contract Version History
16020 --
16021 -- Calls:
16022 -- Called By:
16023 ------------------------------------------------------------------------------
16024   PROCEDURE version_contract(
16025                              x_return_status OUT NOCOPY VARCHAR2,
16026                              x_msg_count     OUT NOCOPY NUMBER,
16027                              x_msg_data      OUT NOCOPY VARCHAR2,
16028                              p_chr_id        IN  OKC_K_HEADERS_V.ID%TYPE
16029                             ) IS
16030 
16031   l_proc_name VARCHAR2(35) := 'VERSION_CONTRACT';
16032   l_cvmv_rec  okl_okc_migration_pvt.cvmv_rec_type;
16033   x_cvmv_rec  okl_okc_migration_pvt.cvmv_rec_type;
16034 
16035   BEGIN
16036 
16037     x_return_status := OKC_API.G_RET_STS_SUCCESS;
16038 
16039     l_cvmv_rec.chr_id := p_chr_id;
16040     okl_version_pub.version_contract(
16041                                      p_api_version => 1.0,
16042                                      p_init_msg_list => OKC_API.G_FALSE,
16043                                      x_return_status => x_return_status,
16044                                      x_msg_count     => x_msg_count,
16045                                      x_msg_data      => x_msg_data,
16046                                      p_cvmv_rec      => l_cvmv_rec,
16047                                      x_cvmv_rec      => x_cvmv_rec --,
16048                                      --p_commit        => OKC_API.G_FALSE
16049                                     );
16050     RETURN;
16051 
16052   END version_contract;
16053 --------------------------------------------------------------------------------
16054 --Start of Comments
16055 --Procedure Name : Split_Asset
16056 --Description    : Selects the split Asset transaction against the line
16057 --                 and splits the Asset in OKL and FA
16058 --History        :
16059 --                 08-Apr-2001  ashish.singh Created
16060 --End of Comments
16061 --------------------------------------------------------------------------------
16062 PROCEDURE Split_Fixed_Asset(p_api_version   IN  NUMBER,
16063                             p_init_msg_list IN  VARCHAR2,
16064                             x_return_status OUT NOCOPY VARCHAR2,
16065                             x_msg_count     OUT NOCOPY NUMBER,
16066                             x_msg_data      OUT NOCOPY VARCHAR2,
16067                             p_cle_id        IN  NUMBER,
16068                             x_cle_tbl       OUT NOCOPY cle_tbl_type,
16069                             --Bug# 6344223
16070                             p_source_call   IN VARCHAR2 DEFAULT 'UI') IS
16071 
16072  l_return_status        VARCHAR2(1)  DEFAULT OKL_API.G_RET_STS_SUCCESS;
16073  l_api_name             CONSTANT VARCHAR2(30) := 'SPLIT_FIXED_ASSET';
16074  l_api_version          CONSTANT NUMBER := 1.0;
16075 
16076   CURSOR fa_line_csr(p_cle_id IN NUMBER) IS
16077   SELECT cle.id,
16078          cle.dnz_chr_id
16079   FROM   OKC_K_LINES_B cle,
16080          OKC_LINE_STYLES_B lse
16081   WHERE  cle.cle_id = p_cle_id
16082   AND    cle.lse_id = lse.id
16083   AND    lse.lty_code = 'FIXED_ASSET'
16084 --Bug Fix# 2744213 - 2761799
16085 --  should not check for effectivity on sysdate
16086 --  AND    trunc(nvl(start_date,sysdate)) <= trunc(sysdate)
16087 --  AND    trunc(nvl(end_date,sysdate+1)) > trunc(sysdate)
16088  --Bug# 5946411: ER
16089  --commented the status as it should consider all kind of contract
16090  -- AND    cle.sts_code = 'BOOKED';
16091  ;
16092   --Bug# 5946411: ER end
16093 
16094   l_txlv_rec  txlv_rec_type;
16095   l_txdv_tbl  txdv_tbl_type;
16096 
16097   l_no_data_found BOOLEAN DEFAULT TRUE;
16098   l_fa_line_id    NUMBER;
16099   l_chr_id        OKC_K_LINES_B.dnz_chr_id%TYPE;
16100 
16101 i NUMBER;
16102 
16103 --Bug #2723498: 11.5.9 Split Asset by serial Number enhancement
16104 CURSOR srl_num_csr1 (PTalid IN NUMBER) IS
16105 SELECT COUNT(iti.serial_number)
16106 FROM   okl_txl_itm_insts iti
16107 WHERE  iti.tal_id = PTalid
16108 AND    tal_type   = 'ALI'
16109 AND    NVL(selected_for_split_flag,'N') = 'Y';
16110 
16111 
16112 CURSOR srl_num_csr2 (PTalId IN NUMBER,
16113                      PTxdId IN NUMBER) IS
16114 SELECT COUNT(iti.serial_number)
16115 FROM   okl_txl_itm_insts iti
16116 WHERE  iti.tal_id = PTalId
16117 AND    iti.asd_id = PTxdId
16118 AND    tal_type   = 'ALI'
16119 AND    NVL(selected_for_split_flag,'N') = 'Y';
16120 
16121 l_serial_count NUMBER;
16122 
16123 --cursor for asset_number
16124 CURSOR asset_num_csr (P_fin_ast_id IN NUMBER) IS
16125 SELECT name
16126 FROM   okc_k_lines_tl
16127 WHERE  id = p_fin_ast_id;
16128 
16129 l_asset_number OKC_K_LINES_TL.NAME%TYPE;
16130 
16131 --cursor to fetch serial number control code
16132 CURSOR srl_ctrl_csr (PInvItmId       IN NUMBER,
16133                      P_fin_ast_id    IN NUMBER) IS
16134 SELECT mtl.serial_number_control_code
16135 FROM   mtl_system_items     mtl,
16136        okc_k_headers_b      CHR,
16137        okc_k_lines_b        cle
16138 WHERE  mtl.inventory_item_id = PInvItmId
16139 AND    mtl.organization_id   = CHR.INV_ORGANIZATION_ID
16140 AND    CHR.id                = cle.chr_id
16141 AND    cle.id                = P_fin_ast_id;
16142 
16143 
16144 l_srl_control_code    mtl_system_items.serial_number_control_code%TYPE;
16145 
16146 l_serialized          VARCHAR2(1) DEFAULT OKL_API.G_FALSE;
16147 
16148   --Bug# 5946411: ER
16149     CURSOR c_get_sts_code(p_chr_id NUMBER)
16150     IS
16151     SELECT st.ste_code
16152     FROM OKC_K_HEADERS_V chr,
16153          okc_statuses_b st
16154     WHERE chr.id = p_chr_id
16155     and st.code = chr.sts_code;
16156    lv_sts_code               OKC_K_HEADERS_V.STS_CODE%TYPE;
16157     --Bug# 5946411: ER end
16158     /*
16159     -- mvasudev, 08/23/2004
16160     -- Added PROCEDURE to enable Business Event
16161     */
16162            CURSOR l_cle_tas_csr
16163            IS
16164            SELECT cleb.dnz_chr_id,
16165                   tasb.date_trans_occurred
16166            FROM   okl_trx_assets tasb
16167                  ,okl_txl_assets_b txlb
16168                  ,okc_k_lines_b cleb
16169                          ,okc_line_styles_b lseb
16170            WHERE txlb.tas_id = tasb.id
16171            AND cleb.id = txlb.kle_id
16172            AND cleb.cle_id = p_cle_id
16173            AND cleb.lse_id = lseb.id
16174            AND lseb.lty_Code = 'FIXED_ASSET'
16175            AND tasb.tsu_code = 'ENTERED';
16176 
16177            l_dnz_chr_id NUMBER;
16178            l_trx_date DATE;
16179 
16180         PROCEDURE raise_business_event
16181         (p_dnz_chr_id IN NUMBER,
16182          p_trx_date IN DATE,
16183          x_return_status OUT NOCOPY VARCHAR2
16184         )
16185         IS
16186 
16187 
16188       l_parameter_list           wf_parameter_list_t;
16189         BEGIN
16190           x_return_status := OKL_API.G_RET_STS_SUCCESS;
16191 
16192                  wf_event.AddParameterToList(G_WF_ITM_CONTRACT_ID,l_dnz_chr_id,l_parameter_list);
16193                  wf_event.AddParameterToList(G_WF_ITM_ASSET_ID,p_cle_id,l_parameter_list);
16194                  wf_event.AddParameterToList(G_WF_ITM_TRANS_DATE,fnd_date.date_to_canonical(l_trx_date),l_parameter_list);
16195 
16196          OKL_WF_PVT.raise_event (p_api_version    => p_api_version,
16197                                  p_init_msg_list  => p_init_msg_list,
16198                                                                  x_return_status  => x_return_status,
16199                                                                  x_msg_count      => x_msg_count,
16200                                                                  x_msg_data       => x_msg_data,
16201                                                                  p_event_name     => G_WF_EVT_KHR_SPLIT_ASSET_COMP,
16202                                                                  p_parameters     => l_parameter_list);
16203 
16204 
16205      EXCEPTION
16206      WHEN OTHERS THEN
16207        x_return_status := OKL_API.G_RET_STS_UNEXP_ERROR;
16208        RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
16209      END raise_business_event;
16210 
16211     /*
16212     -- mvasudev, 08/23/2004
16213     -- END, PROCEDURE to enable Business Event
16214     */
16215 
16216 BEGIN
16217 
16218   -- Call start_activity to create savepoint, check compatibility
16219   -- and initialize message list
16220   x_return_status := OKL_API.START_ACTIVITY (
16221                                l_api_name
16222                                ,p_init_msg_list
16223                                ,'_PVT'
16224                                ,x_return_status);
16225    -- Check if activity started successfully
16226    IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
16227        RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
16228     ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
16229        RAISE OKL_API.G_EXCEPTION_ERROR;
16230     END IF;
16231 
16232   --Verify cle_id
16233   x_return_status := verify_cle_id(p_cle_id => p_cle_id);
16234   IF x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR THEN
16235         RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
16236   ELSIF x_return_status = OKL_API.G_RET_STS_ERROR THEN
16237         RAISE OKL_API.G_EXCEPTION_ERROR;
16238   END IF;
16239 
16240   --get fixed asset line
16241   OPEN   fa_line_csr(p_cle_id => p_cle_id) ;
16242   FETCH  fa_line_csr INTO l_fa_line_id, l_chr_id;
16243   IF fa_line_csr%NOTFOUND THEN
16244        NULL; --not exactly
16245        OKL_API.set_message(p_app_name     => G_APP_NAME,
16246                            p_msg_name     => G_INACTIVE_ASSET
16247                            );
16248         RAISE OKL_API.G_EXCEPTION_ERROR;
16249   ELSE
16250       /*
16251       -- mvasudev, 10/28/2004
16252       -- Fetch parameters for Business Event enabling
16253       */
16254          FOR l_cle_tas_rec IN l_cle_tas_csr
16255          LOOP
16256           l_dnz_chr_id := l_cle_tas_rec.dnz_chr_id;
16257           l_trx_date := l_cle_tas_rec.date_trans_occurred;
16258          END LOOP;
16259       /*
16260       -- mvasudev, 10/28/2004
16261       -- END, Fetch parameters for Business Event enabling
16262       */
16263 
16264       l_txlv_rec := get_txlv_rec(l_fa_line_id, l_no_data_found);
16265       IF l_no_data_found THEN
16266           NULL;
16267           --dbms_output.put_line('No pending Split Asset Transactions FOR this Asset');
16268           OKL_API.set_message(p_app_name     => G_APP_NAME,
16269                               p_msg_name     => G_SPLIT_AST_TRX_NOT_FOUND
16270                               );
16271           RAISE OKL_API.G_EXCEPTION_ERROR;
16272       ELSE
16273           --dbms_output.put_line('txlv id FOR FETCH OF txd '|| to_char(l_txlv_rec.id));
16274           l_txdv_tbl := get_trx_details (
16275                                          p_tal_id  => l_txlv_rec.id,
16276                                          x_no_data_found => l_no_data_found
16277                                          );
16278           IF l_no_data_found THEN
16279               NULL;
16280               --dbms_output.put_line('NO_DATA_FOUND FOR trx detail');
16281               OKL_API.set_message(p_app_name     => G_APP_NAME,
16282                                   p_msg_name     => G_SPLIT_AST_TRX_NOT_FOUND
16283                                  );
16284               RAISE OKL_API.G_EXCEPTION_ERROR;
16285 
16286           ELSE
16287 
16288             --Bug #2723498 : 11.5.9 Split by serial numbers validation
16289             --1. validate for split into units
16290 
16291             IF NVL(l_txlv_rec.SPLIT_INTO_SINGLES_FLAG,'N') = 'N' AND
16292                NVL(l_txlv_rec.split_into_units,0) <> 0 THEN
16293                l_serialized := OKL_API.G_FALSE;
16294                l_serialized := Is_Serialized(p_cle_id => p_cle_id);
16295                IF (l_serialized = OKL_API.G_TRUE) THEN
16296                    OPEN  srl_num_csr1 (PTalid => l_txlv_rec.id);
16297                    FETCH srl_num_csr1 INTO l_serial_count;
16298                    IF srl_num_csr1%NOTFOUND THEN
16299                        NULL; --it is count cursor so should not happen
16300                    END IF;
16301                    CLOSE srl_num_csr1;
16302 
16303                    IF (l_serial_Count <> NVL(l_txlv_rec.split_into_units,0)) THEN
16304                        --Inventory item for asset is serialized. Please select split_into_units
16305                        --serial nubers to split.
16306                         l_asset_number := NULL;
16307                         OPEN asset_num_csr(p_fin_ast_id => p_cle_id);
16308                         FETCH asset_num_csr INTO l_asset_number;
16309                         IF asset_num_csr%NOTFOUND THEN
16310                             NULL;
16311                         END IF;
16312                         CLOSE asset_num_csr;
16313 
16314                        OKL_API.set_message(p_app_name     => G_APP_NAME,
16315                                            p_msg_name     => G_SPLIT_SERIAL_NOT_FOUND,
16316                                            p_token1       => G_ASSET_NUMBER_TOKEN,
16317                                            p_token1_value => l_asset_number,
16318                                            p_token2       => G_SPLIT_UNITS_TOKEN,
16319                                            p_token2_value => TO_CHAR(l_txlv_rec.split_into_units)
16320                                           );
16321                        --raise exception
16322                        RAISE OKL_API.G_EXCEPTION_ERROR;
16323                    END IF;
16324                END IF;
16325             END IF;
16326 
16327             --2. validate for split asset into components
16328             IF NVL(l_txlv_rec.SPLIT_INTO_SINGLES_FLAG,'N') = 'X' THEN
16329                 IF l_txdv_tbl.COUNT > 0 THEN
16330                     FOR i IN 1..l_txdv_tbl.COUNT
16331                     LOOP
16332                         l_serial_count := 0;
16333                         OPEN srl_ctrl_csr (PInvItmId       => l_txdv_tbl(i).inventory_item_id,
16334                                            P_fin_ast_id    => p_cle_id);
16335                         FETCH  srl_ctrl_csr
16336                         INTO   l_srl_control_code;
16337                         IF srl_ctrl_csr%NOTFOUND THEN
16338                            NULL; -- will not happen
16339                         END IF;
16340                         CLOSE srl_ctrl_csr;
16341 
16342 
16343                         IF NVL(l_srl_control_code,0) IN (2,5,6) THEN
16344                             --is serialized
16345                             --Bug fix #2744213 : invalid cursor
16346                             --slr_num_csr1 was being checked after opening srl_num_csr2
16347                             OPEN srl_num_csr2(PTalId => l_txlv_rec.id,
16348                                               PTxdId => l_txdv_tbl(i).id);
16349                             FETCH srl_num_csr2 INTO l_serial_count;
16350                             IF srl_num_csr2%NOTFOUND THEN
16351                                 NULL; --it is count cursor so should not happen
16352                             END IF;
16353                             CLOSE srl_num_csr2;
16354 
16355                             IF  (l_serial_count <> l_txdv_tbl(i).quantity) THEN
16356                                 --Inventory item for asset is serialized. Please select split_into_units
16357                                 --serial nubers to split.
16358 
16359                                 OKL_API.set_message(p_app_name     => G_APP_NAME,
16360                                                     p_msg_name     => G_SPLIT_SERIAL_NOT_FOUND,
16361                                                     p_token1       => G_ASSET_NUMBER_TOKEN,
16362                                                     p_token1_value => l_txdv_tbl(i).Asset_Number,
16363                                                     p_token2       => G_SPLIT_UNITS_TOKEN,
16364                                                     p_token2_value => TO_CHAR(l_txdv_tbl(i).quantity)
16365                                                    );
16366                                 --raise exception
16367                                 RAISE OKL_API.G_EXCEPTION_ERROR;
16368                             END IF;
16369                         END IF;
16370                     END LOOP; -- txdv_tbl
16371                  END IF;-- txdv_tb.count > 0
16372              END IF;
16373             --Bug #2723498 : 11.5.9 Split by serial numbers validation End
16374 
16375             --Bug# 5946411: ER
16376             -- Get the sts code since we can version only active contract
16377             -- Required to perform split for the Expired contract
16378             OPEN  c_get_sts_code(l_chr_id);
16379             FETCH c_get_sts_code INTO lv_sts_code;
16380             CLOSE c_get_sts_code;
16381             --Bug# 5946411: ER End
16382             IF NVL(lv_sts_code,'X') = 'ACTIVE' THEN
16383             --version contract
16384             version_contract(
16385                              x_return_status => x_return_status,
16386                              x_msg_count     => x_msg_count,
16387                              x_msg_data      => x_msg_data,
16388                              p_chr_id        => l_chr_id
16389                              );
16390             IF x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR THEN
16391                 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
16392             ELSIF x_return_status = OKL_API.G_RET_STS_ERROR THEN
16393                 RAISE OKL_API.G_EXCEPTION_ERROR;
16394             END IF;
16395             END IF; --Bug# 5946411: ER
16396 
16397             --Call split asset for transactions to be processed
16398             Split_Fixed_Asset(p_api_version   => p_api_version,
16399                                 p_init_msg_list => p_init_msg_list,
16400                                 x_return_status => x_return_status,
16401                                 x_msg_count     => x_msg_count,
16402                                 x_msg_data      => x_msg_data,
16403                                 p_txdv_tbl      => l_txdv_tbl,
16404                                 p_txlv_rec      => l_txlv_rec,
16405                                 x_cle_tbl       => x_cle_tbl,
16406                                 --Bug# 6344223
16407                                 p_source_call   => p_source_call);
16408 
16409               IF x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR THEN
16410                   RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
16411               ELSIF x_return_status = OKL_API.G_RET_STS_ERROR THEN
16412                   RAISE OKL_API.G_EXCEPTION_ERROR;
16413               END IF;
16414            END IF;
16415       END IF;
16416   END IF;
16417 
16418      /*
16419    -- mvasudev, 08/23/2004
16420    -- Code change to enable Business Event
16421    */
16422         raise_business_event(p_dnz_chr_id => l_dnz_chr_id,
16423                              p_trx_date => l_trx_date,
16424                              x_return_status => x_return_status);
16425     IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
16426        RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
16427     ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
16428        RAISE OKL_API.G_EXCEPTION_ERROR;
16429     END IF;
16430 
16431    /*
16432    -- mvasudev, 08/23/2004
16433    -- END, Code change to enable Business Event
16434    */
16435 
16436    OKL_API.END_ACTIVITY (x_msg_count,
16437                           x_msg_data );
16438 
16439     EXCEPTION
16440     WHEN OKL_API.G_EXCEPTION_ERROR THEN
16441     x_return_status := OKL_API.HANDLE_EXCEPTIONS(
16442                                l_api_name,
16443                                G_PKG_NAME,
16444                                'OKL_API.G_RET_STS_ERROR',
16445                                x_msg_count,
16446                                x_msg_data,
16447                                '_PVT');
16448     WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
16449     x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
16450                               l_api_name,
16451                               G_PKG_NAME,
16452                               'OKL_API.G_RET_STS_UNEXP_ERROR',
16453                               x_msg_count,
16454                               x_msg_data,
16455                               '_PVT');
16456     WHEN OTHERS THEN
16457     x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
16458                               l_api_name,
16459                               G_PKG_NAME,
16460                               'OTHERS',
16461                               x_msg_count,
16462                               x_msg_data,
16463                               '_PVT');
16464 
16465 END Split_Fixed_Asset;
16466 --------------------------------------------------------------------------------
16467 --Start of Comments
16468 --Procedure Name  : Cancel_Split_Asset_Trs
16469 --Description     : Marks the split asset transaction as cancelled
16470 --History        :
16471 --                 03-Sep-2002  ashish.singh Created
16472 --End of Comments
16473 --------------------------------------------------------------------------------
16474 PROCEDURE Cancel_Split_Asset_Trs
16475                            (p_api_version   IN  NUMBER,
16476                             p_init_msg_list IN  VARCHAR2 DEFAULT OKL_API.G_FALSE,
16477                             x_return_status OUT NOCOPY   VARCHAR2,
16478                             x_msg_count     OUT NOCOPY   NUMBER,
16479                             x_msg_data      OUT NOCOPY   VARCHAR2,
16480                             p_cle_id        IN  NUMBER) IS
16481 
16482  l_return_status        VARCHAR2(1)  DEFAULT OKL_API.G_RET_STS_SUCCESS;
16483  l_api_name             CONSTANT VARCHAR2(30) := 'CANCEL_SPLIT_ASSET_TRS';
16484  l_api_version          CONSTANT NUMBER := 1.0;
16485 
16486   --Cursor to get the fixed Asset Line Id
16487   CURSOR l_fixedasst_csr (p_finasst_line IN NUMBER) IS
16488   SELECT cle.id        fixedasst_line
16489   FROM   OKC_K_LINES_B cle,
16490          OKC_LINE_STYLES_B lse
16491   WHERE  cle.cle_id   = p_finasst_line
16492   AND    cle.lse_id   = lse.id
16493   AND    lse.lty_code = 'FIXED_ASSET';
16494 
16495   l_fixedasst_line  OKC_K_LINES_B.ID%TYPE;
16496 
16497   --Cursor to find kle_id split transaction lines to be cancelled..
16498   CURSOR l_tal_csr(p_fixedasst_line IN NUMBER) IS
16499   SELECT tal.id       tal_id,
16500          tas.id       tas_id
16501   FROM   OKL_TRX_ASSETS   TAS,
16502          OKL_TXL_ASSETS_B TAL
16503   WHERE  tas.id  = tal.tas_id
16504   AND    tas.tsu_code = 'ENTERED'
16505   AND    tas.tas_type = 'ALI'
16506   AND    tal.tal_type = 'ALI'
16507   AND    tal.kle_id   = p_fixedasst_line;
16508 
16509   l_tas_id    OKL_TRX_ASSETS.ID%TYPE;
16510   l_tal_id    OKL_TXL_ASSETS_B.ID%TYPE;
16511   l_cle_id    OKC_K_LINES_B.ID%TYPE;
16512 
16513   l_tasv_rec   okl_trx_assets_pub.thpv_rec_type;
16514   lx_tasv_rec  okl_trx_assets_pub.thpv_rec_type;
16515 
16516 BEGIN
16517     -- Call start_activity to create savepoint, check compatibility
16518     -- and initialize message list
16519     x_return_status := OKL_API.START_ACTIVITY (
16520                                l_api_name
16521                                ,p_init_msg_list
16522                                ,'_PVT'
16523                                ,x_return_status);
16524      -- Check if activity started successfully
16525      IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
16526          RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
16527      ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
16528          RAISE OKL_API.G_EXCEPTION_ERROR;
16529      END IF;
16530 
16531     l_cle_id := p_cle_id;
16532     --1.Verify p_cle_id
16533     x_return_status := verify_cle_id(p_cle_id => l_cle_id);
16534     IF x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR THEN
16535         RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
16536     ELSIF x_return_status = OKL_API.G_RET_STS_ERROR THEN
16537         RAISE OKL_API.G_EXCEPTION_ERROR;
16538     END IF;
16539 
16540     -- get fixedasset line id
16541     OPEN l_fixedasst_csr(p_finasst_line => l_cle_id);
16542     FETCH l_fixedasst_csr INTO l_fixedasst_line;
16543     IF l_fixedasst_csr%NOTFOUND THEN
16544         NULL;
16545     ELSE
16546         OPEN l_tal_csr(p_fixedasst_line => l_fixedasst_line);
16547         FETCH l_tal_csr INTO l_tal_id, l_tas_id;
16548         IF l_tal_csr%NOTFOUND THEN
16549            OKL_API.set_message(p_app_name     => G_APP_NAME,
16550                                p_msg_name     => G_SPLIT_AST_TRX_NOT_FOUND
16551                               );
16552           RAISE OKL_API.G_EXCEPTION_ERROR;
16553         ELSE
16554             --update the transaction status to cancelled
16555             l_tasv_rec.id       := l_tas_id;
16556             l_tasv_rec.tsu_code := 'CANCELED';
16557             --update split transaction header
16558             OKL_TRX_ASSETS_PUB.update_trx_ass_h_def(
16559              p_api_version     => p_api_version,
16560              p_init_msg_list   => p_init_msg_list,
16561              x_return_status   => x_return_status,
16562              x_msg_count       => x_msg_count,
16563              x_msg_data        => x_msg_data,
16564              p_thpv_rec        => l_tasv_rec,
16565              x_thpv_rec        => lx_tasv_rec);
16566 
16567             IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
16568                 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
16569             ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
16570                 RAISE OKL_API.G_EXCEPTION_ERROR;
16571             END IF;
16572         END IF;
16573         CLOSE l_tal_csr;
16574     END IF; --l_fixedasst_csr%NOTFOUND
16575     CLOSE l_fixedasst_csr;
16576     OKL_API.END_ACTIVITY (x_msg_count,
16577                           x_msg_data );
16578     EXCEPTION
16579     WHEN OKL_API.G_EXCEPTION_ERROR THEN
16580     x_return_status := OKL_API.HANDLE_EXCEPTIONS(
16581                                l_api_name,
16582                                G_PKG_NAME,
16583                                'OKL_API.G_RET_STS_ERROR',
16584                                x_msg_count,
16585                                x_msg_data,
16586                                '_PVT');
16587     WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
16588     x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
16589                               l_api_name,
16590                               G_PKG_NAME,
16591                               'OKL_API.G_RET_STS_UNEXP_ERROR',
16592                               x_msg_count,
16593                               x_msg_data,
16594                               '_PVT');
16595     WHEN OTHERS THEN
16596     x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
16597                               l_api_name,
16598                               G_PKG_NAME,
16599                               'OTHERS',
16600                               x_msg_count,
16601                               x_msg_data,
16602                               '_PVT');
16603 END Cancel_Split_Asset_Trs;
16604 Procedure check_ser_num_checked(x_return_status OUT NOCOPY VARCHAR2,
16605                             x_msg_count     OUT NOCOPY NUMBER,
16606                             x_msg_data      OUT NOCOPY VARCHAR2,
16607                             p_cle_id        IN  NUMBER) is
16608 
16609  l_return_status        VARCHAR2(1)  DEFAULT OKL_API.G_RET_STS_SUCCESS;
16610  l_api_name             CONSTANT VARCHAR2(30) := 'CHECK_SER_NUM_CHECKED';
16611  l_api_version          CONSTANT NUMBER := 1.0;
16612 
16613   CURSOR fa_line_csr(p_cle_id IN NUMBER) IS
16614   SELECT cle.id,
16615          cle.dnz_chr_id
16616   FROM   OKC_K_LINES_B cle,
16617          OKC_LINE_STYLES_B lse
16618   WHERE  cle.cle_id = p_cle_id
16619   AND    cle.lse_id = lse.id
16620   AND    lse.lty_code = 'FIXED_ASSET';
16621 
16622   l_txlv_rec  txlv_rec_type;
16623   l_txdv_tbl  txdv_tbl_type;
16624 
16625   l_no_data_found BOOLEAN DEFAULT TRUE;
16626   l_fa_line_id    NUMBER;
16627   l_chr_id        OKC_K_LINES_B.dnz_chr_id%TYPE;
16628 
16629 i NUMBER;
16630 
16631 CURSOR srl_num_csr1 (PTalid IN NUMBER) IS
16632 SELECT COUNT(iti.serial_number)
16633 FROM   okl_txl_itm_insts iti
16634 WHERE  iti.tal_id = PTalid
16635 AND    tal_type   = 'ALI'
16636 AND    NVL(selected_for_split_flag,'N') = 'Y';
16637 
16638 l_serial_count NUMBER;
16639 
16640 --cursor for asset_number
16641 CURSOR asset_num_csr (P_fin_ast_id IN NUMBER) IS
16642 SELECT name
16643 FROM   okc_k_lines_tl
16644 WHERE  id = p_fin_ast_id;
16645 
16646 l_asset_number OKC_K_LINES_TL.NAME%TYPE;
16647 
16648 BEGIN
16649 
16650 --  dbms_output.put_line('start');
16651   -- Call start_activity to create savepoint, check compatibility
16652   -- and initialize message list
16653   x_return_status := OKL_API.START_ACTIVITY (
16654                                l_api_name
16655                                ,OKL_API.G_FALSE
16656                                ,'_PVT'
16657                                ,x_return_status);
16658    -- Check if activity started successfully
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 --  dbms_output.put_line('ebd activity');
16665   --Verify cle_id
16666   x_return_status := verify_cle_id(p_cle_id => p_cle_id);
16667 --  dbms_output.put_line('x_return_status after verify : ' || x_return_status);
16668   IF x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR THEN
16669         RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
16670   ELSIF x_return_status = OKL_API.G_RET_STS_ERROR THEN
16671         RAISE OKL_API.G_EXCEPTION_ERROR;
16672   END IF;
16673 
16674 --  dbms_output.put_line('b4 fa_line_csr');
16675   --get fixed asset line
16676   OPEN   fa_line_csr(p_cle_id => p_cle_id) ;
16677   FETCH  fa_line_csr INTO l_fa_line_id, l_chr_id;
16678   IF fa_line_csr%NOTFOUND THEN
16679        NULL; --not exactly
16680        OKL_API.set_message(p_app_name     => G_APP_NAME,
16681                            p_msg_name     => G_INACTIVE_ASSET
16682                            );
16683         RAISE OKL_API.G_EXCEPTION_ERROR;
16684   ELSE
16685       l_txlv_rec := get_txlv_rec(l_fa_line_id, l_no_data_found);
16686       IF l_no_data_found THEN
16687           NULL;
16688           OKL_API.set_message(p_app_name     => G_APP_NAME,
16689                               p_msg_name     => G_SPLIT_AST_TRX_NOT_FOUND
16690                               );
16691           RAISE OKL_API.G_EXCEPTION_ERROR;
16692       ELSE
16693           l_txdv_tbl := get_trx_details (
16694                                          p_tal_id  => l_txlv_rec.id,
16695                                          x_no_data_found => l_no_data_found
16696                                          );
16697           IF l_no_data_found THEN
16698               NULL;
16699               OKL_API.set_message(p_app_name     => G_APP_NAME,
16700                                   p_msg_name     => G_SPLIT_AST_TRX_NOT_FOUND
16701                                  );
16702               RAISE OKL_API.G_EXCEPTION_ERROR;
16703 
16704           ELSE
16705             IF NVL(l_txlv_rec.SPLIT_INTO_SINGLES_FLAG,'N') = 'N' AND
16706                NVL(l_txlv_rec.split_into_units,0) <> 0 THEN
16707 --                   dbms_output.put_line('b4 srl_num_csr1:' || l_serial_count);
16708                    OPEN  srl_num_csr1 (PTalid => l_txlv_rec.id);
16709                    FETCH srl_num_csr1 INTO l_serial_count;
16710                    IF srl_num_csr1%NOTFOUND THEN
16711                        NULL; --it is count cursor so should not happen
16712                    END IF;
16713                    CLOSE srl_num_csr1;
16714                    IF (l_serial_Count <> NVL(l_txlv_rec.split_into_units,0))
16715 THEN
16716                    --Inventory item for asset is serialized. Please select
16717                        --serial nubers to split.
16718                         l_asset_number := NULL;
16719 --                        dbms_output.put_line('b4 asset_num_csr:');
16720                         OPEN asset_num_csr(p_fin_ast_id => p_cle_id);
16721                         FETCH asset_num_csr INTO l_asset_number;
16722                         IF asset_num_csr%NOTFOUND THEN
16723                             NULL;
16724                         END IF;
16725                         CLOSE asset_num_csr;
16726 --                        dbms_output.put_line('after asset_num_csr:');
16727                        OKL_API.set_message(p_app_name     => G_APP_NAME,
16728                                            p_msg_name     =>
16729 G_SPLIT_SERIAL_NOT_FOUND,
16730                                            p_token1       =>
16731 G_ASSET_NUMBER_TOKEN,
16732                                            p_token1_value => l_asset_number,
16733                                            p_token2       =>
16734 G_SPLIT_UNITS_TOKEN,
16735                                            p_token2_value =>
16736 TO_CHAR(l_txlv_rec.split_into_units)
16737                                           );
16738                        --raise exception
16739                        RAISE OKL_API.G_EXCEPTION_ERROR;
16740                    END IF;
16741             END IF;
16742         END IF;
16743       END IF;
16744     END IF;
16745     exception
16746     WHEN OKL_API.G_EXCEPTION_ERROR THEN
16747     x_return_status := OKL_API.HANDLE_EXCEPTIONS(
16748                                l_api_name,
16749                                G_PKG_NAME,
16750                                'OKL_API.G_RET_STS_ERROR',
16751                                x_msg_count,
16752                                x_msg_data,
16753                                '_PVT');
16754     WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
16755     x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
16756                               l_api_name,
16757                               G_PKG_NAME,
16758                               'OKL_API.G_RET_STS_UNEXP_ERROR',
16759                               x_msg_count,
16760                               x_msg_data,
16761                               '_PVT');
16762     WHEN OTHERS THEN
16763     x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
16764                               l_api_name,
16765                               G_PKG_NAME,
16766                               'OTHERS',
16767                               x_msg_count,
16768                               x_msg_data,
16769                               '_PVT');
16770 end check_ser_num_checked;
16771 END Okl_Split_Asset_Pvt;