[Home] [Help]
PACKAGE BODY: APPS.OKL_SPLIT_ASSET_PVT
Source
1 PACKAGE BODY Okl_Split_Asset_Pvt AS
2 /* $Header: OKLRSPAB.pls 120.70.12020000.3 2013/03/19 15:04:42 racheruv ship $ */
3
4
5 --------------------------------------------------------------------------------
6 --GLOBAL VARIBLES
7 --------------------------------------------------------------------------------
8 G_FIN_AST_LTY_CODE CONSTANT VARCHAR2(30) := 'FREE_FORM1';
9 --------------------------------------------------------------------------------
10 -- GLOBAL MESSAGE CONSTANTS
11 --------------------------------------------------------------------------------
12 G_FND_APP CONSTANT VARCHAR2(200) := OKL_API.G_FND_APP;
13 G_APP_NAME CONSTANT VARCHAR2(3) := OKL_API.G_APP_NAME;
14 G_UNEXPECTED_ERROR CONSTANT VARCHAR2(200) := 'OKL_CONTRACTS_UNEXPECTED_ERROR';
15 G_COL_NAME_TOKEN CONSTANT VARCHAR2(200) := OKL_API.G_COL_NAME_TOKEN;
16 G_PARENT_TABLE_TOKEN CONSTANT VARCHAR2(200) := OKL_API.G_PARENT_TABLE_TOKEN;
17 G_CHILD_TABLE_TOKEN CONSTANT VARCHAR2(200) := OKL_API.G_CHILD_TABLE_TOKEN;
18 G_SQLERRM_TOKEN CONSTANT VARCHAR2(200) := 'SQLerrm';
19 G_SQLCODE_TOKEN CONSTANT VARCHAR2(200) := 'SQLcode';
20 -- Bug# 4542290 - smadhava - Added - Start
21 G_METHOD CONSTANT VARCHAR2(200) := 'METHOD';
22 -- Bug# 4542290 - smadhava - Added - End
23 --------------------------------------------------------------------------------
24 -- GLOBAL OKL MESSAGES
25 --------------------------------------------------------------------------------
26 G_INVALID_TOP_LINE CONSTANT VARCHAR2(200) := 'OKL_LLA_LINE_STYLE';
27 G_TOP_LINE_STYLE CONSTANT VARCHAR2(30) := 'TLS';
28 G_SPLIT_ASSET_NOT_FOUND CONSTANT VARCHAR2(200) := 'OKL_LLA_SPLIT_ASSET_NOT_FOUND';
29 G_SPLIT_AST_TRX_NOT_FOUND CONSTANT VARCHAR2(200) := 'OKL_LLA_SPLIT_AST_TRX';
30 G_SPLIT_PARENT_NUMBER_CHANGE CONSTANT VARCHAR2(200) := 'OKL_LLA_SPLIT_PARENT_NUMBER';
31 G_LTY_CODE_NOT_FOUND CONSTANT VARCHAR2(200) := 'OKL_LLA_SPLIT_PARENT_NUMBER';
32 G_NO_DATA_FOUND CONSTANT VARCHAR2(200) := 'OKL_NO_DATA_FOUND';
33 G_INACTIVE_ASSET CONSTANT VARCHAR2(200) := 'OKL_LLA_INACTIVE_ASSET';
34 G_SPLIT_ASSET_TRX CONSTANT VARCHAR2(200) := 'OKL_LLA_PEND_SPLT_AST_TRX';
35 G_SPLIT_AST_COMP_TRX CONSTANT VARCHAR2(200) := 'OKL_LLA_PEND_SPLT_COMP_TRX';
36 G_ASSET_REQUIRED CONSTANT VARCHAR2(200) := 'OKL_LLA_ASSET_REQUIRED';
37 G_DUPLICATE_ASSET CONSTANT VARCHAR2(200) := 'OKL_LLA_ASSET_NUMBER';
38 G_ASSET_LENGTH CONSTANT VARCHAR2(200) := 'OKL_LLA_AST_LEN';
39 G_NOT_UNIQUE CONSTANT VARCHAR2(30) := 'OKL_LLA_NOT_UNIQUE';
40 G_SINGLE_UNIT_ASSET CONSTANT VARCHAR2(200) := 'OKL_LLA_SINGLE_UNIT_SPLIT';
41
42 --Added by bkatraga for bug 9548880
43 G_SPLIT_UNIT_NOT_ALLWD CONSTANT VARCHAR2(200) := 'OKL_LLA_SPLIT_UNIT_NOT_ALLWD';
44 --end bkatraga
45
46 -- Bug# 4542290 - smadhava - Added - Start
47 G_RRB_SPLIT_ASSET_NOT_ALLWD CONSTANT VARCHAR2(200) := 'OKL_LLA_RRB_SPLIT_NOT_ALLWD';
48 -- Bug# 4542290 - smadhava - Added - End
49 --------------------------------------------------------------------------------
50 -- GLOBAL EXCEPTION
51 --------------------------------------------------------------------------------
52 G_EXCEPTION_HALT_VALIDATION EXCEPTION;
53 G_EXCEPTION_STOP_VALIDATION EXCEPTION;
54 G_API_TYPE CONSTANT VARCHAR2(4) := '_PVT';
55 G_API_VERSION CONSTANT NUMBER := 1.0;
56 G_SCOPE CONSTANT VARCHAR2(4) := '_PVT';
57
58 -- GLOBAL VARIABLES
59 --------------------------------------------------------------------------------
60 G_PKG_NAME CONSTANT VARCHAR2(200) := 'OKL_SPLIT_ASSET_PVT';
61 G_TRY_NAME OKL_TRX_TYPES_V.NAME%TYPE := 'Split Asset';
62 G_TRY_TYPE OKL_TRX_TYPES_V.TRY_TYPE%TYPE := 'TIE';
63 --------------------------------------------------------------------------------
64 --Globals for csi item instance
65 --------------------------------------------------------------------------------
66 G_IB_TXN_TYPE_NOT_FOUND CONSTANT VARCHAR2(200) := 'OKL_LLA_IB_TXN_TYPE_NOT_FOUND';
67 G_TXN_TYPE_TOKEN CONSTANT VARCHAR2(30) := 'TXN_TYPE';
68 G_ITM_INST_PARTY CONSTANT VARCHAR2(30) := 'LESSEE';
69 G_CONTRACT_INTENT CONSTANT VARCHAR2(1) := 'S';
70 G_PARTY_SRC_TABLE CONSTANT VARCHAR2(30) := 'HZ_PARTIES';
71 G_PARTY_RELATIONSHIP CONSTANT VARCHAR2(30) := 'OWNER';
72 G_PARTY_NOT_FOUND CONSTANT VARCHAR2(200) := 'OKL_LLA_PARTY_NOT_FOUND';
73 G_ROLE_CODE_TOKEN CONSTANT VARCHAR2(30) := 'RLE_CODE';
74 G_CUST_ACCT_RULE CONSTANT VARCHAR2(30) := 'CAN';
75 G_CUST_ACCT_RULE_GROUP CONSTANT VARCHAR2(30) := 'LACAN';
76 G_CONTRACT_ID_TOKEN CONSTANT VARCHAR2(200) := 'CONTRACT_ID';
77 G_IB_SPLIT_TXN_TYPE CONSTANT VARCHAR2(30) := 'OKL_SPLITA';
78 G_CUST_ACCOUNT_FOUND CONSTANT VARCHAR2(200) := 'OKL_LLA_CUST_ACCT_NOT_FOUND';
79 --------------------------------------------------------------------------------
80 --Bug#2723498 : 11.5.9 Enhancement Split asset by serial numbers message constants
81 --------------------------------------------------------------------------------
82 G_IB_INSTANCE_MISMATCH CONSTANT VARCHAR2(200) := 'OKL_LLA_SPA_INSTANCE_MISMATCH';
83 G_IB_LINE_TOKEN CONSTANT VARCHAR2(200) := 'IB_LINE_ID';
84 G_ASSET_NUMBER_TOKEN CONSTANT VARCHAR2(200) := 'ASSET_NUMBER';
85 G_SPLIT_SERIAL_NOT_FOUND CONSTANT VARCHAR2(200) := 'OKL_LLA_SPA_SERIAL_NOT_FOUND';
86 G_SPLIT_UNITS_TOKEN CONSTANT VARCHAR2(200) := 'SPLIT_UNITS';
87 G_SRL_NUM_DUPLICATE CONSTANT VARCHAR2(200) := 'OKL_LLA_SERIAL_NUM_DUP';
88 G_NO_MATCHING_RECORD CONSTANT VARCHAR2(200) := 'OKL_LLA_NO_MATCHING_RECORD';
89 G_ASSET_NOT_SERIALIZED CONSTANT VARCHAR2(200) := 'OKL_LLA_SPA_NOT_SERIALIZED';
90 --Bug Fix # 2881114
91 G_ASSET_LINKED_TO_SERVICE CONSTANT VARCHAR2(200) := 'OKL_LLA_SPA_SERVICE_LINKED';
92 --Bug# : 11.5.10
93 G_FORMULA_OEC OKL_FORMULAE_V.NAME%TYPE := 'LINE_OEC';
94 G_FORMULA_CAP OKL_FORMULAE_V.NAME%TYPE := 'LINE_CAP_AMNT';
95 G_FORMULA_RES OKL_FORMULAE_V.NAME%TYPE := 'LINE_RESIDUAL_VALUE';
96 --Bug# 3222804 : serial number control by leasing inv org setups
97 G_SERIALIZED_IN_IB CONSTANT VARCHAR2(200) := 'OKL_SERIAL_CONTROL_MISMATCH';
98 G_NOT_SERIALIZED_IN_IB CONSTANT VARCHAR2(200) := 'OKL_SERIAL_CONTROL_MISMATCH_2';
99 G_SERIAL_NUMBER_MISMATCH CONSTANT VARCHAR2(200) := 'OKL_SERIAL_NUMBER_MISMATCH';
100
101 --Bug# 3156924 :
102 G_LLA_MISSING_TRX_DATE CONSTANT VARCHAR2(200) := 'OKL_LLA_MISSING_TRX_DATE';
103 G_LLA_WRONG_TRX_DATE CONSTANT VARCHAR2(200) := 'OKL_LLA_WRONG_TRX_DATE';
104 G_LLA_REV_ONLY_BOOKED CONSTANT VARCHAR2(200) := 'OKL_LLA_REV_ONLY_BOOKED';
105 G_LLA_INVALID_DATE_FORMAT CONSTANT VARCHAR2(200) := 'OKL_LLA_INVALID_DATE_FORMAT';
106
107 --BUG# 3569441
108 G_INVALID_INSTALL_LOC_TYPE CONSTANT VARCHAR2(200) := 'OKL_INVALID_INSTALL_LOC_TYPE';
109 G_LOCATION_TYPE_TOKEN CONSTANT VARCHAR2(30) := 'LOCATION_TYPE';
110 G_LOC_TYPE1_TOKEN CONSTANT VARCHAR2(30) := 'LOCATION_TYPE1';
111 G_LOC_TYPE2_TOKEN CONSTANT VARCHAR2(30) := 'LOCATION_TYPE2';
112
113 G_MISSING_USAGE CONSTANT VARCHAR2(200) := 'OKL_INSTALL_LOC_MISSING_USAGE';
114 G_USAGE_TYPE_TOKEN CONSTANT VARCHAR2(30) := 'USAGE_TYPE';
115 G_ADDRESS_TOKEN CONSTANT VARCHAR2(30) := 'ADDRESS';
116 G_INSTANCE_NUMBER_TOKEN CONSTANT VARCHAR2(30) := 'INSTANCE_NUMBER';
117 --END BUG# 3569441
118
119 /*
120 -- mvasudev, 08/23/2004
121 -- Added Constants to enable Business Event
122 */
123 G_WF_EVT_KHR_SPLIT_ASSET_REQ CONSTANT VARCHAR2(64) := 'oracle.apps.okl.la.lease_contract.split_asset_by_units_requested';
124 G_WF_EVT_KHR_SPLIT_ASSET_COMP CONSTANT VARCHAR2(64) := 'oracle.apps.okl.la.lease_contract.split_asset_by_units_completed';
125
126 G_WF_ITM_CONTRACT_ID CONSTANT VARCHAR2(20) := 'CONTRACT_ID';
127 G_WF_ITM_ASSET_ID CONSTANT VARCHAR2(10) := 'ASSET_ID';
128 G_WF_ITM_TRANS_DATE CONSTANT VARCHAR2(20) := 'TRANSACTION_DATE';
129 -- Bug# 4542290 - smadhava - Added - Start
130 G_RRB_ESTIMATED CONSTANT OKL_PQY_VALUES_V.VALUE%TYPE := 'ESTIMATED_AND_BILLED';
131 G_RRB_ACTUAL CONSTANT OKL_PQY_VALUES_V.VALUE%TYPE := 'ACTUAL';
132 -- Bug# 4542290 - smadhava - Added - End
133
134 --Bug# 6612475 Start
135 ------------------------------------------------------------------------------
136 --Bug # 6612475
137 --API Name : Validate_Split_Request
138 --Description : This will validate the split asset request parameters
139 -- and will be called from Create_Split_Transaction
140 -- History :
141 -- 07-May-2008 avsingh Creation
142 --
143 -- End of Comments
144 -----------------------------------------------------------------------------
145 Procedure Validate_Split_Request
146 (p_api_version IN NUMBER
147 ,p_init_msg_list IN VARCHAR2
148 ,x_return_status OUT NOCOPY VARCHAR2
149 ,x_msg_count OUT NOCOPY NUMBER
150 ,x_msg_data OUT NOCOPY VARCHAR2
151 ,p_cle_id IN NUMBER
152 ,p_split_into_individuals_yn IN VARCHAR2
153 ,p_split_into_units IN NUMBER
154 ,p_revision_date IN DATE
155 ) IS
156
157 l_api_name CONSTANT VARCHAR2(30) := 'VALIDATE_SPLIT_REQUEST';
158 l_valid_asset_flag VARCHAR2(1);
159
160 cursor l_cle_csr (p_cle_id in number) is
161 select 'Y'
162 from okc_k_lines_b cleb
163 where id = p_cle_id
164 and lse_id = 33;
165
166 l_return_status VARCHAR2(1) := OKL_API.G_RET_STS_SUCCESS;
167
168 Begin
169 x_return_status := OKL_API.G_RET_STS_SUCCESS;
170 -- Call start_activity to create savepoint, check compatibility
171 -- and initialize message list
172 x_return_status := OKL_API.START_ACTIVITY (
173 l_api_name
174 ,p_init_msg_list
175 ,'_PVT'
176 ,x_return_status);
177 -- Check if activity started successfully
178 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
179 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
180 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
181 RAISE OKL_API.G_EXCEPTION_ERROR;
182 END IF;
183 --1. Validate Revision Date
184 IF p_revision_date is NULL or p_revision_date = OKL_API.G_MISS_DATE Then
185 OKL_API.SET_MESSAGE(p_app_name => g_app_name,
186 p_msg_name => 'OKL_LP_REQUIRED_VALUE',
187 p_token1 => 'COLUMN_PROMPT',
188 p_token1_value => 'Revision Date'
189 );
190 l_return_status := OKL_API.G_RET_STS_ERROR;
191 END IF;
192 --2. Validate the Asset Id
193 If nvl(p_cle_id, OKL_API.G_MISS_NUM) = OKL_API.G_MISS_NUM then
194 --Asset Number to split is andatory
195 OKL_API.SET_MESSAGE(p_app_name => g_app_name,
196 p_msg_name => 'OKL_LP_REQUIRED_VALUE',
197 p_token1 => 'COLUMN_PROMPT',
198 p_token1_value => 'Asset'
199 );
200 l_return_status := OKL_API.G_RET_STS_ERROR;
201 ElsIf nvl(p_cle_id,OKL_API.G_MISS_NUM) <> OKL_API.G_MISS_NUM then
202 --find out whether the asset number provided is valid
203 l_valid_asset_flag := 'N';
204 Open l_cle_csr(p_cle_id => p_cle_id);
205 Fetch l_cle_csr into l_valid_asset_flag;
206 Close l_cle_csr;
207 If l_valid_asset_flag = 'N' Then
208 OKL_API.SET_MESSAGE(p_app_name => g_app_name,
209 p_msg_name => 'OKL_LLA_NO_DATA_FOUND',
210 p_token1 => 'COL_NAME',
211 p_token1_value => 'Asset'
212 );
213 l_return_status := OKL_API.G_RET_STS_ERROR;
214 End If;
215 End If;
216 --3. validate units to split
217 If (
218 (nvl(p_split_into_individuals_yn, OKL_API.G_MISS_CHAR) =
219 OKL_API.G_MISS_CHAR
220 ) OR (p_split_into_individuals_yn = 'N')
221 ) AND
222 nvl(p_split_into_units, OKL_API.G_MISS_NUM) = OKL_API.G_MISS_NUM Then
223 OKL_API.SET_MESSAGE(p_app_name => g_app_name,
224 p_msg_name => 'OKL_LLA_INVALID_SPLIT_OPTION',
225 p_token1 => 'COL_NAME1',
226 p_token1_value => 'Split Into Single Units',
227 p_token2 => 'COL_NAME2',
228 p_token2_value => 'Number of Units'
229 );
230 l_return_status := OKL_API.G_RET_STS_ERROR;
231 ElsIf nvl(p_split_into_units, OKL_API.G_MISS_NUM) <> OKL_API.G_MISS_NUM
232 Then
233 If nvl(p_split_into_units, OKL_API.G_MISS_NUM) <= 0 Then
234 OKL_API.SET_MESSAGE(p_app_name => g_app_name,
235 p_msg_name => 'OKL_AM_REQ_FIELD_POS_ERR',
236 p_token1 => 'PROMPT',
237 p_token1_value => 'Number of Units'
238 );
239 l_return_status := OKL_API.G_RET_STS_ERROR;
240 End If;
241 End IF;
242
243 x_return_status := l_return_status;
244
245 --Call end Activity
246 OKL_API.END_ACTIVITY(x_msg_count, x_msg_data);
247 EXCEPTION
248 WHEN OKL_API.G_EXCEPTION_ERROR Then
249 x_return_status :=OKL_API.HANDLE_EXCEPTIONS
250 (
251 l_api_name,
252 G_PKG_NAME,
253 'OKL_API.G_RET_STS_ERROR',
254 x_msg_count,
255 x_msg_data,
256 '_PVT'
257 );
258 WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
259 x_return_status :=OKL_API.HANDLE_EXCEPTIONS
260 (
261 l_api_name,
262 G_PKG_NAME,
263 'OKL_API.G_RET_STS_UNEXP_ERROR',
264 x_msg_count,
265 x_msg_data,
266 '_PVT'
267 );
268 WHEN OTHERS THEN
269 x_return_status :=OKL_API.HANDLE_EXCEPTIONS
270 (
271 l_api_name,
272 G_PKG_NAME,
273 'OTHERS',
274 x_msg_count,
275 x_msg_data,
276 '_PVT'
277 );
278 End Validate_Split_Request;
279 --Bug# 6612475 End;
280
281
282 --Bug# 6344223
283 ------------------------------------------------------------------------------
284 --Bug# 6344223
285 --API Name : get_split_round_amount
286 --Description : API to adjust the amounts which are not evenly divisible such
287 -- that the remainder is allocated to either the child asset
288 -- holding the same asset number as the parent asset or the asset
289 -- with the largest percentage of cost (when splitting into
290 -- components).
291 --History :
292 -- 09-Aug-2007 rirawat Creation
293 --End of Comments
294 ------------------------------------------------------------------------------
295 PROCEDURE get_split_round_amount(
296 p_api_version IN NUMBER
297 ,p_init_msg_list IN VARCHAR2
298 ,x_return_status OUT NOCOPY VARCHAR2
299 ,x_msg_count OUT NOCOPY NUMBER
300 ,x_msg_data OUT NOCOPY VARCHAR2
301 ,p_txl_id IN NUMBER
302 ,p_split_factor IN NUMBER
303 ,p_klev_rec IN klev_rec_type
304 ,p_clev_rec IN clev_rec_type
305 ,x_klev_rec OUT NOCOPY klev_rec_type
306 ,x_clev_rec OUT NOCOPY clev_rec_type
307 ) IS
308
309 l_return_status VARCHAR2(1) DEFAULT OKL_API.G_RET_STS_SUCCESS;
310 l_api_name CONSTANT VARCHAR2(30) := 'get_split_round_amount';
311 l_api_version CONSTANT NUMBER := 1.0;
312
313 --Fix Bug# 2727161
314 CURSOR curr_hdr_csr (p_chr_id OKC_K_HEADERS_B.ID%TYPE) IS
315 SELECT currency_code
316 FROM okc_k_headers_b
317 WHERE id = p_chr_id;
318
319 CURSOR curr_ln_csr (p_line_id OKC_K_HEADERS_B.ID%TYPE) IS
320 SELECT h.currency_code
321 FROM okc_k_headers_b h,
322 okc_k_lines_b l
323 WHERE h.id = l.dnz_chr_id
324 AND l.id = p_line_id;
325
326 l_conv_amount NUMBER;
327 l_currency_code OKC_K_LINES_B.CURRENCY_CODE%TYPE;
328
329
330 CURSOR l_txd_csr(p_trxline_id IN NUMBER) IS
331 SELECT txd.id,
332 txd.split_percent,
333 txl.kle_id,
334 txd.target_kle_id,
335 txd.quantity,
336 txl.current_units
337 FROM okl_txd_assets_b txd,
338 okl_txl_Assets_b txl
339 WHERE txl.tal_type = 'ALI'
340 AND txd.tal_id = txl.id
341 AND txl.id = p_trxline_id
342 --Bug# 6898798 start
343 ORDER BY nvl(txd.split_percent,-1);
344 --Bug# 6898798 end
345
346
347 l_child_split_factor NUMBER :=0;
348
349 l_klev_rec_sum klev_rec_type;
350 l_klev_rec_out klev_rec_type;
351 l_clev_rec_sum clev_rec_type;
352 l_clev_rec_out clev_rec_type;
353
354 l_klev_rec klev_rec_type;
355 l_clev_rec clev_rec_type;
356 l_split_by_unit varchar2(1):='N' ;
357
358 FUNCTION round_amount(
359 p_currency_code IN VARCHAR2
360 ,p_amount IN NUMBER
361 ) RETURN NUMBER
362 IS
363 l_round_amount NUMBER;
364 BEGIN
365 l_round_amount:=p_amount;
366
367 IF (p_amount IS NOT NULL
368 AND
369 p_amount <> OKL_API.G_MISS_NUM) THEN
370
371 l_round_amount := NULL;
372
373 l_round_amount := okl_accounting_util.cross_currency_round_amount(
374 p_amount => p_amount,
375 p_currency_code => p_currency_code
376 );
377 END IF;
378 RETURN l_round_amount;
379
380 EXCEPTION
381 WHEN OTHERS THEN
382 OKL_API.Set_Message(p_app_name => OKL_API.G_APP_NAME,
383 p_msg_name => 'OKL_UNEXPECTED_ERROR',
384 p_token1 => 'OKL_SQLCODE',
385 p_token1_value => SQLCODE,
386 p_token2 => 'OKL_SQLERRM',
387 p_token2_value => SQLERRM);
388
389 RETURN NULL;
390 END;
391
392
393 BEGIN
394 -- Call start_activity to create savepoint, check compatibility
395 -- and initialize message list
396 x_return_status := OKL_API.START_ACTIVITY (
397 l_api_name
398 ,p_init_msg_list
399 ,'_PVT'
400 ,x_return_status);
401 -- Check if activity started successfully
402 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
403 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
404 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
405 RAISE OKL_API.G_EXCEPTION_ERROR;
406 END IF;
407
408 l_currency_code := '?';
409 OPEN curr_hdr_csr (p_clev_rec.dnz_chr_id);
410 FETCH curr_hdr_csr INTO l_currency_code;
411 CLOSE curr_hdr_csr;
412
413 IF (l_currency_code = '?') THEN
414 --
415 -- Get currency_code
416 -- Using line_id
417 --
418 OPEN curr_ln_csr (p_clev_rec.id);
419 FETCH curr_ln_csr INTO l_currency_code;
420 CLOSE curr_ln_csr;
421 END IF;
422
423 IF (l_currency_code = '?') THEN -- Fatal error, Not a valid currency_code
424 RAISE OKL_API.G_EXCEPTION_ERROR;
425 END IF;
426
427 l_klev_rec_out:=p_klev_rec;
428 l_clev_rec_out:=p_clev_rec;
429
430 --Initialize
431 l_klev_rec_sum.ESTIMATED_OEC :=0;
432 l_klev_rec_sum.LAO_AMOUNT :=0;
433 l_klev_rec_sum.CAPITAL_REDUCTION :=0;
434 l_klev_rec_sum.FEE_CHARGE :=0;
435 l_klev_rec_sum.INITIAL_DIRECT_COST :=0;
436 l_klev_rec_sum.AMOUNT_STAKE :=0;
437 l_klev_rec_sum.LRV_AMOUNT :=0;
438 l_klev_rec_sum.COVERAGE :=0;
439 l_klev_rec_sum.VENDOR_ADVANCE_PAID :=0;
440 l_klev_rec_sum.TRADEIN_AMOUNT :=0;
441 l_klev_rec_sum.BOND_EQUIVALENT_YIELD :=0;
442 l_klev_rec_sum.TERMINATION_PURCHASE_AMOUNT :=0;
443 l_klev_rec_sum.REFINANCE_AMOUNT :=0;
444 l_klev_rec_sum.REMARKETED_AMOUNT :=0;
445 l_klev_rec_sum.REMARKET_MARGIN :=0;
446 l_klev_rec_sum.REPURCHASED_AMOUNT :=0;
447 l_klev_rec_sum.RESIDUAL_VALUE :=0;
448 l_klev_rec_sum.APPRAISAL_VALUE :=0;
449 l_klev_rec_sum.GAIN_LOSS :=0;
450 l_klev_rec_sum.FLOOR_AMOUNT :=0;
451 l_klev_rec_sum.TRACKED_RESIDUAL :=0;
452 l_klev_rec_sum.AMOUNT :=0;
453 l_klev_rec_sum.OEC :=0;
454 l_klev_rec_sum.CAPITAL_AMOUNT :=0;
455 l_klev_rec_sum.RESIDUAL_GRNTY_AMOUNT :=0;
456 l_klev_rec_sum.RVI_PREMIUM :=0;
457 l_klev_rec_sum.CAPITALIZED_INTEREST :=0;
458 l_klev_rec_sum.SUBSIDY_OVERRIDE_AMOUNT :=0;
459 l_klev_rec_sum.Expected_Asset_Cost :=0;
460
461 l_clev_rec_sum.price_unit:=0;
462 l_clev_rec_sum.price_negotiated:=0;
463 l_clev_rec_sum.price_negotiated_renewed:=0;
464
465
466 for l_txd_rec in l_txd_csr(p_txl_id)
467 loop
468 if nvl(l_txd_rec.split_percent,0) in (0,okl_api.g_miss_num) then
469 l_child_split_factor := l_txd_rec.quantity/l_txd_rec.current_units;
470 l_split_by_unit:='Y';
471 else
472 l_child_split_factor := l_txd_rec.split_percent/100;
473 l_split_by_unit:='N';
474 end if;
475
476 l_klev_rec_sum.ESTIMATED_OEC := l_klev_rec_sum.ESTIMATED_OEC +
477 round_amount(l_currency_code,l_child_split_factor * p_klev_rec.ESTIMATED_OEC);
478 l_klev_rec_sum.LAO_AMOUNT := l_klev_rec_sum.LAO_AMOUNT+
479 round_amount(l_currency_code,l_child_split_factor * p_klev_rec.LAO_AMOUNT);
480 l_klev_rec_sum.CAPITAL_REDUCTION := l_klev_rec_sum.CAPITAL_REDUCTION
481 + round_amount(l_currency_code,l_child_split_factor * p_klev_rec.CAPITAL_REDUCTION);
482 l_klev_rec_sum.FEE_CHARGE := l_klev_rec_sum.FEE_CHARGE
483 + round_amount(l_currency_code,l_child_split_factor * p_klev_rec.FEE_CHARGE);
484 l_klev_rec_sum.INITIAL_DIRECT_COST := l_klev_rec_sum.INITIAL_DIRECT_COST
485 + round_amount(l_currency_code,l_child_split_factor * p_klev_rec.INITIAL_DIRECT_COST);
486 l_klev_rec_sum.AMOUNT_STAKE := l_klev_rec_sum.AMOUNT_STAKE
487 + round_amount(l_currency_code,l_child_split_factor * p_klev_rec.AMOUNT_STAKE);
488 l_klev_rec_sum.LRV_AMOUNT := l_klev_rec_sum.LRV_AMOUNT
489 + round_amount(l_currency_code,l_child_split_factor * p_klev_rec.LRV_AMOUNT);
490 l_klev_rec_sum.COVERAGE := l_klev_rec_sum.COVERAGE
491 + round_amount(l_currency_code,l_child_split_factor * p_klev_rec.COVERAGE);
492 l_klev_rec_sum.VENDOR_ADVANCE_PAID := l_klev_rec_sum.VENDOR_ADVANCE_PAID
493 + round_amount(l_currency_code,l_child_split_factor * p_klev_rec.VENDOR_ADVANCE_PAID);
494 l_klev_rec_sum.TRADEIN_AMOUNT := l_klev_rec_sum.TRADEIN_AMOUNT
495 + round_amount(l_currency_code,l_child_split_factor * p_klev_rec.TRADEIN_AMOUNT);
496 l_klev_rec_sum.BOND_EQUIVALENT_YIELD := l_klev_rec_sum.BOND_EQUIVALENT_YIELD
497 + round_amount(l_currency_code,l_child_split_factor * p_klev_rec.BOND_EQUIVALENT_YIELD);
498 l_klev_rec_sum.TERMINATION_PURCHASE_AMOUNT := l_klev_rec_sum.TERMINATION_PURCHASE_AMOUNT
499 + round_amount(l_currency_code,l_child_split_factor * p_klev_rec.TERMINATION_PURCHASE_AMOUNT);
500 l_klev_rec_sum.REFINANCE_AMOUNT := l_klev_rec_sum.REFINANCE_AMOUNT
501 + round_amount(l_currency_code,l_child_split_factor * p_klev_rec.REFINANCE_AMOUNT);
502 l_klev_rec_sum.REMARKETED_AMOUNT := l_klev_rec_sum.REMARKETED_AMOUNT
503 + round_amount(l_currency_code,l_child_split_factor * p_klev_rec.REMARKETED_AMOUNT);
504 l_klev_rec_sum.REMARKET_MARGIN := l_klev_rec_sum.REMARKET_MARGIN
505 + round_amount(l_currency_code,l_child_split_factor * p_klev_rec.REMARKET_MARGIN);
506 l_klev_rec_sum.REPURCHASED_AMOUNT := l_klev_rec_sum.REPURCHASED_AMOUNT
507 + round_amount(l_currency_code,l_child_split_factor * p_klev_rec.REPURCHASED_AMOUNT);
508 l_klev_rec_sum.RESIDUAL_VALUE := l_klev_rec_sum.RESIDUAL_VALUE
509 + round_amount(l_currency_code,l_child_split_factor * p_klev_rec.RESIDUAL_VALUE);
510 l_klev_rec_sum.APPRAISAL_VALUE := l_klev_rec_sum.APPRAISAL_VALUE
511 + round_amount(l_currency_code,l_child_split_factor * p_klev_rec.APPRAISAL_VALUE);
512 l_klev_rec_sum.GAIN_LOSS := l_klev_rec_sum.GAIN_LOSS
513 + round_amount(l_currency_code,l_child_split_factor * p_klev_rec.GAIN_LOSS);
514 l_klev_rec_sum.FLOOR_AMOUNT := l_klev_rec_sum.FLOOR_AMOUNT
515 + round_amount(l_currency_code,l_child_split_factor * p_klev_rec.FLOOR_AMOUNT);
516 l_klev_rec_sum.TRACKED_RESIDUAL := l_klev_rec_sum.TRACKED_RESIDUAL
517 + round_amount(l_currency_code,l_child_split_factor * p_klev_rec.TRACKED_RESIDUAL);
518 l_klev_rec_sum.AMOUNT := l_klev_rec_sum.AMOUNT
519 + round_amount(l_currency_code,l_child_split_factor * p_klev_rec.AMOUNT);
520 l_klev_rec_sum.OEC := l_klev_rec_sum.OEC
521 + round_amount(l_currency_code,l_child_split_factor * p_klev_rec.OEC);
522 l_klev_rec_sum.CAPITAL_AMOUNT := l_klev_rec_sum.CAPITAL_AMOUNT
523 + round_amount(l_currency_code,l_child_split_factor * p_klev_rec.CAPITAL_AMOUNT);
524 l_klev_rec_sum.RESIDUAL_GRNTY_AMOUNT := l_klev_rec_sum.RESIDUAL_GRNTY_AMOUNT
525 + round_amount(l_currency_code,l_child_split_factor * p_klev_rec.RESIDUAL_GRNTY_AMOUNT);
526 l_klev_rec_sum.RVI_PREMIUM := l_klev_rec_sum.RVI_PREMIUM
527 + round_amount(l_currency_code,l_child_split_factor * p_klev_rec.RVI_PREMIUM);
528 l_klev_rec_sum.CAPITALIZED_INTEREST := l_klev_rec_sum.CAPITALIZED_INTEREST
529 + round_amount(l_currency_code,l_child_split_factor * p_klev_rec.CAPITALIZED_INTEREST);
530 l_klev_rec_sum.SUBSIDY_OVERRIDE_AMOUNT := l_klev_rec_sum.SUBSIDY_OVERRIDE_AMOUNT
531 + round_amount(l_currency_code,l_child_split_factor * p_klev_rec.SUBSIDY_OVERRIDE_AMOUNT);
532 l_klev_rec_sum.Expected_Asset_Cost := l_klev_rec_sum.Expected_Asset_Cost
533 + round_amount(l_currency_code,l_child_split_factor * p_klev_rec.Expected_Asset_Cost);
534 l_clev_rec_sum.price_unit := l_clev_rec_sum.price_unit
535 + round_amount(l_currency_code,l_child_split_factor * p_clev_rec.price_unit);
536 l_clev_rec_sum.price_negotiated := l_clev_rec_sum.price_negotiated
537 + round_amount(l_currency_code,l_child_split_factor * p_clev_rec.price_negotiated);
538 l_clev_rec_sum.price_negotiated_renewed := l_clev_rec_sum.price_negotiated_renewed
539 + round_amount(l_currency_code,l_child_split_factor * p_clev_rec.price_negotiated_renewed);
540
541 end loop;
542
543 --Bug# 6788253: Replaced l_child_split_factor with p_split_factor in below code that calculates split values
544 -- for the asset line to which rounding differences are applied.
545
546 IF l_split_by_unit ='N' THEN
547 --unit price to be changed in split by component only
548 l_clev_rec_out.price_unit := round_amount(l_currency_code,p_split_factor * p_clev_rec.price_unit )
549 + (p_clev_rec.price_unit - l_clev_rec_sum.price_unit);
550 l_clev_rec_out.price_negotiated := round_amount(l_currency_code,p_split_factor * p_clev_rec.price_negotiated )
551 + (p_clev_rec.price_negotiated - l_clev_rec_sum.price_negotiated);
552 l_clev_rec_out.price_negotiated_renewed :=
553 round_amount(l_currency_code,p_split_factor * p_clev_rec.price_negotiated_renewed )
554 + (p_clev_rec.price_negotiated_renewed - l_clev_rec_sum.price_negotiated_renewed);
555 END IF;
556
557
558 l_klev_rec_out.LAO_AMOUNT := round_amount(l_currency_code,p_split_factor * p_klev_rec.LAO_AMOUNT )
559 + p_klev_rec.LAO_AMOUNT - l_klev_rec_sum.LAO_AMOUNT;
560 l_klev_rec_out.ESTIMATED_OEC := round_amount(l_currency_code,p_split_factor * p_klev_rec.ESTIMATED_OEC )
561 + p_klev_rec.ESTIMATED_OEC - l_klev_rec_sum.ESTIMATED_OEC;
562 l_klev_rec_out.CAPITAL_REDUCTION := round_amount(l_currency_code,p_split_factor * p_klev_rec.CAPITAL_REDUCTION )
563 + p_klev_rec.CAPITAL_REDUCTION - l_klev_rec_sum.CAPITAL_REDUCTION;
564 l_klev_rec_out.FEE_CHARGE := round_amount(l_currency_code,p_split_factor * p_klev_rec.FEE_CHARGE )
565 + p_klev_rec.FEE_CHARGE - l_klev_rec_sum.FEE_CHARGE;
566 l_klev_rec_out.INITIAL_DIRECT_COST := round_amount(l_currency_code,p_split_factor * p_klev_rec.INITIAL_DIRECT_COST )
567 + p_klev_rec.INITIAL_DIRECT_COST - l_klev_rec_sum.INITIAL_DIRECT_COST;
568 l_klev_rec_out.AMOUNT_STAKE := round_amount(l_currency_code,p_split_factor * p_klev_rec.AMOUNT_STAKE )
569 + p_klev_rec.AMOUNT_STAKE - l_klev_rec_sum.AMOUNT_STAKE;
570 l_klev_rec_out.LRV_AMOUNT := round_amount(l_currency_code,p_split_factor * p_klev_rec.LRV_AMOUNT )
571 + p_klev_rec.LRV_AMOUNT - l_klev_rec_sum.LRV_AMOUNT;
572 l_klev_rec_out.COVERAGE := round_amount(l_currency_code,p_split_factor * p_klev_rec.COVERAGE )
573 + p_klev_rec.COVERAGE - l_klev_rec_sum.COVERAGE;
574 l_klev_rec_out.VENDOR_ADVANCE_PAID := round_amount(l_currency_code,p_split_factor * p_klev_rec.VENDOR_ADVANCE_PAID )
575 + p_klev_rec.VENDOR_ADVANCE_PAID - l_klev_rec_sum.VENDOR_ADVANCE_PAID;
576 l_klev_rec_out.TRADEIN_AMOUNT := round_amount(l_currency_code,p_split_factor * p_klev_rec.TRADEIN_AMOUNT )
577 + p_klev_rec.TRADEIN_AMOUNT - l_klev_rec_sum.TRADEIN_AMOUNT;
578 l_klev_rec_out.BOND_EQUIVALENT_YIELD := round_amount(l_currency_code,p_split_factor * p_klev_rec.BOND_EQUIVALENT_YIELD )
579 + p_klev_rec.BOND_EQUIVALENT_YIELD - l_klev_rec_sum.BOND_EQUIVALENT_YIELD;
580 l_klev_rec_out.TERMINATION_PURCHASE_AMOUNT := round_amount(l_currency_code,p_split_factor * p_klev_rec.TERMINATION_PURCHASE_AMOUNT )
581 + p_klev_rec.TERMINATION_PURCHASE_AMOUNT - l_klev_rec_sum.TERMINATION_PURCHASE_AMOUNT;
582 l_klev_rec_out.REFINANCE_AMOUNT := round_amount(l_currency_code,p_split_factor * p_klev_rec.REFINANCE_AMOUNT )
583 + p_klev_rec.REFINANCE_AMOUNT - l_klev_rec_sum.REFINANCE_AMOUNT;
584 l_klev_rec_out.REMARKETED_AMOUNT := round_amount(l_currency_code,p_split_factor * p_klev_rec.REMARKETED_AMOUNT )
585 + p_klev_rec.REMARKETED_AMOUNT - l_klev_rec_sum.REMARKETED_AMOUNT;
586 l_klev_rec_out.REMARKET_MARGIN := round_amount(l_currency_code,p_split_factor * p_klev_rec.REMARKET_MARGIN )
587 + p_klev_rec.REMARKET_MARGIN - l_klev_rec_sum.REMARKET_MARGIN;
588 l_klev_rec_out.REPURCHASED_AMOUNT := round_amount(l_currency_code,p_split_factor * p_klev_rec.REPURCHASED_AMOUNT )
589 + p_klev_rec.REPURCHASED_AMOUNT - l_klev_rec_sum.REPURCHASED_AMOUNT;
590 l_klev_rec_out.RESIDUAL_VALUE := round_amount(l_currency_code,p_split_factor * p_klev_rec.RESIDUAL_VALUE )
591 + p_klev_rec.RESIDUAL_VALUE - l_klev_rec_sum.RESIDUAL_VALUE;
592 l_klev_rec_out.APPRAISAL_VALUE := round_amount(l_currency_code,p_split_factor * p_klev_rec.APPRAISAL_VALUE )
593 + p_klev_rec.APPRAISAL_VALUE - l_klev_rec_sum.APPRAISAL_VALUE;
594 l_klev_rec_out.GAIN_LOSS := round_amount(l_currency_code,p_split_factor * p_klev_rec.GAIN_LOSS )
595 + p_klev_rec.GAIN_LOSS - l_klev_rec_sum.GAIN_LOSS;
596 l_klev_rec_out.FLOOR_AMOUNT := round_amount(l_currency_code,p_split_factor * p_klev_rec.FLOOR_AMOUNT )
597 + p_klev_rec.FLOOR_AMOUNT - l_klev_rec_sum.FLOOR_AMOUNT;
598 l_klev_rec_out.TRACKED_RESIDUAL := round_amount(l_currency_code,p_split_factor * p_klev_rec.TRACKED_RESIDUAL )
599 + p_klev_rec.TRACKED_RESIDUAL - l_klev_rec_sum.TRACKED_RESIDUAL;
600 l_klev_rec_out.AMOUNT := round_amount(l_currency_code,p_split_factor * p_klev_rec.AMOUNT )
601 + p_klev_rec.AMOUNT - l_klev_rec_sum.AMOUNT;
602 l_klev_rec_out.OEC := round_amount(l_currency_code,p_split_factor * p_klev_rec.OEC )
603 + p_klev_rec.OEC - l_klev_rec_sum.OEC;
604 l_klev_rec_out.CAPITAL_AMOUNT := round_amount(l_currency_code,p_split_factor * p_klev_rec.CAPITAL_AMOUNT )
605 + p_klev_rec.CAPITAL_AMOUNT - l_klev_rec_sum.CAPITAL_AMOUNT;
606 l_klev_rec_out.RESIDUAL_GRNTY_AMOUNT := round_amount(l_currency_code,p_split_factor * p_klev_rec.RESIDUAL_GRNTY_AMOUNT )
607 + p_klev_rec.RESIDUAL_GRNTY_AMOUNT - l_klev_rec_sum.RESIDUAL_GRNTY_AMOUNT;
608 l_klev_rec_out.RVI_PREMIUM := round_amount(l_currency_code,p_split_factor * p_klev_rec.RVI_PREMIUM )
609 + p_klev_rec.RVI_PREMIUM - l_klev_rec_sum.RVI_PREMIUM;
610 l_klev_rec_out.CAPITALIZED_INTEREST := round_amount(l_currency_code,p_split_factor * p_klev_rec.CAPITALIZED_INTEREST )
611 + p_klev_rec.CAPITALIZED_INTEREST - l_klev_rec_sum.CAPITALIZED_INTEREST;
612 l_klev_rec_out.SUBSIDY_OVERRIDE_AMOUNT := round_amount(l_currency_code,p_split_factor * p_klev_rec.SUBSIDY_OVERRIDE_AMOUNT )
613 + p_klev_rec.SUBSIDY_OVERRIDE_AMOUNT - l_klev_rec_sum.SUBSIDY_OVERRIDE_AMOUNT;
614 l_klev_rec_out.Expected_Asset_Cost := round_amount(l_currency_code,p_split_factor * p_klev_rec.Expected_Asset_Cost )
615 + p_klev_rec.Expected_Asset_Cost - l_klev_rec_sum.Expected_Asset_Cost;
616
617 x_klev_rec:=l_klev_rec_out;
618 x_clev_rec:=l_clev_rec_out;
619
620 OKL_API.END_ACTIVITY (x_msg_count, x_msg_data);
621
622 EXCEPTION
623
624 WHEN OKL_API.G_EXCEPTION_ERROR THEN
625 l_return_status := OKL_API.HANDLE_EXCEPTIONS(
626 l_api_name,
627 G_PKG_NAME,
628 'OKL_API.G_RET_STS_ERROR',
629 x_msg_count,
630 x_msg_data,
631 '_PVT');
632 WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
633 l_return_status :=OKL_API.HANDLE_EXCEPTIONS(
634 l_api_name,
635 G_PKG_NAME,
636 'OKL_API.G_RET_STS_UNEXP_ERROR',
637 x_msg_count,
638 x_msg_data,
639 '_PVT');
640 WHEN OTHERS THEN
641 l_return_status :=OKL_API.HANDLE_EXCEPTIONS(
642 l_api_name,
643 G_PKG_NAME,
644 'OTHERS',
645 x_msg_count,
646 x_msg_data,
647 '_PVT');
648
649 END get_split_round_amount;
650
651 --Bug# 6344223
652 ------------------------------------------------------------------------------
653 --Bug# 6344223
654 --API Name : adjust_unit_cost
655 --Description : API to adjust the unit price when payment type is
656 -- PRINCIPAL PAYMENT.
657 --History :
658 -- 25-Jul-2007 rirawat Creation
659 --End of Comments
660 ------------------------------------------------------------------------------
661
662 procedure adjust_unit_cost( p_api_version IN NUMBER,
663 p_init_msg_list IN VARCHAR2,
664 x_return_status OUT NOCOPY VARCHAR2,
665 x_msg_count OUT NOCOPY NUMBER,
666 x_msg_data OUT NOCOPY VARCHAR2,
667 p_cle_id NUMBER,
668 p_txdv_rec IN txdv_rec_type,
669 p_txlv_rec IN txlv_rec_type
670 ) IS
671
672
673 l_return_status VARCHAR2(1) DEFAULT OKL_API.G_RET_STS_SUCCESS;
674 l_api_name CONSTANT VARCHAR2(30) := 'adjust_unit_cost';
675 l_api_version CONSTANT NUMBER := 1.0;
676
677 l_fa_line_id NUMBER;
678 l_chr_id NUMBER;
679 l_tot_principal_payment NUMBER;
680 l_principal_payment_found varchar2(1) := 'N';
681 l_rule_id number;
682 l_curr_cle_id NUMBER;
683
684
685 rec_count NUMBER;
686 subtype klev_tbl_type is OKL_CONTRACT_PUB.klev_tbl_type;
687 subtype clev_tbl_type is OKL_OKC_MIGRATION_PVT.clev_tbl_type;
688
689 l_clev_price_tbl clev_tbl_type;
690 lx_clev_price_tbl clev_tbl_type;
691 l_klev_price_tbl klev_tbl_type;
692 lx_klev_price_tbl klev_tbl_type;
693
694 CURSOR k_line_curs(p_fa_line_id IN NUMBER) IS
695 SELECT cle.cle_id , sts.ste_code
696 FROM okc_k_lines_b cle , OKC_STATUSES_B sts
697 WHERE id = p_fa_line_id
698 and cle.sts_code = sts.code;
699
700 l_ste_code OKC_STATUSES_B.STE_CODE%TYPE;
701
702 --cursor to get model and fixed asset lines
703 cursor l_cleb_csr (p_cle_id in number,
704 p_chr_id in number,
705 p_lty_code in varchar2) is
706 select cleb.id,
707 cleb.price_unit
708 from okc_k_lines_b cleb,
709 okc_line_styles_b lseb
710 where cleb.cle_id = p_cle_id
711 and cleb.dnz_chr_id = p_chr_id
712 and cleb.lse_id = lseb.id
713 and lseb.lty_code = p_lty_code;
714
715 l_cleb_rec l_cleb_csr%ROWTYPE;
716 CURSOR l_pmnt_strm_check(p_chrId NUMBER,
717 p_cle_id NUMBER
718 ) IS
719 SELECT crl.id
720 FROM OKC_RULE_GROUPS_B crg,
721 OKC_RULES_B crl,
722 OKL_STRM_TYPE_B stty
723 WHERE stty.id = crl.object1_id1
724 AND stty.stream_type_purpose = 'PRINCIPAL_PAYMENT'
725 AND crl.rgp_id = crg.id
726 AND crg.RGD_CODE = 'LALEVL'
727 AND crl.RULE_INFORMATION_CATEGORY = 'LASLH'
728 AND crg.dnz_chr_id = p_chrId
729 and cle_id = p_cle_id;
730
731 CURSOR l_pmnt_strm_check2(
732 rgcode OKC_RULE_GROUPS_B.RGD_CODE%TYPE,
733 rlcat OKC_RULES_B.RULE_INFORMATION_CATEGORY%TYPE,
734 pmnt_strm_purpose OKL_STRM_TYPE_B.STREAM_TYPE_PURPOSE%TYPE,
735 chrId NUMBER) IS
736 SELECT crg.cle_id,
737 crl.id,
738 crl.object1_id1,
739 crl.RULE_INFORMATION1,
740 crl.RULE_INFORMATION2,
741 crl.RULE_INFORMATION3,
742 crl.RULE_INFORMATION4,
743 crl.RULE_INFORMATION5,
744 crl.RULE_INFORMATION6,
745 crl.RULE_INFORMATION10,
746 crl.RULE_INFORMATION11
747 FROM OKC_RULE_GROUPS_B crg,
748 OKC_RULES_B crl,
749 OKL_STRM_TYPE_B stty
750 WHERE stty.id = crl.object1_id1
751 AND stty.stream_type_purpose = pmnt_strm_purpose
752 AND crl.rgp_id = crg.id
753 AND crg.RGD_CODE = rgcode
754 AND crl.RULE_INFORMATION_CATEGORY = rlcat
755 AND crg.dnz_chr_id = chrId;
756
757 l_pmnt_strm_check_rec2 l_pmnt_strm_check2%ROWTYPE;
758
759 CURSOR l_pmnt_lns_in_hdr(p_id OKC_RULES_B.ID%TYPE,
760 chrId NUMBER) IS
761 SELECT
762 crl2.object1_id1,
763 crl2.object1_id2,
764 crl2.rule_information2,
765 NVL(crl2.rule_information3,0) rule_information3,
766 crl2.rule_information4,
767 crl2.rule_information5,
768 crl2.rule_information6,
769 crl2.rule_information7,
770 crl2.rule_information8,
771 crl2.rule_information10
772 FROM OKC_RULES_B crl1, OKC_RULES_B crl2
773 WHERE crl1.id = crl2.object2_id1
774 AND crl1.id = p_id
775 AND crl2.RULE_INFORMATION_CATEGORY = 'LASLL'
776 AND crl1.RULE_INFORMATION_CATEGORY = 'LASLH'
777 AND crl1.dnz_chr_id = chrId
778 AND crl2.dnz_chr_id = chrId
779 ORDER BY crl2.rule_information2 ASC;
780
781
782 CURSOR l_pmnt_lns_in_hdr2(p_id OKC_RULES_B.ID%TYPE, chrId NUMBER) IS
783 SELECT
784 crl2.object1_id1,
785 crl2.object1_id2,
786 crl2.rule_information2,
787 NVL(crl2.rule_information3,0) rule_information3,
788 crl2.rule_information4,
789 crl2.rule_information5,
790 crl2.rule_information6,
791 crl2.rule_information7,
792 crl2.rule_information8,
793 crl2.rule_information10
794 FROM OKC_RULES_B crl1, OKC_RULES_B crl2
795 WHERE crl1.id = crl2.object2_id1
796 AND crl1.id = p_id
797 AND crl2.RULE_INFORMATION_CATEGORY = 'LASLL'
798 AND crl1.RULE_INFORMATION_CATEGORY = 'LASLH'
799 AND crl1.dnz_chr_id = chrId
800 AND crl2.dnz_chr_id = chrId
801 ORDER BY crl2.rule_information2 ASC;
802
803 l_pmnt_lns_in_hdr_rec2 l_pmnt_lns_in_hdr2%ROWTYPE;
804
805 cursor l_kleb_csr (p_cle_id in number) IS
806 select CAPITALIZE_DOWN_PAYMENT_YN ,
807 CAPITAL_REDUCTION
808 from okl_k_lines
809 where id=p_cle_id ;
810
811 l_kleb_rec l_kleb_csr%ROWTYPE;
812
813 l_capitalize_downpayment_yn VARCHAR2(1):='N';
814 l_capital_reduction NUMBER;
815
816 l_pmnt_strm_check_rec l_pmnt_strm_check%ROWTYPE;
817 l_pmnt_lns_in_hdr_rec l_pmnt_lns_in_hdr%ROWTYPE;
818
819
820 l_child_unit_cost NUMBER;
821 l_child_quantity NUMBER;
822 l_amort_subsidy_amount NUMBER;
823 l_total_amount NUMBER;
824 l_tot_unsched_prin_payment NUMBER;
825
826 FUNCTION tot_unsched_prin_payment(
827 x_return_status OUT NOCOPY VARCHAR2,
828 p_chr_id IN NUMBER,
829 p_kle_id IN NUMBER) RETURN NUMBER IS
830 l_tot_amount NUMBER := 0;
831 BEGIN
832 x_return_status := Okl_Api.G_RET_STS_SUCCESS;
833 FOR l_pmnt_strm_check_rec2 IN l_pmnt_strm_check2('LALEVL','LASLH','UNSCHEDULED_PRINCIPAL_PAYMENT', p_chr_id)
834 LOOP
835 IF (l_pmnt_strm_check_rec2.cle_id = p_kle_id) THEN
836 FOR l_pmnt_lns_in_hdr_rec2 IN l_pmnt_lns_in_hdr2(l_pmnt_strm_check_rec2.id ,p_chr_id)
837 LOOP
838 l_tot_amount := l_tot_amount + NVL(l_pmnt_lns_in_hdr_rec2.rule_information8,0);
839 END LOOP;
840 END IF;
841 END LOOP;
842
843 RETURN(l_tot_amount);
844
845 EXCEPTION WHEN OTHERS THEN
846 --print('Exception In tot_unsched_prin_payment...sqlcode=' || sqlcode || ' sqlerrm=' || sqlerrm);
847 x_return_status := Okl_Api.G_RET_STS_ERROR;
848 RETURN(0);
849 END; -- tot_unsched_prin_payment
850
851
852 begin
853
854 -- Call start_activity to create savepoint, check compatibility
855 -- and initialize message list
856 x_return_status := OKL_API.START_ACTIVITY (
857 l_api_name
858 ,p_init_msg_list
859 ,'_PVT'
860 ,x_return_status);
861 -- Check if activity started successfully
862 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
863 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
864 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
865 RAISE OKL_API.G_EXCEPTION_ERROR;
866 END IF;
867
868 l_fa_line_id:= p_cle_id;
869 l_chr_id:= p_txlv_rec.dnz_khr_id;
870
871 OPEN k_line_curs(l_fa_line_id);
872 FETCH k_line_curs INTO l_curr_cle_id,l_ste_code;
873 IF k_line_curs%NOTFOUND THEN
874 NULL;
875 END IF;
876 CLOSE k_line_curs;
877
878 IF l_ste_code NOT IN ('CANCELLED','TERMINATED','HOLD','EXPIRED') THEN
879
880 l_tot_principal_payment:=0;
881
882 --check whether principal payment exists
883
884 l_principal_payment_found:='Y';
885
886 OPEN l_pmnt_strm_check(l_chr_id,l_curr_cle_id);
887 FETCH l_pmnt_strm_check into l_rule_id;
888 IF l_pmnt_strm_check%NOTFOUND THEN
889 l_principal_payment_found:='N';
890 ELSE
891 l_principal_payment_found:='Y';
892 END IF;
893 close l_pmnt_strm_check;
894
895
896 IF l_principal_payment_found='Y' THEN
897 --get the total principal payment amount
898 FOR l_pmnt_lns_in_hdr_rec IN l_pmnt_lns_in_hdr(l_rule_id ,l_chr_id)
899 LOOP
900 l_tot_principal_payment := l_tot_principal_payment +
901 NVL(l_pmnt_lns_in_hdr_rec.rule_information3,0) * NVL(l_pmnt_lns_in_hdr_rec.rule_information6, 0) +
902 NVL(l_pmnt_lns_in_hdr_rec.rule_information8, 0);
903 END LOOP;
904
905 ---------get subsidy amount if any--
906 l_amort_subsidy_amount :=0;
907 Okl_Subsidy_Process_Pvt.get_asset_subsidy_amount(
908 p_api_version => 1.0,
909 p_init_msg_list => Okl_Api.G_FALSE,
910 x_return_status => l_return_status,
911 x_msg_count => x_msg_count,
912 x_msg_data => x_msg_data,
913 p_asset_cle_id => l_curr_cle_id,
914 p_accounting_method => 'AMORTIZE',
915 x_subsidy_amount => l_amort_subsidy_amount);
916
917 l_amort_subsidy_amount:=NVL(l_amort_subsidy_amount,0);
918
919
920 -- get capitalized downpayment amount --------
921
922 l_capital_reduction :=0;
923
924 open l_kleb_csr(p_cle_id => l_curr_cle_id);
925 fetch l_kleb_csr into l_kleb_rec;
926 If l_kleb_csr%NOTFOUND THEN
927 l_capital_reduction :=0;
928 Else
929 IF NVL(l_kleb_rec.CAPITALIZE_DOWN_PAYMENT_YN,'X')='Y' THEN
930 l_capital_reduction := NVL(l_kleb_rec.CAPITAL_REDUCTION,0);
931 END IF;
932 End if;
933 -----------------------------------
934 --Total Unscheduled Principal Payment
935 l_tot_unsched_prin_payment :=
936 tot_unsched_prin_payment(l_return_status,
937 l_chr_id, l_curr_cle_id);
938
939 --total amount
940 l_total_amount := l_amort_subsidy_amount + l_tot_principal_payment
941 +l_capital_reduction + l_tot_unsched_prin_payment ;
942
943
944 IF NVL(p_txlv_rec.SPLIT_INTO_SINGLES_FLAG,'X')='Y' THEN
945 l_child_quantity:=1;
946 ELSE
947 l_child_quantity := p_txdv_rec.quantity;
948 END IF;
949
950 --evaluate the unit cost
951 l_child_unit_cost := l_total_amount/l_child_quantity ;
952
953
954 --Update the contract line with the unit cost
955
956 rec_count:=0;
957 rec_count := rec_count+1;
958 l_clev_price_tbl(rec_count).id := l_fa_line_id;
959 l_klev_price_tbl(rec_count).id := l_fa_line_id;
960 l_clev_price_tbl(rec_count).price_unit := l_child_unit_cost;
961
962 open l_cleb_csr(p_cle_id => l_curr_cle_id,
963 p_chr_id => l_chr_id,
964 p_lty_code => 'ITEM');
965 fetch l_cleb_csr into l_cleb_rec;
966 If l_cleb_csr%NOTFOUND then
967 Null;
968 Else
969 rec_count := rec_count+1;
970 l_clev_price_tbl(rec_count).id := l_cleb_rec.id;
971 l_klev_price_tbl(rec_count).id := l_cleb_rec.id;
972 l_clev_price_tbl(rec_count).price_unit := l_child_unit_cost;
973
974 End If;
975 close l_cleb_csr;
976
977 --Call api to update line
978 OKL_CONTRACT_PUB.update_contract_line(
979 p_api_version => p_api_version,
980 p_init_msg_list => p_init_msg_list,
981 x_return_status => x_return_status,
982 x_msg_count => x_msg_count,
983 x_msg_data => x_msg_data,
984 p_clev_tbl => l_clev_price_tbl,
985 p_klev_tbl => l_klev_price_tbl,
986 x_clev_tbl => lx_clev_price_tbl,
987 x_klev_tbl => lx_klev_price_tbl);
988
989 --dbms_output.put_line('After updating contract line :'||x_return_status);
990 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
991 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
992 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
993 RAISE OKL_API.G_EXCEPTION_ERROR;
994 END IF;
995 END IF; -- l_principal_payment_found
996 END IF; --l_ste_code
997
998 EXCEPTION
999 WHEN OKL_API.G_EXCEPTION_ERROR THEN
1000 x_return_status := OKL_API.HANDLE_EXCEPTIONS(
1001 l_api_name,
1002 G_PKG_NAME,
1003 'OKL_API.G_RET_STS_ERROR',
1004 x_msg_count,
1005 x_msg_data,
1006 '_PVT');
1007 WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
1008 x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
1009 l_api_name,
1010 G_PKG_NAME,
1011 'OKL_API.G_RET_STS_UNEXP_ERROR',
1012 x_msg_count,
1013 x_msg_data,
1014 '_PVT');
1015 WHEN OTHERS THEN
1016 x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
1017 l_api_name,
1018 G_PKG_NAME,
1019 'OTHERS',
1020 x_msg_count,
1021 x_msg_data,
1022 '_PVT');
1023 end adjust_unit_cost;
1024
1025
1026 --Bug# 6344223
1027 ------------------------------------------------------------------------------
1028 --Bug# 6344223
1029 --API Name : SYNC_STREAMS
1030 --Description : API to perform stream generation processing for Split asset.
1031 --History :
1032 -- 25-Jul-2007 rirawat Creation
1033 --End of Comments
1034 ------------------------------------------------------------------------------
1035 PROCEDURE sync_streams(p_api_version IN NUMBER,
1036 p_init_msg_list IN VARCHAR2,
1037 x_return_status OUT NOCOPY VARCHAR2,
1038 x_msg_count OUT NOCOPY NUMBER,
1039 x_msg_data OUT NOCOPY VARCHAR2,
1040 p_chr_id IN NUMBER ) IS
1041
1042
1043 l_api_name CONSTANT VARCHAR2(30) := 'sync_streams';
1044 l_api_version CONSTANT NUMBER := 1.0;
1045
1046 l_trx_number NUMBER;
1047 l_trx_status VARCHAR2(100);
1048 BEGIN
1049 -- Call start_activity to create savepoint, check compatibility
1050 -- and initialize message list
1051 x_return_status := OKL_API.START_ACTIVITY (
1052 l_api_name
1053 ,p_init_msg_list
1054 ,'_PVT'
1055 ,x_return_status);
1056 -- Check if activity started successfully
1057 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
1058 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
1059 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
1060 RAISE OKL_API.G_EXCEPTION_ERROR;
1061 END IF;
1062
1063 okl_contract_status_pub.update_contract_status(
1064 p_api_version => l_api_version,
1065 p_init_msg_list => p_init_msg_list,
1066 x_return_status => x_return_status,
1067 x_msg_count => x_msg_count,
1068 x_msg_data => x_msg_data,
1069 p_khr_status => 'PASSED',
1070 p_chr_id => p_chr_id);
1071 IF (x_return_status = Okl_Api.G_RET_STS_UNEXP_ERROR) THEN
1072 RAISE Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR;
1073 ELSIF (x_return_status = Okl_Api.G_RET_STS_ERROR) THEN
1074 RAISE Okl_Api.G_EXCEPTION_ERROR;
1075 END IF;
1076
1077 --cascade status to lines
1078 okl_contract_status_pub.cascade_lease_status(
1079 p_api_version => l_api_version,
1080 p_init_msg_list => p_init_msg_list,
1081 x_return_status => x_return_status,
1082 x_msg_count => x_msg_count,
1083 x_msg_data => x_msg_data,
1084 p_chr_id => p_chr_id);
1085
1086 IF (x_return_status = Okl_Api.G_RET_STS_UNEXP_ERROR) THEN
1087 RAISE Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR;
1088 ELSIF (x_return_status = Okl_Api.G_RET_STS_ERROR) THEN
1089 RAISE Okl_Api.G_EXCEPTION_ERROR;
1090 END IF;
1091
1092 OKL_LA_STREAM_PUB.GEN_INTR_EXTR_STREAM (
1093 p_api_version => l_api_version,
1094 p_init_msg_list => p_init_msg_list,
1095 x_return_status => x_return_status,
1096 x_msg_count => x_msg_count,
1097 x_msg_data => x_msg_data,
1098 p_khr_id => p_chr_id,
1099 p_generation_ctx_code => 'AUTH',
1100 x_trx_number => l_trx_number,
1101 x_trx_status => l_trx_status);
1102
1103 -- check if activity started successfully
1104 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
1105 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
1106 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
1107 RAISE OKL_API.G_EXCEPTION_ERROR;
1108 END IF;
1109 OKL_API.END_ACTIVITY (x_msg_count,
1110 x_msg_data);
1111 EXCEPTION
1112 WHEN OKL_API.G_EXCEPTION_ERROR THEN
1113 x_return_status := OKL_API.HANDLE_EXCEPTIONS(
1114 l_api_name,
1115 G_PKG_NAME,
1116 'OKL_API.G_RET_STS_ERROR',
1117 x_msg_count,
1118 x_msg_data,
1119 '_PVT');
1120 WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
1121 x_return_status := OKL_API.HANDLE_EXCEPTIONS(
1122 l_api_name,
1123 G_PKG_NAME,
1124 'OKL_API.G_RET_STS_UNEXP_ERROR',
1125 x_msg_count,
1126 x_msg_data,
1127 '_PVT');
1128 WHEN OTHERS THEN
1129 x_return_status := OKL_API.HANDLE_EXCEPTIONS(
1130 l_api_name,
1131 G_PKG_NAME,
1132 'OTHERS',
1133 x_msg_count,
1134 x_msg_data,
1135 '_PVT');
1136
1137 END sync_streams;
1138
1139
1140
1141 --Bug# 6344223
1142 ------------------------------------------------------------------------------
1143 --Bug# 6344223
1144 --API Name : SPLIT_ASSET_AFTER_YIELD
1145 --Description : API to perform post stream generation processing for Split asset.
1146 --History :
1147 -- 25-Jul-2007 bkatraga Creation
1148 --End of Comments
1149 ------------------------------------------------------------------------------
1150 PROCEDURE SPLIT_ASSET_AFTER_YIELD (p_api_version IN NUMBER,
1151 p_init_msg_list IN VARCHAR2 DEFAULT OKL_API.G_FALSE,
1152 x_return_status OUT NOCOPY VARCHAR2,
1153 x_msg_count OUT NOCOPY NUMBER,
1154 x_msg_data OUT NOCOPY VARCHAR2,
1155 p_chr_id IN NUMBER) IS
1156
1157 l_return_status VARCHAR2(1) DEFAULT OKL_API.G_RET_STS_SUCCESS;
1158 l_api_name CONSTANT VARCHAR2(30) := 'SPLIT_ASSET_AFTER_YIELD';
1159 l_api_version CONSTANT NUMBER := 1.0;
1160 l_split_trx_flag VARCHAR2(1);
1161 l_accrual_rec OKL_GENERATE_ACCRUALS_PVT.adjust_accrual_rec_type;
1162 l_stream_tbl OKL_GENERATE_ACCRUALS_PVT.stream_tbl_type;
1163 l_chr_secure VARCHAR2(3) := OKL_API.G_FALSE;
1164 l_inv_agmt_chr_id_tbl OKL_SECURITIZATION_PVT.inv_agmt_chr_id_tbl_type;
1165 l_inv_accrual_rec OKL_GENERATE_ACCRUALS_PVT.adjust_accrual_rec_type;
1166 l_inv_stream_tbl OKL_GENERATE_ACCRUALS_PVT.stream_tbl_type;
1167 l_trxv_rec trxv_rec_type;
1168 lx_trxv_rec trxv_rec_type;
1169 l_split_trans_id OKL_TRX_ASSETS.ID%TYPE;
1170 l_trx_number OKL_TRX_CONTRACTS.TRX_NUMBER%TYPE := null; -- MGAAP
1171 l_trx_reason_asset_split VARCHAR2(20) := OKL_SECURITIZATION_PVT.G_TRX_REASON_ASSET_SPLIT;
1172
1173 --Cursor to check whether split asset transaction is in progress for the contract
1174 CURSOR check_split_trx_csr IS
1175 SELECT tas.id
1176 FROM OKL_TXL_ASSETS_B txl, OKL_TRX_ASSETS tas
1177 WHERE txl.tal_type= 'ALI'
1178 AND txl.dnz_khr_id = p_chr_id
1179 AND txl.tas_id = tas.id
1180 AND tas.tas_type = 'ALI'
1181 AND tas.tsu_code = 'ENTERED';
1182
1183 -- MGAAP start 7263041
1184 CURSOR check_csr(p_chr_id NUMBER) IS
1185 SELECT A.MULTI_GAAP_YN,
1186 B.REPORTING_PDT_ID
1187 FROM OKL_K_HEADERS A,
1188 OKL_PRODUCTS B
1189 WHERE A.ID = p_chr_id
1190 AND A.PDT_ID = B.ID;
1191
1192 l_multi_gaap_yn OKL_K_HEADERS.MULTI_GAAP_YN%TYPE;
1193 l_reporting_pdt_id OKL_PRODUCTS.REPORTING_PDT_ID%TYPE;
1194 -- MGAAP start 7263041
1195
1196 --Bug# 9191475
1197 lx_trxnum_tbl OKL_GENERATE_ACCRUALS_PVT.trxnum_tbl_type;
1198 l_trxnum_init_tbl OKL_GENERATE_ACCRUALS_PVT.trxnum_tbl_type;
1199
1200 BEGIN
1201 -- Call start_activity to create savepoint, check compatibility
1202 -- and initialize message list
1203 x_return_status := OKL_API.START_ACTIVITY (
1204 l_api_name
1205 ,p_init_msg_list
1206 ,'_PVT'
1207 ,x_return_status);
1208 -- Check if activity started successfully
1209 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
1210 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
1211 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
1212 RAISE OKL_API.G_EXCEPTION_ERROR;
1213 END IF;
1214
1215 -- MGAAP start 7263041
1216 OPEN check_csr(p_chr_id);
1217 FETCH check_csr
1218 INTO l_multi_gaap_yn, l_reporting_pdt_id;
1219 CLOSE check_csr;
1220 -- MGAAP end 7263041
1221
1222 OPEN check_split_trx_csr;
1223 FETCH check_split_trx_csr INTO l_split_trans_id;
1224 CLOSE check_split_trx_csr;
1225
1226 --Split asset transaction exists for the contract
1227 IF(l_split_trans_id IS NOT NULL) THEN
1228 okl_contract_status_pub.update_contract_status(
1229 p_api_version => p_api_version,
1230 p_init_msg_list => p_init_msg_list,
1231 x_return_status => x_return_status,
1232 x_msg_count => x_msg_count,
1233 x_msg_data => x_msg_data,
1234 p_khr_status => 'BOOKED',
1235 p_chr_id => p_chr_id);
1236 IF (x_return_status = Okl_Api.G_RET_STS_UNEXP_ERROR) THEN
1237 RAISE Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR;
1238 ELSIF (x_return_status = Okl_Api.G_RET_STS_ERROR) THEN
1239 RAISE Okl_Api.G_EXCEPTION_ERROR;
1240 END IF;
1241
1242 --cascade status to lines
1243 okl_contract_status_pub.cascade_lease_status(
1244 p_api_version => p_api_version,
1245 p_init_msg_list => p_init_msg_list,
1246 x_return_status => x_return_status,
1247 x_msg_count => x_msg_count,
1248 x_msg_data => x_msg_data,
1249 p_chr_id => p_chr_id);
1250 IF (x_return_status = Okl_Api.G_RET_STS_UNEXP_ERROR) THEN
1251 RAISE Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR;
1252 ELSIF (x_return_status = Okl_Api.G_RET_STS_ERROR) THEN
1253 RAISE Okl_Api.G_EXCEPTION_ERROR;
1254 END IF;
1255
1256 --Bug# 6336455
1257 -- R12B Authoring OA Migration
1258 -- Update the status of the Submit Contract task to Complete
1259 OKL_BOOK_CONTROLLER_PVT.update_book_controller_trx(
1260 p_api_version => p_api_version,
1261 p_init_msg_list => p_init_msg_list,
1262 x_return_status => x_return_status,
1263 x_msg_count => x_msg_count,
1264 x_msg_data => x_msg_data,
1265 p_khr_id => p_chr_id ,
1266 p_prog_short_name => OKL_BOOK_CONTROLLER_PVT.G_SUBMIT_CONTRACT,
1267 p_progress_status => OKL_BOOK_CONTROLLER_PVT.G_PROG_STS_COMPLETE);
1268
1269 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
1270 Raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
1271 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) then
1272 Raise OKL_API.G_EXCEPTION_ERROR;
1273 END IF;
1274
1275 OKL_CONTRACT_REBOOK_PVT.create_billing_adjustment(
1276 p_api_version => p_api_version,
1277 p_init_msg_list => p_init_msg_list,
1278 x_return_status => x_return_status,
1279 x_msg_count => x_msg_count,
1280 x_msg_data => x_msg_data,
1281 p_rbk_khr_id => p_chr_id,
1282 p_orig_khr_id => p_chr_id,
1283 p_trx_id => l_split_trans_id,
1284 p_trx_date => sysdate);
1285 IF (x_return_status = Okl_Api.G_RET_STS_UNEXP_ERROR) THEN
1286 RAISE Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR;
1287 ELSIF (x_return_status = Okl_Api.G_RET_STS_ERROR) THEN
1288 RAISE Okl_Api.G_EXCEPTION_ERROR;
1289 END IF;
1290
1291 OKL_STREAMS_SEC_PVT.RESET_REPO_STREAMS; -- MGAAP 7263041
1292 OKL_CONTRACT_REBOOK_PVT.calc_accrual_adjustment(
1293 p_api_version => p_api_version,
1294 p_init_msg_list => p_init_msg_list,
1295 x_return_status => x_return_status,
1296 x_msg_count => x_msg_count,
1297 x_msg_data => x_msg_data,
1298 p_rbk_khr_id => p_chr_id,
1299 p_orig_khr_id => p_chr_id,
1300 p_trx_id => l_split_trans_id,
1301 p_trx_date => sysdate,
1302 x_accrual_rec => l_accrual_rec,
1303 x_stream_tbl => l_stream_tbl,
1304 p_trx_tbl_code => 'TAS',
1305 p_trx_type => 'ALI');
1306 IF (x_return_status = Okl_Api.G_RET_STS_UNEXP_ERROR) THEN
1307 RAISE Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR;
1308 ELSIF (x_return_status = Okl_Api.G_RET_STS_ERROR) THEN
1309 RAISE Okl_Api.G_EXCEPTION_ERROR;
1310 END IF;
1311
1312 IF (l_stream_tbl.COUNT > 0) THEN
1313 OKL_GENERATE_ACCRUALS_PVT.ADJUST_ACCRUALS (
1314 p_api_version => p_api_version,
1315 p_init_msg_list => p_init_msg_list,
1316 x_return_status => x_return_status,
1317 x_msg_count => x_msg_count,
1318 x_msg_data => x_msg_data ,
1319 --Bug# 9191475
1320 --x_trx_number => l_trx_number,
1321 x_trx_tbl => lx_trxnum_tbl,
1322 p_accrual_rec => l_accrual_rec,
1323 p_stream_tbl => l_stream_tbl);
1324 IF (x_return_status = Okl_Api.G_RET_STS_UNEXP_ERROR) THEN
1325 RAISE Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR;
1326 ELSIF (x_return_status = Okl_Api.G_RET_STS_ERROR) THEN
1327 RAISE Okl_Api.G_EXCEPTION_ERROR;
1328 END IF;
1329 END IF;
1330
1331 -- MGAAP start 7263041
1332 OKL_STREAMS_SEC_PVT.SET_REPO_STREAMS; -- MGAAP 7263041
1333 OKL_CONTRACT_REBOOK_PVT.calc_accrual_adjustment(
1334 p_api_version => p_api_version,
1335 p_init_msg_list => p_init_msg_list,
1336 x_return_status => x_return_status,
1337 x_msg_count => x_msg_count,
1338 x_msg_data => x_msg_data,
1339 p_rbk_khr_id => p_chr_id,
1340 p_orig_khr_id => p_chr_id,
1341 p_trx_id => l_split_trans_id,
1342 p_trx_date => sysdate,
1343 x_accrual_rec => l_accrual_rec,
1344 x_stream_tbl => l_stream_tbl,
1345 p_trx_tbl_code => 'TAS',
1346 p_trx_type => 'ALI');
1347
1348 OKL_STREAMS_SEC_PVT.RESET_REPO_STREAMS; -- MGAAP 7263041
1349 IF (x_return_status = Okl_Api.G_RET_STS_UNEXP_ERROR) THEN
1350 RAISE Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR;
1351 ELSIF (x_return_status = Okl_Api.G_RET_STS_ERROR) THEN
1352 RAISE Okl_Api.G_EXCEPTION_ERROR;
1353 END IF;
1354
1355 IF (l_stream_tbl.COUNT > 0) THEN
1356 --Bug# 9191475
1357 --l_accrual_rec.trx_number := l_trx_number;
1358 OKL_GENERATE_ACCRUALS_PVT.ADJUST_ACCRUALS (
1359 p_api_version => p_api_version,
1360 p_init_msg_list => p_init_msg_list,
1361 x_return_status => x_return_status,
1362 x_msg_count => x_msg_count,
1363 x_msg_data => x_msg_data ,
1364 --Bug# 9191475
1365 --x_trx_number => l_trx_number,
1366 x_trx_tbl => lx_trxnum_tbl,
1367 p_accrual_rec => l_accrual_rec,
1368 p_stream_tbl => l_stream_tbl,
1369 p_representation_type => 'SECONDARY');
1370 IF (x_return_status = Okl_Api.G_RET_STS_UNEXP_ERROR) THEN
1371 RAISE Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR;
1372 ELSIF (x_return_status = Okl_Api.G_RET_STS_ERROR) THEN
1373 RAISE Okl_Api.G_EXCEPTION_ERROR;
1374 END IF;
1375 END IF;
1376 -- MGAAP end 7263041
1377
1378 okl_securitization_pvt.check_khr_securitized(
1379 p_api_version => p_api_version,
1380 p_init_msg_list => p_init_msg_list,
1381 x_return_status => x_return_status,
1382 x_msg_count => x_msg_count,
1383 x_msg_data => x_msg_data,
1384 p_khr_id => p_chr_id,
1385 p_effective_date => sysdate,
1386 x_value => l_chr_secure,
1387 x_inv_agmt_chr_id_tbl => l_inv_agmt_chr_id_tbl);
1388 IF (x_return_status = Okl_Api.G_RET_STS_UNEXP_ERROR) THEN
1389 RAISE Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR;
1390 ELSIF (x_return_status = Okl_Api.G_RET_STS_ERROR) THEN
1391 RAISE Okl_Api.G_EXCEPTION_ERROR;
1392 END IF;
1393
1394 --Bug# 6788253
1395 IF l_chr_secure = OKL_API.G_TRUE THEN
1396 OKL_SECURITIZATION_PVT.modify_pool_contents(
1397 p_api_version => p_api_version,
1398 p_init_msg_list => p_init_msg_list,
1399 p_transaction_reason => l_trx_reason_asset_split,
1400 p_khr_id => p_chr_id,
1401 p_transaction_date => SYSDATE,
1402 p_effective_date => SYSDATE,
1403 x_return_status => x_return_status,
1404 x_msg_count => x_msg_count,
1405 x_msg_data => x_msg_data);
1406 IF (x_return_status = Okl_Api.G_RET_STS_UNEXP_ERROR) THEN
1407 RAISE Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR;
1408 ELSIF (x_return_status = Okl_Api.G_RET_STS_ERROR) THEN
1409 RAISE Okl_Api.G_EXCEPTION_ERROR;
1410 END IF;
1411
1412 OKL_STREAM_GENERATOR_PVT.create_disb_streams(
1413 p_api_version => p_api_version,
1414 p_init_msg_list => p_init_msg_list,
1415 x_return_status => x_return_status,
1416 x_msg_count => x_msg_count,
1417 x_msg_data => x_msg_data,
1418 p_contract_id => p_chr_id);
1419 IF (x_return_status = Okl_Api.G_RET_STS_UNEXP_ERROR) THEN
1420 RAISE Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR;
1421 ELSIF (x_return_status = Okl_Api.G_RET_STS_ERROR) THEN
1422 RAISE Okl_Api.G_EXCEPTION_ERROR;
1423 END IF;
1424
1425 OKL_STREAM_GENERATOR_PVT.create_pv_streams(
1426 p_api_version => p_api_version,
1427 p_init_msg_list => p_init_msg_list,
1428 x_return_status => x_return_status,
1429 x_msg_count => x_msg_count,
1430 x_msg_data => x_msg_data,
1431 p_contract_id => p_chr_id);
1432 IF (x_return_status = Okl_Api.G_RET_STS_UNEXP_ERROR) THEN
1433 RAISE Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR;
1434 ELSIF (x_return_status = Okl_Api.G_RET_STS_ERROR) THEN
1435 RAISE Okl_Api.G_EXCEPTION_ERROR;
1436 END IF;
1437
1438 OKL_ACCRUAL_SEC_PVT.CREATE_STREAMS(
1439 p_api_version => p_api_version,
1440 p_init_msg_list => p_init_msg_list,
1441 x_return_status => x_return_status,
1442 x_msg_count => x_msg_count,
1443 x_msg_data => x_msg_data,
1444 p_khr_id => p_chr_id);
1445 IF (x_return_status = Okl_Api.G_RET_STS_UNEXP_ERROR) THEN
1446 RAISE Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR;
1447 ELSIF (x_return_status = Okl_Api.G_RET_STS_ERROR) THEN
1448 RAISE Okl_Api.G_EXCEPTION_ERROR;
1449 END IF;
1450
1451 OKL_CONTRACT_REBOOK_PVT.create_inv_disb_adjustment(
1452 p_api_version => p_api_version,
1453 p_init_msg_list => p_init_msg_list,
1454 x_return_status => x_return_status,
1455 x_msg_count => x_msg_count,
1456 x_msg_data => x_msg_data,
1457 p_orig_khr_id => p_chr_id);
1458 IF (x_return_status = Okl_Api.G_RET_STS_UNEXP_ERROR) THEN
1459 RAISE Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR;
1460 ELSIF (x_return_status = Okl_Api.G_RET_STS_ERROR) THEN
1461 RAISE Okl_Api.G_EXCEPTION_ERROR;
1462 END IF;
1463
1464 l_trx_number := null; -- MGAAP 7263041
1465 --Bug# 9191475
1466 lx_trxnum_tbl := l_trxnum_init_tbl;
1467 OKL_CONTRACT_REBOOK_PVT.calc_inv_acc_adjustment(
1468 p_api_version => p_api_version,
1469 p_init_msg_list => p_init_msg_list,
1470 x_return_status => x_return_status,
1471 x_msg_count => x_msg_count,
1472 x_msg_data => x_msg_data,
1473 p_orig_khr_id => p_chr_id,
1474 p_trx_id => l_split_trans_id,
1475 p_trx_date => sysdate,
1476 x_inv_accrual_rec => l_inv_accrual_rec,
1477 x_inv_stream_tbl => l_inv_stream_tbl,
1478 p_trx_tbl_code => 'TAS',
1479 p_trx_type => 'ALI');
1480 IF (x_return_status = Okl_Api.G_RET_STS_UNEXP_ERROR) THEN
1481 RAISE Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR;
1482 ELSIF (x_return_status = Okl_Api.G_RET_STS_ERROR) THEN
1483 RAISE Okl_Api.G_EXCEPTION_ERROR;
1484 END IF;
1485
1486 IF (l_inv_stream_tbl.COUNT > 0) THEN
1487 OKL_GENERATE_ACCRUALS_PVT.ADJUST_ACCRUALS (
1488 p_api_version => p_api_version,
1489 p_init_msg_list => p_init_msg_list,
1490 x_return_status => x_return_status,
1491 x_msg_count => x_msg_count,
1492 x_msg_data => x_msg_data ,
1493 --Bug# 9191475
1494 --x_trx_number => l_trx_number,
1495 x_trx_tbl => lx_trxnum_tbl,
1496 p_accrual_rec => l_inv_accrual_rec,
1497 p_stream_tbl => l_inv_stream_tbl);
1498 IF (x_return_status = Okl_Api.G_RET_STS_UNEXP_ERROR) THEN
1499 RAISE Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR;
1500 ELSIF (x_return_status = Okl_Api.G_RET_STS_ERROR) THEN
1501 RAISE Okl_Api.G_EXCEPTION_ERROR;
1502 END IF;
1503 END IF;
1504
1505 -- MGAAP start 7263041
1506 IF (l_multi_gaap_yn = 'Y') THEN
1507 OKL_STREAMS_SEC_PVT.SET_REPO_STREAMS;
1508 OKL_CONTRACT_REBOOK_PVT.calc_inv_acc_adjustment(
1509 p_api_version => p_api_version,
1510 p_init_msg_list => p_init_msg_list,
1511 x_return_status => x_return_status,
1512 x_msg_count => x_msg_count,
1513 x_msg_data => x_msg_data,
1514 p_orig_khr_id => p_chr_id,
1515 p_trx_id => l_split_trans_id,
1516 p_trx_date => sysdate,
1517 x_inv_accrual_rec => l_inv_accrual_rec,
1518 x_inv_stream_tbl => l_inv_stream_tbl,
1519 p_trx_tbl_code => 'TAS',
1520 p_trx_type => 'ALI',
1521 p_product_id => l_reporting_pdt_id); -- MGAAP 7263041
1522
1523 OKL_STREAMS_SEC_PVT.RESET_REPO_STREAMS;
1524 IF (x_return_status = Okl_Api.G_RET_STS_UNEXP_ERROR) THEN
1525 RAISE Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR;
1526 ELSIF (x_return_status = Okl_Api.G_RET_STS_ERROR) THEN
1527 RAISE Okl_Api.G_EXCEPTION_ERROR;
1528 END IF;
1529
1530 IF (l_inv_stream_tbl.COUNT > 0) THEN
1531 --Bug# 9191475
1532 --l_inv_accrual_rec.trx_number := l_trx_number;
1533 OKL_GENERATE_ACCRUALS_PVT.ADJUST_ACCRUALS (
1534 p_api_version => p_api_version,
1535 p_init_msg_list => p_init_msg_list,
1536 x_return_status => x_return_status,
1537 x_msg_count => x_msg_count,
1538 x_msg_data => x_msg_data,
1539 --Bug# 9191475
1540 x_trx_tbl => lx_trxnum_tbl,
1541 --x_trx_number => l_trx_number,
1542 p_accrual_rec => l_inv_accrual_rec,
1543 p_stream_tbl => l_inv_stream_tbl,
1544 p_representation_type => 'SECONDARY');
1545 IF (x_return_status = Okl_Api.G_RET_STS_UNEXP_ERROR) THEN
1546 RAISE Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR;
1547 ELSIF (x_return_status = Okl_Api.G_RET_STS_ERROR) THEN
1548 RAISE Okl_Api.G_EXCEPTION_ERROR;
1549 END IF;
1550 END IF;
1551 END IF;
1552 -- MGAAP end 7263041
1553 END IF;
1554
1555 ------------------------------------------------------------------------
1556 --Bug# : R12.B eBTax impact Start
1557 ------------------------------------------------------------------------
1558 okl_process_sales_tax_pvt.calculate_sales_tax(
1559 p_api_version => p_api_version,
1560 p_init_msg_list => p_init_msg_list,
1561 x_return_status => x_return_status,
1562 x_msg_count => x_msg_count,
1563 x_msg_data => x_msg_data,
1564 p_source_trx_id => l_split_trans_id, --<okl_trx_assets.id>,
1565 p_source_trx_name => 'Split Asset',
1566 p_source_table => 'OKL_TRX_ASSETS');
1567
1568 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
1569 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
1570 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
1571 RAISE OKL_API.G_EXCEPTION_ERROR;
1572 END IF;
1573
1574 ------------------------------------------------------------------------
1575 --Bug# : R12.B eBTax impact End
1576 ------------------------------------------------------------------------
1577
1578 l_trxv_rec.id := l_split_trans_id;
1579 l_trxv_rec.tsu_code := 'PROCESSED';
1580 OKL_TRX_ASSETS_PUB.update_trx_ass_h_def(
1581 p_api_version => p_api_version,
1582 p_init_msg_list => p_init_msg_list,
1583 x_return_status => x_return_status,
1584 x_msg_count => x_msg_count,
1585 x_msg_data => x_msg_data,
1586 p_thpv_rec => l_trxv_rec,
1587 x_thpv_rec => lx_trxv_rec);
1588 IF (x_return_status = Okl_Api.G_RET_STS_UNEXP_ERROR) THEN
1589 RAISE Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR;
1590 ELSIF (x_return_status = Okl_Api.G_RET_STS_ERROR) THEN
1591 RAISE Okl_Api.G_EXCEPTION_ERROR;
1592 END IF;
1593
1594 -- racheruv: added update of okl_stream_trx_data.last_trx_state
1595 okl_streams_util.update_trx_state(p_chr_id, 'BOTH');
1596 -- end update of okl_stream_trx_data.last_trx_state
1597
1598 END IF;
1599
1600 OKL_API.END_ACTIVITY (x_msg_count,
1601 x_msg_data);
1602 EXCEPTION
1603 WHEN OKL_API.G_EXCEPTION_ERROR THEN
1604 x_return_status := OKL_API.HANDLE_EXCEPTIONS(
1605 l_api_name,
1606 G_PKG_NAME,
1607 'OKL_API.G_RET_STS_ERROR',
1608 x_msg_count,
1609 x_msg_data,
1610 '_PVT');
1611 WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
1612 x_return_status := OKL_API.HANDLE_EXCEPTIONS(
1613 l_api_name,
1614 G_PKG_NAME,
1615 'OKL_API.G_RET_STS_UNEXP_ERROR',
1616 x_msg_count,
1617 x_msg_data,
1618 '_PVT');
1619 WHEN OTHERS THEN
1620 x_return_status := OKL_API.HANDLE_EXCEPTIONS(
1621 l_api_name,
1622 G_PKG_NAME,
1623 'OTHERS',
1624 x_msg_count,
1625 x_msg_data,
1626 '_PVT');
1627 END SPLIT_ASSET_AFTER_YIELD;
1628 --Bug# 6344223
1629
1630 ------------------------------------------------------------------------------
1631 --Bug# 6326479
1632 --API Name : process_split_accounting
1633 --Description : Private API to create accounting entries for transaction type
1634 -- 'Split Asset' for the new Asset created after split.
1635 --History :
1636 -- 18-Jun-2007 rirawat Creation
1637 --End of Comments
1638 ------------------------------------------------------------------------------
1639 PROCEDURE process_split_accounting(
1640 p_api_version IN NUMBER
1641 ,p_init_msg_list IN VARCHAR2 DEFAULT OKL_API.G_FALSE
1642 ,x_return_status OUT NOCOPY VARCHAR2
1643 ,x_msg_count OUT NOCOPY NUMBER
1644 ,x_msg_data OUT NOCOPY VARCHAR2
1645 ,p_contract_id IN NUMBER
1646 ,p_kle_id IN NUMBER
1647 ,p_transaction_date IN DATE)
1648
1649 IS
1650 l_api_name CONSTANT VARCHAR2(30) := 'process_split_accounting';
1651 l_api_version CONSTANT NUMBER := 1.0;
1652
1653 l_return_status VARCHAR2(1) := OKL_API.G_RET_STS_SUCCESS;
1654
1655 -- Define PL/SQL Records and Tables
1656 l_trxH_in_rec Okl_Trx_Contracts_Pvt.tcnv_rec_type;
1657 l_trxL_in_rec Okl_Trx_Contracts_Pvt.tclv_rec_type;
1658 l_trxH_out_rec Okl_Trx_Contracts_Pvt.tcnv_rec_type;
1659 l_trxL_out_rec Okl_Trx_Contracts_Pvt.tclv_rec_type;
1660
1661 -- Define variables
1662 l_post_to_gl_yn VARCHAR2(1);
1663
1664 l_amount NUMBER;
1665 l_init_msg_list VARCHAR2(1) := OKL_API.G_FALSE;
1666 l_msg_count NUMBER;
1667 l_msg_data VARCHAR2(2000);
1668 l_currency_code okl_txl_cntrct_lns.currency_code%TYPE;
1669
1670
1671 CURSOR Product_csr (p_contract_id IN okl_products_v.id%TYPE) IS
1672 SELECT pdt.id product_id
1673 ,pdt.name product_name
1674 ,khr.sts_code contract_status
1675 ,khr.start_date start_date
1676 ,khr.currency_code currency_code
1677 ,khr.authoring_org_id authoring_org_id
1678 ,khr.currency_conversion_rate currency_conversion_rate
1679 ,khr.currency_conversion_type currency_conversion_type
1680 ,khr.currency_conversion_date currency_conversion_date
1681 ,khr.scs_code
1682 FROM okl_products_v pdt
1683 ,okl_k_headers_full_v khr
1684 WHERE khr.id = p_contract_id
1685 AND khr.pdt_id = pdt.id;
1686
1687 -- Get the product type
1688 CURSOR l_product_type_csr ( p_pdt_id IN NUMBER) IS
1689 SELECT description
1690 FROM OKL_PRODUCTS_V
1691 WHERE id = p_pdt_id;
1692
1693 l_func_curr_code OKL_K_HEADERS_FULL_V.CURRENCY_CODE%TYPE;
1694 l_chr_curr_code OKL_K_HEADERS_FULL_V.CURRENCY_CODE%TYPE;
1695 x_currency_conversion_rate okl_k_headers_full_v.currency_conversion_rate%TYPE;
1696 x_currency_conversion_type okl_k_headers_full_v.currency_conversion_type%TYPE;
1697 x_currency_conversion_date okl_k_headers_full_v.currency_conversion_date%TYPE;
1698 l_functional_currency_code VARCHAR2(15);
1699 l_contract_currency_code VARCHAR2(15);
1700 l_converted_amount NUMBER;
1701 l_Product_rec Product_csr%ROWTYPE;
1702 l_transaction_date DATE;
1703 l_ctxt_val_tbl OKL_ACCOUNT_DIST_PUB.ctxt_val_tbl_type;
1704 l_acc_gen_primary_key_tbl OKL_ACCOUNT_DIST_PUB.acc_gen_primary_key;
1705 l_tmpl_identify_rec OKL_ACCOUNT_DIST_PVT.TMPL_IDENTIFY_REC_TYPE;
1706 lp_tmpl_identify_rec OKL_ACCOUNT_DIST_PUB.tmpl_identify_rec_type;
1707 l_dist_info_rec OKL_ACCOUNT_DIST_PVT.dist_info_REC_TYPE;
1708 l_template_tbl OKL_ACCOUNT_DIST_PVT.AVLV_TBL_TYPE;
1709 l_amount_tbl OKL_ACCOUNT_DIST_PVT.AMOUNT_TBL_TYPE;
1710 lx_template_tbl OKL_ACCOUNT_DIST_PUB.avlv_tbl_type;
1711 l_trx_desc VARCHAR2(2000);
1712 l_fact_synd_code FND_LOOKUPS.Lookup_code%TYPE;
1713 l_inv_acct_code OKC_RULES_B.Rule_Information1%TYPE;
1714 l_try_name VARCHAR2(30);
1715 l_trans_code VARCHAR2(30);
1716 l_tcn_type VARCHAR2(3);
1717 l_trans_meaning VARCHAR2(200);
1718 l_try_id NUMBER;
1719 G_NO CONSTANT VARCHAR2(1) := 'N';
1720 l_valid_gl_date DATE;
1721 l_product_type VARCHAR2(2000);
1722 lp_tclv_rec OKL_TRX_CONTRACTS_PUB.tclv_rec_type;
1723 lx_tclv_rec OKL_TRX_CONTRACTS_PUB.tclv_rec_type;
1724 li_tclv_rec OKL_TRX_CONTRACTS_PUB.tclv_rec_type;
1725 i NUMBER;
1726 l_total_amount NUMBER := 0;
1727 l_line_number NUMBER := 1;
1728 l_hard_coded_amount NUMBER := 100;
1729
1730 l_tclv_tbl Okl_trx_contracts_pvt.tclv_tbl_type;
1731 x_tclv_tbl Okl_trx_contracts_pvt.tclv_tbl_type;
1732 l_tcnv_rec Okl_trx_contracts_pvt.tcnv_rec_type;
1733 x_tcnv_rec Okl_trx_contracts_pvt.tcnv_rec_type;
1734
1735 l_tmpl_identify_tbl Okl_Account_Dist_Pvt.tmpl_identify_tbl_type;
1736 l_dist_info_tbl Okl_Account_Dist_Pvt.dist_info_tbl_type;
1737 l_ctxt_tbl Okl_Account_Dist_Pvt.CTXT_TBL_TYPE;
1738 l_template_out_tbl Okl_Account_Dist_Pvt.avlv_out_tbl_type;
1739 l_amount_out_tbl Okl_Account_Dist_Pvt.amount_out_tbl_type;
1740 l_acc_gen_tbl Okl_Account_Dist_Pvt.ACC_GEN_TBL_TYPE;
1741
1742 CURSOR fnd_lookups_csr( lkp_type VARCHAR2, mng VARCHAR2 ) IS
1743 select description,
1744 lookup_code
1745 from fnd_lookup_values
1746 where language = 'US'
1747 and lookup_type = lkp_type
1748 and meaning = mng;
1749
1750 l_fnd_rec fnd_lookups_csr%ROWTYPE;
1751
1752 BEGIN
1753 -- Set API savepoint
1754 SAVEPOINT process_split_accounting_PVT;
1755
1756 -- Check for call compatibility
1757 IF (NOT FND_API.Compatible_API_Call (l_api_version,
1758 p_api_version,
1759 l_api_name,
1760 G_PKG_NAME ))
1761 THEN
1762 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
1763 END IF;
1764
1765 -- Initialize message list if requested
1766 IF (FND_API.to_Boolean(p_init_msg_list)) THEN
1767 FND_MSG_PUB.initialize;
1768 END IF;
1769
1770 -- Initialize API status to success
1771 x_return_status := OKL_API.G_RET_STS_SUCCESS;
1772 --------------------------------------------------------------------------
1773 -- Initialize API variables
1774 --------------------------------------------------------------------------
1775
1776 i := 0;
1777
1778 l_transaction_date := p_transaction_date;
1779
1780 l_trx_desc := 'OKL Accounting Transaction for Split Asset';
1781
1782 l_post_to_gl_yn := 'Y';
1783
1784 l_try_name := 'Split Asset';
1785 l_trans_code := 'SPLIT_ASSET';
1786 l_tcn_type := 'SPA';
1787
1788 l_trans_meaning := OKL_AM_UTIL_PVT.get_lookup_meaning(
1789 p_lookup_type => 'OKL_ACCOUNTING_EVENT_TYPE',
1790 p_lookup_code => l_trans_code,
1791 p_validate_yn => 'Y');
1792
1793
1794 OKL_AM_UTIL_PVT.get_transaction_id (
1795 p_try_name => l_try_name,
1796 p_language => 'US',
1797 x_return_status => l_return_status,
1798 x_try_id => l_try_id);
1799
1800
1801 -- Get product_id
1802 OPEN Product_csr(p_contract_id);
1803 FETCH Product_csr INTO l_Product_rec;
1804 IF Product_csr%NOTFOUND THEN
1805 Okl_Api.SET_MESSAGE(G_APP_NAME,
1806 'OKL_REQUIRED_VALUE',
1807 OKL_API.G_COL_NAME_TOKEN,
1808 'Product');
1809 CLOSE Product_csr;
1810 RAISE Okl_Api.G_EXCEPTION_ERROR;
1811 END IF;
1812 CLOSE Product_csr;
1813
1814 l_currency_code := l_Product_rec.currency_code;
1815
1816 --------------------------------------------------------------------------
1817 -- multi-currency setup
1818 --------------------------------------------------------------------------
1819
1820 l_chr_curr_code := l_Product_rec.CURRENCY_CODE;
1821
1822 l_func_curr_code := okl_accounting_util.get_func_curr_code;
1823
1824 x_currency_conversion_rate := NULL;
1825 x_currency_conversion_type := NULL;
1826 x_currency_conversion_date := NULL;
1827
1828 IF ( ( l_func_curr_code IS NOT NULL) AND
1829 ( l_chr_curr_code <> l_func_curr_code ) ) THEN
1830
1831 x_currency_conversion_type := l_Product_rec.currency_conversion_type;
1832 x_currency_conversion_date :=l_transaction_date;
1833
1834 IF ( l_Product_rec.currency_conversion_type = 'User') THEN
1835 x_currency_conversion_rate := l_Product_rec.currency_conversion_rate;
1836 x_currency_conversion_date := l_Product_rec.currency_conversion_date;
1837 ELSE
1838 x_currency_conversion_rate := okl_accounting_util.get_curr_con_rate(
1839 p_from_curr_code => l_chr_curr_code,
1840 p_to_curr_code => l_func_curr_code,
1841 p_con_date => l_transaction_date,
1842 p_con_type => l_Product_rec.currency_conversion_type);
1843
1844 END IF;
1845
1846 END IF;
1847
1848 --------------------------------------------------------------------------
1849 -- Assign passed in record values for transaction header and line
1850 -------------------------------------------------------------------------
1851
1852 l_trxH_in_rec.khr_id := p_contract_id;
1853 l_trxH_in_rec.pdt_id := l_Product_rec.product_id;
1854 l_trxH_in_rec.tcn_type := l_tcn_type; --'SPA'
1855 l_trxH_in_rec.currency_code := l_currency_code;
1856 l_trxH_in_rec.try_id := l_try_id;
1857 l_trxH_in_rec.description := l_trx_desc;
1858 l_trxH_in_rec.currency_conversion_rate := x_currency_conversion_rate;
1859 l_trxH_in_rec.currency_conversion_type := x_currency_conversion_type;
1860 l_trxH_in_rec.currency_conversion_date := x_currency_conversion_date;
1861 l_trxH_in_rec.tsu_code := 'PROCESSED';
1862 l_trxH_in_rec.date_transaction_occurred := l_transaction_date;
1863 l_trxH_in_rec.set_of_books_id := okl_accounting_util.get_set_of_books_id;
1864 l_trxH_in_rec.org_id := l_Product_rec.authoring_org_id;
1865 --------------------------------------------------------------------------
1866 -- Create transaction Header and line
1867 --------------------------------------------------------------------------
1868 Okl_Trx_Contracts_Pub.create_trx_contracts(
1869 p_api_version => l_api_version
1870 ,p_init_msg_list => l_init_msg_list
1871 ,x_return_status => l_return_status
1872 ,x_msg_count => l_msg_count
1873 ,x_msg_data => l_msg_data
1874 ,p_tcnv_rec => l_trxH_in_rec
1875 ,x_tcnv_rec => l_trxH_out_rec);
1876
1877 IF (l_return_status = Okl_Api.G_RET_STS_UNEXP_ERROR) THEN
1878 RAISE Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR;
1879 ELSIF (l_return_Status = Okl_Api.G_RET_STS_ERROR) THEN
1880 RAISE Okl_Api.G_EXCEPTION_ERROR;
1881 END IF;
1882
1883 IF ((l_trxH_out_rec.id = OKL_API.G_MISS_NUM) OR
1884 (l_trxH_out_rec.id IS NULL) ) THEN
1885 OKL_API.set_message(G_APP_NAME,
1886 'OKL_REQUIRED_VALUE',
1887 OKL_API.G_COL_NAME_TOKEN,
1888 'TRANSACTION_ID');
1889 RAISE OKL_API.G_EXCEPTION_ERROR;
1890 END IF;
1891
1892 --------------------------------------------------------------------------
1893 -- accounting template record
1894 --------------------------------------------------------------------------
1895
1896 l_tmpl_identify_rec.TRANSACTION_TYPE_ID := l_try_id;
1897 l_tmpl_identify_rec.PRODUCT_ID := l_Product_rec.product_id;
1898 l_tmpl_identify_rec.memo_yn := G_NO;
1899 l_tmpl_identify_rec.prior_year_yn := G_NO;
1900
1901 -- get the product type
1902 OPEN l_product_type_csr ( l_Product_rec.product_id);
1903 FETCH l_product_type_csr INTO l_product_type;
1904 CLOSE l_product_type_csr;
1905
1906
1907 -- set the additional parameters with contract_id, line_id and transaction_date
1908 -- to be passed to formula engine
1909
1910 l_valid_gl_date := OKL_ACCOUNTING_UTIL.get_valid_gl_date( p_gl_date => l_transaction_date);
1911
1912 --For special accounting treatment : Review whether it is required or not
1913 OKL_SECURITIZATION_PVT.Check_Khr_ia_associated(
1914 p_api_version => p_api_version,
1915 p_init_msg_list => p_init_msg_list,
1916 x_return_status => x_return_status,
1917 x_msg_count => x_msg_count,
1918 x_msg_data => x_msg_data,
1919 p_khr_id => p_contract_id,
1920 p_scs_code => l_product_rec.scs_code,
1921 p_trx_date => l_transaction_date,
1922 x_fact_synd_code => l_fact_synd_code,
1923 x_inv_acct_code => l_inv_acct_code
1924 );
1925
1926 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
1927 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
1928 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
1929 RAISE OKL_API.G_EXCEPTION_ERROR;
1930 END IF;
1931
1932 l_tmpl_identify_rec.factoring_synd_flag := l_fact_synd_code;
1933 l_tmpl_identify_rec.investor_code := l_inv_acct_code;
1934
1935 OKL_ACCOUNT_DIST_PUB.get_template_info(
1936 p_api_version => p_api_version,
1937 p_init_msg_list => OKL_API.G_FALSE,
1938 x_return_status => l_return_status,
1939 x_msg_count => x_msg_count,
1940 x_msg_data => x_msg_data,
1941 p_tmpl_identify_rec => l_tmpl_identify_rec,
1942 x_template_tbl => l_template_tbl,
1943 p_validity_date => l_valid_gl_date);
1944
1945 IF l_return_status <> OKL_API.G_RET_STS_SUCCESS THEN
1946 -- No accounting templates found matching the transaction type TRX_TYPE
1947 -- and product PRODUCT.
1948 OKL_API.set_message(
1949 p_app_name => G_APP_NAME,
1950 p_msg_name => 'OKL_AM_NO_ACC_TEMPLATES',
1951 p_token1 => 'TRX_TYPE',
1952 p_token1_value => l_trans_meaning,
1953 p_token2 => 'PRODUCT',
1954 p_token2_value => l_product_type);
1955
1956 END IF;
1957
1958 IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
1959 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
1960 ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
1961 RAISE OKL_API.G_EXCEPTION_ERROR;
1962 END IF;
1963
1964 -- If no templates present
1965 IF l_template_tbl.COUNT = 0 THEN
1966 -- No accounting templates found matching the transaction type TRX_TYPE
1967 -- and product PRODUCT.
1968 OKL_API.set_message(
1969 p_app_name => G_APP_NAME,
1970 p_msg_name => 'OKL_AM_NO_ACC_TEMPLATES',
1971 p_token1 => 'TRX_TYPE',
1972 p_token1_value => l_trans_meaning,
1973 p_token2 => 'PRODUCT',
1974 p_token2_value => l_product_type);
1975
1976
1977 RAISE OKL_API.G_EXCEPTION_ERROR;
1978
1979 END IF;
1980
1981 --Build the transaction line table of records
1982 FOR i IN l_template_tbl.FIRST..l_template_tbl.LAST
1983 LOOP
1984 l_tclv_tbl(i).line_number := i;
1985 l_tclv_tbl(i).khr_id := p_contract_id;
1986 l_tclv_tbl(i).kle_id := p_kle_id;
1987 l_tclv_tbl(i).sty_id := l_template_tbl(i).sty_id;
1988 l_tclv_tbl(i).tcl_type := l_tcn_type; --'SPA';
1989 l_tclv_tbl(i).description := l_trx_desc;
1990 l_tclv_tbl(i).tcn_id := l_trxh_out_rec.id;
1991 l_tclv_tbl(i).currency_code := l_currency_code;
1992 l_tclv_tbl(i).org_id := l_Product_rec.authoring_org_id;
1993 END LOOP;
1994
1995 --Call to create transaction lines
1996
1997 Okl_Trx_Contracts_Pub.create_trx_cntrct_lines(
1998 p_api_version => l_api_version
1999 ,p_init_msg_list => l_init_msg_list
2000 ,x_return_status => x_return_status
2001 ,x_msg_count => l_msg_count
2002 ,x_msg_data => l_msg_data
2003 ,p_tclv_tbl => l_tclv_tbl
2004 ,x_tclv_tbl => x_tclv_tbl);
2005
2006 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
2007 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
2008 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
2009 RAISE OKL_API.G_EXCEPTION_ERROR;
2010 END IF;
2011
2012 /* Populating the tmpl_identify_tbl from the template_tbl returned by get_template_info*/
2013
2014 FOR i in l_template_tbl.FIRST.. l_template_tbl.LAST
2015 LOOP
2016 l_tmpl_identify_tbl(i).product_id := l_Product_rec.product_id;
2017 l_tmpl_identify_tbl(i).transaction_type_id := l_try_id;
2018 l_tmpl_identify_tbl(i).stream_type_id := l_template_tbl(i).sty_id;
2019 l_tmpl_identify_tbl(i).advance_arrears := l_template_tbl(i).advance_arrears;
2020 l_tmpl_identify_tbl(i).prior_year_yn := l_template_tbl(i).prior_year_yn;
2021 l_tmpl_identify_tbl(i).memo_yn := l_template_tbl(i).memo_yn;
2022 l_tmpl_identify_tbl(i).factoring_synd_flag := l_template_tbl(i).factoring_synd_flag;
2023 l_tmpl_identify_tbl(i).investor_code := l_template_tbl(i).inv_code;
2024 l_tmpl_identify_tbl(i).SYNDICATION_CODE := l_template_tbl(i).syt_code;
2025 l_tmpl_identify_tbl(i).FACTORING_CODE := l_template_tbl(i).fac_code;
2026 END LOOP;
2027
2028 -- for account generator
2029 OKL_ACC_CALL_PVT.okl_populate_acc_gen (
2030 p_contract_id => p_contract_id,
2031 p_contract_line_id => p_kle_id,
2032 x_acc_gen_tbl => l_acc_gen_primary_key_tbl,
2033 x_return_status => l_return_status);
2034
2035 -- Raise exception to rollback to savepoint for this block
2036 IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
2037 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
2038 ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
2039 RAISE OKL_API.G_EXCEPTION_ERROR;
2040 END IF;
2041
2042 /* Populating the dist_info_Tbl */
2043 FOR i in x_tclv_tbl.FIRST..x_tclv_tbl.LAST
2044 LOOP
2045 --Assigning the account generator table
2046 l_acc_gen_tbl(i).acc_gen_key_tbl := l_acc_gen_primary_key_tbl;
2047 l_acc_gen_tbl(i).source_id := x_tclv_tbl(i).id;
2048
2049 --Bug# 6189396
2050 l_ctxt_val_tbl := okl_execute_formula_pub.g_additional_parameters;
2051
2052 l_dist_info_tbl(i).SOURCE_ID := x_tclv_tbl(i).id;
2053 l_dist_info_tbl(i).SOURCE_TABLE := 'OKL_TXL_CNTRCT_LNS';
2054 l_dist_info_tbl(i).GL_REVERSAL_FLAG := 'N';
2055 l_dist_info_tbl(i).POST_TO_GL := l_post_to_gl_yn;
2056 l_dist_info_tbl(i).CONTRACT_ID := p_contract_id;
2057 l_dist_info_tbl(i).contract_line_id := p_kle_id;
2058
2059 l_dist_info_tbl(i).currency_conversion_rate := x_currency_conversion_rate;
2060 l_dist_info_tbl(i).currency_conversion_type := x_currency_conversion_type;
2061 l_dist_info_tbl(i).currency_conversion_date := x_currency_conversion_date;
2062 l_dist_info_tbl(i).currency_code := l_currency_code;
2063 l_dist_info_tbl(i).ACCOUNTING_DATE := l_trxh_out_rec.date_transaction_occurred;
2064 END LOOP;
2065
2066 /* Making the new single accounting engine call*/
2067 Okl_Account_Dist_Pvt.CREATE_ACCOUNTING_DIST(
2068 p_api_version => l_api_version,
2069 p_init_msg_list => p_init_msg_list,
2070 x_return_status => x_return_status,
2071 x_msg_count => x_msg_count,
2072 x_msg_data => x_msg_data,
2073 p_tmpl_identify_tbl => l_tmpl_identify_tbl,
2074 p_dist_info_tbl => l_dist_info_tbl,
2075 p_ctxt_val_tbl => l_ctxt_tbl,
2076 p_acc_gen_primary_key_tbl => l_acc_gen_tbl,
2077 x_template_tbl => l_template_out_tbl,
2078 x_amount_tbl => l_amount_out_tbl,
2079 p_trx_header_id => l_trxH_out_rec.id);
2080
2081 IF (x_return_status = Okl_Api.G_RET_STS_UNEXP_ERROR) THEN
2082 RAISE Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR;
2083 ELSIF (x_return_status = Okl_Api.G_RET_STS_ERROR) THEN
2084 RAISE Okl_Api.G_EXCEPTION_ERROR;
2085 END IF;
2086
2087 OPEN fnd_lookups_csr('OKL_TRANSACTION_STATUS', 'Processed');
2088 FETCH fnd_lookups_csr INTO l_fnd_rec;
2089 IF fnd_lookups_csr%NOTFOUND THEN
2090 Okl_Api.SET_MESSAGE(G_APP_NAME, OKL_API.G_INVALID_VALUE,OKL_API.G_COL_NAME_TOKEN,l_try_name);
2091 CLOSE fnd_lookups_csr;
2092 RAISE Okl_Api.G_EXCEPTION_ERROR;
2093 END IF;
2094 CLOSE fnd_lookups_csr;
2095
2096 --From the l_amount_out_tbl returned , the transaction line amount and header amount need to be updated back on the contract
2097 l_tclv_tbl := x_tclv_tbl;
2098 l_tcnv_rec := l_trxH_out_rec;
2099
2100 If l_tclv_tbl.COUNT > 0 then
2101 FOR i in l_tclv_tbl.FIRST..l_tclv_tbl.LAST LOOP
2102 l_amount_tbl.delete;
2103 If l_amount_out_tbl.COUNT > 0 then
2104 For k in l_amount_out_tbl.FIRST..l_amount_out_tbl.LAST LOOP
2105 IF l_tclv_tbl(i).id = l_amount_out_tbl(k).source_id THEN
2106 l_amount_tbl := l_amount_out_tbl(k).amount_tbl;
2107 l_tclv_tbl(i).currency_code := l_currency_code;
2108 IF l_amount_tbl.COUNT > 0 THEN
2109 FOR j in l_amount_tbl.FIRST..l_amount_tbl.LAST LOOP
2110 l_tclv_tbl(i).amount := nvl(l_tclv_tbl(i).amount,0) + l_amount_tbl(j);
2111 END LOOP; -- for j in
2112 END IF;-- If l_amount_tbl.COUNT
2113 END IF; ---- IF l_tclv_tbl(i).id
2114 END LOOP; -- For k in
2115 END IF; -- If l_amount_out_tbl.COUNT
2116 l_tcnv_rec.amount := nvl(l_tcnv_rec.amount,0) + l_tclv_tbl(i).amount;
2117 l_tcnv_rec.currency_code := l_currency_code;
2118 l_tcnv_rec.tsu_code := l_fnd_rec.lookup_code;
2119 END LOOP; -- For i in
2120 End If; -- If l_tclv_tbl.COUNT
2121
2122 --Making the call to update the amounts on transaction header and line
2123 Okl_Trx_Contracts_Pub.update_trx_contracts
2124 (p_api_version => p_api_version
2125 ,p_init_msg_list => p_init_msg_list
2126 ,x_return_status => x_return_status
2127 ,x_msg_count => x_msg_count
2128 ,x_msg_data => x_msg_data
2129 ,p_tcnv_rec => l_tcnv_rec
2130 ,p_tclv_tbl => l_tclv_tbl
2131 ,x_tcnv_rec => x_tcnv_rec
2132 ,x_tclv_tbl => x_tclv_tbl );
2133
2134 IF (x_return_status = Okl_Api.G_RET_STS_UNEXP_ERROR) THEN
2135 RAISE Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR;
2136 ELSIF (x_return_status = Okl_Api.G_RET_STS_ERROR) THEN
2137 RAISE Okl_Api.G_EXCEPTION_ERROR;
2138 END IF;
2139
2140 OKL_MULTIGAAP_ENGINE_PVT.CREATE_SEC_REP_TRX
2141 (p_api_version => p_api_version
2142 ,p_init_msg_list => p_init_msg_list
2143 ,x_return_status => x_return_status
2144 ,x_msg_count => x_msg_count
2145 ,x_msg_data => x_msg_data
2146 ,P_TCNV_REC => x_tcnv_rec
2147 ,P_TCLV_TBL => x_tclv_tbl
2148 ,p_ctxt_val_tbl => l_ctxt_tbl
2149 ,p_acc_gen_primary_key_tbl => l_acc_gen_primary_key_tbl);
2150
2151 IF (x_return_status = Okl_Api.G_RET_STS_UNEXP_ERROR) THEN
2152 RAISE Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR;
2153 ELSIF (x_return_status = Okl_Api.G_RET_STS_ERROR) THEN
2154 RAISE Okl_Api.G_EXCEPTION_ERROR;
2155 END IF;
2156
2157
2158 -- Get message count and if count is 1, get message info
2159 FND_MSG_PUB.Count_And_Get
2160 (p_count => x_msg_count,
2161 p_data => x_msg_data);
2162
2163 EXCEPTION
2164 WHEN OKL_API.G_EXCEPTION_ERROR THEN
2165 ROLLBACK TO process_split_accounting_PVT;
2166 x_return_status := OKL_API.G_RET_STS_ERROR;
2167 FND_MSG_PUB.Count_And_Get
2168 (p_count => x_msg_count,
2169 p_data => x_msg_data);
2170
2171 WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
2172 ROLLBACK TO process_split_accounting_PVT;
2173 x_return_status := OKL_API.G_RET_STS_UNEXP_ERROR;
2174 FND_MSG_PUB.Count_And_Get
2175 (p_count => x_msg_count,
2176 p_data => x_msg_data);
2177
2178 WHEN OTHERS THEN
2179 ROLLBACK TO process_split_accounting_PVT;
2180 x_return_status := OKL_API.G_RET_STS_UNEXP_ERROR ;
2181 OKL_API.Set_Message(p_app_name => G_APP_NAME,
2182 p_msg_name => G_UNEXPECTED_ERROR,
2183 p_token1 => G_SQLCODE_TOKEN,
2184 p_token1_value => SQLCODE,
2185 p_token2 => G_SQLERRM_TOKEN,
2186 p_token2_value => SQLERRM);
2187 FND_MSG_PUB.Count_And_Get
2188 (p_count => x_msg_count,
2189 p_data => x_msg_data);
2190
2191 END process_split_accounting;
2192
2193 ------------------------------------------------------------------------------
2194 --Bug# 5946411
2195 --Start of comments
2196 --
2197 --Procedure Name : get_deprn_reserve
2198 --Purpose : Get Depreciation Reserve- used internally
2199 --Modification History :
2200 --02-May-2007 avsingh Created
2201 -- To get accumulated depreciation of an asset
2202 -- As per Bug# 6027547 raised on FA, the suggestion
2203 -- from FA is to back out depreciation reserve
2204 -- if cost is being adjusted in the period of
2205 -- of addition.
2206 ------------------------------------------------------------------------------
2207 PROCEDURE get_deprn_reserve
2208 (p_api_version IN NUMBER,
2209 p_init_msg_list IN VARCHAR2,
2210 x_return_status OUT NOCOPY VARCHAR2,
2211 x_msg_count OUT NOCOPY NUMBER,
2212 x_msg_data OUT NOCOPY VARCHAR2,
2213 p_asset_id IN NUMBER,
2214 p_book_type_code IN VARCHAR2,
2215 x_asset_deprn_rec OUT NOCOPY FA_API_TYPES.asset_deprn_rec_type) IS
2216
2217 l_return_status VARCHAR2(1) := OKL_API.G_RET_STS_SUCCESS;
2218 l_api_name CONSTANT VARCHAR2(30) := 'GET_DEPRN_RESERVE';
2219 l_api_version CONSTANT NUMBER := 1.0;
2220
2221 l_asset_hdr_rec FA_API_TYPES.asset_hdr_rec_type;
2222 l_asset_fin_rec FA_API_TYPES.asset_fin_rec_type;
2223 l_asset_deprn_rec FA_API_TYPES.asset_deprn_rec_type;
2224
2225 l_deprn_reserve NUMBER;
2226
2227 BEGIN
2228 --call start activity to set savepoint
2229 l_return_status := OKL_API.START_ACTIVITY( substr(l_api_name,1,26),
2230 p_init_msg_list,
2231 '_PVT',
2232 x_return_status);
2233 IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
2234 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
2235 ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
2236 RAISE OKL_API.G_EXCEPTION_ERROR;
2237 END IF;
2238
2239 l_asset_hdr_rec.asset_id := p_asset_id;
2240 l_asset_hdr_rec.book_type_code := p_book_type_code;
2241
2242 if NOT fa_cache_pkg.fazcbc(x_book => l_asset_hdr_rec.book_type_code) then
2243 OKL_API.SET_MESSAGE(p_app_name => g_app_name,
2244 p_msg_name => 'OKL_LLA_FA_CACHE_ERROR'
2245 );
2246 Raise OKL_API.G_EXCEPTION_ERROR;
2247 end if;
2248
2249 -- To fetch Depreciation Reserve
2250 if not FA_UTIL_PVT.get_asset_deprn_rec
2251 (p_asset_hdr_rec => l_asset_hdr_rec ,
2252 px_asset_deprn_rec => l_asset_deprn_rec,
2253 p_period_counter => NULL,
2254 p_mrc_sob_type_code => 'P'
2255 ) then
2256 OKL_API.SET_MESSAGE(p_app_name => g_app_name,
2257 p_msg_name => 'OKL_LLA_FA_DEPRN_REC_ERROR'
2258 );
2259 Raise OKL_API.G_EXCEPTION_ERROR;
2260 end if;
2261
2262 x_asset_deprn_rec := l_asset_deprn_rec;
2263
2264 --Call end Activity
2265 OKL_API.END_ACTIVITY(x_msg_count, x_msg_data);
2266 EXCEPTION
2267 WHEN OKL_API.G_EXCEPTION_ERROR Then
2268 x_return_status :=OKL_API.HANDLE_EXCEPTIONS
2269 (
2270 l_api_name,
2271 G_PKG_NAME,
2272 'OKL_API.G_RET_STS_ERROR',
2273 x_msg_count,
2274 x_msg_data,
2275 '_PVT'
2276 );
2277 WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
2278 x_return_status :=OKL_API.HANDLE_EXCEPTIONS
2279 (
2280 l_api_name,
2281 G_PKG_NAME,
2282 'OKL_API.G_RET_STS_UNEXP_ERROR',
2283 x_msg_count,
2284 x_msg_data,
2285 '_PVT'
2286 );
2287 WHEN OTHERS THEN
2288 x_return_status :=OKL_API.HANDLE_EXCEPTIONS
2289 (
2290 l_api_name,
2291 G_PKG_NAME,
2292 'OTHERS',
2293 x_msg_count,
2294 x_msg_data,
2295 '_PVT'
2296 );
2297 END get_deprn_reserve;
2298 --Bug# 5946411 End
2299 -----------------------------------------------------------------
2300 --Bug# 5946411: ER
2301 --added procedure to create split asset return
2302 -----------------------------------------------------------------
2303 PROCEDURE create_split_asset_return( p_api_version IN NUMBER,
2304 p_init_msg_list IN VARCHAR2,
2305 x_return_status OUT NOCOPY VARCHAR2,
2306 x_msg_count OUT NOCOPY NUMBER,
2307 x_msg_data OUT NOCOPY VARCHAR2,
2308 p_kle_id IN NUMBER,
2309 p_cle_tbl IN cle_tbl_type,
2310 p_txlv_rec IN txlv_rec_type
2311 ) IS
2312 l_api_name CONSTANT VARCHAR2(30) := 'create_split_asset_return';
2313 l_api_version CONSTANT NUMBER := 1.0;
2314 lp_artv_rec OKL_AM_ASSET_RETURN_PUB.artv_rec_type;
2315 lp_upd_artv_rec OKL_AM_ASSET_RETURN_PUB.artv_rec_type;
2316 lx_artv_rec OKL_AM_ASSET_RETURN_PUB.artv_rec_type;
2317 -- Get asset return for asset with status Scheduled
2318 CURSOR l_asset_return_csr ( p_kle_id IN NUMBER) IS
2319 SELECT id,
2320 RMR_ID,
2321 ART1_CODE,
2322 RELOCATE_ASSET_YN,
2323 VOLUNTARY_YN,
2324 COMMMERCIALLY_REAS_SALE_YN,
2325 ORG_ID,
2326 FLOOR_PRICE,
2327 NEW_ITEM_PRICE,
2328 NEW_ITEM_NUMBER,
2329 ASSET_RELOCATED_YN,
2330 REPURCHASE_AGMT_YN,
2331 CURRENCY_CODE,
2332 CURRENCY_CONVERSION_CODE,
2333 CURRENCY_CONVERSION_TYPE,
2334 CURRENCY_CONVERSION_RATE,
2335 CURRENCY_CONVERSION_DATE,
2336 --Bug# 6336455
2337 LEGAL_ENTITY_ID
2338 FROM OKL_ASSET_RETURNS_b
2339 WHERE kle_id = p_kle_id
2340 AND ars_code = 'SCHEDULED';
2341 -- Get the non-cancelled asset return for asset
2342 CURSOR l_check_asset_return_csr ( p_kle_id IN NUMBER) IS
2343 select 'N' from dual
2344 where exists (
2345 SELECT 1
2346 FROM OKL_ASSET_RETURNS_V
2347 WHERE kle_id = p_kle_id
2348 AND ars_code <> 'CANCELLED'
2349 );
2350 cursor l_term_date_csr ( p_kle_id IN NUMBER)
2351 IS
2352 select date_terminated
2353 from okc_k_lines_b
2354 where id=p_kle_id;
2355 CURSOR l_trmnt_line_csr(p_cle_id IN OKC_K_LINES_B.ID%TYPE)
2356 IS
2357 SELECT cle.id id
2358 FROM okc_k_lines_b cle
2359 CONNECT BY PRIOR cle.id = cle.cle_id
2360 START WITH cle.id = p_cle_id;
2361 l_return_needed VARCHAR2(1) := 'Y';
2362 l_asset_return_rec l_asset_return_csr%ROWTYPE;
2363 l_source_cle_id NUMBER;
2364 i NUMBER := 1;
2365 l_parent_unit NUMBER;
2366 l_child_unit NUMBER;
2367 l_split_factor NUMBER;
2368 l_term_date DATE;
2369 l_clev_rec OKL_OKC_MIGRATION_PVT.clev_rec_type;
2370 l_klev_rec OKL_CONTRACT_PUB.klev_rec_type;
2371 lx_clev_rec OKL_OKC_MIGRATION_PVT.clev_rec_type;
2372 lx_klev_rec OKL_CONTRACT_PUB.klev_rec_type;
2373 l_chld_total_flr_price NUMBER:=0.0;
2374 begin
2375 x_return_status := OKL_API.G_RET_STS_SUCCESS;
2376 -- Call start_activity to create savepoint, check compatibility
2377 -- and initialize message list
2378 x_return_status := OKL_API.START_ACTIVITY (
2379 l_api_name
2380 ,p_init_msg_list
2381 ,'_PVT'
2382 ,x_return_status);
2383 -- Check if activity started successfully
2384 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
2385 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
2386 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
2387 RAISE OKL_API.G_EXCEPTION_ERROR;
2388 END IF;
2389 l_source_cle_id :=p_kle_id;
2390 --dbms_output.put_line(' l_source_cle_id'||l_source_cle_id);
2391 FOR l_asset_return_rec in l_asset_return_csr(l_source_cle_id)
2392 LOOP
2393 --dbms_output.put_line('CSAR--> found');
2394 IF p_cle_tbl.COUNT > 0 THEN
2395 --get the split factor
2396 if NVL(p_txlv_rec.SPLIT_INTO_SINGLES_FLAG,'X')='Y' THEN
2397 l_parent_unit :=1;
2398 l_child_unit:=1;
2399 else
2400 l_parent_unit:= p_txlv_rec.CURRENT_UNITS - NVL(p_txlv_rec.SPLIT_INTO_UNITS,0);
2401 l_child_unit:=p_txlv_rec.SPLIT_INTO_UNITS;
2402 end if;
2403 -- dbms_output.put_line('l_parent_unit-->'||l_parent_unit);
2404 -- dbms_output.put_line('l_child_unit-->'||l_child_unit);
2405 --get the termination date
2406 OPEN l_term_date_csr(l_source_cle_id);
2407 FETCH l_term_date_csr INTO l_term_date;
2408 CLOSE l_term_date_csr;
2409 FOR i IN p_cle_tbl.FIRST..p_cle_tbl.LAST
2410 LOOP
2411 --dbms_output.put_line('procssing --> '|| p_cle_tbl(i).cle_id);
2412 if l_source_cle_id <> p_cle_tbl(i).cle_id then
2413 l_split_factor:=l_child_unit/p_txlv_rec.current_units;
2414 -- dbms_output.put_line('CSAR-->child l_split_factor>'||l_split_factor);
2415 -- Check if return created
2416 l_return_needed:='Y';
2417 OPEN l_check_asset_return_csr (p_cle_tbl(i).cle_id);
2418 FETCH l_check_asset_return_csr INTO l_return_needed;
2419 CLOSE l_check_asset_return_csr;
2420 IF l_return_needed='Y' THEN
2421 --dbms_output.put_line('Creating asset return for >'||p_cle_tbl(i).cle_id);
2422 lp_artv_rec.KLE_ID := p_cle_tbl(i).cle_id;
2423 lp_artv_rec.RMR_ID := l_asset_return_rec.RMR_ID;
2424 lp_artv_rec.ARS_CODE := 'SCHEDULED';--l_asset_return_rec.ARS_CODE;
2425 -- lp_artv_rec.IMR_ID := l_asset_return_rec.IMR_ID;
2426 lp_artv_rec.ART1_CODE := l_asset_return_rec.ART1_CODE;
2427 lp_artv_rec.RELOCATE_ASSET_YN := l_asset_return_rec.RELOCATE_ASSET_YN;
2428 lp_artv_rec.VOLUNTARY_YN := l_asset_return_rec.VOLUNTARY_YN;
2429 lp_artv_rec.COMMMERCIALLY_REAS_SALE_YN := l_asset_return_rec.COMMMERCIALLY_REAS_SALE_YN;
2430 lp_artv_rec.ORG_ID := l_asset_return_rec.ORG_ID;
2431 lp_artv_rec.FLOOR_PRICE := l_split_factor * NVL(l_asset_return_rec.FLOOR_PRICE,0.0);
2432 l_chld_total_flr_price := l_chld_total_flr_price+NVL(lp_artv_rec.FLOOR_PRICE,0.0);
2433 -- lp_artv_rec.NEW_ITEM_PRICE := l_split_factor * NVL(l_asset_return_rec.NEW_ITEM_PRICE,0.0);
2434 -- lp_artv_rec.NEW_ITEM_NUMBER := l_asset_return_rec.NEW_ITEM_NUMBER;
2435 lp_artv_rec.ASSET_RELOCATED_YN := l_asset_return_rec.ASSET_RELOCATED_YN;
2436 lp_artv_rec.REPURCHASE_AGMT_YN := l_asset_return_rec.REPURCHASE_AGMT_YN;
2437 lp_artv_rec.CURRENCY_CODE := l_asset_return_rec.CURRENCY_CODE;
2438 lp_artv_rec.CURRENCY_CONVERSION_CODE := l_asset_return_rec.CURRENCY_CONVERSION_CODE;
2439 lp_artv_rec.CURRENCY_CONVERSION_TYPE := l_asset_return_rec.CURRENCY_CONVERSION_TYPE;
2440 lp_artv_rec.CURRENCY_CONVERSION_RATE := l_asset_return_rec.CURRENCY_CONVERSION_RATE;
2441 lp_artv_rec.CURRENCY_CONVERSION_DATE := l_asset_return_rec.CURRENCY_CONVERSION_DATE;
2442
2443 --Bug# 6336455
2444 lp_artv_rec.LEGAL_ENTITY_ID := l_asset_return_rec.LEGAL_ENTITY_ID;
2445
2446 -- call insert of tapi
2447 OKL_ASSET_RETURNS_PUB.insert_asset_returns(
2448 p_api_version => p_api_version,
2449 p_init_msg_list => OKL_API.G_FALSE,
2450 x_return_status => x_return_status,
2451 x_msg_count => x_msg_count,
2452 x_msg_data => x_msg_data,
2453 p_artv_rec => lp_artv_rec,
2454 x_artv_rec => lx_artv_rec);
2455 -- dbms_output.put_line('Calling OKL_ASSET_RETURNS_PUB.insert_asset_returns status >'||x_return_status);
2456 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
2457 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
2458 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
2459 RAISE OKL_API.G_EXCEPTION_ERROR;
2460 END IF;
2461 --upade the termination date on the lines and subliines
2462 FOR r_trmnt_line_csr IN
2463 l_trmnt_line_csr(p_cle_id => p_cle_tbl(i).cle_id) LOOP
2464 l_clev_rec.id := r_trmnt_line_csr.id;
2465 l_klev_rec.id := r_trmnt_line_csr.id;
2466 l_clev_rec.date_terminated := l_term_date;
2467 OKL_CONTRACT_PUB.update_contract_line(
2468 p_api_version => l_api_version,
2469 p_init_msg_list => p_init_msg_list,
2470 x_return_status => x_return_status,
2471 x_msg_count => x_msg_count,
2472 x_msg_data => x_msg_data,
2473 p_clev_rec => l_clev_rec,
2474 p_klev_rec => l_klev_rec,
2475 x_clev_rec => lx_clev_rec,
2476 x_klev_rec => lx_klev_rec);
2477 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
2478 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
2479 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
2480 RAISE OKL_API.G_EXCEPTION_ERROR;
2481 END IF;
2482 END LOOP; --inner loop
2483 END IF; --return needed
2484 END IF; --soucer id<> pkle_id
2485 END LOOP; -- p_cle_tbl loop end
2486 -- this is parent asset so adjust the floor price
2487 lp_upd_artv_rec.id:=l_asset_return_rec.id;
2488 lp_upd_artv_rec.FLOOR_PRICE := NVL(l_asset_return_rec.FLOOR_PRICE,0.0)-l_chld_total_flr_price;
2489 -- call update of tapi
2490 OKL_ASSET_RETURNS_PUB.update_asset_returns(
2491 p_api_version => p_api_version,
2492 p_init_msg_list => OKL_API.G_FALSE,
2493 x_return_status => x_return_status,
2494 x_msg_count => x_msg_count,
2495 x_msg_data => x_msg_data,
2496 p_artv_rec => lp_upd_artv_rec,
2497 x_artv_rec => lx_artv_rec);
2498 -- dbms_output.put_line('Calling OKL_ASSET_RETURNS_PUB.update_asset_returns status >'||x_return_status);
2499 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
2500 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
2501 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
2502 RAISE OKL_API.G_EXCEPTION_ERROR;
2503 END IF;
2504 END IF; --p_cle_tbl >0
2505 END LOOP; --aset rturn record
2506 OKL_API.END_ACTIVITY (x_msg_count,x_msg_data );
2507 EXCEPTION
2508 WHEN OKL_API.G_EXCEPTION_ERROR THEN
2509 x_return_status := OKL_API.HANDLE_EXCEPTIONS(
2510 l_api_name,
2511 G_PKG_NAME,
2512 'OKL_API.G_RET_STS_ERROR',
2513 x_msg_count,
2514 x_msg_data,
2515 '_PVT');
2516 WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
2517 x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
2518 l_api_name,
2519 G_PKG_NAME,
2520 'OKL_API.G_RET_STS_UNEXP_ERROR',
2521 x_msg_count,
2522 x_msg_data,
2523 '_PVT');
2524 WHEN OTHERS THEN
2525 x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
2526 l_api_name,
2527 G_PKG_NAME,
2528 'OTHERS',
2529 x_msg_count,
2530 x_msg_data,
2531 '_PVT');
2532 end create_split_asset_return;
2533
2534 -----------------------------------------------
2535 -- Bug# 5946411: ER
2536 -- added procedure to check pending transaction
2537 -----------------------------------------------
2538 PROCEDURE Check_Offlease_Trans(p_api_version IN NUMBER,
2539 p_init_msg_list IN VARCHAR2,
2540 x_return_status OUT NOCOPY VARCHAR2,
2541 x_msg_count OUT NOCOPY NUMBER,
2542 x_msg_data OUT NOCOPY VARCHAR2,
2543 p_cle_id IN NUMBER
2544 ) is
2545 l_return_status VARCHAR2(1) DEFAULT OKL_API.G_RET_STS_SUCCESS;
2546 l_api_name CONSTANT VARCHAR2(30) := 'CHECK_OFFLEASE_TRANS';
2547 l_api_version CONSTANT NUMBER := 1.0;
2548
2549 --cursor to fetch the corporate and tax book for the given asset
2550 CURSOR l_okxassetlines_csr(p_kle_id IN NUMBER) IS
2551 SELECT o.asset_id, o.asset_number, o.corporate_book, a.cost, o.depreciation_category, a.original_cost, o.current_units,
2552 o.dnz_chr_id ,a.book_type_code, b.book_class, a.prorate_convention_code
2553 FROM okx_asset_lines_v o, fa_books a, fa_book_controls b
2554 WHERE o.parent_line_id = p_kle_id
2555 AND o.asset_id = a.asset_id
2556 AND a.book_type_code = b.book_type_code
2557 AND a.date_ineffective IS NULL
2558 AND a.transaction_header_id_out IS NULL
2559 ORDER BY book_class;
2560
2561 CURSOR l_offlseassettrx_csr(cp_trx_date IN DATE, cp_asset_number IN VARCHAR2) IS
2562 SELECT h.tsu_code, h.tas_type, h.date_trans_occurred, l.dnz_asset_id,
2563 l.asset_number, l.kle_id ,l.DNZ_KHR_ID
2564 FROM OKL_TRX_ASSETS h, OKL_TXL_ASSETS_B l
2565 WHERE h.id = l.tas_id
2566 AND h.date_trans_occurred <= cp_trx_date
2567 AND h.tas_type in ('AMT','AUD','AUS')
2568 AND l.asset_number = cp_asset_number;
2569
2570 l_okxassetlines_rec l_okxassetlines_csr%ROWTYPE;
2571 l_name OKL_TXL_ASSETS_B.asset_number%TYPE;
2572 l_trx_status VARCHAR2(30);
2573
2574
2575 BEGIN
2576 -- Call start_activity to create savepoint, check compatibility
2577 -- and initialize message list
2578 x_return_status := OKL_API.START_ACTIVITY (
2579 l_api_name
2580 ,p_init_msg_list
2581 ,'_PVT'
2582 ,x_return_status);
2583 -- Check if activity started successfully
2584 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
2585 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
2586 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
2587 RAISE OKL_API.G_EXCEPTION_ERROR;
2588 END IF;
2589
2590 FOR l_okxassetlines_rec IN l_okxassetlines_csr(p_cle_id) LOOP
2591 l_name:=l_okxassetlines_rec.asset_number;
2592 l_trx_status := NULL;
2593 FOR l_offlseassettrx_rec IN l_offlseassettrx_csr(sysdate,l_name) LOOP
2594 l_trx_status := l_offlseassettrx_rec.tsu_code;
2595 IF l_trx_status IN ('ENTERED','ERROR') THEN
2596 EXIT;
2597 END IF;
2598 END LOOP;
2599 IF l_trx_status IN ('ENTERED','ERROR') THEN -- if any trx has this status
2600 --dbms_output.put_line('Pending transactions');
2601 x_return_status := OKL_API.G_RET_STS_ERROR;
2602 OKL_API.set_message( p_app_name => 'OKL',
2603 p_msg_name => 'OKL_AM_PENDING_OFFLEASE',
2604 p_token1 => 'ASSET_NUMBER',
2605 p_token1_value => l_name);
2606 RAISE OKL_API.G_EXCEPTION_ERROR;
2607 end if ;
2608 end loop;
2609 OKL_API.END_ACTIVITY (x_msg_count,x_msg_data );
2610 EXCEPTION
2611 WHEN OKL_API.G_EXCEPTION_ERROR THEN
2612 IF l_offlseassettrx_csr%ISOPEN THEN
2613 CLOSE l_offlseassettrx_csr;
2614 END IF;
2615 IF l_okxassetlines_csr%ISOPEN THEN
2616 CLOSE l_okxassetlines_csr;
2617 END IF;
2618 x_return_status := OKL_API.HANDLE_EXCEPTIONS(
2619 l_api_name,
2620 G_PKG_NAME,
2621 'OKL_API.G_RET_STS_ERROR',
2622 x_msg_count,
2623 x_msg_data,
2624 '_PVT');
2625 WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
2626 IF l_offlseassettrx_csr%ISOPEN THEN
2627 CLOSE l_offlseassettrx_csr;
2628 END IF;
2629 IF l_okxassetlines_csr%ISOPEN THEN
2630 CLOSE l_okxassetlines_csr;
2631 END IF;
2632 x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
2633 l_api_name,
2634 G_PKG_NAME,
2635 'OKL_API.G_RET_STS_UNEXP_ERROR',
2636 x_msg_count,
2637 x_msg_data,
2638 '_PVT');
2639 WHEN OTHERS THEN
2640 IF l_offlseassettrx_csr%ISOPEN THEN
2641 CLOSE l_offlseassettrx_csr;
2642 END IF;
2643 IF l_okxassetlines_csr%ISOPEN THEN
2644 CLOSE l_okxassetlines_csr;
2645 END IF;
2646 x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
2647 l_api_name,
2648 G_PKG_NAME,
2649 'OTHERS',
2650 x_msg_count,
2651 x_msg_data,
2652 '_PVT');
2653 END Check_Offlease_Trans;
2654
2655 --------------
2656 --Bug# 3156924
2657 --------------
2658 --date validation routine
2659 --should be called from UI(revision page only ):
2660
2661 PROCEDURE validate_trx_date(p_api_version IN NUMBER,
2662 p_init_msg_list IN VARCHAR2,
2663 x_return_status OUT NOCOPY VARCHAR2,
2664 x_msg_count OUT NOCOPY NUMBER,
2665 x_msg_data OUT NOCOPY VARCHAR2,
2666 p_chr_id IN NUMBER,
2667 p_trx_date IN VARCHAR2) IS
2668
2669 l_return_status VARCHAR2(1) DEFAULT OKL_API.G_RET_STS_SUCCESS;
2670 l_api_name CONSTANT VARCHAR2(30) := 'VALIDATE_TRX_DATE';
2671 l_api_version CONSTANT NUMBER := 1.0;
2672
2673
2674 l_date_valid VARCHAR2(1) DEFAULT 'N';
2675 l_trx_date DATE ;
2676
2677 --cursor to check the date validity wrt contract dates
2678 CURSOR l_chrb_csr(ptrxdate IN DATE, pchrid IN NUMBER, pdateformat IN VARCHAR2) IS
2679 SELECT 'Y' date_valid,
2680 TO_CHAR(chrb.start_date,pdateformat) con_start_date,
2681 TO_CHAR(chrb.end_date,pdateformat) con_end_date,
2682 chrb.sts_code sts_code
2683 FROM okc_k_headers_b chrb
2684 WHERE ptrxdate BETWEEN TRUNC(chrb.start_date) AND TRUNC(chrb.end_date)
2685 AND chrb.id = pchrid;
2686
2687 l_chrb_rec l_chrb_csr%ROWTYPE;
2688 l_icx_date_format VARCHAR2(240);
2689
2690
2691 BEGIN
2692 x_return_status := l_return_status;
2693
2694 -- Call start_activity to create savepoint, check compatibility
2695 -- and initialize message list
2696 x_return_status := OKL_API.START_ACTIVITY (
2697 l_api_name
2698 ,p_init_msg_list
2699 ,'_PVT'
2700 ,x_return_status);
2701 -- Check if activity started successfully
2702 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
2703 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
2704 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
2705 RAISE OKL_API.G_EXCEPTION_ERROR;
2706 END IF;
2707
2708 --0. verify date format
2709 BEGIN
2710 l_icx_date_format := fnd_profile.value('ICX_DATE_FORMAT_MASK');
2711 l_trx_date := TO_DATE(p_trx_date, l_icx_date_format);
2712 EXCEPTION
2713 WHEN OTHERS THEN
2714 okl_api.set_message(
2715 G_APP_NAME,
2716 G_LLA_INVALID_DATE_FORMAT,
2717 'DATE_FORMAT',
2718 l_icx_date_format,
2719 'COL_NAME',
2720 'Revision Date'
2721 );
2722 x_return_status := OKL_API.G_RET_STS_ERROR;
2723 END;
2724
2725 IF x_return_status <> OKL_API.G_RET_STS_SUCCESS THEN
2726 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
2727 END IF;
2728
2729
2730 --1. Transaction date is required
2731 IF NVL(p_trx_date,okl_api.g_miss_char) = okl_api.g_miss_char THEN
2732 okl_api.set_message(
2733 G_APP_NAME,
2734 G_LLA_MISSING_TRX_DATE
2735 );
2736 x_return_status := OKL_API.G_RET_STS_ERROR;
2737 RAISE OKL_API.G_EXCEPTION_ERROR;
2738 END IF;
2739
2740 --2. Transaction date is between contract start and end date
2741 l_date_valid := 'N';
2742 OPEN l_chrb_csr(ptrxdate => l_trx_date, pchrid => p_chr_id, pdateformat => l_icx_date_format);
2743 FETCH l_chrb_csr INTO l_chrb_rec;
2744 IF l_chrb_csr%NOTFOUND THEN
2745 NULL;
2746 ELSE
2747 l_date_valid := l_chrb_rec.date_valid;
2748 END IF;
2749 CLOSE l_chrb_csr;
2750
2751
2752 IF (l_date_valid = 'N') THEN
2753 okl_api.set_message(
2754 G_APP_NAME,
2755 G_LLA_WRONG_TRX_DATE,
2756 'START_DATE',
2757 l_chrb_rec.con_start_date,
2758 'END_DATE',
2759 l_chrb_rec.con_end_date
2760 );
2761 x_return_status := OKL_API.G_RET_STS_ERROR;
2762 RAISE OKL_API.G_EXCEPTION_ERROR;
2763 END IF;
2764
2765 --3. contracts which are not active can not be split asset
2766 IF (NVL(l_chrb_rec.sts_code,OKL_API.G_MISS_CHAR) <> 'BOOKED') THEN
2767 okl_api.set_message(
2768 G_APP_NAME,
2769 G_LLA_REV_ONLY_BOOKED
2770 );
2771 x_return_status := OKL_API.G_RET_STS_ERROR;
2772 RAISE OKL_API.G_EXCEPTION_ERROR;
2773 END IF;
2774 OKL_API.END_ACTIVITY (x_msg_count,
2775 x_msg_data );
2776 EXCEPTION
2777 WHEN OKL_API.G_EXCEPTION_ERROR THEN
2778 IF l_chrb_csr%ISOPEN THEN
2779 CLOSE l_chrb_csr;
2780 END IF;
2781 x_return_status := OKL_API.HANDLE_EXCEPTIONS(
2782 l_api_name,
2783 G_PKG_NAME,
2784 'OKL_API.G_RET_STS_ERROR',
2785 x_msg_count,
2786 x_msg_data,
2787 '_PVT');
2788 WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
2789 IF l_chrb_csr%ISOPEN THEN
2790 CLOSE l_chrb_csr;
2791 END IF;
2792 x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
2793 l_api_name,
2794 G_PKG_NAME,
2795 'OKL_API.G_RET_STS_UNEXP_ERROR',
2796 x_msg_count,
2797 x_msg_data,
2798 '_PVT');
2799 WHEN OTHERS THEN
2800 IF l_chrb_csr%ISOPEN THEN
2801 CLOSE l_chrb_csr;
2802 END IF;
2803 x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
2804 l_api_name,
2805 G_PKG_NAME,
2806 'OTHERS',
2807 x_msg_count,
2808 x_msg_data,
2809 '_PVT');
2810
2811 END validate_trx_date;
2812
2813 -----------------------------------------------------------------
2814 --01-Mar-2004: Bug# 3156924
2815 --overloaded will be called locally from create_split_transaction
2816 -----------------------------------------------------------------
2817 PROCEDURE validate_trx_date(p_api_version IN NUMBER,
2818 p_init_msg_list IN VARCHAR2,
2819 x_return_status OUT NOCOPY VARCHAR2,
2820 x_msg_count OUT NOCOPY NUMBER,
2821 x_msg_data OUT NOCOPY VARCHAR2,
2822 p_cle_id IN NUMBER,
2823 p_trx_date IN DATE) IS
2824
2825 l_return_status VARCHAR2(1) DEFAULT OKL_API.G_RET_STS_SUCCESS;
2826 l_api_name CONSTANT VARCHAR2(30) := 'VALIDATE_TRX_DATE';
2827 l_api_version CONSTANT NUMBER := 1.0;
2828
2829
2830 l_date_valid VARCHAR2(1) DEFAULT 'N';
2831
2832 --cursor to check the date validity wrt contract dates
2833 --Bug# 5946411: ER
2834 /*
2835 CURSOR l_cleb_csr(ptrxdate IN DATE, pcleid IN NUMBER, pdateformat IN VARCHAR2) IS
2836 SELECT 'Y' date_valid,
2837 TO_CHAR(cleb.start_date,pdateformat) line_start_date,
2838 TO_CHAR(cleb.end_date,pdateformat) line_end_date,
2839 cleb.sts_code sts_code
2840 FROM okc_k_lines_b cleb
2841 WHERE ptrxdate BETWEEN TRUNC(cleb.start_date) AND TRUNC(cleb.end_date)
2842 AND cleb.id = pcleid;
2843 */
2844 CURSOR l_cleb_csr(pcleid IN NUMBER, pdateformat IN VARCHAR2) IS
2845 SELECT TO_CHAR(cleb.start_date,pdateformat) line_start_date,
2846 TO_CHAR(cleb.end_date,pdateformat) line_end_date,
2847 cleb.sts_code sts_code,
2848 trunc(cleb.start_date) cle_start_date,
2849 TRUNC(cleb.end_date) cle_end_date
2850 FROM okc_k_lines_b cleb
2851 WHERE cleb.id = pcleid;
2852 --Bug# 5946411: ER end
2853
2854 /* --Added by HARIVEN - cursor to fetch the Start and End Date
2855 CURSOR l_strdate_csr(pcleid IN NUMBER, pdateformat IN VARCHAR2) IS
2856 SELECT 'Y' date_valid,
2857 TO_CHAR(cleb.start_date,pdateformat) line_start_date,
2858 TO_CHAR(cleb.end_date,pdateformat) line_end_date,
2859 cleb.sts_code sts_code
2860 FROM okc_k_lines_b cleb
2861 WHERE cleb.id = pcleid;*/
2862
2863 l_cleb_rec l_cleb_csr%ROWTYPE;
2864 l_icx_date_format VARCHAR2(240);
2865
2866
2867 BEGIN
2868 x_return_status := l_return_status;
2869
2870 -- Call start_activity to create savepoint, check compatibility
2871 -- and initialize message list
2872 x_return_status := OKL_API.START_ACTIVITY (
2873 l_api_name
2874 ,p_init_msg_list
2875 ,'_PVT'
2876 ,x_return_status);
2877 -- Check if activity started successfully
2878 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
2879 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
2880 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
2881 RAISE OKL_API.G_EXCEPTION_ERROR;
2882 END IF;
2883
2884 --1. Transaction date is required
2885 IF NVL(p_trx_date,okl_api.g_miss_date) = okl_api.g_miss_date THEN
2886 okl_api.set_message(
2887 G_APP_NAME,
2888 G_LLA_MISSING_TRX_DATE
2889 );
2890 x_return_status := OKL_API.G_RET_STS_ERROR;
2891 RAISE OKL_API.G_EXCEPTION_ERROR;
2892 END IF;
2893
2894 l_icx_date_format := NVL(fnd_profile.value('ICX_DATE_FORMAT_MASK'),'DD-MON-YYYY');
2895 --2. Transaction date is between contract start and end date
2896 --Bug# 5946411: ER
2897 /*
2898 l_date_valid := 'N';
2899 OPEN l_cleb_csr(ptrxdate => p_trx_date, pcleid => p_cle_id, pdateformat => l_icx_date_format);
2900 FETCH l_cleb_csr INTO l_cleb_rec;
2901 IF l_cleb_csr%NOTFOUND THEN
2902 NULL;
2903 ELSE
2904 l_date_valid := l_cleb_rec.date_valid;
2905 END IF;
2906 CLOSE l_cleb_csr;
2907 */
2908 l_date_valid := 'Y';
2909 OPEN l_cleb_csr( pcleid => p_cle_id, pdateformat => l_icx_date_format);
2910 FETCH l_cleb_csr INTO l_cleb_rec;
2911 IF l_cleb_csr%NOTFOUND THEN
2912 NULL;
2913 ELSE
2914 if (l_cleb_rec.sts_code = 'BOOKED')
2915 AND NOT (p_trx_date BETWEEN l_cleb_rec.cle_start_date AND l_cleb_rec.cle_end_date) THEN
2916 l_date_valid := 'N';
2917 end if;
2918 END IF;
2919 CLOSE l_cleb_csr;
2920
2921 --Bug# 5946411: ER End
2922
2923
2924 IF (l_date_valid = 'N') THEN
2925 /*OPEN l_strdate_csr(pcleid => p_cle_id, pdateformat => l_icx_date_format);
2926 FETCH l_strdate_csr INTO l_cleb_rec;
2927 IF l_strdate_csr%NOTFOUND THEN
2928 NULL;
2929 ELSE
2930 l_date_valid := l_cleb_rec.date_valid;
2931 END IF;
2932 CLOSE l_strdate_csr;*/
2933 okl_api.set_message(
2934 G_APP_NAME,
2935 G_LLA_WRONG_TRX_DATE,
2936 'START_DATE',
2937 l_cleb_rec.line_start_date,
2938 'END_DATE',
2939 l_cleb_rec.line_end_date
2940 );
2941 x_return_status := OKL_API.G_RET_STS_ERROR;
2942 RAISE OKL_API.G_EXCEPTION_ERROR;
2943 END IF;
2944 EXCEPTION
2945 WHEN OKL_API.G_EXCEPTION_ERROR THEN
2946 IF l_cleb_csr%ISOPEN THEN
2947 CLOSE l_cleb_csr;
2948 END IF;
2949 x_return_status := OKL_API.HANDLE_EXCEPTIONS(
2950 l_api_name,
2951 G_PKG_NAME,
2952 'OKL_API.G_RET_STS_ERROR',
2953 x_msg_count,
2954 x_msg_data,
2955 '_PVT');
2956 WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
2957 IF l_cleb_csr%ISOPEN THEN
2958 CLOSE l_cleb_csr;
2959 END IF;
2960 x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
2961 l_api_name,
2962 G_PKG_NAME,
2963 'OKL_API.G_RET_STS_UNEXP_ERROR',
2964 x_msg_count,
2965 x_msg_data,
2966 '_PVT');
2967 WHEN OTHERS THEN
2968 IF l_cleb_csr%ISOPEN THEN
2969 CLOSE l_cleb_csr;
2970 END IF;
2971 x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
2972 l_api_name,
2973 G_PKG_NAME,
2974 'OTHERS',
2975 x_msg_count,
2976 x_msg_data,
2977 '_PVT');
2978
2979 END validate_trx_date;
2980 ---------------
2981 --Bug# 3156924
2982 --------------
2983 -------------------------------------------------------------------------------
2984 --Function to get Asset Line Record
2985 ------------------------------------------------------------------------------
2986 FUNCTION get_ast_line(p_cle_id IN NUMBER,
2987 x_no_data_found OUT NOCOPY BOOLEAN)
2988 RETURN ast_line_rec_type IS
2989 CURSOR ast_line_curs(p_cle_id IN NUMBER) IS
2990 SELECT
2991 ID1,
2992 ID2,
2993 NAME,
2994 DESCRIPTION,
2995 ITEM_DESCRIPTION,
2996 COMMENTS,
2997 CHR_ID,
2998 DNZ_CHR_ID,
2999 LTY_CODE,
3000 LSE_TYPE,
3001 LSE_PARENT_ID,
3002 PARENT_LINE_ID,
3003 LINE_NUMBER,
3004 DATE_TERMINATED,
3005 START_DATE_ACTIVE,
3006 END_DATE_ACTIVE,
3007 STATUS,
3008 ASSET_ID,
3009 QUANTITY,
3010 UNIT_OF_MEASURE_CODE,
3011 ASSET_NUMBER,
3012 CORPORATE_BOOK,
3013 LIFE_IN_MONTHS,
3014 ORIGINAL_COST,
3015 COST,
3016 ADJUSTED_COST,
3017 TAG_NUMBER,
3018 CURRENT_UNITS,
3019 SERIAL_NUMBER,
3020 REVAL_CEILING,
3021 NEW_USED,
3022 IN_SERVICE_DATE,
3023 MANUFACTURER_NAME,
3024 MODEL_NUMBER,
3025 ASSET_TYPE,
3026 SALVAGE_VALUE,
3027 PERCENT_SALVAGE_VALUE,
3028 DEPRECIATION_CATEGORY,
3029 DEPRN_START_DATE,
3030 DEPRN_METHOD_CODE,
3031 RATE_ADJUSTMENT_FACTOR,
3032 BASIC_RATE,
3033 ADJUSTED_RATE,
3034 RECOVERABLE_COST,
3035 ORG_ID,
3036 SET_OF_BOOKS_ID,
3037 PROPERTY_TYPE_CODE,
3038 PROPERTY_1245_1250_CODE,
3039 IN_USE_FLAG,
3040 OWNED_LEASED,
3041 INVENTORIAL,
3042 LINE_STATUS
3043 FROM OKX_ASSET_LINES_V
3044 WHERE parent_line_id = p_cle_id;
3045 l_ast_line_rec ast_line_rec_type;
3046 BEGIN
3047 x_no_data_found := TRUE;
3048 OPEN ast_line_curs(p_cle_id);
3049 FETCH ast_line_curs INTO
3050 l_ast_line_rec.ID1,
3051 l_ast_line_rec.ID2,
3052 l_ast_line_rec.NAME,
3053 l_ast_line_rec.DESCRIPTION,
3054 l_ast_line_rec.ITEM_DESCRIPTION,
3055 l_ast_line_rec.COMMENTS,
3056 l_ast_line_rec.CHR_ID,
3057 l_ast_line_rec.DNZ_CHR_ID,
3058 l_ast_line_rec.LTY_CODE,
3059 l_ast_line_rec.LSE_TYPE,
3060 l_ast_line_rec.LSE_PARENT_ID,
3061 l_ast_line_rec.PARENT_LINE_ID,
3062 l_ast_line_rec.LINE_NUMBER,
3063 l_ast_line_rec.DATE_TERMINATED,
3064 l_ast_line_rec.START_DATE_ACTIVE,
3065 l_ast_line_rec.END_DATE_ACTIVE,
3066 l_ast_line_rec.STATUS,
3067 l_ast_line_rec.ASSET_ID,
3068 l_ast_line_rec.QUANTITY,
3069 l_ast_line_rec.UNIT_OF_MEASURE_CODE,
3070 l_ast_line_rec.ASSET_NUMBER,
3071 l_ast_line_rec.CORPORATE_BOOK,
3072 l_ast_line_rec.LIFE_IN_MONTHS,
3073 l_ast_line_rec.ORIGINAL_COST,
3074 l_ast_line_rec.COST,
3075 l_ast_line_rec.ADJUSTED_COST,
3076 l_ast_line_rec.TAG_NUMBER,
3077 l_ast_line_rec.CURRENT_UNITS,
3078 l_ast_line_rec.SERIAL_NUMBER,
3079 l_ast_line_rec.REVAL_CEILING,
3080 l_ast_line_rec.NEW_USED,
3081 l_ast_line_rec.IN_SERVICE_DATE,
3082 l_ast_line_rec.MANUFACTURER_NAME,
3083 l_ast_line_rec.MODEL_NUMBER,
3084 l_ast_line_rec.ASSET_TYPE,
3085 l_ast_line_rec.SALVAGE_VALUE,
3086 l_ast_line_rec.PERCENT_SALVAGE_VALUE,
3087 l_ast_line_rec.DEPRECIATION_CATEGORY,
3088 l_ast_line_rec.DEPRN_START_DATE,
3089 l_ast_line_rec.DEPRN_METHOD_CODE,
3090 l_ast_line_rec.RATE_ADJUSTMENT_FACTOR,
3091 l_ast_line_rec.BASIC_RATE,
3092 l_ast_line_rec.ADJUSTED_RATE,
3093 l_ast_line_rec.RECOVERABLE_COST,
3094 l_ast_line_rec.ORG_ID,
3095 l_ast_line_rec.SET_OF_BOOKS_ID,
3096 l_ast_line_rec.PROPERTY_TYPE_CODE,
3097 l_ast_line_rec.PROPERTY_1245_1250_CODE,
3098 l_ast_line_rec.IN_USE_FLAG,
3099 l_ast_line_rec.OWNED_LEASED,
3100 l_ast_line_rec.INVENTORIAL,
3101 l_ast_line_rec.LINE_STATUS;
3102
3103 x_no_data_found := ast_line_curs%NOTFOUND;
3104 CLOSE ast_line_curs;
3105 RETURN (l_ast_line_rec);
3106 END get_ast_line;
3107 FUNCTION get_ast_line (p_cle_id IN NUMBER) RETURN ast_line_rec_type IS
3108 l_row_not_found BOOLEAN := TRUE;
3109 BEGIN
3110 RETURN (get_ast_line(p_cle_id,l_row_not_found));
3111 END get_ast_line;
3112 --------------------------------------------------------------------------------
3113 --Function to get txl details for a given tal_id
3114 --------------------------------------------------------------------------------
3115 FUNCTION get_txlv_rec (
3116 p_kle_id IN NUMBER,
3117 x_no_data_found OUT NOCOPY BOOLEAN
3118 ) RETURN txlv_rec_type IS
3119 CURSOR txlv_csr (p_kle_id IN NUMBER) IS
3120 SELECT ID,
3121 OBJECT_VERSION_NUMBER,
3122 SFWT_FLAG,
3123 TAS_ID,
3124 ILO_ID,
3125 ILO_ID_OLD,
3126 IAY_ID,
3127 IAY_ID_NEW,
3128 KLE_ID,
3129 DNZ_KHR_ID,
3130 LINE_NUMBER,
3131 ORG_ID,
3132 TAL_TYPE,
3133 ASSET_NUMBER,
3134 DESCRIPTION,
3135 FA_LOCATION_ID,
3136 ORIGINAL_COST,
3137 CURRENT_UNITS,
3138 MANUFACTURER_NAME,
3139 YEAR_MANUFACTURED,
3140 SUPPLIER_ID,
3141 USED_ASSET_YN,
3142 TAG_NUMBER,
3143 MODEL_NUMBER,
3144 CORPORATE_BOOK,
3145 DATE_PURCHASED,
3146 DATE_DELIVERY,
3147 IN_SERVICE_DATE,
3148 LIFE_IN_MONTHS,
3149 DEPRECIATION_ID,
3150 DEPRECIATION_COST,
3151 DEPRN_METHOD,
3152 DEPRN_RATE,
3153 SALVAGE_VALUE,
3154 PERCENT_SALVAGE_VALUE,
3155 --Bug# 2981308
3156 ASSET_KEY_ID,
3157 ATTRIBUTE_CATEGORY,
3158 ATTRIBUTE1,
3159 ATTRIBUTE2,
3160 ATTRIBUTE3,
3161 ATTRIBUTE4,
3162 ATTRIBUTE5,
3163 ATTRIBUTE6,
3164 ATTRIBUTE7,
3165 ATTRIBUTE8,
3166 ATTRIBUTE9,
3167 ATTRIBUTE10,
3168 ATTRIBUTE11,
3169 ATTRIBUTE12,
3170 ATTRIBUTE13,
3171 ATTRIBUTE14,
3172 ATTRIBUTE15,
3173 CREATED_BY,
3174 CREATION_DATE,
3175 LAST_UPDATED_BY,
3176 LAST_UPDATE_DATE,
3177 LAST_UPDATE_LOGIN,
3178 DEPRECIATE_YN,
3179 HOLD_PERIOD_DAYS,
3180 OLD_SALVAGE_VALUE,
3181 NEW_RESIDUAL_VALUE,
3182 OLD_RESIDUAL_VALUE,
3183 UNITS_RETIRED,
3184 COST_RETIRED,
3185 SALE_PROCEEDS,
3186 REMOVAL_COST,
3187 DNZ_ASSET_ID,
3188 DATE_DUE,
3189 REP_ASSET_ID,
3190 LKE_ASSET_ID,
3191 MATCH_AMOUNT,
3192 SPLIT_INTO_SINGLES_FLAG,
3193 SPLIT_INTO_UNITS,
3194 --Bug #2723498 : 11.5.9 - Multi currency compliance
3195 CURRENCY_CODE,
3196 CURRENCY_CONVERSION_TYPE,
3197 CURRENCY_CONVERSION_RATE,
3198 CURRENCY_CONVERSION_DATE
3199 -- Multi-Currency Change
3200 FROM Okl_Txl_Assets_V
3201 WHERE okl_txl_assets_v.kle_id = p_kle_id
3202 AND EXISTS (SELECT NULL
3203 FROM okl_trx_Assets trx,
3204 okl_trx_types_tl ttyp
3205 WHERE trx.id = okl_txl_assets_v.tas_id
3206 AND trx.tsu_code = 'ENTERED'
3207 AND trx.try_id = ttyp.id
3208 AND ttyp.name = 'Split Asset'
3209 AND ttyp.LANGUAGE = 'US');
3210
3211 l_txlv_rec txlv_rec_type;
3212 BEGIN
3213 x_no_data_found := TRUE;
3214 -- Get current database values
3215 OPEN txlv_csr (p_kle_id => p_kle_id);
3216 FETCH txlv_csr INTO
3217 l_txlv_rec.ID,
3218 l_txlv_rec.OBJECT_VERSION_NUMBER,
3219 l_txlv_rec.SFWT_FLAG,
3220 l_txlv_rec.TAS_ID,
3221 l_txlv_rec.ILO_ID,
3222 l_txlv_rec.ILO_ID_OLD,
3223 l_txlv_rec.IAY_ID,
3224 l_txlv_rec.IAY_ID_NEW,
3225 l_txlv_rec.KLE_ID,
3226 l_txlv_rec.DNZ_KHR_ID,
3227 l_txlv_rec.LINE_NUMBER,
3228 l_txlv_rec.ORG_ID,
3229 l_txlv_rec.TAL_TYPE,
3230 l_txlv_rec.ASSET_NUMBER,
3231 l_txlv_rec.DESCRIPTION,
3232 l_txlv_rec.FA_LOCATION_ID,
3233 l_txlv_rec.ORIGINAL_COST,
3234 l_txlv_rec.CURRENT_UNITS,
3235 l_txlv_rec.MANUFACTURER_NAME,
3236 l_txlv_rec.YEAR_MANUFACTURED,
3237 l_txlv_rec.SUPPLIER_ID,
3238 l_txlv_rec.USED_ASSET_YN,
3239 l_txlv_rec.TAG_NUMBER,
3240 l_txlv_rec.MODEL_NUMBER,
3241 l_txlv_rec.CORPORATE_BOOK,
3242 l_txlv_rec.DATE_PURCHASED,
3243 l_txlv_rec.DATE_DELIVERY,
3244 l_txlv_rec.IN_SERVICE_DATE,
3245 l_txlv_rec.LIFE_IN_MONTHS,
3246 l_txlv_rec.DEPRECIATION_ID,
3247 l_txlv_rec.DEPRECIATION_COST,
3248 l_txlv_rec.DEPRN_METHOD,
3249 l_txlv_rec.DEPRN_RATE,
3250 l_txlv_rec.SALVAGE_VALUE,
3251 l_txlv_rec.PERCENT_SALVAGE_VALUE,
3252 --Bug# 2981308 :
3253 l_txlv_rec.ASSET_KEY_ID,
3254 l_txlv_rec.ATTRIBUTE_CATEGORY,
3255 l_txlv_rec.ATTRIBUTE1,
3256 l_txlv_rec.ATTRIBUTE2,
3257 l_txlv_rec.ATTRIBUTE3,
3258 l_txlv_rec.ATTRIBUTE4,
3259 l_txlv_rec.ATTRIBUTE5,
3260 l_txlv_rec.ATTRIBUTE6,
3261 l_txlv_rec.ATTRIBUTE7,
3262 l_txlv_rec.ATTRIBUTE8,
3263 l_txlv_rec.ATTRIBUTE9,
3264 l_txlv_rec.ATTRIBUTE10,
3265 l_txlv_rec.ATTRIBUTE11,
3266 l_txlv_rec.ATTRIBUTE12,
3267 l_txlv_rec.ATTRIBUTE13,
3268 l_txlv_rec.ATTRIBUTE14,
3269 l_txlv_rec.ATTRIBUTE15,
3270 l_txlv_rec.CREATED_BY,
3271 l_txlv_rec.CREATION_DATE,
3272 l_txlv_rec.LAST_UPDATED_BY,
3273 l_txlv_rec.LAST_UPDATE_DATE,
3274 l_txlv_rec.LAST_UPDATE_LOGIN,
3275 l_txlv_rec.DEPRECIATE_YN,
3276 l_txlv_rec.HOLD_PERIOD_DAYS,
3277 l_txlv_rec.OLD_SALVAGE_VALUE,
3278 l_txlv_rec.NEW_RESIDUAL_VALUE,
3279 l_txlv_rec.OLD_RESIDUAL_VALUE,
3280 l_txlv_rec.UNITS_RETIRED,
3281 l_txlv_rec.COST_RETIRED,
3282 l_txlv_rec.SALE_PROCEEDS,
3283 l_txlv_rec.REMOVAL_COST,
3284 l_txlv_rec.DNZ_ASSET_ID,
3285 l_txlv_rec.DATE_DUE,
3286 l_txlv_rec.REP_ASSET_ID,
3287 l_txlv_rec.LKE_ASSET_ID,
3288 l_txlv_rec.MATCH_AMOUNT,
3289 l_txlv_rec.SPLIT_INTO_SINGLES_FLAG,
3290 l_txlv_rec.SPLIT_INTO_UNITS,
3291 -- Multi-Currency Change
3292 l_txlv_rec.CURRENCY_CODE,
3293 l_txlv_rec.CURRENCY_CONVERSION_TYPE,
3294 l_txlv_rec.CURRENCY_CONVERSION_RATE,
3295 l_txlv_rec.CURRENCY_CONVERSION_DATE
3296 ;
3297 -- Multi-Currency Change
3298 x_no_data_found := txlv_csr%NOTFOUND;
3299 CLOSE txlv_csr;
3300 RETURN(l_txlv_rec);
3301 END get_txlv_rec;
3302 --------------------------------------------------------------------------------
3303 --Function to get trx details for a given tal_id
3304 --------------------------------------------------------------------------------
3305 FUNCTION get_trx_details (
3306 p_tal_id IN NUMBER,
3307 x_no_data_found OUT NOCOPY BOOLEAN
3308 ) RETURN txdv_tbl_type IS
3309 CURSOR txdv_csr(p_tal_id IN NUMBER) IS
3310 SELECT
3311 ID,
3312 OBJECT_VERSION_NUMBER,
3313 TAL_ID,
3314 TARGET_KLE_ID,
3315 LINE_DETAIL_NUMBER,
3316 ASSET_NUMBER,
3317 DESCRIPTION,
3318 QUANTITY,
3319 COST,
3320 TAX_BOOK,
3321 LIFE_IN_MONTHS_TAX,
3322 DEPRN_METHOD_TAX,
3323 DEPRN_RATE_TAX,
3324 SALVAGE_VALUE,
3325 SPLIT_PERCENT,
3326 INVENTORY_ITEM_ID,
3327 ATTRIBUTE_CATEGORY,
3328 ATTRIBUTE1,
3329 ATTRIBUTE2,
3330 ATTRIBUTE3,
3331 ATTRIBUTE4,
3332 ATTRIBUTE5,
3333 ATTRIBUTE6,
3334 ATTRIBUTE7,
3335 ATTRIBUTE8,
3336 ATTRIBUTE9,
3337 ATTRIBUTE10,
3338 ATTRIBUTE11,
3339 ATTRIBUTE12,
3340 ATTRIBUTE13,
3341 ATTRIBUTE14,
3342 ATTRIBUTE15,
3343 CREATED_BY,
3344 CREATION_DATE,
3345 LAST_UPDATED_BY,
3346 LAST_UPDATE_DATE,
3347 LAST_UPDATE_LOGIN,
3348 --Bug #2723498 : 11.5.9 - Multi currency compliance
3349 CURRENCY_CODE,
3350 CURRENCY_CONVERSION_TYPE,
3351 CURRENCY_CONVERSION_RATE,
3352 CURRENCY_CONVERSION_DATE
3353 FROM Okl_Txd_Assets_v txdv
3354 WHERE txdv.tal_id = p_tal_id
3355 ORDER BY NVL(target_kle_id,-1)
3356 --Bug# 3502142
3357 , NVL(split_percent,-1);
3358
3359 l_txdv_rec txdv_rec_type;
3360 l_txdv_tbl txdv_tbl_type;
3361 r_count NUMBER DEFAULT 0;
3362 BEGIN
3363 x_no_data_found := TRUE;
3364 -- Get current database values
3365 OPEN txdv_csr (p_tal_id);
3366 LOOP
3367 FETCH txdv_csr INTO
3368 l_txdv_rec.ID,
3369 l_txdv_rec.OBJECT_VERSION_NUMBER,
3370 l_txdv_rec.TAL_ID,
3371 l_txdv_rec.TARGET_KLE_ID,
3372 l_txdv_rec.LINE_DETAIL_NUMBER,
3373 l_txdv_rec.ASSET_NUMBER,
3374 l_txdv_rec.description,
3375 l_txdv_rec.QUANTITY,
3376 l_txdv_rec.COST,
3377 l_txdv_rec.TAX_BOOK,
3378 l_txdv_rec.LIFE_IN_MONTHS_TAX,
3379 l_txdv_rec.DEPRN_METHOD_TAX,
3380 l_txdv_rec.DEPRN_RATE_TAX,
3381 l_txdv_rec.SALVAGE_VALUE,
3382 l_txdv_rec.SPLIT_PERCENT,
3383 l_txdv_rec.INVENTORY_ITEM_ID,
3384 l_txdv_rec.ATTRIBUTE_CATEGORY,
3385 l_txdv_rec.ATTRIBUTE1,
3386 l_txdv_rec.ATTRIBUTE2,
3387 l_txdv_rec.ATTRIBUTE3,
3388 l_txdv_rec.ATTRIBUTE4,
3389 l_txdv_rec.ATTRIBUTE5,
3390 l_txdv_rec.ATTRIBUTE6,
3391 l_txdv_rec.ATTRIBUTE7,
3392 l_txdv_rec.ATTRIBUTE8,
3393 l_txdv_rec.ATTRIBUTE9,
3394 l_txdv_rec.ATTRIBUTE10,
3395 l_txdv_rec.ATTRIBUTE11,
3396 l_txdv_rec.ATTRIBUTE12,
3397 l_txdv_rec.ATTRIBUTE13,
3398 l_txdv_rec.ATTRIBUTE14,
3399 l_txdv_rec.ATTRIBUTE15,
3400 l_txdv_rec.CREATED_BY,
3401 l_txdv_rec.CREATION_DATE,
3402 l_txdv_rec.LAST_UPDATED_BY,
3403 l_txdv_rec.LAST_UPDATE_DATE,
3404 l_txdv_rec.LAST_UPDATE_LOGIN,
3405 -- Multi-Currency Change
3406 l_txdv_rec.CURRENCY_CODE,
3407 l_txdv_rec.CURRENCY_CONVERSION_TYPE,
3408 l_txdv_rec.CURRENCY_CONVERSION_RATE,
3409 l_txdv_rec.CURRENCY_CONVERSION_DATE;
3410 -- Multi-Currency Change
3411 EXIT WHEN txdv_csr%NOTFOUND;
3412 r_count := txdv_csr%rowcount;
3413 l_txdv_tbl(r_count) := l_txdv_rec;
3414 END LOOP;
3415 CLOSE txdv_csr;
3416 IF r_count <> 0 THEN
3417 x_no_data_found := FALSE;
3418 ELSIF r_count = 0 THEN
3419 x_no_data_found := TRUE;
3420 END IF;
3421 RETURN(l_txdv_tbl);
3422 END get_trx_details;
3423 --------------------------------------------------------------------------------
3424 --Function to verify whether the generated split asset number exists in FA
3425 --------------------------------------------------------------------------------
3426 FUNCTION Asset_Number_Exists(p_asset_number IN VARCHAR2,
3427 x_asset_exists OUT NOCOPY VARCHAR2) RETURN VARCHAR2 IS
3428 l_asset_exists VARCHAR2(1) DEFAULT 'N';
3429 l_return_status VARCHAR2(1) DEFAULT OKL_API.G_RET_STS_SUCCESS;
3430
3431 --chk for asset in FA
3432 CURSOR asset_chk_curs1 (p_asset_number IN VARCHAR2) IS
3433 SELECT 'Y'
3434 FROM okx_assets_v okx
3435 WHERE okx.asset_number = p_asset_number;
3436
3437 --chk for asset on asset line
3438 CURSOR asset_chk_curs2 (p_asset_number IN VARCHAR2) IS
3439 SELECT 'Y'
3440 FROM okl_k_lines_full_v kle,
3441 okc_line_styles_b lse
3442 WHERE kle.name = p_asset_number
3443 AND kle.lse_id = lse.id
3444 --and lse.lty_code = 'FIXED_ASSET';
3445 --Bug# 3222804
3446 AND lse.lty_code = 'FREE_FORM1';
3447
3448 --check for asset on an split asset transaction
3449 CURSOR asset_chk_curs3 (p_asset_number IN VARCHAR2) IS
3450 SELECT 'Y'
3451 FROM okl_txd_assets_b txd
3452 WHERE NVL(txd.asset_number,'-999999999999999') = p_asset_number
3453 AND EXISTS (SELECT NULL
3454 FROM okl_trx_Assets trx,
3455 okl_trx_types_tl ttyp,
3456 okl_txl_assets_b txl
3457 WHERE trx.id = txl.tas_id
3458 AND trx.try_id = ttyp.id
3459 AND ttyp.name = 'Split Asset'
3460 AND ttyp.LANGUAGE = 'US'
3461 AND txl.id = txd.tal_id);
3462
3463
3464 BEGIN
3465 l_return_status := OKL_API.G_RET_STS_SUCCESS;
3466 --dbms_output.put_line('Asset Number'||p_asset_number);
3467 l_asset_exists := 'N';
3468 OPEN asset_chk_curs1(p_asset_number);
3469 FETCH asset_chk_curs1 INTO l_asset_exists;
3470 IF asset_chk_curs1%NOTFOUND THEN
3471 OPEN asset_chk_curs2(p_asset_number);
3472 FETCH asset_chk_curs2 INTO l_asset_exists;
3473 IF asset_chk_curs2%NOTFOUND THEN
3474 OPEN asset_chk_curs3(p_asset_number);
3475 FETCH asset_chk_curs3 INTO l_asset_exists;
3476 IF asset_chk_curs3%NOTFOUND THEN
3477 NULL;
3478 END IF;
3479 CLOSE asset_chk_curs3;
3480 END IF;
3481 CLOSE asset_chk_curs2;
3482 END IF;
3483 CLOSE asset_chk_curs1;
3484 x_asset_exists := l_asset_exists;
3485 --return status to caller
3486 RETURN(l_return_status);
3487 EXCEPTION
3488 WHEN OTHERS THEN
3489 -- store SQL error message on message stack for caller
3490 OKL_API.set_message(
3491 G_APP_NAME,
3492 G_UNEXPECTED_ERROR,
3493 G_SQLCODE_TOKEN,
3494 SQLCODE,
3495 G_SQLERRM_TOKEN,
3496 SQLERRM);
3497 --close the cursor
3498 IF asset_chk_curs1%ISOPEN THEN
3499 CLOSE asset_chk_curs1;
3500 END IF;
3501 IF asset_chk_curs2%ISOPEN THEN
3502 CLOSE asset_chk_curs2;
3503 END IF;
3504 IF asset_chk_curs3%ISOPEN THEN
3505 CLOSE asset_chk_curs3;
3506 END IF;
3507 --send back status to caller
3508 l_return_status := OKL_API.G_RET_STS_UNEXP_ERROR;
3509 RETURN(l_return_status);
3510 END Asset_Number_Exists;
3511 --------------------------------------------------------------------------------
3512 --Function to validate okl_txd_Assets_v attributes
3513 --------------------------------------------------------------------------------
3514 FUNCTION Validate_Attributes (p_txdv_rec IN txdv_rec_type)
3515 RETURN VARCHAR2 IS
3516
3517 l_return_status VARCHAR2(3) := OKL_API.G_RET_STS_SUCCESS;
3518
3519 --chk for asset in FA
3520 CURSOR asset_chk_curs1 (p_asset_number IN VARCHAR2) IS
3521 SELECT 'Y'
3522 FROM okx_assets_v okx
3523 WHERE okx.asset_number = p_asset_number;
3524
3525 --chk for asset on asset line
3526 CURSOR asset_chk_curs2 (p_asset_number IN VARCHAR2) IS
3527 SELECT 'Y'
3528 FROM okl_k_lines_full_v kle,
3529 okc_line_styles_b lse
3530 WHERE kle.name = p_asset_number
3531 AND kle.lse_id = lse.id
3532 AND lse.lty_code = 'FIXED_ASSET';
3533
3534
3535 --check for asset on an split asset transaction
3536 CURSOR asset_chk_curs3 (p_asset_number IN VARCHAR2, p_txdv_id IN NUMBER) IS
3537 SELECT 'Y'
3538 FROM okl_txd_assets_b txd,
3539 okl_txl_assets_b txl,
3540 okl_trx_types_tl ttyp,
3541 okl_trx_assets trx
3542 WHERE NVL(txd.asset_number,'-999999999999999') = p_asset_number
3543 AND txd.tal_id = txl.id
3544 AND txl.tas_id = trx.id
3545 AND trx.try_id = ttyp.id
3546 AND ttyp.name = 'Split Asset'
3547 AND ttyp.LANGUAGE = 'US'
3548 AND NVL(txd.target_kle_id,-99) <> txl.kle_id
3549 AND trx.tsu_code = 'ENTERED'
3550 AND txd.id <> p_txdv_id;
3551
3552 --check for asset on create asset or rebook transaction
3553 CURSOR asset_chk_curs4 (p_asset_number IN VARCHAR2) IS
3554 SELECT 'Y'
3555 FROM okl_txl_assets_b txl
3556 WHERE txl.asset_number = p_asset_number
3557 AND txl.tal_type IN ('ALI','CRB'); --only transactions apart from split which create a new line
3558
3559
3560 l_txdv_rec txdv_rec_type;
3561 l_asset_exists VARCHAR2(1) DEFAULT 'N';
3562
3563 BEGIN
3564 l_txdv_rec := p_txdv_rec;
3565 l_return_status := OKL_API.G_RET_STS_SUCCESS;
3566 --1.Validate existence of asset number
3567 IF (l_txdv_rec.asset_number IS NULL) OR (l_txdv_rec.asset_number = OKL_API.G_MISS_CHAR) THEN
3568 -- store SQL error message on message stack
3569 OKL_API.set_message(p_app_name => G_APP_NAME,
3570 p_msg_name => G_ASSET_REQUIRED);
3571 l_return_status := OKL_API.G_RET_STS_ERROR;
3572 -- halt validation as it is a required field
3573 RAISE G_EXCEPTION_HALT_VALIDATION;
3574 ELSE
3575 IF LENGTH(l_txdv_rec.asset_number) > 15 THEN
3576 -- store SQL error message on message stack
3577 OKL_API.set_message(p_app_name => G_APP_NAME,
3578 p_msg_name => G_ASSET_LENGTH);
3579 l_return_status := OKL_API.G_RET_STS_ERROR;
3580 -- halt validation as it is a required field
3581 RAISE G_EXCEPTION_HALT_VALIDATION;
3582 ELSE
3583 l_asset_exists := 'N';
3584 OPEN asset_chk_curs1(l_txdv_rec.asset_number);
3585 FETCH asset_chk_curs1 INTO l_asset_exists;
3586 IF asset_chk_curs1%NOTFOUND THEN
3587 OPEN asset_chk_curs2(l_txdv_rec.asset_number);
3588 FETCH asset_chk_curs2 INTO l_asset_exists;
3589 IF asset_chk_curs2%NOTFOUND THEN
3590 OPEN asset_chk_curs3(l_txdv_rec.asset_number,l_txdv_rec.id);
3591 FETCH asset_chk_curs3 INTO l_asset_exists;
3592 IF asset_chk_curs3%NOTFOUND THEN
3593 OPEN asset_chk_curs4 (l_txdv_rec.asset_number);
3594 FETCH asset_chk_curs4 INTO l_asset_exists;
3595 IF asset_chk_curs4%NOTFOUND THEN
3596 NULL;
3597 END IF;
3598 END IF;
3599 CLOSE asset_chk_curs3;
3600 END IF;
3601 CLOSE asset_chk_curs2;
3602 END IF;
3603 CLOSE asset_chk_curs1;
3604 IF l_asset_exists = 'Y' THEN
3605 -- store SQL error message on message stack
3606 OKL_API.Set_Message(p_app_name => G_APP_NAME,
3607 p_msg_name => G_NOT_UNIQUE,
3608 p_token1 => G_COL_NAME_TOKEN,
3609 p_token1_value => 'Asset Number '|| l_txdv_rec.asset_number);
3610 l_return_status := OKL_API.G_RET_STS_ERROR;
3611 -- halt validation as it is a required field
3612 RAISE G_EXCEPTION_HALT_VALIDATION;
3613 END IF;
3614 END IF;
3615 END IF;
3616 RETURN(l_return_status);
3617
3618 EXCEPTION
3619 WHEN G_EXCEPTION_HALT_VALIDATION THEN
3620 RETURN(l_return_status);
3621 WHEN OTHERS THEN
3622 -- store SQL error message on message stack for caller
3623 OKL_API.set_message(
3624 G_APP_NAME,
3625 G_UNEXPECTED_ERROR,
3626 G_SQLCODE_TOKEN,
3627 SQLCODE,
3628 G_SQLERRM_TOKEN,
3629 SQLERRM);
3630 --close the cursor
3631 IF asset_chk_curs1%ISOPEN THEN
3632 CLOSE asset_chk_curs1;
3633 END IF;
3634 IF asset_chk_curs2%ISOPEN THEN
3635 CLOSE asset_chk_curs2;
3636 END IF;
3637 IF asset_chk_curs3%ISOPEN THEN
3638 CLOSE asset_chk_curs3;
3639 END IF;
3640 IF asset_chk_curs4%ISOPEN THEN
3641 CLOSE asset_chk_curs4;
3642 END IF;
3643 --send back status to caller
3644 l_return_status := OKL_API.G_RET_STS_UNEXP_ERROR;
3645 RETURN(l_return_status);
3646 END Validate_Attributes;
3647 -------------------------------------------------------------------------------
3648 --Function to verify TRY_ID for the transaction try_id
3649 -------------------------------------------------------------------------------
3650 FUNCTION get_try_id(p_try_name IN OKL_TRX_TYPES_V.NAME%TYPE,
3651 x_try_id OUT NOCOPY OKC_LINE_STYLES_V.ID%TYPE)
3652 RETURN VARCHAR2 IS
3653 x_return_status VARCHAR2(3) := OKL_API.G_RET_STS_SUCCESS;
3654 CURSOR c_get_try_id(p_try_name OKL_TRX_TYPES_V.NAME%TYPE) IS
3655 SELECT id
3656 FROM OKL_TRX_TYPES_TL
3657 WHERE UPPER(name) = UPPER(p_try_name)
3658 AND LANGUAGE = 'US';
3659 BEGIN
3660 IF (p_try_name = OKL_API.G_MISS_CHAR) OR
3661 (p_try_name IS NULL) THEN
3662 -- store SQL error message on message stack
3663 OKL_API.set_message(p_app_name => G_APP_NAME,
3664 p_msg_name => G_NO_DATA_FOUND,
3665 p_token1 => G_COL_NAME_TOKEN,
3666 p_token1_value => p_try_name);
3667 -- halt validation as it is a required field
3668 RAISE G_EXCEPTION_STOP_VALIDATION;
3669 END IF;
3670 OPEN c_get_try_id(p_try_name);
3671 FETCH c_get_try_id INTO x_try_id;
3672 IF c_get_try_id%NOTFOUND THEN
3673 OKL_API.set_message(p_app_name => G_APP_NAME,
3674 p_msg_name => G_NO_DATA_FOUND,
3675 p_token1 => G_COL_NAME_TOKEN,
3676 p_token1_value => p_try_name);
3677 RAISE G_EXCEPTION_HALT_VALIDATION;
3678 END IF;
3679 CLOSE c_get_try_id;
3680 RETURN x_return_status;
3681 EXCEPTION
3682 WHEN G_EXCEPTION_STOP_VALIDATION THEN
3683 -- We are here since the field is required
3684 -- Notify Error
3685 x_return_status := OKL_API.G_RET_STS_ERROR;
3686 WHEN G_EXCEPTION_HALT_VALIDATION THEN
3687 -- We are here b'cause we have no parent record
3688 -- If the cursor is open then it has to be closed
3689 IF c_get_try_id%ISOPEN THEN
3690 CLOSE c_get_try_id;
3691 END IF;
3692 -- notify caller of an error
3693 x_return_status := OKL_API.G_RET_STS_ERROR;
3694 WHEN OTHERS THEN
3695 -- store SQL error message on message stack for caller
3696 OKL_API.set_message(
3697 G_APP_NAME,
3698 G_UNEXPECTED_ERROR,
3699 G_SQLCODE_TOKEN,
3700 SQLCODE,
3701 G_SQLERRM_TOKEN,
3702 SQLERRM);
3703 -- notify caller of an UNEXPECTED error
3704 x_return_status := OKL_API.G_RET_STS_UNEXP_ERROR;
3705 -- if the cursor is open
3706 IF c_get_try_id%ISOPEN THEN
3707 CLOSE c_get_try_id;
3708 END IF;
3709 RETURN(x_return_status);
3710 END get_try_id;
3711 --------------------------------------------------------------------------------
3712 --Function to verify whether the line id is correct or not
3713 --------------------------------------------------------------------------------
3714 FUNCTION verify_cle_id(p_cle_id IN NUMBER) RETURN VARCHAR2 IS
3715 CURSOR Chk_Top_Line(p_cle_id IN NUMBER) IS
3716 SELECT 'Y'
3717 FROM OKC_K_LINES_B cle
3718 WHERE cle.id = p_cle_id
3719 AND EXISTS (SELECT '1'
3720 FROM OKC_LINE_STYLES_B lse
3721 WHERE lse.id = cle.lse_id
3722 AND lse.lty_code = G_FIN_AST_LTY_CODE
3723 AND lse.lse_type = G_TOP_LINE_STYLE)
3724 AND EXISTS (SELECT '1'
3725 FROM OKC_SUBCLASS_TOP_LINE stl,
3726 OKC_K_HEADERS_B CHR
3727 WHERE stl.lse_id = cle.lse_id
3728 AND stl.scs_code = CHR.scs_code
3729 AND CHR.id = cle.chr_id);
3730 l_chk_top_line VARCHAR2(1) DEFAULT 'N';
3731 l_return_status VARCHAR2(1) DEFAULT OKL_API.G_RET_STS_SUCCESS;
3732 BEGIN
3733 OPEN Chk_Top_Line(p_cle_id);
3734 FETCH Chk_Top_Line INTO l_chk_top_line;
3735 IF chk_top_line%NOTFOUND THEN
3736 ----dbms_output.put_line('Not a correct top line id');
3737 NULL;
3738 END IF;
3739 CLOSE Chk_Top_Line;
3740 IF l_chk_top_line <> 'Y' THEN
3741 OKL_API.SET_MESSAGE(p_app_name => g_app_name,
3742 p_msg_name => G_INVALID_TOP_LINE);
3743 l_return_status := OKL_API.G_RET_STS_ERROR;
3744 END IF;
3745 RETURN(l_return_status);
3746 EXCEPTION
3747 WHEN OTHERS THEN
3748 l_return_status := OKL_API.G_RET_STS_UNEXP_ERROR;
3749 OKL_API.set_message(
3750 G_APP_NAME,
3751 G_UNEXPECTED_ERROR,
3752 G_SQLCODE_TOKEN,
3753 SQLCODE,
3754 G_SQLERRM_TOKEN,
3755 SQLERRM);
3756 IF Chk_top_line%ISOPEN THEN
3757 CLOSE Chk_top_line;
3758 END IF;
3759 RETURN(l_return_status);
3760 END verify_cle_id;
3761 -------------------------------------------------------------------------------
3762 --Function to get FA location id. An asset after being sent to FA may have been
3763 -- assigned to different FA locations. Since OKL takes only only one FA location
3764 --right now , we will pick up only one location.
3765 ------------------------------------------------------------------------------
3766 FUNCTION get_fa_location (p_asset_id IN VARCHAR2,
3767 p_book_type_code IN VARCHAR2,
3768 x_location_id OUT NOCOPY NUMBER)
3769 RETURN VARCHAR2 IS
3770 CURSOR fa_location_curs(p_asset_id IN VARCHAR2,
3771 p_book_type_code IN VARCHAR2) IS
3772 SELECT location_id
3773 FROM okx_ast_dst_hst_v
3774 WHERE asset_id = p_asset_id
3775 AND book_type_code = p_book_type_code
3776 AND status = 'A'
3777 AND NVL(start_date_active,SYSDATE) <= SYSDATE
3778 AND NVL(end_date_active,SYSDATE+1) > SYSDATE
3779 AND transaction_header_id_out IS NULL
3780 AND retirement_id IS NULL
3781 AND ROWNUM < 2;
3782 --This is strange way to get one location
3783 --since asset can be assigned to multiple
3784 --fa locations. But till we know what we have to do
3785 --this is it.
3786 l_return_status VARCHAR2(1) := OKL_API.G_RET_STS_SUCCESS;
3787 l_location_id NUMBER DEFAULT NULL;
3788 BEGIN
3789 l_return_status := OKL_API.G_RET_STS_SUCCESS;
3790 OPEN fa_location_curs(p_asset_id,
3791 p_book_type_code);
3792 FETCH fa_location_curs
3793 INTO l_location_id;
3794 IF fa_location_curs%NOTFOUND THEN
3795 NULL; --location not found that is not a problem
3796 --as it is not a mandatory field
3797 END IF;
3798 CLOSE fa_location_curs;
3799 RETURN(l_return_status);
3800 EXCEPTION
3801 WHEN OTHERS THEN
3802 -- notify caller of an UNEXPECTED error
3803 l_return_status := OKL_API.G_RET_STS_UNEXP_ERROR;
3804 OKL_API.set_message(
3805 G_APP_NAME,
3806 G_UNEXPECTED_ERROR,
3807 G_SQLCODE_TOKEN,
3808 SQLCODE,
3809 G_SQLERRM_TOKEN,
3810 SQLERRM);
3811 -- if the cursor is open
3812 IF fa_location_curs%ISOPEN THEN
3813 CLOSE fa_location_curs;
3814 END IF;
3815 RETURN(l_return_status);
3816 END Get_fa_Location;
3817 --------------------------------------------------------------------------------
3818 --Procedure to create transaction header (OKL_TRX_ASSETS_V)
3819 --------------------------------------------------------------------------------
3820 PROCEDURE Create_trx_header(
3821 p_api_version IN NUMBER,
3822 p_init_msg_list IN VARCHAR2 DEFAULT OKL_API.G_FALSE,
3823 x_return_status OUT NOCOPY VARCHAR2,
3824 x_msg_count OUT NOCOPY NUMBER,
3825 x_msg_data OUT NOCOPY VARCHAR2,
3826 p_trxv_rec IN trxv_rec_type,
3827 x_trxv_rec OUT NOCOPY trxv_rec_type) IS
3828 l_api_name CONSTANT VARCHAR2(30) := 'CREATE_TRX_HEADER';
3829 BEGIN
3830 x_return_status := OKL_API.G_RET_STS_SUCCESS;
3831 -- Call start_activity to create savepoint, check compatibility
3832 -- and initialize message list
3833 x_return_status := OKL_API.START_ACTIVITY (
3834 l_api_name
3835 ,p_init_msg_list
3836 ,'_PVT'
3837 ,x_return_status);
3838 -- Check if activity started successfully
3839 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
3840 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
3841 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
3842 RAISE OKL_API.G_EXCEPTION_ERROR;
3843 END IF;
3844 -- evaluate conditions, build outcomes for true conditions and
3845 -- put them on outcome queue
3846 OKL_TRX_ASSETS_PUB.create_trx_ass_h_def(
3847 p_api_version => p_api_version,
3848 p_init_msg_list => p_init_msg_list,
3849 x_return_status => x_return_status,
3850 x_msg_count => x_msg_count,
3851 x_msg_data => x_msg_data,
3852 p_thpv_rec => p_trxv_rec,
3853 x_thpv_rec => x_trxv_rec);
3854
3855 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
3856 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
3857 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
3858 RAISE OKL_API.G_EXCEPTION_ERROR;
3859 END IF;
3860 OKL_API.END_ACTIVITY (x_msg_count,
3861 x_msg_data );
3862 EXCEPTION
3863 WHEN OKL_API.G_EXCEPTION_ERROR THEN
3864 x_return_status := OKL_API.HANDLE_EXCEPTIONS(
3865 l_api_name,
3866 G_PKG_NAME,
3867 'OKC_API.G_RET_STS_ERROR',
3868 x_msg_count,
3869 x_msg_data,
3870 '_PVT');
3871 WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
3872 x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
3873 l_api_name,
3874 G_PKG_NAME,
3875 'OKC_API.G_RET_STS_UNEXP_ERROR',
3876 x_msg_count,
3877 x_msg_data,
3878 '_PVT');
3879 WHEN OTHERS THEN
3880 x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
3881 l_api_name,
3882 G_PKG_NAME,
3883 'OTHERS',
3884 x_msg_count,
3885 x_msg_data,
3886 '_PVT');
3887 END Create_trx_header;
3888 --------------------------------------------------------------------------------
3889 --PROCEDURE to update transaction_header (OKL_TRX_ASSETS_V)
3890 --------------------------------------------------------------------------------
3891 PROCEDURE Update_trx_header(
3892 p_api_version IN NUMBER,
3893 p_init_msg_list IN VARCHAR2 DEFAULT OKL_API.G_FALSE,
3894 x_return_status OUT NOCOPY VARCHAR2,
3895 x_msg_count OUT NOCOPY NUMBER,
3896 x_msg_data OUT NOCOPY VARCHAR2,
3897 p_trxv_rec IN trxv_rec_type,
3898 x_trxv_rec OUT NOCOPY trxv_rec_type) IS
3899 l_api_name CONSTANT VARCHAR2(30) := 'UPDATE_TRX_HEADER';
3900 BEGIN
3901 x_return_status := OKL_API.G_RET_STS_SUCCESS;
3902 -- Call start_activity to create savepoint, check compatibility
3903 -- and initialize message list
3904 x_return_status := OKL_API.START_ACTIVITY (
3905 l_api_name
3906 ,p_init_msg_list
3907 ,'_PVT'
3908 ,x_return_status);
3909 -- Check if activity started successfully
3910 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
3911 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
3912 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
3913 RAISE OKL_API.G_EXCEPTION_ERROR;
3914 END IF;
3915 -- evaluate conditions, build outcomes for true conditions and
3916 -- put them on outcome queue
3917 OKL_TRX_ASSETS_PUB.update_trx_ass_h_def(
3918 p_api_version => p_api_version,
3919 p_init_msg_list => p_init_msg_list,
3920 x_return_status => x_return_status,
3921 x_msg_count => x_msg_count,
3922 x_msg_data => x_msg_data,
3923 p_thpv_rec => p_trxv_rec,
3924 x_thpv_rec => x_trxv_rec);
3925
3926 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
3927 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
3928 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
3929 RAISE OKL_API.G_EXCEPTION_ERROR;
3930 END IF;
3931
3932 OKL_API.END_ACTIVITY (x_msg_count,
3933 x_msg_data );
3934 EXCEPTION
3935 WHEN OKC_API.G_EXCEPTION_ERROR THEN
3936 x_return_status := OKL_API.HANDLE_EXCEPTIONS(
3937 l_api_name,
3938 G_PKG_NAME,
3939 'OKC_API.G_RET_STS_ERROR',
3940 x_msg_count,
3941 x_msg_data,
3942 '_PVT');
3943 WHEN OKC_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
3944 x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
3945 l_api_name,
3946 G_PKG_NAME,
3947 'OKC_API.G_RET_STS_UNEXP_ERROR',
3948 x_msg_count,
3949 x_msg_data,
3950 '_PVT');
3951 WHEN OTHERS THEN
3952 x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
3953 l_api_name,
3954 G_PKG_NAME,
3955 'OTHERS',
3956 x_msg_count,
3957 x_msg_data,
3958 '_PVT');
3959 END Update_trx_header;
3960 --------------------------------------------------------------------------------
3961 --Procedure to create split transaction details (okl_txd_assets_b)
3962 --Bug# 2798006 : Modifications for Loan contract - instead of reading values from
3963 --p_ast_line_rec will read from p_txlv_rec
3964 --------------------------------------------------------------------------------
3965 PROCEDURE Create_trx_details(p_api_version IN NUMBER,
3966 p_init_msg_list IN VARCHAR2 DEFAULT OKL_API.G_FALSE,
3967 x_return_status OUT NOCOPY VARCHAR2,
3968 x_msg_count OUT NOCOPY NUMBER,
3969 x_msg_data OUT NOCOPY VARCHAR2,
3970 p_ast_line_rec IN ast_line_rec_type,
3971 p_txlv_rec IN txlv_rec_type,
3972 x_txdv_tbl OUT NOCOPY txdv_tbl_type) IS
3973
3974 l_return_status VARCHAR2(1) DEFAULT OKL_API.G_RET_STS_SUCCESS;
3975 l_api_name CONSTANT VARCHAR2(30) := 'CREATE_TRX_DETAILS';
3976 l_api_version CONSTANT NUMBER := 1.0;
3977
3978 l_split_into_individuals_yn VARCHAR2(1);
3979 l_split_into_units NUMBER;
3980 l_units_on_child_line NUMBER;
3981 l_total_salvage_value NUMBER;
3982 l_total_cost NUMBER;
3983 l_total_quantity NUMBER;
3984 l_txdv_rec txdv_rec_type;
3985 l_txdv_rec_out txdv_rec_type;
3986
3987 l_asset_exists VARCHAR2(1) DEFAULT 'N';
3988 j NUMBER DEFAULT 0; --counter for generating split asset numbers
3989 i NUMBER DEFAULT 0;
3990 l_split_unit_count NUMBER DEFAULT 0;
3991
3992 BEGIN
3993 x_return_status := OKL_API.G_RET_STS_SUCCESS;
3994 -- Call start_activity to create savepoint, check compatibility
3995 -- and initialize message list
3996 x_return_status := OKL_API.START_ACTIVITY (
3997 l_api_name
3998 ,p_init_msg_list
3999 ,'_PVT'
4000 ,x_return_status);
4001 -- Check if activity started successfully
4002 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
4003 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
4004 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
4005 RAISE OKL_API.G_EXCEPTION_ERROR;
4006 END IF;
4007
4008 l_split_into_individuals_yn := NVL(p_txlv_rec.SPLIT_INTO_SINGLES_FLAG,'N');
4009 --dbms_output.put_line('Split into individuals'||l_split_into_individuals_yn);
4010 --dbms_output.put_line('ast rec current units'||to_char(p_ast_line_rec.current_units));
4011 --dbms_output.put_line('txlv rec units retired'||to_char(p_txlv_rec.split_into_units));
4012 --prepared record for OKL_TXD_ASSETS_V
4013 IF l_split_into_individuals_yn = 'Y' THEN
4014 --l_split_into_units := p_ast_line_rec.current_units;
4015 l_split_into_units := p_txlv_rec.current_units;
4016 l_units_on_child_line := 1;
4017 ELSIF NVL(l_split_into_individuals_yn,'N') = 'N' THEN
4018 l_split_into_units := 2;
4019 -- l_units_on_child_line := p_split_into_units;
4020 l_units_on_child_line := p_txlv_rec.SPLIT_INTO_UNITS;
4021 END IF;
4022 l_total_salvage_value := 0;
4023 l_total_cost := 0;
4024 l_total_quantity := 0;
4025 --dbms_output.put_line('Split into units'||to_char(l_split_into_units));
4026 --dbms_output.put_line('units on child line'||to_char(l_units_on_child_line));
4027 FOR i IN 1..(l_split_into_units - 1)
4028 LOOP
4029 --dbms_output.put_line('Into split loop');
4030 l_txdv_rec.tal_id := p_txlv_rec.id;
4031 l_txdv_rec.line_detail_number := i + 1;
4032 --l_txdv_rec.description := p_ast_line_rec.description;
4033 l_txdv_rec.description := p_txlv_rec.description;
4034 --dbms_output.put_line('Description from FA'|| p_ast_line_rec.description);
4035
4036 --generate an asset number which does not exist in FA
4037 j := j+1;
4038 LOOP
4039 --dbms_output.put_line('Into asset number gen loop');
4040 --dbms_output.put_line('Asset Number'||p_ast_line_rec.asset_number||'.'||to_char(j));
4041 SELECT 'OKL'||TO_CHAR(okl_fan_seq.NEXTVAL)
4042 INTO l_txdv_rec.asset_number FROM dual;
4043 --dbms_output.put_line('Asset Number'||l_txdv_rec.asset_number);
4044 x_return_status := Asset_Number_Exists(l_txdv_rec.asset_number,l_asset_exists);
4045 --dbms_output.put_line('after asset number validate'||x_return_status);
4046 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
4047 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
4048 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
4049 RAISE OKL_API.G_EXCEPTION_ERROR;
4050 END IF;
4051 IF l_asset_exists = 'Y' THEN
4052 j:= j+1;
4053 ELSIF l_asset_exists = 'N' THEN
4054 EXIT;
4055 END IF;
4056 END LOOP;
4057 --dbms_output.put_line('Out of generation of asset number');
4058 l_txdv_rec.quantity := l_units_on_child_line;
4059 --l_txdv_rec.cost := (p_ast_line_rec.cost/p_ast_line_rec.current_units)*l_units_on_child_line;
4060 l_txdv_rec.cost := (p_txlv_rec.depreciation_cost/p_txlv_rec.current_units)*l_units_on_child_line;
4061 --l_txdv_rec.salvage_value := (p_ast_line_rec.salvage_value/p_ast_line_rec.current_units)*l_units_on_child_line;
4062 l_txdv_rec.salvage_value := (p_txlv_rec.salvage_value/p_txlv_rec.current_units)*l_units_on_child_line;
4063 l_total_cost := l_total_cost + l_txdv_rec.cost;
4064 l_total_salvage_value := l_total_salvage_value + l_txdv_rec.salvage_value;
4065 l_total_quantity := l_total_quantity + l_units_on_child_line;
4066
4067 ---Bug#2723498 : 11.5.9 Currency conversion
4068 l_txdv_rec.currency_code := p_txlv_rec.currency_code;
4069 --bug fix# 2770114
4070 --l_txdv_rec.currency_conversion_type := p_txlv_rec.currency_code;
4071 l_txdv_rec.currency_conversion_type := p_txlv_rec.currency_conversion_type;
4072 l_txdv_rec.currency_conversion_rate := p_txlv_rec.currency_conversion_rate;
4073 l_txdv_rec.currency_conversion_date := p_txlv_rec.currency_conversion_date;
4074 ---Bug#2723498 : 11.5.9 Currency conversion
4075
4076 --dbms_output.put_line('Creating trx detail for child asset');
4077 --dbms_output.put_line('Before Creating trx detail for child asset'||l_txdv_rec.description);
4078 OKL_TXD_ASSETS_PUB.create_txd_asset_def(p_api_version => p_api_version,
4079 p_init_msg_list => p_init_msg_list,
4080 x_return_status => x_return_status,
4081 x_msg_count => x_msg_count,
4082 x_msg_data => x_msg_data,
4083 p_adpv_rec => l_txdv_rec,
4084 x_adpv_rec => l_txdv_rec_out);
4085 --dbms_output.put_line('After Creating trx detail for child asset'||x_return_status);
4086 --dbms_output.put_line('After Creating trx detail for child asset'||l_txdv_rec_out.description);
4087 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
4088 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
4089 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
4090 RAISE OKL_API.G_EXCEPTION_ERROR;
4091 END IF;
4092 l_split_unit_count := i;
4093 x_txdv_tbl(l_split_unit_count) := l_txdv_rec_out;
4094 END LOOP;
4095 --split record for the parent asset
4096 l_txdv_rec.tal_id := p_txlv_rec.id;
4097 --l_txdv_rec.target_kle_id := p_ast_line_rec.id1;
4098 l_txdv_rec.target_kle_id := p_txlv_rec.kle_id;
4099 l_txdv_rec.line_detail_number := 1;
4100 --l_txdv_rec.description := p_ast_line_rec.description;
4101 l_txdv_rec.description := p_txlv_rec.description;
4102 --l_txdv_rec.asset_number := p_ast_line_rec.asset_number;
4103 l_txdv_rec.asset_number := p_txlv_rec.asset_number;
4104 --l_txdv_rec.quantity := (p_ast_line_rec.current_units - l_total_quantity);
4105 l_txdv_rec.quantity := (p_txlv_rec.current_units - l_total_quantity);
4106
4107 ------------------------------------------------------------------------
4108 --quantity less that 1 is possible in FA
4109 --If l_txdv_rec.quantity < 1 Then
4110 --l_txdv_rec.quantity := 1;
4111 --End If;
4112 --quantity less than 1 is possible in FA
4113 ------------------------------------------------------------------------
4114 --l_txdv_rec.cost := (p_ast_line_rec.cost - l_total_cost);
4115 l_txdv_rec.cost := (p_txlv_rec.depreciation_cost - l_total_cost);
4116 --l_txdv_rec.salvage_value := (p_ast_line_rec.salvage_value - l_total_salvage_value);
4117 l_txdv_rec.salvage_value := (p_txlv_rec.salvage_value - l_total_salvage_value);
4118
4119 ---Bug#2723498 : 11.5.9 Currency conversion
4120 l_txdv_rec.currency_code := p_txlv_rec.currency_code;
4121 --Bug# 2770114
4122 --l_txdv_rec.currency_conversion_type := p_txlv_rec.currency_code;
4123 l_txdv_rec.currency_conversion_type := p_txlv_rec.currency_conversion_type;
4124 l_txdv_rec.currency_conversion_rate := p_txlv_rec.currency_conversion_rate;
4125 l_txdv_rec.currency_conversion_date := p_txlv_rec.currency_conversion_date;
4126 ---Bug#2723498 : 11.5.9 Currency conversion
4127
4128 --dbms_output.put_line('before Creating trx detail for parent asset'||x_return_status);
4129 OKL_TXD_ASSETS_PUB.create_txd_asset_def(p_api_version => p_api_version,
4130 p_init_msg_list => p_init_msg_list,
4131 x_return_status => x_return_status,
4132 x_msg_count => x_msg_count,
4133 x_msg_data => x_msg_data,
4134 p_adpv_rec => l_txdv_rec,
4135 x_adpv_rec => l_txdv_rec_out);
4136 --dbms_output.put_line('after Creating trx detail for parent asset'||x_return_status);
4137 --dbms_output.put_line('After Creating trx detail for child asset'||x_return_status);
4138 --dbms_output.put_line('After Creating trx detail for child asset'||l_txdv_rec_out.description);
4139 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
4140 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
4141 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
4142 RAISE OKL_API.G_EXCEPTION_ERROR;
4143 END IF;
4144 x_txdv_tbl(l_split_unit_count + 1) := l_txdv_rec_out;
4145 OKL_API.END_ACTIVITY (x_msg_count,
4146 x_msg_data );
4147 EXCEPTION
4148 WHEN OKL_API.G_EXCEPTION_ERROR THEN
4149 x_return_status := OKL_API.HANDLE_EXCEPTIONS(
4150 l_api_name,
4151 G_PKG_NAME,
4152 'OKL_API.G_RET_STS_ERROR',
4153 x_msg_count,
4154 x_msg_data,
4155 '_PVT');
4156 WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
4157 x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
4158 l_api_name,
4159 G_PKG_NAME,
4160 'OKL_API.G_RET_STS_UNEXP_ERROR',
4161 x_msg_count,
4162 x_msg_data,
4163 '_PVT');
4164 WHEN OTHERS THEN
4165 x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
4166 l_api_name,
4167 G_PKG_NAME,
4168 'OTHERS',
4169 x_msg_count,
4170 x_msg_data,
4171 '_PVT');
4172
4173 END Create_Trx_details;
4174 --------------------------------------------------------------------------------
4175 --Start of Comments
4176 --Bug #2723498 : 11.5.9 enhancement for splitting assets by serial number
4177 --API Name : is_serialized
4178 --Description : Function to find if asset is serialized
4179 --History : 03-Nov-2002 avsingh Creation (for asset split by serial numbers)
4180 --End of comments
4181 --------------------------------------------------------------------------------
4182 FUNCTION is_serialized(p_cle_id IN NUMBER) RETURN VARCHAR2 IS
4183 --Bug Fix # 2887948
4184 --Cursor to check whether inventory item is serialized
4185 CURSOR chk_srl_csr (fin_ast_id IN NUMBER) IS
4186 SELECT mtl.serial_number_control_code,
4187 mtl.inventory_item_id,
4188 mtl.organization_id
4189 FROM mtl_system_items mtl,
4190 okc_k_items model_cim,
4191 okc_k_lines_b model_cle,
4192 okc_line_styles_b model_lse
4193 WHERE model_cim.object1_id2 = TO_CHAR(mtl.organization_id)
4194 AND model_cim.object1_id1 = mtl.inventory_item_id
4195 AND model_cim.jtot_object1_code = 'OKX_SYSITEM'
4196 AND model_cim.cle_id = model_cle.id
4197 AND model_cim.dnz_chr_id = model_cle.dnz_chr_id
4198 AND model_cle.cle_id = fin_ast_id
4199 AND model_cle.lse_id = model_lse.id
4200 AND model_lse.lty_code = 'ITEM';
4201
4202 chk_srl_rec chk_srl_csr%ROWTYPE;
4203
4204 l_serialized VARCHAR2(1) DEFAULT OKL_API.G_FALSE;
4205
4206 BEGIN
4207 l_serialized := OKL_API.G_FALSE;
4208 --user needs to select serial numbers to split out
4209 OPEN chk_srl_csr (fin_ast_id => p_cle_id);
4210 FETCH chk_srl_csr INTO chk_srl_rec;
4211 IF chk_srl_csr%NOTFOUND THEN
4212 NULL;
4213 END IF;
4214 CLOSE chk_srl_csr;
4215
4216 IF chk_srl_rec.serial_number_control_code IN (2,5,6) THEN
4217 -- asset inventory item is serial number controlled
4218 l_serialized := OKL_API.G_TRUE;
4219 END IF;
4220
4221 RETURN (l_serialized);
4222 END is_serialized;
4223 --------------------------------------------------------------------------------
4224 --Start of Comments
4225 --Bug # 2726870 : 11.5.9 enhancement for splitting assets by serial number
4226 --API Name : Is_Inv_Item_Serialized
4227 --Description : API will determine whether inv item is serialized or not
4228 --History : 03-Nov-2002 avsingh Creation (for asset split by serial numbers)
4229 --End of comments
4230 --------------------------------------------------------------------------------
4231 PROCEDURE Is_Inv_Item_Serialized(p_api_version IN NUMBER,
4232 p_init_msg_list IN VARCHAR2,
4233 x_return_status OUT NOCOPY VARCHAR2,
4234 x_msg_count OUT NOCOPY NUMBER,
4235 x_msg_data OUT NOCOPY VARCHAR2,
4236 p_inv_item_id IN NUMBER,
4237 p_chr_id IN NUMBER,
4238 p_cle_id IN NUMBER,
4239 x_serialized OUT NOCOPY VARCHAR2) IS
4240 l_api_version CONSTANT NUMBER := 1.0;
4241 l_api_name VARCHAR2(30) := 'IS_INV_ITEM_SERIALIZED';
4242
4243 l_serialized VARCHAR2(1) DEFAULT OKL_API.G_FALSE;
4244
4245 --cursor to find serialized
4246 CURSOR srl_ctrl_csr (p_inv_item_id IN NUMBER,
4247 p_chr_id IN NUMBER) IS
4248 SELECT mtl.serial_number_control_code
4249 FROM mtl_system_items mtl,
4250 okc_k_headers_b chrb
4251 WHERE mtl.inventory_item_id = p_inv_item_id
4252 AND mtl.organization_id = chrb.inv_organization_id
4253 --BUG# 3489089
4254 AND chrb.id = p_chr_id;
4255
4256 --cursor2 to find serialized
4257 CURSOR srl_ctrl_csr2 (p_inv_item_id IN NUMBER,
4258 p_cle_id IN NUMBER) IS
4259 SELECT mtl.serial_number_control_code
4260 FROM mtl_system_items mtl,
4261 okc_k_headers_b chrb,
4262 okc_k_lines_b cleb
4263 WHERE mtl.inventory_item_id = p_inv_item_id
4264 AND mtl.organization_id = chrb.inv_organization_id
4265 AND chrb.id = cleb.dnz_chr_id
4266 AND cleb.id = p_cle_id;
4267
4268 l_srl_control_code mtl_system_items.serial_number_control_code%TYPE;
4269
4270 l_exception_halt EXCEPTION;
4271
4272 BEGIN
4273 x_serialized := OKL_API.G_FALSE;
4274 x_return_status := OKL_API.START_ACTIVITY (
4275 l_api_name
4276 ,p_init_msg_list
4277 ,'_PVT'
4278 ,x_return_status);
4279 -- Check if activity started successfully
4280 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
4281 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
4282 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
4283 RAISE OKL_API.G_EXCEPTION_ERROR;
4284 END IF;
4285
4286 l_serialized := OKL_API.G_FALSE;
4287 IF p_chr_id IS NOT NULL OR p_chr_id <> OKL_API.G_MISS_NUM THEN
4288 OPEN srl_ctrl_csr (p_inv_item_id => p_inv_item_id,
4289 p_chr_id => p_chr_id);
4290 FETCH srl_ctrl_csr INTO
4291 l_srl_control_code;
4292 CLOSE srl_ctrl_csr;
4293 ELSIF p_cle_id IS NOT NULL OR p_cle_id <> OKL_API.G_MISS_NUM THEN
4294 OPEN srl_ctrl_csr2 (p_inv_item_id => p_inv_item_id,
4295 p_cle_id => p_cle_id);
4296 FETCH srl_ctrl_csr2 INTO
4297 l_srl_control_code;
4298 CLOSE srl_ctrl_csr2;
4299 ELSE
4300 RAISE l_exception_halt;
4301 END IF;
4302
4303 IF NVL(l_srl_control_code,0) IN (2,5,6) THEN
4304 l_serialized := OKL_API.G_TRUE;
4305 END IF;
4306 x_serialized := l_serialized;
4307 OKL_API.END_ACTIVITY (x_msg_count,
4308 x_msg_data );
4309 EXCEPTION
4310 WHEN l_exception_halt THEN
4311 NULL;
4312 WHEN OKL_API.G_EXCEPTION_ERROR THEN
4313 x_return_status := OKL_API.HANDLE_EXCEPTIONS(
4314 l_api_name,
4315 G_PKG_NAME,
4316 'OKL_API.G_RET_STS_ERROR',
4317 x_msg_count,
4318 x_msg_data,
4319 '_PVT');
4320 WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
4321 x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
4322 l_api_name,
4323 G_PKG_NAME,
4324 'OKL_API.G_RET_STS_UNEXP_ERROR',
4325 x_msg_count,
4326 x_msg_data,
4327 '_PVT');
4328 WHEN OTHERS THEN
4329 x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
4330 l_api_name,
4331 G_PKG_NAME,
4332 'OTHERS',
4333 x_msg_count,
4334 x_msg_data,
4335 '_PVT');
4336 END Is_Inv_Item_Serialized;
4337 --------------------------------------------------------------------------------
4338 --Start of Comments
4339 --Bug # 2726870 : 11.5.9 enhancement for Splitting Asets by serial number
4340 --API Name : Is_Asset_Serialized
4341 --Description : API will find if asset is serialized
4342 --------------------------------------------------------------------------------
4343 PROCEDURE Is_Asset_Serialized(p_api_version IN NUMBER,
4344 p_init_msg_list IN VARCHAR2,
4345 x_return_status OUT NOCOPY VARCHAR2,
4346 x_msg_count OUT NOCOPY NUMBER,
4347 x_msg_data OUT NOCOPY VARCHAR2,
4348 p_cle_id IN NUMBER,
4349 x_serialized OUT NOCOPY VARCHAR2) IS
4350
4351 l_api_version CONSTANT NUMBER := 1.0;
4352 l_api_name VARCHAR2(30) := 'IS_ASSET_SERIALIZED';
4353
4354 l_serialized VARCHAR2(1) DEFAULT OKL_API.G_FALSE;
4355 BEGIN
4356 x_serialized := OKL_API.G_FALSE;
4357 x_return_status := OKL_API.START_ACTIVITY (
4358 l_api_name
4359 ,p_init_msg_list
4360 ,'_PVT'
4361 ,x_return_status);
4362 -- Check if activity started successfully
4363 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
4364 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
4365 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
4366 RAISE OKL_API.G_EXCEPTION_ERROR;
4367 END IF;
4368
4369 l_serialized := OKL_API.G_FALSE;
4370 l_serialized := Is_serialized(p_cle_id => p_cle_id);
4371 x_serialized := l_serialized;
4372 OKL_API.END_ACTIVITY (x_msg_count,
4373 x_msg_data );
4374 EXCEPTION
4375 WHEN OKL_API.G_EXCEPTION_ERROR THEN
4376 x_return_status := OKL_API.HANDLE_EXCEPTIONS(
4377 l_api_name,
4378 G_PKG_NAME,
4379 'OKL_API.G_RET_STS_ERROR',
4380 x_msg_count,
4381 x_msg_data,
4382 '_PVT');
4383 WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
4384 x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
4385 l_api_name,
4386 G_PKG_NAME,
4387 'OKL_API.G_RET_STS_UNEXP_ERROR',
4388 x_msg_count,
4389 x_msg_data,
4390 '_PVT');
4391 WHEN OTHERS THEN
4392 x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
4393 l_api_name,
4394 G_PKG_NAME,
4395 'OTHERS',
4396 x_msg_count,
4397 x_msg_data,
4398 '_PVT');
4399 END Is_Asset_Serialized;
4400 --------------------------------------------------------------------------------
4401 --Start of Comments
4402 --Bug # 2726870 : 11.5.9 enhancement for splitting assets by serial number
4403 --API Name : Asset_Not_Srlz_Halt
4404 -- (Stop_if_Asset_Not_Serialized)
4405 --Description : API to be clled from UI - will raise Error if Asset not serialized
4406 --History : 03-Nov-2002 avsingh Creation (for asset split by serial numbers)
4407 --End of comments
4408 --------------------------------------------------------------------------------
4409 PROCEDURE Asset_Not_Srlz_Halt(p_api_version IN NUMBER,
4410 p_init_msg_list IN VARCHAR2,
4411 x_return_status OUT NOCOPY VARCHAR2,
4412 x_msg_count OUT NOCOPY NUMBER,
4413 x_msg_data OUT NOCOPY VARCHAR2,
4414 p_cle_id IN NUMBER,
4415 x_serialized OUT NOCOPY VARCHAR2) IS
4416 l_api_version CONSTANT NUMBER := 1.0;
4417 l_api_name VARCHAR2(30) := 'ASSET_NOT_SRLZ_HALT';
4418
4419 l_serialized VARCHAR2(1) DEFAULT OKL_API.G_FALSE;
4420 BEGIN
4421 -----
4422 x_return_status := OKL_API.START_ACTIVITY (
4423 l_api_name
4424 ,p_init_msg_list
4425 ,'_PVT'
4426 ,x_return_status);
4427 -- Check if activity started successfully
4428 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
4429 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
4430 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
4431 RAISE OKL_API.G_EXCEPTION_ERROR;
4432 END IF;
4433
4434 l_serialized := OKL_API.G_FALSE;
4435 x_serialized := l_serialized;
4436 Is_Asset_Serialized(p_api_version => p_api_version,
4437 p_init_msg_list => p_init_msg_list,
4438 x_return_status => x_return_status,
4439 x_msg_count => x_msg_count,
4440 x_msg_data => x_msg_data,
4441 p_cle_id => p_cle_id,
4442 x_serialized => l_serialized);
4443
4444 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
4445 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
4446 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
4447 RAISE OKL_API.G_EXCEPTION_ERROR;
4448 END IF;
4449 x_serialized := l_serialized;
4450 IF l_serialized = OKL_API.G_FALSE THEN
4451 OKL_API.set_message(p_app_name => G_APP_NAME,
4452 p_msg_name => G_ASSET_NOT_SERIALIZED);
4453 x_return_status := OKL_API.G_RET_STS_ERROR;
4454 END IF;
4455
4456 OKL_API.END_ACTIVITY (x_msg_count,
4457 x_msg_data );
4458 EXCEPTION
4459 WHEN OKL_API.G_EXCEPTION_ERROR THEN
4460 x_return_status := OKL_API.HANDLE_EXCEPTIONS(
4461 l_api_name,
4462 G_PKG_NAME,
4463 'OKL_API.G_RET_STS_ERROR',
4464 x_msg_count,
4465 x_msg_data,
4466 '_PVT');
4467 WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
4468 x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
4469 l_api_name,
4470 G_PKG_NAME,
4471 'OKL_API.G_RET_STS_UNEXP_ERROR',
4472 x_msg_count,
4473 x_msg_data,
4474 '_PVT');
4475 WHEN OTHERS THEN
4476 x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
4477 l_api_name,
4478 G_PKG_NAME,
4479 'OTHERS',
4480 x_msg_count,
4481 x_msg_data,
4482 '_PVT');
4483 END Asset_Not_Srlz_Halt;
4484 --------------------------------------------------------------------------------
4485 --Start of Comments
4486 --Bug # 2726870 : 11.5.9 enhancement for splitting assets by serial number
4487 --API Name : Item_Not_Srlz_Halt
4488 -- (Stop_if_Asset_Not_Serialized)
4489 --Description : API to be clled from UI - will raise Error if Asset not serialized
4490 --History : 03-Nov-2002 avsingh Creation (for asset split by serial numbers)
4491 --End of comments
4492 --------------------------------------------------------------------------------
4493 PROCEDURE Item_Not_Srlz_Halt(p_api_version IN NUMBER,
4494 p_init_msg_list IN VARCHAR2,
4495 x_return_status OUT NOCOPY VARCHAR2,
4496 x_msg_count OUT NOCOPY NUMBER,
4497 x_msg_data OUT NOCOPY VARCHAR2,
4498 p_inv_item_id IN NUMBER,
4499 p_chr_id IN NUMBER,
4500 p_cle_id IN NUMBER,
4501 x_serialized OUT NOCOPY VARCHAR2) IS
4502 l_api_version CONSTANT NUMBER := 1.0;
4503 l_api_name VARCHAR2(30) := 'ITEM_NOT_SRLZ_HALT';
4504
4505 l_serialized VARCHAR2(1) DEFAULT OKL_API.G_FALSE;
4506 BEGIN
4507 -----
4508 x_return_status := OKL_API.START_ACTIVITY (
4509 l_api_name
4510 ,p_init_msg_list
4511 ,'_PVT'
4512 ,x_return_status);
4513 -- Check if activity started successfully
4514 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
4515 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
4516 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
4517 RAISE OKL_API.G_EXCEPTION_ERROR;
4518 END IF;
4519
4520 l_serialized := OKL_API.G_FALSE;
4521 x_serialized := l_serialized;
4522 Is_Inv_Item_Serialized(p_api_version => p_api_version,
4523 p_init_msg_list => p_init_msg_list,
4524 x_return_status => x_return_status,
4525 x_msg_count => x_msg_count,
4526 x_msg_data => x_msg_data,
4527 p_inv_item_id => p_inv_item_id,
4528 p_chr_id => p_chr_id,
4529 p_cle_id => p_cle_id,
4530 x_serialized => l_serialized);
4531
4532 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
4533 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
4534 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
4535 RAISE OKL_API.G_EXCEPTION_ERROR;
4536 END IF;
4537 x_serialized := l_serialized;
4538 IF l_serialized = OKL_API.G_FALSE THEN
4539 OKL_API.set_message(p_app_name => G_APP_NAME,
4540 p_msg_name => G_ASSET_NOT_SERIALIZED);
4541 x_return_status := OKL_API.G_RET_STS_ERROR;
4542 END IF;
4543
4544 OKL_API.END_ACTIVITY (x_msg_count,
4545 x_msg_data );
4546 EXCEPTION
4547 WHEN OKL_API.G_EXCEPTION_ERROR THEN
4548 x_return_status := OKL_API.HANDLE_EXCEPTIONS(
4549 l_api_name,
4550 G_PKG_NAME,
4551 'OKL_API.G_RET_STS_ERROR',
4552 x_msg_count,
4553 x_msg_data,
4554 '_PVT');
4555 WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
4556 x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
4557 l_api_name,
4558 G_PKG_NAME,
4559 'OKL_API.G_RET_STS_UNEXP_ERROR',
4560 x_msg_count,
4561 x_msg_data,
4562 '_PVT');
4563 WHEN OTHERS THEN
4564 x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
4565 l_api_name,
4566 G_PKG_NAME,
4567 'OTHERS',
4568 x_msg_count,
4569 x_msg_data,
4570 '_PVT');
4571 END Item_Not_Srlz_Halt;
4572 --------------------------------------------------------------------------------
4573 --Start of Comments
4574 --Bug # 2726870 : 11.5.9 enhancement for splitting assets by serial number
4575 --API Name : Validate_Serial_Number
4576 --Description : LOCAL API will validate serial number
4577 --History : 03-Nov-2002 avsingh Creation (for asset split by serial numbers)
4578 --End of comments
4579 --------------------------------------------------------------------------------
4580 PROCEDURE Validate_Serial_Number(x_return_status OUT nocopy VARCHAR2,
4581 p_serial_number IN VARCHAR2) IS
4582 l_serial_number okl_txl_itm_insts.serial_number%TYPE;
4583
4584 --Cursor to find existence
4585 CURSOR srl_num_csr (Srl_Number IN VARCHAR2) IS
4586 SELECT serial_number
4587 FROM csi_item_instances
4588 WHERE serial_number = Srl_Number;
4589
4590 l_csi_srl_number csi_item_instances.serial_number%TYPE DEFAULT NULL;
4591
4592 BEGIN
4593 x_return_status := OKL_API.G_RET_STS_SUCCESS;
4594 l_serial_number := p_serial_number;
4595 IF l_serial_number IS NULL OR l_serial_number = OKL_API.G_MISS_CHAR THEN
4596 -- store SQL error message on message stack
4597 OKL_API.set_message(p_app_name => G_APP_NAME,
4598 p_msg_name => G_NO_MATCHING_RECORD,
4599 p_token1 => G_COL_NAME_TOKEN,
4600 p_token1_value => 'serial_number');
4601 x_return_status := OKL_API.G_RET_STS_ERROR;
4602 ELSE
4603 l_csi_srl_number := NULL;
4604 OPEN srl_num_csr (Srl_Number => l_serial_number);
4605 FETCH srl_num_csr INTO l_csi_srl_number;
4606 IF srl_num_csr%NOTFOUND THEN
4607 NULL;
4608 END IF;
4609 CLOSE srl_num_csr;
4610
4611 IF l_csi_srl_number IS NOT NULL
4612 AND l_csi_srl_number = l_serial_number THEN
4613 OKL_API.Set_Message(p_app_name => G_APP_NAME,
4614 p_msg_name => G_SRL_NUM_DUPLICATE,
4615 p_token1 => G_COL_NAME_TOKEN,
4616 p_token1_value => l_serial_number);
4617 x_return_status := OKL_API.G_RET_STS_ERROR;
4618 END IF;
4619 END IF;
4620 EXCEPTION
4621 WHEN OTHERS THEN
4622 x_return_status := OKL_API.G_RET_STS_UNEXP_ERROR;
4623 END Validate_Serial_Number;
4624 ---------------------------------------------------------------------------------------------------------------
4625 FUNCTION generate_instance_number_ib(x_instance_number_ib OUT NOCOPY OKL_TXL_ITM_INSTS_V.INSTANCE_NUMBER_IB%TYPE)
4626 RETURN VARCHAR2 IS
4627 x_return_status VARCHAR2(3) := OKL_API.G_RET_STS_SUCCESS;
4628 -- cursor to get sequence number for asset number
4629 CURSOR c_instance_no_ib IS
4630 SELECT TO_CHAR(OKL_IBN_SEQ.NEXTVAL)
4631 FROM dual;
4632 BEGIN
4633 OPEN c_instance_no_ib;
4634 FETCH c_instance_no_ib INTO x_instance_number_ib;
4635 IF (c_instance_no_ib%NOTFOUND) THEN
4636 x_return_status := OKC_API.G_RET_STS_ERROR;
4637 OKL_API.SET_MESSAGE(p_app_name => g_app_name,
4638 p_msg_name => g_unexpected_error,
4639 p_token1 => g_sqlcode_token,
4640 p_token1_value => SQLCODE,
4641 p_token2 => g_sqlerrm_token,
4642 p_token2_value => SQLERRM);
4643 END IF;
4644 CLOSE c_instance_no_ib;
4645 RETURN x_return_status;
4646 EXCEPTION
4647 WHEN OTHERS THEN
4648 IF c_instance_no_ib%ISOPEN THEN
4649 CLOSE c_instance_no_ib;
4650 END IF;
4651 x_return_status := OKC_API.G_RET_STS_UNEXP_ERROR;
4652 OKL_API.SET_MESSAGE(p_app_name => g_app_name,
4653 p_msg_name => g_unexpected_error,
4654 p_token1 => g_sqlcode_token,
4655 p_token1_value => SQLCODE,
4656 p_token2 => g_sqlerrm_token,
4657 p_token2_value => SQLERRM);
4658 RETURN x_return_status;
4659 END generate_instance_number_ib;
4660 --------------------------------------------------------------------------------
4661 --Start of Comments
4662 --Bug # 2726870: 11.5.9 enhancement for splitting assets by serial number
4663 --API Name : create_split_comp_srl_num
4664 --Description : API will create serial_number records in OKL_TXL_ITM_INSTS_V
4665 -- If financial asset inventory item is serialized for a split asset
4666 -- component
4667 --History : 03-Nov-2002 avsingh Creation (for asset split by serial numbers)
4668 -- Bug# 7047938
4669 -- 17-May-2008 avsingh After OA migration tal_id is not being
4670 -- passed from the UI as part of the input
4671 -- record. Added l_tal_csr to fetch it based
4672 -- on asd id
4673 --End of comments
4674 --------------------------------------------------------------------------------
4675 PROCEDURE create_split_comp_srl_num(p_api_version IN NUMBER,
4676 p_init_msg_list IN VARCHAR2,
4677 x_return_status OUT NOCOPY VARCHAR2,
4678 x_msg_count OUT NOCOPY NUMBER,
4679 x_msg_data OUT NOCOPY VARCHAR2,
4680 p_itiv_tbl IN itiv_tbl_type,
4681 x_itiv_tbl OUT NOCOPY itiv_tbl_type) IS
4682
4683 l_api_name VARCHAR2(30) := 'CREATE_SPLIT_COMP_SRL_NUM';
4684 l_api_version CONSTANT NUMBER := 1.0;
4685
4686 --Cursor to get inventory organization ids
4687 CURSOR inv_org_csr (p_tal_id IN NUMBER, p_asd_id IN NUMBER) IS
4688 SELECT mp.master_organization_id,
4689 chrb.inv_organization_id,
4690 txdb.inventory_item_id
4691 FROM mtl_parameters mp,
4692 okc_k_headers_b chrb,
4693 okc_k_lines_b cleb,
4694 okl_txl_Assets_b txlb,
4695 okl_txd_assets_b txdb
4696 WHERE mp.organization_id = chrb.inv_organization_id
4697 AND chrb.id = cleb.dnz_chr_id
4698 AND cleb.id = txlb.kle_id
4699 AND txlb.id = p_tal_id
4700 AND txdb.id = p_asd_id;
4701
4702 l_mast_org_id mtl_parameters.master_organization_id%TYPE;
4703 l_inv_org_id okc_k_headers_b.inv_organization_id%TYPE;
4704 l_inv_item_id okl_txd_assets_b.inventory_item_id%TYPE;
4705
4706 --Cursor to get location of parent instance from IB
4707 CURSOR ib_loc_csr (p_tal_id IN NUMBER) IS
4708 SELECT txlb.kle_id fa_cle_id,
4709 ib_cle.id ib_cle_id,
4710 txlb.tas_id,
4711 csi.location_id, --hz_locations
4712 csi.install_location_id,
4713 --Bug# 3569441
4714 csi.install_location_type_code, --hz_party_sites, hz_locations
4715 csi.instance_number
4716 FROM csi_item_instances csi,
4717 csi_instance_statuses csi_inst_sts,
4718 okc_k_items ib_cim,
4719 okc_k_lines_b ib_cle,
4720 okc_line_styles_b ib_lse,
4721 okc_k_lines_b inst_cle,
4722 okc_line_styles_b inst_lse,
4723 okc_statuses_b inst_sts,
4724 okc_k_lines_b fa_cle,
4725 okc_line_styles_b fa_lse,
4726 okl_txl_assets_b txlb
4727 WHERE csi.instance_id = TO_NUMBER(ib_cim.object1_id1)
4728 AND csi_inst_sts.instance_status_id = csi.instance_status_id
4729 AND NVL(csi_inst_sts.terminated_flag,'N') = 'N'
4730 AND ib_cim.cle_id = ib_cle.id
4731 AND ib_cim.dnz_chr_id = ib_cle.dnz_chr_id
4732 AND ib_cle.cle_id = inst_cle.id
4733 AND ib_cle.dnz_chr_id = inst_cle.dnz_chr_id
4734 AND ib_cle.lse_id = ib_lse.id
4735 AND ib_lse.lty_code = 'INST_ITEM'
4736 AND inst_cle.cle_id = fa_cle.cle_id
4737 AND inst_cle.dnz_chr_id = fa_cle.dnz_chr_id
4738 AND inst_cle.lse_id = inst_lse.id
4739 AND inst_lse.lty_code = 'FREE_FORM2'
4740 AND inst_sts.code = inst_cle.sts_code
4741 AND INST_STS.STE_CODE NOT IN ('HOLD', 'EXPIRED', 'TERMINATED', 'CANCELLED')
4742 AND fa_cle.id = txlb.kle_id
4743 AND fa_cle.lse_id = fa_lse.id
4744 AND fa_lse.lty_code = 'FIXED_ASSET'
4745 AND txlb.id = p_tal_id;
4746
4747 l_fa_cle_id okc_k_lines_b.id%TYPE;
4748 l_ib_cle_id okc_k_lines_b.id%TYPE;
4749 l_tas_id okl_txl_assets_b.tas_id%TYPE;
4750 l_location_id csi_item_instances.location_id%TYPE;
4751 l_install_location_id csi_item_instances.install_location_id%TYPE;
4752 --BUG# 3569441
4753 l_location_type_code csi_item_instances.install_location_type_code%TYPE;
4754 l_instance_number_csi csi_item_instances.instance_number%TYPE;
4755
4756 --Cursor to get install site use id
4757 CURSOR inst_site_csr (pty_site_id IN NUMBER) IS
4758 SELECT TO_CHAR(Party_site_use_id) party_site_use_id
4759 FROM hz_party_site_uses
4760 WHERE party_site_id = pty_site_id
4761 AND site_use_type = 'INSTALL_AT';
4762
4763
4764 --BUG# 3569441
4765 CURSOR inst_loc_csr (loc_id IN NUMBER) IS
4766 SELECT TO_CHAR(psu.party_site_use_id) party_site_use_id
4767 FROM hz_party_site_uses psu,
4768 hz_party_sites ps
4769 WHERE psu.party_site_id = ps.party_site_id
4770 AND psu.site_use_type = 'INSTALL_AT'
4771 AND ps.location_id = loc_id;
4772
4773 --Cursor to get address for error
4774 CURSOR l_address_csr (pty_site_id IN NUMBER ) IS
4775 SELECT SUBSTR(arp_addr_label_pkg.format_address(NULL,hl.address1,hl.address2,hl.address3, hl.address4,hl.city,hl.county,hl.state,hl.province,hl.postal_code,NULL,hl.country,NULL, NULL,NULL,NULL,NULL,NULL,NULL,'n','n',80,1,1),1,80)
4776 FROM hz_locations hl,
4777 hz_party_sites ps
4778 WHERE hl.location_id = ps.location_id
4779 AND ps.party_site_id = pty_site_id;
4780
4781 CURSOR l_address_csr2 (loc_id IN NUMBER) IS
4782 SELECT SUBSTR(arp_addr_label_pkg.format_address(NULL,hl.address1,hl.address2,hl.address3, hl.address4,hl.city,hl.county,hl.state,hl.province,hl.postal_code,NULL,hl.country,NULL, NULL,NULL,NULL,NULL,NULL,NULL,'n','n',80,1,1),1,80)
4783 FROM hz_locations hl
4784 WHERE hl.location_id = loc_id;
4785
4786 l_address VARCHAR2(80);
4787 --END BUG# 3569441
4788
4789 l_party_site_use_id okl_txl_itm_insts.object_id1_new%TYPE;
4790 l_itiv_tbl itiv_tbl_type;
4791 l_itiv_rec itiv_rec_type;
4792 lx_itiv_rec itiv_rec_type;
4793 i NUMBER;
4794 j NUMBER;
4795 l_instance_number OKL_TXL_ITM_INSTS.instance_number_ib%TYPE;
4796
4797 --Bug # 7047938
4798 cursor l_tal_csr (p_asd_id in number) is
4799 select tal_id
4800 from okl_txd_assets_b
4801 where id = p_asd_id;
4802
4803 l_tal_id okl_txd_assets_b.tal_id%TYPE;
4804 --Bug 7047938 End
4805 BEGIN
4806 ----
4807 x_return_status := OKL_API.START_ACTIVITY (
4808 l_api_name
4809 ,p_init_msg_list
4810 ,'_PVT'
4811 ,x_return_status);
4812 -- Check if activity started successfully
4813 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
4814 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
4815 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
4816 RAISE OKL_API.G_EXCEPTION_ERROR;
4817 END IF;
4818
4819 l_itiv_tbl := p_itiv_tbl;
4820 IF l_itiv_tbl.COUNT > 0 THEN
4821 --Bug # 7047938
4822 If l_itiv_tbl(1).tal_id is NULL OR l_itiv_tbl(1).tal_id = OKL_API.G_MISS_NUM
4823 then
4824 open l_tal_csr (p_asd_id => l_itiv_tbl(1).asd_id);
4825 Fetch l_tal_csr into l_tal_id;
4826 close l_tal_csr;
4827 for j in l_itiv_tbl.FIRST..l_itiv_tbl.LAST
4828 LOOP
4829 l_itiv_tbl(j).tal_id := l_tal_id;
4830 END LOOP;
4831 End If;
4832 --Bug # 7047938 End
4833 --get inv org id
4834 OPEN inv_org_csr (p_tal_id => l_itiv_tbl(1).tal_id,
4835 p_asd_id => l_itiv_tbl(1).asd_id);
4836 FETCH inv_org_csr INTO
4837 l_mast_org_id,
4838 l_inv_org_id,
4839 l_inv_item_id;
4840 IF inv_org_csr%NOTFOUND THEN
4841 NULL; --this is not feasible
4842 END IF;
4843 CLOSE inv_org_csr;
4844
4845 --get locations
4846 OPEN ib_loc_csr (p_tal_id => l_itiv_tbl(1).tal_id);
4847 FETCH ib_loc_csr INTO
4848 l_fa_cle_id,
4849 l_ib_cle_id,
4850 l_tas_id,
4851 l_location_id,
4852 l_install_location_id,
4853 --Bug# 3569441
4854 l_location_type_code,
4855 l_instance_number_csi;
4856 IF ib_loc_csr%NOTFOUND THEN
4857 NULL; -- should not happen
4858 END IF;
4859 CLOSE ib_loc_csr;
4860
4861 --BUG# 3569441
4862 IF NVL(l_location_type_code,OKL_API.G_MISS_CHAR) NOT IN ('HZ_LOCATIONS','HZ_PARTY_SITES') THEN
4863 --RAISE ERROR
4864 OKL_API.Set_Message(p_app_name => G_APP_NAME,
4865 p_msg_name => G_INVALID_INSTALL_LOC_TYPE,
4866 p_token1 => G_LOCATION_TYPE_TOKEN,
4867 p_token1_value => l_location_type_code,
4868 p_token2 => G_LOC_TYPE1_TOKEN,
4869 p_token2_value => 'HZ_PARTY_SITES',
4870 p_token3 => G_LOC_TYPE2_TOKEN,
4871 p_token3_value => 'HZ_LOCATIONS');
4872 x_return_status := OKL_API.G_RET_STS_ERROR;
4873 RAISE OKL_API.G_EXCEPTION_ERROR;
4874
4875 ELSIF NVL(l_location_type_code,OKL_API.G_MISS_CHAR) = 'HZ_PARTY_SITES' THEN
4876
4877 --get site use id
4878 OPEN inst_site_csr(pty_site_id => l_install_location_id);
4879 FETCH inst_site_csr INTO l_party_site_use_id;
4880 IF inst_site_csr%NOTFOUND THEN
4881 OPEN l_address_csr(pty_site_id => l_install_location_id);
4882 FETCH l_address_csr INTO l_address;
4883 CLOSE l_address_csr;
4884 --Raise Error : not defined as install_at
4885 OKL_API.Set_Message(p_app_name => G_APP_NAME,
4886 p_msg_name => G_MISSING_USAGE,
4887 p_token1 => G_USAGE_TYPE_TOKEN,
4888 p_token1_value => 'INSTALL_AT',
4889 p_token2 => G_ADDRESS_TOKEN,
4890 p_token2_value => l_address,
4891 p_token3 => G_INSTANCE_NUMBER_TOKEN,
4892 p_token3_value => l_instance_number_csi);
4893 x_return_status := OKL_API.G_RET_STS_ERROR;
4894 RAISE OKL_API.G_EXCEPTION_ERROR;
4895 END IF;
4896 CLOSE inst_site_csr;
4897
4898 ELSIF NVL(l_location_type_code,OKL_API.G_MISS_CHAR) = 'HZ_LOCATIONS' THEN
4899
4900 --get site use id
4901 OPEN inst_loc_csr(loc_id => l_install_location_id);
4902 FETCH inst_loc_csr INTO l_party_site_use_id;
4903 IF inst_loc_csr%NOTFOUND THEN
4904 OPEN l_address_csr2(loc_id => l_install_location_id);
4905 FETCH l_address_csr2 INTO l_address;
4906 CLOSE l_address_csr2;
4907 --Raise Error : not defined as install_at
4908 OKL_API.Set_Message(p_app_name => G_APP_NAME,
4909 p_msg_name => G_MISSING_USAGE,
4910 p_token1 => G_USAGE_TYPE_TOKEN,
4911 p_token1_value => 'INSTALL_AT',
4912 p_token2 => G_ADDRESS_TOKEN,
4913 p_token2_value => l_address,
4914 p_token3 => G_INSTANCE_NUMBER_TOKEN,
4915 p_token3_value => l_instance_number_csi);
4916 x_return_status := OKL_API.G_RET_STS_ERROR;
4917 RAISE OKL_API.G_EXCEPTION_ERROR;
4918 END IF;
4919 CLOSE inst_loc_csr;
4920 END IF;
4921 --End BUG# 3569441
4922
4923 j := 1;
4924 FOR i IN 1..l_itiv_tbl.LAST LOOP
4925 IF l_itiv_tbl(i).id IS NULL OR l_itiv_tbl(i).id = OKL_API.G_MISS_NUM THEN
4926
4927 l_itiv_rec := l_itiv_tbl(i);
4928 --l_itiv_rec.kle_id := l_ib_cle_id;
4929 l_itiv_rec.kle_id := l_fa_cle_id;
4930 l_itiv_rec.tal_type := 'ALI';
4931 l_itiv_rec.tas_id := l_tas_id;
4932 l_itiv_rec.line_number := i;
4933 l_itiv_rec.object_id1_new := l_party_site_use_id;
4934 l_itiv_rec.object_id2_new := '#';
4935 l_itiv_rec.jtot_object_code_new := 'OKX_PARTSITE';
4936 l_itiv_rec.object_id1_old := l_party_site_use_id;
4937 l_itiv_rec.object_id2_old := '#';
4938 l_itiv_rec.jtot_object_code_old := 'OKX_PARTSITE';
4939 l_itiv_rec.inventory_org_id := l_inv_org_id;
4940 l_itiv_rec.mfg_serial_number_yn := 'N';
4941 l_itiv_rec.inventory_item_id := l_inv_item_id;
4942 l_itiv_rec.inv_master_org_id := l_mast_org_id;
4943 l_itiv_rec.selected_for_split_flag := 'Y';
4944
4945
4946 Validate_Serial_Number(x_return_status => x_return_status,
4947 p_serial_number => l_itiv_rec.serial_number);
4948 IF x_return_status <> OKL_API.G_RET_STS_SUCCESS THEN
4949 RAISE OKL_API.G_EXCEPTION_ERROR;
4950 END IF;
4951
4952 x_return_status := generate_instance_number_ib(x_instance_number_ib => l_instance_number);
4953 IF x_return_status <> OKL_API.G_RET_STS_SUCCESS THEN
4954 RAISE OKL_API.G_EXCEPTION_ERROR;
4955 END IF;
4956 l_itiv_rec.instance_number_ib := l_instance_number;
4957 --create record
4958 okl_txl_itm_insts_pub.create_txl_itm_insts
4959 (p_api_version => p_api_version,
4960 p_init_msg_list => p_init_msg_list,
4961 x_return_status => x_return_status,
4962 x_msg_count => x_msg_count,
4963 x_msg_data => x_msg_data,
4964 p_iipv_rec => l_itiv_rec,
4965 x_iipv_rec => lx_itiv_rec);
4966 IF x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR THEN
4967 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
4968 ELSIF x_return_status = OKL_API.G_RET_STS_ERROR THEN
4969 RAISE OKL_API.G_EXCEPTION_ERROR;
4970 END IF;
4971 j:= j+1;
4972 x_itiv_tbl(j) := lx_itiv_rec;
4973 END IF;
4974 END LOOP;
4975 END IF;
4976 OKL_API.END_ACTIVITY (x_msg_count,
4977 x_msg_data );
4978 EXCEPTION
4979 WHEN OKL_API.G_EXCEPTION_ERROR THEN
4980 x_return_status := OKL_API.HANDLE_EXCEPTIONS(
4981 l_api_name,
4982 G_PKG_NAME,
4983 'OKL_API.G_RET_STS_ERROR',
4984 x_msg_count,
4985 x_msg_data,
4986 '_PVT');
4987 WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
4988 x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
4989 l_api_name,
4990 G_PKG_NAME,
4991 'OKL_API.G_RET_STS_UNEXP_ERROR',
4992 x_msg_count,
4993 x_msg_data,
4994 '_PVT');
4995 WHEN OTHERS THEN
4996 x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
4997 l_api_name,
4998 G_PKG_NAME,
4999 'OTHERS',
5000 x_msg_count,
5001 x_msg_data,
5002 '_PVT');
5003 END create_split_comp_srl_num;
5004 --Bug#3222804 - serial number control based on setup in leasing inv org
5005 --------------------------------------------------------------------------------
5006 --Start of Comments
5007 --API Name : validate_srl_num_control
5008 --Description : Local API to validate whether serial # control code is in sync with
5009 -- existing serial numbers in Install Base.
5010 --History : 20-Nov-2003 avsingh Creation
5011 --End of comments
5012 --------------------------------------------------------------------------------
5013 PROCEDURE validate_srl_num_control(p_api_version IN NUMBER,
5014 p_init_msg_list IN VARCHAR2,
5015 x_return_status OUT NOCOPY VARCHAR2,
5016 x_msg_count OUT NOCOPY NUMBER,
5017 x_msg_data OUT NOCOPY VARCHAR2,
5018 p_cle_id IN NUMBER,
5019 p_split_into_individuals_yn IN VARCHAR2,
5020 p_split_into_units IN NUMBER,
5021 p_tal_id IN NUMBER) IS
5022
5023 l_api_name VARCHAR2(30) := 'VALIDATE_SRL_NUM_CONTROL';
5024 l_api_version CONSTANT NUMBER := 1.0;
5025
5026 l_serialized VARCHAR2(1) DEFAULT OKL_API.G_FALSE;
5027
5028 --cursor for asset_number
5029 CURSOR asset_num_csr (P_fin_ast_id IN NUMBER) IS
5030 SELECT name
5031 FROM okc_k_lines_tl
5032 WHERE id = p_fin_ast_id;
5033
5034 l_asset_number OKC_K_LINES_TL.NAME%TYPE;
5035
5036 --Bug# 3222804 : serial # control based on leasing inv org setup
5037 --cursor to find serialized item instances in installed base
5038 CURSOR l_srl_no_count_csr(fin_ast_id IN NUMBER) IS
5039 SELECT
5040 COUNT(1)
5041 FROM csi_item_instances csi,
5042 okc_k_items ib_cim,
5043 okc_k_lines_b ib_cle,
5044 okc_line_styles_b ib_lse,
5045 okc_k_lines_b inst_cle,
5046 okc_line_styles_b inst_lse,
5047 okc_statuses_b inst_sts
5048 WHERE csi.instance_id = TO_NUMBER(ib_cim.object1_id1)
5049 AND ib_cim.cle_id = ib_cle.id
5050 AND ib_cim.dnz_chr_id = ib_cle.dnz_chr_id
5051 AND ib_cle.cle_id = inst_cle.id
5052 AND ib_cle.dnz_chr_id = inst_cle.dnz_chr_id
5053 AND ib_cle.lse_id = ib_lse.id
5054 AND ib_lse.lty_code = 'INST_ITEM'
5055 AND inst_cle.cle_id = fin_ast_id
5056 AND inst_cle.lse_id = inst_lse.id
5057 AND inst_lse.lty_code = 'FREE_FORM2'
5058 AND inst_sts.code = inst_cle.sts_code
5059 --Bug# 5946411: ER
5060 --AND INST_STS.STE_CODE NOT IN ('HOLD', 'EXPIRED', 'TERMINATED', 'CANCELLED');
5061 AND INST_STS.STE_CODE NOT IN ('HOLD', 'CANCELLED');
5062 --Bug# 5946411: ER end
5063
5064 l_srl_no_count NUMBER DEFAULT 0;
5065
5066 --cursor to get txl quantity
5067 CURSOR l_txlqty_csr (p_tal_id IN NUMBER) IS
5068 SELECT txl.current_units
5069 FROM okl_txl_assets_b txl
5070 WHERE id = p_tal_id;
5071
5072 l_txlqty NUMBER DEFAULT NULL;
5073
5074 BEGIN
5075
5076 x_return_status := OKL_API.G_RET_STS_SUCCESS;
5077
5078 -- Call start_activity to create savepoint, check compatibility
5079 -- and initialize message list
5080 x_return_status := OKL_API.START_ACTIVITY (
5081 l_api_name
5082 ,p_init_msg_list
5083 ,'_PVT'
5084 ,x_return_status);
5085 -- Check if activity started successfully
5086 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
5087 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
5088 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
5089 RAISE OKL_API.G_EXCEPTION_ERROR;
5090 END IF;
5091
5092 IF (NVL(p_split_into_individuals_yn,'N') = 'Y')
5093 OR
5094 (NVL(p_split_into_individuals_yn,'N') = 'N' AND NVL(p_split_into_units,OKL_API.G_MISS_NUM) <> OKL_API.G_MISS_NUM) THEN
5095 --check if serialization has been done properly
5096 l_txlqty := NULL;
5097 OPEN l_txlqty_csr(p_tal_id => p_tal_id);
5098 FETCH l_txlqty_csr INTO l_txlqty;
5099 IF l_txlqty_csr%NOTFOUND THEN
5100 NULL;
5101 END IF;
5102 CLOSE l_txlqty_csr;
5103 IF NVL(l_txlqty,OKL_API.G_MISS_NUM) <> OKL_API.G_MISS_NUM THEN
5104
5105 l_serialized := Is_Serialized(p_cle_id => p_cle_id);
5106 IF (l_serialized = OKL_API.G_TRUE) THEN
5107 --fetch total instances to find if qantity matches
5108
5109 l_srl_no_count := 0;
5110 OPEN l_srl_no_count_csr( fin_ast_id => p_cle_id);
5111 FETCH l_srl_no_count_csr INTO l_srl_no_count;
5112 IF l_srl_no_count_csr%NOTFOUND THEN
5113 NULL;
5114 END IF;
5115 CLOSE l_srl_no_count_csr;
5116
5117 IF l_srl_no_count = 1 AND l_txlqty <> 1 THEN
5118
5119 l_asset_number := NULL;
5120 OPEN asset_num_csr(p_fin_ast_id => p_cle_id);
5121 FETCH asset_num_csr INTO l_asset_number;
5122 IF asset_num_csr%NOTFOUND THEN
5123 NULL;
5124 END IF;
5125 CLOSE asset_num_csr;
5126
5127 OKL_API.set_message(p_app_name => G_APP_NAME,
5128 p_msg_name => G_NOT_SERIALIZED_IN_IB,
5129 p_token1 => G_ASSET_NUMBER_TOKEN,
5130 p_token1_value => l_Asset_number
5131 );
5132 --raise error
5133 RAISE OKL_API.G_EXCEPTION_ERROR;
5134
5135 ELSIF l_srl_no_count <> l_txlqty THEN
5136
5137 l_asset_number := NULL;
5138 OPEN asset_num_csr(p_fin_ast_id => p_cle_id);
5139 FETCH asset_num_csr INTO l_asset_number;
5140 IF asset_num_csr%NOTFOUND THEN
5141 NULL;
5142 END IF;
5143 CLOSE asset_num_csr;
5144
5145
5146 OKL_API.set_message(p_app_name => G_APP_NAME,
5147 p_msg_name => G_SERIAL_NUMBER_MISMATCH,
5148 p_token1 => G_ASSET_NUMBER_TOKEN,
5149 p_token1_value => l_Asset_number
5150 );
5151 --raise error
5152 RAISE OKL_API.G_EXCEPTION_ERROR;
5153
5154 ELSIF l_srl_no_count = l_txlqty THEN
5155 --data in installed base is correct
5156 NULL;
5157 END IF;
5158
5159 ELSIF l_serialized = OKL_API.G_FALSE THEN
5160 --fetch total instances to find if qantity matches
5161
5162 l_srl_no_count := 0;
5163 OPEN l_srl_no_count_csr( fin_ast_id => p_cle_id);
5164 FETCH l_srl_no_count_csr INTO l_srl_no_count;
5165 IF l_srl_no_count_csr%NOTFOUND THEN
5166 NULL;
5167 END IF;
5168 CLOSE l_srl_no_count_csr;
5169
5170 IF l_srl_no_count <> 1 AND l_srl_no_count = l_txlqty THEN
5171 --error asset is serilized in Installed Base
5172 l_asset_number := NULL;
5173 OPEN asset_num_csr(p_fin_ast_id => p_cle_id);
5174 FETCH asset_num_csr INTO l_asset_number;
5175 IF asset_num_csr%NOTFOUND THEN
5176 NULL;
5177 END IF;
5178 CLOSE asset_num_csr;
5179
5180 OKL_API.set_message(p_app_name => G_APP_NAME,
5181 p_msg_name => G_SERIALIZED_IN_IB,
5182 p_token1 => G_ASSET_NUMBER_TOKEN,
5183 p_token1_value => l_Asset_number
5184 );
5185 --raise error
5186 RAISE OKL_API.G_EXCEPTION_ERROR;
5187
5188 ELSIF l_srl_no_count <> 1 AND l_srl_no_count <> l_txlqty THEN
5189 --error in installed base data
5190 l_asset_number := NULL;
5191 OPEN asset_num_csr(p_fin_ast_id => p_cle_id);
5192 FETCH asset_num_csr INTO l_asset_number;
5193 IF asset_num_csr%NOTFOUND THEN
5194 NULL;
5195 END IF;
5196
5197 OKL_API.set_message(p_app_name => G_APP_NAME,
5198 p_msg_name => G_SERIAL_NUMBER_MISMATCH,
5199 p_token1 => G_ASSET_NUMBER_TOKEN,
5200 p_token1_value => l_Asset_number
5201 );
5202 --raise error
5203 RAISE OKL_API.G_EXCEPTION_ERROR;
5204
5205 ELSIF l_srl_no_count = 1 THEN
5206 --data in installed base is correct
5207 NULL;
5208 END IF;
5209 END IF;
5210 END IF;
5211
5212 ELSIF NVL(p_split_into_individuals_yn,'N') = 'X' THEN
5213 NULL; -- user will have to create new serail numbers
5214 END IF;
5215 OKL_API.END_ACTIVITY (x_msg_count,
5216 x_msg_data );
5217 EXCEPTION
5218 WHEN OKL_API.G_EXCEPTION_ERROR THEN
5219 x_return_status := OKL_API.HANDLE_EXCEPTIONS(
5220 l_api_name,
5221 G_PKG_NAME,
5222 'OKL_API.G_RET_STS_ERROR',
5223 x_msg_count,
5224 x_msg_data,
5225 '_PVT');
5226 WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
5227 x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
5228 l_api_name,
5229 G_PKG_NAME,
5230 'OKL_API.G_RET_STS_UNEXP_ERROR',
5231 x_msg_count,
5232 x_msg_data,
5233 '_PVT');
5234 WHEN OTHERS THEN
5235 x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
5236 l_api_name,
5237 G_PKG_NAME,
5238 'OTHERS',
5239 x_msg_count,
5240 x_msg_data,
5241 '_PVT');
5242 END validate_srl_num_control;
5243 --End Bug# 3222804 : serial number control setup in Leasing Inv Org
5244 --------------------------------------------------------------------------------
5245 --Start of Comments
5246 --Bug #2723498 : 11.5.9 enhancement for splitting assets by serial number
5247 --API Name : create_srl_num_trx
5248 --Description : Local API will create serial_number records in OKL_TXL_ITM_INSTS_V
5249 -- If financial asset inventory item is serialized
5250 --History : 03-Nov-2002 avsingh Creation (for asset split by serial numbers)
5251 --End of comments
5252 --------------------------------------------------------------------------------
5253 PROCEDURE create_srl_num_trx(p_api_version IN NUMBER,
5254 p_init_msg_list IN VARCHAR2,
5255 x_return_status OUT NOCOPY VARCHAR2,
5256 x_msg_count OUT NOCOPY NUMBER,
5257 x_msg_data OUT NOCOPY VARCHAR2,
5258 p_cle_id IN NUMBER,
5259 p_split_into_individuals_yn IN VARCHAR2,
5260 p_split_into_units IN NUMBER,
5261 p_ib_tbl IN ib_tbl_type,
5262 p_tas_id IN NUMBER,
5263 p_tal_id IN NUMBER,
5264 p_asd_id IN NUMBER) IS
5265
5266 l_api_name VARCHAR2(30) := 'CREATE_SRL_NUM_TRX';
5267 l_api_version CONSTANT NUMBER := 1.0;
5268
5269
5270 --Cursor to get all the serial numbers
5271 CURSOR srl_num_csr(fin_ast_id IN NUMBER) IS
5272 SELECT ib_cle.id ib_cle_id,
5273 csi.instance_id,
5274 csi.serial_number,
5275 csi.instance_number,
5276 csi.inv_organization_id,
5277 csi.inventory_item_id,
5278 csi.inv_master_organization_id,
5279 csi.unit_of_measure,
5280 csi.quantity,
5281 csi.instance_status_id,
5282 csi.location_id, --hz_locations
5283 csi.install_location_id,
5284 --BUG# 3569441
5285 csi.install_location_type_code --hz_party_sites OR hz_loactions
5286 FROM csi_item_instances csi,
5287 okc_k_items ib_cim,
5288 okc_k_lines_b ib_cle,
5289 okc_line_styles_b ib_lse,
5290 okc_k_lines_b inst_cle,
5291 okc_line_styles_b inst_lse,
5292 okc_statuses_b inst_sts
5293 WHERE csi.instance_id = TO_NUMBER(ib_cim.object1_id1)
5294 AND ib_cim.cle_id = ib_cle.id
5295 AND ib_cim.dnz_chr_id = ib_cle.dnz_chr_id
5296 AND ib_cle.cle_id = inst_cle.id
5297 AND ib_cle.dnz_chr_id = inst_cle.dnz_chr_id
5298 AND ib_cle.lse_id = ib_lse.id
5299 AND ib_lse.lty_code = 'INST_ITEM'
5300 AND inst_cle.cle_id = fin_ast_id
5301 AND inst_cle.lse_id = inst_lse.id
5302 AND inst_lse.lty_code = 'FREE_FORM2'
5303 AND inst_sts.code = inst_cle.sts_code
5304 --Bug# 5946411: ER
5305 --AND INST_STS.STE_CODE NOT IN ('HOLD', 'EXPIRED', 'TERMINATED', 'CANCELLED');
5306 AND INST_STS.STE_CODE NOT IN ('HOLD', 'CANCELLED');
5307 --Bug# 5946411: ER--end
5308
5309
5310 srl_num_rec srl_num_csr%ROWTYPE;
5311
5312 -- Cursor to get all the serial numbers if ib line id table is passed as input
5313 -- This will be done by asset managment during asset level termination
5314 CURSOR srl_num_csr2(fin_ast_id IN NUMBER, p_ib_cle_id IN VARCHAR2) IS
5315 SELECT ib_cle.id ib_cle_id,
5316 csi.instance_id,
5317 csi.serial_number,
5318 csi.instance_number,
5319 csi.inv_organization_id,
5320 csi.inventory_item_id,
5321 csi.inv_master_organization_id,
5322 csi.unit_of_measure,
5323 csi.quantity,
5324 csi.instance_status_id,
5325 csi.location_id, --hz_locations
5326 csi.install_location_id,
5327 --BUG# 3569441
5328 csi.install_location_type_code --hz_party_sites OR hz_locations
5329 FROM csi_item_instances csi,
5330 okc_k_items ib_cim,
5331 okc_k_lines_b ib_cle,
5332 okc_line_styles_b ib_lse,
5333 okc_k_lines_b inst_cle,
5334 okc_line_styles_b inst_lse,
5335 okc_statuses_b inst_sts
5336 WHERE csi.instance_id = TO_NUMBER(ib_cim.object1_id1)
5337 AND ib_cim.cle_id = ib_cle.id
5338 AND ib_cim.dnz_chr_id = ib_cle.dnz_chr_id
5339 AND ib_cle.cle_id = inst_cle.id
5340 AND ib_cle.dnz_chr_id = inst_cle.dnz_chr_id
5341 AND ib_cle.lse_id = ib_lse.id
5342 AND ib_cle.id = p_ib_cle_id
5343 AND ib_lse.lty_code = 'INST_ITEM'
5344 AND inst_cle.cle_id = fin_ast_id
5345 AND inst_cle.lse_id = inst_lse.id
5346 AND inst_lse.lty_code = 'FREE_FORM2'
5347 AND inst_sts.code = inst_cle.sts_code
5348 --Bug# 5946411: ER
5349 --AND INST_STS.STE_CODE NOT IN ('HOLD', 'EXPIRED', 'TERMINATED', 'CANCELLED');
5350 AND INST_STS.STE_CODE NOT IN ('HOLD', 'CANCELLED');
5351 --Bug# 5946411: ER -- End
5352
5353 srl_num_rec2 srl_num_csr2%ROWTYPE;
5354
5355 l_iipv_tbl okl_txl_itm_insts_pub.iipv_tbl_type;
5356 i NUMBER DEFAULT 0;
5357 lx_iipv_tbl okl_txl_itm_insts_pub.iipv_tbl_type;
5358
5359 --Cursor to get install site use id
5360 CURSOR inst_site_csr (pty_site_id IN NUMBER) IS
5361 SELECT TO_CHAR(Party_site_use_id) party_site_use_id
5362 FROM hz_party_site_uses
5363 WHERE party_site_id = pty_site_id
5364 AND site_use_type = 'INSTALL_AT';
5365
5366 --BUG# 3569441
5367 CURSOR inst_loc_csr (loc_id IN NUMBER) IS
5368 SELECT TO_CHAR(psu.party_site_use_id) party_site_use_id
5369 FROM hz_party_site_uses psu,
5370 hz_party_sites ps
5371 WHERE psu.party_site_id = ps.party_site_id
5372 AND psu.site_use_type = 'INSTALL_AT'
5373 AND ps.location_id = loc_id;
5374
5375 CURSOR l_address_csr (pty_site_id IN NUMBER ) IS
5376 SELECT SUBSTR(arp_addr_label_pkg.format_address(NULL,hl.address1,hl.address2,hl.address3, hl.address4,hl.city,hl.county,hl.state,hl.province,hl.postal_code,NULL,hl.country,NULL, NULL,NULL,NULL,NULL,NULL,NULL,'n','n',80,1,1),1,80)
5377 FROM hz_locations hl,
5378 hz_party_sites ps
5379 WHERE hl.location_id = ps.location_id
5380 AND ps.party_site_id = pty_site_id;
5381
5382 CURSOR l_address_csr2 (loc_id IN NUMBER) IS
5383 SELECT SUBSTR(arp_addr_label_pkg.format_address(NULL,hl.address1,hl.address2,hl.address3, hl.address4,hl.city,hl.county,hl.state,hl.province,hl.postal_code,NULL,hl.country,NULL, NULL,NULL,NULL,NULL,NULL,NULL,'n','n',80,1,1),1,80)
5384 FROM hz_locations hl
5385 WHERE hl.location_id = loc_id;
5386
5387 l_address VARCHAR2(80);
5388 --END BUG# 3569441
5389
5390 l_pty_site_use_id okl_txl_itm_insts.object_id1_new%TYPE;
5391 l_error_condition EXCEPTION;
5392
5393 l_ib_tbl ib_tbl_type;
5394 l_serialized VARCHAR2(1) DEFAULT OKL_API.G_FALSE;
5395
5396 --cursor for asset_number
5397 CURSOR asset_num_csr (P_fin_ast_id IN NUMBER) IS
5398 SELECT name
5399 FROM okc_k_lines_tl
5400 WHERE id = p_fin_ast_id;
5401
5402 l_asset_number OKC_K_LINES_TL.NAME%TYPE;
5403
5404 BEGIN
5405 x_return_status := OKL_API.G_RET_STS_SUCCESS;
5406
5407 -- Call start_activity to create savepoint, check compatibility
5408 -- and initialize message list
5409 x_return_status := OKL_API.START_ACTIVITY (
5410 l_api_name
5411 ,p_init_msg_list
5412 ,'_PVT'
5413 ,x_return_status);
5414 -- Check if activity started successfully
5415 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
5416 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
5417 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
5418 RAISE OKL_API.G_EXCEPTION_ERROR;
5419 END IF;
5420
5421 --Bug# 3222804 : Serial number control to be based on leasing inv org setup
5422 validate_srl_num_control(
5423 p_api_version => p_api_version,
5424 p_init_msg_list => p_init_msg_list,
5425 x_return_status => x_return_status,
5426 x_msg_count => x_msg_count,
5427 x_msg_data => x_msg_data,
5428 p_cle_id => p_cle_id,
5429 p_split_into_individuals_yn => p_split_into_individuals_yn,
5430 p_split_into_units => p_split_into_units,
5431 p_tal_id => p_tal_id);
5432
5433 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
5434 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
5435 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
5436 RAISE OKL_API.G_EXCEPTION_ERROR;
5437 END IF;
5438 --Bug# 3222804 : Serial number control to be based on leasing inv org setup
5439
5440 l_ib_tbl := p_ib_tbl;
5441 IF NVL(p_split_into_individuals_yn,'N') = 'Y' THEN
5442 NULL; --no need to create srl num transactions
5443 ELSIF NVL(p_split_into_individuals_yn,'N') = 'X' THEN
5444 NULL; -- user will have to create new serail numbers
5445 ELSIF NVL(p_split_into_individuals_yn,'N') = 'N' AND NVL(p_split_into_units,0) > 0 THEN
5446 --user needs to select serial numbers to split
5447 l_serialized := is_serialized(p_cle_id => p_cle_id);
5448 IF (l_serialized = OKL_API.G_TRUE) THEN
5449 -- asset inventory item is serial number controlled
5450 IF l_ib_tbl.COUNT <> 0 THEN
5451 FOR i IN 1..l_ib_tbl.LAST
5452 LOOP
5453 OPEN srl_num_csr2(fin_Ast_id => p_cle_id, p_ib_cle_id => l_ib_tbl(i).id);
5454 FETCH srl_num_csr2 INTO srl_num_rec2;
5455 IF srl_num_csr2%NOTFOUND THEN
5456 --Serial number does not belong to asset. Please select correct serial number to split.
5457 l_asset_number := NULL;
5458 OPEN asset_num_csr(p_fin_ast_id => p_cle_id);
5459 FETCH asset_num_csr INTO l_asset_number;
5460 IF asset_num_csr%NOTFOUND THEN
5461 NULL;
5462 END IF;
5463 CLOSE asset_num_csr;
5464
5465 OKL_API.set_message(p_app_name => G_APP_NAME,
5466 p_msg_name => G_IB_INSTANCE_MISMATCH,
5467 p_token1 => G_ASSET_NUMBER_TOKEN,
5468 p_token1_value => l_Asset_number,
5469 p_token2 => G_IB_LINE_TOKEN,
5470 p_token2_value => TO_CHAR(l_ib_tbl(i).id));
5471 --raise error
5472 RAISE OKL_API.G_EXCEPTION_ERROR;
5473 END IF;
5474 l_iipv_tbl(i).tas_id := p_tas_id;
5475 l_iipv_tbl(i).tal_id := p_tal_id;
5476 l_iipv_tbl(i).kle_id := srl_num_rec2.ib_cle_id;
5477 l_iipv_tbl(i).tal_type := 'ALI'; -- hardcoded for split asset
5478 l_iipv_tbl(i).line_number := i;
5479 l_iipv_tbl(i).instance_number_ib := srl_num_rec2.instance_number;
5480
5481 --fetch party site use id
5482 l_pty_site_use_id := NULL;
5483 --BUG# 3569441 :
5484 IF NVL(srl_num_rec2.install_location_type_code,OKL_API.G_MISS_CHAR) NOT IN ('HZ_LOCATIONS','HZ_PARTY_SITES') THEN
5485
5486 --Raise Error
5487 OKL_API.Set_Message(p_app_name => G_APP_NAME,
5488 p_msg_name => G_INVALID_INSTALL_LOC_TYPE,
5489 p_token1 => G_LOCATION_TYPE_TOKEN,
5490 p_token1_value => srl_num_rec2.install_location_type_code,
5491 p_token2 => G_LOC_TYPE1_TOKEN,
5492 p_token2_value => 'HZ_PARTY_SITES',
5493 p_token3 => G_LOC_TYPE2_TOKEN,
5494 p_token3_value => 'HZ_LOCATIONS');
5495 x_return_status := OKL_API.G_RET_STS_ERROR;
5496 RAISE OKL_API.G_EXCEPTION_ERROR;
5497
5498 ELSIF NVL(srl_num_rec2.install_location_type_code,OKL_API.G_MISS_CHAR) = 'HZ_PARTY_SITES' THEN
5499
5500 OPEN inst_site_csr(srl_num_rec2.install_location_id);
5501 FETCH inst_site_csr INTO l_pty_site_use_id;
5502 IF inst_site_csr%NOTFOUND THEN
5503 OPEN l_address_csr(pty_site_id => srl_num_rec2.install_location_id);
5504 FETCH l_address_csr INTO l_address;
5505 CLOSE l_address_csr;
5506 --Raise Error : not defined as install_at
5507 OKL_API.Set_Message(p_app_name => G_APP_NAME,
5508 p_msg_name => G_MISSING_USAGE,
5509 p_token1 => G_USAGE_TYPE_TOKEN,
5510 p_token1_value => 'INSTALL_AT',
5511 p_token2 => G_ADDRESS_TOKEN,
5512 p_token2_value => l_address,
5513 p_token3 => G_INSTANCE_NUMBER_TOKEN,
5514 p_token3_value => srl_num_rec2.instance_number);
5515 x_return_status := OKL_API.G_RET_STS_ERROR;
5516 RAISE OKL_API.G_EXCEPTION_ERROR;
5517 --l_pty_site_use_id := '-1';
5518 END IF;
5519 CLOSE inst_site_csr;
5520
5521 ELSIF NVL(srl_num_rec2.install_location_type_code, OKL_API.G_MISS_CHAR) = 'HZ_LOCATIONS' THEN
5522
5523 OPEN inst_loc_csr(srl_num_rec2.install_location_id);
5524 FETCH inst_loc_csr INTO l_pty_site_use_id;
5525 IF inst_loc_csr%NOTFOUND THEN
5526 --l_pty_site_use_id := '-1';
5527 OPEN l_address_csr2(loc_id => srl_num_rec2.install_location_id);
5528 FETCH l_address_csr2 INTO l_address;
5529 CLOSE l_address_csr2;
5530 --Raise Error : not defined as install_at
5531 OKL_API.Set_Message(p_app_name => G_APP_NAME,
5532 p_msg_name => G_MISSING_USAGE,
5533 p_token1 => G_USAGE_TYPE_TOKEN,
5534 p_token1_value => 'INSTALL_AT',
5535 p_token2 => G_ADDRESS_TOKEN,
5536 p_token2_value => l_address,
5537 p_token3 => G_INSTANCE_NUMBER_TOKEN,
5538 p_token3_value => srl_num_rec2.instance_number);
5539 x_return_status := OKL_API.G_RET_STS_ERROR;
5540 RAISE OKL_API.G_EXCEPTION_ERROR;
5541 END IF;
5542 CLOSE inst_loc_csr;
5543
5544 END IF;
5545 --End Bug # 3569441
5546
5547 l_iipv_tbl(i).object_id1_new := l_pty_site_use_id;
5548 l_iipv_tbl(i).object_id2_new := '#';
5549 l_iipv_tbl(i).jtot_object_code_new := 'OKX_PARTSITE';
5550 l_iipv_tbl(i).object_id1_old := l_pty_site_use_id;
5551 l_iipv_tbl(i).object_id2_old := '#';
5552 l_iipv_tbl(i).jtot_object_code_old := 'OKX_PARTSITE';
5553 l_iipv_tbl(i).inventory_org_id := srl_num_rec2.inv_organization_id;
5554 l_iipv_tbl(i).serial_number := srl_num_rec2.serial_number;
5555 l_iipv_tbl(i).mfg_serial_number_yn := 'N';
5556 l_iipv_tbl(i).inventory_item_id := srl_num_rec2.inventory_item_id;
5557 l_iipv_tbl(i).INV_MASTER_ORG_ID := srl_num_rec2.inv_master_organization_id;
5558 l_iipv_tbl(i).dnz_cle_id := p_cle_id;
5559 l_iipv_tbl(i).instance_id := srl_num_rec2.instance_id;
5560 l_iipv_tbl(i).selected_for_split_flag := 'Y';
5561 l_iipv_tbl(i).asd_id := p_asd_id;
5562 --Bug fix # 2753141
5563 CLOSE srl_num_csr2;
5564 END LOOP;
5565 ELSE --srl_tbl count is zero
5566 --get all the serial numbers
5567 i := 0;
5568 OPEN srl_num_csr (fin_Ast_id => p_cle_id);
5569 LOOP
5570 FETCH srl_num_csr INTO srl_num_rec;
5571 EXIT WHEN srl_num_csr%NOTFOUND;
5572 i := i + 1;
5573 l_iipv_tbl(i).tas_id := p_tas_id;
5574 l_iipv_tbl(i).tal_id := p_tal_id;
5575 l_iipv_tbl(i).kle_id := srl_num_rec.ib_cle_id;
5576 l_iipv_tbl(i).tal_type := 'ALI'; -- hardcoded for split asset
5577 l_iipv_tbl(i).line_number := i;
5578 l_iipv_tbl(i).instance_number_ib := srl_num_rec.instance_number;
5579
5580 --fetch party site use id
5581 l_pty_site_use_id := NULL;
5582 --BUG# 3569441
5583 IF NVL(srl_num_rec.install_location_type_code,OKL_API.G_MISS_CHAR) NOT IN ('HZ_LOCATIONS','HZ_PARTY_SITES') THEN
5584
5585 --Raise Error
5586 OKL_API.Set_Message(p_app_name => G_APP_NAME,
5587 p_msg_name => G_INVALID_INSTALL_LOC_TYPE,
5588 p_token1 => G_LOCATION_TYPE_TOKEN,
5589 p_token1_value => srl_num_rec.install_location_type_code,
5590 p_token2 => G_LOC_TYPE1_TOKEN,
5591 p_token2_value => 'HZ_PARTY_SITES',
5592 p_token3 => G_LOC_TYPE2_TOKEN,
5593 p_token3_value => 'HZ_LOCATIONS');
5594 x_return_status := OKL_API.G_RET_STS_ERROR;
5595 RAISE OKL_API.G_EXCEPTION_ERROR;
5596
5597 ELSIF NVL(srl_num_rec.install_location_type_code,OKL_API.G_MISS_CHAR) = 'HZ_PARTY_SITES' THEN
5598
5599 OPEN inst_site_csr(srl_num_rec.install_location_id);
5600 FETCH inst_site_csr INTO l_pty_site_use_id;
5601 IF inst_site_csr%NOTFOUND THEN
5602 OPEN l_address_csr(pty_site_id => srl_num_rec2.install_location_id);
5603 FETCH l_address_csr INTO l_address;
5604 CLOSE l_address_csr;
5605 --Raise Error : not defined as install_at
5606 OKL_API.Set_Message(p_app_name => G_APP_NAME,
5607 p_msg_name => G_MISSING_USAGE,
5608 p_token1 => G_USAGE_TYPE_TOKEN,
5609 p_token1_value => 'INSTALL_AT',
5610 p_token2 => G_ADDRESS_TOKEN,
5611 p_token2_value => l_address,
5612 p_token3 => G_INSTANCE_NUMBER_TOKEN,
5613 p_token3_value => srl_num_rec.instance_number);
5614 x_return_status := OKL_API.G_RET_STS_ERROR;
5615 RAISE OKL_API.G_EXCEPTION_ERROR;
5616 END IF;
5617
5618 CLOSE inst_site_csr;
5619 ELSIF NVL(srl_num_rec.install_location_type_code,OKL_API.G_MISS_CHAR) = 'HZ_LOCATIONS' THEN
5620
5621 OPEN inst_loc_csr(srl_num_rec.install_location_id);
5622 FETCH inst_loc_csr INTO l_pty_site_use_id;
5623 IF inst_loc_csr%NOTFOUND THEN
5624 OPEN l_address_csr2(loc_id => srl_num_rec2.install_location_id);
5625 FETCH l_address_csr2 INTO l_address;
5626 CLOSE l_address_csr2;
5627 --Raise Error : not defined as install_at
5628 OKL_API.Set_Message(p_app_name => G_APP_NAME,
5629 p_msg_name => G_MISSING_USAGE,
5630 p_token1 => G_USAGE_TYPE_TOKEN,
5631 p_token1_value => 'INSTALL_AT',
5632 p_token2 => G_ADDRESS_TOKEN,
5633 p_token2_value => l_address,
5634 p_token3 => G_INSTANCE_NUMBER_TOKEN,
5635 p_token3_value => srl_num_rec.instance_number);
5636 x_return_status := OKL_API.G_RET_STS_ERROR;
5637 RAISE OKL_API.G_EXCEPTION_ERROR;
5638 END IF;
5639 CLOSE inst_loc_csr;
5640
5641 END IF;
5642 --BUG# 3569441
5643
5644
5645 l_iipv_tbl(i).object_id1_new := l_pty_site_use_id;
5646 l_iipv_tbl(i).object_id2_new := '#';
5647 l_iipv_tbl(i).jtot_object_code_new := 'OKX_PARTSITE';
5648 l_iipv_tbl(i).object_id1_old := l_pty_site_use_id;
5649 l_iipv_tbl(i).object_id2_old := '#';
5650 l_iipv_tbl(i).jtot_object_code_old := 'OKX_PARTSITE';
5651 l_iipv_tbl(i).inventory_org_id := srl_num_rec.inv_organization_id;
5652 l_iipv_tbl(i).serial_number := srl_num_rec.serial_number;
5653 l_iipv_tbl(i).mfg_serial_number_yn := 'N';
5654 l_iipv_tbl(i).inventory_item_id := srl_num_rec.inventory_item_id;
5655 l_iipv_tbl(i).INV_MASTER_ORG_ID := srl_num_rec.inv_master_organization_id;
5656 l_iipv_tbl(i).dnz_cle_id := p_cle_id;
5657 l_iipv_tbl(i).instance_id := srl_num_rec.instance_id;
5658 l_iipv_tbl(i).selected_for_split_flag := 'N';
5659 l_iipv_tbl(i).asd_id := p_asd_id;
5660
5661 END LOOP;
5662 CLOSE srl_num_csr;
5663 END IF; --srl_tbl count is = 0
5664 IF l_iipv_tbl.COUNT > 0 THEN
5665 --call api to create records for srl num trx
5666 okl_txl_itm_insts_pub.create_txl_itm_insts(
5667 p_api_version => p_api_version,
5668 p_init_msg_list => p_init_msg_list,
5669 x_return_status => x_return_status,
5670 x_msg_count => x_msg_count,
5671 x_msg_data => x_msg_data,
5672 p_iipv_tbl => l_iipv_tbl,
5673 x_iipv_tbl => lx_iipv_tbl);
5674
5675 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
5676 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
5677 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
5678 RAISE OKL_API.G_EXCEPTION_ERROR;
5679 END IF;
5680
5681 END IF;
5682 --Bug# 3222804 : serial # control based on leasing inv org setup
5683 ELSIF l_serialized = OKL_API.G_FALSE THEN
5684 NULL;
5685 END IF; -- if srl number controlled
5686 END IF;
5687 l_iipv_tbl.DELETE;
5688 OKL_API.END_ACTIVITY (x_msg_count,
5689 x_msg_data );
5690 EXCEPTION
5691 WHEN OKL_API.G_EXCEPTION_ERROR THEN
5692 x_return_status := OKL_API.HANDLE_EXCEPTIONS(
5693 l_api_name,
5694 G_PKG_NAME,
5695 'OKL_API.G_RET_STS_ERROR',
5696 x_msg_count,
5697 x_msg_data,
5698 '_PVT');
5699 WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
5700 x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
5701 l_api_name,
5702 G_PKG_NAME,
5703 'OKL_API.G_RET_STS_UNEXP_ERROR',
5704 x_msg_count,
5705 x_msg_data,
5706 '_PVT');
5707 WHEN OTHERS THEN
5708 x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
5709 l_api_name,
5710 G_PKG_NAME,
5711 'OTHERS',
5712 x_msg_count,
5713 x_msg_data,
5714 '_PVT');
5715 END create_srl_num_trx;
5716 --Bug #2723498 : 11.5.9 Split by serial numbers enhancement
5717 FUNCTION Check_If_Loan(p_cle_id IN NUMBER,
5718 x_return_status OUT nocopy VARCHAR2) RETURN VARCHAR2 IS
5719 --cursor to get deal type
5720 CURSOR l_dealtyp_csr(PCleId IN NUMBER) IS
5721 SELECT khr.deal_type
5722 FROM okl_k_headers khr,
5723 okc_k_headers_b chrb,
5724 okc_k_lines_b cleb
5725 WHERE khr.id = chrb.id
5726 AND chrb.id = cleb.dnz_chr_id
5727 AND cleb.id = PCleId;
5728
5729 l_deal_type okl_k_headers.deal_type%TYPE;
5730 l_loan_yn VARCHAR2(1) DEFAULT 'N';
5731
5732 BEGIN
5733 ----
5734 x_return_status := OKL_API.G_RET_STS_SUCCESS;
5735 OPEN l_dealtyp_csr (PCleId => p_cle_id);
5736 FETCH l_dealtyp_csr INTO l_deal_type;
5737 IF l_dealtyp_csr%NOTFOUND THEN
5738 NULL;
5739 END IF;
5740 CLOSE l_dealtyp_csr;
5741
5742 IF NVL(l_deal_type,'X') IN ('LOAN','LOAN-REVOLVING') THEN
5743 l_loan_yn := 'Y';
5744 ELSE
5745 l_loan_yn := 'N';
5746 END IF;
5747
5748 RETURN(l_loan_yn);
5749 EXCEPTION
5750 WHEN OTHERS THEN
5751 x_return_status := OKL_API.G_RET_STS_ERROR;
5752 ----
5753 END Check_If_Loan;
5754
5755 --------------------------------------------------------------------------------
5756 --Start of Comments
5757 --API Name : Create_Split_Transaction
5758 --Description : Process API to create Split Aseet Transaction Records in
5759 -- OKL_TXL_ASSETS_V and OKL_TXD_ASSETS_V
5760 -- 1. Take the line details to be split
5761 -- 2. Set the status of the contract as inactive
5762 -- 3. Create and save source record into okl_trx_assets_v
5763 -- 4. Create and save target record into okl_txd_assets_v
5764 --History :
5765 -- 10-OCT-2001 avsingh Creation
5766 -- 12-Dec-2002 avsingh Overloaded the procedure to take p_srl_tbl
5767 -- as IN parameter. This will be directly called
5768 -- by Asset management line level termination
5769 -- Process. The old call is kept for backward
5770 -- compatability. It will be still used from
5771 -- the split asset UI.
5772 -- 30-Jan-2004 avsingh Bug# 3156924
5773 -- Overloaded the procedure to accept
5774 -- trx_date
5775 -- 16-Aug-2005 smadhava Bug# 4542290 Variable Rate Enhancement
5776 --End of Comments
5777 ------------------------------------------------------------------------------
5778 PROCEDURE Create_Split_Transaction(p_api_version IN NUMBER,
5779 p_init_msg_list IN VARCHAR2,
5780 x_return_status OUT NOCOPY VARCHAR2,
5781 x_msg_count OUT NOCOPY NUMBER,
5782 x_msg_data OUT NOCOPY VARCHAR2,
5783 p_cle_id IN NUMBER,
5784 p_split_into_individuals_yn IN VARCHAR2,
5785 p_split_into_units IN NUMBER,
5786 p_ib_tbl IN ib_tbl_type,
5787 --Bug# 3156924
5788 p_trx_date IN DATE,
5789 --bug# 3156924
5790 x_txdv_tbl OUT NOCOPY txdv_tbl_type,
5791 x_txlv_rec OUT NOCOPY txlv_rec_type,
5792 x_trxv_rec OUT NOCOPY trxv_rec_type) IS
5793
5794 l_return_status VARCHAR2(1) DEFAULT OKL_API.G_RET_STS_SUCCESS;
5795 l_api_name CONSTANT VARCHAR2(30) := 'CREATE_SPLIT_TRANSACTION';
5796 l_api_version CONSTANT NUMBER := 1.0;
5797
5798 --cursor to check presence of an already active transaction
5799 CURSOR chk_split_trx(p_cle_id IN NUMBER) IS
5800 SELECT txl.id, --tal_id
5801 txl.SPLIT_INTO_SINGLES_FLAG, --p_split_into_individuals_yn
5802 txl.SPLIT_INTO_UNITS, --p_split_into_units
5803 --Bug# 3156924
5804 tas.DATE_TRANS_OCCURRED,
5805 tas.ID
5806 FROM OKL_TXL_ASSETS_B txl,
5807 OKL_TRX_ASSETS tas
5808 WHERE txl.kle_id = p_cle_id
5809 AND txl.tas_id = tas.id
5810 AND txl.tal_type = 'ALI'
5811 AND tas.tas_type = 'ALI'
5812 AND tas.tsu_code = 'ENTERED'
5813 AND EXISTS (SELECT NULL
5814 FROM
5815 okl_trx_types_tl ttyp
5816 WHERE tas.try_id = ttyp.id
5817 AND ttyp.name = 'Split Asset'
5818 AND ttyp.LANGUAGE = 'US');
5819
5820 --for split asset components
5821 --cursor to check whether split asset comonent
5822
5823 l_split_into_ind_yn VARCHAR2(1) DEFAULT 'Z';
5824 l_split_units NUMBER DEFAULT 0;
5825 l_tal_id NUMBER;
5826 --Bug# 3156924
5827 l_trx_date okl_trx_assets.DATE_TRANS_OCCURRED%TYPE;
5828 l_tas_id okl_trx_assets.ID%TYPE;
5829
5830
5831 l_trxv_rec trxv_rec_type;
5832 l_txlv_rec txlv_rec_type;
5833 l_txdv_rec txdv_rec_type;
5834 l_txdv_rec_out txdv_rec_type;
5835 l_txdv_tbl txdv_tbl_type;
5836 l_ast_line_rec ast_line_rec_type;
5837 l_fa_location_id NUMBER;
5838 l_row_not_found BOOLEAN := TRUE;
5839 l_total_cost NUMBER;
5840 l_total_salvage_value NUMBER;
5841 l_units_on_child_line NUMBER;
5842 l_total_quantity NUMBER;
5843 l_split_into_units NUMBER;
5844 l_asset_exists VARCHAR2(1) DEFAULT 'N';
5845 j NUMBER DEFAULT 0; --counter for generating split asset numbers
5846 l_no_txd_data_found BOOLEAN DEFAULT TRUE;
5847
5848 --Bug #2723498 11.5.9 enhancement - Splitting assets by serial numbers
5849 --check if serial number data exists
5850 --cursor to check whether srl number data exists
5851 CURSOR srl_exist_chk (p_tal_id IN NUMBER) IS
5852 SELECT '!'
5853 FROM dual
5854 WHERE EXISTS
5855 (SELECT 1
5856 FROM okl_txl_itm_insts
5857 WHERE tal_id = p_tal_id
5858 AND tal_type = 'ALI');
5859
5860 l_srl_exists VARCHAR2(1) DEFAULT '?';
5861
5862 --Bug #2723498 11.5.9 enhancement - Splitting assets by serial numbers
5863 --cursor to fetch all the serail numbers
5864 CURSOR get_srl_csr (p_tal_id IN NUMBER) IS
5865 SELECT id
5866 FROM okl_txl_itm_insts
5867 WHERE tal_id = p_tal_id
5868 AND tal_type = 'ALI';
5869
5870 l_iipv_tbl okl_txl_itm_insts_pub.iipv_tbl_type;
5871 l_iipv_count NUMBER;
5872 l_iipv_id NUMBER;
5873
5874 l_ib_tbl ib_tbl_type;
5875
5876 --Bug #2723498 11.5.9 - Multi Currency
5877 CURSOR curr_conv_csr (PCleId IN NUMBER) IS
5878 SELECT khrv.currency_code,
5879 khrv.currency_conversion_type,
5880 khrv.currency_conversion_rate,
5881 khrv.currency_conversion_date,
5882 khrv.start_date
5883 FROM okl_k_headers_full_v khrv,
5884 okc_k_lines_b cle
5885 WHERE khrv.id = cle.dnz_chr_id
5886 AND cle.id = PCleId;
5887
5888 curr_conv_rec curr_conv_csr%ROWTYPE;
5889
5890
5891 --Bug# 2798006 : split asset for loan contracts
5892 CURSOR loan_ast_csr (PCleId IN NUMBER) IS
5893 SELECT
5894 cle_fa.id kle_id,
5895 clet.name NAME,
5896 clet.item_description DESCRIPTION,
5897 cle.chr_id CHR_ID,
5898 cle.dnz_chr_id DNZ_CHR_ID,
5899 cle.id PARENT_LINE_ID,
5900 cle.start_date START_DATE_ACTIVE,
5901 cle.end_date END_DATE_ACTIVE,
5902 cim_fa.number_of_items CURRENT_UNITS,
5903 clet.name ASSET_NUMBER,
5904 kle.OEC ORIGINAL_COST,
5905 kle.OEC COST,
5906 cle.sts_code LINE_STATUS
5907 FROM okc_k_items cim_fa,
5908 okc_k_lines_b cle_fa,
5909 okc_line_styles_b lse_fa,
5910 okl_k_lines kle,
5911 okc_k_lines_tl clet,
5912 okc_k_lines_b cle
5913 WHERE cim_fa.cle_id = cle_fa.id
5914 AND cle_fa.cle_id = cle.id
5915 AND cle_fa.dnz_chr_id = cle.dnz_chr_id
5916 AND cle_fa.lse_id = lse_fa.id
5917 AND lse_fa.lty_code = 'FIXED_ASSET'
5918 AND kle.id = cle.id
5919 AND clet.id = cle.id
5920 AND clet.LANGUAGE = USERENV('LANG')
5921 AND cle.id = PCleId;
5922
5923 l_loan_ast_rec loan_ast_csr%ROWTYPE;
5924 l_loan_yn VARCHAR2(1) DEFAULT 'N';
5925 l_fa_exists VARCHAR2(1) DEFAULT 'N';
5926
5927 --Bug Fix # 2881114
5928 --Cursor to check whether asset is linked to service contract
5929 CURSOR lnk_to_srv_csr(p_cle_id IN NUMBER) IS
5930 SELECT '!'
5931 FROM dual
5932 WHERE EXISTS
5933 (
5934 SELECT '1'
5935 FROM
5936 okc_k_headers_b oks_chrb,
5937 okc_line_styles_b oks_cov_pd_lse,
5938 okc_k_lines_b oks_cov_pd_cleb,
5939 okc_k_rel_objs krel,
5940 okc_line_styles_b lnk_srv_lse,
5941 okc_statuses_b lnk_srv_sts,
5942 okc_k_lines_b lnk_srv_cleb,
5943 okc_k_items lnk_srv_cim
5944 WHERE oks_chrb.scs_code = 'SERVICE'
5945 AND oks_chrb.id = oks_cov_pd_cleb.dnz_chr_id
5946 AND oks_cov_pd_cleb.lse_id = oks_cov_pd_lse.id
5947 AND oks_cov_pd_lse.lty_code = 'COVER_PROD'
5948 AND '#' = krel.object1_id2
5949 AND oks_cov_pd_cleb.id = krel.object1_id1
5950 AND krel.rty_code = 'OKLSRV'
5951 AND krel.chr_id = lnk_srv_cleb.dnz_chr_id
5952 AND krel.cle_id = lnk_srv_cleb.id
5953 AND lnk_srv_cleb.lse_id = lnk_srv_lse.id
5954 AND lnk_srv_lse.lty_code = 'LINK_SERV_ASSET'
5955 AND lnk_srv_cleb.sts_code = lnk_srv_sts.code
5956 AND lnk_srv_sts.ste_code NOT IN ('HOLD','EXPIRED','TERMINATED','CANCELLED')
5957 AND lnk_srv_cleb.dnz_chr_id = lnk_srv_cim.dnz_chr_id
5958 AND lnk_srv_cleb.id = lnk_srv_cim.cle_id
5959 AND lnk_srv_cim.jtot_object1_code = 'OKX_COVASST'
5960 AND lnk_srv_cim.object1_id2 = '#'
5961 AND lnk_srv_cim.object1_id1 = TO_CHAR(p_cle_id)
5962 );
5963
5964 l_lnk_to_srv VARCHAR2(1) DEFAULT '?';
5965
5966 --Bug# 2981308 : cursor to fetch asset key ccid
5967 CURSOR l_fab_csr(p_asset_id IN NUMBER) IS
5968 SELECT fab.asset_key_ccid
5969 FROM fa_additions_b fab
5970 WHERE fab.asset_id = p_asset_id;
5971
5972 l_asset_key_id fa_additions_b.asset_key_ccid%TYPE;
5973 --Bug# 2981308
5974
5975 --Bug# 3783518
5976 CURSOR l_chr_csr(p_cle_id IN NUMBER) IS
5977 SELECT dnz_chr_id
5978 FROM okc_k_lines_b
5979 WHERE id = p_cle_id;
5980
5981 l_chr_id okc_k_headers_b.id%TYPE;
5982
5983 --cursor to check if contract has re-lease assets
5984 -- Bug# 4631549
5985 -- Disable split asset process for
5986 -- Re-lease contract and Re-lease asset flows
5987 CURSOR l_chk_rel_ast_csr (p_chr_id IN NUMBER,p_cle_id IN NUMBER) IS
5988 --Bug# 15992711 : The re-leased flag is no longer checked at contract header
5989 -- but needs to be validated at contract line
5990 -- Cursor modified to include validation at asset line level
5991 --Start Modification 120.61.12010000.11 8-Feb-2013 Pratirao
5992 /*
5993 SELECT '!'
5994 FROM OKC_RULES_B rul
5995 WHERE rul.dnz_chr_id = p_chr_id
5996 AND rul.rule_information_category = 'LARLES'
5997 AND NVL(rule_information1,'N') = 'Y';
5998 */
5999
6000
6001 SELECT NVL(kle.re_lease_yn,'N')
6002 FROM OKC_K_HEADERS_B chr
6003 ,okc_k_lines_b cle
6004 ,okl_k_lines kle
6005 WHERE chr.id = cle.chr_id
6006 and chr.id = cle.dnz_chr_id
6007 and cle.id = kle.id
6008 and chr.id = p_chr_id --p_contract_id;
6009 and cle.id = p_cle_id; --Added for Bug# 16496239 pratirao 15-Mar-2013
6010
6011 --Bug# 15992711 End Modification
6012
6013
6014 l_rel_ast VARCHAR2(1);
6015 -- Bug# 4542290 - smadhava - Added - Start
6016 l_pdt_params_rec OKL_SETUPPRODUCTS_PUB.pdt_parameters_rec_type;
6017 l_rev_recog_meaning OKL_PRODUCT_PARAMETERS_V.REVENUE_RECOGNITION_MEANING%TYPE;
6018
6019 CURSOR get_prod_param_values(cp_name OKL_PDT_QUALITYS.NAME%TYPE
6020 , cp_value OKL_PQY_VALUES.VALUE%TYPE) IS
6021 SELECT
6022 QVE.DESCRIPTION
6023 FROM
6024 OKL_PDT_QUALITYS PQY
6025 , OKL_PQY_VALUES QVE
6026 WHERE
6027 QVE.PQY_ID = PQY.ID
6028 AND PQY.NAME = cp_name
6029 AND QVE.VALUE = cp_value;
6030
6031 -- Bug# 4542290 - smadhava - Added - End
6032
6033 --Added by dpsingh for LE uptake
6034 CURSOR contract_num_csr (p_ctr_id1 NUMBER) IS
6035 SELECT contract_number
6036 FROM OKC_K_HEADERS_B
6037 WHERE id = p_ctr_id1;
6038
6039 l_cntrct_number OKC_K_HEADERS_B.CONTRACT_NUMBER%TYPE;
6040 l_legal_entity_id NUMBER;
6041
6042 BEGIN
6043 --dbms_output.put_line('before start activity');
6044 x_return_status := OKL_API.G_RET_STS_SUCCESS;
6045 -- Call start_activity to create savepoint, check compatibility
6046 -- and initialize message list
6047 x_return_status := OKL_API.START_ACTIVITY (
6048 l_api_name
6049 ,p_init_msg_list
6050 ,'_PVT'
6051 ,x_return_status);
6052 -- Check if activity started successfully
6053 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
6054 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
6055 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
6056 RAISE OKL_API.G_EXCEPTION_ERROR;
6057 END IF;
6058 l_ib_tbl := p_ib_tbl;
6059 --Bug# 6612475
6060 --1. Validate Split Request
6061 Validate_Split_Request
6062 (p_api_version => p_api_version
6063 ,p_init_msg_list => p_init_msg_list
6064 ,x_return_status => x_return_status
6065 ,x_msg_count => x_msg_count
6066 ,x_msg_data => x_msg_data
6067 ,p_cle_id => p_cle_id
6068 ,p_split_into_individuals_yn => p_split_into_individuals_yn
6069 ,p_split_into_units => p_split_into_units
6070 ,p_revision_date => p_trx_date
6071 );
6072
6073 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
6074 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
6075 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
6076 RAISE OKL_API.G_EXCEPTION_ERROR;
6077 END IF;
6078
6079 --Commenting this validation as it is redundant now
6080 --because of newly added Validate_Split_Request
6081 --1.Verify p_cle_id
6082 --x_return_status := verify_cle_id(p_cle_id => p_cle_id);
6083 --IF x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR THEN
6084 --RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
6085 --ELSIF x_return_status = OKL_API.G_RET_STS_ERROR THEN
6086 --RAISE OKL_API.G_EXCEPTION_ERROR;
6087 --END IF;
6088 --Bug# 6612475 End
6089
6090 --Bug# 3783518: start
6091 -- Do not allow split asset for contracts with release assets
6092 OPEN l_chr_csr(p_cle_id => p_cle_id);
6093 FETCH l_chr_csr INTO l_chr_id;
6094 CLOSE l_chr_csr;
6095
6096 -- Bug# 4542290 - smadhava - Added - Start
6097 -- Obtain the product parameter - Revenue Recognition method
6098 OKL_K_RATE_PARAMS_PVT.get_product(
6099 p_api_version => p_api_version,
6100 p_init_msg_list => p_init_msg_list,
6101 x_return_status => x_return_status,
6102 x_msg_count => x_msg_count,
6103 x_msg_data => x_msg_data,
6104 p_khr_id => l_chr_id,
6105 x_pdt_parameter_rec => l_pdt_params_rec);
6106
6107 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
6108 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
6109 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
6110 RAISE OKL_API.G_EXCEPTION_ERROR;
6111 END IF;
6112
6113 -- Raise an error if the Revenue Recognition Method is 'Actual' or 'Estimated and Actual'
6114 IF ( l_pdt_params_rec.Revenue_Recognition_Method = G_RRB_ESTIMATED OR
6115 l_pdt_params_rec.Revenue_Recognition_Method = G_RRB_ACTUAL) THEN
6116 OPEN get_prod_param_values('REVENUE_RECOGNITION_METHOD',
6117 l_pdt_params_rec.Revenue_Recognition_Method);
6118 FETCH get_prod_param_values INTO l_rev_recog_meaning;
6119 CLOSE get_prod_param_values;
6120
6121 OKL_API.set_message(p_app_name => G_APP_NAME,
6122 p_msg_name => G_RRB_SPLIT_ASSET_NOT_ALLWD,
6123 p_token1 => G_METHOD,
6124 p_token1_value => l_rev_recog_meaning);
6125 RAISE OKL_API.G_EXCEPTION_ERROR;
6126 END IF;
6127 -- Bug# 4542290 - smadhava - Added - End
6128
6129 l_rel_ast := '?';
6130 --check for release assets in a contract
6131 OPEN l_chk_rel_ast_csr (p_chr_id => l_chr_id
6132 ,p_cle_id => p_cle_id --Added for Bug# 16496239 pratirao 15-Mar-2013
6133 );
6134 FETCH l_chk_rel_ast_csr INTO l_rel_ast;
6135 CLOSE l_chk_rel_ast_csr;
6136
6137 FND_FILE.PUT_LINE(FND_FILE.LOG,'l_rel_ast: '||l_rel_ast);
6138 --IF l_rel_ast = '!' THEN
6139 IF l_rel_ast ='Y' THEN
6140 OKL_API.set_message(p_app_name => G_APP_NAME,
6141 p_msg_name => 'OKL_REL_ASSET_SPLIT_NOT_ALLWD');
6142 RAISE OKL_API.G_EXCEPTION_ERROR;
6143 END IF;
6144 --Bug# 3783518: end
6145
6146 --Bug Fix # 2881114
6147 --check whether asset is linked to service contract
6148 l_lnk_to_srv := '?';
6149 OPEN lnk_to_srv_csr (p_cle_id => p_cle_id);
6150 FETCH lnk_to_srv_csr INTO l_lnk_to_srv;
6151 IF lnk_to_srv_csr%NOTFOUND THEN
6152 NULL;
6153 END IF;
6154 CLOSE lnk_to_srv_csr;
6155
6156 IF l_lnk_to_srv = '!' THEN
6157 OKL_API.set_message(p_app_name => G_APP_NAME,
6158 p_msg_name => G_ASSET_LINKED_TO_SERVICE);
6159 RAISE OKL_API.G_EXCEPTION_ERROR;
6160 END IF;
6161 --Bug Fix # 2881114 End
6162
6163 --2.Set the status of the Contract Line on HOLD
6164 --study the contract status concurrent program
6165 --possibly call it from here.
6166 --3.create and save split asset transaction
6167 l_trxv_rec.tas_type := 'ALI';
6168 l_trxv_rec.tsu_code := 'ENTERED';
6169 ----------------------------------
6170 --Bug# 3156924
6171 --validate trx_date :
6172 validate_trx_date(p_api_version => p_api_version,
6173 p_init_msg_list => p_init_msg_list,
6174 x_return_status => x_return_status,
6175 x_msg_count => x_msg_count,
6176 x_msg_data => x_msg_data,
6177 p_cle_id => p_cle_id,
6178
6179 p_trx_date => p_trx_date);
6180 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
6181 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
6182 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
6183 RAISE OKL_API.G_EXCEPTION_ERROR;
6184 END IF;
6185
6186 --Bug# 5946411 :ER Added offlease pending transaction message
6187 Check_Offlease_Trans(p_api_version => p_api_version,
6188 p_init_msg_list => p_init_msg_list,
6189 x_return_status => x_return_status,
6190 x_msg_count => x_msg_count,
6191 x_msg_data => x_msg_data,
6192 p_cle_id => p_cle_id
6193 );
6194 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
6195 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
6196 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
6197 RAISE OKL_API.G_EXCEPTION_ERROR;
6198 END IF;
6199 --Bug# 5946411 :ER end
6200 --l_trxv_rec.date_trans_occurred := sysdate;
6201 l_trxv_rec.date_trans_occurred := p_trx_date;
6202
6203 --Added by dpsingh for LE Uptake
6204
6205 l_legal_entity_id := OKL_LEGAL_ENTITY_UTIL.get_khr_le_id(l_chr_id) ;
6206 IF l_legal_entity_id IS NOT NULL THEN
6207 l_trxv_rec.legal_entity_id := l_legal_entity_id;
6208 ELSE
6209 -- get the contract number
6210 OPEN contract_num_csr(l_chr_id);
6211 FETCH contract_num_csr INTO l_cntrct_number;
6212 CLOSE contract_num_csr;
6213 Okl_Api.set_message(p_app_name => g_app_name,
6214 p_msg_name => 'OKL_LE_NOT_EXIST_CNTRCT',
6215 p_token1 => 'CONTRACT_NUMBER',
6216 p_token1_value => l_cntrct_number);
6217 RAISE OKL_API.G_EXCEPTION_ERROR;
6218 END IF;
6219 -------------------------------------
6220 --++++++++++++++++++++testing ty id only++++++++++++++++++++++
6221 x_return_status := get_try_id(p_try_name => G_TRY_NAME,
6222 x_try_id => l_trxv_rec.try_id);
6223 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
6224 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
6225 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
6226 RAISE OKL_API.G_EXCEPTION_ERROR;
6227 END IF;
6228 --++++++++++++++++++++testing ty id only++++++++++++++++++++++
6229 --Check if a 'ENTRED' unprocessed split transaction alreadt exists for this line
6230 --dbms_output.put_line('Before chk_split_trx cursor fetch');
6231 l_ast_line_rec := get_ast_line(p_cle_id,l_row_not_found);
6232 --dbms_output.put_line('After fetching asset line '||l_ast_line_rec.description);
6233 l_fa_exists := 'N';
6234 IF (l_row_not_found) THEN
6235 --Bug #2798006 : call create split transaction for Loans
6236 l_loan_yn := 'N';
6237 l_loan_yn := Check_If_Loan(P_Cle_Id => p_cle_id,
6238 x_return_status => x_return_status);
6239
6240 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
6241 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
6242 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
6243 RAISE OKL_API.G_EXCEPTION_ERROR;
6244 END IF;
6245
6246 IF l_loan_yn = 'N' THEN
6247 OKL_API.set_message(p_app_name => G_APP_NAME,
6248 p_msg_name => G_SPLIT_ASSET_NOT_FOUND);
6249 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
6250 ELSIF l_loan_yn = 'Y' THEN
6251 --open cursor to get asset information from OKL tables
6252 OPEN loan_ast_csr(PCleId => p_cle_id);
6253 FETCH loan_ast_csr INTO l_loan_ast_rec;
6254 IF loan_ast_csr%NOTFOUND THEN
6255 OKL_API.set_message(p_app_name => G_APP_NAME,
6256 p_msg_name => G_SPLIT_ASSET_NOT_FOUND);
6257 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
6258 ELSE
6259 l_fa_exists := 'N';
6260 END IF;
6261 END IF;
6262 --Bug# 2798006 end.
6263 ELSE
6264 l_fa_exists := 'Y';
6265 END IF;
6266 -- avsingh : added on 10-Aug-2002 : To Prevent Single unit assets to split into
6267 -- individuals
6268 IF (l_ast_line_rec.current_units = 1 AND l_loan_yn = 'N') OR
6269 (l_loan_ast_rec.current_units = 1 AND l_loan_yn = 'Y') THEN
6270 IF NVL(p_split_into_individuals_yn,'N') = 'Y' OR NVL(p_split_into_units,0) > 0 THEN
6271
6272 --Bug# 6336455: Display appropriate error message when
6273 -- splitting an off-lease asset
6274 IF (l_ast_line_rec.line_status IN ('TERMINATED','EXPIRED')) OR
6275 (l_loan_ast_rec.line_status IN ('TERMINATED','EXPIRED')) THEN
6276
6277 OKL_API.set_message(p_app_name => G_APP_NAME,
6278 p_msg_name => 'OKL_AM_SINGLE_UNIT_SPLIT');
6279 RAISE OKL_API.G_EXCEPTION_ERROR;
6280
6281 ELSE
6282 --Changed message name by bkatraga for bug 9548880
6283 OKL_API.set_message(p_app_name => G_APP_NAME,
6284 p_msg_name => G_SPLIT_UNIT_NOT_ALLWD);
6285 RAISE OKL_API.G_EXCEPTION_ERROR;
6286
6287 END IF;
6288 --Bug# 6336455: end
6289 END IF;
6290 END IF;
6291
6292
6293 OPEN chk_split_trx(p_cle_id => l_ast_line_rec.id1);
6294 FETCH chk_split_trx INTO
6295 l_tal_id,
6296 l_split_into_ind_yn,
6297 l_split_units,
6298 --Bug# 3156924
6299 l_trx_date,
6300 l_tas_id;
6301 --dbms_output.put_line('After chk_split_trx cursor fetch');
6302 IF chk_split_trx%NOTFOUND THEN
6303 --create new transaction (header, line and detail)
6304 -- Now creating the new header record
6305 --dbms_output.put_line('After chk_split_trx cursor fetch - trx not found.');
6306 Create_trx_header(p_api_version => p_api_version,
6307 p_init_msg_list => p_init_msg_list,
6308 x_return_status => x_return_status,
6309 x_msg_count => x_msg_count,
6310 x_msg_data => x_msg_data,
6311 p_trxv_rec => l_trxv_rec,
6312 x_trxv_rec => x_trxv_rec);
6313 --dbms_output.put_line('After creating trx header'||x_return_status);
6314 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
6315 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
6316 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
6317 RAISE OKL_API.G_EXCEPTION_ERROR;
6318 END IF;
6319
6320 --Prepare txl record for insert into OKL_TXL_ASSETS_V
6321
6322 IF l_fa_exists = 'Y' THEN
6323 l_txlv_rec.tas_id := x_trxv_rec.id;
6324 l_txlv_rec.kle_id := l_ast_line_rec.id1;
6325 l_txlv_rec.dnz_khr_id := l_ast_line_rec.dnz_chr_id;
6326 l_txlv_rec.asset_number := l_ast_line_rec.name;
6327 l_txlv_rec.description := l_ast_line_rec.description;
6328 x_return_status := Get_Fa_Location(l_ast_line_rec.asset_id,
6329 l_ast_line_rec.corporate_book,
6330 l_fa_location_id);
6331 --dbms_output.put_line('After fetching fa location id'||x_return_status);
6332 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
6333 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
6334 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
6335 RAISE OKL_API.G_EXCEPTION_ERROR;
6336 END IF;
6337 l_txlv_rec.fa_location_id := l_fa_location_id;
6338 l_txlv_rec.original_cost := l_ast_line_rec.original_cost;
6339 l_txlv_rec.current_units := l_ast_line_rec.current_units;
6340 IF l_ast_line_rec.new_used = 'NEW' THEN
6341 l_txlv_rec.used_asset_yn := 'Y';
6342 ELSIF l_ast_line_rec.new_used = 'USED' THEN
6343 l_txlv_rec.used_asset_yn := 'N';
6344 END IF;
6345
6346 l_txlv_rec.tag_number := l_ast_line_rec.tag_number;
6347 l_txlv_rec.model_number := l_ast_line_rec.model_number;
6348 l_txlv_rec.corporate_book := l_ast_line_rec.corporate_book;
6349 l_txlv_rec.in_service_date := l_ast_line_rec.in_service_date;
6350 l_txlv_rec.org_id := l_ast_line_rec.org_id;
6351 l_txlv_rec.depreciation_id := l_ast_line_rec.depreciation_category;
6352 l_txlv_rec.life_in_months := l_ast_line_rec.life_in_months;
6353 l_txlv_rec.depreciation_cost := l_ast_line_rec.cost;
6354 l_txlv_rec.deprn_method := l_ast_line_rec.deprn_method_code;
6355 l_txlv_rec.deprn_rate := l_ast_line_rec.basic_rate;
6356 l_txlv_rec.salvage_value := l_ast_line_rec.salvage_value;
6357 l_txlv_rec.percent_salvage_value := l_ast_line_rec.percent_salvage_value;
6358
6359 --------------------------------------
6360 --Bug# 2981308 : fetch asset key ccid
6361 --------------------------------------
6362 OPEN l_fab_csr(p_asset_id => l_ast_line_rec.asset_id);
6363 FETCH l_fab_csr INTO l_asset_key_id;
6364 IF l_fab_csr%NOTFOUND THEN
6365 NULL;
6366 END IF;
6367 CLOSE l_fab_csr;
6368
6369 l_txlv_rec.asset_key_id := l_asset_key_id;
6370 -------------------------------------
6371 --bug# 2981308 : fetch asset key ccid
6372 ------------------------------------
6373
6374 ELSIF l_fa_exists = 'N' THEN
6375 l_txlv_rec.tas_id := x_trxv_rec.id;
6376 l_txlv_rec.kle_id := l_loan_ast_rec.kle_id;
6377 l_txlv_rec.dnz_khr_id := l_loan_ast_rec.dnz_chr_id;
6378 l_txlv_rec.asset_number := l_loan_ast_rec.asset_number;
6379 l_txlv_rec.description := l_loan_ast_rec.description;
6380 l_txlv_rec.original_cost := l_loan_ast_rec.original_cost;
6381 l_txlv_rec.current_units := l_loan_ast_rec.current_units;
6382 l_txlv_rec.used_asset_yn := 'Y';
6383 l_txlv_rec.depreciation_cost := l_loan_ast_rec.cost;
6384 END IF;
6385 l_txlv_rec.SPLIT_INTO_SINGLES_FLAG := p_split_into_individuals_yn;
6386 l_txlv_rec.SPLIT_INTO_UNITS := p_split_into_units;
6387
6388
6389 IF (l_txlv_rec.tal_type = OKC_API.G_MISS_CHAR OR
6390 l_txlv_rec.tal_type IS NULL) THEN
6391 l_txlv_rec.tal_type := 'ALI';
6392 END IF;
6393 IF (l_txlv_rec.line_number = OKC_API.G_MISS_NUM OR
6394 l_txlv_rec.line_number IS NULL) THEN
6395 l_txlv_rec.line_number := 1;
6396 ELSE
6397 l_txlv_rec.line_number := l_txlv_rec.line_number + 1;
6398 END IF;
6399
6400 --Bug# : Multi Currency
6401 OPEN curr_conv_csr (PCleId => p_cle_id);
6402 FETCH curr_conv_csr INTO curr_conv_rec;
6403 IF curr_conv_csr%NOTFOUND THEN
6404 NULL;
6405 END IF;
6406 CLOSE curr_conv_csr;
6407
6408 l_txlv_rec.currency_code := curr_conv_rec.currency_code;
6409 l_txlv_rec.currency_conversion_type := curr_conv_rec.currency_conversion_type;
6410 l_txlv_rec.currency_conversion_rate := curr_conv_rec.currency_conversion_rate;
6411 l_txlv_rec.currency_conversion_date := curr_conv_rec.currency_conversion_date;
6412
6413 --create asset line transaction
6414 OKL_TXL_ASSETS_PUB.create_txl_asset_def(
6415 p_api_version => p_api_version,
6416 p_init_msg_list => p_init_msg_list,
6417 x_return_status => x_return_status,
6418 x_msg_count => x_msg_count,
6419 x_msg_data => x_msg_data,
6420 p_tlpv_rec => l_txlv_rec,
6421 x_tlpv_rec => x_txlv_rec);
6422 --dbms_output.put_line('After creating transaction line'||x_return_status);
6423 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
6424 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
6425 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
6426 RAISE OKL_API.G_EXCEPTION_ERROR;
6427 END IF;
6428
6429 --call to create record for OKL_TXD_ASSETS_V
6430 --dbms_output.put_line('when fresh trx '||l_ast_line_rec.description);
6431 IF NVL(p_split_into_individuals_yn,'N') = 'X' THEN
6432 --split asset component transaction details will not be created
6433 NULL;
6434 ELSE
6435 Create_trx_details(p_api_version => p_api_version,
6436 p_init_msg_list => p_init_msg_list,
6437 x_return_status => x_return_status,
6438 x_msg_count => x_msg_count,
6439 x_msg_data => x_msg_data,
6440 p_ast_line_rec => l_ast_line_rec,
6441 p_txlv_rec => x_txlv_rec,
6442 x_txdv_tbl => x_txdv_tbl);
6443
6444 --dbms_output.put_line('After creating trx details'||x_return_status);
6445 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
6446 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
6447 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
6448 RAISE OKL_API.G_EXCEPTION_ERROR;
6449 END IF;
6450 END IF;
6451
6452 --Bug #2723498 : 11.5.9 enahncement split asset by serial numbers
6453 --call to create serial number transaction
6454 create_srl_num_trx(p_api_version => p_api_version,
6455 p_init_msg_list => p_init_msg_list,
6456 x_return_status => x_return_status,
6457 x_msg_count => x_msg_count,
6458 x_msg_data => x_msg_data,
6459 p_cle_id => p_cle_id,
6460 p_split_into_individuals_yn => p_split_into_individuals_yn,
6461 p_split_into_units => p_split_into_units,
6462 p_ib_tbl => l_ib_tbl,
6463 p_tas_id => x_txlv_rec.tas_id,
6464 p_tal_id => x_txlv_rec.id,
6465 p_asd_id => NULL);
6466 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
6467 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
6468 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
6469 RAISE OKL_API.G_EXCEPTION_ERROR;
6470 END IF;
6471 --Bug #2723498 : 11.5.9 enahncement split asset by serial numbers end
6472
6473 ELSE --chk_split_trx%FOUND
6474 -- If yes then chk if split parameters are same
6475 --dbms_output.put_line('transaction found');
6476 IF NVL(p_split_into_individuals_yn,'N') <> 'X' AND NVL(l_split_into_ind_yn,'N') = 'X' THEN
6477
6478 --split asset component transactions exist
6479 OKL_API.set_message(p_app_name => G_APP_NAME,
6480 p_msg_name => G_SPLIT_AST_COMP_TRX);
6481 RAISE OKL_API.G_EXCEPTION_ERROR;
6482
6483 ELSIF NVL(p_split_into_individuals_yn,'N') = 'X' AND NVL(l_split_into_ind_yn,'N') <> 'X' THEN
6484
6485 --split asset transactions exist
6486 OKL_API.set_message(p_app_name => G_APP_NAME,
6487 p_msg_name => G_SPLIT_ASSET_TRX);
6488 RAISE OKL_API.G_EXCEPTION_ERROR;
6489
6490 ELSIF (NVL(p_split_into_individuals_yn,'N') = NVL(l_split_into_ind_yn,'N') AND NVL(p_split_into_units,0) = NVL(l_split_units,0)
6491 --Bug# 3156924 :
6492 AND TRUNC(p_trx_date) = TRUNC(l_trx_date)) THEN
6493 -- If yes then do nothing
6494 NULL;
6495 --dbms_output.put_line('no change transaction found - doing nothing');
6496 ELSIF (NVL(p_split_into_individuals_yn,'N') <> 'X') AND
6497 (NVL(p_split_into_individuals_yn,'N') <> NVL(l_split_into_ind_yn,'N') OR NVL(p_split_into_units,0) <> NVL(l_split_units,0)
6498 --Bug# 3156924 :
6499 OR TRUNC(p_trx_date) <> TRUNC(l_trx_date)) THEN
6500 -- else
6501 -------------------------------------------------
6502 --Bug# 3156924
6503 ------------------------------------------------
6504 --update transaction header for transaction date
6505 l_trxv_rec.id := l_tas_id;
6506 l_trxv_rec.date_trans_occurred := p_trx_date;
6507 OKL_TRX_ASSETS_PUB.update_trx_ass_h_def(
6508 p_api_version => p_api_version,
6509 p_init_msg_list => p_init_msg_list,
6510 x_return_status => x_return_status,
6511 x_msg_count => x_msg_count,
6512 x_msg_data => x_msg_data,
6513 p_thpv_rec => l_trxv_rec,
6514 x_thpv_rec => x_trxv_rec);
6515
6516 --dbms_output.put_line('after updating contract trx status to processed '||x_return_status);
6517 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
6518 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
6519 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
6520 RAISE OKL_API.G_EXCEPTION_ERROR;
6521 END IF;
6522 -------------------------------------------------
6523 --Bug# 3156924
6524 ------------------------------------------------
6525
6526 --update transaction lines for split assets
6527 l_txlv_rec.id := l_tal_id;
6528 --l_txlv_rec.depreciate_yn := p_split_into_individuals_yn;
6529 --l_txlv_rec.units_retired := p_split_into_units;
6530 l_txlv_rec.SPLIT_INTO_SINGLES_FLAG := p_split_into_individuals_yn;
6531 l_txlv_rec.SPLIT_INTO_UNITS := p_split_into_units;
6532 OKL_TXL_ASSETS_PUB.update_txl_asset_def(
6533 p_api_version => p_api_version,
6534 p_init_msg_list => p_init_msg_list,
6535 x_return_status => x_return_status,
6536 x_msg_count => x_msg_count,
6537 x_msg_data => x_msg_data,
6538 p_tlpv_rec => l_txlv_rec,
6539 x_tlpv_rec => x_txlv_rec);
6540 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
6541 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
6542 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
6543 RAISE OKL_API.G_EXCEPTION_ERROR;
6544 END IF;
6545
6546 --fetch transaction details
6547 l_txdv_tbl := get_trx_details(p_tal_id => x_txlv_rec.id,
6548 x_no_data_found => l_no_txd_data_found);
6549 IF l_no_txd_data_found THEN
6550 NULL;
6551 --dbms_output.put_line('No Transaction Details Found');
6552 --call to create record for OKL_TXD_ASSETS_V
6553 --dbms_output.put_line('when txd assets not found '||l_ast_line_rec.description);
6554 Create_trx_details(p_api_version => p_api_version,
6555 p_init_msg_list => p_init_msg_list,
6556 x_return_status => x_return_status,
6557 x_msg_count => x_msg_count,
6558 x_msg_data => x_msg_data,
6559 p_ast_line_rec => l_ast_line_rec,
6560 p_txlv_rec => x_txlv_rec,
6561 x_txdv_tbl => x_txdv_tbl);
6562
6563 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
6564 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
6565 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
6566 RAISE OKL_API.G_EXCEPTION_ERROR;
6567 END IF;
6568
6569 ELSE
6570 -- delete transaction details and approprately create new transaction details
6571 OKL_TXD_ASSETS_PUB.delete_txd_asset_def(p_api_version => p_api_version,
6572 p_init_msg_list => p_init_msg_list,
6573 x_return_status => x_return_status,
6574 x_msg_count => x_msg_count,
6575 x_msg_data => x_msg_data,
6576 p_adpv_tbl => l_txdv_tbl);
6577
6578 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
6579 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
6580 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
6581 RAISE OKL_API.G_EXCEPTION_ERROR;
6582 END IF;
6583 --Bug fix# 2744213 : positioning of end if
6584 -- End If;
6585
6586 -- create new transaction details
6587 --call to create record for OKL_TXD_ASSETS_V
6588 --dbms_output.put_line('after deleting txd assets '||l_ast_line_rec.description);
6589 Create_trx_details(p_api_version => p_api_version,
6590 p_init_msg_list => p_init_msg_list,
6591 x_return_status => x_return_status,
6592 x_msg_count => x_msg_count,
6593 x_msg_data => x_msg_data,
6594 p_ast_line_rec => l_ast_line_rec,
6595 p_txlv_rec => x_txlv_rec,
6596 x_txdv_tbl => x_txdv_tbl);
6597
6598 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
6599 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
6600 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
6601 RAISE OKL_API.G_EXCEPTION_ERROR;
6602 END IF;
6603 END IF;
6604
6605 --Bug #2723498 11.5.9 enhancement - Splitting assets by serial numbers
6606 --check if serial number data exists
6607
6608 l_srl_exists := '?';
6609 OPEN srl_exist_chk(x_txlv_rec.id);
6610 FETCH srl_exist_chk INTO l_srl_exists;
6611 IF srl_exist_chk%NOTFOUND THEN
6612 NULL;
6613 END IF;
6614 CLOSE srl_exist_chk;
6615
6616 IF l_srl_exists = '!' THEN
6617
6618 l_iipv_count := 0;
6619 OPEN get_srl_csr(x_txlv_rec.id);
6620 LOOP
6621 FETCH get_srl_csr INTO l_iipv_id;
6622 EXIT WHEN get_srl_csr%NOTFOUND;
6623 l_iipv_count := l_iipv_count + 1;
6624 l_iipv_tbl(l_iipv_count).id := l_iipv_id;
6625 END LOOP;
6626 CLOSE get_srl_csr;
6627
6628 IF l_iipv_tbl.COUNT > 0 THEN
6629 --delete the old records
6630 okl_txl_itm_insts_pub.delete_txl_itm_insts(
6631 p_api_version => p_api_version,
6632 p_init_msg_list => p_init_msg_list,
6633 x_return_status => x_return_status,
6634 x_msg_count => x_msg_count,
6635 x_msg_data => x_msg_data,
6636 p_iipv_tbl => l_iipv_tbl);
6637
6638 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
6639 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
6640 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
6641 RAISE OKL_API.G_EXCEPTION_ERROR;
6642 END IF;
6643 END IF;
6644
6645 --create new srl numbers if required
6646 create_srl_num_trx(p_api_version => p_api_version,
6647 p_init_msg_list => p_init_msg_list,
6648 x_return_status => x_return_status,
6649 x_msg_count => x_msg_count,
6650 x_msg_data => x_msg_data,
6651 p_cle_id => p_cle_id,
6652 p_split_into_individuals_yn => p_split_into_individuals_yn,
6653 p_split_into_units => p_split_into_units,
6654 p_ib_tbl => l_ib_tbl,
6655 p_tas_id => x_txlv_rec.tas_id,
6656 p_tal_id => x_txlv_rec.id,
6657 p_asd_id => NULL);
6658
6659 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
6660 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
6661 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
6662 RAISE OKL_API.G_EXCEPTION_ERROR;
6663 END IF;
6664
6665 ELSIF l_srl_exists = '?' THEN
6666 --create new srl numbers if required
6667 create_srl_num_trx(p_api_version => p_api_version,
6668 p_init_msg_list => p_init_msg_list,
6669 x_return_status => x_return_status,
6670 x_msg_count => x_msg_count,
6671 x_msg_data => x_msg_data,
6672 p_cle_id => p_cle_id,
6673 p_split_into_individuals_yn => p_split_into_individuals_yn,
6674 p_split_into_units => p_split_into_units,
6675 p_ib_tbl => l_ib_tbl,
6676 p_tas_id => x_txlv_rec.tas_id,
6677 p_tal_id => x_txlv_rec.id,
6678 p_asd_id => NULL);
6679
6680 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
6681 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
6682 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
6683 RAISE OKL_API.G_EXCEPTION_ERROR;
6684 END IF;
6685 END IF; -- srl number exists
6686 --Bug #2723498 11.5.9 enhancement - Splitting assets by serial numbers
6687 --Bug fix# 2744213 : positioning of end if
6688 END IF; -- chenges in transaction
6689 END IF;
6690 OKL_API.END_ACTIVITY (x_msg_count,
6691 x_msg_data );
6692
6693 EXCEPTION
6694 WHEN OKL_API.G_EXCEPTION_ERROR THEN
6695 x_return_status := OKL_API.HANDLE_EXCEPTIONS(
6696 l_api_name,
6697 G_PKG_NAME,
6698 'OKL_API.G_RET_STS_ERROR',
6699 x_msg_count,
6700 x_msg_data,
6701 '_PVT');
6702 WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
6703 x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
6704 l_api_name,
6705 G_PKG_NAME,
6706 'OKL_API.G_RET_STS_UNEXP_ERROR',
6707 x_msg_count,
6708 x_msg_data,
6709 '_PVT');
6710 WHEN OTHERS THEN
6711 x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
6712 l_api_name,
6713 G_PKG_NAME,
6714 'OTHERS',
6715 x_msg_count,
6716 x_msg_data,
6717 '_PVT');
6718
6719 END Create_Split_Transaction;
6720 ------------------------------------------------------------------------------
6721 --Bug# 3156924
6722 --API Name : Create_Split_Transaction
6723 --Description : Process API to create Split Aseet Transaction Records in
6724 -- OKL_TXL_ASSETS_V and OKL_TXD_ASSETS_V
6725 --Note : Original split asset trx creation callo has been overloaded
6726 -- to include p_trx_date(trx_date) as parameter. This old
6727 -- signature preserved for backward compatability. It will
6728 -- create split asset transaction on SYSDATE
6729 --History :
6730 -- 30-Jan-2004 avsingh Creation
6731 --End of Comments
6732 ------------------------------------------------------------------------------
6733 PROCEDURE Create_Split_Transaction(p_api_version IN NUMBER,
6734 p_init_msg_list IN VARCHAR2,
6735 x_return_status OUT NOCOPY VARCHAR2,
6736 x_msg_count OUT NOCOPY NUMBER,
6737 x_msg_data OUT NOCOPY VARCHAR2,
6738 p_cle_id IN NUMBER,
6739 p_split_into_individuals_yn IN VARCHAR2,
6740 p_split_into_units IN NUMBER,
6741 p_ib_tbl IN ib_tbl_type,
6742 x_txdv_tbl OUT NOCOPY txdv_tbl_type,
6743 x_txlv_rec OUT NOCOPY txlv_rec_type,
6744 x_trxv_rec OUT NOCOPY trxv_rec_type) IS
6745
6746 l_return_status VARCHAR2(1) DEFAULT OKL_API.G_RET_STS_SUCCESS;
6747 l_api_name CONSTANT VARCHAR2(30) := 'CREATE_SPLIT_TRANSACTION';
6748 l_api_version CONSTANT NUMBER := 1.0;
6749
6750 l_trx_date DATE := SYSDATE;
6751
6752 BEGIN
6753 x_return_status := OKL_API.G_RET_STS_SUCCESS;
6754 -- Call start_activity to create savepoint, check compatibility
6755 -- and initialize message list
6756 x_return_status := OKL_API.START_ACTIVITY (
6757 l_api_name
6758 ,p_init_msg_list
6759 ,'_PVT'
6760 ,x_return_status);
6761 -- Check if activity started successfully
6762 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
6763 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
6764 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
6765 RAISE OKL_API.G_EXCEPTION_ERROR;
6766 END IF;
6767
6768 --call the overloded procedure :
6769 Create_Split_Transaction(p_api_version => p_api_version,
6770 p_init_msg_list => p_init_msg_list,
6771 x_return_status => x_return_status,
6772 x_msg_count => x_msg_count,
6773 x_msg_data => x_msg_data,
6774 p_cle_id => p_cle_id,
6775 p_split_into_individuals_yn => p_split_into_individuals_yn,
6776 p_split_into_units => p_split_into_units,
6777 p_ib_tbl => p_ib_tbl,
6778 --Bug# 3156924
6779 p_trx_date => l_trx_date,
6780 x_txdv_tbl => x_txdv_tbl,
6781 x_txlv_rec => x_txlv_rec,
6782 x_trxv_rec => x_trxv_rec);
6783
6784 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
6785 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
6786 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
6787 RAISE OKL_API.G_EXCEPTION_ERROR;
6788 END IF;
6789 OKL_API.END_ACTIVITY (x_msg_count,
6790 x_msg_data );
6791
6792 EXCEPTION
6793 WHEN OKL_API.G_EXCEPTION_ERROR THEN
6794 x_return_status := OKL_API.HANDLE_EXCEPTIONS(
6795 l_api_name,
6796 G_PKG_NAME,
6797 'OKL_API.G_RET_STS_ERROR',
6798 x_msg_count,
6799 x_msg_data,
6800 '_PVT');
6801 WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
6802 x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
6803 l_api_name,
6804 G_PKG_NAME,
6805 'OKL_API.G_RET_STS_UNEXP_ERROR',
6806 x_msg_count,
6807 x_msg_data,
6808 '_PVT');
6809 WHEN OTHERS THEN
6810 x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
6811 l_api_name,
6812 G_PKG_NAME,
6813 'OTHERS',
6814 x_msg_count,
6815 x_msg_data,
6816 '_PVT');
6817
6818 END Create_Split_Transaction;
6819 -------------------------------------------------------------------------------------
6820 --Bug# 3156924
6821 --API Name : Create_Split_Transaction
6822 --Description : Process API to create Split Aseet Transaction Records in
6823 -- OKL_TXL_ASSETS_V and OKL_TXD_ASSETS_V
6824 --Note : New signature added to accomodate p_trx_date being passed. This is
6825 -- the one called from the UI. This will create transactions in OKL
6826 -- _TXL_ITM_INSTS if the asset is serialized ad being split by units
6827 -- UI will mark the selected records as selected_for_split_flag = 'Y'
6828 -- for all the assets being split out
6829 --History :
6830 -- 30-Jan-2004 avsingh Creation
6831 --End of Comments
6832 ------------------------------------------------------------------------------
6833 PROCEDURE Create_Split_Transaction(p_api_version IN NUMBER,
6834 p_init_msg_list IN VARCHAR2,
6835 x_return_status OUT NOCOPY VARCHAR2,
6836 x_msg_count OUT NOCOPY NUMBER,
6837 x_msg_data OUT NOCOPY VARCHAR2,
6838 p_cle_id IN NUMBER,
6839 p_split_into_individuals_yn IN VARCHAR2,
6840 p_split_into_units IN NUMBER,
6841 p_trx_date IN DATE,
6842 x_txdv_tbl OUT NOCOPY txdv_tbl_type,
6843 x_txlv_rec OUT NOCOPY txlv_rec_type,
6844 x_trxv_rec OUT NOCOPY trxv_rec_type) IS
6845
6846 l_return_status VARCHAR2(1) DEFAULT OKL_API.G_RET_STS_SUCCESS;
6847 l_api_name CONSTANT VARCHAR2(30) := 'CREATE_SPLIT_TRANSACTION';
6848 l_api_version CONSTANT NUMBER := 1.0;
6849 l_ib_tbl ib_tbl_type;
6850
6851 /*
6852 -- mvasudev, 08/23/2004
6853 -- Added PROCEDURE to enable Business Event
6854 */
6855 PROCEDURE raise_business_event(
6856 x_return_status OUT NOCOPY VARCHAR2
6857 )
6858 IS
6859 CURSOR l_okl_cle_chr_csr IS
6860 SELECT dnz_chr_id
6861 FROM okc_k_lines_b
6862 WHERE id = p_cle_id;
6863
6864 l_parameter_list wf_parameter_list_t;
6865 BEGIN
6866
6867 FOR l_okl_cle_chr_rec IN l_okl_cle_chr_csr
6868 LOOP
6869
6870 wf_event.AddParameterToList(G_WF_ITM_CONTRACT_ID,l_okl_cle_chr_rec.dnz_chr_id,l_parameter_list);
6871 wf_event.AddParameterToList(G_WF_ITM_ASSET_ID,p_cle_id,l_parameter_list);
6872 wf_event.AddParameterToList(G_WF_ITM_TRANS_DATE,fnd_date.date_to_canonical(p_trx_date),l_parameter_list);
6873
6874 OKL_WF_PVT.raise_event (p_api_version => p_api_version,
6875 p_init_msg_list => p_init_msg_list,
6876 x_return_status => x_return_status,
6877 x_msg_count => x_msg_count,
6878 x_msg_data => x_msg_data,
6879 p_event_name => G_WF_EVT_KHR_SPLIT_ASSET_REQ,
6880 p_parameters => l_parameter_list);
6881
6882 END LOOP;
6883
6884 EXCEPTION
6885 WHEN OTHERS THEN
6886 x_return_status := OKL_API.G_RET_STS_UNEXP_ERROR;
6887 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
6888 END raise_business_event;
6889
6890 /*
6891 -- mvasudev, 08/23/2004
6892 -- END, PROCEDURE to enable Business Event
6893 */
6894
6895 BEGIN
6896 x_return_status := OKL_API.G_RET_STS_SUCCESS;
6897 -- Call start_activity to create savepoint, check compatibility
6898 -- and initialize message list
6899 x_return_status := OKL_API.START_ACTIVITY (
6900 l_api_name
6901 ,p_init_msg_list
6902 ,'_PVT'
6903 ,x_return_status);
6904 -- Check if activity started successfully
6905 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
6906 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
6907 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
6908 RAISE OKL_API.G_EXCEPTION_ERROR;
6909 END IF;
6910
6911 --call the overloded procedure :
6912 Create_Split_Transaction(p_api_version => p_api_version,
6913 p_init_msg_list => p_init_msg_list,
6914 x_return_status => x_return_status,
6915 x_msg_count => x_msg_count,
6916 x_msg_data => x_msg_data,
6917 p_cle_id => p_cle_id,
6918 p_split_into_individuals_yn => p_split_into_individuals_yn,
6919 p_split_into_units => p_split_into_units,
6920 p_ib_tbl => l_ib_tbl,
6921 p_trx_date => p_trx_date,
6922 x_txdv_tbl => x_txdv_tbl,
6923 x_txlv_rec => x_txlv_rec,
6924 x_trxv_rec => x_trxv_rec);
6925
6926
6927 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
6928 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
6929 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
6930 RAISE OKL_API.G_EXCEPTION_ERROR;
6931 END IF;
6932
6933 /*
6934 -- mvasudev, 08/23/2004
6935 -- Code change to enable Business Event
6936 */
6937 raise_business_event(x_return_status => x_return_status);
6938 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
6939 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
6940 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
6941 RAISE OKL_API.G_EXCEPTION_ERROR;
6942 END IF;
6943
6944 /*
6945 -- mvasudev, 08/23/2004
6946 -- END, Code change to enable Business Event
6947 */
6948
6949 OKL_API.END_ACTIVITY (x_msg_count,
6950 x_msg_data );
6951
6952 EXCEPTION
6953 WHEN OKL_API.G_EXCEPTION_ERROR THEN
6954 x_return_status := OKL_API.HANDLE_EXCEPTIONS(
6955 l_api_name,
6956 G_PKG_NAME,
6957 'OKL_API.G_RET_STS_ERROR',
6958 x_msg_count,
6959 x_msg_data,
6960 '_PVT');
6961 WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
6962 x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
6963 l_api_name,
6964 G_PKG_NAME,
6965 'OKL_API.G_RET_STS_UNEXP_ERROR',
6966 x_msg_count,
6967 x_msg_data,
6968 '_PVT');
6969 WHEN OTHERS THEN
6970 x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
6971 l_api_name,
6972 G_PKG_NAME,
6973 'OTHERS',
6974 x_msg_count,
6975 x_msg_data,
6976 '_PVT');
6977
6978 END Create_Split_Transaction;
6979 ---------------
6980 --Bug# 3156924
6981 ---------------
6982 --Bug #2723498 : 11.5.9 Split by serial numbers enhancement
6983 --------------------------------------------------------------------------------
6984 --Start of Comments
6985 --API Name : Create_Split_Transaction
6986 --Description : Process API to create Split Aseet Transaction Records in
6987 -- OKL_TXL_ASSETS_V and OKL_TXD_ASSETS_V
6988 -- 1. Take the line details to be split
6989 -- 2. Set the status of the contract as inactive
6990 -- 3. Create and save source record into okl_trx_assets_v
6991 -- 4. Create and save target record into okl_txd_assets_v
6992 --Note : old signature kept for backward compatability. This will be the
6993 -- the one called from the UI. This will create transactions in OKL
6994 -- _TXL_ITM_INSTS if the asset is serialized ad being split by units
6995 -- UI will mark the selected records as selected_for_split_flag = 'Y'
6996 -- for all the assets being split out
6997 --History :
6998 -- 10-OCT-2001 avsingh Creation
6999 --End of Comments
7000 ------------------------------------------------------------------------------
7001 PROCEDURE Create_Split_Transaction(p_api_version IN NUMBER,
7002 p_init_msg_list IN VARCHAR2,
7003 x_return_status OUT NOCOPY VARCHAR2,
7004 x_msg_count OUT NOCOPY NUMBER,
7005 x_msg_data OUT NOCOPY VARCHAR2,
7006 p_cle_id IN NUMBER,
7007 p_split_into_individuals_yn IN VARCHAR2,
7008 p_split_into_units IN NUMBER,
7009 x_txdv_tbl OUT NOCOPY txdv_tbl_type,
7010 x_txlv_rec OUT NOCOPY txlv_rec_type,
7011 x_trxv_rec OUT NOCOPY trxv_rec_type) IS
7012
7013 l_return_status VARCHAR2(1) DEFAULT OKL_API.G_RET_STS_SUCCESS;
7014 l_api_name CONSTANT VARCHAR2(30) := 'CREATE_SPLIT_TRANSACTION';
7015 l_api_version CONSTANT NUMBER := 1.0;
7016 l_ib_tbl ib_tbl_type;
7017 BEGIN
7018 x_return_status := OKL_API.G_RET_STS_SUCCESS;
7019 -- Call start_activity to create savepoint, check compatibility
7020 -- and initialize message list
7021 x_return_status := OKL_API.START_ACTIVITY (
7022 l_api_name
7023 ,p_init_msg_list
7024 ,'_PVT'
7025 ,x_return_status);
7026 -- Check if activity started successfully
7027 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
7028 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
7029 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
7030 RAISE OKL_API.G_EXCEPTION_ERROR;
7031 END IF;
7032
7033 --call the overloded procedure :
7034 Create_Split_Transaction(p_api_version => p_api_version,
7035 p_init_msg_list => p_init_msg_list,
7036 x_return_status => x_return_status,
7037 x_msg_count => x_msg_count,
7038 x_msg_data => x_msg_data,
7039 p_cle_id => p_cle_id,
7040 p_split_into_individuals_yn => p_split_into_individuals_yn,
7041 p_split_into_units => p_split_into_units,
7042 p_ib_tbl => l_ib_tbl,
7043 x_txdv_tbl => x_txdv_tbl,
7044 x_txlv_rec => x_txlv_rec,
7045 x_trxv_rec => x_trxv_rec);
7046
7047 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
7048 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
7049 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
7050 RAISE OKL_API.G_EXCEPTION_ERROR;
7051 END IF;
7052 OKL_API.END_ACTIVITY (x_msg_count,
7053 x_msg_data );
7054
7055 EXCEPTION
7056 WHEN OKL_API.G_EXCEPTION_ERROR THEN
7057 x_return_status := OKL_API.HANDLE_EXCEPTIONS(
7058 l_api_name,
7059 G_PKG_NAME,
7060 'OKL_API.G_RET_STS_ERROR',
7061 x_msg_count,
7062 x_msg_data,
7063 '_PVT');
7064 WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
7065 x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
7066 l_api_name,
7067 G_PKG_NAME,
7068 'OKL_API.G_RET_STS_UNEXP_ERROR',
7069 x_msg_count,
7070 x_msg_data,
7071 '_PVT');
7072 WHEN OTHERS THEN
7073 x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
7074 l_api_name,
7075 G_PKG_NAME,
7076 'OTHERS',
7077 x_msg_count,
7078 x_msg_data,
7079 '_PVT');
7080
7081 END Create_Split_Transaction;
7082 --------------------------------------------------------------------------------
7083 --Start of Comments
7084 --Procedure Name : Update Split transaction
7085 --Description : Updates the split asset number and description
7086 -- on transaction details table
7087 --History :
7088 -- 08-Apr-2001 ashish.singh Created
7089 --End of Comments
7090 --------------------------------------------------------------------------------
7091 PROCEDURE Update_Split_Transaction(p_api_version IN NUMBER,
7092 p_init_msg_list IN VARCHAR2,
7093 x_return_status OUT NOCOPY VARCHAR2,
7094 x_msg_count OUT NOCOPY NUMBER,
7095 x_msg_data OUT NOCOPY VARCHAR2,
7096 p_cle_id IN NUMBER,
7097 p_txdv_tbl IN txdv_tbl_type,
7098 x_txdv_tbl OUT NOCOPY txdv_tbl_type) IS
7099
7100 l_return_status VARCHAR2(1) DEFAULT OKL_API.G_RET_STS_SUCCESS;
7101 l_api_name CONSTANT VARCHAR2(30) := 'UPDATE_SPLIT_TRX';
7102 l_api_version CONSTANT NUMBER := 1.0;
7103
7104 CURSOR fa_line_csr(p_cle_id IN NUMBER) IS
7105 SELECT cle.id
7106 FROM OKC_K_LINES_B cle,
7107 OKC_LINE_STYLES_B lse
7108 WHERE cle.cle_id = p_cle_id
7109 AND cle.lse_id = lse.id
7110 AND lse.lty_code = 'FIXED_ASSET'
7111 --Bug# 2761799 : Do not check for active status on sysdate
7112 --AND trunc(nvl(start_date,sysdate)) <= trunc(sysdate)
7113 --AND trunc(nvl(end_date,sysdate+1)) > trunc(sysdate)
7114 --Bug# 5946411: ER :commented following
7115 -- AND cle.sts_code = 'BOOKED';
7116 ;
7117 --Bug# 5946411: ER End
7118 l_txlv_rec txlv_rec_type;
7119 l_txdv_tbl txdv_tbl_type;
7120 l_txdv_rec txdv_rec_type;
7121 lx_txdv_rec txdv_rec_type;
7122 lx_txdv_tbl txdv_tbl_type;
7123
7124 l_no_data_found BOOLEAN DEFAULT TRUE;
7125 l_fa_line_id NUMBER;
7126
7127 j NUMBER;
7128
7129 BEGIN
7130
7131 -- Call start_activity to create savepoint, check compatibility
7132 -- and initialize message list
7133 x_return_status := OKL_API.START_ACTIVITY (
7134 l_api_name
7135 ,p_init_msg_list
7136 ,'_PVT'
7137 ,x_return_status);
7138 -- Check if activity started successfully
7139 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
7140 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
7141 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
7142 RAISE OKL_API.G_EXCEPTION_ERROR;
7143 END IF;
7144
7145 --Verify cle_id
7146 x_return_status := verify_cle_id(p_cle_id => p_cle_id);
7147 IF x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR THEN
7148 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
7149 ELSIF x_return_status = OKL_API.G_RET_STS_ERROR THEN
7150 RAISE OKL_API.G_EXCEPTION_ERROR;
7151 END IF;
7152
7153 --get fixed asset line
7154 OPEN fa_line_csr(p_cle_id => p_cle_id) ;
7155 FETCH fa_line_csr INTO l_fa_line_id;
7156 IF fa_line_csr%NOTFOUND THEN
7157 NULL; --not exactly
7158 ELSE
7159 l_txlv_rec := get_txlv_rec(l_fa_line_id, l_no_data_found);
7160 IF l_no_data_found THEN
7161 NULL;
7162 --dbms_output.put_line('No pending Split Asset Transactions for this Asset');
7163 OKL_API.set_message(p_app_name => G_APP_NAME,
7164 p_msg_name => G_SPLIT_AST_TRX_NOT_FOUND
7165 );
7166 ELSE
7167 l_txdv_tbl := p_txdv_tbl;
7168 --1. update txd assets
7169 IF l_txdv_tbl.LAST IS NOT NULL THEN
7170 j := 0;
7171 LOOP
7172 IF l_txdv_tbl.LAST = j THEN
7173 EXIT;
7174 ELSE
7175 j := j+1;
7176 --dbms_output.put_line('J ='||to_char(j));
7177 l_txdv_rec.id := l_txdv_tbl(j).id;
7178 --Bug# 4994713: convert asset number to upper case
7179 l_txdv_rec.asset_number := UPPER(l_txdv_tbl(j).asset_number);
7180 l_txdv_rec.description := l_txdv_tbl(j).description;
7181 --dbms_output.put_line('l_txdv_rec.id'||to_char(l_txdv_rec.id));
7182 IF (l_txdv_rec.id IS NULL) OR (l_txdv_rec.id = OKL_API.G_MISS_NUM) THEN
7183 EXIT;
7184 ELSE
7185
7186 OKL_TXD_ASSETS_PUB.update_txd_asset_def(
7187 p_api_version => p_api_version,
7188 p_init_msg_list => p_init_msg_list,
7189 x_return_status => x_return_status,
7190 x_msg_count => x_msg_count,
7191 x_msg_data => x_msg_data,
7192 p_adpv_rec => l_txdv_rec,
7193 x_adpv_rec => lx_txdv_rec);
7194 --dbms_output.put_line('after updating the transaction details for asset number '||l_txdv_rec.asset_number||':'||x_return_status);
7195 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
7196 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
7197 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
7198 RAISE OKL_API.G_EXCEPTION_ERROR;
7199 END IF;
7200 ---
7201
7202 IF lx_txdv_rec.target_kle_id IS NULL THEN
7203 x_return_status := validate_attributes(p_txdv_rec => lx_txdv_rec);
7204
7205 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
7206 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
7207 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
7208 RAISE OKL_API.G_EXCEPTION_ERROR;
7209 END IF;
7210 END IF;
7211
7212 --validate if original asset number has been modified
7213 IF l_txlv_rec.kle_id = lx_txdv_rec.target_kle_id THEN
7214 IF (lx_txdv_rec.asset_number <> l_txlv_rec.asset_number)
7215 OR (lx_txdv_rec.description <> l_txlv_rec.description) THEN
7216 OKL_API.Set_message(p_app_name => G_APP_NAME,
7217 p_msg_name => G_SPLIT_PARENT_NUMBER_CHANGE);
7218 RAISE OKL_API.G_EXCEPTION_ERROR;
7219 END IF;
7220 END IF;
7221
7222 lx_txdv_tbl(j) := lx_txdv_rec;
7223 END IF;
7224 END IF;
7225 END LOOP;
7226 END IF;
7227 -----
7228 END IF;
7229 END IF;
7230 x_txdv_tbl := lx_txdv_tbl;
7231 OKL_API.END_ACTIVITY (x_msg_count,
7232 x_msg_data );
7233 EXCEPTION
7234 WHEN OKL_API.G_EXCEPTION_ERROR THEN
7235 x_return_status := OKL_API.HANDLE_EXCEPTIONS(
7236 l_api_name,
7237 G_PKG_NAME,
7238 'OKL_API.G_RET_STS_ERROR',
7239 x_msg_count,
7240 x_msg_data,
7241 '_PVT');
7242 WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
7243 x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
7244 l_api_name,
7245 G_PKG_NAME,
7246 'OKL_API.G_RET_STS_UNEXP_ERROR',
7247 x_msg_count,
7248 x_msg_data,
7249 '_PVT');
7250 WHEN OTHERS THEN
7251 x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
7252 l_api_name,
7253 G_PKG_NAME,
7254 'OTHERS',
7255 x_msg_count,
7256 x_msg_data,
7257 '_PVT');
7258 END Update_Split_Transaction;
7259 ---------------------------------------------------------------------------
7260 -- FUNCTION get_rec for: OKC_K_ITEMS_V
7261 ---------------------------------------------------------------------------
7262 FUNCTION get_cimv_rec (
7263 p_cle_id IN NUMBER,
7264 x_no_data_found OUT NOCOPY BOOLEAN
7265 ) RETURN cimv_rec_type IS
7266 CURSOR okc_cimv_csr (p_cle_id IN NUMBER) IS
7267 SELECT
7268 ID,
7269 OBJECT_VERSION_NUMBER,
7270 CLE_ID,
7271 CHR_ID,
7272 CLE_ID_FOR,
7273 DNZ_CHR_ID,
7274 OBJECT1_ID1,
7275 OBJECT1_ID2,
7276 JTOT_OBJECT1_CODE,
7277 UOM_CODE,
7278 EXCEPTION_YN,
7279 NUMBER_OF_ITEMS,
7280 UPG_ORIG_SYSTEM_REF,
7281 UPG_ORIG_SYSTEM_REF_ID,
7282 PRICED_ITEM_YN,
7283 CREATED_BY,
7284 CREATION_DATE,
7285 LAST_UPDATED_BY,
7286 LAST_UPDATE_DATE,
7287 LAST_UPDATE_LOGIN
7288 FROM Okc_K_Items_V
7289 WHERE okc_k_items_v.cle_id = p_cle_id;
7290 l_cimv_rec cimv_rec_type;
7291 BEGIN
7292 x_no_data_found := TRUE;
7293 -- Get current database values
7294 OPEN okc_cimv_csr (p_cle_id);
7295 FETCH okc_cimv_csr INTO
7296 l_cimv_rec.ID,
7297 l_cimv_rec.OBJECT_VERSION_NUMBER,
7298 l_cimv_rec.CLE_ID,
7299 l_cimv_rec.CHR_ID,
7300 l_cimv_rec.CLE_ID_FOR,
7301 l_cimv_rec.DNZ_CHR_ID,
7302 l_cimv_rec.OBJECT1_ID1,
7303 l_cimv_rec.OBJECT1_ID2,
7304 l_cimv_rec.JTOT_OBJECT1_CODE,
7305 l_cimv_rec.UOM_CODE,
7306 l_cimv_rec.EXCEPTION_YN,
7307 l_cimv_rec.NUMBER_OF_ITEMS,
7308 l_cimv_rec.UPG_ORIG_SYSTEM_REF,
7309 l_cimv_rec.UPG_ORIG_SYSTEM_REF_ID,
7310 l_cimv_rec.PRICED_ITEM_YN,
7311 l_cimv_rec.CREATED_BY,
7312 l_cimv_rec.CREATION_DATE,
7313 l_cimv_rec.LAST_UPDATED_BY,
7314 l_cimv_rec.LAST_UPDATE_DATE,
7315 l_cimv_rec.LAST_UPDATE_LOGIN;
7316 x_no_data_found := okc_cimv_csr%NOTFOUND;
7317 CLOSE okc_cimv_csr;
7318 RETURN(l_cimv_rec);
7319 END get_cimv_rec;
7320
7321 FUNCTION get_cimv_rec (
7322 p_cle_id IN NUMBER
7323 ) RETURN cimv_rec_type IS
7324 l_row_notfound BOOLEAN := TRUE;
7325 BEGIN
7326 RETURN(get_cimv_rec(p_cle_id, l_row_notfound));
7327 END get_cimv_rec;
7328 ---------------------------------------------------------------------------
7329 -- FUNCTION get_rec for: OKL_K_LINES_V
7330 ---------------------------------------------------------------------------
7331 FUNCTION get_klev_rec (
7332 p_cle_id IN NUMBER,
7333 x_no_data_found OUT NOCOPY BOOLEAN
7334 ) RETURN klev_rec_type IS
7335 CURSOR okl_k_lines_v_csr (p_id IN NUMBER) IS
7336 SELECT
7337 ID,
7338 OBJECT_VERSION_NUMBER,
7339 KLE_ID,
7340 STY_ID,
7341 PRC_CODE,
7342 FCG_CODE,
7343 NTY_CODE,
7344 ESTIMATED_OEC,
7345 LAO_AMOUNT,
7346 TITLE_DATE,
7347 FEE_CHARGE,
7348 LRS_PERCENT,
7349 INITIAL_DIRECT_COST,
7350 PERCENT_STAKE,
7351 PERCENT,
7352 EVERGREEN_PERCENT,
7353 AMOUNT_STAKE,
7354 OCCUPANCY,
7355 COVERAGE,
7356 RESIDUAL_PERCENTAGE,
7357 DATE_LAST_INSPECTION,
7358 DATE_SOLD,
7359 LRV_AMOUNT,
7360 CAPITAL_REDUCTION,
7361 DATE_NEXT_INSPECTION_DUE,
7362 DATE_RESIDUAL_LAST_REVIEW,
7363 DATE_LAST_REAMORTISATION,
7364 VENDOR_ADVANCE_PAID,
7365 WEIGHTED_AVERAGE_LIFE,
7366 TRADEIN_AMOUNT,
7367 BOND_EQUIVALENT_YIELD,
7368 TERMINATION_PURCHASE_AMOUNT,
7369 REFINANCE_AMOUNT,
7370 YEAR_BUILT,
7371 DELIVERED_DATE,
7372 CREDIT_TENANT_YN,
7373 DATE_LAST_CLEANUP,
7374 YEAR_OF_MANUFACTURE,
7375 COVERAGE_RATIO,
7376 REMARKETED_AMOUNT,
7377 GROSS_SQUARE_FOOTAGE,
7378 PRESCRIBED_ASSET_YN,
7379 DATE_REMARKETED,
7380 NET_RENTABLE,
7381 REMARKET_MARGIN,
7382 DATE_LETTER_ACCEPTANCE,
7383 REPURCHASED_AMOUNT,
7384 DATE_COMMITMENT_EXPIRATION,
7385 DATE_REPURCHASED,
7386 DATE_APPRAISAL,
7387 RESIDUAL_VALUE,
7388 APPRAISAL_VALUE,
7389 SECURED_DEAL_YN,
7390 GAIN_LOSS,
7391 FLOOR_AMOUNT,
7392 RE_LEASE_YN,
7393 PREVIOUS_CONTRACT,
7394 TRACKED_RESIDUAL,
7395 DATE_TITLE_RECEIVED,
7396 AMOUNT,
7397 ATTRIBUTE_CATEGORY,
7398 ATTRIBUTE1,
7399 ATTRIBUTE2,
7400 ATTRIBUTE3,
7401 ATTRIBUTE4,
7402 ATTRIBUTE5,
7403 ATTRIBUTE6,
7404 ATTRIBUTE7,
7405 ATTRIBUTE8,
7406 ATTRIBUTE9,
7407 ATTRIBUTE10,
7408 ATTRIBUTE11,
7409 ATTRIBUTE12,
7410 ATTRIBUTE13,
7411 ATTRIBUTE14,
7412 ATTRIBUTE15,
7413 STY_ID_FOR,
7414 CLG_ID,
7415 CREATED_BY,
7416 CREATION_DATE,
7417 LAST_UPDATED_BY,
7418 LAST_UPDATE_DATE,
7419 LAST_UPDATE_LOGIN,
7420 DATE_FUNDING,
7421 DATE_FUNDING_REQUIRED,
7422 DATE_ACCEPTED,
7423 DATE_DELIVERY_EXPECTED,
7424 OEC,
7425 CAPITAL_AMOUNT,
7426 RESIDUAL_GRNTY_AMOUNT,
7427 RESIDUAL_CODE,
7428 RVI_PREMIUM,
7429 CREDIT_NATURE,
7430 CAPITALIZED_INTEREST,
7431 CAPITAL_REDUCTION_PERCENT,
7432 DATE_PAY_INVESTOR_START,
7433 PAY_INVESTOR_FREQUENCY,
7434 PAY_INVESTOR_EVENT,
7435 PAY_INVESTOR_REMITTANCE_DAYS,
7436 --Bug# 2998115
7437 FEE_TYPE,
7438 --Bug# 3143522 : Subsidies
7439 SUBSIDY_ID,
7440 --SUBSIDIZED_OEC,
7441 --SUBSIDIZED_CAP_AMOUNT,
7442 PRE_TAX_YIELD,
7443 AFTER_TAX_YIELD,
7444 IMPLICIT_INTEREST_RATE,
7445 IMPLICIT_NON_IDC_INTEREST_RATE,
7446 PRE_TAX_IRR,
7447 AFTER_TAX_IRR,
7448 SUBSIDY_OVERRIDE_AMOUNT,
7449 --quote
7450 SUB_PRE_TAX_YIELD,
7451 SUB_AFTER_TAX_YIELD,
7452 SUB_IMPL_INTEREST_RATE,
7453 SUB_IMPL_NON_IDC_INT_RATE,
7454 SUB_PRE_TAX_IRR,
7455 SUB_AFTER_TAX_IRR,
7456 --Bug# 2994971
7457 ITEM_INSURANCE_CATEGORY,
7458 --Bug# 3973640 : 11.5.10+ schema changes
7459 QTE_ID,
7460 FUNDING_DATE,
7461 STREAM_TYPE_SUBCLASS
7462 -- Bug#4508050 - smadhava - Added - Start
7463 , FEE_PURPOSE_CODE
7464 , DATE_FUNDING_EXPECTED
7465 , DATE_DELIVERY_EXPECTED
7466 , MANUFACTURER_NAME
7467 , MODEL_NUMBER
7468 , DOWN_PAYMENT_RECEIVER_CODE
7469 , CAPITALIZE_DOWN_PAYMENT_YN
7470 -- Bug#4508050 - smadhava - Added - End
7471 --Bug# 4631549
7472 ,Expected_asset_cost
7473
7474 FROM OKL_K_LINES_V
7475 WHERE OKL_K_LINES_V.id = p_id;
7476 l_klev_rec klev_rec_type;
7477 BEGIN
7478
7479 x_no_data_found := TRUE;
7480 -- Get current database values
7481 OPEN okl_k_lines_v_csr (p_cle_id);
7482 FETCH okl_k_lines_v_csr INTO
7483 l_klev_rec.ID,
7484 l_klev_rec.OBJECT_VERSION_NUMBER,
7485 l_klev_rec.KLE_ID,
7486 l_klev_rec.STY_ID,
7487 l_klev_rec.PRC_CODE,
7488 l_klev_rec.FCG_CODE,
7489 l_klev_rec.NTY_CODE,
7490 l_klev_rec.ESTIMATED_OEC,
7491 l_klev_rec.LAO_AMOUNT,
7492 l_klev_rec.TITLE_DATE,
7493 l_klev_rec.FEE_CHARGE,
7494 l_klev_rec.LRS_PERCENT,
7495 l_klev_rec.INITIAL_DIRECT_COST,
7496 l_klev_rec.PERCENT_STAKE,
7497 l_klev_rec.PERCENT,
7498 l_klev_rec.EVERGREEN_PERCENT,
7499 l_klev_rec.AMOUNT_STAKE,
7500 l_klev_rec.OCCUPANCY,
7501 l_klev_rec.COVERAGE,
7502 l_klev_rec.RESIDUAL_PERCENTAGE,
7503 l_klev_rec.DATE_LAST_INSPECTION,
7504 l_klev_rec.DATE_SOLD,
7505 l_klev_rec.LRV_AMOUNT,
7506 l_klev_rec.CAPITAL_REDUCTION,
7507 l_klev_rec.DATE_NEXT_INSPECTION_DUE,
7508 l_klev_rec.DATE_RESIDUAL_LAST_REVIEW,
7509 l_klev_rec.DATE_LAST_REAMORTISATION,
7510 l_klev_rec.VENDOR_ADVANCE_PAID,
7511 l_klev_rec.WEIGHTED_AVERAGE_LIFE,
7512 l_klev_rec.TRADEIN_AMOUNT,
7513 l_klev_rec.BOND_EQUIVALENT_YIELD,
7514 l_klev_rec.TERMINATION_PURCHASE_AMOUNT,
7515 l_klev_rec.REFINANCE_AMOUNT,
7516 l_klev_rec.YEAR_BUILT,
7517 l_klev_rec.DELIVERED_DATE,
7518 l_klev_rec.CREDIT_TENANT_YN,
7519 l_klev_rec.DATE_LAST_CLEANUP,
7520 l_klev_rec.YEAR_OF_MANUFACTURE,
7521 l_klev_rec.COVERAGE_RATIO,
7522 l_klev_rec.REMARKETED_AMOUNT,
7523 l_klev_rec.GROSS_SQUARE_FOOTAGE,
7524 l_klev_rec.PRESCRIBED_ASSET_YN,
7525 l_klev_rec.DATE_REMARKETED,
7526 l_klev_rec.NET_RENTABLE,
7527 l_klev_rec.REMARKET_MARGIN,
7528 l_klev_rec.DATE_LETTER_ACCEPTANCE,
7529 l_klev_rec.REPURCHASED_AMOUNT,
7530 l_klev_rec.DATE_COMMITMENT_EXPIRATION,
7531 l_klev_rec.DATE_REPURCHASED,
7532 l_klev_rec.DATE_APPRAISAL,
7533 l_klev_rec.RESIDUAL_VALUE,
7534 l_klev_rec.APPRAISAL_VALUE,
7535 l_klev_rec.SECURED_DEAL_YN,
7536 l_klev_rec.GAIN_LOSS,
7537 l_klev_rec.FLOOR_AMOUNT,
7538 l_klev_rec.RE_LEASE_YN,
7539 l_klev_rec.PREVIOUS_CONTRACT,
7540 l_klev_rec.TRACKED_RESIDUAL,
7541 l_klev_rec.DATE_TITLE_RECEIVED,
7542 l_klev_rec.AMOUNT,
7543 l_klev_rec.ATTRIBUTE_CATEGORY,
7544 l_klev_rec.ATTRIBUTE1,
7545 l_klev_rec.ATTRIBUTE2,
7546 l_klev_rec.ATTRIBUTE3,
7547 l_klev_rec.ATTRIBUTE4,
7548 l_klev_rec.ATTRIBUTE5,
7549 l_klev_rec.ATTRIBUTE6,
7550 l_klev_rec.ATTRIBUTE7,
7551 l_klev_rec.ATTRIBUTE8,
7552 l_klev_rec.ATTRIBUTE9,
7553 l_klev_rec.ATTRIBUTE10,
7554 l_klev_rec.ATTRIBUTE11,
7555 l_klev_rec.ATTRIBUTE12,
7556 l_klev_rec.ATTRIBUTE13,
7557 l_klev_rec.ATTRIBUTE14,
7558 l_klev_rec.ATTRIBUTE15,
7559 l_klev_rec.STY_ID_FOR,
7560 l_klev_rec.CLG_ID,
7561 l_klev_rec.CREATED_BY,
7562 l_klev_rec.CREATION_DATE,
7563 l_klev_rec.LAST_UPDATED_BY,
7564 l_klev_rec.LAST_UPDATE_DATE,
7565 l_klev_rec.LAST_UPDATE_LOGIN,
7566 l_klev_rec.DATE_FUNDING,
7567 l_klev_rec.DATE_FUNDING_REQUIRED,
7568 l_klev_rec.DATE_ACCEPTED,
7569 l_klev_rec.DATE_DELIVERY_EXPECTED,
7570 l_klev_rec.OEC,
7571 l_klev_rec.CAPITAL_AMOUNT,
7572 l_klev_rec.RESIDUAL_GRNTY_AMOUNT,
7573 l_klev_rec.RESIDUAL_CODE,
7574 l_klev_rec.RVI_PREMIUM,
7575 l_klev_rec.CREDIT_NATURE,
7576 l_klev_rec.CAPITALIZED_INTEREST,
7577 l_klev_rec.CAPITAL_REDUCTION_PERCENT,
7578 l_klev_rec.DATE_PAY_INVESTOR_START,
7579 l_klev_rec.PAY_INVESTOR_FREQUENCY,
7580 l_klev_rec.PAY_INVESTOR_EVENT,
7581 l_klev_rec.PAY_INVESTOR_REMITTANCE_DAYS,
7582 --Bug# 2998115:
7583 l_klev_rec.FEE_TYPE,
7584 --Bug#3143522 : Subsidies
7585 l_klev_rec.SUBSIDY_ID,
7586 --l_klev_rec.SUBSIDIZED_OEC,
7587 --l_klev_rec.SUBSIDIZED_CAP_AMOUNT,
7588 l_klev_rec.PRE_TAX_YIELD,
7589 l_klev_rec.AFTER_TAX_YIELD,
7590 l_klev_rec.IMPLICIT_INTEREST_RATE,
7591 l_klev_rec.IMPLICIT_NON_IDC_INTEREST_RATE,
7592 l_klev_rec.PRE_TAX_IRR,
7593 l_klev_rec.AFTER_TAX_IRR,
7594 l_klev_rec.SUBSIDY_OVERRIDE_AMOUNT,
7595 --quote
7596 l_klev_rec.SUB_PRE_TAX_YIELD,
7597 l_klev_rec.SUB_AFTER_TAX_YIELD,
7598 l_klev_rec.SUB_IMPL_INTEREST_RATE,
7599 l_klev_rec.SUB_IMPL_NON_IDC_INT_RATE,
7600 l_klev_rec.SUB_PRE_TAX_IRR,
7601 l_klev_rec.SUB_AFTER_TAX_IRR,
7602 --Bug# 2994971 :
7603 l_klev_rec.ITEM_INSURANCE_CATEGORY,
7604 --Bug# 3973640 : 11.5.10+ schema changes
7605 l_klev_rec.QTE_ID,
7606 l_klev_rec.FUNDING_DATE,
7607 l_klev_rec.STREAM_TYPE_SUBCLASS
7608 -- Bug#4508050 - smadhava - Added - Start
7609 , l_klev_rec.FEE_PURPOSE_CODE
7610 , l_klev_rec.DATE_FUNDING_EXPECTED
7611 , l_klev_rec.DATE_DELIVERY_EXPECTED
7612 , l_klev_rec.MANUFACTURER_NAME
7613 , l_klev_rec.MODEL_NUMBER
7614 , l_klev_rec.DOWN_PAYMENT_RECEIVER_CODE
7615 , l_klev_rec.CAPITALIZE_DOWN_PAYMENT_YN
7616 -- Bug#4508050 - smadhava - Added - End
7617 --Bug# 4631549
7618 ,l_klev_rec.Expected_Asset_Cost
7619 ;
7620 x_no_data_found := okl_k_lines_v_csr%NOTFOUND;
7621 CLOSE okl_k_lines_v_csr;
7622 RETURN(l_klev_rec);
7623 END get_klev_rec;
7624
7625 FUNCTION get_klev_rec (
7626 p_cle_id IN NUMBER
7627 ) RETURN klev_rec_type IS
7628 l_row_notfound BOOLEAN := TRUE;
7629 BEGIN
7630 RETURN(get_klev_rec(p_cle_id, l_row_notfound));
7631 END get_klev_rec;
7632 ---------------------------------------------------------------------------
7633 -- FUNCTION get_rec for: OKC_K_LINES_V
7634 ---------------------------------------------------------------------------
7635 FUNCTION get_clev_rec (
7636 p_cle_id IN NUMBER,
7637 x_no_data_found OUT NOCOPY BOOLEAN
7638 ) RETURN clev_rec_type IS
7639 CURSOR okc_clev_csr (p_id IN NUMBER) IS
7640 SELECT
7641 ID,
7642 OBJECT_VERSION_NUMBER,
7643 SFWT_FLAG,
7644 CHR_ID,
7645 CLE_ID,
7646 LSE_ID,
7647 LINE_NUMBER,
7648 STS_CODE,
7649 DISPLAY_SEQUENCE,
7650 TRN_CODE,
7651 DNZ_CHR_ID,
7652 COMMENTS,
7653 ITEM_DESCRIPTION,
7654 OKE_BOE_DESCRIPTION,
7655 HIDDEN_IND,
7656 PRICE_UNIT,
7657 PRICE_UNIT_PERCENT,
7658 PRICE_NEGOTIATED,
7659 PRICE_NEGOTIATED_RENEWED,
7660 PRICE_LEVEL_IND,
7661 INVOICE_LINE_LEVEL_IND,
7662 DPAS_RATING,
7663 BLOCK23TEXT,
7664 EXCEPTION_YN,
7665 TEMPLATE_USED,
7666 DATE_TERMINATED,
7667 NAME,
7668 START_DATE,
7669 END_DATE,
7670 DATE_RENEWED,
7671 UPG_ORIG_SYSTEM_REF,
7672 UPG_ORIG_SYSTEM_REF_ID,
7673 ORIG_SYSTEM_SOURCE_CODE,
7674 ORIG_SYSTEM_ID1,
7675 ORIG_SYSTEM_REFERENCE1,
7676 ATTRIBUTE_CATEGORY,
7677 ATTRIBUTE1,
7678 ATTRIBUTE2,
7679 ATTRIBUTE3,
7680 ATTRIBUTE4,
7681 ATTRIBUTE5,
7682 ATTRIBUTE6,
7683 ATTRIBUTE7,
7684 ATTRIBUTE8,
7685 ATTRIBUTE9,
7686 ATTRIBUTE10,
7687 ATTRIBUTE11,
7688 ATTRIBUTE12,
7689 ATTRIBUTE13,
7690 ATTRIBUTE14,
7691 ATTRIBUTE15,
7692 CREATED_BY,
7693 CREATION_DATE,
7694 LAST_UPDATED_BY,
7695 LAST_UPDATE_DATE,
7696 PRICE_TYPE,
7697 CURRENCY_CODE,
7698 CURRENCY_CODE_RENEWED,
7699 LAST_UPDATE_LOGIN
7700 FROM Okc_K_Lines_V
7701 WHERE okc_k_lines_v.id = p_id;
7702 l_clev_rec clev_rec_type;
7703 BEGIN
7704 x_no_data_found := TRUE;
7705 -- Get current database values
7706 OPEN okc_clev_csr (p_cle_id);
7707 FETCH okc_clev_csr INTO
7708 l_clev_rec.ID,
7709 l_clev_rec.OBJECT_VERSION_NUMBER,
7710 l_clev_rec.SFWT_FLAG,
7711 l_clev_rec.CHR_ID,
7712 l_clev_rec.CLE_ID,
7713 l_clev_rec.LSE_ID,
7714 l_clev_rec.LINE_NUMBER,
7715 l_clev_rec.STS_CODE,
7716 l_clev_rec.DISPLAY_SEQUENCE,
7717 l_clev_rec.TRN_CODE,
7718 l_clev_rec.DNZ_CHR_ID,
7719 l_clev_rec.COMMENTS,
7720 l_clev_rec.ITEM_DESCRIPTION,
7721 l_clev_rec.OKE_BOE_DESCRIPTION,
7722 l_clev_rec.HIDDEN_IND,
7723 l_clev_rec.PRICE_UNIT,
7724 l_clev_rec.PRICE_UNIT_PERCENT,
7725 l_clev_rec.PRICE_NEGOTIATED,
7726 l_clev_rec.PRICE_NEGOTIATED_RENEWED,
7727 l_clev_rec.PRICE_LEVEL_IND,
7728 l_clev_rec.INVOICE_LINE_LEVEL_IND,
7729 l_clev_rec.DPAS_RATING,
7730 l_clev_rec.BLOCK23TEXT,
7731 l_clev_rec.EXCEPTION_YN,
7732 l_clev_rec.TEMPLATE_USED,
7733 l_clev_rec.DATE_TERMINATED,
7734 l_clev_rec.NAME,
7735 l_clev_rec.START_DATE,
7736 l_clev_rec.END_DATE,
7737 l_clev_rec.DATE_RENEWED,
7738 l_clev_rec.UPG_ORIG_SYSTEM_REF,
7739 l_clev_rec.UPG_ORIG_SYSTEM_REF_ID,
7740 l_clev_rec.ORIG_SYSTEM_SOURCE_CODE,
7741 l_clev_rec.ORIG_SYSTEM_ID1,
7742 l_clev_rec.ORIG_SYSTEM_REFERENCE1,
7743 l_clev_rec.ATTRIBUTE_CATEGORY,
7744 l_clev_rec.ATTRIBUTE1,
7745 l_clev_rec.ATTRIBUTE2,
7746 l_clev_rec.ATTRIBUTE3,
7747 l_clev_rec.ATTRIBUTE4,
7748 l_clev_rec.ATTRIBUTE5,
7749 l_clev_rec.ATTRIBUTE6,
7750 l_clev_rec.ATTRIBUTE7,
7751 l_clev_rec.ATTRIBUTE8,
7752 l_clev_rec.ATTRIBUTE9,
7753 l_clev_rec.ATTRIBUTE10,
7754 l_clev_rec.ATTRIBUTE11,
7755 l_clev_rec.ATTRIBUTE12,
7756 l_clev_rec.ATTRIBUTE13,
7757 l_clev_rec.ATTRIBUTE14,
7758 l_clev_rec.ATTRIBUTE15,
7759 l_clev_rec.CREATED_BY,
7760 l_clev_rec.CREATION_DATE,
7761 l_clev_rec.LAST_UPDATED_BY,
7762 l_clev_rec.LAST_UPDATE_DATE,
7763 l_clev_rec.PRICE_TYPE,
7764 l_clev_rec.CURRENCY_CODE,
7765 l_clev_rec.CURRENCY_CODE_RENEWED,
7766 l_clev_rec.LAST_UPDATE_LOGIN;
7767 x_no_data_found := okc_clev_csr%NOTFOUND;
7768 CLOSE okc_clev_csr;
7769 RETURN(l_clev_rec);
7770 END get_clev_rec;
7771
7772 FUNCTION get_clev_rec (
7773 p_cle_id IN NUMBER
7774 ) RETURN clev_rec_type IS
7775 l_row_notfound BOOLEAN := TRUE;
7776 BEGIN
7777 RETURN(get_clev_rec(p_cle_id, l_row_notfound));
7778 END get_clev_rec;
7779 --Bug #2648280 Begin
7780 --------------------------------------------------------------------------------
7781 -- Procedure to split streams : will be called after split asset processing
7782 -- Bug #2648280 - During the split asset process streams were not getting split
7783 -- for the financial asset lines getting split. Splitting of streams being done
7784 -- in this procedure
7785 -- Bug # 2723498 : 11.5.9 Enhancement Multi-GAAP support . Split reporting streams
7786 --------------------------------------------------------------------------------
7787 PROCEDURE split_streams(p_api_version IN NUMBER,
7788 p_init_msg_list IN VARCHAR2,
7789 x_return_status OUT NOCOPY VARCHAR2,
7790 x_msg_count OUT NOCOPY NUMBER,
7791 x_msg_data OUT NOCOPY VARCHAR2,
7792 p_txl_id IN NUMBER) AS
7793
7794 l_api_name CONSTANT VARCHAR2(256) := 'SPLIT_STREAMS';
7795 l_api_version CONSTANT NUMBER := 1.0;
7796 l_return_status VARCHAR2(1) := OKL_API.G_RET_STS_SUCCESS;
7797
7798
7799 l_stmv_rec Okl_Streams_pub.stmv_rec_type;
7800 l_selv_tbl Okl_Streams_pub.selv_tbl_type;
7801 x_stmv_rec Okl_Streams_pub.stmv_rec_type;
7802 x_selv_tbl Okl_Streams_pub.selv_tbl_type;
7803
7804 --Cursor to fetch split child records (for split asset as well as split asset into components)
7805 CURSOR l_split_trx_csr1(p_trxline_id IN NUMBER) IS
7806 SELECT txd.split_percent,
7807 txl.kle_id,
7808 txd.target_kle_id,
7809 cle.cle_id cle_id,
7810 target_cle.cle_id target_cle_id,
7811 txd.quantity,
7812 txl.current_units
7813 FROM okl_txd_assets_b txd,
7814 okl_txl_Assets_b txl,
7815 okc_k_lines_b cle,
7816 okc_k_lines_b target_cle
7817 WHERE txl.tal_type = 'ALI'
7818 AND txd.tal_id = txl.id
7819 AND txl.id = p_trxline_id
7820 AND txl.kle_id <> txd.target_kle_id
7821 AND cle.id = txl.kle_id
7822 AND target_cle.id = txd.target_kle_id
7823 --Bug# 3502142
7824 ORDER BY NVL(txd.split_percent,-1);
7825
7826 --Bug# 3502142
7827 subtype l_split_trx_rec is l_split_trx_csr1%ROWTYPE;
7828 type l_split_trx_tbl is table of l_split_trx_rec INDEX BY BINARY_INTEGER;
7829 l_split_trx_tbl1 l_split_trx_tbl;
7830
7831 --Cursor to fetch split parent record for Split Asset (Not split Asset into components)
7832 CURSOR l_split_trx_csr2(p_trxline_id IN NUMBER) IS
7833 SELECT txd.split_percent,
7834 txl.kle_id,
7835 txd.target_kle_id,
7836 cle.cle_id cle_id,
7837 target_cle.cle_id target_cle_id,
7838 txd.quantity,
7839 txl.current_units
7840 FROM okl_txd_assets_b txd,
7841 okl_txl_Assets_b txl,
7842 okc_k_lines_b cle,
7843 okc_k_lines_b target_cle
7844 WHERE txl.tal_type = 'ALI'
7845 AND txd.tal_id = txl.id
7846 AND txl.id = p_trxline_id
7847 AND txl.kle_id = txd.target_kle_id
7848 AND cle.id = txl.kle_id
7849 AND target_cle.id = txd.target_kle_id;
7850
7851
7852
7853 l_split_trx_rec1 l_split_trx_csr1%ROWTYPE;
7854 l_split_trx_rec2 l_split_trx_csr2%ROWTYPE;
7855
7856 l_kle_id NUMBER;
7857 l_split_factor NUMBER;
7858
7859 --Bug# 3066375:
7860 --Cursor to find any linked asset lines
7861 CURSOR l_lnk_asst_csr1 (p_cle_id IN NUMBER, p_target_cle_id IN NUMBER) IS
7862 SELECT lnk_cle.id,
7863 lnk_target_cle.id,
7864 --Bug 3502142
7865 lnk_target_cle.cle_id
7866 FROM okc_k_lines_b lnk_cle,
7867 okc_k_items lnk_cim,
7868 okc_line_styles_b lnk_lse,
7869 okc_k_lines_b lnk_target_cle,
7870 okc_k_items lnk_target_cim,
7871 okc_line_styles_b lnk_target_lse
7872 WHERE lnk_cim.object1_id1 = TO_CHAR(p_cle_id)
7873 AND lnk_cim.object1_id2 = '#'
7874 AND lnk_cim.jtot_object1_code = 'OKX_COVASST'
7875 AND lnk_cle.id = lnk_cim.cle_id
7876 AND lnk_cle.dnz_chr_id = lnk_cim.dnz_chr_id
7877 AND lnk_cle.lse_id = lnk_lse.id
7878 AND lnk_lse.lty_code IN ('LINK_FEE_ASSET','LINK_SERV_ASSET','LINK_USAGE_ASSET')
7879 AND lnk_target_cim.object1_id1 = TO_CHAR(p_target_cle_id)
7880 AND lnk_target_cim.object1_id2 = '#'
7881 AND lnk_target_cim.jtot_object1_code = 'OKX_COVASST'
7882 AND lnk_target_cle.id = lnk_target_cim.cle_id
7883 AND lnk_target_cle.dnz_chr_id = lnk_target_cim.dnz_chr_id
7884 AND lnk_target_cle.lse_id = lnk_target_lse.id
7885 AND lnk_target_lse.lty_code IN ('LINK_FEE_ASSET','LINK_SERV_ASSET','LINK_USAGE_ASSET')
7886 AND lnk_cle.cle_id = lnk_target_cle.cle_id
7887 AND lnk_cle.id <> lnk_target_cle.id
7888 AND lnk_cle.dnz_chr_id = lnk_target_cle.dnz_chr_id;
7889
7890 CURSOR l_lnk_asst_csr2 (p_cle_id IN NUMBER, p_target_cle_id IN NUMBER) IS
7891 SELECT lnk_cle.id,
7892 lnk_target_cle.id,
7893 --Bug 3502142
7894 lnk_target_cle.cle_id
7895 FROM okc_k_lines_b lnk_cle,
7896 okc_k_items lnk_cim,
7897 okc_line_styles_b lnk_lse,
7898 okc_k_lines_b lnk_target_cle,
7899 okc_k_items lnk_target_cim,
7900 okc_line_styles_b lnk_target_lse
7901 WHERE lnk_cim.object1_id1 = TO_CHAR(p_cle_id)
7902 AND lnk_cim.object1_id2 = '#'
7903 AND lnk_cim.jtot_object1_code = 'OKX_COVASST'
7904 AND lnk_cle.id = lnk_cim.cle_id
7905 AND lnk_cle.dnz_chr_id = lnk_cim.dnz_chr_id
7906 AND lnk_cle.lse_id = lnk_lse.id
7907 AND lnk_lse.lty_code IN ('LINK_FEE_ASSET','LINK_SERV_ASSET','LINK_USAGE_ASSET')
7908 AND lnk_target_cim.object1_id1 = TO_CHAR(p_target_cle_id)
7909 AND lnk_target_cim.object1_id2 = '#'
7910 AND lnk_target_cim.jtot_object1_code = 'OKX_COVASST'
7911 AND lnk_target_cle.id = lnk_target_cim.cle_id
7912 AND lnk_target_cle.dnz_chr_id = lnk_target_cim.dnz_chr_id
7913 AND lnk_target_cle.lse_id = lnk_target_lse.id
7914 AND lnk_target_lse.lty_code IN ('LINK_FEE_ASSET','LINK_SERV_ASSET','LINK_USAGE_ASSET')
7915 AND lnk_cle.cle_id = lnk_target_cle.cle_id
7916 AND lnk_cle.id = lnk_target_cle.id
7917 AND lnk_cle.dnz_chr_id = lnk_target_cle.dnz_chr_id;
7918
7919
7920 l_lnk_cle_id okc_k_lines_b.id%TYPE;
7921 l_lnk_target_cle_id okc_k_lines_b.id%TYPE;
7922
7923 -- Bug# 3502142
7924 l_lnk_top_cle_id okc_k_lines_b.id%TYPE;
7925 --Bug# 6344223
7926 l_highest_split_comp_amt VARCHAR2(30);
7927 l_count NUMBER;
7928
7929 --------------------------------------------------------------------------------
7930 -- Local procedure to do split streams processing
7931 -- IN parameters - p_kle_id (child top line)
7932 -- - p_parent_kle_id (parent top line)
7933 -- - p_split_factor (split factor)
7934 --------------------------------------------------------------------------------
7935 PROCEDURE Process_Split_Streams(p_api_version IN NUMBER,
7936 p_init_msg_list IN VARCHAR2,
7937 x_return_status OUT NOCOPY VARCHAR2,
7938 x_msg_count OUT NOCOPY NUMBER,
7939 x_msg_data OUT NOCOPY VARCHAR2,
7940 p_kle_id IN NUMBER,
7941 p_split_factor IN NUMBER,
7942 p_parent_kle_id IN NUMBER,
7943 p_txl_id IN NUMBER,
7944 --Bug# 6344223
7945 p_highest_split_comp_amt IN VARCHAR2 DEFAULT 'N') IS
7946
7947 l_stmv_rec Okl_Streams_pub.stmv_rec_type;
7948 l_selv_tbl Okl_Streams_pub.selv_tbl_type;
7949 l_stmv_rec_hist Okl_Streams_pub.stmv_rec_type;
7950 l_selv_tbl_hist Okl_Streams_pub.selv_tbl_type;
7951 x_stmv_rec Okl_Streams_pub.stmv_rec_type;
7952 x_selv_tbl Okl_Streams_pub.selv_tbl_type;
7953
7954
7955 CURSOR l_strm_csr ( kleId NUMBER, status VARCHAR2) IS
7956 SELECT str.Id,
7957 str.transaction_number,
7958 str.sgn_code SGN_CODE,
7959 str.khr_id,
7960 str.sty_id,
7961 str.say_code,
7962 str.active_yn,
7963 str.kle_id,
7964 --Bug# 3502142
7965 str.purpose_code,
7966 str.comments,
7967 str.date_current,
7968 -- Bug# 4775555
7969 sty.stream_type_purpose,
7970 --Bug# 6344223
7971 str.link_hist_stream_id
7972 FROM okl_streams str,
7973 okl_strm_type_b sty
7974 WHERE
7975 str.kle_id = kleId
7976 AND str.say_code = status
7977 AND str.sty_id = sty.id;
7978
7979 --Bug# 3502142
7980 CURSOR l_strmele_csr( kleId NUMBER, styId NUMBER, strId NUMBER,
7981 purposeCode VARCHAR2, activeYn VARCHAR2) IS
7982 SELECT ele.id,
7983 ele.DATE_BILLED,
7984 ele.STREAM_ELEMENT_DATE,
7985 ele.AMOUNT,
7986 ele.ACCRUED_YN,
7987 ele.comments,
7988 str.transaction_number,
7989 str.sgn_code SGN_CODE,
7990 ele.stm_id STM_ID,
7991 ele.se_line_number SE_LINE_NUMBER
7992 FROM okl_strm_elements ele,
7993 okl_streams str
7994 WHERE ele.stm_id = str.id
7995 AND str.id = strId
7996 AND str.kle_id = kleId
7997 AND str.sty_id = styId
7998 AND UPPER(str.say_code) = 'CURR'
7999 AND UPPER(str.active_yn) = activeYn
8000 AND NVL(str.purpose_code,'ORIG') = purposeCode
8001 ORDER BY 3;
8002
8003 l_strms_rec l_strm_csr%ROWTYPE;
8004 l_strmele_rec l_strmele_csr%ROWTYPE;
8005 i NUMBER;
8006 l_kle_id NUMBER;
8007
8008 --cursor to fetch transaction number
8009 CURSOR l_sifseq_csr IS
8010 SELECT okl_sif_seq.NEXTVAL
8011 FROM dual;
8012
8013 -- Bug# 3502142: start
8014 CURSOR curr_code_csr(p_kle_id IN NUMBER) IS
8015 SELECT currency_code
8016 FROM okc_k_lines_b
8017 WHERE id = p_kle_id;
8018
8019 l_currency_code OKC_K_LINES_B.currency_code%type;
8020
8021 l_active_yn OKL_STREAMS.ACTIVE_YN%TYPE;
8022
8023 --Bug# 4775555
8024 l_stmv_rec_temp Okl_Streams_pub.stmv_rec_type;
8025
8026 --Bug# 6344223
8027 CURSOR l_txd_csr(p_trxline_id IN NUMBER) IS
8028 SELECT txd.id,
8029 txd.split_percent,
8030 txl.kle_id,
8031 txd.target_kle_id,
8032 cle.cle_id cle_id,
8033 target_cle.cle_id target_cle_id,
8034 txd.quantity,
8035 txl.current_units
8036 FROM okl_txd_assets_b txd,
8037 okl_txl_Assets_b txl,
8038 okc_k_lines_b cle,
8039 okc_k_lines_b target_cle
8040 WHERE txl.tal_type = 'ALI'
8041 AND txd.tal_id = txl.id
8042 AND txl.id = p_trxline_id
8043 AND txl.kle_id <> txd.target_kle_id
8044 AND cle.id = txl.kle_id
8045 AND target_cle.id = txd.target_kle_id;
8046
8047
8048 l_split_pymt NUMBER;
8049 l_split_pymt_sum NUMBER;
8050 l_child_split_factor NUMBER;
8051 l_rounded_amount NUMBER;
8052 l_child_amount NUMBER;
8053
8054 BEGIN
8055 x_return_status := OKL_API.G_RET_STS_SUCCESS;
8056
8057 IF ( p_parent_kle_id = p_kle_id ) THEN
8058 l_kle_id := p_kle_id;
8059 ELSE
8060 l_kle_id := p_parent_kle_id;
8061 END IF;
8062
8063 -- Bug# 3502142
8064 open curr_code_csr(p_kle_id => p_kle_id);
8065 fetch curr_code_csr into l_currency_code;
8066 close curr_code_csr;
8067
8068 FOR l_strms_rec IN l_strm_csr( l_kle_id, 'CURR' )
8069 LOOP
8070
8071 -- Bug# 4775555
8072 -- Disbursement Basis streams should only be Historized here
8073 -- They will be recreated later by the call to
8074 -- okl_stream_generator_pvt.create_disb_streams
8075 IF (l_strms_rec.stream_type_purpose
8076 IN ('INVESTOR_RENT_DISB_BASIS',
8077 'INVESTOR_RESIDUAL_DISB_BASIS','INVESTOR_PRINCIPAL_DISB_BASIS','INVESTOR_INTEREST_DISB_BASIS')) THEN
8078
8079 IF (p_parent_kle_id = p_kle_id) THEN
8080
8081 l_stmv_rec_hist := l_stmv_rec_temp;
8082 l_stmv_rec_hist.id := l_strms_rec.id;
8083 l_stmv_rec_hist.kle_id := l_kle_id;
8084 l_stmv_rec_hist.say_code := 'HIST';
8085 l_stmv_rec_hist.active_yn := 'N';
8086 l_stmv_rec_hist.date_history := SYSDATE;
8087 --Bug# 6344223
8088 l_stmv_rec_hist.link_hist_stream_id := l_strms_rec.link_hist_stream_id;
8089 Okl_Streams_Pub.update_streams(
8090 p_api_version => l_api_version
8091 ,p_init_msg_list => p_init_msg_list
8092 ,x_return_status => x_return_status
8093 ,x_msg_count => x_msg_count
8094 ,x_msg_data => x_msg_data
8095 ,p_stmv_rec => l_stmv_rec_hist
8096 ,x_stmv_rec => x_stmv_rec);
8097
8098 IF (x_return_status <> OKL_API.G_RET_STS_SUCCESS) THEN
8099 RAISE G_EXCEPTION_HALT_VALIDATION;
8100 END IF;
8101
8102 END IF;
8103
8104 ELSE
8105
8106 l_stmv_rec.sty_id := l_strms_rec.sty_id;
8107 --l_stmv_rec.khr_id := p_chr_id;
8108 l_stmv_rec.khr_id := l_strms_rec.khr_id;
8109
8110 IF ((p_parent_kle_id = p_kle_id ) AND (p_split_factor = 0)) THEN
8111 l_stmv_rec.say_code := 'HIST';
8112 l_stmv_rec.active_yn := 'N';
8113 l_stmv_rec.date_history := SYSDATE;
8114 --Bug# 6344223
8115 l_stmv_rec.link_hist_stream_id := l_strms_rec.link_hist_stream_id;
8116 ELSE
8117 l_stmv_rec.say_code := 'CURR';
8118 --Bug# 6344223
8119 l_stmv_rec.link_hist_stream_id := l_strms_rec.id;
8120 --Bug# 3502142
8121 --l_stmv_rec.active_yn := 'Y';
8122 --l_stmv_rec.date_current := SYSDATE;
8123 END IF;
8124 --Bug# 3502142
8125 --l_stmv_rec.active_yn := 'Y';
8126 --l_stmv_rec.date_current := SYSDATE;
8127 l_stmv_rec.transaction_number := l_strms_rec.transaction_number;
8128 l_stmv_rec.sgn_code := l_strms_rec.sgn_code;
8129 --Bug# 3502142
8130 l_stmv_rec.purpose_code := l_strms_rec.purpose_code;
8131 l_stmv_rec.active_yn := l_strms_rec.active_yn;
8132 l_stmv_rec.comments := l_strms_rec.comments;
8133 l_stmv_rec.date_current := l_strms_rec.date_current;
8134
8135 i := 0;
8136 -- Bug# 3502142
8137
8138 if NVL(l_strms_rec.purpose_code,'ORIG') = 'ORIG' then
8139 l_active_yn := 'Y';
8140 elsif l_strms_rec.purpose_code = 'REPORT' then
8141 l_active_yn := 'N';
8142 end if;
8143
8144 FOR l_strmele_rec IN l_strmele_csr(l_kle_id, l_strms_rec.sty_id, l_strms_rec.id,
8145 NVL(l_strms_rec.purpose_code,'ORIG'), l_active_yn)
8146 LOOP
8147 i := i + 1;
8148 l_selv_tbl(i).accrued_yn := l_strmele_rec.accrued_yn;
8149 l_selv_tbl(i).stream_element_date := l_strmele_rec.stream_element_date;
8150 l_selv_tbl(i).date_billed := l_strmele_rec.date_billed;
8151 l_selv_tbl(i).se_line_number := l_strmele_rec.SE_LINE_NUMBER;
8152 l_selv_tbl(i).comments := l_strmele_rec.comments;
8153
8154 IF p_split_factor <> 0 THEN
8155 --for parent line adjust the stream element amount
8156 l_split_pymt_sum := 0;
8157
8158 --get the sum of stream element amount for child asset if
8159 -- calculating cost for the parent line or for the
8160 -- child line with highest split percent
8161 IF (p_parent_kle_id = p_kle_id ) OR (p_highest_split_comp_amt='Y') THEN
8162
8163 FOR l_txd_rec in l_txd_csr(p_txl_id)
8164 LOOP
8165 IF NVL(l_txd_rec.split_percent,0) IN (0,OKL_API.G_MISS_NUM) THEN
8166 l_child_split_factor := l_txd_rec.quantity/l_txd_rec.current_units;
8167 ELSE
8168 l_child_split_factor := l_txd_rec.split_percent/100;
8169 END IF;
8170 l_split_pymt := l_strmele_rec.amount * l_child_split_factor;
8171 okl_accounting_util.round_amount(
8172 p_api_version => p_api_version,
8173 p_init_msg_list => p_init_msg_list,
8174 x_return_status => x_return_status,
8175 x_msg_count => x_msg_count,
8176 x_msg_data => x_msg_data,
8177 p_amount => l_split_pymt,
8178 p_currency_code => l_currency_code,
8179 p_round_option => 'STM',
8180 x_rounded_amount => l_rounded_amount
8181 );
8182 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
8183 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
8184 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
8185 RAISE OKL_API.G_EXCEPTION_ERROR;
8186 END IF;
8187 l_split_pymt_sum := l_split_pymt_sum + l_rounded_amount;
8188 END LOOP;
8189 END IF;
8190
8191 IF (p_parent_kle_id = p_kle_id ) THEN
8192 --for split by unit--
8193 l_selv_tbl(i).amount :=l_strmele_rec.amount - l_split_pymt_sum;
8194
8195 ELSE
8196 --claculate the amount for child line
8197 l_child_amount :=l_strmele_rec.amount * p_split_factor;
8198 okl_accounting_util.round_amount(
8199 p_api_version => p_api_version,
8200 p_init_msg_list => p_init_msg_list,
8201 x_return_status => x_return_status,
8202 x_msg_count => x_msg_count,
8203 x_msg_data => x_msg_data,
8204 p_amount => l_child_amount,
8205 p_currency_code => l_currency_code,
8206 p_round_option => 'STM',
8207 x_rounded_amount => l_rounded_amount
8208 );
8209 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
8210 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
8211 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
8212 RAISE OKL_API.G_EXCEPTION_ERROR;
8213 END IF;
8214 l_child_amount :=l_rounded_amount;
8215 --adjust the amount for highest asset percent if split by component
8216 if p_highest_split_comp_amt='Y' THEN
8217 l_selv_tbl(i).amount :=l_child_amount+ l_strmele_rec.amount - l_split_pymt_sum;
8218 else
8219 -- no adjustment required
8220 l_selv_tbl(i).amount :=l_child_amount;
8221 END IF;
8222
8223 END IF; --end if for parent line check
8224 --dbms_output.put_line('l_selv_tbl(i).amount '||l_selv_tbl(i).amount );
8225 END IF; --p_split_factor
8226 -----------------------------------------------------------------
8227 --If (p_parent_kle_id = p_kle_id ) then
8228 --l_selv_tbl(i).stm_id := l_strms_rec.id;
8229 --l_selv_tbl(i).id := l_strmele_rec.id;
8230 --End If;
8231 -----------------------------------------------------------------
8232 l_selv_tbl_hist(i) := l_selv_tbl(i);
8233 l_selv_tbl_hist(i).amount := l_strmele_rec.amount;
8234 l_selv_tbl_hist(i).stm_id := l_strms_rec.id;
8235 l_selv_tbl_hist(i).id := l_strmele_rec.id;
8236
8237 END LOOP;
8238
8239 IF (i <> 0) THEN
8240 IF (p_parent_kle_id = p_kle_id ) THEN
8241 ------------------------------------------------------------------------
8242 --Bug# : historize old streams and recreate with new values for old asset
8243 ------------------------------------------------------------------------
8244 l_stmv_rec_hist := l_stmv_rec;
8245 l_stmv_rec_hist.id := l_strms_rec.id;
8246 l_stmv_rec_hist.kle_id := l_kle_id;
8247 l_stmv_rec_hist.say_code := 'HIST';
8248 l_stmv_rec_hist.active_yn := 'N';
8249 l_stmv_rec_hist.date_history := SYSDATE;
8250 --Bug# 6344223
8251 l_stmv_rec_hist.link_hist_stream_id := l_strms_rec.link_hist_stream_id;
8252 Okl_Streams_Pub.update_streams(
8253 p_api_version => l_api_version
8254 ,p_init_msg_list => p_init_msg_list
8255 ,x_return_status => x_return_status
8256 ,x_msg_count => x_msg_count
8257 ,x_msg_data => x_msg_data
8258 ,p_stmv_rec => l_stmv_rec_hist
8259 ,p_selv_tbl => l_selv_tbl_hist
8260 ,x_stmv_rec => x_stmv_rec
8261 ,x_selv_tbl => x_selv_tbl);
8262
8263 IF (x_return_status <> OKL_API.G_RET_STS_SUCCESS) THEN
8264 RAISE G_EXCEPTION_HALT_VALIDATION;
8265 END IF;
8266
8267 IF (p_split_factor <> 0 ) THEN
8268 l_stmv_rec.kle_id := l_kle_id;
8269 l_stmv_rec.sgn_code := 'MANL';
8270 l_stmv_rec.comments := 'Generated manually during split asset from parent transaction number '||TO_CHAR(l_stmv_rec.transaction_number);
8271 OPEN l_sifseq_csr;
8272 FETCH l_sifseq_csr INTO l_stmv_rec.transaction_number;
8273 CLOSE l_sifseq_csr;
8274 --Bug# 3502142
8275 l_stmv_rec.date_current := SYSDATE;
8276
8277 Okl_Streams_Pub.create_streams(
8278 p_api_version => l_api_version
8279 ,p_init_msg_list => p_init_msg_list
8280 ,x_return_status => x_return_status
8281 ,x_msg_count => x_msg_count
8282 ,x_msg_data => x_msg_data
8283 ,p_stmv_rec => l_stmv_rec
8284 ,p_selv_tbl => l_selv_tbl
8285 ,x_stmv_rec => x_stmv_rec
8286 ,x_selv_tbl => x_selv_tbl);
8287
8288 IF (x_return_status <> OKL_API.G_RET_STS_SUCCESS) THEN
8289 RAISE G_EXCEPTION_HALT_VALIDATION;
8290 END IF;
8291 END IF;
8292
8293 ELSE
8294
8295 l_stmv_rec.kle_id := p_kle_id;
8296 l_stmv_rec.sgn_code := 'MANL';
8297 --Bug# 3502142
8298 l_stmv_rec.comments := 'Generated manually during split asset from parent transaction number '||TO_CHAR(l_stmv_rec.transaction_number);
8299 OPEN l_sifseq_csr;
8300 FETCH l_sifseq_csr INTO l_stmv_rec.transaction_number;
8301 CLOSE l_sifseq_csr;
8302 --Bug# 3502142
8303 l_stmv_rec.date_current := SYSDATE;
8304
8305 Okl_Streams_Pub.create_streams(
8306 p_api_version => l_api_version
8307 ,p_init_msg_list => p_init_msg_list
8308 ,x_return_status => x_return_status
8309 ,x_msg_count => x_msg_count
8310 ,x_msg_data => x_msg_data
8311 ,p_stmv_rec => l_stmv_rec
8312 ,p_selv_tbl => l_selv_tbl
8313 ,x_stmv_rec => x_stmv_rec
8314 ,x_selv_tbl => x_selv_tbl);
8315
8316 IF (x_return_status <> OKL_API.G_RET_STS_SUCCESS) THEN
8317 RAISE G_EXCEPTION_HALT_VALIDATION;
8318 END IF;
8319
8320
8321 END IF;
8322 ELSE
8323 NULL;
8324 END IF;
8325
8326 l_selv_tbl.DELETE(1, l_selv_tbl.LAST);
8327 l_selv_tbl_hist.DELETE(1, l_selv_tbl.LAST);
8328
8329 END IF;
8330 END LOOP;
8331
8332 EXCEPTION
8333 WHEN G_EXCEPTION_HALT_VALIDATION THEN
8334 IF l_strm_csr%ISOPEN THEN
8335 CLOSE l_strm_csr;
8336 END IF;
8337 IF l_strmele_csr%ISOPEN THEN
8338 CLOSE l_strmele_csr;
8339 END IF;
8340 NULL;
8341 WHEN OTHERS THEN
8342 IF l_strm_csr%ISOPEN THEN
8343 CLOSE l_strm_csr;
8344 END IF;
8345 IF l_strmele_csr%ISOPEN THEN
8346 CLOSE l_strmele_csr;
8347 END IF;
8348 x_return_status := OKL_API.G_RET_STS_ERROR;
8349
8350 END process_split_streams;
8351 /*begin main body*/
8352 BEGIN
8353
8354 x_return_status := l_return_status;
8355
8356 --open cursor only for parent records as should not
8357 --update the parent streams till all child lines are fixed.
8358 --Bug# 3502142
8359 l_count := 0;
8360 --Bug# 6344223
8361 l_highest_split_comp_amt := 'N';
8362
8363 FOR l_split_trx_rec1 IN l_split_trx_csr1 (p_trxLine_id => p_txl_id) LOOP
8364 l_count := l_count + 1;
8365 l_split_trx_tbl1(l_count) := l_split_trx_rec1;
8366 END LOOP;
8367
8368 IF (l_count > 0) THEN
8369 FOR i IN l_split_trx_tbl1.FIRST .. l_split_trx_tbl1.LAST
8370 LOOP
8371
8372 l_split_trx_rec1 := l_split_trx_tbl1(i);
8373
8374 IF NVL(l_split_trx_rec1.split_percent,0) NOT IN (0,OKL_API.G_MISS_NUM) THEN
8375 l_split_factor := (l_split_trx_rec1.split_percent/100);
8376
8377 --Bug# 3502142
8378 --Bug# 6344223
8379 IF i = l_split_trx_tbl1.LAST THEN
8380 l_highest_split_comp_amt := 'Y';
8381 ELSE
8382 l_highest_split_comp_amt := 'N';
8383 END IF;
8384 ELSE
8385 --1. By comparing the cost and quantities on txlv record and txdv record find the split factor
8386 l_split_factor := l_split_trx_rec1.quantity/l_split_trx_rec1.current_units;
8387 END IF;
8388 --split streams for split child lines
8389 Process_split_streams(p_api_version => p_api_version,
8390 p_init_msg_list => p_init_msg_list,
8391 x_return_status => x_return_status,
8392 x_msg_count => x_msg_count,
8393 x_msg_data => x_msg_data,
8394 p_kle_id => l_split_trx_rec1.target_cle_id,
8395 p_split_factor => l_split_factor,
8396 p_parent_kle_id => l_split_trx_rec1.cle_id,
8397 --Bug# 3502142
8398 p_txl_id => p_txl_id,
8399 --Bug# 6344223
8400 p_highest_split_comp_amt => l_highest_split_comp_amt);
8401
8402
8403 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
8404 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
8405 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
8406 RAISE OKL_API.G_EXCEPTION_ERROR;
8407 END IF;
8408
8409 --Bug# 3066375:: split streams attached to linked asset lines
8410 OPEN l_lnk_asst_csr1(p_cle_id => l_split_trx_rec1.cle_id, p_target_cle_id => l_split_trx_rec1.target_cle_id);
8411 LOOP
8412 --Bug# 3502142
8413 FETCH l_lnk_asst_csr1 INTO l_lnk_cle_id, l_lnk_target_cle_id,l_lnk_top_cle_id;
8414 EXIT WHEN l_lnk_asst_csr1%NOTFOUND;
8415 Process_split_streams(p_api_version => p_api_version,
8416 p_init_msg_list => p_init_msg_list,
8417 x_return_status => x_return_status,
8418 x_msg_count => x_msg_count,
8419 x_msg_data => x_msg_data,
8420 p_kle_id => l_lnk_target_cle_id,
8421 p_split_factor => l_split_factor,
8422 p_parent_kle_id => l_lnk_cle_id,
8423 --Bug# 3502142
8424 p_txl_id => p_txl_id,
8425 --Bug# 6344223
8426 p_highest_split_comp_amt => l_highest_split_comp_amt);
8427
8428
8429 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
8430 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
8431 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
8432 RAISE OKL_API.G_EXCEPTION_ERROR;
8433 END IF;
8434 END LOOP;
8435 CLOSE l_lnk_asst_csr1;
8436
8437 END LOOP;
8438 END IF;
8439
8440 IF NVL(l_split_trx_rec1.split_percent,0) NOT IN (0,OKL_API.G_MISS_NUM) THEN
8441 --split asset component : Process_split_streams to historize for parent line
8442 Process_split_streams(p_api_version => p_api_version,
8443 p_init_msg_list => p_init_msg_list,
8444 x_return_status => x_return_status,
8445 x_msg_count => x_msg_count,
8446 x_msg_data => x_msg_data,
8447 p_kle_id => l_split_trx_rec1.cle_id,
8448 p_split_factor => 0,
8449 p_parent_kle_id => l_split_trx_rec1.cle_id,
8450 --Bug# 3502142
8451 p_txl_id => p_txl_id,
8452 --Bug# 6344223
8453 p_highest_split_comp_amt => 'N');
8454
8455 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
8456 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
8457 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
8458 RAISE OKL_API.G_EXCEPTION_ERROR;
8459 END IF;
8460
8461 --Bug# 3066375: split streams attached to linked asset lines
8462 OPEN l_lnk_asst_csr1(p_cle_id => l_split_trx_rec1.cle_id, p_target_cle_id => l_split_trx_rec1.target_cle_id);
8463 LOOP
8464 --Bug# 3502142
8465 FETCH l_lnk_asst_csr1 INTO l_lnk_cle_id, l_lnk_target_cle_id, l_lnk_top_cle_id;
8466 EXIT WHEN l_lnk_asst_csr1%NOTFOUND;
8467 Process_split_streams(p_api_version => p_api_version,
8468 p_init_msg_list => p_init_msg_list,
8469 x_return_status => x_return_status,
8470 x_msg_count => x_msg_count,
8471 x_msg_data => x_msg_data,
8472 p_kle_id => l_lnk_cle_id,
8473 p_split_factor => 0,
8474 p_parent_kle_id => l_lnk_cle_id,
8475 --Bug# 3502142
8476 p_txl_id => p_txl_id,
8477 --Bug# 6344223
8478 p_highest_split_comp_amt => 'N');
8479
8480
8481 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
8482 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
8483 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
8484 RAISE OKL_API.G_EXCEPTION_ERROR;
8485 END IF;
8486 END LOOP;
8487 CLOSE l_lnk_asst_csr1;
8488
8489 ELSE
8490
8491 --split asset case : get percent for parent split
8492 --
8493 OPEN l_split_trx_csr2 (p_trxLine_id => p_txl_id);
8494 FETCH l_split_trx_csr2 INTO l_split_trx_rec2;
8495 IF l_split_trx_csr2%NOTFOUND THEN
8496 NULL;
8497 ELSE
8498 --split streams for split parent
8499 l_split_factor := (l_split_trx_rec2.quantity/l_split_trx_rec2.current_units);
8500
8501 Process_split_streams(p_api_version => p_api_version,
8502 p_init_msg_list => p_init_msg_list,
8503 x_return_status => x_return_status,
8504 x_msg_count => x_msg_count,
8505 x_msg_data => x_msg_data,
8506 p_kle_id => l_split_trx_rec2.target_cle_id,
8507 p_split_factor => l_split_factor,
8508 p_parent_kle_id => l_split_trx_rec2.cle_id,
8509 --Bug# 3502142
8510 p_txl_id => p_txl_id,
8511 --Bug# 6344223
8512 p_highest_split_comp_amt => 'N');
8513
8514
8515 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
8516 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
8517 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
8518 RAISE OKL_API.G_EXCEPTION_ERROR;
8519 END IF;
8520
8521 --Bug# 3066375: split streams attached to linked asset lines
8522 OPEN l_lnk_asst_csr2(p_cle_id => l_split_trx_rec2.cle_id, p_target_cle_id => l_split_trx_rec2.target_cle_id);
8523 LOOP
8524 --Bug# 3502142
8525 FETCH l_lnk_asst_csr2 INTO l_lnk_cle_id, l_lnk_target_cle_id,l_lnk_top_cle_id;
8526 EXIT WHEN l_lnk_asst_csr2%NOTFOUND;
8527 Process_split_streams(p_api_version => p_api_version,
8528 p_init_msg_list => p_init_msg_list,
8529 x_return_status => x_return_status,
8530 x_msg_count => x_msg_count,
8531 x_msg_data => x_msg_data,
8532 p_kle_id => l_lnk_target_cle_id,
8533 p_split_factor => l_split_factor,
8534 p_parent_kle_id => l_lnk_cle_id,
8535 --Bug# 3502142
8536 p_txl_id => p_txl_id,
8537 --Bug# 6344223
8538 p_highest_split_comp_amt => 'N');
8539
8540 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
8541 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
8542 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
8543 RAISE OKL_API.G_EXCEPTION_ERROR;
8544 END IF;
8545 END LOOP;
8546 CLOSE l_lnk_asst_csr2;
8547
8548 END IF;
8549 CLOSE l_split_trx_csr2;
8550
8551 NULL;
8552 END IF;
8553
8554 EXCEPTION
8555 WHEN OKL_API.G_EXCEPTION_ERROR THEN
8556
8557 IF l_split_trx_csr1%ISOPEN THEN
8558 CLOSE l_split_trx_csr1;
8559 END IF;
8560
8561 IF l_split_trx_csr2%ISOPEN THEN
8562 CLOSE l_split_trx_csr2;
8563 END IF;
8564
8565 WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
8566
8567 IF l_split_trx_csr1%ISOPEN THEN
8568 CLOSE l_split_trx_csr1;
8569 END IF;
8570
8571 IF l_split_trx_csr2%ISOPEN THEN
8572 CLOSE l_split_trx_csr2;
8573 END IF;
8574
8575 IF l_lnk_asst_csr1%ISOPEN THEN
8576 CLOSE l_lnk_asst_csr1;
8577 END IF;
8578
8579 IF l_lnk_asst_csr2%ISOPEN THEN
8580 CLOSE l_lnk_asst_csr2;
8581 END IF;
8582
8583 WHEN OTHERS THEN
8584
8585 IF l_split_trx_csr1%ISOPEN THEN
8586 CLOSE l_split_trx_csr1;
8587 END IF;
8588
8589 IF l_split_trx_csr2%ISOPEN THEN
8590 CLOSE l_split_trx_csr2;
8591 END IF;
8592
8593 IF l_lnk_asst_csr1%ISOPEN THEN
8594 CLOSE l_lnk_asst_csr1;
8595 END IF;
8596
8597 IF l_lnk_asst_csr2%ISOPEN THEN
8598 CLOSE l_lnk_asst_csr2;
8599 END IF;
8600
8601 x_return_status := OKL_API.G_RET_STS_UNEXP_ERROR;
8602 END Split_Streams;
8603 --Bug #2648280 End
8604
8605 ---------------
8606 --Bug# 2994971
8607 ---------------
8608 PROCEDURE populate_insurance_category(p_api_version IN NUMBER,
8609 p_init_msg_list IN VARCHAR2 DEFAULT OKL_API.G_FALSE,
8610 x_return_status OUT NOCOPY VARCHAR2,
8611 x_msg_count OUT NOCOPY NUMBER,
8612 x_msg_data OUT NOCOPY VARCHAR2,
8613 p_cle_id IN NUMBER,
8614 p_inv_item_id IN NUMBER,
8615 p_inv_org_id IN NUMBER) IS
8616
8617 l_api_name CONSTANT VARCHAR2(30) := 'POPULATE_INS_CATEGORY';
8618
8619 --cursor to get asset category
8620 CURSOR l_msi_csr(p_inv_item_id IN NUMBER,
8621 p_inv_org_id IN NUMBER) IS
8622 SELECT msi.asset_category_id
8623 FROM mtl_system_items msi
8624 WHERE msi.organization_id = p_inv_org_id
8625 AND msi.inventory_item_id = p_inv_item_id;
8626
8627 l_asset_category_id mtl_system_items.asset_category_id%TYPE DEFAULT NULL;
8628 l_clev_rec okl_okc_migration_pvt.clev_rec_type;
8629 l_klev_rec okl_contract_pub.klev_rec_type;
8630 lx_clev_rec okl_okc_migration_pvt.clev_rec_type;
8631 lx_klev_rec okl_contract_pub.klev_rec_type;
8632
8633
8634 BEGIN
8635
8636 x_return_status := OKL_API.G_RET_STS_SUCCESS;
8637 -- Call start_activity to create savepoint, check compatibility
8638 -- and initialize message list
8639 x_return_status := OKL_API.START_ACTIVITY (l_api_name
8640 ,p_init_msg_list
8641 ,'_PVT'
8642 ,x_return_status);
8643 -- Check if activity started successfully
8644 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
8645 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
8646 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
8647 RAISE OKL_API.G_EXCEPTION_ERROR;
8648 END IF;
8649
8650 --fetch asset category
8651 l_asset_category_id := NULL;
8652 OPEN l_msi_csr (p_inv_item_id => p_inv_item_id,
8653 p_inv_org_id => p_inv_org_id);
8654 FETCH l_msi_csr INTO l_asset_category_id;
8655 IF l_msi_csr%NOTFOUND THEN
8656 NULL;
8657 END IF;
8658 CLOSE l_msi_csr;
8659
8660
8661 l_clev_rec.id := p_cle_id;
8662 l_klev_rec.id := p_cle_id;
8663 l_klev_rec.item_insurance_category := l_asset_category_id;
8664
8665 okl_contract_pub.update_contract_line(
8666 p_api_version => p_api_version,
8667 p_init_msg_list => p_init_msg_list,
8668 x_return_status => x_return_status,
8669 x_msg_count => x_msg_count,
8670 x_msg_data => x_msg_data,
8671 p_clev_rec => l_clev_rec,
8672 p_klev_rec => l_klev_rec,
8673 x_clev_rec => lx_clev_rec,
8674 x_klev_rec => lx_klev_rec
8675 );
8676
8677 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
8678 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
8679 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
8680 RAISE OKL_API.G_EXCEPTION_ERROR;
8681 END IF;
8682
8683 OKL_API.END_ACTIVITY (x_msg_count,
8684 x_msg_data );
8685 EXCEPTION
8686 WHEN OKL_API.G_EXCEPTION_ERROR THEN
8687 IF l_msi_csr%ISOPEN THEN
8688 CLOSE l_msi_csr;
8689 END IF;
8690 x_return_status := OKL_API.HANDLE_EXCEPTIONS(
8691 l_api_name,
8692 G_PKG_NAME,
8693 'OKL_API.G_RET_STS_ERROR',
8694 x_msg_count,
8695 x_msg_data,
8696 '_PVT');
8697 WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
8698 IF l_msi_csr%ISOPEN THEN
8699 CLOSE l_msi_csr;
8700 END IF;
8701 x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
8702 l_api_name,
8703 G_PKG_NAME,
8704 'OKL_API.G_RET_STS_UNEXP_ERROR',
8705 x_msg_count,
8706 x_msg_data,
8707 '_PVT');
8708 WHEN OTHERS THEN
8709 IF l_msi_csr%ISOPEN THEN
8710 CLOSE l_msi_csr;
8711 END IF;
8712 x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
8713 l_api_name,
8714 G_PKG_NAME,
8715 'OTHERS',
8716 x_msg_count,
8717 x_msg_data,
8718 '_PVT');
8719 END POPULATE_INSURANCE_CATEGORY;
8720 -------------------
8721 --Bug# 2994971
8722 ------------------
8723 --------------------------------------------------------------------------------
8724 --Procedure to adjust the quantities on copied split lines
8725 --modified for Bug# 2648280 - null amounts to remain null on copied lines
8726 --------------------------------------------------------------------------------
8727 PROCEDURE Adjust_Split_Lines(
8728 p_api_version IN NUMBER,
8729 p_init_msg_list IN VARCHAR2 DEFAULT OKL_API.G_FALSE,
8730 x_return_status OUT NOCOPY VARCHAR2,
8731 x_msg_count OUT NOCOPY NUMBER,
8732 x_msg_data OUT NOCOPY VARCHAR2,
8733 p_cle_id IN NUMBER, --id of the new top line after copy or parent top line
8734 p_parent_line_id IN NUMBER, --parent top line id which is split
8735 p_txdv_rec IN txdv_rec_type,
8736 p_txlv_rec IN txlv_rec_type,
8737 --Bug# 3502142
8738 p_round_split_comp_amt IN VARCHAR2 DEFAULT 'N') IS
8739
8740 l_return_status VARCHAR2(1) DEFAULT OKL_API.G_RET_STS_SUCCESS;
8741 l_api_name CONSTANT VARCHAR2(30) := 'ADJUST_SPLIT_LINES';
8742 l_api_version CONSTANT NUMBER := 1.0;
8743
8744 l_parent_cost NUMBER;
8745 l_parent_quantity NUMBER;
8746 l_child_cost NUMBER;
8747 l_child_quantity NUMBER;
8748 l_split_factor NUMBER;
8749 l_no_data_found BOOLEAN;
8750 l_cimv_rec cimv_rec_type;
8751 l_cimv_rec_out cimv_rec_type;
8752 lupd_cimv_rec cimv_rec_type;
8753 l_klev_rec klev_rec_type;
8754 l_klev_rec_out klev_rec_type;
8755 l_clev_rec clev_rec_type;
8756 l_clev_rec_out clev_rec_type;
8757
8758
8759 l_lnk_klev_rec klev_rec_type;
8760 l_lnk_clev_rec clev_rec_type;
8761 l_lnk_klev_old_rec klev_rec_type;
8762 l_lnk_clev_old_rec clev_rec_type;
8763
8764 lx_lnk_klev_rec klev_rec_type;
8765 lx_lnk_clev_rec clev_rec_type;
8766 lx_lnk_klev_old_rec klev_rec_type;
8767 lx_lnk_clev_old_rec clev_rec_type;
8768
8769 l_lnk_cimv_rec cimv_rec_type;
8770 lx_lnk_cimv_rec cimv_rec_type;
8771 l_lnk_cimv_old_rec cimv_rec_type;
8772 lx_lnk_cimv_old_rec cimv_rec_type;
8773
8774
8775 CURSOR c_lines(p_cle_id IN NUMBER) IS
8776 SELECT LEVEL,
8777 id,
8778 chr_id,
8779 cle_id,
8780 dnz_chr_id,
8781 lse_id
8782 FROM okc_k_lines_b
8783 CONNECT BY PRIOR id = cle_id
8784 START WITH id = p_cle_id;
8785
8786 CURSOR c_lty_code(p_lse_id IN NUMBER) IS
8787 SELECT lty_code
8788 FROM okc_line_styles_b
8789 WHERE id = p_lse_id;
8790
8791 --Bug# 3897490 : modified cursor to join to SLH row
8792 --Bug# 3066375 : modified cursor
8793 CURSOR l_sll_cur (p_cle_id IN NUMBER) IS
8794 SELECT rul.id sll_id,
8795 rul.jtot_object1_code,
8796 rul.object1_id1,
8797 rul.object1_id2,
8798 rul.jtot_object2_code,
8799 rul.object2_id2,
8800 --nvl(rul.Rule_information6,'0') amount_sll,
8801 rul.Rule_information6 amount_sll,
8802 rul.object2_id1 slh_id,
8803 rul.rule_information1,
8804 rul.rule_information2,
8805 rul.rule_information3,
8806 rul.rule_information4,
8807 rul.rule_information5,
8808 rul.rule_information7,
8809 rul.rule_information8 amount_stub,
8810 rul.rule_information9,
8811 rul.rule_information10,
8812 rul.rule_information11,
8813 rul.rule_information12,
8814 rul.rule_information13,
8815 rul.rule_information14,
8816 rul.rule_information15,
8817 rul_slh.jtot_object1_code strm_type_source,
8818 rul_slh.object1_id1 strm_type_id1,
8819 rul_slh.object1_id2 strm_type_id2,
8820 cleb.currency_code
8821 FROM okc_rules_b rul,
8822 okc_rule_groups_b rgp,
8823 okc_rules_b rul_slh,
8824 okc_k_lines_b cleb
8825 --Bug# : 3124577 - 11.5.10 : Rule Migration
8826 WHERE rul.rule_information_category = 'LASLL'
8827 --where rul.rule_information_category = 'SLL'
8828 AND rul.rgp_id = rgp.id
8829 AND rgp.rgd_code = 'LALEVL'
8830 and rgp.cle_id = cleb.id
8831 and cleb.id = p_cle_id
8832 AND rul_slh.id = rul.object2_id1
8833 AND rul_slh.rgp_id = rgp.id
8834 AND rul_slh.rule_information_category = 'LASLH'
8835 ORDER BY rul_slh.object1_id1;
8836
8837 l_sll_rec l_sll_cur%ROWTYPE;
8838
8839 --Bug# 3897490: SLH details are now fetched by cursor l_sll_cur
8840 /*--Bug : 3066375
8841 CURSOR l_slh_cur (p_rul_id IN NUMBER) IS
8842 SELECT rul.id slh_id,
8843 rul.jtot_object1_code strm_type_source,
8844 rul.object1_id1 strm_type_id1,
8845 rul.object1_id2 strm_type_id2
8846 FROM okc_rules_b rul
8847 WHERE rul.id = p_rul_id
8848 --Bug# - 3124577: 11.5.10 :---Rule Migration
8849 AND rul.rule_information_category = 'LASLH';
8850 --And rul.rule_information_category = 'SLH';
8851 */
8852
8853 l_slh_rul_id okc_rules_b.id%TYPE;
8854 l_strm_type_source okc_rules_b.jtot_object1_code%TYPE;
8855 l_strm_type_id1 okc_rules_b.object1_id1%TYPE;
8856 l_strm_type_id2 okc_rules_b.object1_id2%TYPE;
8857
8858
8859
8860
8861 --Bug# 2881114 - modified cursor
8862 CURSOR l_lnk_asst_cur (p_cle_id IN NUMBER) IS
8863 SELECT cle.cle_id srv_fee_line_id,
8864 cle.id lnk_line_id
8865 FROM OKC_K_LINES_B cle,
8866 OKC_LINE_STYLES_B lse,
8867 OKC_STATUSES_B sts,
8868 OKC_K_ITEMS cim,
8869 OKC_K_LINES_B fin_asst_line
8870 WHERE cle.lse_id = lse.id
8871 AND lse.lty_code IN ('LINK_FEE_ASSET','LINK_SERV_ASSET','LINK_USAGE_ASSET')
8872 AND cle.dnz_chr_id = fin_asst_line.dnz_chr_id
8873 AND sts.code = cle.sts_code
8874 AND sts.ste_code NOT IN ('HOLD','EXPIRED','TERMINATED','CANCELLED')
8875 AND cim.cle_id = cle.id
8876 AND cim.dnz_chr_id = cle.dnz_chr_id
8877 AND cim.object1_id1 = TO_CHAR(p_cle_id)
8878 AND cim.object1_id2 = '#'
8879 AND cim.jtot_object1_code = 'OKX_COVASST'
8880 AND cim.dnz_chr_id = fin_asst_line.dnz_chr_id
8881 AND fin_asst_line.id = p_cle_id;
8882
8883 l_srv_fee_line_id OKC_K_LINES_B.cle_id%TYPE;
8884 l_lnk_line_id OKC_K_LINES_B.id%TYPE;
8885
8886
8887 l_level NUMBER;
8888 l_cle_id NUMBER;
8889 l_chr_id NUMBER;
8890 l_parent_cle_id NUMBER;
8891 l_dnz_chr_id NUMBER;
8892 l_lse_id NUMBER;
8893 l_lty_code VARCHAR2(30);
8894 l_txdv_rec txdv_rec_type;
8895 l_txdv_rec_out txdv_rec_type;
8896
8897 l_sll_id OKC_RULES_B.ID%TYPE;
8898 l_amount_sll OKC_RULES_B.Rule_Information6%TYPE;
8899 l_slh_id OKC_RULES_B.OBJECT2_ID1%TYPE;
8900 L_UPDATED_SLL_AMOUNT NUMBER;
8901 --Bug# 2757289 : For Payment stubs
8902 l_updated_stub_amount NUMBER;
8903
8904 l_rulv_rec OKL_RULE_PUB.rulv_rec_type;
8905 l_rulv_rec_out OKL_RULE_PUB.rulv_rec_type;
8906
8907 --Bug# 3066375:
8908 l_rgpv_rec OKL_RULE_PUB.rgpv_rec_type;
8909 lx_rgpv_rec OKL_RULE_PUB.rgpv_rec_type;
8910
8911 l_sll_rulv_rec OKL_RULE_PUB.rulv_rec_type;
8912 lx_sll_rulv_rec OKL_RULE_PUB.rulv_rec_type;
8913 l_slh_rulv_rec OKL_RULE_PUB.rulv_rec_type;
8914 lx_slh_rulv_rec OKL_RULE_PUB.rulv_rec_type;
8915
8916 --Bug#3143522 : Subsidies enhancement
8917 --cursor to fetch associated subsidy details
8918 CURSOR l_sub_csr (p_asset_cle_id IN NUMBER) IS
8919 SELECT
8920 kle_sub.subsidy_id subsidy_id
8921 ,cleb_sub.id subsidy_cle_id
8922 ,clet_sub.name name
8923 ,clet_sub.item_description description
8924 ,kle_sub.amount amount
8925 ,kle_sub.subsidy_override_amount subsidy_override_amount
8926 ,cleb_sub.dnz_chr_id dnz_chr_id
8927 ,cleb_asst.id asset_cle_id
8928 ,cplb.id cpl_id
8929 ,pov.vendor_id vendor_id
8930 ,pov.vendor_name vendor_name
8931 ,clet_asst.name asset_number
8932 ,cleb_sub.orig_system_id1 parent_sub_cle_id
8933 FROM
8934 po_vendors pov,
8935 okc_k_party_roles_b cplb,
8936 okl_k_lines kle_sub,
8937 okc_k_lines_tl clet_sub,
8938 okc_k_lines_b cleb_sub,
8939 okc_line_styles_b lseb_sub,
8940 okc_k_lines_tl clet_asst,
8941 okc_k_lines_b cleb_asst
8942 WHERE
8943 pov.vendor_id = cplb.object1_id1
8944 AND cplb.object1_id2 = '#'
8945 AND cplb.jtot_object1_code = 'OKX_VENDOR'
8946 AND cplb.dnz_chr_id = cleb_sub.dnz_chr_id
8947 AND cplb.cle_id = cleb_sub.id
8948 AND cplb.chr_id IS NULL
8949 AND cplb.rle_code = 'OKL_VENDOR'
8950 AND kle_sub.id = cleb_sub.id
8951 AND clet_sub.id = cleb_sub.id
8952 AND clet_sub.LANGUAGE = USERENV('LANG')
8953 AND cleb_sub.cle_id = cleb_asst.id
8954 AND cleb_sub.dnz_chr_id = cleb_asst.dnz_chr_id
8955 AND cleb_sub.sts_code <> 'ABANDONED'
8956 AND lseb_sub.id = cleb_sub.lse_id
8957 AND lseb_sub.lty_code = 'SUBSIDY'
8958 AND clet_asst.id = cleb_asst.id
8959 AND clet_asst.LANGUAGE =USERENV('LANG')
8960 AND cleb_asst.id = p_asset_cle_id;
8961
8962 l_sub_rec l_sub_csr%ROWTYPE;
8963
8964 l_asb_rec okl_asset_subsidy_pvt.asb_rec_type;
8965
8966
8967 --cursor to select supplier invoice details to copy
8968 CURSOR l_sid_csr (p_cle_id IN NUMBER) IS
8969 SELECT
8970 sid.ID
8971 ,sid.OBJECT_VERSION_NUMBER
8972 ,sid.CLE_ID
8973 ,sid.FA_CLE_ID
8974 ,sid.INVOICE_NUMBER
8975 ,sid.DATE_INVOICED
8976 ,sid.DATE_DUE
8977 ,sid.SHIPPING_ADDRESS_ID1
8978 ,sid.SHIPPING_ADDRESS_ID2
8979 ,sid.SHIPPING_ADDRESS_CODE
8980 ,sid.ATTRIBUTE_CATEGORY
8981 ,sid.ATTRIBUTE1
8982 ,sid.ATTRIBUTE2
8983 ,sid.ATTRIBUTE3
8984 ,sid.ATTRIBUTE4
8985 ,sid.ATTRIBUTE5
8986 ,sid.ATTRIBUTE6
8987 ,sid.ATTRIBUTE7
8988 ,sid.ATTRIBUTE8
8989 ,sid.ATTRIBUTE9
8990 ,sid.ATTRIBUTE10
8991 ,sid.ATTRIBUTE11
8992 ,sid.ATTRIBUTE12
8993 ,sid.ATTRIBUTE13
8994 ,sid.ATTRIBUTE14
8995 ,sid.ATTRIBUTE15
8996 ,sid.CREATED_BY
8997 ,sid.CREATION_DATE
8998 ,sid.LAST_UPDATED_BY
8999 ,sid.LAST_UPDATE_DATE
9000 ,sid.LAST_UPDATE_LOGIN
9001 ,cleb_fa.id fixed_asset_cle_id
9002 FROM okl_supp_invoice_dtls sid,
9003 okc_k_lines_b cleb_fa,
9004 okc_line_styles_b lseb_fa,
9005 okc_k_lines_b cleb
9006 WHERE sid.cle_id = cleb.orig_system_id1
9007 AND cleb_fa.cle_id = cleb.cle_id
9008 AND cleb_fa.dnz_chr_id = cleb.dnz_chr_id
9009 AND lseb_fa.id = cleb_fa.lse_id
9010 AND lseb_fa.lty_code = 'FIXED_ASSET'
9011 AND cleb.id = p_cle_id;
9012
9013 l_sid_rec l_sid_csr%ROWTYPE;
9014 l_sidv_rec okl_supp_invoice_dtls_pub.sidv_rec_type;
9015 lx_sidv_rec okl_supp_invoice_dtls_pub.sidv_rec_type;
9016 ----------------
9017 --Bug# 2994971
9018 ---------------
9019 l_inv_item_id NUMBER;
9020 l_inv_org_id NUMBER;
9021
9022 --Bug# 3897490
9023 l_strm_type_id OKC_RULES_B.OBJECT1_ID1%TYPE;
9024
9025 --Bug# 3502142
9026 l_rounded_amount NUMBER;
9027
9028 CURSOR l_txd_csr(p_tal_id IN NUMBER,
9029 p_cle_id IN NUMBER) IS
9030 SELECT id,
9031 quantity,
9032 split_percent
9033 FROM okl_txd_assets_b txd
9034 WHERE txd.tal_id = p_tal_id
9035 AND NVL(txd.target_kle_id,-1) <> p_cle_id;
9036
9037 l_sll_amount NUMBER;
9038 l_stub_amount NUMBER;
9039 l_sll_split_factor NUMBER;
9040 l_split_pymt NUMBER;
9041 l_split_pymt_sum NUMBER;
9042
9043 CURSOR l_new_lnk_assts_cur (p_chr_id IN NUMBER,
9044 p_cle_id IN NUMBER) IS
9045 SELECT cle.id
9046 FROM OKC_K_LINES_B cle
9047 WHERE cle.dnz_chr_id = p_chr_id
9048 AND cle.orig_system_id1 = p_cle_id;
9049
9050 l_target_kle_id NUMBER;
9051
9052 CURSOR l_fa_line_csr(p_chr_id IN NUMBER,
9053 p_cle_id IN NUMBER) IS
9054 SELECT cle.id
9055 FROM okc_k_lines_b cle,
9056 okc_line_styles_b lse
9057 WHERE cle.cle_id = p_cle_id
9058 AND cle.dnz_chr_id = p_chr_id
9059 AND cle.lse_id = lse.id
9060 AND lse.lty_code = 'FIXED_ASSET';
9061
9062 -- Bug# 5946411: ER
9063 --cursor to check the status of asset
9064 CURSOR l_cleb_sts_csr(pcleid IN NUMBER) IS
9065 SELECT cleb.sts_code sts_code
9066 FROM okc_k_lines_b cleb
9067 WHERE cleb.id = pcleid;
9068 l_cle_status okc_k_lines_b.sts_code%TYPE;
9069 -- Bug# 5946411: ER End
9070
9071 --Bug# 6344223 : Start
9072 l_fa_line_id NUMBER;
9073 l_klev_round_out klev_rec_type;
9074 l_clev_round_out clev_rec_type;
9075 --Bug# 6344223 : end
9076 BEGIN
9077 x_return_status := OKL_API.G_RET_STS_SUCCESS;
9078 -- Call start_activity to create savepoint, check compatibility
9079 -- and initialize message list
9080 x_return_status := OKL_API.START_ACTIVITY (
9081 l_api_name
9082 ,p_init_msg_list
9083 ,'_PVT'
9084 ,x_return_status);
9085 -- Check if activity started successfully
9086 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
9087 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
9088 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
9089 RAISE OKL_API.G_EXCEPTION_ERROR;
9090 END IF;
9091 IF NVL(p_txdv_rec.split_percent,0) NOT IN (0,OKL_API.G_MISS_NUM) THEN
9092 l_split_factor := (p_txdv_rec.split_percent/100);
9093 ELSE
9094 --1. By comparing the cost and quantities on txlv record and txdv record find the split factor
9095 l_parent_cost := p_txlv_rec.depreciation_cost;
9096 l_parent_quantity := p_txlv_rec.current_units;
9097 l_child_cost := p_txdv_rec.cost;
9098 l_child_quantity := p_txdv_rec.quantity;
9099 l_split_factor := p_txdv_rec.quantity/p_txlv_rec.current_units;
9100 END IF;
9101 -- Bug# 5946411: ER
9102 -- get the status of the parent line id
9103 OPEN l_cleb_sts_csr( p_txlv_rec.kle_id);
9104 FETCH l_cleb_sts_csr INTO l_cle_status;
9105 close l_cleb_sts_csr;
9106 --dbms_output.put_line('Adjust_split_lines--p_txlv_rec.kle_id'||p_txlv_rec.kle_id);
9107 --dbms_output.put_line('Status set as l_cle_status'||l_cle_status);
9108 -- Bug# 5946411: ER End
9109 --2. Select split lines using connect by prior starting with top line (p_clev_id)
9110 OPEN c_lines(p_cle_id);
9111 ---For each line selected in 2
9112 ---2.1 depending on the line style recalculate the amount and unit fields
9113 ---2.2 Call Update Line API to update the line with recalculated amounts and units
9114 LOOP
9115 FETCH c_lines INTO l_level,
9116 l_cle_id,
9117 l_chr_id,
9118 l_parent_cle_id,
9119 l_dnz_chr_id,
9120 l_lse_id;
9121 EXIT WHEN c_lines%NOTFOUND;
9122 OPEN c_lty_code(l_lse_id);
9123 FETCH c_lty_code INTO l_lty_code;
9124 IF c_lty_code%NOTFOUND THEN
9125 --dbms_output.put_line('lty_code not found for lse_id "'||to_char(l_lse_id));
9126 --handle error appropriately
9127 OKL_API.SET_MESSAGE(p_app_name => g_app_name,
9128 p_msg_name => G_LTY_CODE_NOT_FOUND
9129 );
9130 RAISE OKL_API.G_EXCEPTION_ERROR;
9131 END IF;
9132 CLOSE c_lty_code;
9133
9134 --Bug# 6344223 : start
9135 IF l_lty_code ='FIXED_ASSET' THEN
9136 l_fa_line_id := l_cle_id;
9137 END IF;
9138 --Bug# 6344223 : End
9139
9140 --dbms_output.put_line(l_lty_code);
9141 --update transaction details and item links on lines
9142 IF l_lty_code IN ('ITEM','ADD_ITEM','FIXED_ASSET','INST_ITEM','LINK_SERV_ASSET',
9143 'LINK_FEE_ASSET','LINK_USAGE_ASSET') THEN
9144 l_cimv_rec := get_cimv_rec(p_cle_id => l_cle_id);
9145 IF l_lty_code <> 'INST_ITEM' THEN
9146 IF NVL(p_txdv_rec.split_percent,0) NOT IN (0,OKL_API.G_MISS_NUM) THEN
9147 --number of items will remain same in case of split asset components
9148 l_cimv_rec.number_of_items := l_cimv_rec.number_of_items;
9149 ELSE
9150 l_cimv_rec.number_of_items := (l_split_factor*l_cimv_rec.number_of_items);
9151 END IF;
9152 END IF;
9153 IF (l_lty_code = 'FIXED_ASSET') AND (NVL(p_txdv_rec.target_kle_id,-99) <> p_txlv_rec.kle_id) THEN
9154 l_txdv_rec := p_txdv_rec;
9155 l_txdv_rec.target_kle_id := l_cle_id;
9156 --update txd record to indicate correct target_kle_id
9157 --dbms_output.put_line('before updating txd target kle_id :'||to_char(l_cle_id));
9158 OKL_TXD_ASSETS_PUB.update_txd_asset_def(p_api_version => p_api_version,
9159 p_init_msg_list => p_init_msg_list,
9160 x_return_status => x_return_status,
9161 x_msg_count => x_msg_count,
9162 x_msg_data => x_msg_data,
9163 p_adpv_rec => l_txdv_rec,
9164 x_adpv_rec => l_txdv_rec_out);
9165 --dbms_output.put_line('target kle_id :'||l_txdv_rec_out.target_kle_id);
9166 --dbms_output.put_line('After updating trx details:'||x_return_status);
9167 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
9168 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
9169 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
9170 RAISE OKL_API.G_EXCEPTION_ERROR;
9171 END IF;
9172 END IF;
9173
9174 --update the number of items on model and fa lines
9175 --Bug#5559502 --Modification Start
9176 --Update number of items for ADDON record in OKC_K_ITEMS table
9177 IF l_lty_code IN ('ADD_ITEM','ITEM','FIXED_ASSET') THEN
9178 --Bug#5559502 --Modification End
9179 IF (l_cimv_rec.id IS NOT NULL) OR (l_cimv_rec.id <> OKL_API.G_MISS_NUM) THEN
9180 --dbms_output.put_line('cimv rec id'|| to_char(l_cimv_rec.id));
9181 lupd_cimv_rec.id := l_cimv_rec.id;
9182 --dbms_output.put_line('Split Factor '|| to_char(l_split_factor));
9183 --dbms_output.put_line('Split Factor '|| to_char(p_txlv_rec.current_units));
9184 IF NVL(p_txdv_rec.split_percent,0) NOT IN (0,OKL_API.G_MISS_NUM) THEN
9185 --number of items will remain same in case of split asset components
9186 lupd_cimv_rec.number_of_items := p_txlv_rec.current_units;
9187 --if it is split asset component update the inventory item on model line
9188 IF l_lty_code = ('ITEM') THEN
9189 lupd_cimv_rec.object1_id1 := TO_CHAR(p_txdv_rec.inventory_item_id);
9190 --dbms_output.put_line('object1_id1 '||lupd_cimv_rec.object1_id1);
9191 lupd_cimv_rec.object1_id2 := l_cimv_rec.object1_id2;
9192 --dbms_output.put_line('object1_id2 '||lupd_cimv_rec.object1_id2);
9193 lupd_cimv_rec.jtot_object1_code := l_cimv_rec.jtot_object1_code;
9194 --dbms_output.put_line('object_code '||lupd_cimv_rec.jtot_object1_code);
9195 --dbms_output.put_line('ITEM_ID '||to_char(lupd_cimv_rec.id));
9196
9197 ---------------
9198 --Bug# 2994971
9199 ---------------
9200 IF NVL(lupd_cimv_rec.object1_id1,okl_api.g_miss_char) <> OKL_API.G_MISS_CHAR AND
9201 NVL(lupd_cimv_rec.object1_id2,okl_api.g_miss_char) <> OKL_API.G_MISS_CHAR THEN
9202
9203 --Bug# 3438811 :
9204 l_inv_item_id := TO_NUMBER(lupd_cimv_rec.object1_id1);
9205 l_inv_org_id := TO_NUMBER(lupd_cimv_rec.object1_id2);
9206 --l_inv_item_id := to_char(lupd_cimv_rec.object1_id1);
9207 --l_inv_org_id := to_char(lupd_cimv_rec.object1_id2);
9208
9209 populate_insurance_category(p_api_version => p_api_version,
9210 p_init_msg_list => p_init_msg_list,
9211 x_return_status => x_return_status,
9212 x_msg_count => x_msg_count,
9213 x_msg_data => x_msg_data,
9214 p_cle_id => l_parent_cle_id,
9215 p_inv_item_id => l_inv_item_id,
9216 p_inv_org_id => l_inv_org_id);
9217 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
9218 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
9219 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
9220 RAISE OKL_API.G_EXCEPTION_ERROR;
9221 END IF;
9222 END IF;
9223 ---------------
9224 --Bug# 2994971
9225 ---------------
9226
9227 ELSE
9228 lupd_cimv_rec.object1_id1 := l_cimv_rec.object1_id1;
9229 --dbms_output.put_line('object1_id1 '||lupd_cimv_rec.object1_id1);
9230 lupd_cimv_rec.object1_id2 := l_cimv_rec.object1_id2;
9231 --dbms_output.put_line('object1_id2 '||lupd_cimv_rec.object1_id2);
9232 lupd_cimv_rec.jtot_object1_code := l_cimv_rec.jtot_object1_code;
9233 --dbms_output.put_line('object_code '||lupd_cimv_rec.jtot_object1_code);
9234 --dbms_output.put_line('ITEM_ID '||to_char(lupd_cimv_rec.id));
9235 END IF;
9236 ELSE
9237 --lupd_cimv_rec.number_of_items := (l_split_factor*nvl(p_txlv_rec.current_units,0));
9238 --Bug#2761799 - did a round as whole number of units may not be found as split factor
9239 --is being calculated earlier - so rounding issues
9240 --lupd_cimv_rec.number_of_items := (l_split_factor*p_txlv_rec.current_units);
9241 lupd_cimv_rec.number_of_items := ROUND((l_split_factor*p_txlv_rec.current_units));
9242 END IF;
9243
9244 --dbms_output.put_line('Number of items'|| to_char(lupd_cimv_rec.number_of_items));
9245 --update the item record
9246 OKL_OKC_MIGRATION_PVT.update_contract_item( p_api_version => p_api_version,
9247 p_init_msg_list => p_init_msg_list,
9248 x_return_status => x_return_status,
9249 x_msg_count => x_msg_count,
9250 x_msg_data => x_msg_data,
9251 p_cimv_rec => lupd_cimv_rec,
9252 x_cimv_rec => l_cimv_rec_out);
9253 --dbms_output.put_line('After updating contract item to nulls :'||x_return_status);
9254 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
9255 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
9256 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
9257 RAISE OKL_API.G_EXCEPTION_ERROR;
9258 END IF;
9259 --End If;
9260 END IF;
9261
9262 END IF;
9263
9264
9265 END IF;
9266
9267 l_klev_rec := get_klev_rec(p_cle_id => l_cle_id);
9268 l_clev_rec := get_clev_rec(p_cle_id => l_cle_id);
9269
9270 --Bug# 6344223 : Start
9271 IF (NVL(p_txdv_rec.target_kle_id,-99) = p_txlv_rec.kle_id)
9272 OR p_round_split_comp_amt = 'Y' THEN
9273 --get the rounding logic
9274 get_split_round_amount(
9275 p_api_version =>p_api_version
9276 ,p_init_msg_list =>p_init_msg_list
9277 ,x_return_status =>x_return_status
9278 ,x_msg_count =>x_msg_count
9279 ,x_msg_data =>x_msg_data
9280 ,p_txl_id =>p_txlv_rec.id
9281 ,p_split_factor =>l_split_factor
9282 ,p_klev_rec =>l_klev_rec
9283 ,p_clev_rec =>l_clev_rec
9284 ,x_klev_rec =>l_klev_round_out
9285 ,x_clev_rec =>l_clev_round_out
9286 );
9287 --dbms_output.put_line('After get_split_round_amount :'||x_return_status);
9288
9289 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
9290 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
9291 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
9292 RAISE OKL_API.G_EXCEPTION_ERROR;
9293 END IF;
9294
9295 l_klev_rec :=l_klev_round_out;
9296 l_clev_rec :=l_clev_round_out;
9297
9298 ELSE
9299 --Bug# 6344223 : End
9300 --
9301 l_klev_rec.ESTIMATED_OEC := (l_split_factor * l_klev_rec.ESTIMATED_OEC);
9302 l_klev_rec.LAO_AMOUNT := (l_split_factor * l_klev_rec.LAO_AMOUNT);
9303 l_klev_rec.FEE_CHARGE := (l_split_factor * l_klev_rec.FEE_CHARGE);
9304 l_klev_rec.INITIAL_DIRECT_COST := (l_split_factor * l_klev_rec.INITIAL_DIRECT_COST);
9305 l_klev_rec.AMOUNT_STAKE := (l_split_factor * l_klev_rec.AMOUNT_STAKE);
9306 l_klev_rec.LRV_AMOUNT := (l_split_factor * l_klev_rec.LRV_AMOUNT);
9307 l_klev_rec.COVERAGE := (l_split_factor * l_klev_rec.COVERAGE);
9308 l_klev_rec.CAPITAL_REDUCTION := (l_split_factor * l_klev_rec.CAPITAL_REDUCTION);
9309 l_klev_rec.VENDOR_ADVANCE_PAID := (l_split_factor * l_klev_rec.VENDOR_ADVANCE_PAID);
9310 l_klev_rec.TRADEIN_AMOUNT := (l_split_factor * l_klev_rec.TRADEIN_AMOUNT);
9311 l_klev_rec.BOND_EQUIVALENT_YIELD := (l_split_factor * l_klev_rec.BOND_EQUIVALENT_YIELD);
9312 l_klev_rec.TERMINATION_PURCHASE_AMOUNT :=(l_split_factor * l_klev_rec.TERMINATION_PURCHASE_AMOUNT);
9313 l_klev_rec.REFINANCE_AMOUNT := (l_split_factor * l_klev_rec.REFINANCE_AMOUNT);
9314 l_klev_rec.REMARKETED_AMOUNT := (l_split_factor * l_klev_rec.REMARKETED_AMOUNT);
9315 l_klev_rec.REMARKET_MARGIN := (l_split_factor * l_klev_rec.REMARKET_MARGIN);
9316 l_klev_rec.REPURCHASED_AMOUNT := (l_split_factor * l_klev_rec.REPURCHASED_AMOUNT);
9317 l_klev_rec.RESIDUAL_VALUE := (l_split_factor * l_klev_rec.RESIDUAL_VALUE);
9318 l_klev_rec.APPRAISAL_VALUE := (l_split_factor * l_klev_rec.APPRAISAL_VALUE);
9319 l_klev_rec.GAIN_LOSS := (l_split_factor * l_klev_rec.GAIN_LOSS);
9320 l_klev_rec.FLOOR_AMOUNT := (l_split_factor * l_klev_rec.FLOOR_AMOUNT);
9321 l_klev_rec.TRACKED_RESIDUAL := (l_split_factor * l_klev_rec.TRACKED_RESIDUAL);
9322 l_klev_rec.AMOUNT := (l_split_factor * l_klev_rec.AMOUNT);
9323 l_klev_rec.OEC := (l_split_factor * l_klev_rec.OEC);
9324 l_klev_rec.CAPITAL_AMOUNT := (l_split_factor * l_klev_rec.CAPITAL_AMOUNT);
9325 l_klev_rec.RESIDUAL_GRNTY_AMOUNT := (l_split_factor * l_klev_rec.RESIDUAL_GRNTY_AMOUNT);
9326 l_klev_rec.RVI_PREMIUM := (l_split_factor * l_klev_rec.RVI_PREMIUM);
9327 l_klev_rec.CAPITALIZED_INTEREST := (l_split_factor * l_klev_rec.CAPITALIZED_INTEREST);
9328 --
9329 --Bug#3143522 : Subsidies additional columns
9330 l_klev_rec.SUBSIDY_OVERRIDE_AMOUNT := (l_split_factor * l_klev_rec.SUBSIDY_OVERRIDE_AMOUNT);
9331 --Bug#3143522 : Subsidy additional columns
9332
9333 --Bug#4631549 :
9334 l_klev_rec.Expected_Asset_Cost := (l_split_factor * l_klev_rec.Expected_Asset_Cost);
9335 --Bug# 4631549
9336
9337 IF (NVL(p_txdv_rec.target_kle_id,-99) <> p_txlv_rec.kle_id) THEN
9338 l_clev_rec.ORIG_SYSTEM_SOURCE_CODE := 'OKL_SPLIT';
9339 END IF;
9340 --Bug# 5946411: ER
9341 --set the status same as that of the parent line
9342 --l_clev_rec.STS_CODE := 'BOOKED';
9343 l_clev_rec.STS_CODE:=l_cle_status;
9344 --Bug# 5946411: ER End
9345
9346 --price unit to be split only for split into components
9347 IF NVL(p_txdv_rec.split_percent,0) IN (0,OKL_API.G_MISS_NUM)
9348 THEN
9349 NULL;
9350 ELSIF NVL(p_txdv_rec.split_percent,0) NOT IN (0,OKL_API.G_MISS_NUM) THEN
9351 --
9352 l_clev_rec.price_unit := (l_split_factor * l_clev_rec.price_unit);
9353 l_clev_rec.price_negotiated := (l_split_factor * l_clev_rec.price_negotiated);
9354 l_clev_rec.price_negotiated_renewed := (l_split_factor * l_clev_rec.price_negotiated_renewed);
9355
9356 END IF;
9357 --Bug# 6344223
9358 END IF;
9359 --update asset number on top line
9360 IF l_lty_code IN ('FREE_FORM1','FIXED_ASSET') THEN
9361 l_clev_rec.name := p_txdv_rec.asset_number;
9362 l_clev_rec.item_description := p_txdv_rec.description;
9363 END IF;
9364
9365 --Call api to update line
9366 OKL_CONTRACT_PUB.update_contract_line(
9367 p_api_version => p_api_version,
9368 p_init_msg_list => p_init_msg_list,
9369 x_return_status => x_return_status,
9370 x_msg_count => x_msg_count,
9371 x_msg_data => x_msg_data,
9372 p_clev_rec => l_clev_rec,
9373 p_klev_rec => l_klev_rec,
9374 x_clev_rec => l_clev_rec_out,
9375 x_klev_rec => l_klev_rec_out);
9376 --dbms_output.put_line('After updating contract line :'||x_return_status);
9377 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
9378 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
9379 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
9380 RAISE OKL_API.G_EXCEPTION_ERROR;
9381 END IF;
9382
9383 -------------------------------------------------------
9384 --Bug# 3143522: subsidies - Validate all associated subsidies
9385 ------------------------------------------------------
9386 IF l_lty_code = 'FREE_FORM1' THEN
9387 --check if any subsidies exist and are valid
9388 OPEN l_sub_csr (p_asset_cle_id => l_cle_id);
9389 LOOP
9390 FETCH l_sub_csr INTO l_sub_rec;
9391 EXIT WHEN l_sub_csr%NOTFOUND;
9392 --check whether subsidy is valid for the asset :
9393 l_asb_rec.SUBSIDY_ID := l_sub_rec.SUBSIDY_ID;
9394 l_asb_rec.SUBSIDY_CLE_ID := l_sub_rec.SUBSIDY_CLE_ID;
9395 l_asb_rec.NAME := l_sub_rec.NAME;
9396 l_asb_rec.DESCRIPTION := l_sub_rec.DESCRIPTION;
9397 l_asb_rec.AMOUNT := l_sub_rec.AMOUNT;
9398 l_asb_rec.SUBSIDY_OVERRIDE_AMOUNT := l_sub_rec.SUBSIDY_OVERRIDE_AMOUNT;
9399 l_asb_rec.DNZ_CHR_ID := l_sub_rec.DNZ_CHR_ID;
9400 l_asb_rec.ASSET_CLE_ID := l_sub_rec.ASSET_CLE_ID;
9401 l_asb_rec.CPL_ID := l_sub_rec.CPL_ID;
9402 l_asb_rec.VENDOR_ID := l_sub_rec.VENDOR_ID;
9403 l_asb_rec.VENDOR_NAME := l_sub_rec.VENDOR_NAME;
9404
9405 --call api to validate asset subsidy
9406 okl_asset_subsidy_pvt.validate_asset_subsidy(
9407 p_api_version => p_api_version,
9408 p_init_msg_list => p_init_msg_list,
9409 x_return_status => x_return_status,
9410 x_msg_count => x_msg_count,
9411 x_msg_data => x_msg_data,
9412 p_asb_rec => l_asb_rec);
9413
9414 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
9415 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
9416 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
9417 RAISE OKL_API.G_EXCEPTION_ERROR;
9418 END IF;
9419
9420 /*------------------Commented as this will be done as part of copy lines now
9421 ------------------------------------------
9422 --create party payment details from parent
9423 ------------------------------------------
9424 ---------------------------------Commented as this being done in copy lines base proc*/
9425 END LOOP;
9426 CLOSE l_sub_csr;
9427 END IF;
9428 ------------------------------------------------------
9429 --Bug# 3143522 : End Subsidies
9430 ------------------------------------------------------
9431 ------------------------------------------------------
9432 --to_copy supplier invoice details linked to model line
9433 ------------------------------------------------------
9434 IF l_lty_code = 'ITEM' THEN
9435 IF (NVL(p_txdv_rec.target_kle_id,-99) <> p_txlv_rec.kle_id) THEN --is new line
9436 OPEN l_sid_csr(p_cle_id => l_cle_id);
9437 FETCH l_sid_csr INTO l_sid_rec;
9438 IF l_sid_csr%NOTFOUND THEN
9439 NULL;
9440 ELSE
9441 l_sidv_rec.CLE_ID := l_cle_id;
9442 l_sidv_rec.FA_CLE_ID := l_sid_rec.fixed_asset_cle_id;
9443 l_sidv_rec.INVOICE_NUMBER := l_sid_rec.invoice_number;
9444 l_sidv_rec.DATE_INVOICED := l_sid_rec.date_invoiced;
9445 l_sidv_rec.DATE_DUE := l_sid_rec.date_due;
9446 l_sidv_rec.SHIPPING_ADDRESS_ID1 := l_sid_rec.shipping_address_id1;
9447 l_sidv_rec.SHIPPING_ADDRESS_ID2 := l_sid_rec.shipping_address_id2;
9448 l_sidv_rec.SHIPPING_ADDRESS_CODE := l_sid_rec.shipping_address_code;
9449 l_sidv_rec.ATTRIBUTE_CATEGORY := l_sid_rec.attribute_category;
9450 l_sidv_rec.ATTRIBUTE1 := l_sid_rec.attribute1;
9451 l_sidv_rec.ATTRIBUTE2 := l_sid_rec.attribute2;
9452 l_sidv_rec.ATTRIBUTE3 := l_sid_rec.attribute3;
9453 l_sidv_rec.ATTRIBUTE4 := l_sid_rec.attribute4;
9454 l_sidv_rec.ATTRIBUTE5 := l_sid_rec.attribute5;
9455 l_sidv_rec.ATTRIBUTE6 := l_sid_rec.attribute6;
9456 l_sidv_rec.ATTRIBUTE7 := l_sid_rec.attribute7;
9457 l_sidv_rec.ATTRIBUTE8 := l_sid_rec.attribute8;
9458 l_sidv_rec.ATTRIBUTE9 := l_sid_rec.attribute9;
9459 l_sidv_rec.ATTRIBUTE10 := l_sid_rec.attribute10;
9460 l_sidv_rec.ATTRIBUTE11 := l_sid_rec.attribute11;
9461 l_sidv_rec.ATTRIBUTE12 := l_sid_rec.attribute12;
9462 l_sidv_rec.ATTRIBUTE13 := l_sid_rec.attribute13;
9463 l_sidv_rec.ATTRIBUTE14 := l_sid_rec.attribute14;
9464 l_sidv_rec.ATTRIBUTE15 := l_sid_rec.attribute15;
9465
9466 --------------------------------------------
9467 --call api to create supplier invoice dtls
9468 -------------------------------------------
9469 OKL_SUPP_INVOICE_DTLS_PUB.Create_sup_inv_dtls
9470 (p_api_version => p_api_version,
9471 p_init_msg_list => p_init_msg_list,
9472 x_return_status => x_return_status,
9473 x_msg_count => x_msg_count,
9474 x_msg_data => x_msg_data,
9475 p_sidv_rec => l_sidv_rec,
9476 x_sidv_rec => lx_sidv_rec);
9477
9478 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
9479 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
9480 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
9481 RAISE OKL_API.G_EXCEPTION_ERROR;
9482 END IF;
9483
9484 END IF;
9485 END IF;
9486 END IF;
9487
9488 END LOOP;
9489 CLOSE c_lines;
9490
9491 --after completing adjustment on lines
9492 --adjust rule amounts SLL/SLH
9493
9494 --Bug# 3502142
9495 IF (NVL(p_txdv_rec.target_kle_id,-1) <> p_txlv_rec.kle_id) AND
9496 (p_round_split_comp_amt = 'N') THEN -- child line
9497
9498 OPEN l_sll_cur(p_cle_id => p_cle_id);
9499 LOOP
9500 l_updated_sll_amount := NULL;
9501 l_updated_stub_amount := NULL;
9502 FETCH l_sll_cur INTO l_sll_rec;
9503 EXIT WHEN l_sll_cur%NOTFOUND;
9504
9505 l_updated_sll_amount := TO_NUMBER(l_sll_rec.amount_sll)*l_split_factor;
9506 --Bug# 4028371
9507 --Bug# 3502142: Use Streams Rounding Option
9508 okl_accounting_util.round_amount(
9509 p_api_version => p_api_version,
9510 p_init_msg_list => p_init_msg_list,
9511 x_return_status => x_return_status,
9512 x_msg_count => x_msg_count,
9513 x_msg_data => x_msg_data,
9514 p_amount => l_updated_sll_amount,
9515 p_currency_code => l_sll_rec.currency_code,
9516 p_round_option => 'STM',
9517 x_rounded_amount => l_rounded_amount
9518 );
9519 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
9520 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
9521 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
9522 RAISE OKL_API.G_EXCEPTION_ERROR;
9523 END IF;
9524
9525 l_updated_sll_amount := l_rounded_amount;
9526
9527 --Bug# 2757289 :enhancement for stub payments
9528 l_updated_stub_amount := TO_NUMBER(l_sll_rec.amount_stub)*l_split_factor;
9529 --Bug# 4028371
9530 --Bug# 3502142: Use Streams Rounding Option
9531 okl_accounting_util.round_amount(
9532 p_api_version => p_api_version,
9533 p_init_msg_list => p_init_msg_list,
9534 x_return_status => x_return_status,
9535 x_msg_count => x_msg_count,
9536 x_msg_data => x_msg_data,
9537 p_amount => l_updated_stub_amount,
9538 p_currency_code => l_sll_rec.currency_code,
9539 p_round_option => 'STM',
9540 x_rounded_amount => l_rounded_amount
9541 );
9542 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
9543 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
9544 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
9545 RAISE OKL_API.G_EXCEPTION_ERROR;
9546 END IF;
9547
9548 l_updated_stub_amount := l_rounded_amount;
9549
9550 --update the rule record
9551 l_rulv_rec.id := l_sll_rec.sll_id;
9552 IF NVL(l_updated_sll_amount,OKL_API.G_MISS_NUM) <> OKL_API.G_MISS_NUM THEN
9553 l_rulv_rec.rule_information6 := l_updated_sll_amount;
9554 ELSIF NVL(l_updated_sll_amount,OKL_API.G_MISS_NUM) = OKL_API.G_MISS_NUM THEN
9555 l_rulv_rec.rule_information6 := NULL;
9556 END IF;
9557 --Bug# 2757289 :enhancement for stub payments
9558 IF NVL(l_updated_stub_amount,OKL_API.G_MISS_NUM) <> OKL_API.G_MISS_NUM THEN
9559 l_rulv_rec.rule_information8 := l_updated_stub_amount;
9560 ELSIF NVL(l_updated_stub_amount,OKL_API.G_MISS_NUM) = OKL_API.G_MISS_NUM THEN
9561 l_rulv_rec.rule_information8 := NULL;
9562 END IF;
9563
9564 OKL_RULE_PUB.update_rule(
9565 p_api_version => p_api_version,
9566 p_init_msg_list => p_init_msg_list,
9567 x_return_status => x_return_status,
9568 x_msg_count => x_msg_count,
9569 x_msg_data => x_msg_data,
9570 p_rulv_rec => l_rulv_rec,
9571 x_rulv_rec => l_rulv_rec_out);
9572 --dbms_output.put_line('After updating payments :'||x_return_status);
9573 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
9574 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
9575 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
9576 RAISE OKL_API.G_EXCEPTION_ERROR;
9577 END IF;
9578 END LOOP;
9579 CLOSE l_sll_cur;
9580
9581 ELSE -- parent line
9582
9583 -- Apply Rounding Difference to
9584 -- Parent Line for Split assets into Units
9585 -- Largest asset cost for Split assets into Components
9586
9587 OPEN l_sll_cur(p_cle_id => p_cle_id);
9588 LOOP
9589 FETCH l_sll_cur INTO l_sll_rec;
9590 EXIT WHEN l_sll_cur%NOTFOUND;
9591
9592 l_sll_amount := TO_NUMBER(l_sll_rec.amount_sll);
9593 l_stub_amount := TO_NUMBER(l_sll_rec.amount_stub);
9594
9595 l_split_pymt_sum := 0;
9596
9597 -- Split into units
9598 IF NVL(p_txdv_rec.split_percent,0) IN (0,OKL_API.G_MISS_NUM) THEN
9599 l_target_kle_id := p_txlv_rec.kle_id;
9600
9601 -- Split into components
9602 ELSE
9603 open l_fa_line_csr(p_chr_id => p_txlv_rec.dnz_khr_id
9604 ,p_cle_id => p_cle_id);
9605 fetch l_fa_line_csr into l_target_kle_id;
9606 close l_fa_line_csr;
9607 END IF;
9608
9609 FOR l_txd_rec in l_txd_csr(p_tal_id => p_txlv_rec.id
9610 ,p_cle_id => l_target_kle_id)
9611 LOOP
9612
9613 IF NVL(p_txdv_rec.split_percent,0) IN (0,OKL_API.G_MISS_NUM) THEN
9614 l_sll_split_factor := l_txd_rec.quantity/p_txlv_rec.current_units;
9615 ELSE
9616 l_sll_split_factor := l_txd_rec.split_percent/100;
9617 END IF;
9618
9619 IF NVL(l_sll_amount,OKL_API.G_MISS_NUM) <> OKL_API.G_MISS_NUM THEN
9620 l_split_pymt := l_sll_amount * l_sll_split_factor;
9621 ELSIF NVL(l_stub_amount,OKL_API.G_MISS_NUM) <> OKL_API.G_MISS_NUM THEN
9622 l_split_pymt := l_stub_amount * l_sll_split_factor;
9623 END IF;
9624
9625 okl_accounting_util.round_amount(
9626 p_api_version => p_api_version,
9627 p_init_msg_list => p_init_msg_list,
9628 x_return_status => x_return_status,
9629 x_msg_count => x_msg_count,
9630 x_msg_data => x_msg_data,
9631 p_amount => l_split_pymt,
9632 p_currency_code => l_sll_rec.currency_code,
9633 p_round_option => 'STM',
9634 x_rounded_amount => l_rounded_amount
9635 );
9636 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
9637 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
9638 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
9639 RAISE OKL_API.G_EXCEPTION_ERROR;
9640 END IF;
9641
9642 l_split_pymt_sum := l_split_pymt_sum + l_rounded_amount;
9643
9644 END LOOP;
9645
9646 --update the rule record
9647 l_rulv_rec.id := l_sll_rec.sll_id;
9648 IF NVL(l_sll_amount,OKL_API.G_MISS_NUM) <> OKL_API.G_MISS_NUM THEN
9649 l_rulv_rec.rule_information6 := TO_CHAR(l_sll_amount - l_split_pymt_sum);
9650 ELSIF NVL(l_sll_amount,OKL_API.G_MISS_NUM) = OKL_API.G_MISS_NUM THEN
9651 l_rulv_rec.rule_information6 := NULL;
9652 END IF;
9653 --Bug# 2757289 :enhancement for stub payments
9654 IF NVL(l_stub_amount,OKL_API.G_MISS_NUM) <> OKL_API.G_MISS_NUM THEN
9655 l_rulv_rec.rule_information8 := TO_CHAR(l_stub_amount - l_split_pymt_sum);
9656 ELSIF NVL(l_stub_amount,OKL_API.G_MISS_NUM) = OKL_API.G_MISS_NUM THEN
9657 l_rulv_rec.rule_information8 := NULL;
9658 END IF;
9659
9660 OKL_RULE_PUB.update_rule(
9661 p_api_version => p_api_version,
9662 p_init_msg_list => p_init_msg_list,
9663 x_return_status => x_return_status,
9664 x_msg_count => x_msg_count,
9665 x_msg_data => x_msg_data,
9666 p_rulv_rec => l_rulv_rec,
9667 x_rulv_rec => l_rulv_rec_out);
9668 --dbms_output.put_line('After updating payments :'||x_return_status);
9669 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
9670 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
9671 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
9672 RAISE OKL_API.G_EXCEPTION_ERROR;
9673 END IF;
9674 END LOOP;
9675 CLOSE l_sll_cur;
9676 END IF;
9677
9678 --Bug Fix# 2881114 :
9679 --find out if the parent top line is linked to an asset/fee line
9680 -- Bug# 3502142
9681 IF (NVL(p_txdv_rec.target_kle_id,-1) <> p_txlv_rec.kle_id) AND
9682 (p_round_split_comp_amt = 'N') THEN -- it is a child line
9683
9684 --get if top line is linked to an asset
9685 OPEN l_lnk_asst_cur (p_cle_id => p_parent_line_id);
9686 LOOP
9687 FETCH l_lnk_asst_cur INTO
9688 l_srv_fee_line_id,
9689 l_lnk_line_id;
9690 EXIT WHEN l_lnk_asst_cur%NOTFOUND;
9691 --create new linked line and update old line
9692 l_lnk_klev_rec := get_klev_rec(p_cle_id => l_lnk_line_id,
9693 x_no_data_found => l_no_data_found);
9694 IF l_no_data_found THEN
9695 NULL;
9696 --raise appropriate error
9697 ELSE
9698 --End If;
9699 l_lnk_klev_old_rec := l_lnk_klev_rec;
9700
9701 l_lnk_clev_rec := get_clev_rec(p_cle_id => l_lnk_line_id,
9702 x_no_data_found => l_no_data_found);
9703 IF l_no_data_found THEN
9704 NULL;
9705 --raise appropriate error
9706 ELSE
9707 --End If;
9708 l_lnk_clev_old_rec := l_lnk_clev_rec;
9709 --adjusted entries
9710 --
9711 l_lnk_klev_rec.ESTIMATED_OEC := (l_split_factor * l_lnk_klev_rec.ESTIMATED_OEC);
9712 l_lnk_klev_rec.LAO_AMOUNT := (l_split_factor * l_lnk_klev_rec.LAO_AMOUNT);
9713 l_lnk_klev_rec.FEE_CHARGE := (l_split_factor * l_lnk_klev_rec.FEE_CHARGE);
9714 l_lnk_klev_rec.INITIAL_DIRECT_COST := (l_split_factor * l_lnk_klev_rec.INITIAL_DIRECT_COST);
9715 l_lnk_klev_rec.AMOUNT_STAKE := (l_split_factor * l_lnk_klev_rec.AMOUNT_STAKE);
9716 l_lnk_klev_rec.LRV_AMOUNT := (l_split_factor * l_lnk_klev_rec.LRV_AMOUNT);
9717 l_lnk_klev_rec.COVERAGE := (l_split_factor * l_lnk_klev_rec.COVERAGE);
9718 l_lnk_klev_rec.CAPITAL_REDUCTION := (l_split_factor * l_lnk_klev_rec.CAPITAL_REDUCTION);
9719 l_lnk_klev_rec.VENDOR_ADVANCE_PAID := (l_split_factor * l_lnk_klev_rec.VENDOR_ADVANCE_PAID);
9720 l_lnk_klev_rec.TRADEIN_AMOUNT := (l_split_factor * l_lnk_klev_rec.TRADEIN_AMOUNT);
9721 l_lnk_klev_rec.BOND_EQUIVALENT_YIELD := (l_split_factor * l_lnk_klev_rec.BOND_EQUIVALENT_YIELD);
9722 l_lnk_klev_rec.TERMINATION_PURCHASE_AMOUNT :=(l_split_factor * l_lnk_klev_rec.TERMINATION_PURCHASE_AMOUNT);
9723 l_lnk_klev_rec.REFINANCE_AMOUNT := (l_split_factor * l_lnk_klev_rec.REFINANCE_AMOUNT);
9724 l_lnk_klev_rec.REMARKETED_AMOUNT := (l_split_factor * l_lnk_klev_rec.REMARKETED_AMOUNT);
9725 l_lnk_klev_rec.REMARKET_MARGIN := (l_split_factor * l_lnk_klev_rec.REMARKET_MARGIN);
9726 l_lnk_klev_rec.REPURCHASED_AMOUNT := (l_split_factor * l_lnk_klev_rec.REPURCHASED_AMOUNT);
9727 l_lnk_klev_rec.RESIDUAL_VALUE := (l_split_factor * l_lnk_klev_rec.RESIDUAL_VALUE);
9728 l_lnk_klev_rec.APPRAISAL_VALUE := (l_split_factor * l_lnk_klev_rec.APPRAISAL_VALUE);
9729 l_lnk_klev_rec.GAIN_LOSS := (l_split_factor * l_lnk_klev_rec.GAIN_LOSS);
9730 l_lnk_klev_rec.FLOOR_AMOUNT := (l_split_factor * l_lnk_klev_rec.FLOOR_AMOUNT);
9731 l_lnk_klev_rec.TRACKED_RESIDUAL := (l_split_factor * l_lnk_klev_rec.TRACKED_RESIDUAL);
9732 l_lnk_klev_rec.AMOUNT := (l_split_factor * l_lnk_klev_rec.AMOUNT);
9733 l_lnk_klev_rec.OEC := (l_split_factor * l_lnk_klev_rec.OEC);
9734 l_lnk_klev_rec.CAPITAL_AMOUNT := (l_split_factor * l_lnk_klev_rec.CAPITAL_AMOUNT);
9735 l_lnk_klev_rec.RESIDUAL_GRNTY_AMOUNT := (l_split_factor * l_lnk_klev_rec.RESIDUAL_GRNTY_AMOUNT);
9736 l_lnk_klev_rec.RVI_PREMIUM := (l_split_factor * l_lnk_klev_rec.RVI_PREMIUM);
9737 --
9738 --Bug# 3143522 : Subsidy New Columns
9739 ---
9740 l_lnk_klev_rec.SUBSIDY_OVERRIDE_AMOUNT := (l_split_factor * l_lnk_klev_rec.SUBSIDY_OVERRIDE_AMOUNT);
9741 --
9742 --price unit to be split only for split into components
9743 --old record to be adjusted only for normal split asset
9744 IF NVL(p_txdv_rec.split_percent,0) IN (0,OKL_API.G_MISS_NUM)
9745 THEN
9746 NULL;
9747 ELSIF NVL(p_txdv_rec.split_percent,0) NOT IN (0,OKL_API.G_MISS_NUM) THEN
9748 --
9749 l_lnk_clev_rec.price_unit := (l_split_factor * l_lnk_clev_rec.price_unit);
9750 l_lnk_clev_rec.price_negotiated := (l_split_factor * l_lnk_clev_rec.price_negotiated);
9751 l_lnk_clev_rec.price_negotiated_renewed := (l_split_factor * l_lnk_clev_rec.price_negotiated_renewed);
9752 --make the old line as 'ABANDONED'
9753 --l_lnk_clev_old_rec.sts_code := 'ABANDONED';
9754 END IF;
9755 l_lnk_clev_rec.ORIG_SYSTEM_ID1 := l_lnk_clev_rec.ID;
9756 l_lnk_clev_rec.ID := OKL_API.G_MISS_NUM;
9757 l_lnk_clev_rec.OBJECT_VERSION_NUMBER := OKL_API.G_MISS_NUM;
9758 l_lnk_clev_rec.SFWT_FLAG := OKL_API.G_MISS_CHAR;
9759 l_lnk_clev_rec.LINE_NUMBER := OKL_API.G_MISS_NUM;
9760 l_lnk_clev_rec.DISPLAY_SEQUENCE := l_clev_rec.DISPLAY_SEQUENCE + 1;
9761 --l_lnk_clev_rec.START_DATE := sysdate;
9762 --l_clev_rec.END_DATE :=
9763 l_lnk_clev_rec.ORIG_SYSTEM_SOURCE_CODE := 'OKL_SPLIT';
9764 l_lnk_clev_rec.CREATED_BY := OKL_API.G_MISS_NUM;
9765 l_lnk_clev_rec.CREATION_DATE := OKL_API.G_MISS_DATE;
9766 l_lnk_clev_rec.LAST_UPDATED_BY := OKL_API.G_MISS_NUM;
9767 l_lnk_clev_rec.LAST_UPDATE_DATE := OKL_API.G_MISS_DATE;
9768 l_lnk_clev_rec.LAST_UPDATE_LOGIN := OKL_API.G_MISS_NUM;
9769 --Bug# 5946411: ER
9770 --set the status same as that of the parent line
9771 --make new line as BOOKED
9772 --l_lnk_clev_rec.STS_CODE := 'BOOKED';
9773 l_lnk_clev_rec.STS_CODE :=l_cle_status;
9774 --dbms_output.put_line('Status set as l_lnk_clev_rec'||l_lnk_clev_rec.STS_CODE);
9775 --Bug# 5946411: ER End
9776 --bug# 3066375
9777 l_lnk_clev_rec.name := l_txdv_rec.asset_number;
9778 l_lnk_clev_rec.item_description := l_txdv_rec.description;
9779 ----
9780 l_lnk_klev_rec.ID := OKL_API.G_MISS_NUM;
9781 l_lnk_klev_rec.OBJECT_VERSION_NUMBER := OKL_API.G_MISS_NUM;
9782 l_lnk_klev_rec.CREATED_BY := OKL_API.G_MISS_NUM;
9783 l_lnk_klev_rec.CREATION_DATE := OKL_API.G_MISS_DATE;
9784 l_klev_rec.LAST_UPDATED_BY := OKL_API.G_MISS_NUM;
9785 l_klev_rec.LAST_UPDATE_DATE := OKL_API.G_MISS_DATE;
9786 l_klev_rec.LAST_UPDATE_LOGIN := OKL_API.G_MISS_NUM;
9787
9788
9789 OKL_CONTRACT_PUB.create_contract_line(
9790 p_api_version => p_api_version,
9791 p_init_msg_list => p_init_msg_list,
9792 x_return_status => x_return_status,
9793 x_msg_count => x_msg_count,
9794 x_msg_data => x_msg_data,
9795 p_clev_rec => l_lnk_clev_rec,
9796 p_klev_rec => l_lnk_klev_rec,
9797 x_clev_rec => lx_lnk_clev_rec,
9798 x_klev_rec => lx_lnk_klev_rec);
9799 --dbms_output.put_line('After creating service fee link line :'||x_return_status);
9800 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
9801 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
9802 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
9803 RAISE OKL_API.G_EXCEPTION_ERROR;
9804 END IF;
9805
9806 l_lnk_cimv_rec := get_cimv_rec(p_cle_id => l_lnk_line_id, x_no_data_found => l_no_data_found);
9807
9808 IF l_no_data_found THEN
9809 NULL;
9810 --raise appropriate error
9811 ELSE
9812 --End If;
9813 l_lnk_cimv_old_rec := l_lnk_cimv_rec;
9814 l_lnk_cimv_rec.ID := OKL_API.G_MISS_NUM;
9815 l_lnk_cimv_rec.OBJECT_VERSION_NUMBER := OKL_API.G_MISS_NUM;
9816 l_lnk_cimv_rec.OBJECT1_ID1 := TO_CHAR(p_cle_id);
9817 l_lnk_cimv_rec.CLE_ID := lx_lnk_clev_rec.id;
9818
9819 IF NVL(p_txdv_rec.split_percent,0) NOT IN (0,OKL_API.G_MISS_NUM) THEN
9820 --number of items will remain same in case of split asset components
9821 l_lnk_cimv_rec.NUMBER_OF_ITEMS := l_lnk_cimv_rec.NUMBER_OF_ITEMS;
9822 ELSE
9823 --number of items will be split in case of normal split asset
9824 l_lnk_cimv_rec.NUMBER_OF_ITEMS := l_lnk_cimv_rec.NUMBER_OF_ITEMS * l_split_factor;
9825 END IF;
9826
9827 l_lnk_cimv_rec.CREATED_BY := OKL_API.G_MISS_NUM;
9828 l_lnk_cimv_rec.CREATION_DATE := OKL_API.G_MISS_DATE;
9829 l_lnk_cimv_rec.LAST_UPDATED_BY := OKL_API.G_MISS_NUM;
9830 l_lnk_cimv_rec.LAST_UPDATE_DATE := OKL_API.G_MISS_DATE;
9831 l_lnk_cimv_rec.LAST_UPDATE_LOGIN := OKL_API.G_MISS_NUM;
9832
9833 OKL_OKC_MIGRATION_PVT.create_contract_item( p_api_version => p_api_version,
9834 p_init_msg_list => p_init_msg_list,
9835 x_return_status => x_return_status,
9836 x_msg_count => x_msg_count,
9837 x_msg_data => x_msg_data,
9838 p_cimv_rec => l_lnk_cimv_rec,
9839 x_cimv_rec => lx_lnk_cimv_rec);
9840
9841 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
9842 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
9843 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
9844 RAISE OKL_API.G_EXCEPTION_ERROR;
9845 END IF;
9846
9847 END IF;
9848 END IF;
9849 END IF;
9850
9851 --Bug#3066375 : Split the payments attached to the covered asset line
9852 --adjust rule amounts SLL/SLH
9853 --Bug# 3897490 : Fix creation of SLH and SLL lines when more than one
9854 --payment types are defined at service subline level
9855 l_strm_type_id := NULL;
9856 OPEN l_sll_cur(p_cle_id => l_lnk_line_id);
9857 LOOP
9858 l_updated_sll_amount := NULL;
9859 --Bug# 275289 : For stub payments
9860 l_updated_stub_amount := NULL;
9861 FETCH l_sll_cur INTO l_sll_rec;
9862 EXIT WHEN l_sll_cur%NOTFOUND;
9863
9864 -------------------------------------------------------------
9865 --create LALEVL,SLH and SLL against new linked asset line :
9866 --30-oct-03: 3143522 - LALEVL to be created only once
9867 IF l_sll_cur%RowCount = 1 THEN
9868 l_rgpv_rec.rgd_code := 'LALEVL';
9869 l_rgpv_rec.cle_id := lx_lnk_clev_rec.id;
9870 l_rgpv_rec.dnz_chr_id := lx_lnk_clev_rec.dnz_chr_id;
9871 l_rgpv_rec.rgp_type := 'KRG';
9872
9873 OKL_RULE_PUB.create_rule_group(
9874 p_api_version => p_api_version,
9875 p_init_msg_list => p_init_msg_list,
9876 x_return_status => x_return_status,
9877 x_msg_count => x_msg_count,
9878 x_msg_data => x_msg_data,
9879 p_rgpv_rec => l_rgpv_rec,
9880 x_rgpv_rec => lx_rgpv_rec);
9881
9882 --dbms_output.put_line('After updating payments :'||x_return_status);
9883 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
9884 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
9885 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
9886 RAISE OKL_API.G_EXCEPTION_ERROR;
9887 END IF;
9888 END IF;
9889
9890 --Bug# 3897490
9891 IF (l_strm_type_id IS NULL OR l_strm_type_id <> l_sll_rec.strm_type_id1) THEN
9892 --30-oct-03 : 3143522 - SLH should be created only once
9893
9894 --create slh
9895 l_slh_rulv_rec.rgp_id := lx_rgpv_rec.id;
9896 l_slh_rulv_rec.rule_information_category := 'LASLH';
9897 l_slh_rulv_rec.jtot_object1_code := l_sll_rec.strm_type_source;
9898 l_slh_rulv_rec.object1_id1 := l_sll_rec.strm_type_id1;
9899 l_slh_rulv_rec.object1_id2 := l_sll_rec.strm_type_id2;
9900 l_slh_rulv_rec.dnz_chr_id := lx_rgpv_rec.dnz_chr_id;
9901 l_slh_rulv_rec.std_template_yn := 'N';
9902 l_slh_rulv_rec.warn_yn := 'N';
9903 l_slh_rulv_rec.template_yn := 'N';
9904
9905 OKL_RULE_PUB.create_rule(
9906 p_api_version => p_api_version,
9907 p_init_msg_list => p_init_msg_list,
9908 x_return_status => x_return_status,
9909 x_msg_count => x_msg_count,
9910 x_msg_data => x_msg_data,
9911 p_rulv_rec => l_slh_rulv_rec,
9912 x_rulv_rec => lx_slh_rulv_rec);
9913
9914 --dbms_output.put_line('After updating payments :'||x_return_status);
9915 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
9916 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
9917 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
9918 RAISE OKL_API.G_EXCEPTION_ERROR;
9919 END IF;
9920
9921 --Bug# 3897490
9922 l_strm_type_id := l_sll_rec.strm_type_id1;
9923 END IF;
9924
9925 --create sll
9926 l_sll_rulv_rec.dnz_chr_id := lx_rgpv_rec.dnz_chr_id;
9927 l_sll_rulv_rec.rgp_id := lx_rgpv_rec.id;
9928 l_sll_rulv_rec.std_template_yn := lx_slh_rulv_rec.std_template_yn;
9929 l_sll_rulv_rec.warn_yn := lx_slh_rulv_rec.warn_yn;
9930 l_sll_rulv_rec.template_yn := lx_slh_rulv_rec.template_yn;
9931 l_sll_rulv_rec.rule_information_category := 'LASLL';
9932 l_sll_rulv_rec.jtot_object1_code := l_sll_rec.jtot_object1_code;
9933 l_sll_rulv_rec.object1_id1 := l_sll_rec.object1_id1;
9934 l_sll_rulv_rec.object1_id2 := l_sll_Rec.object1_id2;
9935 l_sll_rulv_rec.jtot_object2_code := l_sll_rec.jtot_object2_code;
9936 l_sll_rulv_rec.object2_id1 := lx_slh_rulv_rec.id;
9937 -- ansethur 28-feb-08 bug # 6697542
9938 l_sll_rulv_rec.object2_id2 := '#' ; -- l_sll_rec.object2_id2;
9939 -- ansethur 28-feb-08 bug # 6697542
9940 l_sll_rulv_rec.rule_information1 := l_sll_rec.rule_information1;
9941 l_sll_rulv_rec.rule_information2 := l_sll_rec.rule_information2;
9942 l_sll_rulv_rec.rule_information3 := l_sll_rec.rule_information3;
9943 l_sll_rulv_rec.rule_information4 := l_sll_rec.rule_information4;
9944 l_sll_rulv_rec.rule_information5 := l_sll_rec.rule_information5;
9945 IF NVL(TO_NUMBER(l_sll_rec.amount_sll)*l_split_factor,OKL_API.G_MISS_NUM) <> OKL_API.G_MISS_NUM THEN
9946
9947 --Bug# 4028371
9948 --Bug# 3502142: Use Streams Rounding Option
9949 l_updated_sll_amount := TO_NUMBER(l_sll_rec.amount_sll)*l_split_factor;
9950 okl_accounting_util.round_amount(
9951 p_api_version => p_api_version,
9952 p_init_msg_list => p_init_msg_list,
9953 x_return_status => x_return_status,
9954 x_msg_count => x_msg_count,
9955 x_msg_data => x_msg_data,
9956 p_amount => l_updated_sll_amount,
9957 p_currency_code => l_sll_rec.currency_code,
9958 p_round_option => 'STM',
9959 x_rounded_amount => l_rounded_amount
9960 );
9961 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
9962 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
9963 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
9964 RAISE OKL_API.G_EXCEPTION_ERROR;
9965 END IF;
9966
9967 l_updated_sll_amount := l_rounded_amount;
9968 l_sll_rulv_rec.rule_information6 := l_updated_sll_amount;
9969
9970 ELSIF NVL(TO_NUMBER(l_sll_rec.amount_sll)*l_split_factor,OKL_API.G_MISS_NUM) = OKL_API.G_MISS_NUM THEN
9971 l_sll_rulv_rec.rule_information6 := NULL;
9972 END IF;
9973 l_sll_rulv_rec.rule_information7 := l_sll_rec.rule_information7;
9974 --Bug# 2757289 : For stup payments
9975 IF NVL(TO_NUMBER(l_sll_rec.amount_stub)*l_split_factor,OKL_API.G_MISS_NUM) <> OKL_API.G_MISS_NUM THEN
9976
9977 --Bug# 4028371
9978 --Bug# 3502142: Use Streams Rounding Option
9979 l_updated_stub_amount := TO_NUMBER(l_sll_rec.amount_stub)*l_split_factor;
9980 okl_accounting_util.round_amount(
9981 p_api_version => p_api_version,
9982 p_init_msg_list => p_init_msg_list,
9983 x_return_status => x_return_status,
9984 x_msg_count => x_msg_count,
9985 x_msg_data => x_msg_data,
9986 p_amount => l_updated_stub_amount,
9987 p_currency_code => l_sll_rec.currency_code,
9988 p_round_option => 'STM',
9989 x_rounded_amount => l_rounded_amount
9990 );
9991 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
9992 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
9993 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
9994 RAISE OKL_API.G_EXCEPTION_ERROR;
9995 END IF;
9996
9997 l_updated_stub_amount := l_rounded_amount;
9998 l_sll_rulv_rec.rule_information8 := l_updated_stub_amount;
9999
10000 ELSIF NVL(TO_NUMBER(l_sll_rec.amount_stub)*l_split_factor,OKL_API.G_MISS_NUM) = OKL_API.G_MISS_NUM THEN
10001 l_sll_rulv_rec.rule_information8 := NULL;
10002 END IF;
10003 --l_sll_rulv_rec.rule_information8 := l_sll_rec.rule_information8;
10004 l_sll_rulv_rec.rule_information9 := l_sll_rec.rule_information9;
10005 l_sll_rulv_rec.rule_information10 := l_sll_rec.rule_information10;
10006 l_sll_rulv_rec.rule_information11 := l_sll_rec.rule_information11;
10007 l_sll_rulv_rec.rule_information12 := l_sll_rec.rule_information12;
10008 l_sll_rulv_rec.rule_information13 := l_sll_rec.rule_information13;
10009 l_sll_rulv_rec.rule_information14 := l_sll_rec.rule_information14;
10010 l_sll_rulv_rec.rule_information15 := l_sll_rec.rule_information15;
10011
10012 OKL_RULE_PUB.create_rule(
10013 p_api_version => p_api_version,
10014 p_init_msg_list => p_init_msg_list,
10015 x_return_status => x_return_status,
10016 x_msg_count => x_msg_count,
10017 x_msg_data => x_msg_data,
10018 p_rulv_rec => l_sll_rulv_rec,
10019 x_rulv_rec => lx_sll_rulv_rec);
10020
10021 --dbms_output.put_line('After updating payments :'||x_return_status);
10022 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
10023 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
10024 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
10025 RAISE OKL_API.G_EXCEPTION_ERROR;
10026 END IF;
10027
10028 ------------------------------------------------------------------------
10029
10030 END LOOP;
10031 CLOSE l_sll_cur;
10032 --End Bug# 3066375
10033
10034 END LOOP;
10035 CLOSE l_lnk_asst_cur;
10036
10037 --Bug# 3502142
10038 ELSE -- Parent line
10039
10040 -- For Split Asset into Units, Update Parent linked asset
10041 -- line after all child linked lines have been created
10042
10043 -- For Split Asset into Components, create linked asset
10044 -- line for largest asset cost after all other child linked lines
10045 -- have been created
10046
10047 OPEN l_lnk_asst_cur (p_cle_id => p_parent_line_id);
10048 LOOP
10049 FETCH l_lnk_asst_cur INTO
10050 l_srv_fee_line_id,
10051 l_lnk_line_id;
10052 EXIT WHEN l_lnk_asst_cur%NOTFOUND;
10053
10054 l_lnk_klev_rec := get_klev_rec(p_cle_id => l_lnk_line_id,
10055 x_no_data_found => l_no_data_found);
10056 IF l_no_data_found THEN
10057 NULL;
10058 --raise appropriate error
10059 ELSE
10060 l_lnk_klev_old_rec := l_lnk_klev_rec;
10061
10062 l_lnk_clev_rec := get_clev_rec(p_cle_id => l_lnk_line_id,
10063 x_no_data_found => l_no_data_found);
10064 IF l_no_data_found THEN
10065 NULL;
10066 --raise appropriate error
10067 ELSE
10068 l_lnk_clev_old_rec := l_lnk_clev_rec;
10069
10070 FOR l_new_lnk_assts_rec in l_new_lnk_assts_cur
10071 (p_chr_id => l_lnk_clev_old_rec.dnz_chr_id,
10072 p_cle_id => l_lnk_line_id) LOOP
10073
10074 l_lnk_klev_rec := get_klev_rec(p_cle_id => l_new_lnk_assts_rec.id,
10075 x_no_data_found => l_no_data_found);
10076 IF l_no_data_found THEN
10077 NULL;
10078 --raise appropriate error
10079 ELSE
10080 l_lnk_klev_old_rec.ESTIMATED_OEC := l_lnk_klev_old_rec.ESTIMATED_OEC - l_lnk_klev_rec.ESTIMATED_OEC;
10081 l_lnk_klev_old_rec.LAO_AMOUNT := l_lnk_klev_old_rec.LAO_AMOUNT - l_lnk_klev_rec.LAO_AMOUNT;
10082 l_lnk_klev_old_rec.FEE_CHARGE := l_lnk_klev_old_rec.FEE_CHARGE - l_lnk_klev_rec.FEE_CHARGE;
10083 l_lnk_klev_old_rec.INITIAL_DIRECT_COST := l_lnk_klev_old_rec.INITIAL_DIRECT_COST - l_lnk_klev_rec.INITIAL_DIRECT_COST;
10084 l_lnk_klev_old_rec.AMOUNT_STAKE := l_lnk_klev_old_rec.AMOUNT_STAKE - l_lnk_klev_rec.AMOUNT_STAKE;
10085 l_lnk_klev_old_rec.LRV_AMOUNT := l_lnk_klev_old_rec.LRV_AMOUNT - l_lnk_klev_rec.LRV_AMOUNT;
10086 l_lnk_klev_old_rec.COVERAGE := l_lnk_klev_old_rec.COVERAGE - l_lnk_klev_rec.COVERAGE;
10087 l_lnk_klev_old_rec.CAPITAL_REDUCTION := l_lnk_klev_old_rec.CAPITAL_REDUCTION - l_lnk_klev_rec.CAPITAL_REDUCTION;
10088 l_lnk_klev_old_rec.VENDOR_ADVANCE_PAID := l_lnk_klev_old_rec.VENDOR_ADVANCE_PAID - l_lnk_klev_rec.VENDOR_ADVANCE_PAID;
10089 l_lnk_klev_old_rec.TRADEIN_AMOUNT := l_lnk_klev_old_rec.TRADEIN_AMOUNT - l_lnk_klev_rec.TRADEIN_AMOUNT;
10090 l_lnk_klev_old_rec.BOND_EQUIVALENT_YIELD := l_lnk_klev_old_rec.BOND_EQUIVALENT_YIELD - l_lnk_klev_rec.BOND_EQUIVALENT_YIELD;
10091 l_lnk_klev_old_rec.TERMINATION_PURCHASE_AMOUNT :=l_lnk_klev_old_rec.TERMINATION_PURCHASE_AMOUNT - l_lnk_klev_rec.TERMINATION_PURCHASE_AMOUNT;
10092 l_lnk_klev_old_rec.REFINANCE_AMOUNT := l_lnk_klev_old_rec.REFINANCE_AMOUNT - l_lnk_klev_rec.REFINANCE_AMOUNT;
10093 l_lnk_klev_old_rec.REMARKETED_AMOUNT := l_lnk_klev_old_rec.REMARKETED_AMOUNT - l_lnk_klev_rec.REMARKETED_AMOUNT;
10094 l_lnk_klev_old_rec.REMARKET_MARGIN := l_lnk_klev_old_rec.REMARKET_MARGIN - l_lnk_klev_rec.REMARKET_MARGIN;
10095 l_lnk_klev_old_rec.REPURCHASED_AMOUNT := l_lnk_klev_old_rec.REPURCHASED_AMOUNT - l_lnk_klev_rec.REPURCHASED_AMOUNT;
10096 l_lnk_klev_old_rec.RESIDUAL_VALUE := l_lnk_klev_old_rec.RESIDUAL_VALUE - l_lnk_klev_rec.RESIDUAL_VALUE;
10097 l_lnk_klev_old_rec.APPRAISAL_VALUE := l_lnk_klev_old_rec.APPRAISAL_VALUE - l_lnk_klev_rec.APPRAISAL_VALUE;
10098 l_lnk_klev_old_rec.GAIN_LOSS := l_lnk_klev_old_rec.GAIN_LOSS - l_lnk_klev_rec.GAIN_LOSS;
10099 l_lnk_klev_old_rec.FLOOR_AMOUNT := l_lnk_klev_old_rec.FLOOR_AMOUNT -l_lnk_klev_rec.FLOOR_AMOUNT;
10100 l_lnk_klev_old_rec.TRACKED_RESIDUAL := l_lnk_klev_old_rec.TRACKED_RESIDUAL - l_lnk_klev_rec.TRACKED_RESIDUAL;
10101 l_lnk_klev_old_rec.AMOUNT := l_lnk_klev_old_rec.AMOUNT - l_lnk_klev_rec.AMOUNT;
10102 l_lnk_klev_old_rec.OEC := l_lnk_klev_old_rec.OEC - l_lnk_klev_rec.OEC;
10103 l_lnk_klev_old_rec.CAPITAL_AMOUNT := l_lnk_klev_old_rec.CAPITAL_AMOUNT - l_lnk_klev_rec.CAPITAL_AMOUNT;
10104 l_lnk_klev_old_rec.RESIDUAL_GRNTY_AMOUNT := l_lnk_klev_old_rec.RESIDUAL_GRNTY_AMOUNT - l_lnk_klev_rec.RESIDUAL_GRNTY_AMOUNT;
10105 l_lnk_klev_old_rec.RVI_PREMIUM := l_lnk_klev_old_rec.RVI_PREMIUM - l_lnk_klev_rec.RVI_PREMIUM;
10106 l_lnk_klev_old_rec.SUBSIDY_OVERRIDE_AMOUNT := l_lnk_klev_old_rec.SUBSIDY_OVERRIDE_AMOUNT - l_lnk_klev_rec.SUBSIDY_OVERRIDE_AMOUNT;
10107 END IF;
10108 END LOOP;
10109
10110 -- Split into units
10111 IF NVL(p_txdv_rec.split_percent,0) IN (0,OKL_API.G_MISS_NUM) THEN
10112
10113 --update contract line
10114 OKL_CONTRACT_PUB.update_contract_line(
10115 p_api_version => p_api_version,
10116 p_init_msg_list => p_init_msg_list,
10117 x_return_status => x_return_status,
10118 x_msg_count => x_msg_count,
10119 x_msg_data => x_msg_data,
10120 p_clev_rec => l_lnk_clev_old_rec,
10121 p_klev_rec => l_lnk_klev_old_rec,
10122 x_clev_rec => lx_lnk_clev_old_rec,
10123 x_klev_rec => lx_lnk_klev_old_rec);
10124 --dbms_output.put_line('After updating service fee link line :'||x_return_status);
10125 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
10126 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
10127 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
10128 RAISE OKL_API.G_EXCEPTION_ERROR;
10129 END IF;
10130
10131 -- Split into components
10132 ELSIF NVL(p_txdv_rec.split_percent,0) NOT IN (0,OKL_API.G_MISS_NUM) THEN
10133
10134 l_lnk_klev_rec := l_lnk_klev_old_rec;
10135 --
10136 l_lnk_clev_rec.price_unit := (l_split_factor * l_lnk_clev_rec.price_unit);
10137 l_lnk_clev_rec.price_negotiated := (l_split_factor * l_lnk_clev_rec.price_negotiated);
10138 l_lnk_clev_rec.price_negotiated_renewed := (l_split_factor * l_lnk_clev_rec.price_negotiated_renewed);
10139
10140 l_lnk_clev_rec.ORIG_SYSTEM_ID1 := l_lnk_clev_rec.ID;
10141 l_lnk_clev_rec.ID := OKL_API.G_MISS_NUM;
10142 l_lnk_clev_rec.OBJECT_VERSION_NUMBER := OKL_API.G_MISS_NUM;
10143 l_lnk_clev_rec.SFWT_FLAG := OKL_API.G_MISS_CHAR;
10144 l_lnk_clev_rec.LINE_NUMBER := OKL_API.G_MISS_NUM;
10145 l_lnk_clev_rec.DISPLAY_SEQUENCE := l_clev_rec.DISPLAY_SEQUENCE + 1;
10146
10147 l_lnk_clev_rec.ORIG_SYSTEM_SOURCE_CODE := 'OKL_SPLIT';
10148 l_lnk_clev_rec.CREATED_BY := OKL_API.G_MISS_NUM;
10149 l_lnk_clev_rec.CREATION_DATE := OKL_API.G_MISS_DATE;
10150 l_lnk_clev_rec.LAST_UPDATED_BY := OKL_API.G_MISS_NUM;
10151 l_lnk_clev_rec.LAST_UPDATE_DATE := OKL_API.G_MISS_DATE;
10152 l_lnk_clev_rec.LAST_UPDATE_LOGIN := OKL_API.G_MISS_NUM;
10153 --make new line as BOOKED
10154 l_lnk_clev_rec.STS_CODE := 'BOOKED';
10155 --bug# 3066375
10156 l_lnk_clev_rec.name := l_txdv_rec.asset_number;
10157 l_lnk_clev_rec.item_description := l_txdv_rec.description;
10158 ----
10159 l_lnk_klev_rec.ID := OKL_API.G_MISS_NUM;
10160 l_lnk_klev_rec.OBJECT_VERSION_NUMBER := OKL_API.G_MISS_NUM;
10161 l_lnk_klev_rec.CREATED_BY := OKL_API.G_MISS_NUM;
10162 l_lnk_klev_rec.CREATION_DATE := OKL_API.G_MISS_DATE;
10163 l_klev_rec.LAST_UPDATED_BY := OKL_API.G_MISS_NUM;
10164 l_klev_rec.LAST_UPDATE_DATE := OKL_API.G_MISS_DATE;
10165 l_klev_rec.LAST_UPDATE_LOGIN := OKL_API.G_MISS_NUM;
10166
10167 OKL_CONTRACT_PUB.create_contract_line(
10168 p_api_version => p_api_version,
10169 p_init_msg_list => p_init_msg_list,
10170 x_return_status => x_return_status,
10171 x_msg_count => x_msg_count,
10172 x_msg_data => x_msg_data,
10173 p_clev_rec => l_lnk_clev_rec,
10174 p_klev_rec => l_lnk_klev_rec,
10175 x_clev_rec => lx_lnk_clev_rec,
10176 x_klev_rec => lx_lnk_klev_rec);
10177 --dbms_output.put_line('After creating service fee link line :'||x_return_status);
10178 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
10179 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
10180 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
10181 RAISE OKL_API.G_EXCEPTION_ERROR;
10182 END IF;
10183
10184 END IF;
10185
10186 l_lnk_cimv_rec := get_cimv_rec(p_cle_id => l_lnk_line_id, x_no_data_found => l_no_data_found);
10187
10188 IF l_no_data_found THEN
10189 NULL;
10190 --raise appropriate error
10191 ELSE
10192 l_lnk_cimv_old_rec := l_lnk_cimv_rec;
10193
10194 -- Split into units
10195 IF NVL(p_txdv_rec.split_percent,0) IN (0,OKL_API.G_MISS_NUM) THEN
10196
10197 FOR l_new_lnk_assts_rec in l_new_lnk_assts_cur
10198 (p_chr_id => l_lnk_clev_old_rec.dnz_chr_id,
10199 p_cle_id => l_lnk_line_id) LOOP
10200
10201 l_lnk_cimv_rec := get_cimv_rec(p_cle_id => l_new_lnk_assts_rec.id,
10202 x_no_data_found => l_no_data_found);
10203 IF l_no_data_found THEN
10204 NULL;
10205 --raise appropriate error
10206 ELSE
10207 --number of items will be split in case of normal split asset
10208 l_lnk_cimv_old_rec.NUMBER_OF_ITEMS := l_lnk_cimv_old_rec.NUMBER_OF_ITEMS - l_lnk_cimv_rec.NUMBER_OF_ITEMS;
10209 END IF;
10210 END LOOP;
10211
10212 --update original item record
10213 OKL_OKC_MIGRATION_PVT.update_contract_item( p_api_version => p_api_version,
10214 p_init_msg_list => p_init_msg_list,
10215 x_return_status => x_return_status,
10216 x_msg_count => x_msg_count,
10217 x_msg_data => x_msg_data,
10218 p_cimv_rec => l_lnk_cimv_old_rec,
10219 x_cimv_rec => lx_lnk_cimv_old_rec);
10220
10221 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
10222 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
10223 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
10224 RAISE OKL_API.G_EXCEPTION_ERROR;
10225 END IF;
10226
10227 -- Split into components
10228 ELSIF NVL(p_txdv_rec.split_percent,0) NOT IN (0,OKL_API.G_MISS_NUM) THEN
10229
10230 l_lnk_cimv_rec.ID := OKL_API.G_MISS_NUM;
10231 l_lnk_cimv_rec.OBJECT_VERSION_NUMBER := OKL_API.G_MISS_NUM;
10232 l_lnk_cimv_rec.OBJECT1_ID1 := TO_CHAR(p_cle_id);
10233 l_lnk_cimv_rec.CLE_ID := lx_lnk_clev_rec.id;
10234
10235 l_lnk_cimv_rec.CREATED_BY := OKL_API.G_MISS_NUM;
10236 l_lnk_cimv_rec.CREATION_DATE := OKL_API.G_MISS_DATE;
10237 l_lnk_cimv_rec.LAST_UPDATED_BY := OKL_API.G_MISS_NUM;
10238 l_lnk_cimv_rec.LAST_UPDATE_DATE := OKL_API.G_MISS_DATE;
10239 l_lnk_cimv_rec.LAST_UPDATE_LOGIN := OKL_API.G_MISS_NUM;
10240
10241 OKL_OKC_MIGRATION_PVT.create_contract_item( p_api_version => p_api_version,
10242 p_init_msg_list => p_init_msg_list,
10243 x_return_status => x_return_status,
10244 x_msg_count => x_msg_count,
10245 x_msg_data => x_msg_data,
10246 p_cimv_rec => l_lnk_cimv_rec,
10247 x_cimv_rec => lx_lnk_cimv_rec);
10248
10249 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
10250 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
10251 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
10252 RAISE OKL_API.G_EXCEPTION_ERROR;
10253 END IF;
10254 END IF;
10255
10256 END IF; -- cimv rec found
10257 END IF; -- clev rec found
10258 END IF; --klev rec found
10259
10260 l_strm_type_id := NULL;
10261 OPEN l_sll_cur(p_cle_id => l_lnk_line_id);
10262 LOOP
10263 FETCH l_sll_cur INTO l_sll_rec;
10264 EXIT WHEN l_sll_cur%NOTFOUND;
10265
10266 l_sll_amount := TO_NUMBER(l_sll_rec.amount_sll);
10267 l_stub_amount := TO_NUMBER(l_sll_rec.amount_stub);
10268
10269 l_split_pymt_sum := 0;
10270
10271 -- Split into units
10272 IF NVL(p_txdv_rec.split_percent,0) IN (0,OKL_API.G_MISS_NUM) THEN
10273 l_target_kle_id := p_txlv_rec.kle_id;
10274
10275 -- Split into components
10276 ELSE
10277 open l_fa_line_csr(p_chr_id => p_txlv_rec.dnz_khr_id
10278 ,p_cle_id => p_cle_id);
10279 fetch l_fa_line_csr into l_target_kle_id;
10280 close l_fa_line_csr;
10281 END IF;
10282
10283 FOR l_txd_rec in l_txd_csr(p_tal_id => p_txlv_rec.id
10284 ,p_cle_id => l_target_kle_id)
10285 LOOP
10286
10287 IF NVL(p_txdv_rec.split_percent,0) IN (0,OKL_API.G_MISS_NUM) THEN
10288 l_sll_split_factor := l_txd_rec.quantity/p_txlv_rec.current_units;
10289 ELSE
10290 l_sll_split_factor := l_txd_rec.split_percent/100;
10291 END IF;
10292
10293 IF NVL(l_sll_amount,OKL_API.G_MISS_NUM) <> OKL_API.G_MISS_NUM THEN
10294 l_split_pymt := l_sll_amount * l_sll_split_factor;
10295 ELSIF NVL(l_stub_amount,OKL_API.G_MISS_NUM) <> OKL_API.G_MISS_NUM THEN
10296 l_split_pymt := l_stub_amount * l_sll_split_factor;
10297 END IF;
10298
10299 okl_accounting_util.round_amount(
10300 p_api_version => p_api_version,
10301 p_init_msg_list => p_init_msg_list,
10302 x_return_status => x_return_status,
10303 x_msg_count => x_msg_count,
10304 x_msg_data => x_msg_data,
10305 p_amount => l_split_pymt,
10306 p_currency_code => l_sll_rec.currency_code,
10307 p_round_option => 'STM',
10308 x_rounded_amount => l_rounded_amount
10309 );
10310 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
10311 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
10312 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
10313 RAISE OKL_API.G_EXCEPTION_ERROR;
10314 END IF;
10315
10316 l_split_pymt_sum := l_split_pymt_sum + l_rounded_amount;
10317
10318 END LOOP;
10319
10320 -- Split into units
10321 IF NVL(p_txdv_rec.split_percent,0) IN (0,OKL_API.G_MISS_NUM) THEN
10322
10323 --update the rule record
10324 l_rulv_rec.id := l_sll_rec.sll_id;
10325 IF NVL(l_sll_amount,OKL_API.G_MISS_NUM) <> OKL_API.G_MISS_NUM THEN
10326 l_rulv_rec.rule_information6 := TO_CHAR(l_sll_amount - l_split_pymt_sum);
10327 ELSIF NVL(l_sll_amount,OKL_API.G_MISS_NUM) = OKL_API.G_MISS_NUM THEN
10328 l_rulv_rec.rule_information6 := NULL;
10329 END IF;
10330
10331 IF NVL(l_stub_amount,OKL_API.G_MISS_NUM) <> OKL_API.G_MISS_NUM THEN
10332 l_rulv_rec.rule_information8 := TO_CHAR(l_stub_amount - l_split_pymt_sum);
10333 ELSIF NVL(l_stub_amount,OKL_API.G_MISS_NUM) = OKL_API.G_MISS_NUM THEN
10334 l_rulv_rec.rule_information8 := NULL;
10335 END IF;
10336
10337 OKL_RULE_PUB.update_rule(
10338 p_api_version => p_api_version,
10339 p_init_msg_list => p_init_msg_list,
10340 x_return_status => x_return_status,
10341 x_msg_count => x_msg_count,
10342 x_msg_data => x_msg_data,
10343 p_rulv_rec => l_rulv_rec,
10344 x_rulv_rec => l_rulv_rec_out);
10345
10346 --dbms_output.put_line('After updating payments :'||x_return_status);
10347 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
10348 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
10349 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
10350 RAISE OKL_API.G_EXCEPTION_ERROR;
10351 END IF;
10352
10353 -- Split into components
10354 ELSIF NVL(p_txdv_rec.split_percent,0) NOT IN (0,OKL_API.G_MISS_NUM) THEN
10355
10356 IF l_sll_cur%RowCount = 1 THEN
10357 l_rgpv_rec.rgd_code := 'LALEVL';
10358 l_rgpv_rec.cle_id := lx_lnk_clev_rec.id;
10359 l_rgpv_rec.dnz_chr_id := lx_lnk_clev_rec.dnz_chr_id;
10360 l_rgpv_rec.rgp_type := 'KRG';
10361
10362 OKL_RULE_PUB.create_rule_group(
10363 p_api_version => p_api_version,
10364 p_init_msg_list => p_init_msg_list,
10365 x_return_status => x_return_status,
10366 x_msg_count => x_msg_count,
10367 x_msg_data => x_msg_data,
10368 p_rgpv_rec => l_rgpv_rec,
10369 x_rgpv_rec => lx_rgpv_rec);
10370
10371 --dbms_output.put_line('After updating payments :'||x_return_status);
10372 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
10373 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
10374 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
10375 RAISE OKL_API.G_EXCEPTION_ERROR;
10376 END IF;
10377 END IF;
10378
10379 --Bug# 3897490
10380 IF (l_strm_type_id IS NULL OR l_strm_type_id <> l_sll_rec.strm_type_id1) THEN
10381 --30-oct-03 : 3143522 - SLH should be created only once
10382 --create slh
10383 l_slh_rulv_rec.rgp_id := lx_rgpv_rec.id;
10384 l_slh_rulv_rec.rule_information_category := 'LASLH';
10385 l_slh_rulv_rec.jtot_object1_code := l_sll_rec.strm_type_source;
10386 l_slh_rulv_rec.object1_id1 := l_sll_rec.strm_type_id1;
10387 l_slh_rulv_rec.object1_id2 := l_sll_rec.strm_type_id2;
10388 l_slh_rulv_rec.dnz_chr_id := lx_rgpv_rec.dnz_chr_id;
10389 l_slh_rulv_rec.std_template_yn := 'N';
10390 l_slh_rulv_rec.warn_yn := 'N';
10391 l_slh_rulv_rec.template_yn := 'N';
10392
10393 OKL_RULE_PUB.create_rule(
10394 p_api_version => p_api_version,
10395 p_init_msg_list => p_init_msg_list,
10396 x_return_status => x_return_status,
10397 x_msg_count => x_msg_count,
10398 x_msg_data => x_msg_data,
10399 p_rulv_rec => l_slh_rulv_rec,
10400 x_rulv_rec => lx_slh_rulv_rec);
10401
10402 --dbms_output.put_line('After updating payments :'||x_return_status);
10403 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
10404 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
10405 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
10406 RAISE OKL_API.G_EXCEPTION_ERROR;
10407 END IF;
10408
10409 --Bug# 3897490
10410 l_strm_type_id := l_sll_rec.strm_type_id1;
10411 END IF;
10412
10413 --create sll
10414 l_sll_rulv_rec.dnz_chr_id := lx_rgpv_rec.dnz_chr_id;
10415 l_sll_rulv_rec.rgp_id := lx_rgpv_rec.id;
10416 l_sll_rulv_rec.std_template_yn := lx_slh_rulv_rec.std_template_yn;
10417 l_sll_rulv_rec.warn_yn := lx_slh_rulv_rec.warn_yn;
10418 l_sll_rulv_rec.template_yn := lx_slh_rulv_rec.template_yn;
10419 l_sll_rulv_rec.rule_information_category := 'LASLL';
10420 l_sll_rulv_rec.jtot_object1_code := l_sll_rec.jtot_object1_code;
10421 l_sll_rulv_rec.object1_id1 := l_sll_rec.object1_id1;
10422 l_sll_rulv_rec.object1_id2 := l_sll_Rec.object1_id2;
10423 l_sll_rulv_rec.jtot_object2_code := l_sll_rec.jtot_object2_code;
10424 l_sll_rulv_rec.object2_id1 := lx_slh_rulv_rec.id;
10425 -- ansethur 28-feb-08 bug # 6697542
10426 l_sll_rulv_rec.object2_id2 := '#' ; -- l_sll_rec.object2_id2;
10427 -- ansethur 28-feb-08 bug # 6697542
10428 l_sll_rulv_rec.rule_information1 := l_sll_rec.rule_information1;
10429 l_sll_rulv_rec.rule_information2 := l_sll_rec.rule_information2;
10430 l_sll_rulv_rec.rule_information3 := l_sll_rec.rule_information3;
10431 l_sll_rulv_rec.rule_information4 := l_sll_rec.rule_information4;
10432 l_sll_rulv_rec.rule_information5 := l_sll_rec.rule_information5;
10433
10434 IF NVL(TO_NUMBER(l_sll_rec.amount_sll),OKL_API.G_MISS_NUM) <> OKL_API.G_MISS_NUM THEN
10435
10436 --Bug# 4028371
10437 --Bug# 3502142: Use Streams Rounding Option
10438 l_updated_sll_amount := TO_NUMBER(l_sll_rec.amount_sll) - l_split_pymt_sum;
10439 okl_accounting_util.round_amount(
10440 p_api_version => p_api_version,
10441 p_init_msg_list => p_init_msg_list,
10442 x_return_status => x_return_status,
10443 x_msg_count => x_msg_count,
10444 x_msg_data => x_msg_data,
10445 p_amount => l_updated_sll_amount,
10446 p_currency_code => l_sll_rec.currency_code,
10447 p_round_option => 'STM',
10448 x_rounded_amount => l_rounded_amount
10449 );
10450 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
10451 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
10452 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
10453 RAISE OKL_API.G_EXCEPTION_ERROR;
10454 END IF;
10455
10456 l_updated_sll_amount := l_rounded_amount;
10457 l_sll_rulv_rec.rule_information6 := l_updated_sll_amount;
10458
10459 ELSIF NVL(TO_NUMBER(l_sll_rec.amount_sll),OKL_API.G_MISS_NUM) = OKL_API.G_MISS_NUM THEN
10460 l_sll_rulv_rec.rule_information6 := NULL;
10461 END IF;
10462 l_sll_rulv_rec.rule_information7 := l_sll_rec.rule_information7;
10463 --Bug# 2757289 : For stup payments
10464 IF NVL(TO_NUMBER(l_sll_rec.amount_stub),OKL_API.G_MISS_NUM) <> OKL_API.G_MISS_NUM THEN
10465
10466 --Bug# 4028371
10467 --Bug# 3502142: Use Streams Rounding Option
10468 l_updated_stub_amount := TO_NUMBER(l_sll_rec.amount_stub) - l_split_pymt_sum;
10469 okl_accounting_util.round_amount(
10470 p_api_version => p_api_version,
10471 p_init_msg_list => p_init_msg_list,
10472 x_return_status => x_return_status,
10473 x_msg_count => x_msg_count,
10474 x_msg_data => x_msg_data,
10475 p_amount => l_updated_stub_amount,
10476 p_currency_code => l_sll_rec.currency_code,
10477 p_round_option => 'STM',
10478 x_rounded_amount => l_rounded_amount
10479 );
10480 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
10481 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
10482 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
10483 RAISE OKL_API.G_EXCEPTION_ERROR;
10484 END IF;
10485
10486 l_updated_stub_amount := l_rounded_amount;
10487 l_sll_rulv_rec.rule_information8 := l_updated_stub_amount;
10488
10489 ELSIF NVL(TO_NUMBER(l_sll_rec.amount_stub),OKL_API.G_MISS_NUM) = OKL_API.G_MISS_NUM THEN
10490 l_sll_rulv_rec.rule_information8 := NULL;
10491 END IF;
10492 --l_sll_rulv_rec.rule_information8 := l_sll_rec.rule_information8;
10493 l_sll_rulv_rec.rule_information9 := l_sll_rec.rule_information9;
10494 l_sll_rulv_rec.rule_information10 := l_sll_rec.rule_information10;
10495 l_sll_rulv_rec.rule_information11 := l_sll_rec.rule_information11;
10496 l_sll_rulv_rec.rule_information12 := l_sll_rec.rule_information12;
10497 l_sll_rulv_rec.rule_information13 := l_sll_rec.rule_information13;
10498 l_sll_rulv_rec.rule_information14 := l_sll_rec.rule_information14;
10499 l_sll_rulv_rec.rule_information15 := l_sll_rec.rule_information15;
10500
10501 OKL_RULE_PUB.create_rule(
10502 p_api_version => p_api_version,
10503 p_init_msg_list => p_init_msg_list,
10504 x_return_status => x_return_status,
10505 x_msg_count => x_msg_count,
10506 x_msg_data => x_msg_data,
10507 p_rulv_rec => l_sll_rulv_rec,
10508 x_rulv_rec => lx_sll_rulv_rec);
10509
10510 --dbms_output.put_line('After updating payments :'||x_return_status);
10511 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
10512 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
10513 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
10514 RAISE OKL_API.G_EXCEPTION_ERROR;
10515 END IF;
10516
10517 END IF;
10518
10519 END LOOP;
10520 CLOSE l_sll_cur;
10521 END LOOP;
10522 CLOSE l_lnk_asst_cur;
10523 END IF;
10524 --will also have to think about UBB
10525
10526 --Bug# 6344223
10527 --update unit cost
10528 adjust_unit_cost(p_api_version => p_api_version,
10529 p_init_msg_list =>p_init_msg_list,
10530 x_return_status =>x_return_status,
10531 x_msg_count =>x_msg_count,
10532 x_msg_data =>x_msg_data,
10533 p_cle_id =>l_fa_line_id ,
10534 p_txdv_rec =>p_txdv_rec,
10535 p_txlv_rec =>p_txlv_rec
10536 );
10537 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
10538 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
10539 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
10540 RAISE OKL_API.G_EXCEPTION_ERROR;
10541 END IF;
10542
10543 -- Bug# 6344223
10544
10545 OKL_API.END_ACTIVITY (x_msg_count,
10546 x_msg_data );
10547 EXCEPTION
10548 WHEN OKL_API.G_EXCEPTION_ERROR THEN
10549 x_return_status := OKL_API.HANDLE_EXCEPTIONS(
10550 l_api_name,
10551 G_PKG_NAME,
10552 'OKL_API.G_RET_STS_ERROR',
10553 x_msg_count,
10554 x_msg_data,
10555 '_PVT');
10556 WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
10557 x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
10558 l_api_name,
10559 G_PKG_NAME,
10560 'OKL_API.G_RET_STS_UNEXP_ERROR',
10561 x_msg_count,
10562 x_msg_data,
10563 '_PVT');
10564 WHEN OTHERS THEN
10565 x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
10566 l_api_name,
10567 G_PKG_NAME,
10568 'OTHERS',
10569 x_msg_count,
10570 x_msg_data,
10571 '_PVT');
10572 END Adjust_Split_Lines;
10573 --------------------------------------------------------------------------------
10574 --Start of Comments
10575 --Procedure Name : ABANDON_PARENT_ASSET
10576 --Description : Abandons Parent Asset for Split Asset Component Parent
10577 --History :
10578 -- 24-Jul-2002 ashish.singh Created
10579 --End of Comments
10580 --------------------------------------------------------------------------------
10581 PROCEDURE ABANDON_PARENT_ASSET(
10582 p_api_version IN NUMBER,
10583 p_init_msg_list IN VARCHAR2 DEFAULT OKL_API.G_FALSE,
10584 x_return_status OUT NOCOPY VARCHAR2,
10585 x_msg_count OUT NOCOPY NUMBER,
10586 x_msg_data OUT NOCOPY VARCHAR2,
10587 p_cle_id IN NUMBER) IS
10588
10589 l_return_status VARCHAR2(1) DEFAULT OKL_API.G_RET_STS_SUCCESS;
10590 l_api_name CONSTANT VARCHAR2(30) := 'ABANDON_PARENT_ASSET';
10591 l_api_version CONSTANT NUMBER := 1.0;
10592
10593 CURSOR c_lines_cur(p_cle_id IN NUMBER) IS
10594 SELECT LEVEL,
10595 id,
10596 chr_id,
10597 cle_id,
10598 dnz_chr_id,
10599 lse_id
10600 FROM okc_k_lines_b
10601 CONNECT BY PRIOR id = cle_id
10602 START WITH id = p_cle_id;
10603
10604 c_lines_rec c_lines_cur%ROWTYPE;
10605 l_clev_rec okl_okc_migration_pvt.clev_rec_type;
10606 lx_clev_rec okl_okc_migration_pvt.clev_rec_type;
10607
10608 --Bug#3066375 :
10609 --Cursor to fetch linked asset lines for parent asset being abandoned
10610 CURSOR l_lnk_asst_csr (p_cle_id IN NUMBER) IS
10611 SELECT lnk_cleb.id lnk_cle_id
10612 FROM okc_k_lines_b lnk_cleb,
10613 okc_line_styles_b lnk_lseb,
10614 okc_statuses_b lnk_stsb,
10615 okc_k_items lnk_cim
10616 WHERE lnk_cleb.id = lnk_cim.cle_id
10617 AND lnk_cleb.dnz_chr_id = lnk_cim.dnz_chr_id
10618 AND lnk_cleb.lse_id = lnk_lseb.id
10619 AND lnk_lseb.lty_code IN
10620 ('LINK_FEE_ASSET','LINK_SERV_ASSET','LINK_USAGE_ASSET')
10621 AND lnk_cleb.sts_code = lnk_stsb.code
10622 AND lnk_stsb.ste_code NOT IN ('HOLD','EXPIRED','TERMINATED','CANCELLED')
10623 AND lnk_cim.object1_id1 = TO_CHAR(p_cle_id)
10624 AND lnk_cim.object1_id2 = '#'
10625 AND lnk_cim.jtot_object1_code = 'OKX_COVASST';
10626
10627 l_lnk_cle_id okc_k_lines_b.id%TYPE;
10628 l_lnk_clev_rec okl_okc_migration_pvt.clev_rec_type;
10629 lx_lnk_clev_rec okl_okc_migration_pvt.clev_rec_type;
10630
10631 BEGIN
10632 -----
10633 x_return_status := OKL_API.G_RET_STS_SUCCESS;
10634 -- Call start_activity to create savepoint, check compatibility
10635 -- and initialize message list
10636 x_return_status := OKL_API.START_ACTIVITY (
10637 l_api_name
10638 ,p_init_msg_list
10639 ,'_PVT'
10640 ,x_return_status);
10641 -- Check if activity started successfully
10642 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
10643 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
10644 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
10645 RAISE OKL_API.G_EXCEPTION_ERROR;
10646 END IF;
10647
10648 OPEN c_lines_cur(p_cle_id => p_cle_id);
10649 LOOP
10650 FETCH c_lines_cur INTO c_lines_rec;
10651 EXIT WHEN c_lines_cur%NOTFOUND;
10652 l_clev_rec.id := c_lines_rec.id;
10653 l_clev_rec.sts_code := 'ABANDONED';
10654
10655 okl_okc_migration_pvt.update_contract_line(
10656 p_api_version => p_api_version,
10657 p_init_msg_list => p_init_msg_list,
10658 x_return_status => x_return_status,
10659 x_msg_count => x_msg_count,
10660 x_msg_data => x_msg_data,
10661 p_clev_rec => l_clev_rec,
10662 x_clev_rec => lx_clev_rec);
10663
10664 --Bug# 3066375 : abandon linked asset lines
10665 OPEN l_lnk_asst_csr(p_cle_id => p_cle_id);
10666 LOOP
10667 FETCH l_lnk_asst_csr INTO l_lnk_cle_id;
10668 EXIT WHEN l_lnk_asst_csr%NOTFOUND;
10669 l_lnk_clev_rec.id := l_lnk_cle_id;
10670 l_lnk_clev_rec.sts_code := 'ABANDONED';
10671
10672 okl_okc_migration_pvt.update_contract_line(
10673 p_api_version => p_api_version,
10674 p_init_msg_list => p_init_msg_list,
10675 x_return_status => x_return_status,
10676 x_msg_count => x_msg_count,
10677 x_msg_data => x_msg_data,
10678 p_clev_rec => l_lnk_clev_rec,
10679 x_clev_rec => lx_lnk_clev_rec);
10680
10681 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
10682 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
10683 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
10684 RAISE OKL_API.G_EXCEPTION_ERROR;
10685 END IF;
10686
10687 END LOOP;
10688 CLOSE l_lnk_asst_csr;
10689 --Bug# 3066375 end.
10690
10691 END LOOP;
10692 CLOSE c_lines_cur;
10693 --will also have to think about UBB
10694 OKL_API.END_ACTIVITY (x_msg_count,
10695 x_msg_data );
10696 EXCEPTION
10697 WHEN OKL_API.G_EXCEPTION_ERROR THEN
10698 x_return_status := OKL_API.HANDLE_EXCEPTIONS(
10699 l_api_name,
10700 G_PKG_NAME,
10701 'OKL_API.G_RET_STS_ERROR',
10702 x_msg_count,
10703 x_msg_data,
10704 '_PVT');
10705 WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
10706 x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
10707 l_api_name,
10708 G_PKG_NAME,
10709 'OKL_API.G_RET_STS_UNEXP_ERROR',
10710 x_msg_count,
10711 x_msg_data,
10712 '_PVT');
10713 WHEN OTHERS THEN
10714 x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
10715 l_api_name,
10716 G_PKG_NAME,
10717 'OTHERS',
10718 x_msg_count,
10719 x_msg_data,
10720 '_PVT');
10721 END ABANDON_PARENT_ASSET;
10722
10723 --Bug# 6061103
10724 PROCEDURE is_evergreen_df_lease
10725 (p_api_version IN NUMBER,
10726 p_init_msg_list IN VARCHAR2,
10727 x_return_status OUT NOCOPY VARCHAR2,
10728 x_msg_count OUT NOCOPY NUMBER,
10729 x_msg_data OUT NOCOPY VARCHAR2,
10730 p_cle_id IN NUMBER,
10731 p_book_type_code IN VARCHAR2,
10732 p_asset_status IN VARCHAR2,
10733 p_pdt_id IN NUMBER,
10734 p_start_date IN DATE,
10735 x_amortization_date OUT NOCOPY DATE,
10736 x_special_treatment_required OUT NOCOPY VARCHAR2
10737 ) IS
10738 l_return_status VARCHAR2(1) default OKL_API.G_RET_STS_SUCCESS;
10739 l_api_name CONSTANT varchar2(30) := 'is_evergreen_df_lease';
10740 l_api_version CONSTANT NUMBER := 1.0;
10741 --cursor to find book class
10742 CURSOR l_book_class_cur(p_book_type_code IN VARCHAR2) IS
10743 SELECT book_class
10744 FROM okx_asst_bk_controls_v
10745 WHERE book_type_code = p_book_type_code;
10746 l_book_class okx_asst_bk_controls_v.book_class%TYPE;
10747 l_contract_number OKC_K_HEADERS_B.contract_number%TYPE;
10748 l_scs_code Varchar2(30);
10749 l_sts_code Varchar2(30);
10750 l_deal_type Varchar2(30);
10751 l_pdt_id Number;
10752 l_start_date Date;
10753 l_asset_status okc_k_lines_b.sts_code%TYPE;
10754 l_chr_id NUMBER;
10755 l_amortization_date DATE;
10756 l_special_treatment_required VARCHAR2(1);
10757 l_pdt_date DATE;
10758 l_pdtv_rec okl_setupproducts_pub.pdtv_rec_type;
10759 l_pdt_parameter_rec okl_setupproducts_pub.pdt_parameters_rec_type;
10760 l_rep_pdt_parameter_rec okl_setupproducts_pub.pdt_parameters_rec_type;
10761 l_reporting_product OKL_PRODUCTS_V.NAME%TYPE;
10762 l_no_data_found BOOLEAN;
10763 l_rep_pdt_id NUMBER;
10764 l_rep_deal_type okl_product_parameters_v.deal_type%TYPE;
10765 l_tax_owner Varchar2(150);
10766 l_rep_tax_owner Varchar2(150);
10767 l_Multi_GAAP_YN Varchar2(1);
10768 l_mg_rep_book fa_book_controls.book_type_code%TYPE;
10769 l_amortization_start_date DATE:=NULL;
10770 -- CURSOR TO GET MAX OFF LEASE TRX DATESELECT
10771 Cursor tax_off_trx_amt(p_asset_id in number, p_tax_book in varchar2) is
10772 select tas.date_trans_occurred
10773 FROM OKL_TRX_ASSETS tas,
10774 OKL_TXL_ASSETS_B tal,
10775 OKL_TXD_ASSETS_B txl
10776 WHERE tas.id = tal.tas_id
10777 AND tal.id = txl.tal_id
10778 AND txl.tax_book = p_tax_book
10779 AND tas.tsu_code = 'PROCESSED'
10780 AND tas.tas_type in ('AMT')
10781 And tal.kle_id = p_asset_id;
10782 Cursor corp_off_trx_amt(p_asset_id in number, p_corp_book in varchar2) is
10783 SELECT
10784 tas.date_trans_occurred
10785 FROM OKL_TRX_ASSETS tas,
10786 OKL_TXL_ASSETS_B tal,
10787 OKL_TXD_ASSETS_B txd
10788 WHERE tas.id = tal.tas_id
10789 AND tal.corporate_book = P_corp_book
10790 AND tas.tsu_code = 'PROCESSED'
10791 AND tas.tas_type in ('AMT')
10792 And tal.kle_id = p_asset_id
10793 AND tal.id = txd.tal_id(+)
10794 AND TAX_BOOK IS NULL ;
10795 Cursor tax_off_trx_aus(p_asset_id in number, p_tax_book in varchar2) is
10796 select tas.date_trans_occurred
10797 FROM OKL_TRX_ASSETS tas,
10798 OKL_TXL_ASSETS_B tal,
10799 OKL_TXD_ASSETS_B txl
10800 WHERE tas.id = tal.tas_id
10801 AND tal.id = txl.tal_id
10802 AND txl.tax_book = p_tax_book
10803 AND tas.tsu_code = 'PROCESSED'
10804 AND tas.tas_type in ('AUS')
10805 And tal.kle_id = p_asset_id;
10806 Cursor corp_off_trx_aus(p_asset_id in number, p_corp_book in varchar2) is
10807 SELECT
10808 tas.date_trans_occurred
10809 FROM OKL_TRX_ASSETS tas,
10810 OKL_TXL_ASSETS_B tal,
10811 OKL_TXD_ASSETS_B txd
10812 WHERE tas.id = tal.tas_id
10813 AND tal.corporate_book = P_corp_book
10814 AND tas.tsu_code = 'PROCESSED'
10815 AND tas.tas_type in ('AUS')
10816 And tal.kle_id = p_asset_id
10817 AND tal.id = txd.tal_id(+)
10818 AND TAX_BOOK IS NULL ;
10819 l_trans_date_aus DATE;
10820 l_trans_date_amt DATE;
10821 BEGIN
10822 --call start activity to set savepoint
10823 l_return_status := OKL_API.START_ACTIVITY( substr(l_api_name,1,26),
10824 p_init_msg_list,
10825 '_PVT',
10826 x_return_status);
10827 IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
10828 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
10829 ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
10830 RAISE OKL_API.G_EXCEPTION_ERROR;
10831 END IF;
10832 l_pdtv_rec.id := p_pdt_id;
10833 l_no_data_found := TRUE;
10834 l_pdt_date :=p_start_date;
10835 okl_setupproducts_pub.Getpdt_parameters(p_api_version => p_api_version,
10836 p_init_msg_list => p_init_msg_list,
10837 x_return_status => l_return_status,
10838 x_no_data_found => l_no_data_found,
10839 x_msg_count => x_msg_count,
10840 x_msg_data => x_msg_data,
10841 p_pdtv_rec => l_pdtv_rec,
10842 p_product_date => l_pdt_date,
10843 p_pdt_parameter_rec => l_pdt_parameter_rec);
10844 IF l_return_status <> OKC_API.G_RET_STS_SUCCESS THEN
10845 -- Error getting financial product parameters for contract CONTRACT_NUMBER.
10846 OKC_API.set_message( p_app_name => 'OKL',
10847 p_msg_name => 'OKL_AM_FIN_PROD_PARAM_ERR',
10848 p_token1 => 'CONTRACT_NUMBER',
10849 p_token1_value => l_contract_number);
10850 RAISE OKL_API.G_EXCEPTION_ERROR;
10851 END IF;
10852 --dbms_output.put_line('l_pdt_parameter_rec.reporting_pdt_id '||l_pdt_parameter_rec.reporting_pdt_id );
10853 l_mg_rep_book :=NULL;
10854 if l_pdt_parameter_rec.reporting_pdt_id IS NULL Then
10855 l_rep_pdt_id := Null;
10856 l_tax_owner := l_pdt_parameter_rec.tax_owner;
10857 l_deal_type := l_pdt_parameter_rec.deal_type;
10858 l_rep_deal_type := Null;
10859 l_rep_tax_owner :=NULL;
10860 Else
10861 l_rep_pdt_id := l_pdt_parameter_rec.reporting_pdt_id;
10862 l_tax_owner := l_pdt_parameter_rec.tax_owner;
10863 l_deal_type := l_pdt_parameter_rec.deal_type;
10864 --get reporting product param values
10865 l_no_data_found := TRUE;
10866 l_pdtv_rec.id := l_rep_pdt_id;
10867 IF l_rep_pdt_id IS NOT NULL AND l_rep_pdt_id <> OKC_API.G_MISS_NUM THEN
10868 okl_setupproducts_pub.Getpdt_parameters(p_api_version => p_api_version,
10869 p_init_msg_list => p_init_msg_list,
10870 x_return_status => l_return_status,
10871 x_no_data_found => l_no_data_found,
10872 x_msg_count => x_msg_count,
10873 x_msg_data => x_msg_data,
10874 p_pdtv_rec => l_pdtv_rec,
10875 p_product_date => l_pdt_date,
10876 p_pdt_parameter_rec => l_rep_pdt_parameter_rec);
10877 IF l_return_status <> OKL_API.G_RET_STS_SUCCESS Then
10878 -- Error getting reporting product parameters for contract CONTRACT_NUMBER.
10879 OKC_API.set_message( p_app_name => 'OKL',
10880 p_msg_name => 'OKL_AM_REP_PROD_PARAM_ERR',
10881 p_token1 => 'CONTRACT_NUMBER',
10882 p_token1_value => l_contract_number);
10883 RAISE OKL_API.G_EXCEPTION_ERROR;
10884 Else
10885 l_rep_deal_type := l_rep_pdt_parameter_rec.deal_type;
10886 l_rep_tax_owner := l_rep_pdt_parameter_rec.tax_owner;
10887 IF l_rep_deal_type IS NULL OR l_rep_deal_type = OKC_API.G_MISS_CHAR THEN
10888 --Deal Type not defined for Reporting product REP_PROD.
10889 OKC_API.set_message( p_app_name => 'OKL',
10890 p_msg_name => 'OKL_AM_NO_MG_DEAL_TYPE',
10891 p_token1 => 'REP_PROD',
10892 p_token1_value => l_reporting_product);
10893 RAISE OKL_API.G_EXCEPTION_ERROR;
10894 End If;
10895 l_Multi_GAAP_YN := 'Y';
10896 End If;
10897 -- get the MG reporting book
10898 -- Bug#6695409
10899 l_mg_rep_book := OKL_SYSTEM_PARAMS_ALL_PUB.get_system_param_value(OKL_SYSTEM_PARAMS_ALL_PUB.G_RPT_PROD_BOOK_TYPE_CODE);
10900
10901 IF l_mg_rep_book IS NULL THEN
10902 --Multi GAAP Reporting Book is not defined.
10903 OKL_API.set_message( p_app_name => 'OKL',
10904 p_msg_name => 'OKL_AM_NO_MG_REP_BOOK');
10905 RAISE OKL_API.G_EXCEPTION_ERROR;
10906 END IF; --mg book
10907 END IF; --l_rep_pdt_id IS not null
10908 END IF; --reporting_pdt_id IS NULL
10909 l_book_class := NULL;
10910 OPEN l_book_class_cur(p_book_type_code => p_book_type_code);
10911 FETCH l_book_class_cur INTO l_book_class;
10912 IF l_book_class_cur%NOTFOUND THEN
10913 NULL;
10914 END IF;
10915 CLOSE l_book_class_cur;
10916 l_special_treatment_required :='N';
10917 IF p_asset_status IN ('TERMINATED','EXPIRED','EVERGREEN') THEN
10918 IF (l_book_class = 'CORPORATE') AND (l_deal_type in ('LEASEDF','LEASEST')) then
10919 --rirawat
10920 open corp_off_trx_aus(p_cle_id , p_book_type_code);
10921 FETCH corp_off_trx_aus INTO l_amortization_date;
10922 close corp_off_trx_aus ;
10923 IF l_amortization_date IS NULL THEN
10924 open corp_off_trx_amt(p_cle_id , p_book_type_code);
10925 FETCH corp_off_trx_amt INTO l_amortization_date;
10926 close corp_off_trx_amt ;
10927 END IF ;
10928 --l_amortization_date := sysdate;
10929 l_special_treatment_required := 'Y';
10930 elsif ((l_book_class = 'TAX') and (l_Multi_GAAP_YN = 'Y') and (l_rep_deal_type in ('LEASEDF','LEASEST')) and (p_book_type_code = l_mg_rep_book)) then
10931 --rirawat
10932 open tax_off_trx_aus(p_cle_id , p_book_type_code);
10933 FETCH tax_off_trx_aus INTO l_amortization_date;
10934 close tax_off_trx_aus ;
10935 IF l_amortization_date IS NULL THEN
10936 open tax_off_trx_amt(p_cle_id , p_book_type_code);
10937 FETCH tax_off_trx_amt INTO l_amortization_date;
10938 close tax_off_trx_amt ;
10939 END IF;
10940 --l_amortization_date := sysdate;
10941 l_special_treatment_required := 'Y';
10942 elsif ((l_book_class = 'TAX') and (l_tax_owner ='LESSEE')) THEN
10943 open tax_off_trx_aus(p_cle_id , p_book_type_code);
10944 FETCH tax_off_trx_aus INTO l_amortization_date;
10945 close tax_off_trx_aus ;
10946 IF l_amortization_date IS NULL THEN
10947 open tax_off_trx_amt(p_cle_id , p_book_type_code);
10948 FETCH tax_off_trx_amt INTO l_amortization_date;
10949 close tax_off_trx_amt ;
10950 END IF;
10951 --l_amortization_date := sysdate;
10952 l_special_treatment_required := 'Y';
10953 END IF;
10954 END IF;
10955 x_amortization_date := l_amortization_date;
10956 x_special_treatment_required := l_special_treatment_required;
10957 --Call end Activity
10958 OKL_API.END_ACTIVITY(x_msg_count, x_msg_data);
10959 EXCEPTION
10960 WHEN OKL_API.G_EXCEPTION_ERROR THEN
10961 x_return_status := OKL_API.HANDLE_EXCEPTIONS(
10962 l_api_name,
10963 G_PKG_NAME,
10964 'OKL_API.G_RET_STS_ERROR',
10965 x_msg_count,
10966 x_msg_data,
10967 '_PVT');
10968 WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
10969 x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
10970 l_api_name,
10971 G_PKG_NAME,
10972 'OKL_API.G_RET_STS_UNEXP_ERROR',
10973 x_msg_count,
10974 x_msg_data,
10975 '_PVT');
10976 WHEN OTHERS THEN
10977 x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
10978 l_api_name,
10979 G_PKG_NAME,
10980 'OTHERS',
10981 x_msg_count,
10982 x_msg_data,
10983 '_PVT');
10984 END;
10985 --------------------------------------------------------------------------------
10986 --Start of Comments
10987 --Procedure Name : FIXED_ASSET_ADD
10988 --Description : Calls FA additions api to create new assets for
10989 -- and split children
10990 --History :
10991 -- 28-Nov-2001 ashish.singh Created
10992 -- Bug# 6373605 (OKL.R12.B SLA CRs
10993 -- p_sla_source_header_id IN Number,
10994 -- ID of source OKL_TRX_ASSETS record
10995 -- p_sla_source_header_table IN Varchar2,
10996 -- 'OKL_TRX_ASSETS'
10997 -- p_sla_source_try_id IN Number,
10998 -- OKL_TRX_ASSETS.try_id (transaction type id)
10999 -- p_sla_source_line_id IN Number,
11000 -- ID of line table (OKL_TXL_ASSETS_B or
11001 -- OKL_TXD_ASSETS_B
11002 -- p_sla_source_line_table IN Varchar2,
11003 -- OKL_TXL_ASSETS_B or OKL_TXD_ASSETS_B
11004 -- p_sla_source_chr_id IN Number,
11005 -- Contract id of the contract on which
11006 -- source transaction happened
11007 -- p_sla_source_kle_id IN Number,
11008 -- Financial asset line id (lse_id = 33)
11009 -- p_sla_asset_chr_id IN Number,
11010 -- Contract on which asset is present
11011 -- at the time of transaction (in case of
11012 -- online rebook transaction is against the rebook
11013 -- copy contract whereas the asset is on
11014 -- original contract
11015 --End of Comments
11016 --------------------------------------------------------------------------------
11017 PROCEDURE FIXED_ASSET_ADD (p_api_version IN NUMBER,
11018 p_init_msg_list IN VARCHAR2 DEFAULT OKL_API.G_FALSE,
11019 x_return_status OUT NOCOPY VARCHAR2,
11020 x_msg_count OUT NOCOPY NUMBER,
11021 x_msg_data OUT NOCOPY VARCHAR2,
11022 p_ast_line_rec IN ast_line_rec_type,
11023 p_txlv_rec IN txlv_rec_type,
11024 p_txdv_rec IN txdv_rec_type,
11025 --3156924
11026 p_trx_date IN DATE,
11027 p_trx_number IN NUMBER,
11028 --Bug# 6373605--SLA populate source
11029 p_sla_source_header_id IN Number,
11030 p_sla_source_header_table IN Varchar2,
11031 p_sla_source_try_id IN Number,
11032 p_sla_source_line_id IN Number,
11033 p_sla_source_line_table IN Varchar2,
11034 p_sla_source_chr_id IN Number,
11035 p_sla_source_kle_id IN Number,
11036 p_sla_asset_chr_id IN Number,
11037 --Bug# 6373605--SLA populate source
11038 --Bug# 4028371
11039 x_fa_trx_date OUT NOCOPY date,
11040 x_asset_hdr_rec OUT NOCOPY FA_API_TYPES.asset_hdr_rec_type) IS
11041
11042 l_return_status VARCHAR2(1) DEFAULT OKL_API.G_RET_STS_SUCCESS;
11043 l_api_name CONSTANT VARCHAR2(30) := 'FIXED_ASSET_ADD';
11044 l_api_version CONSTANT NUMBER := 1.0;
11045
11046 l_trans_rec FA_API_TYPES.trans_rec_type;
11047 l_dist_trans_rec FA_API_TYPES.trans_rec_type;
11048 l_asset_hdr_rec FA_API_TYPES.asset_hdr_rec_type;
11049 l_asset_desc_rec FA_API_TYPES.asset_desc_rec_type;
11050 l_asset_cat_rec FA_API_TYPES.asset_cat_rec_type;
11051 l_asset_type_rec FA_API_TYPES.asset_type_rec_type;
11052 l_asset_fin_rec FA_API_TYPES.asset_fin_rec_type;
11053 --l_asset_fin_glob_dff_rec FA_API_TYPES.asset_fin_glob_dff_rec_type;
11054 l_asset_deprn_rec FA_API_TYPES.asset_deprn_rec_type;
11055 l_asset_dist_rec FA_API_TYPES.asset_dist_rec_type;
11056 l_asset_dist_tbl FA_API_TYPES.asset_dist_tbl_type;
11057 l_inv_tbl FA_API_TYPES.inv_tbl_type;
11058 l_asset_hierarchy_rec fa_api_types.asset_hierarchy_rec_type;
11059
11060 l_split_factor NUMBER;
11061
11062 --cursor to get asset key ccid
11063 CURSOR asset_k_ccid_cur(p_asset_id IN NUMBER) IS
11064 SELECT asset_key_ccid
11065 FROM fa_additions
11066 WHERE asset_id = p_asset_id;
11067
11068 --cursor to get depreciation info
11069 CURSOR deprn_cur (p_asset_id IN NUMBER,
11070 p_book_type_code IN VARCHAR2,
11071 p_split_factor IN NUMBER) IS
11072 SELECT ytd_deprn - (ytd_deprn -(ytd_deprn*p_split_factor)),
11073 deprn_reserve - (deprn_reserve -(deprn_reserve*p_split_factor)),
11074 prior_fy_expense - (prior_fy_expense-(prior_fy_expense*p_split_factor)),
11075 bonus_ytd_deprn - (bonus_ytd_deprn-(bonus_ytd_deprn*p_split_factor)),
11076 bonus_deprn_reserve - (bonus_deprn_reserve-(bonus_deprn_reserve*p_split_factor))
11077 FROM okx_ast_dprtns_v
11078 WHERE asset_id = p_asset_id
11079 AND book_type_code = p_book_type_code
11080 AND deprn_run_date = (SELECT MAX(deprn_run_date)
11081 FROM okx_ast_dprtns_v
11082 WHERE asset_id = p_asset_id
11083 AND book_type_code = p_book_type_code);
11084
11085 --cursor to get asset distribution rec
11086 CURSOR ast_dist_cur (p_asset_id IN NUMBER,
11087 p_book_type_code IN VARCHAR2,
11088 p_units IN NUMBER) IS
11089 SELECT --p_txdv_rec.quantity,
11090 --p_ast_line_rec.current_units,
11091 p_units,
11092 assigned_to,
11093 code_combination_id,
11094 location_id,
11095 p_units
11096 --p_txdv_rec.quantity
11097 --p_ast_line_rec.current_units
11098 FROM okx_ast_dst_hst_v
11099 WHERE asset_id = p_asset_id
11100 AND book_type_code = p_book_type_code
11101 AND transaction_header_id_out IS NULL
11102 AND retirement_id IS NULL;
11103
11104 -- Bug# 5946411 -- start
11105 CURSOR ast_dep_limit_csr (p_asset_id IN NUMBER,
11106 p_book_type_code IN VARCHAR2
11107 ) IS
11108 SELECT ALLOWED_DEPRN_LIMIT,
11109 ALLOWED_DEPRN_LIMIT_AMOUNT
11110 ,DEPRN_LIMIT_TYPE
11111 ,DEPRECIATE_FLAG
11112 --Bug# 6152614
11113 ,PRORATE_CONVENTION_CODE
11114 ,PRORATE_DATE
11115 FROM FA_books
11116 WHERE asset_id = p_asset_id
11117 AND book_type_code = p_book_type_code
11118 AND transaction_header_id_out IS NULL;
11119
11120 l_allowed_deprn_limit FA_books.ALLOWED_DEPRN_LIMIT%TYPE;
11121 l_allowed_deprn_limit_amount FA_books.allowed_deprn_limit_amount%type;
11122 l_deprn_limit_type FA_books.DEPRN_LIMIT_TYPE%TYPE;
11123 l_depreciate_flag FA_books.DEPRECIATE_FLAG%TYPE;
11124 -- Bug# 5946411 -- end
11125 -- Bug# 6152614
11126 l_prorate_convention_code FA_books.PRORATE_CONVENTION_CODE%TYPE;
11127 l_prorate_date FA_books.PRORATE_DATE%TYPE;
11128
11129 --cursor to fetch already created asset id if book_class is TAX ie. corp book is already created
11130 CURSOR get_ast_id_cur (p_asset_number IN VARCHAR2,
11131 p_book_type_code IN VARCHAR2) IS
11132 SELECT DECODE(bkc.book_class,'CORPORATE',NULL,'TAX',ast.asset_id)
11133 FROM okx_assets_v ast,
11134 okx_asst_bk_controls_v bkc
11135 WHERE ast.asset_number = p_asset_number
11136 AND ast.corporate_book = bkc.mass_copy_source_book
11137 AND bkc.book_type_code = p_book_type_code;
11138
11139 --3156924:
11140 l_calling_interface Varchar2(30) := 'OKLRSPAB:Split Asset';
11141
11142 --Bug# 5946411
11143 l_asset_hdr_orig_rec FA_API_TYPES.asset_hdr_rec_type;
11144
11145 -- bug 6061103 -- start
11146 CURSOR l_cleb_sts_csr(pcleid IN NUMBER) IS
11147 SELECT cleb.sts_code sts_code,
11148 cleb.dnz_chr_id chr_id,
11149 khr.PDT_ID,
11150 chr.START_DATE
11151 FROM okc_k_lines_b cleb,
11152 okl_k_headers khr,
11153 OKC_K_HEADERS_B chr
11154 WHERE cleb.id = pcleid
11155 and khr.id = cleb.dnz_chr_id
11156 and chr.id = khr.id;
11157 l_cle_status okc_k_lines_b.sts_code%TYPE;
11158 --cursor to find book class
11159 CURSOR l_book_class_cur(p_book_type_code IN VARCHAR2) IS
11160 SELECT book_class
11161 FROM okx_asst_bk_controls_v
11162 WHERE book_type_code = p_book_type_code;
11163 l_book_class okx_asst_bk_controls_v.book_class%TYPE;
11164 l_pdt_id Number;
11165 l_start_date Date;
11166 l_chr_id number;
11167 l_temp_cost number;
11168 l_temp_original_cost number;
11169 l_temp_salvage_value number;
11170 l_temp_ytd_deprn number;
11171 l_temp_deprn_reserve number;
11172 l_temp_prior_fy_expense number;
11173 l_temp_bonus_ytd_deprn number;
11174 l_temp_bonus_deprn_reserve number;
11175 l_amortization_date DATE;
11176 l_special_treatment_required VARCHAR2(1);
11177 l_adj_trans_rec FA_API_TYPES.trans_rec_type;
11178 l_adj_asset_fin_rec_adj FA_API_TYPES.asset_fin_rec_type;
11179 l_adj_asset_fin_rec_new FA_API_TYPES.asset_fin_rec_type;
11180 l_adj_asset_fin_mrc_tbl_new FA_API_TYPES.asset_fin_tbl_type;
11181 --l_asset_fin_glob_dff_rec FA_API_TYPES.asset_fin_glob_dff_rec_type;
11182 l_adj_inv_trans_rec FA_API_TYPES.inv_trans_rec_type;
11183 l_adj_inv_tbl FA_API_TYPES.inv_tbl_type;
11184 l_adj_inv_rate_tbl FA_API_TYPES.inv_rate_tbl_type;
11185 l_adj_asset_deprn_rec_adj FA_API_TYPES.asset_deprn_rec_type;
11186 l_adj_asset_deprn_rec_new FA_API_TYPES.asset_deprn_rec_type;
11187 l_adj_asset_deprn_mrc_tbl_new FA_API_TYPES.asset_deprn_tbl_type;
11188 l_adj_inv_rec FA_API_TYPES.inv_rec_type;
11189 l_adj_asset_deprn_rec FA_API_TYPES.asset_deprn_rec_type;
11190 l_adj_group_recalss_option_rec FA_API_TYPES.group_reclass_options_rec_type;
11191 -- bug 6061103 -- end
11192
11193 --Bug# 6373605 begin
11194 l_fxhv_rec okl_sla_acc_sources_pvt.fxhv_rec_type;
11195 l_fxlv_rec okl_sla_acc_sources_pvt.fxlv_rec_type;
11196 --Bug# 6373605 end
11197
11198 --Bug# 6955027
11199 x_log_level_rec FA_API_TYPES.log_level_rec_type;
11200
11201 BEGIN
11202 x_return_status := OKL_API.G_RET_STS_SUCCESS;
11203 -- Call start_activity to create savepoint, check compatibility
11204 -- and initialize message list
11205 x_return_status := OKL_API.START_ACTIVITY (
11206 l_api_name
11207 ,p_init_msg_list
11208 ,'_PVT'
11209 ,x_return_status);
11210 -- Check if activity started successfully
11211 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
11212 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
11213 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
11214 RAISE OKL_API.G_EXCEPTION_ERROR;
11215 END IF;
11216
11217 --dbms_output.enable(1000000);
11218
11219 --FA_SRVR_MSG.Init_Server_Message;
11220 --FA_DEBUG_PKG.Initialize;
11221
11222 --Bug# 6955027
11223 IF NOT FA_TRX_APPROVAL_PKG.faxcat
11224 (X_book => p_ast_line_rec.corporate_book,
11225 X_asset_id => p_ast_line_rec.asset_id,
11226 X_trx_type => 'ADJUSTMENT',
11227 X_trx_date => NULL,
11228 X_init_message_flag => 'NO',
11229 p_log_level_rec => x_log_level_rec) then
11230 RAISE OKL_API.G_EXCEPTION_ERROR;
11231 END IF;
11232 --Bug# 6955027
11233
11234 -----------------
11235 --trans_rec_info
11236 -----------------
11237 l_trans_rec.transaction_type_code := 'ADDITION'; --optional
11238 --Bug# 3156924 :
11239 --l_trans_rec.transaction_date_entered := p_ast_line_rec.in_service_date; --optional.defaults to dpis
11240 --l_trans_rec.transaction_date_entered := p_trx_date; --optional.defaults to dpis
11241 l_trans_rec.who_info.last_updated_by := FND_GLOBAL.USER_ID;
11242 --l_trans_rec.calling_interface := 'OKL SPLIT ASSET';
11243 --Bug# 3156924 :
11244 l_trans_rec.calling_interface := l_calling_interface; --optional
11245 l_trans_rec.transaction_name := SUBSTR(TO_CHAR(p_trx_number),1,20); --optional
11246
11247
11248 ---------------
11249 --hdr_rec info
11250 --------------
11251 l_asset_hdr_rec.book_type_code := p_ast_line_rec.corporate_book;
11252 l_asset_hdr_rec.set_of_books_id := p_ast_line_rec.set_of_books_id;
11253 l_asset_hdr_rec.asset_id := NULL;
11254
11255 --for tax books fetch the asset id
11256 OPEN get_ast_id_cur (p_asset_number => p_txdv_rec.asset_number,
11257 p_book_type_code => p_ast_line_rec.corporate_book);
11258 FETCH get_ast_id_cur INTO l_asset_hdr_rec.asset_id;
11259 IF get_ast_id_cur%NOTFOUND THEN
11260 NULL;
11261 END IF;
11262 CLOSE get_ast_id_cur;
11263
11264 ---------------
11265 -- desc info
11266 ---------------
11267 l_asset_desc_rec.asset_number := p_txdv_rec.asset_number;
11268 l_asset_desc_rec.description := p_txdv_rec.description;
11269 l_asset_desc_rec.manufacturer_name := p_ast_line_rec.manufacturer_name;
11270 l_asset_desc_rec.in_use_flag := p_ast_line_rec.in_use_flag;
11271 l_asset_desc_rec.inventorial := p_ast_line_rec.inventorial;
11272 l_asset_desc_rec.property_type_code := p_ast_line_rec.property_type_code;
11273 l_asset_desc_rec.property_1245_1250_code := p_ast_line_rec.property_1245_1250_code;
11274 l_asset_desc_rec.owned_leased := p_ast_line_rec.owned_leased;
11275 l_asset_desc_rec.new_used := p_ast_line_rec.new_used;
11276 --Bug# 2761799: model number not being copied
11277 l_asset_desc_rec.model_number := p_ast_line_rec.model_number;
11278
11279
11280 OPEN asset_k_ccid_cur(p_asset_id => p_ast_line_rec.asset_id);
11281 FETCH asset_k_ccid_cur INTO l_asset_desc_rec.asset_key_ccid;
11282 IF asset_k_ccid_cur%NOTFOUND THEN
11283 NULL;
11284 END IF;
11285 CLOSE asset_k_ccid_cur;
11286
11287 IF NVL(p_txdv_rec.split_percent,0) NOT IN (0,OKL_API.G_MISS_NUM) THEN
11288 l_split_factor := (p_txdv_rec.split_percent/100);
11289 l_asset_desc_rec.current_units := p_ast_line_rec.current_units;
11290 ELSE
11291 l_split_factor := (p_txdv_rec.quantity/p_txlv_rec.current_units);
11292 --l_asset_desc_rec.current_units := p_txdv_rec.quantity;
11293 l_asset_desc_rec.current_units := p_ast_line_rec.current_units -
11294 (p_ast_line_rec.current_units -
11295 (p_ast_line_rec.current_units*l_split_factor)
11296 );
11297 END IF;
11298
11299
11300 --original_units - (original_units - (original_units*split_factor))
11301 --this should actually be on the current quantity and not on the qty when trx was saved
11302 --modify it later
11303
11304 ----------------------
11305 --asset_type_rec info
11306 ---------------------
11307 l_asset_type_rec.asset_type := p_ast_line_rec.asset_type;
11308
11309 ----------------------
11310 --asset_cat_rec_info
11311 ---------------------
11312 l_asset_cat_rec.category_id := p_ast_line_rec.depreciation_category;
11313
11314 --asset_fin_rec
11315 l_asset_fin_rec.set_of_books_id := p_ast_line_rec.set_of_books_id;
11316 --3156924
11317 l_asset_fin_rec.date_placed_in_service := p_ast_line_rec.in_service_date;
11318 --l_asset_fin_rec.date_placed_in_service := p_trx_date;
11319 l_asset_fin_rec.deprn_method_code := p_ast_line_rec.deprn_method_code;
11320 l_asset_fin_rec.life_in_months := p_ast_line_rec.life_in_months;
11321 l_asset_fin_rec.cost := p_ast_line_rec.cost -(p_ast_line_rec.cost- (p_ast_line_rec.cost*l_split_factor));
11322 l_asset_fin_rec.original_cost := p_ast_line_rec.original_cost -(p_ast_line_rec.original_cost - (p_ast_line_rec.original_cost*l_split_factor));
11323 l_asset_fin_rec.salvage_value := p_ast_line_rec.salvage_value -(p_ast_line_rec.salvage_value -(p_ast_line_rec.salvage_value*l_split_factor));
11324 l_asset_fin_rec.basic_rate := p_ast_line_rec.basic_rate;
11325 l_asset_fin_rec.adjusted_rate := p_ast_line_rec.adjusted_rate;
11326 l_asset_fin_rec.percent_salvage_value := p_ast_line_rec.percent_salvage_value;
11327 l_asset_fin_rec.rate_adjustment_factor := 1;
11328
11329 -- Bug# 5946411 -- start
11330 OPEN ast_dep_limit_csr (p_asset_id => p_ast_line_rec.asset_id,
11331 p_book_type_code => p_ast_line_rec.corporate_book);
11332
11333 FETCH ast_dep_limit_csr INTO l_allowed_deprn_limit,
11334 l_allowed_deprn_limit_amount,
11335 l_deprn_limit_type,
11336 l_depreciate_flag
11337 --Bug# 6152614
11338 ,l_prorate_convention_code
11339 ,l_prorate_date;
11340
11341 IF ast_dep_limit_csr%NOTFOUND THEN
11342 NULL;
11343 END IF;
11344 CLOSE ast_dep_limit_csr;
11345 l_asset_fin_rec.allowed_deprn_limit := l_allowed_deprn_limit;
11346 l_asset_fin_rec.allowed_deprn_limit_amount := l_allowed_deprn_limit_amount;
11347 -- Bug# 6152614
11348 l_asset_fin_rec.prorate_convention_code := l_prorate_convention_code;
11349 l_asset_fin_rec.prorate_date := l_prorate_date;
11350 -- Bug# 5946411 -- end
11351
11352 --Bug# 6373605 start
11353 l_asset_fin_rec.contract_id := p_sla_asset_chr_id;
11354 --Bug# 6373605 end
11355
11356 -----------------
11357 --Bug# 3156924
11358 ----------------
11359 --l_asset_fin_rec.depreciate_flag := 'YES';
11360
11361 l_asset_deprn_rec.set_of_books_id := p_ast_line_rec.set_of_books_id;
11362
11363 /* Bug# 5946411
11364 --commented following and added FA_UTIL to retrive asset deprn_rec
11365
11366 OPEN deprn_cur (p_asset_id => p_ast_line_rec.asset_id,
11367 p_book_type_code => p_ast_line_rec.corporate_book,
11368 p_split_factor => l_split_factor);
11369
11370 FETCH deprn_cur INTO l_asset_deprn_rec.ytd_deprn,
11371 l_asset_deprn_rec.deprn_reserve,
11372 l_asset_deprn_rec.prior_fy_expense,
11373 l_asset_deprn_rec.bonus_ytd_deprn,
11374 l_asset_deprn_rec.bonus_deprn_reserve;
11375 IF deprn_cur%NOTFOUND THEN
11376 NULL;
11377 END IF;
11378 CLOSE deprn_cur;
11379
11380 */
11381 l_asset_fin_rec.depreciate_flag := l_depreciate_flag;
11382 l_asset_fin_rec.deprn_limit_type :=l_deprn_limit_type;
11383 if NOT fa_cache_pkg.fazcbc(x_book => p_ast_line_rec.corporate_book) then
11384 OKL_API.SET_MESSAGE(p_app_name => g_app_name,
11385 p_msg_name => 'OKL_LLA_FA_CACHE_ERROR'
11386 );
11387 Raise OKL_API.G_EXCEPTION_ERROR;
11388 end if;
11389 l_asset_hdr_orig_rec.asset_id:=p_ast_line_rec.asset_id;
11390 l_asset_hdr_orig_rec.book_type_code := p_ast_line_rec.corporate_book;
11391 -- To fetch Depreciation Reserve
11392 if not FA_UTIL_PVT.get_asset_deprn_rec
11393 (p_asset_hdr_rec => l_asset_hdr_orig_rec ,
11394 px_asset_deprn_rec => l_asset_deprn_rec,
11395 p_period_counter => NULL,
11396 p_mrc_sob_type_code => 'P'
11397 ) then
11398 OKL_API.SET_MESSAGE(p_app_name => g_app_name,
11399 p_msg_name => 'OKL_LLA_FA_DEPRN_REC_ERROR'
11400 );
11401 Raise OKL_API.G_EXCEPTION_ERROR;
11402 end if;
11403 l_asset_deprn_rec.ytd_deprn:= l_asset_deprn_rec.ytd_deprn - (l_asset_deprn_rec.ytd_deprn -(l_asset_deprn_rec.ytd_deprn*l_split_factor));
11404 l_asset_deprn_rec.deprn_reserve:= l_asset_deprn_rec.deprn_reserve - (l_asset_deprn_rec.deprn_reserve -(l_asset_deprn_rec.deprn_reserve*l_split_factor));
11405 l_asset_deprn_rec.prior_fy_expense:=l_asset_deprn_rec.prior_fy_expense - (l_asset_deprn_rec.prior_fy_expense-(l_asset_deprn_rec.prior_fy_expense*l_split_factor));
11406 l_asset_deprn_rec.bonus_ytd_deprn:=l_asset_deprn_rec.bonus_ytd_deprn - (l_asset_deprn_rec.bonus_ytd_deprn-(l_asset_deprn_rec.bonus_ytd_deprn*l_split_factor));
11407 l_asset_deprn_rec.bonus_deprn_reserve:=l_asset_deprn_rec.bonus_deprn_reserve - (l_asset_deprn_rec.bonus_deprn_reserve-(l_asset_deprn_rec.bonus_deprn_reserve*l_split_factor));
11408
11409 -- Bug# 6189396 -- start
11410 okl_execute_formula_pub.g_additional_parameters(1).name := 'SPLIT_ASSET_DEPRN_RESRVE';
11411 okl_execute_formula_pub.g_additional_parameters(1).value := to_char(l_asset_deprn_rec.deprn_reserve);
11412 -- Bug# 6189396 -- end
11413
11414 ---------------------------------------------------------------------------------------
11415 --Bug# 3156924 : Due to partial retirement ytd_deprn may get greater than deprn_reserve
11416 ---------------------------------------------------------------------------------------
11417 IF l_asset_deprn_rec.ytd_deprn > l_asset_deprn_rec.deprn_reserve THEN
11418 l_asset_deprn_rec.ytd_deprn := l_asset_deprn_rec.deprn_reserve;
11419 END IF;
11420
11421 --asset_dist_rec
11422 OPEN ast_dist_cur (p_asset_id => p_ast_line_rec.asset_id,
11423 p_book_type_code => p_ast_line_rec.corporate_book,
11424 p_units => l_asset_desc_rec.current_units);
11425
11426 FETCH ast_dist_cur INTO l_asset_dist_rec.units_assigned,
11427 l_asset_dist_rec.assigned_to,
11428 l_asset_dist_rec.expense_ccid,
11429 l_asset_dist_rec.location_ccid,
11430 l_asset_dist_rec.transaction_units;
11431
11432 IF ast_dist_cur%NOTFOUND THEN
11433 NULL;
11434 END IF;
11435
11436 CLOSE ast_dist_cur;
11437
11438 -- bug 6061103 start
11439 OPEN l_cleb_sts_csr( p_txlv_rec.kle_id);
11440 FETCH l_cleb_sts_csr INTO l_cle_status, l_chr_id, l_pdt_id, l_start_date ;
11441 close l_cleb_sts_csr;
11442 is_evergreen_df_lease
11443 (p_api_version => p_api_version,
11444 p_init_msg_list => p_init_msg_list,
11445 x_return_status => x_return_status,
11446 x_msg_count => x_msg_count,
11447 x_msg_data => x_msg_data,
11448 p_cle_id => p_ast_line_rec.PARENT_LINE_ID ,--p_ast_line_rec.asset_id, rirawat
11449 p_book_type_code => p_ast_line_rec.corporate_book,
11450 p_asset_status => l_cle_status,
11451 p_pdt_id => l_pdt_id,
11452 p_start_date => l_start_date,
11453 x_amortization_date => l_amortization_date,
11454 x_special_treatment_required => l_special_treatment_required);
11455 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
11456 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
11457 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
11458 RAISE OKL_API.G_EXCEPTION_ERROR;
11459 END IF;
11460 if (l_special_treatment_required = 'Y') then
11461 l_temp_cost := l_asset_fin_rec.cost;
11462 l_temp_original_cost := l_asset_fin_rec.original_cost;
11463 l_temp_salvage_value := l_asset_fin_rec.salvage_value;
11464 l_temp_ytd_deprn := l_asset_deprn_rec.ytd_deprn;
11465 l_temp_deprn_reserve := l_asset_deprn_rec.deprn_reserve;
11466 l_temp_prior_fy_expense := l_asset_deprn_rec.prior_fy_expense;
11467 l_temp_bonus_ytd_deprn := l_asset_deprn_rec.bonus_ytd_deprn ;
11468 l_temp_bonus_deprn_reserve := l_asset_deprn_rec.bonus_deprn_reserve;
11469 l_asset_fin_rec.cost := 0;
11470 l_asset_fin_rec.original_cost := 0;
11471 l_asset_fin_rec.salvage_value := 0 ;
11472 l_asset_deprn_rec.ytd_deprn:= 0;
11473 l_asset_deprn_rec.deprn_reserve:= 0;
11474 l_asset_deprn_rec.prior_fy_expense:= 0;
11475 l_asset_deprn_rec.bonus_ytd_deprn:= 0;
11476 l_asset_deprn_rec.bonus_deprn_reserve:= 0;
11477 end if;
11478 -- bug 6061103 end
11479 l_asset_dist_tbl(1) := l_asset_dist_rec;
11480
11481 --dbms_output.put_line('Add '||l_asset_desc_rec.asset_number || ' Deprn reserve '||to_char(l_asset_deprn_rec.deprn_reserve));
11482 -- call the api
11483 fa_addition_pub.do_addition
11484 (p_api_version => p_api_version,
11485 p_init_msg_list => OKL_API.G_FALSE,
11486 p_commit => OKL_API.G_FALSE,
11487 p_validation_level => FND_API.G_VALID_LEVEL_FULL,
11488 x_return_status => x_return_status,
11489 x_msg_count => x_msg_count,
11490 x_msg_data => x_msg_data,
11491 --Bug# 3156924
11492 p_calling_fn => l_calling_interface,
11493 px_trans_rec => l_trans_rec,
11494 px_dist_trans_rec => l_dist_trans_rec,
11495 px_asset_hdr_rec => l_asset_hdr_rec,
11496 px_asset_desc_rec => l_asset_desc_rec,
11497 px_asset_type_rec => l_asset_type_rec,
11498 px_asset_cat_rec => l_asset_cat_rec,
11499 px_asset_hierarchy_rec => l_asset_hierarchy_rec,
11500 px_asset_fin_rec => l_asset_fin_rec,
11501 px_asset_deprn_rec => l_asset_deprn_rec,
11502 px_asset_dist_tbl => l_asset_dist_tbl,
11503 px_inv_tbl => l_inv_tbl
11504 );
11505
11506 --dbms_output.put_line(x_return_status);
11507 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
11508 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
11509 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
11510 RAISE OKL_API.G_EXCEPTION_ERROR;
11511 END IF;
11512
11513 --bug# 6373605 -- call populate sla sources
11514 l_fxhv_rec.source_id := p_sla_source_header_id;
11515 l_fxhv_rec.source_table := p_sla_source_header_table;
11516 l_fxhv_rec.khr_id := p_sla_source_chr_id;
11517 l_fxhv_rec.try_id := p_sla_source_try_id;
11518
11519 l_fxlv_rec.source_id := p_sla_source_line_id;
11520 l_fxlv_rec.source_table := p_sla_source_line_table;
11521 l_fxlv_rec.kle_id := p_sla_source_kle_id;
11522
11523 l_fxlv_rec.asset_id := l_asset_hdr_rec.asset_id;
11524 l_fxlv_rec.fa_transaction_id := l_trans_rec.transaction_header_id;
11525 l_fxlv_rec.asset_book_type_name := l_asset_hdr_rec.book_type_code;
11526
11527 OKL_SLA_ACC_SOURCES_PVT.populate_sources(
11528 p_api_version => p_api_version
11529 ,p_init_msg_list => p_init_msg_list
11530 ,p_fxhv_rec => l_fxhv_rec
11531 ,p_fxlv_rec => l_fxlv_rec
11532 ,x_return_status => x_return_status
11533 ,x_msg_count => x_msg_count
11534 ,x_msg_data => x_msg_data
11535 );
11536 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
11537 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
11538 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
11539 RAISE OKL_API.G_EXCEPTION_ERROR;
11540 END IF;
11541 --bug# 6373605 -- call populate SLA sources
11542
11543 --Bug# 6061103
11544 if (l_special_treatment_required = 'Y') and (l_temp_cost <> 0) then
11545 l_adj_trans_rec.transaction_subtype := 'AMORTIZED';
11546 --Bug# 6331465
11547 --l_adj_trans_rec.amortization_start_date := l_amortization_date;
11548 l_adj_trans_rec.transaction_name := SUBSTR(TO_CHAR(p_trx_number),1,20); --optional
11549 l_adj_trans_rec.calling_interface := l_calling_interface; --optional
11550 l_adj_asset_fin_rec_adj.cost := l_temp_cost;
11551 l_adj_asset_fin_rec_adj.original_cost := l_temp_original_cost;
11552 l_adj_asset_fin_rec_adj.salvage_value := l_temp_salvage_value ;
11553 l_adj_asset_deprn_rec_adj.ytd_deprn:= l_temp_ytd_deprn;
11554 l_adj_asset_deprn_rec_adj.deprn_reserve:= l_temp_deprn_reserve;
11555 l_adj_asset_deprn_rec_adj.prior_fy_expense:= l_temp_prior_fy_expense;
11556 l_adj_asset_deprn_rec_adj.bonus_ytd_deprn:= l_temp_bonus_ytd_deprn;
11557 l_adj_asset_deprn_rec_adj.bonus_deprn_reserve:= l_temp_bonus_deprn_reserve;
11558
11559 FA_ADJUSTMENT_PUB.do_adjustment
11560 (p_api_version => p_api_version,
11561 p_init_msg_list => p_init_msg_list,
11562 p_commit => OKL_API.G_FALSE,
11563 p_validation_level => FND_API.G_VALID_LEVEL_FULL,
11564 x_return_status => x_return_status,
11565 x_msg_count => x_msg_count,
11566 x_msg_data => x_msg_data,
11567 --Bug# 3156924
11568 --p_calling_fn => null,
11569 p_calling_fn => l_calling_interface,
11570 px_trans_rec => l_adj_trans_rec,
11571 px_asset_hdr_rec => l_asset_hdr_rec,
11572 p_asset_fin_rec_adj => l_adj_asset_fin_rec_adj,
11573 x_asset_fin_rec_new => l_adj_asset_fin_rec_new,
11574 x_asset_fin_mrc_tbl_new => l_adj_asset_fin_mrc_tbl_new,
11575 px_inv_trans_rec => l_adj_inv_trans_rec,
11576 px_inv_tbl => l_adj_inv_tbl,
11577 p_asset_deprn_rec_adj => l_adj_asset_deprn_rec_adj,
11578 x_asset_deprn_rec_new => l_adj_asset_deprn_rec_new,
11579 x_asset_deprn_mrc_tbl_new => l_adj_asset_deprn_mrc_tbl_new,
11580 p_group_reclass_options_rec => l_adj_group_recalss_option_rec
11581 );
11582 --dbms_output.put_line('After calling FA adjustment Api '||x_return_status);
11583 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
11584 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
11585 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
11586 RAISE OKL_API.G_EXCEPTION_ERROR;
11587 END IF;
11588
11589 --bug# 6373605 -- call populate sla sources
11590 l_fxhv_rec.source_id := p_sla_source_header_id;
11591 l_fxhv_rec.source_table := p_sla_source_header_table;
11592 l_fxhv_rec.khr_id := p_sla_source_chr_id;
11593 l_fxhv_rec.try_id := p_sla_source_try_id;
11594
11595 l_fxlv_rec.source_id := p_sla_source_line_id;
11596 l_fxlv_rec.source_table := p_sla_source_line_table;
11597 l_fxlv_rec.kle_id := p_sla_source_kle_id;
11598
11599 l_fxlv_rec.asset_id := l_asset_hdr_rec.asset_id;
11600 l_fxlv_rec.fa_transaction_id := l_adj_trans_rec.transaction_header_id;
11601 l_fxlv_rec.asset_book_type_name := l_asset_hdr_rec.book_type_code;
11602
11603 OKL_SLA_ACC_SOURCES_PVT.populate_sources(
11604 p_api_version => p_api_version
11605 ,p_init_msg_list => p_init_msg_list
11606 ,p_fxhv_rec => l_fxhv_rec
11607 ,p_fxlv_rec => l_fxlv_rec
11608 ,x_return_status => x_return_status
11609 ,x_msg_count => x_msg_count
11610 ,x_msg_data => x_msg_data
11611 );
11612 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
11613 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
11614 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
11615 RAISE OKL_API.G_EXCEPTION_ERROR;
11616 END IF;
11617 --bug# 6373605 -- call populate SLA sources
11618
11619 end if;
11620 x_asset_hdr_rec := l_asset_hdr_rec;
11621 --Bug# 4028371
11622 x_fa_trx_date := l_adj_trans_rec.transaction_date_entered; -- for 6061103 chaged to adj
11623
11624 OKL_API.END_ACTIVITY (x_msg_count,
11625 x_msg_data );
11626 EXCEPTION
11627 WHEN OKL_API.G_EXCEPTION_ERROR THEN
11628 x_return_status := OKL_API.HANDLE_EXCEPTIONS(
11629 l_api_name,
11630 G_PKG_NAME,
11631 'OKL_API.G_RET_STS_ERROR',
11632 x_msg_count,
11633 x_msg_data,
11634 '_PVT');
11635 WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
11636 x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
11637 l_api_name,
11638 G_PKG_NAME,
11639 'OKL_API.G_RET_STS_UNEXP_ERROR',
11640 x_msg_count,
11641 x_msg_data,
11642 '_PVT');
11643 WHEN OTHERS THEN
11644 x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
11645 l_api_name,
11646 G_PKG_NAME,
11647 'OTHERS',
11648 x_msg_count,
11649 x_msg_data,
11650 '_PVT');
11651 END FIXED_ASSET_ADD;
11652 --Bug# 3156924
11653 --------------------------------------------------------------------------------
11654 --Start of Comments
11655 --Procedure Name : FIXED_ASSET_UNIT_ADJUST
11656 --Description : Does unit adjustment on parent asset (source asset to split) in FA
11657 --History :
11658 -- 26-Feb-2004 ashish.singh Created
11659 --End of Comments
11660 --------------------------------------------------------------------------------
11661 PROCEDURE FIXED_ASSET_unit_adjust
11662 (p_api_version IN NUMBER,
11663 p_init_msg_list IN VARCHAR2 DEFAULT OKL_API.G_FALSE,
11664 x_return_status OUT NOCOPY VARCHAR2,
11665 x_msg_count OUT NOCOPY NUMBER,
11666 x_msg_data OUT NOCOPY VARCHAR2,
11667 p_ast_line_rec IN ast_line_rec_type,
11668 p_txlv_rec IN txlv_rec_type,
11669 p_txdv_rec IN txdv_rec_type,
11670 --Bug# 3156924
11671 p_trx_date IN DATE,
11672 p_trx_number IN NUMBER,
11673 --Bug# 4028371
11674 x_fa_trx_date OUT NOCOPY DATE) IS
11675
11676 l_return_status VARCHAR2(1) DEFAULT OKL_API.G_RET_STS_SUCCESS;
11677 l_api_name CONSTANT VARCHAR2(30) := 'FIXED_ASSET_UNIT_ADJ';
11678 l_api_version CONSTANT NUMBER := 1.0;
11679
11680
11681 l_trans_rec fa_api_types.trans_rec_type;
11682 l_asset_hdr_rec fa_api_types.asset_hdr_rec_type;
11683 l_asset_dist_tbl fa_api_types.asset_dist_tbl_type;
11684
11685 l_calling_interface VARCHAR2(30) := 'OKL:Split Asset';
11686 l_units_to_adjust NUMBER;
11687 i NUMBER;
11688 l_split_factor NUMBER;
11689
11690
11691 --cursor to get the distributions
11692 CURSOR l_dist_curs(p_asset_id IN NUMBER,
11693 p_corporate_book IN VARCHAR2) IS
11694 SELECT units_assigned,
11695 distribution_id
11696 FROM OKX_AST_DST_HST_V
11697 WHERE asset_id = p_ast_line_rec.asset_id
11698 AND book_type_code = p_ast_line_rec.corporate_book
11699 AND transaction_header_id_out IS NULL
11700 AND retirement_id IS NULL;
11701
11702 l_units_assigned NUMBER;
11703 l_distribution_id NUMBER;
11704
11705 BEGIN
11706 x_return_status := OKL_API.G_RET_STS_SUCCESS;
11707 -- Call start_activity to create savepoint, check compatibility
11708 -- and initialize message list
11709 x_return_status := OKL_API.START_ACTIVITY (
11710 l_api_name
11711 ,p_init_msg_list
11712 ,'_PVT'
11713 ,x_return_status);
11714 -- Check if activity started successfully
11715 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
11716 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
11717 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
11718 RAISE OKL_API.G_EXCEPTION_ERROR;
11719 END IF;
11720
11721 l_split_factor := (p_txdv_rec.quantity/p_txlv_rec.current_units);
11722 l_asset_hdr_rec.asset_id := p_ast_line_rec.asset_id;
11723 l_asset_hdr_rec.book_type_code := p_ast_line_rec.corporate_book;
11724
11725 -- transaction date must be filled in if performing
11726 -- prior period transfer
11727 l_trans_rec.transaction_date_entered := NULL;
11728 l_trans_rec.transaction_name := SUBSTR(TO_CHAR(p_trx_number),1,20);
11729 l_trans_rec.calling_interface := l_calling_interface;
11730 l_trans_rec.who_info.last_updated_by := FND_GLOBAL.USER_ID;
11731 l_trans_rec.who_info.last_update_login := FND_GLOBAL.LOGIN_ID;
11732
11733
11734 l_asset_dist_tbl.DELETE;
11735
11736 l_units_to_adjust := p_ast_line_rec.current_units - (p_ast_line_rec.current_units*l_split_factor);
11737
11738 --dbms_output.put_line('Units to adjust outside loop'||l_units_to_adjust );
11739 i := 1;
11740 OPEN l_dist_curs(p_ast_line_rec.asset_id, p_ast_line_rec.corporate_book);
11741 LOOP
11742 FETCH l_dist_curs INTO l_units_assigned, l_distribution_id;
11743 EXIT WHEN l_dist_curs%NOTFOUND;
11744 IF l_units_to_adjust = 0 THEN
11745 EXIT;
11746 ELSIF l_units_to_adjust >= l_units_assigned THEN
11747 l_asset_dist_tbl(i).distribution_id := l_distribution_id;
11748 l_asset_dist_tbl(i).transaction_units := (-1)*l_units_assigned;
11749 --dbms_output.put_line('Units to adjust '||to_char(l_asset_dist_tbl(i).transaction_units));
11750 l_asset_dist_tbl(i).units_assigned := NULL;
11751 l_asset_dist_tbl(i).assigned_to := NULL;
11752 l_asset_dist_tbl(i).expense_ccid := NULL;
11753 l_asset_dist_tbl(i).location_ccid := NULL;
11754 l_units_to_adjust := l_units_to_adjust - l_units_assigned;
11755 i := i + 1;
11756 ELSIF l_units_to_adjust < l_units_assigned THEN
11757 l_asset_dist_tbl(i).distribution_id := l_distribution_id;
11758 l_asset_dist_tbl(i).transaction_units := (-1)*l_units_to_adjust;
11759 --dbms_output.put_line('Units to adjust '||to_char(l_asset_dist_tbl(i).transaction_units));
11760 l_asset_dist_tbl(i).units_assigned := NULL;
11761 l_asset_dist_tbl(i).assigned_to := NULL;
11762 l_asset_dist_tbl(i).expense_ccid := NULL;
11763 l_asset_dist_tbl(i).location_ccid := NULL;
11764 l_units_to_adjust := l_units_to_adjust - l_units_to_adjust;
11765 i := i + 1;
11766 END IF;
11767 END LOOP;
11768 CLOSE l_dist_curs;
11769
11770 FA_UNIT_ADJ_PUB.do_unit_adjustment(
11771 p_api_version => p_api_version,
11772 p_init_msg_list => FND_API.G_FALSE,
11773 p_commit => FND_API.G_FALSE,
11774 p_validation_level => FND_API.G_VALID_LEVEL_FULL,
11775 --bug# 3156924 :
11776 p_calling_fn => l_calling_interface,
11777 --p_calling_fn => NULL,
11778 x_return_status => x_return_status,
11779 x_msg_count => x_msg_count,
11780 x_msg_data => x_msg_data,
11781 px_trans_rec => l_trans_rec,
11782 px_asset_hdr_rec => l_asset_hdr_rec,
11783 px_asset_dist_tbl => l_asset_dist_tbl);
11784
11785 --dbms_output.put_line('After calling FA unit adjust Api '||x_return_status);
11786 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
11787 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
11788 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
11789 RAISE OKL_API.G_EXCEPTION_ERROR;
11790 END IF;
11791 OKL_API.END_ACTIVITY (x_msg_count,
11792 x_msg_data );
11793 EXCEPTION
11794 WHEN OKL_API.G_EXCEPTION_ERROR THEN
11795 x_return_status := OKL_API.HANDLE_EXCEPTIONS(
11796 l_api_name,
11797 G_PKG_NAME,
11798 'OKL_API.G_RET_STS_ERROR',
11799 x_msg_count,
11800 x_msg_data,
11801 '_PVT');
11802 WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
11803 x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
11804 l_api_name,
11805 G_PKG_NAME,
11806 'OKL_API.G_RET_STS_UNEXP_ERROR',
11807 x_msg_count,
11808 x_msg_data,
11809 '_PVT');
11810 WHEN OTHERS THEN
11811 x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
11812 l_api_name,
11813 G_PKG_NAME,
11814 'OTHERS',
11815 x_msg_count,
11816 x_msg_data,
11817 '_PVT');
11818 END FIXED_ASSET_unit_ADJUST;
11819 --Bug# 3156924
11820 --------------------------------------------------------------------------------
11821 --Start of Comments
11822 --Procedure Name : FIXED_ASSET_RETIRE
11823 --Description : Retires the Parent fixed Asset (source asset to split) in FA
11824 --History :
11825 -- 20-Dec-2001 ashish.singh Created
11826 -- 24-Jul-2002 ashish.singh Modified to take care of Full
11827 -- retirement for split asset compoents
11828 --End of Comments
11829 --------------------------------------------------------------------------------
11830 PROCEDURE FIXED_ASSET_RETIRE (p_api_version IN NUMBER,
11831 p_init_msg_list IN VARCHAR2 DEFAULT OKL_API.G_FALSE,
11832 x_return_status OUT NOCOPY VARCHAR2,
11833 x_msg_count OUT NOCOPY NUMBER,
11834 x_msg_data OUT NOCOPY VARCHAR2,
11835 p_ast_line_rec IN ast_line_rec_type,
11836 p_txlv_rec IN txlv_rec_type,
11837 p_txdv_rec IN txdv_rec_type,
11838 --Bug# 3156924
11839 p_trx_date IN DATE,
11840 p_trx_number IN NUMBER,
11841 --Bug# 4028371
11842 x_fa_trx_date OUT NOCOPY date) IS
11843
11844 l_return_status VARCHAR2(1) DEFAULT OKL_API.G_RET_STS_SUCCESS;
11845 l_api_name CONSTANT VARCHAR2(30) := 'FIXED_ASSET_RETIRE';
11846 l_api_version CONSTANT NUMBER := 1.0;
11847
11848 l_user_id NUMBER := 1001; -- USER_ID must properly be set to run calc gain/loss
11849 l_request_id NUMBER;
11850 l_split_factor NUMBER;
11851 l_units_to_retire NUMBER;
11852
11853 /* define local record types */
11854 l_trans_rec FA_API_TYPES.trans_rec_type;
11855 l_asset_hdr_rec FA_API_TYPES.asset_hdr_rec_type;
11856 l_asset_retire_rec FA_API_TYPES.asset_retire_rec_type;
11857 l_asset_dist_tbl FA_API_TYPES.asset_dist_tbl_type;
11858 l_subcomp_tbl FA_API_TYPES.subcomp_tbl_type;
11859 l_inv_tbl FA_API_TYPES.inv_tbl_type;
11860 l_dist_trans_rec FA_API_TYPES.trans_rec_type;
11861
11862
11863 l_commit VARCHAR2(1) := FND_API.G_FALSE;
11864 l_validation_level NUMBER := FND_API.G_VALID_LEVEL_FULL;
11865 l_calling_fn VARCHAR2(80) := 'OKL_SPLIT_ASSET_PVT';
11866
11867 i NUMBER := 0;
11868
11869 --cursor to get the distributions
11870 CURSOR l_dist_curs(p_asset_id IN NUMBER,
11871 p_corporate_book IN VARCHAR2) IS
11872 SELECT units_assigned,
11873 distribution_id
11874 FROM OKX_AST_DST_HST_V
11875 WHERE asset_id = p_ast_line_rec.asset_id
11876 AND book_type_code = p_ast_line_rec.corporate_book
11877 AND transaction_header_id_out IS NULL
11878 AND retirement_id IS NULL;
11879
11880 l_units_assigned NUMBER;
11881 l_distribution_id NUMBER;
11882
11883 --cursor to find book class
11884 CURSOR l_book_class_cur(p_book_type_code IN VARCHAR2) IS
11885 SELECT book_class
11886 FROM okx_asst_bk_controls_v
11887 WHERE book_type_code = p_book_type_code;
11888
11889 l_book_class okx_asst_bk_controls_v.book_class%TYPE;
11890
11891 --debug variables
11892 api_error EXCEPTION;
11893 mesg_count NUMBER;
11894 temp_str VARCHAR2(2000);
11895
11896 --Bug# 3156924 : cursor to get retirement prorate convention from defaults
11897 CURSOR l_fcbd_csr (p_book_type_code IN VARCHAR2,
11898 p_category_id IN NUMBER,
11899 p_dpis IN DATE) IS
11900 SELECT retirement_prorate_convention
11901 FROM fa_category_book_defaults
11902 WHERE book_type_code = p_book_type_code
11903 AND category_id = p_category_id
11904 AND p_dpis BETWEEN start_dpis AND NVL(end_dpis,p_dpis);
11905
11906 l_retire_prorate_convention fa_category_book_defaults.retirement_prorate_convention%TYPE;
11907
11908 --Bug# 3156924 :
11909 l_calling_interface CONSTANT VARCHAR2(30) := 'OKLRSPAB:Split Asset';
11910 --Bug# 4028371
11911 l_fa_unit_adj_date date;
11912
11913
11914 BEGIN
11915
11916 x_return_status := OKL_API.G_RET_STS_SUCCESS;
11917 -- Call start_activity to create savepoint, check compatibility
11918 -- and initialize message list
11919 x_return_status := OKL_API.START_ACTIVITY (
11920 l_api_name
11921 ,p_init_msg_list
11922 ,'_PVT'
11923 ,x_return_status);
11924 -- Check if activity started successfully
11925 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
11926 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
11927 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
11928 RAISE OKL_API.G_EXCEPTION_ERROR;
11929 END IF;
11930
11931
11932 --dbms_output.disable;
11933 --dbms_output.enable(1000000);
11934 --dbms_output.put_line('begin');
11935 --fa_srvr_msg.init_server_message;
11936 --fa_debug_pkg.set_debug_flag(debug_flag => 'YES');
11937
11938 -- Get standard who info
11939 l_request_id := fnd_global.conc_request_id;
11940 fnd_profile.get('LOGIN_ID', l_trans_rec.who_info.last_update_login);
11941 fnd_profile.get('USER_ID', l_trans_rec.who_info.last_updated_by);
11942 IF (l_trans_rec.who_info.last_updated_by IS NULL) THEN
11943 l_trans_rec.who_info.last_updated_by := -1;
11944 END IF;
11945 IF (l_trans_rec.who_info.last_update_login IS NULL) THEN
11946 l_trans_rec.who_info.last_update_login := -1;
11947 END IF;
11948
11949 l_trans_rec.who_info.last_update_date := SYSDATE;
11950 l_trans_rec.who_info.creation_date := l_trans_rec.who_info.last_update_date;
11951 l_trans_rec.who_info.created_by := l_trans_rec.who_info.last_updated_by;
11952
11953 l_trans_rec.transaction_type_code := NULL; -- this will be determined inside API
11954 l_trans_rec.transaction_date_entered := NULL; --defaults to dpis
11955 --Bug# 3156924 :
11956 l_trans_rec.calling_interface := l_calling_interface;
11957 l_trans_rec.transaction_name := SUBSTR(TO_CHAR(p_trx_number),1,20);
11958
11959 l_asset_hdr_rec.asset_id := p_ast_line_rec.asset_id;
11960 l_asset_hdr_rec.book_type_code := p_ast_line_rec.corporate_book;
11961 l_asset_hdr_rec.period_of_addition := NULL;
11962
11963 l_split_factor := (p_txdv_rec.quantity/p_txlv_rec.current_units);
11964
11965 --Bug# 3156924 :
11966 OPEN l_fcbd_csr(p_book_type_code => l_asset_hdr_rec.book_type_code,
11967 p_category_id => p_ast_line_rec.depreciation_category,
11968 p_dpis => p_ast_line_rec.in_service_date);
11969
11970 FETCH l_fcbd_csr INTO l_retire_prorate_convention;
11971 IF l_fcbd_csr%NOTFOUND THEN
11972 NULL;
11973 END IF;
11974 CLOSE l_fcbd_csr;
11975
11976 --l_asset_retire_rec.retirement_prorate_convention := 'MID-MONTH';
11977 l_asset_retire_rec.retirement_prorate_convention := l_retire_prorate_convention;
11978 -- what should retirement prorate convntion be
11979 --l_asset_retire_rec.date_retired := NULL; -- will be current period by default
11980 --3156924 :
11981 --l_asset_retire_rec.date_retired := p_trx_date; -- will be current period by default
11982
11983 IF NVL(p_txdv_rec.split_percent,0) <> 0 OR p_txdv_rec.split_percent <> OKL_API.G_MISS_NUM THEN
11984 --fully retire for split asset compoents
11985 l_asset_retire_rec.units_retired := NULL;
11986 l_asset_retire_rec.cost_retired := p_ast_line_rec.cost;
11987 ELSE
11988 --partially retire for normal split asset
11989 --Bug# 3156924 : either units or cost should be retired
11990 --l_asset_retire_rec.units_retired := p_ast_line_rec.current_units -(p_ast_line_rec.current_units*l_split_factor);
11991 --l_asset_retire_rec.cost_retired := 30000;
11992 l_asset_retire_rec.cost_retired := p_ast_line_rec.cost - (p_ast_line_rec.cost*l_split_factor);
11993 END IF;
11994
11995 l_asset_retire_rec.proceeds_of_sale := 0;
11996 l_asset_retire_rec.cost_of_removal := 0;
11997 l_asset_retire_rec.retirement_type_code := FND_PROFILE.VALUE('OKL_SPLIT_ASSET_RETIRE_TYPE');
11998 --l_asset_retire_rec.retirement_type_code := 'SPLIT';
11999 l_asset_retire_rec.trade_in_asset_id := NULL;
12000 --l_asset_retire_rec.calculate_gain_loss := FND_API.G_FALSE;
12001 l_asset_retire_rec.calculate_gain_loss := FND_API.G_TRUE;
12002 --assign this to FND_API.G_TRUE if it is required to calculate the gain loss
12003
12004 fnd_profile.put('USER_ID',l_user_id);
12005
12006 IF NVL(p_txdv_rec.split_percent,0) <> 0 OR p_txdv_rec.split_percent <> OKL_API.G_MISS_NUM THEN
12007 --no need to do distribution level retirements as full retirment being done
12008 -- for split asset components
12009 NULL;
12010 ELSE
12011
12012 --do distribution level unit adjustments
12013 l_book_class := NULL;
12014
12015 OPEN l_book_class_cur(p_book_type_code => p_ast_line_rec.corporate_book);
12016 FETCH l_book_class_cur INTO l_book_class;
12017 IF l_book_class_cur%NOTFOUND THEN
12018 NULL;
12019 END IF;
12020 CLOSE l_book_class_cur;
12021
12022
12023 IF l_book_class = 'CORPORATE' THEN
12024 --Bug# 3156924 : either do cost retire or units retire
12025 FIXED_ASSET_unit_adjust
12026 (p_api_version => p_api_version ,
12027 p_init_msg_list => p_init_msg_list,
12028 x_return_status => x_return_status,
12029 x_msg_count => x_msg_count,
12030 x_msg_data => x_msg_data,
12031 p_ast_line_rec => p_ast_line_rec,
12032 p_txlv_rec => p_txlv_rec,
12033 p_txdv_rec => p_txdv_rec,
12034 --Bug# 3156924
12035 p_trx_date => p_trx_date,
12036 p_trx_number => p_trx_number,
12037 --Bug# 4028371
12038 x_fa_trx_date => l_fa_unit_adj_date);
12039
12040 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
12041 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
12042 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
12043 RAISE OKL_API.G_EXCEPTION_ERROR;
12044 END IF;
12045 --Bug# 3156924
12046 /*---------------commented; either retire cost or units---------------------------------------
12047 --l_asset_dist_tbl.delete;
12048 --how to find which distribution to retire from ??
12049 --l_units_to_retire := p_ast_line_rec.current_units -(p_ast_line_rec.current_units*l_split_factor);
12050 --i := 1;
12051 --open l_dist_curs(p_ast_line_rec.asset_id, p_ast_line_rec.corporate_book);
12052 --Loop
12053 --Fetch l_dist_curs into l_units_assigned, l_distribution_id;
12054 --Exit When l_dist_curs%NOTFOUND;
12055 --If l_units_to_retire = 0 Then
12056 --Exit;
12057 --Elsif l_units_to_retire >= l_units_assigned Then
12058 --l_asset_dist_tbl(i).distribution_id := l_distribution_id;
12059 --l_asset_dist_tbl(i).transaction_units := (-1)*l_units_assigned;
12060 --l_asset_dist_tbl(i).units_assigned := null;
12061 --l_asset_dist_tbl(i).assigned_to := null;
12062 --l_asset_dist_tbl(i).expense_ccid := null;
12063 --l_asset_dist_tbl(i).location_ccid := null;
12064 --l_units_to_retire := l_units_to_retire - l_units_assigned;
12065 --i := i + 1;
12066 --Elsif l_units_to_retire < l_units_assigned Then
12067 --l_asset_dist_tbl(i).distribution_id := l_distribution_id;
12068 --l_asset_dist_tbl(i).transaction_units := (-1)*l_units_to_retire;
12069 --l_asset_dist_tbl(i).units_assigned := null;
12070 --l_asset_dist_tbl(i).assigned_to := null;
12071 --l_asset_dist_tbl(i).expense_ccid := null;
12072 --l_asset_dist_tbl(i).location_ccid := null;
12073 --l_units_to_retire := l_units_to_retire - l_units_to_retire;
12074 --i := i + 1;
12075 --End If;
12076 --End Loop;
12077 --close l_dist_curs;
12078 -------------------------------------------------------------------------------------------------*/
12079 --end of commented code : 3156924
12080 END IF;
12081 --bug# 3156924
12082 END IF;
12083
12084 -- l_asset_dist_tbl(2).distribution_id := 1338;
12085 -- l_asset_dist_tbl(2).transaction_units := -1;
12086 -- l_asset_dist_tbl(2).units_assigned := null;
12087 -- l_asset_dist_tbl(2).assigned_to := null;
12088 -- l_asset_dist_tbl(2).expense_ccid := null;
12089 -- l_asset_dist_tbl(2).location_ccid := null;
12090
12091
12092 FA_RETIREMENT_PUB.do_retirement
12093 (p_api_version => p_api_version
12094 ,p_init_msg_list => p_init_msg_list
12095 ,p_commit => l_commit
12096 ,p_validation_level => l_validation_level
12097 --Bug# 3156924:
12098 --,p_calling_fn => l_calling_fn
12099 ,p_calling_fn => l_calling_interface
12100 ,x_return_status => x_return_status
12101 ,x_msg_count => x_msg_count
12102 ,x_msg_data => x_msg_data
12103 ,px_trans_rec => l_trans_rec
12104 ,px_dist_trans_rec => l_dist_trans_rec
12105 ,px_asset_hdr_rec => l_asset_hdr_rec
12106 ,px_asset_retire_rec => l_asset_retire_rec
12107 ,p_asset_dist_tbl => l_asset_dist_tbl
12108 ,p_subcomp_tbl => l_subcomp_tbl
12109 ,p_inv_tbl => l_inv_tbl
12110 );
12111
12112 /*--------------------FA Debugging Code Commented ------------------------------
12113 if x_return_status = FND_API.G_FALSE then
12114 raise api_error;
12115 end if;
12116
12117 -- Dump Debug messages when run in debug mode to log file
12118 if (fa_debug_pkg.print_debug) then
12119 fa_debug_pkg.Write_Debug_Log;
12120 end if;
12121
12122 fa_srvr_msg.add_message(
12123 calling_fn => l_calling_fn,
12124 name => 'FA_SHARED_END_SUCCESS',
12125 token1 => 'PROGRAM',
12126 value1 => 'RETIREMENT_API');
12127
12128 mesg_count := fnd_msg_pub.count_msg;
12129
12130 if (mesg_count > 0) then
12131 temp_str := fnd_msg_pub.get(fnd_msg_pub.G_FIRST, fnd_api.G_FALSE);
12132 --dbms_output.put_line('dump: ' || temp_str);
12133
12134 for I in 1..(mesg_count -1) loop
12135 temp_str := fnd_msg_pub.get(fnd_msg_pub.G_NEXT, fnd_api.G_FALSE);
12136 --dbms_output.put_line('dump: ' || temp_str);
12137 end loop;
12138 else
12139 --dbms_output.put_line('dump: NO MESSAGE !');
12140 end if;
12141 --------------------FA Debugging Code Commented END------------------------------*/
12142 --dbms_output.put_line('After do retirement :'||x_return_status);
12143
12144 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
12145 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
12146 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
12147 RAISE OKL_API.G_EXCEPTION_ERROR;
12148 END IF;
12149 --Bug# 3156924
12150 --End If;
12151 --x_asset_hdr_rec := l_asset_hdr_rec;
12152 --Bug# 4028371
12153 x_fa_trx_date := l_trans_rec.transaction_date_entered;
12154 OKL_API.END_ACTIVITY (x_msg_count,
12155 x_msg_data );
12156 EXCEPTION
12157 WHEN OKL_API.G_EXCEPTION_ERROR THEN
12158 x_return_status := OKL_API.HANDLE_EXCEPTIONS(
12159 l_api_name,
12160 G_PKG_NAME,
12161 'OKL_API.G_RET_STS_ERROR',
12162 x_msg_count,
12163 x_msg_data,
12164 '_PVT');
12165 WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
12166 x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
12167 l_api_name,
12168 G_PKG_NAME,
12169 'OKL_API.G_RET_STS_UNEXP_ERROR',
12170 x_msg_count,
12171 x_msg_data,
12172 '_PVT');
12173 /*--------------------FA Debugging Code Commented -------------------------------
12174 when api_error then
12175 ROLLBACK WORK;
12176
12177 fa_srvr_msg.add_message(
12178 calling_fn => l_calling_fn,
12179 name => 'FA_SHARED_PROGRAM_FAILED',
12180 token1 => 'PROGRAM',
12181 value1 => l_calling_fn);
12182
12183 mesg_count := fnd_msg_pub.count_msg;
12184 if (mesg_count > 0) then
12185 temp_str := fnd_msg_pub.get(fnd_msg_pub.G_FIRST, fnd_api.G_FALSE);
12186 --dbms_output.put_line('dump: ' || temp_str);
12187
12188 for I in 1..(mesg_count -1) loop
12189 temp_str := fnd_msg_pub.get(fnd_msg_pub.G_NEXT, fnd_api.G_FALSE);
12190 --dbms_output.put_line('dump: ' || temp_str);
12191 end loop;
12192 else
12193 --dbms_output.put_line('dump: NO MESSAGE !');
12194 end if;
12195 --------------------FA Debugging Code Commented END -----------------------------*/
12196 WHEN OTHERS THEN
12197 x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
12198 l_api_name,
12199 G_PKG_NAME,
12200 'OTHERS',
12201 x_msg_count,
12202 x_msg_data,
12203 '_PVT');
12204
12205
12206 END FIXED_ASSET_RETIRE;
12207 --------------------------------------------------------------------------------
12208 --Start of Comments
12209 --Procedure Name : Fixed_Asset_Adjust
12210 --Description : Adjusts the Parent fixed Asset (source asset to split) in FA
12211 --History :
12212 -- 29-Nov-2001 ashish.singh Created
12213 -- 25-JUL-2002 ashish.singh Enhancement for Fixed Asset componet
12214 -- split
12215 -- Bug# 6373605 -R12.B SAL CRs
12216 -- New IN parameters as descriped earlier in
12217 -- FIXED_ASSET_ADD
12218 --End of Comments
12219 --------------------------------------------------------------------------------
12220 PROCEDURE FIXED_ASSET_ADJUST(p_api_version IN NUMBER,
12221 p_init_msg_list IN VARCHAR2 DEFAULT OKL_API.G_FALSE,
12222 x_return_status OUT NOCOPY VARCHAR2,
12223 x_msg_count OUT NOCOPY NUMBER,
12224 x_msg_data OUT NOCOPY VARCHAR2,
12225 p_ast_line_rec IN ast_line_rec_type,
12226 p_txlv_rec IN txlv_rec_type,
12227 p_txdv_rec IN txdv_rec_type,
12228 --Bug# 3156924
12229 p_trx_date IN DATE,
12230 p_trx_number IN NUMBER,
12231 --Bug# 6373605--SLA populate source
12232 p_sla_source_header_id IN Number,
12233 p_sla_source_header_table IN Varchar2,
12234 p_sla_source_try_id IN Number,
12235 p_sla_source_line_id IN Number,
12236 p_sla_source_line_table IN Varchar2,
12237 p_sla_source_chr_id IN Number,
12238 p_sla_source_kle_id IN Number,
12239 --Bug# 6373605--SLA populate source
12240 --Bug# 4028371
12241 x_fa_trx_date OUT NOCOPY DATE) IS
12242
12243 l_return_status VARCHAR2(1) DEFAULT OKL_API.G_RET_STS_SUCCESS;
12244 l_api_name CONSTANT VARCHAR2(30) := 'FIXED_ASSET_ADJUST';
12245 l_api_version CONSTANT NUMBER := 1.0;
12246
12247 l_trans_rec FA_API_TYPES.trans_rec_type;
12248 l_asset_hdr_rec FA_API_TYPES.asset_hdr_rec_type;
12249 l_asset_fin_rec_adj FA_API_TYPES.asset_fin_rec_type;
12250 l_asset_fin_rec_new FA_API_TYPES.asset_fin_rec_type;
12251 l_asset_fin_mrc_tbl_new FA_API_TYPES.asset_fin_tbl_type;
12252 --l_asset_fin_glob_dff_rec FA_API_TYPES.asset_fin_glob_dff_rec_type;
12253 l_inv_trans_rec FA_API_TYPES.inv_trans_rec_type;
12254 l_inv_tbl FA_API_TYPES.inv_tbl_type;
12255 l_asset_deprn_rec_adj FA_API_TYPES.asset_deprn_rec_type;
12256 l_asset_deprn_rec_new FA_API_TYPES.asset_deprn_rec_type;
12257 l_asset_deprn_mrc_tbl_new FA_API_TYPES.asset_deprn_tbl_type;
12258 l_inv_rec FA_API_TYPES.inv_rec_type;
12259 l_asset_deprn_rec FA_API_TYPES.asset_deprn_rec_type;
12260 l_group_recalss_option_rec FA_API_TYPES.group_reclass_options_rec_type;
12261
12262 --parameters for unit adjustment
12263 l_asset_dist_tbl FA_API_TYPES.asset_dist_tbl_type;
12264 l_trans_rec_ua FA_API_TYPES.trans_rec_type;
12265 l_asset_hdr_rec_ua FA_API_TYPES.asset_hdr_rec_type;
12266
12267
12268 l_split_factor NUMBER;
12269 l_units_to_adjust NUMBER;
12270 i NUMBER;
12271
12272 --cursor to get the distributions
12273 CURSOR l_dist_curs(p_asset_id IN NUMBER,
12274 p_corporate_book IN VARCHAR2) IS
12275 SELECT units_assigned,
12276 distribution_id
12277 FROM OKX_AST_DST_HST_V
12278 WHERE asset_id = p_ast_line_rec.asset_id
12279 AND book_type_code = p_ast_line_rec.corporate_book
12280 AND transaction_header_id_out IS NULL
12281 AND retirement_id IS NULL;
12282
12283 l_units_assigned NUMBER;
12284 l_distribution_id NUMBER;
12285
12286 --cursor to find book class
12287 CURSOR l_book_class_cur(p_book_type_code IN VARCHAR2) IS
12288 SELECT book_class
12289 FROM okx_asst_bk_controls_v
12290 WHERE book_type_code = p_book_type_code;
12291
12292 l_book_class okx_asst_bk_controls_v.book_class%TYPE;
12293
12294 --cursor to get depreciation info
12295
12296 CURSOR deprn_cur (p_asset_id IN NUMBER,
12297 p_book_type_code IN VARCHAR2,
12298 p_split_factor IN NUMBER) IS
12299 -- gk removed below 2 params for bug 5946411
12300 SELECT -- -1 * (ytd_deprn -(ytd_deprn*p_split_factor)),
12301 -- -1 * (deprn_reserve -(deprn_reserve*p_split_factor)),
12302 -1 * (prior_fy_expense-(prior_fy_expense*p_split_factor)),
12303 -1 * (bonus_ytd_deprn-(bonus_ytd_deprn*p_split_factor)),
12304 -1 * (bonus_deprn_reserve-(bonus_deprn_reserve*p_split_factor))
12305 FROM okx_ast_dprtns_v
12306 WHERE asset_id = p_asset_id
12307 AND book_type_code = p_book_type_code
12308 AND deprn_run_date = (SELECT MAX(deprn_run_date)
12309 FROM okx_ast_dprtns_v
12310 WHERE asset_id = p_asset_id
12311 AND book_type_code = p_book_type_code);
12312
12313
12314
12315 CURSOR deprn_cur2 (p_asset_id IN NUMBER,
12316 p_book_type_code IN VARCHAR2) IS
12317 -- gk removed below 2 params for bug 5946411
12318 SELECT -- -1 * ytd_deprn,
12319 -- -1 * deprn_reserve,
12320 -1 * prior_fy_expense,
12321 -1 * bonus_ytd_deprn,
12322 -1 * bonus_deprn_reserve
12323 FROM okx_ast_dprtns_v
12324 WHERE asset_id = p_asset_id
12325 AND book_type_code = p_book_type_code
12326 AND deprn_run_date = (SELECT MAX(deprn_run_date)
12327 FROM okx_ast_dprtns_v
12328 WHERE asset_id = p_asset_id
12329 AND book_type_code = p_book_type_code);
12330
12331 --Bug# 4028371 :
12332 l_calling_interface CONSTANT VARCHAR2(30) := 'OKLRSPAB:Split Asset';
12333
12334 --Bug# 6373605 begin
12335 l_fxhv_rec okl_sla_acc_sources_pvt.fxhv_rec_type;
12336 l_fxlv_rec okl_sla_acc_sources_pvt.fxlv_rec_type;
12337 --Bug# 6373605 end
12338
12339 -- Bug# 5946411: ER
12340 --cursor to check the status of asset
12341 /* CURSOR l_cleb_sts_csr(pcleid IN NUMBER) IS
12342 SELECT cleb.sts_code sts_code,cleb.dnz_chr_id chr_id
12343 FROM okc_k_lines_b cleb
12344 WHERE cleb.id = pcleid;
12345 l_cle_status okc_k_lines_b.sts_code%TYPE; */
12346 -- Bug# 6061103
12347 CURSOR l_cleb_sts_csr(pcleid IN NUMBER) IS
12348 SELECT cleb.sts_code sts_code,
12349 cleb.dnz_chr_id chr_id,
12350 khr.PDT_ID,
12351 chr.START_DATE
12352 FROM okc_k_lines_b cleb,
12353 okl_k_headers khr,
12354 OKC_K_HEADERS_B chr
12355 WHERE cleb.id = pcleid
12356 and khr.id = cleb.dnz_chr_id
12357 and chr.id = khr.id;
12358 l_cle_status okc_k_lines_b.sts_code%TYPE;
12359
12360 --cursor to get the amortization date
12361 cursor l_max_amortize_date_csr (p_asset_id IN NUMBER,p_book_type_code IN VARCHAR2) is
12362 select max(th.amortization_start_date) amortization_start_date
12363 from fa_transaction_headers th,
12364 fa_books inbk,
12365 fa_books outbk
12366 where inbk.asset_id = p_asset_id
12367 and inbk.book_type_code = p_book_type_code
12368 and outbk.asset_id(+) = p_asset_id
12369 and outbk.book_type_code(+) = p_book_type_code
12370 and inbk.transaction_header_id_in = th.transaction_header_id
12371 and outbk.transaction_header_id_out(+) = th.transaction_header_id
12372 and th.asset_id = p_asset_id
12373 and th.book_type_code = p_book_type_code
12374 and th.transaction_type_code not in ('TRANSFER OUT', 'TRANSFER IN',
12375 'TRANSFER', 'TRANSFER IN/VOID',
12376 'RECLASS', 'UNIT ADJUSTMENT',
12377 'REINSTATEMENT');
12378 l_amortization_start_date DATE:=NULL;
12379 -- Bug# 5946411: ER End
12380
12381 -- Bug# 6061103
12382 l_amortization_date DATE;
12383 l_special_treatment_required VARCHAR2(1);
12384 l_pdt_id Number;
12385 l_start_date Date;
12386 l_chr_id number;
12387 -- Bug# 6061103 end
12388
12389 --Bug# 5946411: avsingh - parameters for getting depreciation reserve
12390 l_fa_asset_hdr_rec FA_API_TYPES.asset_hdr_rec_type;
12391 l_fa_asset_deprn_rec FA_API_TYPES.asset_deprn_rec_type;
12392 BEGIN
12393 x_return_status := OKL_API.G_RET_STS_SUCCESS;
12394 --call start activity to set savepoint
12395 x_return_status := OKL_API.START_ACTIVITY( SUBSTR(l_api_name,1,26),
12396 p_init_msg_list,
12397 '_PVT',
12398 x_return_status);
12399 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
12400 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
12401 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
12402 RAISE OKL_API.G_EXCEPTION_ERROR;
12403 END IF;
12404
12405 --------------------
12406 -- asset header info
12407 -------------------
12408 l_asset_hdr_rec.asset_id := p_ast_line_rec.asset_id;
12409 l_asset_hdr_rec.book_type_code := p_ast_line_rec.corporate_book;
12410
12411 ----------------
12412 -- trans struct
12413 ----------------
12414 -- from the dld :
12415 -- You must populate the transaction type code as. This applies to any asset
12416 -- type. The transaction subtype will default to 'EXPENSED' so u should popul
12417 -- ate the transaction subtype with 'AMORTIZED' if you wish to instead
12418 -- amortize the adjustment. If transaction subtype is AMORTIZED, you must also
12419 -- provide the amortization start date
12420
12421 --Bug# 3156924 :
12422 --l_trans_rec.transaction_type_code := 'ADJUSTMENT'; --will be derived as per DOC
12423 --l_trans_rec.transaction_subtype := 'AMORTIZED';
12424 --by default will be 'EXPENSED'
12425 --l_trans_rec.amortization_start_date := to_date('01-JAN-1995','DD-MON-YYYY');
12426
12427 --Bug# 3156924 :
12428 --l_trans_rec.amortization_start_date := p_trx_date; --required only if amortize
12429 --l_trans_rec.transaction_date_entered := p_trx_date; --will be derived as per DOC
12430 --l_trans_rec.amortization_start_date := p_ast_line_rec.in_service_date;
12431
12432
12433 --Bug# 3783518: Cost adjustment on Split to be Amortized
12434 l_trans_rec.transaction_subtype := 'AMORTIZED';
12435
12436 --Bug# 5946411: ER
12437 -- l_trans_rec.amortization_start_date := p_ast_line_rec.in_service_date;
12438 --dbms_output.put_line('l_trans_rec.amortization_start_date '||l_trans_rec.amortization_start_date);
12439 l_amortization_start_date:=NULL;
12440 -- get the status of the parent line id
12441 OPEN l_cleb_sts_csr( p_txlv_rec.kle_id);
12442 FETCH l_cleb_sts_csr INTO l_cle_status, l_chr_id, l_pdt_id, l_start_date ;
12443 close l_cleb_sts_csr;
12444 -- Bug# 6061103 start
12445 is_evergreen_df_lease
12446 (p_api_version => p_api_version,
12447 p_init_msg_list => p_init_msg_list,
12448 x_return_status => x_return_status,
12449 x_msg_count => x_msg_count,
12450 x_msg_data => x_msg_data,
12451 p_cle_id =>p_ast_line_rec.PARENT_LINE_ID, -- p_ast_line_rec.asset_id,
12452 p_book_type_code => p_ast_line_rec.corporate_book,
12453 p_asset_status => l_cle_status,
12454 p_pdt_id => l_pdt_id,
12455 p_start_date => l_start_date,
12456 x_amortization_date => l_amortization_date,
12457 x_special_treatment_required => l_special_treatment_required);
12458 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
12459 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
12460 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
12461 RAISE OKL_API.G_EXCEPTION_ERROR;
12462 END IF;
12463 if l_special_treatment_required = 'Y' then
12464 l_trans_rec.amortization_start_date := l_amortization_date;
12465 --rirawat : Handle scenario for asset with no off lease transaction
12466 IF l_amortization_date IS NULL THEN
12467 OKL_API.SET_MESSAGE(p_app_name => g_app_name,
12468 p_msg_name => 'OKL_LA_SPLIT_NOT_ALLOWED'
12469 );
12470 RAISE OKL_API.G_EXCEPTION_ERROR;
12471 END IF;
12472 else
12473 -- Bug# 6061103 end
12474 --dbms_output.put_line('Status set as l_cle_status'||l_cle_status);
12475 /* IF l_cle_status IN ('TERMINATED','EXPIRED') THEN
12476 --To prevent following FA error FA_INVALID_AMOUNT_ADJUSTMENT:
12477 -- 'The amounts you entered cause the results of the adjustment to be
12478 -- invalid for the amortization date you entered.'
12479 -- do the adjustement on the last amortization date
12480 open l_max_amortize_date_csr(p_ast_line_rec.asset_id,p_ast_line_rec.corporate_book);
12481 fetch l_max_amortize_date_csr into l_amortization_start_date;
12482 close l_max_amortize_date_csr;
12483 ELSE
12484 l_trans_rec.amortization_start_date := p_ast_line_rec.in_service_date;
12485 END IF;
12486 if l_amortization_start_date IS NOT NULL THEN
12487 l_trans_rec.amortization_start_date := l_amortization_start_date;
12488 ELSE */
12489 l_trans_rec.amortization_start_date := p_ast_line_rec.in_service_date;
12490 -- END IF;
12491 end if; -- 6061103 end if;
12492 --Bug# 5946411: ER End
12493
12494 --Bug# 3156924 :
12495 l_trans_rec.transaction_name := SUBSTR(TO_CHAR(p_trx_number),1,20); --optional
12496 l_trans_rec.calling_interface := l_calling_interface; --optional
12497
12498 IF NVL(p_txdv_rec.split_percent,0) <> 0 OR p_txdv_rec.split_percent <> OKL_API.G_MISS_NUM THEN
12499 l_split_factor := (p_txdv_rec.split_percent/100);
12500 ELSE
12501 l_split_factor := (p_txdv_rec.quantity/p_txlv_rec.current_units);
12502 END IF;
12503
12504 -----------
12505 -- fin info
12506 -----------
12507 l_asset_fin_rec_adj.set_of_books_id := p_ast_line_rec.set_of_books_id;
12508 --should take the true snapshot at this point in time and not from split trx
12509 --this is just for testing
12510 --l_asset_fin_rec_adj.cost := p_txdv_rec.cost;
12511 --l_asset_fin_rec_adj.salvage_value := p_ast_line_rec.salvage_value*l_split_factor;
12512 --
12513 --------------------
12514 --Bug #2723498 11.5.9 enhancement fix :
12515 -- For Direct Finance Lease Asset cost for original asset will be zero
12516 -- Calling adjustment API for already zero cost gives error msg. this if clause
12517 -- to avoid that
12518 --This is fixed in branch by bug#2598894
12519 --------------------
12520 IF p_ast_line_rec.cost = 0 THEN
12521 --do not call adjustments for DFL contracts
12522 NULL;
12523 ELSE
12524 IF NVL(p_txdv_rec.split_percent,0) <> 0 OR p_txdv_rec.split_percent <> OKL_API.G_MISS_NUM THEN
12525 l_asset_fin_rec_adj.cost := - p_ast_line_rec.cost;
12526 --Bug# 3950089
12527 If (p_ast_line_rec.percent_salvage_value is not null) Then
12528 l_asset_fin_rec_adj.percent_salvage_value := - p_ast_line_rec.percent_salvage_value;
12529 Else
12530 l_asset_fin_rec_adj.salvage_value := - p_ast_line_rec.salvage_value;
12531 End If;
12532 ELSE
12533 l_asset_fin_rec_adj.cost := (p_ast_line_rec.cost*l_split_factor) - p_ast_line_rec.cost;
12534 --Bug# 3950089
12535 If (p_ast_line_rec.percent_salvage_value is not null) Then
12536 l_asset_fin_rec_adj.percent_salvage_value := 0;
12537 Else
12538 l_asset_fin_rec_adj.salvage_value := (p_ast_line_rec.salvage_value*l_split_factor) - p_ast_line_rec.salvage_value;
12539 End If;
12540 END IF;
12541 --
12542
12543 --asset_deprn_rec
12544 l_asset_deprn_rec_adj.set_of_books_id := p_ast_line_rec.set_of_books_id;
12545
12546 ---------------------------------------------------------------------------------------------
12547 --Bug# 5946411 : avsingh
12548 -- If adjustment being done in period of addition depreciation reserve needs to be backed out
12549 ---------------------------------------------------------------------------------------------
12550 --1. Check if adjustment is being made in the period of addition of the asset
12551 ---------------------------------------------------------------------------------------------
12552 l_fa_asset_hdr_rec.asset_id := p_ast_line_rec.asset_id;
12553 l_fa_asset_hdr_rec.book_type_code := p_ast_line_rec.corporate_book;
12554
12555 If NOT fa_cache_pkg.fazcbc(x_book => l_fa_asset_hdr_rec.book_type_code) then
12556 OKL_API.SET_MESSAGE(p_app_name => g_app_name,
12557 p_msg_name => 'OKL_LLA_FA_CACHE_ERROR'
12558 );
12559 Raise OKL_API.G_EXCEPTION_ERROR;
12560 end if;
12561
12562 --Bug# 6804043: In R12 codeline, do not back out depreciation reserve
12563 -- when cost adjustment is done in period of addition
12564 /*
12565 If not FA_ASSET_VAL_PVT.validate_period_of_addition
12566 (p_asset_id => l_fa_asset_hdr_rec.asset_id,
12567 p_book => l_fa_asset_hdr_rec.book_type_code,
12568 p_mode => 'ABSOLUTE',
12569 px_period_of_addition => l_fa_asset_hdr_rec.period_of_addition
12570 ) then
12571 OKL_API.SET_MESSAGE(p_app_name => g_app_name,
12572 p_msg_name => 'OKL_LLA_FA_POA_ERROR'
12573 );
12574 Raise OKL_API.G_EXCEPTION_ERROR;
12575 end if;
12576
12577
12578 If nvl(l_fa_asset_hdr_rec.period_of_addition,'N') = 'Y' Then
12579 --------------------------------------
12580 --2. Get the depreciation reserve
12581 --------------------------------------
12582 get_deprn_reserve
12583 (p_api_version => p_api_version,
12584 p_init_msg_list => p_init_msg_list,
12585 x_return_status => x_return_status,
12586 x_msg_count => x_msg_count,
12587 x_msg_data => x_msg_data,
12588 p_asset_id => p_ast_line_rec.asset_id,
12589 p_book_type_code => p_ast_line_rec.corporate_book,
12590 x_asset_deprn_rec => l_fa_asset_deprn_rec);
12591
12592 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
12593 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
12594 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
12595 RAISE OKL_API.G_EXCEPTION_ERROR;
12596 END IF;
12597
12598 If l_fa_asset_deprn_rec.deprn_reserve > 0 then
12599 l_asset_deprn_rec_adj.deprn_reserve := (-1) * l_fa_asset_deprn_rec.deprn_reserve;
12600 End If;
12601 If l_fa_asset_deprn_rec.ytd_deprn > 0 then
12602 l_asset_deprn_rec_adj.ytd_deprn := (-1) * l_fa_asset_deprn_rec.ytd_deprn;
12603 End If;
12604 If l_fa_asset_deprn_rec.prior_fy_expense > 0 then
12605 l_asset_deprn_rec_adj.prior_fy_expense := (-1) * l_fa_asset_deprn_rec.prior_fy_expense;
12606 End If;
12607 If l_fa_asset_deprn_rec.bonus_ytd_deprn > 0 then
12608 l_asset_deprn_rec_adj.bonus_ytd_deprn := (-1) * l_fa_asset_deprn_rec.bonus_ytd_deprn;
12609 End If;
12610 If l_fa_asset_deprn_rec.bonus_deprn_reserve > 0 then
12611 l_asset_deprn_rec_adj.bonus_deprn_reserve := (-1) * l_fa_asset_deprn_rec.bonus_deprn_reserve;
12612 End If;
12613
12614 End If;
12615 --End Bug# 5946411
12616 */
12617 --End Bug# 6804043
12618
12619 /***** Commented as part of Bug # 5946411****************************************************/
12620 /*--avsingh : commented - As per FA no depreciation should be passed during Adjustments if it
12621 -- adjustment is not period of addition
12622 IF (p_ast_line_rec.cost + l_asset_fin_rec_adj.cost) = 0 THEN
12623 --dbms_output.put_line('opening deprn_cur2');
12624 OPEN deprn_cur2 (p_asset_id => p_ast_line_rec.asset_id,
12625 p_book_type_code => p_ast_line_rec.corporate_book);
12626 -- gk removed below 2 params for bug 5946411
12627 FETCH deprn_cur2 INTO --l_asset_deprn_rec_adj.ytd_deprn,
12628 --l_asset_deprn_rec_adj.deprn_reserve,
12629 l_asset_deprn_rec_adj.prior_fy_expense,
12630 l_asset_deprn_rec_adj.bonus_ytd_deprn,
12631 l_asset_deprn_rec_adj.bonus_deprn_reserve;
12632 IF deprn_cur2%NOTFOUND THEN
12633 NULL;
12634 END IF;
12635 CLOSE deprn_cur2;
12636 ELSE
12637 --dbms_output.put_line('opening deprn_cur');
12638 OPEN deprn_cur (p_asset_id => p_ast_line_rec.asset_id,
12639 p_book_type_code => p_ast_line_rec.corporate_book,
12640 p_split_factor => l_split_factor);
12641 -- gk removed below 2 params for bug 5946411
12642 FETCH deprn_cur INTO --l_asset_deprn_rec_adj.ytd_deprn,
12643 --l_asset_deprn_rec_adj.deprn_reserve,
12644 l_asset_deprn_rec_adj.prior_fy_expense,
12645 l_asset_deprn_rec_adj.bonus_ytd_deprn,
12646 l_asset_deprn_rec_adj.bonus_deprn_reserve;
12647 IF deprn_cur%NOTFOUND THEN
12648 NULL;
12649 END IF;
12650 CLOSE deprn_cur;
12651 END IF;
12652 ---------------End of Commented Code for Bug# 5946411-----------------------------------------------------*/
12653
12654 --dbms_output.put_line('Deprn reserve '||to_char(l_asset_deprn_rec_adj.deprn_reserve));
12655 FA_ADJUSTMENT_PUB.do_adjustment
12656 (p_api_version => p_api_version,
12657 p_init_msg_list => p_init_msg_list,
12658 p_commit => OKL_API.G_FALSE,
12659 p_validation_level => FND_API.G_VALID_LEVEL_FULL,
12660 x_return_status => x_return_status,
12661 x_msg_count => x_msg_count,
12662 x_msg_data => x_msg_data,
12663 --Bug# 3156924
12664 --p_calling_fn => null,
12665 p_calling_fn => l_calling_interface,
12666 px_trans_rec => l_trans_rec,
12667 px_asset_hdr_rec => l_asset_hdr_rec,
12668 p_asset_fin_rec_adj => l_asset_fin_rec_adj,
12669 x_asset_fin_rec_new => l_asset_fin_rec_new,
12670 x_asset_fin_mrc_tbl_new => l_asset_fin_mrc_tbl_new,
12671 px_inv_trans_rec => l_inv_trans_rec,
12672 px_inv_tbl => l_inv_tbl,
12673 p_asset_deprn_rec_adj => l_asset_deprn_rec_adj,
12674 x_asset_deprn_rec_new => l_asset_deprn_rec_new,
12675 x_asset_deprn_mrc_tbl_new => l_asset_deprn_mrc_tbl_new,
12676 p_group_reclass_options_rec => l_group_recalss_option_rec
12677 );
12678 --dbms_output.put_line('After calling FA adjustment Api '||x_return_status);
12679 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
12680 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
12681 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
12682 RAISE OKL_API.G_EXCEPTION_ERROR;
12683 END IF;
12684
12685 --Bug# 4028371 :
12686 x_fa_trx_date := l_trans_rec.transaction_date_entered;
12687
12688 --bug# 6373605 -- call populate sla sources
12689 l_fxhv_rec.source_id := p_sla_source_header_id;
12690 l_fxhv_rec.source_table := p_sla_source_header_table;
12691 l_fxhv_rec.khr_id := p_sla_source_chr_id;
12692 l_fxhv_rec.try_id := p_sla_source_try_id;
12693
12694 l_fxlv_rec.source_id := p_sla_source_line_id;
12695 l_fxlv_rec.source_table := p_sla_source_line_table;
12696 l_fxlv_rec.kle_id := p_sla_source_kle_id;
12697
12698 l_fxlv_rec.asset_id := l_asset_hdr_rec.asset_id;
12699 l_fxlv_rec.fa_transaction_id := l_trans_rec.transaction_header_id;
12700 l_fxlv_rec.asset_book_type_name := l_asset_hdr_rec.book_type_code;
12701
12702 OKL_SLA_ACC_SOURCES_PVT.populate_sources(
12703 p_api_version => p_api_version
12704 ,p_init_msg_list => p_init_msg_list
12705 ,p_fxhv_rec => l_fxhv_rec
12706 ,p_fxlv_rec => l_fxlv_rec
12707 ,x_return_status => x_return_status
12708 ,x_msg_count => x_msg_count
12709 ,x_msg_data => x_msg_data
12710 );
12711 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
12712 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
12713 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
12714 RAISE OKL_API.G_EXCEPTION_ERROR;
12715 END IF;
12716 --bug# 6373605 -- call populate SLA sources
12717
12718 END IF;
12719
12720 l_book_class := NULL;
12721 OPEN l_book_class_cur(p_book_type_code => p_ast_line_rec.corporate_book);
12722 FETCH l_book_class_cur INTO l_book_class;
12723 IF l_book_class_cur%NOTFOUND THEN
12724 NULL;
12725 END IF;
12726 CLOSE l_book_class_cur;
12727
12728 IF l_book_class = 'CORPORATE' THEN
12729 --dbms_output.put_line('In adjust split units book type code '|| p_ast_line_rec.corporate_book);
12730 --now do the unit adjustments
12731 l_asset_hdr_rec_ua.asset_id := p_ast_line_rec.asset_id;
12732 l_asset_hdr_rec_ua.book_type_code := p_ast_line_rec.corporate_book;
12733
12734 --l_trans_rec_ua.transaction_type_code := NULL;
12735 --l_trans_rec_ua.transaction_subtype := NULL;
12736 --l_trans_rec_ua.amortization_start_date := to_date('01-JAN-1995','DD-MON-YYYY');
12737 --l_trans_rec_ua.amortization_start_date := NULL;
12738 --l_trans_rec_ua.transaction_date_entered := p_ast_line_rec.in_service_date;
12739 --Bug# 3156924 :
12740 --l_trans_rec_ua.transaction_date_entered := null;
12741 --l_trans_rec_ua.transaction_date_entered := p_trx_date;
12742 -- Bug# 6061103 -- start
12743 l_trans_rec_ua.amortization_start_date := p_ast_line_rec.in_service_date;
12744 -- Bug# 6061103 -- end
12745 l_trans_rec_ua.transaction_name := SUBSTR(TO_CHAR(p_trx_number),1,20);
12746 l_trans_rec_ua.calling_interface := l_calling_interface;
12747
12748 l_trans_rec_ua.who_info.last_updated_by := FND_GLOBAL.USER_ID;
12749 l_trans_rec_ua.who_info.last_update_login := FND_GLOBAL.LOGIN_ID;
12750
12751
12752 --how to find which distribution to adjust from ??
12753 l_asset_dist_tbl.DELETE;
12754 --dbms_output.put_line('split factor '||to_char(l_split_factor));
12755 --dbms_output.put_line('current units '||to_char(p_ast_line_rec.current_units));
12756
12757 IF NVL(p_txdv_rec.split_percent,0) <> 0 OR p_txdv_rec.split_percent <> OKL_API.G_MISS_NUM THEN
12758 --l_units_to_adjust := p_ast_line_rec.current_units;
12759 NULL;
12760 ELSE
12761 l_units_to_adjust := p_ast_line_rec.current_units - (p_ast_line_rec.current_units*l_split_factor);
12762 --End If;
12763
12764 --dbms_output.put_line('Units to adjust outside loop'||l_units_to_adjust );
12765 i := 1;
12766 OPEN l_dist_curs(p_ast_line_rec.asset_id, p_ast_line_rec.corporate_book);
12767 LOOP
12768 FETCH l_dist_curs INTO l_units_assigned, l_distribution_id;
12769 EXIT WHEN l_dist_curs%NOTFOUND;
12770 IF l_units_to_adjust = 0 THEN
12771 EXIT;
12772 ELSIF l_units_to_adjust >= l_units_assigned THEN
12773 l_asset_dist_tbl(i).distribution_id := l_distribution_id;
12774 l_asset_dist_tbl(i).transaction_units := (-1)*l_units_assigned;
12775 --dbms_output.put_line('Units to adjust '||to_char(l_asset_dist_tbl(i).transaction_units));
12776 l_asset_dist_tbl(i).units_assigned := NULL;
12777 l_asset_dist_tbl(i).assigned_to := NULL;
12778 l_asset_dist_tbl(i).expense_ccid := NULL;
12779 l_asset_dist_tbl(i).location_ccid := NULL;
12780 l_units_to_adjust := l_units_to_adjust - l_units_assigned;
12781 i := i + 1;
12782 ELSIF l_units_to_adjust < l_units_assigned THEN
12783 l_asset_dist_tbl(i).distribution_id := l_distribution_id;
12784 l_asset_dist_tbl(i).transaction_units := (-1)*l_units_to_adjust;
12785 --dbms_output.put_line('Units to adjust '||to_char(l_asset_dist_tbl(i).transaction_units));
12786 l_asset_dist_tbl(i).units_assigned := NULL;
12787 l_asset_dist_tbl(i).assigned_to := NULL;
12788 l_asset_dist_tbl(i).expense_ccid := NULL;
12789 l_asset_dist_tbl(i).location_ccid := NULL;
12790 l_units_to_adjust := l_units_to_adjust - l_units_to_adjust;
12791 i := i + 1;
12792 END IF;
12793 END LOOP;
12794 CLOSE l_dist_curs;
12795
12796 FA_UNIT_ADJ_PUB.do_unit_adjustment(
12797 p_api_version => p_api_version,
12798 p_init_msg_list => FND_API.G_FALSE,
12799 p_commit => FND_API.G_FALSE,
12800 p_validation_level => FND_API.G_VALID_LEVEL_FULL,
12801 --bug# 3156924 :
12802 p_calling_fn => l_calling_interface,
12803 --p_calling_fn => NULL,
12804 x_return_status => x_return_status,
12805 x_msg_count => x_msg_count,
12806 x_msg_data => x_msg_data,
12807 px_trans_rec => l_trans_rec_ua,
12808 px_asset_hdr_rec => l_asset_hdr_rec_ua,
12809 px_asset_dist_tbl => l_asset_dist_tbl);
12810
12811 --dbms_output.put_line('After calling FA unit adjust Api '||x_return_status);
12812 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
12813 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
12814 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
12815 RAISE OKL_API.G_EXCEPTION_ERROR;
12816 END IF;
12817
12818 --bug# 6373605 -- call populate sla sources
12819 l_fxhv_rec.source_id := p_sla_source_header_id;
12820 l_fxhv_rec.source_table := p_sla_source_header_table;
12821 l_fxhv_rec.khr_id := p_sla_source_chr_id;
12822 l_fxhv_rec.try_id := p_sla_source_try_id;
12823
12824 l_fxlv_rec.source_id := p_sla_source_line_id;
12825 l_fxlv_rec.source_table := p_sla_source_line_table;
12826 l_fxlv_rec.kle_id := p_sla_source_kle_id;
12827
12828 l_fxlv_rec.asset_id := l_asset_hdr_rec_ua.asset_id;
12829 l_fxlv_rec.fa_transaction_id := l_trans_rec_ua.transaction_header_id;
12830 l_fxlv_rec.asset_book_type_name := l_asset_hdr_rec_ua.book_type_code;
12831
12832 OKL_SLA_ACC_SOURCES_PVT.populate_sources(
12833 p_api_version => p_api_version
12834 ,p_init_msg_list => p_init_msg_list
12835 ,p_fxhv_rec => l_fxhv_rec
12836 ,p_fxlv_rec => l_fxlv_rec
12837 ,x_return_status => x_return_status
12838 ,x_msg_count => x_msg_count
12839 ,x_msg_data => x_msg_data
12840 );
12841
12842 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
12843 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
12844 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
12845 RAISE OKL_API.G_EXCEPTION_ERROR;
12846 END IF;
12847 --bug# 6373605 -- call populate SLA sources
12848
12849 END IF;
12850 END IF;
12851 OKL_API.END_ACTIVITY (x_msg_count,
12852 x_msg_data );
12853 EXCEPTION
12854 WHEN OKL_API.G_EXCEPTION_ERROR THEN
12855 x_return_status := OKL_API.HANDLE_EXCEPTIONS(
12856 l_api_name,
12857 G_PKG_NAME,
12858 'OKL_API.G_RET_STS_ERROR',
12859 x_msg_count,
12860 x_msg_data,
12861 '_PVT');
12862 WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
12863 x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
12864 l_api_name,
12865 G_PKG_NAME,
12866 'OKL_API.G_RET_STS_UNEXP_ERROR',
12867 x_msg_count,
12868 x_msg_data,
12869 '_PVT');
12870 WHEN OTHERS THEN
12871 x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
12872 l_api_name,
12873 G_PKG_NAME,
12874 'OTHERS',
12875 x_msg_count,
12876 x_msg_data,
12877 '_PVT');
12878 END FIXED_ASSET_ADJUST;
12879 ------------------------------------------------------------------------------
12880 --Start of comments
12881 --
12882 --Procedure Name : get_trx_rec
12883 --Purpose : Gets source transaction record for IB interface
12884 --Modification History :
12885 --15-Jun-2001 ashish.singh Created
12886 --Notes : Assigns values to transaction_type_id and source_line_ref_id
12887 --End of Comments
12888 ------------------------------------------------------------------------------
12889 PROCEDURE get_trx_rec
12890 (p_api_version IN NUMBER,
12891 p_init_msg_list IN VARCHAR2 DEFAULT OKL_API.G_FALSE,
12892 x_return_status OUT NOCOPY VARCHAR2,
12893 x_msg_count OUT NOCOPY NUMBER,
12894 x_msg_data OUT NOCOPY VARCHAR2,
12895 p_cle_id IN NUMBER,
12896 p_transaction_type IN VARCHAR2,
12897 x_trx_rec OUT NOCOPY CSI_DATASTRUCTURES_PUB.transaction_rec) IS
12898
12899 l_return_status VARCHAR2(1) := OKL_API.G_RET_STS_SUCCESS;
12900 l_api_name CONSTANT VARCHAR2(30) := 'GET_TRX_REC';
12901 l_api_version CONSTANT NUMBER := 1.0;
12902
12903 --Following cursor assumes that a transaction type called
12904 --'OKL_BOOK' will be seeded in IB
12905 CURSOR okl_trx_type_csr(p_transaction_type IN VARCHAR2)IS
12906 SELECT transaction_type_id
12907 FROM CSI_TXN_TYPES
12908 WHERE source_transaction_type = p_transaction_type;
12909 l_trx_type_id NUMBER;
12910 BEGIN
12911 OPEN okl_trx_type_csr(p_transaction_type);
12912 FETCH okl_trx_type_csr
12913 INTO l_trx_type_id;
12914 IF okl_trx_type_csr%NOTFOUND THEN
12915 --OKL LINE ACTIVATION not seeded as a source transaction in IB
12916 OKL_API.SET_MESSAGE(p_app_name => g_app_name,
12917 p_msg_name => G_IB_TXN_TYPE_NOT_FOUND,
12918 p_token1 => G_TXN_TYPE_TOKEN,
12919 p_token1_value => p_transaction_type
12920 );
12921 RAISE OKL_API.G_EXCEPTION_ERROR;
12922 END IF;
12923 CLOSE okl_trx_type_csr;
12924 --Assign transaction Type id to seeded value in cs_lookups
12925 x_trx_rec.transaction_type_id := l_trx_type_id;
12926 --Assign Source Line Ref id to contract line id of IB instance line
12927 x_trx_rec.source_line_ref_id := p_cle_id;
12928 x_trx_rec.transaction_date := SYSDATE;
12929 --confirm whether this has to be sysdate or creation date on line
12930 x_trx_rec.source_transaction_date := SYSDATE;
12931 EXCEPTION
12932 WHEN OKL_API.G_EXCEPTION_ERROR THEN
12933 x_return_status :=OKL_API.HANDLE_EXCEPTIONS
12934 (
12935 l_api_name,
12936 G_PKG_NAME,
12937 'OKL_API.G_RET_STS_ERROR',
12938 x_msg_count,
12939 x_msg_data,
12940 '_PVT'
12941 );
12942 WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
12943 x_return_status :=OKL_API.HANDLE_EXCEPTIONS
12944 (
12945 l_api_name,
12946 G_PKG_NAME,
12947 'OKL_API.G_RET_STS_UNEXP_ERROR',
12948 x_msg_count,
12949 x_msg_data,
12950 '_PVT'
12951 );
12952 WHEN OTHERS THEN
12953 x_return_status :=OKL_API.HANDLE_EXCEPTIONS
12954 (
12955 l_api_name,
12956 G_PKG_NAME,
12957 'OTHERS',
12958 x_msg_count,
12959 x_msg_data,
12960 '_PVT'
12961 );
12962 END get_trx_rec;
12963 ------------------------------------------------------------------------------
12964 --Start of comments
12965 --
12966 --Procedure Name : get_party_rec
12967 --Purpose : Gets Party records for IB interface
12968 --Modification History :
12969 --15-Jun-2001 avsingh Created
12970 --Notes : Takes chr_id as input and tries to get the party role
12971 -- for that contract for party role = 'LESSEE'
12972 -- Assuming that LESSEE will be the owner of the IB instance
12973 --End of Comments
12974 ------------------------------------------------------------------------------
12975 PROCEDURE get_party_rec
12976 (p_api_version IN NUMBER,
12977 p_init_msg_list IN VARCHAR2 DEFAULT OKL_API.G_FALSE,
12978 x_return_status OUT NOCOPY VARCHAR2,
12979 x_msg_count OUT NOCOPY NUMBER,
12980 x_msg_data OUT NOCOPY VARCHAR2,
12981 p_chrv_id IN NUMBER,
12982 x_party_tbl OUT NOCOPY CSI_DATASTRUCTURES_PUB.party_tbl) IS
12983
12984 l_party_tab OKL_JTOT_EXTRACT.party_tab_type;
12985 l_return_status VARCHAR2(1) := OKL_API.G_RET_STS_SUCCESS;
12986 l_api_name CONSTANT VARCHAR2(30) := 'GET_PARTY_REC';
12987 l_api_version CONSTANT NUMBER := 1.0;
12988
12989 l_index NUMBER;
12990
12991 BEGIN
12992 --call start activity to set savepoint
12993 l_return_status := OKL_API.START_ACTIVITY( SUBSTR(l_api_name,1,26),
12994 p_init_msg_list,
12995 '_PVT',
12996 x_return_status);
12997 IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
12998 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
12999 ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
13000 RAISE OKL_API.G_EXCEPTION_ERROR;
13001 END IF;
13002
13003 --get Party
13004 OKL_JTOT_EXTRACT.Get_Party(p_api_version => p_api_version,
13005 p_init_msg_list => p_init_msg_list,
13006 x_return_status => x_return_status,
13007 x_msg_count => x_msg_count,
13008 x_msg_data => x_msg_data,
13009 p_chr_id => p_chrv_id,
13010 p_cle_id => NULL,
13011 p_role_code => G_ITM_INST_PARTY,
13012 p_intent => G_CONTRACT_INTENT,
13013 x_party_tab => l_party_tab);
13014
13015 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
13016 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
13017 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
13018 RAISE OKL_API.G_EXCEPTION_ERROR;
13019 END IF;
13020
13021 FOR l_index IN 1..l_party_tab.LAST
13022 LOOP
13023 x_party_tbl(l_index).party_id := l_party_tab(l_index).id1;
13024 x_party_tbl(l_index).party_source_table := G_PARTY_SRC_TABLE;
13025 x_party_tbl(l_index).relationship_type_code := G_PARTY_RELATIONSHIP;
13026 x_party_tbl(l_index).contact_flag := 'N';
13027 --dbms_output.put_line('party_id' || to_char(l_index)||'-'||to_char(x_party_tbl(l_index).party_id));
13028 END LOOP;
13029
13030 IF (l_index = 0) THEN
13031 --no owner party record found
13032 OKL_API.SET_MESSAGE(p_app_name => g_app_name,
13033 p_msg_name => G_PARTY_NOT_FOUND,
13034 p_token1 => G_ROLE_CODE_TOKEN,
13035 p_token1_value => G_ITM_INST_PARTY
13036 );
13037 RAISE OKL_API.G_EXCEPTION_ERROR;
13038 END IF;
13039
13040 --Call end Activity
13041 OKL_API.END_ACTIVITY(x_msg_count, x_msg_data);
13042 EXCEPTION
13043 WHEN OKL_API.G_EXCEPTION_ERROR THEN
13044 x_return_status :=OKL_API.HANDLE_EXCEPTIONS
13045 (
13046 l_api_name,
13047 G_PKG_NAME,
13048 'OKL_API.G_RET_STS_ERROR',
13049 x_msg_count,
13050 x_msg_data,
13051 '_PVT'
13052 );
13053 WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
13054 x_return_status :=OKL_API.HANDLE_EXCEPTIONS
13055 (
13056 l_api_name,
13057 G_PKG_NAME,
13058 'OKL_API.G_RET_STS_UNEXP_ERROR',
13059 x_msg_count,
13060 x_msg_data,
13061 '_PVT'
13062 );
13063 WHEN OTHERS THEN
13064 x_return_status :=OKL_API.HANDLE_EXCEPTIONS
13065 (
13066 l_api_name,
13067 G_PKG_NAME,
13068 'OTHERS',
13069 x_msg_count,
13070 x_msg_data,
13071 '_PVT'
13072 );
13073 END get_party_rec;
13074 --------------------------------------------------------------------------------
13075 --Start of comments
13076 --Procedure Name : delete_instance_lines(Local)
13077 --Description : deletes split our instance lines in case of serialized split asset
13078 --Created for Bug# 2726870 : Split assets by serial numbers
13079 --End of comments
13080 --------------------------------------------------------------------------------
13081 PROCEDURE delete_instance_lines(p_api_version IN NUMBER,
13082 p_init_msg_list IN VARCHAR2 DEFAULT OKL_API.G_FALSE,
13083 x_return_status OUT NOCOPY VARCHAR2,
13084 x_msg_count OUT NOCOPY NUMBER,
13085 x_msg_data OUT NOCOPY VARCHAR2,
13086 p_inst_cle_id IN NUMBER,
13087 p_ib_cle_id IN NUMBER) IS
13088
13089 l_return_status VARCHAR2(1) DEFAULT OKL_API.G_RET_STS_SUCCESS;
13090 l_api_name CONSTANT VARCHAR2(30) := 'DELETE_INSTANCE_LINES';
13091 l_api_version CONSTANT NUMBER := 1.0;
13092
13093 l_inst_cle_id OKC_K_LINES_B.ID%TYPE;
13094 l_ib_cle_id OKC_K_LINES_B.ID%TYPE;
13095
13096 l_inst_clev_rec okc_contract_pub.clev_rec_type;
13097 l_ib_clev_rec okc_contract_pub.clev_rec_type;
13098 lx_inst_clev_rec okc_contract_pub.clev_rec_type;
13099 lx_ib_clev_rec okc_contract_pub.clev_rec_type;
13100
13101 l_inst_klev_rec okl_kle_pvt.klev_rec_type;
13102 l_ib_klev_rec okl_kle_pvt.klev_rec_type;
13103
13104
13105 BEGIN
13106 x_return_status := OKL_API.G_RET_STS_SUCCESS;
13107
13108 x_return_status := OKL_API.START_ACTIVITY (
13109 l_api_name
13110 ,p_init_msg_list
13111 ,'_PVT'
13112 ,x_return_status);
13113 -- Check if activity started successfully
13114 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
13115 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
13116 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
13117 RAISE OKL_API.G_EXCEPTION_ERROR;
13118 END IF;
13119
13120 l_inst_cle_id := p_inst_cle_id;
13121 l_ib_cle_id := p_ib_cle_id;
13122 l_inst_klev_rec.id := l_inst_cle_id;
13123 l_ib_klev_rec.id := l_ib_cle_id;
13124 l_inst_clev_rec.id := l_inst_cle_id;
13125 l_ib_clev_rec.id := l_ib_cle_id;
13126
13127 l_inst_clev_rec.sts_code := 'ABANDONED';
13128 l_ib_clev_rec.sts_code := 'ABANDONED';
13129
13130 ---update status of the line
13131 OKC_CONTRACT_PUB.update_contract_line(
13132 p_api_version => p_api_version,
13133 p_init_msg_list => p_init_msg_list,
13134 x_return_status => x_return_status,
13135 x_msg_count => x_msg_count,
13136 x_msg_data => x_msg_data,
13137 p_clev_rec => l_ib_clev_rec,
13138 x_clev_rec => lx_ib_clev_rec);
13139 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
13140 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
13141 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
13142 RAISE OKL_API.G_EXCEPTION_ERROR;
13143 END IF;
13144
13145 --Call line deletion API.
13146 OKC_CONTRACT_PUB.delete_contract_line(
13147 p_api_version => p_api_version,
13148 p_init_msg_list => p_init_msg_list,
13149 x_return_status => x_return_status,
13150 x_msg_count => x_msg_count,
13151 x_msg_data => x_msg_data,
13152 p_line_id => l_ib_cle_id);
13153 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
13154 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
13155 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
13156 RAISE OKL_API.G_EXCEPTION_ERROR;
13157 END IF;
13158
13159 -- delete shadows explicitly
13160 OKL_KLE_PVT.delete_row(
13161 p_api_version => l_api_version,
13162 p_init_msg_list => p_init_msg_list,
13163 x_return_status => x_return_status,
13164 x_msg_count => x_msg_count,
13165 x_msg_data => x_msg_data,
13166 p_klev_rec => l_ib_klev_rec);
13167
13168 IF x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR THEN
13169 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
13170 ELSIF x_return_status = OKL_API.G_RET_STS_ERROR THEN
13171 RAISE OKL_API.G_EXCEPTION_ERROR;
13172 END IF;
13173
13174 ---update status of the line
13175 OKC_CONTRACT_PUB.update_contract_line(
13176 p_api_version => p_api_version,
13177 p_init_msg_list => p_init_msg_list,
13178 x_return_status => x_return_status,
13179 x_msg_count => x_msg_count,
13180 x_msg_data => x_msg_data,
13181 p_clev_rec => l_inst_clev_rec,
13182 x_clev_rec => lx_inst_clev_rec);
13183 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
13184 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
13185 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
13186 RAISE OKL_API.G_EXCEPTION_ERROR;
13187 END IF;
13188
13189 --Call line deletion API
13190 OKC_CONTRACT_PUB.delete_contract_line(
13191 p_api_version => p_api_version,
13192 p_init_msg_list => p_init_msg_list,
13193 x_return_status => x_return_status,
13194 x_msg_count => x_msg_count,
13195 x_msg_data => x_msg_data,
13196 p_line_id => l_inst_cle_id);
13197 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
13198 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
13199 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
13200 RAISE OKL_API.G_EXCEPTION_ERROR;
13201 END IF;
13202
13203 -- delete shadows explicitly
13204 OKL_KLE_PVT.delete_row(
13205 p_api_version => l_api_version,
13206 p_init_msg_list => p_init_msg_list,
13207 x_return_status => x_return_status,
13208 x_msg_count => x_msg_count,
13209 x_msg_data => x_msg_data,
13210 p_klev_rec => l_ib_klev_rec);
13211
13212 IF x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR THEN
13213 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
13214 ELSIF x_return_status = OKL_API.G_RET_STS_ERROR THEN
13215 RAISE OKL_API.G_EXCEPTION_ERROR;
13216 END IF;
13217
13218 --Bug# 7033247: Deleted the wrongly pasted
13219 --duplicate lines of code from below:
13220
13221 OKL_API.END_ACTIVITY (x_msg_count,
13222 x_msg_data );
13223 EXCEPTION
13224 WHEN OKL_API.G_EXCEPTION_ERROR THEN
13225 x_return_status := OKL_API.HANDLE_EXCEPTIONS(
13226 l_api_name,
13227 G_PKG_NAME,
13228 'OKL_API.G_RET_STS_ERROR',
13229 x_msg_count,
13230 x_msg_data,
13231 '_PVT');
13232 WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
13233 x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
13234 l_api_name,
13235 G_PKG_NAME,
13236 'OKL_API.G_RET_STS_UNEXP_ERROR',
13237 x_msg_count,
13238 x_msg_data,
13239 '_PVT');
13240 WHEN OTHERS THEN
13241 x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
13242 l_api_name,
13243 G_PKG_NAME,
13244 'OTHERS',
13245 x_msg_count,
13246 x_msg_data,
13247 '_PVT');
13248 END delete_instance_lines;
13249 --------------------------------------------------------------------------------
13250 --Start of comments
13251 --Procedure Name : Create_ib_instance
13252 --Description : procedure creates split child ib instance
13253 --Modified for Bug# 2648280 : to take care of IB fix on expire instance API
13254 --end of comments
13255 --------------------------------------------------------------------------------
13256 PROCEDURE create_ib_instance(p_api_version IN NUMBER,
13257 p_init_msg_list IN VARCHAR2 DEFAULT OKL_API.G_FALSE,
13258 x_return_status OUT NOCOPY VARCHAR2,
13259 x_msg_count OUT NOCOPY NUMBER,
13260 x_msg_data OUT NOCOPY VARCHAR2,
13261 p_csi_id1 IN VARCHAR2,
13262 p_csi_id2 IN VARCHAR2,
13263 p_ib_cle_id IN NUMBER,
13264 p_chr_id IN NUMBER,
13265 p_split_qty IN NUMBER,
13266 p_txdv_rec IN txdv_rec_type,
13267 x_instance_id OUT NOCOPY NUMBER) IS
13268
13269 l_return_status VARCHAR2(1) DEFAULT OKL_API.G_RET_STS_SUCCESS;
13270 l_api_name CONSTANT VARCHAR2(30) := 'CREATE_IB_INSTANCE';
13271 l_api_version CONSTANT NUMBER := 1.0;
13272
13273 --instance query recs
13274 l_instance_query_rec CSI_DATASTRUCTURES_PUB.instance_query_rec;
13275 l_party_query_rec CSI_DATASTRUCTURES_PUB.party_query_rec;
13276 l_account_query_rec CSI_DATASTRUCTURES_PUB.party_account_query_rec;
13277 l_instance_header_tbl CSI_DATASTRUCTURES_PUB.instance_header_tbl;
13278
13279 --instance recs for creation
13280 l_instance_rec CSI_DATASTRUCTURES_PUB.instance_rec;
13281 l_ext_attrib_values_tbl CSI_DATASTRUCTURES_PUB.extend_attrib_values_tbl;
13282 l_party_tbl CSI_DATASTRUCTURES_PUB.party_tbl;
13283 l_party_tbl_in CSI_DATASTRUCTURES_PUB.party_tbl;
13284 l_account_tbl CSI_DATASTRUCTURES_PUB.party_account_tbl;
13285 l_pricing_attrib_tbl CSI_DATASTRUCTURES_PUB.pricing_attribs_tbl;
13286 l_org_assignments_tbl CSI_DATASTRUCTURES_PUB.organization_units_tbl;
13287 l_asset_assignment_tbl CSI_DATASTRUCTURES_PUB.instance_asset_tbl;
13288 l_txn_rec CSI_DATASTRUCTURES_PUB.transaction_rec;
13289
13290 --original instance updation parameters
13291 l_upd_instance_rec CSI_DATASTRUCTURES_PUB.instance_rec;
13292 l_upd_ext_attrib_values_tbl CSI_DATASTRUCTURES_PUB.extend_attrib_values_tbl;
13293 l_upd_party_tbl CSI_DATASTRUCTURES_PUB.party_tbl;
13294 l_upd_party_tbl_in CSI_DATASTRUCTURES_PUB.party_tbl;
13295 l_upd_account_tbl CSI_DATASTRUCTURES_PUB.party_account_tbl;
13296 l_upd_pricing_attrib_tbl CSI_DATASTRUCTURES_PUB.pricing_attribs_tbl;
13297 l_upd_org_assignments_tbl CSI_DATASTRUCTURES_PUB.organization_units_tbl;
13298 l_upd_asset_assignment_tbl CSI_DATASTRUCTURES_PUB.instance_asset_tbl;
13299 l_upd_txn_rec CSI_DATASTRUCTURES_PUB.transaction_rec;
13300 l_upd_instance_id_lst CSI_DATASTRUCTURES_PUB.id_tbl;
13301
13302 l_exp_txn_rec CSI_DATASTRUCTURES_PUB.transaction_rec;
13303 l_exp_instance_id_lst CSI_DATASTRUCTURES_PUB.id_tbl;
13304
13305
13306 l_no_data_found BOOLEAN;
13307
13308 --cursor to fetch customer account
13309 /*--Bug# 3124577: 11.5.10 : Rule Migration--------------------------------------
13310 CURSOR party_account_csr(p_chrv_id IN NUMBER) is
13311 SELECT to_number(rulv.object1_id1)
13312 FROM OKC_RULES_V rulv
13313 WHERE rulv.rule_information_category = G_CUST_ACCT_RULE
13314 AND rulv.dnz_chr_id = p_chrv_id
13315 AND exists (select '1'
13316 from OKC_RULE_GROUPS_V rgpv
13317 where rgpv.chr_id = p_chrv_id
13318 and rgpv.rgd_code = G_CUST_ACCT_RULE_GROUP
13319 and rgpv.id = rulv.rgp_id);
13320 --------------------------------------Bug# 3124577 : 11.5.10 Rule Migration----*/
13321
13322 CURSOR party_account_csr(p_chrv_id IN NUMBER) IS
13323 SELECT chrb.cust_acct_id
13324 FROM OKC_K_HEADERS_B chrb
13325 WHERE chrb.id = p_chrv_id;
13326
13327 l_party_account NUMBER;
13328
13329 --bug# 2648280
13330 --modified to get all the terminated statuses
13331 CURSOR inst_sts_csr(p_status_name IN VARCHAR2) IS
13332 SELECT instance_status_id
13333 FROM CSI_INSTANCE_STATUSES
13334 WHERE NVL(TERMINATED_FLAG,'N') = 'Y'
13335 AND name = p_status_name;
13336
13337 l_expired_status_id csi_instance_statuses.instance_status_id%TYPE DEFAULT NULL;
13338
13339 l_active_instances_only VARCHAR2(1);
13340
13341 --Bug # 2726870 11.5.9 enhancements - split asset into components
13342 --cursor to check if instance is to be split out in case of split asset by serial numbers
13343 CURSOR chk_instance_csr (PInstanceId IN NUMBER,PTalId IN NUMBER ) IS
13344 SELECT '!'
13345 FROM OKL_TXL_ITM_INSTS iti
13346 WHERE iti.instance_id = PInstanceId
13347 AND iti.tal_id = PTalId
13348 AND NVL(iti.selected_for_split_flag,'N') = 'Y'
13349 AND iti.tal_type = 'ALI';
13350
13351 l_instance_for_split VARCHAR2(1) DEFAULT '?';
13352
13353 --cursor to get the instance line id for parent asset line for delete
13354 CURSOR get_instance_cle_csr (PInstanceId IN NUMBER, PTalId IN NUMBER, PChrId IN NUMBER) IS
13355 SELECT inst_cle.id inst_cle_id,
13356 ib_cle.id ib_cle_id
13357 FROM
13358 okc_k_items ib_cim,
13359 okc_k_lines_b ib_cle,
13360 okc_line_styles_b ib_lse,
13361 okc_k_lines_b inst_cle,
13362 okc_line_styles_b inst_lse,
13363 okc_k_lines_b fa_cle,
13364 okc_line_styles_b fa_lse,
13365 okl_txl_Assets_b tal
13366 WHERE ib_cim.object1_id1 = TO_CHAR(PInstanceId)
13367 AND ib_cim.object1_id2 = '#'
13368 AND ib_cim.jtot_object1_code = 'OKX_IB_ITEM'
13369 AND ib_cim.cle_id = ib_cle.id
13370 AND ib_cim.dnz_chr_id = ib_cle.dnz_chr_id
13371 AND ib_cle.cle_id = inst_cle.id
13372 AND ib_cle.dnz_chr_id = inst_cle.dnz_chr_id
13373 AND ib_cle.lse_id = ib_lse.id
13374 AND ib_lse.lty_code = 'INST_ITEM'
13375 AND inst_cle.cle_id = fa_cle.cle_id
13376 AND inst_cle.dnz_chr_id = fa_cle.dnz_chr_id
13377 AND inst_cle.lse_id = inst_lse.id
13378 AND inst_lse.lty_code = 'FREE_FORM2'
13379 AND fa_cle.id = tal.kle_id
13380 AND fa_cle.dnz_chr_id = PChrId
13381 AND fa_cle.lse_id = fa_lse.id
13382 AND fa_lse.lty_code = 'FIXED_ASSET'
13383 AND tal.id = PTalId;
13384
13385 l_inst_cle_id OKC_K_LINES_B.ID%TYPE;
13386 l_ib_cle_id OKC_K_LINES_B.ID%TYPE;
13387
13388 --Cursors for Split asset components which are serialized
13389 CURSOR get_instance_cle_csr2 (PTarget_kle_id IN NUMBER, PChrId IN NUMBER) IS
13390 SELECT inst_cle.id inst_cle_id,
13391 ib_cim.id ib_cim_id
13392 FROM
13393 okc_k_items ib_cim,
13394 okc_k_lines_b ib_cle,
13395 okc_line_styles_b ib_lse,
13396 okc_k_lines_b inst_cle,
13397 okc_line_styles_b inst_lse,
13398 okc_k_lines_b fa_cle,
13399 okc_line_styles_b fa_lse
13400 WHERE
13401 ib_cim.cle_id = ib_cle.id
13402 AND ib_cim.dnz_chr_id = ib_cle.dnz_chr_id
13403 AND ib_cle.cle_id = inst_cle.id
13404 AND ib_cle.dnz_chr_id = inst_cle.dnz_chr_id
13405 AND ib_cle.lse_id = ib_lse.id
13406 AND ib_lse.lty_code = 'INST_ITEM'
13407 AND inst_cle.cle_id = fa_cle.cle_id
13408 AND inst_cle.dnz_chr_id = fa_cle.dnz_chr_id
13409 AND inst_cle.lse_id = inst_lse.id
13410 AND inst_lse.lty_code = 'FREE_FORM1'
13411 AND fa_cle.id = PTarget_kle_id
13412 AND fa_cle.dnz_chr_id = PChrId
13413 AND fa_cle.lse_id = fa_lse.id
13414 AND fa_lse.lty_code = 'FIXED_ASSET';
13415
13416
13417 l_ib_cim_id OKC_K_ITEMS.ID%TYPE;
13418 l_serialized VARCHAR2(1) DEFAULT okl_api.g_false;
13419
13420 --cursor to get the serial numbers for serialized split asset components
13421 CURSOR comp_srl_csr (p_asd_id IN NUMBER) IS
13422 SELECT serial_number,
13423 id
13424 FROM okl_txl_itm_insts
13425 WHERE asd_id = p_asd_id
13426 AND NVL(selected_for_split_flag,'N') = 'Y';
13427
13428 l_itiv_id OKL_TXL_ITM_INSTS.ID%TYPE;
13429
13430 l_iipv_rec OKL_TXL_ITM_INSTS_PUB.iipv_rec_type;
13431 lx_iipv_rec OKL_TXL_ITM_INSTS_PUB.iipv_rec_type;
13432
13433
13434 BEGIN
13435 x_return_status := OKL_API.G_RET_STS_SUCCESS;
13436 -- Call start_activity to create savepoint, check compatibility
13437 -- and initialize message list
13438 x_return_status := OKL_API.START_ACTIVITY (
13439 l_api_name
13440 ,p_init_msg_list
13441 ,'_PVT'
13442 ,x_return_status);
13443 -- Check if activity started successfully
13444 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
13445 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
13446 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
13447 RAISE OKL_API.G_EXCEPTION_ERROR;
13448 END IF;
13449
13450 --get item instance record
13451 --l_instance_rec := get_csi_rec(p_csi_id1 => p_csi_id1,
13452 -- p_csi_id2 => p_csi_id2,
13453 -- x_no_data_found => l_no_data_found);
13454
13455 l_instance_query_rec.instance_id := p_csi_id1;
13456
13457 --split asset into components modfn.
13458 IF NVL(p_txdv_rec.split_percent,0) NOT IN (0,OKL_API.G_MISS_NUM) THEN
13459 l_active_instances_only := FND_API.G_FALSE;
13460 ELSE
13461 l_active_instances_only := FND_API.G_TRUE;
13462 END IF;
13463
13464 csi_item_instance_pub.get_item_instances (
13465 p_api_version => p_api_version,
13466 p_commit => FND_API.G_FALSE,
13467 p_init_msg_list => FND_API.G_FALSE,
13468 p_validation_level => FND_API.G_VALID_LEVEL_FULL,
13469 p_instance_query_rec => l_instance_query_rec,
13470 p_party_query_rec => l_party_query_rec,
13471 p_account_query_rec => l_account_query_rec,
13472 p_transaction_id => NULL,
13473 p_resolve_id_columns => FND_API.G_FALSE,
13474 p_active_instance_only => l_active_instances_only,
13475 --modfn for split asset component
13476 --p_active_instance_only => FND_API.TRUE,
13477 x_instance_header_tbl => l_instance_header_tbl,
13478 x_return_status => x_return_status,
13479 x_msg_count => x_msg_count,
13480 x_msg_data => x_msg_data);
13481
13482 --dbms_output.put_line('After calling IB API for query status '||x_return_status);
13483 --dbms_output.put_line('After calling IB API for query instance_id '||to_char(l_instance_header_tbl(1).instance_id));
13484 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
13485 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
13486 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
13487 RAISE OKL_API.G_EXCEPTION_ERROR;
13488 ELSIF (NVL (l_instance_header_tbl.COUNT, 0) <> 1) THEN
13489 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
13490 END IF;
13491
13492 --bug# 2982927 : resetting okc inv org again from k header :
13493 okl_context.set_okc_org_context(p_chr_id => p_chr_id);
13494 --bug# 2982927
13495
13496 --BUG# 3489089 :
13497 l_instance_rec.vld_organization_id := okl_context.get_okc_organization_id;
13498 --BUG# 3489089
13499
13500 l_instance_rec.instance_id := l_instance_header_tbl(1).instance_id;
13501 l_instance_rec.instance_number := l_instance_header_tbl(1).instance_number;
13502 l_instance_rec.external_reference := l_instance_header_tbl(1).external_reference;
13503 l_instance_rec.INVENTORY_ITEM_ID := l_instance_header_tbl(1).INVENTORY_ITEM_ID;
13504 l_instance_rec.INVENTORY_REVISION := l_instance_header_tbl(1).INVENTORY_REVISION;
13505 l_instance_rec.INV_MASTER_ORGANIZATION_ID := l_instance_header_tbl(1).INV_MASTER_ORGANIZATION_ID;
13506 l_instance_rec.SERIAL_NUMBER := l_instance_header_tbl(1).SERIAL_NUMBER;
13507 l_instance_rec.MFG_SERIAL_NUMBER_FLAG := l_instance_header_tbl(1).MFG_SERIAL_NUMBER_FLAG;
13508 l_instance_rec.LOT_NUMBER := l_instance_header_tbl(1).LOT_NUMBER;
13509 l_instance_rec.QUANTITY := l_instance_header_tbl(1).QUANTITY;
13510 l_instance_rec.UNIT_OF_MEASURE := l_instance_header_tbl(1).UNIT_OF_MEASURE;
13511 l_instance_rec.ACCOUNTING_CLASS_CODE := l_instance_header_tbl(1).ACCOUNTING_CLASS_CODE;
13512 l_instance_rec.INSTANCE_CONDITION_ID := l_instance_header_tbl(1).INSTANCE_CONDITION_ID;
13513 l_instance_rec.INSTANCE_STATUS_ID := l_instance_header_tbl(1).INSTANCE_STATUS_ID;
13514 l_instance_rec.CUSTOMER_VIEW_FLAG := l_instance_header_tbl(1).CUSTOMER_VIEW_FLAG;
13515 l_instance_rec.MERCHANT_VIEW_FLAG := l_instance_header_tbl(1).MERCHANT_VIEW_FLAG;
13516 l_instance_rec.SELLABLE_FLAG := l_instance_header_tbl(1).SELLABLE_FLAG;
13517 l_instance_rec.SYSTEM_ID := l_instance_header_tbl(1).SYSTEM_ID;
13518 l_instance_rec.INSTANCE_TYPE_CODE := l_instance_header_tbl(1).INSTANCE_TYPE_CODE;
13519 l_instance_rec.LOCATION_TYPE_CODE := l_instance_header_tbl(1).LOCATION_TYPE_CODE;
13520 l_instance_rec.LOCATION_ID := l_instance_header_tbl(1).LOCATION_ID;
13521 l_instance_rec.INV_ORGANIZATION_ID := l_instance_header_tbl(1).INV_ORGANIZATION_ID;
13522 l_instance_rec.INV_SUBINVENTORY_NAME := l_instance_header_tbl(1).INV_SUBINVENTORY_NAME;
13523 l_instance_rec.INV_LOCATOR_ID := l_instance_header_tbl(1).INV_LOCATOR_ID;
13524 l_instance_rec.PA_PROJECT_ID := l_instance_header_tbl(1).PA_PROJECT_ID;
13525 l_instance_rec.PA_PROJECT_TASK_ID := l_instance_header_tbl(1).PA_PROJECT_TASK_ID;
13526 l_instance_rec.IN_TRANSIT_ORDER_LINE_ID := l_instance_header_tbl(1).IN_TRANSIT_ORDER_LINE_ID;
13527 l_instance_rec.WIP_JOB_ID := l_instance_header_tbl(1).WIP_JOB_ID;
13528 l_instance_rec.PO_ORDER_LINE_ID := l_instance_header_tbl(1).PO_ORDER_LINE_ID;
13529 l_instance_rec.LAST_OE_ORDER_LINE_ID := l_instance_header_tbl(1).LAST_OE_ORDER_LINE_ID;
13530 l_instance_rec.LAST_OE_RMA_LINE_ID := l_instance_header_tbl(1).LAST_OE_RMA_LINE_ID;
13531 l_instance_rec.LAST_PO_PO_LINE_ID := l_instance_header_tbl(1).LAST_PO_PO_LINE_ID;
13532 l_instance_rec.LAST_OE_PO_NUMBER := l_instance_header_tbl(1).LAST_OE_PO_NUMBER;
13533 l_instance_rec.LAST_WIP_JOB_ID := l_instance_header_tbl(1).LAST_WIP_JOB_ID;
13534 l_instance_rec.LAST_PA_PROJECT_ID := l_instance_header_tbl(1).LAST_PA_PROJECT_ID;
13535 l_instance_rec.LAST_PA_TASK_ID := l_instance_header_tbl(1).LAST_PA_TASK_ID;
13536 l_instance_rec.LAST_OE_AGREEMENT_ID := l_instance_header_tbl(1).LAST_OE_AGREEMENT_ID;
13537 l_instance_rec.INSTALL_DATE := l_instance_header_tbl(1).INSTALL_DATE;
13538 l_instance_rec.MANUALLY_CREATED_FLAG := l_instance_header_tbl(1).MANUALLY_CREATED_FLAG;
13539 l_instance_rec.RETURN_BY_DATE := l_instance_header_tbl(1).RETURN_BY_DATE;
13540 l_instance_rec.ACTUAL_RETURN_DATE := l_instance_header_tbl(1).ACTUAL_RETURN_DATE;
13541 l_instance_rec.CREATION_COMPLETE_FLAG := l_instance_header_tbl(1).CREATION_COMPLETE_FLAG;
13542 l_instance_rec.COMPLETENESS_FLAG := l_instance_header_tbl(1).COMPLETENESS_FLAG;
13543 l_instance_rec.LAST_TXN_LINE_DETAIL_ID := l_instance_header_tbl(1).LAST_TXN_LINE_DETAIL_ID;
13544 l_instance_rec.INSTALL_LOCATION_TYPE_CODE := l_instance_header_tbl(1).INSTALL_LOCATION_TYPE_CODE;
13545 l_instance_rec.INSTALL_LOCATION_ID := l_instance_header_tbl(1).INSTALL_LOCATION_ID;
13546 l_instance_rec.INSTANCE_USAGE_CODE := l_instance_header_tbl(1).INSTANCE_USAGE_CODE;
13547 l_instance_rec.OBJECT_VERSION_NUMBER := l_instance_header_tbl(1).OBJECT_VERSION_NUMBER;
13548
13549 IF NVL(p_txdv_rec.split_percent,0) NOT IN (0,OKL_API.G_MISS_NUM) THEN --splitting into components
13550 --expire original item instances
13551 l_expired_status_id := NULL;
13552 OPEN inst_sts_csr(p_status_name => l_instance_rec.instance_status_id);
13553 FETCH inst_sts_csr INTO l_expired_status_id;
13554 IF inst_sts_csr%NOTFOUND THEN
13555 --get trx record
13556 get_trx_rec(p_api_version => p_api_version,
13557 p_init_msg_list => p_init_msg_list,
13558 x_return_status => x_return_status,
13559 x_msg_count => x_msg_count,
13560 x_msg_data => x_msg_data,
13561 p_cle_id => p_ib_cle_id,
13562 p_transaction_type => G_IB_SPLIT_TXN_TYPE,
13563 x_trx_rec => l_exp_txn_rec);
13564
13565 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
13566 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
13567 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
13568 RAISE OKL_API.G_EXCEPTION_ERROR;
13569 END IF;
13570
13571 l_instance_rec.INSTANCE_STATUS_ID := NULL;
13572 csi_item_instance_pub.expire_item_instance
13573 (p_api_version => p_api_version
13574 ,p_commit => fnd_api.g_false
13575 ,p_init_msg_list => p_init_msg_list
13576 ,p_validation_level => fnd_api.g_valid_level_full
13577 ,p_instance_rec => l_instance_rec
13578 ,p_expire_children => fnd_api.g_false
13579 ,p_txn_rec => l_exp_txn_rec
13580 ,x_instance_id_lst => l_exp_instance_id_lst
13581 ,x_return_status => x_return_status
13582 ,x_msg_count => x_msg_count
13583 ,x_msg_data => x_msg_data);
13584
13585 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
13586 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
13587 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
13588 RAISE OKL_API.G_EXCEPTION_ERROR;
13589 END IF;
13590
13591 --bug# 2982927 : resetting okc inv org again from k header :
13592 okl_context.set_okc_org_context(p_chr_id => p_chr_id);
13593 --bug# 2982927
13594
13595 ELSE
13596
13597 NULL;
13598
13599 END IF;
13600
13601 --Bug # 2726870 :11.5.9 enhancement Split asset by serial numbers for Split Asset by components
13602 l_serialized := OKL_API.G_FALSE;
13603 Is_Inv_Item_Serialized(p_api_version => p_api_version,
13604 p_init_msg_list => p_init_msg_list,
13605 x_return_status => x_return_status,
13606 x_msg_count => x_msg_count,
13607 x_msg_data => x_msg_data,
13608 p_inv_item_id => p_txdv_rec.inventory_item_id,
13609 p_chr_id => p_chr_id,
13610 p_cle_id => NULL,
13611 x_serialized => l_serialized);
13612 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
13613 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
13614 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
13615 RAISE OKL_API.G_EXCEPTION_ERROR;
13616 END IF;
13617
13618 --If l_serialized = OKL_API.G_FALSE Then
13619 --if not serialized create new instances normally
13620 IF l_serialized = OKL_API.G_FALSE THEN
13621 l_instance_rec.serial_number := NULL;
13622 l_instance_rec.quantity := p_split_qty;
13623 ELSIF l_serialized = OKL_API.G_TRUE THEN
13624 --set serial number
13625 OPEN comp_srl_csr (p_asd_id => p_txdv_rec.id);
13626 FETCH comp_srl_csr INTO l_instance_rec.serial_number,
13627 l_itiv_id;
13628 IF comp_srl_csr%NOTFOUND THEN
13629 l_instance_rec.serial_number := NULL;
13630 END IF;
13631 CLOSE comp_srl_csr;
13632 IF l_itiv_id IS NOT NULL OR l_itiv_id <> OKL_API.G_MISS_NUM THEN
13633 --update the serail number record as processed
13634 l_iipv_rec.id := l_itiv_id;
13635 l_iipv_rec.selected_for_split_flag := 'P';
13636 --dbms_output.put_line('before update of txl itm insts sts'||x_return_status);
13637 --dbms_output.put_line('before update of txl itm insts sts'||to_char(l_iipv_rec.id));
13638 --dbms_output.put_line('before update of txl itm insts sts'||to_char(l_iipv_rec.kle_id));
13639 okl_txl_itm_insts_pub.update_txl_itm_insts
13640 (p_api_version => p_api_version,
13641 p_init_msg_list => p_init_msg_list,
13642 x_return_status => x_return_status,
13643 x_msg_count => x_msg_count,
13644 x_msg_data => x_msg_data,
13645 p_iipv_rec => l_iipv_rec,
13646 x_iipv_rec => lx_iipv_rec);
13647 --dbms_output.put_line('after update of txl itm insts sts'||x_return_status);
13648 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
13649 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
13650 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
13651 RAISE OKL_API.G_EXCEPTION_ERROR;
13652 END IF;
13653 END IF;
13654 l_instance_rec.quantity := 1;
13655 END IF;
13656
13657 l_instance_rec.INSTANCE_STATUS_ID := NULL;
13658
13659 -- now process for new ib instance creation.
13660 --get trx record
13661 l_instance_rec.instance_id := NULL;
13662 l_instance_rec.instance_number := NULL;
13663 --l_instance_rec.serial_number := Null;
13664 l_instance_rec.creation_complete_flag := NULL;
13665 --l_instance_rec.quantity := p_split_qty;
13666 l_instance_rec.object_version_number := NULL;
13667 l_instance_rec.inventory_item_id := p_txdv_rec.inventory_item_id;
13668 --Bug# 3066375:
13669 l_instance_rec.call_contracts := okl_api.g_false;
13670
13671
13672 get_trx_rec(p_api_version => p_api_version,
13673 p_init_msg_list => p_init_msg_list,
13674 x_return_status => x_return_status,
13675 x_msg_count => x_msg_count,
13676 x_msg_data => x_msg_data,
13677 p_cle_id => p_ib_cle_id,
13678 p_transaction_type => G_IB_SPLIT_TXN_TYPE,
13679 x_trx_rec => l_txn_rec);
13680
13681 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
13682 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
13683 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
13684 RAISE OKL_API.G_EXCEPTION_ERROR;
13685 END IF;
13686
13687 --get party tbl
13688 get_party_rec(p_api_version => p_api_version,
13689 p_init_msg_list => p_init_msg_list,
13690 x_return_status => x_return_status,
13691 x_msg_count => x_msg_count,
13692 x_msg_data => x_msg_data,
13693 p_chrv_id => p_chr_id,
13694 x_party_tbl => l_party_tbl);
13695
13696 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
13697 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
13698 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
13699 RAISE OKL_API.G_EXCEPTION_ERROR;
13700 END IF;
13701
13702 --get party accoutnt id
13703 l_party_account := NULL;
13704 OPEN party_account_csr(p_chrv_id => p_chr_id);
13705 FETCH party_account_csr INTO
13706 l_party_account;
13707 IF party_account_csr%NOTFOUND THEN
13708 --raise error for unable to find inv mstr org
13709 OKL_API.SET_MESSAGE(p_app_name => g_app_name,
13710 p_msg_name => G_CUST_ACCOUNT_FOUND,
13711 p_token1 => G_CONTRACT_ID_TOKEN,
13712 p_token1_value => TO_CHAR(p_chr_id)
13713 );
13714 RAISE OKL_API.G_EXCEPTION_ERROR;
13715 ELSE
13716 NULL;
13717 END IF;
13718 CLOSE party_account_csr;
13719
13720 l_account_tbl(1).instance_party_id := l_party_tbl(1).party_id;
13721 l_account_tbl(1).party_account_id := l_party_account;
13722 l_account_tbl(1).relationship_type_code := G_PARTY_RELATIONSHIP;
13723 --l_account_tbl(1).active_start_date := sysdate;
13724 l_account_tbl(1).parent_tbl_index := 1;
13725
13726 --dbms_output.put_line('before calling ib API');
13727
13728 csi_item_instance_pub.create_item_instance(p_api_version => p_api_version,
13729 p_commit => fnd_api.g_false,
13730 p_init_msg_list => p_init_msg_list,
13731 p_instance_rec => l_instance_rec,
13732 p_validation_level => fnd_api.g_valid_level_full,
13733 p_ext_attrib_values_tbl => l_ext_attrib_values_tbl,
13734 p_party_tbl => l_party_tbl,
13735 p_account_tbl => l_account_tbl,
13736 p_pricing_attrib_tbl => l_pricing_attrib_tbl,
13737 p_org_assignments_tbl => l_org_assignments_tbl,
13738 p_asset_assignment_tbl => l_asset_assignment_tbl,
13739 p_txn_rec => l_txn_rec,
13740 x_return_status => x_return_status,
13741 x_msg_count => x_msg_count,
13742 x_msg_data => x_msg_data);
13743
13744 --dbms_output.put_line('After calling IB API status '||x_return_status);
13745 --dbms_output.put_line('After calling IB API instance_id '||to_char(l_instance_rec.instance_id));
13746
13747 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
13748 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
13749 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
13750 RAISE OKL_API.G_EXCEPTION_ERROR;
13751 END IF;
13752
13753 --bug# 2982927 : resetting okc inv org again from k header :
13754 okl_context.set_okc_org_context(p_chr_id => p_chr_id);
13755 --bug# 2982927
13756
13757 x_instance_id := l_instance_rec.instance_id;
13758
13759 --Elsif l_serialized = OKL_API.G_TRUE Then
13760
13761 --1. read from the split transaction to create new serial numbers
13762 --2. For each record create instance in IB
13763 --3. Loop through all the created instances
13764 --4. fetch existing ib line
13765 -- If line found update id1,id2
13766 -- else create new ib line and plug in id1,id2
13767 --Null;
13768 --End If; --serialized
13769
13770 ELSE --for normal split assets
13771
13772 --Bug # 2726870 :11.5.9 enhancement Split asset by serial numbers for Split Asset by components
13773 l_serialized := OKL_API.G_FALSE;
13774 Is_Inv_Item_Serialized(p_api_version => p_api_version,
13775 p_init_msg_list => p_init_msg_list,
13776 x_return_status => x_return_status,
13777 x_msg_count => x_msg_count,
13778 x_msg_data => x_msg_data,
13779 p_inv_item_id => l_instance_rec.inventory_item_id,
13780 p_chr_id => p_chr_id,
13781 p_cle_id => NULL,
13782 x_serialized => l_serialized);
13783 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
13784 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
13785 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
13786 RAISE OKL_API.G_EXCEPTION_ERROR;
13787 END IF;
13788
13789 IF (l_instance_rec.quantity = 1) OR
13790 (l_instance_rec.quantity - p_split_qty) <= 0 THEN -- this will never be the case
13791 NULL; -- no need to update quantity - item instance may be serailized
13792
13793 --Bug # 2726870 11.5.9 enhancements - split asset into components
13794 IF l_serialized = OKL_API.G_TRUE THEN
13795 l_instance_for_split := '?';
13796 OPEN chk_instance_csr(PInstanceId => l_instance_rec.instance_id,
13797 PTalId => P_txdv_rec.tal_id);
13798 FETCH chk_instance_csr INTO l_instance_for_split;
13799 IF chk_instance_csr%NOTFOUND THEN
13800 NULL;
13801 END IF;
13802 CLOSE chk_instance_csr;
13803
13804 IF l_instance_for_split = '!' THEN
13805 --delete instance line from parent asset
13806 --dbms_output.put_line('instance for split');
13807 OPEN get_instance_cle_csr (PInstanceId => l_instance_rec.instance_id,
13808 PTalId => P_txdv_rec.tal_id,
13809 PChrId => p_chr_id);
13810 FETCH get_instance_cle_csr INTO l_inst_cle_id, l_ib_cle_id;
13811 IF get_instance_cle_csr%NOTFOUND THEN
13812 NULL;
13813 ELSE
13814 --Call line deletion API
13815 delete_instance_lines(
13816 p_api_version => p_api_version,
13817 p_init_msg_list => p_init_msg_list,
13818 x_return_status => x_return_status,
13819 x_msg_count => x_msg_count,
13820 x_msg_data => x_msg_data,
13821 p_inst_cle_id => l_inst_cle_id,
13822 p_ib_cle_id => l_ib_cle_id);
13823 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
13824 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
13825 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
13826 RAISE OKL_API.G_EXCEPTION_ERROR;
13827 END IF;
13828 END IF;
13829 x_instance_id := l_instance_rec.instance_id;
13830 END IF; -- If item instance is selected for serial split
13831 END IF;--if serialized
13832
13833 ELSE
13834
13835 --do csi adjustment
13836 l_upd_instance_rec.instance_id := l_instance_rec.instance_id;
13837 l_upd_instance_rec.quantity := (l_instance_rec.quantity - p_split_qty);
13838 l_upd_instance_rec.object_version_number := l_instance_rec.object_version_number;
13839
13840 --get trx record
13841 get_trx_rec(p_api_version => p_api_version,
13842 p_init_msg_list => p_init_msg_list,
13843 x_return_status => x_return_status,
13844 x_msg_count => x_msg_count,
13845 x_msg_data => x_msg_data,
13846 p_cle_id => p_ib_cle_id,
13847 p_transaction_type => G_IB_SPLIT_TXN_TYPE,
13848 x_trx_rec => l_upd_txn_rec);
13849
13850 l_upd_txn_rec.transaction_quantity := (-1)* p_split_qty;
13851
13852 csi_item_instance_pub.update_item_instance
13853 (
13854 p_api_version => p_api_version
13855 ,p_commit => fnd_api.g_false
13856 ,p_init_msg_list => p_init_msg_list
13857 ,p_validation_level => fnd_api.g_valid_level_full
13858 ,p_instance_rec => l_upd_instance_rec
13859 ,p_ext_attrib_values_tbl => l_upd_ext_attrib_values_tbl
13860 ,p_party_tbl => l_upd_party_tbl
13861 ,p_account_tbl => l_upd_account_tbl
13862 ,p_pricing_attrib_tbl => l_upd_pricing_attrib_tbl
13863 ,p_org_assignments_tbl => l_upd_org_assignments_tbl
13864 ,p_asset_assignment_tbl => l_upd_asset_assignment_tbl
13865 ,p_txn_rec => l_upd_txn_rec
13866 ,x_instance_id_lst => l_upd_instance_id_lst
13867 ,x_return_status => x_return_status
13868 ,x_msg_count => x_msg_count
13869 ,x_msg_data => x_msg_data
13870 );
13871
13872 --dbms_output.put_line('After calling IB API for update status '||x_return_status);
13873 --dbms_output.put_line('After calling IB API update instance_id '||to_char(l_instance_rec.instance_id));
13874 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
13875 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
13876 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
13877 RAISE OKL_API.G_EXCEPTION_ERROR;
13878 END IF;
13879
13880 --bug# 2982927 : resetting okc inv org again from k header :
13881 okl_context.set_okc_org_context(p_chr_id => p_chr_id);
13882 --bug# 2982927
13883
13884 END IF;
13885
13886
13887 IF (l_serialized = OKL_API.G_TRUE) THEN
13888 NULL;
13889 --dbms_output.put_line('Serialized');
13890 x_instance_id := l_instance_rec.instance_id;
13891 ELSE
13892 --dbms_output.put_line('Not Serialized');
13893 -- now process for new ib instance creation.
13894 --get trx record
13895 l_instance_rec.instance_id := NULL;
13896 l_instance_rec.instance_number := NULL;
13897 l_instance_rec.serial_number := NULL;
13898 l_instance_rec.creation_complete_flag := NULL;
13899 l_instance_rec.quantity := p_split_qty;
13900 l_instance_rec.object_version_number := NULL;
13901 --Bug# 3066375:
13902 l_instance_rec.call_contracts := okl_api.g_false;
13903
13904
13905 get_trx_rec(p_api_version => p_api_version,
13906 p_init_msg_list => p_init_msg_list,
13907 x_return_status => x_return_status,
13908 x_msg_count => x_msg_count,
13909 x_msg_data => x_msg_data,
13910 p_cle_id => p_ib_cle_id,
13911 p_transaction_type => G_IB_SPLIT_TXN_TYPE,
13912 x_trx_rec => l_txn_rec);
13913
13914 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
13915 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
13916 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
13917 RAISE OKL_API.G_EXCEPTION_ERROR;
13918 END IF;
13919
13920 --get party tbl
13921 get_party_rec(p_api_version => p_api_version,
13922 p_init_msg_list => p_init_msg_list,
13923 x_return_status => x_return_status,
13924 x_msg_count => x_msg_count,
13925 x_msg_data => x_msg_data,
13926 p_chrv_id => p_chr_id,
13927 x_party_tbl => l_party_tbl);
13928
13929 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
13930 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
13931 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
13932 RAISE OKL_API.G_EXCEPTION_ERROR;
13933 END IF;
13934
13935 --get party accoutnt id
13936 l_party_account := NULL;
13937 OPEN party_account_csr(p_chrv_id => p_chr_id);
13938 FETCH party_account_csr INTO
13939 l_party_account;
13940 IF party_account_csr%NOTFOUND THEN
13941 --raise error for unable to find inv mstr org
13942 OKL_API.SET_MESSAGE(p_app_name => g_app_name,
13943 p_msg_name => G_CUST_ACCOUNT_FOUND,
13944 p_token1 => G_CONTRACT_ID_TOKEN,
13945 p_token1_value => TO_CHAR(p_chr_id)
13946 );
13947 RAISE OKL_API.G_EXCEPTION_ERROR;
13948 ELSE
13949 NULL;
13950 END IF;
13951 CLOSE party_account_csr;
13952
13953 l_account_tbl(1).instance_party_id := l_party_tbl(1).party_id;
13954 l_account_tbl(1).party_account_id := l_party_account;
13955 l_account_tbl(1).relationship_type_code := G_PARTY_RELATIONSHIP;
13956 --l_account_tbl(1).active_start_date := sysdate;
13957 l_account_tbl(1).parent_tbl_index := 1;
13958
13959 --dbms_output.put_line('before calling ib API');
13960
13961 csi_item_instance_pub.create_item_instance(p_api_version => p_api_version,
13962 p_commit => fnd_api.g_false,
13963 p_init_msg_list => p_init_msg_list,
13964 p_instance_rec => l_instance_rec,
13965 p_validation_level => fnd_api.g_valid_level_full,
13966 p_ext_attrib_values_tbl => l_ext_attrib_values_tbl,
13967 p_party_tbl => l_party_tbl,
13968 p_account_tbl => l_account_tbl,
13969 p_pricing_attrib_tbl => l_pricing_attrib_tbl,
13970 p_org_assignments_tbl => l_org_assignments_tbl,
13971 p_asset_assignment_tbl => l_asset_assignment_tbl,
13972 p_txn_rec => l_txn_rec,
13973 x_return_status => x_return_status,
13974 x_msg_count => x_msg_count,
13975 x_msg_data => x_msg_data);
13976
13977 --dbms_output.put_line('After calling IB API status '||x_return_status);
13978 --dbms_output.put_line('After calling IB API instance_id '||to_char(l_instance_rec.instance_id));
13979
13980 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
13981 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
13982 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
13983 RAISE OKL_API.G_EXCEPTION_ERROR;
13984 END IF;
13985
13986 --bug# 2982927 : resetting okc inv org again from k header :
13987 okl_context.set_okc_org_context(p_chr_id => p_chr_id);
13988 --bug# 2982927
13989
13990 END IF; --If serail number split
13991 x_instance_id := l_instance_rec.instance_id;
13992 END IF; --type of split
13993
13994 OKL_API.END_ACTIVITY (x_msg_count,
13995 x_msg_data );
13996 EXCEPTION
13997 WHEN OKL_API.G_EXCEPTION_ERROR THEN
13998 x_return_status := OKL_API.HANDLE_EXCEPTIONS(
13999 l_api_name,
14000 G_PKG_NAME,
14001 'OKL_API.G_RET_STS_ERROR',
14002 x_msg_count,
14003 x_msg_data,
14004 '_PVT');
14005 WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
14006 x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
14007 l_api_name,
14008 G_PKG_NAME,
14009 'OKL_API.G_RET_STS_UNEXP_ERROR',
14010 x_msg_count,
14011 x_msg_data,
14012 '_PVT');
14013 WHEN OTHERS THEN
14014 x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
14015 l_api_name,
14016 G_PKG_NAME,
14017 'OTHERS',
14018 x_msg_count,
14019 x_msg_data,
14020 '_PVT');
14021 END create_ib_instance;
14022 --------------------------------------------------------------------------------
14023 --Start of Comments
14024 --Procedure Name : consolidate_ib_lines (local)
14025 --Description : Will consoldate the ib lines for split asset into
14026 -- components when either source or target asset is serialized
14027 --History :
14028 -- 30-Jan-2003 ashish.singh Created
14029 --End of Comments
14030 --------------------------------------------------------------------------------
14031 PROCEDURE consolidate_ib_lines(p_api_version IN NUMBER,
14032 p_init_msg_list IN VARCHAR2,
14033 x_return_status OUT NOCOPY VARCHAR2,
14034 x_msg_count OUT NOCOPY NUMBER,
14035 x_msg_data OUT NOCOPY VARCHAR2,
14036 p_txdv_rec IN txdv_rec_type,
14037 p_txlv_rec IN txlv_rec_type
14038 ) IS
14039 l_return_status VARCHAR2(1) DEFAULT OKL_API.G_RET_STS_SUCCESS;
14040 l_api_name CONSTANT VARCHAR2(30) := 'CONSOLIDATE_IB_LINES';
14041 l_api_version CONSTANT NUMBER := 1.0;
14042
14043 --Cursor to get model line inventory item on parent line
14044 CURSOR inv_itm_csr(p_fa_line_id IN NUMBER) IS
14045 SELECT cim_model.object1_id1,
14046 cim_model.object1_id2,
14047 cle_fa.dnz_chr_id,
14048 cle_fa.cle_id
14049 FROM okc_k_items cim_model,
14050 okc_k_lines_b cle_model,
14051 okc_line_styles_b lse_model,
14052 okc_k_lines_b cle_fa
14053 WHERE cim_model.dnz_chr_id = cle_model.dnz_chr_id
14054 AND cim_model.cle_id = cle_model.id
14055 AND cle_model.lse_id = lse_model.id
14056 AND lse_model.lty_code = 'ITEM'
14057 AND cle_model.cle_id = cle_fa.cle_id
14058 AND cle_model.dnz_chr_id = cle_fa.dnz_chr_id
14059 AND cle_fa.id = p_fa_line_id;
14060
14061 l_object1_id1 OKC_K_ITEMS.object1_id1%TYPE;
14062 l_object1_id2 OKC_K_ITEMS.object1_id2%TYPE;
14063 l_chr_id NUMBER;
14064 l_cle_id NUMBER; --top line id
14065
14066 l_parent_serialized VARCHAR2(1) DEFAULT OKL_API.G_FALSE;
14067 l_child_serialized VARCHAR2(1) DEFAULT OKL_API.G_FALSE;
14068
14069 --Cursor to fetch ib instances
14070 CURSOR ib_inst_csr(p_fin_ast_id IN NUMBER) IS
14071 SELECT cle_ib.id,
14072 cle_inst.id
14073 FROM okc_k_lines_b cle_ib,
14074 okc_line_styles_b lse_ib,
14075 okc_k_lines_b cle_inst,
14076 okc_line_styles_b lse_inst
14077 WHERE cle_ib.lse_id = lse_ib.id
14078 AND lse_ib.lty_code = 'INST_ITEM'
14079 AND cle_ib.dnz_chr_id = cle_inst.dnz_chr_id
14080 AND cle_ib.cle_id = cle_inst.id
14081 AND cle_inst.lse_id = lse_inst.id
14082 AND lse_inst.lty_code = 'FREE_FORM2'
14083 AND cle_inst.cle_id = p_fin_ast_id;
14084
14085 l_ib_cle_id OKC_K_LINES_B.ID%TYPE;
14086 l_inst_cle_id OKC_K_LINES_B.ID%TYPE;
14087
14088 --Cursor to fetch new ib instance lines
14089 --Cursor ib_inst_csr(p_fin_ast_id IN NUMBER) is
14090 CURSOR new_ib_inst_csr(p_txd_id IN NUMBER) IS
14091 SELECT cle_ib.id,
14092 cle_inst.id
14093 FROM okc_k_lines_b cle_ib,
14094 okc_line_styles_b lse_ib,
14095 okc_k_lines_b cle_inst,
14096 okc_line_styles_b lse_inst,
14097 okc_k_lines_b cle_fa,
14098 okl_txd_assets_b txdb
14099 WHERE cle_ib.lse_id = lse_ib.id
14100 AND lse_ib.lty_code = 'INST_ITEM'
14101 AND cle_ib.dnz_chr_id = cle_inst.dnz_chr_id
14102 AND cle_ib.cle_id = cle_inst.id
14103 AND cle_inst.lse_id = lse_inst.id
14104 AND lse_inst.lty_code = 'FREE_FORM2'
14105 AND cle_inst.cle_id = cle_fa.cle_id
14106 AND cle_fa.id = txdb.target_kle_id
14107 AND txdb.id = p_txd_id;
14108
14109 l_tgt_ib_cle_id OKC_K_LINES_B.ID%TYPE;
14110 l_tgt_inst_cle_id OKC_K_LINES_B.ID%TYPE;
14111
14112
14113 --cursor to fetch child asset top line is
14114 CURSOR child_cle_csr(p_txd_id IN NUMBER) IS
14115 SELECT cle_fa.cle_id
14116 FROM okc_k_lines_b cle_fa,
14117 okl_txd_assets_b txdb
14118 WHERE cle_fa.id = txdb.target_kle_id
14119 AND txdb.id = p_txd_id;
14120
14121 l_target_cle_id OKC_K_LINES_B.ID%TYPE;
14122 l_new_inst_cle_id OKC_K_LINES_B.ID%TYPE;
14123
14124 --cursor to fetch the newly created ib line
14125 CURSOR new_ib_csr(p_new_inst_id IN NUMBER) IS
14126 SELECT id
14127 FROM okc_k_lines_b cle_new_ib
14128 WHERE cle_new_ib.cle_id = p_new_inst_id;
14129
14130 l_new_ib_cle_id OKC_K_LINES_B.ID%TYPE;
14131
14132 --table of line records for updating statuses of the new lines
14133 l_clev_tbl OKL_OKC_MIGRATION_PVT.clev_tbl_type;
14134 lx_clev_tbl OKL_OKC_MIGRATION_PVT.clev_tbl_type;
14135 j NUMBER DEFAULT 0;
14136
14137 -- Bug# 5946411: ER
14138 --cursor to check the status of asset
14139 CURSOR l_cleb_sts_csr(pcleid IN NUMBER) IS
14140 SELECT cleb.sts_code sts_code
14141 FROM okc_k_lines_b cleb
14142 WHERE cleb.id = pcleid;
14143 l_cle_status okc_k_lines_b.sts_code%TYPE;
14144 -- Bug# 5946411: ER End
14145 BEGIN
14146 x_return_status := OKL_API.G_RET_STS_SUCCESS;
14147 -- Call start_activity to create savepoint, check compatibility
14148 -- and initialize message list
14149 x_return_status := OKL_API.START_ACTIVITY (
14150 l_api_name
14151 ,p_init_msg_list
14152 ,'_PVT'
14153 ,x_return_status);
14154 -- Check if activity started successfully
14155 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
14156 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
14157 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
14158 RAISE OKL_API.G_EXCEPTION_ERROR;
14159 END IF;
14160 -- Bug# 5946411: ER
14161 -- get the status of the parent line id
14162 OPEN l_cleb_sts_csr( p_txlv_rec.kle_id);
14163 FETCH l_cleb_sts_csr INTO l_cle_status;
14164 close l_cleb_sts_csr;
14165 --dbms_output.put_line('consolidate_ib_line--p_txlv_rec.kle_id'||p_txlv_rec.kle_id);
14166 --dbms_output.put_line('Status set as l_cle_status'||l_cle_status);
14167 -- Bug# 5946411: ER End
14168
14169 OPEN inv_itm_csr(p_fa_line_id => p_txlv_rec.kle_id);
14170 FETCH inv_itm_csr INTO l_object1_id1,
14171 l_object1_id2,
14172 l_chr_id,
14173 l_cle_id;
14174 CLOSE inv_itm_csr;
14175
14176 --evaluate if parent asset is serialized
14177 l_parent_serialized := OKL_API.G_FALSE;
14178 Is_Inv_Item_Serialized(p_api_version => p_api_version,
14179 p_init_msg_list => p_init_msg_list,
14180 x_return_status => x_return_status,
14181 x_msg_count => x_msg_count,
14182 x_msg_data => x_msg_data,
14183 p_inv_item_id => TO_NUMBER(l_object1_id1),
14184 p_chr_id => l_chr_id,
14185 p_cle_id => NULL,
14186 x_serialized => l_parent_serialized);
14187 --dbms_output.put_line('After parent serialized '||x_return_status);
14188 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
14189 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
14190 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
14191 RAISE OKL_API.G_EXCEPTION_ERROR;
14192 END IF;
14193
14194 --evaluate if child asset is serialized
14195 l_child_serialized := OKL_API.G_FALSE;
14196 Is_Inv_Item_Serialized(p_api_version => p_api_version,
14197 p_init_msg_list => p_init_msg_list,
14198 x_return_status => x_return_status,
14199 x_msg_count => x_msg_count,
14200 x_msg_data => x_msg_data,
14201 p_inv_item_id => p_txdv_rec.inventory_item_id,
14202 p_chr_id => l_chr_id,
14203 p_cle_id => NULL,
14204 x_serialized => l_child_serialized);
14205 --dbms_output.put_line('After child serialized '||x_return_status);
14206 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
14207 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
14208 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
14209 RAISE OKL_API.G_EXCEPTION_ERROR;
14210 END IF;
14211
14212 IF l_parent_serialized = OKL_API.G_FALSE AND l_child_serialized = OKL_API.G_FALSE THEN
14213 --dbms_output.put_line('Both not serialized '||x_return_status);
14214 NULL;
14215 ELSIF l_parent_serialized = OKL_API.G_TRUE AND l_child_serialized = OKL_API.G_TRUE THEN
14216 --dbms_output.put_line('Both serialized '||x_return_status);
14217 NULL;
14218 ELSIF l_parent_serialized = OKL_API.G_TRUE AND l_child_serialized = OKL_API.G_FALSE THEN
14219 --dbms_output.put_line('Parent serialized,Child not'||x_return_status);
14220 --trim extra ib instance lines from child
14221 FOR i IN 1..(p_txlv_rec.current_units -1)
14222 LOOP
14223 --Open ib_inst_csr(p_fin_ast_id => l_cle_id);
14224 OPEN new_ib_inst_csr(p_txd_id => p_txdv_rec.id);
14225 FETCH new_ib_inst_csr INTO l_tgt_ib_cle_id,
14226 l_tgt_inst_cle_id;
14227 CLOSE new_ib_inst_csr;
14228 delete_instance_lines(p_api_version => p_api_version,
14229 p_init_msg_list => p_init_msg_list,
14230 x_return_status => x_return_status,
14231 x_msg_count => x_msg_count,
14232 x_msg_data => x_msg_data,
14233 p_inst_cle_id => l_tgt_inst_cle_id,
14234 p_ib_cle_id => l_tgt_ib_cle_id);
14235 END LOOP;
14236
14237 ELSIF l_parent_serialized = OKL_API.G_FALSE AND l_child_serialized = OKL_API.G_TRUE THEN
14238 --dbms_output.put_line('Add extra ib instance line to child '||x_return_status);
14239 --Add extra ib instance line to child
14240 OPEN ib_inst_csr(p_fin_ast_id => l_cle_id);
14241 FETCH ib_inst_csr INTO l_ib_cle_id,
14242 l_inst_cle_id;
14243 CLOSE ib_inst_csr;
14244
14245 OPEN child_cle_csr(p_txd_id => p_txdv_rec.id);
14246 FETCH child_cle_csr INTO l_target_cle_id;
14247 CLOSE child_cle_csr;
14248
14249 j := 0;
14250 FOR i IN 1..(p_txlv_rec.current_units-1)
14251 LOOP
14252 --dbms_output.put_line('before Copying lines '||to_char(i)||x_return_status);
14253 --dbms_output.put_line('source cle '||to_char(l_inst_cle_id)||x_return_status);
14254 --dbms_output.put_line('target cle '||to_char(l_target_cle_id)||x_return_status);
14255
14256 OKL_COPY_CONTRACT_PUB.COPY_CONTRACT_LINES(
14257 p_api_version => p_api_version,
14258 p_init_msg_list => p_init_msg_list,
14259 x_return_status => x_return_status,
14260 x_msg_count => x_msg_count,
14261 x_msg_data => x_msg_data,
14262 p_from_cle_id => l_inst_cle_id,
14263 p_to_cle_id => l_target_cle_id,
14264 p_to_chr_id => NULL,
14265 p_to_template_yn => 'N',
14266 p_copy_reference => 'COPY',
14267 p_copy_line_party_yn => 'Y',
14268 p_renew_ref_yn => 'N',
14269 x_cle_id => l_new_inst_cle_id);
14270
14271 --dbms_output.put_line('After Copying lines '||to_char(i)||x_return_status);
14272 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
14273 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
14274 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
14275 RAISE OKL_API.G_EXCEPTION_ERROR;
14276 END IF;
14277 --making the line table for update of status
14278 j := j+1;
14279 l_clev_tbl(j).id := l_new_inst_cle_id;
14280 --Bug# 5946411: ER
14281 --l_clev_tbl(j).sts_code := 'BOOKED';
14282 l_clev_tbl(j).sts_code:=l_cle_status;
14283 --dbms_output.put_line('consolidate_ib_lines l_clev_tbl(j).sts_code-->'||l_clev_tbl(j).sts_code);
14284 --Bug# 5946411: ER End
14285 OPEN new_ib_csr(p_new_inst_id=> l_new_inst_cle_id);
14286 FETCH new_ib_csr INTO l_new_ib_cle_id;
14287 CLOSE new_ib_csr;
14288 j := j+1;
14289 l_clev_tbl(j).id := l_new_ib_cle_id;
14290 --Bug# 5946411: ER
14291 --l_clev_tbl(j).sts_code := 'BOOKED';
14292 l_clev_tbl(j).sts_code := l_cle_status;
14293 --dbms_output.put_line('consolidate_ib_lines * l_clev_tbl(j).sts_code-->'||l_clev_tbl(j).sts_code);
14294 --Bug# 5946411: ER End
14295 --
14296 END LOOP;
14297 --change status of newly created lines to BOOKED
14298 IF l_clev_tbl.COUNT > 0 THEN
14299 OKL_OKC_MIGRATION_PVT.update_contract_line(
14300 p_api_version => p_api_version,
14301 p_init_msg_list => p_init_msg_list,
14302 x_return_status => x_return_status,
14303 x_msg_count => x_msg_count,
14304 x_msg_data => x_msg_data,
14305 p_restricted_update => OKC_API.G_FALSE,
14306 p_clev_tbl => l_clev_tbl,
14307 x_clev_tbl => lx_clev_tbl);
14308
14309 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
14310 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
14311 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
14312 RAISE OKL_API.G_EXCEPTION_ERROR;
14313 END IF;
14314 END IF;
14315 END IF;
14316 OKL_API.END_ACTIVITY (x_msg_count,
14317 x_msg_data );
14318 EXCEPTION
14319 WHEN OKL_API.G_EXCEPTION_ERROR THEN
14320 x_return_status := OKL_API.HANDLE_EXCEPTIONS(
14321 l_api_name,
14322 G_PKG_NAME,
14323 'OKL_API.G_RET_STS_ERROR',
14324 x_msg_count,
14325 x_msg_data,
14326 '_PVT');
14327 WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
14328 x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
14329 l_api_name,
14330 G_PKG_NAME,
14331 'OKL_API.G_RET_STS_UNEXP_ERROR',
14332 x_msg_count,
14333 x_msg_data,
14334 '_PVT');
14335 WHEN OTHERS THEN
14336 x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
14337 l_api_name,
14338 G_PKG_NAME,
14339 'OTHERS',
14340 x_msg_count,
14341 x_msg_data,
14342 '_PVT');
14343 END consolidate_ib_lines;
14344 --------------------------------------------------------------------------------
14345 --Start of Comments
14346 --Procedure Name : Relink_Ib_Lines
14347 --Description : Local procedure will be called if invnetory item is serial
14348 -- Number Controlled and split criteria is split into individu
14349 -- -als
14350 --History :
14351 -- 20-Nov-2003 avsingh Bug#3222804
14352 -- Fixed as part of this bug
14353 --End of Comments
14354 --------------------------------------------------------------------------------
14355 PROCEDURE Relink_Ib_Lines( p_api_version IN NUMBER,
14356 p_init_msg_list IN VARCHAR2,
14357 x_return_status OUT NOCOPY VARCHAR2,
14358 x_msg_count OUT NOCOPY NUMBER,
14359 x_msg_data OUT NOCOPY VARCHAR2,
14360 p_txlv_rec IN txlv_rec_type) IS
14361
14362 l_return_status VARCHAR2(1) DEFAULT OKL_API.G_RET_STS_SUCCESS;
14363 l_api_name CONSTANT VARCHAR2(30) := 'RELINK_IB_LINES';
14364 l_api_version CONSTANT NUMBER := 1.0;
14365
14366 --cursor to fetch top line id for a fixed asset line
14367 CURSOR l_cleb_csr (p_cle_id IN NUMBER) IS
14368 SELECT cleb.cle_id
14369 FROM okc_k_lines_b cleb
14370 WHERE cleb.id = p_cle_id;
14371
14372 l_parent_fina_cle_id NUMBER DEFAULT NULL;
14373 l_child_fina_cle_id NUMBER DEFAULT NULL;
14374
14375
14376 --cursor to fetch child instance lines
14377 CURSOR l_target_kle_csr(p_tal_id IN NUMBER) IS
14378 SELECT txdb.target_kle_id
14379 FROM okl_txd_assets_b txdb
14380 WHERE txdb.tal_id = p_tal_id;
14381
14382 l_target_kle_id NUMBER DEFAULT 0;
14383
14384 --cursor to fetch Inastance line id
14385 CURSOR l_instcle_csr(p_cle_id IN NUMBER) IS
14386 SELECT cleb.id
14387 FROM okc_k_lines_b cleb,
14388 okc_line_styles_b lseb
14389 WHERE lseb.id = cleb.lse_id
14390 AND lseb.lty_code = 'FREE_FORM2'
14391 AND cleb.sts_code <> 'ABANDONED'
14392 AND cleb.cle_id = p_cle_id;
14393
14394 l_instcle_id NUMBER DEFAULT NULL;
14395
14396 l_clev_rec okl_okc_migration_pvt.clev_rec_type;
14397 lx_clev_rec okl_okc_migration_pvt.clev_rec_type;
14398
14399 l_serialized VARCHAR2(1) DEFAULT OKL_API.G_FALSE;
14400
14401 BEGIN
14402
14403 x_return_status := OKL_API.G_RET_STS_SUCCESS;
14404 -- Call start_activity to create savepoint, check compatibility
14405 -- and initialize message list
14406 x_return_status := OKL_API.START_ACTIVITY (
14407 l_api_name
14408 ,p_init_msg_list
14409 ,'_PVT'
14410 ,x_return_status);
14411 -- Check if activity started successfully
14412 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
14413 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
14414 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
14415 RAISE OKL_API.G_EXCEPTION_ERROR;
14416 END IF;
14417
14418 --get the top line id for parent fixed asset line
14419
14420 OPEN l_cleb_csr(p_cle_id => p_txlv_rec.kle_id);
14421 FETCH l_cleb_csr INTO l_parent_fina_cle_id;
14422 IF l_cleb_csr%NOTFOUND THEN
14423 NULL;
14424 END IF;
14425 CLOSE l_cleb_csr;
14426
14427 IF NVL(l_parent_fina_cle_id,OKL_API.G_MISS_NUM) <> OKL_API.G_MISS_NUM THEN
14428
14429 l_serialized := is_serialized(p_cle_id => l_parent_fina_cle_id);
14430 IF l_serialized = OKL_API.G_TRUE THEN
14431 l_target_kle_id := NULL;
14432 OPEN l_target_kle_csr(p_tal_id => p_txlv_rec.id);
14433 LOOP
14434 FETCH l_target_kle_csr INTO l_target_kle_id;
14435 EXIT WHEN l_target_kle_csr%NOTFOUND;
14436 IF l_target_kle_id = p_txlv_rec.kle_id THEN
14437 NULL;
14438 ELSE
14439 l_child_fina_cle_id := NULL;
14440 OPEN l_cleb_csr(p_cle_id => l_target_kle_id);
14441 FETCH l_cleb_csr INTO l_child_fina_cle_id;
14442 IF l_cleb_csr%NOTFOUND THEN
14443 NULL;
14444 END IF;
14445 CLOSE l_cleb_csr;
14446
14447 IF NVL(l_child_fina_cle_id,OKL_API.G_MISS_NUM) <> OKL_API.G_MISS_NUM THEN
14448 l_instcle_id := NULL;
14449 OPEN l_instcle_csr(p_cle_id => l_parent_fina_cle_id);
14450 FETCH l_instcle_csr INTO l_instcle_id;
14451 IF l_instcle_csr%NOTFOUND THEN
14452 NULL;
14453 END IF;
14454 CLOSE l_instcle_csr;
14455 IF NVL(l_instcle_id,OKL_API.G_MISS_NUM) <> OKL_API.G_MISS_NUM THEN
14456 l_clev_rec.id := l_instcle_id;
14457 l_clev_rec.cle_id := l_child_fina_cle_id;
14458 OKL_OKC_MIGRATION_PVT.update_contract_line(p_api_version => p_api_version,
14459 p_init_msg_list => p_init_msg_list,
14460 x_return_status => x_return_status,
14461 x_msg_count => x_msg_count,
14462 x_msg_data => x_msg_data,
14463 p_clev_rec => l_clev_rec,
14464 x_clev_rec => lx_clev_rec);
14465 --dbms_output.put_line('after updating contract item for Asset link '||x_return_status);
14466 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
14467 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
14468 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
14469 RAISE OKL_API.G_EXCEPTION_ERROR;
14470 END IF;
14471 END IF;
14472 END IF;
14473 END IF;
14474 END LOOP;
14475 CLOSE l_target_kle_csr;
14476 ELSIF l_serialized = OKL_API.G_FALSE THEN
14477
14478 --this processing will be done in the create instance routine
14479 --as new IB instances need to be created
14480 NULL;
14481
14482 END IF;
14483 END IF;
14484 OKL_API.END_ACTIVITY (x_msg_count,
14485 x_msg_data );
14486 EXCEPTION
14487 WHEN OKL_API.G_EXCEPTION_ERROR THEN
14488 x_return_status := OKL_API.HANDLE_EXCEPTIONS(
14489 l_api_name,
14490 G_PKG_NAME,
14491 'OKL_API.G_RET_STS_ERROR',
14492 x_msg_count,
14493 x_msg_data,
14494 '_PVT');
14495 WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
14496 x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
14497 l_api_name,
14498 G_PKG_NAME,
14499 'OKL_API.G_RET_STS_UNEXP_ERROR',
14500 x_msg_count,
14501 x_msg_data,
14502 '_PVT');
14503 WHEN OTHERS THEN
14504 x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
14505 l_api_name,
14506 G_PKG_NAME,
14507 'OTHERS',
14508 x_msg_count,
14509 x_msg_data,
14510 '_PVT');
14511 END Relink_Ib_Lines;
14512 --------------------------------------------------------------------------------
14513 --Bug# : 11.5.10
14514 --Name : recalculate_costs
14515 --Creation : 23-Sep-2003
14516 --Purpose : Local procedure to recalculate and update costs on split lines
14517 --------------------------------------------------------------------------------
14518 PROCEDURE recalculate_costs(
14519 p_api_version IN NUMBER,
14520 p_init_msg_list IN VARCHAR2,
14521 x_return_status OUT NOCOPY VARCHAR2,
14522 x_msg_count OUT NOCOPY NUMBER,
14523 x_msg_data OUT NOCOPY VARCHAR2,
14524 p_chr_id IN NUMBER,
14525 p_cle_tbl IN cle_tbl_type
14526 ) IS
14527
14528 l_return_status VARCHAR2(1) DEFAULT OKL_API.G_RET_STS_SUCCESS;
14529 l_api_name CONSTANT VARCHAR2(30) := 'RECALCULATE_COSTS';
14530 l_api_version CONSTANT NUMBER := 1.0;
14531
14532 l_oec NUMBER;
14533 l_cap_amount NUMBER;
14534 l_residual_value NUMBER;
14535
14536
14537 l_clev_rec okl_okc_migration_pvt.clev_rec_type;
14538 l_klev_rec okl_contract_pub.klev_rec_type;
14539 lx_clev_rec okl_okc_migration_pvt.clev_rec_type;
14540 lx_klev_rec okl_contract_pub.klev_rec_type;
14541
14542 i NUMBER;
14543
14544 BEGIN
14545
14546 x_return_status := OKL_API.G_RET_STS_SUCCESS;
14547 -- Call start_activity to create savepoint, check compatibility
14548 -- and initialize message list
14549 x_return_status := OKL_API.START_ACTIVITY (
14550 l_api_name
14551 ,p_init_msg_list
14552 ,'_PVT'
14553 ,x_return_status);
14554 -- Check if activity started successfully
14555 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
14556 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
14557 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
14558 RAISE OKL_API.G_EXCEPTION_ERROR;
14559 END IF;
14560
14561 IF p_cle_tbl.COUNT > 0 THEN
14562 FOR i IN p_cle_tbl.FIRST..p_cle_tbl.LAST
14563 LOOP
14564 --calculate and update subsidised OEC , Capital Amount, Residual Value
14565 OKL_EXECUTE_FORMULA_PUB.EXECUTE(p_api_version => p_api_version,
14566 p_init_msg_list => p_init_msg_list,
14567 x_return_status => x_return_status,
14568 x_msg_count => x_msg_count,
14569 x_msg_data => x_msg_data,
14570 p_formula_name => G_FORMULA_OEC,
14571 p_contract_id => p_chr_id,
14572 p_line_id => p_cle_tbl(i).cle_id,
14573 x_value => l_oec);
14574
14575 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
14576 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
14577 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
14578 RAISE OKL_API.G_EXCEPTION_ERROR;
14579 END IF;
14580
14581 OKL_EXECUTE_FORMULA_PUB.EXECUTE(p_api_version => p_api_version,
14582 p_init_msg_list => p_init_msg_list,
14583 x_return_status => x_return_status,
14584 x_msg_count => x_msg_count,
14585 x_msg_data => x_msg_data,
14586 p_formula_name => G_FORMULA_CAP,
14587 p_contract_id => p_chr_id,
14588 p_line_id => p_cle_tbl(i).cle_id,
14589 x_value => l_cap_amount);
14590
14591 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
14592 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
14593 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
14594 RAISE OKL_API.G_EXCEPTION_ERROR;
14595 END IF;
14596
14597 OKL_EXECUTE_FORMULA_PUB.EXECUTE(p_api_version => p_api_version,
14598 p_init_msg_list => p_init_msg_list,
14599 x_return_status => x_return_status,
14600 x_msg_count => x_msg_count,
14601 x_msg_data => x_msg_data,
14602 p_formula_name => G_FORMULA_RES,
14603 p_contract_id => p_chr_id,
14604 p_line_id => p_cle_tbl(i).cle_id,
14605 x_value => l_residual_value);
14606
14607 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
14608 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
14609 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
14610 RAISE OKL_API.G_EXCEPTION_ERROR;
14611 END IF;
14612
14613 ----------------------------------------------------------------------
14614 --call api to update costs on asset line
14615 ----------------------------------------------------------------------
14616 l_clev_rec.id := p_cle_tbl(i).cle_id;
14617 l_klev_rec.id := p_cle_tbl(i).cle_id;
14618 l_klev_rec.oec := l_oec;
14619 l_klev_rec.capital_amount := l_cap_amount;
14620 l_klev_rec.residual_value := l_residual_value;
14621
14622
14623 okl_contract_pub.update_contract_line
14624 (p_api_version => p_api_version,
14625 p_init_msg_list => p_init_msg_list,
14626 x_return_status => x_return_status,
14627 x_msg_count => x_msg_count,
14628 x_msg_data => x_msg_data,
14629 p_clev_rec => l_clev_rec,
14630 p_klev_rec => l_klev_rec,
14631 x_clev_rec => lx_clev_rec,
14632 x_klev_rec => lx_klev_rec
14633 );
14634
14635 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
14636 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
14637 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
14638 RAISE OKL_API.G_EXCEPTION_ERROR;
14639 END IF;
14640 END LOOP;
14641 END IF;
14642
14643 OKL_API.END_ACTIVITY (x_msg_count,x_msg_data );
14644 EXCEPTION
14645 WHEN OKL_API.G_EXCEPTION_ERROR THEN
14646 x_return_status := OKL_API.HANDLE_EXCEPTIONS(
14647 l_api_name,
14648 G_PKG_NAME,
14649 'OKL_API.G_RET_STS_ERROR',
14650 x_msg_count,
14651 x_msg_data,
14652 '_PVT');
14653 WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
14654 x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
14655 l_api_name,
14656 G_PKG_NAME,
14657 'OKL_API.G_RET_STS_UNEXP_ERROR',
14658 x_msg_count,
14659 x_msg_data,
14660 '_PVT');
14661 WHEN OTHERS THEN
14662 x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
14663 l_api_name,
14664 G_PKG_NAME,
14665 'OTHERS',
14666 x_msg_count,
14667 x_msg_data,
14668 '_PVT');
14669 END recalculate_costs;
14670 --------------------------------------------------------------------------------
14671 --Start of Comments
14672 --Procedure Name : Split_Asset
14673 --Description : Selects the split Asset transaction against the line
14674 -- and splits the Asset in OKL and FA
14675 --History :
14676 -- 03-Nov-2001 ashish.singh Created
14677 -- 12-Aug-2005 smadhava Fix for Bug# 4508050
14678 --End of Comments
14679 --------------------------------------------------------------------------------
14680 PROCEDURE Split_Fixed_Asset(p_api_version IN NUMBER,
14681 p_init_msg_list IN VARCHAR2,
14682 x_return_status OUT NOCOPY VARCHAR2,
14683 x_msg_count OUT NOCOPY NUMBER,
14684 x_msg_data OUT NOCOPY VARCHAR2,
14685 p_txdv_tbl IN txdv_tbl_type,
14686 p_txlv_rec IN txlv_rec_type,
14687 x_cle_tbl OUT NOCOPY cle_tbl_type,
14688 --Bug# 6344223
14689 p_source_call IN VARCHAR2 DEFAULT 'UI') IS
14690
14691 l_return_status VARCHAR2(1) DEFAULT OKL_API.G_RET_STS_SUCCESS;
14692 l_api_name CONSTANT VARCHAR2(30) := 'SPLIT_FIXED_ASSET';
14693 l_api_version CONSTANT NUMBER := 1.0;
14694
14695 CURSOR k_line_curs(p_fa_line_id IN NUMBER) IS
14696 SELECT cle_id,
14697 dnz_chr_id,
14698 --Bug# 6373605 start
14699 sts_code
14700 --Bug# 6373605 end
14701 FROM okc_k_lines_b
14702 WHERE id = p_fa_line_id;
14703
14704 l_source_cle_id NUMBER;
14705 l_chr_id NUMBER;
14706 i NUMBER;
14707 --Bug# 6373605 start
14708 l_sts_code okc_k_lines_b.STS_CODE%TYPE;
14709 --Bug# 6373605 end
14710
14711 l_txdv_rec txdv_rec_type;
14712 l_txlv_rec txlv_rec_type;
14713
14714 l_split_cle_id NUMBER;
14715 l_split_cle_id_orig NUMBER; -- 7626121
14716 l_cle_tbl cle_tbl_type;
14717 l_ast_line_rec ast_line_rec_type;
14718
14719 CURSOR c_cim(p_id IN NUMBER) IS
14720 SELECT id,
14721 cle_id
14722 FROM okc_k_items cim
14723 WHERE EXISTS
14724 (SELECT '1'
14725 FROM okl_txd_assets_b txd
14726 WHERE txd.target_kle_id = cim.cle_id
14727 AND txd.id = p_id
14728 );
14729
14730 l_asset_hdr_rec FA_API_TYPES.asset_hdr_rec_type;
14731 l_cim_id NUMBER;
14732 l_cimv_rec cimv_rec_type;
14733 l_cimv_rec_out cimv_rec_type;
14734 l_cim_cle_id NUMBER;
14735
14736 CURSOR ib_item_cur (p_fa_line_id IN NUMBER) IS
14737 SELECT cim.object1_id1,
14738 cim.object1_id2,
14739 cim.id,
14740 cim.cle_id,
14741 cim.dnz_chr_id
14742 FROM OKC_K_ITEMS cim,
14743 OKC_K_LINES_B inst_item,
14744 OKC_LINE_STYLES_B inst_item_lse,
14745 OKC_K_LINES_B f_frm2,
14746 OKC_LINE_STYLES_B f_frm2_lse,
14747 OKC_K_LINES_B fa
14748 WHERE cim.cle_id = inst_item.id
14749 AND cim.dnz_chr_id = inst_item.dnz_chr_id
14750 AND inst_item.cle_id = f_frm2.id
14751 AND inst_item.lse_id = inst_item_lse.id
14752 AND inst_item_lse.lty_code = 'INST_ITEM'
14753 AND f_frm2.cle_id = fa.cle_id
14754 AND f_frm2.lse_id = f_frm2_lse.id
14755 AND f_frm2_lse.lty_code = 'FREE_FORM2'
14756 AND fa.id = p_fa_line_id;
14757
14758 l_csi_id1 okc_k_items.object1_id1%TYPE;
14759 l_csi_id2 okc_k_items.object1_id2%TYPE;
14760 l_csi_cim_id okc_k_items.id%TYPE;
14761 l_csi_cle_id okc_k_items.cle_id%TYPE;
14762 l_csi_chr_id okc_k_items.dnz_chr_id%TYPE;
14763 l_csi_number_of_items okc_k_items.number_of_items%TYPE;
14764
14765 l_csi_instance_id NUMBER;
14766
14767 l_trxv_rec trxv_rec_type;
14768 lx_trxv_rec trxv_rec_type;
14769
14770 l_txdv_tbl txdv_tbl_type;
14771
14772 --cursor to find if asset added in current period
14773 CURSOR check_period_of_addition(p_asset_id IN NUMBER,
14774 p_book_type_code IN VARCHAR2) IS
14775 SELECT 'Y' -- 'Y' if the current period of the asset is period of addition.
14776 FROM dual
14777 WHERE NOT EXISTS
14778 (SELECT 'x'
14779 FROM fa_deprn_summary
14780 WHERE asset_id = p_asset_id
14781 AND book_type_code = p_book_type_code
14782 AND deprn_amount <> 0
14783 AND deprn_source_code = 'DEPRN'
14784 );
14785 l_check_period_of_addition VARCHAR2(1) DEFAULT NULL;
14786
14787 --cursor to get all books for parent asset
14788 CURSOR all_books_curs(p_asset_id IN NUMBER) IS
14789 SELECT
14790 id1,
14791 id2,
14792 name,
14793 description,
14794 book_type_code,
14795 book_class,
14796 asset_id,
14797 asset_number,
14798 serial_number,
14799 salvage_value,
14800 percent_salvage_value,
14801 life_in_months,
14802 acquisition_date,
14803 original_cost,
14804 cost,
14805 adjusted_cost,
14806 tag_number,
14807 current_units,
14808 reval_ceiling,
14809 new_used,
14810 manufacturer_name,
14811 model_number,
14812 asset_type,
14813 depreciation_category,
14814 deprn_start_date,
14815 deprn_method_code,
14816 rate_adjustment_factor,
14817 basic_rate,
14818 adjusted_rate,
14819 start_date_active,
14820 end_date_active,
14821 status,
14822 primary_uom_code,
14823 recoverable_cost,
14824 org_id,
14825 set_of_books_id
14826 FROM OKX_AST_BKS_V
14827 WHERE TRUNC(NVL(start_date_active,SYSDATE)) <= TRUNC(SYSDATE)
14828 AND TRUNC(NVL(end_date_active,SYSDATE+1)) >TRUNC(SYSDATE)
14829 AND book_class IN ('CORPORATE','TAX')
14830 AND asset_id = p_asset_id
14831 ORDER BY book_class,asset_id;
14832
14833 l_all_books_rec all_books_curs%ROWTYPE;
14834
14835 --Bug #2723498 :11.5.9 split asset by serial numbers
14836 CURSOR get_dup_inst_csr (p_asd_id IN NUMBER) IS
14837 SELECT f_frm2.id instance_id,
14838 inst_item.id ib_line_id
14839 FROM OKC_K_ITEMS cim,
14840 OKC_K_LINES_B inst_item,
14841 OKC_LINE_STYLES_B inst_item_lse,
14842 OKC_K_LINES_B f_frm2,
14843 OKC_LINE_STYLES_B f_frm2_lse,
14844 OKC_K_LINES_B fa,
14845 OKL_TXD_ASSETS_B asd
14846 WHERE cim.cle_id = inst_item.id
14847 AND cim.dnz_chr_id = inst_item.dnz_chr_id
14848 AND inst_item.cle_id = f_frm2.id
14849 AND inst_item.lse_id = inst_item_lse.id
14850 AND inst_item_lse.lty_code = 'INST_ITEM'
14851 AND f_frm2.cle_id = fa.cle_id
14852 AND f_frm2.lse_id = f_frm2_lse.id
14853 AND f_frm2_lse.lty_code = 'FREE_FORM2'
14854 AND fa.id = asd.target_kle_id
14855 AND asd.id = p_asd_id
14856 AND EXISTS (SELECT NULL
14857 FROM OKC_K_ITEMS cim_p,
14858 OKC_K_LINES_B inst_item_p,
14859 OKC_LINE_STYLES_B inst_item_lse_p,
14860 OKC_K_LINES_B f_frm2_p,
14861 OKC_LINE_STYLES_B f_frm2_lse_p,
14862 OKC_K_LINES_B fa_p,
14863 OKL_TXL_ASSETS_B tal
14864 WHERE cim_p.object1_id1 = cim.object1_id1
14865 AND cim_p.object1_id2 = cim.object1_id2
14866 AND cim_p.jtot_object1_code = cim.jtot_object1_code
14867 AND cim_p.dnz_chr_id = cim.dnz_chr_id
14868 AND cim_p.cle_id = inst_item_p.id
14869 AND cim_p.dnz_chr_id = inst_item_p.dnz_chr_id
14870 AND inst_item_p.cle_id = f_frm2_p.id
14871 AND inst_item_p.lse_id = inst_item_lse_p.id
14872 AND inst_item_lse_p.lty_code = 'INST_ITEM'
14873 AND f_frm2_p.cle_id = fa_p.cle_id
14874 AND f_frm2_p.lse_id = f_frm2_lse_p.id
14875 AND f_frm2_lse_p.lty_code = 'FREE_FORM2'
14876 AND fa_p.id = tal.kle_id
14877 AND tal.id = asd.tal_id
14878 );
14879
14880 l_dup_inst_cle_id OKC_K_LINES_B.ID%TYPE;
14881 l_dup_ib_cle_id OKC_K_LINES_B.ID%TYPE;
14882
14883 --Bug# : cursor to check if split is called by asset level termination process
14884 CURSOR asset_trmn_csr(pcleid IN NUMBER) IS
14885 SELECT '!'
14886 FROM DUAL
14887 WHERE EXISTS
14888 (SELECT 1
14889 FROM okl_trx_quotes_b h,
14890 okl_txl_quote_lines_b l,
14891 okl_trx_contracts t,
14892 okl_k_headers k
14893 WHERE h.id = l.qte_id
14894 AND h.id = t.qte_id
14895 AND h.khr_id = k.id
14896 AND (( k.deal_type LIKE 'LEASE%' AND h.qtp_code IN
14897 ('TER_PURCHASE','TER_RECOURSE','TER_ROLL_PURCHASE','TER_MAN_PURCHASE'))
14898 OR
14899 (k.deal_type LIKE 'LOAN%' )
14900 )
14901 AND l.qlt_code = 'AMCFIA'
14902 AND l.quote_quantity < l.asset_quantity
14903 AND l.kle_id = pcleid
14904 AND t.tcn_type = 'ALT'
14905 --rkuttiya added for 12.1.1 Multi GAAP
14906 AND t.representation_type = 'PRIMARY'
14907 --
14908 --Bug# 6043327 : R12B SLA impact
14909 --AND t.tsu_code = 'WORKING'
14910 AND t.tmt_status_code = 'WORKING'
14911 );
14912
14913 l_asset_trmn_exists VARCHAR2(1) DEFAULT '?';
14914
14915 l_loan_yn VARCHAR2(1) DEFAULT 'N';
14916 l_fa_exists VARCHAR2(1) DEFAULT 'N';
14917 l_row_not_found BOOLEAN DEFAULT FALSE;
14918
14919 --------------------------------------
14920 --Bug# : 11.5.10 : Securitization impact
14921 -------------------------------------
14922 l_is_asset_securitized VARCHAR2(1);
14923 l_inv_agmt_chr_id_tbl okl_securitization_pvt.inv_agmt_chr_id_tbl_type;
14924 l_trx_reason_asset_split VARCHAR2(20) := okl_securitization_pvt.g_trx_reason_Asset_split;
14925 --------------------------------------
14926 --Bug# : 11.5.10 : Securitization impact
14927 -------------------------------------
14928
14929 --Bug# 3156924 : cursor to get transaction date and transaction number from transaction
14930 CURSOR l_trx_csr (ptrxid IN NUMBER) IS
14931 SELECT DATE_TRANS_OCCURRED,
14932 TRANS_NUMBER,
14933 --Bug# 6373605 start
14934 TRY_ID
14935 --Bug# 6373605 end
14936 FROM OKL_TRX_ASSETS
14937 WHERE id = ptrxid;
14938
14939 l_trx_rec l_trx_csr%ROWTYPE;
14940
14941 --Bg# 4028371
14942 l_fa_retire_date date;
14943 l_fa_adj_date date;
14944 l_fa_add_date date;
14945
14946 l_talv_date_rec okl_tal_pvt.talv_rec_type;
14947 lx_talv_date_rec okl_tal_pvt.talv_rec_type;
14948 --Bug# 4028371
14949
14950 --Bug# 3502142
14951 l_round_split_comp_amt varchar2(30);
14952
14953 --Bug# 4631549
14954 --cursor to fetch re-lease contract flag
14955 cursor l_chrb_csr (p_chr_id in number) is
14956 select chrb.orig_system_source_code
14957 from okc_k_headers_b chrb
14958 where chrb.id = p_chr_id;
14959
14960 l_chrb_rec l_chrb_csr%ROWTYPE;
14961
14962
14963 --Bug# 15992711 : Added Cursor to check Re-Lease asset at line level
14964 --Start Modification 120.61.12010000.11 18-Jan-2013 Pratirao
14965 CURSOR l_lin_rel_ast_csr(p_cle_id in number) IS
14966 SELECT KLE.re_lease_yn
14967 FROM okl_k_lines kle
14968 WHERE kle.id = p_cle_id;
14969
14970 l_lin_rel_ast_rec l_lin_rel_ast_csr%ROWTYPE;
14971
14972 --Bug# 15992711 End Modification
14973
14974 --cursor to fetch expected asset cost
14975 cursor l_exp_cost_csr(p_cle_id in number) is
14976 select kle.expected_asset_cost
14977 from okl_k_lines kle
14978 where kle.id = p_cle_id;
14979
14980 l_exp_cost_rec l_exp_cost_csr%ROWTYPE;
14981
14982 l_clev_exp_cost_rec okl_okc_migration_pvt.clev_rec_type;
14983 lx_clev_exp_cost_rec okl_okc_migration_pvt.clev_rec_type;
14984 l_klev_exp_cost_rec okl_contract_pub.klev_rec_type;
14985 lx_klev_exp_cost_rec okl_contract_pub.klev_rec_type;
14986
14987 --Bug# 6373605 start
14988 l_sla_asset_chr_id NUMBER;
14989 --Bug# 6373605 end
14990
14991 BEGIN
14992 x_return_status := OKL_API.G_RET_STS_SUCCESS;
14993 -- Call start_activity to create savepoint, check compatibility
14994 -- and initialize message list
14995 x_return_status := OKL_API.START_ACTIVITY (
14996 l_api_name
14997 ,p_init_msg_list
14998 ,'_PVT'
14999 ,x_return_status);
15000 -- Check if activity started successfully
15001 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
15002 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
15003 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
15004 RAISE OKL_API.G_EXCEPTION_ERROR;
15005 END IF;
15006
15007 l_txdv_tbl := p_txdv_tbl;
15008
15009 --Bug# 3156924 : Get the transaction details
15010 OPEN l_trx_csr(ptrxid => p_txlv_rec.tas_id);
15011 FETCH l_trx_csr INTO l_trx_rec;
15012 IF l_trx_csr%NOTFOUND THEN
15013 NULL;
15014 END IF;
15015 CLOSE l_trx_csr;
15016 --Bug# 3156924 end
15017
15018 --2. get financial asset line id and chr_id
15019 OPEN k_line_curs(p_fa_line_id => p_txlv_rec.kle_id);
15020 FETCH k_line_curs INTO l_source_cle_id, l_chr_id,
15021 --Bug# 6373605 start
15022 l_sts_code;
15023 --Bug# 6373605 end
15024 IF k_line_curs%NOTFOUND THEN
15025 --dbms_output.put_line('unable to find financial asset line for fixed asset line!!!');
15026 --handle error appropraitely
15027 OKL_API.set_message(p_app_name => G_APP_NAME,
15028 p_msg_name => G_NO_DATA_FOUND,
15029 p_token1 => 'COL_NAME',
15030 p_token1_value => 'Financial Asset Line');
15031 RAISE OKL_API.G_EXCEPTION_ERROR;
15032 END IF;
15033 CLOSE k_line_curs;
15034
15035
15036 --Bug# 15992711 : Added to check Re-Lease asset at line level
15037 --Start of Modification 120.61.12010000.11 18-Jan-2013 Pratirao
15038
15039 OPEN l_lin_rel_ast_csr(p_cle_id => l_source_cle_id);
15040 FETCH l_lin_rel_ast_csr INTO l_lin_rel_ast_rec;
15041 CLOSE l_lin_rel_ast_csr;
15042
15043 IF NVL(l_lin_rel_ast_rec.re_lease_yn,'a') = 'Y' THEN
15044 OKL_API.set_message(p_app_name => G_APP_NAME,
15045 p_msg_name => 'OKL_REL_ASSET_SPLIT_NOT_ALLWD');
15046 RAISE OKL_API.G_EXCEPTION_ERROR;
15047
15048 END IF;
15049
15050 --Bug# 15992711 End of Modification
15051
15052
15053
15054
15055
15056
15057
15058
15059
15060
15061
15062 --Bug# 2982927 : Resetting okc inv organization id from k header
15063 okl_context.set_okc_org_context(p_chr_id => l_chr_id);
15064 --Bug# 2982927
15065
15066 --Bug# 3222804 : Serial number control to be based on leasing inv org setup
15067 validate_srl_num_control(
15068 p_api_version => p_api_version,
15069 p_init_msg_list => p_init_msg_list,
15070 x_return_status => x_return_status,
15071 x_msg_count => x_msg_count,
15072 x_msg_data => x_msg_data,
15073 p_cle_id => l_source_cle_id,
15074 p_split_into_individuals_yn => p_txlv_rec.split_into_singles_flag,
15075 p_split_into_units => p_txlv_rec.split_into_units,
15076 p_tal_id => p_txlv_rec.id);
15077
15078 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
15079 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
15080 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
15081 RAISE OKL_API.G_EXCEPTION_ERROR;
15082 END IF;
15083 --Bug# 3222804 : Serial number control to be based on leasing inv org setup
15084
15085 --1. get values for the parent asset
15086 l_fa_exists := 'N';
15087 l_ast_line_rec := get_ast_line(l_source_cle_id,l_row_not_found);
15088 --dbms_output.put_line('After fetching asset line '||l_ast_line_rec.description);
15089 IF (l_row_not_found) THEN
15090 --Bug #2798006 : call create split transaction for Loans
15091 l_loan_yn := 'N';
15092 l_loan_yn := Check_If_Loan(P_Cle_Id => l_source_cle_id,
15093 x_return_status => x_return_status);
15094
15095 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
15096 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
15097 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
15098 RAISE OKL_API.G_EXCEPTION_ERROR;
15099 END IF;
15100
15101 IF l_loan_yn = 'N' THEN
15102 OKL_API.set_message(p_app_name => G_APP_NAME,
15103 p_msg_name => G_SPLIT_ASSET_NOT_FOUND);
15104 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
15105 ELSIF l_loan_yn = 'Y' THEN
15106 l_fa_exists := 'N';
15107 END IF;
15108 ELSE
15109 l_fa_exists := 'Y';
15110 END IF;
15111 --Bug# 2798006 end.
15112 --------------------------------------------------------------------------------
15113 i := 1;
15114 LOOP
15115 ------------------------------------------------------------------------
15116 -- Normal split asset parent adjustments
15117 IF (l_txdv_tbl(i).target_kle_id IS NOT NULL AND l_txdv_tbl(i).target_kle_id = p_txlv_rec.kle_id) THEN
15118 --this record needs asset adjustment only
15119 --no line creation is required
15120 --1.Call local procedure to adjust quantities and amounts
15121 l_txdv_rec := l_txdv_tbl(i);
15122 l_txlv_rec := p_txlv_rec;
15123 --dbms_output.put_line('before adjusting split lines');
15124 Adjust_Split_Lines(
15125 p_api_version => p_api_version,
15126 p_init_msg_list => p_init_msg_list,
15127 x_return_status => x_return_status,
15128 x_msg_count => x_msg_count,
15129 x_msg_data => x_msg_data,
15130 p_cle_id => l_source_cle_id,
15131 p_parent_line_id => l_source_cle_id,
15132 p_txdv_rec => l_txdv_rec,
15133 p_txlv_rec => l_txlv_rec);
15134 --dbms_output.put_line('after adjusting split lines'||x_return_status);
15135 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
15136 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
15137 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
15138 RAISE OKL_API.G_EXCEPTION_ERROR;
15139 END IF;
15140
15141 --2. Call Asset Retire Api -
15142 -- to confirm with Mukul whether retirement or
15143 -- adjustment will
15144
15145 IF l_fa_exists = 'Y' THEN
15146 --to get all books for this asset
15147 OPEN all_books_curs(p_asset_id => l_ast_line_rec.asset_id);
15148 LOOP
15149 FETCH all_books_curs INTO l_all_books_rec;
15150 EXIT WHEN all_books_curs%NOTFOUND;
15151 --reinitialize l_Ast_line_rec
15152 l_ast_line_rec.START_DATE_ACTIVE := l_all_books_rec.start_date_active;
15153 l_ast_line_rec.END_DATE_ACTIVE := l_all_books_rec.end_date_active;
15154 l_ast_line_rec.ASSET_ID := l_all_books_rec.asset_id;
15155 l_ast_line_rec.QUANTITY := l_all_books_rec.current_units;
15156 l_ast_line_rec.ASSET_NUMBER := l_all_books_rec.asset_number;
15157 l_ast_line_rec.CORPORATE_BOOK := l_all_books_rec.book_type_code; --this will be tax book in case of tax books inspite of var name
15158 l_ast_line_rec.LIFE_IN_MONTHS := l_all_books_rec.life_in_months;
15159 l_ast_line_rec.ORIGINAL_COST := l_all_books_rec.original_cost;
15160 l_ast_line_rec.COST := l_all_books_rec.cost;
15161 l_ast_line_rec.ADJUSTED_COST := l_all_books_rec.adjusted_cost;
15162 l_ast_line_rec.TAG_NUMBER := l_all_books_rec.tag_number;
15163 l_ast_line_rec.CURRENT_UNITS := l_all_books_rec.current_units ;
15164 l_ast_line_rec.SERIAL_NUMBER := l_all_books_rec.serial_number;
15165 l_ast_line_rec.REVAL_CEILING := l_all_books_rec.reval_ceiling;
15166 l_ast_line_rec.NEW_USED := l_all_books_rec.new_used;
15167 l_ast_line_rec.IN_SERVICE_DATE := l_all_books_rec.acquisition_date;
15168 l_ast_line_rec.MANUFACTURER_NAME := l_all_books_rec.manufacturer_name;
15169 l_ast_line_rec.MODEL_NUMBER := l_all_books_rec.model_number;
15170 l_ast_line_rec.ASSET_TYPE := l_all_books_rec.asset_type;
15171 l_ast_line_rec.SALVAGE_VALUE := l_all_books_rec.salvage_value;
15172 l_ast_line_rec.PERCENT_SALVAGE_VALUE := l_all_books_rec.percent_salvage_value;
15173 l_ast_line_rec.DEPRECIATION_CATEGORY := l_all_books_rec.depreciation_category;
15174 l_ast_line_rec.DEPRN_START_DATE := l_all_books_rec.deprn_start_date;
15175 l_ast_line_rec.DEPRN_METHOD_CODE := l_all_books_rec.deprn_method_code;
15176 l_ast_line_rec.RATE_ADJUSTMENT_FACTOR := l_all_books_rec.rate_adjustment_factor;
15177 l_ast_line_rec.BASIC_RATE := l_all_books_rec.basic_rate;
15178 l_ast_line_rec.ADJUSTED_RATE := l_all_books_rec.adjusted_rate;
15179 l_ast_line_rec.RECOVERABLE_COST := l_all_books_rec.recoverable_cost;
15180 l_ast_line_rec.ORG_ID := l_all_books_rec.org_id;
15181 l_ast_line_rec.SET_OF_BOOKS_ID := l_all_books_rec.set_of_books_id;
15182
15183 --check period of addition
15184 l_check_period_of_Addition := 'N';
15185 OPEN check_period_of_addition(p_asset_id => l_ast_line_rec.asset_id,
15186 p_book_type_code => l_ast_line_rec.corporate_book);
15187 FETCH check_period_of_addition INTO l_check_period_of_Addition;
15188 IF check_period_of_addition%NOTFOUND THEN
15189 NULL;
15190 END IF;
15191 CLOSE check_period_of_addition;
15192
15193 /* Bug#4508050 - smadhava - Modified - Start*/
15194 -- Commented code to avoid retiring of original asset after splitting
15195 /*
15196 IF NVL(l_check_period_of_addition,'N') = 'N' THEN
15197 --dbms_output.put_line('before retiring fA'||x_return_status);
15198 --check if call is being made from asset level termination process
15199 l_asset_trmn_exists := '?';
15200 OPEN asset_trmn_csr(pcleid => l_source_cle_id);
15201 FETCH asset_trmn_csr INTO l_asset_trmn_exists;
15202 IF asset_trmn_csr%NOTFOUND THEN
15203 NULL;
15204 END IF;
15205 CLOSE asset_trmn_csr;
15206
15207 IF l_asset_trmn_exists = '!' THEN --exists
15208 --call special procedure for asset level termination : suspen retirement
15209 NULL;
15210 ELSIF l_asset_trmn_exists = '?' THEN --does not exist
15211 --Bug# : 3156924 : cost retirement for all books
15212 --If (l_all_books_rec.book_class = 'CORPORATE') Then
15213 FIXED_ASSET_RETIRE(p_api_version => p_api_version,
15214 p_init_msg_list => p_init_msg_list,
15215 x_return_status => x_return_status,
15216 x_msg_count => x_msg_count,
15217 x_msg_data => x_msg_data,
15218 p_ast_line_rec => l_ast_line_rec,
15219 p_txlv_rec => l_txlv_rec,
15220 p_txdv_rec => l_txdv_rec,
15221 --Bug# 3156924
15222 p_trx_date => l_trx_rec.date_trans_occurred,
15223 p_trx_number => l_trx_rec.trans_number,
15224 --Bug# 4028371
15225 x_fa_trx_date => l_fa_retire_date);
15226
15227 --dbms_output.put_line('after retiring fA'||x_return_status);
15228 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
15229 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
15230 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
15231 RAISE OKL_API.G_EXCEPTION_ERROR;
15232 END IF;
15233 */
15234 /* Bug#4508050 - smadhava - Modified - End*/
15235 --Bug# 3156924
15236 /*
15237 ElsIf (l_all_books_rec.book_class = 'TAX') Then
15238 -- since FA does not allow unit retirements on tax books
15239 -- we have to restore to doing adjustments here for tax books
15240 FIXED_ASSET_ADJUST(p_api_version => p_api_version,
15241 p_init_msg_list => p_init_msg_list,
15242 x_return_status => x_return_status,
15243 x_msg_count => x_msg_count,
15244 x_msg_data => x_msg_data,
15245 p_ast_line_rec => l_ast_line_rec,
15246 p_txlv_rec => l_txlv_rec,
15247 p_txdv_rec => l_txdv_rec,
15248 --3156924
15249 p_trx_date => l_trx_rec.date_trans_occurred,
15250 p_trx_number => l_trx_rec.trans_number,
15251 --Bug# 4028371
15252 x_fa_trx_date => l_fa_adj_date);
15253
15254 --dbms_output.put_line('after adjusting fA'||x_return_status);
15255 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
15256 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
15257 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
15258 RAISE OKL_API.G_EXCEPTION_ERROR;
15259 END IF;
15260 End If;
15261 */
15262 /* Bug#4508050 - smadhava - Modified - Start*/
15263 /*
15264 END IF; --asset_trmn_exists
15265 ELSIF NVL(l_check_period_of_addition,'N') = 'Y' THEN
15266 */
15267 /* Bug#4508050 - smadhava - Modified - End*/
15268 --dbms_output.put_line('before adjusting fA'||x_return_status);
15269 --dbms_output.put_line('before adjusting fA units'||to_char(l_ast_line_rec.current_units));
15270 FIXED_ASSET_ADJUST(p_api_version => p_api_version,
15271 p_init_msg_list => p_init_msg_list,
15272 x_return_status => x_return_status,
15273 x_msg_count => x_msg_count,
15274 x_msg_data => x_msg_data,
15275 p_ast_line_rec => l_ast_line_rec,
15276 p_txlv_rec => l_txlv_rec,
15277 p_txdv_rec => l_txdv_rec,
15278 --3156924
15279 p_trx_date => l_trx_rec.date_trans_occurred,
15280 p_trx_number => l_trx_rec.trans_number,
15281 --Bug# 6373605--SLA populate source
15282 p_sla_source_header_id => l_txlv_rec.tas_id,
15283 p_sla_source_header_table => 'OKL_TRX_ASSETS',
15284 p_sla_source_try_id => l_trx_rec.try_id,
15285 p_sla_source_line_id => l_txlv_rec.id,
15286 p_sla_source_line_table => 'OKL_TXL_ASSETS_B',
15287 p_sla_source_chr_id => l_chr_id,
15288 p_sla_source_kle_id => l_source_cle_id,
15289 --Bug# 6373605--SLA populate sources
15290 --Bug# 4028371
15291 x_fa_trx_date => l_fa_adj_date);
15292
15293 --dbms_output.put_line('after adjusting fA'||x_return_status);
15294 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
15295 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
15296 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
15297 RAISE OKL_API.G_EXCEPTION_ERROR;
15298 END IF;
15299 /* Bug#4508050 - smadhava - Modified - Start*/
15300 /*
15301 END IF;
15302 */
15303 /* Bug#4508050 - smadhava - Modified - End*/
15304 END LOOP;
15305 CLOSE all_books_curs;
15306 --adjustments done for all the books
15307 END IF; --l_fa_exists
15308 --3. Put record onto the lines table
15309 l_cle_tbl(i).cle_id := l_source_cle_id;
15310
15311 ELSIF l_txdv_tbl(i).target_kle_id IS NULL THEN
15312
15313 --1.Call to Copy Lines api to create split line
15314 OKL_COPY_CONTRACT_PUB.COPY_CONTRACT_LINES(
15315 p_api_version => p_api_version,
15316 p_init_msg_list => p_init_msg_list,
15317 x_return_status => x_return_status,
15318 x_msg_count => x_msg_count,
15319 x_msg_data => x_msg_data,
15320 p_from_cle_id => l_source_cle_id,
15321 p_to_cle_id => NULL,
15322 p_to_chr_id => l_chr_id,
15323 p_to_template_yn => 'N',
15324 p_copy_reference => 'COPY',
15325 p_copy_line_party_yn => 'Y',
15326 p_renew_ref_yn => 'N',
15327 x_cle_id => l_split_cle_id);
15328
15329 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
15330 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
15331 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
15332 RAISE OKL_API.G_EXCEPTION_ERROR;
15333 END IF;
15334
15335 --Bug# 4631549 : If release contract copy expected_asset_cost from source line to target line
15336 Open l_chrb_csr (p_chr_id => l_chr_id);
15337 fetch l_chrb_csr into l_chrb_rec;
15338 close l_chrb_csr;
15339
15340 If nvl(l_chrb_rec.orig_system_source_code,OKL_API.G_MISS_CHAR) = 'OKL_RELEASE' then
15341 open l_exp_cost_csr(p_cle_id => l_source_cle_id);
15342 fetch l_exp_cost_csr into l_exp_cost_rec;
15343 close l_exp_cost_csr;
15344
15345 l_clev_exp_cost_rec.id := l_split_cle_id;
15346 l_klev_exp_cost_rec.id := l_split_cle_id;
15347 l_klev_exp_cost_rec.expected_asset_cost := l_exp_cost_rec.expected_asset_cost;
15348
15349 OKL_CONTRACT_PUB.update_contract_line(
15350 p_api_version => p_api_version,
15351 p_init_msg_list => p_init_msg_list,
15352 x_return_status => x_return_status,
15353 x_msg_count => x_msg_count,
15354 x_msg_data => x_msg_data,
15355 p_clev_rec => l_clev_exp_cost_rec,
15356 p_klev_rec => l_klev_exp_cost_rec,
15357 x_clev_rec => lx_clev_exp_cost_rec,
15358 x_klev_rec => lx_klev_exp_cost_rec
15359 );
15360
15361 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
15362 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
15363 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) then
15364 RAISE OKL_API.G_EXCEPTION_ERROR;
15365 END IF;
15366 End If;
15367
15368 --2. Call local procedure to adjust quantities and amounts
15369 --3. Call local procedure to null out line source references on copied lines
15370 l_txdv_rec := l_txdv_tbl(i);
15371 l_txlv_rec := p_txlv_rec;
15372
15373 --Bug# 3502142
15374 l_round_split_comp_amt := 'N';
15375 IF (i = l_txdv_tbl.LAST) AND
15376 (NVL(l_txdv_tbl(i).split_percent,0) > 0 OR l_txdv_tbl(i).split_percent <> OKL_API.G_MISS_NUM) THEN
15377 l_round_split_comp_amt := 'Y';
15378 END IF;
15379
15380 Adjust_Split_Lines(
15381 p_api_version => p_api_version,
15382 p_init_msg_list => p_init_msg_list,
15383 x_return_status => x_return_status,
15384 x_msg_count => x_msg_count,
15385 x_msg_data => x_msg_data,
15386 p_cle_id => l_split_cle_id,
15387 p_parent_line_id => l_source_cle_id,
15388 p_txdv_rec => l_txdv_rec,
15389 p_txlv_rec => l_txlv_rec,
15390 p_round_split_comp_amt => l_round_split_comp_amt);
15391
15392 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
15393 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
15394 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
15395 RAISE OKL_API.G_EXCEPTION_ERROR;
15396 END IF;
15397 IF l_fa_exists = 'Y' THEN
15398 --to get all books for this asset
15399 OPEN all_books_curs(p_asset_id => l_ast_line_rec.asset_id);
15400 LOOP
15401 FETCH all_books_curs INTO l_all_books_rec;
15402 EXIT WHEN all_books_curs%NOTFOUND;
15403 --reinitialize l_Ast_line_rec
15404 l_ast_line_rec.START_DATE_ACTIVE := l_all_books_rec.start_date_active;
15405 l_ast_line_rec.END_DATE_ACTIVE := l_all_books_rec.end_date_active;
15406 l_ast_line_rec.ASSET_ID := l_all_books_rec.asset_id;
15407 l_ast_line_rec.QUANTITY := l_all_books_rec.current_units;
15408 l_ast_line_rec.ASSET_NUMBER := l_all_books_rec.asset_number;
15409 l_ast_line_rec.CORPORATE_BOOK := l_all_books_rec.book_type_code; --this will be tax book in case of tax books inspite of var name
15410 l_ast_line_rec.LIFE_IN_MONTHS := l_all_books_rec.life_in_months;
15411 l_ast_line_rec.ORIGINAL_COST := l_all_books_rec.original_cost;
15412 l_ast_line_rec.COST := l_all_books_rec.cost;
15413 l_ast_line_rec.ADJUSTED_COST := l_all_books_rec.adjusted_cost;
15414 l_ast_line_rec.TAG_NUMBER := l_all_books_rec.tag_number;
15415 l_ast_line_rec.CURRENT_UNITS := l_all_books_rec.current_units ;
15416 l_ast_line_rec.SERIAL_NUMBER := l_all_books_rec.serial_number;
15417 l_ast_line_rec.REVAL_CEILING := l_all_books_rec.reval_ceiling;
15418 l_ast_line_rec.NEW_USED := l_all_books_rec.new_used;
15419 l_ast_line_rec.IN_SERVICE_DATE := l_all_books_rec.acquisition_date;
15420 l_ast_line_rec.MANUFACTURER_NAME := l_all_books_rec.manufacturer_name;
15421 l_ast_line_rec.MODEL_NUMBER := l_all_books_rec.model_number;
15422 l_ast_line_rec.ASSET_TYPE := l_all_books_rec.asset_type;
15423 l_ast_line_rec.SALVAGE_VALUE := l_all_books_rec.salvage_value;
15424 l_ast_line_rec.PERCENT_SALVAGE_VALUE := l_all_books_rec.percent_salvage_value;
15425 l_ast_line_rec.DEPRECIATION_CATEGORY := l_all_books_rec.depreciation_category;
15426 l_ast_line_rec.DEPRN_START_DATE := l_all_books_rec.deprn_start_date;
15427 l_ast_line_rec.DEPRN_METHOD_CODE := l_all_books_rec.deprn_method_code;
15428 l_ast_line_rec.RATE_ADJUSTMENT_FACTOR := l_all_books_rec.rate_adjustment_factor;
15429 l_ast_line_rec.BASIC_RATE := l_all_books_rec.basic_rate;
15430 l_ast_line_rec.ADJUSTED_RATE := l_all_books_rec.adjusted_rate;
15431 l_ast_line_rec.RECOVERABLE_COST := l_all_books_rec.recoverable_cost;
15432 l_ast_line_rec.ORG_ID := l_all_books_rec.org_id;
15433 l_ast_line_rec.SET_OF_BOOKS_ID := l_all_books_rec.set_of_books_id;
15434
15435 --Bug# 6373605 start
15436 If nvl(l_sts_code,OKL_API.G_MISS_CHAR) in
15437 ('TERMINATED','EXPIRED') Then
15438 l_sla_asset_chr_id := NULL;
15439 Else
15440 l_sla_asset_chr_id := l_chr_id;
15441 End If;
15442 --Bug# 6373605
15443
15444 --4. Call Local procedure to add asset
15445 FIXED_ASSET_ADD(p_api_version => p_api_version,
15446 p_init_msg_list => p_init_msg_list,
15447 x_return_status => x_return_status,
15448 x_msg_count => x_msg_count,
15449 x_msg_data => x_msg_data,
15450 p_ast_line_rec => l_ast_line_rec,
15451 p_txlv_rec => l_txlv_rec,
15452 p_txdv_rec => l_txdv_rec,
15453 --3156924
15454 p_trx_date => l_trx_rec.date_trans_occurred,
15455 p_trx_number => l_trx_rec.trans_number,
15456 --Bug# 6373605--SLA populate source
15457 p_sla_source_header_id => l_txlv_rec.tas_id,
15458 p_sla_source_header_table => 'OKL_TRX_ASSETS',
15459 p_sla_source_try_id => l_trx_rec.try_id,
15460 p_sla_source_line_id => l_txdv_rec.id,
15461 p_sla_source_line_table => 'OKL_TXD_ASSETS_B',
15462 p_sla_source_chr_id => l_chr_id,
15463 p_sla_source_kle_id => l_split_cle_id,
15464 p_sla_asset_chr_id => l_sla_asset_chr_id,
15465 --Bug# 6373605--SLA populate sources
15466 --Bug# 4028371
15467 x_fa_trx_date => l_fa_add_date,
15468 x_asset_hdr_rec => l_asset_hdr_rec);
15469 --dbms_output.put_line('after adding fixed asset '||x_return_status);
15470 --dbms_output.put_line('after adding fixed asset '||to_char(l_asset_hdr_rec.asset_id));
15471 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
15472 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
15473 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
15474 RAISE OKL_API.G_EXCEPTION_ERROR;
15475 END IF;
15476
15477 --Bug# 4028371
15478 --update the fa trx date on transaction line
15479 If l_all_books_rec.book_class = 'CORPORATE' then
15480 l_talv_date_rec.id := l_txlv_rec.id;
15481 l_talv_date_rec.fa_trx_date := l_fa_add_date;
15482 l_split_cle_id_orig := l_split_cle_id;
15483
15484 okl_tal_pvt.update_row
15485 (p_api_version => p_api_version,
15486 p_init_msg_list => p_init_msg_list,
15487 x_return_status => x_return_status,
15488 x_msg_count => x_msg_count,
15489 x_msg_data => x_msg_data,
15490 p_talv_rec => l_talv_date_rec,
15491 x_talv_rec => lx_talv_date_rec);
15492 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
15493 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
15494 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
15495 RAISE OKL_API.G_EXCEPTION_ERROR;
15496 END IF;
15497
15498 --Bug# 6326479
15499 /* 7626121 commented out from here and moved outside
15500 process_split_accounting(
15501 p_api_version => p_api_version
15502 ,p_init_msg_list => p_init_msg_list
15503 ,x_return_status => x_return_status
15504 ,x_msg_count => x_msg_count
15505 ,x_msg_data => x_msg_data
15506 ,p_contract_id => l_chr_id
15507 ,p_kle_id => l_split_cle_id
15508 ,p_transaction_date=>l_trx_rec.date_trans_occurred
15509 );
15510
15511 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
15512 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
15513 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
15514 RAISE OKL_API.G_EXCEPTION_ERROR;
15515 END IF; */
15516
15517 -- Bug# 6189396 -- start
15518 okl_execute_formula_pub.g_additional_parameters(1).name := '';
15519 okl_execute_formula_pub.g_additional_parameters(1).value := null;
15520 -- Bug# 6189396 -- end
15521
15522 End If;
15523 --End Bug# 4028371
15524 END LOOP;
15525 CLOSE all_books_curs;
15526
15527 -- Bug 7626121
15528 process_split_accounting(
15529 p_api_version => p_api_version
15530 ,p_init_msg_list => p_init_msg_list
15531 ,x_return_status => x_return_status
15532 ,x_msg_count => x_msg_count
15533 ,x_msg_data => x_msg_data
15534 ,p_contract_id => l_chr_id
15535 ,p_kle_id => l_split_cle_id_orig
15536 ,p_transaction_date=>l_trx_rec.date_trans_occurred
15537 );
15538
15539 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
15540 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
15541 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
15542 RAISE OKL_API.G_EXCEPTION_ERROR;
15543 END IF;
15544
15545 okl_execute_formula_pub.g_additional_parameters(1).name := '';
15546 okl_execute_formula_pub.g_additional_parameters(1).value := null;
15547 END IF; --l_fa_exists
15548 --5. Tie back new asset records to OKL
15549 --dbms_output.put_line('before fetching the cim_id for FA link');
15550 OPEN c_cim(l_txdv_rec.id);
15551 LOOP
15552 FETCH c_cim INTO l_cim_id,l_cim_cle_id;
15553 --dbms_output.put_line('in fetching the cim_id for FA link'||to_char(l_cim_id));
15554 EXIT WHEN c_cim%NOTFOUND;
15555 IF l_fa_exists = 'Y' THEN
15556 l_cimv_rec.id := l_cim_id;
15557 l_cimv_rec.object1_id1 := l_asset_hdr_rec.asset_id;
15558 l_cimv_rec.object1_id2 := '#';
15559 l_cimv_rec.jtot_object1_code := 'OKX_ASSET';
15560 l_cimv_rec.number_of_items := l_txdv_rec.quantity;
15561 --dbms_output.put_line('Asset Id :'||to_char(l_asset_hdr_rec.asset_id));
15562
15563 OKL_OKC_MIGRATION_PVT.update_contract_item(p_api_version => p_api_version,
15564 p_init_msg_list => p_init_msg_list,
15565 x_return_status => x_return_status,
15566 x_msg_count => x_msg_count,
15567 x_msg_data => x_msg_data,
15568 p_cimv_rec => l_cimv_rec,
15569 x_cimv_rec => l_cimv_rec_out);
15570 --dbms_output.put_line('after updating contract item for Asset link '||x_return_status);
15571 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
15572 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
15573 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
15574 RAISE OKL_API.G_EXCEPTION_ERROR;
15575 END IF;
15576 END IF; --l_fa_exits
15577 -- take care of the ib instances for this FA line
15578 --dbms_output.put_line('before splitting IB instances fa_line_id'||to_char(l_cimv_rec_out.cle_id));
15579 --bug# : serial number processing for split asset by serial numbers - consolidate ib lines
15580
15581 IF NVL(l_txdv_rec.split_percent,0) NOT IN (0,OKL_API.G_MISS_NUM) THEN -- Is serialized
15582 --consolidate the ib lines
15583 consolidate_ib_lines(p_api_version => p_api_version,
15584 p_init_msg_list => p_init_msg_list,
15585 x_return_status => x_return_status,
15586 x_msg_count => x_msg_count,
15587 x_msg_data => x_msg_data,
15588 p_txdv_rec => l_txdv_rec,
15589 p_txlv_rec => l_txlv_rec
15590 );
15591 --dbms_output.put_line('After consolidating ib lines'||x_return_status);
15592 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
15593 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
15594 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
15595 RAISE OKL_API.G_EXCEPTION_ERROR;
15596 END IF;
15597 END IF;
15598
15599 --bug# : serial number processing for split asset by serial numbers - consolidate ib lines
15600 --OPEN ib_item_cur(p_fa_line_id => l_cimv_rec_out.cle_id);
15601 OPEN ib_item_cur(p_fa_line_id => l_cim_cle_id);
15602 LOOP
15603 FETCH ib_item_cur INTO l_csi_id1,
15604 l_csi_id2,
15605 l_csi_cim_id,
15606 l_csi_cle_id,
15607 l_csi_chr_id;
15608
15609 EXIT WHEN ib_item_cur%NOTFOUND;
15610 --create split ib instance
15611 --dbms_output.put_line('Before Create ib instance csi id1:'|| x_return_status);
15612 create_ib_instance(p_api_version => p_api_version,
15613 p_init_msg_list => p_init_msg_list,
15614 x_return_status => x_return_status,
15615 x_msg_count => x_msg_count,
15616 x_msg_data => x_msg_data,
15617 p_csi_id1 => l_csi_id1,
15618 p_csi_id2 => l_csi_id2,
15619 p_ib_cle_id => l_csi_cle_id,
15620 p_chr_id => l_csi_chr_id,
15621 p_split_qty => l_txdv_rec.quantity,
15622 --new parameter added for split asset into components feature
15623 p_txdv_rec => l_txdv_rec,
15624 x_instance_id => l_csi_instance_id);
15625
15626 --dbms_output.put_line('After Create ib instance '||x_return_status||':'||to_char(l_csi_instance_id));
15627 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
15628 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
15629 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
15630 RAISE OKL_API.G_EXCEPTION_ERROR;
15631 END IF;
15632
15633 --update the coressponding okc_k_item record
15634 l_cimv_rec.id := l_csi_cim_id;
15635 l_cimv_rec.object1_id1 := TO_CHAR(l_csi_instance_id);
15636 l_cimv_rec.object1_id2 := '#';
15637 l_cimv_rec.jtot_object1_code := 'OKX_IB_ITEM';
15638
15639 OKL_OKC_MIGRATION_PVT.update_contract_item(p_api_version => p_api_version,
15640 p_init_msg_list => p_init_msg_list,
15641 x_return_status => x_return_status,
15642 x_msg_count => x_msg_count,
15643 x_msg_data => x_msg_data,
15644 p_cimv_rec => l_cimv_rec,
15645 x_cimv_rec => l_cimv_rec_out);
15646
15647 --dbms_output.put_line('after updating contract item for IB link '||x_return_status);
15648 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
15649 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
15650 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
15651 RAISE OKL_API.G_EXCEPTION_ERROR;
15652 END IF;
15653 END LOOP;
15654 CLOSE ib_item_cur;
15655
15656 --Bug# 115.9 - Split by serial numbers
15657 --consolidate if serialized and delete duplicate instance lines on child
15658 --do it only for normal split assets as logic for split asset into compoets to be worked out
15659 IF NVL(l_txdv_rec.split_percent,0) IN (0,OKL_API.G_MISS_NUM) THEN
15660 ----
15661 OPEN get_dup_inst_csr (p_asd_id => l_txdv_rec.id);
15662 LOOP
15663 FETCH get_dup_inst_csr INTO l_dup_inst_cle_id, l_dup_ib_cle_id;
15664 EXIT WHEN get_dup_inst_csr%NOTFOUND;
15665 --Call line deletion API
15666 delete_instance_lines(
15667 p_api_version => p_api_version,
15668 p_init_msg_list => p_init_msg_list,
15669 x_return_status => x_return_status,
15670 x_msg_count => x_msg_count,
15671 x_msg_data => x_msg_data,
15672 p_inst_cle_id => l_dup_inst_cle_id,
15673 p_ib_cle_id => l_dup_ib_cle_id);
15674 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
15675 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
15676 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
15677 RAISE OKL_API.G_EXCEPTION_ERROR;
15678 END IF;
15679 END LOOP;
15680 CLOSE get_dup_inst_csr;
15681 ----
15682 END IF;
15683 --Bug# 115.9 - Split by serial numbers
15684
15685
15686 END LOOP;
15687 CLOSE c_cim;
15688 --6. Update the lines table
15689 l_cle_tbl(i).cle_id := l_split_cle_id;
15690 END IF;
15691 IF (i=l_txdv_tbl.LAST) THEN
15692
15693
15694 IF (i = l_txdv_tbl.LAST) AND
15695 (NVL(l_txdv_tbl(i).split_percent,0) > 0 OR l_txdv_tbl(i).split_percent <> OKL_API.G_MISS_NUM) THEN
15696 --special processing for split asset components the original asset has to be retired completely
15697 --1.Abandon the old asset line as we have created assets
15698 Abandon_Parent_Asset(
15699 p_api_version => p_api_version,
15700 p_init_msg_list => p_init_msg_list,
15701 x_return_status => x_return_status,
15702 x_msg_count => x_msg_count,
15703 x_msg_data => x_msg_data,
15704 p_cle_id => l_source_cle_id);
15705
15706 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
15707 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
15708 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
15709 RAISE OKL_API.G_EXCEPTION_ERROR;
15710 END IF;
15711 IF l_fa_exists = 'Y' THEN
15712 --2.Fully retire the Asset
15713 OPEN all_books_curs(p_asset_id => l_ast_line_rec.asset_id);
15714 LOOP
15715 FETCH all_books_curs INTO l_all_books_rec;
15716 EXIT WHEN all_books_curs%NOTFOUND;
15717 --reinitialize l_Ast_line_rec
15718 l_ast_line_rec.START_DATE_ACTIVE := l_all_books_rec.start_date_active;
15719 l_ast_line_rec.END_DATE_ACTIVE := l_all_books_rec.end_date_active;
15720 l_ast_line_rec.ASSET_ID := l_all_books_rec.asset_id;
15721 l_ast_line_rec.QUANTITY := l_all_books_rec.current_units;
15722 l_ast_line_rec.ASSET_NUMBER := l_all_books_rec.asset_number;
15723 l_ast_line_rec.CORPORATE_BOOK := l_all_books_rec.book_type_code; --this will be tax book in case of tax books inspite of var name
15724 l_ast_line_rec.LIFE_IN_MONTHS := l_all_books_rec.life_in_months;
15725 l_ast_line_rec.ORIGINAL_COST := l_all_books_rec.original_cost;
15726 l_ast_line_rec.COST := l_all_books_rec.cost;
15727 l_ast_line_rec.ADJUSTED_COST := l_all_books_rec.adjusted_cost;
15728 l_ast_line_rec.TAG_NUMBER := l_all_books_rec.tag_number;
15729 l_ast_line_rec.CURRENT_UNITS := l_all_books_rec.current_units ;
15730 l_ast_line_rec.SERIAL_NUMBER := l_all_books_rec.serial_number;
15731 l_ast_line_rec.REVAL_CEILING := l_all_books_rec.reval_ceiling;
15732 l_ast_line_rec.NEW_USED := l_all_books_rec.new_used;
15733 l_ast_line_rec.IN_SERVICE_DATE := l_all_books_rec.acquisition_date;
15734 l_ast_line_rec.MANUFACTURER_NAME := l_all_books_rec.manufacturer_name;
15735 l_ast_line_rec.MODEL_NUMBER := l_all_books_rec.model_number;
15736 l_ast_line_rec.ASSET_TYPE := l_all_books_rec.asset_type;
15737 l_ast_line_rec.SALVAGE_VALUE := l_all_books_rec.salvage_value;
15738 l_ast_line_rec.PERCENT_SALVAGE_VALUE := l_all_books_rec.percent_salvage_value;
15739 l_ast_line_rec.DEPRECIATION_CATEGORY := l_all_books_rec.depreciation_category;
15740 l_ast_line_rec.DEPRN_START_DATE := l_all_books_rec.deprn_start_date;
15741 l_ast_line_rec.DEPRN_METHOD_CODE := l_all_books_rec.deprn_method_code;
15742 l_ast_line_rec.RATE_ADJUSTMENT_FACTOR := l_all_books_rec.rate_adjustment_factor;
15743 l_ast_line_rec.BASIC_RATE := l_all_books_rec.basic_rate;
15744 l_ast_line_rec.ADJUSTED_RATE := l_all_books_rec.adjusted_rate;
15745 l_ast_line_rec.RECOVERABLE_COST := l_all_books_rec.recoverable_cost;
15746 l_ast_line_rec.ORG_ID := l_all_books_rec.org_id;
15747 l_ast_line_rec.SET_OF_BOOKS_ID := l_all_books_rec.set_of_books_id;
15748
15749 --check period of addition
15750 l_check_period_of_Addition := 'N';
15751 OPEN check_period_of_addition(p_asset_id => l_ast_line_rec.asset_id,
15752 p_book_type_code => l_ast_line_rec.corporate_book);
15753 FETCH check_period_of_addition INTO l_check_period_of_Addition;
15754 IF check_period_of_addition%NOTFOUND THEN
15755 NULL;
15756 END IF;
15757 CLOSE check_period_of_addition;
15758
15759 /* Bug#4508050 - smadhava - Modified - Start*/
15760 /*
15761 IF NVL(l_check_period_of_addition,'N') = 'N' THEN
15762 --dbms_output.put_line('before retiring fA'||x_return_status);
15763
15764 FIXED_ASSET_RETIRE(p_api_version => p_api_version,
15765 p_init_msg_list => p_init_msg_list,
15766 x_return_status => x_return_status,
15767 x_msg_count => x_msg_count,
15768 x_msg_data => x_msg_data,
15769 p_ast_line_rec => l_ast_line_rec,
15770 p_txlv_rec => l_txlv_rec,
15771 p_txdv_rec => l_txdv_rec,
15772 --Bug# 3156924
15773 p_trx_date => l_trx_rec.date_trans_occurred,
15774 p_trx_number => l_trx_rec.trans_number,
15775 x_fa_trx_date => l_fa_retire_date);
15776 --dbms_output.put_line('after retiring fA'||x_return_status);
15777 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
15778 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
15779 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
15780 RAISE OKL_API.G_EXCEPTION_ERROR;
15781 END IF;
15782 ELSIF NVL(l_check_period_of_addition,'N') = 'Y' THEN
15783 */
15784 /* Bug#4508050 - smadhava - Modified - End*/
15785
15786 --ElsIf nvl(l_check_period_of_addition,'N') in ('Y','N') Then
15787 --dbms_output.put_line('before adjusting fA'||x_return_status);
15788 --dbms_output.put_line('before adjusting fA units'||to_char(l_ast_line_rec.current_units));
15789 FIXED_ASSET_ADJUST(p_api_version => p_api_version,
15790 p_init_msg_list => p_init_msg_list,
15791 x_return_status => x_return_status,
15792 x_msg_count => x_msg_count,
15793 x_msg_data => x_msg_data,
15794 p_ast_line_rec => l_ast_line_rec,
15795 p_txlv_rec => l_txlv_rec,
15796 p_txdv_rec => l_txdv_rec,
15797 --3156924
15798 p_trx_date => l_trx_rec.date_trans_occurred,
15799 p_trx_number => l_trx_rec.trans_number,
15800 --Bug# 6373605--SLA populate source
15801 p_sla_source_header_id => l_txlv_rec.tas_id,
15802 p_sla_source_header_table => 'OKL_TRX_ASSETS',
15803 p_sla_source_try_id => l_trx_rec.try_id,
15804 p_sla_source_line_id => l_txlv_rec.id,
15805 p_sla_source_line_table => 'OKL_TXL_ASSETS_B',
15806 p_sla_source_chr_id => l_chr_id,
15807 p_sla_source_kle_id => l_source_cle_id,
15808 --Bug# 6373605--SLA populate sources
15809 x_fa_trx_date => l_fa_adj_date);
15810
15811 --dbms_output.put_line('after adjusting fA'||x_return_status);
15812 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
15813 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
15814 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
15815 RAISE OKL_API.G_EXCEPTION_ERROR;
15816 END IF;
15817 /* Bug#4508050 - smadhava - Modified - Start*/
15818 /*
15819 END IF;
15820 */
15821 /* Bug#4508050 - smadhava - Modified - End*/
15822 END LOOP;
15823 CLOSE all_books_curs;
15824 --adjustments done for all the books
15825 END IF; --l_fa_exists
15826 -- end of full retirement for split asset into components parent asset
15827 END IF;
15828 --now exit out of the loop
15829 EXIT;
15830 ELSE
15831 i := i + 1;
15832 --dbms_output.put_line('number of split records processed'||to_char(i));
15833 END IF;
15834 END LOOP;
15835 --End If;--unable to track unchanged
15836
15837 --Bug# 3222804 : relink ib lines in case split into individual units
15838 --and serialized
15839 IF NVL(l_txlv_rec.split_into_singles_flag,'N') = 'Y' THEN
15840 Relink_Ib_Lines(p_api_version => p_api_version,
15841 p_init_msg_list => p_init_msg_list,
15842 x_return_status => x_return_status,
15843 x_msg_count => x_msg_count,
15844 x_msg_data => x_msg_data,
15845 p_txlv_rec => l_txlv_rec);
15846
15847 --dbms_output.put_line('after calling process streams '|| x_return_status);
15848 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
15849 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
15850 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
15851 RAISE OKL_API.G_EXCEPTION_ERROR;
15852 END IF;
15853 END IF;
15854 --Bug# 3257326 End : relink ib lines in case split into individual units
15855
15856 x_cle_tbl := l_cle_tbl;
15857 --Bug#2648280 Begin
15858 --dbms_output.put_line('Before calling process streams'|| x_return_status);
15859 --rounding streams could be an issue:
15860 split_streams(p_api_version => p_api_version,
15861 p_init_msg_list => p_init_msg_list,
15862 x_return_status => x_return_status,
15863 x_msg_count => x_msg_count,
15864 x_msg_data => x_msg_data,
15865 p_txl_id => l_txlv_rec.id);
15866 --dbms_output.put_line('after calling process streams '|| x_return_status);
15867 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
15868 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
15869 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
15870 RAISE OKL_API.G_EXCEPTION_ERROR;
15871 END IF;
15872 --Bug#2648280 End
15873
15874 ------------------------------------------------------------------------
15875 --Bug# : 11.5.10 Recalculate costs on impacted lines and update
15876 ------------------------------------------------------------------------
15877 --Bug# 5946411: ER
15878 --recalculate only if split asset have status : BOOKED/EVERGREEN
15879 --dbms_output.put_line('before calling recalculate l_sts_code'||l_sts_code);
15880 IF (l_sts_code IN ('BOOKED','EVERGREEN')) THEN
15881
15882 recalculate_costs(
15883 p_api_version => p_api_version,
15884 p_init_msg_list => p_init_msg_list,
15885 x_return_status => x_return_status,
15886 x_msg_count => x_msg_count,
15887 x_msg_data => x_msg_data,
15888 p_chr_id => l_chr_id,
15889 p_cle_tbl => x_cle_tbl);
15890
15891 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
15892 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
15893 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
15894 RAISE OKL_API.G_EXCEPTION_ERROR;
15895 END IF;
15896 END IF;
15897
15898 --Bug# 6788253
15899 --call API check if asset is securitized
15900 OKL_SECURITIZATION_PVT.check_kle_securitized(
15901 p_api_version => p_api_version,
15902 p_init_msg_list => p_init_msg_list,
15903 x_return_status => x_return_status,
15904 x_msg_count => x_msg_count,
15905 x_msg_data => x_msg_data,
15906 p_kle_id => l_source_cle_id,
15907 p_effective_date => SYSDATE,
15908 x_value => l_is_asset_securitized,
15909 x_inv_agmt_chr_id_tbl => l_inv_agmt_chr_id_tbl);
15910 --dbms_output.put_line('SFA-0 : calling check_kle_securitized--status >'||x_return_status);
15911 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
15912 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
15913 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
15914 RAISE OKL_API.G_EXCEPTION_ERROR;
15915 END IF;
15916
15917 IF l_is_asset_securitized = OKL_API.G_TRUE THEN
15918 --call API to modify pool contents
15919
15920 OKL_SECURITIZATION_PVT.modify_pool_contents(
15921 p_api_version => p_api_version,
15922 p_init_msg_list => p_init_msg_list,
15923 x_return_status => x_return_status,
15924 x_msg_count => x_msg_count,
15925 x_msg_data => x_msg_data,
15926 p_transaction_reason => l_trx_reason_asset_split,
15927 p_khr_id => l_chr_id,
15928 p_kle_id => l_source_cle_id,
15929 p_split_kle_ids => x_cle_tbl,
15930 p_transaction_date => SYSDATE,
15931 p_effective_date => SYSDATE);
15932
15933 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
15934 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
15935 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
15936 RAISE OKL_API.G_EXCEPTION_ERROR;
15937 END IF;
15938 END IF;
15939
15940 --Bug# 6344223
15941 IF (l_sts_code = 'BOOKED') AND (p_source_call = 'UI') THEN
15942 sync_streams( p_api_version => p_api_version,
15943 p_init_msg_list => p_init_msg_list,
15944 x_return_status => x_return_status,
15945 x_msg_count => x_msg_count,
15946 x_msg_data => x_msg_data,
15947 p_chr_id => l_chr_id );
15948
15949 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
15950 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
15951 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
15952 RAISE OKL_API.G_EXCEPTION_ERROR;
15953 END IF;
15954
15955 ELSE
15956 -------------------------------------------------------------------------
15957 --Bug# : 11.5.10 Securitization impact
15958 -------------------------------------------------------------------------
15959 IF l_is_asset_securitized = OKL_API.G_TRUE THEN
15960
15961 -- Bug# 4775555
15962 -- Historize and Re-create Disbursement Basis Streams
15963 OKL_STREAM_GENERATOR_PVT.create_disb_streams(
15964 p_api_version => p_api_version,
15965 p_init_msg_list => p_init_msg_list,
15966 x_return_status => x_return_status,
15967 x_msg_count => x_msg_count,
15968 x_msg_data => x_msg_data,
15969 p_contract_id => l_chr_id
15970 );
15971
15972 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
15973 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
15974 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
15975 RAISE OKL_API.G_EXCEPTION_ERROR;
15976 END IF;
15977
15978 --Bug# 6344223
15979 okl_stream_generator_pvt.create_pv_streams(
15980 p_api_version => 1.0,
15981 p_init_msg_list => OKC_API.G_FALSE,
15982 x_return_status => x_return_status,
15983 x_msg_count => x_msg_count,
15984 x_msg_data => x_msg_data,
15985 p_contract_id => l_chr_id
15986 );
15987
15988 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
15989 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
15990 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
15991 RAISE OKL_API.G_EXCEPTION_ERROR;
15992 END IF;
15993
15994 okl_contract_rebook_pvt.create_inv_disb_adjustment(
15995 p_api_version => 1.0,
15996 p_init_msg_list => OKC_API.G_FALSE,
15997 x_return_status => x_return_status,
15998 x_msg_count => x_msg_count,
15999 x_msg_data => x_msg_data,
16000 p_orig_khr_id => l_chr_id
16001 );
16002
16003
16004 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
16005 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
16006 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
16007 RAISE OKL_API.G_EXCEPTION_ERROR;
16008 END IF;
16009 --Bug# 6344223 : End
16010 END IF;
16011
16012
16013 -------------------------------------------------------------------------
16014 --Bug# : 11.5.10 Securitization impact End
16015 -------------------------------------------------------------------------
16016 -- Bug# 5946411: ER
16017 IF (l_sts_code IN ('TERMINATED','EXPIRED')) THEN
16018 create_split_asset_return (
16019 p_api_version => p_api_version,
16020 p_init_msg_list => p_init_msg_list,
16021 x_return_status => x_return_status,
16022 x_msg_count => x_msg_count,
16023 x_msg_data => x_msg_data,
16024 p_kle_id => l_source_cle_id,
16025 p_cle_tbl => x_cle_tbl,
16026 p_txlv_rec => l_txlv_rec
16027 );
16028
16029 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
16030 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
16031 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
16032 RAISE OKL_API.G_EXCEPTION_ERROR;
16033 END IF;
16034 END IF;
16035 --Bug# 5946411: ER end
16036
16037 ------------------------------------------------------------------------
16038 --Bug# : R12.B eBTax impact Start
16039 ------------------------------------------------------------------------
16040 okl_process_sales_tax_pvt.calculate_sales_tax(
16041 p_api_version => p_api_version,
16042 p_init_msg_list => p_init_msg_list,
16043 x_return_status => x_return_status,
16044 x_msg_count => x_msg_count,
16045 x_msg_data => x_msg_data,
16046 p_source_trx_id => p_txlv_rec.tas_id, --<okl_trx_assets.id>,
16047 p_source_trx_name => 'Split Asset',
16048 p_source_table => 'OKL_TRX_ASSETS');
16049
16050 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
16051 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
16052 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
16053 RAISE OKL_API.G_EXCEPTION_ERROR;
16054 END IF;
16055
16056 ------------------------------------------------------------------------
16057 --Bug# : R12.B eBTax impact End
16058 ------------------------------------------------------------------------
16059
16060 --update the transaction record to processed.
16061 l_trxv_rec.id := p_txlv_rec.tas_id;
16062 l_trxv_rec.tsu_code := 'PROCESSED';
16063 OKL_TRX_ASSETS_PUB.update_trx_ass_h_def(
16064 p_api_version => p_api_version,
16065 p_init_msg_list => p_init_msg_list,
16066 x_return_status => x_return_status,
16067 x_msg_count => x_msg_count,
16068 x_msg_data => x_msg_data,
16069 p_thpv_rec => l_trxv_rec,
16070 x_thpv_rec => lx_trxv_rec);
16071
16072 --dbms_output.put_line('after updating contract trx status to processed '||x_return_status);
16073 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
16074 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
16075 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
16076 RAISE OKL_API.G_EXCEPTION_ERROR;
16077 END IF;
16078
16079 END IF;
16080 OKL_API.END_ACTIVITY (x_msg_count,
16081 x_msg_data );
16082 EXCEPTION
16083 WHEN OKL_API.G_EXCEPTION_ERROR THEN
16084 x_return_status := OKL_API.HANDLE_EXCEPTIONS(
16085 l_api_name,
16086 G_PKG_NAME,
16087 'OKL_API.G_RET_STS_ERROR',
16088 x_msg_count,
16089 x_msg_data,
16090 '_PVT');
16091 WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
16092 x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
16093 l_api_name,
16094 G_PKG_NAME,
16095 'OKL_API.G_RET_STS_UNEXP_ERROR',
16096 x_msg_count,
16097 x_msg_data,
16098 '_PVT');
16099 WHEN OTHERS THEN
16100 x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
16101 l_api_name,
16102 G_PKG_NAME,
16103 'OTHERS',
16104 x_msg_count,
16105 x_msg_data,
16106 '_PVT');
16107 END Split_Fixed_Asset;
16108 ------------------------------------------------------------------------------
16109 -- PROCEDURE version_contract
16110 --
16111 -- This procedure versions contract, i.e. making a contract Version History
16112 --
16113 -- Calls:
16114 -- Called By:
16115 ------------------------------------------------------------------------------
16116 PROCEDURE version_contract(
16117 x_return_status OUT NOCOPY VARCHAR2,
16118 x_msg_count OUT NOCOPY NUMBER,
16119 x_msg_data OUT NOCOPY VARCHAR2,
16120 p_chr_id IN OKC_K_HEADERS_V.ID%TYPE
16121 ) IS
16122
16123 l_proc_name VARCHAR2(35) := 'VERSION_CONTRACT';
16124 l_cvmv_rec okl_okc_migration_pvt.cvmv_rec_type;
16125 x_cvmv_rec okl_okc_migration_pvt.cvmv_rec_type;
16126
16127 BEGIN
16128
16129 x_return_status := OKC_API.G_RET_STS_SUCCESS;
16130
16131 l_cvmv_rec.chr_id := p_chr_id;
16132 okl_version_pub.version_contract(
16133 p_api_version => 1.0,
16134 p_init_msg_list => OKC_API.G_FALSE,
16135 x_return_status => x_return_status,
16136 x_msg_count => x_msg_count,
16137 x_msg_data => x_msg_data,
16138 p_cvmv_rec => l_cvmv_rec,
16139 x_cvmv_rec => x_cvmv_rec --,
16140 --p_commit => OKC_API.G_FALSE
16141 );
16142 RETURN;
16143
16144 END version_contract;
16145 --------------------------------------------------------------------------------
16146 --Start of Comments
16147 --Procedure Name : Split_Asset
16148 --Description : Selects the split Asset transaction against the line
16149 -- and splits the Asset in OKL and FA
16150 --History :
16151 -- 08-Apr-2001 ashish.singh Created
16152 --End of Comments
16153 --------------------------------------------------------------------------------
16154 PROCEDURE Split_Fixed_Asset(p_api_version IN NUMBER,
16155 p_init_msg_list IN VARCHAR2,
16156 x_return_status OUT NOCOPY VARCHAR2,
16157 x_msg_count OUT NOCOPY NUMBER,
16158 x_msg_data OUT NOCOPY VARCHAR2,
16159 p_cle_id IN NUMBER,
16160 x_cle_tbl OUT NOCOPY cle_tbl_type,
16161 --Bug# 6344223
16162 p_source_call IN VARCHAR2 DEFAULT 'UI') IS
16163
16164 l_return_status VARCHAR2(1) DEFAULT OKL_API.G_RET_STS_SUCCESS;
16165 l_api_name CONSTANT VARCHAR2(30) := 'SPLIT_FIXED_ASSET';
16166 l_api_version CONSTANT NUMBER := 1.0;
16167
16168 CURSOR fa_line_csr(p_cle_id IN NUMBER) IS
16169 SELECT cle.id,
16170 cle.dnz_chr_id
16171 FROM OKC_K_LINES_B cle,
16172 OKC_LINE_STYLES_B lse
16173 WHERE cle.cle_id = p_cle_id
16174 AND cle.lse_id = lse.id
16175 AND lse.lty_code = 'FIXED_ASSET'
16176 --Bug Fix# 2744213 - 2761799
16177 -- should not check for effectivity on sysdate
16178 -- AND trunc(nvl(start_date,sysdate)) <= trunc(sysdate)
16179 -- AND trunc(nvl(end_date,sysdate+1)) > trunc(sysdate)
16180 --Bug# 5946411: ER
16181 --commented the status as it should consider all kind of contract
16182 -- AND cle.sts_code = 'BOOKED';
16183 ;
16184 --Bug# 5946411: ER end
16185
16186 l_txlv_rec txlv_rec_type;
16187 l_txdv_tbl txdv_tbl_type;
16188
16189 l_no_data_found BOOLEAN DEFAULT TRUE;
16190 l_fa_line_id NUMBER;
16191 l_chr_id OKC_K_LINES_B.dnz_chr_id%TYPE;
16192
16193 i NUMBER;
16194
16195 --Bug #2723498: 11.5.9 Split Asset by serial Number enhancement
16196 CURSOR srl_num_csr1 (PTalid IN NUMBER) IS
16197 SELECT COUNT(iti.serial_number)
16198 FROM okl_txl_itm_insts iti
16199 WHERE iti.tal_id = PTalid
16200 AND tal_type = 'ALI'
16201 AND NVL(selected_for_split_flag,'N') = 'Y';
16202
16203
16204 CURSOR srl_num_csr2 (PTalId IN NUMBER,
16205 PTxdId IN NUMBER) IS
16206 SELECT COUNT(iti.serial_number)
16207 FROM okl_txl_itm_insts iti
16208 WHERE iti.tal_id = PTalId
16209 AND iti.asd_id = PTxdId
16210 AND tal_type = 'ALI'
16211 AND NVL(selected_for_split_flag,'N') = 'Y';
16212
16213 l_serial_count NUMBER;
16214
16215 --cursor for asset_number
16216 CURSOR asset_num_csr (P_fin_ast_id IN NUMBER) IS
16217 SELECT name
16218 FROM okc_k_lines_tl
16219 WHERE id = p_fin_ast_id;
16220
16221 l_asset_number OKC_K_LINES_TL.NAME%TYPE;
16222
16223 --cursor to fetch serial number control code
16224 CURSOR srl_ctrl_csr (PInvItmId IN NUMBER,
16225 P_fin_ast_id IN NUMBER) IS
16226 SELECT mtl.serial_number_control_code
16227 FROM mtl_system_items mtl,
16228 okc_k_headers_b CHR,
16229 okc_k_lines_b cle
16230 WHERE mtl.inventory_item_id = PInvItmId
16231 AND mtl.organization_id = CHR.INV_ORGANIZATION_ID
16232 AND CHR.id = cle.chr_id
16233 AND cle.id = P_fin_ast_id;
16234
16235
16236 l_srl_control_code mtl_system_items.serial_number_control_code%TYPE;
16237
16238 l_serialized VARCHAR2(1) DEFAULT OKL_API.G_FALSE;
16239
16240 --Bug# 5946411: ER
16241 CURSOR c_get_sts_code(p_chr_id NUMBER)
16242 IS
16243 SELECT st.ste_code
16244 FROM OKC_K_HEADERS_V chr,
16245 okc_statuses_b st
16246 WHERE chr.id = p_chr_id
16247 and st.code = chr.sts_code;
16248 lv_sts_code OKC_K_HEADERS_V.STS_CODE%TYPE;
16249 --Bug# 5946411: ER end
16250 /*
16251 -- mvasudev, 08/23/2004
16252 -- Added PROCEDURE to enable Business Event
16253 */
16254 CURSOR l_cle_tas_csr
16255 IS
16256 SELECT cleb.dnz_chr_id,
16257 tasb.date_trans_occurred
16258 FROM okl_trx_assets tasb
16259 ,okl_txl_assets_b txlb
16260 ,okc_k_lines_b cleb
16261 ,okc_line_styles_b lseb
16262 WHERE txlb.tas_id = tasb.id
16263 AND cleb.id = txlb.kle_id
16264 AND cleb.cle_id = p_cle_id
16265 AND cleb.lse_id = lseb.id
16266 AND lseb.lty_Code = 'FIXED_ASSET'
16267 AND tasb.tsu_code = 'ENTERED';
16268
16269 l_dnz_chr_id NUMBER;
16270 l_trx_date DATE;
16271
16272 PROCEDURE raise_business_event
16273 (p_dnz_chr_id IN NUMBER,
16274 p_trx_date IN DATE,
16275 x_return_status OUT NOCOPY VARCHAR2
16276 )
16277 IS
16278
16279
16280 l_parameter_list wf_parameter_list_t;
16281 BEGIN
16282 x_return_status := OKL_API.G_RET_STS_SUCCESS;
16283
16284 wf_event.AddParameterToList(G_WF_ITM_CONTRACT_ID,l_dnz_chr_id,l_parameter_list);
16285 wf_event.AddParameterToList(G_WF_ITM_ASSET_ID,p_cle_id,l_parameter_list);
16286 wf_event.AddParameterToList(G_WF_ITM_TRANS_DATE,fnd_date.date_to_canonical(l_trx_date),l_parameter_list);
16287
16288 OKL_WF_PVT.raise_event (p_api_version => p_api_version,
16289 p_init_msg_list => p_init_msg_list,
16290 x_return_status => x_return_status,
16291 x_msg_count => x_msg_count,
16292 x_msg_data => x_msg_data,
16293 p_event_name => G_WF_EVT_KHR_SPLIT_ASSET_COMP,
16294 p_parameters => l_parameter_list);
16295
16296
16297 EXCEPTION
16298 WHEN OTHERS THEN
16299 x_return_status := OKL_API.G_RET_STS_UNEXP_ERROR;
16300 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
16301 END raise_business_event;
16302
16303 /*
16304 -- mvasudev, 08/23/2004
16305 -- END, PROCEDURE to enable Business Event
16306 */
16307
16308 BEGIN
16309
16310 -- Call start_activity to create savepoint, check compatibility
16311 -- and initialize message list
16312 x_return_status := OKL_API.START_ACTIVITY (
16313 l_api_name
16314 ,p_init_msg_list
16315 ,'_PVT'
16316 ,x_return_status);
16317 -- Check if activity started successfully
16318 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
16319 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
16320 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
16321 RAISE OKL_API.G_EXCEPTION_ERROR;
16322 END IF;
16323
16324 --Verify cle_id
16325 x_return_status := verify_cle_id(p_cle_id => p_cle_id);
16326 IF x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR THEN
16327 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
16328 ELSIF x_return_status = OKL_API.G_RET_STS_ERROR THEN
16329 RAISE OKL_API.G_EXCEPTION_ERROR;
16330 END IF;
16331
16332 --get fixed asset line
16333 OPEN fa_line_csr(p_cle_id => p_cle_id) ;
16334 FETCH fa_line_csr INTO l_fa_line_id, l_chr_id;
16335 IF fa_line_csr%NOTFOUND THEN
16336 NULL; --not exactly
16337 OKL_API.set_message(p_app_name => G_APP_NAME,
16338 p_msg_name => G_INACTIVE_ASSET
16339 );
16340 RAISE OKL_API.G_EXCEPTION_ERROR;
16341 ELSE
16342 /*
16343 -- mvasudev, 10/28/2004
16344 -- Fetch parameters for Business Event enabling
16345 */
16346 FOR l_cle_tas_rec IN l_cle_tas_csr
16347 LOOP
16348 l_dnz_chr_id := l_cle_tas_rec.dnz_chr_id;
16349 l_trx_date := l_cle_tas_rec.date_trans_occurred;
16350 END LOOP;
16351 /*
16352 -- mvasudev, 10/28/2004
16353 -- END, Fetch parameters for Business Event enabling
16354 */
16355
16356 l_txlv_rec := get_txlv_rec(l_fa_line_id, l_no_data_found);
16357 IF l_no_data_found THEN
16358 NULL;
16359 --dbms_output.put_line('No pending Split Asset Transactions FOR this Asset');
16360 OKL_API.set_message(p_app_name => G_APP_NAME,
16361 p_msg_name => G_SPLIT_AST_TRX_NOT_FOUND
16362 );
16363 RAISE OKL_API.G_EXCEPTION_ERROR;
16364 ELSE
16365 --dbms_output.put_line('txlv id FOR FETCH OF txd '|| to_char(l_txlv_rec.id));
16366 l_txdv_tbl := get_trx_details (
16367 p_tal_id => l_txlv_rec.id,
16368 x_no_data_found => l_no_data_found
16369 );
16370 IF l_no_data_found THEN
16371 NULL;
16372 --dbms_output.put_line('NO_DATA_FOUND FOR trx detail');
16373 OKL_API.set_message(p_app_name => G_APP_NAME,
16374 p_msg_name => G_SPLIT_AST_TRX_NOT_FOUND
16375 );
16376 RAISE OKL_API.G_EXCEPTION_ERROR;
16377
16378 ELSE
16379
16380 --Bug #2723498 : 11.5.9 Split by serial numbers validation
16381 --1. validate for split into units
16382
16383 IF NVL(l_txlv_rec.SPLIT_INTO_SINGLES_FLAG,'N') = 'N' AND
16384 NVL(l_txlv_rec.split_into_units,0) <> 0 THEN
16385 l_serialized := OKL_API.G_FALSE;
16386 l_serialized := Is_Serialized(p_cle_id => p_cle_id);
16387 IF (l_serialized = OKL_API.G_TRUE) THEN
16388 OPEN srl_num_csr1 (PTalid => l_txlv_rec.id);
16389 FETCH srl_num_csr1 INTO l_serial_count;
16390 IF srl_num_csr1%NOTFOUND THEN
16391 NULL; --it is count cursor so should not happen
16392 END IF;
16393 CLOSE srl_num_csr1;
16394
16395 IF (l_serial_Count <> NVL(l_txlv_rec.split_into_units,0)) THEN
16396 --Inventory item for asset is serialized. Please select split_into_units
16397 --serial nubers to split.
16398 l_asset_number := NULL;
16399 OPEN asset_num_csr(p_fin_ast_id => p_cle_id);
16400 FETCH asset_num_csr INTO l_asset_number;
16401 IF asset_num_csr%NOTFOUND THEN
16402 NULL;
16403 END IF;
16404 CLOSE asset_num_csr;
16405
16406 OKL_API.set_message(p_app_name => G_APP_NAME,
16407 p_msg_name => G_SPLIT_SERIAL_NOT_FOUND,
16408 p_token1 => G_ASSET_NUMBER_TOKEN,
16409 p_token1_value => l_asset_number,
16410 p_token2 => G_SPLIT_UNITS_TOKEN,
16411 p_token2_value => TO_CHAR(l_txlv_rec.split_into_units)
16412 );
16413 --raise exception
16414 RAISE OKL_API.G_EXCEPTION_ERROR;
16415 END IF;
16416 END IF;
16417 END IF;
16418
16419 --2. validate for split asset into components
16420 IF NVL(l_txlv_rec.SPLIT_INTO_SINGLES_FLAG,'N') = 'X' THEN
16421 IF l_txdv_tbl.COUNT > 0 THEN
16422 FOR i IN 1..l_txdv_tbl.COUNT
16423 LOOP
16424 l_serial_count := 0;
16425 OPEN srl_ctrl_csr (PInvItmId => l_txdv_tbl(i).inventory_item_id,
16426 P_fin_ast_id => p_cle_id);
16427 FETCH srl_ctrl_csr
16428 INTO l_srl_control_code;
16429 IF srl_ctrl_csr%NOTFOUND THEN
16430 NULL; -- will not happen
16431 END IF;
16432 CLOSE srl_ctrl_csr;
16433
16434
16435 IF NVL(l_srl_control_code,0) IN (2,5,6) THEN
16436 --is serialized
16437 --Bug fix #2744213 : invalid cursor
16438 --slr_num_csr1 was being checked after opening srl_num_csr2
16439 OPEN srl_num_csr2(PTalId => l_txlv_rec.id,
16440 PTxdId => l_txdv_tbl(i).id);
16441 FETCH srl_num_csr2 INTO l_serial_count;
16442 IF srl_num_csr2%NOTFOUND THEN
16443 NULL; --it is count cursor so should not happen
16444 END IF;
16445 CLOSE srl_num_csr2;
16446
16447 IF (l_serial_count <> l_txdv_tbl(i).quantity) THEN
16448 --Inventory item for asset is serialized. Please select split_into_units
16449 --serial nubers to split.
16450
16451 OKL_API.set_message(p_app_name => G_APP_NAME,
16452 p_msg_name => G_SPLIT_SERIAL_NOT_FOUND,
16453 p_token1 => G_ASSET_NUMBER_TOKEN,
16454 p_token1_value => l_txdv_tbl(i).Asset_Number,
16455 p_token2 => G_SPLIT_UNITS_TOKEN,
16456 p_token2_value => TO_CHAR(l_txdv_tbl(i).quantity)
16457 );
16458 --raise exception
16459 RAISE OKL_API.G_EXCEPTION_ERROR;
16460 END IF;
16461 END IF;
16462 END LOOP; -- txdv_tbl
16463 END IF;-- txdv_tb.count > 0
16464 END IF;
16465 --Bug #2723498 : 11.5.9 Split by serial numbers validation End
16466
16467 --Bug# 5946411: ER
16468 -- Get the sts code since we can version only active contract
16469 -- Required to perform split for the Expired contract
16470 OPEN c_get_sts_code(l_chr_id);
16471 FETCH c_get_sts_code INTO lv_sts_code;
16472 CLOSE c_get_sts_code;
16473 --Bug# 5946411: ER End
16474 IF NVL(lv_sts_code,'X') = 'ACTIVE' THEN
16475 --version contract
16476 version_contract(
16477 x_return_status => x_return_status,
16478 x_msg_count => x_msg_count,
16479 x_msg_data => x_msg_data,
16480 p_chr_id => l_chr_id
16481 );
16482 IF x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR THEN
16483 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
16484 ELSIF x_return_status = OKL_API.G_RET_STS_ERROR THEN
16485 RAISE OKL_API.G_EXCEPTION_ERROR;
16486 END IF;
16487 END IF; --Bug# 5946411: ER
16488
16489 --Call split asset for transactions to be processed
16490 Split_Fixed_Asset(p_api_version => p_api_version,
16491 p_init_msg_list => p_init_msg_list,
16492 x_return_status => x_return_status,
16493 x_msg_count => x_msg_count,
16494 x_msg_data => x_msg_data,
16495 p_txdv_tbl => l_txdv_tbl,
16496 p_txlv_rec => l_txlv_rec,
16497 x_cle_tbl => x_cle_tbl,
16498 --Bug# 6344223
16499 p_source_call => p_source_call);
16500
16501 IF x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR THEN
16502 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
16503 ELSIF x_return_status = OKL_API.G_RET_STS_ERROR THEN
16504 RAISE OKL_API.G_EXCEPTION_ERROR;
16505 END IF;
16506 END IF;
16507 END IF;
16508 END IF;
16509
16510 /*
16511 -- mvasudev, 08/23/2004
16512 -- Code change to enable Business Event
16513 */
16514 raise_business_event(p_dnz_chr_id => l_dnz_chr_id,
16515 p_trx_date => l_trx_date,
16516 x_return_status => x_return_status);
16517 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
16518 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
16519 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
16520 RAISE OKL_API.G_EXCEPTION_ERROR;
16521 END IF;
16522
16523 /*
16524 -- mvasudev, 08/23/2004
16525 -- END, Code change to enable Business Event
16526 */
16527
16528 OKL_API.END_ACTIVITY (x_msg_count,
16529 x_msg_data );
16530
16531 EXCEPTION
16532 WHEN OKL_API.G_EXCEPTION_ERROR THEN
16533 x_return_status := OKL_API.HANDLE_EXCEPTIONS(
16534 l_api_name,
16535 G_PKG_NAME,
16536 'OKL_API.G_RET_STS_ERROR',
16537 x_msg_count,
16538 x_msg_data,
16539 '_PVT');
16540 WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
16541 x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
16542 l_api_name,
16543 G_PKG_NAME,
16544 'OKL_API.G_RET_STS_UNEXP_ERROR',
16545 x_msg_count,
16546 x_msg_data,
16547 '_PVT');
16548 WHEN OTHERS THEN
16549 x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
16550 l_api_name,
16551 G_PKG_NAME,
16552 'OTHERS',
16553 x_msg_count,
16554 x_msg_data,
16555 '_PVT');
16556
16557 END Split_Fixed_Asset;
16558 --------------------------------------------------------------------------------
16559 --Start of Comments
16560 --Procedure Name : Cancel_Split_Asset_Trs
16561 --Description : Marks the split asset transaction as cancelled
16562 --History :
16563 -- 03-Sep-2002 ashish.singh Created
16564 --End of Comments
16565 --------------------------------------------------------------------------------
16566 PROCEDURE Cancel_Split_Asset_Trs
16567 (p_api_version IN NUMBER,
16568 p_init_msg_list IN VARCHAR2 DEFAULT OKL_API.G_FALSE,
16569 x_return_status OUT NOCOPY VARCHAR2,
16570 x_msg_count OUT NOCOPY NUMBER,
16571 x_msg_data OUT NOCOPY VARCHAR2,
16572 p_cle_id IN NUMBER) IS
16573
16574 l_return_status VARCHAR2(1) DEFAULT OKL_API.G_RET_STS_SUCCESS;
16575 l_api_name CONSTANT VARCHAR2(30) := 'CANCEL_SPLIT_ASSET_TRS';
16576 l_api_version CONSTANT NUMBER := 1.0;
16577
16578 --Cursor to get the fixed Asset Line Id
16579 CURSOR l_fixedasst_csr (p_finasst_line IN NUMBER) IS
16580 SELECT cle.id fixedasst_line
16581 FROM OKC_K_LINES_B cle,
16582 OKC_LINE_STYLES_B lse
16583 WHERE cle.cle_id = p_finasst_line
16584 AND cle.lse_id = lse.id
16585 AND lse.lty_code = 'FIXED_ASSET';
16586
16587 l_fixedasst_line OKC_K_LINES_B.ID%TYPE;
16588
16589 --Cursor to find kle_id split transaction lines to be cancelled..
16590 CURSOR l_tal_csr(p_fixedasst_line IN NUMBER) IS
16591 SELECT tal.id tal_id,
16592 tas.id tas_id
16593 FROM OKL_TRX_ASSETS TAS,
16594 OKL_TXL_ASSETS_B TAL
16595 WHERE tas.id = tal.tas_id
16596 AND tas.tsu_code = 'ENTERED'
16597 AND tas.tas_type = 'ALI'
16598 AND tal.tal_type = 'ALI'
16599 AND tal.kle_id = p_fixedasst_line;
16600
16601 l_tas_id OKL_TRX_ASSETS.ID%TYPE;
16602 l_tal_id OKL_TXL_ASSETS_B.ID%TYPE;
16603 l_cle_id OKC_K_LINES_B.ID%TYPE;
16604
16605 l_tasv_rec okl_trx_assets_pub.thpv_rec_type;
16606 lx_tasv_rec okl_trx_assets_pub.thpv_rec_type;
16607
16608 BEGIN
16609 -- Call start_activity to create savepoint, check compatibility
16610 -- and initialize message list
16611 x_return_status := OKL_API.START_ACTIVITY (
16612 l_api_name
16613 ,p_init_msg_list
16614 ,'_PVT'
16615 ,x_return_status);
16616 -- Check if activity started successfully
16617 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
16618 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
16619 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
16620 RAISE OKL_API.G_EXCEPTION_ERROR;
16621 END IF;
16622
16623 l_cle_id := p_cle_id;
16624 --1.Verify p_cle_id
16625 x_return_status := verify_cle_id(p_cle_id => l_cle_id);
16626 IF x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR THEN
16627 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
16628 ELSIF x_return_status = OKL_API.G_RET_STS_ERROR THEN
16629 RAISE OKL_API.G_EXCEPTION_ERROR;
16630 END IF;
16631
16632 -- get fixedasset line id
16633 OPEN l_fixedasst_csr(p_finasst_line => l_cle_id);
16634 FETCH l_fixedasst_csr INTO l_fixedasst_line;
16635 IF l_fixedasst_csr%NOTFOUND THEN
16636 NULL;
16637 ELSE
16638 OPEN l_tal_csr(p_fixedasst_line => l_fixedasst_line);
16639 FETCH l_tal_csr INTO l_tal_id, l_tas_id;
16640 IF l_tal_csr%NOTFOUND THEN
16641 OKL_API.set_message(p_app_name => G_APP_NAME,
16642 p_msg_name => G_SPLIT_AST_TRX_NOT_FOUND
16643 );
16644 RAISE OKL_API.G_EXCEPTION_ERROR;
16645 ELSE
16646 --update the transaction status to cancelled
16647 l_tasv_rec.id := l_tas_id;
16648 l_tasv_rec.tsu_code := 'CANCELED';
16649 --update split transaction header
16650 OKL_TRX_ASSETS_PUB.update_trx_ass_h_def(
16651 p_api_version => p_api_version,
16652 p_init_msg_list => p_init_msg_list,
16653 x_return_status => x_return_status,
16654 x_msg_count => x_msg_count,
16655 x_msg_data => x_msg_data,
16656 p_thpv_rec => l_tasv_rec,
16657 x_thpv_rec => lx_tasv_rec);
16658
16659 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
16660 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
16661 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
16662 RAISE OKL_API.G_EXCEPTION_ERROR;
16663 END IF;
16664 END IF;
16665 CLOSE l_tal_csr;
16666 END IF; --l_fixedasst_csr%NOTFOUND
16667 CLOSE l_fixedasst_csr;
16668 OKL_API.END_ACTIVITY (x_msg_count,
16669 x_msg_data );
16670 EXCEPTION
16671 WHEN OKL_API.G_EXCEPTION_ERROR THEN
16672 x_return_status := OKL_API.HANDLE_EXCEPTIONS(
16673 l_api_name,
16674 G_PKG_NAME,
16675 'OKL_API.G_RET_STS_ERROR',
16676 x_msg_count,
16677 x_msg_data,
16678 '_PVT');
16679 WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
16680 x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
16681 l_api_name,
16682 G_PKG_NAME,
16683 'OKL_API.G_RET_STS_UNEXP_ERROR',
16684 x_msg_count,
16685 x_msg_data,
16686 '_PVT');
16687 WHEN OTHERS THEN
16688 x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
16689 l_api_name,
16690 G_PKG_NAME,
16691 'OTHERS',
16692 x_msg_count,
16693 x_msg_data,
16694 '_PVT');
16695 END Cancel_Split_Asset_Trs;
16696 Procedure check_ser_num_checked(x_return_status OUT NOCOPY VARCHAR2,
16697 x_msg_count OUT NOCOPY NUMBER,
16698 x_msg_data OUT NOCOPY VARCHAR2,
16699 p_cle_id IN NUMBER) is
16700
16701 l_return_status VARCHAR2(1) DEFAULT OKL_API.G_RET_STS_SUCCESS;
16702 l_api_name CONSTANT VARCHAR2(30) := 'CHECK_SER_NUM_CHECKED';
16703 l_api_version CONSTANT NUMBER := 1.0;
16704
16705 CURSOR fa_line_csr(p_cle_id IN NUMBER) IS
16706 SELECT cle.id,
16707 cle.dnz_chr_id
16708 FROM OKC_K_LINES_B cle,
16709 OKC_LINE_STYLES_B lse
16710 WHERE cle.cle_id = p_cle_id
16711 AND cle.lse_id = lse.id
16712 AND lse.lty_code = 'FIXED_ASSET';
16713
16714 l_txlv_rec txlv_rec_type;
16715 l_txdv_tbl txdv_tbl_type;
16716
16717 l_no_data_found BOOLEAN DEFAULT TRUE;
16718 l_fa_line_id NUMBER;
16719 l_chr_id OKC_K_LINES_B.dnz_chr_id%TYPE;
16720
16721 i NUMBER;
16722
16723 CURSOR srl_num_csr1 (PTalid IN NUMBER) IS
16724 SELECT COUNT(iti.serial_number)
16725 FROM okl_txl_itm_insts iti
16726 WHERE iti.tal_id = PTalid
16727 AND tal_type = 'ALI'
16728 AND NVL(selected_for_split_flag,'N') = 'Y';
16729
16730 l_serial_count NUMBER;
16731
16732 --cursor for asset_number
16733 CURSOR asset_num_csr (P_fin_ast_id IN NUMBER) IS
16734 SELECT name
16735 FROM okc_k_lines_tl
16736 WHERE id = p_fin_ast_id;
16737
16738 l_asset_number OKC_K_LINES_TL.NAME%TYPE;
16739
16740 BEGIN
16741
16742 -- dbms_output.put_line('start');
16743 -- Call start_activity to create savepoint, check compatibility
16744 -- and initialize message list
16745 x_return_status := OKL_API.START_ACTIVITY (
16746 l_api_name
16747 ,OKL_API.G_FALSE
16748 ,'_PVT'
16749 ,x_return_status);
16750 -- Check if activity started successfully
16751 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
16752 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
16753 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
16754 RAISE OKL_API.G_EXCEPTION_ERROR;
16755 END IF;
16756 -- dbms_output.put_line('ebd activity');
16757 --Verify cle_id
16758 x_return_status := verify_cle_id(p_cle_id => p_cle_id);
16759 -- dbms_output.put_line('x_return_status after verify : ' || x_return_status);
16760 IF x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR THEN
16761 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
16762 ELSIF x_return_status = OKL_API.G_RET_STS_ERROR THEN
16763 RAISE OKL_API.G_EXCEPTION_ERROR;
16764 END IF;
16765
16766 -- dbms_output.put_line('b4 fa_line_csr');
16767 --get fixed asset line
16768 OPEN fa_line_csr(p_cle_id => p_cle_id) ;
16769 FETCH fa_line_csr INTO l_fa_line_id, l_chr_id;
16770 IF fa_line_csr%NOTFOUND THEN
16771 NULL; --not exactly
16772 OKL_API.set_message(p_app_name => G_APP_NAME,
16773 p_msg_name => G_INACTIVE_ASSET
16774 );
16775 RAISE OKL_API.G_EXCEPTION_ERROR;
16776 ELSE
16777 l_txlv_rec := get_txlv_rec(l_fa_line_id, l_no_data_found);
16778 IF l_no_data_found THEN
16779 NULL;
16780 OKL_API.set_message(p_app_name => G_APP_NAME,
16781 p_msg_name => G_SPLIT_AST_TRX_NOT_FOUND
16782 );
16783 RAISE OKL_API.G_EXCEPTION_ERROR;
16784 ELSE
16785 l_txdv_tbl := get_trx_details (
16786 p_tal_id => l_txlv_rec.id,
16787 x_no_data_found => l_no_data_found
16788 );
16789 IF l_no_data_found THEN
16790 NULL;
16791 OKL_API.set_message(p_app_name => G_APP_NAME,
16792 p_msg_name => G_SPLIT_AST_TRX_NOT_FOUND
16793 );
16794 RAISE OKL_API.G_EXCEPTION_ERROR;
16795
16796 ELSE
16797 IF NVL(l_txlv_rec.SPLIT_INTO_SINGLES_FLAG,'N') = 'N' AND
16798 NVL(l_txlv_rec.split_into_units,0) <> 0 THEN
16799 -- dbms_output.put_line('b4 srl_num_csr1:' || l_serial_count);
16800 OPEN srl_num_csr1 (PTalid => l_txlv_rec.id);
16801 FETCH srl_num_csr1 INTO l_serial_count;
16802 IF srl_num_csr1%NOTFOUND THEN
16803 NULL; --it is count cursor so should not happen
16804 END IF;
16805 CLOSE srl_num_csr1;
16806 IF (l_serial_Count <> NVL(l_txlv_rec.split_into_units,0))
16807 THEN
16808 --Inventory item for asset is serialized. Please select
16809 --serial nubers to split.
16810 l_asset_number := NULL;
16811 -- dbms_output.put_line('b4 asset_num_csr:');
16812 OPEN asset_num_csr(p_fin_ast_id => p_cle_id);
16813 FETCH asset_num_csr INTO l_asset_number;
16814 IF asset_num_csr%NOTFOUND THEN
16815 NULL;
16816 END IF;
16817 CLOSE asset_num_csr;
16818 -- dbms_output.put_line('after asset_num_csr:');
16819 OKL_API.set_message(p_app_name => G_APP_NAME,
16820 p_msg_name =>
16821 G_SPLIT_SERIAL_NOT_FOUND,
16822 p_token1 =>
16823 G_ASSET_NUMBER_TOKEN,
16824 p_token1_value => l_asset_number,
16825 p_token2 =>
16826 G_SPLIT_UNITS_TOKEN,
16827 p_token2_value =>
16828 TO_CHAR(l_txlv_rec.split_into_units)
16829 );
16830 --raise exception
16831 RAISE OKL_API.G_EXCEPTION_ERROR;
16832 END IF;
16833 END IF;
16834 END IF;
16835 END IF;
16836 END IF;
16837 exception
16838 WHEN OKL_API.G_EXCEPTION_ERROR THEN
16839 x_return_status := OKL_API.HANDLE_EXCEPTIONS(
16840 l_api_name,
16841 G_PKG_NAME,
16842 'OKL_API.G_RET_STS_ERROR',
16843 x_msg_count,
16844 x_msg_data,
16845 '_PVT');
16846 WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
16847 x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
16848 l_api_name,
16849 G_PKG_NAME,
16850 'OKL_API.G_RET_STS_UNEXP_ERROR',
16851 x_msg_count,
16852 x_msg_data,
16853 '_PVT');
16854 WHEN OTHERS THEN
16855 x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
16856 l_api_name,
16857 G_PKG_NAME,
16858 'OTHERS',
16859 x_msg_count,
16860 x_msg_data,
16861 '_PVT');
16862 end check_ser_num_checked;
16863 END Okl_Split_Asset_Pvt;