[Home] [Help]
PACKAGE BODY: APPS.CS_CHARGE_DETAILS_PVT
Source
1 PACKAGE BODY CS_CHARGE_DETAILS_PVT AS
2 /* $Header: csxvestb.pls 120.101.12020000.7 2013/05/20 09:33:42 bkanimoz ship $ */
3
4 --==========================================================
5 -- Global Variables Decalaration
6 --==========================================================
7
8 RECORD_LOCK_EXCEPTION EXCEPTION ;
9 PRAGMA EXCEPTION_INIT(RECORD_LOCK_EXCEPTION,-0054);
10 G_WARNING EXCEPTION ;
11
12
13 -- Structure Definitions
14 TYPE REC_UOM IS RECORD
15 (
16 Unit_of_Measure NUMBER
17 );
18
19 TYPE TBL_UOM IS TABLE OF REC_UOM INDEX BY BINARY_INTEGER ;
20
21
22 --===========================================================
23 -- Declaration of Procedures and functions
24 --===========================================================
25
26 PROCEDURE CURR_IN_CONVERSION_LIST(
27 p_api_name IN VARCHAR2,
28 p_price_list_id IN NUMBER ,
29 p_currency_code IN VARCHAR2,
30 X_MSG_DATA OUT NOCOPY VARCHAR2,
31 X_MSG_COUNT OUT NOCOPY NUMBER,
32 x_return_status OUT NOCOPY VARCHAR2);
33
34 PROCEDURE VALIDATE_CHARGE_DETAILS(
35 P_API_NAME IN VARCHAR2,
36 P_CHARGES_DETAIL_REC IN CS_Charge_Details_PUB.Charges_Rec_Type,
37 P_VALIDATION_MODE IN VARCHAR2,
38 P_USER_ID IN NUMBER,
39 P_LOGIN_ID IN NUMBER,
40 X_CHARGES_DETAIL_REC OUT NOCOPY CS_Charge_Details_PUB.Charges_Rec_Type,
41 X_MSG_DATA OUT NOCOPY VARCHAR2,
42 X_MSG_COUNT OUT NOCOPY NUMBER,
43 X_RETURN_STATUS OUT NOCOPY VARCHAR2);
44
45
46 PROCEDURE ADD_INVALID_ARGUMENT_MSG(
47 P_TOKEN_AN VARCHAR2,
48 P_TOKEN_V VARCHAR2,
49 P_TOKEN_P VARCHAR2);
50
51 PROCEDURE ADD_NULL_PARAMETER_MSG(
52 P_TOKEN_AN IN VARCHAR2,
53 P_TOKEN_NP IN VARCHAR2);
54
55 PROCEDURE CANT_UPDATE_DETAIL_PARAM_MSG(
56 P_TOKEN_AN IN VARCHAR2,
57 P_TOKEN_CN IN VARCHAR2,
58 P_TOKEN_V IN VARCHAR2 );
59
60 PROCEDURE CANNOT_DELETE_LINE_MSG(
61 P_TOKEN_AN IN VARCHAR2);
62
63 PROCEDURE RECORD_IS_LOCKED_MSG(
64 P_TOKEN_AN IN VARCHAR2);
65
66
67 PROCEDURE GET_SITE_FOR_PARTY(
68 P_API_NAME IN VARCHAR2,
69 P_SITE_USE_ID IN NUMBER,
70 P_PARTY_ID IN NUMBER,
71 P_VAL_MODE IN VARCHAR2,
72 X_SITE_ID OUT NOCOPY NUMBER,
73 X_RETURN_STATUS OUT NOCOPY VARCHAR2);
74
75 PROCEDURE GET_SR_DEFAULTS(
76 P_API_NAME IN VARCHAR2,
77 P_INCIDENT_ID IN NUMBER,
78 X_BUSINESS_PROCESS_ID OUT NOCOPY NUMBER,
79 X_CUSTOMER_ID OUT NOCOPY NUMBER,
80 X_CUSTOMER_SITE_ID OUT NOCOPY NUMBER,
81 X_CUST_PO_NUMBER OUT NOCOPY VARCHAR2,
82 X_CUSTOMER_PRODUCT_ID OUT NOCOPY NUMBER,
83 X_SYSTEM_ID OUT NOCOPY NUMBER,
84 X_INVENTORY_ITEM_ID OUT NOCOPY NUMBER,
85 X_ACCOUNT_ID OUT NOCOPY NUMBER,
86 X_BILL_TO_PARTY_ID OUT NOCOPY NUMBER,
87 X_BILL_TO_ACCOUNT_ID OUT NOCOPY NUMBER,
88 X_BILL_TO_CONTACT_ID OUT NOCOPY NUMBER,
89 X_BILL_TO_SITE_ID OUT NOCOPY NUMBER,
90 X_SHIP_TO_PARTY_ID OUT NOCOPY NUMBER,
91 X_SHIP_TO_ACCOUNT_ID OUT NOCOPY NUMBER,
92 X_SHIP_TO_CONTACT_ID OUT NOCOPY NUMBER,
93 X_SHIP_TO_SITE_ID OUT NOCOPY NUMBER,
94 X_CONTRACT_ID OUT NOCOPY NUMBER,
95 X_CONTRACT_SERVICE_ID OUT NOCOPY NUMBER,
96 X_INCIDENT_DATE OUT NOCOPY DATE,
97 X_CREATION_DATE OUT NOCOPY DATE,
98 X_MSG_DATA OUT NOCOPY VARCHAR2,
99 X_MSG_COUNT OUT NOCOPY NUMBER,
100 X_RETURN_STATUS OUT NOCOPY VARCHAR2);
101
102 PROCEDURE VALIDATE_TXN_TYPE(
103 P_API_NAME IN VARCHAR2,
104 P_BUSINESS_PROCESS_ID IN NUMBER,
105 P_TXN_TYPE_ID IN NUMBER,
106 P_SOURCE_CODE IN VARCHAR2,
107 X_LINE_ORDER_CATEGORY_CODE OUT NOCOPY VARCHAR2,
108 X_NO_CHARGE_FLAG OUT NOCOPY VARCHAR2,
109 X_INTERFACE_TO_OE_FLAG OUT NOCOPY VARCHAR2, -- Added a new parameter for R11.5.10
110 X_UPDATE_IB_FLAG OUT NOCOPY VARCHAR2,
111 X_SRC_REFERENCE_REQD_FLAG OUT NOCOPY VARCHAR2,
112 X_SRC_RETURN_REQD_FLAG OUT NOCOPY VARCHAR2,
113 X_NON_SRC_REFERENCE_REQD OUT NOCOPY VARCHAR2,
114 X_NON_SRC_RETURN_REQD OUT NOCOPY VARCHAR2,
115 X_MSG_DATA OUT NOCOPY VARCHAR2,
116 X_MSG_COUNT OUT NOCOPY NUMBER,
117 X_RETURN_STATUS OUT NOCOPY VARCHAR2);
118
119 PROCEDURE VALIDATE_ITEM(
120 P_API_NAME IN VARCHAR2,
121 P_INV_ID IN NUMBER,
122 P_UPDATE_IB_FLAG IN VARCHAR2,
123 X_COMMS_TRACKABLE_FLAG OUT NOCOPY VARCHAR2,
124 X_SERIAL_CONTROL_FLAG OUT NOCOPY VARCHAR2,
125 X_REV_CONTROL_FLAG OUT NOCOPY VARCHAR2,
126 X_MSG_DATA OUT NOCOPY VARCHAR2,
127 X_MSG_COUNT OUT NOCOPY NUMBER,
128 X_RETURN_STATUS OUT NOCOPY VARCHAR2);
129
130 PROCEDURE GET_BILLING_FLAG(
131 P_API_NAME IN VARCHAR2,
132 P_INV_ID IN NUMBER,
133 P_TXN_TYPE_ID IN NUMBER,
134 X_BILLING_FLAG OUT NOCOPY VARCHAR2,
135 X_MSG_DATA OUT NOCOPY VARCHAR2,
136 X_MSG_COUNT OUT NOCOPY NUMBER,
137 X_RETURN_STATUS OUT NOCOPY VARCHAR2);
138
139 PROCEDURE GET_TXN_BILLING_TYPE(
140 P_API_NAME IN VARCHAR2,
141 P_INV_ID IN NUMBER,
142 P_TXN_TYPE_ID IN NUMBER,
143 X_TXN_BILLING_TYPE_ID OUT NOCOPY NUMBER,
144 X_MSG_DATA OUT NOCOPY VARCHAR2,
145 X_MSG_COUNT OUT NOCOPY NUMBER,
146 X_RETURN_STATUS OUT NOCOPY VARCHAR2);
147
148 PROCEDURE GET_UOM(
149 P_INV_ID IN NUMBER,
150 X_TBL_UOM OUT NOCOPY TBL_UOM,
151 X_MSG_DATA OUT NOCOPY VARCHAR2,
152 X_MSG_COUNT OUT NOCOPY NUMBER,
153 X_RETURN_STATUS OUT NOCOPY VARCHAR2);
154
155
156 PROCEDURE GET_PRIMARY_UOM(
157 P_INV_ID IN NUMBER,
158 X_PRIMARY_UOM OUT NOCOPY VARCHAR2,
159 X_MSG_DATA OUT NOCOPY VARCHAR2,
160 X_MSG_COUNT OUT NOCOPY NUMBER,
161 X_RETURN_STATUS OUT NOCOPY VARCHAR2) ;
162
163
164 PROCEDURE VALIDATE_SOURCE(
165 P_API_NAME IN VARCHAR2,
166 P_SOURCE_CODE IN VARCHAR2,
167 P_SOURCE_ID IN NUMBER,
168 P_ORG_ID IN NUMBER,
169 X_SOURCE_ID OUT NOCOPY NUMBER,
170 X_MSG_DATA OUT NOCOPY VARCHAR2,
171 X_MSG_COUNT OUT NOCOPY NUMBER,
172 X_RETURN_STATUS OUT NOCOPY VARCHAR2) ;
173
174 PROCEDURE GET_CONTRACT_PRICE_LIST(
175 p_api_name IN VARCHAR2,
176 p_business_process_id IN NUMBER,
177 p_request_date IN DATE,
178 p_contract_line_id IN NUMBER,
179 --p_coverage_id IN NUMBER,
180 x_price_list_id OUT NOCOPY NUMBER,
181 x_currency_code OUT NOCOPY VARCHAR2,
182 X_MSG_DATA OUT NOCOPY VARCHAR2,
183 X_MSG_COUNT OUT NOCOPY NUMBER,
184 x_return_status OUT NOCOPY VARCHAR2);
185
186 PROCEDURE GET_CURRENCY_CODE(
187 p_api_name IN VARCHAR2,
188 p_price_list_id IN NUMBER ,
189 x_currency_code OUT NOCOPY VARCHAR2,
190 X_MSG_DATA OUT NOCOPY VARCHAR2,
191 X_MSG_COUNT OUT NOCOPY NUMBER,
192 x_return_status OUT NOCOPY VARCHAR2);
193
194 PROCEDURE DO_TXNS_EXIST(
195 P_API_NAME IN VARCHAR2,
196 P_ESTIMATE_DETAIL_ID IN NUMBER ,
197 x_ORDER_LINE_ID OUT NOCOPY NUMBER,
198 x_gen_bca_flag OUT NOCOPY VARCHAR2,
199 x_charge_line_type OUT NOCOPY VARCHAR2,
200 x_RETURN_STATUS OUT NOCOPY VARCHAR2);
201
202 PROCEDURE GET_CONVERSION_RATE(
203 P_API_NAME IN VARCHAR2,
204 P_FROM_CURRENCY IN VARCHAR2,
205 P_TO_CURRENCY IN VARCHAR2,
206 X_DENOMINATOR OUT NOCOPY NUMBER,
207 X_NUMERATOR OUT NOCOPY NUMBER,
208 X_RATE OUT NOCOPY NUMBER,
209 X_RETURN_STATUS OUT NOCOPY VARCHAR);
210
211
212 PROCEDURE Validate_Who_Info(
213 P_API_NAME IN VARCHAR2,
214 P_USER_ID IN NUMBER,
215 P_LOGIN_ID IN NUMBER,
216 X_RETURN_STATUS OUT NOCOPY VARCHAR2);
217
218
219 PROCEDURE GET_CHARGE_DETAIL_REC(
220 P_API_NAME IN VARCHAR2,
221 P_ESTIMATE_DETAIL_ID IN NUMBER,
222 x_CHARGE_DETAIL_REC OUT NOCOPY CS_ESTIMATE_DETAILS%ROWTYPE ,
223 x_MSG_DATA OUT NOCOPY VARCHAR2,
224 x_MSG_COUNT OUT NOCOPY NUMBER,
225 x_RETURN_STATUS OUT NOCOPY VARCHAR2);
226
227 --Fixed Bug # 3325667 added p_org_id to procedure get_line_type
228 Procedure Get_Line_Type(
229 p_api_name IN VARCHAR2,
230 p_txn_billing_type_id IN NUMBER,
231 p_org_id IN NUMBER,
232 x_line_type_id OUT NOCOPY NUMBER,
233 x_return_status OUT NOCOPY VARCHAR2,
234 x_msg_count OUT NOCOPY NUMBER,
235 x_msg_data OUT NOCOPY VARCHAR2);
236
237 --Bug Fix for Bug # 3086455
238 PROCEDURE get_charge_flags_from_sr(
239 p_api_name IN VARCHAR2,
240 p_incident_id IN NUMBER,
241 x_disallow_new_charge OUT NOCOPY VARCHAR2,
242 x_disallow_charge_update OUT NOCOPY VARCHAR2,
243 x_msg_data OUT NOCOPY VARCHAR2,
244 x_msg_count OUT NOCOPY NUMBER,
245 x_return_status OUT NOCOPY NUMBER);
246
247 --Added by bkanimoz on 15-dec-2007 --Service Costing Enh
248
249 PROCEDURE get_charge_flag_from_sac
250 (
251 p_api_name IN VARCHAR2,
252 p_txn_type_id IN NUMBER,
253 x_create_charge_flag OUT NOCOPY VARCHAR2,
254 x_msg_data OUT NOCOPY VARCHAR2,
255 x_msg_count OUT NOCOPY NUMBER,
256 x_return_status OUT NOCOPY NUMBER
257 );
258
259
260 PROCEDURE Validate_Order(
261 p_api_name IN VARCHAR2,
262 p_order_header_id IN NUMBER,
263 p_org_id IN NUMBER,
264 x_return_status OUT NOCOPY VARCHAR2,
265 x_msg_count OUT NOCOPY NUMBER,
266 x_msg_data OUT NOCOPY VARCHAR2);
267
268 PROCEDURE VALIDATE_ORG_ID(
269 P_API_NAME IN VARCHAR2,
270 P_ORG_ID IN NUMBER,
271 X_RETURN_STATUS OUT NOCOPY VARCHAR2,
272 X_MSG_COUNT OUT NOCOPY NUMBER,
273 X_MSG_DATA OUT NOCOPY VARCHAR2);
274
275
276 FUNCTION IS_INCIDENT_ID_VALID (
277 p_incident_id IN NUMBER,
278 x_msg_data OUT NOCOPY VARCHAR2,
279 x_msg_count OUT NOCOPY NUMBER,
280 x_return_status OUT NOCOPY VARCHAR2)
281 RETURN VARCHAR2;
282
283
284 FUNCTION IS_RETURN_REASON_VALID(
285 P_RETURN_REASON_CODE IN VARCHAR2,
286 X_MSG_DATA OUT NOCOPY VARCHAR2,
287 X_MSG_COUNT OUT NOCOPY NUMBER,
288 X_RETURN_STATUS OUT NOCOPY VARCHAR2)
289 RETURN VARCHAR2;
290
291 FUNCTION IS_CHARGE_LINE_TYPE_VALID(
292 p_charge_line_type IN VARCHAR2,
293 x_msg_data OUT NOCOPY VARCHAR2,
294 x_msg_count OUT NOCOPY NUMBER,
295 x_return_status OUT NOCOPY VARCHAR2)
296 RETURN VARCHAR2;
297
298 FUNCTION IS_BUSINESS_PROCESS_ID_VALID(
299 p_business_process_id IN NUMBER,
300 x_msg_data OUT NOCOPY VARCHAR2,
301 x_msg_count OUT NOCOPY NUMBER,
302 x_return_status OUT NOCOPY VARCHAR2)
303 RETURN VARCHAR2;
304
305 FUNCTION IS_PARTY_VALID(
306 p_party_id IN NUMBER,
307 x_msg_data OUT NOCOPY VARCHAR2,
308 x_msg_count OUT NOCOPY NUMBER,
309 x_return_status OUT NOCOPY VARCHAR2)
310 RETURN VARCHAR2;
311
312 FUNCTION IS_ACCOUNT_VALID(
313 p_account_id IN NUMBER,
314 p_party_id IN NUMBER,
315 x_msg_data OUT NOCOPY VARCHAR2,
316 x_msg_count OUT NOCOPY NUMBER,
317 x_return_status OUT NOCOPY VARCHAR2)
318 RETURN VARCHAR2;
319
320 FUNCTION IS_CONTACT_VALID(
321 p_contact_id IN NUMBER,
322 p_party_id IN NUMBER,
323 x_msg_data OUT NOCOPY VARCHAR2,
324 x_msg_count OUT NOCOPY NUMBER,
325 x_return_status OUT NOCOPY VARCHAR2)
326 RETURN VARCHAR2;
327
328 FUNCTION IS_PARTY_SITE_VALID(
329 p_party_site_id IN NUMBER,
330 p_party_id IN NUMBER,
331 p_val_mode IN VARCHAR2,
332 x_msg_data OUT NOCOPY VARCHAR2,
333 x_msg_count OUT NOCOPY NUMBER,
334 x_return_status OUT NOCOPY VARCHAR2)
335 RETURN VARCHAR2;
336
337
338 FUNCTION IS_CONTRACT_VALID(
339 p_contract_id IN NUMBER,
340 x_msg_data OUT NOCOPY VARCHAR2,
341 x_msg_count OUT NOCOPY NUMBER,
342 x_return_status OUT NOCOPY VARCHAR2)
343 RETURN VARCHAR2;
344
345 --Added for R12 implementation
346
347 FUNCTION IS_CONTRACT_LINE_VALID(
348 p_contract_line_id IN NUMBER,
349 x_contract_id OUT NOCOPY NUMBER,
350 x_msg_data OUT NOCOPY VARCHAR2,
351 x_msg_count OUT NOCOPY NUMBER,
352 x_return_status OUT NOCOPY VARCHAR2)
353 RETURN VARCHAR2;
354
355 FUNCTION IS_PRICE_LIST_VALID(
356 p_price_list_id IN NUMBER,
357 x_msg_data OUT NOCOPY VARCHAR2,
358 x_msg_count OUT NOCOPY NUMBER,
359 x_return_status OUT NOCOPY VARCHAR2)
360 RETURN VARCHAR2;
361
362 FUNCTION IS_UOM_VALID(
363 p_uom_code IN VARCHAR2,
364 p_inv_id IN NUMBER,
365 x_msg_data OUT NOCOPY VARCHAR2,
366 x_msg_count OUT NOCOPY NUMBER,
367 x_return_status OUT NOCOPY VARCHAR2)
368 RETURN VARCHAR2;
369
370
371 FUNCTION IS_INSTANCE_FOR_INVENTORY(
372 p_instance_id IN NUMBER,
373 p_inv_id IN NUMBER,
374 x_msg_data OUT NOCOPY VARCHAR2,
375 x_msg_count OUT NOCOPY NUMBER,
376 x_return_status OUT NOCOPY VARCHAR2)
377 RETURN VARCHAR2;
378
379 FUNCTION IS_INSTANCE_VALID(
380 p_instance_id IN NUMBER,
381 p_party_id IN NUMBER,
382 x_msg_data OUT NOCOPY VARCHAR2,
383 x_msg_count OUT NOCOPY NUMBER,
384 x_return_status OUT NOCOPY VARCHAR2)
385 RETURN VARCHAR2;
386
387 FUNCTION IS_INSTANCE_SERIAL_VALID (
388 p_instance_id IN NUMBER
389 ,p_serial_number IN VARCHAR
390 ,x_msg_data OUT NOCOPY VARCHAR2
391 ,x_msg_count OUT NOCOPY NUMBER
392 ,x_return_status OUT NOCOPY VARCHAR2)
393
394 RETURN VARCHAR2;
395
396 FUNCTION IS_TXN_INV_ORG_VALID(
397 p_txn_inv_org IN NUMBER,
398 p_inv_id IN NUMBER,
399 x_msg_data OUT NOCOPY VARCHAR2,
400 x_msg_count OUT NOCOPY NUMBER,
401 x_return_status OUT NOCOPY VARCHAR2)
402 RETURN VARCHAR2;
403
404 -- 12.1.3 Charges Logistics Project
405 FUNCTION IS_PARENT_INSTANCE_VALID(
406 p_cust_prod_id IN NUMBER,
407 p_parent_inst_id IN NUMBER,
408 x_msg_data OUT NOCOPY VARCHAR2,
409 x_msg_count OUT NOCOPY NUMBER,
410 x_return_status OUT NOCOPY VARCHAR2)
411 RETURN VARCHAR2;
412
413 FUNCTION IS_ESTIMATE_DETAIL_ID_VALID(
414 p_estimate_detail_id IN NUMBER,
415 x_msg_data OUT NOCOPY VARCHAR2,
416 x_msg_count OUT NOCOPY NUMBER,
417 x_return_status OUT NOCOPY VARCHAR2)
418 RETURN VARCHAR2;
419
420
421 FUNCTION GET_CONTRACT_LINE_ID(
422 p_coverage_id IN NUMBER,
423 x_msg_data OUT NOCOPY VARCHAR2,
424 x_msg_count OUT NOCOPY NUMBER,
425 x_return_status OUT NOCOPY VARCHAR2)
426 RETURN NUMBER;
427
428 -- Added fix for the bug:5125858
429 FUNCTION IS_ITEM_REVISION_VALID(
430 p_inventory_item_id IN NUMBER,
431 p_item_revision IN VARCHAR2,
432 x_msg_data OUT NOCOPY VARCHAR2,
433 x_msg_count OUT NOCOPY NUMBER,
434 x_return_status OUT NOCOPY VARCHAR2)
435 RETURN VARCHAR2;
436
437 -- Added fix for the bug:
438 FUNCTION IS_LINE_NUMBER_VALID(
439 p_line_number IN NUMBER,
440 p_incident_id IN NUMBER,
441 x_msg_data OUT NOCOPY VARCHAR2,
442 x_msg_count OUT NOCOPY NUMBER,
443 x_return_status OUT NOCOPY VARCHAR2)
444 RETURN VARCHAR2;
445
446 --=================================================
447 -- Function Implementations
448 --=================================================
449
450 --==================================================
451 -- IS_INCIDENT_ID_VALID - for Incident Id Validation
452 --==================================================
453 FUNCTION IS_INCIDENT_ID_VALID (p_incident_id IN NUMBER,
454 x_msg_data OUT NOCOPY VARCHAR2,
455 x_msg_count OUT NOCOPY NUMBER,
456 x_return_status OUT NOCOPY VARCHAR2
457 )
458 RETURN VARCHAR2
459 IS
460
461 Cursor c_incident IS
462 SELECT 'Y'
463 FROM cs_incidents_all
464 WHERE incident_id = p_incident_id;
465
466 lv_exists_flag VARCHAR2(1) := 'N';
467
468 l_prog_name CONSTANT VARCHAR2(61) := G_PKG_NAME||'.'||'is_incident_id_valid';
469
470 BEGIN
471
472 x_return_status := FND_API.G_RET_STS_SUCCESS;
473
474 OPEN c_incident;
475 FETCH c_incident INTO lv_exists_flag;
476 CLOSE c_incident;
477
478 RETURN lv_exists_flag;
479
480 EXCEPTION
481
482 WHEN OTHERS THEN
483
484 FND_MESSAGE.SET_NAME(G_APP_NAME, G_DB_ERROR);
485 FND_MESSAGE.SET_TOKEN(token => G_PROG_NAME_TOKEN, value => l_prog_name);
486 FND_MESSAGE.SET_TOKEN(token => G_SQLCODE_TOKEN, value => SQLCODE);
487 FND_MESSAGE.SET_TOKEN(token => G_SQLERRM_TOKEN, value => SQLERRM);
488 FND_MSG_PUB.add;
489
490 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
491 RETURN lv_exists_flag;
492
493 END IS_INCIDENT_ID_VALID;
494
495 --========================================================
496 -- IS_RETURN_RESON_VALID - For Return Reson Code Validation
497 --=========================================================
498
499 FUNCTION IS_RETURN_REASON_VALID(P_RETURN_REASON_CODE IN VARCHAR2,
500 X_MSG_DATA OUT NOCOPY VARCHAR2,
501 X_MSG_COUNT OUT NOCOPY NUMBER,
502 X_RETURN_STATUS OUT NOCOPY VARCHAR2)
503 RETURN VARCHAR2
504 IS
505
506 --Cursor to check return reason code
507
508 CURSOR c_return_reason_cur(p_return_reason_code varchar2) is
509 SELECT meaning from ar_lookups
510 WHERE lookup_type = 'CREDIT_MEMO_REASON'
511 and lookup_code = p_return_reason_code;
512
513 lv_exists_flag VARCHAR2(1) := 'N';
514
515 l_prog_name CONSTANT VARCHAR2(61) := G_PKG_NAME||'.'||'is_return_reason_valid';
516
517 BEGIN
518
519 x_return_status := FND_API.G_RET_STS_SUCCESS;
520
521 FOR v_return_reason_cur IN c_return_reason_cur(p_return_reason_code)
522 LOOP
523 lv_exists_flag := 'Y' ;
524 END LOOP ;
525 RETURN lv_exists_flag;
526
527 EXCEPTION
528
529 WHEN OTHERS THEN
530
531 FND_MESSAGE.SET_NAME(G_APP_NAME, G_DB_ERROR);
532 FND_MESSAGE.SET_TOKEN(token => G_PROG_NAME_TOKEN, value => l_prog_name);
533 FND_MESSAGE.SET_TOKEN(token => G_SQLCODE_TOKEN, value => SQLCODE);
534 FND_MESSAGE.SET_TOKEN(token => G_SQLERRM_TOKEN, value => SQLERRM);
535 FND_MSG_PUB.add;
536
537 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
538 RETURN lv_exists_flag;
539
540 END IS_RETURN_REASON_VALID;
541
542 --========================================================
543 --IS_CHARGE_LINE_TYPE_VALID - for Charge Line Type
544 --Validation
545 --========================================================
546 FUNCTION IS_CHARGE_LINE_TYPE_VALID(p_charge_line_type IN VARCHAR2,
547 x_msg_data OUT NOCOPY VARCHAR2,
548 x_msg_count OUT NOCOPY NUMBER,
549 x_return_status OUT NOCOPY VARCHAR2)
550 RETURN VARCHAR2
551 IS
552
553 --Cursor to check valid Incident Id
554
555 Cursor c_charge_line_type (p_charge_line_type IN VARCHAR2) IS
556 SELECT lookup_code
557 FROM fnd_lookup_values
558 WHERE lookup_type = 'CS_CHG_LINE_TYPE' AND
559 lookup_code = p_charge_line_type;
560
561 lv_exists_flag VARCHAR2(1) := 'N';
562
563 l_prog_name CONSTANT VARCHAR2(61) := G_PKG_NAME||'.'||'is_charge_line_type_valid';
564
565 BEGIN
566
567 x_return_status := FND_API.G_RET_STS_SUCCESS;
568
569 FOR v_charge_line_type IN c_charge_line_type(p_charge_line_type)
570 LOOP
571 lv_exists_flag := 'Y';
572 END LOOP ;
573 RETURN lv_exists_flag;
574
575 EXCEPTION
576
577 WHEN OTHERS THEN
578
579 FND_MESSAGE.SET_NAME(G_APP_NAME, G_DB_ERROR);
580 FND_MESSAGE.SET_TOKEN(token => G_PROG_NAME_TOKEN, value => l_prog_name);
581 FND_MESSAGE.SET_TOKEN(token => G_SQLCODE_TOKEN, value => SQLCODE);
582 FND_MESSAGE.SET_TOKEN(token => G_SQLERRM_TOKEN, value => SQLERRM);
583 FND_MSG_PUB.add;
584
585 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
586 RETURN lv_exists_flag;
587
588
589 END IS_CHARGE_LINE_TYPE_VALID;
590
591 --=========================================================
592 -- IS_BUSINESS_PROCESS_ID_VALID - for Business Process ID
593 -- Validation
594 --=========================================================
595 FUNCTION IS_BUSINESS_PROCESS_ID_VALID(p_business_process_id IN NUMBER,
596 x_msg_data OUT NOCOPY VARCHAR2,
597 x_msg_count OUT NOCOPY NUMBER,
598 x_return_status OUT NOCOPY VARCHAR2)
599 RETURN VARCHAR2
600 IS
601
602 --Cursor to check valid Incident Id
603
604 Cursor c_business_process_id (p_business_process_id IN NUMBER) IS
605
606 SELECT business_process_id
607 FROM cs_business_processes
608 WHERE business_process_id = p_business_process_id;
609
610 lv_exists_flag VARCHAR2(1) := 'N';
611
612 l_prog_name CONSTANT VARCHAR2(61) := G_PKG_NAME||'.'||'is_business_process_id_valid';
613
614 BEGIN
615
616 x_return_status := FND_API.G_RET_STS_SUCCESS;
617
618 FOR v_business_process_id IN c_business_process_id (p_business_process_id)
619 LOOP
620 lv_exists_flag := 'Y';
621 END LOOP ;
622 RETURN lv_exists_flag;
623
624 EXCEPTION
625
626 WHEN OTHERS THEN
627
628 FND_MESSAGE.SET_NAME(G_APP_NAME, G_DB_ERROR);
629 FND_MESSAGE.SET_TOKEN(token => G_PROG_NAME_TOKEN, value => l_prog_name);
630 FND_MESSAGE.SET_TOKEN(token => G_SQLCODE_TOKEN, value => SQLCODE);
631 FND_MESSAGE.SET_TOKEN(token => G_SQLERRM_TOKEN, value => SQLERRM);
632 FND_MSG_PUB.add;
633
634 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
635 RETURN lv_exists_flag;
636
637 END IS_BUSINESS_PROCESS_ID_VALID;
638
639 --===============================================================
640 -- IS_PARTY_VALID - for Bill_To_Party and Ship_to_Party Validation
641 --===============================================================
642
643 FUNCTION IS_PARTY_VALID(p_party_id IN NUMBER,
644 x_msg_data OUT NOCOPY VARCHAR2,
645 x_msg_count OUT NOCOPY NUMBER,
646 x_return_status OUT NOCOPY VARCHAR2) RETURN VARCHAR2 IS
647
648 lv_exists_flag VARCHAR2(1) := 'N';
649
650 CURSOR c_party IS
651 SELECT 'Y'
652 FROM hz_parties
653 WHERE party_id = p_party_id
654 AND nvl(status, 'A') = 'A';
655
656 l_prog_name CONSTANT VARCHAR2(61) := G_PKG_NAME||'.'||'is_party_valid';
657
658 BEGIN
659
660 x_return_status := FND_API.G_RET_STS_SUCCESS;
661
662 OPEN c_party;
663 FETCH c_party INTO lv_exists_flag;
664 CLOSE c_party;
665
666 RETURN lv_exists_flag;
667
668 EXCEPTION
669
670 WHEN OTHERS THEN
671
672 FND_MESSAGE.SET_NAME(G_APP_NAME, G_DB_ERROR);
673 FND_MESSAGE.SET_TOKEN(token => G_PROG_NAME_TOKEN, value => l_prog_name);
674 FND_MESSAGE.SET_TOKEN(token => G_SQLCODE_TOKEN, value => SQLCODE);
675 FND_MESSAGE.SET_TOKEN(token => G_SQLERRM_TOKEN, value => SQLERRM);
676 FND_MSG_PUB.add;
677
678 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
679 RETURN lv_exists_flag;
680
681 END IS_PARTY_VALID;
682
683
684
685 --===============================================================
686 -- IS_ACCOUNT_VALID - for Bill_to_Accout and Ship_
687 --===============================================================
688 FUNCTION IS_ACCOUNT_VALID(p_account_id IN NUMBER,
689 p_party_id IN NUMBER,
690 x_msg_data OUT NOCOPY VARCHAR2,
691 x_msg_count OUT NOCOPY NUMBER,
692 x_return_status OUT NOCOPY VARCHAR2)
693 RETURN VARCHAR2
694 IS
695
696 --Bug Fix for Bug # 2981195
697 --Added to the where
698 --Account_Activation_Date and Account_Termination_Date logic
699 --removed this from where clause Account_Activation_Date and Account_Termination_Date logic
700
701 --Cursor to check Account Id
702 CURSOR c_account(p_account_id in number,
703 p_party_id in number) IS
704 SELECT cust_account_id
705 FROM hz_cust_accounts
706 WHERE cust_account_id = p_account_id
707 AND party_id = p_party_id
708 AND nvl(status, 'A') = 'A';
709
710
711 lv_exists_flag VARCHAR2(1) := 'N';
712
713 l_prog_name CONSTANT VARCHAR2(61) := G_PKG_NAME||'.'||'is_account_valid';
714
715 BEGIN
716
717 x_return_status := FND_API.G_RET_STS_SUCCESS;
718
719 FOR v_account IN c_account(p_account_id,
720 p_party_id )
721 LOOP
722 lv_exists_flag := 'Y';
723 END LOOP ;
724 RETURN lv_exists_flag;
725
726 EXCEPTION
727
728 WHEN OTHERS THEN
729
730 FND_MESSAGE.SET_NAME(G_APP_NAME, G_DB_ERROR);
731 FND_MESSAGE.SET_TOKEN(token => G_PROG_NAME_TOKEN, value => l_prog_name);
732 FND_MESSAGE.SET_TOKEN(token => G_SQLCODE_TOKEN, value => SQLCODE);
733 FND_MESSAGE.SET_TOKEN(token => G_SQLERRM_TOKEN, value => SQLERRM);
734 FND_MSG_PUB.add;
735
736 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
737 RETURN lv_exists_flag;
738
739 END IS_ACCOUNT_VALID;
740
741 --===============================================================
742 -- IS_CONTACT_VALID - for Bill_to_Contact and Ship_to_Contact
743 -- BKANIMOZ 09-Jul-2012 Bug fix for 13063222 .Modified the query used in the
744 -- cursor c_contact_person so that it is less restrictive
745
746 --===============================================================
747 FUNCTION IS_CONTACT_VALID(p_contact_id IN NUMBER,
748 p_party_id IN NUMBER,
749 x_msg_data OUT NOCOPY VARCHAR2,
750 x_msg_count OUT NOCOPY NUMBER,
751 x_return_status OUT NOCOPY VARCHAR2)
752 RETURN VARCHAR2
753 IS
754
755 --Check the party_type for the given party
756
757 CURSOR c_party_type(p_party_id in number) IS
758 SELECT party_type
759 FROM hz_parties
760 WHERE party_id = p_party_id;
761
762 CURSOR c_contact_org(p_party_id in number,
763 p_contact_id in number) IS
764 SELECT rel.party_id
765 FROM hz_relationships party_rel,
766 hz_parties sub,
767 hz_parties rel,
768 ar_lookups ar,
769 ar_lookups relm,
770 hz_relationship_types typ,
771 hz_code_assignments asg
772 WHERE party_rel.object_id = p_party_id
773 AND party_rel.party_id = rel.party_id
774 AND rel.party_id = p_contact_id
775 AND party_rel.subject_id = sub.party_id
776 AND sub.party_type = 'PERSON'
777 AND sub.status = 'A'
778 AND ar.lookup_type(+) = 'CONTACT_TITLE'
779 AND sub.person_pre_name_adjunct = ar.lookup_code(+)
780 AND relm.lookup_type(+) = 'PARTY_RELATIONS_TYPE'
781 AND party_rel.relationship_code = relm.lookup_code(+)
782 AND nvl(party_rel.start_date, sysdate-1) < sysdate
783 AND nvl(party_rel.end_date , sysdate+1) > sysdate
784 AND party_rel.status = 'A'
785 AND asg.owner_table_name = 'HZ_RELATIONSHIP_TYPES'
786 AND asg.owner_table_id = typ.relationship_type_id
787 AND asg.class_category = 'RELATIONSHIP_TYPE_GROUP'
788 AND asg.class_code = 'PARTY_REL_GRP_CONTACTS'
789 AND typ.relationship_type = party_rel.relationship_type
790 AND party_rel.subject_type = 'PERSON'
791 AND party_rel.subject_table_name = 'HZ_PARTIES'
792 AND party_rel.object_type = 'ORGANIZATION'
793 AND party_rel.object_table_name = 'HZ_PARTIES'
794 AND party_rel.relationship_code = typ.forward_rel_code;
795
796
797 CURSOR c_contact_person(p_party_id number,p_contact_id number) IS
798 SELECT sub.party_id
799 FROM Hz_Parties sub,
800 Hz_Relationships r
801 WHERE r.object_id = p_party_id
802 AND r.party_id = p_contact_id
803 AND sub.status = 'A'
804 AND r.status = 'A'
805 AND r.subject_id = sub.party_id
806 AND sub.party_type = 'PERSON'
807 AND NVL(r.start_date, SYSDATE-1) < SYSDATE
808 AND NVL(r.end_date, SYSDATE+1) > SYSDATE;
809
810
811 /*CURSOR c_contact_person(p_party_id number,p_contact_id number) IS
812 SELECT rel.party_id
813 FROM hz_relationships party_rel,
814 hz_parties sub,
815 hz_parties rel,
816 ar_lookups ar,
817 ar_lookups relm,
818 hz_relationship_types typ,
819 hz_code_assignments asg
820 WHERE party_rel.object_id = p_party_id
821 AND party_rel.party_id = rel.party_id
822 AND rel.party_id = p_contact_id
823 AND party_rel.subject_id = sub.party_id
824 AND sub.party_type = 'PERSON'
825 AND ar.lookup_type(+) = 'CONTACT_TITLE'
826 AND sub.person_pre_name_adjunct = ar.lookup_code(+)
827 AND relm.lookup_type(+) = 'PARTY_RELATIONS_TYPE'
828 AND party_rel.relationship_code = relm.lookup_code(+)
829 AND nvl(party_rel.start_date, sysdate-1) < sysdate
830 AND nvl(party_rel.end_date , sysdate+1) > sysdate
831 AND party_rel.status = 'A'
832 AND asg.owner_table_name = 'HZ_RELATIONSHIP_TYPES'
833 AND asg.owner_table_id = typ.relationship_type_id
834 AND asg.class_category = 'RELATIONSHIP_TYPE_GROUP'
835 AND asg.class_code = 'PARTY_REL_GRP_CONTACTS'
836 AND typ.relationship_type = party_rel.relationship_type
837 AND party_rel.subject_type = 'PERSON'
838 AND party_rel.subject_table_name = 'HZ_PARTIES'
839 AND party_rel.object_type = 'PERSON' -- added for bug # 4744186
840 AND party_rel.object_table_name = 'HZ_PARTIES'
841 AND party_rel.relationship_code = typ.forward_rel_code;
842 */
843 lv_exists_flag VARCHAR2(1) := 'N';
844 lv_party_type VARCHAR2(30);
845 lv_type_found VARCHAR2(1) := 'N';
846
847 l_prog_name CONSTANT VARCHAR2(61) := G_PKG_NAME||'.'||'is_contact_valid';
848
849 BEGIN
850
851 x_return_status := FND_API.G_RET_STS_SUCCESS;
852
853 FOR v_party_type IN c_party_type(p_party_id)
854 LOOP
855 lv_type_found := 'Y';
856 lv_party_type := v_party_type.party_type;
857 END LOOP ;
858
859 IF lv_type_found = 'Y' THEN
860 IF lv_party_type = 'ORGANIZATION' THEN
861 FOR v_contact_org IN c_contact_org(p_party_id , p_contact_id)LOOP
862 lv_exists_flag := 'Y';
863 END LOOP;
864 ELSE
865 IF lv_party_type = 'PERSON'
866 THEN
867 /* Start : 4744186 */
868 IF p_party_id = p_contact_id
869 THEN
870 /*If Bill to/ship to Party id is same as Bill to/ship to contact id and Bill to/ship to
871 party type is PERSON, there will not be any relationship*/
872 lv_exists_flag := 'Y';
873 ELSE
874 /* End : 4744186 */
875 FOR v_contact_person IN c_contact_person(p_party_id, p_contact_id)
876 LOOP
877 lv_exists_flag := 'Y';
878 END LOOP;
879 END IF;
880 END IF;
881 END IF;
882 ELSE
883 --lv_type_found = 'N'
884 lv_exists_flag := 'N';
885 END IF;
886
887 RETURN lv_exists_flag;
888
889 EXCEPTION
890
891 WHEN OTHERS THEN
892
893 FND_MESSAGE.SET_NAME(G_APP_NAME, G_DB_ERROR);
894 FND_MESSAGE.SET_TOKEN(token => G_PROG_NAME_TOKEN, value => l_prog_name);
895 FND_MESSAGE.SET_TOKEN(token => G_SQLCODE_TOKEN, value => SQLCODE);
896 FND_MESSAGE.SET_TOKEN(token => G_SQLERRM_TOKEN, value => SQLERRM);
897 FND_MSG_PUB.add;
898
899 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
900 RETURN lv_exists_flag;
901
902 END IS_CONTACT_VALID;
903
904
905 --===============================================================
906 -- IS_PARTY_SITE - for Bill_to_Accout and Ship_
907 --===============================================================
908 FUNCTION IS_PARTY_SITE_VALID(p_party_site_id IN NUMBER,
909 p_party_id IN NUMBER,
910 p_val_mode IN VARCHAR2,
911 x_msg_data OUT NOCOPY VARCHAR2,
912 x_msg_count OUT NOCOPY NUMBER,
913 x_return_status OUT NOCOPY VARCHAR2)
914 RETURN VARCHAR2
915 IS
916
917 -- Cursor to check Bill To Party Site Id
918
919 Cursor c_bill_to_party_site(p_party_site_id IN NUMBER,
920 p_party_id IN NUMBER) IS
921 SELECT site.party_site_id
922 FROM HZ_PARTY_SITES site,
923 HZ_PARTY_SITE_USES site_use,
924 HZ_PARTIES party
925 WHERE site.party_site_id = p_party_site_id
926 AND site.party_id = p_party_id
927 AND site.party_id = party.party_id
928 AND site.party_site_id = site_use.party_site_id
929 AND nvl(site.status, 'A') = 'A'
930 AND site_use.site_use_type = 'BILL_TO';
931
932 --Cursor to check Ship To Party Site Id
933
934 Cursor c_ship_to_party_site(p_party_site_id IN NUMBER,
935 p_party_id IN NUMBER) IS
936 SELECT site.party_site_id
937 FROM HZ_PARTY_SITES site,
938 HZ_PARTY_SITE_USES site_use,
939 HZ_PARTIES party
940 WHERE site.party_site_id = p_party_site_id
941 AND site.party_id = p_party_id
942 AND site.party_id = party.party_id
943 AND site.party_site_id = site_use.party_site_id
944 AND nvl(site.status, 'A') = 'A'
945 AND site_use.site_use_type = 'SHIP_TO';
946
947 Cursor c_party_site(p_party_site_id IN NUMBER,
948 p_party_id IN NUMBER) IS
949
950 SELECT site.party_site_id
951 FROM HZ_PARTY_SITES site,
952 HZ_PARTIES party
953 WHERE site.party_site_id = p_party_site_id
954 AND site.party_id = p_party_id
955 AND site.party_id = party.party_id
956 AND nvl(site.status, 'A') = 'A';
957
958 lv_exists_flag VARCHAR2(1) := 'N';
959
960 l_prog_name CONSTANT VARCHAR2(61) := G_PKG_NAME||'.'||'is_party_site_valid';
961
962 BEGIN
963
964 x_return_status := FND_API.G_RET_STS_SUCCESS;
965
966 IF p_val_mode = 'BILL_TO' THEN
967 FOR v_bill_to_party_site IN c_bill_to_party_site(p_party_site_id,
968 p_party_id)
969 LOOP
970 lv_exists_flag := 'Y';
971 END LOOP ;
972 ELSIF p_val_mode = 'SHIP_TO' THEN
973 FOR v_ship_to_party_site IN c_ship_to_party_site(p_party_site_id,
974 p_party_id)
975 LOOP
976 lv_exists_flag := 'Y';
977 END LOOP ;
978
979 ELSE
980 -- the p_val_mode = 'NONE'
981 FOR v_party_site IN c_party_site(p_party_site_id,
982 p_party_id)
983 LOOP
984 lv_exists_flag := 'Y';
985 END LOOP;
986
987 END IF;
988 RETURN lv_exists_flag;
989
990 EXCEPTION
991
992 WHEN OTHERS THEN
993
994 FND_MESSAGE.SET_NAME(G_APP_NAME, G_DB_ERROR);
995 FND_MESSAGE.SET_TOKEN(token => G_PROG_NAME_TOKEN, value => l_prog_name);
996 FND_MESSAGE.SET_TOKEN(token => G_SQLCODE_TOKEN, value => SQLCODE);
997 FND_MESSAGE.SET_TOKEN(token => G_SQLERRM_TOKEN, value => SQLERRM);
998 FND_MSG_PUB.add;
999
1000 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1001 RETURN lv_exists_flag;
1002
1003 END IS_PARTY_SITE_VALID;
1004
1005 --======================================================
1006 -- IS_CONTRACT_LINE VALID - for Contract Line Validation
1007 --======================================================
1008
1009 FUNCTION IS_CONTRACT_LINE_VALID(
1010 p_contract_line_id IN NUMBER,
1011 x_contract_id OUT NOCOPY NUMBER,
1012 x_msg_data OUT NOCOPY VARCHAR2,
1013 x_msg_count OUT NOCOPY NUMBER,
1014 x_return_status OUT NOCOPY VARCHAR2)
1015 RETURN VARCHAR2
1016 IS
1017
1018 Cursor c_check_contract_line IS
1019 select id, chr_id
1020 from okc_k_lines_b
1021 where id = p_contract_line_id;
1022
1023 l_contract_line_id NUMBER;
1024 l_exists_flag VARCHAR2(1);
1025
1026 l_prog_name CONSTANT VARCHAR2(61) := G_PKG_NAME||'.'||'is_contract_line_valid';
1027
1028
1029 BEGIN
1030 OPEN c_check_contract_line;
1031 FETCH c_check_contract_line INTO l_contract_line_id, x_contract_id;
1032 CLOSE c_check_contract_line;
1033
1034 IF l_contract_line_id IS NOT NULL THEN
1035 l_exists_flag := 'Y';
1036 ELSE
1037 l_exists_flag := 'N';
1038 END IF;
1039
1040 RETURN l_exists_flag;
1041
1042 EXCEPTION
1043
1044 WHEN OTHERS THEN
1045
1046 FND_MESSAGE.SET_NAME(G_APP_NAME, G_DB_ERROR);
1047 FND_MESSAGE.SET_TOKEN(token => G_PROG_NAME_TOKEN, value => l_prog_name);
1048 FND_MESSAGE.SET_TOKEN(token => G_SQLCODE_TOKEN, value => SQLCODE);
1049 FND_MESSAGE.SET_TOKEN(token => G_SQLERRM_TOKEN, value => SQLERRM);
1050 FND_MSG_PUB.add;
1051
1052 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1053 RETURN l_exists_flag;
1054
1055
1056 END;
1057
1058 --======================================================
1059 -- IS_CONTRACT_VALID - for Contract Validation
1060 --======================================================
1061
1062 -- Changed for R12 By mviswana
1063 FUNCTION IS_CONTRACT_VALID(
1064 p_contract_id IN NUMBER,
1065 x_msg_data OUT NOCOPY VARCHAR2,
1066 x_msg_count OUT NOCOPY NUMBER,
1067 x_return_status OUT NOCOPY VARCHAR2)
1068 RETURN VARCHAR2
1069 IS
1070
1071 --Commented this code AND PTY.OBJECT1_ID1 = p_customer_id
1072 --to resolve bug 3254006
1073
1074 Cursor c_contract_check IS
1075 SELECT 'x'
1076 FROM OKC_K_HEADERS_ALL_B HDR
1077 --OKC_K_PARTY_ROLES_B PTY
1078 WHERE
1079 HDR.START_DATE IS NOT NULL AND
1080 HDR.END_DATE IS NOT NULL AND
1081 HDR.TEMPLATE_YN='N' AND
1082 -- HDR.ID=PTY.CHR_ID AND
1083 -- PTY.JTOT_OBJECT1_CODE='OKX_PARTY' AND
1084 HDR.ID = p_contract_id;
1085
1086 -- Commented to Fix Bug # 3554509
1087
1088 --AND
1089 --p_request_date between nvl(hdr.start_date,p_request_date) and
1090 --nvl(hdr.end_date,p_request_date);
1091 --AND PTY.OBJECT1_ID1 = p_customer_id ;
1092
1093
1094
1095 lv_exists_flag VARCHAR2(1) := 'N';
1096 lv_check_flag VARCHAR2(1) := 'N';
1097
1098
1099 l_prog_name CONSTANT VARCHAR2(61) := G_PKG_NAME||'.'||'is_contract_valid';
1100
1101 BEGIN
1102
1103 x_return_status := FND_API.G_RET_STS_SUCCESS;
1104
1105
1106 FOR v_contract_check in c_contract_check LOOP
1107 lv_check_flag := 'Y';
1108 ------DBMS_OUTPUT.PUT_LINE('Found contract');
1109
1110 END LOOP;
1111
1112 IF lv_check_flag = 'Y' THEN
1113 lv_exists_flag := 'Y';
1114 ELSE
1115 lv_exists_flag := 'N';
1116 END IF;
1117
1118
1119 RETURN lv_exists_flag;
1120
1121 EXCEPTION
1122
1123 WHEN OTHERS THEN
1124
1125 FND_MESSAGE.SET_NAME(G_APP_NAME, G_DB_ERROR);
1126 FND_MESSAGE.SET_TOKEN(token => G_PROG_NAME_TOKEN, value => l_prog_name);
1127 FND_MESSAGE.SET_TOKEN(token => G_SQLCODE_TOKEN, value => SQLCODE);
1128 FND_MESSAGE.SET_TOKEN(token => G_SQLERRM_TOKEN, value => SQLERRM);
1129 FND_MSG_PUB.add;
1130
1131 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1132 RETURN lv_exists_flag;
1133
1134 END;
1135
1136 --==============================================================
1137 -- FUNCTION GET_CONTRACT_LINE_ID
1138 --==============================================================
1139
1140 FUNCTION GET_CONTRACT_LINE_ID(
1141 p_coverage_id IN NUMBER,
1142 x_msg_data OUT NOCOPY VARCHAR2,
1143 x_msg_count OUT NOCOPY NUMBER,
1144 x_return_status OUT NOCOPY VARCHAR2) RETURN NUMBER IS
1145
1146 CURSOR c_k_line IS
1147 SELECT cle_id
1148 FROM okc_k_lines_b
1149 WHERE id = p_coverage_id;
1150
1151 lv_temp NUMBER := 0;
1152
1153 l_prog_name CONSTANT VARCHAR2(61) := G_PKG_NAME||'.'||'get_contract_line_id';
1154
1155 BEGIN
1156
1157 x_return_status := FND_API.G_RET_STS_SUCCESS;
1158
1159 OPEN c_k_line;
1160 FETCH c_k_line INTO lv_temp;
1161 CLOSE c_k_line;
1162
1163 RETURN lv_temp;
1164
1165 EXCEPTION
1166
1167 WHEN OTHERS THEN
1168
1169 FND_MESSAGE.SET_NAME(G_APP_NAME, G_DB_ERROR);
1170 FND_MESSAGE.SET_TOKEN(token => G_PROG_NAME_TOKEN, value => l_prog_name);
1171 FND_MESSAGE.SET_TOKEN(token => G_SQLCODE_TOKEN, value => SQLCODE);
1172 FND_MESSAGE.SET_TOKEN(token => G_SQLERRM_TOKEN, value => SQLERRM);
1173 FND_MSG_PUB.add;
1174
1175 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1176 RETURN lv_temp;
1177
1178 END GET_CONTRACT_LINE_ID;
1179
1180 --========================================================
1181 -- IS_UOM_VALID - For Uom Validation
1182 --========================================================
1183 FUNCTION IS_UOM_VALID(p_uom_code IN VARCHAR2,
1184 p_inv_id IN NUMBER,
1185 x_msg_data OUT NOCOPY VARCHAR2,
1186 x_msg_count OUT NOCOPY NUMBER,
1187 x_return_status OUT NOCOPY VARCHAR2)
1188 RETURN VARCHAR2
1189 IS
1190
1191
1192 Cursor c_uom_code(p_uom_code IN VARCHAR2,
1193 p_inv_id IN NUMBER) IS
1194 SELECT uom_code
1195 FROM MTL_ITEM_UOMS_VIEW
1196 WHERE uom_code = p_uom_code AND
1197 inventory_item_id = P_INV_ID AND
1198 organization_id = cs_std.get_item_valdn_orgzn_id ;
1199
1200 lv_exists_flag VARCHAR2(1) := 'N';
1201
1202 l_prog_name CONSTANT VARCHAR2(61) := G_PKG_NAME||'.'||'is_uom_valid';
1203
1204 BEGIN
1205
1206 x_return_status := FND_API.G_RET_STS_SUCCESS;
1207
1208 FOR v_uom_code IN c_uom_code(p_uom_code,
1209 p_inv_id) LOOP
1210 lv_exists_flag := 'Y';
1211 END LOOP;
1212 RETURN lv_exists_flag;
1213
1214 EXCEPTION
1215
1216 WHEN OTHERS THEN
1217
1218 FND_MESSAGE.SET_NAME(G_APP_NAME, G_DB_ERROR);
1219 FND_MESSAGE.SET_TOKEN(token => G_PROG_NAME_TOKEN, value => l_prog_name);
1220 FND_MESSAGE.SET_TOKEN(token => G_SQLCODE_TOKEN, value => SQLCODE);
1221 FND_MESSAGE.SET_TOKEN(token => G_SQLERRM_TOKEN, value => SQLERRM);
1222 FND_MSG_PUB.add;
1223
1224 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1225 RETURN lv_exists_flag;
1226 END;
1227
1228 --=========================================================
1229 -- IS_INSTANCE_FOR_INVENTORY
1230 --=========================================================
1231 FUNCTION IS_INSTANCE_FOR_INVENTORY(p_instance_id IN NUMBER,
1232 p_inv_id IN NUMBER,
1233 x_msg_data OUT NOCOPY VARCHAR2,
1234 x_msg_count OUT NOCOPY NUMBER,
1235 x_return_status OUT NOCOPY VARCHAR2)
1236 RETURN VARCHAR2
1237 IS
1238
1239 --Cursor to check valid instnace_id*
1240
1241 Cursor c_instance(p_instance_id IN NUMBER,
1242 p_inv_id IN NUMBER) IS
1243 SELECT instance_id
1244 FROM csi_item_instances
1245 WHERE instance_id = p_instance_id
1246 AND inventory_item_id = p_inv_id;
1247 --AND INV_MASTER_ORGANIZATION_ID = cs_std.get_item_valdn_orgzn_id;
1248
1249 lv_exists_flag VARCHAR2(1) := 'N';
1250
1251 l_prog_name CONSTANT VARCHAR2(61) := G_PKG_NAME||'.'||'is_instance_for_inventory';
1252
1253 BEGIN
1254
1255 x_return_status := FND_API.G_RET_STS_SUCCESS;
1256
1257 FOR v_instance IN c_instance(p_instance_id,
1258 p_inv_id) LOOP
1259 lv_exists_flag := 'Y';
1260
1261 END LOOP;
1262
1263 RETURN lv_exists_flag;
1264
1265 EXCEPTION
1266
1267 WHEN OTHERS THEN
1268
1269 FND_MESSAGE.SET_NAME(G_APP_NAME, G_DB_ERROR);
1270 FND_MESSAGE.SET_TOKEN(token => G_PROG_NAME_TOKEN, value => l_prog_name);
1271 FND_MESSAGE.SET_TOKEN(token => G_SQLCODE_TOKEN, value => SQLCODE);
1272 FND_MESSAGE.SET_TOKEN(token => G_SQLERRM_TOKEN, value => SQLERRM);
1273 FND_MSG_PUB.add;
1274
1275 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1276 RETURN lv_exists_flag;
1277 END;
1278
1279 --=========================================================
1280 -- IS_INSTANCE_VALID
1281 -- SSHILPAM Bug 8552188: Should be able to validate the
1282 -- instance against related parties also.
1283 --=========================================================
1284 FUNCTION IS_INSTANCE_VALID(p_instance_id IN NUMBER,
1285 p_party_id IN NUMBER,
1286 x_msg_data OUT NOCOPY VARCHAR2,
1287 x_msg_count OUT NOCOPY NUMBER,
1288 x_return_status OUT NOCOPY VARCHAR2)
1289 RETURN VARCHAR2
1290 IS
1291
1292 CURSOR c_instance IS
1293 SELECT 'Y'
1294 FROM CSI_ITEM_INSTANCES cp,
1295 MTL_SYSTEM_ITEMS_KFV ITEMS
1296 WHERE cp.instance_id = p_instance_id AND
1297 CP.OWNER_PARTY_SOURCE_TABLE = 'HZ_PARTIES' AND
1298 -- cp.owner_party_id = p_party_id AND Commented for bug 8552188
1299 ITEMS.INVENTORY_ITEM_ID = CP.INVENTORY_ITEM_ID AND
1300 ITEMS.ORGANIZATION_ID = cs_std.get_item_valdn_orgzn_id AND
1301 exists (select 'x'
1302 from csi_i_parties cip
1303 where cip.party_id = p_party_id
1304 and cip.instance_id = cp.instance_id
1305 and cip.party_source_table = 'HZ_PARTIES')AND
1306 (
1307 (fnd_profile.value('CS_SR_RESTRICT_IB') = 'YES'
1308 and CP.LOCATION_TYPE_CODE IN('HZ_PARTY_SITES','HZ_LOCATIONS'))
1309 or (fnd_profile.value('CS_SR_RESTRICT_IB') <> 'YES'));
1310
1311 lv_exists_flag VARCHAR2(1) := 'N';
1312
1313 l_prog_name CONSTANT VARCHAR2(61) := G_PKG_NAME||'.'||'is_instance_valid';
1314
1315 BEGIN
1316
1317 x_return_status := FND_API.G_RET_STS_SUCCESS;
1318
1319 OPEN c_instance;
1320 FETCH c_instance INTO lv_exists_flag;
1321 CLOSE c_instance;
1322
1323 RETURN lv_exists_flag;
1324
1325 EXCEPTION
1326
1327 WHEN OTHERS THEN
1328
1329 FND_MESSAGE.SET_NAME(G_APP_NAME, G_DB_ERROR);
1330 FND_MESSAGE.SET_TOKEN(token => G_PROG_NAME_TOKEN, value => l_prog_name);
1331 FND_MESSAGE.SET_TOKEN(token => G_SQLCODE_TOKEN, value => SQLCODE);
1332 FND_MESSAGE.SET_TOKEN(token => G_SQLERRM_TOKEN, value => SQLERRM);
1333 FND_MSG_PUB.add;
1334
1335 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1336 RETURN lv_exists_flag;
1337 END;
1338
1339 --==========================================================
1340 --IS_INSTANCE_SERIAL_VALID
1341 --==========================================================
1342
1343 FUNCTION IS_INSTANCE_SERIAL_VALID( p_instance_id IN NUMBER
1344 ,p_serial_number IN VARCHAR
1345 ,x_msg_data OUT NOCOPY VARCHAR2
1346 ,x_msg_count OUT NOCOPY NUMBER
1347 ,x_return_status OUT NOCOPY VARCHAR2)
1348
1349 RETURN VARCHAR2
1350 IS
1351
1352 Cursor c_instance_serial_number IS
1353 SELECT 'Y'
1354 FROM csi_item_instances
1355 WHERE instance_id = p_instance_id
1356 AND serial_number = p_serial_number;
1357
1358 lv_exists_flag VARCHAR2(1) := 'N';
1359 l_prog_name CONSTANT VARCHAR2(61) := G_PKG_NAME||'.'||'is_instance_serial_number_valid';
1360
1361 BEGIN
1362
1363 x_return_status := FND_API.G_RET_STS_SUCCESS;
1364
1365 --DBMS_OUTPUT.PUT_LINE('In IS_INSTANCE_SERIAL_VALID ');
1366
1367 OPEN c_instance_serial_number;
1368 FETCH c_instance_serial_number INTO lv_exists_flag;
1369 CLOSE c_instance_serial_number;
1370
1371 --DBMS_OUTPUT.PUT_LINE('lv_exists_flag');
1372
1373 RETURN lv_exists_flag;
1374
1375 EXCEPTION
1376
1377 WHEN OTHERS THEN
1378 --DBMS_OUTPUT.PUT_LINE('MAYA');
1379
1380 FND_MESSAGE.SET_NAME(G_APP_NAME, G_DB_ERROR);
1381 FND_MESSAGE.SET_TOKEN(token => G_PROG_NAME_TOKEN, value => l_prog_name);
1382 FND_MESSAGE.SET_TOKEN(token => G_SQLCODE_TOKEN, value => SQLCODE);
1383 FND_MESSAGE.SET_TOKEN(token => G_SQLERRM_TOKEN, value => SQLERRM);
1384 FND_MSG_PUB.add;
1385
1386 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1387 RETURN lv_exists_flag;
1388
1389 END IS_INSTANCE_SERIAL_VALID ;
1390
1391 --==========================================================
1392 --IS_PRICE_LIST_VALID
1393 --=========================================================
1394 FUNCTION IS_PRICE_LIST_VALID(p_price_list_id IN NUMBER,
1395 x_msg_data OUT NOCOPY VARCHAR2,
1396 x_msg_count OUT NOCOPY NUMBER,
1397 x_return_status OUT NOCOPY VARCHAR2
1398 )
1399 RETURN VARCHAR2
1400 IS
1401
1402 Cursor c_price_list(p_price_list_id IN NUMBER) IS
1403 SELECT list_header_id
1404 FROM QP_LIST_HEADERS_B
1405 WHERE list_type_code in ('PRL','AGR')
1406 AND list_header_id = p_price_list_id
1407 AND sysdate between nvl(start_date_active,sysdate) and
1408 nvl(end_date_active,sysdate);
1409
1410 lv_exists_flag VARCHAR2(1) := 'N';
1411
1412 l_prog_name CONSTANT VARCHAR2(61) := G_PKG_NAME||'.'||'is_price_list_valid';
1413
1414 BEGIN
1415
1416 x_return_status := FND_API.G_RET_STS_SUCCESS;
1417
1418 FOR v_price_list in c_price_list(p_price_list_id) LOOP
1419 lv_exists_flag := 'Y';
1420 END LOOP;
1421
1422 RETURN lv_exists_flag;
1423
1424 EXCEPTION
1425
1426 WHEN OTHERS THEN
1427
1428 FND_MESSAGE.SET_NAME(G_APP_NAME, G_DB_ERROR);
1429 FND_MESSAGE.SET_TOKEN(token => G_PROG_NAME_TOKEN, value => l_prog_name);
1430 FND_MESSAGE.SET_TOKEN(token => G_SQLCODE_TOKEN, value => SQLCODE);
1431 FND_MESSAGE.SET_TOKEN(token => G_SQLERRM_TOKEN, value => SQLERRM);
1432 FND_MSG_PUB.add;
1433
1434 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1435 RETURN lv_exists_flag;
1436 END;
1437
1438 --=========================================================
1439 --IS_TXN_INV_ORG_VALID - for transaction inv org validation
1440 --=========================================================
1441
1442 FUNCTION IS_TXN_INV_ORG_VALID(p_txn_inv_org IN NUMBER,
1443 p_inv_id IN NUMBER,
1444 x_msg_data OUT NOCOPY VARCHAR2,
1445 x_msg_count OUT NOCOPY NUMBER,
1446 x_return_status OUT NOCOPY VARCHAR2)
1447 RETURN VARCHAR2
1448 IS
1449 --Bug Fix for 9371992
1450 --Replaced cursor c_oper_unit_for_inv_org with c_inv_org_for_item
1451
1452 /*CURSOR c_oper_unit_for_inv_org (p_txn_inv_org number) IS
1453 SELECT
1454 TO_NUMBER(hoi2.org_information3) OPERATING_UNIT
1455 FROM
1456 hr_organization_units hou,
1457 hr_organization_information hoi1,
1458 hr_organization_information hoi2,
1459 mtl_parameters mp
1460 WHERE
1461 mp.organization_id = p_txn_inv_org
1462 AND mp.organization_id = hou.organization_id
1463 AND hou.organization_id = hoi1.organization_id
1464 AND hoi1.org_information1 = 'INV'
1465 AND hoi1.org_information2 = 'Y'
1466 AND hoi1.org_information_context = 'CLASS'
1467 AND hou.organization_id = hoi2.organization_id
1468 AND hoi2.org_information_context = 'Accounting Information' ;*/
1469 CURSOR c_inv_org_for_item (p_inv_id number) IS
1470 SELECT hou.organization_id inv_org_id
1471 FROM hr_organization_units hou,
1472 hr_organization_information hoi1,
1473 mtl_parameters mp,
1474 mtl_system_items_b msi
1475 WHERE
1476 hou.organization_id = msi.organization_id
1477 AND hou.organization_id = hoi1.organization_id
1478 AND hoi1.org_information1 = 'INV'
1479 AND hoi1.org_information2 = 'Y'
1480 AND msi.organization_id = mp.organization_id
1481 AND to_date(sysdate) between hou.date_from and nvl(hou.date_to,to_date(sysdate))
1482 AND msi.inventory_item_id = p_inv_id;
1483
1484 lv_exists_flag VARCHAR2(1) := 'N';
1485
1486 l_prog_name CONSTANT VARCHAR2(61) := G_PKG_NAME||'.'||'is_txn_inv_org_valid';
1487
1488 BEGIN
1489
1490 x_return_status := FND_API.G_RET_STS_SUCCESS;
1491
1492 FOR v_inv_org_for_item IN c_inv_org_for_item (p_inv_id) LOOP
1493
1494 IF v_inv_org_for_item.inv_org_id = p_txn_inv_org THEN
1495 lv_exists_flag := 'Y';
1496 EXIT;
1497 END IF;
1498 END LOOP;
1499
1500 RETURN lv_exists_flag;
1501
1502 EXCEPTION
1503
1504 WHEN OTHERS THEN
1505
1506 FND_MESSAGE.SET_NAME(G_APP_NAME, G_DB_ERROR);
1507 FND_MESSAGE.SET_TOKEN(token => G_PROG_NAME_TOKEN, value => l_prog_name);
1508 FND_MESSAGE.SET_TOKEN(token => G_SQLCODE_TOKEN, value => SQLCODE);
1509 FND_MESSAGE.SET_TOKEN(token => G_SQLERRM_TOKEN, value => SQLERRM);
1510 FND_MSG_PUB.add;
1511
1512 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1513 RETURN lv_exists_flag;
1514
1515 END;
1516
1517 -- 12.1.3 Charges Logistics Project
1518 --=========================================================
1519 --IS_PARENT_INSTANCE_VALID - for Parent Instance Id Validation
1520 --=========================================================
1521
1522 FUNCTION IS_PARENT_INSTANCE_VALID(p_cust_prod_id IN NUMBER,
1523 p_parent_inst_id IN NUMBER,
1524 x_msg_data OUT NOCOPY VARCHAR2,
1525 x_msg_count OUT NOCOPY NUMBER,
1526 x_return_status OUT NOCOPY VARCHAR2)
1527 RETURN VARCHAR2 IS
1528
1529 Cursor get_parent_instance(p_customer_product_id Number, p_parent_instance_id Number) is
1530 SELECT 'Y'
1531 FROM csi_ii_relationships
1532 WHERE subject_id = p_customer_product_id
1533 and object_id = p_parent_instance_id;
1534
1535 lv_exists_flag VARCHAR2(1) := 'N';
1536 l_prog_name CONSTANT VARCHAR2(61) := G_PKG_NAME||'.'||'is_parent_instance_valid';
1537
1538 BEGIN
1539
1540 x_return_status := FND_API.G_RET_STS_SUCCESS;
1541
1542 FOR i IN get_parent_instance(p_cust_prod_id, p_parent_inst_id) LOOP
1543 lv_exists_flag := 'Y';
1544 EXIT;
1545 END LOOP;
1546
1547 RETURN lv_exists_flag;
1548
1549 EXCEPTION
1550
1551 WHEN OTHERS THEN
1552
1553 FND_MESSAGE.SET_NAME(G_APP_NAME, G_DB_ERROR);
1554 FND_MESSAGE.SET_TOKEN(token => G_PROG_NAME_TOKEN, value => l_prog_name);
1555 FND_MESSAGE.SET_TOKEN(token => G_SQLCODE_TOKEN, value => SQLCODE);
1556 FND_MESSAGE.SET_TOKEN(token => G_SQLERRM_TOKEN, value => SQLERRM);
1557 FND_MSG_PUB.add;
1558
1559 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1560 RETURN lv_exists_flag;
1561 END;
1562
1563 --------------------------------------------------------------------------------
1564 -- FUNCTION IS_ESTIMATE_DETAIL_ID_VALID
1565 --------------------------------------------------------------------------------
1566 FUNCTION IS_ESTIMATE_DETAIL_ID_VALID (p_estimate_detail_id IN NUMBER,
1567 x_msg_data OUT NOCOPY VARCHAR2,
1568 x_msg_count OUT NOCOPY NUMBER,
1569 x_return_status OUT NOCOPY VARCHAR2) RETURN VARCHAR2 IS
1570
1571 Cursor c_estimate_detail_id IS
1572 SELECT 1
1573 FROM CS_ESTIMATE_DETAILS
1574 WHERE estimate_detail_id = p_estimate_detail_id;
1575
1576 lv_exists_flag VARCHAR2(1) := 'N';
1577
1578 l_prog_name CONSTANT VARCHAR2(61) := G_PKG_NAME||'.'||'is_estimate_detail_id_valid';
1579
1580 BEGIN
1581
1582 x_return_status := FND_API.G_RET_STS_SUCCESS;
1583
1584 FOR v_estimate_detail_id IN c_estimate_detail_id LOOP
1585 lv_exists_flag := 'Y';
1586 END LOOP;
1587
1588 RETURN lv_exists_flag;
1589
1590 EXCEPTION
1591
1592 WHEN OTHERS THEN
1593
1594 FND_MESSAGE.SET_NAME(G_APP_NAME, G_DB_ERROR);
1595 FND_MESSAGE.SET_TOKEN(token => G_PROG_NAME_TOKEN, value => l_prog_name);
1596 FND_MESSAGE.SET_TOKEN(token => G_SQLCODE_TOKEN, value => SQLCODE);
1597 FND_MESSAGE.SET_TOKEN(token => G_SQLERRM_TOKEN, value => SQLERRM);
1598 FND_MSG_PUB.add;
1599
1600 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1601 RETURN lv_exists_flag;
1602
1603 END IS_ESTIMATE_DETAIL_ID_VALID;
1604
1605 --------------------------------------------------------------------------------
1606 -- FUNCTION IS_ITEM_REVISION_VALID
1607 --------------------------------------------------------------------------------
1608 FUNCTION IS_ITEM_REVISION_VALID (p_inventory_item_id IN NUMBER,
1609 p_item_revision IN VARCHAR2,
1610 x_msg_data OUT NOCOPY VARCHAR2,
1611 x_msg_count OUT NOCOPY NUMBER,
1612 x_return_status OUT NOCOPY VARCHAR2) RETURN VARCHAR2 IS
1613
1614 Cursor c_item_revision IS
1615 SELECT 1
1616 FROM MTL_ITEM_REVISIONS
1617 WHERE inventory_item_id = p_inventory_item_id and
1618 revision = p_item_revision and
1619 organization_id = cs_std.get_item_valdn_orgzn_id ;
1620
1621 lv_exists_flag VARCHAR2(1) := 'N';
1622
1623 l_prog_name CONSTANT VARCHAR2(61) := G_PKG_NAME||'.'||'is_item_revision_valid';
1624
1625 BEGIN
1626
1627 x_return_status := FND_API.G_RET_STS_SUCCESS;
1628
1629 FOR v_item_revision IN c_item_revision LOOP
1630 lv_exists_flag := 'Y';
1631 END LOOP;
1632
1633 RETURN lv_exists_flag;
1634
1635 EXCEPTION
1636
1637 WHEN OTHERS THEN
1638
1639 FND_MESSAGE.SET_NAME(G_APP_NAME, G_DB_ERROR);
1640 FND_MESSAGE.SET_TOKEN(token => G_PROG_NAME_TOKEN, value => l_prog_name);
1641 FND_MESSAGE.SET_TOKEN(token => G_SQLCODE_TOKEN, value => SQLCODE);
1642 FND_MESSAGE.SET_TOKEN(token => G_SQLERRM_TOKEN, value => SQLERRM);
1643 FND_MSG_PUB.add;
1644
1645 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1646 RETURN lv_exists_flag;
1647
1648 END IS_ITEM_REVISION_VALID;
1649
1650 --------------------------------------------------------------------------------
1651 -- FUNCTION IS_LINE_NUMBER_VALID
1652 --------------------------------------------------------------------------------
1653 FUNCTION IS_LINE_NUMBER_VALID(
1654 p_line_number IN NUMBER,
1655 p_incident_id IN NUMBER,
1656 x_msg_data OUT NOCOPY VARCHAR2,
1657 x_msg_count OUT NOCOPY NUMBER,
1658 x_return_status OUT NOCOPY VARCHAR2) RETURN VARCHAR2 IS
1659
1660 Cursor c_line_number IS
1661 SELECT line_number
1662 FROM CS_ESTIMATE_DETAILS
1663 WHERE incident_id = p_incident_id and
1664 line_number = p_line_number;
1665
1666 lv_exists_flag VARCHAR2(1) := 'N';
1667
1668 l_prog_name CONSTANT VARCHAR2(61) := G_PKG_NAME||'.'||'is_line_number_valid';
1669
1670 BEGIN
1671
1672 x_return_status := FND_API.G_RET_STS_SUCCESS;
1673
1674 IF p_line_number <= 0 THEN
1675 lv_exists_flag := 'Y';
1676 ELSE
1677 FOR v_line_number IN c_line_number LOOP
1678 lv_exists_flag := 'Y';
1679 END LOOP;
1680 END IF;
1681
1682 RETURN lv_exists_flag;
1683
1684 EXCEPTION
1685
1686 WHEN OTHERS THEN
1687
1688 FND_MESSAGE.SET_NAME(G_APP_NAME, G_DB_ERROR);
1689 FND_MESSAGE.SET_TOKEN(token => G_PROG_NAME_TOKEN, value => l_prog_name);
1690 FND_MESSAGE.SET_TOKEN(token => G_SQLCODE_TOKEN, value => SQLCODE);
1691 FND_MESSAGE.SET_TOKEN(token => G_SQLERRM_TOKEN, value => SQLERRM);
1692 FND_MSG_PUB.add;
1693
1694 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1695 RETURN lv_exists_flag;
1696
1697 END IS_LINE_NUMBER_VALID;
1698
1699 --==========================================================
1700 --==========================================================
1701 -- API for upstream to Create Charge Details
1702 --==========================================================
1703 PROCEDURE Create_Charge_Details(
1704 p_api_version IN NUMBER,
1705 p_init_msg_list IN VARCHAR2 := FND_API.G_FALSE,
1706 p_commit IN VARCHAR2 := FND_API.G_FALSE,
1707 p_validation_level IN NUMBER := FND_API.G_VALID_LEVEL_FULL,
1708 x_return_status OUT NOCOPY VARCHAR2,
1709 x_msg_count OUT NOCOPY NUMBER,
1710 x_object_version_number OUT NOCOPY NUMBER,
1711 x_estimate_detail_id OUT NOCOPY NUMBER,
1712 x_line_number OUT NOCOPY NUMBER,
1713 x_msg_data OUT NOCOPY VARCHAR2,
1714 p_resp_appl_id IN NUMBER := FND_GLOBAL.RESP_APPL_ID,
1715 p_resp_id IN NUMBER := FND_GLOBAL.RESP_ID,
1716 p_user_id IN NUMBER := FND_GLOBAL.USER_ID,
1717 p_login_id IN NUMBER := NULL,
1718 p_transaction_control IN VARCHAR2 := FND_API.G_TRUE,
1719 p_est_detail_rec IN CS_Charge_Details_PUB.Charges_Rec_Type
1720 ) IS
1721
1722 l_api_version NUMBER := 1.0 ;
1723 l_api_name CONSTANT VARCHAR2(30) := 'Create_Charge_Details' ;
1724 l_api_name_full CONSTANT VARCHAR2(100) := G_PKG_NAME || '.' || l_api_name ;
1725 l_log_module CONSTANT VARCHAR2(255) := 'cs.plsql.' || l_api_name_full || '.';
1726 l_return_status VARCHAR2(1) ;
1727 l_est_detail_rec CS_Charge_Details_PUB.Charges_Rec_Type;
1728 l_line_num NUMBER := 1 ;
1729 l_ed_id NUMBER ;
1730 lx_org_id NUMBER ;
1731 lx_profile VARCHAR2(1);
1732 l_org_id NUMBER ;
1733
1734 l_prog_name CONSTANT VARCHAR2(61) := G_PKG_NAME||'.'||'create_charge_details';
1735
1736
1737 --DEBUG
1738 l_errm VARCHAR2(100);
1739
1740 BEGIN
1741
1742 --DBMS_OUTPUT.PUT_LINE('BEGIN create_charge_details');
1743 --DBMS_OUTPUT.PUT_LINE('submit_error_message is '||p_est_detail_rec.submit_error_message);
1744
1745 -- Standard start of API savepoint
1746 IF FND_API.To_Boolean(p_transaction_control) THEN
1747 SAVEPOINT Create_Charge_Details_PVT;
1748 END IF ;
1749
1750 -- Standard call to check for call compatibility
1751 IF NOT FND_API.Compatible_API_Call(l_api_version,
1752 p_api_version,
1753 l_api_name,
1754 G_PKG_NAME) THEN
1755 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1756 END IF;
1757
1758 -- Initialize message list if p_init_msg_list is set to TRUE
1759 IF FND_API.To_Boolean(p_init_msg_list) THEN
1760 FND_MSG_PUB.Initialize;
1761 END IF;
1762
1763 -- Initialize API return status to success
1764 x_return_status := FND_API.G_RET_STS_SUCCESS;
1765
1766 ----------------------- FND Logging -----------------------------------
1767 IF FND_LOG.level_procedure >= FND_LOG.g_current_runtime_level
1768 THEN
1769 FND_LOG.String
1770 ( FND_LOG.level_procedure , L_LOG_MODULE || 'start'
1771 , 'Inside ' || L_API_NAME_FULL || ', called with parameters below:'
1772 );
1773 FND_LOG.String
1774 ( FND_LOG.level_procedure , L_LOG_MODULE || ''
1775 , 'p_api_version:' || p_api_version
1776 );
1777 FND_LOG.String
1778 ( FND_LOG.level_procedure , L_LOG_MODULE || ''
1779 , 'p_init_msg_list:' || p_init_msg_list
1780 );
1781 FND_LOG.String
1782 ( FND_LOG.level_procedure , L_LOG_MODULE || ''
1783 , 'p_commit:' || p_commit
1784 );
1785 FND_LOG.String
1786 ( FND_LOG.level_procedure , L_LOG_MODULE || ''
1787 , 'p_validation_level:' || p_validation_level
1788 );
1789 FND_LOG.String
1790 ( FND_LOG.level_procedure , L_LOG_MODULE || ''
1791 , 'p_resp_appl_id:' || p_resp_appl_id
1792 );
1793 FND_LOG.String
1794 ( FND_LOG.level_procedure , L_LOG_MODULE || ''
1795 , 'p_resp_id:' || p_resp_id
1796 );
1797 FND_LOG.String
1798 ( FND_LOG.level_procedure , L_LOG_MODULE || ''
1799 , 'p_user_id:' || p_user_id
1800 );
1801 FND_LOG.String
1802 ( FND_LOG.level_procedure , L_LOG_MODULE || ''
1803 , 'p_login_id:' || p_login_id
1804 );
1805 FND_LOG.String
1806 ( FND_LOG.level_procedure , L_LOG_MODULE || ''
1807 , 'p_transaction_control:' || p_transaction_control
1808 );
1809
1810 -- --------------------------------------------------------------------------
1811 -- This procedure Logs the charges record paramters.
1812 -- --------------------------------------------------------------------------
1813 CS_Charge_Details_PUB.Log_Charges_Rec_Parameters
1814 ( p_Charges_Rec => p_est_detail_rec
1815 );
1816
1817 END IF;
1818
1819 -- Make the preprocessing call to the user hooks
1820 --
1821 -- Pre call to the customer type user hook
1822 --
1823 IF jtf_usr_hks.Ok_To_Execute('CS_CHARGE_DETAILS_PVT',
1824 'Create_Charge_Details',
1825 'B','C') THEN
1826
1827 CS_CHARGE_DETAILS_CUHK.Create_Charge_Details_Pre(
1828 p_api_version => l_api_version,
1829 p_init_msg_list => FND_API.G_FALSE,
1830 p_commit => p_commit,
1831 p_validation_level => p_validation_level,
1832 x_return_status => l_return_status,
1833 x_msg_count => x_msg_count,
1834 x_object_version_number => x_object_version_number,
1835 x_estimate_detail_id => l_ed_id,
1836 x_line_number => l_line_num,
1837 x_msg_data => x_msg_data,
1838 p_resp_appl_id => p_resp_appl_id,
1839 p_resp_id => p_resp_id,
1840 p_user_id => p_user_id,
1841 p_login_id => p_login_id,
1842 p_transaction_control => p_transaction_control,
1843 p_est_detail_rec => p_est_detail_rec);
1844
1845
1846 IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
1847 FND_MESSAGE.Set_Name('CS', 'CS_API_CHG_ERR_PRE_CUST_USR_HK');
1848 FND_MESSAGE.Set_Token('API_NAME', l_api_name_full);
1849 FND_MSG_PUB.Add;
1850 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1851 END IF;
1852
1853 END IF;
1854
1855 --
1856 -- Pre call to the Vertical Type User Hook
1857 --
1858 IF jtf_usr_hks.Ok_To_Execute('CS_CHARGE_DETAILS_PVT',
1859 'Create_Charge_Details',
1860 'B', 'V') THEN
1861
1862 CS_CHARGE_DETAILS_VUHK.Create_Charge_Details_Pre(
1863 p_api_version => l_api_version,
1864 p_init_msg_list => FND_API.G_FALSE,
1865 p_commit => p_commit,
1866 p_validation_level => p_validation_level,
1867 x_return_status => l_return_status,
1868 x_msg_count => x_msg_count,
1869 x_object_version_number => x_object_version_number,
1870 x_estimate_detail_id => l_ed_id,
1871 x_line_number => l_line_num,
1872 x_msg_data => x_msg_data,
1873 p_resp_appl_id => p_resp_appl_id,
1874 p_resp_id => p_resp_id,
1875 p_user_id => p_user_id,
1876 p_login_id => p_login_id,
1877 p_transaction_control => p_transaction_control,
1878 p_est_detail_rec => p_est_detail_rec);
1879
1880
1881 IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
1882 FND_MESSAGE.Set_Name('CS', 'CS_API_CHG_ERR_PRE_VERT_USR_HK');
1883 FND_MESSAGE.Set_Token('API_NAME', l_api_name_full);
1884 FND_MSG_PUB.Add;
1885 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1886 END IF;
1887
1888 END IF;
1889
1890 -- ======================================================================
1891 -- Apply business-rule validation to all required and passed parameters
1892 -- if validation level is set.
1893 -- ======================================================================
1894
1895 IF (p_validation_level > FND_API.G_VALID_LEVEL_NONE) THEN
1896
1897 --DBMS_OUTPUT.PUT_LINE('Calling VALIDATE_WHO_INFO');
1898 --DBMS_OUTPUT.PUT_LINE('p_user_id '|| p_user_id);
1899 --DBMS_OUTPUT.PUT_LINE('p_login_id '||p_login_id);
1900
1901 Validate_Who_Info (p_api_name => l_api_name_full,
1902 p_user_id => p_user_id,
1903 p_login_id => p_login_id,
1904 x_return_status => l_return_status);
1905
1906 --DBMS_OUTPUT.PUT_LINE('Back from VALIDATE_WHO_INFO '||l_return_status);
1907
1908 IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
1909 RAISE FND_API.G_EXC_ERROR;
1910 END IF;
1911
1912 -- --DBMS_OUTPUT.PUT_LINE('Calling VALIDATE_CHARGE_DETAILS');
1913
1914 --Validate the Charge Detail Record that is passed in by the Upstream Module
1915 VALIDATE_CHARGE_DETAILS(p_api_name => l_api_name,
1916 p_charges_detail_rec => p_est_detail_rec,
1917 p_validation_mode => 'I',
1918 p_user_id => p_user_id,
1919 p_login_id => p_login_id,
1920 x_charges_detail_rec => l_est_detail_rec,
1921 x_msg_data => x_msg_data,
1922 x_msg_count => x_msg_count,
1923 x_return_status => l_return_status);
1924 IF FND_LOG.level_procedure >= FND_LOG.g_current_runtime_level
1925 THEN
1926 FND_LOG.String
1927 ( FND_LOG.level_procedure , L_LOG_MODULE || ''
1928 , 'After calling VALIDATE_CHARGE_DETAILS l_return_status :' || l_return_status
1929 );
1930 FND_LOG.String
1931 ( FND_LOG.level_procedure , L_LOG_MODULE || ''
1932 , 'x_msg_data :' || x_msg_data
1933 );
1934 END IF;
1935
1936
1937 IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
1938 FND_MESSAGE.Set_Name('CS', 'CS_CHG_VALIDATE_CHRG_DETAIL_ER');
1939 FND_MESSAGE.Set_Token('API_NAME', l_api_name_full);
1940 FND_MSG_PUB.Add;
1941 RAISE FND_API.G_EXC_ERROR;
1942 END IF;
1943
1944 --Fixed Bug # 3795144
1945 ELSE
1946 --p_validation_level = FND_API.G_VALID_LEVEL_NONE
1947 IF (p_validation_level = FND_API.G_VALID_LEVEL_NONE) THEN
1948 --populate the l_est_detail_rec record
1949 l_est_detail_rec := p_est_detail_rec;
1950 END IF;
1951 END IF ;
1952
1953 -----------------------------------------
1954 -- Prepare to INSERT record into database
1955 -----------------------------------------
1956 -- Added fix for the bug:5125385
1957 -- commented this out as billing_engine and copy_to_estimate are failing
1958
1959 -- dbms_output.put_line('Value of charge line number ' || l_est_detail_rec.line_number);
1960
1961 IF l_est_detail_rec.line_number IS NOT NULL AND
1962 l_est_detail_rec.line_number <> FND_API.G_MISS_NUM THEN
1963
1964 l_line_num := l_est_detail_rec.line_number;
1965
1966 ELSE
1967
1968 SELECT max(line_number) + 1
1969 INTO l_line_num
1970 FROM CS_ESTIMATE_DETAILS
1971 WHERE incident_id = p_est_detail_rec.incident_id;
1972
1973 END IF;
1974
1975 l_line_num := NVL(l_line_num,1);
1976
1977
1978 SELECT cs_estimate_details_s.nextval
1979 INTO l_ed_id
1980 FROM DUAL ;
1981
1982 --DBMS_OUTPUT.PUT_LINE('Calling CS_ESTIMATE_DETAILS_PKG.INSERT_ROW');
1983 --DBMS_OUTPUT.PUT_LINE('l_org_id = '||l_est_detail_rec.org_id);
1984 --DBMS_OUTPUT.PUT_LINE('l_est_detail_rec.incident_id = '||l_est_detail_rec.incident_id);
1985 --DBMS_OUTPUT.PUT_LINE('l_est_detail_rec.original_source_id = '||l_est_detail_rec.original_source_id);
1986 --DBMS_OUTPUT.PUT_LINE('l_est_detail_rec.original_source_code = '||l_est_detail_rec.original_source_code);
1987 --DBMS_OUTPUT.PUT_LINE('l_est_detail_rec.source_id = '||l_est_detail_rec.source_id);
1988 --DBMS_OUTPUT.PUT_LINE('l_est_detail_rec.source_code = '||l_est_detail_rec.source_code);
1989 --DBMS_OUTPUT.PUT_LINE('l_est_detail_rec.contract_id = '||l_est_detail_rec.contract_id);
1990 --DBMS_OUTPUT.PUT_LINE('l_est_detail_rec.coverage_id = '||l_est_detail_rec.coverage_id);
1991 --DBMS_OUTPUT.PUT_LINE('l_est_detail_rec.coverage_txn_group_id = '||l_est_detail_rec.coverage_txn_group_id);
1992 --DBMS_OUTPUT.PUT_LINE('l_EST_DETAIL_rec.currency_code = '||l_EST_DETAIL_rec.currency_code);
1993 --DBMS_OUTPUT.PUT_LINE('l_EST_DETAIL_rec.conversion_rate = '||l_EST_DETAIL_rec.conversion_rate);
1994 --DBMS_OUTPUT.PUT_LINE('l_EST_DETAIL_rec.conversion_rate_date = '||l_EST_DETAIL_rec.conversion_rate_date);
1995 --DBMS_OUTPUT.PUT_LINE('l_EST_DETAIL_rec.conversion_type_code = '||l_EST_DETAIL_rec.conversion_type_code);
1996 --DBMS_OUTPUT.PUT_LINE('l_est_detail_rec.invoice_to_org_id = '||l_est_detail_rec.invoice_to_org_id);
1997 --DBMS_OUTPUT.PUT_LINE('l_est_detail_rec.ship_to_org_id = '||l_est_detail_rec.ship_to_org_id);
1998 --DBMS_OUTPUT.PUT_LINE('l_est_detail_rec.purchase_order_num = '||l_est_detail_rec.purchase_order_num);
1999 --DBMS_OUTPUT.PUT_LINE('l_est_detail_rec.order_line_id = '||l_est_detail_rec.order_line_id);
2000 --DBMS_OUTPUT.PUT_LINE('l_est_detail_rec.line_type_id = '||l_est_detail_rec.line_type_id);
2001 --DBMS_OUTPUT.PUT_LINE('l_EST_DETAIL_rec.LINE_CATEGORY_CODE = '||l_EST_DETAIL_rec.LINE_CATEGORY_CODE);
2002 --DBMS_OUTPUT.PUT_LINE('l_est_detail_rec.price_list_id = '||l_est_detail_rec.price_list_id);
2003 --DBMS_OUTPUT.PUT_LINE('l_line_num = '||l_line_num);
2004 --DBMS_OUTPUT.PUT_LINE('l_est_detail_rec.inventory_item_id_in = '||l_est_detail_rec.inventory_item_id_in);
2005 --DBMS_OUTPUT.PUT_LINE('l_est_detail_rec.item_revision = '||l_est_detail_rec.item_revision);
2006 --DBMS_OUTPUT.PUT_LINE('l_EST_DETAIL_rec.SERIAL_NUMBER = '||l_EST_DETAIL_rec.SERIAL_NUMBER);
2007 --DBMS_OUTPUT.PUT_LINE('l_est_detail_rec.quantity_required = '||l_est_detail_rec.quantity_required);
2008 --DBMS_OUTPUT.PUT_LINE('l_est_detail_rec.unit_of_measure_code = '||l_est_detail_rec.unit_of_measure_code);
2009 --DBMS_OUTPUT.PUT_LINE('l_est_detail_rec.selling_price = '||l_est_detail_rec.selling_price);
2010 --DBMS_OUTPUT.PUT_LINE('l_est_detail_rec.after_warranty_cost = '||l_est_detail_rec.after_warranty_cost);
2011 --DBMS_OUTPUT.PUT_LINE('l_est_detail_rec.business_process_id = '||l_est_detail_rec.business_process_id);
2012 --DBMS_OUTPUT.PUT_LINE('l_est_detail_rec.transaction_type_id = '||l_est_detail_rec.transaction_type_id);
2013 --DBMS_OUTPUT.PUT_LINE('l_est_detail_rec.customer_product_id = '||l_est_detail_rec.customer_product_id);
2014 --DBMS_OUTPUT.PUT_LINE('l_est_detail_rec.order_header_id = '||l_est_detail_rec.order_header_id);
2015 --DBMS_OUTPUT.PUT_LINE('l_est_detail_rec.installed_cp_return_by_date = '||l_est_detail_rec.installed_cp_return_by_date);
2016 --DBMS_OUTPUT.PUT_LINE('l_est_detail_rec.new_cp_return_by_date = '||l_est_detail_rec.new_cp_return_by_date);
2017 --DBMS_OUTPUT.PUT_LINE('l_est_detail_rec.interface_to_oe_flag = '||l_est_detail_rec.interface_to_oe_flag);
2018 --DBMS_OUTPUT.PUT_LINE('l_est_detail_rec.rollup_flag = '||l_est_detail_rec.rollup_flag);
2019 --DBMS_OUTPUT.PUT_LINE('l_est_detail_rec.no_charge_flag = '||l_est_detail_rec.no_charge_flag);
2020 --DBMS_OUTPUT.PUT_LINE('l_est_detail_rec.add_to_order_flag = '||l_est_detail_rec.add_to_order_flag);
2021 --DBMS_OUTPUT.PUT_LINE('l_est_detail_rec.return_reason_code = '||l_est_detail_rec.return_reason_code);
2022 --DBMS_OUTPUT.PUT_LINE('l_est_detail_rec.generated_by_bca_engine = '||l_est_detail_rec.generated_by_bca_engine);
2023 --DBMS_OUTPUT.PUT_LINE('l_est_detail_rec.transaction_inventory_org = '||l_est_detail_rec.transaction_inventory_org);
2024 --DBMS_OUTPUT.PUT_LINE('l_est_detail_rec.transaction_sub_inventory = '||l_est_detail_rec.transaction_sub_inventory);
2025 --DBMS_OUTPUT.PUT_LINE('l_est_detail_rec.charge_line_type = '||l_est_detail_rec.charge_line_type);
2026 --DBMS_OUTPUT.PUT_LINE('l_est_detail_rec.ship_to_account_id = '||l_est_detail_rec.ship_to_account_id);
2027 --DBMS_OUTPUT.PUT_LINE('l_est_detail_rec.bill_to_account_id = '||l_est_detail_rec.bill_to_account_id);
2028 --DBMS_OUTPUT.PUT_LINE('l_est_detail_rec.ship_to_contact_id = '||l_est_detail_rec.ship_to_contact_id);
2029 --DBMS_OUTPUT.PUT_LINE('l_est_detail_rec.bill_to_contact_id = '||l_est_detail_rec.bill_to_contact_id);
2030 --DBMS_OUTPUT.PUT_LINE('l_est_detail_rec.list_price = '||l_est_detail_rec.list_price);
2031 --DBMS_OUTPUT.PUT_LINE('l_est_detail_rec.activity_start_time = '||TO_CHAR(l_est_detail_rec.activity_start_time, 'DD-MON-YYYY HH24:MI:SS'));
2032 --DBMS_OUTPUT.PUT_LINE('l_est_detail_rec.activity_end_time = '||TO_CHAR(l_est_detail_rec.activity_end_time, 'DD-MON-YYYY HH24:MI:SS'));
2033 --DBMS_OUTPUT.PUT_LINE('l_est_detail_rec.contract_discount_amount = '||l_est_detail_rec.contract_discount_amount);
2034 --DBMS_OUTPUT.PUT_LINE('l_est_detail_rec.bill_to_party_id = '||l_est_detail_rec.bill_to_party_id);
2035 --DBMS_OUTPUT.PUT_LINE('l_est_detail_rec.ship_to_party_id = '||l_est_detail_rec.ship_to_party_id);
2036 --DBMS_OUTPUT.PUT_LINE('l_est_detail_rec.coverage_bill_rate_id = '||l_est_detail_rec.coverage_bill_rate_id);
2037 --DBMS_OUTPUT.PUT_LINE('l_est_detail_rec.txn_billing_type_id = '||l_est_detail_rec.txn_billing_type_id);
2038 --DBMS_OUTPUT.PUT_LINE('p_login_id = '||p_login_id);
2039 --DBMS_OUTPUT.PUT_LINE('p_user_id = '||p_user_id);
2040 --DBMS_OUTPUT.PUT_LINE('p_user_id = '||p_user_id);
2041 --DBMS_OUTPUT.PUT_LINE('l_ed_id = '||l_ed_id);
2042 IF FND_LOG.level_procedure >= FND_LOG.g_current_runtime_level
2043 THEN
2044 FND_LOG.String
2045 ( FND_LOG.level_procedure , L_LOG_MODULE || ''
2046 , 'The Value of l_est_detail_rec.shipping_method :' || l_est_detail_rec.shipping_method
2047 );
2048 FND_LOG.String
2049 ( FND_LOG.level_procedure , L_LOG_MODULE || ''
2050 , 'The Value of l_est_detail_rec.arrival_date_time :' || l_est_detail_rec.arrival_date_time
2051 );
2052 END IF;
2053
2054 CS_ESTIMATE_DETAILS_PKG.Insert_Row(
2055 p_org_id => l_est_detail_rec.org_id,
2056 p_incident_id => l_est_detail_rec.incident_id,
2057 p_original_source_id => l_est_detail_rec.original_source_id,
2058 p_original_source_code => l_est_detail_rec.original_source_code,
2059 p_source_id => l_est_detail_rec.source_id,
2060 p_source_code => l_est_detail_rec.source_code,
2061 p_contract_line_id => l_est_detail_rec.contract_line_id,
2062 p_rate_type_code => l_est_detail_rec.rate_type_code,
2063 p_contract_id => l_est_detail_rec.contract_id,
2064 p_coverage_id => null,
2065 p_coverage_txn_group_id => null,
2066 p_CURRENCY_CODE => l_EST_DETAIL_rec.currency_code,
2067 p_CONVERSION_RATE => l_EST_DETAIL_rec.conversion_rate,
2068 p_CONVERSION_TYPE_CODE => l_EST_DETAIL_rec.conversion_type_code,
2069 p_CONVERSION_RATE_DATE => l_EST_DETAIL_rec.conversion_rate_date,
2070 p_invoice_to_org_id => l_est_detail_rec.invoice_to_org_id,
2071 p_ship_to_org_id => l_est_detail_rec.ship_to_org_id,
2072 p_purchase_order_num => l_est_detail_rec.purchase_order_num,
2073 p_order_line_id => l_est_detail_rec.order_line_id,
2074 p_line_type_id => l_est_detail_rec.line_type_id,
2075 p_LINE_CATEGORY_CODE => l_EST_DETAIL_rec.LINE_CATEGORY_CODE,
2076 p_price_list_header_id => l_est_detail_rec.price_list_id,
2077 p_line_number => l_line_num,
2078 p_inventory_item_id => l_est_detail_rec.inventory_item_id_in,
2079 p_item_revision => l_est_detail_rec.item_revision,
2080 p_SERIAL_NUMBER => l_EST_DETAIL_rec.SERIAL_NUMBER,
2081 p_quantity_required => l_est_detail_rec.quantity_required,
2082 p_unit_of_measure_code => l_est_detail_rec.unit_of_measure_code,
2083 p_selling_price => l_est_detail_rec.selling_price,
2084 p_after_warranty_cost => l_est_detail_rec.after_warranty_cost,
2085 p_business_process_id => l_est_detail_rec.business_process_id,
2086 p_transaction_type_id => l_est_detail_rec.transaction_type_id,
2087 p_customer_product_id => l_est_detail_rec.customer_product_id,
2088 p_order_header_id => l_est_detail_rec.order_header_id,
2089 p_installed_cp_return_by_date => l_est_detail_rec.installed_cp_return_by_date,
2090 p_new_cp_return_by_date => l_est_detail_rec.new_cp_return_by_date,
2091 p_interface_to_oe_flag => nvl(l_est_detail_rec.interface_to_oe_flag, 'N'),
2092 p_rollup_flag => nvl(l_est_detail_rec.rollup_flag,'N'),
2093 p_no_charge_flag => nvl(l_est_detail_rec.no_charge_flag,'N'),
2094 p_add_to_order_flag => nvl(l_est_detail_rec.add_to_order_flag,'N'),
2095 p_return_reason_code => l_est_detail_rec.return_reason_code,
2096 p_generated_by_bca_engine_flag => nvl(l_est_detail_rec.generated_by_bca_engine,'N'),
2097 p_transaction_inventory_org => l_est_detail_rec.transaction_inventory_org,
2098 p_transaction_sub_inventory => l_est_detail_rec.transaction_sub_inventory,
2099 p_charge_line_type => l_est_detail_rec.charge_line_type,
2100 p_ship_to_account_id => l_est_detail_rec.ship_to_account_id,
2101 p_invoice_to_account_id => l_est_detail_rec.bill_to_account_id,
2102 p_ship_to_contact_id => l_est_detail_rec.ship_to_contact_id,
2103 p_bill_to_contact_id => l_est_detail_rec.bill_to_contact_id,
2104 p_list_price => l_est_detail_rec.list_price,
2105 p_activity_start_date_time => l_est_detail_rec.activity_start_time,
2106 p_activity_end_date_time => l_est_detail_rec.activity_end_time,
2107 p_contract_discount_amount => l_est_detail_rec.contract_discount_amount,
2108 p_bill_to_party_id => l_est_detail_rec.bill_to_party_id,
2109 p_ship_to_party_id => l_est_detail_rec.ship_to_party_id,
2110 p_pricing_context => l_est_detail_rec.pricing_context,
2111 p_pricing_attribute1 => l_est_detail_rec.pricing_attribute1,
2112 p_pricing_attribute2 => l_est_detail_rec.pricing_attribute2,
2113 p_pricing_attribute3 => l_est_detail_rec.pricing_attribute3,
2114 p_pricing_attribute4 => l_est_detail_rec.pricing_attribute4,
2115 p_pricing_attribute5 => l_est_detail_rec.pricing_attribute5,
2116 p_pricing_attribute6 => l_est_detail_rec.pricing_attribute6,
2117 p_pricing_attribute7 => l_est_detail_rec.pricing_attribute7,
2118 p_pricing_attribute8 => l_est_detail_rec.pricing_attribute8,
2119 p_pricing_attribute9 => l_est_detail_rec.pricing_attribute9,
2120 p_pricing_attribute10 => l_est_detail_rec.pricing_attribute10,
2121 p_pricing_attribute11 => l_est_detail_rec.pricing_attribute11,
2122 p_pricing_attribute12 => l_est_detail_rec.pricing_attribute12,
2123 p_pricing_attribute13 => l_est_detail_rec.pricing_attribute13,
2124 p_pricing_attribute14 => l_est_detail_rec.pricing_attribute14,
2125 p_pricing_attribute15 => l_est_detail_rec.pricing_attribute15,
2126 p_pricing_attribute16 => l_est_detail_rec.pricing_attribute16,
2127 p_pricing_attribute17 => l_est_detail_rec.pricing_attribute17,
2128 p_pricing_attribute18 => l_est_detail_rec.pricing_attribute18,
2129 p_pricing_attribute19 => l_est_detail_rec.pricing_attribute19,
2130 p_pricing_attribute20 => l_est_detail_rec.pricing_attribute20,
2131 p_pricing_attribute21 => l_est_detail_rec.pricing_attribute21,
2132 p_pricing_attribute22 => l_est_detail_rec.pricing_attribute22,
2133 p_pricing_attribute23 => l_est_detail_rec.pricing_attribute23,
2134 p_pricing_attribute24 => l_est_detail_rec.pricing_attribute24,
2135 p_pricing_attribute25 => l_est_detail_rec.pricing_attribute25,
2136 p_pricing_attribute26 => l_est_detail_rec.pricing_attribute26,
2137 p_pricing_attribute27 => l_est_detail_rec.pricing_attribute27,
2138 p_pricing_attribute28 => l_est_detail_rec.pricing_attribute28,
2139 p_pricing_attribute29 => l_est_detail_rec.pricing_attribute29,
2140 p_pricing_attribute30 => l_est_detail_rec.pricing_attribute30,
2141 p_pricing_attribute31 => l_est_detail_rec.pricing_attribute31,
2142 p_pricing_attribute32 => l_est_detail_rec.pricing_attribute32,
2143 p_pricing_attribute33 => l_est_detail_rec.pricing_attribute33,
2144 p_pricing_attribute34 => l_est_detail_rec.pricing_attribute34,
2145 p_pricing_attribute35 => l_est_detail_rec.pricing_attribute35,
2146 p_pricing_attribute36 => l_est_detail_rec.pricing_attribute36,
2147 p_pricing_attribute37 => l_est_detail_rec.pricing_attribute37,
2148 p_pricing_attribute38 => l_est_detail_rec.pricing_attribute38,
2149 p_pricing_attribute39 => l_est_detail_rec.pricing_attribute39,
2150 p_pricing_attribute40 => l_est_detail_rec.pricing_attribute40,
2151 p_pricing_attribute41 => l_est_detail_rec.pricing_attribute41,
2152 p_pricing_attribute42 => l_est_detail_rec.pricing_attribute42,
2153 p_pricing_attribute43 => l_est_detail_rec.pricing_attribute43,
2154 p_pricing_attribute44 => l_est_detail_rec.pricing_attribute44,
2155 p_pricing_attribute45 => l_est_detail_rec.pricing_attribute45,
2156 p_pricing_attribute46 => l_est_detail_rec.pricing_attribute46,
2157 p_pricing_attribute47 => l_est_detail_rec.pricing_attribute47,
2158 p_pricing_attribute48 => l_est_detail_rec.pricing_attribute48,
2159 p_pricing_attribute49 => l_est_detail_rec.pricing_attribute49,
2160 p_pricing_attribute50 => l_est_detail_rec.pricing_attribute50,
2161 p_pricing_attribute51 => l_est_detail_rec.pricing_attribute51,
2162 p_pricing_attribute52 => l_est_detail_rec.pricing_attribute52,
2163 p_pricing_attribute53 => l_est_detail_rec.pricing_attribute53,
2164 p_pricing_attribute54 => l_est_detail_rec.pricing_attribute54,
2165 p_pricing_attribute55 => l_est_detail_rec.pricing_attribute55,
2166 p_pricing_attribute56 => l_est_detail_rec.pricing_attribute56,
2167 p_pricing_attribute57 => l_est_detail_rec.pricing_attribute57,
2168 p_pricing_attribute58 => l_est_detail_rec.pricing_attribute58,
2169 p_pricing_attribute59 => l_est_detail_rec.pricing_attribute59,
2170 p_pricing_attribute60 => l_est_detail_rec.pricing_attribute60,
2171 p_pricing_attribute61 => l_est_detail_rec.pricing_attribute61,
2172 p_pricing_attribute62 => l_est_detail_rec.pricing_attribute62,
2173 p_pricing_attribute63 => l_est_detail_rec.pricing_attribute63,
2174 p_pricing_attribute64 => l_est_detail_rec.pricing_attribute64,
2175 p_pricing_attribute65 => l_est_detail_rec.pricing_attribute65,
2176 p_pricing_attribute66 => l_est_detail_rec.pricing_attribute66,
2177 p_pricing_attribute67 => l_est_detail_rec.pricing_attribute67,
2178 p_pricing_attribute68 => l_est_detail_rec.pricing_attribute68,
2179 p_pricing_attribute69 => l_est_detail_rec.pricing_attribute69,
2180 p_pricing_attribute70 => l_est_detail_rec.pricing_attribute70,
2181 p_pricing_attribute71 => l_est_detail_rec.pricing_attribute71,
2182 p_pricing_attribute72 => l_est_detail_rec.pricing_attribute72,
2183 p_pricing_attribute73 => l_est_detail_rec.pricing_attribute73,
2184 p_pricing_attribute74 => l_est_detail_rec.pricing_attribute74,
2185 p_pricing_attribute75 => l_est_detail_rec.pricing_attribute75,
2186 p_pricing_attribute76 => l_est_detail_rec.pricing_attribute76,
2187 p_pricing_attribute77 => l_est_detail_rec.pricing_attribute77,
2188 p_pricing_attribute78 => l_est_detail_rec.pricing_attribute78,
2189 p_pricing_attribute79 => l_est_detail_rec.pricing_attribute79,
2190 p_pricing_attribute80 => l_est_detail_rec.pricing_attribute80,
2191 p_pricing_attribute81 => l_est_detail_rec.pricing_attribute81,
2192 p_pricing_attribute82 => l_est_detail_rec.pricing_attribute82,
2193 p_pricing_attribute83 => l_est_detail_rec.pricing_attribute83,
2194 p_pricing_attribute84 => l_est_detail_rec.pricing_attribute84,
2195 p_pricing_attribute85 => l_est_detail_rec.pricing_attribute85,
2196 p_pricing_attribute86 => l_est_detail_rec.pricing_attribute86,
2197 p_pricing_attribute87 => l_est_detail_rec.pricing_attribute87,
2198 p_pricing_attribute88 => l_est_detail_rec.pricing_attribute88,
2199 p_pricing_attribute89 => l_est_detail_rec.pricing_attribute89,
2200 p_pricing_attribute90 => l_est_detail_rec.pricing_attribute90,
2201 p_pricing_attribute91 => l_est_detail_rec.pricing_attribute91,
2202 p_pricing_attribute92 => l_est_detail_rec.pricing_attribute92,
2203 p_pricing_attribute93 => l_est_detail_rec.pricing_attribute93,
2204 p_pricing_attribute94 => l_est_detail_rec.pricing_attribute94,
2205 p_pricing_attribute95 => l_est_detail_rec.pricing_attribute95,
2206 p_pricing_attribute96 => l_est_detail_rec.pricing_attribute96,
2207 p_pricing_attribute97 => l_est_detail_rec.pricing_attribute97,
2208 p_pricing_attribute98 => l_est_detail_rec.pricing_attribute98,
2209 p_pricing_attribute99 => l_est_detail_rec.pricing_attribute99,
2210 p_pricing_attribute100 => l_est_detail_rec.pricing_attribute100,
2211 p_attribute1 => l_est_detail_rec.attribute1,
2212 p_attribute2 => l_est_detail_rec.attribute2,
2213 p_attribute3 => l_est_detail_rec.attribute3,
2214 p_attribute4 => l_est_detail_rec.attribute4,
2215 p_attribute5 => l_est_detail_rec.attribute5,
2216 p_attribute6 => l_est_detail_rec.attribute6,
2217 p_attribute7 => l_est_detail_rec.attribute7,
2218 p_attribute8 => l_est_detail_rec.attribute8,
2219 p_attribute9 => l_est_detail_rec.attribute9,
2220 p_attribute10 => l_est_detail_rec.attribute10,
2221 p_attribute11 => l_est_detail_rec.attribute11,
2222 p_attribute12 => l_est_detail_rec.attribute12,
2223 p_attribute13 => l_est_detail_rec.attribute13,
2224 p_attribute14 => l_est_detail_rec.attribute14,
2225 p_attribute15 => l_est_detail_rec.attribute15,
2226 p_context => l_est_detail_rec.context,
2227 p_coverage_bill_rate_id => l_est_detail_rec.coverage_bill_rate_id,
2228 p_coverage_billing_type_id => null,
2229 p_txn_billing_type_id => l_est_detail_rec.txn_billing_type_id,
2230 p_submit_restriction_message => l_est_detail_rec.submit_restriction_message,
2231 p_submit_error_message => l_est_detail_rec.submit_error_message,
2232 p_submit_from_system => l_est_detail_rec.submit_from_system,
2233 p_line_submitted => nvl(l_est_detail_rec.line_submitted_flag, 'N'),
2234 p_last_update_date => sysdate,
2235 --p_last_update_login => p_user_id,
2236 p_last_update_login => p_login_id,
2237 p_last_updated_by => p_user_id,
2238 p_creation_date => sysdate,
2239 p_created_by => p_user_id,
2240 p_estimate_detail_id => l_ed_id,
2241 /* Credit Card 9358401 */
2242 p_instrument_payment_use_id => l_est_detail_rec.instrument_payment_use_id,
2243 -- Charges Logistics Project
2244 p_shipping_method => l_est_detail_rec.shipping_method,
2245 p_arrival_date_time => l_est_detail_rec.arrival_date_time,
2246 p_return_type => l_est_detail_rec.return_type,
2247 p_parent_instance_id => l_est_detail_rec.parent_instance_id,
2248 -- Charges MED Project
2249 p_shipping_distance => l_est_detail_rec.distance,
2250 p_need_by_date => l_est_detail_rec.need_by_date,
2251 --12.2.2 Service Projects Integration (below 3 params)
2252 p_project_id => l_est_detail_rec.project_id,
2253 p_project_task_id => l_est_detail_rec.project_task_id,
2254 p_expenditure_org_id => l_est_detail_rec.expenditure_org_id,
2255 x_object_version_number => x_object_version_number );
2256
2257 --DBMS_OUTPUT.PUT_LINE('Back from CS_ESTIMATE_DETAILS_PKG.INSERT_ROW. OVN '||x_object_version_number);
2258
2259 -- hint: primary key should be returned.
2260 -- x_estimate_detail_id := x_estimate_detail_id;
2261
2262 x_estimate_detail_id := l_ed_id ;
2263 x_line_number := nvl(l_line_num,1) ;
2264
2265
2266 -- Make the postprocessing call to the user hooks
2267 --
2268 -- Post call to the customer type user hook
2269 --
2270 IF jtf_usr_hks.Ok_To_Execute('CS_CHARGE_DETAILS_PVT',
2271 'Create_Charge_Details',
2272 'A','C') THEN
2273
2274 CS_CHARGE_DETAILS_CUHK.Create_Charge_Details_Post(
2275 p_api_version => l_api_version,
2276 p_init_msg_list => FND_API.G_FALSE,
2277 p_commit => p_commit,
2278 p_validation_level => p_validation_level,
2279 x_return_status => l_return_status,
2280 x_msg_count => x_msg_count,
2281 x_object_version_number => x_object_version_number,
2282 x_estimate_detail_id => l_ed_id,
2283 x_line_number => l_line_num,
2284 x_msg_data => x_msg_data,
2285 p_resp_appl_id => p_resp_appl_id,
2286 p_resp_id => p_resp_id,
2287 p_user_id => p_user_id,
2288 p_login_id => p_login_id,
2289 p_transaction_control => p_transaction_control,
2290 p_est_detail_rec => p_est_detail_rec);
2291
2292
2293 IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
2294 FND_MESSAGE.Set_Name('CS', 'CS_API_CHG_ERR_PST_CUST_USR_HK');
2295 FND_MESSAGE.Set_Token('API_NAME', l_api_name_full);
2296 FND_MSG_PUB.Add;
2297
2298 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
2299 END IF;
2300
2301 END IF;
2302 --
2303 --
2304 -- Post call to the Vertical Type User Hook
2305 --
2306 IF jtf_usr_hks.Ok_To_Execute('CS_CHARGE_DETAILS_PVT',
2307 'Create_Charge_Details',
2308 'A', 'V') THEN
2309
2310 CS_CHARGE_DETAILS_VUHK.Create_Charge_Details_Post(
2311 p_api_version => l_api_version,
2312 p_init_msg_list => FND_API.G_FALSE,
2313 p_commit => p_commit,
2314 p_validation_level => p_validation_level,
2315 x_return_status => l_return_status,
2316 x_msg_count => x_msg_count,
2317 x_object_version_number => x_object_version_number,
2318 x_estimate_detail_id => l_ed_id,
2319 x_line_number => l_line_num,
2320 x_msg_data => x_msg_data,
2321 p_resp_appl_id => p_resp_appl_id,
2322 p_resp_id => p_resp_id,
2323 p_user_id => p_user_id,
2324 p_login_id => p_login_id,
2325 p_transaction_control => p_transaction_control,
2326 p_est_detail_rec => p_est_detail_rec);
2327
2328
2329 IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
2330 FND_MESSAGE.Set_Name('CS', 'CS_API_CHG_ERR_PST_VERT_USR_HK');
2331 FND_MESSAGE.Set_Token('API_NAME', l_api_name_full);
2332 FND_MSG_PUB.Add;
2333 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
2334 END IF;
2335 END IF;
2336
2337
2338 -- Standard check of p_commit
2339 IF FND_API.To_Boolean(p_commit) THEN
2340 COMMIT WORK;
2341 END IF;
2342
2343 FND_MSG_PUB.Count_And_Get
2344 ( p_count => x_msg_count,
2345 p_data => x_msg_data,
2346 p_encoded => FND_API.G_FALSE) ;
2347
2348 EXCEPTION
2349
2350 WHEN FND_API.G_EXC_ERROR THEN
2351
2352 IF FND_API.To_Boolean(p_transaction_control) THEN
2353 ROLLBACK TO Create_Charge_Details_PVT;
2354 END IF ;
2355
2356
2357 FND_MSG_PUB.Count_And_Get(p_count => x_msg_count,
2358 p_data => x_msg_data,
2359 p_encoded => FND_API.G_FALSE) ;
2360
2361
2362 x_return_status := FND_API.G_RET_STS_ERROR;
2363
2364
2365
2366 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
2367
2368 IF FND_API.To_Boolean(p_transaction_control) THEN
2369 ROLLBACK TO Create_Charge_Details_PVT;
2370 END IF ;
2371
2372 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
2373
2374 FND_MSG_PUB.Count_And_Get(p_count => x_msg_count,
2375 p_data => x_msg_data,
2376 p_encoded => FND_API.G_FALSE) ;
2377 WHEN OTHERS THEN
2378 --l_errm := SQLERRM;
2379 --DBMS_OUTPUT.PUT_LINE('OTHERS inside CREATE_CHARGE_DETAILS '||l_errm);
2380
2381 IF FND_API.To_Boolean(p_transaction_control) THEN
2382 ROLLBACK TO Create_Charge_Details_PVT;
2383 END IF ;
2384
2385 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
2386
2387 IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
2388 FND_MSG_PUB.Add_Exc_Msg(G_PKG_NAME, l_api_name);
2389 END IF;
2390
2391 FND_MSG_PUB.Count_And_Get(p_count => x_msg_count,
2392 p_data => x_msg_data,
2393 p_encoded => FND_API.G_FALSE) ;
2394
2395 END Create_Charge_Details;
2396
2397
2398 --=====================================================
2399 --API to Update Charge Details into CS_ESTIMATE_DETAILS
2400 --=====================================================
2401
2402 PROCEDURE Update_Charge_Details(
2403 p_api_version IN NUMBER,
2404 p_init_msg_list IN VARCHAR2 := FND_API.G_FALSE,
2405 p_commit IN VARCHAR2 := FND_API.G_FALSE,
2406 p_validation_level IN NUMBER := FND_API.G_VALID_LEVEL_FULL,
2407 x_return_status OUT NOCOPY VARCHAR2,
2408 x_msg_count OUT NOCOPY NUMBER,
2409 x_object_version_number OUT NOCOPY NUMBER,
2410 x_msg_data OUT NOCOPY VARCHAR2,
2411 --p_resp_appl_id IN NUMBER := NULL,
2412 --p_resp_id IN NUMBER := NULL,
2413 --p_user_id IN NUMBER := NULL,
2414 p_resp_appl_id IN NUMBER := FND_GLOBAL.RESP_APPL_ID,
2415 p_resp_id IN NUMBER := FND_GLOBAL.RESP_ID,
2416 p_user_id IN NUMBER := FND_GLOBAL.USER_ID,
2417 p_login_id IN NUMBER := NULL,
2418 p_transaction_control IN VARCHAR2 := FND_API.G_TRUE,
2419 p_est_detail_rec IN CS_Charge_Details_PUB.Charges_Rec_Type
2420 ) IS
2421
2422 l_api_version NUMBER := 1.0 ;
2423 l_api_name VARCHAR2(30) := 'Update_Charge_Details' ;
2424 l_api_name_full VARCHAR2(100) := G_PKG_NAME || '.' || l_api_name ;
2425 l_log_module CONSTANT VARCHAR2(255) := 'cs.plsql.' || l_api_name_full || '.';
2426 l_return_status VARCHAR2(1) ;
2427
2428 l_line_num NUMBER := 1 ;
2429 l_ed_id NUMBER ;
2430 l_org_id NUMBER ;
2431 l_est_detail_rec CS_Charge_Details_PUB.Charges_Rec_Type;
2432
2433 l_prog_name CONSTANT VARCHAR2(61) := G_PKG_NAME||'.'||'update_charge_details';
2434
2435 BEGIN
2436
2437 --DBMS_OUTPUT.PUT_LINE('Updating Charge Details');
2438
2439 -- Standard start of API savepoint
2440 IF FND_API.To_Boolean(p_transaction_control) THEN
2441 SAVEPOINT Update_Charge_Details_PVT;
2442 END IF ;
2443
2444 -- Standard call to check for call compatibility
2445 IF NOT FND_API.Compatible_API_Call(l_api_version, p_api_version, l_api_name,
2446 G_PKG_NAME) THEN
2447 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
2448 END IF;
2449
2450 -- Initialize message list if p_init_msg_list is set to TRUE
2451 IF FND_API.To_Boolean(p_init_msg_list) THEN
2452 FND_MSG_PUB.Initialize;
2453 END IF;
2454
2455 -- Initialize API return status to success
2456 x_return_status := FND_API.G_RET_STS_SUCCESS;
2457
2458 ----------------------- FND Logging -----------------------------------
2459 IF FND_LOG.level_procedure >= FND_LOG.g_current_runtime_level
2460 THEN
2461 FND_LOG.String
2462 ( FND_LOG.level_procedure , L_LOG_MODULE || 'start'
2463 , 'Inside ' || L_API_NAME_FULL || ', called with parameters below:'
2464 );
2465 FND_LOG.String
2466 ( FND_LOG.level_procedure , L_LOG_MODULE || ''
2467 , 'p_api_version:' || p_api_version
2468 );
2469 FND_LOG.String
2470 ( FND_LOG.level_procedure , L_LOG_MODULE || ''
2471 , 'p_init_msg_list:' || p_init_msg_list
2472 );
2473 FND_LOG.String
2474 ( FND_LOG.level_procedure , L_LOG_MODULE || ''
2475 , 'p_commit:' || p_commit
2476 );
2477 FND_LOG.String
2478 ( FND_LOG.level_procedure , L_LOG_MODULE || ''
2479 , 'p_validation_level:' || p_validation_level
2480 );
2481 FND_LOG.String
2482 ( FND_LOG.level_procedure , L_LOG_MODULE || ''
2483 , 'p_resp_appl_id:' || p_resp_appl_id
2484 );
2485 FND_LOG.String
2486 ( FND_LOG.level_procedure , L_LOG_MODULE || ''
2487 , 'p_resp_id:' || p_resp_id
2488 );
2489 FND_LOG.String
2490 ( FND_LOG.level_procedure , L_LOG_MODULE || ''
2491 , 'p_user_id:' || p_user_id
2492 );
2493 FND_LOG.String
2494 ( FND_LOG.level_procedure , L_LOG_MODULE || ''
2495 , 'p_login_id:' || p_login_id
2496 );
2497 FND_LOG.String
2498 ( FND_LOG.level_procedure , L_LOG_MODULE || ''
2499 , 'p_transaction_control:' || p_transaction_control
2500 );
2501
2502 -- --------------------------------------------------------------------------
2503 -- This procedure Logs the charges record paramters.
2504 -- --------------------------------------------------------------------------
2505 CS_Charge_Details_PUB.Log_Charges_Rec_Parameters
2506 ( p_Charges_Rec => p_est_detail_rec
2507 );
2508
2509 END IF;
2510
2511 -- Make the preprocessing call to the user hooks
2512 --
2513 -- Pre call to the customer type user hook
2514 --
2515 IF jtf_usr_hks.Ok_To_Execute('CS_CHARGE_DETAILS_PVT',
2516 'Update_Charge_Details',
2517 'B','C') THEN
2518
2519 CS_CHARGE_DETAILS_CUHK.Update_Charge_Details_Pre(
2520 p_api_version => l_api_version,
2521 p_init_msg_list => FND_API.G_FALSE,
2522 p_commit => p_commit,
2523 p_validation_level => p_validation_level,
2524 x_return_status => l_return_status,
2525 x_msg_count => x_msg_count,
2526 x_object_version_number => x_object_version_number,
2527 x_estimate_detail_id => l_ed_id,
2528 x_msg_data => x_msg_data,
2529 p_resp_appl_id => p_resp_appl_id,
2530 p_resp_id => p_resp_id,
2531 p_user_id => p_user_id,
2532 p_login_id => p_login_id,
2533 p_transaction_control => p_transaction_control,
2534 p_est_detail_rec => p_est_detail_rec);
2535
2536 IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
2537 FND_MESSAGE.Set_Name('CS', 'CS_API_CHG_ERR_PRE_CUST_USR_HK');
2538 FND_MESSAGE.Set_Token('API_NAME', l_api_name_full);
2539 FND_MSG_PUB.Add;
2540 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
2541 END IF;
2542
2543 END IF;
2544 --
2545 --
2546 -- Pre call to the Vertical Type User Hook
2547 --
2548 IF jtf_usr_hks.Ok_To_Execute('CS_CHARGE_DETAILS_PVT',
2549 'Update_Charge_Details',
2550 'B', 'V') THEN
2551
2552 CS_CHARGE_DETAILS_VUHK.Update_Charge_Details_Pre(
2553 p_api_version => l_api_version,
2554 p_init_msg_list => FND_API.G_FALSE,
2555 p_commit => p_commit,
2556 p_validation_level => p_validation_level,
2557 x_return_status => l_return_status,
2558 x_msg_count => x_msg_count,
2559 x_object_version_number => x_object_version_number,
2560 x_estimate_detail_id => l_ed_id,
2561 x_msg_data => x_msg_data,
2562 p_resp_appl_id => p_resp_appl_id,
2563 p_resp_id => p_resp_id,
2564 p_user_id => p_user_id,
2565 p_login_id => p_login_id,
2566 p_transaction_control => p_transaction_control,
2567 p_est_detail_rec => p_est_detail_rec);
2568
2569 IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
2570 FND_MESSAGE.Set_Name('CS', 'CS_API_CHG_ERR_PRE_VERT_USR_HK');
2571 FND_MESSAGE.Set_Token('API_NAME', l_api_name_full);
2572 FND_MSG_PUB.Add;
2573 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
2574 END IF;
2575
2576 END IF;
2577
2578 -- ----------------------------------------------------------------------
2579 -- Apply business-rule validation to all required and passed parameters
2580 -- if validation level is set.
2581 -- ----------------------------------------------------------------------
2582 IF (p_validation_level > FND_API.G_VALID_LEVEL_NONE) THEN
2583
2584 -- Validate the user and login ids
2585
2586 Validate_Who_Info ( p_api_name => l_api_name_full,
2587 p_user_id => NVL(p_user_id, -1),
2588 p_login_id => p_login_id,
2589 x_return_status => l_return_status);
2590
2591 IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
2592 RAISE FND_API.G_EXC_ERROR;
2593 END IF;
2594
2595 --DBMS_OUTPUT.PUT_LINE('validating charge details');
2596
2597 -- Validate the Charge Detail Record that is passed in by the Upstream Module
2598 VALIDATE_CHARGE_DETAILS(p_api_name => l_api_name,
2599 p_charges_detail_rec => p_est_detail_rec,
2600 p_validation_mode => 'U',
2601 p_user_id => p_user_id,
2602 p_login_id => p_login_id,
2603 x_charges_detail_rec => l_est_detail_rec,
2604 x_msg_data => x_msg_data,
2605 x_msg_count => x_msg_count,
2606 x_return_status => l_return_status);
2607
2608 IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
2609 FND_MESSAGE.Set_Name('CS', 'CS_CHG_VALIDATE_CHRG_DETAIL_ER');
2610 FND_MESSAGE.Set_Token('API_NAME', l_api_name_full);
2611 FND_MSG_PUB.Add;
2612 RAISE FND_API.G_EXC_ERROR;
2613 END IF;
2614
2615 --Fixed Bug # 3795144
2616 ELSE
2617 --p_validation_level = FND_API.G_VALID_LEVEL_NONE
2618 IF (p_validation_level = FND_API.G_VALID_LEVEL_NONE) THEN
2619 --populate the l_est_detail_rec record
2620 l_est_detail_rec := p_est_detail_rec;
2621 END IF;
2622 END IF ;
2623
2624 --DBMS_OUTPUT.PUT_LINE('Calling CS_ESTIMATE_DETAILS_PKG.UPDATE_ROW');
2625 --DBMS_OUTPUT.PUT_LINE('l_est_detail_rec.org_id = '||l_est_detail_rec.org_id);
2626 --DBMS_OUTPUT.PUT_LINE('l_est_detail_rec.incident_id = '||l_est_detail_rec.incident_id);
2627 --DBMS_OUTPUT.PUT_LINE('l_est_detail_rec.original_source_id = '||l_est_detail_rec.original_source_id);
2628 --DBMS_OUTPUT.PUT_LINE('l_est_detail_rec.original_source_code = '||l_est_detail_rec.original_source_code);
2629 --DBMS_OUTPUT.PUT_LINE('l_est_detail_rec.source_id = '||l_est_detail_rec.source_id);
2630 --DBMS_OUTPUT.PUT_LINE('l_est_detail_rec.source_code = '||l_est_detail_rec.source_code);
2631 --DBMS_OUTPUT.PUT_LINE('l_est_detail_rec.contract_id = '||l_est_detail_rec.contract_id);
2632 --DBMS_OUTPUT.PUT_LINE('l_est_detail_rec.coverage_id = '||l_est_detail_rec.coverage_id);
2633 --DBMS_OUTPUT.PUT_LINE('l_est_detail_rec.coverage_txn_group_id = '||l_est_detail_rec.coverage_txn_group_id);
2634 --DBMS_OUTPUT.PUT_LINE('l_EST_DETAIL_rec.currency_code = '||l_EST_DETAIL_rec.currency_code);
2635 --DBMS_OUTPUT.PUT_LINE('l_EST_DETAIL_rec.conversion_rate = '||l_EST_DETAIL_rec.conversion_rate);
2636 --DBMS_OUTPUT.PUT_LINE('l_EST_DETAIL_rec.conversion_rate_date = '||l_EST_DETAIL_rec.conversion_rate_date);
2637 --DBMS_OUTPUT.PUT_LINE('l_EST_DETAIL_rec.conversion_type_code = '||l_EST_DETAIL_rec.conversion_type_code);
2638 --DBMS_OUTPUT.PUT_LINE('l_est_detail_rec.invoice_to_org_id = '||l_est_detail_rec.invoice_to_org_id);
2639 --DBMS_OUTPUT.PUT_LINE('l_est_detail_rec.ship_to_org_id = '||l_est_detail_rec.ship_to_org_id);
2640 --DBMS_OUTPUT.PUT_LINE('l_est_detail_rec.purchase_order_num = '||l_est_detail_rec.purchase_order_num);
2641 --DBMS_OUTPUT.PUT_LINE('l_est_detail_rec.order_line_id = '||l_est_detail_rec.order_line_id);
2642 --DBMS_OUTPUT.PUT_LINE('l_est_detail_rec.line_type_id = '||l_est_detail_rec.line_type_id);
2643 --DBMS_OUTPUT.PUT_LINE('l_EST_DETAIL_rec.LINE_CATEGORY_CODE = '||l_EST_DETAIL_rec.LINE_CATEGORY_CODE);
2644 --DBMS_OUTPUT.PUT_LINE('l_est_detail_rec.price_list_id = '||l_est_detail_rec.price_list_id);
2645 --DBMS_OUTPUT.PUT_LINE('l_line_num = '||l_line_num);
2646 --DBMS_OUTPUT.PUT_LINE('l_est_detail_rec.inventory_item_id_in = '||l_est_detail_rec.inventory_item_id_in);
2647 --DBMS_OUTPUT.PUT_LINE('l_est_detail_rec.item_revision = '||l_est_detail_rec.item_revision);
2648 --DBMS_OUTPUT.PUT_LINE('l_EST_DETAIL_rec.SERIAL_NUMBER = '||l_EST_DETAIL_rec.SERIAL_NUMBER);
2649 --DBMS_OUTPUT.PUT_LINE('l_est_detail_rec.quantity_required = '||l_est_detail_rec.quantity_required);
2650 --DBMS_OUTPUT.PUT_LINE('l_est_detail_rec.unit_of_measure_code = '||l_est_detail_rec.unit_of_measure_code);
2651 --DBMS_OUTPUT.PUT_LINE('l_est_detail_rec.selling_price = '||l_est_detail_rec.selling_price);
2652 --DBMS_OUTPUT.PUT_LINE('l_est_detail_rec.after_warranty_cost = '||l_est_detail_rec.after_warranty_cost);
2653 --DBMS_OUTPUT.PUT_LINE('l_est_detail_rec.business_process_id = '||l_est_detail_rec.business_process_id);
2654 --DBMS_OUTPUT.PUT_LINE('l_est_detail_rec.transaction_type_id = '||l_est_detail_rec.transaction_type_id);
2655 --DBMS_OUTPUT.PUT_LINE('l_est_detail_rec.customer_product_id = '||l_est_detail_rec.customer_product_id);
2656 --DBMS_OUTPUT.PUT_LINE('l_est_detail_rec.order_header_id = '||l_est_detail_rec.order_header_id);
2657 --DBMS_OUTPUT.PUT_LINE('l_est_detail_rec.installed_cp_return_by_date = '||l_est_detail_rec.installed_cp_return_by_date);
2658 --DBMS_OUTPUT.PUT_LINE('l_est_detail_rec.new_cp_return_by_date = '||l_est_detail_rec.new_cp_return_by_date);
2659 --DBMS_OUTPUT.PUT_LINE('l_est_detail_rec.interface_to_oe_flag = '||l_est_detail_rec.interface_to_oe_flag);
2660 --DBMS_OUTPUT.PUT_LINE('l_est_detail_rec.rollup_flag = '||l_est_detail_rec.rollup_flag);
2661 --DBMS_OUTPUT.PUT_LINE('l_est_detail_rec.no_charge_flag = '||l_est_detail_rec.no_charge_flag);
2662 --DBMS_OUTPUT.PUT_LINE('l_est_detail_rec.add_to_order_flag = '||l_est_detail_rec.add_to_order_flag);
2663 --DBMS_OUTPUT.PUT_LINE('l_est_detail_rec.return_reason_code = '||l_est_detail_rec.return_reason_code);
2664 --DBMS_OUTPUT.PUT_LINE('l_est_detail_rec.generated_by_bca_engine = '||l_est_detail_rec.generated_by_bca_engine);
2665 --DBMS_OUTPUT.PUT_LINE('l_est_detail_rec.transaction_inventory_org = '||l_est_detail_rec.transaction_inventory_org);
2666 --DBMS_OUTPUT.PUT_LINE('l_est_detail_rec.transaction_sub_inventory = '||l_est_detail_rec.transaction_sub_inventory);
2667 --DBMS_OUTPUT.PUT_LINE('l_est_detail_rec.charge_line_type = '||l_est_detail_rec.charge_line_type);
2668 --DBMS_OUTPUT.PUT_LINE('l_est_detail_rec.ship_to_account_id = '||l_est_detail_rec.ship_to_account_id);
2669 --DBMS_OUTPUT.PUT_LINE('l_est_detail_rec.bill_to_account_id = '||l_est_detail_rec.bill_to_account_id);
2670 --DBMS_OUTPUT.PUT_LINE('l_est_detail_rec.ship_to_contact_id = '||l_est_detail_rec.ship_to_contact_id);
2671 --DBMS_OUTPUT.PUT_LINE('l_est_detail_rec.bill_to_contact_id = '||l_est_detail_rec.bill_to_contact_id);
2672 --DBMS_OUTPUT.PUT_LINE('l_est_detail_rec.list_price = '||l_est_detail_rec.list_price);
2673 --DBMS_OUTPUT.PUT_LINE('l_est_detail_rec.activity_start_time = '||TO_CHAR(l_est_detail_rec.activity_start_time, 'DD-MON-YYYY HH24:MI:SS'));
2674 --DBMS_OUTPUT.PUT_LINE('l_est_detail_rec.activity_end_time = '||TO_CHAR(l_est_detail_rec.activity_end_time, 'DD-MON-YYYY HH24:MI:SS'));
2675 --DBMS_OUTPUT.PUT_LINE('l_est_detail_rec.contract_discount_amount = '||l_est_detail_rec.contract_discount_amount);
2676 --DBMS_OUTPUT.PUT_LINE('l_est_detail_rec.bill_to_party_id = '||l_est_detail_rec.bill_to_party_id);
2677 --DBMS_OUTPUT.PUT_LINE('l_est_detail_rec.ship_to_party_id = '||l_est_detail_rec.ship_to_party_id);
2678 --DBMS_OUTPUT.PUT_LINE('l_est_detail_rec.coverage_bill_rate_id = '||l_est_detail_rec.coverage_bill_rate_id);
2679 --DBMS_OUTPUT.PUT_LINE('l_est_detail_rec.txn_billing_type_id = '||l_est_detail_rec.txn_billing_type_id);
2680 --DBMS_OUTPUT.PUT_LINE('p_login_id = '||p_login_id);
2681 --DBMS_OUTPUT.PUT_LINE('p_user_id = '||p_user_id);
2682 --DBMS_OUTPUT.PUT_LINE('p_user_id = '||p_user_id);
2683 --DBMS_OUTPUT.PUT_LINE('l_ed_id = '||l_ed_id);
2684 --DBMS_OUTPUT.PUT_LINE('Before Update '||l_est_detail_rec.CONTRACT_ID);
2685
2686 CS_ESTIMATE_DETAILS_PKG.Update_Row(
2687 x_object_version_number => x_object_version_number,
2688 p_ESTIMATE_DETAIL_ID => l_est_detail_rec.ESTIMATE_DETAIL_ID,
2689 p_ORG_ID => l_est_detail_rec.org_id,
2690 p_INCIDENT_ID => l_est_detail_rec.INCIDENT_ID,
2691 p_ORIGINAL_SOURCE_ID => l_est_detail_rec.ORIGINAL_SOURCE_ID,
2692 p_ORIGINAL_SOURCE_CODE => l_est_detail_rec.ORIGINAL_SOURCE_CODE,
2693 p_SOURCE_ID => l_est_detail_rec.SOURCE_ID,
2694 p_SOURCE_CODE => l_est_detail_rec.SOURCE_CODE,
2695 p_contract_line_id => l_est_detail_rec.contract_line_id,
2696 p_rate_type_code => l_est_detail_rec.rate_type_code,
2697 p_contract_id => l_est_detail_rec.CONTRACT_ID,
2698 p_coverage_id => null,
2699 p_coverage_txn_group_id => null,
2700 --p_EXCEPTION_COVERAGE_USED => l_est_detail_rec.EXCEPTION_COVERAGE_USED,
2701 p_CURRENCY_CODE => l_est_detail_rec.currency_code,
2702 p_CONVERSION_RATE => NULL,
2703 p_CONVERSION_TYPE_CODE => NULL,
2704 p_CONVERSION_RATE_DATE => NULL,
2705 p_INVOICE_TO_ORG_ID => l_est_detail_rec.INVOICE_TO_ORG_ID,
2706 p_SHIP_TO_ORG_ID => l_est_detail_rec.SHIP_TO_ORG_ID,
2707 p_PURCHASE_ORDER_NUM => l_est_detail_rec.PURCHASE_ORDER_NUM,
2708 p_ORDER_LINE_ID => l_est_detail_rec.ORDER_LINE_ID,
2709 p_LINE_TYPE_ID => l_est_detail_rec.LINE_TYPE_ID,
2710 p_LINE_CATEGORY_CODE => l_est_detail_rec.LINE_CATEGORY_CODE,
2711 p_PRICE_LIST_HEADER_ID => l_est_detail_rec.PRICE_LIST_ID,
2712 p_LINE_NUMBER => l_est_detail_rec.line_number,
2713 p_INVENTORY_ITEM_ID => l_est_detail_rec.INVENTORY_ITEM_ID_in,
2714 p_ITEM_REVISION => l_est_detail_rec.ITEM_REVISION,
2715 p_SERIAL_NUMBER => l_est_detail_rec.SERIAL_NUMBER,
2716 p_QUANTITY_REQUIRED => l_est_detail_rec.QUANTITY_REQUIRED,
2717 p_UNIT_OF_MEASURE_CODE => l_est_detail_rec.UNIT_OF_MEASURE_CODE,
2718 p_SELLING_PRICE => l_est_detail_rec.SELLING_PRICE,
2719 p_AFTER_WARRANTY_COST => l_est_detail_rec.AFTER_WARRANTY_COST,
2720 --p_FUNC_CURR_AFT_WARR_COST => l_est_detail_rec.FUNC_CURR_AFT_WARR_COST,
2721 p_BUSINESS_PROCESS_ID => l_est_detail_rec.BUSINESS_PROCESS_ID,
2722 p_TRANSACTION_TYPE_ID => l_est_detail_rec.TRANSACTION_TYPE_ID,
2723 p_CUSTOMER_PRODUCT_ID => l_est_detail_rec.CUSTOMER_PRODUCT_ID,
2724 p_ORDER_HEADER_ID => l_est_detail_rec.ORDER_HEADER_ID,
2725 p_INSTALLED_CP_RETURN_BY_DATE => l_est_detail_rec.INSTALLED_CP_RETURN_BY_DATE,
2726 p_NEW_CP_RETURN_BY_DATE => l_est_detail_rec.NEW_CP_RETURN_BY_DATE,
2727 p_INTERFACE_TO_OE_FLAG => nvl(l_est_detail_rec.INTERFACE_TO_OE_FLAG, 'N'),
2728 p_ROLLUP_FLAG => nvl(l_est_detail_rec.ROLLUP_FLAG, 'N'),
2729 p_no_charge_flag => nvl(l_est_detail_rec.NO_CHARGE_FLAG, 'N'),
2730 p_ADD_TO_ORDER_FLAG => nvl(l_est_detail_rec.ADD_TO_ORDER_FLAG, 'N'),
2731 p_RETURN_REASON_CODE => l_est_detail_rec.RETURN_REASON_CODE,
2732 p_GENERATED_BY_BCA_ENGINE_FLAG => nvl(l_est_detail_rec.GENERATED_BY_BCA_ENGINE, 'N'),
2733 p_TRANSACTION_INVENTORY_ORG => l_est_detail_rec.TRANSACTION_INVENTORY_ORG,
2734 p_TRANSACTION_SUB_INVENTORY => l_est_detail_rec.TRANSACTION_SUB_INVENTORY,
2735 p_CHARGE_LINE_TYPE => l_est_detail_rec.CHARGE_LINE_TYPE,
2736 p_SHIP_TO_ACCOUNT_ID => l_est_detail_rec.SHIP_TO_ACCOUNT_ID,
2737 p_INVOICE_TO_ACCOUNT_ID => l_est_detail_rec.BILL_TO_ACCOUNT_ID,
2738 p_SHIP_TO_CONTACT_ID => l_est_detail_rec.SHIP_TO_CONTACT_ID,
2739 p_BILL_TO_CONTACT_ID => l_est_detail_rec.BILL_TO_CONTACT_ID,
2740 p_LIST_PRICE => l_est_detail_rec.LIST_PRICE,--mviswana
2741 p_ACTIVITY_START_DATE_TIME => l_est_detail_rec.ACTIVITY_START_TIME,
2742 p_ACTIVITY_END_DATE_TIME => l_est_detail_rec.ACTIVITY_END_TIME,
2743 p_CONTRACT_DISCOUNT_AMOUNT => l_est_detail_rec.CONTRACT_DISCOUNT_AMOUNT,
2744 p_BILL_TO_PARTY_ID => l_est_detail_rec.BILL_TO_PARTY_ID,
2745 p_SHIP_TO_PARTY_ID => l_est_detail_rec.SHIP_TO_PARTY_ID,
2746 --p_tax_code => l_est_detail_rec.tax_code,
2747 --p_est_tax_amount => l_est_detail_rec.est_tax_amount,
2748 p_PRICING_CONTEXT => l_est_detail_rec.PRICING_CONTEXT,
2749 p_PRICING_ATTRIBUTE1 => l_est_detail_rec.PRICING_ATTRIBUTE1,
2750 p_PRICING_ATTRIBUTE2 => l_est_detail_rec.PRICING_ATTRIBUTE2,
2751 p_PRICING_ATTRIBUTE3 => l_est_detail_rec.PRICING_ATTRIBUTE3,
2752 p_PRICING_ATTRIBUTE4 => l_est_detail_rec.PRICING_ATTRIBUTE4,
2753 p_PRICING_ATTRIBUTE5 => l_est_detail_rec.PRICING_ATTRIBUTE5,
2754 p_PRICING_ATTRIBUTE6 => l_est_detail_rec.PRICING_ATTRIBUTE6,
2755 p_PRICING_ATTRIBUTE7 => l_est_detail_rec.PRICING_ATTRIBUTE7,
2756 p_PRICING_ATTRIBUTE8 => l_est_detail_rec.PRICING_ATTRIBUTE8,
2757 p_PRICING_ATTRIBUTE9 => l_est_detail_rec.PRICING_ATTRIBUTE9,
2758 p_PRICING_ATTRIBUTE10 => l_est_detail_rec.PRICING_ATTRIBUTE10,
2759 p_PRICING_ATTRIBUTE11 => l_est_detail_rec.PRICING_ATTRIBUTE11,
2760 p_PRICING_ATTRIBUTE12 => l_est_detail_rec.PRICING_ATTRIBUTE12,
2761 p_PRICING_ATTRIBUTE13 => l_est_detail_rec.PRICING_ATTRIBUTE13,
2762 p_PRICING_ATTRIBUTE14 => l_est_detail_rec.PRICING_ATTRIBUTE14,
2763 p_PRICING_ATTRIBUTE15 => l_est_detail_rec.PRICING_ATTRIBUTE15,
2764 p_PRICING_ATTRIBUTE16 => l_est_detail_rec.PRICING_ATTRIBUTE16,
2765 p_PRICING_ATTRIBUTE17 => l_est_detail_rec.PRICING_ATTRIBUTE17,
2766 p_PRICING_ATTRIBUTE18 => l_est_detail_rec.PRICING_ATTRIBUTE18,
2767 p_PRICING_ATTRIBUTE19 => l_est_detail_rec.PRICING_ATTRIBUTE19,
2768 p_PRICING_ATTRIBUTE20 => l_est_detail_rec.PRICING_ATTRIBUTE20,
2769 p_PRICING_ATTRIBUTE21 => l_est_detail_rec.PRICING_ATTRIBUTE21,
2770 p_PRICING_ATTRIBUTE22 => l_est_detail_rec.PRICING_ATTRIBUTE22,
2771 p_PRICING_ATTRIBUTE23 => l_est_detail_rec.PRICING_ATTRIBUTE23,
2772 p_PRICING_ATTRIBUTE24 => l_est_detail_rec.PRICING_ATTRIBUTE24,
2773 p_pricing_attribute25 => l_est_detail_rec.pricing_attribute25,
2774 p_pricing_attribute26 => l_est_detail_rec.pricing_attribute26,
2775 p_pricing_attribute27 => l_est_detail_rec.pricing_attribute27,
2776 p_pricing_attribute28 => l_est_detail_rec.pricing_attribute28,
2777 p_pricing_attribute29 => l_est_detail_rec.pricing_attribute29,
2778 p_pricing_attribute30 => l_est_detail_rec.pricing_attribute30,
2779 p_pricing_attribute31 => l_est_detail_rec.pricing_attribute31,
2780 p_pricing_attribute32 => l_est_detail_rec.pricing_attribute32,
2781 p_pricing_attribute33 => l_est_detail_rec.pricing_attribute33,
2782 p_pricing_attribute34 => l_est_detail_rec.pricing_attribute34,
2783 p_pricing_attribute35 => l_est_detail_rec.pricing_attribute35,
2784 p_pricing_attribute36 => l_est_detail_rec.pricing_attribute36,
2785 p_pricing_attribute37 => l_est_detail_rec.pricing_attribute37,
2786 p_pricing_attribute38 => l_est_detail_rec.pricing_attribute38,
2787 p_pricing_attribute39 => l_est_detail_rec.pricing_attribute39,
2788 p_pricing_attribute40 => l_est_detail_rec.pricing_attribute40,
2789 p_pricing_attribute41 => l_est_detail_rec.pricing_attribute41,
2790 p_pricing_attribute42 => l_est_detail_rec.pricing_attribute42,
2791 p_pricing_attribute43 => l_est_detail_rec.pricing_attribute43,
2792 p_pricing_attribute44 => l_est_detail_rec.pricing_attribute44,
2793 p_pricing_attribute45 => l_est_detail_rec.pricing_attribute45,
2794 p_pricing_attribute46 => l_est_detail_rec.pricing_attribute46,
2795 p_pricing_attribute47 => l_est_detail_rec.pricing_attribute47,
2796 p_pricing_attribute48 => l_est_detail_rec.pricing_attribute48,
2797 p_pricing_attribute49 => l_est_detail_rec.pricing_attribute49,
2798 p_pricing_attribute50 => l_est_detail_rec.pricing_attribute50,
2799 p_pricing_attribute51 => l_est_detail_rec.pricing_attribute51,
2800 p_pricing_attribute52 => l_est_detail_rec.pricing_attribute52,
2801 p_pricing_attribute53 => l_est_detail_rec.pricing_attribute53,
2802 p_pricing_attribute54 => l_est_detail_rec.pricing_attribute54,
2803 p_pricing_attribute55 => l_est_detail_rec.pricing_attribute55,
2804 p_pricing_attribute56 => l_est_detail_rec.pricing_attribute56,
2805 p_pricing_attribute57 => l_est_detail_rec.pricing_attribute57,
2806 p_pricing_attribute58 => l_est_detail_rec.pricing_attribute58,
2807 p_pricing_attribute59 => l_est_detail_rec.pricing_attribute59,
2808 p_pricing_attribute60 => l_est_detail_rec.pricing_attribute60,
2809 p_pricing_attribute61 => l_est_detail_rec.pricing_attribute61,
2810 p_pricing_attribute62 => l_est_detail_rec.pricing_attribute62,
2811 p_pricing_attribute63 => l_est_detail_rec.pricing_attribute63,
2812 p_pricing_attribute64 => l_est_detail_rec.pricing_attribute64,
2813 p_pricing_attribute65 => l_est_detail_rec.pricing_attribute65,
2814 p_pricing_attribute66 => l_est_detail_rec.pricing_attribute66,
2815 p_pricing_attribute67 => l_est_detail_rec.pricing_attribute67,
2816 p_pricing_attribute68 => l_est_detail_rec.pricing_attribute68,
2817 p_pricing_attribute69 => l_est_detail_rec.pricing_attribute69,
2818 p_pricing_attribute70 => l_est_detail_rec.pricing_attribute70,
2819 p_pricing_attribute71 => l_est_detail_rec.pricing_attribute71,
2820 p_pricing_attribute72 => l_est_detail_rec.pricing_attribute72,
2821 p_pricing_attribute73 => l_est_detail_rec.pricing_attribute73,
2822 p_pricing_attribute74 => l_est_detail_rec.pricing_attribute74,
2823 p_pricing_attribute75 => l_est_detail_rec.pricing_attribute75,
2824 p_pricing_attribute76 => l_est_detail_rec.pricing_attribute76,
2825 p_pricing_attribute77 => l_est_detail_rec.pricing_attribute77,
2826 p_pricing_attribute78 => l_est_detail_rec.pricing_attribute78,
2827 p_pricing_attribute79 => l_est_detail_rec.pricing_attribute79,
2828 p_pricing_attribute80 => l_est_detail_rec.pricing_attribute80,
2829 p_pricing_attribute81 => l_est_detail_rec.pricing_attribute81,
2830 p_pricing_attribute82 => l_est_detail_rec.pricing_attribute82,
2831 p_pricing_attribute83 => l_est_detail_rec.pricing_attribute83,
2832 p_pricing_attribute84 => l_est_detail_rec.pricing_attribute84,
2833 p_pricing_attribute85 => l_est_detail_rec.pricing_attribute85,
2834 p_pricing_attribute86 => l_est_detail_rec.pricing_attribute86,
2835 p_pricing_attribute87 => l_est_detail_rec.pricing_attribute87,
2836 p_pricing_attribute88 => l_est_detail_rec.pricing_attribute88,
2837 p_pricing_attribute89 => l_est_detail_rec.pricing_attribute89,
2838 p_pricing_attribute90 => l_est_detail_rec.pricing_attribute90,
2839 p_pricing_attribute91 => l_est_detail_rec.pricing_attribute91,
2840 p_pricing_attribute92 => l_est_detail_rec.pricing_attribute92,
2841 p_pricing_attribute93 => l_est_detail_rec.pricing_attribute93,
2842 p_pricing_attribute94 => l_est_detail_rec.pricing_attribute94,
2843 p_pricing_attribute95 => l_est_detail_rec.pricing_attribute95,
2844 p_pricing_attribute96 => l_est_detail_rec.pricing_attribute96,
2845 p_pricing_attribute97 => l_est_detail_rec.pricing_attribute97,
2846 p_pricing_attribute98 => l_est_detail_rec.pricing_attribute98,
2847 p_pricing_attribute99 => l_est_detail_rec.pricing_attribute99,
2848 p_pricing_attribute100 => l_est_detail_rec.pricing_attribute100,
2849 p_attribute1 => l_est_detail_rec.attribute1,
2850 p_attribute2 => l_est_detail_rec.attribute2,
2851 p_attribute3 => l_est_detail_rec.attribute3,
2852 p_attribute4 => l_est_detail_rec.attribute4,
2853 p_attribute5 => l_est_detail_rec.attribute5,
2854 p_attribute6 => l_est_detail_rec.attribute6,
2855 p_attribute7 => l_est_detail_rec.attribute7,
2856 p_attribute8 => l_est_detail_rec.attribute8,
2857 p_attribute9 => l_est_detail_rec.attribute9,
2858 p_attribute10 => l_est_detail_rec.attribute10,
2859 p_attribute11 => l_est_detail_rec.attribute11,
2860 p_attribute12 => l_est_detail_rec.attribute12,
2861 p_attribute13 => l_est_detail_rec.attribute13,
2862 p_attribute14 => l_est_detail_rec.attribute14,
2863 p_attribute15 => l_est_detail_rec.attribute15,
2864 p_context => l_est_detail_rec.context,
2865 --p_organization_id => l_est_detail_rec.organization_id,
2866 p_coverage_bill_rate_id => l_est_detail_rec.coverage_bill_rate_id,
2867 p_coverage_billing_type_id => null,
2868 p_txn_billing_type_id => l_est_detail_rec.txn_billing_type_id,
2869 p_submit_restriction_message => l_est_detail_rec.submit_restriction_message,
2870 p_submit_error_message => l_est_detail_rec.submit_error_message,
2871 p_submit_from_system => l_est_detail_rec.submit_from_system,
2872 p_line_submitted => nvl(l_est_detail_rec.line_submitted_flag, 'N'),
2873 p_last_update_date => sysdate,
2874 p_last_update_login => p_login_id,
2875 p_last_updated_by => p_user_id,
2876 p_creation_date => sysdate,
2877 p_created_by => p_user_id,
2878 /* Credit Card 9358401 */
2879 p_instrument_payment_use_id => l_est_detail_rec.instrument_payment_use_id,
2880 -- Charges Logistics Project
2881 p_shipping_method => l_est_detail_rec.shipping_method,
2882 p_arrival_date_time => l_est_detail_rec.arrival_date_time,
2883 p_return_type => l_est_detail_rec.return_type,
2884 p_parent_instance_id => l_est_detail_rec.parent_instance_id,
2885 p_shipping_distance => l_est_detail_rec.distance,
2886 p_need_by_date => l_est_detail_rec.need_by_date,
2887 --12.2.2 Service Projects Integration (below 3 params)
2888 p_project_id => l_est_detail_rec.project_id,
2889 p_project_task_id => l_est_detail_rec.project_task_id,
2890 p_expenditure_org_id => l_est_detail_rec.expenditure_org_id
2891 );
2892
2893 -- Make the postprocessing call to the user hooks
2894 --
2895 -- Post call to the customer type user hook
2896 --
2897 IF jtf_usr_hks.Ok_To_Execute('CS_CHARGE_DETAILS_PVT',
2898 'Update_Charge_Details',
2899 'A','C') THEN
2900
2901 CS_CHARGE_DETAILS_CUHK.Update_Charge_Details_Post(
2902 p_api_version => l_api_version,
2903 p_init_msg_list => FND_API.G_FALSE,
2904 p_commit => p_commit,
2905 p_validation_level => p_validation_level,
2906 x_return_status => l_return_status,
2907 x_msg_count => x_msg_count,
2908 x_object_version_number => x_object_version_number,
2909 x_estimate_detail_id => l_ed_id,
2910 x_msg_data => x_msg_data,
2911 p_resp_appl_id => p_resp_appl_id,
2912 p_resp_id => p_resp_id,
2913 p_user_id => p_user_id,
2914 p_login_id => p_login_id,
2915 p_transaction_control => p_transaction_control,
2916 p_est_detail_rec => p_est_detail_rec);
2917
2918 IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
2919 --DBMS_OUTPUT.PUT_LINE('Returned Error Status from the Pre Customer User Hook');
2920 FND_MESSAGE.Set_Name('CS', 'CS_API_CHG_ERR_PST_CUST_USR_HK');
2921 FND_MESSAGE.Set_Token('API_NAME', l_api_name_full);
2922 FND_MSG_PUB.Add;
2923 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
2924 END IF;
2925
2926 END IF;
2927 --
2928 --
2929 -- Post call to the Vertical Type User Hook
2930 --
2931 IF jtf_usr_hks.Ok_To_Execute('CS_CHARGE_DETAILS_PVT',
2932 'Update_Charge_Details',
2933 'A', 'V') THEN
2934
2935 CS_CHARGE_DETAILS_VUHK.Update_Charge_Details_Post(
2936 p_api_version => l_api_version,
2937 p_init_msg_list => FND_API.G_FALSE,
2938 p_commit => p_commit,
2939 p_validation_level => p_validation_level,
2940 x_return_status => l_return_status,
2941 x_msg_count => x_msg_count,
2942 x_object_version_number => x_object_version_number,
2943 x_estimate_detail_id => l_ed_id,
2944 x_msg_data => x_msg_data,
2945 p_resp_appl_id => p_resp_appl_id,
2946 p_resp_id => p_resp_id,
2947 p_user_id => p_user_id,
2948 p_login_id => p_login_id,
2949 p_transaction_control => p_transaction_control,
2950 p_est_detail_rec => p_est_detail_rec);
2951
2952
2953 IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
2954 FND_MESSAGE.Set_Name('CS', 'CS_API_CHG_ERR_PST_VERT_USR_HK');
2955 FND_MESSAGE.Set_Token('API_NAME', l_api_name_full);
2956 FND_MSG_PUB.Add;
2957 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
2958 END IF;
2959
2960 END IF;
2961 --
2962 --
2963
2964 --Standard check of p_commit
2965 IF FND_API.To_Boolean(p_commit) THEN
2966 COMMIT WORK;
2967 END IF;
2968
2969 -- Standard call to get message count and if count is 1, get message info
2970 FND_MSG_PUB.Count_And_Get
2971 (p_count => x_msg_count,
2972 p_data => x_msg_data,
2973 p_encoded => FND_API.G_FALSE) ;
2974
2975 -- Standard check of p_commit
2976 IF FND_API.To_Boolean(p_commit) THEN
2977 COMMIT WORK;
2978 END IF;
2979
2980 -- Standard call to get message count and if count is 1, get message info
2981 FND_MSG_PUB.Count_And_Get
2982 ( p_count => x_msg_count,
2983 p_data => x_msg_data
2984 );
2985
2986
2987 EXCEPTION
2988 WHEN FND_API.G_EXC_ERROR THEN
2989 IF FND_API.To_Boolean(p_transaction_control) THEN
2990 ROLLBACK TO Update_Charge_Details_PVT;
2991 END IF ;
2992 x_return_status := FND_API.G_RET_STS_ERROR;
2993 FND_MSG_PUB.Count_And_Get(
2994 p_count => x_msg_count,
2995 p_data => x_msg_data,
2996 p_encoded => FND_API.G_FALSE) ;
2997
2998 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
2999 IF FND_API.To_Boolean(p_transaction_control) THEN
3000 ROLLBACK TO Update_Charge_Details_PVT;
3001 END IF ;
3002
3003 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
3004
3005 FND_MSG_PUB.Count_And_Get(p_count => x_msg_count,
3006 p_data => x_msg_data,
3007 p_encoded => FND_API.G_FALSE) ;
3008 WHEN OTHERS THEN
3009 IF FND_API.To_Boolean(p_transaction_control) THEN
3010 ROLLBACK TO Update_Charge_Details_PVT;
3011
3012 END IF ;
3013
3014 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
3015
3016 IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
3017 FND_MSG_PUB.Add_Exc_Msg(G_PKG_NAME, l_api_name);
3018 END IF;
3019
3020 FND_MSG_PUB.Count_And_Get(p_count => x_msg_count,
3021 p_data => x_msg_data,
3022 p_encoded => FND_API.G_FALSE) ;
3023
3024 END Update_Charge_Details;
3025
3026 --==========================================================
3027 -- API Delete Charge Details
3028 -- Purpose: Delete a given a charge detail line
3029 -- from CS_ESTIMATE_DETAILS based on the unique id
3030 -- estimate_detail_id
3031 --==========================================================
3032
3033 Procedure Delete_Charge_Details(
3034 p_api_version IN NUMBER,
3035 p_init_msg_list IN VARCHAR2 := FND_API.G_FALSE,
3036 p_commit IN VARCHAR2 := FND_API.G_FALSE,
3037 p_validation_level IN NUMBER := FND_API.G_VALID_LEVEL_FULL,
3038 x_return_status OUT NOCOPY VARCHAR2,
3039 x_msg_count OUT NOCOPY NUMBER,
3040 x_msg_data OUT NOCOPY VARCHAR2,
3041 p_transaction_control IN VARCHAR2 := FND_API.G_TRUE,
3042 p_estimate_detail_id IN NUMBER := NULL) AS
3043
3044 l_api_name CONSTANT VARCHAR2(30) := 'Delete_Charge_Details' ;
3045 l_api_name_full CONSTANT VARCHAR2(100) := G_PKG_NAME || '.' || l_api_name ;
3046 l_log_module CONSTANT VARCHAR2(255) := 'cs.plsql.' || l_api_name_full || '.';
3047 l_api_version CONSTANT NUMBER := 1.0 ;
3048
3049 l_resp_appl_id NUMBER ;
3050 l_resp_id NUMBER ;
3051 l_user_id NUMBER ;
3052 l_login_id NUMBER ;
3053 l_org_id NUMBER := NULL ;
3054 l_order_line_id NUMBER ;
3055 l_gen_bca_flag VARCHAR2(1);
3056 l_charge_line_type VARCHAR2(30);
3057 l_return_status VARCHAR2(1) ;
3058
3059 l_estimate_detail_id NUMBER := p_estimate_detail_id ;
3060 l_charge_det_rec CS_Charge_Details_PUB.Charges_Rec_Type;
3061
3062
3063 l_prog_name CONSTANT VARCHAR2(61) := G_PKG_NAME||'.'||'delete_charge_details';
3064
3065
3066 BEGIN
3067
3068 --Standard Start of API Savepoint
3069 IF FND_API.To_Boolean( p_transaction_control ) THEN
3070 SAVEPOINT Delete_Charge_Details_PUB ;
3071 END IF ;
3072
3073 --Standard Call to check API compatibility
3074 IF NOT FND_API.Compatible_API_Call(l_api_version,
3075 p_api_version,
3076 l_api_name,
3077 G_PKG_NAME) THEN
3078 RAISE FND_API.G_EXC_UNEXPECTED_ERROR ;
3079 END IF ;
3080
3081 --Initialize the message list if p_msg_list is set to TRUE
3082 IF FND_API.To_Boolean(p_init_msg_list) THEN
3083 FND_MSG_PUB.initialize ;
3084 END IF ;
3085
3086 --Initialize the API Return Success to True
3087 x_return_status := FND_API.G_RET_STS_SUCCESS ;
3088
3089 ----------------------- FND Logging -----------------------------------
3090 IF FND_LOG.level_procedure >= FND_LOG.g_current_runtime_level
3091 THEN
3092 FND_LOG.String
3093 ( FND_LOG.level_procedure , L_LOG_MODULE || 'start'
3094 , 'Inside ' || L_API_NAME_FULL || ', called with parameters below:'
3095 );
3096 FND_LOG.String
3097 ( FND_LOG.level_procedure , L_LOG_MODULE || ''
3098 , 'p_api_version:' || p_api_version
3099 );
3100 FND_LOG.String
3101 ( FND_LOG.level_procedure , L_LOG_MODULE || ''
3102 , 'p_init_msg_list:' || p_init_msg_list
3103 );
3104 FND_LOG.String
3105 ( FND_LOG.level_procedure , L_LOG_MODULE || ''
3106 , 'p_commit:' || p_commit
3107 );
3108 FND_LOG.String
3109 ( FND_LOG.level_procedure , L_LOG_MODULE || ''
3110 , 'p_validation_level:' || p_validation_level
3111 );
3112 FND_LOG.String
3113 ( FND_LOG.level_procedure , L_LOG_MODULE || ''
3114 , 'p_transaction_control:' || p_transaction_control
3115 );
3116 FND_LOG.String
3117 ( FND_LOG.level_procedure , L_LOG_MODULE || ''
3118 , 'p_estimate_detail_id:' || p_estimate_detail_id
3119 );
3120
3121 END IF;
3122
3123 --Check for mandatory params estimate detail id
3124 --If not passed or are null then raise error
3125
3126 IF (p_estimate_detail_id IS NULL) THEN
3127 Add_Null_Parameter_Msg(l_api_name_full,
3128 'p_estimate_detail_id') ;
3129
3130 Add_Invalid_Argument_Msg(l_api_name_full,
3131 to_char(p_estimate_detail_id),
3132 'p_estimate_detail_id');
3133 RAISE FND_API.G_EXC_ERROR ;
3134 END IF ;
3135
3136 -- Check to see if Transactions exits in Order Management
3137
3138 Do_Txns_Exist(l_api_name_full,
3139 p_estimate_detail_id,
3140 l_order_line_id,
3141 l_gen_bca_flag,
3142 l_charge_line_type,
3143 l_return_status) ;
3144
3145 IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
3146 RAISE FND_API.G_EXC_ERROR ;
3147 END IF ;
3148
3149 IF l_order_line_id IS NOT NULL THEN
3150 Cannot_Delete_Line_Msg(l_api_name_full) ;
3151 RAISE FND_API.G_EXC_ERROR ;
3152 END IF ;
3153
3154 --Bug Fix for Bug # 3136630
3155
3156 --IF l_gen_bca_flag IS NOT NULL THEN
3157 -- IF l_gen_bca_flag = 'Y' AND
3158 IF l_charge_line_type = 'IN PROGRESS' THEN
3159 Cannot_Delete_Line_Msg(l_api_name_full) ;
3160 RAISE FND_API.G_EXC_ERROR ;
3161 END IF ;
3162 -- END IF;
3163
3164 DELETE FROM
3165 CS_ESTIMATE_DETAILS
3166 WHERE ESTIMATE_DETAIL_ID = p_estimate_detail_id ;
3167
3168 --End of API Body
3169 --Standard Check of p_commit
3170 IF FND_API.To_Boolean( p_commit ) THEN
3171 COMMIT WORK ;
3172 END IF ;
3173
3174 --Standard call to get message count and if count is 1 , get message info
3175 FND_MSG_PUB.Count_And_Get(p_count =>x_msg_count,
3176 p_data => x_msg_data) ;
3177
3178 --Begin Exception Handling
3179
3180 EXCEPTION
3181
3182 WHEN FND_API.G_EXC_ERROR THEN
3183 IF FND_API.To_Boolean( p_transaction_control ) THEN
3184 ROLLBACK TO Delete_Charge_Details_PUB;
3185 END IF ;
3186 x_return_status := FND_API.G_RET_STS_ERROR ;
3187
3188 FND_MSG_PUB.Count_And_Get(p_count => x_msg_count,
3189 p_data => x_msg_data,
3190 p_encoded => FND_API.G_FALSE) ;
3191
3192
3193
3194 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
3195 IF FND_API.To_Boolean( p_transaction_control ) THEN
3196 ROLLBACK TO Delete_Charge_Details_PUB;
3197 END IF ;
3198 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
3199
3200 FND_MSG_PUB.Count_And_Get(p_count => x_msg_count,
3201 p_data => x_msg_data,
3202 p_encoded => FND_API.G_FALSE) ;
3203
3204 WHEN OTHERS THEN
3205 IF FND_API.To_Boolean( p_transaction_control ) THEN
3206 ROLLBACK TO Delete_Charge_Details_PUB;
3207 END IF ;
3208 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
3209 IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
3210 FND_MSG_PUB.Add_Exc_Msg(G_PKG_NAME,l_api_name);
3211 END IF ;
3212 FND_MSG_PUB.Count_And_Get(p_count => x_msg_count,
3213 p_data => x_msg_data,
3214 p_encoded => FND_API.G_FALSE) ;
3215
3216 END Delete_Charge_Details; -- End of Procedure Delete Charge Details
3217
3218
3219
3220 --==================================
3221 --Copy Estimates
3222 --==================================
3223 -- New API added for 11.5.10
3224 -- mviswana
3225 Procedure Copy_Estimate(
3226 p_api_version IN NUMBER,
3227 p_init_msg_list IN VARCHAR2 := FND_API.G_FALSE,
3228 p_commit IN VARCHAR2 := FND_API.G_FALSE,
3229 p_transaction_control IN VARCHAR2 := FND_API.G_TRUE,
3230 p_estimate_detail_id IN NUMBER := NULL,
3231 x_estimate_detail_id OUT NOCOPY NUMBER,
3232 x_return_status OUT NOCOPY VARCHAR2,
3233 x_msg_count OUT NOCOPY NUMBER,
3234 x_msg_data OUT NOCOPY VARCHAR2 ) IS
3235
3236 l_api_version NUMBER := 1.0 ;
3237 l_api_name VARCHAR2(30) := 'Copy_Estimate' ;
3238 l_api_name_full VARCHAR2(100) := G_PKG_NAME || '.' || l_api_name ;
3239 l_log_module CONSTANT VARCHAR2(255) := 'cs.plsql.' || l_api_name_full || '.';
3240 l_return_status VARCHAR2(1) ;
3241 l_est_detail_id NUMBER;
3242 l_line_number NUMBER;
3243 l_obj_ver_num NUMBER;
3244 l_est_detail_rec CS_Charge_Details_PUB.Charges_Rec_Type;
3245
3246 cursor c_charges_rec(p_estimate_detail_id NUMBER) IS
3247 select *
3248 from cs_estimate_details
3249 where estimate_detail_id = p_estimate_detail_id;
3250
3251 v_charges_rec c_charges_rec%ROWTYPE;
3252 x_cost_id number;
3253
3254 l_prog_name CONSTANT VARCHAR2(61) := G_PKG_NAME||'.'||l_api_name;
3255
3256 BEGIN
3257
3258 --DBMS_OUTPUT.PUT_LINE('BEGIN copy_estimates');
3259
3260 -- Standard start of API savepoint
3261 IF FND_API.To_Boolean(p_transaction_control) THEN
3262 SAVEPOINT Copy_Estimate_PVT;
3263 END IF ;
3264
3265 -- Standard call to check for call compatibility
3266 IF NOT FND_API.Compatible_API_Call(l_api_version,
3267 p_api_version,
3268 l_api_name,
3269 G_PKG_NAME) THEN
3270 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
3271 END IF;
3272
3273 -- Initialize message list if p_init_msg_list is set to TRUE
3274 IF FND_API.To_Boolean(p_init_msg_list) THEN
3275 FND_MSG_PUB.Initialize;
3276 END IF;
3277
3278 -- Initialize API return status to success
3279 x_return_status := FND_API.G_RET_STS_SUCCESS;
3280
3281 ----------------------- FND Logging -----------------------------------
3282 IF FND_LOG.level_procedure >= FND_LOG.g_current_runtime_level
3283 THEN
3284 FND_LOG.String
3285 ( FND_LOG.level_procedure , L_LOG_MODULE || 'start'
3286 , 'Inside ' || L_API_NAME_FULL || ', called with parameters below:'
3287 );
3288 FND_LOG.String
3289 ( FND_LOG.level_procedure , L_LOG_MODULE || ''
3290 , 'p_api_version:' || p_api_version
3291 );
3292 FND_LOG.String
3293 ( FND_LOG.level_procedure , L_LOG_MODULE || ''
3294 , 'p_init_msg_list:' || p_init_msg_list
3295 );
3296 FND_LOG.String
3297 ( FND_LOG.level_procedure , L_LOG_MODULE || ''
3298 , 'p_commit:' || p_commit
3299 );
3300 FND_LOG.String
3301 ( FND_LOG.level_procedure , L_LOG_MODULE || ''
3302 , 'p_transaction_control:' || p_transaction_control
3303 );
3304 FND_LOG.String
3305 ( FND_LOG.level_procedure , L_LOG_MODULE || ''
3306 , 'p_estimate_detail_id:' || p_estimate_detail_id
3307 );
3308
3309 END IF;
3310
3311 -- ======================================================================
3312 -- Actual start of the program body.
3313 -- ======================================================================
3314
3315 -- =========================================
3316 -- Validate the incoming estimate_detail_id
3317 -- =========================================
3318
3319 IF p_estimate_detail_id IS NULL THEN
3320 FND_MESSAGE.SET_NAME('CS', 'CS_CHG_NOT_A_VALID_CHARGE_LINE');
3321 FND_MESSAGE.SET_TOKEN('ESTIMATE_DETAIL_ID', p_estimate_detail_id);
3322 FND_MSG_PUB.ADD;
3323 RAISE FND_API.G_EXC_ERROR;
3324 END IF;
3325
3326 --DBMS_OUTPUT.PUT_LINE('passed 1st val');
3327
3328 OPEN c_charges_rec(p_estimate_detail_id);
3329 FETCH c_charges_rec INTO v_charges_rec;
3330 IF c_charges_rec%NOTFOUND THEN
3331 CLOSE c_charges_rec;
3332 FND_MESSAGE.SET_NAME('CS', 'CS_CHG_NOT_A_VALID_CHARGE_LINE');
3333 FND_MESSAGE.SET_TOKEN('ESTIMATE_DETAIL_ID', p_estimate_detail_id);
3334 FND_MSG_PUB.ADD;
3335 RAISE FND_API.G_EXC_ERROR;
3336 END IF;
3337 CLOSE c_charges_rec;
3338
3339 --DBMS_OUTPUT.PUT_LINE('passed 2ndst val');
3340
3341 IF v_charges_rec.charge_line_type <> 'ESTIMATE' THEN
3342 FND_MESSAGE.SET_NAME('CS', 'CS_CHG_NOT_AN_ESTIMATE');
3343 FND_MESSAGE.SET_TOKEN('ESTIMATE_DETAIL_ID', p_estimate_detail_id);
3344 FND_MSG_PUB.ADD;
3345 RAISE FND_API.G_EXC_ERROR;
3346 END IF;
3347
3348 --DBMS_OUTPUT.PUT_LINE('passed 3rd val');
3349
3350 --populate the charges rec with values from v_charges_rec
3351
3352 l_est_detail_rec.incident_id := v_charges_rec.incident_id;
3353 l_est_detail_rec.charge_line_type := 'ACTUAL';
3354 -- fix for bug:5125385
3355 -- l_est_detail_rec.line_number := 1;
3356 l_est_detail_rec.line_number := NULL;
3357 l_est_detail_rec.business_process_id := v_charges_rec.business_process_id;
3358 l_est_detail_rec.transaction_type_id := v_charges_rec.transaction_type_id;
3359 l_est_detail_rec.inventory_item_id_in := v_charges_rec.inventory_item_id;
3360 l_est_detail_rec.item_revision := v_charges_rec.item_revision;
3361 l_est_detail_rec.billing_flag := NULL;
3362 l_est_detail_rec.txn_billing_type_id := v_charges_rec.txn_billing_type_id;
3363 l_est_detail_rec.unit_of_measure_code := v_charges_rec.unit_of_measure_code;
3364 l_est_detail_rec.quantity_required := v_charges_rec.quantity_required;
3365 l_est_detail_rec.return_reason_code := v_charges_rec.return_reason_code;
3366 l_est_detail_rec.customer_product_id := v_charges_rec.customer_product_id;
3367 l_est_detail_rec.serial_number := v_charges_rec.serial_number;
3368 l_est_detail_rec.installed_cp_return_by_date := v_charges_rec.installed_cp_return_by_date;
3369 l_est_detail_rec.new_cp_return_by_date := v_charges_rec.new_cp_return_by_date;
3370 l_est_detail_rec.bill_to_party_id := v_charges_rec.bill_to_party_id;
3371 l_est_detail_rec.bill_to_account_id := v_charges_rec.INVOICE_TO_ACCOUNT_ID;
3372 l_est_detail_rec.bill_to_contact_id := v_charges_rec.bill_to_contact_id;
3373 l_est_detail_rec.invoice_to_org_id := v_charges_rec.invoice_to_org_id;
3374 l_est_detail_rec.ship_to_party_id := v_charges_rec.ship_to_party_id;
3375 l_est_detail_rec.ship_to_account_id := v_charges_rec.ship_to_account_id;
3376 l_est_detail_rec.ship_to_contact_id := v_charges_rec.ship_to_contact_id;
3377 l_est_detail_rec.ship_to_org_id := v_charges_rec.ship_to_org_id;
3378 l_est_detail_rec.contract_id := v_charges_rec.contract_id;
3379 l_est_detail_rec.contract_line_id := v_charges_rec.contract_line_id;
3380 l_est_detail_rec.coverage_id := v_charges_rec.coverage_id;
3381 l_est_detail_rec.coverage_txn_group_id := v_charges_rec.coverage_txn_group_id;
3382 l_est_detail_rec.coverage_bill_rate_id := v_charges_rec.coverage_bill_rate_id;
3383 l_est_detail_rec.coverage_billing_type_id := v_charges_rec.coverage_billing_type_id;
3384 l_est_detail_rec.price_list_id := v_charges_rec.PRICE_LIST_HEADER_ID;
3385 l_est_detail_rec.currency_code := v_charges_rec.currency_code;
3386 l_est_detail_rec.purchase_order_num := v_charges_rec.purchase_order_num;
3387 l_est_detail_rec.list_price := v_charges_rec.list_price;
3388
3389
3390
3391 --how do we know this we do not trap this value
3392 l_est_detail_rec.con_pct_over_list_price := null;
3393 l_est_detail_rec.selling_price := v_charges_rec.selling_price;
3394 l_est_detail_rec.contract_discount_amount := v_charges_rec.contract_discount_amount;
3395
3396 --how do we know when to apply contract discount if we do not trap this value
3397 l_est_detail_rec.apply_contract_discount := 'N' ;
3398
3399
3400 l_est_detail_rec.after_warranty_cost := v_charges_rec.after_warranty_cost;
3401 l_est_detail_rec.transaction_inventory_org := v_charges_rec.transaction_inventory_org;
3402 l_est_detail_rec.transaction_sub_inventory := v_charges_rec.transaction_sub_inventory;
3403 l_est_detail_rec.rollup_flag := v_charges_rec.rollup_flag;
3404 l_est_detail_rec.add_to_order_flag := v_charges_rec.add_to_order_flag;
3405 l_est_detail_rec.order_header_id := v_charges_rec.order_header_id;
3406 l_est_detail_rec.interface_to_oe_flag := v_charges_rec.interface_to_oe_flag;
3407 l_est_detail_rec.no_charge_flag := v_charges_rec.no_charge_flag;
3408 l_est_detail_rec.line_category_code := v_charges_rec.line_category_code;
3409 l_est_detail_rec.line_type_id := v_charges_rec.line_type_id;
3410 l_est_detail_rec.order_line_id := v_charges_rec.order_line_id;
3411 l_est_detail_rec.conversion_rate := v_charges_rec.conversion_rate;
3412 l_est_detail_rec.conversion_type_code := v_charges_rec.conversion_type_code;
3413 l_est_detail_rec.conversion_rate_date := v_charges_rec.conversion_rate_date;
3414 l_est_detail_rec.original_source_id := v_charges_rec.original_source_id;
3415 l_est_detail_rec.original_source_code := v_charges_rec.original_source_code;
3416 l_est_detail_rec.source_id := v_charges_rec.source_id;
3417 l_est_detail_rec.source_code := v_charges_rec.source_code;
3418 l_est_detail_rec.org_id := v_charges_rec.org_id;
3419
3420
3421
3422 --Error Handling
3423 l_est_detail_rec.submit_restriction_message := v_charges_rec.submit_restriction_message;
3424 l_est_detail_rec.submit_error_message := v_charges_rec.submit_error_message;
3425
3426 --DBMS_OUTPUT.PUT_LINE('submit_restriction_message is '||l_est_detail_rec.submit_restriction_message);
3427 --DBMS_OUTPUT.PUT_LINE('submit_error_message is '||l_est_detail_rec.submit_error_message);
3428
3429
3430 --Auto Submission Process
3431 l_est_detail_rec.submit_from_system := v_charges_rec.submit_from_system;
3432
3433 --Billing Engine
3434 --Fixed Bug # 3362046
3435 l_est_detail_rec.activity_start_time := v_charges_rec.activity_start_date_time;
3436 l_est_detail_rec.activity_end_time := v_charges_rec.activity_end_date_time;
3437 l_est_detail_rec.generated_by_bca_engine := v_charges_rec.generated_by_bca_engine_flag;
3438
3439 l_est_detail_rec.attribute1 := v_charges_rec.attribute1;
3440 l_est_detail_rec.attribute2 := v_charges_rec.attribute2;
3441 l_est_detail_rec.attribute3 := v_charges_rec.attribute3;
3442 l_est_detail_rec.attribute4 := v_charges_rec.attribute4;
3443 l_est_detail_rec.attribute5 := v_charges_rec.attribute5;
3444 l_est_detail_rec.attribute6 := v_charges_rec.attribute6;
3445 l_est_detail_rec.attribute7 := v_charges_rec.attribute7;
3446 l_est_detail_rec.attribute8 := v_charges_rec.attribute8;
3447 l_est_detail_rec.attribute9 := v_charges_rec.attribute9;
3448 l_est_detail_rec.attribute10 := v_charges_rec.attribute10;
3449 l_est_detail_rec.attribute11 := v_charges_rec.attribute11;
3450 l_est_detail_rec.attribute12 := v_charges_rec.attribute12;
3451 l_est_detail_rec.attribute13 := v_charges_rec.attribute13;
3452 l_est_detail_rec.attribute14 := v_charges_rec.attribute14;
3453 l_est_detail_rec.attribute15 := v_charges_rec.attribute15;
3454 l_est_detail_rec.context := v_charges_rec.context;
3455 l_est_detail_rec.pricing_context := v_charges_rec.pricing_context;
3456 l_est_detail_rec.pricing_attribute1 := v_charges_rec.pricing_attribute1;
3457 l_est_detail_rec.pricing_attribute2 := v_charges_rec.pricing_attribute2 ;
3458 l_est_detail_rec.pricing_attribute3 := v_charges_rec.pricing_attribute3 ;
3459 l_est_detail_rec.pricing_attribute4 := v_charges_rec.pricing_attribute4 ;
3460 l_est_detail_rec.pricing_attribute5 := v_charges_rec.pricing_attribute5 ;
3461 l_est_detail_rec.pricing_attribute6 := v_charges_rec.pricing_attribute6 ;
3462 l_est_detail_rec.pricing_attribute7 := v_charges_rec.pricing_attribute7 ;
3463 l_est_detail_rec.pricing_attribute8 := v_charges_rec.pricing_attribute8 ;
3464 l_est_detail_rec.pricing_attribute9 := v_charges_rec.pricing_attribute9 ;
3465 l_est_detail_rec.pricing_attribute10 := v_charges_rec.pricing_attribute10;
3466 l_est_detail_rec.pricing_attribute11 := v_charges_rec.pricing_attribute11;
3467 l_est_detail_rec.pricing_attribute12 := v_charges_rec.pricing_attribute12;
3468 l_est_detail_rec.pricing_attribute13 := v_charges_rec.pricing_attribute13;
3469 l_est_detail_rec.pricing_attribute14 := v_charges_rec.pricing_attribute14;
3470 l_est_detail_rec.pricing_attribute15 := v_charges_rec.pricing_attribute15;
3471 l_est_detail_rec.pricing_attribute16 := v_charges_rec.pricing_attribute16;
3472 l_est_detail_rec.pricing_attribute17 := v_charges_rec.pricing_attribute17;
3473 l_est_detail_rec.pricing_attribute18 := v_charges_rec.pricing_attribute18;
3474 l_est_detail_rec.pricing_attribute19 := v_charges_rec.pricing_attribute19;
3475 l_est_detail_rec.pricing_attribute20 := v_charges_rec.pricing_attribute20;
3476 l_est_detail_rec.pricing_attribute21 := v_charges_rec.pricing_attribute21;
3477 l_est_detail_rec.pricing_attribute22 := v_charges_rec.pricing_attribute22;
3478 l_est_detail_rec.pricing_attribute23 := v_charges_rec.pricing_attribute23;
3479 l_est_detail_rec.pricing_attribute24 := v_charges_rec.pricing_attribute24;
3480 l_est_detail_rec.pricing_attribute25 := v_charges_rec.pricing_attribute25;
3481 l_est_detail_rec.pricing_attribute26 := v_charges_rec.pricing_attribute26;
3482 l_est_detail_rec.pricing_attribute27 := v_charges_rec.pricing_attribute27;
3483 l_est_detail_rec.pricing_attribute28 := v_charges_rec.pricing_attribute28;
3484 l_est_detail_rec.pricing_attribute29 := v_charges_rec.pricing_attribute29;
3485 l_est_detail_rec.pricing_attribute30 := v_charges_rec.pricing_attribute30;
3486 l_est_detail_rec.pricing_attribute31 := v_charges_rec.pricing_attribute31;
3487 l_est_detail_rec.pricing_attribute32 := v_charges_rec.pricing_attribute32;
3488 l_est_detail_rec.pricing_attribute33 := v_charges_rec.pricing_attribute33;
3489 l_est_detail_rec.pricing_attribute34 := v_charges_rec.pricing_attribute34;
3490 l_est_detail_rec.pricing_attribute35 := v_charges_rec.pricing_attribute35;
3491 l_est_detail_rec.pricing_attribute36 := v_charges_rec.pricing_attribute36;
3492 l_est_detail_rec.pricing_attribute37 := v_charges_rec.pricing_attribute37;
3493 l_est_detail_rec.pricing_attribute38 := v_charges_rec.pricing_attribute38;
3494 l_est_detail_rec.pricing_attribute39 := v_charges_rec.pricing_attribute39;
3495 l_est_detail_rec.pricing_attribute40 := v_charges_rec.pricing_attribute40;
3496 l_est_detail_rec.pricing_attribute41 := v_charges_rec.pricing_attribute41;
3497 l_est_detail_rec.pricing_attribute42 := v_charges_rec.pricing_attribute42;
3498 l_est_detail_rec.pricing_attribute43 := v_charges_rec.pricing_attribute43;
3499 l_est_detail_rec.pricing_attribute44 := v_charges_rec.pricing_attribute44;
3500 l_est_detail_rec.pricing_attribute45 := v_charges_rec.pricing_attribute45;
3501 l_est_detail_rec.pricing_attribute46 := v_charges_rec.pricing_attribute46;
3502 l_est_detail_rec.pricing_attribute47 := v_charges_rec.pricing_attribute47;
3503 l_est_detail_rec.pricing_attribute48 := v_charges_rec.pricing_attribute48;
3504 l_est_detail_rec.pricing_attribute49 := v_charges_rec.pricing_attribute49;
3505 l_est_detail_rec.pricing_attribute50 := v_charges_rec.pricing_attribute50;
3506 l_est_detail_rec.pricing_attribute51 := v_charges_rec.pricing_attribute51;
3507 l_est_detail_rec.pricing_attribute52 := v_charges_rec.pricing_attribute52;
3508 l_est_detail_rec.pricing_attribute53 := v_charges_rec.pricing_attribute53;
3509 l_est_detail_rec.pricing_attribute54 := v_charges_rec.pricing_attribute54;
3510 l_est_detail_rec.pricing_attribute55 := v_charges_rec.pricing_attribute56;
3511 l_est_detail_rec.pricing_attribute56 := v_charges_rec.pricing_attribute56;
3512 l_est_detail_rec.pricing_attribute57 := v_charges_rec.pricing_attribute57;
3513 l_est_detail_rec.pricing_attribute58 := v_charges_rec.pricing_attribute58;
3514 l_est_detail_rec.pricing_attribute59 := v_charges_rec.pricing_attribute59;
3515 l_est_detail_rec.pricing_attribute60 := v_charges_rec.pricing_attribute60;
3516 l_est_detail_rec.pricing_attribute61 := v_charges_rec.pricing_attribute61;
3517 l_est_detail_rec.pricing_attribute62 := v_charges_rec.pricing_attribute62;
3518 l_est_detail_rec.pricing_attribute63 := v_charges_rec.pricing_attribute63;
3519 l_est_detail_rec.pricing_attribute64 := v_charges_rec.pricing_attribute64;
3520 l_est_detail_rec.pricing_attribute65 := v_charges_rec.pricing_attribute65;
3521 l_est_detail_rec.pricing_attribute66 := v_charges_rec.pricing_attribute66;
3522 l_est_detail_rec.pricing_attribute67 := v_charges_rec.pricing_attribute67;
3523 l_est_detail_rec.pricing_attribute68 := v_charges_rec.pricing_attribute68;
3524 l_est_detail_rec.pricing_attribute69 := v_charges_rec.pricing_attribute69;
3525 l_est_detail_rec.pricing_attribute70 := v_charges_rec.pricing_attribute70;
3526 l_est_detail_rec.pricing_attribute71 := v_charges_rec.pricing_attribute71;
3527 l_est_detail_rec.pricing_attribute72 := v_charges_rec.pricing_attribute72;
3528 l_est_detail_rec.pricing_attribute73 := v_charges_rec.pricing_attribute73;
3529 l_est_detail_rec.pricing_attribute74 := v_charges_rec.pricing_attribute74;
3530 l_est_detail_rec.pricing_attribute75 := v_charges_rec.pricing_attribute75;
3531 l_est_detail_rec.pricing_attribute76 := v_charges_rec.pricing_attribute76;
3532 l_est_detail_rec.pricing_attribute77 := v_charges_rec.pricing_attribute77;
3533 l_est_detail_rec.pricing_attribute78 := v_charges_rec.pricing_attribute78;
3534 l_est_detail_rec.pricing_attribute79 := v_charges_rec.pricing_attribute79;
3535 l_est_detail_rec.pricing_attribute80 := v_charges_rec.pricing_attribute80;
3536 l_est_detail_rec.pricing_attribute81 := v_charges_rec.pricing_attribute81;
3537 l_est_detail_rec.pricing_attribute82 := v_charges_rec.pricing_attribute82;
3538 l_est_detail_rec.pricing_attribute83 := v_charges_rec.pricing_attribute83;
3539 l_est_detail_rec.pricing_attribute84 := v_charges_rec.pricing_attribute84;
3540 l_est_detail_rec.pricing_attribute85 := v_charges_rec.pricing_attribute85;
3541 l_est_detail_rec.pricing_attribute86 := v_charges_rec.pricing_attribute86;
3542 l_est_detail_rec.pricing_attribute87 := v_charges_rec.pricing_attribute87;
3543 l_est_detail_rec.pricing_attribute88 := v_charges_rec.pricing_attribute88;
3544 l_est_detail_rec.pricing_attribute89 := v_charges_rec.pricing_attribute89;
3545 l_est_detail_rec.pricing_attribute90 := v_charges_rec.pricing_attribute90;
3546 l_est_detail_rec.pricing_attribute91 := v_charges_rec.pricing_attribute91;
3547 l_est_detail_rec.pricing_attribute92 := v_charges_rec.pricing_attribute92;
3548 l_est_detail_rec.pricing_attribute93 := v_charges_rec.pricing_attribute93;
3549 l_est_detail_rec.pricing_attribute94 := v_charges_rec.pricing_attribute94;
3550 l_est_detail_rec.pricing_attribute95 := v_charges_rec.pricing_attribute95;
3551 l_est_detail_rec.pricing_attribute96 := v_charges_rec.pricing_attribute96;
3552 l_est_detail_rec.pricing_attribute97 := v_charges_rec.pricing_attribute97;
3553 l_est_detail_rec.pricing_attribute98 := v_charges_rec.pricing_attribute98;
3554 l_est_detail_rec.pricing_attribute99 := v_charges_rec.pricing_attribute99;
3555 l_est_detail_rec.pricing_attribute100 := v_charges_rec.pricing_attribute100;
3556 /*Credit Card 9358401*/
3557 l_est_detail_rec.instrument_payment_use_id := v_charges_rec.instrument_payment_use_id;
3558
3559
3560 -- Call Create Charge Details to create line
3561
3562 --DBMS_OUTPUT.PUT_LINE('Calling CS_Charge_Details_PUB.Create_Charge_Details');
3563
3564
3565 CS_Charge_Details_PUB.Create_Charge_Details(
3566 p_api_version => l_api_version,
3567 p_commit => fnd_api.g_false,
3568 p_init_msg_list => fnd_api.g_false,
3569 x_msg_count => x_msg_count,
3570 x_msg_data => x_msg_data,
3571 x_return_status => l_return_status,
3572 p_Charges_Rec => l_est_detail_rec,
3573 p_create_cost_detail => 'Y' , --Added for Service Costing
3574 x_cost_id => x_cost_id, --Added for Service Costing
3575 x_estimate_detail_id => x_estimate_detail_id,
3576 x_line_number => l_line_number,
3577 x_object_version_number => l_obj_ver_num
3578 ) ;
3579
3580
3581
3582
3583 --DBMS_OUTPUT.PUT_LINE('Estimate detail Id is'||l_est_detail_id);
3584
3585 IF (l_return_status = FND_API.G_RET_STS_ERROR) THEN
3586 RAISE FND_API.G_EXC_ERROR;
3587 ELSIF (l_return_status = FND_API.G_RET_STS_UNEXP_ERROR) THEN
3588 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
3589 END IF;
3590
3591 --End of API Body
3592 --Standard Check of p_commit
3593 IF FND_API.To_Boolean( p_commit ) THEN
3594 COMMIT WORK ;
3595 END IF ;
3596
3597 --Standard call to get message count and if count is 1 , get message info
3598 FND_MSG_PUB.Count_And_Get(p_count =>x_msg_count,
3599 p_data => x_msg_data) ;
3600
3601
3602
3603 --Begin Exception Handling
3604
3605 EXCEPTION
3606
3607 WHEN FND_API.G_EXC_ERROR THEN
3608 IF FND_API.To_Boolean( p_transaction_control ) THEN
3609 ROLLBACK TO Copy_Estimates_PVT;
3610 END IF ;
3611
3612 x_return_status := FND_API.G_RET_STS_ERROR ;
3613
3614 FND_MSG_PUB.Count_And_Get(p_count => x_msg_count,
3615 p_data => x_msg_data,
3616 p_encoded => FND_API.G_FALSE) ;
3617
3618
3619 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
3620 IF FND_API.To_Boolean( p_transaction_control ) THEN
3621 ROLLBACK TO Copy_Estimates_PVT;
3622 END IF ;
3623
3624 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
3625
3626 FND_MSG_PUB.Count_And_Get(p_count => x_msg_count,
3627 p_data => x_msg_data,
3628 p_encoded => FND_API.G_FALSE) ;
3629 WHEN OTHERS THEN
3630 IF FND_API.To_Boolean( p_transaction_control ) THEN
3631 ROLLBACK TO Copy_Estimates_PVT;
3632 END IF ;
3633
3634 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
3635
3636 IF FND_MSG_PUB.Check_Msg_Level
3637 (FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
3638 FND_MSG_PUB.Add_Exc_Msg(G_PKG_NAME,l_api_name);
3639 END IF ;
3640
3641 FND_MSG_PUB.Count_And_Get(p_count => x_msg_count,
3642 p_data => x_msg_data,
3643 p_encoded => FND_API.G_FALSE) ;
3644
3645 END Copy_Estimate;
3646
3647 PROCEDURE CURR_IN_CONVERSION_LIST(
3648 p_api_name IN VARCHAR2,
3649 p_price_list_id IN NUMBER ,
3650 p_currency_code IN VARCHAR2,
3651 x_msg_data OUT NOCOPY VARCHAR2,
3652 x_msg_count OUT NOCOPY NUMBER,
3653 x_return_status OUT NOCOPY VARCHAR2)
3654 IS
3655
3656 Cursor c_currency_code(p_price_list_id NUMBER,p_currency_code VARCHAR2) IS
3657 SELECT 'Y'
3658 FROM qp_currency_details a,qp_list_headers_b b
3659 where list_header_id = p_price_list_id
3660 and a.currency_header_id = b.currency_header_id
3661 and to_currency_code = p_currency_code;
3662
3663 lv_exists_flag VARCHAR2(1) := 'N';
3664 BEGIN
3665 IF p_price_list_id IS NOT NULL THEN
3666 OPEN c_currency_code(p_price_list_id,p_currency_code);
3667 FETCH c_currency_code INTO lv_exists_flag;
3668 CLOSE c_currency_code;
3669 IF lv_exists_flag <> 'Y' THEN
3670 FND_MESSAGE.SET_NAME('CS', 'CS_CHG_INVALID_CURRENCY_CODE');
3671 FND_MESSAGE.Set_Token('CURRENCY_CODE', p_currency_code);
3672 FND_MSG_PUB.Add;
3673 RAISE FND_API.G_EXC_ERROR;
3674 ELSE
3675 x_return_status := FND_API.G_RET_STS_SUCCESS;
3676 END IF;
3677 ELSE
3678 Add_Null_Parameter_Msg(p_api_name, 'p_price_list_id');
3679 RAISE FND_API.G_EXC_ERROR;
3680 END IF;
3681 EXCEPTION
3682 WHEN FND_API.G_EXC_ERROR THEN
3683 x_return_status := FND_API.G_RET_STS_ERROR;
3684 fnd_msg_pub.count_and_get(
3685 p_count => x_msg_count
3686 ,p_data => x_msg_data);
3687
3688 WHEN OTHERS THEN
3689 x_return_status := FND_API.G_RET_STS_ERROR;
3690 FND_MESSAGE.Set_Name('CS', 'CS_CHG_GET_CURRENCY_FAILED');
3691 FND_MESSAGE.SET_TOKEN('PRICE_LIST_ID', p_price_list_id);
3692 FND_MSG_PUB.Add;
3693 fnd_msg_pub.count_and_get(
3694 p_count => x_msg_count
3695 ,p_data => x_msg_data);
3696
3697 END CURR_IN_CONVERSION_LIST;
3698
3699
3700 --==================================
3701 -- Validate_Chrg_Dtls
3702 --==================================
3703 PROCEDURE VALIDATE_CHARGE_DETAILS(
3704 P_API_NAME IN VARCHAR2,
3705 P_CHARGES_DETAIL_REC IN CS_Charge_Details_PUB.Charges_Rec_Type,
3706 P_VALIDATION_MODE IN VARCHAR2,
3707 P_USER_ID IN NUMBER,
3708 P_LOGIN_ID IN NUMBER,
3709 X_CHARGES_DETAIL_REC OUT NOCOPY CS_Charge_Details_PUB.Charges_Rec_Type,
3710 X_MSG_DATA OUT NOCOPY VARCHAR2,
3711 X_MSG_COUNT OUT NOCOPY NUMBER,
3712 X_RETURN_STATUS OUT NOCOPY VARCHAR2)
3713 IS
3714
3715 l_api_name CONSTANT VARCHAR2(30) := 'Validate_Charge_Details' ;
3716 l_api_name_full CONSTANT VARCHAR2(100) := G_PKG_NAME || '.' || l_api_name ;
3717 l_log_module CONSTANT VARCHAR2(255) := 'cs.plsql.' || l_api_name_full || '.';
3718 l_business_process_id NUMBER;
3719 l_line_order_category_code VARCHAR2(30);
3720 l_no_charge_flag VARCHAR2(1);
3721 l_create_charge_flag VARCHAR2(1); --costing enhancement
3722 l_interface_to_oe_flag VARCHAR2(1);
3723 l_update_ib_flag VARCHAR2(1);
3724 l_src_reference_reqd_flag VARCHAR2(1);
3725 l_src_return_reqd_flag VARCHAR2(1);
3726 l_non_src_reference_reqd_flag VARCHAR2(1);
3727 l_non_src_return_reqd VARCHAR2(1);
3728 l_non_src_return_reqd_flag VARCHAR2(1);
3729 l_serial_control_flag VARCHAR2(1);
3730 l_rev_control_flag VARCHAR2(1);
3731 l_billing_flag VARCHAR2(30);
3732 l_tbl_uom TBL_UOM;
3733 l_primary_uom VARCHAR2(3);
3734 l_txn_billing_type_id NUMBER;
3735 l_line_type_id NUMBER;
3736 l_order_header_id NUMBER;
3737 l_def_bp_from_sr VARCHAR2(1) := 'N';
3738 l_org_id NUMBER;
3739
3740 l_msg_data VARCHAR2(2000);
3741 l_msg_count NUMBER;
3742 l_profile VARCHAR2(200);
3743 l_source_id NUMBER;
3744 l_return_status VARCHAR2(1);
3745 l_customer_id NUMBER;
3746 l_customer_site_id NUMBER;
3747 --Changed this to fix bug # 3667210
3748 --Changed to VARCHAR2(50) as per table specification
3749 l_cust_po_number VARCHAR2(50);
3750 l_cust_product_id NUMBER;
3751 l_system_id NUMBER;
3752 l_inventory_item_id NUMBER;
3753 l_account_id NUMBER;
3754 l_bill_to_party_id NUMBER;
3755 l_bill_to_account_id NUMBER;
3756 l_bill_to_contact_id NUMBER;
3757 l_bill_to_site_id NUMBER;
3758 l_ship_to_party_id NUMBER;
3759 l_ship_to_account_id NUMBER;
3760 l_ship_to_contact_id NUMBER;
3761 l_ship_to_site_id NUMBER;
3762 l_contract_id NUMBER;
3763 l_contract_service_id NUMBER;
3764 l_po_number VARCHAR2(50);
3765 l_price_list_exists VARCHAR2(1);
3766 l_price_list_id NUMBER;
3767 -- Changed length of the currency code to 15 for bug # 4120556
3768 l_currency_code VARCHAR2(15);
3769 l_conversion_needed_flag VARCHAR2(1);
3770 l_convert_currency VARCHAR2(10);
3771 l_rate NUMBER;
3772 l_numerator NUMBER;
3773 l_denominator NUMBER;
3774 l_list_price NUMBER;
3775 l_contract_discount NUMBER;
3776 l_db_rec CS_ESTIMATE_DETAILS%ROWTYPE;
3777
3778 l_transaction_type_changed VARCHAR2(1);
3779 l_item_changed VARCHAR2(1);
3780
3781 l_incident_date DATE;
3782 l_creation_date DATE;
3783 l_request_date DATE;
3784 l_contract_line_id NUMBER;
3785
3786 --RF
3787 l_db_det_rec CS_ESTIMATE_DETAILS%ROWTYPE;
3788 l_calc_sp VARCHAR2(1);
3789
3790 --Fix for Bug # 3362130
3791 l_comms_trackable_flag VARCHAR2(1);
3792
3793 l_in_oe_flag VARCHAR2(1) := 'N';
3794 l_in_ib_flag VARCHAR2(1) := 'N';
3795 l_rollup_flag VARCHAR2(1) := 'N';
3796 l_bp_changed VARCHAR2(1) := 'N';
3797 l_update_org VARCHAR2(10);
3798
3799 l_valid_check VARCHAR2(1);
3800
3801
3802 l_disallow_new_charge VARCHAR2(1);
3803 l_disallow_charge_update VARCHAR2(1);
3804
3805 -- Added to fix Bug # 3819167
3806 -- Fixed Bug # 3913707
3807 -- l_absolute_quantity_required NUMBER;
3808
3809 -- Added for bug # 4395867
3810 l_original_source VARCHAR2(30);
3811 l_source VARCHAR2(30);
3812 l_pricing_date Date; -- Bug 7117553
3813 l_profile_value Varchar2(100); -- Bug 7117553
3814
3815 -- Added for bug#5125934
3816 l_serial_number VARCHAR2(30);
3817
3818
3819 --taklam
3820 l_internal_party_id NUMBER;
3821 l_src_change_owner VARCHAR2(1);
3822
3823 -- Depot Loaner fix - Bug# 4586140
3824 l_action_code varchar2(30);
3825
3826 l_credit_status boolean := TRUE;--Credit Card 9358401
3827 L_CURR_IN_CONVERSION_LIST VARCHAR2(1); --12.1.3 Charges Logistic Multi Currency , vpremach
3828 Cursor C_SRC_CHANGE_OWNER(p_txn_billing_type_id NUMBER) IS
3829 SELECT src_change_owner
3830 FROM CSI_IB_TXN_TYPES
3831 WHERE cs_transaction_type_id = p_txn_billing_type_id;
3832
3833 -- Depot Loaner fix - Bug# 4586140
3834 -- Cursor to get depot details
3835 /* Fix bug:5198520 */
3836 Cursor c_get_depot_txns_details (p_estimate_detail_id in number) is
3837 SELECT action_code
3838 FROM csd_product_transactions
3839 WHERE estimate_detail_id = p_estimate_detail_id;
3840
3841 /* Select action_code
3842 from csd_product_txns_v
3843 where estimate_detail_id = p_estimate_detail_id; */
3844
3845 -- Added for bug#5125934
3846 Cursor c_serial_number(p_instance_id NUMBER) IS
3847 SELECT serial_number
3848 FROM csi_item_instances
3849 WHERE instance_id = p_instance_id;
3850
3851 -- 12.1.3 Charges Logistics Project
3852 Cursor c_sub_inventory(p_inv_org_id Number, p_sub_inv_org Varchar2) is
3853 SELECT 'Y'
3854 FROM mtl_secondary_inventories
3855 WHERE organization_id = p_inv_org_id
3856 and secondary_inventory_name = p_sub_inv_org;
3857
3858 l_sub_inv_exists Varchar2(2);
3859
3860 Cursor c_return_type(p_lookup_code varchar2) is
3861 SELECT 'Y'
3862 FROM cs_lookups
3863 WHERE lookup_type = 'CS_SR_RETURN_TYPE'
3864 AND lookup_code = p_lookup_code;
3865
3866 l_return_type Varchar2(2);
3867
3868 Cursor c_location_id(p_party_site_id Number) is
3869 Select location_id
3870 from hz_party_sites
3871 where party_site_id = p_party_site_id;
3872
3873 l_location_id Number;
3874 l_shipping_method_found varchar2(1) := 'N';
3875 l_arrival_date_found varchar2(1) := 'N';
3876 l_distance_found varchar2(1) := 'N';
3877 l_found varchar2(1) := 'N';
3878
3879 --Cursor c_ship_dtls(p_organization_id Number, p_subinventory_code Varchar2) is
3880 Cursor c_ship_dtls(p_organization_id Number, p_subinventory_code Varchar2 default null) is
3881 select capt.shipping_method,
3882 capt.arrival_date,
3883 capt.distance,
3884 capt.subinventory_code
3885 from csp_available_parts_temp capt
3886 where capt.organization_id = p_organization_id;
3887 --and capt.subinventory_code = p_subinventory_code;
3888
3889 Cursor c_shipping_arrival_dt(p_organization_id Number, p_location_id Number) is
3890 select shipping_method,
3891 arrival_date
3892 from csp_shipping_details_v
3893 where organization_id = p_organization_id -- source inventory organization id
3894 and to_location_id = p_location_id -- hz_locations.location_id
3895 and location_source = 'HZ'
3896 order by shipping_cost,arrival_date;
3897
3898
3899 l_shipping_method_code Varchar2(240);
3900 l_arrival_date Date;
3901 l_distance Number; -- Charges MED
3902 l_required_parts csp_part_search_pvt.required_parts_tbl;
3903 l_search_params csp_part_search_pvt.search_params_rec;
3904 l_party_site_id Number;
3905
3906 x_organization_id Number;
3907 x_subinventory_code Varchar2(200);
3908 x_hz_location_id Number;
3909 x_hr_location_id Number;
3910 x_operating_unit Number;
3911
3912 --Bug 12642943
3913 Cursor sr_instance(p_incident_id Number) is
3914 Select customer_product_id,
3915 inventory_item_id
3916 from cs_incidents_all_b
3917 where incident_id = p_incident_id;
3918
3919 l_sr_instance_id Number;
3920 l_sr_inventory_item_id Number;
3921
3922 BEGIN
3923
3924
3925
3926 --Standard Start of API Savepoint
3927 SAVEPOINT Validate_Charge_Details_PUB;
3928
3929 --Initialize the API Return Success to True
3930 x_return_status := FND_API.G_RET_STS_SUCCESS;
3931
3932 --DBMS_OUTPUT.PUT_LINE('BEGIN VALIDATE_CHARGE_DETAILS');
3933 --DBMS_OUTPUT.PUT_LINE('Cust_product_id is '||P_CHARGES_DETAIL_REC.customer_product_id);
3934 --DBMS_OUTPUT.PUT_LINE('Apply contract_discount '||P_CHARGES_DETAIL_REC.apply_contract_discount);
3935
3936 --=============================
3937 --Estimate Detail ID Validation
3938 --==============================
3939 --DBMS_OUTPUT.PUT_LINE('Estimate Detail ID Validation ...');
3940
3941 --DBMS_OUTPUT.PUT_LINE('Estimate Detail Id : '||p_charges_detail_rec.estimate_detail_id);
3942
3943 --Check to see that estimate_detail_id is passed
3944 --If not passed the give error
3945 --If passed then validate and then
3946 --get the charges record from the database
3947
3948 IF p_validation_mode = 'U' THEN
3949 IF p_charges_detail_rec.estimate_detail_id IS NULL OR
3950 p_charges_detail_rec.estimate_detail_id = FND_API.G_MISS_NUM THEN
3951
3952 Add_Null_Parameter_Msg(l_api_name,
3953 'estimate_detail_id') ;
3954
3955 Add_Invalid_Argument_Msg(l_api_name,
3956 TO_CHAR(p_charges_detail_rec.estimate_detail_id),
3957 'estimate_detail_id');
3958 RAISE FND_API.G_EXC_ERROR;
3959
3960 ELSE
3961
3962 IF IS_ESTIMATE_DETAIL_ID_VALID(p_estimate_detail_id => p_charges_detail_rec.estimate_detail_id,
3963 x_msg_data => l_msg_data,
3964 x_msg_count => l_msg_count,
3965 x_return_status => l_return_status) = 'U' THEN
3966
3967 --raise unexpected error
3968 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
3969
3970 ELSIF IS_ESTIMATE_DETAIL_ID_VALID(p_estimate_detail_id => p_charges_detail_rec.estimate_detail_id,
3971 x_msg_data => l_msg_data,
3972 x_msg_count => l_msg_count,
3973 x_return_status => l_return_status) = 'N' THEN
3974
3975 Add_Invalid_Argument_Msg(l_api_name,
3976 TO_CHAR(p_charges_detail_rec.estimate_detail_id),
3977 'estimate_detail_id');
3978 RAISE FND_API.G_EXC_ERROR;
3979
3980 ELSE
3981 --estimate detail id is valid
3982 --assign to out record
3983 x_charges_detail_rec.estimate_detail_id := p_charges_detail_rec.estimate_detail_id;
3984
3985 -- Get existing Charges record for this estimate detail_id
3986 Get_Charge_Detail_Rec(p_api_name => l_api_name_full,
3987 p_estimate_detail_id => p_charges_detail_rec.estimate_detail_id,
3988 x_charge_detail_rec => l_db_det_rec,
3989 x_msg_data => l_msg_data,
3990 x_msg_count => l_msg_count,
3991 x_return_status => l_return_status);
3992
3993 IF (l_return_status = FND_API.G_RET_STS_ERROR) THEN
3994 RAISE FND_API.G_EXC_ERROR;
3995 ELSIF (l_return_status = FND_API.G_RET_STS_UNEXP_ERROR) THEN
3996 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
3997 END IF;
3998
3999 END IF;
4000 END IF;
4001 END IF;
4002
4003
4004 --========================
4005 --Incident ID Validation
4006 --========================
4007 --DBMS_OUTPUT.PUT_LINE('Incident ID Validation ...');
4008
4009 IF p_validation_mode = 'I' THEN
4010
4011 --If incident_id is not passed the
4012 --raise error
4013 --else validate the incident_id and assign to out record
4014 --and get the SR defaults
4015
4016 IF p_charges_detail_rec.incident_id IS NULL THEN
4017
4018 Add_Null_Parameter_Msg(l_api_name,
4019 'p_incident_id') ;
4020
4021 Add_Invalid_Argument_Msg(l_api_name,
4022 to_char(p_charges_detail_rec.incident_id),
4023 'incident_id');
4024 RAISE FND_API.G_EXC_ERROR;
4025
4026 ELSE
4027 -- The incident_id IS NOT NULL
4028 l_valid_check := IS_INCIDENT_ID_VALID( p_incident_id => p_charges_detail_rec.incident_id,
4029 x_msg_data => l_msg_data,
4030 x_msg_count => l_msg_count,
4031 x_return_status => l_return_status);
4032
4033 IF l_return_status = G_RET_STS_UNEXP_ERROR THEN
4034 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4035 ELSIF l_return_status = G_RET_STS_ERROR THEN
4036 RAISE FND_API.G_EXC_ERROR;
4037 END IF;
4038
4039 IF l_valid_check <> 'Y' THEN
4040
4041 Add_Invalid_Argument_Msg(l_api_name,
4042 to_char(p_charges_detail_rec.incident_id),
4043 'incident_id');
4044
4045 RAISE FND_API.G_EXC_ERROR;
4046
4047 ELSE
4048 -- assign it to the out record
4049 x_charges_detail_rec.incident_id := p_charges_detail_rec.incident_id;
4050
4051 -- get the defaults from Service Request for the incident id
4052 get_sr_defaults(p_api_name => p_api_name,
4053 p_incident_id => x_charges_detail_rec.incident_id,
4054 x_business_process_id => l_business_process_id,
4055 x_customer_id => l_customer_id,
4056 x_customer_site_id => l_customer_site_id,
4057 x_cust_po_number => l_cust_po_number,
4058 x_customer_product_id => l_cust_product_id,
4059 x_system_id => l_system_id, -- Fix bug
4060 x_inventory_item_id => l_inventory_item_id, -- Fix bug
4061 x_account_id => l_account_id,
4062 x_bill_to_party_id => l_bill_to_party_id,
4063 x_bill_to_account_id => l_bill_to_account_id,
4064 x_bill_to_contact_id => l_bill_to_contact_id,
4065 x_bill_to_site_id => l_bill_to_site_id,
4066 x_ship_to_party_id => l_ship_to_party_id,
4067 x_ship_to_account_id => l_ship_to_account_id,
4068 x_ship_to_contact_id => l_ship_to_contact_id,
4069 x_ship_to_site_id => l_ship_to_site_id,
4070 x_contract_id => l_contract_id,
4071 x_contract_service_id => l_contract_service_id,
4072 x_incident_date => l_incident_date,
4073 x_creation_date => l_creation_date,
4074 x_msg_data => l_msg_data,
4075 x_msg_count => l_msg_count,
4076 x_return_status => l_return_status);
4077
4078 --DBMS_OUTPUT.PUT_LINE('Back from GET_SR_DEFAULTS l_bill_to_party_id '||l_bill_to_party_id);
4079 --DBMS_OUTPUT.PUT_LINE('Back from GET_SR_DEFAULTS l_ship_to_party_id '||l_ship_to_party_id);
4080
4081 IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
4082 RAISE FND_API.G_EXC_ERROR ;
4083 END IF;
4084
4085 --DBMS_OUTPUT.PUT_LINE('l_incident_date '||l_incident_date);
4086 --DBMS_OUTPUT.PUT_LINE('l_creation_date '||l_creation_date);
4087
4088 END IF;
4089 END IF;
4090 END IF;
4091
4092 -- This needs to be merged with the above validation
4093
4094 IF p_validation_mode = 'U' THEN
4095
4096 --DBMS_OUTPUT.PUT_LINE('Incident_id '||l_db_det_rec.incident_id);
4097 -- Incident Id cannot be changed, assign from the database
4098
4099 x_charges_detail_rec.incident_id := l_db_det_rec.incident_id;
4100
4101 -- get the defaults from Service Request for the incident id
4102 get_sr_defaults(p_api_name => p_api_name,
4103 p_incident_id => x_charges_detail_rec.incident_id,
4104 x_business_process_id => l_business_process_id,
4105 x_customer_id => l_customer_id,
4106 x_customer_site_id => l_customer_site_id,
4107 x_cust_po_number => l_cust_po_number,
4108 x_customer_product_id => l_cust_product_id,
4109 x_system_id => l_system_id, -- Fix bug
4110 x_inventory_item_id => l_inventory_item_id, -- Fix bug
4111 x_account_id => l_account_id,
4112 x_bill_to_party_id => l_bill_to_party_id,
4113 x_bill_to_account_id => l_bill_to_account_id,
4114 x_bill_to_contact_id => l_bill_to_contact_id,
4115 x_bill_to_site_id => l_bill_to_site_id,
4116 x_ship_to_party_id => l_ship_to_party_id,
4117 x_ship_to_account_id => l_ship_to_account_id,
4118 x_ship_to_contact_id => l_ship_to_contact_id,
4119 x_ship_to_site_id => l_ship_to_site_id,
4120 x_contract_id => l_contract_id,
4121 x_contract_service_id => l_contract_service_id,
4122 x_incident_date => l_incident_date,
4123 x_creation_date => l_creation_date,
4124 x_msg_data => l_msg_data,
4125 x_msg_count => l_msg_count,
4126 x_return_status => l_return_status
4127 );
4128
4129 --DBMS_OUTPUT.PUT_LINE('business_process_id'||l_business_process_id);
4130 --DBMS_OUTPUT.PUT_LINE('customer_id'||l_customer_id);
4131 --DBMS_OUTPUT.PUT_LINE('customer_site_id'||l_customer_site_id);
4132 --DBMS_OUTPUT.PUT_LINE('cust_po_number'||l_cust_po_number);
4133 --DBMS_OUTPUT.PUT_LINE('customer_product_id'||l_cust_product_id);
4134 --DBMS_OUTPUT.PUT_LINE('account_id'||l_account_id);
4135 --DBMS_OUTPUT.PUT_LINE('bill_to_party_id'|| l_bill_to_party_id);
4136 --DBMS_OUTPUT.PUT_LINE('bill_to_account_id'||l_bill_to_account_id);
4137 --DBMS_OUTPUT.PUT_LINE('bill_to_contact_id'||l_bill_to_contact_id);
4138 --DBMS_OUTPUT.PUT_LINE('bill_to_site_id'||l_bill_to_site_id);
4139 --DBMS_OUTPUT.PUT_LINE('ship_to_party_id'||l_ship_to_account_id);
4140 --DBMS_OUTPUT.PUT_LINE('ship_to_account_id'||l_ship_to_account_id);
4141 --DBMS_OUTPUT.PUT_LINE('ship_to_contact_id'||l_ship_to_contact_id);
4142 --DBMS_OUTPUT.PUT_LINE('ship_to_site_id'||l_ship_to_site_id);
4143 --DBMS_OUTPUT.PUT_LINE('contract_id'||l_contract_id);
4144 --DBMS_OUTPUT.PUT_LINE('contract_service_id'||l_contract_service_id);
4145 --DBMS_OUTPUT.PUT_LINE('msg_data'||l_msg_data);
4146 --DBMS_OUTPUT.PUT_LINE('msg_count'|| l_msg_count);
4147 --DBMS_OUTPUT.PUT_LINE('return_status'||l_return_status);
4148
4149
4150 IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
4151 RAISE FND_API.G_EXC_ERROR ;
4152 END IF;
4153
4154 ELSE
4155
4156 null;
4157
4158 END IF;
4159
4160 --===================================================
4161 -- Get the disallow_new_charge_flag and
4162 -- disallow_charge_update_flag for the incident_id
4163 --===================================================
4164
4165 --DBMS_OUTPUT.PUT_LINE('getting status form SR');
4166 --Bug Fix for Bug # 3086455
4167 get_charge_flags_from_sr(p_api_name => p_api_name,
4168 p_incident_id => x_charges_detail_rec.incident_id,
4169 x_disallow_new_charge => l_disallow_new_charge,
4170 x_disallow_charge_update => l_disallow_charge_update,
4171 x_msg_data => l_msg_data,
4172 x_msg_count => l_msg_count,
4173 x_return_status => l_return_status
4174 );
4175
4176 --DBMS_OUTPUT.PUT_LINE('l_disallow_new_charge is '||l_disallow_new_charge);
4177 --DBMS_OUTPUT.PUT_LINE('l_disallow_charge_update is '||l_disallow_charge_update);
4178
4179 IF p_validation_mode = 'I' THEN
4180 IF l_disallow_new_charge = 'Y' THEN
4181 --DBMS_OUTPUT.PUT_LINE('l_disallow_new_charge is '||l_disallow_new_charge);
4182 --raise error
4183 FND_MESSAGE.SET_NAME('CS', 'CS_CHG_CANNOT_INSERT');
4184 FND_MSG_PUB.ADD;
4185 RAISE FND_API.G_EXC_ERROR;
4186 END IF;
4187 ELSIF p_validation_mode = 'U' THEN
4188 IF l_disallow_charge_update = 'Y' THEN
4189 --raise error
4190 FND_MESSAGE.SET_NAME('CS', 'CS_CHG_CANNOT_UPDATE');
4191 FND_MSG_PUB.ADD;
4192 RAISE FND_API.G_EXC_ERROR;
4193 END IF;
4194 END IF;
4195
4196
4197 --===================================================
4198 --Assign values to columns that don't need validation
4199 --mviswana need to verify and change this
4200 --===================================================
4201
4202 --DBMS_OUTPUT.PUT_LINE('Assign values to columns that do not need validation ...');
4203
4204 IF p_validation_mode = 'I' THEN
4205
4206 --IF p_charges_detail_rec.interface_to_oe_flag IS NOT NULL THEN
4207 -- x_charges_detail_rec.interface_to_oe_flag := p_charges_detail_rec.interface_to_oe_flag;
4208 --ELSE
4209 -- x_charges_detail_rec.interface_to_oe_flag := 'Y';
4210 --END IF;
4211
4212 -- Added for Bug # 5135284
4213 IF p_charges_detail_rec.rollup_flag IS NOT NULL AND
4214 p_charges_detail_rec.rollup_flag IN ('Y', 'N') THEN
4215 x_charges_detail_rec.rollup_flag := p_charges_detail_rec.rollup_flag;
4216 ELSE
4217 x_charges_detail_rec.rollup_flag := 'N';
4218 END IF;
4219
4220 -- Added for Bug # 5135284
4221 -- commenting for now
4222 IF p_charges_detail_rec.add_to_order_flag IS NOT NULL AND
4223 p_charges_detail_rec.add_to_order_flag IN ('Y', 'N', 'F') THEN
4224 x_charges_detail_rec.add_to_order_flag := p_charges_detail_rec.add_to_order_flag;
4225 ELSE
4226 x_charges_detail_rec.add_to_order_flag := 'N';
4227 END IF;
4228
4229 IF p_charges_detail_rec.apply_contract_discount IS NULL THEN
4230 x_charges_detail_rec.apply_contract_discount := 'N';
4231 ELSE
4232 x_charges_detail_rec.apply_contract_discount := p_charges_detail_rec.apply_contract_discount;
4233 END IF;
4234
4235 x_charges_detail_rec.estimate_detail_id := NULL;
4236 x_charges_detail_rec.order_line_id := NULL;
4237 x_charges_detail_rec.coverage_bill_rate_id := p_charges_detail_rec.coverage_bill_rate_id;
4238 x_charges_detail_rec.transaction_sub_inventory := p_charges_detail_rec.transaction_sub_inventory;
4239 x_charges_detail_rec.submit_restriction_message := p_charges_detail_rec.submit_restriction_message;
4240 x_charges_detail_rec.submit_error_message := p_charges_detail_rec.submit_error_message;
4241 x_charges_detail_rec.submit_from_system := p_charges_detail_rec.submit_from_system;
4242
4243
4244 --DBMS_OUTPUT.PUT_LINE('ORDER_LINE_ID IS '||x_charges_detail_rec.order_line_id);
4245
4246 ELSIF p_validation_mode = 'U' THEN
4247
4248 --Resolve Bug # 3078244
4249 --Resolve Bug # 3084879
4250
4251 --DBMS_OUTPUT.PUT_LINE(' In Update Validation');
4252 --DBMS_OUTPUT.PUT_LINE(' p_charges_detail_rec.add_to_order_flag '||p_charges_detail_rec.add_to_order_flag );
4253 --DBMS_OUTPUT.PUT_LINE(' p_charges_detail_rec.coverage_bill_rate_id '||p_charges_detail_rec.coverage_bill_rate_id);
4254 --DBMS_OUTPUT.PUT_LINE(' p_charges_detail_rec.transaction_sub_inventory '||p_charges_detail_rec.transaction_sub_inventory);
4255
4256 -- Check to see if add_to_order_flag is passed
4257 -- If not passed then assign from database
4258 -- If passed as null then assign 'N'
4259 -- If passed then assign to the out parameter
4260
4261 IF p_charges_detail_rec.add_to_order_flag = FND_API.G_MISS_CHAR THEN
4262 x_charges_detail_rec.add_to_order_flag := l_db_det_rec.add_to_order_flag;
4263 ELSIF p_charges_detail_rec.add_to_order_flag IS NULL THEN
4264 x_charges_detail_rec.add_to_order_flag := 'N';
4265 ELSE
4266 -- Added for Bug # 5135284
4267 IF p_charges_detail_rec.add_to_order_flag IN ('Y', 'N', 'F') THEN
4268 x_charges_detail_rec.add_to_order_flag := p_charges_detail_rec.add_to_order_flag;
4269 ELSE
4270 x_charges_detail_rec.add_to_order_flag := 'N';
4271 END IF;
4272 END IF;
4273
4274 --DBMS_OUTPUT.PUT_LINE('x_charges_detail_rec.add_to_order_flag'||x_charges_detail_rec.add_to_order_flag);
4275
4276 -- Check to see if coverage_bill_rate_id is passed
4277 -- If not passed then assign from database
4278 -- If passed as null then assign NULL
4279 -- If passed then assign to the out parameter
4280
4281 IF p_charges_detail_rec.coverage_bill_rate_id = FND_API.G_MISS_NUM THEN
4282 x_charges_detail_rec.coverage_bill_rate_id := l_db_det_rec.coverage_bill_rate_id;
4283 ELSIF p_charges_detail_rec.coverage_bill_rate_id IS NULL THEN
4284 x_charges_detail_rec.coverage_bill_rate_id := null;
4285 ELSE
4286 x_charges_detail_rec.coverage_bill_rate_id := p_charges_detail_rec.coverage_bill_rate_id;
4287 END IF;
4288
4289 --DBMS_OUTPUT.PUT_LINE('x_charges_detail_rec.coverage_bill_rate_id'||x_charges_detail_rec.coverage_bill_rate_id);
4290
4291 -- Check to see if transaction_sub_inventory is passed
4292 -- If not passed then assign from database
4293 -- If passed as null then assign NULL
4294 -- If passed then assign to the out parameter
4295
4296 IF p_charges_detail_rec.transaction_sub_inventory = FND_API.G_MISS_CHAR THEN
4297 x_charges_detail_rec.transaction_sub_inventory := l_db_det_rec.transaction_sub_inventory;
4298 ELSIF p_charges_detail_rec.transaction_sub_inventory IS NULL THEN
4299 x_charges_detail_rec.transaction_sub_inventory := null;
4300 ELSE
4301 x_charges_detail_rec.transaction_sub_inventory := p_charges_detail_rec.transaction_sub_inventory;
4302 END IF;
4303
4304
4305 --DBMS_OUTPUT.PUT_LINE(' x_charges_detail_rec.transaction_sub_inventory '|| x_charges_detail_rec.transaction_sub_inventory);
4306
4307 -- Check to see if interface_to_oe_flag is passed
4308 -- If not passed then assign from database
4309 -- If passed as null then assign NULL
4310 -- If passed then assign to the out parameter
4311
4312 --IF p_charges_detail_rec.interface_to_oe_flag = FND_API.G_MISS_CHAR THEN
4313 -- x_charges_detail_rec.interface_to_oe_flag := l_db_det_rec.interface_to_oe_flag;
4314 --ELSIF p_charges_detail_rec.interface_to_oe_flag IS NULL THEN
4315 -- x_charges_detail_rec.interface_to_oe_flag := 'N';
4316 --ELSE
4317 -- x_charges_detail_rec.interface_to_oe_flag := p_charges_detail_rec.interface_to_oe_flag;
4318 --END IF;
4319
4320 --DBMS_OUTPUT.PUT_LINE(' x_charges_detail_rec.interface_to_oe_flag '||x_charges_detail_rec.interface_to_oe_flag);
4321
4322 -- Check to see if apply_contract_discount is passed
4323 -- If not passed then assign from database
4324 -- If passed as null then assign NULL
4325 -- If passed then assign to the out parameter
4326
4327 IF p_charges_detail_rec.apply_contract_discount = FND_API.G_MISS_CHAR OR
4328 p_charges_detail_rec.apply_contract_discount IS NULL THEN
4329 x_charges_detail_rec.apply_contract_discount := 'N';
4330 ELSE
4331 x_charges_detail_rec.apply_contract_discount := p_charges_detail_rec.apply_contract_discount;
4332 END IF;
4333
4334 --DBMS_OUTPUT.PUT_LINE('x_charges_detail_rec.apply_contract_discount'||x_charges_detail_rec.apply_contract_discount);
4335
4336 -- Check to see if con_pct_over_list_price is passed
4337 -- If not passed then OR
4338 -- If passed as null then assign NULL
4339 -- If passed then assign to the out parameter
4340
4341 IF p_charges_detail_rec.con_pct_over_list_price = FND_API.G_MISS_NUM OR
4342 p_charges_detail_rec.con_pct_over_list_price IS NULL THEN
4343 x_charges_detail_rec.con_pct_over_list_price := NULL;
4344 ELSE
4345 x_charges_detail_rec.con_pct_over_list_price := p_charges_detail_rec.con_pct_over_list_price;
4346 END IF;
4347
4348 x_charges_detail_rec.order_line_id := l_db_det_rec.order_line_id;
4349
4350 -- Check to see if submit_restriction_message is passed
4351 -- If not passed then assign the value in the database
4352 -- If passed as NULL then assign NULL
4353 -- If passed then assign to out parameter
4354
4355 IF p_charges_detail_rec.submit_restriction_message = FND_API.G_MISS_CHAR THEN
4356 x_charges_detail_rec.submit_restriction_message := l_db_det_rec.submit_restriction_message;
4357 ELSIF p_charges_detail_rec.submit_restriction_message IS NULL THEN
4358 x_charges_detail_rec.submit_restriction_message := NULL;
4359 ELSE
4360 x_charges_detail_rec.submit_restriction_message := p_charges_detail_rec.submit_restriction_message;
4361 END IF;
4362
4363 -- Check to see if submit_error_message is passed
4364 -- If not passed then assign the value in the database
4365 -- If passed as NULL then assign NULL
4366 -- If passed then assign to out parameter
4367
4368 IF p_charges_detail_rec.submit_error_message = FND_API.G_MISS_CHAR THEN
4369 x_charges_detail_rec.submit_error_message := l_db_det_rec.submit_error_message;
4370 ELSIF p_charges_detail_rec.submit_error_message IS NULL THEN
4371 x_charges_detail_rec.submit_error_message := NULL;
4372 ELSE
4373 x_charges_detail_rec.submit_error_message := p_charges_detail_rec.submit_error_message;
4374 END IF;
4375
4376 -- Check to see if submit_from_system is passed
4377 -- If not passed then assign the value in the database
4378 -- If passed as NULL then assign NULL
4379 -- If passed then assign to out parameter
4380
4381 IF p_charges_detail_rec.submit_from_system = FND_API.G_MISS_CHAR THEN
4382 x_charges_detail_rec.submit_from_system := l_db_det_rec.submit_from_system;
4383 ELSIF p_charges_detail_rec.submit_from_system IS NULL THEN
4384 x_charges_detail_rec.submit_from_system := NULL;
4385 ELSE
4386 x_charges_detail_rec.submit_from_system := p_charges_detail_rec.submit_from_system;
4387 END IF;
4388
4389 END IF;
4390
4391 --=====================================
4392 -- Validate the Org_id Passed
4393 --====================================
4394
4395 -- Get Org ID from Source for Incident ID
4396 -- CS_Multiorg_PVT.Get_OrgId(
4397 -- P_API_VERSION => 1.2,
4398 -- P_INIT_MSG_LIST => FND_API.G_FALSE,
4399 -- X_RETURN_STATUS => l_return_status,
4400 -- X_MSG_COUNT => l_msg_count,
4401 -- X_MSG_DATA => l_msg_data,
4402 -- P_INCIDENT_ID => p_charges_detail_rec.incident_id,
4403 -- X_ORG_ID => l_org_id,
4404 -- X_PROFILE => l_profile);
4405
4406 -- -- --DBMS_OUTPUT.PUT_LINE('Back from CS_Multiorg_PVT.Get_OrgId '||l_return_status);
4407 -- -- --DBMS_OUTPUT.PUT_LINE('X Profile '||l_profile);
4408 -- -- --DBMS_OUTPUT.PUT_LINE('l_org_id '||l_org_id);
4409
4410
4411 -- Get Org ID from Source for Incident ID
4412 -- Call CS_MultiOrg_PUB.Get_OrgID
4413 -- This uses the new multi org public API
4414 --
4415 CS_Multiorg_PUB.Get_OrgId(
4416 P_API_VERSION => 1.0,
4417 P_INIT_MSG_LIST => FND_API.G_FALSE,
4418 -- Fix bug 3236597 P_COMMIT => 'T',
4419 P_COMMIT => 'F', -- Fix bug 3236597
4420 P_VALIDATION_LEVEL => FND_API.G_VALID_LEVEL_FULL,
4421 X_RETURN_STATUS => l_return_status,
4422 X_MSG_COUNT => l_msg_count,
4423 X_MSG_DATA => l_msg_data,
4424 P_INCIDENT_ID => p_charges_detail_rec.incident_id,
4425 X_ORG_ID => l_org_id,
4426 X_PROFILE => l_profile);
4427
4428 --DBMS_OUTPUT.PUT_LINE('Back from CS_Multiorg_PVT.Get_OrgId '||l_return_status);
4429 --DBMS_OUTPUT.PUT_LINE('X Profile '||l_profile);
4430 --DBMS_OUTPUT.PUT_LINE('l_org_id '||l_org_id);
4431
4432
4433 IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
4434 RAISE FND_API.G_EXC_ERROR ;
4435 END IF;
4436
4437 IF p_validation_mode = 'I' THEN
4438 IF l_profile = 'Y' THEN
4439 IF p_charges_detail_rec.org_id IS NOT NULL THEN
4440 VALIDATE_ORG_ID(
4441 P_API_NAME => l_api_name,
4442 P_ORG_ID => p_charges_detail_rec.org_id,
4443 X_RETURN_STATUS => l_return_status,
4444 X_MSG_COUNT => l_msg_count,
4445 X_MSG_DATA => l_msg_data);
4446
4447 IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
4448 RAISE FND_API.G_EXC_ERROR ;
4449 END IF;
4450 x_charges_detail_rec.org_id := p_charges_detail_rec.org_id;
4451 ELSE
4452 --use the default
4453 x_charges_detail_rec.org_id := l_org_id;
4454 END IF;
4455 ELSE
4456 -- l_profile = 'N'
4457
4458 IF p_charges_detail_rec.org_id IS NOT NULL THEN
4459 IF p_charges_detail_rec.org_id <> l_org_id THEN
4460 --raise error
4461 --Need to define error here
4462 FND_MESSAGE.SET_NAME('CS', 'CS_CHG_CANNOT_CHANGE_OU');
4463 FND_MESSAGE.SET_TOKEN('API_NAME', p_api_name);
4464 FND_MSG_PUB.ADD;
4465 RAISE FND_API.G_EXC_ERROR;
4466 ELSE
4467 x_charges_detail_rec.org_id := p_charges_detail_rec.org_id;
4468 END IF;
4469 ELSE
4470 --p_charges_detail_rec.org_id IS NULL
4471 --assign default
4472 x_charges_detail_rec.org_id := l_org_id;
4473 END IF;
4474 END IF;
4475
4476 ELSIF p_validation_mode = 'U' THEN
4477 -- Get Org ID from Source for Incident ID
4478 -- Resolve Bug # 3078244
4479
4480 IF l_profile = 'Y' THEN
4481
4482 -- If l_profile = 'Y' THEN if org_id is not passed
4483 -- or org_id is null then assign the value from the database
4484 -- else if passed then validate the org_id and if valid then
4485 -- assign the value to the out parameter
4486
4487 IF p_charges_detail_rec.org_id = FND_API.G_MISS_NUM OR
4488 p_charges_detail_rec.org_id IS NULL THEN
4489 --use the value from the database
4490 x_charges_detail_rec.org_id := l_db_det_rec.org_id;
4491
4492 ELSE
4493 VALIDATE_ORG_ID(
4494 P_API_NAME => l_api_name,
4495 P_ORG_ID => p_charges_detail_rec.org_id,
4496 X_RETURN_STATUS => l_return_status,
4497 X_MSG_COUNT => l_msg_count,
4498 X_MSG_DATA => l_msg_data);
4499
4500 IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
4501 RAISE FND_API.G_EXC_ERROR ;
4502 END IF;
4503 x_charges_detail_rec.org_id := p_charges_detail_rec.org_id;
4504
4505 END IF;
4506
4507 ELSE
4508 -- l_profile = 'N'
4509 -- If l_profile = 'N' THEN if org_id is not passed
4510 -- or org_id is null then assign the value from the database
4511 -- else if passed then validate the org_id and if valid then
4512 -- assign the value to the out parameter
4513
4514 IF p_charges_detail_rec.org_id = FND_API.G_MISS_NUM OR
4515 p_charges_detail_rec.org_id IS NULL THEN
4516 --use the value from the database
4517 x_charges_detail_rec.org_id := l_db_det_rec.org_id;
4518
4519 ELSE
4520 IF p_charges_detail_rec.org_id <> l_db_det_rec.org_id THEN
4521 --raise error
4522 FND_MESSAGE.SET_NAME('CS', 'CS_CHG_CANNOT_CHANGE_OU');
4523 FND_MESSAGE.SET_TOKEN('API_NAME', p_api_name);
4524 FND_MSG_PUB.ADD;
4525 RAISE FND_API.G_EXC_ERROR;
4526 ELSE
4527 x_charges_detail_rec.org_id := p_charges_detail_rec.org_id;
4528 END IF;
4529 END IF;
4530 END IF;
4531 END IF;
4532
4533 --DBMS_OUTPUT.PUT_LINE('org_id '||x_charges_detail_rec.org_id);
4534
4535 --=====================================
4536 --Validate Original Source
4537 --=====================================
4538 --DBMS_OUTPUT.PUT_LINE('Validate Original Source ...');
4539 IF p_validation_mode = 'I' THEN
4540 IF (p_charges_detail_rec.original_source_code IS NULL) OR (p_charges_detail_rec.original_source_id IS NULL) THEN
4541
4542 FND_MESSAGE.SET_NAME('CS', 'CS_CHG_INVALID_ORIGINAL_SOURCE');
4543 FND_MESSAGE.SET_TOKEN('ORIG_SOURCE_ID', p_charges_detail_rec.original_source_id);
4544 FND_MESSAGE.SET_TOKEN('ORIG_SOURCE_CODE', p_charges_detail_rec.original_source_code);
4545 FND_MSG_PUB.ADD;
4546 RAISE FND_API.G_EXC_ERROR;
4547
4548 ELSE
4549 VALIDATE_SOURCE(
4550 P_API_NAME => p_api_name,
4551 P_SOURCE_CODE => p_charges_detail_rec.original_source_code,
4552 P_SOURCE_ID => p_charges_detail_rec.original_source_id,
4553 P_ORG_ID => x_charges_detail_rec.org_id,
4554 X_SOURCE_ID => l_source_id,
4555 X_MSG_DATA => l_msg_data,
4556 X_MSG_COUNT => l_msg_count,
4557 X_RETURN_STATUS => l_return_status) ;
4558
4559 --DBMS_OUTPUT.PUT_LINE('Back from VALIDATE_SOURCE for ORIG SOURCE '||l_return_status);
4560
4561 --IF l_return_status <> 'S' THEN
4562 IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
4563 --raise error
4564 FND_MESSAGE.SET_NAME('CS', 'CS_CHG_INVALID_ORIGINAL_SOURCE');
4565 FND_MESSAGE.SET_TOKEN('ORIG_SOURCE_ID', p_charges_detail_rec.original_source_id);
4566 FND_MESSAGE.SET_TOKEN('ORIG_SOURCE_CODE', p_charges_detail_rec.original_source_code);
4567 FND_MSG_PUB.ADD;
4568 RAISE FND_API.G_EXC_ERROR;
4569 END IF;
4570
4571 -- assign to out record
4572 x_charges_detail_rec.original_source_code := p_charges_detail_rec.original_source_code;
4573 x_charges_detail_rec.original_source_id := p_charges_detail_rec.original_source_id;
4574
4575 END IF;
4576
4577
4578 IF (p_charges_detail_rec.source_code IS NOT NULL) AND (p_charges_detail_rec.source_id IS NOT NULL) THEN
4579 -- Call the Validate Source Procedure
4580
4581 --DBMS_OUTPUT.PUT_LINE('source '||p_charges_detail_rec.source_code);
4582 --DBMS_OUTPUT.PUT_LINE('p_charges_detail_rec.source_id'||p_charges_detail_rec.source_id);
4583
4584 VALIDATE_SOURCE(
4585 P_API_NAME => p_api_name,
4586 P_SOURCE_CODE => p_charges_detail_rec.source_code,
4587 P_SOURCE_ID => p_charges_detail_rec.source_id,
4588 --P_ORG_ID => l_org_id,
4589 P_ORG_ID => x_charges_detail_rec.org_id,
4590 X_SOURCE_ID => l_source_id,
4591 X_MSG_DATA => l_msg_data,
4592 X_MSG_COUNT => l_msg_count,
4593 X_RETURN_STATUS => l_return_status) ;
4594
4595 --DBMS_OUTPUT.PUT_LINE('Back from VALIDATE_SOURCE for SOURCE '||l_return_status);
4596
4597 IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
4598 RAISE FND_API.G_EXC_ERROR ;
4599 END IF;
4600
4601 --assign the values source_code, source_id to out record
4602 x_charges_detail_rec.source_code := p_charges_detail_rec.source_code;
4603 x_charges_detail_rec.source_id := p_charges_detail_rec.source_id;
4604
4605 ELSE
4606 --Default using original source code and original source id
4607 --assign the values source_code, source_id to out record
4608 x_charges_detail_rec.source_code := p_charges_detail_rec.original_source_code;
4609 x_charges_detail_rec.source_id := p_charges_detail_rec.original_source_id;
4610
4611 END IF;
4612
4613 ELSIF p_validation_mode = 'U' THEN
4614
4615 -- assign attributes from db record for original source id and
4616 -- original source code as both cannot be changed
4617 x_charges_detail_rec.original_source_id := l_db_det_rec.original_source_id;
4618 x_charges_detail_rec.original_source_code := l_db_det_rec.original_source_code;
4619
4620
4621
4622 IF p_charges_detail_rec.source_code = FND_API.G_MISS_CHAR OR
4623 p_charges_detail_rec.source_code IS NULL AND
4624 p_charges_detail_rec.source_id = FND_API.G_MISS_NUM OR
4625 p_charges_detail_rec.source_id IS NULL THEN
4626
4627 --Default attributes using db record
4628 x_charges_detail_rec.source_code := l_db_det_rec.source_code;
4629 x_charges_detail_rec.source_id := l_db_det_rec.source_id;
4630
4631 ELSE
4632
4633 VALIDATE_SOURCE(
4634 P_API_NAME => p_api_name,
4635 P_SOURCE_CODE => p_charges_detail_rec.source_code,
4636 P_SOURCE_ID => p_charges_detail_rec.source_id,
4637 --P_ORG_ID => l_org_id,
4638 P_ORG_ID => x_charges_detail_rec.org_id,
4639 X_SOURCE_ID => l_source_id,
4640 X_MSG_DATA => l_msg_data,
4641 X_MSG_COUNT => l_msg_count,
4642 X_RETURN_STATUS => l_return_status) ;
4643
4644 --DBMS_OUTPUT.PUT_LINE('Back from VALIDATE_SOURCE for SOURCE '||l_return_status);
4645
4646 IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
4647 RAISE FND_API.G_EXC_ERROR ;
4648 END IF;
4649
4650 --assign the values source_code, source_id to out record
4651 x_charges_detail_rec.source_code := p_charges_detail_rec.source_code;
4652 x_charges_detail_rec.source_id := p_charges_detail_rec.source_id;
4653
4654 END IF;
4655
4656 END IF;
4657
4658 --DBMS_OUTPUT.PUT_LINE('Completed Source ID and Source Code Validation');
4659
4660 --================================================================
4661 -- For Update Only
4662 -- Estimate Detail Record cannot be updated based
4663 -- on certain restrictions
4664 -- If order lines exist for the record then we cannot update line
4665 -- If the line is generated by billing engine then we cannot
4666 -- update anything other than the after_warranty_cost
4667 --================================================================
4668 IF p_validation_mode = 'U' THEN
4669
4670 --Bug Fix for Bug # 2878503
4671
4672 IF l_db_det_rec.order_line_id IS NOT NULL THEN
4673 l_in_oe_flag := 'Y' ;
4674 ELSE
4675 l_in_oe_flag := 'N' ;
4676 END IF ;
4677
4678 --DBMS_OUTPUT.PUT_LINE('l_in_oe_flag '||l_in_oe_flag);
4679
4680 IF l_in_oe_flag = 'Y' THEN
4681
4682 --DBMS_OUTPUT.PUT_LINE(' l_db_det_rec.original_source_code '||l_db_det_rec.original_source_code);
4683 --DBMS_OUTPUT.PUT_LINE(' p_charges_detail_rec.source_code '||p_charges_detail_rec.source_code);
4684
4685 -- If the Charge Line is Interfaced to OM the upstream can only change the
4686 -- source code from SR to DR and vice versa
4687 -- everything else is not updateable
4688
4689 IF l_db_det_rec.original_source_code IN ('SR', 'DR') AND
4690 p_charges_detail_rec.source_code <> FND_API.G_MISS_CHAR AND
4691 p_charges_detail_rec.source_code IS NOT NULL AND
4692 p_charges_detail_rec.source_code IN ('DR', 'SR') THEN
4693
4694 --DBMS_OUTPUT.PUT_LINE(' Calling validate_source');
4695
4696 VALIDATE_SOURCE(
4697 P_API_NAME => p_api_name,
4698 P_SOURCE_CODE => p_charges_detail_rec.original_source_code,
4699 P_SOURCE_ID => p_charges_detail_rec.original_source_id,
4700 P_ORG_ID => x_charges_detail_rec.org_id,
4701 X_SOURCE_ID => l_source_id,
4702 X_MSG_DATA => l_msg_data,
4703 X_MSG_COUNT => l_msg_count,
4704 X_RETURN_STATUS => l_return_status) ;
4705
4706 IF (l_return_status = FND_API.G_RET_STS_ERROR) THEN
4707 RAISE FND_API.G_EXC_ERROR;
4708 ELSIF (l_return_status = FND_API.G_RET_STS_UNEXP_ERROR) THEN
4709 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4710 END IF;
4711
4712 --DBMS_OUTPUT.PUT_LINE(' l_source_id '||l_source_id);
4713
4714 x_charges_detail_rec.source_id := l_source_id ;
4715 x_charges_detail_rec.source_code := p_charges_detail_rec.source_code ;
4716
4717 ELSE
4718 --DBMS_OUTPUT.PUT_LINE('Coming to the else');
4719 FND_MESSAGE.Set_Name('CS', 'CS_CHG_CANNOT_UPDATE_CHRG_LINE');
4720 FND_MSG_PUB.Add;
4721 RAISE FND_API.G_EXC_ERROR;
4722 END IF;
4723
4724 IF (p_charges_detail_rec.charge_line_type <> FND_API.G_MISS_CHAR OR
4725 p_charges_detail_rec.line_number <> FND_API.G_MISS_NUM OR
4726 p_charges_detail_rec.business_process_id <> FND_API.G_MISS_NUM OR
4727 p_charges_detail_rec.transaction_type_id <> FND_API.G_MISS_NUM OR
4728 p_charges_detail_rec.inventory_item_id_in <> FND_API.G_MISS_NUM OR
4729 p_charges_detail_rec.item_revision <> FND_API.G_MISS_CHAR OR
4730 p_charges_detail_rec.billing_flag <> FND_API.G_MISS_CHAR OR
4731 p_charges_detail_rec.txn_billing_type_id <> FND_API.G_MISS_NUM OR
4732 p_charges_detail_rec.unit_of_measure_code <> FND_API.G_MISS_CHAR OR
4733 p_charges_detail_rec.quantity_required <> FND_API.G_MISS_NUM OR
4734 p_charges_detail_rec.return_reason_code <> FND_API.G_MISS_CHAR OR
4735 p_charges_detail_rec.customer_product_id <> FND_API.G_MISS_NUM OR
4736 p_charges_detail_rec.serial_number <> FND_API.G_MISS_CHAR OR
4737 p_charges_detail_rec.installed_cp_return_by_date <> FND_API.G_MISS_DATE OR
4738 p_charges_detail_rec.new_cp_return_by_date <> FND_API.G_MISS_DATE OR
4739 p_charges_detail_rec.sold_to_party_id <> FND_API.G_MISS_NUM OR
4740 p_charges_detail_rec.bill_to_party_id <> FND_API.G_MISS_NUM OR
4741 p_charges_detail_rec.bill_to_account_id <> FND_API.G_MISS_NUM OR
4742 p_charges_detail_rec.bill_to_contact_id <> FND_API.G_MISS_NUM OR
4743 p_charges_detail_rec.invoice_to_org_id <> FND_API.G_MISS_NUM OR
4744 p_charges_detail_rec.ship_to_party_id <> FND_API.G_MISS_NUM OR
4745 p_charges_detail_rec.ship_to_account_id <> FND_API.G_MISS_NUM OR
4746 p_charges_detail_rec.ship_to_contact_id <> FND_API.G_MISS_NUM OR
4747 p_charges_detail_rec.ship_to_org_id <> FND_API.G_MISS_NUM OR
4748 p_charges_detail_rec.contract_id <> FND_API.G_MISS_NUM OR
4749 p_charges_detail_rec.contract_line_id <> FND_API.G_MISS_NUM OR
4750 p_charges_detail_rec.coverage_id <> FND_API.G_MISS_NUM OR
4751 p_charges_detail_rec.coverage_txn_group_id <> FND_API.G_MISS_NUM OR
4752 p_charges_detail_rec.coverage_bill_rate_id <> FND_API.G_MISS_NUM OR
4753 p_charges_detail_rec.coverage_billing_type_id <> FND_API.G_MISS_NUM OR
4754 p_charges_detail_rec.price_list_id <> FND_API.G_MISS_NUM OR
4755 p_charges_detail_rec.currency_code <> FND_API.G_MISS_CHAR OR
4756 p_charges_detail_rec.purchase_order_num <> FND_API.G_MISS_CHAR OR
4757 p_charges_detail_rec.list_price <> FND_API.G_MISS_NUM OR
4758 p_charges_detail_rec.con_pct_over_list_price <> FND_API.G_MISS_NUM OR
4759 p_charges_detail_rec.selling_price <> FND_API.G_MISS_NUM OR
4760 p_charges_detail_rec.contract_discount_amount <> FND_API.G_MISS_NUM OR
4761 p_charges_detail_rec.apply_contract_discount <> FND_API.G_MISS_CHAR OR
4762 p_charges_detail_rec.after_warranty_cost <> FND_API.G_MISS_NUM OR
4763 p_charges_detail_rec.transaction_inventory_org <> FND_API.G_MISS_NUM OR
4764 p_charges_detail_rec.transaction_sub_inventory <> FND_API.G_MISS_CHAR OR
4765 p_charges_detail_rec.rollup_flag <> FND_API.G_MISS_CHAR OR
4766 p_charges_detail_rec.add_to_order_flag <> FND_API.G_MISS_CHAR OR
4767 p_charges_detail_rec.order_header_id <> FND_API.G_MISS_NUM OR
4768 p_charges_detail_rec.interface_to_oe_flag <> FND_API.G_MISS_CHAR OR
4769 p_charges_detail_rec.no_charge_flag <> FND_API.G_MISS_CHAR OR
4770 p_charges_detail_rec.line_category_code <> FND_API.G_MISS_CHAR OR
4771 p_charges_detail_rec.line_type_id <> FND_API.G_MISS_NUM OR
4772 p_charges_detail_rec.order_line_id <> FND_API.G_MISS_NUM OR
4773 p_charges_detail_rec.conversion_rate <> FND_API.G_MISS_NUM OR
4774 p_charges_detail_rec.conversion_type_code <> FND_API.G_MISS_CHAR OR
4775 p_charges_detail_rec.conversion_rate_date <> FND_API.G_MISS_DATE OR
4776 p_charges_detail_rec.org_id <> FND_API.G_MISS_NUM OR
4777 p_charges_detail_rec.activity_start_time <> FND_API.G_MISS_DATE OR
4778 p_charges_detail_rec.activity_end_time <> FND_API.G_MISS_DATE OR
4779 p_charges_detail_rec.generated_by_bca_engine <> FND_API.G_MISS_CHAR OR
4780 p_charges_detail_rec.submit_restriction_message <> FND_API.G_MISS_CHAR OR
4781 p_charges_detail_rec.submit_error_message <> FND_API.G_MISS_CHAR OR
4782 p_charges_detail_rec.submit_from_system <> FND_API.G_MISS_CHAR OR
4783 p_charges_detail_rec.attribute1 <> FND_API.G_MISS_CHAR OR
4784 p_charges_detail_rec.attribute2 <> FND_API.G_MISS_CHAR OR
4785 p_charges_detail_rec.attribute3 <> FND_API.G_MISS_CHAR OR
4786 p_charges_detail_rec.attribute4 <> FND_API.G_MISS_CHAR OR
4787 p_charges_detail_rec.attribute5 <> FND_API.G_MISS_CHAR OR
4788 p_charges_detail_rec.attribute6 <> FND_API.G_MISS_CHAR OR
4789 p_charges_detail_rec.attribute7 <> FND_API.G_MISS_CHAR OR
4790 p_charges_detail_rec.attribute8 <> FND_API.G_MISS_CHAR OR
4791 p_charges_detail_rec.attribute9 <> FND_API.G_MISS_CHAR OR
4792 p_charges_detail_rec.attribute10 <> FND_API.G_MISS_CHAR OR
4793 p_charges_detail_rec.attribute11 <> FND_API.G_MISS_CHAR OR
4794 p_charges_detail_rec.attribute12 <> FND_API.G_MISS_CHAR OR
4795 p_charges_detail_rec.attribute13 <> FND_API.G_MISS_CHAR OR
4796 p_charges_detail_rec.attribute14 <> FND_API.G_MISS_CHAR OR
4797 p_charges_detail_rec.attribute15 <> FND_API.G_MISS_CHAR OR
4798 p_charges_detail_rec.context <> FND_API.G_MISS_CHAR OR
4799 p_charges_detail_rec.pricing_context <> FND_API.G_MISS_CHAR OR
4800 p_charges_detail_rec.pricing_attribute1 <> FND_API.G_MISS_CHAR OR
4801 p_charges_detail_rec.pricing_attribute2 <> FND_API.G_MISS_CHAR OR
4802 p_charges_detail_rec.pricing_attribute3 <> FND_API.G_MISS_CHAR OR
4803 p_charges_detail_rec.pricing_attribute4 <> FND_API.G_MISS_CHAR OR
4804 p_charges_detail_rec.pricing_attribute5 <> FND_API.G_MISS_CHAR OR
4805 p_charges_detail_rec.pricing_attribute6 <> FND_API.G_MISS_CHAR OR
4806 p_charges_detail_rec.pricing_attribute7 <> FND_API.G_MISS_CHAR OR
4807 p_charges_detail_rec.pricing_attribute8 <> FND_API.G_MISS_CHAR OR
4808 p_charges_detail_rec.pricing_attribute9 <> FND_API.G_MISS_CHAR OR
4809 p_charges_detail_rec.pricing_attribute10 <> FND_API.G_MISS_CHAR OR
4810 p_charges_detail_rec.pricing_attribute11 <> FND_API.G_MISS_CHAR OR
4811 p_charges_detail_rec.pricing_attribute12 <> FND_API.G_MISS_CHAR OR
4812 p_charges_detail_rec.pricing_attribute13 <> FND_API.G_MISS_CHAR OR
4813 p_charges_detail_rec.pricing_attribute14 <> FND_API.G_MISS_CHAR OR
4814 p_charges_detail_rec.pricing_attribute15 <> FND_API.G_MISS_CHAR OR
4815 p_charges_detail_rec.pricing_attribute16 <> FND_API.G_MISS_CHAR OR
4816 p_charges_detail_rec.pricing_attribute17 <> FND_API.G_MISS_CHAR OR
4817 p_charges_detail_rec.pricing_attribute18 <> FND_API.G_MISS_CHAR OR
4818 p_charges_detail_rec.pricing_attribute19 <> FND_API.G_MISS_CHAR OR
4819 p_charges_detail_rec.pricing_attribute20 <> FND_API.G_MISS_CHAR OR
4820 p_charges_detail_rec.pricing_attribute21 <> FND_API.G_MISS_CHAR OR
4821 p_charges_detail_rec.pricing_attribute22 <> FND_API.G_MISS_CHAR OR
4822 p_charges_detail_rec.pricing_attribute23 <> FND_API.G_MISS_CHAR OR
4823 p_charges_detail_rec.pricing_attribute24 <> FND_API.G_MISS_CHAR OR
4824 p_charges_detail_rec.pricing_attribute25 <> FND_API.G_MISS_CHAR OR
4825 p_charges_detail_rec.pricing_attribute26 <> FND_API.G_MISS_CHAR OR
4826 p_charges_detail_rec.pricing_attribute27 <> FND_API.G_MISS_CHAR OR
4827 p_charges_detail_rec.pricing_attribute28 <> FND_API.G_MISS_CHAR OR
4828 p_charges_detail_rec.pricing_attribute29 <> FND_API.G_MISS_CHAR OR
4829 p_charges_detail_rec.pricing_attribute30 <> FND_API.G_MISS_CHAR OR
4830 p_charges_detail_rec.pricing_attribute31 <> FND_API.G_MISS_CHAR OR
4831 p_charges_detail_rec.pricing_attribute32 <> FND_API.G_MISS_CHAR OR
4832 p_charges_detail_rec.pricing_attribute33 <> FND_API.G_MISS_CHAR OR
4833 p_charges_detail_rec.pricing_attribute34 <> FND_API.G_MISS_CHAR OR
4834 p_charges_detail_rec.pricing_attribute35 <> FND_API.G_MISS_CHAR OR
4835 p_charges_detail_rec.pricing_attribute36 <> FND_API.G_MISS_CHAR OR
4836 p_charges_detail_rec.pricing_attribute37 <> FND_API.G_MISS_CHAR OR
4837 p_charges_detail_rec.pricing_attribute38 <> FND_API.G_MISS_CHAR OR
4838 p_charges_detail_rec.pricing_attribute39 <> FND_API.G_MISS_CHAR OR
4839 p_charges_detail_rec.pricing_attribute40 <> FND_API.G_MISS_CHAR OR
4840 p_charges_detail_rec.pricing_attribute41 <> FND_API.G_MISS_CHAR OR
4841 p_charges_detail_rec.pricing_attribute42 <> FND_API.G_MISS_CHAR OR
4842 p_charges_detail_rec.pricing_attribute43 <> FND_API.G_MISS_CHAR OR
4843 p_charges_detail_rec.pricing_attribute44 <> FND_API.G_MISS_CHAR OR
4844 p_charges_detail_rec.pricing_attribute45 <> FND_API.G_MISS_CHAR OR
4845 p_charges_detail_rec.pricing_attribute46 <> FND_API.G_MISS_CHAR OR
4846 p_charges_detail_rec.pricing_attribute47 <> FND_API.G_MISS_CHAR OR
4847 p_charges_detail_rec.pricing_attribute48 <> FND_API.G_MISS_CHAR OR
4848 p_charges_detail_rec.pricing_attribute49 <> FND_API.G_MISS_CHAR OR
4849 p_charges_detail_rec.pricing_attribute50 <> FND_API.G_MISS_CHAR OR
4850 p_charges_detail_rec.pricing_attribute51 <> FND_API.G_MISS_CHAR OR
4851 p_charges_detail_rec.pricing_attribute52 <> FND_API.G_MISS_CHAR OR
4852 p_charges_detail_rec.pricing_attribute53 <> FND_API.G_MISS_CHAR OR
4853 p_charges_detail_rec.pricing_attribute54 <> FND_API.G_MISS_CHAR OR
4854 p_charges_detail_rec.pricing_attribute55 <> FND_API.G_MISS_CHAR OR
4855 p_charges_detail_rec.pricing_attribute56 <> FND_API.G_MISS_CHAR OR
4856 p_charges_detail_rec.pricing_attribute57 <> FND_API.G_MISS_CHAR OR
4857 p_charges_detail_rec.pricing_attribute58 <> FND_API.G_MISS_CHAR OR
4858 p_charges_detail_rec.pricing_attribute59 <> FND_API.G_MISS_CHAR OR
4859 p_charges_detail_rec.pricing_attribute60 <> FND_API.G_MISS_CHAR OR
4860 p_charges_detail_rec.pricing_attribute61 <> FND_API.G_MISS_CHAR OR
4861 p_charges_detail_rec.pricing_attribute62 <> FND_API.G_MISS_CHAR OR
4862 p_charges_detail_rec.pricing_attribute63 <> FND_API.G_MISS_CHAR OR
4863 p_charges_detail_rec.pricing_attribute64 <> FND_API.G_MISS_CHAR OR
4864 p_charges_detail_rec.pricing_attribute65 <> FND_API.G_MISS_CHAR OR
4865 p_charges_detail_rec.pricing_attribute66 <> FND_API.G_MISS_CHAR OR
4866 p_charges_detail_rec.pricing_attribute67 <> FND_API.G_MISS_CHAR OR
4867 p_charges_detail_rec.pricing_attribute68 <> FND_API.G_MISS_CHAR OR
4868 p_charges_detail_rec.pricing_attribute69 <> FND_API.G_MISS_CHAR OR
4869 p_charges_detail_rec.pricing_attribute70 <> FND_API.G_MISS_CHAR OR
4870 p_charges_detail_rec.pricing_attribute71 <> FND_API.G_MISS_CHAR OR
4871 p_charges_detail_rec.pricing_attribute72 <> FND_API.G_MISS_CHAR OR
4872 p_charges_detail_rec.pricing_attribute73 <> FND_API.G_MISS_CHAR OR
4873 p_charges_detail_rec.pricing_attribute74 <> FND_API.G_MISS_CHAR OR
4874 p_charges_detail_rec.pricing_attribute75 <> FND_API.G_MISS_CHAR OR
4875 p_charges_detail_rec.pricing_attribute76 <> FND_API.G_MISS_CHAR OR
4876 p_charges_detail_rec.pricing_attribute77 <> FND_API.G_MISS_CHAR OR
4877 p_charges_detail_rec.pricing_attribute78 <> FND_API.G_MISS_CHAR OR
4878 p_charges_detail_rec.pricing_attribute79 <> FND_API.G_MISS_CHAR OR
4879 p_charges_detail_rec.pricing_attribute80 <> FND_API.G_MISS_CHAR OR
4880 p_charges_detail_rec.pricing_attribute81 <> FND_API.G_MISS_CHAR OR
4881 p_charges_detail_rec.pricing_attribute82 <> FND_API.G_MISS_CHAR OR
4882 p_charges_detail_rec.pricing_attribute83 <> FND_API.G_MISS_CHAR OR
4883 p_charges_detail_rec.pricing_attribute84 <> FND_API.G_MISS_CHAR OR
4884 p_charges_detail_rec.pricing_attribute85 <> FND_API.G_MISS_CHAR OR
4885 p_charges_detail_rec.pricing_attribute86 <> FND_API.G_MISS_CHAR OR
4886 p_charges_detail_rec.pricing_attribute87 <> FND_API.G_MISS_CHAR OR
4887 p_charges_detail_rec.pricing_attribute88 <> FND_API.G_MISS_CHAR OR
4888 p_charges_detail_rec.pricing_attribute89 <> FND_API.G_MISS_CHAR OR
4889 p_charges_detail_rec.pricing_attribute90 <> FND_API.G_MISS_CHAR OR
4890 p_charges_detail_rec.pricing_attribute91 <> FND_API.G_MISS_CHAR OR
4891 p_charges_detail_rec.pricing_attribute92 <> FND_API.G_MISS_CHAR OR
4892 p_charges_detail_rec.pricing_attribute93 <> FND_API.G_MISS_CHAR OR
4893 p_charges_detail_rec.pricing_attribute94 <> FND_API.G_MISS_CHAR OR
4894 p_charges_detail_rec.pricing_attribute95 <> FND_API.G_MISS_CHAR OR
4895 p_charges_detail_rec.pricing_attribute96 <> FND_API.G_MISS_CHAR OR
4896 p_charges_detail_rec.pricing_attribute97 <> FND_API.G_MISS_CHAR OR
4897 p_charges_detail_rec.pricing_attribute98 <> FND_API.G_MISS_CHAR OR
4898 p_charges_detail_rec.pricing_attribute99 <> FND_API.G_MISS_CHAR OR
4899 p_charges_detail_rec.pricing_attribute100 <> FND_API.G_MISS_CHAR ) THEN
4900
4901 FND_MESSAGE.Set_Name('CS', 'CS_CHG_CANNOT_UPDATE_CHRG_LINE');
4902 FND_MSG_PUB.Add;
4903 RAISE FND_API.G_EXC_ERROR;
4904 END IF;
4905 ELSE
4906 --l_in_oe_flag = 'N'
4907 --DBMS_OUTPUT.PUT_LINE('l_in_oe_flag is N ');
4908 null;
4909 END IF;
4910
4911
4912
4913 -- Fixed Bug # 4395867
4914 -- If the original source is 'SR' and source is 'SD' then restrict the line from getting updated
4915 -- from Service Debrief
4916 --
4917
4918 -- get the current_source for the update transaction
4919
4920 IF p_charges_detail_rec.source_code IS NOT NULL AND
4921 p_charges_detail_rec.source_code <> FND_API.G_MISS_CHAR THEN
4922 l_source := p_charges_detail_rec.source_code;
4923 ELSE
4924 l_source := l_db_det_rec.source_code;
4925 END IF;
4926
4927 -- get the original_source for the update transaction
4928 l_original_source := l_db_det_rec.original_source_code;
4929
4930 --Bug fix for bug 7445810
4931 IF l_db_det_rec.generated_by_bca_engine_flag = 'Y' AND
4932 l_original_source = 'SR' AND
4933 l_source = 'SD' THEN
4934 IF (
4935 --cannot be updated
4936 p_charges_detail_rec.charge_line_type <> FND_API.G_MISS_CHAR OR
4937 p_charges_detail_rec.line_number <> FND_API.G_MISS_NUM OR
4938 p_charges_detail_rec.business_process_id <> FND_API.G_MISS_NUM OR
4939 p_charges_detail_rec.transaction_type_id <> FND_API.G_MISS_NUM OR
4940 p_charges_detail_rec.inventory_item_id_in <> FND_API.G_MISS_NUM OR
4941 p_charges_detail_rec.item_revision <> FND_API.G_MISS_CHAR OR
4942 p_charges_detail_rec.billing_flag <> FND_API.G_MISS_CHAR OR
4943 p_charges_detail_rec.txn_billing_type_id <> FND_API.G_MISS_NUM OR
4944 p_charges_detail_rec.unit_of_measure_code <> FND_API.G_MISS_CHAR OR
4945 p_charges_detail_rec.quantity_required <> FND_API.G_MISS_NUM OR
4946 p_charges_detail_rec.return_reason_code <> FND_API.G_MISS_CHAR OR
4947 p_charges_detail_rec.customer_product_id <> FND_API.G_MISS_NUM OR
4948 p_charges_detail_rec.serial_number <> FND_API.G_MISS_CHAR OR
4949 p_charges_detail_rec.installed_cp_return_by_date <> FND_API.G_MISS_DATE OR
4950 p_charges_detail_rec.new_cp_return_by_date <> FND_API.G_MISS_DATE OR
4951
4952 p_charges_detail_rec.list_price <> FND_API.G_MISS_NUM OR
4953 p_charges_detail_rec.con_pct_over_list_price <> FND_API.G_MISS_NUM OR
4954 p_charges_detail_rec.contract_discount_amount <> FND_API.G_MISS_NUM OR
4955 p_charges_detail_rec.apply_contract_discount <> FND_API.G_MISS_CHAR OR
4956
4957 p_charges_detail_rec.transaction_inventory_org <> FND_API.G_MISS_NUM OR
4958 p_charges_detail_rec.transaction_sub_inventory <> FND_API.G_MISS_CHAR OR
4959
4960
4961 -- p_charges_detail_rec.order_header_id <> FND_API.G_MISS_NUM OR
4962 p_charges_detail_rec.line_category_code <> FND_API.G_MISS_CHAR OR
4963 p_charges_detail_rec.line_type_id <> FND_API.G_MISS_NUM OR
4964 p_charges_detail_rec.order_line_id <> FND_API.G_MISS_NUM OR
4965 p_charges_detail_rec.conversion_rate <> FND_API.G_MISS_NUM OR
4966 p_charges_detail_rec.conversion_type_code <> FND_API.G_MISS_CHAR OR
4967 p_charges_detail_rec.conversion_rate_date <> FND_API.G_MISS_DATE OR
4968 p_charges_detail_rec.original_source_id <> FND_API.G_MISS_NUM OR
4969 p_charges_detail_rec.original_source_code <> FND_API.G_MISS_CHAR OR
4970 p_charges_detail_rec.org_id <> FND_API.G_MISS_NUM OR
4971 p_charges_detail_rec.activity_start_time <> FND_API.G_MISS_DATE OR
4972 p_charges_detail_rec.activity_end_time <> FND_API.G_MISS_DATE OR
4973 p_charges_detail_rec.generated_by_bca_engine <> FND_API.G_MISS_CHAR OR
4974 p_charges_detail_rec.submit_restriction_message <> FND_API.G_MISS_CHAR OR
4975 p_charges_detail_rec.submit_error_message <> FND_API.G_MISS_CHAR OR
4976 p_charges_detail_rec.submit_from_system <> FND_API.G_MISS_CHAR OR
4977 p_charges_detail_rec.sold_to_party_id <> FND_API.G_MISS_NUM
4978 )
4979
4980 --can be updated
4981
4982 /* p_charges_detail_rec.sold_to_party_id <> FND_API.G_MISS_NUM OR
4983 p_charges_detail_rec.bill_to_party_id <> FND_API.G_MISS_NUM OR
4984 p_charges_detail_rec.bill_to_account_id <> FND_API.G_MISS_NUM OR
4985 p_charges_detail_rec.bill_to_contact_id <> FND_API.G_MISS_NUM OR
4986 p_charges_detail_rec.invoice_to_org_id <> FND_API.G_MISS_NUM OR
4987 p_charges_detail_rec.ship_to_party_id <> FND_API.G_MISS_NUM OR
4988 p_charges_detail_rec.ship_to_account_id <> FND_API.G_MISS_NUM OR
4989 p_charges_detail_rec.ship_to_contact_id <> FND_API.G_MISS_NUM OR
4990 p_charges_detail_rec.ship_to_org_id <> FND_API.G_MISS_NUM OR
4991 p_charges_detail_rec.contract_id <> FND_API.G_MISS_NUM OR
4992 p_charges_detail_rec.coverage_id <> FND_API.G_MISS_NUM OR
4993 p_charges_detail_rec.coverage_txn_group_id <> FND_API.G_MISS_NUM OR
4994 p_charges_detail_rec.coverage_bill_rate_id <> FND_API.G_MISS_NUM OR
4995 p_charges_detail_rec.coverage_billing_type_id <> FND_API.G_MISS_NUM OR
4996 p_charges_detail_rec.price_list_id <> FND_API.G_MISS_NUM OR
4997 p_charges_detail_rec.currency_code <> FND_API.G_MISS_CHAR OR
4998 p_charges_detail_rec.purchase_order_num <> FND_API.G_MISS_CHAR OR
4999 p_charges_detail_rec.selling_price <> FND_API.G_MISS_NUM OR
5000 p_charges_detail_rec.rollup_flag <> FND_API.G_MISS_CHAR OR
5001 p_charges_detail_rec.add_to_order_flag <> FND_API.G_MISS_CHAR OR
5002 p_charges_detail_rec.interface_to_oe_flag <> FND_API.G_MISS_CHAR OR
5003 p_charges_detail_rec.no_charge_flag <> FND_API.G_MISS_CHAR OR
5004
5005 p_charges_detail_rec.attribute1 <> FND_API.G_MISS_CHAR OR
5006 p_charges_detail_rec.attribute2 <> FND_API.G_MISS_CHAR OR
5007 p_charges_detail_rec.attribute3 <> FND_API.G_MISS_CHAR OR
5008 p_charges_detail_rec.attribute4 <> FND_API.G_MISS_CHAR OR
5009 p_charges_detail_rec.attribute5 <> FND_API.G_MISS_CHAR OR
5010 p_charges_detail_rec.attribute6 <> FND_API.G_MISS_CHAR OR
5011 p_charges_detail_rec.attribute7 <> FND_API.G_MISS_CHAR OR
5012 p_charges_detail_rec.attribute8 <> FND_API.G_MISS_CHAR OR
5013 p_charges_detail_rec.attribute9 <> FND_API.G_MISS_CHAR OR
5014 p_charges_detail_rec.attribute10 <> FND_API.G_MISS_CHAR OR
5015 p_charges_detail_rec.attribute11 <> FND_API.G_MISS_CHAR OR
5016 p_charges_detail_rec.attribute12 <> FND_API.G_MISS_CHAR OR
5017 p_charges_detail_rec.attribute13 <> FND_API.G_MISS_CHAR OR
5018 p_charges_detail_rec.attribute14 <> FND_API.G_MISS_CHAR OR
5019 p_charges_detail_rec.attribute15 <> FND_API.G_MISS_CHAR OR
5020 p_charges_detail_rec.context <> FND_API.G_MISS_CHAR OR
5021 p_charges_detail_rec.pricing_context <> FND_API.G_MISS_CHAR OR
5022 p_charges_detail_rec.pricing_attribute1 <> FND_API.G_MISS_CHAR OR
5023 p_charges_detail_rec.pricing_attribute2 <> FND_API.G_MISS_CHAR OR
5024 p_charges_detail_rec.pricing_attribute3 <> FND_API.G_MISS_CHAR OR
5025 p_charges_detail_rec.pricing_attribute4 <> FND_API.G_MISS_CHAR OR
5026 p_charges_detail_rec.pricing_attribute5 <> FND_API.G_MISS_CHAR OR
5027 p_charges_detail_rec.pricing_attribute6 <> FND_API.G_MISS_CHAR OR
5028 p_charges_detail_rec.pricing_attribute7 <> FND_API.G_MISS_CHAR OR
5029 p_charges_detail_rec.pricing_attribute8 <> FND_API.G_MISS_CHAR OR
5030 p_charges_detail_rec.pricing_attribute9 <> FND_API.G_MISS_CHAR OR
5031 p_charges_detail_rec.pricing_attribute10 <> FND_API.G_MISS_CHAR OR
5032 p_charges_detail_rec.pricing_attribute11 <> FND_API.G_MISS_CHAR OR
5033 p_charges_detail_rec.pricing_attribute12 <> FND_API.G_MISS_CHAR OR
5034 p_charges_detail_rec.pricing_attribute13 <> FND_API.G_MISS_CHAR OR
5035 p_charges_detail_rec.pricing_attribute14 <> FND_API.G_MISS_CHAR OR
5036 p_charges_detail_rec.pricing_attribute15 <> FND_API.G_MISS_CHAR OR
5037 p_charges_detail_rec.pricing_attribute16 <> FND_API.G_MISS_CHAR OR
5038 p_charges_detail_rec.pricing_attribute17 <> FND_API.G_MISS_CHAR OR
5039 p_charges_detail_rec.pricing_attribute18 <> FND_API.G_MISS_CHAR OR
5040 p_charges_detail_rec.pricing_attribute19 <> FND_API.G_MISS_CHAR OR
5041 p_charges_detail_rec.pricing_attribute20 <> FND_API.G_MISS_CHAR OR
5042 p_charges_detail_rec.pricing_attribute21 <> FND_API.G_MISS_CHAR OR
5043 p_charges_detail_rec.pricing_attribute22 <> FND_API.G_MISS_CHAR OR
5044 p_charges_detail_rec.pricing_attribute23 <> FND_API.G_MISS_CHAR OR
5045 p_charges_detail_rec.pricing_attribute24 <> FND_API.G_MISS_CHAR OR
5046 p_charges_detail_rec.pricing_attribute25 <> FND_API.G_MISS_CHAR OR
5047 p_charges_detail_rec.pricing_attribute26 <> FND_API.G_MISS_CHAR OR
5048 p_charges_detail_rec.pricing_attribute27 <> FND_API.G_MISS_CHAR OR
5049 p_charges_detail_rec.pricing_attribute28 <> FND_API.G_MISS_CHAR OR
5050 p_charges_detail_rec.pricing_attribute29 <> FND_API.G_MISS_CHAR OR
5051 p_charges_detail_rec.pricing_attribute30 <> FND_API.G_MISS_CHAR OR
5052 p_charges_detail_rec.pricing_attribute31 <> FND_API.G_MISS_CHAR OR
5053 p_charges_detail_rec.pricing_attribute32 <> FND_API.G_MISS_CHAR OR
5054 p_charges_detail_rec.pricing_attribute33 <> FND_API.G_MISS_CHAR OR
5055 p_charges_detail_rec.pricing_attribute34 <> FND_API.G_MISS_CHAR OR
5056 p_charges_detail_rec.pricing_attribute35 <> FND_API.G_MISS_CHAR OR
5057 p_charges_detail_rec.pricing_attribute36 <> FND_API.G_MISS_CHAR OR
5058 p_charges_detail_rec.pricing_attribute37 <> FND_API.G_MISS_CHAR OR
5059 p_charges_detail_rec.pricing_attribute38 <> FND_API.G_MISS_CHAR OR
5060 p_charges_detail_rec.pricing_attribute39 <> FND_API.G_MISS_CHAR OR
5061 p_charges_detail_rec.pricing_attribute40 <> FND_API.G_MISS_CHAR OR
5062 p_charges_detail_rec.pricing_attribute41 <> FND_API.G_MISS_CHAR OR
5063 p_charges_detail_rec.pricing_attribute42 <> FND_API.G_MISS_CHAR OR
5064 p_charges_detail_rec.pricing_attribute43 <> FND_API.G_MISS_CHAR OR
5065 p_charges_detail_rec.pricing_attribute44 <> FND_API.G_MISS_CHAR OR
5066 p_charges_detail_rec.pricing_attribute45 <> FND_API.G_MISS_CHAR OR
5067 p_charges_detail_rec.pricing_attribute46 <> FND_API.G_MISS_CHAR OR
5068 p_charges_detail_rec.pricing_attribute47 <> FND_API.G_MISS_CHAR OR
5069 p_charges_detail_rec.pricing_attribute48 <> FND_API.G_MISS_CHAR OR
5070 p_charges_detail_rec.pricing_attribute49 <> FND_API.G_MISS_CHAR OR
5071 p_charges_detail_rec.pricing_attribute50 <> FND_API.G_MISS_CHAR OR
5072 p_charges_detail_rec.pricing_attribute51 <> FND_API.G_MISS_CHAR OR
5073 p_charges_detail_rec.pricing_attribute52 <> FND_API.G_MISS_CHAR OR
5074 p_charges_detail_rec.pricing_attribute53 <> FND_API.G_MISS_CHAR OR
5075 p_charges_detail_rec.pricing_attribute54 <> FND_API.G_MISS_CHAR OR
5076 p_charges_detail_rec.pricing_attribute55 <> FND_API.G_MISS_CHAR OR
5077 p_charges_detail_rec.pricing_attribute56 <> FND_API.G_MISS_CHAR OR
5078 p_charges_detail_rec.pricing_attribute57 <> FND_API.G_MISS_CHAR OR
5079 p_charges_detail_rec.pricing_attribute58 <> FND_API.G_MISS_CHAR OR
5080 p_charges_detail_rec.pricing_attribute59 <> FND_API.G_MISS_CHAR OR
5081 p_charges_detail_rec.pricing_attribute60 <> FND_API.G_MISS_CHAR OR
5082 p_charges_detail_rec.pricing_attribute61 <> FND_API.G_MISS_CHAR OR
5083 p_charges_detail_rec.pricing_attribute62 <> FND_API.G_MISS_CHAR OR
5084 p_charges_detail_rec.pricing_attribute63 <> FND_API.G_MISS_CHAR OR
5085 p_charges_detail_rec.pricing_attribute64 <> FND_API.G_MISS_CHAR OR
5086 p_charges_detail_rec.pricing_attribute65 <> FND_API.G_MISS_CHAR OR
5087 p_charges_detail_rec.pricing_attribute66 <> FND_API.G_MISS_CHAR OR
5088 p_charges_detail_rec.pricing_attribute67 <> FND_API.G_MISS_CHAR OR
5089 p_charges_detail_rec.pricing_attribute68 <> FND_API.G_MISS_CHAR OR
5090 p_charges_detail_rec.pricing_attribute69 <> FND_API.G_MISS_CHAR OR
5091 p_charges_detail_rec.pricing_attribute70 <> FND_API.G_MISS_CHAR OR
5092 p_charges_detail_rec.pricing_attribute71 <> FND_API.G_MISS_CHAR OR
5093 p_charges_detail_rec.pricing_attribute72 <> FND_API.G_MISS_CHAR OR
5094 p_charges_detail_rec.pricing_attribute73 <> FND_API.G_MISS_CHAR OR
5095 p_charges_detail_rec.pricing_attribute74 <> FND_API.G_MISS_CHAR OR
5096 p_charges_detail_rec.pricing_attribute75 <> FND_API.G_MISS_CHAR OR
5097 p_charges_detail_rec.pricing_attribute76 <> FND_API.G_MISS_CHAR OR
5098 p_charges_detail_rec.pricing_attribute77 <> FND_API.G_MISS_CHAR OR
5099 p_charges_detail_rec.pricing_attribute78 <> FND_API.G_MISS_CHAR OR
5100 p_charges_detail_rec.pricing_attribute79 <> FND_API.G_MISS_CHAR OR
5101 p_charges_detail_rec.pricing_attribute80 <> FND_API.G_MISS_CHAR OR
5102 p_charges_detail_rec.pricing_attribute81 <> FND_API.G_MISS_CHAR OR
5103 p_charges_detail_rec.pricing_attribute82 <> FND_API.G_MISS_CHAR OR
5104 p_charges_detail_rec.pricing_attribute83 <> FND_API.G_MISS_CHAR OR
5105 p_charges_detail_rec.pricing_attribute84 <> FND_API.G_MISS_CHAR OR
5106 p_charges_detail_rec.pricing_attribute85 <> FND_API.G_MISS_CHAR OR
5107 p_charges_detail_rec.pricing_attribute86 <> FND_API.G_MISS_CHAR OR
5108 p_charges_detail_rec.pricing_attribute87 <> FND_API.G_MISS_CHAR OR
5109 p_charges_detail_rec.pricing_attribute88 <> FND_API.G_MISS_CHAR OR
5110 p_charges_detail_rec.pricing_attribute89 <> FND_API.G_MISS_CHAR OR
5111 p_charges_detail_rec.pricing_attribute90 <> FND_API.G_MISS_CHAR OR
5112 p_charges_detail_rec.pricing_attribute91 <> FND_API.G_MISS_CHAR OR
5113 p_charges_detail_rec.pricing_attribute92 <> FND_API.G_MISS_CHAR OR
5114 p_charges_detail_rec.pricing_attribute93 <> FND_API.G_MISS_CHAR OR
5115 p_charges_detail_rec.pricing_attribute94 <> FND_API.G_MISS_CHAR OR
5116 p_charges_detail_rec.pricing_attribute95 <> FND_API.G_MISS_CHAR OR
5117 p_charges_detail_rec.pricing_attribute96 <> FND_API.G_MISS_CHAR OR
5118 p_charges_detail_rec.pricing_attribute97 <> FND_API.G_MISS_CHAR OR
5119 p_charges_detail_rec.pricing_attribute98 <> FND_API.G_MISS_CHAR OR
5120 p_charges_detail_rec.pricing_attribute99 <> FND_API.G_MISS_CHAR OR
5121 p_charges_detail_rec.pricing_attribute100 <> FND_API.G_MISS_CHAR )
5122 */
5123
5124 THEN
5125 --RAISE FND_API.G_EXC_ERROR;
5126 --null;
5127
5128 -- FND_MESSAGE.Set_Name('CS', 'CS_CHG_CANNOT_UPDATE_CHRG_LINE');
5129 FND_MESSAGE.Set_Name('CS', 'CS_CHG_CANNOT_UPDATE_LINE'); --Bug 7445810 created an appropriate message
5130 FND_MSG_PUB.Add;
5131 RAISE FND_API.G_EXC_ERROR;
5132 END IF;
5133
5134 -- If generated by BCA Engine then cannot update anything except the final amount
5135 -- need to find out from Iwen the exact requirements
5136
5137 END IF;
5138 END IF;
5139
5140 --DBMS_OUTPUT.PUT_LINE('Passed the Update Validation for BCA and Order Line');
5141 --======================================
5142 -- For Update Only
5143 -- Check for Item Instance and Rollup Flag
5144 -- from values in Database
5145 --======================================
5146 IF p_validation_mode = 'U' THEN
5147 IF l_db_det_rec.rollup_flag = 'Y' THEN
5148 l_rollup_flag := 'Y';
5149 END IF;
5150 END IF;
5151
5152 --===========================
5153 --Charge Line Type Validation
5154 --===========================
5155 --DBMS_OUTPUT.PUT_LINE('Charge Line Type Validation ...');
5156
5157 IF p_validation_mode = 'I' THEN
5158
5159 IF p_charges_detail_rec.charge_line_type IS NOT NULL THEN
5160
5161 l_valid_check := IS_CHARGE_LINE_TYPE_VALID(p_charge_line_type => p_charges_detail_rec.charge_line_type,
5162 x_msg_data => l_msg_data,
5163 x_msg_count => l_msg_count,
5164 x_return_status => l_return_status);
5165
5166 IF l_return_status = G_RET_STS_UNEXP_ERROR THEN
5167 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5168 ELSIF l_return_status = G_RET_STS_ERROR THEN
5169 RAISE FND_API.G_EXC_ERROR;
5170 END IF;
5171
5172 IF l_valid_check <> 'Y' THEN
5173
5174 Add_Invalid_Argument_Msg(l_api_name,
5175 p_charges_detail_rec.charge_line_type,
5176 'charge_line_type');
5177
5178 RAISE FND_API.G_EXC_ERROR;
5179 ELSE
5180 x_charges_detail_rec.charge_line_type := p_charges_detail_rec.charge_line_type;
5181 END IF;
5182
5183
5184 ELSE
5185 x_charges_detail_rec.charge_line_type := 'ACTUAL';
5186 END IF;
5187
5188 ELSIF p_validation_mode = 'U' THEN
5189
5190 --Resolve Bug # 3078244
5191
5192 IF p_charges_detail_rec.charge_line_type <> FND_API.G_MISS_CHAR AND
5193 p_charges_detail_rec.charge_line_type IS NOT NULL THEN
5194
5195 IF l_db_det_rec.charge_line_type <> 'IN PROGRESS' THEN
5196
5197 l_valid_check := IS_CHARGE_LINE_TYPE_VALID(p_charge_line_type => p_charges_detail_rec.charge_line_type,
5198 x_msg_data => l_msg_data,
5199 x_msg_count => l_msg_count,
5200 x_return_status => l_return_status);
5201
5202 IF l_return_status = G_RET_STS_UNEXP_ERROR THEN
5203 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5204 ELSIF l_return_status = G_RET_STS_ERROR THEN
5205 RAISE FND_API.G_EXC_ERROR;
5206 END IF;
5207
5208 IF l_valid_check <> 'Y' THEN
5209
5210 Add_Invalid_Argument_Msg(l_api_name,
5211 p_charges_detail_rec.charge_line_type,
5212 'charge_line_type');
5213
5214 RAISE FND_API.G_EXC_ERROR;
5215 ELSE
5216 x_charges_detail_rec.charge_line_type := p_charges_detail_rec.charge_line_type;
5217 END IF;
5218
5219 ELSE
5220 -- give an error message
5221 FND_MESSAGE.SET_NAME('CS', 'CS_CHG_CANNOT_UPDATE_INPROG');
5222 FND_MESSAGE.SET_TOKEN('API_NAME', p_api_name);
5223 FND_MSG_PUB.ADD;
5224 RAISE FND_API.G_EXC_ERROR;
5225 END IF;
5226 ELSE
5227 --get it from the db record
5228 x_charges_detail_rec.charge_line_type := l_db_det_rec.charge_line_type;
5229
5230 IF x_charges_detail_rec.charge_line_type = 'IN PROGRESS' THEN
5231 FND_MESSAGE.SET_NAME('CS', 'CS_CHG_CANNOT_UPDATE_INPROG');
5232 FND_MESSAGE.SET_TOKEN('API_NAME', p_api_name);
5233 FND_MSG_PUB.ADD;
5234 RAISE FND_API.G_EXC_ERROR;
5235 END IF;
5236 END IF;
5237
5238 --DBMS_OUTPUT.PUT_LINE('passed charge_line_type validation in update');
5239 END IF;
5240
5241 --=============================
5242 --Line submitted validate
5243 --=============================
5244
5245 IF p_validation_mode = 'I' THEN
5246
5247 IF x_charges_detail_rec.charge_line_type IN ('ESTIMATE', 'IN_PROGRESS') THEN
5248 x_charges_detail_rec.line_submitted_flag := NULL;
5249 ELSE
5250 IF x_charges_detail_rec.charge_line_type = 'ACTUAL' THEN
5251 x_charges_detail_rec.line_submitted_flag := 'N';
5252 END IF;
5253 END IF;
5254 ELSIF p_validation_mode = 'U' THEN
5255 --Fixed Bug # 3353497
5256 IF x_charges_detail_rec.order_line_id IS NULL AND
5257 x_charges_detail_rec.charge_line_type = 'ACTUAL' THEN
5258 x_charges_detail_rec.line_submitted_flag := 'N';
5259 ELSE
5260 --in all other situations l_line_submitted_flag := NULL;
5261 x_charges_detail_rec.line_submitted_flag := NULL;
5262 END IF;
5263 END IF;
5264
5265
5266
5267 --==============================
5268 --Business Process ID Validation
5269 --==============================
5270 --DBMS_OUTPUT.PUT_LINE('Business Process ID Validation ...');
5271
5272 IF p_validation_mode = 'I' THEN
5273
5274 IF p_charges_detail_rec.business_process_id IS NOT NULL THEN
5275
5276 l_valid_check := IS_BUSINESS_PROCESS_ID_VALID(
5277 p_business_process_id => p_charges_detail_rec.business_process_id,
5278 x_msg_data => l_msg_data,
5279 x_msg_count => l_msg_count,
5280 x_return_status => l_return_status);
5281
5282 IF l_return_status = G_RET_STS_UNEXP_ERROR THEN
5283 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5284 ELSIF l_return_status = G_RET_STS_ERROR THEN
5285 RAISE FND_API.G_EXC_ERROR;
5286 END IF;
5287
5288 IF l_valid_check <> 'Y' THEN
5289
5290 Add_Invalid_Argument_Msg(l_api_name,
5291 to_char(p_charges_detail_rec.business_process_id),
5292 'business_process_id');
5293 RAISE FND_API.G_EXC_ERROR;
5294 ELSE
5295 x_charges_detail_rec.business_process_id := p_charges_detail_rec.business_process_id;
5296 END IF;
5297
5298 ELSE
5299 -- Business Process Id is null
5300 -- Get the Business Process Id from Service Request
5301 -- Check if the profile to get Business Process From SR = 'Y'
5302 l_def_bp_from_sr := fnd_profile.value('CS_CHG_DEFAULT_BP_FROM_SR');
5303
5304 IF FND_LOG.level_procedure >= FND_LOG.g_current_runtime_level
5305 THEN
5306 FND_LOG.String
5307 ( FND_LOG.level_procedure , L_LOG_MODULE || ''
5308 , 'The Value of profile CS_CHG_DEFAULT_BP_FROM_SR :' || l_def_bp_from_sr
5309 );
5310 END IF;
5311
5312 IF l_def_bp_from_sr = 'Y' THEN
5313 -- assign the business process id returned from GET_SR_DEFAULTS
5314 -- assign to out record
5315 IF l_business_process_id IS NOT NULL THEN
5316 x_charges_detail_rec.business_process_id := l_business_process_id;
5317 ELSE
5318 -- Raise Error
5319 FND_MESSAGE.SET_NAME('CS', 'CS_CHG_INVALID_BUSS_PROCESS_ID');
5320 FND_MESSAGE.SET_TOKEN('BUSINESS_PROCESS_ID', l_business_process_id);
5321 FND_MSG_PUB.ADD;
5322 RAISE FND_API.G_EXC_ERROR;
5323 END IF;
5324 ELSE
5325 -- Profile to get Business Process From SR = 'N'
5326 -- Raise error the Business Process ID IS Null and needed
5327 FND_MESSAGE.SET_NAME('CS', 'CS_CHG_INVALID_BUSS_PROCESS_ID');
5328 FND_MESSAGE.SET_TOKEN('BUSINESS_PROCESS_ID', p_charges_detail_rec.business_process_id);
5329 FND_MSG_PUB.ADD;
5330 RAISE FND_API.G_EXC_ERROR;
5331 END IF;
5332 END IF;
5333
5334 ELSIF p_validation_mode = 'U' THEN
5335
5336 -- In this API the Business Process can be updated
5337 -- If the Business process is passed and valid it will be updated
5338 -- else the value from db will be used
5339 --Resolve Bug # 3078244
5340
5341 --Check to see if the upstream is passed a new business_process_id
5342 --If passed then validate the new business_process_id
5343 --If valid then assign to out parameters
5344 --Check too see if business_process_id is changed
5345 --If business_process_id is not passed assign the one in the database
5346
5347 IF p_charges_detail_rec.business_process_id <> FND_API.G_MISS_NUM AND
5348 p_charges_detail_rec.business_process_id IS NOT NULL THEN
5349
5350 l_valid_check := IS_BUSINESS_PROCESS_ID_VALID(
5351 p_business_process_id => p_charges_detail_rec.business_process_id,
5352 x_msg_data => l_msg_data,
5353 x_msg_count => l_msg_count,
5354 x_return_status => l_return_status);
5355
5356 IF l_return_status = G_RET_STS_UNEXP_ERROR THEN
5357 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5358 ELSIF l_return_status = G_RET_STS_ERROR THEN
5359 RAISE FND_API.G_EXC_ERROR;
5360 END IF;
5361
5362 IF l_valid_check <> 'Y' THEN
5363
5364 Add_Invalid_Argument_Msg(l_api_name,
5365 to_char(p_charges_detail_rec.business_process_id),
5366 'business_process_id');
5367 RAISE FND_API.G_EXC_ERROR;
5368 ELSE
5369 x_charges_detail_rec.business_process_id := p_charges_detail_rec.business_process_id;
5370
5371 IF p_charges_detail_rec.business_process_id <> l_db_det_rec.business_process_id THEN
5372 l_bp_changed := 'Y';
5373 END IF;
5374
5375 END IF;
5376 ELSE
5377 -- p_charges_detail_rec.business_process_id is not passed
5378 -- use the business_process_id from the db
5379 x_charges_detail_rec.business_process_id := l_db_det_rec.business_process_id;
5380 END IF;
5381
5382 --DBMS_OUTPUT.PUT_LINE('passed business process validation in update');
5383
5384 END IF;
5385
5386 --==============================
5387 --Transaction Type ID Validation
5388 --=============================
5389 --DBMS_OUTPUT.PUT_LINE('Transaction Type ID Validation ...');
5390 --DBMS_OUTPUT.PUT_LINE('p_validation_mode'|| p_validation_mode);
5391
5392 IF p_validation_mode = 'I' THEN
5393
5394 IF p_charges_detail_rec.transaction_type_id IS NULL THEN
5395
5396 Add_Null_Parameter_Msg(l_api_name, 'transaction_type_id');
5397 Add_Invalid_Argument_Msg(l_api_name, to_char(p_charges_detail_rec.inventory_item_id_in), 'transaction_type_id');
5398 RAISE FND_API.G_EXC_ERROR;
5399
5400 ELSE -- transaction_type_id is not null;
5401
5402 --Added by bkanimoz on 15-dec-2007
5403 --start
5404
5405 --check if the 'create_charge_flag' is 'Y' for the transaction type
5406
5407 get_charge_flag_from_sac(p_api_name => p_api_name,
5408 p_txn_type_id => p_charges_detail_rec.transaction_type_id,
5409 x_create_charge_flag => l_create_charge_flag,
5410 x_msg_data => l_msg_data,
5411 x_msg_count => l_msg_count,
5412 x_return_status => l_return_status
5413 );
5414
5415 IF l_create_charge_flag = 'N' THEN
5416 --DBMS_OUTPUT.PUT_LINE('l_disallow_new_charge is '||l_disallow_new_charge);
5417 --raise error
5418 FND_MESSAGE.SET_NAME('CS', 'CS_CHG_INVALID_CHARGE_FLAG');
5419 FND_MSG_PUB.ADD;
5420 RAISE FND_API.G_EXC_ERROR;
5421 END IF;
5422
5423 -- end
5424
5425
5426 --DBMS_OUTPUT.PUT_LINE('Calling VALIDATE_TXN_TYPE');
5427 -- Call Validate Transaction Type Procedure
5428 VALIDATE_TXN_TYPE(P_API_NAME => p_api_name,
5429 P_BUSINESS_PROCESS_ID => p_charges_detail_rec.business_process_id,
5430 P_TXN_TYPE_ID => p_charges_detail_rec.transaction_type_id,
5431 P_SOURCE_CODE => x_charges_detail_rec.source_code,
5432 X_LINE_ORDER_CATEGORY_CODE => l_line_order_category_code,
5433 X_NO_CHARGE_FLAG => l_no_charge_flag ,
5434 X_INTERFACE_TO_OE_FLAG => l_interface_to_oe_flag,
5435 X_UPDATE_IB_FLAG => l_update_ib_flag,
5436 X_SRC_REFERENCE_REQD_FLAG => l_src_reference_reqd_flag,
5437 X_SRC_RETURN_REQD_FLAG => l_src_return_reqd_flag,
5438 X_NON_SRC_REFERENCE_REQD => l_non_src_reference_reqd_flag ,
5439 X_NON_SRC_RETURN_REQD => l_non_src_return_reqd,
5440 x_MSG_DATA => x_msg_data,
5441 x_MSG_COUNT => x_msg_count,
5442 X_RETURN_STATUS => l_return_status );
5443
5444
5445
5446 IF l_return_status = FND_API.G_RET_STS_ERROR THEN
5447 RAISE FND_API.G_EXC_ERROR;
5448 ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
5449 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5450 ELSE
5451 x_charges_detail_rec.transaction_type_id := p_charges_detail_rec.transaction_type_id;
5452 END IF ;
5453 END IF;
5454
5455 ELSIF p_validation_mode = 'U' THEN
5456
5457 --DBMS_OUTPUT.PUT_LINE('l_bp_changed '||l_bp_changed);
5458
5459 --Resolve Bug # 3078244
5460
5461 IF l_bp_changed = 'Y' THEN
5462
5463 --DBMS_OUTPUT.PUT_LINE(' p_charges_detail_rec.transaction_type_id '||p_charges_detail_rec.transaction_type_id);
5464
5465 --Check to see if the
5466
5467 IF p_charges_detail_rec.transaction_type_id <> FND_API.G_MISS_NUM AND
5468 p_charges_detail_rec.transaction_type_id IS NOT NULL THEN
5469
5470 --DBMS_OUTPUT.PUT_LINE('Transaction Type Passed BP Changed');
5471
5472 VALIDATE_TXN_TYPE(P_API_NAME => p_api_name,
5473 P_BUSINESS_PROCESS_ID => x_charges_detail_rec.business_process_id,
5474 P_TXN_TYPE_ID => p_charges_detail_rec.transaction_type_id,
5475 P_SOURCE_CODE => x_charges_detail_rec.source_code,
5476 X_LINE_ORDER_CATEGORY_CODE => l_line_order_category_code,
5477 X_NO_CHARGE_FLAG => l_no_charge_flag ,
5478 X_INTERFACE_TO_OE_FLAG => l_interface_to_oe_flag,
5479 X_UPDATE_IB_FLAG => l_update_ib_flag,
5480 X_SRC_REFERENCE_REQD_FLAG => l_src_reference_reqd_flag,
5481 X_SRC_RETURN_REQD_FLAG => l_src_return_reqd_flag,
5482 X_NON_SRC_REFERENCE_REQD => l_non_src_reference_reqd_flag ,
5483 X_NON_SRC_RETURN_REQD => l_non_src_return_reqd,
5484 X_MSG_DATA => l_msg_data,
5485 X_MSG_COUNT => l_msg_count,
5486 X_RETURN_STATUS => l_return_status );
5487
5488 IF l_return_status = FND_API.G_RET_STS_ERROR THEN
5489 RAISE FND_API.G_EXC_ERROR;
5490 ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
5491 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5492 ELSE
5493 x_charges_detail_rec.transaction_type_id := p_charges_detail_rec.transaction_type_id;
5494 l_transaction_type_changed := 'Y';
5495 END IF ;
5496
5497 ELSE
5498
5499 --DBMS_OUTPUT.PUT_LINE('Transaction Type Not Passed BP Changed');
5500 -- p_charges_detail_rec.transaction_type_id is not passed
5501 -- validate the one from database against the business process changed
5502 VALIDATE_TXN_TYPE(P_API_NAME => p_api_name,
5503 P_BUSINESS_PROCESS_ID => x_charges_detail_rec.business_process_id,
5504 P_TXN_TYPE_ID => l_db_det_rec.transaction_type_id,
5505 P_SOURCE_CODE => x_charges_detail_rec.source_code,
5506 X_LINE_ORDER_CATEGORY_CODE => l_line_order_category_code,
5507 X_NO_CHARGE_FLAG => l_no_charge_flag ,
5508 X_INTERFACE_TO_OE_FLAG => l_interface_to_oe_flag,
5509 X_UPDATE_IB_FLAG => l_update_ib_flag,
5510 X_SRC_REFERENCE_REQD_FLAG => l_src_reference_reqd_flag,
5511 X_SRC_RETURN_REQD_FLAG => l_src_return_reqd_flag,
5512 X_NON_SRC_REFERENCE_REQD => l_non_src_reference_reqd_flag ,
5513 X_NON_SRC_RETURN_REQD => l_non_src_return_reqd,
5514 X_MSG_DATA => l_msg_data,
5515 X_MSG_COUNT => l_msg_count,
5516 X_RETURN_STATUS => l_return_status );
5517
5518 IF l_return_status = FND_API.G_RET_STS_ERROR THEN
5519 RAISE FND_API.G_EXC_ERROR;
5520 ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
5521 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5522 ELSE
5523 x_charges_detail_rec.transaction_type_id := l_db_det_rec.transaction_type_id;
5524 l_transaction_type_changed := 'N';
5525 END IF ;
5526 END IF;
5527 ELSE
5528 -- l_bp_changed = 'N'
5529 -- p_charges_detail_rec.transaction_type_id is NOT NULL
5530 --DBMS_OUTPUT.PUT_LINE('l_bp_changed = N');
5531
5532
5533 IF p_charges_detail_rec.transaction_type_id <> FND_API.G_MISS_NUM AND
5534 p_charges_detail_rec.transaction_type_id IS NOT NULL THEN
5535
5536 --DBMS_OUTPUT.PUT_LINE('Transaction Type Passed BP not Changed');
5537 VALIDATE_TXN_TYPE(P_API_NAME => p_api_name,
5538 P_BUSINESS_PROCESS_ID => x_charges_detail_rec.business_process_id,
5539 P_TXN_TYPE_ID => p_charges_detail_rec.transaction_type_id,
5540 P_SOURCE_CODE => x_charges_detail_rec.source_code,
5541 X_LINE_ORDER_CATEGORY_CODE => l_line_order_category_code,
5542 X_NO_CHARGE_FLAG => l_no_charge_flag ,
5543 X_INTERFACE_TO_OE_FLAG => l_interface_to_oe_flag,
5544 X_UPDATE_IB_FLAG => l_update_ib_flag,
5545 X_SRC_REFERENCE_REQD_FLAG => l_src_reference_reqd_flag,
5546 X_SRC_RETURN_REQD_FLAG => l_src_return_reqd_flag,
5547 X_NON_SRC_REFERENCE_REQD => l_non_src_reference_reqd_flag ,
5548 X_NON_SRC_RETURN_REQD => l_non_src_return_reqd,
5549 X_MSG_DATA => l_msg_data,
5550 X_MSG_COUNT => l_msg_count,
5551 X_RETURN_STATUS => l_return_status );
5552 IF l_return_status = FND_API.G_RET_STS_ERROR THEN
5553 RAISE FND_API.G_EXC_ERROR;
5554 ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
5555 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5556 END IF;
5557
5558 x_charges_detail_rec.transaction_type_id := p_charges_detail_rec.transaction_type_id;
5559 l_transaction_type_changed := 'Y';
5560
5561 ELSE
5562
5563 IF p_charges_detail_rec.transaction_type_id = FND_API.G_MISS_NUM OR
5564 p_charges_detail_rec.transaction_type_id IS NULL THEN
5565
5566 --DBMS_OUTPUT.PUT_LINE('Transaction Type Not Passed BP not Changed');
5567 -- transaction type is not passed
5568 -- transaction type has not changed
5569 x_charges_detail_rec.transaction_type_id := l_db_det_rec.transaction_type_id;
5570 l_transaction_type_changed := 'N';
5571
5572 -- however call validate_txn_type just to get all the values which will be useful
5573 -- while validating instance
5574
5575 VALIDATE_TXN_TYPE(P_API_NAME => p_api_name,
5576 P_BUSINESS_PROCESS_ID => x_charges_detail_rec.business_process_id,
5577 P_TXN_TYPE_ID => x_charges_detail_rec.transaction_type_id,
5578 P_SOURCE_CODE => x_charges_detail_rec.source_code,
5579 X_LINE_ORDER_CATEGORY_CODE => l_line_order_category_code,
5580 X_NO_CHARGE_FLAG => l_no_charge_flag ,
5581 X_INTERFACE_TO_OE_FLAG => l_interface_to_oe_flag,
5582 X_UPDATE_IB_FLAG => l_update_ib_flag,
5583 X_SRC_REFERENCE_REQD_FLAG => l_src_reference_reqd_flag,
5584 X_SRC_RETURN_REQD_FLAG => l_src_return_reqd_flag,
5585 X_NON_SRC_REFERENCE_REQD => l_non_src_reference_reqd_flag ,
5586 X_NON_SRC_RETURN_REQD => l_non_src_return_reqd,
5587 X_MSG_DATA => l_msg_data,
5588 X_MSG_COUNT => l_msg_count,
5589 X_RETURN_STATUS => l_return_status );
5590 IF l_return_status = FND_API.G_RET_STS_ERROR THEN
5591 RAISE FND_API.G_EXC_ERROR;
5592 ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
5593 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5594 END IF;
5595
5596 END IF;
5597 END IF;
5598 END IF;
5599 --DBMS_OUTPUT.PUT_LINE('passed transaction_type id validation in update ');
5600 --DBMS_OUTPUT.PUT_LINE('l_line_order_category_code = '||l_line_order_category_code);
5601 --DBMS_OUTPUT.PUT_LINE('l_no_charge_flag = '||l_no_charge_flag);
5602 --DBMS_OUTPUT.PUT_LINE('l_update_ib_flag = '||l_update_ib_flag);
5603 --DBMS_OUTPUT.PUT_LINE('l_src_reference_reqd_flag = '||l_src_reference_reqd_flag);
5604 --DBMS_OUTPUT.PUT_LINE('l_src_return_reqd_flag = '||l_src_return_reqd_flag);
5605 --DBMS_OUTPUT.PUT_LINE('l_non_src_reference_reqd_flag = '||l_non_src_reference_reqd_flag);
5606 --DBMS_OUTPUT.PUT_LINE('l_non_src_return_reqd = '||l_non_src_return_reqd);
5607 --DBMS_OUTPUT.PUT_LINE('l_return_status '||l_return_status );
5608 END IF;
5609
5610 --====================================
5611 -- Line Order Category Code Validation
5612 --====================================
5613 --DBMS_OUTPUT.PUT_LINE('Line Order Category Code Validation ...');
5614
5615 l_line_order_category_code := NVL(l_line_order_category_code, p_charges_detail_rec.line_category_code);
5616
5617 IF p_validation_mode = 'I' THEN
5618 IF p_charges_detail_rec.line_category_code IS NOT NULL THEN
5619
5620 IF p_charges_detail_rec.line_category_code <> l_line_order_category_code THEN
5621 --raise error
5622 FND_MESSAGE.SET_NAME('CS', 'CS_CHG_INVALID_LN_ORD_CATEGORY');
5623 FND_MESSAGE.SET_TOKEN('LINE_ORDER_CATEGORY', p_charges_detail_rec.line_category_code);
5624 FND_MSG_PUB.ADD;
5625 RAISE FND_API.G_EXC_ERROR;
5626 ELSE
5627 -- the p_charges_detail_rec.line_category_code
5628 -- matches l_line_order_category_code
5629 -- assign to out record
5630 x_charges_detail_rec.line_category_code := p_charges_detail_rec.line_category_code;
5631 END IF;
5632
5633 ELSE
5634 -- p_charges_detail_rec.line_category_code IS NULL
5635 -- assign the l_line_order_category_code to out record
5636 x_charges_detail_rec.line_category_code := l_line_order_category_code;
5637
5638 END IF;
5639
5640 ELSIF p_validation_mode = 'U' THEN
5641
5642 -- Resolve Bug # 3078244
5643 -- line_order_category can change due to changed transaction type
5644
5645 IF l_transaction_type_changed = 'Y' THEN
5646 IF p_charges_detail_rec.line_category_code <> FND_API.G_MISS_CHAR AND
5647 p_charges_detail_rec.line_category_code IS NOT NULL THEN
5648 IF p_charges_detail_rec.line_category_code <> l_line_order_category_code THEN
5649 --raise error
5650 FND_MESSAGE.SET_NAME('CS', 'CS_CHG_INVALID_LN_ORD_CATEGORY');
5651 FND_MESSAGE.SET_TOKEN('LINE_ORDER_CATEGORY', p_charges_detail_rec.line_category_code);
5652 FND_MSG_PUB.ADD;
5653 RAISE FND_API.G_EXC_ERROR;
5654 ELSE
5655 -- the p_charges_detail_rec.line_category_code
5656 -- matches l_line_order_category_code
5657 -- assign to out record
5658 x_charges_detail_rec.line_category_code := p_charges_detail_rec.line_category_code;
5659 END IF;
5660 ELSE
5661 -- p_charges_detail_rec.line_category_code is not passed
5662 -- assign the l_line_order_category_code to out record
5663 x_charges_detail_rec.line_category_code := l_line_order_category_code;
5664 END IF;
5665 ELSE
5666 -- l_transaction_type_changed := 'N'
5667 IF p_charges_detail_rec.line_category_code <> FND_API.G_MISS_CHAR AND
5668 p_charges_detail_rec.line_category_code IS NOT NULL THEN
5669 IF p_charges_detail_rec.line_category_code <> l_db_det_rec.line_category_code THEN
5670 --raise error
5671 FND_MESSAGE.SET_NAME('CS', 'CS_CHG_INVALID_LN_ORD_CATEGORY');
5672 FND_MESSAGE.SET_TOKEN('LINE_ORDER_CATEGORY', p_charges_detail_rec.line_category_code);
5673 FND_MSG_PUB.ADD;
5674 RAISE FND_API.G_EXC_ERROR;
5675 ELSE
5676 -- the p_charges_detail_rec.line_category_code
5677 -- matches l_db_det_rec.line_category_code
5678 -- assign to out record
5679 x_charges_detail_rec.line_category_code := p_charges_detail_rec.line_category_code;
5680 END IF;
5681 ELSE
5682 -- p_charges_detail_rec.line_category_code IS not passed
5683 -- assign the l_line_order_category_code to out record
5684 x_charges_detail_rec.line_category_code := l_db_det_rec.line_category_code;
5685 END IF;
5686 END IF;
5687
5688 --DBMS_OUTPUT.PUT_LINE('passed line order category code validation');
5689
5690 END IF;
5691
5692 --===================================
5693 --Intreface To OE Flag Validation
5694 --===================================
5695 IF p_validation_mode = 'I' THEN
5696
5697 -- If the interface_to_oe_flag is passed then use the interface_oe_flag passed by
5698 -- upstream application.
5699 -- If not passed then default this from the Transaction Type Setup
5700
5701 -- Added for Bug # 5135284
5702 IF p_charges_detail_rec.interface_to_oe_flag IS NOT NULL AND
5703 p_charges_detail_rec.interface_to_oe_flag IN ('Y', 'N') THEN
5704 x_charges_detail_rec.interface_to_oe_flag := p_charges_detail_rec.interface_to_oe_flag;
5705 ELSE
5706 -- p_charges_detail_rec.interface_to_oe_flag is null
5707 -- default it to l_interface_to_oe_flag
5708 x_charges_detail_rec.interface_to_oe_flag := l_interface_to_oe_flag;
5709 END IF;
5710
5711 ELSIF p_validation_mode = 'U' THEN
5712
5713
5714 -- Added for Bug # 5135284
5715 IF l_transaction_type_changed = 'Y' THEN
5716 IF p_charges_detail_rec.interface_to_oe_flag <> FND_API.G_MISS_CHAR AND
5717 p_charges_detail_rec.interface_to_oe_flag IS NOT NULL THEN
5718
5719 IF p_charges_detail_rec.interface_to_oe_flag IN ('Y', 'N') THEN
5720 x_charges_detail_rec.interface_to_oe_flag := p_charges_detail_rec.interface_to_oe_flag;
5721 ELSE
5722 x_charges_detail_rec.interface_to_oe_flag := l_interface_to_oe_flag;
5723 END IF;
5724
5725 ELSIF p_charges_detail_rec.interface_to_oe_flag IS NULL THEN
5726 x_charges_detail_rec.interface_to_oe_flag := 'N';
5727 ELSE
5728 x_charges_detail_rec.interface_to_oe_flag := l_interface_to_oe_flag;
5729 END IF;
5730
5731 ELSE
5732 -- l_transaction_type_changed = 'N'
5733 IF p_charges_detail_rec.interface_to_oe_flag <> FND_API.G_MISS_CHAR AND
5734 p_charges_detail_rec.interface_to_oe_flag IS NOT NULL THEN
5735
5736 IF p_charges_detail_rec.interface_to_oe_flag IN ('Y', 'N') THEN
5737 x_charges_detail_rec.interface_to_oe_flag := p_charges_detail_rec.interface_to_oe_flag;
5738 ELSE
5739 x_charges_detail_rec.interface_to_oe_flag := l_db_det_rec.interface_to_oe_flag;
5740 END IF;
5741
5742 ELSIF p_charges_detail_rec.interface_to_oe_flag IS NULL THEN
5743 x_charges_detail_rec.interface_to_oe_flag := 'N';
5744 ELSE
5745 x_charges_detail_rec.interface_to_oe_flag := l_db_det_rec.interface_to_oe_flag;
5746 END IF;
5747
5748 END IF;
5749
5750 --DBMS_OUTPUT.PUT_LINE('passed interface_oe_flag validation');
5751 END IF;
5752
5753 --====================================
5754 -- No Charge Flag Validation
5755 --====================================
5756 IF p_validation_mode = 'I' THEN
5757
5758 -- If the no_charge_flag is passed then use the no_charge_flag passed by
5759 -- upstream application.
5760 -- If not passed then default this from the Transaction Type Setup
5761 -- Added for Bug # 5135284
5762 IF p_charges_detail_rec.no_charge_flag IS NOT NULL AND
5763 p_charges_detail_rec.no_charge_flag IN ('Y', 'N') THEN
5764 x_charges_detail_rec.no_charge_flag := p_charges_detail_rec.no_charge_flag;
5765 ELSE
5766 -- p_charges_detail_rec.no_charge_flag is null
5767 -- default it to l_no_charge_flag
5768 x_charges_detail_rec.no_charge_flag := l_no_charge_flag;
5769 END IF;
5770
5771 ELSIF p_validation_mode = 'U' THEN
5772
5773 -- Resolve Bug # 3078244
5774 -- If Transaction Type is changed and then
5775 -- if no_charge_flag is passed then use the no_charge_flag passed by
5776 -- upstream application
5777 -- if not passed then use the one from the database
5778
5779 IF l_transaction_type_changed = 'Y' THEN
5780 IF p_charges_detail_rec.no_charge_flag <> FND_API.G_MISS_CHAR AND
5781 p_charges_detail_rec.no_charge_flag IS NOT NULL THEN
5782 IF p_charges_detail_rec.no_charge_flag IN ('Y', 'N') THEN
5783 x_charges_detail_rec.no_charge_flag := p_charges_detail_rec.no_charge_flag;
5784 ELSE
5785 x_charges_detail_rec.no_charge_flag := l_no_charge_flag;
5786 END IF;
5787 ELSIF p_charges_detail_rec.no_charge_flag IS NULL THEN
5788 x_charges_detail_rec.no_charge_flag := 'N';
5789 ELSE
5790 x_charges_detail_rec.no_charge_flag := l_no_charge_flag;
5791 END IF;
5792
5793 ELSE
5794 -- l_transaction_type_changed = 'N'
5795 IF p_charges_detail_rec.no_charge_flag <> FND_API.G_MISS_CHAR AND
5796 p_charges_detail_rec.no_charge_flag IS NOT NULL THEN
5797 IF p_charges_detail_rec.no_charge_flag IN ('Y', 'N') THEN
5798 x_charges_detail_rec.no_charge_flag := p_charges_detail_rec.no_charge_flag;
5799 ELSE
5800 x_charges_detail_rec.no_charge_flag := l_db_det_rec.no_charge_flag;
5801 END IF;
5802 ELSIF p_charges_detail_rec.no_charge_flag IS NULL THEN
5803 x_charges_detail_rec.no_charge_flag := 'N';
5804 ELSE
5805 x_charges_detail_rec.no_charge_flag := l_db_det_rec.no_charge_flag;
5806 END IF;
5807
5808 END IF;
5809
5810 --DBMS_OUTPUT.PUT_LINE('passed no charge flag validation');
5811 END IF;
5812
5813 --======================
5814 --Item Validation
5815 --======================
5816 --DBMS_OUTPUT.PUT_LINE('Item Validation ...');
5817
5818 IF p_validation_mode = 'I' THEN
5819
5820 IF p_charges_detail_rec.inventory_item_id_in IS NULL THEN
5821 Add_Null_Parameter_Msg(l_api_name,
5822 'inventory_item_id') ;
5823
5824 Add_Invalid_Argument_Msg(l_api_name,
5825 to_char(p_charges_detail_rec.inventory_item_id_in),
5826 'inventory_item_id');
5827 RAISE FND_API.G_EXC_ERROR ;
5828
5829 ELSE
5830 -- Inventory_Item_ID is not null, call Validate Item
5831
5832 --DBMS_OUTPUT.PUT_LINE('Calling VALIDATE_ITEM. p_charges_detail_rec.inventory_item_id_in='||p_charges_detail_rec.inventory_item_id_in);
5833
5834 VALIDATE_ITEM(P_API_NAME => p_api_name,
5835 P_INV_ID => p_charges_detail_rec.inventory_item_id_in,
5836 P_UPDATE_IB_FLAG => l_update_ib_flag,
5837 X_COMMS_TRACKABLE_FLAG=> l_comms_trackable_flag,
5838 X_SERIAL_CONTROL_FLAG => l_serial_control_flag,
5839 X_REV_CONTROL_FLAG => l_rev_control_flag,
5840 X_MSG_DATA => l_msg_data,
5841 X_MSG_COUNT => l_msg_count,
5842 X_RETURN_STATUS => l_return_status);
5843
5844 --DBMS_OUTPUT.PUT_LINE('Back from VALIDATE_ITEM '||l_return_status);
5845
5846 IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
5847 FND_MESSAGE.SET_NAME('CS', 'CS_CHG_VALIDATE_ITEM_ERROR');
5848 FND_MESSAGE.SET_TOKEN('INV_ID', p_charges_detail_rec.inventory_item_id_in);
5849 FND_MSG_PUB.ADD;
5850 RAISE FND_API.G_EXC_ERROR;
5851 ELSE
5852 --assign to out record
5853 x_charges_detail_rec.inventory_item_id_in := p_charges_detail_rec.inventory_item_id_in;
5854 END IF;
5855
5856 END IF;
5857
5858 ELSIF p_validation_mode = 'U' THEN
5859
5860 --DBMS_OUTPUT.PUT_LINE( 'In update for item val');
5861 --DBMS_OUTPUT.PUT_LINE( 'p_charges_detail_rec.inventory_item_id_in '||p_charges_detail_rec.inventory_item_id_in);
5862
5863 -- Resolve Bug # 3078244
5864 IF p_charges_detail_rec.inventory_item_id_in <> FND_API.G_MISS_NUM AND
5865 p_charges_detail_rec.inventory_item_id_in IS NOT NULL THEN
5866
5867 IF l_db_det_rec.customer_product_id IS NOT NULL AND
5868 p_charges_detail_rec.inventory_item_id_in <> l_db_det_rec.inventory_item_id AND
5869 p_charges_detail_rec.customer_product_id IS NULL AND
5870 l_src_reference_reqd_flag = 'Y' AND
5871 l_src_return_reqd_flag = 'Y' AND
5872 l_update_ib_flag = 'Y' AND
5873 l_line_order_category_code = 'RETURN' THEN
5874
5875 --DBMS_OUTPUT.PUT_LINE('Cannot change item');
5876
5877 Cant_Update_Detail_Param_Msg(l_api_name_full,
5878 'INVENTORY_ITEM_ID',
5879 to_char(p_charges_DETAIL_rec.inventory_item_id_in));
5880
5881 RAISE FND_API.G_EXC_ERROR ;
5882
5883
5884 ELSE
5885
5886 --DBMS_OUTPUT.PUT_LINE('p_charges_detail_rec.inventory_item_id_in not null');
5887 -- Validate Item
5888 VALIDATE_ITEM(P_API_NAME => p_api_name,
5889 P_INV_ID => p_charges_detail_rec.inventory_item_id_in,
5890 P_UPDATE_IB_FLAG => l_update_ib_flag,
5891 X_COMMS_TRACKABLE_FLAG => l_comms_trackable_flag,
5892 X_SERIAL_CONTROL_FLAG => l_serial_control_flag,
5893 X_REV_CONTROL_FLAG => l_rev_control_flag,
5894 X_MSG_DATA => l_msg_data,
5895 X_MSG_COUNT => l_msg_count,
5896 X_RETURN_STATUS => l_return_status);
5897
5898 --DBMS_OUTPUT.PUT_LINE('l_return_status = '||l_return_status);
5899
5900 IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
5901 FND_MESSAGE.SET_NAME('CS', 'CS_CHG_VALIDATE_ITEM_ERROR');
5902 FND_MESSAGE.SET_TOKEN('INV_ID', p_charges_detail_rec.inventory_item_id_in);
5903 FND_MSG_PUB.ADD;
5904 RAISE FND_API.G_EXC_ERROR;
5905 END IF;
5906
5907 --assign to out record
5908 x_charges_detail_rec.inventory_item_id_in := p_charges_detail_rec.inventory_item_id_in;
5909
5910 --Condition added to fix Bug # 3358531
5911 --the flags will only be set to Y if they do not match the database
5912 IF x_charges_detail_rec.inventory_item_id_in <> l_db_det_rec.inventory_item_id THEN
5913 -- Item is changed so recalculate the price
5914 l_calc_sp := 'Y' ;
5915 l_item_changed := 'Y';
5916 END IF;
5917
5918 --DBMS_OUTPUT.PUT_LINE('Item Valid');
5919
5920 END IF ;
5921
5922 ELSE
5923 --p_charges_detail_rec.inventory_item_id_in is not passed
5924 --assign to out record
5925 IF p_charges_detail_rec.inventory_item_id_in = FND_API.G_MISS_NUM OR
5926 p_charges_detail_rec.inventory_item_id_in IS NULL THEN
5927
5928 x_charges_detail_rec.inventory_item_id_in := l_db_det_rec.inventory_item_id;
5929
5930 --again need to validate the item as all flags are not stored in DB
5931 VALIDATE_ITEM(P_API_NAME => p_api_name,
5932 P_INV_ID => x_charges_detail_rec.inventory_item_id_in,
5933 P_UPDATE_IB_FLAG => l_update_ib_flag,
5934 X_COMMS_TRACKABLE_FLAG => l_comms_trackable_flag,
5935 X_SERIAL_CONTROL_FLAG => l_serial_control_flag,
5936 X_REV_CONTROL_FLAG => l_rev_control_flag,
5937 X_MSG_DATA => l_msg_data,
5938 X_MSG_COUNT => l_msg_count,
5939 X_RETURN_STATUS => l_return_status);
5940
5941 --DBMS_OUTPUT.PUT_LINE('item from db');
5942 END IF;
5943
5944 END IF;
5945
5946 --DBMS_OUTPUT.PUT_LINE('Passed Item Validation');
5947 --DBMS_OUTPUT.PUT_LINE('Item is = '||x_charges_detail_rec.inventory_item_id_in);
5948 END IF;
5949
5950
5951
5952 --=========================
5953 --Item Revision Validation
5954 --=========================
5955 --DBMS_OUTPUT.PUT_LINE('Item Revision Validation ...');
5956 IF p_validation_mode = 'I' THEN
5957 IF l_rev_control_flag = 'Y' THEN
5958 IF p_charges_detail_rec.item_revision IS NOT NULL AND
5959 p_charges_detail_rec.item_revision <> FND_API.G_MISS_CHAR THEN
5960 -- Added for fix:5125858
5961 IF IS_ITEM_REVISION_VALID(
5962 p_inventory_item_id => p_charges_detail_rec.inventory_item_id_in,
5963 p_item_revision => p_charges_detail_rec.item_revision,
5964 x_msg_data => l_msg_data,
5965 x_msg_count => l_msg_count,
5966 x_return_status => l_return_status) = 'N' THEN
5967
5968 Add_Invalid_Argument_Msg(l_api_name,
5969 TO_CHAR(p_charges_detail_rec.item_revision),
5970 'item_revision');
5971 RAISE FND_API.G_EXC_ERROR;
5972 ELSE
5973 x_charges_detail_rec.item_revision := p_charges_detail_rec.item_revision;
5974
5975 END IF;
5976 ELSE
5977 --item is revision controlled but item revsion is null
5978 --raise error
5979 --FND_MESSAGE.SET_NAME('CS', 'CS_CHG_INVALID_ITEM_REVISION');
5980 --FND_MESSAGE.SET_TOKEN('INVENTORY_ITEM_ID', p_charges_detail_rec.inventory_item_id_in, TRUE);
5981 --FND_MESSAGE.SET_TOKEN('ITEM_REVISION', p_charges_detail_rec.item_revision, TRUE);
5982 --FND_MSG_PUB.ADD;
5983 --RAISE FND_API.G_EXC_ERROR;
5984 x_charges_detail_rec.item_revision := NULL;
5985 END IF;
5986 ELSE
5987 -- l_rev_control_flag = 'N'
5988 x_charges_detail_rec.item_revision := NULL;
5989 END IF;
5990
5991 ELSIF p_validation_mode = 'U' THEN
5992
5993 -- Resolve Bug # 3078244
5994
5995 IF l_item_changed = 'Y' THEN
5996 IF l_rev_control_flag = 'Y' THEN
5997 IF p_charges_detail_rec.item_revision <> FND_API.G_MISS_CHAR AND
5998 p_charges_detail_rec.item_revision IS NOT NULL THEN
5999
6000 -- Added for fix:5125858
6001 IF IS_ITEM_REVISION_VALID(
6002 p_inventory_item_id => p_charges_detail_rec.inventory_item_id_in,
6003 p_item_revision => p_charges_detail_rec.item_revision,
6004 x_msg_data => l_msg_data,
6005 x_msg_count => l_msg_count,
6006 x_return_status => l_return_status) = 'N' THEN
6007
6008 Add_Invalid_Argument_Msg(l_api_name,
6009 TO_CHAR(p_charges_detail_rec.item_revision),
6010 'item_revision');
6011 RAISE FND_API.G_EXC_ERROR;
6012 ELSE
6013 x_charges_detail_rec.item_revision := p_charges_detail_rec.item_revision;
6014
6015 END IF;
6016
6017 ELSE
6018 --item is revision controlled but item revsion is null, raise error
6019 --FND_MESSAGE.SET_NAME('CS', 'CS_CHG_INVALID_ITEM_REVISION');
6020 --FND_MESSAGE.SET_TOKEN('INVENTORY_ITEM_ID', p_charges_detail_rec.inventory_item_id_in, TRUE);
6021 --FND_MESSAGE.SET_TOKEN('ITEM_REVISION', p_charges_detail_rec.item_revision, TRUE);
6022 --FND_MSG_PUB.ADD;
6023 --RAISE FND_API.G_EXC_ERROR;
6024 x_charges_detail_rec.item_revision := NULL;
6025 END IF;
6026 ELSE
6027 --l_rev_control_flag = 'N' THEN ignore the item revision
6028 x_charges_detail_rec.item_revision := NULL;
6029 END IF;
6030 ELSE
6031 --l_item_changed = 'N'
6032 IF l_db_det_rec.item_revision IS NOT NULL THEN
6033 l_rev_control_flag := 'Y' ;
6034 ELSE
6035 l_rev_control_flag := 'N' ;
6036 END IF;
6037
6038 IF l_rev_control_flag = 'Y' THEN
6039 IF p_charges_detail_rec.item_revision <> FND_API.G_MISS_CHAR AND
6040 p_charges_detail_rec.item_revision IS NOT NULL THEN
6041 --
6042 -- Added for fix:5125858
6043 IF IS_ITEM_REVISION_VALID(
6044 p_inventory_item_id => p_charges_detail_rec.inventory_item_id_in,
6045 p_item_revision => p_charges_detail_rec.item_revision,
6046 x_msg_data => l_msg_data,
6047 x_msg_count => l_msg_count,
6048 x_return_status => l_return_status) = 'N' THEN
6049
6050 Add_Invalid_Argument_Msg(l_api_name,
6051 TO_CHAR(p_charges_detail_rec.item_revision),
6052 'item_revision');
6053 RAISE FND_API.G_EXC_ERROR;
6054 ELSE
6055 x_charges_detail_rec.item_revision := p_charges_detail_rec.item_revision;
6056
6057 END IF;
6058 --
6059 -- Added for fix:5125858
6060 ELSE
6061 --get the revision from the database
6062 x_charges_detail_rec.item_revision := l_db_det_rec.item_revision;
6063 END IF;
6064 ELSE
6065 --l_rev_control_flag = 'N' THEN ignore the item revision
6066 x_charges_detail_rec.item_revision := NULL;
6067 END IF;
6068
6069 END IF;
6070
6071 --DBMS_OUTPUT.PUT_LINE('Item Revision '||x_charges_detail_rec.item_revision);
6072
6073
6074 END IF;
6075
6076 --=========================
6077 --Line Number Validation
6078 --=========================
6079 --DBMS_OUTPUT.PUT_LINE('Line Number Validation ...');
6080 -- Added for fix:5125385
6081 IF p_validation_mode = 'I' THEN
6082 IF p_charges_detail_rec.line_number IS NOT NULL AND
6083 p_charges_detail_rec.line_number <> FND_API.G_MISS_NUM THEN
6084 -- If the line number already exists or <= 0, then raise an error message
6085 IF IS_LINE_NUMBER_VALID(
6086 p_line_number => p_charges_detail_rec.line_number,
6087 p_incident_id => p_charges_detail_rec.incident_id,
6088 x_msg_data => l_msg_data,
6089 x_msg_count => l_msg_count,
6090 x_return_status => l_return_status) = 'Y' THEN
6091
6092 Add_Invalid_Argument_Msg(l_api_name,
6093 TO_CHAR(p_charges_detail_rec.line_number),
6094 'line_number');
6095 RAISE FND_API.G_EXC_ERROR;
6096 ELSE
6097 x_charges_detail_rec.line_number := p_charges_detail_rec.line_number;
6098
6099 END IF;
6100
6101 END IF;
6102
6103 ELSIF p_validation_mode = 'U' THEN
6104 -- no validation is performed for update mode
6105 null;
6106
6107 END IF;
6108 --======================
6109 --UOM Validation
6110 --======================
6111 --DBMS_OUTPUT.PUT_LINE('UOM Validation ... p_charges_detail_rec.unit_of_measure_code='||p_charges_detail_rec.unit_of_measure_code);
6112 IF p_validation_mode = 'I' THEN
6113
6114 IF p_charges_detail_rec.unit_of_measure_code IS NOT NULL THEN
6115
6116
6117 l_valid_check := IS_UOM_VALID(
6118 p_inv_id => p_charges_detail_rec.inventory_item_id_in,
6119 p_uom_code => p_charges_detail_rec.unit_of_measure_code,
6120 x_msg_data => l_msg_data,
6121 x_msg_count => l_msg_count,
6122 x_return_status => l_return_status);
6123
6124 IF l_return_status = G_RET_STS_UNEXP_ERROR THEN
6125 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
6126 ELSIF l_return_status = G_RET_STS_ERROR THEN
6127 RAISE FND_API.G_EXC_ERROR;
6128 END IF;
6129
6130 IF l_valid_check <> 'Y' THEN
6131 Add_Invalid_Argument_Msg(l_api_name,
6132 p_charges_detail_rec.unit_of_measure_code,
6133 'Unit_of_Measure_Code');
6134 RAISE FND_API.G_EXC_ERROR;
6135
6136 ELSE
6137 --assign to out record
6138 x_charges_detail_rec.unit_of_measure_code := p_charges_detail_rec.unit_of_measure_code;
6139 END IF;
6140
6141 ELSE
6142 -- p_charges_detail_rec.unit_of_measure_code IS NULL, call get primary UOM Proc
6143
6144 --DBMS_OUTPUT.PUT_LINE('Calling GET_PRIMARY_UOM');
6145 GET_PRIMARY_UOM(P_INV_ID => p_charges_detail_rec.inventory_item_id_in,
6146 X_PRIMARY_UOM => l_primary_uom,
6147 X_MSG_DATA => l_msg_data ,
6148 X_MSG_COUNT => l_msg_count,
6149 X_RETURN_STATUS => l_return_status);
6150
6151 --DBMS_OUTPUT.PUT_LINE('Back from GET_PRIMARY_UOM status='||l_return_status || ' l_primary_uom '||l_primary_uom);
6152
6153 --IF l_return_status <> 'S' THEN
6154 IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
6155 --raise error
6156 FND_MESSAGE.SET_NAME('CS', 'CS_CHG_GET_PRIMARY_UOM_ERROR');
6157 FND_MESSAGE.SET_TOKEN('INV_ID', p_charges_detail_rec.inventory_item_id_in);
6158 FND_MSG_PUB.ADD;
6159 RAISE FND_API.G_EXC_ERROR;
6160 END IF;
6161
6162 --assign to out record
6163 x_charges_detail_rec.unit_of_measure_code := l_primary_uom;
6164
6165 END IF;
6166
6167 ELSIF p_validation_mode = 'U' THEN
6168
6169 -- Resolve Bug # 3078244
6170
6171 IF l_item_changed = 'Y' THEN
6172 IF p_charges_detail_rec.unit_of_measure_code <> FND_API.G_MISS_CHAR AND
6173 p_charges_detail_rec.unit_of_measure_code IS NOT NULL THEN
6174
6175 l_valid_check := IS_UOM_VALID(
6176 p_inv_id => p_charges_detail_rec.inventory_item_id_in,
6177 p_uom_code => p_charges_detail_rec.unit_of_measure_code,
6178 x_msg_data => l_msg_data,
6179 x_msg_count => l_msg_count,
6180 x_return_status => l_return_status);
6181
6182 IF l_return_status = G_RET_STS_UNEXP_ERROR THEN
6183 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
6184 ELSIF l_return_status = G_RET_STS_ERROR THEN
6185 RAISE FND_API.G_EXC_ERROR;
6186 END IF;
6187
6188 IF l_valid_check <> 'Y' THEN
6189 Add_Invalid_Argument_Msg(l_api_name,
6190 p_charges_detail_rec.unit_of_measure_code,
6191 'Unit_of_Measure_Code');
6192 RAISE FND_API.G_EXC_ERROR;
6193
6194 ELSE
6195 --assign to out record
6196 x_charges_detail_rec.unit_of_measure_code := p_charges_detail_rec.unit_of_measure_code;
6197
6198 --Condition added to fix Bug # 3358531
6199 IF x_charges_detail_rec.unit_of_measure_code <> l_db_det_rec.unit_of_measure_code THEN
6200 --Unit Of Measure is changed need to re-calculate the list price
6201 l_calc_sp := 'Y';
6202 END IF;
6203
6204 END IF;
6205
6206
6207 ELSE
6208 -- p_charges_detail_rec.unit_of_measure_code is not passed
6209 -- get primary UOM Proc
6210 GET_PRIMARY_UOM(P_INV_ID => p_charges_detail_rec.inventory_item_id_in,
6211 X_PRIMARY_UOM => l_primary_uom,
6212 X_MSG_DATA => l_msg_data,
6213 X_MSG_COUNT => l_msg_count,
6214 X_RETURN_STATUS => l_return_status);
6215
6216 --IF l_return_status <> 'S' THEN
6217 IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
6218 --raise error
6219 FND_MESSAGE.SET_NAME('CS', 'CS_CHG_GET_PRIMARY_UOM_ERROR');
6220 FND_MESSAGE.SET_TOKEN('INV_ID', p_charges_detail_rec.inventory_item_id_in);
6221 FND_MSG_PUB.ADD;
6222 RAISE FND_API.G_EXC_ERROR;
6223 END IF;
6224
6225 --assign to out record
6226 x_charges_detail_rec.unit_of_measure_code := l_primary_uom;
6227
6228 --Condition added to fix Bug # 3358531
6229 IF x_charges_detail_rec.unit_of_measure_code <> l_db_det_rec.unit_of_measure_code THEN
6230 --Unit Of Measure is changed need to re-calculate the list price
6231 l_calc_sp := 'Y';
6232 END IF;
6233
6234 END IF;
6235
6236 ELSE
6237
6238 -- l_item_changed = 'N';
6239 IF p_charges_detail_rec.unit_of_measure_code <> FND_API.G_MISS_CHAR AND
6240 p_charges_detail_rec.unit_of_measure_code IS NOT NULL THEN
6241
6242 l_valid_check := IS_UOM_VALID(
6243 p_inv_id => p_charges_detail_rec.inventory_item_id_in,
6244 p_uom_code => p_charges_detail_rec.unit_of_measure_code,
6245 x_msg_data => l_msg_data,
6246 x_msg_count => l_msg_count,
6247 x_return_status => l_return_status);
6248
6249 IF l_return_status = G_RET_STS_UNEXP_ERROR THEN
6250 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
6251 ELSIF l_return_status = G_RET_STS_ERROR THEN
6252 RAISE FND_API.G_EXC_ERROR;
6253 END IF;
6254
6255 IF l_valid_check <> 'Y' THEN
6256 Add_Invalid_Argument_Msg(l_api_name,
6257 p_charges_detail_rec.unit_of_measure_code,
6258 'Unit_of_Measure_Code');
6259 RAISE FND_API.G_EXC_ERROR;
6260 ELSE
6261 --assign to out record
6262 x_charges_detail_rec.unit_of_measure_code := p_charges_detail_rec.unit_of_measure_code;
6263
6264 --Condition added to fix Bug # 3358531
6265 IF x_charges_detail_rec.unit_of_measure_code <> l_db_det_rec.unit_of_measure_code THEN
6266 --Unit Of Measure is changed need to re-calculate the list price
6267 l_calc_sp := 'Y';
6268 END IF;
6269 END IF;
6270 ELSE
6271 -- p_charges_rec.unit_of_measure_code is not passed or null
6272 -- assign db record to out record
6273 x_charges_detail_rec.unit_of_measure_code := l_db_det_rec.unit_of_measure_code;
6274 END IF;
6275
6276 END IF;
6277
6278 END IF;
6279 --DBMS_OUTPUT.PUT_LINE('UOM Validation completed... x_charges_detail_rec.unit_of_measure_code='||x_charges_detail_rec.unit_of_measure_code);
6280
6281
6282 --==========================================
6283 --Billing Flag Validation Note: billing flag means billing category
6284 --==========================================
6285 --DBMS_OUTPUT.PUT_LINE('Billing Flag Validation ...');
6286 IF p_validation_mode = 'I' THEN
6287
6288 --DBMS_OUTPUT.PUT_LINE('Calling GET_BILLING_FLAG. p_charges_detail_rec.inventory_item_id_in=' || p_charges_detail_rec.inventory_item_id_in);
6289 --DBMS_OUTPUT.PUT_LINE('p_charges_detail_rec.transaction_type_id=' || p_charges_detail_rec.transaction_type_id);
6290
6291 GET_BILLING_FLAG(
6292 P_API_NAME => p_api_name,
6293 P_INV_ID => p_charges_detail_rec.inventory_item_id_in,
6294 P_TXN_TYPE_ID => p_charges_detail_rec.transaction_type_id,
6295 X_BILLING_FLAG => l_billing_flag,
6296 X_MSG_DATA => l_msg_data,
6297 X_MSG_COUNT => l_msg_count,
6298 X_RETURN_STATUS => l_return_status);
6299
6300 --DBMS_OUTPUT.PUT_LINE('Back from GET_BILLING_FLAG. Status='||l_return_status||' l_billing_flag='||l_billing_flag);
6301
6302 IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
6303 RAISE FND_API.G_EXC_ERROR;
6304 END IF;
6305
6306 --DBMS_OUTPUT.PUT_LINE('p_charges_detail_rec.billing_flag = ' || p_charges_detail_rec.billing_flag);
6307 --DBMS_OUTPUT.PUT_LINE('l_billing_flag = ' || l_billing_flag);
6308
6309 IF p_charges_detail_rec.billing_flag IS NOT NULL THEN
6310 --DBMS_OUTPUT.PUT_LINE('P_Billing_Flag is not null');
6311 IF p_charges_detail_rec.billing_flag = l_billing_flag THEN
6312 x_charges_detail_rec.billing_flag := p_charges_detail_rec.billing_flag;
6313 ELSE
6314 -- Billing Flag does not match, raise Error
6315 FND_MESSAGE.SET_NAME('CS', 'CS_CHG_INVALID_BILLING_FLAG');
6316 FND_MESSAGE.SET_TOKEN('BILLING_FLAG', p_charges_detail_rec.billing_flag);
6317 FND_MSG_PUB.ADD;
6318 RAISE FND_API.G_EXC_ERROR;
6319 END IF;
6320 ELSE
6321 -- p_charges_detail_rec.billing_flag is null
6322 -- assign l_billing_flag to out record
6323 --DBMS_OUTPUT.PUT_LINE('P_Billing_Flag is not null');
6324 x_charges_detail_rec.billing_flag := l_billing_flag;
6325 END IF;
6326
6327 --DBMS_OUTPUT.PUT_LINE('Billing Flag is '||x_charges_detail_rec.billing_flag);
6328
6329 ELSIF p_validation_mode = 'U' THEN
6330
6331 IF l_item_changed = 'Y' OR
6332 l_transaction_type_changed = 'Y' THEN
6333 --get the new billing flag
6334 GET_BILLING_FLAG(
6335 P_API_NAME => p_api_name,
6336 P_INV_ID => x_charges_detail_rec.inventory_item_id_in,
6337 P_TXN_TYPE_ID => x_charges_detail_rec.transaction_type_id,
6338 X_BILLING_FLAG => l_billing_flag,
6339 X_MSG_DATA => l_msg_data,
6340 X_MSG_COUNT => l_msg_count,
6341 X_RETURN_STATUS => l_return_status);
6342
6343 IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
6344 RAISE FND_API.G_EXC_ERROR ;
6345 END IF;
6346
6347 IF p_charges_detail_rec.billing_flag <> FND_API.G_MISS_CHAR AND
6348 p_charges_detail_rec.billing_flag IS NOT NULL THEN
6349 IF p_charges_detail_rec.billing_flag = l_billing_flag THEN
6350 x_charges_detail_rec.billing_flag := p_charges_detail_rec.billing_flag;
6351 ELSE
6352 -- Billing Flag does not match
6353 -- Raise Error
6354 FND_MESSAGE.SET_NAME('CS', 'CS_CHG_INVALID_BILLING_FLAG');
6355 FND_MESSAGE.SET_TOKEN('BILLING_FLAG', p_charges_detail_rec.billing_flag);
6356 FND_MSG_PUB.ADD;
6357 RAISE FND_API.G_EXC_ERROR;
6358 END IF;
6359
6360 ELSE
6361 -- p_charges_detail_rec.billing_flag is is not passed or is null
6362 -- assign l_billing_flag to out record
6363 x_charges_detail_rec.billing_flag := l_billing_flag;
6364 END IF;
6365
6366 ELSE
6367 --niether item nor transaction type changed
6368 --assign attribute from db_record
6369 --x_charges_detail_rec.billing_flag := l_db_det_rec.billing_flag; -- no such column
6370
6371 GET_BILLING_FLAG(
6372 P_API_NAME => p_api_name,
6373 P_INV_ID => x_charges_detail_rec.inventory_item_id_in,
6374 P_TXN_TYPE_ID => x_charges_detail_rec.transaction_type_id,
6375 X_BILLING_FLAG => l_billing_flag,
6376 X_MSG_DATA => l_msg_data,
6377 X_MSG_COUNT => l_msg_count,
6378 X_RETURN_STATUS => l_return_status);
6379
6380 IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
6381 RAISE FND_API.G_EXC_ERROR ;
6382 END IF;
6383
6384 x_charges_detail_rec.billing_flag := l_billing_flag;
6385 END IF;
6386
6387 --DBMS_OUTPUT.PUT_LINE('Completes Billing Flag Validation ...');
6388
6389 END IF;
6390
6391 --=======================================
6392 --Transaction Billing Type ID Validation
6393 --=======================================
6394 --DBMS_OUTPUT.PUT_LINE('Transaction Billing Type ID Validation ...');
6395 IF p_validation_mode = 'I' THEN
6396
6397 --DBMS_OUTPUT.PUT_LINE('Calling GET_TXN_BILLING_TYPE');
6398 GET_TXN_BILLING_TYPE(P_API_NAME => p_api_name,
6399 P_INV_ID => p_charges_detail_rec.inventory_item_id_in,
6400 P_TXN_TYPE_ID => p_charges_detail_rec.transaction_type_id,
6401 X_TXN_BILLING_TYPE_ID => l_txn_billing_type_id,
6402 X_MSG_DATA => l_msg_data,
6403 X_MSG_COUNT => l_msg_count,
6404 X_RETURN_STATUS => l_return_status);
6405 --DBMS_OUTPUT.PUT_LINE('Back from GET_TXN_BILLING_TYPE '||l_return_status);
6406
6407 IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
6408
6409 RAISE FND_API.G_EXC_ERROR ;
6410
6411 ELSE
6412
6413 IF p_charges_detail_rec.txn_billing_type_id IS NOT NULL THEN
6414
6415 IF p_charges_detail_rec.txn_billing_type_id <> l_txn_billing_type_id THEN
6416 --RAISE ERROR
6417 FND_MESSAGE.SET_NAME('CS', 'CS_CHG_INVALID_TXN_BILLING_TYP');
6418 FND_MESSAGE.SET_TOKEN('TXN_BILLING_TYPE_ID', p_charges_detail_rec.txn_billing_type_id);
6419 FND_MSG_PUB.ADD;
6420 RAISE FND_API.G_EXC_ERROR;
6421 ELSE --
6422 --the ids match
6423 --assign to the out record
6424 x_charges_detail_rec.txn_billing_type_id := p_charges_detail_rec.txn_billing_type_id ;
6425 END IF;
6426
6427 ELSE
6428 -- p_charges_detail_rec.txn_billing_type_id is null
6429 -- assign l_txn_billing_type_id to out record
6430 x_charges_detail_rec.txn_billing_type_id := l_txn_billing_type_id;
6431 END IF;
6432
6433 END IF;
6434
6435 ELSIF p_validation_mode = 'U' THEN
6436
6437 IF l_item_changed = 'Y' OR
6438 l_transaction_type_changed = 'Y' THEN
6439
6440 --need to get the txn billing type for changed parameters
6441
6442 GET_TXN_BILLING_TYPE(P_API_NAME => p_api_name,
6443 P_INV_ID => x_charges_detail_rec.inventory_item_id_in,
6444 P_TXN_TYPE_ID => x_charges_detail_rec.transaction_type_id,
6445 X_TXN_BILLING_TYPE_ID => l_txn_billing_type_id,
6446 X_MSG_DATA => l_msg_data,
6447 X_MSG_COUNT => l_msg_count,
6448 X_RETURN_STATUS => l_return_status);
6449
6450 IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
6451 RAISE FND_API.G_EXC_ERROR ;
6452 END IF;
6453
6454 IF p_charges_detail_rec.txn_billing_type_id <> FND_API.G_MISS_NUM AND
6455 p_charges_detail_rec.txn_billing_type_id IS NOT NULL THEN
6456 IF p_charges_detail_rec.txn_billing_type_id <> l_txn_billing_type_id THEN
6457 --RAISE ERROR
6458 FND_MESSAGE.SET_NAME('CS', 'CS_CHG_INVALID_TXN_BILLING_TYP');
6459 FND_MESSAGE.SET_TOKEN('TXN_BILLING_TYPE_ID', p_charges_detail_rec.txn_billing_type_id);
6460 FND_MSG_PUB.ADD;
6461 RAISE FND_API.G_EXC_ERROR;
6462 ELSE --
6463 --the ids match
6464 --assign to the out record
6465 x_charges_detail_rec.txn_billing_type_id := p_charges_detail_rec.txn_billing_type_id ;
6466 END IF;
6467
6468 ELSE
6469
6470 -- p_charges_detail_rec.txn_billing_type_id is not passed
6471 -- assign l_txn_billing_type_id to out record
6472 x_charges_detail_rec.txn_billing_type_id := l_txn_billing_type_id;
6473
6474 END IF;
6475
6476 ELSE
6477
6478 -- niether the item nor the transaction type is changed
6479 -- assign the billing type from db
6480 x_charges_detail_rec.txn_billing_type_id := l_db_det_rec.txn_billing_type_id;
6481
6482 END IF;
6483
6484 --DBMS_OUTPUT.PUT_LINE('Completed the txn billing type id');
6485
6486 END IF;
6487
6488
6489 --=======================================
6490 --Line Type ID
6491 --=======================================
6492 --DBMS_OUTPUT.PUT_LINE('Line Type ID Validation ...');
6493 IF p_validation_mode = 'I' THEN
6494
6495 --DBMS_OUTPUT.PUT_LINE('Calling get_line_type ...');
6496 --DBMS_OUTPUT.PUT_LINE('p_charges_detail_rec.transaction_type_id = ' || p_charges_detail_rec.transaction_type_id);
6497 --DBMS_OUTPUT.PUT_LINE('x_charges_detail_rec.transaction_type_id = ' || x_charges_detail_rec.transaction_type_id);
6498 --DBMS_OUTPUT.PUT_LINE('x_charges_detail_rec.txn_billing_type_id = ' || x_charges_detail_rec.txn_billing_type_id);
6499 --Fixed Bug # 3325667 added p_org_id to procedure get_line_type
6500 Get_Line_Type(
6501 p_api_name => p_api_name,
6502 p_txn_billing_type_id => x_charges_detail_rec.txn_billing_type_id,
6503 p_org_id => x_charges_detail_rec.org_id,
6504 x_line_type_id => l_line_type_id,
6505 x_return_status => l_return_status,
6506 x_msg_count => l_msg_count,
6507 x_msg_data => l_msg_data);
6508
6509 --DBMS_OUTPUT.PUT_LINE('Back from Calling get_line_type. status = '||l_return_status);
6510 --DBMS_OUTPUT.PUT_LINE('msg_data = '||l_msg_data);
6511
6512 IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
6513
6514 RAISE FND_API.G_EXC_ERROR ;
6515
6516 ELSE
6517
6518 --DBMS_OUTPUT.PUT_LINE('p_charges_detail_rec.line_type_id = '||p_charges_detail_rec.line_type_id);
6519 --DBMS_OUTPUT.PUT_LINE('l_line_type_id = '||l_line_type_id);
6520 --DBMS_OUTPUT.PUT_LINE('x_charges_detail_rec.txn_billing_type_id = '||x_charges_detail_rec.txn_billing_type_id);
6521
6522 IF p_charges_detail_rec.line_type_id IS NOT NULL THEN
6523
6524 IF p_charges_detail_rec.line_type_id <> l_line_type_id THEN
6525 --RAISE ERROR
6526 --DBMS_OUTPUT.PUT_LINE('here is the error');
6527 FND_MESSAGE.SET_NAME('CS', 'CS_CHG_INVALID_LINE_TYPE');
6528 FND_MESSAGE.SET_TOKEN('LINE_TYPE_ID', p_charges_detail_rec.line_type_id);
6529 FND_MESSAGE.SET_TOKEN('TXN_LINE_TYPE_ID', l_line_type_id);
6530 FND_MESSAGE.SET_TOKEN('TXN_BILLING_TYPE_ID', x_charges_detail_rec.txn_billing_type_id);
6531 FND_MSG_PUB.ADD;
6532 RAISE FND_API.G_EXC_ERROR;
6533 ELSE --
6534 --the ids match
6535 --assign to the out record
6536 x_charges_detail_rec.line_type_id := p_charges_detail_rec.line_type_id;
6537 END IF;
6538
6539 ELSE
6540 -- p_charges_detail_rec.line_type_id is null
6541 -- assign l_line_type_id to out record
6542 x_charges_detail_rec.line_type_id := l_line_type_id;
6543 END IF;
6544
6545 END IF;
6546
6547 ELSIF p_validation_mode = 'U' THEN
6548
6549 IF l_item_changed = 'Y' OR
6550 l_transaction_type_changed = 'Y' THEN
6551
6552 --need to get the line type id for changed parameters
6553 --Fixed Bug # 3325667 added p_org_id to procedure get_line_type
6554
6555 Get_Line_Type(p_api_name => p_api_name,
6556 p_txn_billing_type_id => x_charges_detail_rec.txn_billing_type_id,
6557 p_org_id => x_charges_detail_rec.org_id,
6558 x_line_type_id => l_line_type_id,
6559 x_return_status => l_return_status,
6560 x_msg_count => l_msg_count,
6561 x_msg_data => l_msg_data);
6562
6563 IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
6564 RAISE FND_API.G_EXC_ERROR ;
6565 END IF;
6566
6567 IF p_charges_detail_rec.line_type_id <> FND_API.G_MISS_NUM AND
6568 p_charges_detail_rec.line_type_id IS NOT NULL THEN
6569 IF p_charges_detail_rec.line_type_id <> l_line_type_id THEN
6570 --RAISE ERROR
6571 FND_MESSAGE.SET_NAME('CS', 'CS_CHG_INVALID_LINE_TYPE');
6572 FND_MESSAGE.SET_TOKEN('LINE_TYPE_ID', p_charges_detail_rec.line_type_id);
6573 FND_MESSAGE.SET_TOKEN('TXN_LINE_TYPE_ID', l_line_type_id);
6574 FND_MESSAGE.SET_TOKEN('TXN_BILLING_TYPE_ID', x_charges_detail_rec.txn_billing_type_id);
6575 FND_MSG_PUB.ADD;
6576 RAISE FND_API.G_EXC_ERROR;
6577 ELSE --
6578 --the ids match
6579 --assign to the out record
6580 x_charges_detail_rec.line_type_id := p_charges_detail_rec.line_type_id;
6581 END IF;
6582
6583 ELSE
6584
6585 -- p_charges_detail_rec.line_type_id is null
6586 -- assign l_line_type_id to out record
6587 x_charges_detail_rec.line_type_id := l_line_type_id;
6588
6589 END IF;
6590
6591 ELSE
6592
6593 -- niether the item nor the transaction type is changed
6594 -- assign the line_type_id from db
6595 x_charges_detail_rec.line_type_id := l_db_det_rec.line_type_id;
6596
6597 END IF;
6598
6599 --DBMS_OUTPUT.PUT_LINE('Completed Line Type Id Validation successfully ...');
6600
6601 END IF;
6602
6603
6604 --=====================================
6605 --TCA Validation
6606 --=====================================
6607 --DBMS_OUTPUT.PUT_LINE('TCA Validation ...');
6608
6609 IF p_validation_mode = 'I' THEN
6610
6611 -- Bill to Valdation
6612 --
6613 --DBMS_OUTPUT.PUT_LINE('In the the TCA Validation');
6614
6615 IF p_charges_detail_rec.bill_to_party_id IS NOT NULL THEN
6616
6617 IF IS_PARTY_VALID(p_party_id => p_charges_detail_rec.bill_to_party_id,
6618 x_msg_data => l_msg_data,
6619 x_msg_count => l_msg_count,
6620 x_return_status => l_return_status) = 'N' THEN
6621
6622 Add_Invalid_Argument_Msg(l_api_name,
6623 to_char(p_charges_detail_rec.bill_to_party_id),
6624 'Bill_to_Party_Id');
6625 RAISE FND_API.G_EXC_ERROR;
6626
6627 ELSE
6628 --assign to out record
6629 x_charges_detail_rec.bill_to_party_id := p_charges_detail_rec.bill_to_party_id;
6630
6631 IF p_charges_detail_rec.bill_to_account_id IS NOT NULL THEN
6632
6633
6634 IF IS_ACCOUNT_VALID(p_party_id => p_charges_detail_rec.bill_to_party_id,
6635 p_account_id => p_charges_detail_rec.bill_to_account_id,
6636 x_msg_data => l_msg_data,
6637 x_msg_count => l_msg_count,
6638 x_return_status => l_return_status) = 'U' THEN
6639 --raise unexpected error
6640 Raise FND_API.G_EXC_UNEXPECTED_ERROR;
6641 null;
6642 ELSIF IS_ACCOUNT_VALID(p_party_id => p_charges_detail_rec.bill_to_party_id,
6643 p_account_id => p_charges_detail_rec.bill_to_account_id,
6644 x_msg_data => l_msg_data,
6645 x_msg_count => l_msg_count,
6646 x_return_status => l_return_status) = 'N' THEN
6647
6648 Add_Invalid_Argument_Msg(l_api_name,
6649 to_char(p_charges_detail_rec.bill_to_account_id),
6650 'Bill_to_Account_Id');
6651 RAISE FND_API.G_EXC_ERROR;
6652 null;
6653 ELSE
6654 -- assign to out record
6655 x_charges_detail_rec.bill_to_account_id := p_charges_detail_rec.bill_to_account_id;
6656 END IF;
6657 ELSE
6658 -- bill_to_account IS NULL
6659 -- assign NULL to out record
6660 x_charges_detail_rec.bill_to_account_id := NULL;
6661 END IF;
6662 IF p_charges_detail_rec.bill_to_contact_id IS NOT NULL THEN
6663
6664
6665 IF IS_CONTACT_VALID(p_party_id => p_charges_detail_rec.bill_to_party_id,
6666 p_contact_id => p_charges_detail_rec.bill_to_contact_id,
6667 x_msg_data => l_msg_data,
6668 x_msg_count => l_msg_count,
6669 x_return_status => l_return_status) = 'U' THEN
6670 --raise unexpected error
6671 Raise FND_API.G_EXC_UNEXPECTED_ERROR;
6672 null;
6673
6674 ELSIF IS_CONTACT_VALID(p_party_id => p_charges_detail_rec.bill_to_party_id,
6675 p_contact_id => p_charges_detail_rec.bill_to_contact_id,
6676 x_msg_data => l_msg_data,
6677 x_msg_count => l_msg_count,
6678 x_return_status => l_return_status) = 'N' THEN
6679
6680 Add_Invalid_Argument_Msg(l_api_name,
6681 to_char(p_charges_detail_rec.bill_to_contact_id),
6682 'Bill_to_Contact_Id');
6683 RAISE FND_API.G_EXC_ERROR;
6684 null;
6685 ELSE
6686 -- assign to out record
6687 x_charges_detail_rec.bill_to_contact_id := p_charges_detail_rec.bill_to_contact_id;
6688 END IF;
6689 ELSE
6690 -- bill_to_contact IS NULL
6691 -- assign NULL to out record
6692 x_charges_detail_rec.bill_to_contact_id := NULL;
6693 END IF;
6694
6695 IF p_charges_detail_rec.invoice_to_org_id IS NOT NULL THEN
6696
6697
6698 IF IS_PARTY_SITE_VALID( p_party_site_id => p_charges_detail_rec.invoice_to_org_id,
6699 p_party_id => p_charges_detail_rec.bill_to_party_id,
6700 p_val_mode => 'BILL_TO',
6701 x_msg_data => l_msg_data,
6702 x_msg_count => l_msg_count,
6703 x_return_status => l_return_status) = 'U' THEN
6704 --raise unexpected error
6705 Raise FND_API.G_EXC_UNEXPECTED_ERROR;
6706 null;
6707 ELSIF IS_PARTY_SITE_VALID( p_party_site_id => p_charges_detail_rec.invoice_to_org_id,
6708 p_party_id => p_charges_detail_rec.bill_to_party_id,
6709 p_val_mode => 'BILL_TO',
6710 x_msg_data => l_msg_data,
6711 x_msg_count => l_msg_count,
6712 x_return_status => l_return_status) = 'N' THEN
6713 Add_Invalid_Argument_Msg(l_api_name,
6714 to_char(p_charges_detail_rec.invoice_to_org_id),
6715 'Invoice_to_org_Id');
6716 RAISE FND_API.G_EXC_ERROR;
6717 null;
6718 ELSE
6719 --assign to out record
6720 x_charges_detail_rec.invoice_to_org_id := p_charges_detail_rec.invoice_to_org_id;
6721 END IF;
6722
6723 ELSE
6724 --invoice_to_org_id IS NULL
6725 --assign NULL to out record
6726 x_charges_detail_rec.invoice_to_org_id := NULL;
6727 END IF;
6728 END IF;
6729
6730 ELSE
6731 -- p_charges_detail_rec.bill_to_party_id IS NULL
6732 -- default TCA information from SR
6733
6734 --DBMS_OUTPUT.PUT_LINE('p_charges_detail_rec.bill_to_party_id IS NULL............');
6735 --DBMS_OUTPUT.PUT_LINE('l_bill_to_party_id'||l_bill_to_party_id);
6736
6737 IF l_bill_to_party_id <> -999 THEN
6738
6739 IF IS_PARTY_VALID(p_party_id => l_bill_to_party_id,
6740 x_msg_data => l_msg_data,
6741 x_msg_count => l_msg_count,
6742 x_return_status => l_return_status) = 'N' THEN
6743
6744 Add_Invalid_Argument_Msg(l_api_name,
6745 to_char(l_bill_to_party_id),
6746 'Bill_to_Party_Id');
6747 RAISE FND_API.G_EXC_ERROR;
6748 null;
6749 ELSE
6750
6751 --DBMS_OUTPUT.PUT_LINE('l_bill_to_party_id assigned ...' || l_bill_to_party_id);
6752
6753 --assign to out record
6754 x_charges_detail_rec.bill_to_party_id := l_bill_to_party_id;
6755
6756 IF l_bill_to_account_id <> -999 THEN
6757 IF IS_ACCOUNT_VALID(p_party_id => l_bill_to_party_id,
6758 p_account_id => l_bill_to_account_id,
6759 x_msg_data => l_msg_data,
6760 x_msg_count => l_msg_count,
6761 x_return_status => l_return_status) = 'U' THEN
6762 --raise unexpected error
6763 Raise FND_API.G_EXC_UNEXPECTED_ERROR;
6764 null;
6765
6766 ELSIF IS_ACCOUNT_VALID(p_party_id => l_bill_to_party_id,
6767 p_account_id => l_bill_to_account_id,
6768 x_msg_data => l_msg_data,
6769 x_msg_count => l_msg_count,
6770 x_return_status => l_return_status) = 'N' THEN
6771
6772 Add_Invalid_Argument_Msg(l_api_name,
6773 to_char(l_bill_to_account_id),
6774 'Bill_to_Account_Id');
6775 RAISE FND_API.G_EXC_ERROR;
6776 null;
6777 ELSE
6778 --DBMS_OUTPUT.PUT_LINE(' l_bill_to_account_id assigned ....'||l_bill_to_account_id);
6779
6780 -- assign to out record
6781 x_charges_detail_rec.bill_to_account_id := l_bill_to_account_id;
6782 END IF;
6783 ELSE
6784 --l_bill_to_account is -999
6785 --assign NULL to out record
6786 --DBMS_OUTPUT.PUT_LINE(' l_bill_to_account_id assigned is null ');
6787 x_charges_detail_rec.bill_to_account_id := NULL;
6788
6789 END IF;
6790
6791 IF l_bill_to_contact_id <> -999 THEN
6792 IF IS_CONTACT_VALID(p_party_id => l_bill_to_party_id,
6793 p_contact_id => l_bill_to_contact_id,
6794 x_msg_data => l_msg_data,
6795 x_msg_count => l_msg_count,
6796 x_return_status => l_return_status) = 'U' THEN
6797 --raise unexpected error
6798 Raise FND_API.G_EXC_UNEXPECTED_ERROR;
6799 null;
6800
6801 ELSIF IS_CONTACT_VALID(p_party_id => l_bill_to_party_id,
6802 p_contact_id => l_bill_to_contact_id,
6803 x_msg_data => l_msg_data,
6804 x_msg_count => l_msg_count,
6805 x_return_status => l_return_status) = 'N' THEN
6806
6807 Add_Invalid_Argument_Msg(l_api_name,
6808 to_char(l_bill_to_contact_id),
6809 'Bill_to_Contact_Id');
6810 RAISE FND_API.G_EXC_ERROR;
6811 null;
6812 ELSE
6813 -- assign to out record
6814 --DBMS_OUTPUT.PUT_LINE(' l_bill_to_contact_id assigned....'||l_bill_to_contact_id);
6815
6816 x_charges_detail_rec.bill_to_contact_id := l_bill_to_contact_id;
6817 END IF;
6818 ELSE
6819 --l_bill_to_contact_id IS NULL
6820 --assign NULL to out record
6821 --DBMS_OUTPUT.PUT_LINE(' l_bill_to_contact_id assigned null');
6822 x_charges_detail_rec.bill_to_contact_id := NULL;
6823 END IF;
6824
6825 IF l_bill_to_site_id <> -999 THEN
6826 x_charges_detail_rec.invoice_to_org_id := l_bill_to_site_id;
6827 ELSE
6828 --l_bill_to_site_use_id IS NULL
6829 --assign NULL to the out record
6830 --assign the customer_site_id
6831 x_charges_detail_rec.invoice_to_org_id := l_customer_site_id;
6832 END IF;
6833 --DBMS_OUTPUT.PUT_LINE('x_charges_detail_rec.invoice_to_org_id ...'||x_charges_detail_rec.invoice_to_org_id);
6834
6835 END IF;
6836 ELSE
6837 --l_bill_to_party_id is -999
6838 --Check If l_customer_id is not null
6839 IF l_customer_id IS NOT NULL THEN
6840
6841 IF IS_PARTY_VALID(p_party_id => l_customer_id,
6842 x_msg_data => l_msg_data,
6843 x_msg_count => l_msg_count,
6844 x_return_status => l_return_status) = 'N' THEN
6845
6846 Add_Invalid_Argument_Msg(l_api_name,
6847 to_char(l_customer_id),
6848 'Bill_to_Party_Id');
6849 RAISE FND_API.G_EXC_ERROR;
6850 null;
6851 ELSE
6852 --assign to out record
6853 x_charges_detail_rec.bill_to_party_id := l_customer_id;
6854 -- Fix For Bug 6356247--Start
6855 --x_charges_detail_rec.bill_to_contact_id := l_customer_id;
6856 x_charges_detail_rec.bill_to_contact_id := Null;
6857 -- Fix For Bug 6356247--End
6858
6859 IF l_account_id IS NOT NULL THEN
6860
6861
6862 IF IS_ACCOUNT_VALID(p_party_id => l_customer_id,
6863 p_account_id => l_account_id,
6864 x_msg_data => l_msg_data,
6865 x_msg_count => l_msg_count,
6866 x_return_status => l_return_status) = 'U' THEN
6867 --raise unexpected error
6868 Raise FND_API.G_EXC_UNEXPECTED_ERROR;
6869 null;
6870
6871 ELSIF IS_ACCOUNT_VALID(p_party_id => l_customer_id,
6872 p_account_id => l_account_id,
6873 x_msg_data => l_msg_data,
6874 x_msg_count => l_msg_count,
6875 x_return_status => l_return_status) = 'N' THEN
6876
6877 Add_Invalid_Argument_Msg(l_api_name,
6878 to_char(l_account_id),
6879 'Bill_to_Account_Id');
6880 RAISE FND_API.G_EXC_ERROR;
6881 null;
6882 ELSE
6883 -- assign to out record
6884 x_charges_detail_rec.bill_to_account_id :=l_account_id;
6885 END IF;
6886 END IF;
6887
6888 IF l_customer_site_id IS NOT NULL THEN
6889
6890 IF IS_PARTY_SITE_VALID( p_party_site_id => l_customer_site_id,
6891 p_party_id => l_customer_id,
6892 p_val_mode => 'NONE',
6893 x_msg_data => l_msg_data,
6894 x_msg_count => l_msg_count,
6895 x_return_status => l_return_status) = 'U' THEN
6896 --raise unexpected error
6897 Raise FND_API.G_EXC_UNEXPECTED_ERROR;
6898 null;
6899 ELSIF IS_PARTY_SITE_VALID( p_party_site_id => l_customer_site_id,
6900 p_party_id => l_customer_id,
6901 p_val_mode => 'NONE',
6902 x_msg_data => l_msg_data,
6903 x_msg_count => l_msg_count,
6904 x_return_status => l_return_status) = 'N' THEN
6905
6906 Add_Invalid_Argument_Msg(l_api_name,
6907 to_char(l_customer_site_id),
6908 'Invoice_to_Org_Id');
6909 RAISE FND_API.G_EXC_ERROR;
6910 null;
6911 ELSE
6912 --assign to out record
6913 x_charges_detail_rec.invoice_to_org_id := l_customer_site_id;
6914 END IF;
6915 ELSE
6916 --l_customer_site_id IS NULL
6917 --assign NULL to out record
6918 x_charges_detail_rec.invoice_to_org_id := NULL;
6919 END IF;
6920 END IF;
6921 ELSE
6922 x_charges_detail_rec.bill_to_party_id := NULL;
6923 x_charges_detail_rec.bill_to_account_id := NULL;
6924 x_charges_detail_rec.bill_to_contact_id := NULL;
6925 x_charges_detail_rec.invoice_to_org_id := NULL;
6926 END IF;
6927 END IF;
6928 END IF;
6929
6930 --DBMS_OUTPUT.PUT_LINE('Passed Bill To Validation .....');
6931
6932 -- Ship To Validation
6933 --
6934 --DBMS_OUTPUT.PUT_LINE(' ship tp party id '||p_charges_detail_rec.ship_to_party_id );
6935
6936 IF p_charges_detail_rec.ship_to_party_id IS NOT NULL THEN
6937
6938 IF IS_PARTY_VALID(p_party_id => p_charges_detail_rec.ship_to_party_id,
6939 x_msg_data => l_msg_data,
6940 x_msg_count => l_msg_count,
6941 x_return_status => l_return_status) = 'N' THEN
6942
6943
6944 Add_Invalid_Argument_Msg(l_api_name,
6945 to_char(p_charges_detail_rec.ship_to_party_id),
6946 'Ship_to_Party_Id');
6947
6948 x_msg_data := l_msg_data;
6949 x_return_status := l_return_status;
6950
6951 RAISE FND_API.G_EXC_ERROR;
6952
6953 ELSE
6954
6955 --DBMS_OUTPUT.PUT_LINE('Assigning the ship_to_party_id '||p_charges_detail_rec.ship_to_party_id);
6956
6957 --assign to out record
6958 x_charges_detail_rec.ship_to_party_id := p_charges_detail_rec.ship_to_party_id;
6959
6960 IF p_charges_detail_rec.ship_to_account_id IS NOT NULL THEN
6961
6962 IF IS_ACCOUNT_VALID(p_party_id => p_charges_detail_rec.ship_to_party_id,
6963 p_account_id => p_charges_detail_rec.ship_to_account_id,
6964 x_msg_data => l_msg_data,
6965 x_msg_count => l_msg_count,
6966 x_return_status => l_return_status) = 'U' THEN
6967 --raise unexpected error
6968 Raise FND_API.G_EXC_UNEXPECTED_ERROR;
6969 null;
6970
6971 ELSIF IS_ACCOUNT_VALID(p_party_id => p_charges_detail_rec.ship_to_party_id,
6972 p_account_id => p_charges_detail_rec.ship_to_account_id,
6973 x_msg_data => l_msg_data,
6974 x_msg_count => l_msg_count,
6975 x_return_status => l_return_status) = 'N' THEN
6976
6977 Add_Invalid_Argument_Msg(l_api_name,
6978 to_char(p_charges_detail_rec.ship_to_account_id),
6979 'Ship_to_Account_Id');
6980
6981 x_msg_data := l_msg_data;
6982 x_return_status := l_return_status;
6983
6984 RAISE FND_API.G_EXC_ERROR;
6985 ELSE
6986 -- assign to out record
6987 x_charges_detail_rec.ship_to_account_id := p_charges_detail_rec.ship_to_account_id;
6988 END IF;
6989 ELSE
6990 -- Ship To Account ID is NULL
6991 -- assign NULL to out record
6992 x_charges_detail_rec.ship_to_account_id := NULL;
6993 END IF;
6994
6995 IF p_charges_detail_rec.ship_to_contact_id IS NOT NULL THEN
6996
6997 IF IS_CONTACT_VALID(p_party_id => p_charges_detail_rec.ship_to_party_id,
6998 p_contact_id => p_charges_detail_rec.ship_to_contact_id,
6999 x_msg_data => l_msg_data,
7000 x_msg_count => l_msg_count,
7001 x_return_status => l_return_status) = 'U' THEN
7002 --raise unexpected error
7003 Raise FND_API.G_EXC_UNEXPECTED_ERROR;
7004 null;
7005 ELSIF IS_CONTACT_VALID(p_party_id => p_charges_detail_rec.ship_to_party_id,
7006 p_contact_id => p_charges_detail_rec.ship_to_contact_id,
7007 x_msg_data => l_msg_data,
7008 x_msg_count => l_msg_count,
7009 x_return_status => l_return_status) = 'N' THEN
7010
7011 Add_Invalid_Argument_Msg(l_api_name,
7012 to_char(p_charges_detail_rec.ship_to_contact_id),
7013 'Ship_to_Contact_Id');
7014 RAISE FND_API.G_EXC_ERROR;
7015
7016 ELSE
7017 -- assign to out record
7018 x_charges_detail_rec.ship_to_contact_id := p_charges_detail_rec.ship_to_contact_id;
7019 END IF;
7020 ELSE
7021 -- Ship To Contact is NULL
7022 -- assign NULL to out record
7023 x_charges_detail_rec.ship_to_contact_id := NULL;
7024 END IF;
7025
7026 IF p_charges_detail_rec.ship_to_org_id IS NOT NULL THEN
7027
7028
7029 IF IS_PARTY_SITE_VALID( p_party_site_id => p_charges_detail_rec.ship_to_org_id,
7030 p_party_id => p_charges_detail_rec.ship_to_party_id,
7031 p_val_mode => 'SHIP_TO',
7032 x_msg_data => l_msg_data,
7033 x_msg_count => l_msg_count,
7034 x_return_status => l_return_status) = 'U' THEN
7035 --raise unexpected error
7036 Raise FND_API.G_EXC_UNEXPECTED_ERROR;
7037 null;
7038 ELSIF IS_PARTY_SITE_VALID( p_party_site_id => p_charges_detail_rec.ship_to_org_id,
7039 p_party_id => p_charges_detail_rec.ship_to_party_id,
7040 p_val_mode => 'SHIP_TO',
7041 x_msg_data => l_msg_data,
7042 x_msg_count => l_msg_count,
7043 x_return_status => l_return_status) = 'N' THEN
7044
7045 Add_Invalid_Argument_Msg(l_api_name,
7046 to_char(p_charges_detail_rec.ship_to_org_id),
7047 'Ship_to_org_Id');
7048 RAISE FND_API.G_EXC_ERROR;
7049 null;
7050 ELSE
7051 --assign to out record
7052 x_charges_detail_rec.ship_to_org_id := p_charges_detail_rec.ship_to_org_id;
7053 END IF;
7054
7055 ELSE
7056 --ship_to_org_id IS NULL
7057 --assign NULL to out record
7058 x_charges_detail_rec.ship_to_org_id := NULL;
7059 END IF;
7060
7061 END IF;
7062
7063 ELSE
7064 -- p_charges_detail_rec.ship_to_party_id IS NULL
7065 -- default TCA information from SR
7066
7067 --DBMS_OUTPUT.PUT_LINE('ship to party id is null');
7068
7069 IF l_ship_to_party_id <> -999 THEN
7070 IF IS_PARTY_VALID(p_party_id => l_ship_to_party_id,
7071 x_msg_data => l_msg_data,
7072 x_msg_count => l_msg_count,
7073 x_return_status => l_return_status) = 'N' THEN
7074 RAISE FND_API.G_EXC_ERROR;
7075 null;
7076 ELSE
7077 --assign to out record
7078 x_charges_detail_rec.ship_to_party_id := l_ship_to_party_id;
7079
7080 IF l_ship_to_account_id <> -999 THEN
7081
7082
7083 IF IS_ACCOUNT_VALID(p_party_id => l_ship_to_party_id,
7084 p_account_id => l_ship_to_account_id,
7085 x_msg_data => l_msg_data,
7086 x_msg_count => l_msg_count,
7087 x_return_status => l_return_status) = 'U' THEN
7088 --raise unexpected error
7089 Raise FND_API.G_EXC_UNEXPECTED_ERROR;
7090 null;
7091
7092 ELSIF IS_ACCOUNT_VALID(p_party_id => l_ship_to_party_id,
7093 p_account_id => l_ship_to_account_id,
7094 x_msg_data => l_msg_data,
7095 x_msg_count => l_msg_count,
7096 x_return_status => l_return_status) = 'N' THEN
7097 Add_Invalid_Argument_Msg(l_api_name,
7098 to_char(l_ship_to_account_id),
7099 'Ship_to_Account_Id');
7100
7101 x_msg_data := l_msg_data;
7102 x_return_status := l_return_status;
7103
7104 RAISE FND_API.G_EXC_ERROR;
7105 ELSE
7106 -- assign to out record
7107 x_charges_detail_rec.ship_to_account_id := l_ship_to_account_id;
7108 END IF;
7109 ELSE
7110 -- Ship To Account is -999
7111 -- assign NULL to out record
7112 x_charges_detail_rec.ship_to_account_id := NULL;
7113 END IF;
7114
7115 IF l_ship_to_contact_id <> -999 THEN
7116
7117 IF IS_CONTACT_VALID(p_party_id => l_ship_to_party_id,
7118 p_contact_id => l_ship_to_contact_id,
7119 x_msg_data => l_msg_data,
7120 x_msg_count => l_msg_count,
7121 x_return_status => l_return_status) = 'U' THEN
7122 --raise unexpected error
7123 Raise FND_API.G_EXC_UNEXPECTED_ERROR;
7124 null;
7125
7126 ELSIF IS_CONTACT_VALID(p_party_id => l_ship_to_party_id,
7127 p_contact_id => l_ship_to_contact_id,
7128 x_msg_data => l_msg_data,
7129 x_msg_count => l_msg_count,
7130 x_return_status => l_return_status) = 'N' THEN
7131
7132 Add_Invalid_Argument_Msg(l_api_name,
7133 to_char(l_ship_to_contact_id),
7134 'Ship_to_Contact_Id');
7135 RAISE FND_API.G_EXC_ERROR;
7136 ELSE
7137 -- assign to out record
7138 x_charges_detail_rec.ship_to_contact_id := l_ship_to_contact_id;
7139 END IF;
7140 ELSE
7141 -- Ship To Contact is -999
7142 -- assign NULL to out record
7143 x_charges_detail_rec.ship_to_contact_id := NULL;
7144 END IF;
7145
7146 IF l_ship_to_site_id <> -999 THEN
7147 x_charges_detail_rec.ship_to_org_id := l_ship_to_site_id;
7148 ELSE
7149 --l_ship_to_site_use_id IS NULL
7150 --assign l_customer_site_id
7151 x_charges_detail_rec.ship_to_org_id := l_customer_site_id;
7152 END IF;
7153
7154 END IF;
7155 ELSE
7156 --l_ship_to_party_id is -999
7157 --Check If l_customer_id is not null
7158 IF l_customer_id IS NOT NULL THEN
7159
7160 IF IS_PARTY_VALID(p_party_id => l_customer_id,
7161 x_msg_data => l_msg_data,
7162 x_msg_count => l_msg_count,
7163 x_return_status => l_return_status) = 'N' THEN
7164 RAISE FND_API.G_EXC_ERROR;
7165 null;
7166 ELSE
7167 --assign to out record
7168 x_charges_detail_rec.ship_to_party_id := l_customer_id;
7169 --Fix for Bug 6356247--Start
7170 --x_charges_detail_rec.ship_to_contact_id := l_customer_id;
7171 x_charges_detail_rec.ship_to_contact_id := Null;
7172 --Fix for Bug 6356247--End
7173
7174 IF l_account_id IS NOT NULL THEN
7175
7176 IF IS_ACCOUNT_VALID(p_party_id => l_customer_id,
7177 p_account_id => l_account_id,
7178 x_msg_data => l_msg_data,
7179 x_msg_count => l_msg_count,
7180 x_return_status => l_return_status) = 'U' THEN
7181 --raise unexpected error
7182 Raise FND_API.G_EXC_UNEXPECTED_ERROR;
7183 null;
7184
7185 ELSIF IS_ACCOUNT_VALID(p_party_id => l_customer_id,
7186 p_account_id => l_account_id,
7187 x_msg_data => l_msg_data,
7188 x_msg_count => l_msg_count,
7189 x_return_status => l_return_status) = 'N' THEN
7190
7191 Add_Invalid_Argument_Msg(l_api_name,
7192 to_char(l_account_id),
7193 'Ship_to_Account_Id');
7194
7195 x_msg_data := l_msg_data;
7196 x_return_status := l_return_status;
7197
7198 RAISE FND_API.G_EXC_ERROR;
7199 ELSE
7200 -- assign to out record
7201 x_charges_detail_rec.ship_to_account_id := l_account_id;
7202 END IF;
7203 ELSE
7204 -- Account is NULL
7205 -- assign NULL to out record
7206 x_charges_detail_rec.ship_to_account_id := NULL;
7207 END IF;
7208
7209 IF l_customer_site_id IS NOT NULL THEN
7210
7211 IF IS_PARTY_SITE_VALID( p_party_site_id => l_customer_site_id,
7212 p_party_id => l_customer_id,
7213 p_val_mode => 'NONE',
7214 x_msg_data => l_msg_data,
7215 x_msg_count => l_msg_count,
7216 x_return_status => l_return_status) = 'U' THEN
7217 --raise unexpected error
7218 Raise FND_API.G_EXC_UNEXPECTED_ERROR;
7219 null;
7220
7221 ELSIF IS_PARTY_SITE_VALID( p_party_site_id => l_customer_site_id,
7222 p_party_id => l_customer_id,
7223 p_val_mode => 'NONE',
7224 x_msg_data => l_msg_data,
7225 x_msg_count => l_msg_count,
7226 x_return_status => l_return_status) = 'N' THEN
7227 RAISE FND_API.G_EXC_ERROR;
7228 null;
7229 ELSE
7230 --assign to out record
7231 x_charges_detail_rec.ship_to_org_id := l_customer_site_id;
7232 END IF;
7233 ELSE
7234 --l_customer_site_id IS NULL
7235 --assign NULL to out record
7236 x_charges_detail_rec.ship_to_org_id := NULL;
7237 END IF;
7238
7239 END IF;
7240 ELSE
7241 x_charges_detail_rec.ship_to_party_id := NULL;
7242 x_charges_detail_rec.ship_to_account_id := NULL;
7243 x_charges_detail_rec.ship_to_contact_id := NULL;
7244 x_charges_detail_rec.ship_to_org_id := NULL;
7245 END IF;
7246 END IF;
7247 END IF;
7248 --DBMS_OUTPUT.PUT_LINE('Passed Ship To Validation .....');
7249
7250 ELSIF p_validation_mode = 'U' THEN
7251
7252 -- Bill to Valdation
7253 --
7254 --DBMS_OUTPUT.PUT_LINE('In the the TCA Update Validation');
7255
7256 IF p_charges_detail_rec.bill_to_party_id <> FND_API.G_MISS_NUM AND
7257 p_charges_detail_rec.bill_to_party_id IS NOT NULL THEN
7258
7259 IF IS_PARTY_VALID(p_party_id => p_charges_detail_rec.bill_to_party_id,
7260 x_msg_data => l_msg_data,
7261 x_msg_count => l_msg_count,
7262 x_return_status => l_return_status) = 'N' THEN
7263
7264 Add_Invalid_Argument_Msg(l_api_name,
7265 to_char(p_charges_detail_rec.bill_to_party_id),
7266 'Bill_to_Party_Id');
7267 RAISE FND_API.G_EXC_ERROR;
7268
7269 ELSE
7270 --assign to out record
7271 x_charges_detail_rec.bill_to_party_id := p_charges_detail_rec.bill_to_party_id;
7272
7273 IF p_charges_detail_rec.bill_to_account_id <> FND_API.G_MISS_NUM AND
7274 p_charges_detail_rec.bill_to_account_id IS NOT NULL THEN
7275
7276 IF IS_ACCOUNT_VALID(p_party_id => p_charges_detail_rec.bill_to_party_id,
7277 p_account_id => p_charges_detail_rec.bill_to_account_id,
7278 x_msg_data => l_msg_data,
7279 x_msg_count => l_msg_count,
7280 x_return_status => l_return_status) = 'U' THEN
7281 --raise unexpected error
7282 Raise FND_API.G_EXC_UNEXPECTED_ERROR;
7283 null;
7284 ELSIF IS_ACCOUNT_VALID(p_party_id => p_charges_detail_rec.bill_to_party_id,
7285 p_account_id => p_charges_detail_rec.bill_to_account_id,
7286 x_msg_data => l_msg_data,
7287 x_msg_count => l_msg_count,
7288 x_return_status => l_return_status) = 'N' THEN
7289
7290 Add_Invalid_Argument_Msg(l_api_name,
7291 to_char(p_charges_detail_rec.bill_to_account_id),
7292 'Bill_to_Account_Id');
7293 RAISE FND_API.G_EXC_ERROR;
7294 null;
7295 ELSE
7296 -- assign to out record
7297 x_charges_detail_rec.bill_to_account_id := p_charges_detail_rec.bill_to_account_id;
7298 END IF;
7299
7300 --Bug# 4870037
7301 ELSIF p_charges_detail_rec.bill_to_account_id = FND_API.G_MISS_NUM THEN
7302 x_charges_detail_rec.bill_to_account_id := l_db_det_rec.invoice_to_account_id;
7303 ELSE
7304 -- bill_to_account IS NULL
7305 -- assign NULL to out record
7306 x_charges_detail_rec.bill_to_account_id := NULL;
7307 END IF;
7308 IF p_charges_detail_rec.bill_to_contact_id <> FND_API.G_MISS_NUM AND
7309 p_charges_detail_rec.bill_to_contact_id IS NOT NULL THEN
7310
7311
7312 IF IS_CONTACT_VALID(p_party_id => p_charges_detail_rec.bill_to_party_id,
7313 p_contact_id => p_charges_detail_rec.bill_to_contact_id,
7314 x_msg_data => l_msg_data,
7315 x_msg_count => l_msg_count,
7316 x_return_status => l_return_status) = 'U' THEN
7317 --raise unexpected error
7318 Raise FND_API.G_EXC_UNEXPECTED_ERROR;
7319 null;
7320
7321 ELSIF IS_CONTACT_VALID(p_party_id => p_charges_detail_rec.bill_to_party_id,
7322 p_contact_id => p_charges_detail_rec.bill_to_contact_id,
7323 x_msg_data => l_msg_data,
7324 x_msg_count => l_msg_count,
7325 x_return_status => l_return_status) = 'N' THEN
7326
7327 Add_Invalid_Argument_Msg(l_api_name,
7328 to_char(p_charges_detail_rec.bill_to_contact_id),
7329 'Bill_to_Contact_Id');
7330 RAISE FND_API.G_EXC_ERROR;
7331 null;
7332 ELSE
7333 -- assign to out record
7334 x_charges_detail_rec.bill_to_contact_id := p_charges_detail_rec.bill_to_contact_id;
7335 END IF;
7336 ELSE
7337 -- bill_to_contact IS NULL
7338 -- assign NULL to out record
7339 x_charges_detail_rec.bill_to_contact_id := NULL;
7340 END IF;
7341
7342 IF p_charges_detail_rec.invoice_to_org_id <> FND_API.G_MISS_NUM AND
7343 p_charges_detail_rec.invoice_to_org_id IS NOT NULL THEN
7344
7345
7346 IF IS_PARTY_SITE_VALID( p_party_site_id => p_charges_detail_rec.invoice_to_org_id,
7347 p_party_id => p_charges_detail_rec.bill_to_party_id,
7348 p_val_mode => 'BILL_TO',
7349 x_msg_data => l_msg_data,
7350 x_msg_count => l_msg_count,
7351 x_return_status => l_return_status) = 'U' THEN
7352 --raise unexpected error
7353 Raise FND_API.G_EXC_UNEXPECTED_ERROR;
7354 null;
7355 ELSIF IS_PARTY_SITE_VALID( p_party_site_id => p_charges_detail_rec.invoice_to_org_id,
7356 p_party_id => p_charges_detail_rec.bill_to_party_id,
7357 p_val_mode => 'BILL_TO',
7358 x_msg_data => l_msg_data,
7359 x_msg_count => l_msg_count,
7360 x_return_status => l_return_status) = 'N' THEN
7361 Add_Invalid_Argument_Msg(l_api_name,
7362 to_char(p_charges_detail_rec.invoice_to_org_id),
7363 'Invoice_to_org_Id');
7364 RAISE FND_API.G_EXC_ERROR;
7365 null;
7366 ELSE
7367 --assign to out record
7368 x_charges_detail_rec.invoice_to_org_id := p_charges_detail_rec.invoice_to_org_id;
7369 END IF;
7370
7371 ELSE
7372 --invoice_to_org_id IS NULL
7373 --assign NULL to out record
7374 x_charges_detail_rec.invoice_to_org_id := NULL;
7375 END IF;
7376 END IF;
7377
7378 ELSIF
7379
7380 p_charges_detail_rec.bill_to_party_id = FND_API.G_MISS_NUM THEN
7381
7382 -- assign the value from the database
7383 x_charges_detail_rec.bill_to_party_id := l_db_det_rec.bill_to_party_id;
7384
7385 IF p_charges_detail_rec.bill_to_account_id <> FND_API.G_MISS_NUM AND
7386 p_charges_detail_rec.bill_to_account_id IS NOT NULL THEN
7387
7388
7389 IF IS_ACCOUNT_VALID(p_party_id => x_charges_detail_rec.bill_to_party_id,
7390 p_account_id => p_charges_detail_rec.bill_to_account_id,
7391 x_msg_data => l_msg_data,
7392 x_msg_count => l_msg_count,
7393 x_return_status => l_return_status) = 'U' THEN
7394 --raise unexpected error
7395 Raise FND_API.G_EXC_UNEXPECTED_ERROR;
7396 null;
7397 ELSIF IS_ACCOUNT_VALID(p_party_id => x_charges_detail_rec.bill_to_party_id,
7398 p_account_id => p_charges_detail_rec.bill_to_account_id,
7399 x_msg_data => l_msg_data,
7400 x_msg_count => l_msg_count,
7401 x_return_status => l_return_status) = 'N' THEN
7402
7403 Add_Invalid_Argument_Msg(l_api_name,
7404 to_char(p_charges_detail_rec.bill_to_account_id),
7405 'Bill_to_Account_Id');
7406 RAISE FND_API.G_EXC_ERROR;
7407 null;
7408 ELSE
7409 -- assign to out record
7410 x_charges_detail_rec.bill_to_account_id := p_charges_detail_rec.bill_to_account_id;
7411 END IF;
7412 ELSE
7413 -- bill_to_account is not passed
7414 -- assign the value from the database
7415 x_charges_detail_rec.bill_to_account_id := l_db_det_rec.invoice_to_account_id;
7416 END IF;
7417
7418 IF p_charges_detail_rec.bill_to_contact_id <> FND_API.G_MISS_NUM AND
7419 p_charges_detail_rec.bill_to_contact_id IS NOT NULL THEN
7420
7421
7422 IF IS_CONTACT_VALID(p_party_id => x_charges_detail_rec.bill_to_party_id,
7423 p_contact_id => p_charges_detail_rec.bill_to_contact_id,
7424 x_msg_data => l_msg_data,
7425 x_msg_count => l_msg_count,
7426 x_return_status => l_return_status) = 'U' THEN
7427 --raise unexpected error
7428 Raise FND_API.G_EXC_UNEXPECTED_ERROR;
7429 null;
7430
7431 ELSIF IS_CONTACT_VALID(p_party_id => x_charges_detail_rec.bill_to_party_id,
7432 p_contact_id => p_charges_detail_rec.bill_to_contact_id,
7433 x_msg_data => l_msg_data,
7434 x_msg_count => l_msg_count,
7435 x_return_status => l_return_status) = 'N' THEN
7436
7437 Add_Invalid_Argument_Msg(l_api_name,
7438 to_char(p_charges_detail_rec.bill_to_contact_id),
7439 'Bill_to_Contact_Id');
7440 RAISE FND_API.G_EXC_ERROR;
7441 null;
7442 ELSE
7443 -- assign to out record
7444 x_charges_detail_rec.bill_to_contact_id := p_charges_detail_rec.bill_to_contact_id;
7445 END IF;
7446 ELSE
7447 -- bill_to_contact is not passed
7448 -- assign values from the database to out record
7449 x_charges_detail_rec.bill_to_contact_id := l_db_det_rec.bill_to_contact_id;
7450 END IF;
7451
7452 IF p_charges_detail_rec.invoice_to_org_id <> FND_API.G_MISS_NUM AND
7453 p_charges_detail_rec.invoice_to_org_id IS NOT NULL THEN
7454
7455
7456 IF IS_PARTY_SITE_VALID( p_party_site_id => p_charges_detail_rec.invoice_to_org_id,
7457 p_party_id => x_charges_detail_rec.bill_to_party_id,
7458 p_val_mode => 'BILL_TO',
7459 x_msg_data => l_msg_data,
7460 x_msg_count => l_msg_count,
7461 x_return_status => l_return_status) = 'U' THEN
7462 --raise unexpected error
7463 Raise FND_API.G_EXC_UNEXPECTED_ERROR;
7464 null;
7465 ELSIF IS_PARTY_SITE_VALID( p_party_site_id => p_charges_detail_rec.invoice_to_org_id,
7466 p_party_id => x_charges_detail_rec.bill_to_party_id,
7467 p_val_mode => 'BILL_TO',
7468 x_msg_data => l_msg_data,
7469 x_msg_count => l_msg_count,
7470 x_return_status => l_return_status) = 'N' THEN
7471 Add_Invalid_Argument_Msg(l_api_name,
7472 to_char(p_charges_detail_rec.invoice_to_org_id),
7473 'Invoice_to_org_Id');
7474 RAISE FND_API.G_EXC_ERROR;
7475 null;
7476 ELSE
7477 --assign to out record
7478 x_charges_detail_rec.invoice_to_org_id := p_charges_detail_rec.invoice_to_org_id;
7479 END IF;
7480
7481 ELSE
7482 --invoice_to_org_id is not passed
7483 --assign values from the database to out record
7484 x_charges_detail_rec.invoice_to_org_id := l_db_det_rec.invoice_to_org_id;
7485 END IF;
7486
7487 ELSE
7488
7489 IF p_charges_detail_rec.bill_to_party_id IS NULL THEN
7490
7491 --all the values for out record for TCA should be nulled out
7492 x_charges_detail_rec.bill_to_party_id := NULL;
7493 x_charges_detail_rec.bill_to_account_id := NULL;
7494 x_charges_detail_rec.bill_to_contact_id := NULL;
7495 x_charges_detail_rec.invoice_to_org_id := NULL;
7496 END IF;
7497 END IF;
7498
7499
7500 IF p_charges_detail_rec.ship_to_party_id <> FND_API.G_MISS_NUM AND
7501 p_charges_detail_rec.ship_to_party_id IS NOT NULL THEN
7502
7503 IF IS_PARTY_VALID(p_party_id => p_charges_detail_rec.ship_to_party_id,
7504 x_msg_data => l_msg_data,
7505 x_msg_count => l_msg_count,
7506 x_return_status => l_return_status) = 'N' THEN
7507
7508 Add_Invalid_Argument_Msg(l_api_name,
7509 to_char(p_charges_detail_rec.ship_to_party_id),
7510 'ship_to_party_id');
7511 RAISE FND_API.G_EXC_ERROR;
7512
7513 ELSE
7514 --assign to out record
7515 x_charges_detail_rec.ship_to_party_id := p_charges_detail_rec.ship_to_party_id;
7516
7517 IF p_charges_detail_rec.ship_to_account_id <> FND_API.G_MISS_NUM AND
7518 p_charges_detail_rec.ship_to_account_id IS NOT NULL THEN
7519
7520 IF IS_ACCOUNT_VALID(p_party_id => p_charges_detail_rec.ship_to_party_id,
7521 p_account_id => p_charges_detail_rec.ship_to_account_id,
7522 x_msg_data => l_msg_data,
7523 x_msg_count => l_msg_count,
7524 x_return_status => l_return_status) = 'U' THEN
7525 --raise unexpected error
7526 Raise FND_API.G_EXC_UNEXPECTED_ERROR;
7527 null;
7528 ELSIF IS_ACCOUNT_VALID(p_party_id => p_charges_detail_rec.ship_to_party_id,
7529 p_account_id => p_charges_detail_rec.ship_to_account_id,
7530 x_msg_data => l_msg_data,
7531 x_msg_count => l_msg_count,
7532 x_return_status => l_return_status) = 'N' THEN
7533
7534 Add_Invalid_Argument_Msg(l_api_name,
7535 to_char(p_charges_detail_rec.ship_to_account_id),
7536 'ship_to_account_id');
7537 RAISE FND_API.G_EXC_ERROR;
7538 null;
7539 ELSE
7540 -- assign to out record
7541 x_charges_detail_rec.ship_to_account_id := p_charges_detail_rec.ship_to_account_id;
7542 END IF;
7543
7544 --Bug# 4870037
7545 ELSIF p_charges_detail_rec.ship_to_account_id = FND_API.G_MISS_NUM THEN
7546 x_charges_detail_rec.ship_to_account_id := l_db_det_rec.ship_to_account_id;
7547 ELSE
7548 -- ship_to_account IS NULL
7549 -- assign NULL to out record
7550 x_charges_detail_rec.ship_to_account_id := NULL;
7551 END IF;
7552 IF p_charges_detail_rec.ship_to_contact_id <> FND_API.G_MISS_NUM AND
7553 p_charges_detail_rec.ship_to_contact_id IS NOT NULL THEN
7554
7555
7556 IF IS_CONTACT_VALID(p_party_id => p_charges_detail_rec.ship_to_party_id,
7557 p_contact_id => p_charges_detail_rec.ship_to_contact_id,
7558 x_msg_data => l_msg_data,
7559 x_msg_count => l_msg_count,
7560 x_return_status => l_return_status) = 'U' THEN
7561 --raise unexpected error
7562 Raise FND_API.G_EXC_UNEXPECTED_ERROR;
7563 null;
7564
7565 ELSIF IS_CONTACT_VALID(p_party_id => p_charges_detail_rec.ship_to_party_id,
7566 p_contact_id => p_charges_detail_rec.ship_to_contact_id,
7567 x_msg_data => l_msg_data,
7568 x_msg_count => l_msg_count,
7569 x_return_status => l_return_status) = 'N' THEN
7570
7571 Add_Invalid_Argument_Msg(l_api_name,
7572 to_char(p_charges_detail_rec.ship_to_contact_id),
7573 'ship_to_contact_id');
7574 RAISE FND_API.G_EXC_ERROR;
7575 null;
7576 ELSE
7577 -- assign to out record
7578 x_charges_detail_rec.ship_to_contact_id := p_charges_detail_rec.ship_to_contact_id;
7579 END IF;
7580 ELSE
7581 -- ship_to_contact IS NULL
7582 -- assign NULL to out record
7583 x_charges_detail_rec.ship_to_contact_id := NULL;
7584 END IF;
7585
7586 -- Fixed Bug # 3325675
7587 IF p_charges_detail_rec.ship_to_org_id <> FND_API.G_MISS_NUM AND
7588 p_charges_detail_rec.ship_to_org_id IS NOT NULL THEN
7589
7590
7591 IF IS_PARTY_SITE_VALID( p_party_site_id => p_charges_detail_rec.ship_to_org_id,
7592 p_party_id => p_charges_detail_rec.ship_to_party_id,
7593 p_val_mode => 'SHIP_TO',
7594 x_msg_data => l_msg_data,
7595 x_msg_count => l_msg_count,
7596 x_return_status => l_return_status) = 'U' THEN
7597 --raise unexpected error
7598 Raise FND_API.G_EXC_UNEXPECTED_ERROR;
7599 null;
7600 ELSIF IS_PARTY_SITE_VALID( p_party_site_id => p_charges_detail_rec.ship_to_org_id,
7601 p_party_id => p_charges_detail_rec.ship_to_party_id,
7602 p_val_mode => 'SHIP_TO',
7603 x_msg_data => l_msg_data,
7604 x_msg_count => l_msg_count,
7605 x_return_status => l_return_status) = 'N' THEN
7606 Add_Invalid_Argument_Msg(l_api_name,
7607 to_char(p_charges_detail_rec.ship_to_org_id),
7608 'Ship_to_org_Id');
7609 RAISE FND_API.G_EXC_ERROR;
7610 null;
7611 ELSE
7612 --assign to out record
7613 x_charges_detail_rec.ship_to_org_id := p_charges_detail_rec.ship_to_org_id;
7614 END IF;
7615
7616 ELSE
7617 --ship_to_org_id IS NULL
7618 --assign NULL to out record
7619 x_charges_detail_rec.ship_to_org_id := NULL;
7620 END IF;
7621 END IF;
7622
7623 ELSIF
7624
7625 p_charges_detail_rec.ship_to_party_id = FND_API.G_MISS_NUM THEN
7626
7627 -- assign the value from the database
7628 x_charges_detail_rec.ship_to_party_id := l_db_det_rec.ship_to_party_id;
7629
7630 IF p_charges_detail_rec.ship_to_account_id <> FND_API.G_MISS_NUM AND
7631 p_charges_detail_rec.ship_to_account_id IS NOT NULL THEN
7632
7633
7634 IF IS_ACCOUNT_VALID(p_party_id => x_charges_detail_rec.ship_to_party_id,
7635 p_account_id => p_charges_detail_rec.ship_to_account_id,
7636 x_msg_data => l_msg_data,
7637 x_msg_count => l_msg_count,
7638 x_return_status => l_return_status) = 'U' THEN
7639 --raise unexpected error
7640 Raise FND_API.G_EXC_UNEXPECTED_ERROR;
7641 null;
7642 ELSIF IS_ACCOUNT_VALID(p_party_id => x_charges_detail_rec.ship_to_party_id,
7643 p_account_id => p_charges_detail_rec.ship_to_account_id,
7644 x_msg_data => l_msg_data,
7645 x_msg_count => l_msg_count,
7646 x_return_status => l_return_status) = 'N' THEN
7647
7648 Add_Invalid_Argument_Msg(l_api_name,
7649 to_char(p_charges_detail_rec.ship_to_account_id),
7650 'ship_to_account_id');
7651 RAISE FND_API.G_EXC_ERROR;
7652 null;
7653 ELSE
7654 -- assign to out record
7655 x_charges_detail_rec.ship_to_account_id := p_charges_detail_rec.ship_to_account_id;
7656 END IF;
7657 ELSE
7658 -- ship_to_account is not passed
7659 -- assign the value from the database
7660 x_charges_detail_rec.ship_to_account_id := l_db_det_rec.ship_to_account_id;
7661 END IF;
7662
7663 IF p_charges_detail_rec.ship_to_contact_id <> FND_API.G_MISS_NUM AND
7664 p_charges_detail_rec.ship_to_contact_id IS NOT NULL THEN
7665
7666
7667 IF IS_CONTACT_VALID(p_party_id => x_charges_detail_rec.ship_to_party_id,
7668 p_contact_id => p_charges_detail_rec.ship_to_contact_id,
7669 x_msg_data => l_msg_data,
7670 x_msg_count => l_msg_count,
7671 x_return_status => l_return_status) = 'U' THEN
7672 --raise unexpected error
7673 Raise FND_API.G_EXC_UNEXPECTED_ERROR;
7674 null;
7675
7676 ELSIF IS_CONTACT_VALID(p_party_id => x_charges_detail_rec.ship_to_party_id,
7677 p_contact_id => p_charges_detail_rec.ship_to_contact_id,
7678 x_msg_data => l_msg_data,
7679 x_msg_count => l_msg_count,
7680 x_return_status => l_return_status) = 'N' THEN
7681
7682 Add_Invalid_Argument_Msg(l_api_name,
7683 to_char(p_charges_detail_rec.ship_to_contact_id),
7684 'ship_to_contact_id');
7685 RAISE FND_API.G_EXC_ERROR;
7686 null;
7687 ELSE
7688 -- assign to out record
7689 x_charges_detail_rec.ship_to_contact_id := p_charges_detail_rec.ship_to_contact_id;
7690 END IF;
7691 ELSE
7692 -- bill_to_contact is not passed
7693 -- assign values from the database to out record
7694 x_charges_detail_rec.ship_to_contact_id := l_db_det_rec.ship_to_contact_id;
7695 END IF;
7696
7697 -- Fixed Bug # 3325675
7698 IF p_charges_detail_rec.ship_to_org_id <> FND_API.G_MISS_NUM AND
7699 p_charges_detail_rec.ship_to_org_id IS NOT NULL THEN
7700
7701
7702 IF IS_PARTY_SITE_VALID( p_party_site_id => p_charges_detail_rec.ship_to_org_id,
7703 p_party_id => x_charges_detail_rec.ship_to_party_id,
7704 p_val_mode => 'SHIP_TO',
7705 x_msg_data => l_msg_data,
7706 x_msg_count => l_msg_count,
7707 x_return_status => l_return_status) = 'U' THEN
7708 --raise unexpected error
7709 Raise FND_API.G_EXC_UNEXPECTED_ERROR;
7710 null;
7711 ELSIF IS_PARTY_SITE_VALID( p_party_site_id => p_charges_detail_rec.ship_to_org_id,
7712 p_party_id => x_charges_detail_rec.ship_to_party_id,
7713 p_val_mode => 'SHIP_TO',
7714 x_msg_data => l_msg_data,
7715 x_msg_count => l_msg_count,
7716 x_return_status => l_return_status) = 'N' THEN
7717 Add_Invalid_Argument_Msg(l_api_name,
7718 to_char(p_charges_detail_rec.ship_to_org_id),
7719 'ship_to_org_id');
7720 RAISE FND_API.G_EXC_ERROR;
7721 null;
7722 ELSE
7723 --assign to out record
7724 x_charges_detail_rec.ship_to_org_id := p_charges_detail_rec.ship_to_org_id;
7725 END IF;
7726
7727 ELSE
7728 --ship_to_org_id is not passed
7729 --assign values from the database to out record
7730 x_charges_detail_rec.ship_to_org_id := l_db_det_rec.ship_to_org_id;
7731 END IF;
7732
7733 ELSE
7734
7735 IF p_charges_detail_rec.ship_to_party_id IS NULL THEN
7736
7737 --all the values for out record for TCA should be nulled out
7738 x_charges_detail_rec.ship_to_party_id := NULL;
7739 x_charges_detail_rec.ship_to_account_id := NULL;
7740 x_charges_detail_rec.ship_to_contact_id := NULL;
7741 x_charges_detail_rec.ship_to_org_id := NULL;
7742 END IF;
7743 END IF;
7744 END IF;
7745
7746
7747 --DBMS_OUTPUT.PUT_LINE('TCA VALID');
7748 --DBMS_OUTPUT.PUT_LINE('Customer ID '||l_customer_id);
7749
7750 --==================================================
7751 -- Sold to party Validation
7752 --==================================================
7753 --DBMS_OUTPUT.PUT_LINE('Sold To Party Validation ...');
7754
7755 --DBMS_OUTPUT.PUT_LINE('sold_to_party_id'||p_charges_detail_rec.sold_to_party_id);
7756 --DBMS_OUTPUT.PUT_LINE('customer id '||l_customer_id);
7757
7758 IF p_validation_mode = 'I' THEN
7759 IF p_charges_detail_rec.sold_to_party_id IS NOT NULL THEN
7760 IF p_charges_detail_rec.sold_to_party_id <> l_customer_id THEN
7761 --raise error
7762 FND_MESSAGE.SET_NAME('CS', 'CS_CHG_INVALID_SOLD_TO_PARTY');
7763 FND_MESSAGE.SET_TOKEN('SOLD_TO_PARTY', p_charges_detail_rec.sold_to_party_id);
7764 FND_MESSAGE.SET_TOKEN('INCIDENT_ID', p_charges_detail_rec.incident_id);
7765 FND_MSG_PUB.ADD;
7766 RAISE FND_API.G_EXC_ERROR;
7767 ELSE
7768 --assign the sold to party to the out record
7769 x_charges_detail_rec.sold_to_party_id := l_customer_id;
7770 END IF;
7771 ELSE
7772 --p_charges_detail_rec.sold_to_party_id
7773 IF l_customer_id IS NOT NULL THEN
7774 --assign the l_customer_id to the out rec
7775 x_charges_detail_rec.sold_to_party_id := l_customer_id;
7776 ELSE
7777 x_charges_detail_rec.sold_to_party_id := NULL;
7778 END IF;
7779 END IF;
7780
7781 ElSIF p_validation_mode = 'U' THEN
7782
7783 IF p_charges_detail_rec.sold_to_party_id <> FND_API.G_MISS_NUM AND
7784 p_charges_detail_rec.sold_to_party_id IS NOT NULL THEN
7785 IF p_charges_detail_rec.sold_to_party_id <> l_customer_id THEN
7786 --raise error
7787 FND_MESSAGE.SET_NAME('CS', 'CS_CHG_INVALID_SOLD_TO_PARTY');
7788 FND_MESSAGE.SET_TOKEN('SOLD_TO_PARTY', p_charges_detail_rec.sold_to_party_id);
7789 FND_MESSAGE.SET_TOKEN('INCIDENT_ID', p_charges_detail_rec.incident_id);
7790 FND_MSG_PUB.ADD;
7791 RAISE FND_API.G_EXC_ERROR;
7792 ELSE
7793 --assign the sold to party to the out record
7794 x_charges_detail_rec.sold_to_party_id := p_charges_detail_rec.sold_to_party_id;
7795 END IF;
7796
7797 ELSIF p_charges_detail_rec.sold_to_party_id = FND_API.G_MISS_NUM THEN
7798 --assign the database value to the field
7799 --assign the sold to party to the out record
7800 x_charges_detail_rec.sold_to_party_id := l_customer_id ;
7801
7802 ELSE
7803 IF p_charges_detail_rec.sold_to_party_id IS NULL THEN
7804 IF l_customer_id IS NOT NULL THEN
7805 -- raise error
7806 null;
7807 ELSE
7808 x_charges_detail_rec.sold_to_party_id := NULL;
7809 END IF;
7810 END IF;
7811 END IF;
7812 END IF;
7813
7814 --DBMS_OUTPUT.PUT_LINE('Sold To Party Validation successful...');
7815
7816 --============================================
7817 --Valid the Item Instance
7818 --============================================
7819 -- DBMS_OUTPUT.PUT_LINE('Item Instance Validation ...');
7820 IF p_validation_mode = 'I' THEN
7821
7822 -- DBMS_OUTPUT.PUT_LINE('Update_ib_flag '||l_update_ib_flag);
7823 -- DBMS_OUTPUT.PUT_LINE('src_reference_reqd_flag '||l_src_reference_reqd_flag);
7824 -- DBMS_OUTPUT.PUT_LINE('line_order_category_code '||l_line_order_category_code);
7825 -- DBMS_OUTPUT.PUT_LINE('customer_product_id '||p_charges_detail_rec.customer_product_id);
7826
7827
7828 x_charges_detail_rec.customer_product_id := p_charges_detail_rec.customer_product_id;
7829 x_charges_detail_rec.serial_number := p_charges_detail_rec.serial_number;
7830
7831 --item instance validation
7832 --fixed Bug # 3362130 - added l_comms_trackable_flag = 'Y' condition
7833 IF(l_update_ib_flag = 'Y') AND
7834 (l_src_reference_reqd_flag = 'Y') AND
7835 (l_line_order_category_code = 'RETURN') AND
7836 (l_comms_trackable_flag = 'Y') THEN
7837 IF p_charges_detail_rec.customer_product_id IS NULL THEN
7838
7839 -- --DBMS_OUTPUT.PUT_LINE('Customer product id null');
7840 --RAISE FND_API.G_EXC_ERROR;
7841 --null;
7842 FND_MESSAGE.Set_Name('CS', 'CS_API_CHG_IB_INSTANCE_MISSING');
7843 FND_MESSAGE.Set_Token('API_NAME', p_api_name);
7844 FND_MSG_PUB.Add;
7845 RAISE FND_API.G_EXC_ERROR;
7846 ELSE
7847 -- Check if instance is of the same inventory_item_id
7848 -- If not of the same inv id the error
7849 -- Call IS_INSTANCE_FOR_INVENTORY
7850
7851 -- --DBMS_OUTPUT.PUT_LINE('Customer product id is not null');
7852
7853 l_valid_check := IS_INSTANCE_FOR_INVENTORY(
7854 p_instance_id => p_charges_detail_rec.customer_product_id,
7855 p_inv_id => x_charges_detail_rec.inventory_item_id_in,
7856 x_msg_data => l_msg_data,
7857 x_msg_count => l_msg_count,
7858 x_return_status => l_return_status);
7859
7860 IF l_return_status = G_RET_STS_UNEXP_ERROR THEN
7861 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
7862 ELSIF l_return_status = G_RET_STS_ERROR THEN
7863 RAISE FND_API.G_EXC_ERROR;
7864 END IF;
7865
7866 IF l_valid_check <> 'Y' THEN
7867
7868 FND_MESSAGE.SET_NAME('CS', 'CS_CHG_INVALID_IB_INSTANCE_INV');
7869 FND_MESSAGE.Set_Token('INVENTORY_ITEM_ID', p_charges_detail_rec.inventory_item_id_in);
7870 FND_MESSAGE.Set_Token('INSTANCE_ID', p_charges_detail_rec.customer_product_id);
7871 FND_MSG_PUB.Add;
7872 RAISE FND_API.G_EXC_ERROR;
7873 ELSE
7874
7875 l_valid_check := IS_INSTANCE_VALID(p_instance_id => p_charges_detail_rec.customer_product_id,
7876 p_party_id => x_charges_detail_rec.sold_to_party_id,
7877 x_msg_data => l_msg_data,
7878 x_msg_count => l_msg_count,
7879 x_return_status => l_return_status);
7880
7881 IF l_return_status = G_RET_STS_UNEXP_ERROR THEN
7882 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
7883 ELSIF l_return_status = G_RET_STS_ERROR THEN
7884 RAISE FND_API.G_EXC_ERROR;
7885 END IF;
7886
7887 --taklam
7888 IF l_valid_check <> 'Y' THEN
7889 --Check if Service activity has 'change owner flag' set to 'N'
7890 --(See the csi_ib_txn_types table for the flag value)
7891 --'change owner flag'
7892
7893 OPEN C_SRC_CHANGE_OWNER(p_charges_detail_rec.txn_billing_type_id);
7894 FETCH C_SRC_CHANGE_OWNER INTO l_src_change_owner;
7895 CLOSE C_SRC_CHANGE_OWNER;
7896
7897 If (l_src_change_owner = 'N') or (l_src_change_owner is null) THEN
7898 --Pass the internal_party_id to the existing "IS_INSTANCE_VALID" method.
7899 --select internal_party_id from csi_install_parameters,
7900 SELECT internal_party_id into l_internal_party_id
7901 FROM csi_install_parameters WHERE rownum = 1;
7902
7903 l_valid_check := IS_INSTANCE_VALID( p_instance_id => p_charges_detail_rec.customer_product_id,
7904 p_party_id => l_internal_party_id,
7905 x_msg_data => l_msg_data,
7906 x_msg_count => l_msg_count,
7907 x_return_status => l_return_status);
7908 IF l_return_status = G_RET_STS_UNEXP_ERROR THEN
7909 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
7910 ELSIF l_return_status = G_RET_STS_ERROR THEN
7911 RAISE FND_API.G_EXC_ERROR;
7912 END IF;
7913 End if;
7914 End if;
7915
7916
7917 IF l_valid_check <> 'Y' THEN
7918
7919 FND_MESSAGE.SET_NAME ('CS', 'CS_CHG_INVALID_INSTANCE_RMA_PT');
7920 FND_MSG_PUB.Add;
7921 RAISE FND_API.G_EXC_ERROR;
7922 --taklam
7923 ELSE
7924 --assign the customer product id to out record
7925 x_charges_detail_rec.customer_product_id := p_charges_detail_rec.customer_product_id;
7926 --DBMS_OUTPUT.PUT_LINE('Cust prod id '||x_charges_detail_rec.customer_product_id);
7927 END IF;
7928 END IF;
7929 END IF;
7930
7931 -- check to see if its a serialized item
7932 -- Added for Bug # 4073602
7933 IF l_serial_control_flag = 'Y' THEN
7934 IF p_charges_detail_rec.serial_number IS NULL THEN
7935 -- no error raised
7936 -- Fix bug#5125934
7937 OPEN c_serial_number(p_charges_detail_rec.customer_product_id);
7938 FETCH c_serial_number
7939 INTO l_serial_number;
7940 CLOSE c_serial_number;
7941
7942 -- x_charges_detail_rec.serial_number := p_charges_detail_rec.serial_number;
7943 x_charges_detail_rec.serial_number := l_serial_number;
7944 ELSE
7945 --validate the serial number
7946 l_valid_check := IS_INSTANCE_SERIAL_VALID( p_instance_id => x_charges_detail_rec.customer_product_id
7947 ,p_serial_number => p_charges_detail_rec.serial_number
7948 ,x_msg_data => l_msg_data
7949 ,x_msg_count => l_msg_count
7950 ,x_return_status => l_return_status);
7951
7952 IF l_return_status = G_RET_STS_UNEXP_ERROR THEN
7953 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
7954 ELSIF l_return_status = G_RET_STS_ERROR THEN
7955 RAISE FND_API.G_EXC_ERROR;
7956 END IF;
7957
7958 IF l_valid_check <> 'Y' THEN
7959 FND_MESSAGE.SET_NAME('CS', 'CS_CHG_INVALID_SERIAL_NUMBER');
7960 FND_MESSAGE.Set_Token('INSTANCE_ID', p_charges_detail_rec.customer_product_id);
7961 FND_MESSAGE.Set_Token('SERIAL_NUMBER', p_charges_detail_rec.serial_number);
7962 FND_MSG_PUB.Add;
7963 RAISE FND_API.G_EXC_ERROR;
7964 ELSE
7965 --assign the customer product id to out record
7966 x_charges_detail_rec.serial_number := p_charges_detail_rec.serial_number;
7967 END IF;
7968 END IF;
7969
7970 ELSE
7971 x_charges_detail_rec.serial_number := p_charges_detail_rec.serial_number;
7972 END IF; -- check to see if its a serialized item
7973
7974
7975 --fixed Bug # 3362130 - added l_comms_trackable_flag = 'Y' condition
7976 ELSIF (l_update_ib_flag = 'Y') AND
7977 (l_non_src_reference_reqd_flag = 'Y') AND
7978 (l_line_order_category_code = 'ORDER') AND
7979 (l_comms_trackable_flag = 'Y') THEN
7980 IF p_charges_detail_rec.customer_product_id IS NULL THEN
7981 --DBMS_OUTPUT.PUT_LINE('Customer product id null');
7982 --RAISE FND_API.G_EXC_ERROR;
7983 --null;
7984 FND_MESSAGE.Set_Name('CS', 'CS_API_CHG_IB_INSTANCE_MISSING');
7985 FND_MESSAGE.Set_Token('API_NAME', p_api_name);
7986 FND_MSG_PUB.Add;
7987 RAISE FND_API.G_EXC_ERROR;
7988 ELSE
7989
7990
7991 l_valid_check := IS_INSTANCE_VALID(p_instance_id => p_charges_detail_rec.customer_product_id,
7992 p_party_id => x_charges_detail_rec.sold_to_party_id,
7993 x_msg_data => l_msg_data,
7994 x_msg_count => l_msg_count,
7995 x_return_status => l_return_status);
7996
7997 IF l_return_status = G_RET_STS_UNEXP_ERROR THEN
7998 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
7999 ELSIF l_return_status = G_RET_STS_ERROR THEN
8000 RAISE FND_API.G_EXC_ERROR;
8001 END IF;
8002 --DBMS_OUTPUT.PUT_LINE('Instance is l_valid_check'||l_valid_check);
8003
8004 IF l_valid_check <> 'Y' THEN
8005
8006 FND_MESSAGE.SET_NAME('CS', 'CS_CHG_INVALID_IB_INSTANCE_PTY');
8007 FND_MESSAGE.Set_Token('PARTY_ID', x_charges_detail_rec.sold_to_party_id);
8008 FND_MESSAGE.Set_Token('INSTANCE_ID', p_charges_detail_rec.customer_product_id);
8009 FND_MSG_PUB.Add;
8010 RAISE FND_API.G_EXC_ERROR;
8011
8012 ELSE
8013 --assign to out record
8014 x_charges_detail_rec.customer_product_id := p_charges_detail_rec.customer_product_id;
8015 --DBMS_OUTPUT.PUT_LINE('Cust prod id '||x_charges_detail_rec.customer_product_id);
8016 END IF;
8017 END IF;
8018
8019 ELSIF (nvl(l_update_ib_flag,'N') = 'N') AND --Incase of SD l_update_ib_flag is coming as NULL
8020 (l_line_order_category_code = 'RETURN') THEN
8021
8022 /* -- check for customer product id
8023 IF p_charges_detail_rec.customer_product_id IS NOT NULL THEN
8024 --validate the instance
8025 --IF not valid then raise error
8026 --ELSE assign
8027 null;
8028 END IF;*/
8029
8030 -- commented off the above piece of code
8031 -- Below check has been added for bug 9058387
8032 -- Perform the instance validation when the l_update_ib_flag is passed as 'N'
8033 IF p_charges_detail_rec.customer_product_id IS NOT NULL THEN
8034 l_valid_check := IS_INSTANCE_VALID(p_instance_id => p_charges_detail_rec.customer_product_id,
8035 p_party_id => x_charges_detail_rec.sold_to_party_id,
8036 x_msg_data => l_msg_data,
8037 x_msg_count => l_msg_count,
8038 x_return_status => l_return_status);
8039
8040 IF l_return_status = G_RET_STS_UNEXP_ERROR THEN
8041 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
8042 ELSIF l_return_status = G_RET_STS_ERROR THEN
8043 RAISE FND_API.G_EXC_ERROR;
8044 END IF;
8045
8046 IF l_valid_check <> 'Y' THEN
8047
8048 FND_MESSAGE.SET_NAME('CS', 'CS_CHG_INVALID_IB_INSTANCE_PTY');
8049 FND_MESSAGE.Set_Token('PARTY_ID', x_charges_detail_rec.sold_to_party_id);
8050 FND_MESSAGE.Set_Token('INSTANCE_ID', p_charges_detail_rec.customer_product_id);
8051 FND_MSG_PUB.Add;
8052 RAISE FND_API.G_EXC_ERROR;
8053
8054 ELSE
8055 --assign to out record
8056 x_charges_detail_rec.customer_product_id := p_charges_detail_rec.customer_product_id;
8057 --DBMS_OUTPUT.PUT_LINE('Cust prod id '||x_charges_detail_rec.customer_product_id);
8058 END IF;
8059 END IF;
8060
8061
8062 -- check to see if its a serialized item
8063 -- Added for Bug # 4073602
8064 IF l_serial_control_flag = 'Y' THEN
8065 IF p_charges_detail_rec.serial_number IS NULL THEN
8066 -- no error raised
8067 -- Fix bug#5125934
8068 OPEN c_serial_number(p_charges_detail_rec.customer_product_id);
8069 FETCH c_serial_number
8070 INTO l_serial_number;
8071 CLOSE c_serial_number;
8072
8073 -- x_charges_detail_rec.serial_number := p_charges_detail_rec.serial_number;
8074 x_charges_detail_rec.serial_number := l_serial_number;
8075
8076 ELSE
8077 --validate the serial number
8078 l_valid_check := IS_INSTANCE_SERIAL_VALID( p_instance_id => x_charges_detail_rec.customer_product_id
8079 ,p_serial_number => p_charges_detail_rec.serial_number
8080 ,x_msg_data => l_msg_data
8081 ,x_msg_count => l_msg_count
8082 ,x_return_status => l_return_status);
8083
8084 IF l_return_status = G_RET_STS_UNEXP_ERROR THEN
8085 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
8086 ELSIF l_return_status = G_RET_STS_ERROR THEN
8087 RAISE FND_API.G_EXC_ERROR;
8088 END IF;
8089
8090 IF l_valid_check <> 'Y' THEN
8091 FND_MESSAGE.SET_NAME('CS', 'CS_CHG_INVALID_SERIAL_NUMBER');
8092 FND_MESSAGE.Set_Token('INSTANCE_ID', p_charges_detail_rec.customer_product_id);
8093 FND_MESSAGE.Set_Token('SERIAL_NUMBER', p_charges_detail_rec.serial_number);
8094 FND_MSG_PUB.Add;
8095 RAISE FND_API.G_EXC_ERROR;
8096 ELSE
8097 --assign the customer product id to out record
8098 x_charges_detail_rec.serial_number := p_charges_detail_rec.serial_number;
8099 END IF;
8100 END IF;
8101
8102 ELSE
8103 x_charges_detail_rec.serial_number := p_charges_detail_rec.serial_number;
8104 END IF; -- check to see if its a serialized item
8105
8106 ELSE -- IF1
8107
8108 --DBMS_OUTPUT.PUT_LINE('In the IF1');
8109 -- Added customer_product_id is not null condition
8110 IF (p_charges_detail_rec.customer_product_id IS NOT NULL AND -- IF2
8111 p_charges_detail_rec.customer_product_id <> FND_API.G_MISS_NUM) THEN
8112 -- Added the FND Messages for Bug# 5141369
8113 IF (l_comms_trackable_flag = 'N') THEN
8114 FND_MESSAGE.SET_NAME('CS', 'CS_CHG_INVALID_INST_AND_INV');
8115 FND_MESSAGE.Set_Token('INSTANCE_ID', p_charges_detail_rec.customer_product_id);
8116 FND_MESSAGE.Set_Token('INVENTORY_ITEM_ID', p_charges_detail_rec.inventory_item_id_in);
8117 FND_MSG_PUB.Add;
8118 RAISE FND_API.G_EXC_ERROR;
8119 ELSE
8120 -- Check if the Instance Is Valid for all other cases
8121 l_valid_check := IS_INSTANCE_VALID(
8122 p_instance_id => p_charges_detail_rec.customer_product_id,
8123 p_party_id => x_charges_detail_rec.sold_to_party_id,
8124 x_msg_data => l_msg_data,
8125 x_msg_count => l_msg_count,
8126 x_return_status => l_return_status);
8127 IF l_return_status = G_RET_STS_UNEXP_ERROR THEN
8128 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
8129 ELSIF l_return_status = G_RET_STS_ERROR THEN
8130 RAISE FND_API.G_EXC_ERROR;
8131 END IF;
8132 END IF;
8133
8134 --DBMS_OUTPUT.PUT_LINE('l_valid_check'||l_valid_check);
8135
8136 --taklam
8137 IF l_valid_check <> 'Y' THEN
8138 --Check if Service activity has 'change owner flag' set to 'N'
8139 --(See the csi_ib_txn_types table for the flag value)
8140 --'change owner flag'
8141
8142 OPEN C_SRC_CHANGE_OWNER(p_charges_detail_rec.txn_billing_type_id);
8143 FETCH C_SRC_CHANGE_OWNER INTO l_src_change_owner;
8144 CLOSE C_SRC_CHANGE_OWNER;
8145
8146 --DBMS_OUTPUT.PUT_LINE('l_src_change_owner'||l_src_change_owner);
8147
8148 If (l_src_change_owner = 'N') or (l_src_change_owner is null) THEN
8149 --Pass the internal_party_id to the existing "IS_INSTANCE_VALID" method.
8150 --select internal_party_id from csi_install_parameters,
8151 SELECT internal_party_id into l_internal_party_id
8152 FROM csi_install_parameters WHERE rownum = 1;
8153
8154 l_valid_check := IS_INSTANCE_VALID( p_instance_id => p_charges_detail_rec.customer_product_id,
8155 p_party_id => l_internal_party_id,
8156 x_msg_data => l_msg_data,
8157 x_msg_count => l_msg_count,
8158 x_return_status => l_return_status);
8159 IF l_return_status = G_RET_STS_UNEXP_ERROR THEN
8160 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
8161 ELSIF l_return_status = G_RET_STS_ERROR THEN
8162 RAISE FND_API.G_EXC_ERROR;
8163 END IF;
8164 End if;
8165 End if;
8166
8167 --DBMS_OUTPUT.PUT_LINE('l_valid_check'||l_valid_check);
8168
8169 IF l_valid_check <> 'Y' THEN
8170
8171 --FND_MESSAGE.SET_NAME ('CS', 'CS_CHG_INVALID_INSTANCE_RMA_PT');
8172 --FND_MSG_PUB.Add;
8173 Add_Invalid_Argument_Msg(l_api_name_full,
8174 to_char(p_charges_detail_rec.customer_product_id),
8175 'Customer_Product_Id');
8176 RAISE FND_API.G_EXC_ERROR;
8177 --taklam
8178 ELSE
8179 x_charges_detail_rec.customer_product_id := p_charges_detail_rec.customer_product_id;
8180 END IF;
8181
8182 -- check to see if its a serialized item
8183 -- Added for Bug # 4073602
8184 IF l_serial_control_flag = 'Y' THEN
8185 --DBMS_OUTPUT.PUT_LINE('l_serial_control_flag'||l_serial_control_flag);
8186 IF p_charges_detail_rec.serial_number IS NULL THEN
8187 -- no error raised
8188 -- Fix bug#5125934
8189 OPEN c_serial_number(p_charges_detail_rec.customer_product_id);
8190 FETCH c_serial_number
8191 INTO l_serial_number;
8192 CLOSE c_serial_number;
8193
8194 -- x_charges_detail_rec.serial_number := p_charges_detail_rec.serial_number;
8195 x_charges_detail_rec.serial_number := l_serial_number;
8196
8197 ELSE
8198 --validate the serial number
8199 --DBMS_OUTPUT.PUT_LINE('Calling IS_INSTANCE_SERIAL_VALID');
8200 --DBMS_OUTPUT.PUT_LINE('x_charges_detail_rec.customer_product_id'||x_charges_detail_rec.customer_product_id);
8201 --DBMS_OUTPUT.PUT_LINE('p_charges_detail_rec.serial_number'||p_charges_detail_rec.serial_number);
8202
8203 l_valid_check := IS_INSTANCE_SERIAL_VALID( p_instance_id => x_charges_detail_rec.customer_product_id
8204 ,p_serial_number => p_charges_detail_rec.serial_number
8205 ,x_msg_data => l_msg_data
8206 ,x_msg_count => l_msg_count
8207 ,x_return_status => l_return_status);
8208 IF l_return_status = G_RET_STS_UNEXP_ERROR THEN
8209 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
8210 ELSIF l_return_status = G_RET_STS_ERROR THEN
8211 RAISE FND_API.G_EXC_ERROR;
8212 END IF;
8213
8214 IF l_valid_check <> 'Y' THEN
8215 FND_MESSAGE.SET_NAME('CS', 'CS_CHG_INVALID_SERIAL_NUMBER');
8216 FND_MESSAGE.Set_Token('INSTANCE_ID', p_charges_detail_rec.customer_product_id);
8217 FND_MESSAGE.Set_Token('SERIAL_NUMBER', p_charges_detail_rec.serial_number);
8218 FND_MSG_PUB.Add;
8219 RAISE FND_API.G_EXC_ERROR;
8220 ELSE
8221 --assign the customer product id to out record
8222 x_charges_detail_rec.serial_number := p_charges_detail_rec.serial_number;
8223 END IF;
8224 END IF;
8225
8226 ELSE
8227 x_charges_detail_rec.serial_number := p_charges_detail_rec.serial_number;
8228 END IF; -- check to see if its a serialized item
8229
8230 END IF; -- IF2
8231 END IF; -- IF1
8232
8233 --DBMS_OUTPUT.PUT_LINE('Checking src');
8234
8235 -- Fix for Bug # 3325686
8236 --fixed Bug # 3362130 - added l_comms_trackable_flag = 'Y' condition
8237 /*** IF l_src_reference_reqd_flag = 'Y' AND
8238 l_src_return_reqd_flag = 'Y' AND
8239 l_line_order_category_code = 'RETURN' AND
8240 l_comms_trackable_flag = 'Y' THEN
8241 IF p_charges_detail_rec.installed_cp_return_by_date IS NULL THEN
8242 --RAISE FND_API.G_EXC_ERROR;
8243 --null;
8244 FND_MESSAGE.SET_NAME('CS', 'CS_CHG_INST_CP_RETURN_BY_DATE');
8245 FND_MESSAGE.Set_Token('INST_CP_RTN_BY_DATE', p_charges_detail_rec.installed_cp_return_by_date);
8246 FND_MSG_PUB.Add;
8247 RAISE FND_API.G_EXC_ERROR;
8248 ELSE
8249 --assign to out record
8250 x_charges_detail_rec.installed_cp_return_by_date := p_charges_detail_rec.installed_cp_return_by_date;
8251 END IF;
8252
8253 ELSE
8254 -- the flag is 'N'
8255 -- ignore the installed_cp_return_by_date
8256 x_charges_detail_rec.installed_cp_return_by_date := NULL;
8257 END IF; ****/
8258
8259 -- Return_by_date fix. If the flags are not set, then assign
8260 --whatever value comes in and do not set the installed_cp_return_date to NULL
8261 -- Fix for bug#5136691
8262 IF l_src_return_reqd_flag = 'Y' AND
8263 l_line_order_category_code = 'RETURN' AND
8264 l_comms_trackable_flag = 'Y' THEN
8265
8266 IF p_charges_detail_rec.installed_cp_return_by_date IS NULL THEN
8267 --RAISE FND_API.G_EXC_ERROR;
8268 --null;
8269 FND_MESSAGE.SET_NAME('CS', 'CS_CHG_INST_CP_RETURN_BY_DATE');
8270 FND_MESSAGE.Set_Token('INST_CP_RTN_BY_DATE', p_charges_detail_rec.installed_cp_return_by_date);
8271 FND_MSG_PUB.Add;
8272 RAISE FND_API.G_EXC_ERROR;
8273 ELSE
8274 --assign to out record
8275 x_charges_detail_rec.installed_cp_return_by_date := p_charges_detail_rec.installed_cp_return_by_date;
8276 END IF;
8277 ELSE
8278 -- the flag is 'N'
8279 -- ignore installed_cp_return_by_date
8280 x_charges_detail_rec.installed_cp_return_by_date := p_charges_detail_rec.installed_cp_return_by_date;
8281 END IF;
8282
8283 --DBMS_OUTPUT.PUT_LINE('Done Checking src');
8284 --DBMS_OUTPUT.PUT_LINE('Checking non src');
8285
8286 -- Depot Loaner fix - Bug#4586140
8287 -- Commenting out for return_by_date fix
8288 /* Open c_get_depot_txns_details(p_charges_detail_rec.estimate_detail_id);
8289 Fetch c_get_depot_txns_details into l_action_code;
8290 Close c_get_depot_txns_details; */
8291
8292 -- Fix for Bug # 3325686
8293 --fixed Bug # 3362130 - added l_comms_trackable_flag = 'Y' condition
8294 -- commented out the old code
8295 -- Modified for the return_by_date fix. Bug:5136853
8296 -- If the instance is not null and the non_src retur_reqd flag is 'Y' ,
8297 -- then installed_cp_return_by_date column should have a value.
8298 -- Likewise if the instance is null and the item is trackable and the
8299 -- src_return_reqd field is 'y', the the new_cp_return_by_date should have a value.
8300 -- Otherwise raise appropriate errors. This validation is for 'ORDER'
8301
8302 /*** non source flag checked for the 'ORDER' ***/
8303 IF l_non_src_return_reqd_flag = 'Y' AND
8304 l_line_order_category_code = 'ORDER' AND
8305 l_comms_trackable_flag = 'Y' AND
8306 p_charges_detail_rec.customer_product_id IS NOT NULL THEN
8307 IF p_charges_detail_rec.installed_cp_return_by_date IS NULL THEN
8308 FND_MESSAGE.SET_NAME('CS', 'CS_CHG_INSTALLED_CP_RETURN_BY_DATE');
8309 FND_MESSAGE.Set_Token('INSTALLED_CP_RTN_BY_DATE', p_charges_detail_rec.installed_cp_return_by_date);
8310 FND_MSG_PUB.Add;
8311 RAISE FND_API.G_EXC_ERROR;
8312 ELSE
8313 x_charges_detail_rec.installed_cp_return_by_date := p_charges_detail_rec.installed_cp_return_by_date;
8314 END IF;
8315 ELSE
8316 -- Assign whatever value is passed in the parameter.
8317 x_charges_detail_rec.installed_cp_return_by_date := p_charges_detail_rec.installed_cp_return_by_date;
8318 END IF;
8319
8320 /*** Source Flag checked for the 'Order' ***/
8321 IF l_src_return_reqd_flag = 'Y' AND
8322 l_line_order_category_code = 'ORDER' AND
8323 l_comms_trackable_flag = 'Y' AND
8324 p_charges_detail_rec.customer_product_id IS NULL THEN
8325 IF p_charges_detail_rec.new_cp_return_by_date IS NULL THEN
8326 FND_MESSAGE.SET_NAME('CS', 'CS_CHG_NEW_CP_RETURN_BY_DATE');
8327 FND_MESSAGE.Set_Token('NEW_CP_RTN_BY_DATE', p_charges_detail_rec.new_cp_return_by_date);
8328 FND_MSG_PUB.Add;
8329 RAISE FND_API.G_EXC_ERROR;
8330 ELSE
8331 x_charges_detail_rec.new_cp_return_by_date := p_charges_detail_rec.new_cp_return_by_date;
8332 END IF;
8333 ELSE
8334 -- Assign whatever value is passed in the parameter.
8335 x_charges_detail_rec.new_cp_return_by_date := p_charges_detail_rec.new_cp_return_by_date;
8336 END IF;
8337
8338
8339 /*****
8340 IF l_non_src_reference_reqd_flag = 'Y' AND
8341 l_non_src_return_reqd = 'Y' AND
8342 l_line_order_category_code = 'ORDER' AND
8343 l_comms_trackable_flag = 'Y' THEN
8344 IF p_charges_detail_rec.new_cp_return_by_date IS NULL THEN
8345 --RAISE FND_API.G_EXC_ERROR;
8346 --null;
8347 FND_MESSAGE.SET_NAME('CS', 'CS_CHG_NEW_CP_RETURN_BY_DATE');
8348 FND_MESSAGE.Set_Token('NEW_CP_RTN_BY_DATE', p_charges_detail_rec.new_cp_return_by_date);
8349 FND_MSG_PUB.Add;
8350 RAISE FND_API.G_EXC_ERROR;
8351 ELSE
8352 x_charges_detail_rec.new_cp_return_by_date := p_charges_detail_rec.new_cp_return_by_date;
8353 END IF;
8354
8355 -- Depot Loaner fix - Bug#4586140
8356 ELSIF ( l_line_order_category_code = 'ORDER' AND
8357 l_comms_trackable_flag = 'Y' AND
8358 l_src_return_reqd_flag = 'Y' AND
8359 l_action_code = 'LOANER') THEN
8360
8361 x_charges_detail_rec.new_cp_return_by_date := p_charges_detail_rec.new_cp_return_by_date;
8362 ELSE
8363 --the flag is 'N'
8364 --ignore the new_cp_return_by_date
8365 x_charges_detail_rec.new_cp_return_by_date := NULL;
8366 END IF; *****/
8367
8368
8369 --DBMS_OUTPUT.PUT_LINE('Done Checking non src');
8370 --DBMS_OUTPUT.PUT_LINE('Cust_product_id is '||P_CHARGES_DETAIL_REC.customer_product_id);
8371
8372
8373 ELSIF p_validation_mode = 'U' THEN
8374
8375 -- If no customer_product_id is passed
8376 IF p_charges_detail_rec.customer_product_id = FND_API.G_MISS_NUM THEN
8377 IF l_db_det_rec.customer_product_id IS NOT NULL AND
8378 l_item_changed = 'Y' AND
8379 x_charges_detail_rec.line_category_code = 'RETURN' AND
8380 l_src_reference_reqd_flag = 'Y' AND
8381 l_comms_trackable_flag = 'Y' THEN
8382
8383 --check if instance is for the same inventory
8384 l_valid_check := IS_INSTANCE_FOR_INVENTORY(
8385 p_instance_id => p_charges_detail_rec.customer_product_id,
8386 p_inv_id => x_charges_detail_rec.inventory_item_id_in,
8387 x_msg_data => l_msg_data,
8388 x_msg_count => l_msg_count,
8389 x_return_status => l_return_status);
8390
8391 IF l_return_status = G_RET_STS_UNEXP_ERROR THEN
8392 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
8393 ELSIF l_return_status = G_RET_STS_ERROR THEN
8394 RAISE FND_API.G_EXC_ERROR;
8395 END IF;
8396
8397 IF l_valid_check <> 'Y' THEN
8398
8399 FND_MESSAGE.SET_NAME('CS', 'CS_CHG_INVALID_IB_INSTANCE_INV');
8400 FND_MESSAGE.Set_Token('INVENTORY_ITEM_ID', p_charges_detail_rec.inventory_item_id_in);
8401 FND_MESSAGE.Set_Token('INSTANCE_ID', p_charges_detail_rec.customer_product_id);
8402 FND_MSG_PUB.Add;
8403 RAISE FND_API.G_EXC_ERROR;
8404
8405 ELSE
8406 l_valid_check := IS_INSTANCE_VALID(p_instance_id => p_charges_detail_rec.customer_product_id,
8407 p_party_id => x_charges_detail_rec.sold_to_party_id,
8408 x_msg_data => l_msg_data,
8409 x_msg_count => l_msg_count,
8410 x_return_status => l_return_status);
8411
8412 IF l_return_status = G_RET_STS_UNEXP_ERROR THEN
8413 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
8414 ELSIF l_return_status = G_RET_STS_ERROR THEN
8415 RAISE FND_API.G_EXC_ERROR;
8416 END IF;
8417
8418 --taklam
8419 IF l_valid_check <> 'Y' THEN
8420 --Check if Service activity has 'change owner flag' set to 'N'
8421 --(See the csi_ib_txn_types table for the flag value)
8422 --'change owner flag'
8423
8424 OPEN C_SRC_CHANGE_OWNER(p_charges_detail_rec.txn_billing_type_id);
8425 FETCH C_SRC_CHANGE_OWNER INTO l_src_change_owner;
8426 CLOSE C_SRC_CHANGE_OWNER;
8427
8428 If (l_src_change_owner = 'N') or (l_src_change_owner is null) THEN
8429 --Pass the internal_party_id to the existing "IS_INSTANCE_VALID" method.
8430 --select internal_party_id from csi_install_parameters,
8431 SELECT internal_party_id into l_internal_party_id
8432 FROM csi_install_parameters;
8433
8434 l_valid_check := IS_INSTANCE_VALID( p_instance_id => p_charges_detail_rec.customer_product_id,
8435 p_party_id => l_internal_party_id,
8436 x_msg_data => l_msg_data,
8437 x_msg_count => l_msg_count,
8438 x_return_status => l_return_status);
8439 IF l_return_status = G_RET_STS_UNEXP_ERROR THEN
8440 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
8441 ELSIF l_return_status = G_RET_STS_ERROR THEN
8442 RAISE FND_API.G_EXC_ERROR;
8443 END IF;
8444 End if;
8445 End if;
8446
8447
8448 IF l_valid_check <> 'Y' THEN
8449
8450 FND_MESSAGE.SET_NAME ('CS', 'CS_CHG_INVALID_INSTANCE_RMA_PT');
8451 FND_MSG_PUB.Add;
8452 RAISE FND_API.G_EXC_ERROR;
8453 --taklam
8454 ELSE
8455 --assign the customer product id to out record
8456 x_charges_detail_rec.customer_product_id := p_charges_detail_rec.customer_product_id;
8457 --DBMS_OUTPUT.PUT_LINE('Cust prod id '||x_charges_detail_rec.customer_product_id);
8458 END IF;
8459 END IF;
8460 ELSE
8461 --assign the values from the database
8462 x_charges_detail_rec.customer_product_id := l_db_det_rec.customer_product_id;
8463 END IF;
8464
8465 -- check to see if its a serialized item
8466 -- Added for Bug # 4073602
8467 IF l_serial_control_flag = 'Y' THEN
8468 IF p_charges_detail_rec.serial_number IS NULL AND
8469 x_charges_detail_rec.customer_product_id IS NOT NULL THEN
8470 -- no error raised
8471 -- Fix bug#5125934
8472 OPEN c_serial_number(p_charges_detail_rec.customer_product_id);
8473 FETCH c_serial_number
8474 INTO l_serial_number;
8475 CLOSE c_serial_number;
8476
8477 -- x_charges_detail_rec.serial_number := p_charges_detail_rec.serial_number;
8478 x_charges_detail_rec.serial_number := l_serial_number;
8479
8480 ELSIF p_charges_detail_rec.serial_number = FND_API.G_MISS_CHAR THEN
8481 -- Remove serial_number validation. Fix bug#5176423
8482 --validate the serial number
8483 /* l_valid_check := IS_INSTANCE_SERIAL_VALID( p_instance_id => x_charges_detail_rec.customer_product_id
8484 ,p_serial_number => l_db_det_rec.serial_number
8485 ,x_msg_data => l_msg_data
8486 ,x_msg_count => l_msg_count
8487 ,x_return_status => l_return_status);
8488
8489 IF l_return_status = G_RET_STS_UNEXP_ERROR THEN
8490 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
8491 ELSIF l_return_status = G_RET_STS_ERROR THEN
8492 RAISE FND_API.G_EXC_ERROR;
8493 END IF;
8494
8495 IF l_valid_check <> 'Y' THEN
8496 FND_MESSAGE.SET_NAME('CS', 'CS_CHG_INVALID_SERIAL_NUMBER');
8497 FND_MESSAGE.Set_Token('INSTANCE_ID', p_charges_detail_rec.customer_product_id);
8498 FND_MESSAGE.Set_Token('SERIAL_NUMBER', p_charges_detail_rec.serial_number);
8499 FND_MSG_PUB.Add;
8500 RAISE FND_API.G_EXC_ERROR;
8501 ELSE */
8502
8503 --assign the customer product id to out record
8504 -- x_charges_detail_rec.serial_number := p_charges_detail_rec.serial_number;
8505 x_charges_detail_rec.serial_number := l_db_det_rec.serial_number;
8506
8507 -- END IF;
8508 -- Added for bug fix:5259686
8509 ELSIF p_charges_detail_rec.serial_number IS NOT NULL AND
8510 x_charges_detail_rec.customer_product_id IS NOT NULL THEN
8511
8512 --serial number is neither null nor fnd_api.g_miss
8513 -- value is passed
8514 --validate the serial number
8515 x_charges_detail_rec.serial_number := p_charges_detail_rec.serial_number; --5887316
8516 /*
8517 l_valid_check := IS_INSTANCE_SERIAL_VALID( p_instance_id => x_charges_detail_rec.customer_product_id
8518 ,p_serial_number => p_charges_detail_rec.serial_number
8519 ,x_msg_data => l_msg_data
8520 ,x_msg_count => l_msg_count
8521 ,x_return_status => l_return_status);
8522
8523
8524 IF l_return_status = G_RET_STS_UNEXP_ERROR THEN
8525 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
8526 ELSIF l_return_status = G_RET_STS_ERROR THEN
8527 RAISE FND_API.G_EXC_ERROR;
8528 END IF;
8529
8530 IF l_valid_check <> 'Y' THEN
8531 FND_MESSAGE.SET_NAME('CS', 'CS_CHG_INVALID_SERIAL_NUMBER');
8532 FND_MESSAGE.Set_Token('INSTANCE_ID', p_charges_detail_rec.customer_product_id);
8533 FND_MESSAGE.Set_Token('SERIAL_NUMBER', p_charges_detail_rec.serial_number);
8534 FND_MSG_PUB.Add;
8535 RAISE FND_API.G_EXC_ERROR;
8536 ELSE
8537 --assign the serial_number to out record
8538 x_charges_detail_rec.serial_number := p_charges_detail_rec.serial_number;
8539 END IF;
8540 */ --5887316
8541 END IF;
8542 ELSE
8543 --customerproduct id is null
8544 x_charges_detail_rec.serial_number := l_db_det_rec.serial_number ;
8545 END IF;
8546 END IF;
8547
8548 -- If null is passed to customer_product_id
8549
8550 IF p_charges_detail_rec.customer_product_id IS NULL THEN
8551
8552 --item instance validation
8553 --fixed Bug # 3362130 - added l_comms_trackable_flag = 'Y' condition
8554 IF (l_src_reference_reqd_flag = 'Y') AND
8555 (l_line_order_category_code = 'RETURN') AND
8556 (l_comms_trackable_flag = 'Y') THEN
8557 --DBMS_OUTPUT.PUT_LINE('Customer product id null');
8558
8559 --RAISE FND_API.G_EXC_ERROR;
8560 --null;
8561 FND_MESSAGE.Set_Name('CS', 'CS_API_CHG_IB_INSTANCE_MISSING');
8562 FND_MESSAGE.Set_Token('API_NAME', p_api_name);
8563 FND_MSG_PUB.Add;
8564 RAISE FND_API.G_EXC_ERROR;
8565
8566 --fixed Bug # 3362130 - added l_comms_trackable_flag = 'Y' condition
8567 ELSIF (l_update_ib_flag = 'Y') AND
8568 (l_non_src_reference_reqd_flag = 'Y') AND
8569 (l_line_order_category_code = 'ORDER') AND
8570 (l_comms_trackable_flag = 'Y') THEN
8571 --DBMS_OUTPUT.PUT_LINE('Customer product id null');
8572 --RAISE FND_API.G_EXC_ERROR;
8573 --null;
8574 FND_MESSAGE.Set_Name('CS', 'CS_API_CHG_IB_INSTANCE_MISSING');
8575 FND_MESSAGE.Set_Token('API_NAME', p_api_name);
8576 FND_MSG_PUB.Add;
8577 RAISE FND_API.G_EXC_ERROR;
8578 ELSE
8579 x_charges_detail_rec.customer_product_id := NULL;
8580 END IF;
8581 END IF;
8582
8583 -- If new CP is passed
8584 -- Fix for Bug # 3325686
8585 --IF l_db_det_rec.customer_product_id IS NOT NULL AND
8586 /*cnemalik bug 3913714
8587 IN 11.5.9 customer_product_id is mandatory for certain setups. But in 11.5.10, for the same setups it is optional*/
8588
8589 IF p_charges_detail_rec.customer_product_id <> FND_API.G_MISS_NUM AND
8590 p_charges_detail_rec.customer_product_id IS NOT NULL AND
8591 x_charges_detail_rec.line_category_code = 'RETURN' THEN
8592
8593 -- Added the FND Messages for Bug# 5141369
8594 IF (l_comms_trackable_flag = 'N') THEN
8595 FND_MESSAGE.SET_NAME('CS', 'CS_CHG_INVALID_INST_AND_INV');
8596 FND_MESSAGE.Set_Token('INSTANCE_ID', p_charges_detail_rec.customer_product_id);
8597 FND_MESSAGE.Set_Token('INVENTORY_ITEM_ID', p_charges_detail_rec.inventory_item_id_in);
8598 FND_MSG_PUB.Add;
8599 RAISE FND_API.G_EXC_ERROR;
8600
8601 ELSE
8602
8603 --check if instance is for the same inventory
8604 l_valid_check := IS_INSTANCE_FOR_INVENTORY(
8605 p_instance_id => p_charges_detail_rec.customer_product_id,
8606 p_inv_id => x_charges_detail_rec.inventory_item_id_in,
8607 x_msg_data => l_msg_data,
8608 x_msg_count => l_msg_count,
8609 x_return_status => l_return_status);
8610
8611 IF l_return_status = G_RET_STS_UNEXP_ERROR THEN
8612 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
8613 ELSIF l_return_status = G_RET_STS_ERROR THEN
8614 RAISE FND_API.G_EXC_ERROR;
8615 END IF;
8616
8617 END IF;
8618
8619 IF l_valid_check <> 'Y' THEN
8620
8621 FND_MESSAGE.SET_NAME('CS', 'CS_CHG_INVALID_IB_INSTANCE_INV');
8622 FND_MESSAGE.Set_Token('INVENTORY_ITEM_ID', p_charges_detail_rec.inventory_item_id_in);
8623 FND_MESSAGE.Set_Token('INSTANCE_ID', p_charges_detail_rec.customer_product_id);
8624 FND_MSG_PUB.Add;
8625 RAISE FND_API.G_EXC_ERROR;
8626
8627 ELSE
8628 l_valid_check := IS_INSTANCE_VALID(p_instance_id => p_charges_detail_rec.customer_product_id,
8629 p_party_id => x_charges_detail_rec.sold_to_party_id,
8630 x_msg_data => l_msg_data,
8631 x_msg_count => l_msg_count,
8632 x_return_status => l_return_status);
8633
8634 IF l_return_status = G_RET_STS_UNEXP_ERROR THEN
8635 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
8636 ELSIF l_return_status = G_RET_STS_ERROR THEN
8637 RAISE FND_API.G_EXC_ERROR;
8638 END IF;
8639
8640 --taklam
8641 IF l_valid_check <> 'Y' THEN
8642 --Check if Service activity has 'change owner flag' set to 'N'
8643 --(See the csi_ib_txn_types table for the flag value)
8644 --'change owner flag'
8645
8646 OPEN C_SRC_CHANGE_OWNER(p_charges_detail_rec.txn_billing_type_id);
8647 FETCH C_SRC_CHANGE_OWNER INTO l_src_change_owner;
8648 CLOSE C_SRC_CHANGE_OWNER;
8649
8650 If (l_src_change_owner = 'N') or (l_src_change_owner is null) THEN
8651 --Pass the internal_party_id to the existing "IS_INSTANCE_VALID" method.
8652 --select internal_party_id from csi_install_parameters,
8653 SELECT internal_party_id into l_internal_party_id
8654 FROM csi_install_parameters;
8655
8656 l_valid_check := IS_INSTANCE_VALID( p_instance_id => p_charges_detail_rec.customer_product_id,
8657 p_party_id => l_internal_party_id,
8658 x_msg_data => l_msg_data,
8659 x_msg_count => l_msg_count,
8660 x_return_status => l_return_status);
8661 IF l_return_status = G_RET_STS_UNEXP_ERROR THEN
8662 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
8663 ELSIF l_return_status = G_RET_STS_ERROR THEN
8664 RAISE FND_API.G_EXC_ERROR;
8665 END IF;
8666 End if;
8667 End if;
8668
8669
8670 IF l_valid_check <> 'Y' THEN
8671
8672 FND_MESSAGE.SET_NAME ('CS', 'CS_CHG_INVALID_INSTANCE_RMA_PT');
8673 FND_MSG_PUB.Add;
8674 RAISE FND_API.G_EXC_ERROR;
8675 --taklam
8676 ELSE
8677 --assign the customer product id to out record
8678 x_charges_detail_rec.customer_product_id := p_charges_detail_rec.customer_product_id;
8679 --DBMS_OUTPUT.PUT_LINE('Cust prod id '||x_charges_detail_rec.customer_product_id);
8680 END IF;
8681
8682 -- check to see if its a serialized item
8683 -- Added for Bug # 4073602
8684 IF l_serial_control_flag = 'Y' THEN
8685 IF p_charges_detail_rec.serial_number IS NULL THEN
8686 -- no error raised
8687 -- Fix bug#5125934
8688 OPEN c_serial_number(p_charges_detail_rec.customer_product_id);
8689 FETCH c_serial_number
8690 INTO l_serial_number;
8691 CLOSE c_serial_number;
8692
8693 -- x_charges_detail_rec.serial_number := p_charges_detail_rec.serial_number;
8694 -- x_charges_detail_rec.serial_number := l_serial_number;
8695
8696 ELSIF p_charges_detail_rec.serial_number = FND_API.G_MISS_CHAR THEN
8697
8698 --validate the serial number
8699 x_charges_detail_rec.serial_number := p_charges_detail_rec.serial_number; --5887316
8700 /*
8701 l_valid_check := IS_INSTANCE_SERIAL_VALID( p_instance_id => x_charges_detail_rec.customer_product_id
8702 ,p_serial_number => l_db_det_rec.serial_number
8703 ,x_msg_data => l_msg_data
8704 ,x_msg_count => l_msg_count
8705 ,x_return_status => l_return_status);
8706
8707 IF l_return_status = G_RET_STS_UNEXP_ERROR THEN
8708 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
8709 ELSIF l_return_status = G_RET_STS_ERROR THEN
8710 RAISE FND_API.G_EXC_ERROR;
8711 END IF;
8712
8713 IF l_valid_check <> 'Y' THEN
8714 FND_MESSAGE.SET_NAME('CS', 'CS_CHG_INVALID_SERIAL_NUMBER');
8715 FND_MESSAGE.Set_Token('INSTANCE_ID', p_charges_detail_rec.customer_product_id);
8716 FND_MESSAGE.Set_Token('SERIAL_NUMBER', p_charges_detail_rec.serial_number);
8717 FND_MSG_PUB.Add;
8718 RAISE FND_API.G_EXC_ERROR;
8719 ELSE
8720 --assign the customer product id to out record
8721 x_charges_detail_rec.serial_number := p_charges_detail_rec.serial_number;
8722 END IF;
8723 */--5887316
8724 ELSE
8725
8726 --serial number is neither null nor fnd_api.g_miss
8727 -- value is passed
8728 --validate the serial number
8729 x_charges_detail_rec.serial_number := p_charges_detail_rec.serial_number; --5887316
8730 /*
8731 l_valid_check := IS_INSTANCE_SERIAL_VALID( p_instance_id => x_charges_detail_rec.customer_product_id
8732 ,p_serial_number => p_charges_detail_rec.serial_number
8733 ,x_msg_data => l_msg_data
8734 ,x_msg_count => l_msg_count
8735 ,x_return_status => l_return_status);
8736 IF l_return_status = G_RET_STS_UNEXP_ERROR THEN
8737 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
8738 ELSIF l_return_status = G_RET_STS_ERROR THEN
8739 RAISE FND_API.G_EXC_ERROR;
8740 END IF;
8741
8742 IF l_valid_check <> 'Y' THEN
8743 FND_MESSAGE.SET_NAME('CS', 'CS_CHG_INVALID_SERIAL_NUMBER');
8744 FND_MESSAGE.Set_Token('INSTANCE_ID', p_charges_detail_rec.customer_product_id);
8745 FND_MESSAGE.Set_Token('SERIAL_NUMBER', p_charges_detail_rec.serial_number);
8746 FND_MSG_PUB.Add;
8747 RAISE FND_API.G_EXC_ERROR;
8748 ELSE
8749 --assign the customer product id to out record
8750 x_charges_detail_rec.serial_number := p_charges_detail_rec.serial_number;
8751 END IF;
8752 */ --5887316
8753 END IF;
8754 ELSE
8755 --customerproduct id is null
8756 x_charges_detail_rec.serial_number := l_db_det_rec.serial_number ;
8757 END IF;
8758 END IF;
8759
8760
8761 --Fix for Bug # 3325686
8762 ELSIF
8763 p_charges_detail_rec.customer_product_id <> FND_API.G_MISS_NUM AND
8764 p_charges_detail_rec.customer_product_id IS NOT NULL AND
8765 x_charges_detail_rec.line_category_code = 'ORDER' THEN
8766
8767 -- Added the FND Messages for Bug# 5141369
8768 IF (l_comms_trackable_flag = 'N') THEN
8769 FND_MESSAGE.SET_NAME('CS', 'CS_CHG_INVALID_INST_AND_INV');
8770 FND_MESSAGE.Set_Token('INSTANCE_ID', p_charges_detail_rec.customer_product_id);
8771 FND_MESSAGE.Set_Token('INVENTORY_ITEM_ID', p_charges_detail_rec.inventory_item_id_in);
8772 FND_MSG_PUB.Add;
8773 RAISE FND_API.G_EXC_ERROR;
8774 ELSE
8775 --Check if instance is valid for the party
8776 l_valid_check := IS_INSTANCE_VALID(p_instance_id => p_charges_detail_rec.customer_product_id,
8777 p_party_id => x_charges_detail_rec.sold_to_party_id,
8778 x_msg_data => l_msg_data,
8779 x_msg_count => l_msg_count,
8780 x_return_status => l_return_status);
8781
8782 IF l_return_status = G_RET_STS_UNEXP_ERROR THEN
8783 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
8784 ELSIF l_return_status = G_RET_STS_ERROR THEN
8785 RAISE FND_API.G_EXC_ERROR;
8786 END IF;
8787 END IF;
8788
8789 IF l_valid_check <> 'Y' THEN
8790
8791 FND_MESSAGE.SET_NAME('CS', 'CS_CHG_INVALID_IB_INSTANCE_PTY');
8792 FND_MESSAGE.Set_Token('PARTY_ID', x_charges_detail_rec.sold_to_party_id);
8793 FND_MESSAGE.Set_Token('INSTANCE_ID', p_charges_detail_rec.customer_product_id);
8794 FND_MSG_PUB.Add;
8795 RAISE FND_API.G_EXC_ERROR;
8796
8797 ELSE
8798 --assign the customer product id to out record
8799 x_charges_detail_rec.customer_product_id := p_charges_detail_rec.customer_product_id;
8800 --DBMS_OUTPUT.PUT_LINE('Cust prod id '||x_charges_detail_rec.customer_product_id);
8801 END IF;
8802
8803 -- check to see if its a serialized item
8804 -- Added for Bug # 4073602
8805 IF l_serial_control_flag = 'Y' THEN
8806 IF p_charges_detail_rec.serial_number IS NULL THEN
8807 -- Fix bug#5125934
8808 OPEN c_serial_number(p_charges_detail_rec.customer_product_id);
8809 FETCH c_serial_number
8810 INTO l_serial_number;
8811 CLOSE c_serial_number;
8812
8813 -- x_charges_detail_rec.serial_number := p_charges_detail_rec.serial_number;
8814 x_charges_detail_rec.serial_number := l_serial_number;
8815
8816 ELSIF p_charges_detail_rec.serial_number = FND_API.G_MISS_CHAR THEN
8817 --validate the serial number
8818 -- Added for Bug # 5471849
8819 IF l_db_det_rec.serial_number IS NOT NULL THEN
8820 -- dbms_output.put_line('Serial number test bug:5471849');
8821 x_charges_detail_rec.serial_number := p_charges_detail_rec.serial_number; --5887316
8822 /*
8823 l_valid_check := IS_INSTANCE_SERIAL_VALID( p_instance_id => x_charges_detail_rec.customer_product_id
8824 ,p_serial_number => l_db_det_rec.serial_number
8825 ,x_msg_data => l_msg_data
8826 ,x_msg_count => l_msg_count
8827 ,x_return_status => l_return_status);
8828
8829 IF l_return_status = G_RET_STS_UNEXP_ERROR THEN
8830 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
8831 ELSIF l_return_status = G_RET_STS_ERROR THEN
8832 RAISE FND_API.G_EXC_ERROR;
8833 END IF;
8834
8835 IF l_valid_check <> 'Y' THEN
8836 FND_MESSAGE.SET_NAME('CS', 'CS_CHG_INVALID_SERIAL_NUMBER');
8837 FND_MESSAGE.Set_Token('INSTANCE_ID', p_charges_detail_rec.customer_product_id);
8838 FND_MESSAGE.Set_Token('SERIAL_NUMBER', p_charges_detail_rec.serial_number);
8839 FND_MSG_PUB.Add;
8840 RAISE FND_API.G_EXC_ERROR;
8841 ELSE
8842 --assign the customer product id to out record
8843 x_charges_detail_rec.serial_number := p_charges_detail_rec.serial_number;
8844 END IF;
8845 */ --5887316
8846 ELSE
8847 -- Added for the bug:5471849
8848 OPEN c_serial_number(p_charges_detail_rec.customer_product_id);
8849 FETCH c_serial_number
8850 INTO l_serial_number;
8851 CLOSE c_serial_number;
8852
8853 -- x_charges_detail_rec.serial_number := p_charges_detail_rec.serial_number;
8854 x_charges_detail_rec.serial_number := l_serial_number;
8855 END IF;
8856
8857 ELSE
8858
8859 --serial number is neither null nor fnd_api.g_miss
8860 -- value is passed
8861 --validate the serial number
8862 x_charges_detail_rec.serial_number := p_charges_detail_rec.serial_number; --5887316
8863 /*
8864 l_valid_check := IS_INSTANCE_SERIAL_VALID( p_instance_id => x_charges_detail_rec.customer_product_id
8865 ,p_serial_number => p_charges_detail_rec.serial_number
8866 ,x_msg_data => l_msg_data
8867 ,x_msg_count => l_msg_count
8868 ,x_return_status => l_return_status);
8869
8870 IF l_return_status = G_RET_STS_UNEXP_ERROR THEN
8871 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
8872 ELSIF l_return_status = G_RET_STS_ERROR THEN
8873 RAISE FND_API.G_EXC_ERROR;
8874 END IF;
8875
8876 IF l_valid_check <> 'Y' THEN
8877 FND_MESSAGE.SET_NAME('CS', 'CS_CHG_INVALID_SERIAL_NUMBER');
8878 FND_MESSAGE.Set_Token('INSTANCE_ID', p_charges_detail_rec.customer_product_id);
8879 FND_MESSAGE.Set_Token('SERIAL_NUMBER', p_charges_detail_rec.serial_number);
8880 FND_MSG_PUB.Add;
8881 RAISE FND_API.G_EXC_ERROR;
8882 ELSE
8883 --assign the customer product id to out record
8884 x_charges_detail_rec.serial_number := p_charges_detail_rec.serial_number;
8885 END IF;
8886 */ --5887316
8887 END IF;
8888 ELSE
8889 x_charges_detail_rec.serial_number := p_charges_detail_rec.serial_number;
8890 END IF; --serial number check
8891
8892 ELSE
8893 --customerproduct id is null
8894 x_charges_detail_rec.serial_number := l_db_det_rec.serial_number ;
8895 END IF;
8896
8897
8898 -- Checking for source and RETURN transactions to update installed_cp_return_by_date
8899 -- Fix for Bug # 3325686
8900 --fixed Bug # 3362130 - added l_comms_trackable_flag = 'Y' condition
8901 IF l_src_reference_reqd_flag = 'Y' AND
8902 l_src_return_reqd_flag = 'Y' AND
8903 l_line_order_category_code = 'RETURN' AND
8904 l_comms_trackable_flag = 'Y' THEN
8905 IF p_charges_detail_rec.installed_cp_return_by_date IS NULL THEN
8906 --RAISE FND_API.G_EXC_ERROR;
8907 --null;
8908 FND_MESSAGE.SET_NAME('CS', 'CS_CHG_INST_CP_RETURN_BY_DATE');
8909 FND_MESSAGE.Set_Token('INST_CP_RTN_BY_DATE', p_charges_detail_rec.installed_cp_return_by_date);
8910 FND_MSG_PUB.Add;
8911 RAISE FND_API.G_EXC_ERROR;
8912 ELSIF p_charges_detail_rec.installed_cp_return_by_date <> FND_API.G_MISS_DATE THEN
8913 --assign to out record
8914 x_charges_detail_rec.installed_cp_return_by_date := p_charges_detail_rec.installed_cp_return_by_date;
8915 ELSE
8916 x_charges_detail_rec.installed_cp_return_by_date := l_db_det_rec.installed_cp_return_by_date;
8917 END IF;
8918 --ELSE
8919 -- the flag is 'N'
8920 -- ignore the installed_cp_return_by_date
8921 --x_charges_detail_rec.installed_cp_return_by_date := NULL;
8922 -- if the flags are not set, check for g_miss_date
8923 -- Modified for the return_by_date fix. Bug:5136853
8924 ELSIF p_charges_detail_rec.installed_cp_return_by_date <> FND_API.G_MISS_DATE THEN
8925 --assign to out record
8926 x_charges_detail_rec.installed_cp_return_by_date := p_charges_detail_rec.installed_cp_return_by_date;
8927 ELSE
8928 x_charges_detail_rec.installed_cp_return_by_date := l_db_det_rec.installed_cp_return_by_date;
8929 END IF;
8930
8931 /***** RETURN BY DATE FIX FOR ORDER TRANSACTIONS *****/
8932 --
8933 -- Modified for the return_by_date fix. Bug:5136853
8934 -- If the instance is not null and the non_src retur_reqd flag is 'Y' ,
8935 -- then installed_cp_return_by_date column should have a value.
8936 -- Likewise if the instance is null and the item is trackable and the
8937 -- src_return_reqd field is 'y', the the new_cp_return_by_date should have a value.
8938 -- Otherwise raise appropriate errors. This validation is for 'ORDER'
8939
8940 /*** non source flag checked for the 'ORDER' ***/
8941 IF l_non_src_reference_reqd_flag = 'Y' AND
8942 l_non_src_return_reqd_flag = 'Y' AND
8943 l_line_order_category_code = 'ORDER' AND
8944 l_comms_trackable_flag = 'Y' AND
8945 p_charges_detail_rec.customer_product_id IS NOT NULL THEN
8946 IF p_charges_detail_rec.installed_cp_return_by_date IS NULL THEN
8947 FND_MESSAGE.SET_NAME('CS', 'CS_CHG_INSTALLED_CP_RETURN_BY_DATE');
8948 FND_MESSAGE.Set_Token('INSTALLED_CP_RTN_BY_DATE', p_charges_detail_rec.installed_cp_return_by_date);
8949 FND_MSG_PUB.Add;
8950 RAISE FND_API.G_EXC_ERROR;
8951 ELSIF p_charges_detail_rec.installed_cp_return_by_date <> FND_API.G_MISS_DATE THEN
8952 x_charges_detail_rec.installed_cp_return_by_date := p_charges_detail_rec.installed_cp_return_by_date;
8953 ELSE
8954 x_charges_detail_rec.installed_cp_return_by_date := l_db_det_rec.installed_cp_return_by_date;
8955 END IF;
8956 -- if the flags are not set, check for g_miss_date
8957 ELSIF p_charges_detail_rec.installed_cp_return_by_date <> FND_API.G_MISS_DATE THEN
8958 -- Assign whatever value is passed in the parameter.
8959 x_charges_detail_rec.installed_cp_return_by_date := p_charges_detail_rec.installed_cp_return_by_date;
8960 ELSE
8961 x_charges_detail_rec.installed_cp_return_by_date := l_db_det_rec.installed_cp_return_by_date;
8962 END IF;
8963
8964 /*** Source Flag checked for the 'Order' ***/
8965 IF l_src_reference_reqd_flag = 'Y' AND
8966 l_src_return_reqd_flag = 'Y' AND
8967 l_line_order_category_code = 'ORDER' AND
8968 l_comms_trackable_flag = 'Y' AND
8969 p_charges_detail_rec.customer_product_id IS NULL THEN
8970 IF p_charges_detail_rec.new_cp_return_by_date IS NULL THEN
8971 FND_MESSAGE.SET_NAME('CS', 'CS_CHG_NEW_CP_RETURN_BY_DATE');
8972 FND_MESSAGE.Set_Token('NEW_CP_RTN_BY_DATE', p_charges_detail_rec.new_cp_return_by_date);
8973 FND_MSG_PUB.Add;
8974 RAISE FND_API.G_EXC_ERROR;
8975 ELSIF p_charges_detail_rec.new_cp_return_by_date <> FND_API.G_MISS_DATE THEN
8976 -- Assign whatever value is passed in the parameter.
8977 x_charges_detail_rec.new_cp_return_by_date := p_charges_detail_rec.new_cp_return_by_date;
8978 ELSE
8979 x_charges_detail_rec.new_cp_return_by_date := l_db_det_rec.new_cp_return_by_date;
8980 END IF;
8981 ELSIF p_charges_detail_rec.new_cp_return_by_date <> FND_API.G_MISS_DATE THEN
8982 -- Assign whatever value is passed in the parameter.
8983 x_charges_detail_rec.new_cp_return_by_date := p_charges_detail_rec.new_cp_return_by_date;
8984 ELSE
8985 x_charges_detail_rec.new_cp_return_by_date := l_db_det_rec.new_cp_return_by_date;
8986 END IF;
8987
8988
8989 /**** -- Depot Loaner fix - Bug#4586140
8990 Open c_get_depot_txns_details(p_charges_detail_rec.estimate_detail_id);
8991 Fetch c_get_depot_txns_details into l_action_code;
8992 Close c_get_depot_txns_details;
8993
8994 -- Checking for non-source and ORDER transactions to update new_cp_return_by_date
8995 -- Fix for Bug # 3325686
8996 --fixed Bug # 3362130 - added l_comms_trackable_flag = 'Y' condition
8997 IF l_non_src_reference_reqd_flag = 'Y' AND
8998 l_non_src_return_reqd = 'Y' AND
8999 l_line_order_category_code = 'ORDER' AND
9000 l_comms_trackable_flag = 'Y' THEN
9001 IF p_charges_detail_rec.new_cp_return_by_date IS NULL THEN
9002 --RAISE FND_API.G_EXC_ERROR;
9003 --null;
9004 FND_MESSAGE.SET_NAME('CS', 'CS_CHG_INST_CP_RETURN_BY_DATE');
9005 FND_MESSAGE.Set_Token('INST_CP_RTN_BY_DATE', p_charges_detail_rec.installed_cp_return_by_date);
9006 FND_MSG_PUB.Add;
9007 RAISE FND_API.G_EXC_ERROR;
9008 ELSIF p_charges_detail_rec.new_cp_return_by_date <> FND_API.G_MISS_DATE THEN
9009 --assign to out record
9010 x_charges_detail_rec.new_cp_return_by_date := p_charges_detail_rec.new_cp_return_by_date;
9011 ELSE
9012 x_charges_detail_rec.new_cp_return_by_date := l_db_det_rec.new_cp_return_by_date;
9013 END IF;
9014 -- Depot Loaner fix - Bug#4586140
9015 ELSIF ( l_line_order_category_code = 'ORDER' AND
9016 l_comms_trackable_flag = 'Y' AND
9017 l_src_return_reqd_flag = 'Y' AND
9018 l_action_code = 'LOANER') THEN
9019
9020 x_charges_detail_rec.new_cp_return_by_date := p_charges_detail_rec.new_cp_return_by_date;
9021 ELSE
9022 -- the flag is 'N'
9023 -- ignore the installed_cp_return_by_date
9024 x_charges_detail_rec.new_cp_return_by_date := NULL;
9025 END IF; ****/
9026 END IF;
9027 --DBMS_OUTPUT.PUT_LINE('Item Instance Valid');
9028
9029 -- 12.1.3 Charges Logistics Project
9030 IF p_validation_mode = 'I' THEN
9031
9032 IF p_charges_detail_rec.parent_instance_id <> FND_API.G_MISS_NUM AND
9033 p_charges_detail_rec.parent_instance_id IS NOT NULL and x_charges_detail_rec.customer_product_id is not NUll
9034 AND x_charges_detail_rec.line_category_code = 'ORDER'
9035 AND x_charges_detail_rec.billing_flag = 'M' THEN
9036
9037 l_valid_check := IS_PARENT_INSTANCE_VALID(p_cust_prod_id => x_charges_detail_rec.customer_product_id,
9038 p_parent_inst_id => p_charges_detail_rec.parent_instance_id,
9039 x_msg_data => l_msg_data,
9040 x_msg_count => l_msg_count,
9041 x_return_status => l_return_status);
9042
9043 IF l_return_status = G_RET_STS_UNEXP_ERROR THEN
9044 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
9045 ELSIF l_return_status = G_RET_STS_ERROR THEN
9046 RAISE FND_API.G_EXC_ERROR;
9047 END IF;
9048
9049 IF l_valid_check <> 'Y' THEN
9050 FND_MESSAGE.Set_Name('CS', 'CS_CHG_INVALID_PARENT_INST');
9051 FND_MESSAGE.Set_Token('PARENT_INSTANCE_ID', p_charges_detail_rec.parent_instance_id);
9052 FND_MSG_PUB.Add;
9053 RAISE FND_API.G_EXC_ERROR;
9054 Else
9055 x_charges_detail_rec.parent_instance_id := p_charges_detail_rec.parent_instance_id;
9056 END IF;
9057 Elsif p_charges_detail_rec.parent_instance_id <> FND_API.G_MISS_NUM AND
9058 p_charges_detail_rec.parent_instance_id IS NOT NULL and x_charges_detail_rec.customer_product_id is NUll
9059 AND x_charges_detail_rec.line_category_code = 'ORDER'
9060 AND x_charges_detail_rec.billing_flag = 'M' THEN
9061
9062 Open sr_instance(p_charges_detail_rec.incident_id);
9063 Fetch sr_instance into l_sr_instance_id, l_sr_inventory_item_id;
9064 Close sr_instance;
9065
9066 If l_sr_instance_id is not null AND l_sr_instance_id = p_charges_detail_rec.parent_instance_id
9067 AND l_sr_inventory_item_id <> x_charges_detail_rec.inventory_item_id_in Then
9068 x_charges_detail_rec.parent_instance_id := p_charges_detail_rec.parent_instance_id;
9069 Else
9070 FND_MESSAGE.Set_Name('CS', 'CS_CHG_INVALID_PARENT_INST');
9071 FND_MESSAGE.Set_Token('PARENT_INSTANCE_ID', p_charges_detail_rec.parent_instance_id);
9072 FND_MSG_PUB.Add;
9073 RAISE FND_API.G_EXC_ERROR;
9074 End If;
9075 Else
9076 x_charges_detail_rec.parent_instance_id := NULL;
9077 END IF;
9078
9079
9080 ELSIF p_validation_mode = 'U' THEN
9081
9082 IF p_charges_detail_rec.parent_instance_id <> FND_API.G_MISS_NUM AND
9083 p_charges_detail_rec.parent_instance_id IS NOT NULL AND
9084 x_charges_detail_rec.customer_product_id IS NOT NULL AND x_charges_detail_rec.line_category_code = 'ORDER'
9085 AND x_charges_detail_rec.billing_flag = 'M' THEN
9086
9087 l_valid_check := IS_PARENT_INSTANCE_VALID(p_cust_prod_id => x_charges_detail_rec.customer_product_id,
9088 p_parent_inst_id => p_charges_detail_rec.parent_instance_id,
9089 x_msg_data => l_msg_data,
9090 x_msg_count => l_msg_count,
9091 x_return_status => l_return_status ) ;
9092
9093 IF l_return_status = G_RET_STS_UNEXP_ERROR THEN
9094 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
9095 ELSIF l_return_status = G_RET_STS_ERROR THEN
9096 RAISE FND_API.G_EXC_ERROR;
9097 END IF;
9098
9099 IF l_valid_check <> 'Y' THEN
9100 FND_MESSAGE.Set_Name('CS', 'CS_CHG_INVALID_PARENT_INST');
9101 FND_MESSAGE.Set_Token('PARENT_INSTANCE_ID', p_charges_detail_rec.parent_instance_id);
9102 FND_MSG_PUB.Add;
9103 RAISE FND_API.G_EXC_ERROR;
9104 Else
9105 x_charges_detail_rec.parent_instance_id := p_charges_detail_rec.parent_instance_id;
9106 End If;
9107
9108 Elsif p_charges_detail_rec.parent_instance_id <> FND_API.G_MISS_NUM AND
9109 p_charges_detail_rec.parent_instance_id IS NOT NULL and x_charges_detail_rec.customer_product_id is NUll
9110 AND x_charges_detail_rec.line_category_code = 'ORDER' AND x_charges_detail_rec.billing_flag = 'M' THEN
9111
9112 Open sr_instance(x_charges_detail_rec.incident_id); --new flow...
9113 Fetch sr_instance into l_sr_instance_id, l_sr_inventory_item_id;
9114 Close sr_instance;
9115
9116 If l_sr_instance_id is not null AND l_sr_instance_id = p_charges_detail_rec.parent_instance_id
9117 AND l_sr_inventory_item_id <> x_charges_detail_rec.inventory_item_id_in Then
9118 x_charges_detail_rec.parent_instance_id := p_charges_detail_rec.parent_instance_id;
9119 Else
9120 FND_MESSAGE.Set_Name('CS', 'CS_CHG_INVALID_PARENT_INST');
9121 FND_MESSAGE.Set_Token('PARENT_INSTANCE_ID', p_charges_detail_rec.parent_instance_id);
9122 FND_MSG_PUB.Add;
9123 RAISE FND_API.G_EXC_ERROR;
9124 End If;
9125
9126 ELSIF p_charges_detail_rec.parent_instance_id = FND_API.G_MISS_NUM THEN
9127 x_charges_detail_rec.parent_instance_id := l_db_det_rec.parent_instance_id;
9128 ELSE
9129 x_charges_detail_rec.parent_instance_id := NULL;
9130 END IF;
9131
9132 END IF;
9133
9134 -- End of Charges Logistics Project
9135 --=====================================
9136 -- Return Reason Code Validation
9137 --=====================================
9138 --DBMS_OUTPUT.PUT_LINE('Return Reason Code Validation ...');
9139 IF p_validation_mode = 'I' THEN
9140
9141 IF l_line_order_category_code = 'RETURN' THEN
9142 IF p_charges_detail_rec.return_reason_code IS NULL THEN
9143 --RAISE FND_API.G_EXC_ERROR;
9144 --null;
9145 FND_MESSAGE.SET_NAME('CS', 'CS_CHG_INVALID_RETURN_REASON');
9146 FND_MESSAGE.Set_Token('RETURN_REASON_CODE', p_charges_detail_rec.return_reason_code);
9147 FND_MSG_PUB.Add;
9148 RAISE FND_API.G_EXC_ERROR;
9149 ELSE
9150
9151 --return reason code is not null
9152 --validate the return reason code
9153
9154 l_valid_check := IS_RETURN_REASON_VALID(p_return_reason_code => p_charges_detail_rec.return_reason_code,
9155 x_msg_data => l_msg_data,
9156 x_msg_count => l_msg_count,
9157 x_return_status => l_return_status);
9158
9159 IF l_return_status = G_RET_STS_UNEXP_ERROR THEN
9160 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
9161 ELSIF l_return_status = G_RET_STS_ERROR THEN
9162 RAISE FND_API.G_EXC_ERROR;
9163 END IF;
9164
9165 IF l_valid_check <> 'Y' THEN
9166
9167 FND_MESSAGE.SET_NAME('CS', 'CS_CHG_INVALID_RETURN_REASON');
9168 FND_MESSAGE.Set_Token('RETURN_REASON_CODE', p_charges_detail_rec.return_reason_code);
9169 FND_MSG_PUB.Add;
9170 RAISE FND_API.G_EXC_ERROR;
9171 ELSE
9172 x_charges_detail_rec.return_reason_code := p_charges_detail_rec.return_reason_code;
9173 END IF;
9174
9175 END IF;
9176
9177 ELSE
9178
9179 IF l_line_order_category_code = 'ORDER' OR l_line_order_category_code IS NULL THEN
9180 IF p_charges_detail_rec.return_reason_code IS NOT NULL THEN
9181 --RAISE FND_API.G_EXC_ERROR;
9182 --null;
9183 FND_MESSAGE.SET_NAME('CS', 'CS_CHG_INVALID_RETURN_REASON');
9184 FND_MESSAGE.Set_Token('RETURN_REASON_CODE', p_charges_detail_rec.return_reason_code);
9185 FND_MSG_PUB.Add;
9186 RAISE FND_API.G_EXC_ERROR;
9187 END IF;
9188 END IF;
9189 x_charges_detail_rec.return_reason_code := p_charges_detail_rec.return_reason_code;
9190
9191 END IF;
9192
9193 ELSIF p_validation_mode = 'U' THEN
9194
9195 IF l_line_order_category_code = 'RETURN' THEN
9196
9197 IF p_charges_detail_rec.return_reason_code <> FND_API.G_MISS_CHAR AND
9198 p_charges_detail_rec.return_reason_code IS NOT NULL THEN
9199
9200 l_valid_check := IS_RETURN_REASON_VALID(p_return_reason_code => p_charges_detail_rec.return_reason_code,
9201 x_msg_data => l_msg_data,
9202 x_msg_count => l_msg_count,
9203 x_return_status => l_return_status);
9204
9205 IF l_return_status = G_RET_STS_UNEXP_ERROR THEN
9206 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
9207 ELSIF l_return_status = G_RET_STS_ERROR THEN
9208 RAISE FND_API.G_EXC_ERROR;
9209 END IF;
9210
9211 IF l_valid_check <> 'Y' THEN
9212
9213 FND_MESSAGE.SET_NAME('CS', 'CS_CHG_INVALID_RETURN_REASON');
9214 FND_MESSAGE.Set_Token('RETURN_REASON_CODE', p_charges_detail_rec.return_reason_code);
9215 FND_MSG_PUB.Add;
9216 RAISE FND_API.G_EXC_ERROR;
9217 ELSE
9218 x_charges_detail_rec.return_reason_code := p_charges_detail_rec.return_reason_code;
9219 END IF;
9220
9221 ELSE
9222 -- If not passed then
9223 -- assign from db record
9224 x_charges_detail_rec.return_reason_code := l_db_det_rec.return_reason_code;
9225 END IF;
9226 END IF;
9227 END IF;
9228
9229 --DBMS_OUTPUT.PUT_LINE('Return Reason COde Successful ....');
9230
9231 --========================================
9232 -- Qty Required Validation
9233 --========================================
9234
9235 --DBMS_OUTPUT.PUT_LINE('Qty Required Validation ...');
9236
9237 IF p_validation_mode = 'I' THEN
9238
9239 --DBMS_OUTPUT.PUT_LINE('Insert Mode');
9240
9241 IF (((l_line_order_category_code = 'RETURN') AND
9242 (p_charges_detail_rec.return_reason_code IS NOT NULL) AND
9243 (p_charges_detail_rec.quantity_required IS NOT NULL))) THEN
9244
9245 IF sign(p_charges_detail_rec.quantity_required) = -1 THEN
9246 x_charges_detail_rec.quantity_required := p_charges_detail_rec.quantity_required;
9247 ELSE
9248 --assign -ve qty to out record
9249 x_charges_detail_rec.quantity_required := (p_charges_detail_rec.quantity_required * -1);
9250 END IF;
9251 ELSE
9252
9253 IF p_charges_detail_rec.quantity_required IS NOT NULL THEN
9254 -- Added to fix bug # 5147727
9255 IF sign(p_charges_detail_rec.quantity_required) = -1 THEN
9256 -- need to make this positive as no -ve quantity for orders
9257 x_charges_detail_rec.quantity_required := (p_charges_detail_rec.quantity_required * -1);
9258 ELSE
9259 x_charges_detail_rec.quantity_required := p_charges_detail_rec.quantity_required;
9260 END IF;
9261
9262 ELSE
9263 --Added to fix bug # 3217757
9264 --debriefed expense line not displaying correct amount
9265 --This is to default 1 for qty if qty is null
9266
9267 --Added to fix bug # 4205915
9268 IF ((l_line_order_category_code = 'RETURN') AND
9269 (p_charges_detail_rec.return_reason_code IS NOT NULL)) THEN
9270
9271 x_charges_detail_rec.quantity_required := -1;
9272 ELSE
9273 x_charges_detail_rec.quantity_required := 1;
9274 END IF;
9275 END IF;
9276 END IF;
9277
9278 ELSIF p_validation_mode = 'U' THEN
9279
9280 --DBMS_OUTPUT.PUT_LINE('Update Mode');
9281
9282 --DBMS_OUTPUT.PUT_LINE('p_charges_detail_rec.quantity_required '||p_charges_detail_rec.quantity_required);
9283
9284 IF p_charges_detail_rec.quantity_required = FND_API.G_MISS_NUM OR
9285 p_charges_detail_rec.quantity_required IS NULL THEN
9286
9287 --DBMS_OUTPUT.PUT_LINE('Quantity Required not passed');
9288 x_charges_detail_rec.quantity_required := l_db_det_rec.quantity_required ;
9289 --DBMS_OUTPUT.PUT_LINE('Quantity required is '||x_charges_detail_rec.quantity_required);
9290
9291 ELSE
9292 /* Bug# 4870051
9293 IF l_db_det_rec.rollup_flag = 'Y' THEN
9294 Cant_Update_Detail_Param_Msg(l_api_name_full,
9295 'QUANTITY_REQUIRED',
9296 to_char(p_charges_detail_rec.quantity_required));
9297 RAISE FND_API.G_EXC_ERROR;
9298 ELSE*/
9299 IF (((l_line_order_category_code = 'RETURN') AND
9300 (x_charges_detail_rec.return_reason_code IS NOT NULL) AND
9301 (p_charges_detail_rec.quantity_required IS NOT NULL))) THEN
9302
9303 IF sign(p_charges_detail_rec.quantity_required) = -1 THEN
9304 x_charges_detail_rec.quantity_required := p_charges_detail_rec.quantity_required;
9305 ELSE
9306 --assign -ve qty to out record
9307 x_charges_detail_rec.quantity_required := (p_charges_detail_rec.quantity_required * -1);
9308 END IF;
9309 ELSE
9310 -- Added below for Bug# 5147727
9311 IF sign(p_charges_detail_rec.quantity_required) = -1 THEN
9312 -- need to make this positive as no -ve quantity for orders
9313 x_charges_detail_rec.quantity_required := (p_charges_detail_rec.quantity_required * -1);
9314 ELSE
9315 x_charges_detail_rec.quantity_required := p_charges_detail_rec.quantity_required ;
9316 END IF;
9317 --DBMS_OUTPUT.PUT_LINE('Quantity required is '||x_charges_detail_rec.quantity_required);
9318
9319 END IF;
9320
9321 --Condition added to fix Bug # 3358531
9322 IF x_charges_detail_rec.quantity_required <> l_db_det_rec.quantity_required THEN
9323 --quantity required is changed need to re-calculate the list price
9324 l_calc_sp := 'Y';
9325 END IF;
9326 --Bug# 4870051 END IF ;
9327 END IF ;
9328 END IF;
9329
9330 --DBMS_OUTPUT.PUT_LINE('Qty Required Validation Successful...');
9331
9332
9333 --=================================================
9334 --Validate Incoming Price List and Currency Code
9335 --=================================================
9336 --DBMS_OUTPUT.PUT_LINE('Validate Incoming Price List and Currency Code ...');
9337
9338 IF p_validation_mode IN ( 'I', 'U') THEN
9339
9340 --DBMS_OUTPUT.PUT_LINE(' Price List '||p_charges_detail_rec.price_list_id);
9341 --DBMS_OUTPUT.PUT_LINE(' Currency_code '||p_charges_detail_rec.currency_code);
9342
9343 IF p_charges_detail_rec.price_list_id <> FND_API.G_MISS_NUM AND
9344 p_charges_detail_rec.price_list_id IS NOT NULL THEN
9345
9346 l_valid_check := IS_PRICE_LIST_VALID(p_price_list_id => p_charges_detail_rec.price_list_id,
9347 x_msg_data => l_msg_data,
9348 x_msg_count => l_msg_count,
9349 x_return_status => l_return_status);
9350
9351 IF l_return_status = G_RET_STS_UNEXP_ERROR THEN
9352 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
9353 ELSIF l_return_status = G_RET_STS_ERROR THEN
9354 RAISE FND_API.G_EXC_ERROR;
9355 END IF;
9356
9357 IF l_valid_check <> 'Y' THEN
9358 FND_MESSAGE.SET_NAME('CS', 'CS_CHG_INVALID_PRICE_LIST');
9359 FND_MESSAGE.Set_Token('PRICE_LIST_ID', p_charges_detail_rec.price_list_id);
9360 FND_MSG_PUB.Add;
9361 RAISE FND_API.G_EXC_ERROR;
9362
9363 ELSE
9364
9365 --DBMS_OUTPUT.PUT_LINE('Price List is valid');
9366
9367 --assign the price_list_id to the out record
9368 x_charges_detail_rec.price_list_id := p_charges_detail_rec.price_list_id;
9369
9370 -- get currency_code for the price_list_id
9371 GET_CURRENCY_CODE(
9372 p_api_name => l_api_name,
9373 p_price_list_id => p_charges_detail_rec.price_list_id,
9374 x_currency_code => l_currency_code,
9375 x_msg_data => l_msg_data,
9376 x_msg_count => l_msg_count,
9377 x_return_status => l_return_status);
9378
9379 IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
9380 FND_MESSAGE.SET_NAME('CS', 'CS_CHG_GET_CURRENCY_CODE_ERROR');
9381 FND_MESSAGE.Set_Token('PRICE_LIST_ID', p_charges_detail_rec.price_list_id);
9382 --FND_MESSAGE.Set_Token('TEXT', l_msg_data, TRUE);
9383 FND_MSG_PUB.Add;
9384 RAISE FND_API.G_EXC_ERROR;
9385 END IF ;
9386
9387 --DBMS_OUTPUT.PUT_LINE('Currency_code '||l_currency_code);
9388
9389 IF (p_charges_detail_rec.currency_code <> FND_API.G_MISS_CHAR AND
9390 p_charges_detail_rec.currency_code IS NOT NULL) AND
9391 (l_currency_code IS NOT NULL) AND
9392 (p_charges_detail_rec.currency_code <> l_currency_code) THEN
9393 l_profile_value := fnd_profile.value('CS_ENABLE_CURRENCY_CONVERSION');
9394 IF l_profile_value = 'Y' THEN
9395
9396 CURR_IN_CONVERSION_LIST(
9397 p_api_name => l_api_name,
9398 p_price_list_id => p_charges_detail_rec.price_list_id,
9399 p_currency_code => p_charges_detail_rec.currency_code,
9400 x_msg_data => l_msg_data,
9401 x_msg_count => l_msg_count,
9402 x_return_status => l_return_status);
9403
9404 IF l_return_status = FND_API.G_RET_STS_SUCCESS Then
9405 x_charges_detail_rec.currency_code := p_charges_detail_rec.currency_code;
9406 l_curr_in_conversion_list := 'Y';
9407
9408 ELSE
9409 FND_MESSAGE.SET_NAME('CS', 'CS_CHG_INVALID_CURRENCY_CODE');
9410 FND_MESSAGE.Set_Token('CURRENCY_CODE', p_charges_detail_rec.currency_code);
9411 FND_MSG_PUB.Add;
9412 RAISE FND_API.G_EXC_ERROR;
9413
9414 END IF;
9415
9416 If l_curr_in_conversion_list = 'Y'
9417 and (p_charges_detail_rec.list_price is null OR p_charges_detail_rec.list_price = FND_API.G_MISS_NUM
9418 OR p_charges_detail_rec.selling_price is null OR p_charges_detail_rec.selling_price = FND_API.G_MISS_NUM
9419 OR p_charges_detail_rec.after_warranty_cost is null OR p_charges_detail_rec.after_warranty_cost = FND_API.G_MISS_NUM) then
9420
9421 FND_MESSAGE.SET_NAME('CS', 'CS_CHG_NOT_BASE_CURRENCY');
9422 FND_MESSAGE.Set_Token('CURRENCY_CODE', p_charges_detail_rec.currency_code);
9423 FND_MSG_PUB.Add;
9424 RAISE FND_API.G_EXC_ERROR;
9425
9426 End If;
9427 ELSE
9428 FND_MESSAGE.SET_NAME('CS', 'CS_CHG_INVALID_CURRENCY_CODE');
9429 FND_MESSAGE.Set_Token('CURRENCY_CODE', p_charges_detail_rec.currency_code);
9430 FND_MSG_PUB.Add;
9431 RAISE FND_API.G_EXC_ERROR;
9432 END IF;
9433
9434 ELSIF (p_charges_detail_rec.currency_code IS NULL) AND
9435 (l_currency_code IS NOT NULL) THEN
9436 x_charges_detail_rec.currency_code := l_currency_code;
9437
9438 --ELSIF (p_charges_detail_rec.currency_code IS NOT NULL) AND
9439 -- (l_currency_code IS NULL) THEN
9440 ELSE
9441 --assign currency_code to out record
9442 x_charges_detail_rec.currency_code := p_charges_detail_rec.currency_code;
9443 END IF;
9444 END IF;
9445
9446 END IF;
9447 END IF;
9448
9449
9450 --===================================
9451 --Validate Contract Information
9452 --===================================
9453 --DBMS_OUTPUT.PUT_LINE('Validate Contract Information ...');
9454
9455
9456 IF l_incident_date is NOT NULL THEN
9457 l_request_date := l_incident_date;
9458 --DBMS_OUTPUT.PUT_LINE('l_request_date : '||l_request_date);
9459
9460 ELSE
9461 l_request_date := l_creation_date;
9462 --DBMS_OUTPUT.PUT_LINE('l_request_date : '||l_request_date);
9463 END IF;
9464
9465 IF p_validation_mode = 'I' THEN
9466
9467 --DBMS_OUTPUT.PUT_LINE('Contract Validation');
9468 --DBMS_OUTPUT.PUT_LINE('p_charges_detail_rec.contract_id = ' || p_charges_detail_rec.contract_id);
9469 --DBMS_OUTPUT.PUT_LINE('p_charges_detail_rec.coverage_id = ' || p_charges_detail_rec.coverage_id);
9470 --DBMS_OUTPUT.PUT_LINE('p_charges_detail_rec.coverage_txn_group_id = ' || p_charges_detail_rec.coverage_txn_group_id);
9471
9472 -- if rate_type is passed then pass it down to the application
9473 IF p_charges_detail_rec.rate_type_code IS NOT NULL THEN
9474 x_charges_detail_rec.rate_type_code := p_charges_detail_rec.rate_type_code;
9475 ELSE
9476 x_charges_detail_rec.rate_type_code := null;
9477 END IF;
9478
9479
9480
9481 --Changed for R12 - always use the contract_line_id
9482 IF p_charges_detail_rec.contract_line_id IS NOT NULL THEN
9483 --validate the contract_line_id
9484 l_valid_check := IS_CONTRACT_LINE_VALID(
9485 p_contract_line_id => p_charges_detail_rec.contract_line_id,
9486 x_contract_id => x_charges_detail_rec.contract_id,
9487 x_msg_data => l_msg_data,
9488 x_msg_count => l_msg_count,
9489 x_return_status => l_return_status);
9490
9491 IF l_return_status = G_RET_STS_UNEXP_ERROR THEN
9492 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
9493 ELSIF l_return_status = G_RET_STS_ERROR THEN
9494 RAISE FND_API.G_EXC_ERROR;
9495 END IF;
9496
9497 IF l_valid_check <> 'Y' THEN
9498
9499 FND_MESSAGE.SET_NAME('CS', 'CS_CHG_INVALID_CONTRACT_LINE');
9500 FND_MESSAGE.Set_Token('CONTRACT_LINE_ID', p_charges_detail_rec.contract_Line_id);
9501 FND_MSG_PUB.Add;
9502 RAISE FND_API.G_EXC_ERROR;
9503 ELSE
9504 --assign this value to the out parameter
9505 x_charges_detail_rec.contract_line_id := p_charges_detail_rec.contract_line_id;
9506 END IF;
9507 ELSIF p_charges_detail_rec.coverage_id IS NOT NULL THEN
9508 --need to derive the coverage_line_id using the coverage_id
9509
9510 x_charges_detail_rec.contract_line_id := GET_CONTRACT_LINE_ID(p_charges_detail_rec.coverage_id,
9511 l_msg_data,
9512 x_msg_count,
9513 x_return_status);
9514
9515 IF l_return_status = G_RET_STS_UNEXP_ERROR THEN
9516 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
9517 ELSIF l_return_status = G_RET_STS_ERROR THEN
9518 RAISE FND_API.G_EXC_ERROR;
9519 END IF;
9520
9521 IF x_charges_detail_rec.contract_line_id = 0 THEN
9522 Add_Invalid_Argument_Msg(l_api_name,
9523 l_contract_line_id,
9524 'Contract Line ID');
9525
9526 RAISE FND_API.G_EXC_ERROR;
9527 END IF;
9528 ELSE
9529 --Fixed Bug # 5022118 Added condition for Depot Repair Task lines
9530 IF l_contract_service_id IS NOT NULL AND
9531 p_charges_detail_rec.original_source_code <> 'DR' AND
9532 p_charges_detail_rec.source_code <> 'SD' THEN
9533 --assign this to the x_charges_detail_rec.contract_line_id
9534 x_charges_detail_rec.contract_line_id := l_contract_service_id;
9535 -- Bug 12730503
9536 ELSIF l_contract_service_id IS NOT NULL AND
9537 p_charges_detail_rec.original_source_code = 'DR' AND
9538 p_charges_detail_rec.source_code = 'DR' THEN
9539
9540 x_charges_detail_rec.contract_line_id := l_contract_service_id;
9541 -- End of Bug 12730503
9542 ELSE
9543 x_charges_detail_rec.contract_line_id := null;
9544 END IF;
9545 END IF;
9546
9547
9548
9549 -- Initialize contract values.
9550 x_charges_detail_rec.contract_id := null;
9551 x_charges_detail_rec.coverage_id := null;
9552 x_charges_detail_rec.coverage_txn_group_id := null;
9553
9554 IF (p_charges_detail_rec.contract_id IS NOT NULL) THEN
9555 --(p_charges_detail_rec.coverage_id IS NOT NULL) AND
9556 --(p_charges_detail_rec.coverage_txn_group_id IS NOT NULL) THEN
9557
9558 --Validate Contract
9559
9560 l_valid_check := IS_CONTRACT_VALID(
9561 p_contract_id => p_charges_detail_rec.contract_id,
9562 x_msg_data => l_msg_data,
9563 x_msg_count => l_msg_count,
9564 x_return_status => l_return_status);
9565
9566 IF l_return_status = G_RET_STS_UNEXP_ERROR THEN
9567 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
9568 ELSIF l_return_status = G_RET_STS_ERROR THEN
9569 RAISE FND_API.G_EXC_ERROR;
9570 END IF;
9571
9572 IF l_valid_check <> 'Y' THEN
9573
9574 FND_MESSAGE.SET_NAME('CS', 'CS_CHG_INVALID_CONTRACT');
9575 FND_MESSAGE.Set_Token('CONTRACT_ID', p_charges_detail_rec.contract_id);
9576 --FND_MESSAGE.Set_Token('COVERAGE_ID', p_charges_detail_rec.coverage_id, TRUE);
9577 --FND_MESSAGE.Set_Token('BUSINESS_PROCESS_ID', p_charges_detail_rec.business_process_id, TRUE);
9578 FND_MSG_PUB.Add;
9579 RAISE FND_API.G_EXC_ERROR;
9580
9581 ELSE
9582
9583 --Contract is valid, assign to out record
9584 x_charges_detail_rec.contract_id := p_charges_detail_rec.contract_id;
9585
9586 -- get price list for the contract
9587 GET_CONTRACT_PRICE_LIST(
9588 p_api_name => l_api_name,
9589 p_business_process_id => x_charges_detail_rec.business_process_id,
9590 p_request_date => l_request_date,
9591 p_contract_line_id => x_charges_detail_rec.contract_line_id,
9592 x_price_list_id => l_price_list_id,
9593 x_currency_code => l_currency_code,
9594 x_msg_data => l_msg_data,
9595 x_msg_count => l_msg_count,
9596 x_return_status => l_return_status);
9597
9598 IF p_charges_detail_rec.price_list_id IS NOT NULL AND
9599 l_price_list_id IS NOT NULL AND
9600 p_charges_detail_rec.price_list_id <> l_price_list_id THEN
9601
9602 --Fixed To resolve Bug # 3557490
9603 --do nothing
9604 --since the price list is already derived there is no need to validate again
9605 --use the price list sent by the upstream application
9606 x_charges_detail_rec.price_list_id := p_charges_detail_rec.price_list_id;
9607
9608 -- get currency_code for the price_list_id
9609 GET_CURRENCY_CODE(
9610 p_api_name => l_api_name,
9611 p_price_list_id => x_charges_detail_rec.price_list_id,
9612 x_currency_code => l_currency_code,
9613 x_msg_data => l_msg_data,
9614 x_msg_count => l_msg_count,
9615 x_return_status => l_return_status);
9616
9617 IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
9618 FND_MESSAGE.SET_NAME('CS', 'CS_CHG_GET_CURRENCY_CODE_ERROR');
9619 FND_MESSAGE.Set_Token('PRICE_LIST_ID', p_charges_detail_rec.price_list_id);
9620 --FND_MESSAGE.Set_Token('TEXT', l_msg_data, TRUE);
9621 FND_MSG_PUB.Add;
9622 RAISE FND_API.G_EXC_ERROR;
9623 END IF ;
9624 IF x_charges_detail_rec.currency_code <> l_currency_code
9625 AND l_currency_code is NOT NULL and x_charges_detail_rec.currency_code is not NUll
9626 and x_charges_detail_rec.currency_code <> FND_API.G_MISS_CHAR THEN --12.1.3 , vpremach
9627 IF L_CURR_IN_CONVERSION_LIST <> 'Y' THEN
9628 FND_MESSAGE.SET_NAME('CS', 'CS_CHG_INVALID_CURRENCY_CODE');
9629 FND_MESSAGE.Set_Token('CURRENCY_CODE', p_charges_detail_rec.currency_code);
9630 FND_MSG_PUB.Add;
9631 RAISE FND_API.G_EXC_ERROR;
9632 END IF;
9633 ELSE
9634 x_charges_detail_rec.currency_code := l_currency_code;
9635 END IF;
9636 ELSIF p_charges_detail_rec.price_list_id IS NULL AND
9637 l_price_list_id IS NOT NULL THEN
9638 x_charges_detail_rec.price_list_id := l_price_list_id;
9639 x_charges_detail_rec.currency_code := l_currency_code;
9640
9641 ELSIF p_charges_detail_rec.price_list_id IS NOT NULL AND
9642 l_price_list_id IS NULL THEN
9643
9644 x_charges_detail_rec.price_list_id := p_charges_detail_rec.price_list_id;
9645 -- get currency_code for the price_list_id
9646 GET_CURRENCY_CODE(
9647 p_api_name => l_api_name,
9648 p_price_list_id => p_charges_detail_rec.price_list_id,
9649 x_currency_code => l_currency_code,
9650 x_msg_data => l_msg_data,
9651 x_msg_count => l_msg_count,
9652 x_return_status => l_return_status);
9653
9654 IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
9655 FND_MESSAGE.SET_NAME('CS', 'CS_CHG_GET_CURRENCY_CODE_ERROR');
9656 FND_MESSAGE.Set_Token('PRICE_LIST_ID', p_charges_detail_rec.price_list_id);
9657 --FND_MESSAGE.Set_Token('TEXT', l_msg_data, TRUE);
9658 FND_MSG_PUB.Add;
9659 RAISE FND_API.G_EXC_ERROR;
9660 END IF ;
9661
9662 IF x_charges_detail_rec.currency_code <> l_currency_code AND l_currency_code is NOT NULL and x_charges_detail_rec.currency_code is not NUll
9663 and x_charges_detail_rec.currency_code <> FND_API.G_MISS_CHAR THEN --12.1.3, vpremach
9664 IF L_CURR_IN_CONVERSION_LIST <> 'Y' THEN
9665 FND_MESSAGE.SET_NAME('CS', 'CS_CHG_INVALID_CURRENCY_CODE');
9666 FND_MESSAGE.Set_Token('CURRENCY_CODE', p_charges_detail_rec.currency_code);
9667 FND_MSG_PUB.Add;
9668 RAISE FND_API.G_EXC_ERROR;
9669 END IF;
9670 ELSE
9671 x_charges_detail_rec.currency_code := l_currency_code;
9672 END IF;
9673
9674 ELSIF p_charges_detail_rec.price_list_id IS NULL AND
9675 l_price_list_id IS NULL THEN
9676
9677 --use the default from the price list
9678 x_charges_detail_rec.price_list_id := to_number(fnd_profile.value('CS_CHARGE_DEFAULT_PRICE_LIST'));
9679
9680 IF FND_LOG.level_procedure >= FND_LOG.g_current_runtime_level
9681 THEN
9682 FND_LOG.String
9683 ( FND_LOG.level_procedure , L_LOG_MODULE || ''
9684 , 'The Value of profile CS_CHARGE_DEFAULT_PRICE_LIST :' || x_charges_detail_rec.price_list_id
9685 );
9686 END IF;
9687
9688 -- get currency_code for the price_list_id
9689 GET_CURRENCY_CODE(
9690 p_api_name => l_api_name,
9691 p_price_list_id => x_charges_detail_rec.price_list_id,
9692 x_currency_code => l_currency_code,
9693 x_msg_data => l_msg_data,
9694 x_msg_count => l_msg_count,
9695 x_return_status => l_return_status);
9696
9697 IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
9698 FND_MESSAGE.SET_NAME('CS', 'CS_CHG_GET_CURRENCY_CODE_ERROR');
9699 FND_MESSAGE.Set_Token('PRICE_LIST_ID', x_charges_detail_rec.price_list_id);
9700 --FND_MESSAGE.Set_Token('TEXT', l_msg_data, TRUE);
9701 FND_MSG_PUB.Add;
9702 RAISE FND_API.G_EXC_ERROR;
9703 END IF ;
9704 IF x_charges_detail_rec.currency_code <> l_currency_code AND l_currency_code is NOT NULL and x_charges_detail_rec.currency_code is not NUll
9705 and x_charges_detail_rec.currency_code <> FND_API.G_MISS_CHAR THEN --12.1.3, vpremach
9706 IF L_CURR_IN_CONVERSION_LIST <> 'Y' THEN
9707 FND_MESSAGE.SET_NAME('CS', 'CS_CHG_INVALID_CURRENCY_CODE');
9708 FND_MESSAGE.Set_Token('CURRENCY_CODE', p_charges_detail_rec.currency_code);
9709 FND_MSG_PUB.Add;
9710 RAISE FND_API.G_EXC_ERROR;
9711 END IF;
9712 ELSE
9713 x_charges_detail_rec.currency_code := l_currency_code;
9714 END IF;
9715
9716 END IF;
9717 END IF;
9718
9719
9720 -- For bugfix 3903911, vkjain.
9721 -- The charge contract is selectively applied for debrief lines.
9722 -- If the debrief lines originate from Depot Repair than RO contract
9723 -- is used. If there is no RO contract then SR contract should not be defaulted.
9724 -- Adding the NOT condition below to address the requirement.
9725 ELSIF l_contract_service_ID IS NOT NULL AND
9726 l_business_process_id IS NOT NULL AND
9727 NOT ( p_charges_detail_rec.original_source_code = 'DR' AND
9728 p_charges_detail_rec.source_code = 'SD') THEN
9729
9730 -- p_charges_detail_rec.contract_id IS NULL AND
9731 -- p_charges_detail_rec.coverage_id IS NULL AND
9732 -- p_charges_detail_rec.coverage_txn_group_id IS NULL
9733 -- Check to see if there is a contract on SR
9734
9735 --DBMS_OUTPUT.PUT_LINE('l_contract_id = ' || l_contract_id);
9736 --DBMS_OUTPUT.PUT_LINE('l_contract_service_ID = ' || l_contract_service_ID);
9737 --DBMS_OUTPUT.PUT_LINE('l_business_process_id = ' || l_business_process_id);
9738
9739 GET_CONTRACT(
9740 p_api_name => l_api_name,
9741 p_contract_SR_ID => l_contract_service_id,
9742 p_incident_date => l_incident_date,
9743 p_creation_date => l_creation_date,
9744 p_customer_id => l_customer_id,
9745 p_cust_account_id => l_account_id,
9746 p_cust_product_id => l_cust_product_id,
9747 p_system_id => l_system_id, -- Fix bug
9748 p_inventory_item_id => l_inventory_item_id, -- Fix bug
9749 p_business_process_id => p_charges_detail_rec.business_process_id,
9750 x_contract_id => l_contract_id,
9751 x_po_number => l_po_number,
9752 x_return_status => l_return_status,
9753 x_msg_count => l_msg_count,
9754 x_msg_data => l_msg_data);
9755
9756 --DBMS_OUTPUT.PUT_LINE('l_contract_id = ' || l_contract_id);
9757
9758 IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
9759 FND_MESSAGE.SET_NAME('CS', 'CS_CHG_GET_CONTRACT_API_ERROR');
9760 FND_MESSAGE.SET_TOKEN('BUSINESS_PROCESS_ID', p_charges_detail_rec.business_process_id);
9761 FND_MESSAGE.SET_TOKEN('CONTRACT_SERVICE_LINE_ID', l_contract_service_id);
9762 --FND_MESSAGE.SET_TOKEN('TEXT', l_msg_data);
9763 FND_MSG_PUB.Add;
9764 RAISE FND_API.G_EXC_ERROR;
9765 END IF;
9766
9767 IF l_contract_id IS NOT NULL THEN
9768
9769 x_charges_detail_rec.contract_id := l_contract_id;
9770
9771
9772 -- get price list for the contract
9773 GET_CONTRACT_PRICE_LIST(
9774 p_api_name => l_api_name,
9775 p_business_process_id => l_business_process_id,
9776 p_request_date => l_request_date,
9777 p_contract_line_id => l_contract_service_id,
9778 x_price_list_id => l_price_list_id,
9779 x_currency_code => l_currency_code,
9780 x_msg_data => l_msg_data,
9781 x_msg_count => l_msg_count,
9782 x_return_status => l_return_status);
9783
9784 IF p_charges_detail_rec.price_list_id IS NOT NULL AND
9785 l_price_list_id IS NOT NULL AND
9786 p_charges_detail_rec.price_list_id <> l_price_list_id THEN
9787
9788 --Fixed To resolve Bug # 3557490
9789 --do nothing
9790 --since the price list is already derived there is no need to validate again
9791 --use the price list sent by the upstream application
9792 x_charges_detail_rec.price_list_id := p_charges_detail_rec.price_list_id;
9793
9794 -- get currency_code for the price_list_id
9795 GET_CURRENCY_CODE(
9796 p_api_name => l_api_name,
9797 p_price_list_id => x_charges_detail_rec.price_list_id,
9798 x_currency_code => l_currency_code,
9799 x_msg_data => l_msg_data,
9800 x_msg_count => l_msg_count,
9801 x_return_status => l_return_status);
9802
9803 IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
9804 FND_MESSAGE.SET_NAME('CS', 'CS_CHG_GET_CURRENCY_CODE_ERROR');
9805 FND_MESSAGE.Set_Token('PRICE_LIST_ID', p_charges_detail_rec.price_list_id);
9806 --FND_MESSAGE.Set_Token('TEXT', l_msg_data, TRUE);
9807 FND_MSG_PUB.Add;
9808 RAISE FND_API.G_EXC_ERROR;
9809 END IF ;
9810
9811 IF x_charges_detail_rec.currency_code <> l_currency_code AND l_currency_code is NOT NULL and x_charges_detail_rec.currency_code is not NUll
9812 and x_charges_detail_rec.currency_code <> FND_API.G_MISS_CHAR THEN --12.1.3, vpremach
9813 IF L_CURR_IN_CONVERSION_LIST <> 'Y' THEN
9814 FND_MESSAGE.SET_NAME('CS', 'CS_CHG_INVALID_CURRENCY_CODE');
9815 FND_MESSAGE.Set_Token('CURRENCY_CODE', p_charges_detail_rec.currency_code);
9816 FND_MSG_PUB.Add;
9817 RAISE FND_API.G_EXC_ERROR;
9818 END IF;
9819 ELSE
9820 x_charges_detail_rec.currency_code := l_currency_code;
9821 END IF;
9822
9823 ELSIF p_charges_detail_rec.price_list_id IS NULL AND
9824 l_price_list_id IS NOT NULL THEN
9825 x_charges_detail_rec.price_list_id := l_price_list_id;
9826 x_charges_detail_rec.currency_code := l_currency_code;
9827 ELSIF p_charges_detail_rec.price_list_id IS NOT NULL AND
9828 l_price_list_id IS NULL THEN
9829 x_charges_detail_rec.price_list_id := p_charges_detail_rec.price_list_id;
9830
9831 -- get currency_code for the price_list_id
9832 GET_CURRENCY_CODE(
9833 p_api_name => l_api_name,
9834 p_price_list_id => p_charges_detail_rec.price_list_id,
9835 x_currency_code => l_currency_code,
9836 x_msg_data => l_msg_data,
9837 x_msg_count => l_msg_count,
9838 x_return_status => l_return_status);
9839
9840 IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
9841 FND_MESSAGE.SET_NAME('CS', 'CS_CHG_GET_CURRENCY_CODE_ERROR');
9842 FND_MESSAGE.Set_Token('PRICE_LIST_ID', p_charges_detail_rec.price_list_id);
9843 --FND_MESSAGE.Set_Token('TEXT', l_msg_data, TRUE);
9844 FND_MSG_PUB.Add;
9845 RAISE FND_API.G_EXC_ERROR;
9846 END IF ;
9847
9848 IF x_charges_detail_rec.currency_code <> l_currency_code AND l_currency_code is NOT NULL and x_charges_detail_rec.currency_code is not NUll
9849 and x_charges_detail_rec.currency_code <> FND_API.G_MISS_CHAR THEN --12.1.3, vpremach
9850 IF L_CURR_IN_CONVERSION_LIST <> 'Y' THEN
9851 FND_MESSAGE.SET_NAME('CS', 'CS_CHG_INVALID_CURRENCY_CODE');
9852 FND_MESSAGE.Set_Token('CURRENCY_CODE', p_charges_detail_rec.currency_code);
9853 FND_MSG_PUB.Add;
9854 RAISE FND_API.G_EXC_ERROR;
9855 END IF;
9856 ELSE
9857 x_charges_detail_rec.currency_code := l_currency_code;
9858 END IF;
9859
9860 ELSIF p_charges_detail_rec.price_list_id IS NULL AND
9861 l_price_list_id IS NULL THEN
9862
9863 --use the default from the price list
9864 x_charges_detail_rec.price_list_id := to_number(fnd_profile.value('CS_CHARGE_DEFAULT_PRICE_LIST'));
9865
9866 IF FND_LOG.level_procedure >= FND_LOG.g_current_runtime_level
9867 THEN
9868 FND_LOG.String
9869 ( FND_LOG.level_procedure , L_LOG_MODULE || ''
9870 , 'The Value of profile CS_CHARGE_DEFAULT_PRICE_LIST :' || x_charges_detail_rec.price_list_id
9871 );
9872 END IF;
9873
9874 -- get currency_code for the price_list_id
9875 GET_CURRENCY_CODE(
9876 p_api_name => l_api_name,
9877 p_price_list_id => x_charges_detail_rec.price_list_id,
9878 x_currency_code => l_currency_code,
9879 x_msg_data => l_msg_data,
9880 x_msg_count => l_msg_count,
9881 x_return_status => l_return_status);
9882
9883 IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
9884 FND_MESSAGE.SET_NAME('CS', 'CS_CHG_GET_CURRENCY_CODE_ERROR');
9885 FND_MESSAGE.Set_Token('PRICE_LIST_ID', x_charges_detail_rec.price_list_id);
9886 --FND_MESSAGE.Set_Token('TEXT', l_msg_data, TRUE);
9887 FND_MSG_PUB.Add;
9888 RAISE FND_API.G_EXC_ERROR;
9889 END IF ;
9890 IF x_charges_detail_rec.currency_code <> l_currency_code AND l_currency_code is NOT NULL and x_charges_detail_rec.currency_code is not NUll
9891 and x_charges_detail_rec.currency_code <> FND_API.G_MISS_CHAR THEN --12.1.3, vpremach
9892 IF L_CURR_IN_CONVERSION_LIST <> 'Y' THEN
9893 FND_MESSAGE.SET_NAME('CS', 'CS_CHG_INVALID_CURRENCY_CODE');
9894 FND_MESSAGE.Set_Token('CURRENCY_CODE', p_charges_detail_rec.currency_code);
9895 FND_MSG_PUB.Add;
9896 RAISE FND_API.G_EXC_ERROR;
9897 END IF;
9898 ELSE
9899 x_charges_detail_rec.currency_code := l_currency_code;
9900 END IF;
9901 END IF;
9902
9903 ELSE
9904 -- consider this as no contract exists
9905 IF p_charges_detail_rec.price_list_id IS NULL THEN
9906 x_charges_detail_rec.price_list_id := to_number(fnd_profile.value('CS_CHARGE_DEFAULT_PRICE_LIST'));
9907
9908 -- get currency_code for the price_list_id
9909 GET_CURRENCY_CODE(
9910 p_api_name => l_api_name,
9911 p_price_list_id => x_charges_detail_rec.price_list_id,
9912 x_currency_code => l_currency_code,
9913 x_msg_data => l_msg_data,
9914 x_msg_count => l_msg_count,
9915 x_return_status => l_return_status);
9916
9917 IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
9918 --RAISE FND_API.G_EXC_ERROR;
9919 FND_MESSAGE.SET_NAME('CS', 'CS_CHG_GET_CURRENCY_CODE_ERROR');
9920 FND_MESSAGE.Set_Token('PRICE_LIST_ID', x_charges_detail_rec.price_list_id);
9921 --FND_MESSAGE.Set_Token('TEXT', l_msg_data, TRUE);
9922 FND_MSG_PUB.Add;
9923 RAISE FND_API.G_EXC_ERROR;
9924 END IF ;
9925 IF x_charges_detail_rec.currency_code <> l_currency_code AND l_currency_code is NOT NULL and x_charges_detail_rec.currency_code is not NUll
9926 and x_charges_detail_rec.currency_code <> FND_API.G_MISS_CHAR THEN --12.1.3, vpremach
9927 IF L_CURR_IN_CONVERSION_LIST <> 'Y' THEN
9928 FND_MESSAGE.SET_NAME('CS', 'CS_CHG_INVALID_CURRENCY_CODE');
9929 FND_MESSAGE.Set_Token('CURRENCY_CODE', p_charges_detail_rec.currency_code);
9930 FND_MSG_PUB.Add;
9931 RAISE FND_API.G_EXC_ERROR;
9932 END IF;
9933 ELSE
9934 x_charges_detail_rec.currency_code := l_currency_code;
9935 END IF;
9936 ELSE
9937
9938 x_charges_detail_rec.price_list_id := p_charges_detail_rec.price_list_id;
9939
9940 -- get currency_code for the price_list_id
9941 GET_CURRENCY_CODE(
9942 p_api_name => l_api_name,
9943 p_price_list_id => x_charges_detail_rec.price_list_id,
9944 x_currency_code => l_currency_code,
9945 x_msg_data => l_msg_data,
9946 x_msg_count => l_msg_count,
9947 x_return_status => l_return_status);
9948 IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
9949 --RAISE FND_API.G_EXC_ERROR;
9950 FND_MESSAGE.SET_NAME('CS', 'CS_CHG_GET_CURRENCY_CODE_ERROR');
9951 FND_MESSAGE.Set_Token('PRICE_LIST_ID', x_charges_detail_rec.price_list_id);
9952 --FND_MESSAGE.Set_Token('TEXT', l_msg_data, TRUE);
9953 FND_MSG_PUB.Add;
9954 RAISE FND_API.G_EXC_ERROR;
9955 END IF ;
9956 IF x_charges_detail_rec.currency_code <> l_currency_code AND l_currency_code is NOT NULL and x_charges_detail_rec.currency_code is not NUll
9957 and x_charges_detail_rec.currency_code <> FND_API.G_MISS_CHAR THEN --12.1.3, vpremach
9958 IF L_CURR_IN_CONVERSION_LIST <> 'Y' THEN
9959 FND_MESSAGE.SET_NAME('CS', 'CS_CHG_INVALID_CURRENCY_CODE');
9960 FND_MESSAGE.Set_Token('CURRENCY_CODE', p_charges_detail_rec.currency_code);
9961 FND_MSG_PUB.Add;
9962 RAISE FND_API.G_EXC_ERROR;
9963 END IF;
9964 ELSE
9965 x_charges_detail_rec.currency_code := l_currency_code;
9966 END IF;
9967 END IF;
9968 END IF;
9969
9970
9971 ELSE
9972 --no contract exists
9973 IF p_charges_detail_rec.price_list_id IS NULL THEN
9974 x_charges_detail_rec.price_list_id := to_number(fnd_profile.value('CS_CHARGE_DEFAULT_PRICE_LIST'));
9975
9976 -- get currency_code for the price_list_id
9977 GET_CURRENCY_CODE(
9978 p_api_name => l_api_name,
9979 p_price_list_id => x_charges_detail_rec.price_list_id,
9980 x_currency_code => l_currency_code,
9981 x_msg_data => l_msg_data,
9982 x_msg_count => l_msg_count,
9983 x_return_status => l_return_status);
9984
9985 IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
9986 FND_MESSAGE.SET_NAME('CS', 'CS_CHG_GET_CURRENCY_CODE_ERROR');
9987 FND_MESSAGE.Set_Token('PRICE_LIST_ID', x_charges_detail_rec.price_list_id);
9988 --FND_MESSAGE.Set_Token('TEXT', l_msg_data, TRUE);
9989 FND_MSG_PUB.Add;
9990 RAISE FND_API.G_EXC_ERROR;
9991 END IF ;
9992 IF x_charges_detail_rec.currency_code <> l_currency_code AND l_currency_code is NOT NULL and x_charges_detail_rec.currency_code is not NUll
9993 and x_charges_detail_rec.currency_code <> FND_API.G_MISS_CHAR THEN --12.1.3, vpremach
9994 IF L_CURR_IN_CONVERSION_LIST <> 'Y' THEN
9995 FND_MESSAGE.SET_NAME('CS', 'CS_CHG_INVALID_CURRENCY_CODE');
9996 FND_MESSAGE.Set_Token('CURRENCY_CODE', p_charges_detail_rec.currency_code);
9997 FND_MSG_PUB.Add;
9998 RAISE FND_API.G_EXC_ERROR;
9999 END IF;
10000 ELSE
10001 x_charges_detail_rec.currency_code := l_currency_code;
10002 END IF;
10003
10004 ELSE
10005 x_charges_detail_rec.price_list_id := p_charges_detail_rec.price_list_id;
10006
10007 -- get currency_code for the price_list_id
10008 GET_CURRENCY_CODE(
10009 p_api_name => l_api_name,
10010 p_price_list_id => x_charges_detail_rec.price_list_id,
10011 x_currency_code => l_currency_code,
10012 x_msg_data => l_msg_data,
10013 x_msg_count => l_msg_count,
10014 x_return_status => l_return_status);
10015 IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
10016 --RAISE FND_API.G_EXC_ERROR;
10017 FND_MESSAGE.SET_NAME('CS', 'CS_CHG_GET_CURRENCY_CODE_ERROR');
10018 FND_MESSAGE.Set_Token('PRICE_LIST_ID', x_charges_detail_rec.price_list_id);
10019 --FND_MESSAGE.Set_Token('TEXT', l_msg_data, TRUE);
10020 FND_MSG_PUB.Add;
10021 RAISE FND_API.G_EXC_ERROR;
10022 END IF ;
10023 IF x_charges_detail_rec.currency_code <> l_currency_code AND l_currency_code is NOT NULL and x_charges_detail_rec.currency_code is not NUll
10024 and x_charges_detail_rec.currency_code <> FND_API.G_MISS_CHAR THEN --12.1.3, vpremach
10025 IF L_CURR_IN_CONVERSION_LIST <> 'Y' THEN
10026 FND_MESSAGE.SET_NAME('CS', 'CS_CHG_INVALID_CURRENCY_CODE');
10027 FND_MESSAGE.Set_Token('CURRENCY_CODE', p_charges_detail_rec.currency_code);
10028 FND_MSG_PUB.Add;
10029 RAISE FND_API.G_EXC_ERROR;
10030 END IF;
10031 ELSE
10032 x_charges_detail_rec.currency_code := l_currency_code;
10033 END IF;
10034 END IF;
10035 END IF;
10036
10037 ELSIF p_validation_mode = 'U' THEN
10038
10039 --DBMS_OUTPUT.PUT_LINE('Contract Validation for update');
10040 --DBMS_OUTPUT.PUT_LINE('p_charges_detail_rec.contract_id = ' || p_charges_detail_rec.contract_id);
10041 --DBMS_OUTPUT.PUT_LINE('p_charges_detail_rec.coverage_id = ' || p_charges_detail_rec.coverage_id);
10042 --DBMS_OUTPUT.PUT_LINE('p_charges_detail_rec.coverage_txn_group_id = ' || p_charges_detail_rec.coverage_txn_group_id);
10043
10044 -- if rate_type is passed then pass it down to the application
10045 IF p_charges_detail_rec.rate_type_code IS NOT NULL AND
10046 p_charges_detail_rec.rate_type_code <> FND_API.G_MISS_CHAR THEN
10047 -- value is passed
10048 x_charges_detail_rec.rate_type_code := p_charges_detail_rec.rate_type_code;
10049 ELSE
10050 IF p_charges_detail_rec.rate_type_code IS NULL THEN
10051 --nullify the rate_type_code on the charge line
10052 x_charges_detail_rec.rate_type_code := null;
10053 ELSE
10054 --take the one from the database;
10055 x_charges_detail_rec.rate_type_code := l_db_det_rec.rate_type_code;
10056 END IF;
10057
10058 END IF;
10059
10060
10061
10062 --Changed for R12 - always use the contract_line_id
10063 IF p_charges_detail_rec.contract_line_id IS NOT NULL AND
10064 p_charges_detail_rec.contract_line_id <> FND_API.G_MISS_NUM THEN
10065 --validate the contract_line_id
10066 l_valid_check := IS_CONTRACT_LINE_VALID(
10067 p_contract_line_id => p_charges_detail_rec.contract_line_id,
10068 x_contract_id => x_charges_detail_rec.contract_id,
10069 x_msg_data => l_msg_data,
10070 x_msg_count => l_msg_count,
10071 x_return_status => l_return_status);
10072
10073 IF l_return_status = G_RET_STS_UNEXP_ERROR THEN
10074 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
10075 ELSIF l_return_status = G_RET_STS_ERROR THEN
10076 RAISE FND_API.G_EXC_ERROR;
10077 END IF;
10078
10079 IF l_valid_check <> 'Y' THEN
10080
10081 FND_MESSAGE.SET_NAME('CS', 'CS_CHG_INVALID_CONTRACT');
10082 FND_MESSAGE.Set_Token('CONTRACT_ID', p_charges_detail_rec.contract_id);
10083 FND_MSG_PUB.Add;
10084 RAISE FND_API.G_EXC_ERROR;
10085 ELSE
10086 --assign this value to the out parameter
10087 x_charges_detail_rec.contract_line_id := p_charges_detail_rec.contract_line_id;
10088 END IF;
10089 ELSIF p_charges_detail_rec.coverage_id IS NOT NULL AND
10090 p_charges_detail_rec.coverage_id <> FND_API.G_MISS_NUM THEN
10091
10092 --need to derive the coverage_line_id using the new coverage_id
10093
10094 x_charges_detail_rec.contract_line_id := GET_CONTRACT_LINE_ID(p_charges_detail_rec.coverage_id,
10095 l_msg_data,
10096 x_msg_count,
10097 x_return_status);
10098
10099 IF l_return_status = G_RET_STS_UNEXP_ERROR THEN
10100 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
10101 ELSIF l_return_status = G_RET_STS_ERROR THEN
10102 RAISE FND_API.G_EXC_ERROR;
10103 END IF;
10104
10105 IF x_charges_detail_rec.contract_line_id = 0 THEN
10106 Add_Invalid_Argument_Msg(l_api_name,
10107 l_contract_line_id,
10108 'Contract Line ID');
10109
10110 RAISE FND_API.G_EXC_ERROR;
10111 END IF;
10112 ELSE
10113 IF p_charges_detail_rec.contract_line_id IS NULL THEN
10114 --nullify the contract line id on the charge line
10115 x_charges_detail_rec.contract_line_id := null;
10116 ELSE
10117 --take the one from the database;
10118 x_charges_detail_rec.contract_line_id := l_db_det_rec.contract_line_id;
10119 END IF;
10120
10121 END IF;
10122
10123
10124 -- Initialize contract values.
10125 --x_charges_detail_rec.contract_id := null;
10126 x_charges_detail_rec.coverage_id := null;
10127 x_charges_detail_rec.coverage_txn_group_id := null;
10128
10129
10130
10131 IF(p_charges_detail_rec.contract_id <> FND_API.G_MISS_NUM) AND
10132 (p_charges_detail_rec.contract_id IS NOT NULL) THEN
10133
10134 -- Fixed Bug # 4126979
10135
10136 --Validate Contract
10137 l_valid_check := IS_CONTRACT_VALID(
10138 p_contract_id => p_charges_detail_rec.contract_id,
10139 x_msg_data => l_msg_data,
10140 x_msg_count => l_msg_count,
10141 x_return_status => l_return_status);
10142
10143 IF l_return_status = G_RET_STS_UNEXP_ERROR THEN
10144 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
10145 ELSIF l_return_status = G_RET_STS_ERROR THEN
10146 RAISE FND_API.G_EXC_ERROR;
10147 END IF;
10148
10149 IF l_valid_check <> 'Y' THEN
10150
10151 FND_MESSAGE.SET_NAME('CS', 'CS_CHG_INVALID_CONTRACT');
10152 FND_MESSAGE.Set_Token('CONTRACT_ID', p_charges_detail_rec.contract_id);
10153 FND_MSG_PUB.Add;
10154 RAISE FND_API.G_EXC_ERROR;
10155
10156 ELSE
10157
10158 --Contract is valid, assign to out record
10159 x_charges_detail_rec.contract_id := p_charges_detail_rec.contract_id;
10160 -- get price list for the contract
10161 GET_CONTRACT_PRICE_LIST(
10162 p_api_name => l_api_name,
10163 p_business_process_id => x_charges_detail_rec.business_process_id,
10164 p_request_date => l_request_date,
10165 p_contract_line_id => x_charges_detail_rec.contract_line_id,
10166 x_price_list_id => l_price_list_id,
10167 x_currency_code => l_currency_code,
10168 x_msg_data => l_msg_data,
10169 x_msg_count => l_msg_count,
10170 x_return_status => l_return_status);
10171
10172 IF p_charges_detail_rec.price_list_id <> FND_API.G_MISS_NUM AND
10173 p_charges_detail_rec.price_list_id IS NOT NULL AND
10174 l_price_list_id IS NOT NULL AND
10175 p_charges_detail_rec.price_list_id <> l_price_list_id THEN
10176
10177 --Fixed To resolve Bug # 3557490
10178 --do nothing
10179 --since the price list is already derived there is no need to validate again
10180 --use the price list sent by the upstream application
10181 x_charges_detail_rec.price_list_id := p_charges_detail_rec.price_list_id;
10182
10183 -- get currency_code for the price_list_id
10184 GET_CURRENCY_CODE(
10185 p_api_name => l_api_name,
10186 p_price_list_id => x_charges_detail_rec.price_list_id,
10187 x_currency_code => l_currency_code,
10188 x_msg_data => l_msg_data,
10189 x_msg_count => l_msg_count,
10190 x_return_status => l_return_status);
10191
10192 IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
10193 FND_MESSAGE.SET_NAME('CS', 'CS_CHG_GET_CURRENCY_CODE_ERROR');
10194 FND_MESSAGE.Set_Token('PRICE_LIST_ID', p_charges_detail_rec.price_list_id);
10195 --FND_MESSAGE.Set_Token('TEXT', l_msg_data, TRUE);
10196 FND_MSG_PUB.Add;
10197 RAISE FND_API.G_EXC_ERROR;
10198 END IF ;
10199
10200 IF x_charges_detail_rec.currency_code <> l_currency_code AND l_currency_code is NOT NULL and x_charges_detail_rec.currency_code is not NUll
10201 and x_charges_detail_rec.currency_code <> FND_API.G_MISS_CHAR THEN --12.1.3, vpremach
10202 IF L_CURR_IN_CONVERSION_LIST <> 'Y' THEN
10203 FND_MESSAGE.SET_NAME('CS', 'CS_CHG_INVALID_CURRENCY_CODE');
10204 FND_MESSAGE.Set_Token('CURRENCY_CODE', p_charges_detail_rec.currency_code);
10205 FND_MSG_PUB.Add;
10206 RAISE FND_API.G_EXC_ERROR;
10207 END IF;
10208 ELSE
10209 x_charges_detail_rec.currency_code := l_currency_code;
10210 END IF;
10211
10212 --Condition added to fix Bug # 3358531
10213 IF x_charges_detail_rec.price_list_id <> l_db_det_rec.price_list_header_id OR
10214 x_charges_detail_rec.currency_code <> l_db_det_rec.currency_code THEN
10215 --price list or currecy code is changed need to re-calculate the list price
10216 l_calc_sp := 'Y';
10217 END IF;
10218
10219 ELSIF p_charges_detail_rec.price_list_id IS NULL OR
10220 p_charges_detail_rec.price_list_id = FND_API.G_MISS_NUM AND
10221 l_price_list_id IS NOT NULL THEN
10222
10223 -- update the pricelist in the database with the new one
10224
10225 x_charges_detail_rec.price_list_id := l_price_list_id;
10226 x_charges_detail_rec.currency_code := l_currency_code;
10227
10228 --Condition added to fix Bug # 3358531
10229 IF x_charges_detail_rec.price_list_id <> l_db_det_rec.price_list_header_id OR
10230 x_charges_detail_rec.currency_code <> l_db_det_rec.currency_code THEN
10231 --price list or currecy code is changed need to re-calculate the list price
10232 l_calc_sp := 'Y';
10233 END IF;
10234
10235 ELSIF p_charges_detail_rec.price_list_id <> FND_API.G_MISS_NUM AND
10236 p_charges_detail_rec.price_list_id IS NOT NULL AND
10237 l_price_list_id IS NULL THEN
10238
10239 x_charges_detail_rec.price_list_id := p_charges_detail_rec.price_list_id;
10240 -- get currency_code for the price_list_id
10241 GET_CURRENCY_CODE(
10242 p_api_name => l_api_name,
10243 p_price_list_id => p_charges_detail_rec.price_list_id,
10244 x_currency_code => l_currency_code,
10245 x_msg_data => l_msg_data,
10246 x_msg_count => l_msg_count,
10247 x_return_status => l_return_status);
10248
10249 IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
10250 FND_MESSAGE.SET_NAME('CS', 'CS_CHG_GET_CURRENCY_CODE_ERROR');
10251 FND_MESSAGE.Set_Token('PRICE_LIST_ID', p_charges_detail_rec.price_list_id);
10252 --FND_MESSAGE.Set_Token('TEXT', l_msg_data, TRUE);
10253 FND_MSG_PUB.Add;
10254 RAISE FND_API.G_EXC_ERROR;
10255 END IF ;
10256
10257 IF x_charges_detail_rec.currency_code <> l_currency_code AND l_currency_code is NOT NULL and x_charges_detail_rec.currency_code is not NUll
10258 and x_charges_detail_rec.currency_code <> FND_API.G_MISS_CHAR THEN --12.1.3, vpremach
10259 IF L_CURR_IN_CONVERSION_LIST <> 'Y' THEN
10260 FND_MESSAGE.SET_NAME('CS', 'CS_CHG_INVALID_CURRENCY_CODE');
10261 FND_MESSAGE.Set_Token('CURRENCY_CODE', p_charges_detail_rec.currency_code);
10262 FND_MSG_PUB.Add;
10263 RAISE FND_API.G_EXC_ERROR;
10264 END IF;
10265 ELSE
10266 x_charges_detail_rec.currency_code := l_currency_code;
10267 END IF;
10268
10269 --Condition added to fix Bug # 3358531
10270 IF x_charges_detail_rec.price_list_id <> l_db_det_rec.price_list_header_id OR
10271 x_charges_detail_rec.currency_code <> l_db_det_rec.currency_code THEN
10272 --price list or currecy code is changed need to re-calculate the list price
10273 l_calc_sp := 'Y';
10274 END IF;
10275
10276 ELSIF p_charges_detail_rec.price_list_id IS NULL OR
10277 p_charges_detail_rec.price_list_id = FND_API.G_MISS_NUM AND
10278 l_price_list_id IS NULL THEN
10279
10280 --use the default from the price list
10281 x_charges_detail_rec.price_list_id := to_number(fnd_profile.value('CS_CHARGE_DEFAULT_PRICE_LIST'));
10282
10283 -- get currency_code for the price_list_id
10284 GET_CURRENCY_CODE(
10285 p_api_name => l_api_name,
10286 p_price_list_id => x_charges_detail_rec.price_list_id,
10287 x_currency_code => l_currency_code,
10288 x_msg_data => l_msg_data,
10289 x_msg_count => l_msg_count,
10290 x_return_status => l_return_status);
10291
10292 IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
10293 FND_MESSAGE.SET_NAME('CS', 'CS_CHG_GET_CURRENCY_CODE_ERROR');
10294 FND_MESSAGE.Set_Token('PRICE_LIST_ID', x_charges_detail_rec.price_list_id);
10295 --FND_MESSAGE.Set_Token('TEXT', l_msg_data, TRUE);
10296 FND_MSG_PUB.Add;
10297 RAISE FND_API.G_EXC_ERROR;
10298 END IF ;
10299 IF x_charges_detail_rec.currency_code <> l_currency_code AND l_currency_code is NOT NULL and x_charges_detail_rec.currency_code is not NUll
10300 and x_charges_detail_rec.currency_code <> FND_API.G_MISS_CHAR THEN --12.1.3, vpremach
10301 IF L_CURR_IN_CONVERSION_LIST <> 'Y' THEN
10302 FND_MESSAGE.SET_NAME('CS', 'CS_CHG_INVALID_CURRENCY_CODE');
10303 FND_MESSAGE.Set_Token('CURRENCY_CODE', p_charges_detail_rec.currency_code);
10304 FND_MSG_PUB.Add;
10305 RAISE FND_API.G_EXC_ERROR;
10306 END IF;
10307 ELSE
10308 x_charges_detail_rec.currency_code := l_currency_code;
10309 END IF;
10310
10311 --Condition added to fix Bug # 3358531
10312 IF x_charges_detail_rec.price_list_id <> l_db_det_rec.price_list_header_id OR
10313 x_charges_detail_rec.currency_code <> l_db_det_rec.currency_code THEN
10314 --price list or currecy code is changed need to re-calculate the list price
10315 l_calc_sp := 'Y';
10316 END IF;
10317 END IF;
10318 END IF;
10319
10320 ELSIF p_charges_detail_rec.contract_id IS NULL THEN
10321
10322 --nullify the contract on the charge line
10323 --x_charges_detail_rec.contract_id := null;
10324 --x_charges_detail_rec.coverage_id := null;
10325 --x_charges_detail_rec.coverage_txn_group_id := null;
10326
10327 -- Check to see if there is a price list passed
10328 IF p_charges_detail_rec.price_list_id <> FND_API.G_MISS_NUM AND
10329 p_charges_detail_rec.price_list_id IS NOT NULL THEN
10330
10331 --assign these to the out parameters as these have already
10332 --been validated before
10333 x_charges_detail_rec.price_list_id := x_charges_detail_rec.price_list_id;
10334 x_charges_detail_rec.currency_code := x_charges_detail_rec.currency_code;
10335
10336 --Condition added to fix Bug # 3358531
10337 IF x_charges_detail_rec.price_list_id <> l_db_det_rec.price_list_header_id OR
10338 x_charges_detail_rec.currency_code <> l_db_det_rec.currency_code THEN
10339 --price list or currecy code is changed need to re-calculate the list price
10340 l_calc_sp := 'Y';
10341 END IF;
10342
10343 ELSIF p_charges_detail_rec.price_list_id = FND_API.G_MISS_NUM THEN
10344
10345 IF l_db_det_rec.price_list_header_id IS NOT NULL THEN
10346
10347 x_charges_detail_rec.price_list_id := l_db_det_rec.price_list_header_id;
10348
10349 GET_CURRENCY_CODE(
10350 p_api_name => l_api_name,
10351 p_price_list_id => x_charges_detail_rec.price_list_id,
10352 x_currency_code => l_currency_code,
10353 x_msg_data => l_msg_data,
10354 x_msg_count => l_msg_count,
10355 x_return_status => l_return_status);
10356
10357 IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
10358 FND_MESSAGE.SET_NAME('CS', 'CS_CHG_GET_CURRENCY_CODE_ERROR');
10359 FND_MESSAGE.Set_Token('PRICE_LIST_ID', p_charges_detail_rec.price_list_id);
10360 --FND_MESSAGE.Set_Token('TEXT', l_msg_data, TRUE);
10361 FND_MSG_PUB.Add;
10362 RAISE FND_API.G_EXC_ERROR;
10363 END IF ;
10364
10365 IF x_charges_detail_rec.currency_code <> l_currency_code AND l_currency_code is NOT NULL and x_charges_detail_rec.currency_code is not NUll
10366 and x_charges_detail_rec.currency_code <> FND_API.G_MISS_CHAR THEN --12.1.3, vpremach
10367 IF L_CURR_IN_CONVERSION_LIST <> 'Y' THEN
10368 FND_MESSAGE.SET_NAME('CS', 'CS_CHG_INVALID_CURRENCY_CODE');
10369 FND_MESSAGE.Set_Token('CURRENCY_CODE', p_charges_detail_rec.currency_code);
10370 FND_MSG_PUB.Add;
10371 RAISE FND_API.G_EXC_ERROR;
10372 END IF;
10373 ELSE
10374 x_charges_detail_rec.currency_code := l_currency_code;
10375 END IF;
10376
10377 --Condition added to fix Bug # 3358531
10378 IF x_charges_detail_rec.currency_code <> l_db_det_rec.currency_code THEN
10379 --currecy code is changed need to re-calculate the list price
10380 l_calc_sp := 'Y';
10381 END IF;
10382
10383 ELSE
10384
10385 --get the default on the profile
10386 --use the default from the price list
10387 x_charges_detail_rec.price_list_id := to_number(fnd_profile.value('CS_CHARGE_DEFAULT_PRICE_LIST'));
10388
10389 -- get currency_code for the price_list_id
10390 GET_CURRENCY_CODE(
10391 p_api_name => l_api_name,
10392 p_price_list_id => x_charges_detail_rec.price_list_id,
10393 x_currency_code => l_currency_code,
10394 x_msg_data => l_msg_data,
10395 x_msg_count => l_msg_count,
10396 x_return_status => l_return_status);
10397
10398 IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
10399 FND_MESSAGE.SET_NAME('CS', 'CS_CHG_GET_CURRENCY_CODE_ERROR');
10400 FND_MESSAGE.Set_Token('PRICE_LIST_ID', x_charges_detail_rec.price_list_id);
10401 --FND_MESSAGE.Set_Token('TEXT', l_msg_data, TRUE);
10402 FND_MSG_PUB.Add;
10403 RAISE FND_API.G_EXC_ERROR;
10404 END IF ;
10405 IF x_charges_detail_rec.currency_code <> l_currency_code AND l_currency_code is NOT NULL and x_charges_detail_rec.currency_code is not NUll
10406 and x_charges_detail_rec.currency_code <> FND_API.G_MISS_CHAR THEN --12.1.3, vpremach
10407 IF L_CURR_IN_CONVERSION_LIST <> 'Y' THEN
10408 FND_MESSAGE.SET_NAME('CS', 'CS_CHG_INVALID_CURRENCY_CODE');
10409 FND_MESSAGE.Set_Token('CURRENCY_CODE', p_charges_detail_rec.currency_code);
10410 FND_MSG_PUB.Add;
10411 RAISE FND_API.G_EXC_ERROR;
10412 END IF;
10413 ELSE
10414 x_charges_detail_rec.currency_code := l_currency_code;
10415 END IF;
10416
10417 --Condition added to fix Bug # 3358531
10418 IF x_charges_detail_rec.price_list_id <> l_db_det_rec.price_list_header_id OR
10419 x_charges_detail_rec.currency_code <> l_db_det_rec.currency_code THEN
10420 --price list or currecy code is changed need to re-calculate the list price
10421 l_calc_sp := 'Y';
10422 END IF;
10423
10424 END IF;
10425 END IF;
10426
10427 ELSE
10428 -- no contract information coming in
10429 -- get what is in the database
10430 -- --DBMS_OUTPUT.PUT_LINE('contract coming from database');
10431 IF (x_charges_detail_rec.contract_id IS NULL) THEN
10432 x_charges_detail_rec.contract_id := l_db_det_rec.contract_id;
10433 END IF;
10434
10435 --DBMS_OUTPUT.PUT_LINE('x_charges_detail_rec.contract_id '||x_charges_detail_rec.contract_id);
10436 --DBMS_OUTPUT.PUT_LINE('x_charges_detail_rec.coverage_id '||x_charges_detail_rec.coverage_id);
10437 --DBMS_OUTPUT.PUT_LINE('x_charges_detail_rec.coverage_txn_group_id '||x_charges_detail_rec.coverage_txn_group_id);
10438
10439
10440 IF x_charges_detail_rec.contract_id IS NOT NULL THEN
10441
10442 GET_CONTRACT_PRICE_LIST(
10443 p_api_name => l_api_name,
10444 p_business_process_id => x_charges_detail_rec.business_process_id,
10445 p_request_date => l_request_date,
10446 p_contract_line_id => x_charges_detail_rec.contract_line_id,
10447 x_price_list_id => l_price_list_id,
10448 x_currency_code => l_currency_code,
10449 x_msg_data => l_msg_data,
10450 x_msg_count => l_msg_count,
10451 x_return_status => l_return_status);
10452
10453 IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
10454 FND_MESSAGE.SET_NAME('CS', 'CS_CHG_GET_CURRENCY_CODE_ERROR');
10455 FND_MESSAGE.Set_Token('PRICE_LIST_ID', x_charges_detail_rec.price_list_id);
10456 --FND_MESSAGE.Set_Token('TEXT', l_msg_data, TRUE);
10457 FND_MSG_PUB.Add;
10458 RAISE FND_API.G_EXC_ERROR;
10459 END IF ;
10460 --DBMS_OUTPUT.PUT_LINE ('l_price_list_id '||l_price_list_id);
10461 --DBMS_OUTPUT.PUT_LINE (' l_currency_code '||l_currency_code);
10462
10463 IF p_charges_detail_rec.price_list_id <> FND_API.G_MISS_NUM AND
10464 p_charges_detail_rec.price_list_id IS NOT NULL AND
10465 l_price_list_id IS NOT NULL AND
10466
10467 p_charges_detail_rec.price_list_id <> l_price_list_id THEN
10468
10469 --Fixed To resolve Bug # 3557490
10470 --do nothing
10471 --since the price list is already derived there is no need to validate again
10472 --use the price list sent by the upstream application
10473 x_charges_detail_rec.price_list_id := p_charges_detail_rec.price_list_id;
10474
10475 -- get currency_code for the price_list_id
10476 GET_CURRENCY_CODE(
10477 p_api_name => l_api_name,
10478 p_price_list_id => x_charges_detail_rec.price_list_id,
10479 x_currency_code => l_currency_code,
10480 x_msg_data => l_msg_data,
10481 x_msg_count => l_msg_count,
10482 x_return_status => l_return_status);
10483
10484 IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
10485 FND_MESSAGE.SET_NAME('CS', 'CS_CHG_GET_CURRENCY_CODE_ERROR');
10486 FND_MESSAGE.Set_Token('PRICE_LIST_ID', p_charges_detail_rec.price_list_id);
10487 --FND_MESSAGE.Set_Token('TEXT', l_msg_data, TRUE);
10488 FND_MSG_PUB.Add;
10489 RAISE FND_API.G_EXC_ERROR;
10490 END IF ;
10491
10492 IF x_charges_detail_rec.currency_code <> l_currency_code AND l_currency_code is NOT NULL and x_charges_detail_rec.currency_code is not NUll
10493 and x_charges_detail_rec.currency_code <> FND_API.G_MISS_CHAR THEN --12.1.3, vpremach
10494 IF L_CURR_IN_CONVERSION_LIST <> 'Y' THEN
10495 FND_MESSAGE.SET_NAME('CS', 'CS_CHG_INVALID_CURRENCY_CODE');
10496 FND_MESSAGE.Set_Token('CURRENCY_CODE', p_charges_detail_rec.currency_code);
10497 FND_MSG_PUB.Add;
10498 RAISE FND_API.G_EXC_ERROR;
10499 END IF;
10500 ELSE
10501 x_charges_detail_rec.currency_code := l_currency_code;
10502 END IF;
10503
10504 --Condition added to fix Bug # 3358531
10505 IF x_charges_detail_rec.price_list_id <> l_db_det_rec.price_list_header_id OR
10506 x_charges_detail_rec.currency_code <> l_db_det_rec.currency_code THEN
10507 --price list or currecy code is changed need to re-calculate the list price
10508 l_calc_sp := 'Y';
10509 END IF;
10510
10511 ELSIF p_charges_detail_rec.price_list_id = FND_API.G_MISS_NUM THEN
10512
10513 --DBMS_OUTPUT.PUT_LINE(' price list not passed using from db');
10514
10515 x_charges_detail_rec.price_list_id := l_db_det_rec.price_list_header_id;
10516 x_charges_detail_rec.currency_code := l_db_det_rec.currency_code;
10517
10518
10519 --DBMS_OUTPUT.PUT_LINE('x_charges_detail_rec.price_list_id'||x_charges_detail_rec.price_list_id);
10520
10521 ELSIF p_charges_detail_rec.price_list_id IS NULL AND
10522 l_price_list_id IS NOT NULL THEN
10523
10524 x_charges_detail_rec.price_list_id := l_price_list_id;
10525 x_charges_detail_rec.currency_code := l_currency_code;
10526
10527 --Condition added to fix Bug # 3358531
10528 IF x_charges_detail_rec.price_list_id <> l_db_det_rec.price_list_header_id OR
10529 x_charges_detail_rec.currency_code <> l_db_det_rec.currency_code THEN
10530 --price list or currecy code is changed need to re-calculate the list price
10531 l_calc_sp := 'Y';
10532 END IF;
10533
10534 ELSIF p_charges_detail_rec.price_list_id <> FND_API.G_MISS_NUM AND
10535 p_charges_detail_rec.price_list_id IS NOT NULL AND
10536 l_price_list_id IS NULL THEN
10537
10538 x_charges_detail_rec.price_list_id := p_charges_detail_rec.price_list_id;
10539
10540 -- get currency_code for the price_list_id
10541 GET_CURRENCY_CODE(
10542 p_api_name => l_api_name,
10543 p_price_list_id => p_charges_detail_rec.price_list_id,
10544 x_currency_code => l_currency_code,
10545 x_msg_data => l_msg_data,
10546 x_msg_count => l_msg_count,
10547 x_return_status => l_return_status);
10548
10549 IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
10550 FND_MESSAGE.SET_NAME('CS', 'CS_CHG_GET_CURRENCY_CODE_ERROR');
10551 FND_MESSAGE.Set_Token('PRICE_LIST_ID', p_charges_detail_rec.price_list_id);
10552 --FND_MESSAGE.Set_Token('TEXT', l_msg_data, TRUE);
10553 FND_MSG_PUB.Add;
10554 RAISE FND_API.G_EXC_ERROR;
10555 END IF ;
10556
10557 IF x_charges_detail_rec.currency_code <> l_currency_code AND l_currency_code is NOT NULL and x_charges_detail_rec.currency_code is not NUll
10558 and x_charges_detail_rec.currency_code <> FND_API.G_MISS_CHAR THEN --12.1.3, vpremach
10559 IF L_CURR_IN_CONVERSION_LIST <> 'Y' THEN
10560 FND_MESSAGE.SET_NAME('CS', 'CS_CHG_INVALID_CURRENCY_CODE');
10561 FND_MESSAGE.Set_Token('CURRENCY_CODE', p_charges_detail_rec.currency_code);
10562 FND_MSG_PUB.Add;
10563 RAISE FND_API.G_EXC_ERROR;
10564 END IF;
10565 ELSE
10566 x_charges_detail_rec.currency_code := l_currency_code;
10567 END IF;
10568
10569 --Condition added to fix Bug # 3346568
10570 IF x_charges_detail_rec.price_list_id <> l_db_det_rec.price_list_header_id OR
10571 x_charges_detail_rec.currency_code <> l_db_det_rec.currency_code THEN
10572 --price list or currecy code is changed need to re-calculate the list price
10573 l_calc_sp := 'Y';
10574 END IF;
10575
10576 ELSIF p_charges_detail_rec.price_list_id IS NULL AND
10577 l_price_list_id IS NULL THEN
10578
10579 --use the default from the price list
10580 x_charges_detail_rec.price_list_id := to_number(fnd_profile.value('CS_CHARGE_DEFAULT_PRICE_LIST'));
10581
10582 -- get currency_code for the price_list_id
10583 GET_CURRENCY_CODE(
10584 p_api_name => l_api_name,
10585 p_price_list_id => x_charges_detail_rec.price_list_id,
10586 x_currency_code => l_currency_code,
10587 x_msg_data => l_msg_data,
10588 x_msg_count => l_msg_count,
10589 x_return_status => l_return_status);
10590
10591 IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
10592 FND_MESSAGE.SET_NAME('CS', 'CS_CHG_GET_CURRENCY_CODE_ERROR');
10593 FND_MESSAGE.Set_Token('PRICE_LIST_ID', x_charges_detail_rec.price_list_id);
10594 --FND_MESSAGE.Set_Token('TEXT', l_msg_data, TRUE);
10595 FND_MSG_PUB.Add;
10596 RAISE FND_API.G_EXC_ERROR;
10597 END IF ;
10598 IF x_charges_detail_rec.currency_code <> l_currency_code AND l_currency_code is NOT NULL and x_charges_detail_rec.currency_code is not NUll
10599 and x_charges_detail_rec.currency_code <> FND_API.G_MISS_CHAR THEN --12.1.3, vpremach
10600 IF L_CURR_IN_CONVERSION_LIST <> 'Y' THEN
10601
10602 FND_MESSAGE.SET_NAME('CS', 'CS_CHG_INVALID_CURRENCY_CODE');
10603 FND_MESSAGE.Set_Token('CURRENCY_CODE', p_charges_detail_rec.currency_code);
10604 FND_MSG_PUB.Add;
10605 RAISE FND_API.G_EXC_ERROR;
10606 END IF;
10607 ELSE
10608 x_charges_detail_rec.currency_code := l_currency_code;
10609 END IF;
10610
10611 --Condition added to fix Bug # 3358531
10612 IF x_charges_detail_rec.price_list_id <> l_db_det_rec.price_list_header_id OR
10613 x_charges_detail_rec.currency_code <> l_db_det_rec.currency_code THEN
10614 --price list or currecy code is changed need to re-calculate the list price
10615 l_calc_sp := 'Y';
10616 END IF;
10617 END IF;
10618
10619 ELSE
10620 --all three are null
10621 --update what is come on the line
10622
10623 --DBMS_OUTPUT.PUT_LINE(' No Contract Information');
10624
10625 IF p_charges_detail_rec.price_list_id <> FND_API.G_MISS_NUM AND
10626 p_charges_detail_rec.price_list_id IS NOT NULL THEN
10627
10628 x_charges_detail_rec.price_list_id := p_charges_detail_rec.price_list_id;
10629
10630 -- get currency_code for the price_list_id
10631 GET_CURRENCY_CODE(
10632 p_api_name => l_api_name,
10633 p_price_list_id => p_charges_detail_rec.price_list_id,
10634 x_currency_code => l_currency_code,
10635 x_msg_data => l_msg_data,
10636 x_msg_count => l_msg_count,
10637 x_return_status => l_return_status);
10638
10639 IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
10640 FND_MESSAGE.Set_Token('PRICE_LIST_ID', p_charges_detail_rec.price_list_id);
10641 --FND_MESSAGE.Set_Token('TEXT', l_msg_data, TRUE);
10642 FND_MSG_PUB.Add;
10643 RAISE FND_API.G_EXC_ERROR;
10644 END IF ;
10645
10646 IF x_charges_detail_rec.currency_code <> l_currency_code AND l_currency_code is NOT NULL and x_charges_detail_rec.currency_code is not NUll
10647 and x_charges_detail_rec.currency_code <> FND_API.G_MISS_CHAR THEN --12.1.3, vpremach
10648 IF L_CURR_IN_CONVERSION_LIST <> 'Y' THEN
10649 FND_MESSAGE.SET_NAME('CS', 'CS_CHG_INVALID_CURRENCY_CODE');
10650 FND_MESSAGE.Set_Token('CURRENCY_CODE', p_charges_detail_rec.currency_code);
10651 FND_MSG_PUB.Add;
10652 RAISE FND_API.G_EXC_ERROR;
10653 END IF;
10654 ELSE
10655 x_charges_detail_rec.currency_code := l_currency_code;
10656 END IF;
10657
10658 --Condition added to fix Bug # 3358531
10659 IF x_charges_detail_rec.price_list_id <> l_db_det_rec.price_list_header_id OR
10660 x_charges_detail_rec.currency_code <> l_db_det_rec.currency_code THEN
10661 --price list or currecy code is changed need to re-calculate the list price
10662 l_calc_sp := 'Y';
10663 END IF;
10664
10665 ELSE
10666
10667
10668 IF l_db_det_rec.price_list_header_id IS NOT NULL THEN
10669 x_charges_detail_rec.price_list_id := l_db_det_rec.price_list_header_id;
10670 -- get currency_code for the price_list_id
10671 GET_CURRENCY_CODE(
10672 p_api_name => l_api_name,
10673 p_price_list_id => x_charges_detail_rec.price_list_id,
10674 x_currency_code => l_currency_code,
10675 x_msg_data => l_msg_data,
10676 x_msg_count => l_msg_count,
10677 x_return_status => l_return_status);
10678
10679 IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
10680 FND_MESSAGE.SET_NAME('CS', 'CS_CHG_GET_CURRENCY_CODE_ERROR');
10681 FND_MESSAGE.Set_Token('PRICE_LIST_ID', x_charges_detail_rec.price_list_id);
10682 --FND_MESSAGE.Set_Token('TEXT', l_msg_data, TRUE);
10683 FND_MSG_PUB.Add;
10684 RAISE FND_API.G_EXC_ERROR;
10685 END IF ;
10686 IF x_charges_detail_rec.currency_code <> l_currency_code AND l_currency_code is NOT NULL and x_charges_detail_rec.currency_code is not NUll
10687 and x_charges_detail_rec.currency_code <> FND_API.G_MISS_CHAR THEN --12.1.3, vpremach
10688 IF L_CURR_IN_CONVERSION_LIST <> 'Y' THEN
10689 FND_MESSAGE.SET_NAME('CS', 'CS_CHG_INVALID_CURRENCY_CODE');
10690 FND_MESSAGE.Set_Token('CURRENCY_CODE', p_charges_detail_rec.currency_code);
10691 FND_MSG_PUB.Add;
10692 RAISE FND_API.G_EXC_ERROR;
10693 END IF;
10694 ELSE
10695 x_charges_detail_rec.currency_code := l_currency_code;
10696 END IF;
10697
10698 --Condition added to fix Bug # 3358531
10699 IF x_charges_detail_rec.currency_code <> l_db_det_rec.currency_code THEN
10700 --currecy code is changed need to re-calculate the list price
10701 l_calc_sp := 'Y';
10702 END IF;
10703
10704 ELSE
10705 --use the default from the price list
10706 x_charges_detail_rec.price_list_id := to_number(fnd_profile.value('CS_CHARGE_DEFAULT_PRICE_LIST'));
10707
10708 -- get currency_code for the price_list_id
10709 GET_CURRENCY_CODE(
10710 p_api_name => l_api_name,
10711 p_price_list_id => x_charges_detail_rec.price_list_id,
10712 x_currency_code => l_currency_code,
10713 x_msg_data => l_msg_data,
10714 x_msg_count => l_msg_count,
10715 x_return_status => l_return_status);
10716
10717 IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
10718 FND_MESSAGE.SET_NAME('CS', 'CS_CHG_GET_CURRENCY_CODE_ERROR');
10719 FND_MESSAGE.Set_Token('PRICE_LIST_ID', x_charges_detail_rec.price_list_id);
10720 --FND_MESSAGE.Set_Token('TEXT', l_msg_data, TRUE);
10721 FND_MSG_PUB.Add;
10722 RAISE FND_API.G_EXC_ERROR;
10723 END IF ;
10724 IF x_charges_detail_rec.currency_code <> l_currency_code AND l_currency_code is NOT NULL and x_charges_detail_rec.currency_code is not NUll
10725 and x_charges_detail_rec.currency_code <> FND_API.G_MISS_CHAR THEN --12.1.3, vpremach
10726 IF L_CURR_IN_CONVERSION_LIST <> 'Y' THEN
10727 FND_MESSAGE.SET_NAME('CS', 'CS_CHG_INVALID_CURRENCY_CODE');
10728 FND_MESSAGE.Set_Token('CURRENCY_CODE', p_charges_detail_rec.currency_code);
10729 FND_MSG_PUB.Add;
10730 RAISE FND_API.G_EXC_ERROR;
10731 END IF;
10732 ELSE
10733 x_charges_detail_rec.currency_code := l_currency_code;
10734 END IF;
10735
10736 --Condition added to fix Bug # 3358531
10737 IF x_charges_detail_rec.price_list_id <> l_db_det_rec.price_list_header_id OR
10738 x_charges_detail_rec.currency_code <> l_db_det_rec.currency_code THEN
10739 --price list or currecy code is changed need to re-calculate the list price
10740 l_calc_sp := 'Y';
10741 END IF;
10742 END IF;
10743 END IF;
10744 END IF;
10745 END IF;
10746 END IF;
10747
10748 --DBMS_OUTPUT.PUT_LINE('x_charges_detail_rec.price_list_id'||x_charges_detail_rec.price_list_id);
10749 --DBMS_OUTPUT.PUT_LINE('x_charges_detail_rec.currency_code '||x_charges_detail_rec.currency_code);
10750 --DBMS_OUTPUT.PUT_LINE('contract_id '||x_charges_detail_rec.contract_id);
10751
10752
10753 -- ========================================
10754 -- Check currency coversion
10755 -- ========================================
10756 --DBMS_OUTPUT.PUT_LINE('Check currency coversion ...');
10757
10758 IF p_validation_mode IN ('I', 'U') THEN
10759
10760 l_conversion_needed_flag := 'N';
10761 x_charges_detail_rec.conversion_rate := null;
10762 x_charges_detail_rec.conversion_type_code := null;
10763 x_charges_detail_rec.conversion_rate_date := null;
10764
10765 IF p_charges_detail_rec.currency_code <> FND_API.G_MISS_CHAR AND
10766 p_charges_detail_rec.currency_code IS NOT NULL AND
10767 p_charges_detail_rec.currency_code <> x_charges_detail_rec.currency_code THEN
10768
10769 IF l_billing_flag = 'E' THEN
10770
10771 -- Contract exists for the Charge Line
10772 -- Convert the currency to the currency derived from Contract
10773
10774 --DBMS_OUTPUT.PUT_LINE('Conversion Needed');
10775
10776 l_conversion_needed_flag := 'Y';
10777
10778 --call get_conversion_rate API
10779 Get_Conversion_Rate(
10780 p_api_name => p_api_name,
10781 p_from_currency => p_charges_detail_rec.currency_code,
10782 p_to_currency => x_charges_detail_rec.currency_code,
10783 x_denominator => l_denominator,
10784 x_numerator => l_numerator,
10785 x_rate => l_rate,
10786 x_return_status => l_return_status);
10787
10788 --DBMS_OUTPUT.PUT_LINE('l_rate '||l_rate);
10789
10790 IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
10791 FND_MESSAGE.SET_NAME('CS', 'CS_CHG_CURRENCY_CONVERSION_ERR');
10792 FND_MESSAGE.Set_Token('FROM_CURRENCY', p_charges_detail_rec.currency_code);
10793 FND_MESSAGE.Set_Token('TO_CURRENCY', x_charges_detail_rec.currency_code);
10794 FND_MSG_PUB.Add;
10795 RAISE FND_API.G_EXC_ERROR;
10796 END IF;
10797 --assign values to out record for conversion_rate, conversion_type_code
10798 --conversion_rate_date
10799 x_charges_detail_rec.conversion_rate := l_rate;
10800 x_charges_detail_rec.conversion_type_code := FND_PROFILE.VALUE('CS_CHG_DEFAULT_CONVERSION_TYPE');
10801 x_charges_detail_rec.conversion_rate_date := SYSDATE;
10802
10803 ELSE
10804
10805 --this should be an error because what comes in must mastch the derived currency code
10806 --RAISE FND_API.G_EXC_ERROR;
10807 --null;
10808 IF L_CURR_IN_CONVERSION_LIST <> 'Y' THEN --srini
10809 FND_MESSAGE.SET_NAME('CS', 'CS_CHG_INVALID_CURRENCY_CODE');
10810 FND_MESSAGE.Set_Token('CURRENCY_CODE', p_charges_detail_rec.currency_code);
10811 FND_MSG_PUB.Add;
10812 RAISE FND_API.G_EXC_ERROR;
10813 Else--srini
10814 IF p_charges_detail_rec.list_price is not null AND
10815 p_charges_detail_rec.list_price <> FND_API.G_MISS_NUM Then
10816 x_charges_detail_rec.currency_code := p_charges_detail_rec.currency_code; --srini
10817 Else
10818 FND_MESSAGE.SET_NAME('CS', 'CS_CHG_INVALID_CURRENCY_CODE');
10819 FND_MESSAGE.Set_Token('CURRENCY_CODE', p_charges_detail_rec.currency_code);
10820 FND_MSG_PUB.Add;
10821 RAISE FND_API.G_EXC_ERROR;
10822 End IF; --srini
10823 End If;--srini
10824 END IF;
10825
10826 END IF;
10827
10828 END IF;
10829
10830 --DBMS_OUTPUT.PUT_LINE('l_conversion_flag'||l_conversion_needed_flag);
10831
10832
10833 --=========================================
10834 -- Assign Values to Charges Flex fields
10835 -- in the out record
10836 --==========================================
10837 IF p_validation_mode = 'I' THEN
10838 x_charges_detail_rec.context := p_charges_detail_rec.context ;
10839 x_charges_detail_rec.attribute1 := p_charges_detail_rec.attribute1 ;
10840 x_charges_detail_rec.attribute2 := p_charges_detail_rec.attribute2 ;
10841 x_charges_detail_rec.attribute3 := p_charges_detail_rec.attribute3 ;
10842 x_charges_detail_rec.attribute4 := p_charges_detail_rec.attribute4 ;
10843 x_charges_detail_rec.attribute5 := p_charges_detail_rec.attribute5 ;
10844 x_charges_detail_rec.attribute6 := p_charges_detail_rec.attribute6 ;
10845 x_charges_detail_rec.attribute7 := p_charges_detail_rec.attribute7 ;
10846 x_charges_detail_rec.attribute8 := p_charges_detail_rec.attribute8 ;
10847 x_charges_detail_rec.attribute9 := p_charges_detail_rec.attribute9 ;
10848 x_charges_detail_rec.attribute10 := p_charges_detail_rec.attribute10 ;
10849 x_charges_detail_rec.attribute11 := p_charges_detail_rec.attribute11 ;
10850 x_charges_detail_rec.attribute12 := p_charges_detail_rec.attribute12 ;
10851 x_charges_detail_rec.attribute13 := p_charges_detail_rec.attribute13 ;
10852 x_charges_detail_rec.attribute14 := p_charges_detail_rec.attribute14 ;
10853 x_charges_detail_rec.attribute15 := p_charges_detail_rec.attribute15 ;
10854
10855 --=========================================
10856 -- Assign values to Pricing Flex fields
10857 -- in out record
10858 --=========================================
10859 x_charges_detail_rec.pricing_context := p_charges_detail_rec.pricing_context ;
10860 x_charges_detail_rec.pricing_attribute1 := p_charges_detail_rec.pricing_attribute1 ;
10861 x_charges_detail_rec.pricing_attribute2 := p_charges_detail_rec.pricing_attribute2 ;
10862 x_charges_detail_rec.pricing_attribute3 := p_charges_detail_rec.pricing_attribute3 ;
10863 x_charges_detail_rec.pricing_attribute4 := p_charges_detail_rec.pricing_attribute4 ;
10864 x_charges_detail_rec.pricing_attribute5 := p_charges_detail_rec.pricing_attribute5 ;
10865 x_charges_detail_rec.pricing_attribute6 := p_charges_detail_rec.pricing_attribute6 ;
10866 x_charges_detail_rec.pricing_attribute7 := p_charges_detail_rec.pricing_attribute7 ;
10867 x_charges_detail_rec.pricing_attribute8 := p_charges_detail_rec.pricing_attribute8 ;
10868 x_charges_detail_rec.pricing_attribute9 := p_charges_detail_rec.pricing_attribute9 ;
10869 x_charges_detail_rec.pricing_attribute10 := p_charges_detail_rec.pricing_attribute10 ;
10870 x_charges_detail_rec.pricing_attribute11 := p_charges_detail_rec.pricing_attribute11 ;
10871 x_charges_detail_rec.pricing_attribute12 := p_charges_detail_rec.pricing_attribute12 ;
10872 x_charges_detail_rec.pricing_attribute13 := p_charges_detail_rec.pricing_attribute13 ;
10873 x_charges_detail_rec.pricing_attribute14 := p_charges_detail_rec.pricing_attribute14 ;
10874 x_charges_detail_rec.pricing_attribute15 := p_charges_detail_rec.pricing_attribute15 ;
10875 x_charges_detail_rec.pricing_attribute16 := p_charges_detail_rec.pricing_attribute16 ;
10876 x_charges_detail_rec.pricing_attribute17 := p_charges_detail_rec.pricing_attribute17 ;
10877 x_charges_detail_rec.pricing_attribute18 := p_charges_detail_rec.pricing_attribute18 ;
10878 x_charges_detail_rec.pricing_attribute19 := p_charges_detail_rec.pricing_attribute19 ;
10879 x_charges_detail_rec.pricing_attribute20 := p_charges_detail_rec.pricing_attribute20 ;
10880 x_charges_detail_rec.pricing_attribute21 := p_charges_detail_rec.pricing_attribute21 ;
10881 x_charges_detail_rec.pricing_attribute22 := p_charges_detail_rec.pricing_attribute22 ;
10882 x_charges_detail_rec.pricing_attribute23 := p_charges_detail_rec.pricing_attribute23 ;
10883 x_charges_detail_rec.pricing_attribute24 := p_charges_detail_rec.pricing_attribute24 ;
10884 x_charges_detail_rec.pricing_attribute25 := p_charges_detail_rec.pricing_attribute25 ;
10885 x_charges_detail_rec.pricing_attribute26 := p_charges_detail_rec.pricing_attribute26 ;
10886 x_charges_detail_rec.pricing_attribute27 := p_charges_detail_rec.pricing_attribute27 ;
10887 x_charges_detail_rec.pricing_attribute28 := p_charges_detail_rec.pricing_attribute28 ;
10888 x_charges_detail_rec.pricing_attribute29 := p_charges_detail_rec.pricing_attribute29 ;
10889 x_charges_detail_rec.pricing_attribute30 := p_charges_detail_rec.pricing_attribute30 ;
10890 x_charges_detail_rec.pricing_attribute31 := p_charges_detail_rec.pricing_attribute31 ;
10891 x_charges_detail_rec.pricing_attribute32 := p_charges_detail_rec.pricing_attribute32 ;
10892 x_charges_detail_rec.pricing_attribute33 := p_charges_detail_rec.pricing_attribute33 ;
10893 x_charges_detail_rec.pricing_attribute34 := p_charges_detail_rec.pricing_attribute34 ;
10894 x_charges_detail_rec.pricing_attribute35 := p_charges_detail_rec.pricing_attribute35 ;
10895 x_charges_detail_rec.pricing_attribute36 := p_charges_detail_rec.pricing_attribute36 ;
10896 x_charges_detail_rec.pricing_attribute37 := p_charges_detail_rec.pricing_attribute37 ;
10897 x_charges_detail_rec.pricing_attribute38 := p_charges_detail_rec.pricing_attribute38 ;
10898 x_charges_detail_rec.pricing_attribute39 := p_charges_detail_rec.pricing_attribute39 ;
10899 x_charges_detail_rec.pricing_attribute40 := p_charges_detail_rec.pricing_attribute40 ;
10900 x_charges_detail_rec.pricing_attribute41 := p_charges_detail_rec.pricing_attribute41 ;
10901 x_charges_detail_rec.pricing_attribute42 := p_charges_detail_rec.pricing_attribute42 ;
10902 x_charges_detail_rec.pricing_attribute43 := p_charges_detail_rec.pricing_attribute43 ;
10903 x_charges_detail_rec.pricing_attribute44 := p_charges_detail_rec.pricing_attribute44 ;
10904 x_charges_detail_rec.pricing_attribute45 := p_charges_detail_rec.pricing_attribute45 ;
10905 x_charges_detail_rec.pricing_attribute46 := p_charges_detail_rec.pricing_attribute46 ;
10906 x_charges_detail_rec.pricing_attribute47 := p_charges_detail_rec.pricing_attribute47 ;
10907 x_charges_detail_rec.pricing_attribute48 := p_charges_detail_rec.pricing_attribute48 ;
10908 x_charges_detail_rec.pricing_attribute49 := p_charges_detail_rec.pricing_attribute49 ;
10909 x_charges_detail_rec.pricing_attribute50 := p_charges_detail_rec.pricing_attribute50 ;
10910 x_charges_detail_rec.pricing_attribute51 := p_charges_detail_rec.pricing_attribute51 ;
10911 x_charges_detail_rec.pricing_attribute52 := p_charges_detail_rec.pricing_attribute52 ;
10912 x_charges_detail_rec.pricing_attribute53 := p_charges_detail_rec.pricing_attribute53 ;
10913 x_charges_detail_rec.pricing_attribute54 := p_charges_detail_rec.pricing_attribute54 ;
10914 x_charges_detail_rec.pricing_attribute55 := p_charges_detail_rec.pricing_attribute55 ;
10915 x_charges_detail_rec.pricing_attribute56 := p_charges_detail_rec.pricing_attribute56 ;
10916 x_charges_detail_rec.pricing_attribute57 := p_charges_detail_rec.pricing_attribute57 ;
10917 x_charges_detail_rec.pricing_attribute58 := p_charges_detail_rec.pricing_attribute58 ;
10918 x_charges_detail_rec.pricing_attribute59 := p_charges_detail_rec.pricing_attribute59 ;
10919 x_charges_detail_rec.pricing_attribute60 := p_charges_detail_rec.pricing_attribute60 ;
10920 x_charges_detail_rec.pricing_attribute61 := p_charges_detail_rec.pricing_attribute61 ;
10921 x_charges_detail_rec.pricing_attribute62 := p_charges_detail_rec.pricing_attribute62 ;
10922 x_charges_detail_rec.pricing_attribute63 := p_charges_detail_rec.pricing_attribute63 ;
10923 x_charges_detail_rec.pricing_attribute64 := p_charges_detail_rec.pricing_attribute64 ;
10924 x_charges_detail_rec.pricing_attribute65 := p_charges_detail_rec.pricing_attribute65 ;
10925 x_charges_detail_rec.pricing_attribute66 := p_charges_detail_rec.pricing_attribute66 ;
10926 x_charges_detail_rec.pricing_attribute67 := p_charges_detail_rec.pricing_attribute67 ;
10927 x_charges_detail_rec.pricing_attribute68 := p_charges_detail_rec.pricing_attribute68 ;
10928 x_charges_detail_rec.pricing_attribute69 := p_charges_detail_rec.pricing_attribute69 ;
10929 x_charges_detail_rec.pricing_attribute70 := p_charges_detail_rec.pricing_attribute70 ;
10930 x_charges_detail_rec.pricing_attribute71 := p_charges_detail_rec.pricing_attribute71 ;
10931 x_charges_detail_rec.pricing_attribute72 := p_charges_detail_rec.pricing_attribute72 ;
10932 x_charges_detail_rec.pricing_attribute73 := p_charges_detail_rec.pricing_attribute73 ;
10933 x_charges_detail_rec.pricing_attribute74 := p_charges_detail_rec.pricing_attribute74 ;
10934 x_charges_detail_rec.pricing_attribute75 := p_charges_detail_rec.pricing_attribute75 ;
10935 x_charges_detail_rec.pricing_attribute76 := p_charges_detail_rec.pricing_attribute76 ;
10936 x_charges_detail_rec.pricing_attribute77 := p_charges_detail_rec.pricing_attribute77 ;
10937 x_charges_detail_rec.pricing_attribute78 := p_charges_detail_rec.pricing_attribute78 ;
10938 x_charges_detail_rec.pricing_attribute79 := p_charges_detail_rec.pricing_attribute79 ;
10939 x_charges_detail_rec.pricing_attribute80 := p_charges_detail_rec.pricing_attribute80 ;
10940 x_charges_detail_rec.pricing_attribute81 := p_charges_detail_rec.pricing_attribute81 ;
10941 x_charges_detail_rec.pricing_attribute82 := p_charges_detail_rec.pricing_attribute82 ;
10942 x_charges_detail_rec.pricing_attribute83 := p_charges_detail_rec.pricing_attribute83 ;
10943 x_charges_detail_rec.pricing_attribute84 := p_charges_detail_rec.pricing_attribute84 ;
10944 x_charges_detail_rec.pricing_attribute85 := p_charges_detail_rec.pricing_attribute85 ;
10945 x_charges_detail_rec.pricing_attribute86 := p_charges_detail_rec.pricing_attribute86 ;
10946 x_charges_detail_rec.pricing_attribute87 := p_charges_detail_rec.pricing_attribute87 ;
10947 x_charges_detail_rec.pricing_attribute88 := p_charges_detail_rec.pricing_attribute88 ;
10948 x_charges_detail_rec.pricing_attribute89 := p_charges_detail_rec.pricing_attribute89 ;
10949 x_charges_detail_rec.pricing_attribute90 := p_charges_detail_rec.pricing_attribute90 ;
10950 x_charges_detail_rec.pricing_attribute91 := p_charges_detail_rec.pricing_attribute91 ;
10951 x_charges_detail_rec.pricing_attribute92 := p_charges_detail_rec.pricing_attribute92 ;
10952 x_charges_detail_rec.pricing_attribute93 := p_charges_detail_rec.pricing_attribute93 ;
10953 x_charges_detail_rec.pricing_attribute94 := p_charges_detail_rec.pricing_attribute94 ;
10954 x_charges_detail_rec.pricing_attribute95 := p_charges_detail_rec.pricing_attribute95 ;
10955 x_charges_detail_rec.pricing_attribute96 := p_charges_detail_rec.pricing_attribute96 ;
10956 x_charges_detail_rec.pricing_attribute97 := p_charges_detail_rec.pricing_attribute97 ;
10957 x_charges_detail_rec.pricing_attribute98 := p_charges_detail_rec.pricing_attribute98 ;
10958 x_charges_detail_rec.pricing_attribute99 := p_charges_detail_rec.pricing_attribute99 ;
10959 x_charges_detail_rec.pricing_attribute100 := p_charges_detail_rec.pricing_attribute100 ;
10960
10961 ELSIF p_validation_mode = 'U' THEN
10962
10963 -- Bug Fix for Bug # 3078247
10964 -- Added code to handle the update of attributes
10965
10966 --=========================================
10967 -- Assign Values to Charges Flex fields
10968 -- in the out record
10969 --==========================================
10970 IF p_charges_detail_rec.context = FND_API.G_MISS_CHAR THEN
10971
10972 -- get the values from the database
10973 x_charges_detail_rec.context := l_db_det_rec.context;
10974 x_charges_detail_rec.attribute1 := l_db_det_rec.attribute1;
10975 x_charges_detail_rec.attribute2 := l_db_det_rec.attribute2;
10976 x_charges_detail_rec.attribute3 := l_db_det_rec.attribute3;
10977 x_charges_detail_rec.attribute4 := l_db_det_rec.attribute4;
10978 x_charges_detail_rec.attribute5 := l_db_det_rec.attribute5;
10979 x_charges_detail_rec.attribute6 := l_db_det_rec.attribute6;
10980 x_charges_detail_rec.attribute7 := l_db_det_rec.attribute7;
10981 x_charges_detail_rec.attribute8 := l_db_det_rec.attribute8;
10982 x_charges_detail_rec.attribute9 := l_db_det_rec.attribute9;
10983 x_charges_detail_rec.attribute10 := l_db_det_rec.attribute10;
10984 x_charges_detail_rec.attribute11 := l_db_det_rec.attribute11;
10985 x_charges_detail_rec.attribute12 := l_db_det_rec.attribute12;
10986 x_charges_detail_rec.attribute13 := l_db_det_rec.attribute13;
10987 x_charges_detail_rec.attribute14 := l_db_det_rec.attribute14;
10988 x_charges_detail_rec.attribute15 := l_db_det_rec.attribute15;
10989
10990 ELSIF
10991 p_charges_detail_rec.context IS NULL THEN
10992
10993 -- nullify all values for the descriptive flex
10994 x_charges_detail_rec.context := null;
10995 x_charges_detail_rec.attribute1 := null;
10996 x_charges_detail_rec.attribute2 := null;
10997 x_charges_detail_rec.attribute3 := null;
10998 x_charges_detail_rec.attribute4 := null;
10999 x_charges_detail_rec.attribute5 := null;
11000 x_charges_detail_rec.attribute6 := null;
11001 x_charges_detail_rec.attribute7 := null;
11002 x_charges_detail_rec.attribute8 := null;
11003 x_charges_detail_rec.attribute9 := null;
11004 x_charges_detail_rec.attribute10 := null;
11005 x_charges_detail_rec.attribute11 := null;
11006 x_charges_detail_rec.attribute12 := null;
11007 x_charges_detail_rec.attribute13 := null;
11008 x_charges_detail_rec.attribute14 := null;
11009 x_charges_detail_rec.attribute15 := null;
11010
11011 ELSE
11012
11013 x_charges_detail_rec.context := p_charges_detail_rec.context ;
11014
11015 IF p_charges_detail_rec.attribute1 = FND_API.G_MISS_CHAR THEN
11016 x_charges_detail_rec.attribute1 := null;
11017 ELSE
11018 x_charges_detail_rec.attribute1 := p_charges_detail_rec.attribute1;
11019 END IF;
11020
11021 IF p_charges_detail_rec.attribute2 = FND_API.G_MISS_CHAR THEN
11022 x_charges_detail_rec.attribute2 := null;
11023 ELSE
11024 x_charges_detail_rec.attribute2 := p_charges_detail_rec.attribute2;
11025 END IF;
11026
11027 IF p_charges_detail_rec.attribute3 = FND_API.G_MISS_CHAR THEN
11028 x_charges_detail_rec.attribute3 := null;
11029 ELSE
11030 x_charges_detail_rec.attribute3 := p_charges_detail_rec.attribute3;
11031 END IF;
11032
11033 IF p_charges_detail_rec.attribute4 = FND_API.G_MISS_CHAR THEN
11034 x_charges_detail_rec.attribute4 := null;
11035 ELSE
11036 x_charges_detail_rec.attribute4 := p_charges_detail_rec.attribute4;
11037 END IF;
11038
11039 IF p_charges_detail_rec.attribute5 = FND_API.G_MISS_CHAR THEN
11040 x_charges_detail_rec.attribute5 := null;
11041 ELSE
11042 x_charges_detail_rec.attribute5 := p_charges_detail_rec.attribute5;
11043 END IF;
11044
11045 IF p_charges_detail_rec.attribute6 = FND_API.G_MISS_CHAR THEN
11046 x_charges_detail_rec.attribute6 := null;
11047 ELSE
11048 x_charges_detail_rec.attribute6 := p_charges_detail_rec.attribute6;
11049 END IF;
11050
11051 IF p_charges_detail_rec.attribute7 = FND_API.G_MISS_CHAR THEN
11052 x_charges_detail_rec.attribute7 := null;
11053 ELSE
11054 x_charges_detail_rec.attribute7 := p_charges_detail_rec.attribute7;
11055 END IF;
11056
11057 IF p_charges_detail_rec.attribute8 = FND_API.G_MISS_CHAR THEN
11058 x_charges_detail_rec.attribute8 := null;
11059 ELSE
11060 x_charges_detail_rec.attribute8 := p_charges_detail_rec.attribute8;
11061 END IF;
11062
11063 IF p_charges_detail_rec.attribute9 = FND_API.G_MISS_CHAR THEN
11064 x_charges_detail_rec.attribute9 := null;
11065 ELSE
11066 x_charges_detail_rec.attribute9 := p_charges_detail_rec.attribute9;
11067 END IF;
11068
11069 IF p_charges_detail_rec.attribute10 = FND_API.G_MISS_CHAR THEN
11070 x_charges_detail_rec.attribute10 := null;
11071 ELSE
11072 x_charges_detail_rec.attribute10 := p_charges_detail_rec.attribute10;
11073 END IF;
11074
11075 IF p_charges_detail_rec.attribute11 = FND_API.G_MISS_CHAR THEN
11076 x_charges_detail_rec.attribute11 := null;
11077 ELSE
11078 x_charges_detail_rec.attribute11 := p_charges_detail_rec.attribute11;
11079 END IF;
11080
11081 IF p_charges_detail_rec.attribute12 = FND_API.G_MISS_CHAR THEN
11082 x_charges_detail_rec.attribute12 := null;
11083 ELSE
11084 x_charges_detail_rec.attribute12 := p_charges_detail_rec.attribute12;
11085 END IF;
11086
11087 IF p_charges_detail_rec.attribute13 = FND_API.G_MISS_CHAR THEN
11088 x_charges_detail_rec.attribute13 := null;
11089 ELSE
11090 x_charges_detail_rec.attribute13 := p_charges_detail_rec.attribute13;
11091 END IF;
11092
11093 IF p_charges_detail_rec.attribute14 = FND_API.G_MISS_CHAR THEN
11094 x_charges_detail_rec.attribute14 := null;
11095 ELSE
11096 x_charges_detail_rec.attribute14 := p_charges_detail_rec.attribute14;
11097 END IF;
11098
11099 IF p_charges_detail_rec.attribute15 = FND_API.G_MISS_CHAR THEN
11100 x_charges_detail_rec.attribute15 := null;
11101 ELSE
11102 x_charges_detail_rec.attribute15 := p_charges_detail_rec.attribute15;
11103 END IF;
11104
11105 END IF;
11106
11107 -- Bug Fix for Bug # 3063439
11108 -- Added code to handle the update of pricing attributes
11109
11110 --=========================================
11111 -- Assign values to Pricing Flex fields
11112 -- in out record
11113 --=========================================
11114 IF p_charges_detail_rec.pricing_context = FND_API.G_MISS_CHAR THEN
11115
11116 --DBMS_OUTPUT.PUT_LINE('parameter context is FND_API.G_MISS_CHAR ');
11117
11118 x_charges_detail_rec.pricing_context := l_db_det_rec.pricing_context ;
11119 x_charges_detail_rec.pricing_attribute1 := l_db_det_rec.pricing_attribute1;
11120 x_charges_detail_rec.pricing_attribute2 := l_db_det_rec.pricing_attribute2;
11121 x_charges_detail_rec.pricing_attribute3 := l_db_det_rec.pricing_attribute3;
11122 x_charges_detail_rec.pricing_attribute4 := l_db_det_rec.pricing_attribute4;
11123 x_charges_detail_rec.pricing_attribute5 := l_db_det_rec.pricing_attribute5;
11124 x_charges_detail_rec.pricing_attribute6 := l_db_det_rec.pricing_attribute6;
11125 x_charges_detail_rec.pricing_attribute7 := l_db_det_rec.pricing_attribute7;
11126 x_charges_detail_rec.pricing_attribute8 := l_db_det_rec.pricing_attribute8;
11127 x_charges_detail_rec.pricing_attribute9 := l_db_det_rec.pricing_attribute9;
11128 x_charges_detail_rec.pricing_attribute10 := l_db_det_rec.pricing_attribute10;
11129 x_charges_detail_rec.pricing_attribute11 := l_db_det_rec.pricing_attribute11;
11130 x_charges_detail_rec.pricing_attribute12 := l_db_det_rec.pricing_attribute12;
11131 x_charges_detail_rec.pricing_attribute13 := l_db_det_rec.pricing_attribute13;
11132 x_charges_detail_rec.pricing_attribute14 := l_db_det_rec.pricing_attribute14;
11133 x_charges_detail_rec.pricing_attribute15 := l_db_det_rec.pricing_attribute15;
11134 x_charges_detail_rec.pricing_attribute16 := l_db_det_rec.pricing_attribute16;
11135 x_charges_detail_rec.pricing_attribute17 := l_db_det_rec.pricing_attribute17;
11136 x_charges_detail_rec.pricing_attribute18 := l_db_det_rec.pricing_attribute18;
11137 x_charges_detail_rec.pricing_attribute19 := l_db_det_rec.pricing_attribute19;
11138 x_charges_detail_rec.pricing_attribute20 := l_db_det_rec.pricing_attribute20;
11139 x_charges_detail_rec.pricing_attribute21 := l_db_det_rec.pricing_attribute21;
11140 x_charges_detail_rec.pricing_attribute22 := l_db_det_rec.pricing_attribute22;
11141 x_charges_detail_rec.pricing_attribute23 := l_db_det_rec.pricing_attribute23;
11142 x_charges_detail_rec.pricing_attribute24 := l_db_det_rec.pricing_attribute24;
11143 x_charges_detail_rec.pricing_attribute25 := l_db_det_rec.pricing_attribute25;
11144 x_charges_detail_rec.pricing_attribute26 := l_db_det_rec.pricing_attribute26;
11145 x_charges_detail_rec.pricing_attribute27 := l_db_det_rec.pricing_attribute27;
11146 x_charges_detail_rec.pricing_attribute28 := l_db_det_rec.pricing_attribute28;
11147 x_charges_detail_rec.pricing_attribute29 := l_db_det_rec.pricing_attribute29;
11148 x_charges_detail_rec.pricing_attribute30 := l_db_det_rec.pricing_attribute30;
11149 x_charges_detail_rec.pricing_attribute31 := l_db_det_rec.pricing_attribute31;
11150 x_charges_detail_rec.pricing_attribute32 := l_db_det_rec.pricing_attribute32;
11151 x_charges_detail_rec.pricing_attribute33 := l_db_det_rec.pricing_attribute33;
11152 x_charges_detail_rec.pricing_attribute34 := l_db_det_rec.pricing_attribute34;
11153 x_charges_detail_rec.pricing_attribute35 := l_db_det_rec.pricing_attribute35;
11154 x_charges_detail_rec.pricing_attribute36 := l_db_det_rec.pricing_attribute36;
11155 x_charges_detail_rec.pricing_attribute37 := l_db_det_rec.pricing_attribute37;
11156 x_charges_detail_rec.pricing_attribute38 := l_db_det_rec.pricing_attribute38;
11157 x_charges_detail_rec.pricing_attribute39 := l_db_det_rec.pricing_attribute39;
11158 x_charges_detail_rec.pricing_attribute40 := l_db_det_rec.pricing_attribute40;
11159 x_charges_detail_rec.pricing_attribute41 := l_db_det_rec.pricing_attribute41;
11160 x_charges_detail_rec.pricing_attribute42 := l_db_det_rec.pricing_attribute42;
11161 x_charges_detail_rec.pricing_attribute43 := l_db_det_rec.pricing_attribute43;
11162 x_charges_detail_rec.pricing_attribute44 := l_db_det_rec.pricing_attribute44;
11163 x_charges_detail_rec.pricing_attribute45 := l_db_det_rec.pricing_attribute45;
11164 x_charges_detail_rec.pricing_attribute46 := l_db_det_rec.pricing_attribute46;
11165 x_charges_detail_rec.pricing_attribute47 := l_db_det_rec.pricing_attribute47;
11166 x_charges_detail_rec.pricing_attribute48 := l_db_det_rec.pricing_attribute48;
11167 x_charges_detail_rec.pricing_attribute49 := l_db_det_rec.pricing_attribute49;
11168 x_charges_detail_rec.pricing_attribute50 := l_db_det_rec.pricing_attribute50;
11169 x_charges_detail_rec.pricing_attribute51 := l_db_det_rec.pricing_attribute51;
11170 x_charges_detail_rec.pricing_attribute52 := l_db_det_rec.pricing_attribute52;
11171 x_charges_detail_rec.pricing_attribute53 := l_db_det_rec.pricing_attribute53;
11172 x_charges_detail_rec.pricing_attribute54 := l_db_det_rec.pricing_attribute54;
11173 x_charges_detail_rec.pricing_attribute55 := l_db_det_rec.pricing_attribute55;
11174 x_charges_detail_rec.pricing_attribute56 := l_db_det_rec.pricing_attribute56;
11175 x_charges_detail_rec.pricing_attribute57 := l_db_det_rec.pricing_attribute57;
11176 x_charges_detail_rec.pricing_attribute58 := l_db_det_rec.pricing_attribute58;
11177 x_charges_detail_rec.pricing_attribute59 := l_db_det_rec.pricing_attribute59;
11178 x_charges_detail_rec.pricing_attribute60 := l_db_det_rec.pricing_attribute60;
11179 x_charges_detail_rec.pricing_attribute61 := l_db_det_rec.pricing_attribute61;
11180 x_charges_detail_rec.pricing_attribute62 := l_db_det_rec.pricing_attribute62;
11181 x_charges_detail_rec.pricing_attribute63 := l_db_det_rec.pricing_attribute63;
11182 x_charges_detail_rec.pricing_attribute64 := l_db_det_rec.pricing_attribute64;
11183 x_charges_detail_rec.pricing_attribute65 := l_db_det_rec.pricing_attribute65;
11184 x_charges_detail_rec.pricing_attribute66 := l_db_det_rec.pricing_attribute66;
11185 x_charges_detail_rec.pricing_attribute67 := l_db_det_rec.pricing_attribute67;
11186 x_charges_detail_rec.pricing_attribute68 := l_db_det_rec.pricing_attribute68;
11187 x_charges_detail_rec.pricing_attribute69 := l_db_det_rec.pricing_attribute69;
11188 x_charges_detail_rec.pricing_attribute70 := l_db_det_rec.pricing_attribute70;
11189 x_charges_detail_rec.pricing_attribute71 := l_db_det_rec.pricing_attribute71;
11190 x_charges_detail_rec.pricing_attribute72 := l_db_det_rec.pricing_attribute72;
11191 x_charges_detail_rec.pricing_attribute73 := l_db_det_rec.pricing_attribute73;
11192 x_charges_detail_rec.pricing_attribute74 := l_db_det_rec.pricing_attribute74;
11193 x_charges_detail_rec.pricing_attribute75 := l_db_det_rec.pricing_attribute75;
11194 x_charges_detail_rec.pricing_attribute76 := l_db_det_rec.pricing_attribute76;
11195 x_charges_detail_rec.pricing_attribute77 := l_db_det_rec.pricing_attribute77;
11196 x_charges_detail_rec.pricing_attribute78 := l_db_det_rec.pricing_attribute78;
11197 x_charges_detail_rec.pricing_attribute79 := l_db_det_rec.pricing_attribute79;
11198 x_charges_detail_rec.pricing_attribute80 := l_db_det_rec.pricing_attribute80;
11199 x_charges_detail_rec.pricing_attribute81 := l_db_det_rec.pricing_attribute81;
11200 x_charges_detail_rec.pricing_attribute82 := l_db_det_rec.pricing_attribute82;
11201 x_charges_detail_rec.pricing_attribute83 := l_db_det_rec.pricing_attribute83;
11202 x_charges_detail_rec.pricing_attribute84 := l_db_det_rec.pricing_attribute84;
11203 x_charges_detail_rec.pricing_attribute85 := l_db_det_rec.pricing_attribute85;
11204 x_charges_detail_rec.pricing_attribute86 := l_db_det_rec.pricing_attribute86;
11205 x_charges_detail_rec.pricing_attribute87 := l_db_det_rec.pricing_attribute87;
11206 x_charges_detail_rec.pricing_attribute88 := l_db_det_rec.pricing_attribute88;
11207 x_charges_detail_rec.pricing_attribute89 := l_db_det_rec.pricing_attribute89;
11208 x_charges_detail_rec.pricing_attribute90 := l_db_det_rec.pricing_attribute90;
11209 x_charges_detail_rec.pricing_attribute91 := l_db_det_rec.pricing_attribute91;
11210 x_charges_detail_rec.pricing_attribute92 := l_db_det_rec.pricing_attribute92;
11211 x_charges_detail_rec.pricing_attribute93 := l_db_det_rec.pricing_attribute93;
11212 x_charges_detail_rec.pricing_attribute94 := l_db_det_rec.pricing_attribute94;
11213 x_charges_detail_rec.pricing_attribute95 := l_db_det_rec.pricing_attribute95;
11214 x_charges_detail_rec.pricing_attribute96 := l_db_det_rec.pricing_attribute96;
11215 x_charges_detail_rec.pricing_attribute97 := l_db_det_rec.pricing_attribute97;
11216 x_charges_detail_rec.pricing_attribute98 := l_db_det_rec.pricing_attribute98;
11217 x_charges_detail_rec.pricing_attribute99 := l_db_det_rec.pricing_attribute99;
11218 x_charges_detail_rec.pricing_attribute100 := l_db_det_rec.pricing_attribute100;
11219
11220 ELSIF p_charges_detail_rec.pricing_context IS NULL THEN
11221
11222 --DBMS_OUTPUT.PUT_LINE('parameter context is null ');
11223 x_charges_detail_rec.pricing_context := null ;
11224 x_charges_detail_rec.pricing_attribute1 := null ;
11225 x_charges_detail_rec.pricing_attribute2 := null ;
11226 x_charges_detail_rec.pricing_attribute3 := null ;
11227 x_charges_detail_rec.pricing_attribute4 := null ;
11228 x_charges_detail_rec.pricing_attribute5 := null ;
11229 x_charges_detail_rec.pricing_attribute6 := null ;
11230 x_charges_detail_rec.pricing_attribute7 := null ;
11231 x_charges_detail_rec.pricing_attribute8 := null ;
11232 x_charges_detail_rec.pricing_attribute9 := null ;
11233 x_charges_detail_rec.pricing_attribute10 := null ;
11234 x_charges_detail_rec.pricing_attribute11 := null ;
11235 x_charges_detail_rec.pricing_attribute12 := null ;
11236 x_charges_detail_rec.pricing_attribute13 := null ;
11237 x_charges_detail_rec.pricing_attribute14 := null ;
11238 x_charges_detail_rec.pricing_attribute15 := null ;
11239 x_charges_detail_rec.pricing_attribute16 := null ;
11240 x_charges_detail_rec.pricing_attribute17 := null ;
11241 x_charges_detail_rec.pricing_attribute18 := null ;
11242 x_charges_detail_rec.pricing_attribute19 := null ;
11243 x_charges_detail_rec.pricing_attribute20 := null ;
11244 x_charges_detail_rec.pricing_attribute21 := null ;
11245 x_charges_detail_rec.pricing_attribute22 := null ;
11246 x_charges_detail_rec.pricing_attribute23 := null ;
11247 x_charges_detail_rec.pricing_attribute24 := null ;
11248 x_charges_detail_rec.pricing_attribute25 := null ;
11249 x_charges_detail_rec.pricing_attribute26 := null ;
11250 x_charges_detail_rec.pricing_attribute27 := null ;
11251 x_charges_detail_rec.pricing_attribute28 := null ;
11252 x_charges_detail_rec.pricing_attribute29 := null ;
11253 x_charges_detail_rec.pricing_attribute30 := null ;
11254 x_charges_detail_rec.pricing_attribute31 := null ;
11255 x_charges_detail_rec.pricing_attribute32 := null ;
11256 x_charges_detail_rec.pricing_attribute33 := null ;
11257 x_charges_detail_rec.pricing_attribute34 := null ;
11258 x_charges_detail_rec.pricing_attribute35 := null ;
11259 x_charges_detail_rec.pricing_attribute36 := null ;
11260 x_charges_detail_rec.pricing_attribute37 := null ;
11261 x_charges_detail_rec.pricing_attribute38 := null ;
11262 x_charges_detail_rec.pricing_attribute39 := null ;
11263 x_charges_detail_rec.pricing_attribute40 := null ;
11264 x_charges_detail_rec.pricing_attribute41 := null ;
11265 x_charges_detail_rec.pricing_attribute42 := null ;
11266 x_charges_detail_rec.pricing_attribute43 := null ;
11267 x_charges_detail_rec.pricing_attribute44 := null ;
11268 x_charges_detail_rec.pricing_attribute45 := null ;
11269 x_charges_detail_rec.pricing_attribute46 := null ;
11270 x_charges_detail_rec.pricing_attribute47 := null ;
11271 x_charges_detail_rec.pricing_attribute48 := null ;
11272 x_charges_detail_rec.pricing_attribute49 := null ;
11273 x_charges_detail_rec.pricing_attribute50 := null ;
11274 x_charges_detail_rec.pricing_attribute51 := null ;
11275 x_charges_detail_rec.pricing_attribute52 := null ;
11276 x_charges_detail_rec.pricing_attribute53 := null ;
11277 x_charges_detail_rec.pricing_attribute54 := null ;
11278 x_charges_detail_rec.pricing_attribute55 := null ;
11279 x_charges_detail_rec.pricing_attribute56 := null ;
11280 x_charges_detail_rec.pricing_attribute57 := null ;
11281 x_charges_detail_rec.pricing_attribute58 := null ;
11282 x_charges_detail_rec.pricing_attribute59 := null ;
11283 x_charges_detail_rec.pricing_attribute59 := null ;
11284 x_charges_detail_rec.pricing_attribute60 := null ;
11285 x_charges_detail_rec.pricing_attribute61 := null ;
11286 x_charges_detail_rec.pricing_attribute62 := null ;
11287 x_charges_detail_rec.pricing_attribute63 := null ;
11288 x_charges_detail_rec.pricing_attribute64 := null ;
11289 x_charges_detail_rec.pricing_attribute65 := null ;
11290 x_charges_detail_rec.pricing_attribute66 := null ;
11291 x_charges_detail_rec.pricing_attribute67 := null ;
11292 x_charges_detail_rec.pricing_attribute68 := null ;
11293 x_charges_detail_rec.pricing_attribute69 := null ;
11294 x_charges_detail_rec.pricing_attribute70 := null ;
11295 x_charges_detail_rec.pricing_attribute71 := null ;
11296 x_charges_detail_rec.pricing_attribute72 := null ;
11297 x_charges_detail_rec.pricing_attribute73 := null ;
11298 x_charges_detail_rec.pricing_attribute74 := null ;
11299 x_charges_detail_rec.pricing_attribute75 := null ;
11300 x_charges_detail_rec.pricing_attribute76 := null ;
11301 x_charges_detail_rec.pricing_attribute77 := null ;
11302 x_charges_detail_rec.pricing_attribute78 := null ;
11303 x_charges_detail_rec.pricing_attribute79 := null ;
11304 x_charges_detail_rec.pricing_attribute80 := null ;
11305 x_charges_detail_rec.pricing_attribute81 := null ;
11306 x_charges_detail_rec.pricing_attribute82 := null ;
11307 x_charges_detail_rec.pricing_attribute83 := null ;
11308 x_charges_detail_rec.pricing_attribute84 := null ;
11309 x_charges_detail_rec.pricing_attribute85 := null ;
11310 x_charges_detail_rec.pricing_attribute86 := null ;
11311 x_charges_detail_rec.pricing_attribute87 := null ;
11312 x_charges_detail_rec.pricing_attribute88 := null ;
11313 x_charges_detail_rec.pricing_attribute89 := null ;
11314 x_charges_detail_rec.pricing_attribute90 := null ;
11315 x_charges_detail_rec.pricing_attribute91 := null ;
11316 x_charges_detail_rec.pricing_attribute92 := null ;
11317 x_charges_detail_rec.pricing_attribute93 := null ;
11318 x_charges_detail_rec.pricing_attribute94 := null ;
11319 x_charges_detail_rec.pricing_attribute95 := null ;
11320 x_charges_detail_rec.pricing_attribute96 := null ;
11321 x_charges_detail_rec.pricing_attribute97 := null ;
11322 x_charges_detail_rec.pricing_attribute98 := null ;
11323 x_charges_detail_rec.pricing_attribute99 := null ;
11324 x_charges_detail_rec.pricing_attribute100 := null ;
11325
11326 ELSE
11327
11328 -- the pricing context is not null
11329 -- copy the incoming parameters to the record structure
11330 -- --DBMS_OUTPUT.PUT_LINE('parameter context is not null ');
11331
11332 x_charges_detail_rec.pricing_context := p_charges_detail_rec.pricing_context ;
11333
11334 IF p_charges_detail_rec.pricing_attribute1 = FND_API.G_MISS_CHAR THEN
11335 x_charges_detail_rec.pricing_attribute1 := null;
11336 ELSE
11337 x_charges_detail_rec.pricing_attribute1 := p_charges_detail_rec.pricing_attribute1;
11338 END IF;
11339
11340 IF p_charges_detail_rec.pricing_attribute2 = FND_API.G_MISS_CHAR THEN
11341 x_charges_detail_rec.pricing_attribute2 := null;
11342 ELSE
11343 x_charges_detail_rec.pricing_attribute2 := p_charges_detail_rec.pricing_attribute2;
11344 END IF;
11345
11346 IF p_charges_detail_rec.pricing_attribute3 = FND_API.G_MISS_CHAR THEN
11347 x_charges_detail_rec.pricing_attribute3 := null;
11348 ELSE
11349 x_charges_detail_rec.pricing_attribute3 := p_charges_detail_rec.pricing_attribute3;
11350 END IF;
11351
11352 IF p_charges_detail_rec.pricing_attribute4 = FND_API.G_MISS_CHAR THEN
11353 x_charges_detail_rec.pricing_attribute4 := null;
11354 ELSE
11355 x_charges_detail_rec.pricing_attribute4 := p_charges_detail_rec.pricing_attribute4;
11356 END IF;
11357
11358 IF p_charges_detail_rec.pricing_attribute5 = FND_API.G_MISS_CHAR THEN
11359 x_charges_detail_rec.pricing_attribute5 := null;
11360 ELSE
11361 x_charges_detail_rec.pricing_attribute5 := p_charges_detail_rec.pricing_attribute5;
11362 END IF;
11363
11364 IF p_charges_detail_rec.pricing_attribute6 = FND_API.G_MISS_CHAR THEN
11365 x_charges_detail_rec.pricing_attribute6 := null;
11366 ELSE
11367 x_charges_detail_rec.pricing_attribute6 := p_charges_detail_rec.pricing_attribute6;
11368 END IF;
11369
11370 IF p_charges_detail_rec.pricing_attribute7 = FND_API.G_MISS_CHAR THEN
11371 x_charges_detail_rec.pricing_attribute7 := null;
11372 ELSE
11373 x_charges_detail_rec.pricing_attribute7 := p_charges_detail_rec.pricing_attribute7;
11374 END IF;
11375
11376 IF p_charges_detail_rec.pricing_attribute8 = FND_API.G_MISS_CHAR THEN
11377 x_charges_detail_rec.pricing_attribute8 := null;
11378 ELSE
11379 x_charges_detail_rec.pricing_attribute8 := p_charges_detail_rec.pricing_attribute8;
11380 END IF;
11381
11382 IF p_charges_detail_rec.pricing_attribute9 = FND_API.G_MISS_CHAR THEN
11383 x_charges_detail_rec.pricing_attribute9 := null;
11384 ELSE
11385 x_charges_detail_rec.pricing_attribute9 := p_charges_detail_rec.pricing_attribute9;
11386 END IF;
11387
11388 IF p_charges_detail_rec.pricing_attribute10 = FND_API.G_MISS_CHAR THEN
11389 x_charges_detail_rec.pricing_attribute10 := null;
11390 ELSE
11391 x_charges_detail_rec.pricing_attribute10 := p_charges_detail_rec.pricing_attribute10;
11392 END IF;
11393
11394 IF p_charges_detail_rec.pricing_attribute11 = FND_API.G_MISS_CHAR THEN
11395 x_charges_detail_rec.pricing_attribute11 := null;
11396 ELSE
11397 x_charges_detail_rec.pricing_attribute11 := p_charges_detail_rec.pricing_attribute11;
11398 END IF;
11399
11400 IF p_charges_detail_rec.pricing_attribute12 = FND_API.G_MISS_CHAR THEN
11401 x_charges_detail_rec.pricing_attribute12 := null;
11402 ELSE
11403 x_charges_detail_rec.pricing_attribute12 := p_charges_detail_rec.pricing_attribute12;
11404 END IF;
11405
11406 IF p_charges_detail_rec.pricing_attribute13 = FND_API.G_MISS_CHAR THEN
11407 x_charges_detail_rec.pricing_attribute13 := null;
11408 ELSE
11409 x_charges_detail_rec.pricing_attribute13 := p_charges_detail_rec.pricing_attribute13;
11410 END IF;
11411
11412 IF p_charges_detail_rec.pricing_attribute14 = FND_API.G_MISS_CHAR THEN
11413 x_charges_detail_rec.pricing_attribute14 := null;
11414 ELSE
11415 x_charges_detail_rec.pricing_attribute14 := p_charges_detail_rec.pricing_attribute14;
11416 END IF;
11417
11418 IF p_charges_detail_rec.pricing_attribute15 = FND_API.G_MISS_CHAR THEN
11419 x_charges_detail_rec.pricing_attribute15 := null;
11420 ELSE
11421 x_charges_detail_rec.pricing_attribute15 := p_charges_detail_rec.pricing_attribute15;
11422 END IF;
11423
11424 IF p_charges_detail_rec.pricing_attribute16 = FND_API.G_MISS_CHAR THEN
11425 x_charges_detail_rec.pricing_attribute16 := null;
11426 ELSE
11427 x_charges_detail_rec.pricing_attribute16 := p_charges_detail_rec.pricing_attribute16;
11428 END IF;
11429
11430 IF p_charges_detail_rec.pricing_attribute17 = FND_API.G_MISS_CHAR THEN
11431 x_charges_detail_rec.pricing_attribute17 := null;
11432 ELSE
11433 x_charges_detail_rec.pricing_attribute17 := p_charges_detail_rec.pricing_attribute17;
11434 END IF;
11435
11436 IF p_charges_detail_rec.pricing_attribute18 = FND_API.G_MISS_CHAR THEN
11437 x_charges_detail_rec.pricing_attribute18 := null;
11438 ELSE
11439 x_charges_detail_rec.pricing_attribute18 := p_charges_detail_rec.pricing_attribute18;
11440 END IF;
11441
11442 IF p_charges_detail_rec.pricing_attribute19 = FND_API.G_MISS_CHAR THEN
11443 x_charges_detail_rec.pricing_attribute19 := null;
11444 ELSE
11445 x_charges_detail_rec.pricing_attribute19 := p_charges_detail_rec.pricing_attribute19;
11446 END IF;
11447
11448 IF p_charges_detail_rec.pricing_attribute20 = FND_API.G_MISS_CHAR THEN
11449 x_charges_detail_rec.pricing_attribute20 := null;
11450 ELSE
11451 x_charges_detail_rec.pricing_attribute20 := p_charges_detail_rec.pricing_attribute20;
11452 END IF;
11453
11454 IF p_charges_detail_rec.pricing_attribute21 = FND_API.G_MISS_CHAR THEN
11455 x_charges_detail_rec.pricing_attribute21 := null;
11456 ELSE
11457 x_charges_detail_rec.pricing_attribute21 := p_charges_detail_rec.pricing_attribute21;
11458 END IF;
11459
11460 IF p_charges_detail_rec.pricing_attribute22 = FND_API.G_MISS_CHAR THEN
11461 x_charges_detail_rec.pricing_attribute22 := null;
11462 ELSE
11463 x_charges_detail_rec.pricing_attribute22 := p_charges_detail_rec.pricing_attribute22;
11464 END IF;
11465
11466
11467 IF p_charges_detail_rec.pricing_attribute23 = FND_API.G_MISS_CHAR THEN
11468 x_charges_detail_rec.pricing_attribute23 := null;
11469 ELSE
11470 x_charges_detail_rec.pricing_attribute23 := p_charges_detail_rec.pricing_attribute23;
11471 END IF;
11472
11473 IF p_charges_detail_rec.pricing_attribute24 = FND_API.G_MISS_CHAR THEN
11474 x_charges_detail_rec.pricing_attribute24 := null;
11475 ELSE
11476 x_charges_detail_rec.pricing_attribute24 := p_charges_detail_rec.pricing_attribute24;
11477 END IF;
11478
11479 IF p_charges_detail_rec.pricing_attribute25 = FND_API.G_MISS_CHAR THEN
11480 x_charges_detail_rec.pricing_attribute25 := null;
11481 ELSE
11482 x_charges_detail_rec.pricing_attribute25 := p_charges_detail_rec.pricing_attribute25;
11483 END IF;
11484
11485 IF p_charges_detail_rec.pricing_attribute26 = FND_API.G_MISS_CHAR THEN
11486 x_charges_detail_rec.pricing_attribute26 := null;
11487 ELSE
11488 x_charges_detail_rec.pricing_attribute26 := p_charges_detail_rec.pricing_attribute26;
11489 END IF;
11490
11491 IF p_charges_detail_rec.pricing_attribute27 = FND_API.G_MISS_CHAR THEN
11492 x_charges_detail_rec.pricing_attribute27 := null;
11493 ELSE
11494 x_charges_detail_rec.pricing_attribute27 := p_charges_detail_rec.pricing_attribute27;
11495 END IF;
11496
11497 IF p_charges_detail_rec.pricing_attribute28 = FND_API.G_MISS_CHAR THEN
11498 x_charges_detail_rec.pricing_attribute28 := null;
11499 ELSE
11500 x_charges_detail_rec.pricing_attribute28 := p_charges_detail_rec.pricing_attribute28;
11501 END IF;
11502
11503 IF p_charges_detail_rec.pricing_attribute29 = FND_API.G_MISS_CHAR THEN
11504 x_charges_detail_rec.pricing_attribute29 := null;
11505 ELSE
11506 x_charges_detail_rec.pricing_attribute29 := p_charges_detail_rec.pricing_attribute29;
11507 END IF;
11508
11509 IF p_charges_detail_rec.pricing_attribute30 = FND_API.G_MISS_CHAR THEN
11510 x_charges_detail_rec.pricing_attribute30 := null;
11511 ELSE
11512 x_charges_detail_rec.pricing_attribute30 := p_charges_detail_rec.pricing_attribute30;
11513 END IF;
11514
11515 IF p_charges_detail_rec.pricing_attribute31 = FND_API.G_MISS_CHAR THEN
11516 x_charges_detail_rec.pricing_attribute31 := null;
11517 ELSE
11518 x_charges_detail_rec.pricing_attribute31 := p_charges_detail_rec.pricing_attribute31;
11519 END IF;
11520
11521 IF p_charges_detail_rec.pricing_attribute32 = FND_API.G_MISS_CHAR THEN
11522 x_charges_detail_rec.pricing_attribute32 := null;
11523 ELSE
11524 x_charges_detail_rec.pricing_attribute32 := p_charges_detail_rec.pricing_attribute32;
11525 END IF;
11526
11527 IF p_charges_detail_rec.pricing_attribute33 = FND_API.G_MISS_CHAR THEN
11528 x_charges_detail_rec.pricing_attribute33 := null;
11529 ELSE
11530 x_charges_detail_rec.pricing_attribute33 := p_charges_detail_rec.pricing_attribute33;
11531 END IF;
11532
11533 IF p_charges_detail_rec.pricing_attribute34 = FND_API.G_MISS_CHAR THEN
11534 x_charges_detail_rec.pricing_attribute34 := null;
11535 ELSE
11536 x_charges_detail_rec.pricing_attribute34 := p_charges_detail_rec.pricing_attribute34;
11537 END IF;
11538
11539 IF p_charges_detail_rec.pricing_attribute35 = FND_API.G_MISS_CHAR THEN
11540 x_charges_detail_rec.pricing_attribute35 := null;
11541 ELSE
11542 x_charges_detail_rec.pricing_attribute35 := p_charges_detail_rec.pricing_attribute35;
11543 END IF;
11544
11545 IF p_charges_detail_rec.pricing_attribute36 = FND_API.G_MISS_CHAR THEN
11546 x_charges_detail_rec.pricing_attribute36 := null;
11547 ELSE
11548 x_charges_detail_rec.pricing_attribute36 := p_charges_detail_rec.pricing_attribute36;
11549 END IF;
11550
11551 IF p_charges_detail_rec.pricing_attribute37 = FND_API.G_MISS_CHAR THEN
11552 x_charges_detail_rec.pricing_attribute37 := null;
11553 ELSE
11554 x_charges_detail_rec.pricing_attribute37 := p_charges_detail_rec.pricing_attribute37;
11555 END IF;
11556
11557 IF p_charges_detail_rec.pricing_attribute38 = FND_API.G_MISS_CHAR THEN
11558 x_charges_detail_rec.pricing_attribute38 := null;
11559 ELSE
11560 x_charges_detail_rec.pricing_attribute38 := p_charges_detail_rec.pricing_attribute38;
11561 END IF;
11562
11563 IF p_charges_detail_rec.pricing_attribute39 = FND_API.G_MISS_CHAR THEN
11564 x_charges_detail_rec.pricing_attribute39 := null;
11565 ELSE
11566 x_charges_detail_rec.pricing_attribute39 := p_charges_detail_rec.pricing_attribute39;
11567 END IF;
11568
11569 IF p_charges_detail_rec.pricing_attribute40 = FND_API.G_MISS_CHAR THEN
11570 x_charges_detail_rec.pricing_attribute40 := null;
11571 ELSE
11572 x_charges_detail_rec.pricing_attribute40 := p_charges_detail_rec.pricing_attribute40;
11573 END IF;
11574
11575 IF p_charges_detail_rec.pricing_attribute41 = FND_API.G_MISS_CHAR THEN
11576 x_charges_detail_rec.pricing_attribute41 := null;
11577 ELSE
11578 x_charges_detail_rec.pricing_attribute41 := p_charges_detail_rec.pricing_attribute41;
11579 END IF;
11580
11581 IF p_charges_detail_rec.pricing_attribute42 = FND_API.G_MISS_CHAR THEN
11582 x_charges_detail_rec.pricing_attribute42 := null;
11583 ELSE
11584 x_charges_detail_rec.pricing_attribute42 := p_charges_detail_rec.pricing_attribute42;
11585 END IF;
11586
11587 IF p_charges_detail_rec.pricing_attribute43 = FND_API.G_MISS_CHAR THEN
11588 x_charges_detail_rec.pricing_attribute43 := null;
11589 ELSE
11590 x_charges_detail_rec.pricing_attribute43 := p_charges_detail_rec.pricing_attribute43;
11591 END IF;
11592
11593 IF p_charges_detail_rec.pricing_attribute44 = FND_API.G_MISS_CHAR THEN
11594 x_charges_detail_rec.pricing_attribute44 := null;
11595 ELSE
11596 x_charges_detail_rec.pricing_attribute44 := p_charges_detail_rec.pricing_attribute44;
11597 END IF;
11598
11599 IF p_charges_detail_rec.pricing_attribute45 = FND_API.G_MISS_CHAR THEN
11600 x_charges_detail_rec.pricing_attribute45 := null;
11601 ELSE
11602 x_charges_detail_rec.pricing_attribute45 := p_charges_detail_rec.pricing_attribute45;
11603 END IF;
11604
11605 IF p_charges_detail_rec.pricing_attribute46 = FND_API.G_MISS_CHAR THEN
11606 x_charges_detail_rec.pricing_attribute46 := null;
11607 ELSE
11608 x_charges_detail_rec.pricing_attribute46 := p_charges_detail_rec.pricing_attribute46;
11609 END IF;
11610
11611 IF p_charges_detail_rec.pricing_attribute47 = FND_API.G_MISS_CHAR THEN
11612 x_charges_detail_rec.pricing_attribute47 := null;
11613 ELSE
11614 x_charges_detail_rec.pricing_attribute47 := p_charges_detail_rec.pricing_attribute47;
11615 END IF;
11616
11617 IF p_charges_detail_rec.pricing_attribute48 = FND_API.G_MISS_CHAR THEN
11618 x_charges_detail_rec.pricing_attribute48 := null;
11619 ELSE
11620 x_charges_detail_rec.pricing_attribute48 := p_charges_detail_rec.pricing_attribute48;
11621 END IF;
11622
11623 IF p_charges_detail_rec.pricing_attribute49 = FND_API.G_MISS_CHAR THEN
11624 x_charges_detail_rec.pricing_attribute49 := null;
11625 ELSE
11626 x_charges_detail_rec.pricing_attribute49 := p_charges_detail_rec.pricing_attribute49;
11627 END IF;
11628
11629 IF p_charges_detail_rec.pricing_attribute50 = FND_API.G_MISS_CHAR THEN
11630 x_charges_detail_rec.pricing_attribute50 := null;
11631 ELSE
11632 x_charges_detail_rec.pricing_attribute50 := p_charges_detail_rec.pricing_attribute50;
11633 END IF;
11634
11635 IF p_charges_detail_rec.pricing_attribute51 = FND_API.G_MISS_CHAR THEN
11636 x_charges_detail_rec.pricing_attribute51 := null;
11637 ELSE
11638 x_charges_detail_rec.pricing_attribute51 := p_charges_detail_rec.pricing_attribute51;
11639 END IF;
11640
11641 IF p_charges_detail_rec.pricing_attribute52 = FND_API.G_MISS_CHAR THEN
11642 x_charges_detail_rec.pricing_attribute52 := null;
11643 ELSE
11644 x_charges_detail_rec.pricing_attribute52 := p_charges_detail_rec.pricing_attribute52;
11645 END IF;
11646
11647 IF p_charges_detail_rec.pricing_attribute53 = FND_API.G_MISS_CHAR THEN
11648 x_charges_detail_rec.pricing_attribute53 := null;
11649 ELSE
11650 x_charges_detail_rec.pricing_attribute53 := p_charges_detail_rec.pricing_attribute53;
11651 END IF;
11652
11653 IF p_charges_detail_rec.pricing_attribute54 = FND_API.G_MISS_CHAR THEN
11654 x_charges_detail_rec.pricing_attribute54 := null;
11655 ELSE
11656 x_charges_detail_rec.pricing_attribute54 := p_charges_detail_rec.pricing_attribute54;
11657 END IF;
11658
11659 IF p_charges_detail_rec.pricing_attribute55 = FND_API.G_MISS_CHAR THEN
11660 x_charges_detail_rec.pricing_attribute55 := null;
11661 ELSE
11662 x_charges_detail_rec.pricing_attribute55 := p_charges_detail_rec.pricing_attribute55;
11663 END IF;
11664
11665 IF p_charges_detail_rec.pricing_attribute56 = FND_API.G_MISS_CHAR THEN
11666 x_charges_detail_rec.pricing_attribute56 := null;
11667 ELSE
11668 x_charges_detail_rec.pricing_attribute56 := p_charges_detail_rec.pricing_attribute56;
11669 END IF;
11670
11671 IF p_charges_detail_rec.pricing_attribute57 = FND_API.G_MISS_CHAR THEN
11672 x_charges_detail_rec.pricing_attribute57 := null;
11673 ELSE
11674 x_charges_detail_rec.pricing_attribute57 := p_charges_detail_rec.pricing_attribute57;
11675 END IF;
11676
11677 IF p_charges_detail_rec.pricing_attribute58 = FND_API.G_MISS_CHAR THEN
11678 x_charges_detail_rec.pricing_attribute58 := null;
11679 ELSE
11680 x_charges_detail_rec.pricing_attribute58 := p_charges_detail_rec.pricing_attribute58;
11681 END IF;
11682
11683 IF p_charges_detail_rec.pricing_attribute59 = FND_API.G_MISS_CHAR THEN
11684 x_charges_detail_rec.pricing_attribute59 := null;
11685 ELSE
11686 x_charges_detail_rec.pricing_attribute59 := p_charges_detail_rec.pricing_attribute59;
11687 END IF;
11688
11689 IF p_charges_detail_rec.pricing_attribute60 = FND_API.G_MISS_CHAR THEN
11690 x_charges_detail_rec.pricing_attribute60 := null;
11691 ELSE
11692 x_charges_detail_rec.pricing_attribute60 := p_charges_detail_rec.pricing_attribute60;
11693 END IF;
11694
11695 IF p_charges_detail_rec.pricing_attribute61 = FND_API.G_MISS_CHAR THEN
11696 x_charges_detail_rec.pricing_attribute61 := null;
11697 ELSE
11698 x_charges_detail_rec.pricing_attribute61 := p_charges_detail_rec.pricing_attribute61;
11699 END IF;
11700
11701 IF p_charges_detail_rec.pricing_attribute62 = FND_API.G_MISS_CHAR THEN
11702 x_charges_detail_rec.pricing_attribute62 := null;
11703 ELSE
11704 x_charges_detail_rec.pricing_attribute62 := p_charges_detail_rec.pricing_attribute62;
11705 END IF;
11706
11707 IF p_charges_detail_rec.pricing_attribute63 = FND_API.G_MISS_CHAR THEN
11708 x_charges_detail_rec.pricing_attribute63 := null;
11709 ELSE
11710 x_charges_detail_rec.pricing_attribute63 := p_charges_detail_rec.pricing_attribute63;
11711 END IF;
11712
11713 IF p_charges_detail_rec.pricing_attribute64 = FND_API.G_MISS_CHAR THEN
11714 x_charges_detail_rec.pricing_attribute64 := null;
11715 ELSE
11716 x_charges_detail_rec.pricing_attribute64 := p_charges_detail_rec.pricing_attribute64;
11717 END IF;
11718
11719 IF p_charges_detail_rec.pricing_attribute65 = FND_API.G_MISS_CHAR THEN
11720 x_charges_detail_rec.pricing_attribute65 := null;
11721 ELSE
11722 x_charges_detail_rec.pricing_attribute65 := p_charges_detail_rec.pricing_attribute65;
11723 END IF;
11724
11725 IF p_charges_detail_rec.pricing_attribute66 = FND_API.G_MISS_CHAR THEN
11726 x_charges_detail_rec.pricing_attribute66 := null;
11727 ELSE
11728 x_charges_detail_rec.pricing_attribute66 := p_charges_detail_rec.pricing_attribute66;
11729 END IF;
11730
11731 IF p_charges_detail_rec.pricing_attribute67 = FND_API.G_MISS_CHAR THEN
11732 x_charges_detail_rec.pricing_attribute67 := null;
11733 ELSE
11734 x_charges_detail_rec.pricing_attribute67 := p_charges_detail_rec.pricing_attribute67;
11735 END IF;
11736
11737 IF p_charges_detail_rec.pricing_attribute68 = FND_API.G_MISS_CHAR THEN
11738 x_charges_detail_rec.pricing_attribute68 := null;
11739 ELSE
11740 x_charges_detail_rec.pricing_attribute68 := p_charges_detail_rec.pricing_attribute68;
11741 END IF;
11742
11743 IF p_charges_detail_rec.pricing_attribute69 = FND_API.G_MISS_CHAR THEN
11744 x_charges_detail_rec.pricing_attribute69 := null;
11745 ELSE
11746 x_charges_detail_rec.pricing_attribute69 := p_charges_detail_rec.pricing_attribute69;
11747 END IF;
11748
11749 IF p_charges_detail_rec.pricing_attribute70 = FND_API.G_MISS_CHAR THEN
11750 x_charges_detail_rec.pricing_attribute70 := null;
11751 ELSE
11752 x_charges_detail_rec.pricing_attribute70 := p_charges_detail_rec.pricing_attribute70;
11753 END IF;
11754
11755 IF p_charges_detail_rec.pricing_attribute71 = FND_API.G_MISS_CHAR THEN
11756 x_charges_detail_rec.pricing_attribute71 := null;
11757 ELSE
11758 x_charges_detail_rec.pricing_attribute71 := p_charges_detail_rec.pricing_attribute71;
11759 END IF;
11760
11761 IF p_charges_detail_rec.pricing_attribute72 = FND_API.G_MISS_CHAR THEN
11762 x_charges_detail_rec.pricing_attribute72 := null;
11763 ELSE
11764 x_charges_detail_rec.pricing_attribute72 := p_charges_detail_rec.pricing_attribute72;
11765 END IF;
11766
11767 IF p_charges_detail_rec.pricing_attribute73 = FND_API.G_MISS_CHAR THEN
11768 x_charges_detail_rec.pricing_attribute73 := null;
11769 ELSE
11770 x_charges_detail_rec.pricing_attribute73 := p_charges_detail_rec.pricing_attribute73;
11771 END IF;
11772
11773 IF p_charges_detail_rec.pricing_attribute74 = FND_API.G_MISS_CHAR THEN
11774 x_charges_detail_rec.pricing_attribute74 := null;
11775 ELSE
11776 x_charges_detail_rec.pricing_attribute74 := p_charges_detail_rec.pricing_attribute74;
11777 END IF;
11778
11779 IF p_charges_detail_rec.pricing_attribute75 = FND_API.G_MISS_CHAR THEN
11780 x_charges_detail_rec.pricing_attribute75 := null;
11781 ELSE
11782 x_charges_detail_rec.pricing_attribute75 := p_charges_detail_rec.pricing_attribute75;
11783 END IF;
11784
11785 IF p_charges_detail_rec.pricing_attribute76 = FND_API.G_MISS_CHAR THEN
11786 x_charges_detail_rec.pricing_attribute76 := null;
11787 ELSE
11788 x_charges_detail_rec.pricing_attribute76 := p_charges_detail_rec.pricing_attribute76;
11789 END IF;
11790
11791 IF p_charges_detail_rec.pricing_attribute77 = FND_API.G_MISS_CHAR THEN
11792 x_charges_detail_rec.pricing_attribute77 := null;
11793 ELSE
11794 x_charges_detail_rec.pricing_attribute77 := p_charges_detail_rec.pricing_attribute77;
11795 END IF;
11796
11797 IF p_charges_detail_rec.pricing_attribute78 = FND_API.G_MISS_CHAR THEN
11798 x_charges_detail_rec.pricing_attribute78 := null;
11799 ELSE
11800 x_charges_detail_rec.pricing_attribute78 := p_charges_detail_rec.pricing_attribute78;
11801 END IF;
11802
11803 IF p_charges_detail_rec.pricing_attribute79 = FND_API.G_MISS_CHAR THEN
11804 x_charges_detail_rec.pricing_attribute79 := null;
11805 ELSE
11806 x_charges_detail_rec.pricing_attribute79 := p_charges_detail_rec.pricing_attribute79;
11807 END IF;
11808
11809 IF p_charges_detail_rec.pricing_attribute80 = FND_API.G_MISS_CHAR THEN
11810 x_charges_detail_rec.pricing_attribute80 := null;
11811 ELSE
11812 x_charges_detail_rec.pricing_attribute80 := p_charges_detail_rec.pricing_attribute80;
11813 END IF;
11814
11815 IF p_charges_detail_rec.pricing_attribute81 = FND_API.G_MISS_CHAR THEN
11816 x_charges_detail_rec.pricing_attribute81 := null;
11817 ELSE
11818 x_charges_detail_rec.pricing_attribute81 := p_charges_detail_rec.pricing_attribute81;
11819 END IF;
11820
11821 IF p_charges_detail_rec.pricing_attribute82 = FND_API.G_MISS_CHAR THEN
11822 x_charges_detail_rec.pricing_attribute82 := null;
11823 ELSE
11824 x_charges_detail_rec.pricing_attribute82 := p_charges_detail_rec.pricing_attribute82;
11825 END IF;
11826
11827 IF p_charges_detail_rec.pricing_attribute83 = FND_API.G_MISS_CHAR THEN
11828 x_charges_detail_rec.pricing_attribute83 := null;
11829 ELSE
11830 x_charges_detail_rec.pricing_attribute83 := p_charges_detail_rec.pricing_attribute83;
11831 END IF;
11832
11833 IF p_charges_detail_rec.pricing_attribute84 = FND_API.G_MISS_CHAR THEN
11834 x_charges_detail_rec.pricing_attribute84 := null;
11835 ELSE
11836 x_charges_detail_rec.pricing_attribute84 := p_charges_detail_rec.pricing_attribute84;
11837 END IF;
11838
11839 IF p_charges_detail_rec.pricing_attribute85 = FND_API.G_MISS_CHAR THEN
11840 x_charges_detail_rec.pricing_attribute85 := null;
11841 ELSE
11842 x_charges_detail_rec.pricing_attribute85 := p_charges_detail_rec.pricing_attribute85;
11843 END IF;
11844
11845 IF p_charges_detail_rec.pricing_attribute86 = FND_API.G_MISS_CHAR THEN
11846 x_charges_detail_rec.pricing_attribute86 := null;
11847 ELSE
11848 x_charges_detail_rec.pricing_attribute86 := p_charges_detail_rec.pricing_attribute86;
11849 END IF;
11850
11851 IF p_charges_detail_rec.pricing_attribute87 = FND_API.G_MISS_CHAR THEN
11852 x_charges_detail_rec.pricing_attribute87 := null;
11853 ELSE
11854 x_charges_detail_rec.pricing_attribute87 := p_charges_detail_rec.pricing_attribute87;
11855 END IF;
11856
11857 IF p_charges_detail_rec.pricing_attribute88 = FND_API.G_MISS_CHAR THEN
11858 x_charges_detail_rec.pricing_attribute88 := null;
11859 ELSE
11860 x_charges_detail_rec.pricing_attribute88 := p_charges_detail_rec.pricing_attribute88;
11861 END IF;
11862
11863 IF p_charges_detail_rec.pricing_attribute89 = FND_API.G_MISS_CHAR THEN
11864 x_charges_detail_rec.pricing_attribute89 := null;
11865 ELSE
11866 x_charges_detail_rec.pricing_attribute89 := p_charges_detail_rec.pricing_attribute89;
11867 END IF;
11868
11869 IF p_charges_detail_rec.pricing_attribute90 = FND_API.G_MISS_CHAR THEN
11870 x_charges_detail_rec.pricing_attribute90 := null;
11871 ELSE
11872 x_charges_detail_rec.pricing_attribute90 := p_charges_detail_rec.pricing_attribute90;
11873 END IF;
11874
11875 IF p_charges_detail_rec.pricing_attribute91 = FND_API.G_MISS_CHAR THEN
11876 x_charges_detail_rec.pricing_attribute91 := null;
11877 ELSE
11878 x_charges_detail_rec.pricing_attribute91 := p_charges_detail_rec.pricing_attribute91;
11879 END IF;
11880
11881 IF p_charges_detail_rec.pricing_attribute92 = FND_API.G_MISS_CHAR THEN
11882 x_charges_detail_rec.pricing_attribute92 := null;
11883 ELSE
11884 x_charges_detail_rec.pricing_attribute92 := p_charges_detail_rec.pricing_attribute92;
11885 END IF;
11886
11887 IF p_charges_detail_rec.pricing_attribute93 = FND_API.G_MISS_CHAR THEN
11888 x_charges_detail_rec.pricing_attribute93 := null;
11889 ELSE
11890 x_charges_detail_rec.pricing_attribute93 := p_charges_detail_rec.pricing_attribute93;
11891 END IF;
11892
11893 IF p_charges_detail_rec.pricing_attribute94 = FND_API.G_MISS_CHAR THEN
11894 x_charges_detail_rec.pricing_attribute94 := null;
11895 ELSE
11896 x_charges_detail_rec.pricing_attribute94 := p_charges_detail_rec.pricing_attribute94;
11897 END IF;
11898
11899 IF p_charges_detail_rec.pricing_attribute95 = FND_API.G_MISS_CHAR THEN
11900 x_charges_detail_rec.pricing_attribute95 := null;
11901 ELSE
11902 x_charges_detail_rec.pricing_attribute95 := p_charges_detail_rec.pricing_attribute95;
11903 END IF;
11904
11905 IF p_charges_detail_rec.pricing_attribute96 = FND_API.G_MISS_CHAR THEN
11906 x_charges_detail_rec.pricing_attribute96 := null;
11907 ELSE
11908 x_charges_detail_rec.pricing_attribute96 := p_charges_detail_rec.pricing_attribute96;
11909 END IF;
11910
11911 IF p_charges_detail_rec.pricing_attribute97 = FND_API.G_MISS_CHAR THEN
11912 x_charges_detail_rec.pricing_attribute97 := null;
11913 ELSE
11914 x_charges_detail_rec.pricing_attribute97 := p_charges_detail_rec.pricing_attribute97;
11915 END IF;
11916
11917 IF p_charges_detail_rec.pricing_attribute98 = FND_API.G_MISS_CHAR THEN
11918 x_charges_detail_rec.pricing_attribute98 := null;
11919 ELSE
11920 x_charges_detail_rec.pricing_attribute98 := p_charges_detail_rec.pricing_attribute98;
11921 END IF;
11922
11923 IF p_charges_detail_rec.pricing_attribute99 = FND_API.G_MISS_CHAR THEN
11924 x_charges_detail_rec.pricing_attribute99 := null;
11925 ELSE
11926 x_charges_detail_rec.pricing_attribute99 := p_charges_detail_rec.pricing_attribute99;
11927 END IF;
11928
11929 IF p_charges_detail_rec.pricing_attribute100 = FND_API.G_MISS_CHAR THEN
11930 x_charges_detail_rec.pricing_attribute100 := null;
11931 ELSE
11932 x_charges_detail_rec.pricing_attribute100 := p_charges_detail_rec.pricing_attribute100;
11933 END IF;
11934
11935 END IF;
11936
11937 END IF;
11938 -- ========================================
11939 -- Call the pricing API
11940 -- ========================================
11941 --DBMS_OUTPUT.PUT_LINE('Call the pricing API ...');
11942 --DBMS_OUTPUT.PUT_LINE('Billing Flag '||x_charges_detail_rec.billing_flag);
11943 --DBMS_OUTPUT.PUT_LINE('List Price '||p_charges_detail_rec.list_price);
11944 --DBMS_OUTPUT.PUT_LINE('After Warranty_cost '||p_charges_detail_rec.after_warranty_cost);
11945
11946 IF p_validation_mode = 'I' THEN
11947
11948 IF l_curr_in_conversion_list = 'Y' AND
11949 p_charges_detail_rec.list_price is null then --12.1.3, vpremach
11950
11951 FND_MESSAGE.SET_NAME('CS', 'CS_CHG_NOT_BASE_CURRENCY');
11952 FND_MESSAGE.Set_Token('CURRENCY_CODE', p_charges_detail_rec.currency_code);
11953 FND_MSG_PUB.Add;
11954 RAISE FND_API.G_EXC_ERROR;
11955 END IF;
11956 x_charges_detail_rec.apply_contract_discount := p_charges_detail_rec.apply_contract_discount;
11957
11958 IF x_charges_detail_rec.billing_flag = 'L' AND
11959 p_charges_detail_rec.list_price IS NOT NULL THEN
11960
11961 -- no need to call the pricing api
11962 -- assign to out record
11963
11964 x_charges_detail_rec.list_price := p_charges_detail_rec.list_price;
11965 x_charges_detail_rec.selling_price := p_charges_detail_rec.list_price;
11966
11967 --bug # 3056622 charge amount is zero for items with negative prices
11968
11969 --derive the after_warranty_cost
11970 IF x_charges_detail_rec.no_charge_flag <> 'Y' AND
11971 x_charges_detail_rec.selling_price IS NOT NULL THEN
11972
11973 --Fix for Bug # 3388373
11974 IF p_charges_detail_rec.after_warranty_cost IS NULL THEN
11975 x_charges_detail_rec.after_warranty_cost := x_charges_detail_rec.selling_price * x_charges_detail_rec.quantity_required;
11976 ELSE
11977 x_charges_detail_rec.after_warranty_cost := p_charges_detail_rec.after_warranty_cost;
11978 END IF;
11979 ELSE
11980 -- no charge flag = 'Y'
11981 x_charges_detail_rec.after_warranty_cost := 0;
11982 END IF;
11983
11984 --check to see if contract discount needs to be applied
11985 IF x_charges_detail_rec.apply_contract_discount = 'Y' AND
11986 x_charges_detail_rec.contract_line_id IS NOT NULL AND
11987 x_charges_detail_rec.no_charge_flag <> 'Y' THEN
11988
11989 --assign to out record
11990 x_charges_detail_rec.apply_contract_discount := p_charges_detail_rec.apply_contract_discount;
11991
11992 --call contracts dicounting API
11993 --DBMS_OUTPUT.PUT_LINE('Call Contracts API to Apply contracts 1');
11994
11995 CS_Est_Apply_Contract_PKG.Apply_Contract(
11996 p_coverage_id => x_charges_detail_rec.contract_line_id,
11997 p_coverage_txn_group_id => x_charges_detail_rec.coverage_txn_group_id,
11998 p_txn_billing_type_id => x_charges_detail_rec.txn_billing_type_id,
11999 P_BUSINESS_PROCESS_ID => x_charges_detail_rec.business_process_id,
12000 P_REQUEST_DATE => l_request_date,
12001 p_amount => x_charges_detail_rec.after_warranty_cost,
12002 p_discount_amount => l_contract_discount,
12003 X_RETURN_STATUS => l_return_status,
12004 X_MSG_COUNT => l_msg_count,
12005 X_MSG_DATA => l_msg_data);
12006
12007 IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
12008 FND_MESSAGE.Set_Name('CS', 'CS_CHG_APPLY_CONTRACT_WARNING');
12009 FND_MESSAGE.SET_TOKEN('REASON', l_msg_data);
12010 FND_MSG_PUB.Add;
12011 RAISE FND_API.G_EXC_ERROR;
12012 END IF;
12013
12014 --Bug Fix for Bug # 3088397
12015 IF l_contract_discount IS NOT NULL THEN
12016 --assign the contract discount to the out record
12017 x_charges_detail_rec.contract_discount_amount := x_charges_detail_rec.after_warranty_cost - l_contract_discount;
12018
12019 --apply discount
12020 x_charges_detail_rec.after_warranty_cost := l_contract_discount;
12021 ELSE
12022 -- contract discount amt should be 0
12023 --x_charges_detail_rec.contract_discount_amount := 0;
12024 null;
12025 END IF;
12026
12027 --DBMS_OUTPUT.PUT_LINE('Contract 1'||x_charges_detail_rec.contract_discount_amount);
12028
12029
12030 ELSE
12031 --Apply contract discount = 'N'
12032 --Fixed Bug # 3220253
12033 --passed p_charges_detail_rec.contract_discount_amount
12034 x_charges_detail_rec.apply_contract_discount := p_charges_detail_rec.apply_contract_discount;
12035 x_charges_detail_rec.contract_discount_amount := p_charges_detail_rec.contract_discount_amount;
12036 IF x_charges_detail_rec.contract_discount_amount IS NULL THEN
12037 x_charges_detail_rec.contract_discount_amount := 0;
12038 ELSE
12039 x_charges_detail_rec.contract_discount_amount := x_charges_detail_rec.contract_discount_amount;
12040 END IF;
12041 END IF ;
12042
12043 ELSIF
12044 --Fix # 3069583 unable to override charges for labor charge line
12045
12046 --x_charges_detail_rec.billing_flag <> 'E' AND
12047 --x_charges_detail_rec.billing_flag <> 'M' OR
12048 x_charges_detail_rec.billing_flag IN ('E','M', 'L') AND
12049 p_charges_detail_rec.after_warranty_cost IS NULL AND
12050 p_charges_detail_rec.list_price IS NULL THEN
12051 IF l_curr_in_conversion_list = 'Y' THEN --AND fnd_profile.value('CS_ENABLE_CURRENCY_CONVERSION') = 'Y' THEN --12.1.3 Multi Currency, vpremach
12052 FND_MESSAGE.SET_NAME('CS', 'CS_CHG_NOT_BASE_CURRENCY');
12053 FND_MESSAGE.Set_Token('CURRENCY_CODE', p_charges_detail_rec.currency_code);
12054 FND_MSG_PUB.Add;
12055 RAISE FND_API.G_EXC_ERROR;
12056 END IF;
12057
12058 IF ((((x_charges_detail_rec.inventory_item_id_in IS NOT NULL) AND
12059 (x_charges_detail_rec.unit_of_measure_code IS NOT NULL) AND
12060 (x_charges_detail_rec.price_list_id IS NOT NULL) AND
12061 (x_charges_detail_rec.quantity_required IS NOT NULL)))) THEN
12062
12063 --DBMS_OUTPUT.PUT_LINE('Before calling CS_Pricing_Item_Pkg.Call_Pricing_Item ...');
12064 --DBMS_OUTPUT.PUT_LINE('x_charges_detail_rec.inventory_item_id_in='||x_charges_detail_rec.inventory_item_id_in);
12065 --DBMS_OUTPUT.PUT_LINE('x_charges_detail_rec.price_list_id='||x_charges_detail_rec.price_list_id);
12066 --DBMS_OUTPUT.PUT_LINE('x_charges_detail_rec.unit_of_measure_code='||x_charges_detail_rec.unit_of_measure_code);
12067 --DBMS_OUTPUT.PUT_LINE('x_charges_detail_rec.currency_code='||x_charges_detail_rec.currency_code);
12068 --DBMS_OUTPUT.PUT_LINE('x_charges_detail_rec.quantity_required='||x_charges_detail_rec.quantity_required);
12069
12070 -- Added to fix Bug # 3819167
12071 --
12072 /*
12073 IF ((l_line_order_category_code = 'RETURN') AND
12074 (sign(x_charges_detail_rec.quantity_required) = -1)) THEN
12075 l_absolute_quantity_required := x_charges_detail_rec.quantity_required * -1;
12076 ELSE
12077 l_absolute_quantity_required := x_charges_detail_rec.quantity_required;
12078 END IF;
12079 */
12080 -- Bug 7117553
12081 l_profile_value := fnd_profile.value('CS_SR_CHG_PRIC_DATE');
12082 If l_profile_value = 'CHG_INC_DATE' Then
12083 l_pricing_date := l_incident_date;
12084 Else
12085 l_pricing_date := sysdate;
12086 End if;
12087 -- Bug 7117553
12088
12089
12090 -- Calculate the selling price
12091 CS_Pricing_Item_Pkg.Call_Pricing_Item(
12092 P_Inventory_Item_Id => x_charges_detail_rec.inventory_item_id_in,
12093 P_Price_List_Id => x_charges_detail_rec.price_list_id,
12094 P_UOM_Code => x_charges_detail_rec.unit_of_measure_code,
12095 p_Currency_Code => x_charges_detail_rec.currency_code,
12096 P_Quantity => abs(x_charges_detail_rec.quantity_required),
12097 P_incident_date => l_pricing_date, -- Bug 7117553
12098 P_Org_Id => x_charges_detail_rec.org_id,
12099 x_list_price => l_list_price,
12100 P_Pricing_Context => x_charges_detail_rec.pricing_context,
12101 P_Pricing_Attribute1 => x_charges_detail_rec.pricing_attribute1,
12102 P_Pricing_Attribute2 => x_charges_detail_rec.pricing_attribute2,
12103 P_Pricing_Attribute3 => x_charges_detail_rec.pricing_attribute3,
12104 P_Pricing_Attribute4 => x_charges_detail_rec.pricing_attribute4,
12105 P_Pricing_Attribute5 => x_charges_detail_rec.pricing_attribute5,
12106 P_Pricing_Attribute6 => x_charges_detail_rec.pricing_attribute6,
12107 P_Pricing_Attribute7 => x_charges_detail_rec.pricing_attribute7,
12108 P_Pricing_Attribute8 => x_charges_detail_rec.pricing_attribute8,
12109 P_Pricing_Attribute9 => x_charges_detail_rec.pricing_attribute9,
12110 P_Pricing_Attribute10 => x_charges_detail_rec.pricing_attribute10,
12111 P_Pricing_Attribute11 => x_charges_detail_rec.pricing_attribute11,
12112 P_Pricing_Attribute12 => x_charges_detail_rec.pricing_attribute12,
12113 P_Pricing_Attribute13 => x_charges_detail_rec.pricing_attribute13,
12114 P_Pricing_Attribute14 => x_charges_detail_rec.pricing_attribute14,
12115 P_Pricing_Attribute15 => x_charges_detail_rec.pricing_attribute15,
12116 P_Pricing_Attribute16 => x_charges_detail_rec.pricing_attribute16,
12117 P_Pricing_Attribute17 => x_charges_detail_rec.pricing_attribute17,
12118 P_Pricing_Attribute18 => x_charges_detail_rec.pricing_attribute18,
12119 P_Pricing_Attribute19 => x_charges_detail_rec.pricing_attribute19,
12120 P_Pricing_Attribute20 => x_charges_detail_rec.pricing_attribute20,
12121 P_Pricing_Attribute21 => x_charges_detail_rec.pricing_attribute21,
12122 P_Pricing_Attribute22 => x_charges_detail_rec.pricing_attribute22,
12123 P_Pricing_Attribute23 => x_charges_detail_rec.pricing_attribute23,
12124 P_Pricing_Attribute24 => x_charges_detail_rec.pricing_attribute24,
12125 P_Pricing_Attribute25 => x_charges_detail_rec.pricing_attribute25,
12126 p_Pricing_Attribute26 => x_charges_detail_rec.pricing_attribute26,
12127 P_Pricing_Attribute27 => x_charges_detail_rec.pricing_attribute27,
12128 P_Pricing_Attribute28 => x_charges_detail_rec.pricing_attribute28,
12129 P_Pricing_Attribute29 => x_charges_detail_rec.pricing_attribute29,
12130 P_Pricing_Attribute30 => x_charges_detail_rec.pricing_attribute30,
12131 P_PRICING_ATTRIBUTE31 => x_charges_detail_rec.pricing_attribute31,
12132 P_PRICING_ATTRIBUTE32 => x_charges_detail_rec.pricing_attribute32,
12133 P_PRICING_ATTRIBUTE33 => x_charges_detail_rec.pricing_attribute33,
12134 P_PRICING_ATTRIBUTE34 => x_charges_detail_rec.pricing_attribute34,
12135 P_Pricing_Attribute35 => x_charges_detail_rec.pricing_attribute35,
12136 P_Pricing_Attribute36 => x_charges_detail_rec.pricing_attribute36,
12137 P_Pricing_Attribute37 => x_charges_detail_rec.pricing_attribute37,
12138 P_Pricing_Attribute38 => x_charges_detail_rec.pricing_attribute38,
12139 P_Pricing_Attribute39 => x_charges_detail_rec.pricing_attribute39,
12140 P_Pricing_Attribute40 => x_charges_detail_rec.pricing_attribute40,
12141 P_Pricing_Attribute41 => x_charges_detail_rec.pricing_attribute41,
12142 P_Pricing_Attribute42 => x_charges_detail_rec.pricing_attribute42,
12143 P_Pricing_Attribute43 => x_charges_detail_rec.pricing_attribute43,
12144 P_Pricing_Attribute44 => x_charges_detail_rec.pricing_attribute44,
12145 P_Pricing_Attribute45 => x_charges_detail_rec.pricing_attribute45,
12146 P_Pricing_Attribute46 => x_charges_detail_rec.pricing_attribute46,
12147 P_Pricing_Attribute47 => x_charges_detail_rec.pricing_attribute47,
12148 P_Pricing_Attribute48 => x_charges_detail_rec.pricing_attribute48,
12149 P_Pricing_Attribute49 => x_charges_detail_rec.pricing_attribute49,
12150 P_Pricing_Attribute50 => x_charges_detail_rec.pricing_attribute50,
12151 P_Pricing_Attribute51 => x_charges_detail_rec.pricing_attribute51,
12152 P_Pricing_Attribute52 => x_charges_detail_rec.pricing_attribute52,
12153 P_Pricing_Attribute53 => x_charges_detail_rec.pricing_attribute53,
12154 P_Pricing_Attribute54 => x_charges_detail_rec.pricing_attribute54,
12155 P_Pricing_Attribute55 => x_charges_detail_rec.pricing_attribute55,
12156 P_Pricing_Attribute56 => x_charges_detail_rec.pricing_attribute56,
12157 P_Pricing_Attribute57 => x_charges_detail_rec.pricing_attribute57,
12158 P_Pricing_Attribute58 => x_charges_detail_rec.pricing_attribute58,
12159 P_Pricing_Attribute59 => x_charges_detail_rec.pricing_attribute59,
12160 P_Pricing_Attribute60 => x_charges_detail_rec.pricing_attribute60,
12161 P_Pricing_Attribute61 => x_charges_detail_rec.pricing_attribute61,
12162 P_Pricing_Attribute62 => x_charges_detail_rec.pricing_attribute62,
12163 P_Pricing_Attribute63 => x_charges_detail_rec.pricing_attribute63,
12164 P_Pricing_Attribute64 => x_charges_detail_rec.pricing_attribute64,
12165 P_Pricing_Attribute65 => x_charges_detail_rec.pricing_attribute65,
12166 P_Pricing_Attribute66 => x_charges_detail_rec.pricing_attribute66,
12167 P_Pricing_Attribute67 => x_charges_detail_rec.pricing_attribute67,
12168 P_Pricing_Attribute68 => x_charges_detail_rec.pricing_attribute68,
12169 P_Pricing_Attribute69 => x_charges_detail_rec.pricing_attribute69,
12170 P_Pricing_Attribute70 => x_charges_detail_rec.pricing_attribute70,
12171 P_Pricing_Attribute71 => x_charges_detail_rec.pricing_attribute71,
12172 P_Pricing_Attribute72 => x_charges_detail_rec.pricing_attribute72,
12173 P_Pricing_Attribute73 => x_charges_detail_rec.pricing_attribute73,
12174 P_Pricing_Attribute74 => x_charges_detail_rec.pricing_attribute74,
12175 P_Pricing_Attribute75 => x_charges_detail_rec.pricing_attribute75,
12176 P_Pricing_Attribute76 => x_charges_detail_rec.pricing_attribute76,
12177 P_Pricing_Attribute77 => x_charges_detail_rec.pricing_attribute77,
12178 P_Pricing_Attribute78 => x_charges_detail_rec.pricing_attribute78,
12179 P_Pricing_Attribute79 => x_charges_detail_rec.pricing_attribute79,
12180 P_Pricing_Attribute80 => x_charges_detail_rec.pricing_attribute80,
12181 P_Pricing_Attribute81 => x_charges_detail_rec.pricing_attribute81,
12182 P_Pricing_Attribute82 => x_charges_detail_rec.pricing_attribute82,
12183 P_Pricing_Attribute83 => x_charges_detail_rec.pricing_attribute83,
12184 P_Pricing_Attribute84 => x_charges_detail_rec.pricing_attribute84,
12185 P_Pricing_Attribute85 => x_charges_detail_rec.pricing_attribute85,
12186 P_Pricing_Attribute86 => x_charges_detail_rec.pricing_attribute86,
12187 P_Pricing_Attribute87 => x_charges_detail_rec.pricing_attribute87,
12188 P_Pricing_Attribute88 => x_charges_detail_rec.pricing_attribute88,
12189 P_Pricing_Attribute89 => x_charges_detail_rec.pricing_attribute89,
12190 P_Pricing_Attribute90 => x_charges_detail_rec.pricing_attribute90,
12191 P_Pricing_Attribute91 => x_charges_detail_rec.pricing_attribute91,
12192 P_Pricing_Attribute92 => x_charges_detail_rec.pricing_attribute92,
12193 P_Pricing_Attribute93 => x_charges_detail_rec.pricing_attribute93,
12194 P_Pricing_Attribute94 => x_charges_detail_rec.pricing_attribute94,
12195 P_Pricing_Attribute95 => x_charges_detail_rec.pricing_attribute95,
12196 P_Pricing_Attribute96 => x_charges_detail_rec.pricing_attribute96,
12197 P_Pricing_Attribute97 => x_charges_detail_rec.pricing_attribute97,
12198 P_Pricing_Attribute98 => x_charges_detail_rec.pricing_attribute98,
12199 P_Pricing_Attribute99 => x_charges_detail_rec.pricing_attribute99,
12200 P_Pricing_Attribute100 => x_charges_detail_rec.pricing_attribute100,
12201 x_return_status => l_return_status,
12202 x_msg_count => l_msg_count,
12203 x_msg_data => l_msg_data);
12204
12205 --DBMS_OUTPUT.PUT_LINE('After calling CS_Pricing_Item_Pkg.Call_Pricing_Item ...');
12206 --DBMS_OUTPUT.PUT_LINE('l_msg_data '||l_msg_data);
12207
12208 IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
12209 FND_MESSAGE.Set_Name('CS', 'CS_CHG_API_PRICING_ITEM_ERROR');
12210 FND_MESSAGE.set_token('INV_ID', x_charges_detail_rec.inventory_item_id_in);
12211 FND_MESSAGE.set_token('PRICE_LIST_ID', x_charges_detail_rec.price_list_id);
12212 FND_MESSAGE.set_token('UOM', x_charges_detail_rec.unit_of_measure_code);
12213 FND_MESSAGE.set_token('CURR_CODE', x_charges_detail_rec.currency_code);
12214 --FND_MESSAGE.SET_TOKEN('TEXT', l_msg_data, TRUE);
12215 FND_MSG_PUB.Add;
12216 RAISE FND_API.G_EXC_ERROR;
12217 END IF;
12218
12219 --assign to out record
12220 x_charges_detail_rec.list_price := l_list_price;
12221
12222 --bug # 3056622 charge amount is zero for items with negative prices
12223
12224 IF p_charges_detail_rec.selling_price IS NOT NULL THEN
12225 x_charges_detail_rec.selling_price := p_charges_detail_rec.selling_price;
12226 ELSE
12227 x_charges_detail_rec.selling_price := x_charges_detail_rec.list_price;
12228 END IF;
12229
12230
12231 IF x_charges_detail_rec.billing_flag = 'L' AND
12232 p_charges_detail_rec.con_pct_over_list_price IS NOT NULL THEN
12233 --get the new list price and selling price
12234 x_charges_detail_rec.list_price := x_charges_detail_rec.list_price +
12235 (x_charges_detail_rec.list_price * p_charges_detail_rec.con_pct_over_list_price/100);
12236 x_charges_detail_rec.selling_price := x_charges_detail_rec.list_price;
12237 ELSE
12238 x_charges_detail_rec.list_price := x_charges_detail_rec.list_price;
12239 x_charges_detail_rec.selling_price := x_charges_detail_rec.selling_price;
12240 END IF;
12241
12242
12243 --DBMS_OUTPUT.PUT_LINE('list_price '||x_charges_detail_rec.list_price);
12244 --DBMS_OUTPUT.PUT_LINE('Selling Price '||x_charges_detail_rec.selling_price);
12245 --DBMS_OUTPUT.PUT_LINE(' No Charge Flag is '||x_charges_detail_rec.no_charge_flag);
12246 --DBMS_OUTPUT.PUT_LINE(' Conversion needed flag '||l_conversion_needed_flag);
12247
12248 --bug # 3056622 charge amount is zero for items with negative prices
12249
12250 IF x_charges_detail_rec.no_charge_flag <> 'Y' AND x_charges_detail_rec.selling_price IS NOT NULL THEN
12251 IF l_conversion_needed_flag = 'Y' THEN
12252 IF p_charges_detail_rec.selling_price IS NOT NULL THEN
12253 x_charges_detail_rec.selling_price := x_charges_detail_rec.selling_price * x_charges_detail_rec.conversion_rate;
12254 x_charges_detail_rec.after_warranty_cost := x_charges_detail_rec.selling_price * x_charges_detail_rec.quantity_required;
12255 ELSE
12256 x_charges_detail_rec.after_warranty_cost := x_charges_detail_rec.selling_price * x_charges_detail_rec.quantity_required * x_charges_detail_rec.conversion_rate;
12257 END IF;
12258 ELSE
12259 x_charges_detail_rec.after_warranty_cost := x_charges_detail_rec.selling_price * x_charges_detail_rec.quantity_required;
12260 END IF;
12261 ELSE
12262 -- no charge flag = 'Y'
12263 x_charges_detail_rec.after_warranty_cost := 0;
12264 END IF;
12265
12266 --DBMS_OUTPUT.PUT_LINE(' after warr cost is '|| x_charges_detail_rec.after_warranty_cost);
12267
12268
12269 --check to see if contract discount needs to be applied
12270
12271 --DBMS_OUTPUT.PUT_LINE('apply contract discount '|| x_charges_detail_rec.apply_contract_discount);
12272 --DBMS_OUTPUT.PUT_LINE('contract_id '||x_charges_detail_rec.contract_id);
12273 --DBMS_OUTPUT.PUT_LINE('coverage_id '||x_charges_detail_rec.coverage_id);
12274
12275 IF x_charges_detail_rec.apply_contract_discount = 'Y' AND
12276 x_charges_detail_rec.no_charge_flag <> 'Y' AND
12277 x_charges_detail_rec.contract_line_id IS NOT NULL THEN
12278
12279 --assign to out record
12280 x_charges_detail_rec.apply_contract_discount := p_charges_detail_rec.apply_contract_discount;
12281
12282 --DBMS_OUTPUT.PUT_LINE('calling get_contract_line_id');
12283
12284 --DBMS_OUTPUT.PUT_LINE('after calling get_contract_line_id');
12285 --call contracts dicounting API
12286 --DBMS_OUTPUT.PUT_LINE('Call Contracts API to Apply contracts 2');
12287
12288 CS_Est_Apply_Contract_PKG.Apply_Contract(
12289 p_coverage_id => x_charges_detail_rec.contract_line_id,
12290 p_coverage_txn_group_id => x_charges_detail_rec.coverage_txn_group_id,
12291 p_txn_billing_type_id => x_charges_detail_rec.txn_billing_type_id,
12292 P_BUSINESS_PROCESS_ID => x_charges_detail_rec.business_process_id,
12293 P_REQUEST_DATE => l_request_date,
12294 p_amount => x_charges_detail_rec.after_warranty_cost,
12295 p_discount_amount => l_contract_discount,
12296 X_RETURN_STATUS => l_return_status,
12297 X_MSG_COUNT => l_msg_count,
12298 X_MSG_DATA => l_msg_data);
12299
12300 IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
12301 FND_MESSAGE.Set_Name('CS', 'CS_CHG_APPLY_CONTRACT_WARNING');
12302 FND_MESSAGE.SET_TOKEN('REASON', l_msg_data);
12303 FND_MSG_PUB.Add;
12304 RAISE FND_API.G_EXC_ERROR;
12305 END IF;
12306
12307 --Bug Fix for Bug # 3088397
12308 IF l_contract_discount IS NOT NULL THEN
12309 --assign the contract discount to the out record
12310 x_charges_detail_rec.contract_discount_amount := x_charges_detail_rec.after_warranty_cost - l_contract_discount;
12311
12312 --apply discount
12313 x_charges_detail_rec.after_warranty_cost := l_contract_discount;
12314
12315 ELSE
12316 -- contract discount amt should be 0
12317 --x_charges_detail_rec.contract_discount_amount := 0;
12318 null;
12319 END IF;
12320 --DBMS_OUTPUT.PUT_LINE('l_contract_discount'||l_contract_discount);
12321 --DBMS_OUTPUT.PUT_LINE('Contract 2'||x_charges_detail_rec.contract_discount_amount);
12322
12323 ELSE
12324 --Apply contract discount = 'N'
12325 --Fixed Bug # 3220253
12326 --passed p_charges_detail_rec.contract_discount_amount
12327 x_charges_detail_rec.apply_contract_discount := p_charges_detail_rec.apply_contract_discount;
12328 x_charges_detail_rec.contract_discount_amount := p_charges_detail_rec.contract_discount_amount;
12329
12330 IF x_charges_detail_rec.contract_discount_amount IS NULL THEN
12331 x_charges_detail_rec.contract_discount_amount := 0;
12332 ELSE
12333 x_charges_detail_rec.contract_discount_amount := x_charges_detail_rec.contract_discount_amount;
12334 END IF;
12335
12336 END IF ;
12337
12338
12339 ELSE
12340 --x_charges_detail_rec.inventory_item_id_in IS NULL
12341 --x_charges_detail_rec.unit_of_measure_code IS NULL
12342 --x_charges_detail_rec.price_list_id IS NULL
12343 --x_charges_detail_rec.quantity_required IS NULL
12344 --the list price cannot be derived and the
12345 --after warranty cost cannot be computed
12346 --assign 0 to list_price and after_warranty_cost
12347 x_charges_detail_rec.list_price := 0;
12348 x_charges_detail_rec.selling_price := 0;
12349 x_charges_detail_rec.after_warranty_cost := 0;
12350 x_charges_detail_rec.contract_discount_amount := 0;
12351
12352 END IF;
12353
12354 --Added to fix bug # 3217757
12355 --debriefed expense line not displaying correct amount
12356
12357 ELSIF x_charges_detail_rec.billing_flag = 'E' AND
12358 x_charges_detail_rec.source_code = 'SD' AND
12359 p_charges_detail_rec.after_warranty_cost IS NOT NULL THEN
12360
12361 IF p_charges_detail_rec.list_price IS NULL THEN --12.1.3 Multi Currency, vpremach
12362 IF l_curr_in_conversion_list = 'Y' THEN --AND fnd_profile.value('CS_ENABLE_CURRENCY_CONVERSION') = 'Y' THEN
12363 FND_MESSAGE.SET_NAME('CS', 'CS_CHG_NOT_BASE_CURRENCY');
12364 FND_MESSAGE.Set_Token('CURRENCY_CODE', p_charges_detail_rec.currency_code);
12365 FND_MSG_PUB.Add;
12366 RAISE FND_API.G_EXC_ERROR;
12367 END IF;
12368 END IF;
12369 --DBMS_OUTPUT.PUT_LINE('Expense line with after warr cost ');
12370 /* Start Bug 6960562 */
12371 IF l_line_order_category_code = 'RETURN' THEN
12372 x_charges_detail_rec.after_warranty_cost := p_charges_detail_rec.after_warranty_cost * x_charges_detail_rec.quantity_required;
12373 ELSE
12374 -- Assign the after warranty that comes on the line
12375 x_charges_detail_rec.after_warranty_cost := p_charges_detail_rec.after_warranty_cost;
12376 END IF;
12377 /* End Bug 6960562 */
12378 x_charges_detail_rec.list_price := p_charges_detail_rec.after_warranty_cost;
12379
12380 IF l_conversion_needed_flag = 'Y' THEN
12381 --assign coverted amt to after_list_price
12382 x_charges_detail_rec.list_price := x_charges_detail_rec.list_price * x_charges_detail_rec.conversion_rate;
12383
12384 --bug # 3056600 charge amount is zero for items with negative prices
12385
12386 IF p_charges_detail_rec.selling_price IS NOT NULL THEN
12387 x_charges_detail_rec.selling_price := p_charges_detail_rec.selling_price * x_charges_detail_rec.conversion_rate;
12388 ELSE
12389 x_charges_detail_rec.selling_price := x_charges_detail_rec.list_price;
12390 END IF;
12391
12392 -- Fixed second issue in Bug 3468146
12393 -- If the line originates from SD and has a after_warranty_cost
12394 -- but the no_charge_flag = 'Y' then make after_warranty_cost = 0
12395
12396 IF x_charges_detail_rec.no_charge_flag = 'Y' THEN
12397 x_charges_detail_rec.after_warranty_cost := 0;
12398 ELSE
12399 x_charges_detail_rec.after_warranty_cost := x_charges_detail_rec.after_warranty_cost * x_charges_detail_rec.conversion_rate;
12400 END IF;
12401
12402 ELSE
12403 --l_conversion_needed_flag = 'N'
12404 --bug # 3056600 charge amount is zero for items with negative prices
12405 IF p_charges_detail_rec.selling_price IS NOT NULL THEN
12406 x_charges_detail_rec.selling_price := p_charges_detail_rec.selling_price;
12407 ELSE
12408 x_charges_detail_rec.selling_price := x_charges_detail_rec.list_price;
12409 END IF;
12410
12411 -- Fixed second issue in Bug 3468146
12412 -- If the line originates from SD and has a after_warranty_cost
12413 -- but the no_charge_flag = 'Y' then make after_warranty_cost = 0
12414 IF x_charges_detail_rec.no_charge_flag = 'Y' THEN
12415 x_charges_detail_rec.after_warranty_cost := 0;
12416 END IF;
12417 END IF;
12418
12419 --Fixed Bug # 3468146
12420 --need to do this here so that contract discounting is done correctly
12421 --re-set the no_charge_flag for Charge Lines
12422 --since the line has come with after warranty cost from upstream
12423 IF x_charges_detail_rec.after_warranty_cost <> 0 THEN
12424 x_charges_detail_rec.no_charge_flag := 'N';
12425 END IF;
12426
12427
12428 --DBMS_OUTPUT.PUT_LINE('re-setting the no_charge_flag' ||x_charges_detail_rec.no_charge_flag);
12429
12430 IF x_charges_detail_rec.apply_contract_discount = 'Y' AND
12431 x_charges_detail_rec.no_charge_flag <> 'Y' AND
12432 x_charges_detail_rec.contract_line_id IS NOT NULL THEN
12433
12434 --call contracts dicounting API
12435 CS_Est_Apply_Contract_PKG.Apply_Contract (
12436 p_coverage_id => x_charges_detail_rec.contract_line_id,
12437 p_coverage_txn_group_id => x_charges_detail_rec.coverage_txn_group_id,
12438 p_business_process_id => x_charges_detail_rec.business_process_id,
12439 p_request_date => l_request_date,
12440 p_txn_billing_type_id => x_charges_detail_rec.txn_billing_type_id,
12441 p_amount => x_charges_detail_rec.after_warranty_cost,
12442 p_discount_amount => l_contract_discount,
12443 X_RETURN_STATUS => l_return_status,
12444 X_MSG_COUNT => l_msg_count,
12445 X_MSG_DATA => l_msg_data);
12446
12447 IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
12448 FND_MESSAGE.Set_Name('CS', 'CS_CHG_APPLY_CONTRACT_WARNING');
12449 FND_MESSAGE.SET_TOKEN('REASON', l_msg_data);
12450 FND_MSG_PUB.Add;
12451 RAISE FND_API.G_EXC_ERROR;
12452 END IF;
12453
12454 IF l_contract_discount IS NOT NULL THEN
12455 --assign the contract discount to the out record
12456 x_charges_detail_rec.contract_discount_amount := x_charges_detail_rec.after_warranty_cost - l_contract_discount;
12457
12458 --apply discount
12459 x_charges_detail_rec.after_warranty_cost := l_contract_discount;
12460
12461 ELSE
12462 -- contract discount amt should be 0
12463 --x_charges_detail_rec.contract_discount_amount := 0;
12464 null;
12465 END IF;
12466
12467 ELSE
12468 --Apply contract discount = 'N'
12469 --Fixed Bug # 3220253
12470 --passed p_charges_detail_rec.contract_discount_amount
12471 x_charges_detail_rec.apply_contract_discount := p_charges_detail_rec.apply_contract_discount;
12472 x_charges_detail_rec.contract_discount_amount := p_charges_detail_rec.contract_discount_amount;
12473
12474 IF x_charges_detail_rec.contract_discount_amount IS NULL THEN
12475 x_charges_detail_rec.contract_discount_amount := 0;
12476 ELSE
12477 x_charges_detail_rec.contract_discount_amount := x_charges_detail_rec.contract_discount_amount;
12478 END IF;
12479 END IF ;
12480
12481
12482 ELSIF
12483 --Fix # 3069583 unable to override charges for labor charge line
12484 x_charges_detail_rec.billing_flag IN ('E', 'M', 'L') AND
12485 p_charges_detail_rec.after_warranty_cost IS NOT NULL THEN
12486
12487 IF p_charges_detail_rec.list_price IS NULL THEN --12.1.3 Multi Currency, vpremach
12488 IF l_curr_in_conversion_list = 'Y' THEN --AND fnd_profile.value('CS_ENABLE_CURRENCY_CONVERSION') = 'Y' THEN
12489 FND_MESSAGE.SET_NAME('CS', 'CS_CHG_NOT_BASE_CURRENCY');
12490 FND_MESSAGE.Set_Token('CURRENCY_CODE', p_charges_detail_rec.currency_code);
12491 FND_MSG_PUB.Add;
12492 RAISE FND_API.G_EXC_ERROR;
12493 END IF;
12494 END IF;
12495
12496 --DBMS_OUTPUT.PUT_LINE('Expense line with after warr cost ');
12497 --DBMS_OUTPUT.PUT_LINE('l_conversion_needed_flag '||l_conversion_needed_flag);
12498 --DBMS_OUTPUT.PUT_LINE('after_warranty_cost = '||p_charges_detail_rec.after_warranty_cost );
12499
12500 -- Added to fix Bug # 3819167
12501 --
12502 /*
12503 IF ((l_line_order_category_code = 'RETURN') AND
12504 (sign(x_charges_detail_rec.quantity_required) = -1)) THEN
12505 l_absolute_quantity_required := x_charges_detail_rec.quantity_required * -1;
12506 ELSE
12507 l_absolute_quantity_required := x_charges_detail_rec.quantity_required;
12508 END IF;
12509 */
12510
12511 IF nvl(l_curr_in_conversion_list,'N') <> 'Y' Then
12512
12513 -- Call the pricing API just to verify that the item is on the price list
12514 CS_Pricing_Item_Pkg.Call_Pricing_Item(
12515 P_Inventory_Item_Id => x_charges_detail_rec.inventory_item_id_in,
12516 P_Price_List_Id => x_charges_detail_rec.price_list_id,
12517 P_UOM_Code => x_charges_detail_rec.unit_of_measure_code,
12518 p_Currency_Code => x_charges_detail_rec.currency_code,
12519 P_Quantity => abs(x_charges_detail_rec.quantity_required),
12520 P_Org_Id => x_charges_detail_rec.org_id,
12521 x_list_price => l_list_price,
12522 P_Pricing_Context => x_charges_detail_rec.pricing_context,
12523 P_Pricing_Attribute1 => x_charges_detail_rec.pricing_attribute1,
12524 P_Pricing_Attribute2 => x_charges_detail_rec.pricing_attribute2,
12525 P_Pricing_Attribute3 => x_charges_detail_rec.pricing_attribute3,
12526 P_Pricing_Attribute4 => x_charges_detail_rec.pricing_attribute4,
12527 P_Pricing_Attribute5 => x_charges_detail_rec.pricing_attribute5,
12528 P_Pricing_Attribute6 => x_charges_detail_rec.pricing_attribute6,
12529 P_Pricing_Attribute7 => x_charges_detail_rec.pricing_attribute7,
12530 P_Pricing_Attribute8 => x_charges_detail_rec.pricing_attribute8,
12531 P_Pricing_Attribute9 => x_charges_detail_rec.pricing_attribute9,
12532 P_Pricing_Attribute10 => x_charges_detail_rec.pricing_attribute10,
12533 P_Pricing_Attribute11 => x_charges_detail_rec.pricing_attribute11,
12534 P_Pricing_Attribute12 => x_charges_detail_rec.pricing_attribute12,
12535 P_Pricing_Attribute13 => x_charges_detail_rec.pricing_attribute13,
12536 P_Pricing_Attribute14 => x_charges_detail_rec.pricing_attribute14,
12537 P_Pricing_Attribute15 => x_charges_detail_rec.pricing_attribute15,
12538 P_Pricing_Attribute16 => x_charges_detail_rec.pricing_attribute16,
12539 P_Pricing_Attribute17 => x_charges_detail_rec.pricing_attribute17,
12540 P_Pricing_Attribute18 => x_charges_detail_rec.pricing_attribute18,
12541 P_Pricing_Attribute19 => x_charges_detail_rec.pricing_attribute19,
12542 P_Pricing_Attribute20 => x_charges_detail_rec.pricing_attribute20,
12543 P_Pricing_Attribute21 => x_charges_detail_rec.pricing_attribute21,
12544 P_Pricing_Attribute22 => x_charges_detail_rec.pricing_attribute22,
12545 P_Pricing_Attribute23 => x_charges_detail_rec.pricing_attribute23,
12546 P_Pricing_Attribute24 => x_charges_detail_rec.pricing_attribute24,
12547 P_Pricing_Attribute25 => x_charges_detail_rec.pricing_attribute25,
12548 p_Pricing_Attribute26 => x_charges_detail_rec.pricing_attribute26,
12549 P_Pricing_Attribute27 => x_charges_detail_rec.pricing_attribute27,
12550 P_Pricing_Attribute28 => x_charges_detail_rec.pricing_attribute28,
12551 P_Pricing_Attribute29 => x_charges_detail_rec.pricing_attribute29,
12552 P_Pricing_Attribute30 => x_charges_detail_rec.pricing_attribute30,
12553 P_PRICING_ATTRIBUTE31 => x_charges_detail_rec.pricing_attribute31,
12554 P_PRICING_ATTRIBUTE32 => x_charges_detail_rec.pricing_attribute32,
12555 P_PRICING_ATTRIBUTE33 => x_charges_detail_rec.pricing_attribute33,
12556 P_PRICING_ATTRIBUTE34 => x_charges_detail_rec.pricing_attribute34,
12557 P_Pricing_Attribute35 => x_charges_detail_rec.pricing_attribute35,
12558 P_Pricing_Attribute36 => x_charges_detail_rec.pricing_attribute36,
12559 P_Pricing_Attribute37 => x_charges_detail_rec.pricing_attribute37,
12560 P_Pricing_Attribute38 => x_charges_detail_rec.pricing_attribute38,
12561 P_Pricing_Attribute39 => x_charges_detail_rec.pricing_attribute39,
12562 P_Pricing_Attribute40 => x_charges_detail_rec.pricing_attribute40,
12563 P_Pricing_Attribute41 => x_charges_detail_rec.pricing_attribute41,
12564 P_Pricing_Attribute42 => x_charges_detail_rec.pricing_attribute42,
12565 P_Pricing_Attribute43 => x_charges_detail_rec.pricing_attribute43,
12566 P_Pricing_Attribute44 => x_charges_detail_rec.pricing_attribute44,
12567 P_Pricing_Attribute45 => x_charges_detail_rec.pricing_attribute45,
12568 P_Pricing_Attribute46 => x_charges_detail_rec.pricing_attribute46,
12569 P_Pricing_Attribute47 => x_charges_detail_rec.pricing_attribute47,
12570 P_Pricing_Attribute48 => x_charges_detail_rec.pricing_attribute48,
12571 P_Pricing_Attribute49 => x_charges_detail_rec.pricing_attribute49,
12572 P_Pricing_Attribute50 => x_charges_detail_rec.pricing_attribute50,
12573 P_Pricing_Attribute51 => x_charges_detail_rec.pricing_attribute51,
12574 P_Pricing_Attribute52 => x_charges_detail_rec.pricing_attribute52,
12575 P_Pricing_Attribute53 => x_charges_detail_rec.pricing_attribute53,
12576 P_Pricing_Attribute54 => x_charges_detail_rec.pricing_attribute54,
12577 P_Pricing_Attribute55 => x_charges_detail_rec.pricing_attribute55,
12578 P_Pricing_Attribute56 => x_charges_detail_rec.pricing_attribute56,
12579 P_Pricing_Attribute57 => x_charges_detail_rec.pricing_attribute57,
12580 P_Pricing_Attribute58 => x_charges_detail_rec.pricing_attribute58,
12581 P_Pricing_Attribute59 => x_charges_detail_rec.pricing_attribute59,
12582 P_Pricing_Attribute60 => x_charges_detail_rec.pricing_attribute60,
12583 P_Pricing_Attribute61 => x_charges_detail_rec.pricing_attribute61,
12584 P_Pricing_Attribute62 => x_charges_detail_rec.pricing_attribute62,
12585 P_Pricing_Attribute63 => x_charges_detail_rec.pricing_attribute63,
12586 P_Pricing_Attribute64 => x_charges_detail_rec.pricing_attribute64,
12587 P_Pricing_Attribute65 => x_charges_detail_rec.pricing_attribute65,
12588 P_Pricing_Attribute66 => x_charges_detail_rec.pricing_attribute66,
12589 P_Pricing_Attribute67 => x_charges_detail_rec.pricing_attribute67,
12590 P_Pricing_Attribute68 => x_charges_detail_rec.pricing_attribute68,
12591 P_Pricing_Attribute69 => x_charges_detail_rec.pricing_attribute69,
12592 P_Pricing_Attribute70 => x_charges_detail_rec.pricing_attribute70,
12593 P_Pricing_Attribute71 => x_charges_detail_rec.pricing_attribute71,
12594 P_Pricing_Attribute72 => x_charges_detail_rec.pricing_attribute72,
12595 P_Pricing_Attribute73 => x_charges_detail_rec.pricing_attribute73,
12596 P_Pricing_Attribute74 => x_charges_detail_rec.pricing_attribute74,
12597 P_Pricing_Attribute75 => x_charges_detail_rec.pricing_attribute75,
12598 P_Pricing_Attribute76 => x_charges_detail_rec.pricing_attribute76,
12599 P_Pricing_Attribute77 => x_charges_detail_rec.pricing_attribute77,
12600 P_Pricing_Attribute78 => x_charges_detail_rec.pricing_attribute78,
12601 P_Pricing_Attribute79 => x_charges_detail_rec.pricing_attribute79,
12602 P_Pricing_Attribute80 => x_charges_detail_rec.pricing_attribute80,
12603 P_Pricing_Attribute81 => x_charges_detail_rec.pricing_attribute81,
12604 P_Pricing_Attribute82 => x_charges_detail_rec.pricing_attribute82,
12605 P_Pricing_Attribute83 => x_charges_detail_rec.pricing_attribute83,
12606 P_Pricing_Attribute84 => x_charges_detail_rec.pricing_attribute84,
12607 P_Pricing_Attribute85 => x_charges_detail_rec.pricing_attribute85,
12608 P_Pricing_Attribute86 => x_charges_detail_rec.pricing_attribute86,
12609 P_Pricing_Attribute87 => x_charges_detail_rec.pricing_attribute87,
12610 P_Pricing_Attribute88 => x_charges_detail_rec.pricing_attribute88,
12611 P_Pricing_Attribute89 => x_charges_detail_rec.pricing_attribute89,
12612 P_Pricing_Attribute90 => x_charges_detail_rec.pricing_attribute90,
12613 P_Pricing_Attribute91 => x_charges_detail_rec.pricing_attribute91,
12614 P_Pricing_Attribute92 => x_charges_detail_rec.pricing_attribute92,
12615 P_Pricing_Attribute93 => x_charges_detail_rec.pricing_attribute93,
12616 P_Pricing_Attribute94 => x_charges_detail_rec.pricing_attribute94,
12617 P_Pricing_Attribute95 => x_charges_detail_rec.pricing_attribute95,
12618 P_Pricing_Attribute96 => x_charges_detail_rec.pricing_attribute96,
12619 P_Pricing_Attribute97 => x_charges_detail_rec.pricing_attribute97,
12620 P_Pricing_Attribute98 => x_charges_detail_rec.pricing_attribute98,
12621 P_Pricing_Attribute99 => x_charges_detail_rec.pricing_attribute99,
12622 P_Pricing_Attribute100 => x_charges_detail_rec.pricing_attribute100,
12623 x_return_status => l_return_status,
12624 x_msg_count => l_msg_count,
12625 x_msg_data => l_msg_data);
12626
12627 --DBMS_OUTPUT.PUT_LINE('After calling CS_Pricing_Item_Pkg.Call_Pricing_Item ...');
12628 --DBMS_OUTPUT.PUT_LINE('l_msg_data '||l_msg_data);
12629
12630 IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
12631 FND_MESSAGE.Set_Name('CS', 'CS_CHG_API_PRICING_ITEM_ERROR');
12632 FND_MESSAGE.set_token('INV_ID', x_charges_detail_rec.inventory_item_id_in);
12633 FND_MESSAGE.set_token('PRICE_LIST_ID', x_charges_detail_rec.price_list_id);
12634 FND_MESSAGE.set_token('UOM', x_charges_detail_rec.unit_of_measure_code);
12635 FND_MESSAGE.set_token('CURR_CODE', x_charges_detail_rec.currency_code);
12636 --FND_MESSAGE.SET_TOKEN('TEXT', l_msg_data, TRUE);
12637 FND_MSG_PUB.Add;
12638 RAISE FND_API.G_EXC_ERROR;
12639 END IF;
12640 END IF;
12641
12642
12643 -- Assign the after warranty that comes on the line
12644 x_charges_detail_rec.after_warranty_cost := p_charges_detail_rec.after_warranty_cost;
12645
12646 IF l_conversion_needed_flag = 'Y' THEN
12647
12648 --assign coverted amt to after_warranty_cost
12649 x_charges_detail_rec.after_warranty_cost := x_charges_detail_rec.after_warranty_cost * x_charges_detail_rec.conversion_rate;
12650 IF l_curr_in_conversion_list = 'Y' --AND fnd_profile.value('CS_ENABLE_CURRENCY_CONVERSION') = 'Y' --12.1.3 Multi Currency, vpremach
12651 AND p_charges_detail_rec.list_price IS NOT NULL THEN
12652 x_charges_detail_rec.list_price := p_charges_detail_rec.list_price;
12653 ELSE
12654 x_charges_detail_rec.list_price := l_list_price;
12655 END IF;
12656
12657 --bug # 3056622 charge amount is zero for items with negative prices
12658
12659 IF p_charges_detail_rec.selling_price IS NOT NULL THEN
12660 x_charges_detail_rec.selling_price := p_charges_detail_rec.selling_price * x_charges_detail_rec.conversion_rate;
12661 ELSE
12662 x_charges_detail_rec.selling_price := x_charges_detail_rec.list_price;
12663 END IF;
12664
12665 ELSE
12666
12667 x_charges_detail_rec.after_warranty_cost := p_charges_detail_rec.after_warranty_cost;
12668 IF l_curr_in_conversion_list = 'Y' --AND fnd_profile.value('CS_ENABLE_CURRENCY_CONVERSION') = 'Y' --12.1.3 Multi Currency, vpremach
12669 AND p_charges_detail_rec.list_price IS NOT NULL THEN
12670 x_charges_detail_rec.list_price := p_charges_detail_rec.list_price;
12671 ELSE
12672 x_charges_detail_rec.list_price := l_list_price;
12673 END IF;
12674
12675 --bug # 3056622 charge amount is zero for items with negative prices
12676
12677 IF p_charges_detail_rec.selling_price IS NOT NULL THEN
12678 x_charges_detail_rec.selling_price := p_charges_detail_rec.selling_price;
12679 ELSE
12680 x_charges_detail_rec.selling_price := x_charges_detail_rec.list_price;
12681 END IF;
12682
12683 END IF;
12684
12685 --DBMS_OUTPUT.PUT_LINE(' after_warranty_cost '||x_charges_detail_rec.after_warranty_cost );
12686
12687 --Fixed Bug # 3468146
12688 --need to do this here so that contract discounting is done correctly
12689 --re-set the no_charge_flag for Charge Lines
12690 --since the line has come with after warranty cost from upstream
12691 IF x_charges_detail_rec.after_warranty_cost <> 0 THEN
12692 x_charges_detail_rec.no_charge_flag := 'N';
12693 END IF;
12694
12695
12696 --DBMS_OUTPUT.PUT_LINE('re-setting the no_charge_flag' ||x_charges_detail_rec.no_charge_flag);
12697
12698
12699 IF x_charges_detail_rec.apply_contract_discount = 'Y' AND
12700 x_charges_detail_rec.no_charge_flag <> 'Y' AND
12701 x_charges_detail_rec.contract_line_id IS NOT NULL THEN
12702
12703 --call contracts dicounting API
12704 CS_Est_Apply_Contract_PKG.Apply_Contract (
12705 p_coverage_id => x_charges_detail_rec.contract_line_id,
12706 p_coverage_txn_group_id => x_charges_detail_rec.coverage_txn_group_id,
12707 p_business_process_id => x_charges_detail_rec.business_process_id,
12708 p_request_date => l_request_date,
12709 p_txn_billing_type_id => x_charges_detail_rec.txn_billing_type_id,
12710 p_amount => x_charges_detail_rec.after_warranty_cost,
12711 p_discount_amount => l_contract_discount,
12712 X_RETURN_STATUS => l_return_status,
12713 X_MSG_COUNT => l_msg_count,
12714 X_MSG_DATA => l_msg_data);
12715
12716 IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
12717 FND_MESSAGE.Set_Name('CS', 'CS_CHG_APPLY_CONTRACT_WARNING');
12718 FND_MESSAGE.SET_TOKEN('REASON', l_msg_data);
12719 FND_MSG_PUB.Add;
12720 RAISE FND_API.G_EXC_ERROR;
12721 END IF;
12722
12723 --Bug Fix for Bug # 3088397
12724 IF l_contract_discount IS NOT NULL THEN
12725 --assign the contract discount to the out record
12726 x_charges_detail_rec.contract_discount_amount := x_charges_detail_rec.after_warranty_cost - l_contract_discount;
12727
12728 --apply discount
12729 x_charges_detail_rec.after_warranty_cost := l_contract_discount;
12730
12731 ELSE
12732 -- contract discount amt should be 0
12733 --x_charges_detail_rec.contract_discount_amount := 0;
12734 null;
12735 END IF;
12736
12737 ELSE
12738 --Apply contract discount = 'N'
12739 --Fixed Bug # 3220253
12740 --passed p_charges_detail_rec.contract_discount_amount
12741 x_charges_detail_rec.apply_contract_discount := p_charges_detail_rec.apply_contract_discount;
12742 x_charges_detail_rec.contract_discount_amount := p_charges_detail_rec.contract_discount_amount;
12743
12744 IF x_charges_detail_rec.contract_discount_amount IS NULL THEN
12745 x_charges_detail_rec.contract_discount_amount := 0;
12746 ELSE
12747 x_charges_detail_rec.contract_discount_amount := x_charges_detail_rec.contract_discount_amount;
12748 END IF;
12749 END IF ;
12750 END IF;
12751 IF l_line_order_category_code = 'ORDER' THEN --Bug 6960562
12752 /* Start : 5705568 */
12753 -- If x_charges_detail_rec.after_warranty_cost < 0 Then
12754 -- Bug 8305664 removed the and condition in the if statement
12755 If x_charges_detail_rec.after_warranty_cost < 0 Then -- bug 7459205
12756 x_charges_detail_rec.after_warranty_cost := 0;
12757 End If;
12758 /* End : 5705568 */
12759 End If;
12760 ELSIF p_validation_mode = 'U' THEN
12761
12762 IF l_curr_in_conversion_list = 'Y' AND p_charges_detail_rec.list_price is null then --12.1.3, vpremach
12763 FND_MESSAGE.SET_NAME('CS', 'CS_CHG_NOT_BASE_CURRENCY');
12764 FND_MESSAGE.Set_Token('CURRENCY_CODE', p_charges_detail_rec.currency_code);
12765 FND_MSG_PUB.Add;
12766 RAISE FND_API.G_EXC_ERROR;
12767 END IF;
12768 --DBMS_OUTPUT.PUT_LINE('In Update of Pricing API');
12769 --DBMS_OUTPUT.PUT_LINE('Billing Flag '||x_charges_detail_rec.billing_flag);
12770 --DBMS_OUTPUT.PUT_LINE('AFter_warranty_cost '||p_charges_detail_rec.after_warranty_cost);
12771 --DBMS_OUTPUT.PUT_LINE('selling price '||p_charges_detail_rec.selling_price);
12772
12773 IF x_charges_detail_rec.billing_flag = 'L' AND
12774 p_charges_detail_rec.list_price <> FND_API.G_MISS_NUM AND
12775 p_charges_detail_rec.list_price IS NOT NULL THEN
12776
12777 IF p_charges_detail_rec.list_price <> l_db_det_rec.list_price THEN
12778
12779 l_calc_sp := 'Y';
12780
12781
12782 -- no need to call the pricing api
12783 -- assign to out record
12784 x_charges_detail_rec.list_price := p_charges_detail_rec.list_price;
12785 x_charges_detail_rec.selling_price := p_charges_detail_rec.list_price;
12786
12787 --bug # 3056622 charge amount is zero for items with negative prices
12788
12789 --derive the after_warranty_cost
12790 IF x_charges_detail_rec.no_charge_flag <> 'Y' AND
12791 x_charges_detail_rec.selling_price IS NOT NULL THEN
12792
12793 --Fix for Bug # 3388373
12794 IF p_charges_detail_rec.after_warranty_cost IS NOT NULL THEN
12795
12796 x_charges_detail_rec.after_warranty_cost := p_charges_detail_rec.after_warranty_cost;
12797 l_calc_sp := 'N';
12798 ELSIF p_charges_detail_rec.after_warranty_cost = FND_API.G_MISS_NUM THEN
12799 x_charges_detail_rec.after_warranty_cost := l_db_det_rec.after_warranty_cost;
12800 l_calc_sp := 'N';
12801 ELSE
12802 --after warr cost is null
12803 x_charges_detail_rec.after_warranty_cost := x_charges_detail_rec.selling_price * x_charges_detail_rec.quantity_required;
12804 END IF;
12805
12806 ELSE
12807 -- no charge flag = 'Y'
12808 x_charges_detail_rec.after_warranty_cost := 0;
12809 END IF;
12810
12811 --check to see if contract discount needs to be applied
12812 IF x_charges_detail_rec.apply_contract_discount = 'Y' AND
12813 x_charges_detail_rec.no_charge_flag <> 'Y' AND
12814 x_charges_detail_rec.contract_line_id IS NOT NULL THEN
12815
12816 --assign to out record
12817 x_charges_detail_rec.apply_contract_discount := p_charges_detail_rec.apply_contract_discount;
12818
12819 --call contracts dicounting API
12820 --DBMS_OUTPUT.PUT_LINE('Call Contracts API to Apply contracts 3');
12821
12822 CS_Est_Apply_Contract_PKG.Apply_Contract(
12823 p_coverage_id => x_charges_detail_rec.contract_line_id,
12824 p_coverage_txn_group_id => x_charges_detail_rec.coverage_txn_group_id,
12825 p_txn_billing_type_id => x_charges_detail_rec.txn_billing_type_id,
12826 P_BUSINESS_PROCESS_ID => x_charges_detail_rec.business_process_id,
12827 P_REQUEST_DATE => l_request_date,
12828 p_amount => x_charges_detail_rec.after_warranty_cost,
12829 p_discount_amount => l_contract_discount,
12830 X_RETURN_STATUS => l_return_status,
12831 X_MSG_COUNT => l_msg_count,
12832 X_MSG_DATA => l_msg_data);
12833
12834 IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
12835 FND_MESSAGE.Set_Name('CS', 'CS_CHG_APPLY_CONTRACT_WARNING');
12836 FND_MESSAGE.SET_TOKEN('REASON', l_msg_data);
12837 FND_MSG_PUB.Add;
12838 RAISE FND_API.G_EXC_ERROR;
12839 END IF;
12840
12841 --Bug Fix for Bug # 3088397
12842 IF l_contract_discount IS NOT NULL THEN
12843 --assign the contract discount to the out record
12844 x_charges_detail_rec.contract_discount_amount := x_charges_detail_rec.after_warranty_cost - l_contract_discount;
12845
12846 --apply discount
12847 x_charges_detail_rec.after_warranty_cost := l_contract_discount;
12848 ELSE
12849 -- contract discount amt should be 0
12850 --x_charges_detail_rec.contract_discount_amount := 0;
12851 null;
12852 END IF;
12853
12854 --DBMS_OUTPUT.PUT_LINE('Contract 3'||x_charges_detail_rec.contract_discount_amount);
12855
12856 ELSE
12857 --Apply contract discount = 'N'
12858 --Fixed Bug # 3220253
12859 --passed p_charges_detail_rec.contract_discount_amount
12860 x_charges_detail_rec.apply_contract_discount := p_charges_detail_rec.apply_contract_discount;
12861 x_charges_detail_rec.contract_discount_amount := p_charges_detail_rec.contract_discount_amount;
12862
12863 IF x_charges_detail_rec.contract_discount_amount IS NULL THEN
12864 x_charges_detail_rec.contract_discount_amount := 0;
12865 ELSE
12866 x_charges_detail_rec.contract_discount_amount := x_charges_detail_rec.contract_discount_amount;
12867 END IF;
12868
12869 END IF ;
12870 ELSE
12871 --p_charges_detail_rec.list_price = l_db_det_rec.list_price
12872
12873 -- no need to call the pricing api
12874 -- assign to out record what is the dbatabase
12875 x_charges_detail_rec.list_price := l_db_det_rec.list_price;
12876 x_charges_detail_rec.selling_price := l_db_det_rec.list_price;
12877
12878 --bug # 3056622 charge amount is zero for items with negative prices
12879 --derive the after_warranty_cost
12880 IF x_charges_detail_rec.no_charge_flag <> 'Y' THEN
12881 --Condition added to fix Bug # 3358531
12882 -- Bug 9945655
12883 --x_charges_detail_rec.after_warranty_cost := l_db_det_rec.after_warranty_cost;
12884 x_charges_detail_rec.after_warranty_cost := x_charges_detail_rec.selling_price * x_charges_detail_rec.quantity_required;
12885
12886 ELSE
12887 -- no charge flag = 'Y'
12888 x_charges_detail_rec.after_warranty_cost := 0;
12889 END IF;
12890
12891
12892 --check to see if contract discount needs to be applied
12893 IF x_charges_detail_rec.apply_contract_discount = 'Y' AND
12894 x_charges_detail_rec.contract_line_id IS NOT NULL AND
12895 x_charges_detail_rec.no_charge_flag <> 'Y' THEN
12896
12897 --assign to out record
12898 x_charges_detail_rec.apply_contract_discount := p_charges_detail_rec.apply_contract_discount;
12899
12900 --call contracts dicounting API
12901 --DBMS_OUTPUT.PUT_LINE('Call Contracts API to Apply contracts 4');
12902
12903 CS_Est_Apply_Contract_PKG.Apply_Contract(
12904 p_coverage_id => x_charges_detail_rec.apply_contract_discount,
12905 p_coverage_txn_group_id => x_charges_detail_rec.coverage_txn_group_id,
12906 p_txn_billing_type_id => x_charges_detail_rec.txn_billing_type_id,
12907 P_BUSINESS_PROCESS_ID => x_charges_detail_rec.business_process_id,
12908 P_REQUEST_DATE => l_request_date,
12909 p_amount => x_charges_detail_rec.after_warranty_cost,
12910 p_discount_amount => l_contract_discount,
12911 X_RETURN_STATUS => l_return_status,
12912 X_MSG_COUNT => l_msg_count,
12913 X_MSG_DATA => l_msg_data);
12914
12915 IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
12916 FND_MESSAGE.Set_Name('CS', 'CS_CHG_APPLY_CONTRACT_WARNING');
12917 FND_MESSAGE.SET_TOKEN('REASON', l_msg_data);
12918 FND_MSG_PUB.Add;
12919 RAISE FND_API.G_EXC_ERROR;
12920 END IF;
12921
12922 --Bug Fix for Bug # 3088397
12923 IF l_contract_discount IS NOT NULL THEN
12924 --assign the contract discount to the out record
12925 x_charges_detail_rec.contract_discount_amount := x_charges_detail_rec.after_warranty_cost - l_contract_discount;
12926
12927 --apply discount
12928 x_charges_detail_rec.after_warranty_cost := l_contract_discount;
12929 ELSE
12930 -- contract discount amt should be 0
12931 --x_charges_detail_rec.contract_discount_amount := 0;
12932 null;
12933 END IF;
12934
12935 --DBMS_OUTPUT.PUT_LINE('Contract 4'||x_charges_detail_rec.contract_discount_amount);
12936
12937 ELSE
12938 --Apply contract discount = 'N'
12939 --Fixed Bug # 3220253
12940 --passed p_charges_detail_rec.contract_discount_amount
12941 x_charges_detail_rec.apply_contract_discount := p_charges_detail_rec.apply_contract_discount;
12942
12943 IF p_charges_detail_rec.contract_discount_amount <> FND_API.G_MISS_NUM OR
12944 p_charges_detail_rec.contract_discount_amount IS NOT NULL THEN
12945 x_charges_detail_rec.contract_discount_amount := l_db_rec.contract_discount_amount;
12946 ELSIF p_charges_detail_rec.contract_discount_amount IS NULL THEN
12947 x_charges_detail_rec.contract_discount_amount := 0;
12948 ELSE
12949 x_charges_detail_rec.contract_discount_amount := p_charges_detail_rec.contract_discount_amount;
12950 END IF;
12951
12952 END IF ;
12953 END IF;
12954
12955 ELSIF
12956
12957 --Fix # 3069583 unable to override charges for labor charge line
12958 --x_charges_detail_rec.billing_flag <> 'E' AND
12959 --x_charges_detail_rec.billing_flag <> 'M' OR
12960 (x_charges_detail_rec.billing_flag IN ('E','M', 'L') AND
12961 ((p_charges_detail_rec.after_warranty_cost = FND_API.G_MISS_NUM OR
12962 p_charges_detail_rec.after_warranty_cost IS NULL) AND
12963 (p_charges_detail_rec.list_price = FND_API.G_MISS_NUM OR
12964 p_charges_detail_rec.list_price IS NULL))) THEN
12965 IF nvl(l_curr_in_conversion_list,'N') = 'Y' THEN --12.1.3, vpremach
12966 FND_MESSAGE.SET_NAME('CS', 'CS_CHG_NOT_BASE_CURRENCY');
12967 FND_MESSAGE.Set_Token('CURRENCY_CODE', p_charges_detail_rec.currency_code);
12968 FND_MSG_PUB.Add;
12969 RAISE FND_API.G_EXC_ERROR;
12970 END IF;
12971
12972 IF l_calc_sp = 'Y' THEN
12973 IF ((((x_charges_detail_rec.inventory_item_id_in IS NOT NULL) AND
12974 (x_charges_detail_rec.unit_of_measure_code IS NOT NULL) AND
12975 (x_charges_detail_rec.price_list_id IS NOT NULL) AND
12976 (x_charges_detail_rec.quantity_required IS NOT NULL)))) THEN
12977 --DBMS_OUTPUT.PUT_LINE('Before calling CS_Pricing_Item_Pkg.Call_Pricing_Item ...');
12978 --DBMS_OUTPUT.PUT_LINE('x_charges_detail_rec.inventory_item_id_in='||x_charges_detail_rec.inventory_item_id_in);
12979 --DBMS_OUTPUT.PUT_LINE('x_charges_detail_rec.price_list_id='||x_charges_detail_rec.price_list_id);
12980 --DBMS_OUTPUT.PUT_LINE('x_charges_detail_rec.unit_of_measure_code='||x_charges_detail_rec.unit_of_measure_code);
12981 --DBMS_OUTPUT.PUT_LINE('x_charges_detail_rec.currency_code='||x_charges_detail_rec.currency_code);
12982 --DBMS_OUTPUT.PUT_LINE('x_charges_detail_rec.quantity_required='||x_charges_detail_rec.quantity_required);
12983
12984 -- Added to fix Bug # 3819167
12985 --
12986 /*
12987 IF ((l_line_order_category_code = 'RETURN') AND
12988 (sign(x_charges_detail_rec.quantity_required) = -1)) THEN
12989 l_absolute_quantity_required := x_charges_detail_rec.quantity_required * -1;
12990 ELSE
12991 l_absolute_quantity_required := x_charges_detail_rec.quantity_required;
12992 END IF;
12993 */
12994
12995 -- Calculate the selling price
12996 CS_Pricing_Item_Pkg.Call_Pricing_Item(
12997 P_Inventory_Item_Id => x_charges_detail_rec.inventory_item_id_in,
12998 P_Price_List_Id => x_charges_detail_rec.price_list_id,
12999 P_UOM_Code => x_charges_detail_rec.unit_of_measure_code,
13000 p_Currency_Code => x_charges_detail_rec.currency_code,
13001 P_Quantity => abs(x_charges_detail_rec.quantity_required),
13002 P_Org_Id => x_charges_detail_rec.org_id,
13003 x_list_price => l_list_price,
13004 P_Pricing_Context => x_charges_detail_rec.pricing_context,
13005 P_Pricing_Attribute1 => x_charges_detail_rec.pricing_attribute1,
13006 P_Pricing_Attribute2 => x_charges_detail_rec.pricing_attribute2,
13007 P_Pricing_Attribute3 => x_charges_detail_rec.pricing_attribute3,
13008 P_Pricing_Attribute4 => x_charges_detail_rec.pricing_attribute4,
13009 P_Pricing_Attribute5 => x_charges_detail_rec.pricing_attribute5,
13010 P_Pricing_Attribute6 => x_charges_detail_rec.pricing_attribute6,
13011 P_Pricing_Attribute7 => x_charges_detail_rec.pricing_attribute7,
13012 P_Pricing_Attribute8 => x_charges_detail_rec.pricing_attribute8,
13013 P_Pricing_Attribute9 => x_charges_detail_rec.pricing_attribute9,
13014 P_Pricing_Attribute10 => x_charges_detail_rec.pricing_attribute10,
13015 P_Pricing_Attribute11 => x_charges_detail_rec.pricing_attribute11,
13016 P_Pricing_Attribute12 => x_charges_detail_rec.pricing_attribute12,
13017 P_Pricing_Attribute13 => x_charges_detail_rec.pricing_attribute13,
13018 P_Pricing_Attribute14 => x_charges_detail_rec.pricing_attribute14,
13019 P_Pricing_Attribute15 => x_charges_detail_rec.pricing_attribute15,
13020 P_Pricing_Attribute16 => x_charges_detail_rec.pricing_attribute16,
13021 P_Pricing_Attribute17 => x_charges_detail_rec.pricing_attribute17,
13022 P_Pricing_Attribute18 => x_charges_detail_rec.pricing_attribute18,
13023 P_Pricing_Attribute19 => x_charges_detail_rec.pricing_attribute19,
13024 P_Pricing_Attribute20 => x_charges_detail_rec.pricing_attribute20,
13025 P_Pricing_Attribute21 => x_charges_detail_rec.pricing_attribute21,
13026 P_Pricing_Attribute22 => x_charges_detail_rec.pricing_attribute22,
13027 P_Pricing_Attribute23 => x_charges_detail_rec.pricing_attribute23,
13028 P_Pricing_Attribute24 => x_charges_detail_rec.pricing_attribute24,
13029 P_Pricing_Attribute25 => x_charges_detail_rec.pricing_attribute25,
13030 p_Pricing_Attribute26 => x_charges_detail_rec.pricing_attribute26,
13031 P_Pricing_Attribute27 => x_charges_detail_rec.pricing_attribute27,
13032 P_Pricing_Attribute28 => x_charges_detail_rec.pricing_attribute28,
13033 P_Pricing_Attribute29 => x_charges_detail_rec.pricing_attribute29,
13034 P_Pricing_Attribute30 => x_charges_detail_rec.pricing_attribute30,
13035 P_PRICING_ATTRIBUTE31 => x_charges_detail_rec.pricing_attribute31,
13036 P_PRICING_ATTRIBUTE32 => x_charges_detail_rec.pricing_attribute32,
13037 P_PRICING_ATTRIBUTE33 => x_charges_detail_rec.pricing_attribute33,
13038 P_PRICING_ATTRIBUTE34 => x_charges_detail_rec.pricing_attribute34,
13039 P_Pricing_Attribute35 => x_charges_detail_rec.pricing_attribute35,
13040 P_Pricing_Attribute36 => x_charges_detail_rec.pricing_attribute36,
13041 P_Pricing_Attribute37 => x_charges_detail_rec.pricing_attribute37,
13042 P_Pricing_Attribute38 => x_charges_detail_rec.pricing_attribute38,
13043 P_Pricing_Attribute39 => x_charges_detail_rec.pricing_attribute39,
13044 P_Pricing_Attribute40 => x_charges_detail_rec.pricing_attribute40,
13045 P_Pricing_Attribute41 => x_charges_detail_rec.pricing_attribute41,
13046 P_Pricing_Attribute42 => x_charges_detail_rec.pricing_attribute42,
13047 P_Pricing_Attribute43 => x_charges_detail_rec.pricing_attribute43,
13048 P_Pricing_Attribute44 => x_charges_detail_rec.pricing_attribute44,
13049 P_Pricing_Attribute45 => x_charges_detail_rec.pricing_attribute45,
13050 P_Pricing_Attribute46 => x_charges_detail_rec.pricing_attribute46,
13051 P_Pricing_Attribute47 => x_charges_detail_rec.pricing_attribute47,
13052 P_Pricing_Attribute48 => x_charges_detail_rec.pricing_attribute48,
13053 P_Pricing_Attribute49 => x_charges_detail_rec.pricing_attribute49,
13054 P_Pricing_Attribute50 => x_charges_detail_rec.pricing_attribute50,
13055 P_Pricing_Attribute51 => x_charges_detail_rec.pricing_attribute51,
13056 P_Pricing_Attribute52 => x_charges_detail_rec.pricing_attribute52,
13057 P_Pricing_Attribute53 => x_charges_detail_rec.pricing_attribute53,
13058 P_Pricing_Attribute54 => x_charges_detail_rec.pricing_attribute54,
13059 P_Pricing_Attribute55 => x_charges_detail_rec.pricing_attribute55,
13060 P_Pricing_Attribute56 => x_charges_detail_rec.pricing_attribute56,
13061 P_Pricing_Attribute57 => x_charges_detail_rec.pricing_attribute57,
13062 P_Pricing_Attribute58 => x_charges_detail_rec.pricing_attribute58,
13063 P_Pricing_Attribute59 => x_charges_detail_rec.pricing_attribute59,
13064 P_Pricing_Attribute60 => x_charges_detail_rec.pricing_attribute60,
13065 P_Pricing_Attribute61 => x_charges_detail_rec.pricing_attribute61,
13066 P_Pricing_Attribute62 => x_charges_detail_rec.pricing_attribute62,
13067 P_Pricing_Attribute63 => x_charges_detail_rec.pricing_attribute63,
13068 P_Pricing_Attribute64 => x_charges_detail_rec.pricing_attribute64,
13069 P_Pricing_Attribute65 => x_charges_detail_rec.pricing_attribute65,
13070 P_Pricing_Attribute66 => x_charges_detail_rec.pricing_attribute66,
13071 P_Pricing_Attribute67 => x_charges_detail_rec.pricing_attribute67,
13072 P_Pricing_Attribute68 => x_charges_detail_rec.pricing_attribute68,
13073 P_Pricing_Attribute69 => x_charges_detail_rec.pricing_attribute69,
13074 P_Pricing_Attribute70 => x_charges_detail_rec.pricing_attribute70,
13075 P_Pricing_Attribute71 => x_charges_detail_rec.pricing_attribute71,
13076 P_Pricing_Attribute72 => x_charges_detail_rec.pricing_attribute72,
13077 P_Pricing_Attribute73 => x_charges_detail_rec.pricing_attribute73,
13078 P_Pricing_Attribute74 => x_charges_detail_rec.pricing_attribute74,
13079 P_Pricing_Attribute75 => x_charges_detail_rec.pricing_attribute75,
13080 P_Pricing_Attribute76 => x_charges_detail_rec.pricing_attribute76,
13081 P_Pricing_Attribute77 => x_charges_detail_rec.pricing_attribute77,
13082 P_Pricing_Attribute78 => x_charges_detail_rec.pricing_attribute78,
13083 P_Pricing_Attribute79 => x_charges_detail_rec.pricing_attribute79,
13084 P_Pricing_Attribute80 => x_charges_detail_rec.pricing_attribute80,
13085 P_Pricing_Attribute81 => x_charges_detail_rec.pricing_attribute81,
13086 P_Pricing_Attribute82 => x_charges_detail_rec.pricing_attribute82,
13087 P_Pricing_Attribute83 => x_charges_detail_rec.pricing_attribute83,
13088 P_Pricing_Attribute84 => x_charges_detail_rec.pricing_attribute84,
13089 P_Pricing_Attribute85 => x_charges_detail_rec.pricing_attribute85,
13090 P_Pricing_Attribute86 => x_charges_detail_rec.pricing_attribute86,
13091 P_Pricing_Attribute87 => x_charges_detail_rec.pricing_attribute87,
13092 P_Pricing_Attribute88 => x_charges_detail_rec.pricing_attribute88,
13093 P_Pricing_Attribute89 => x_charges_detail_rec.pricing_attribute89,
13094 P_Pricing_Attribute90 => x_charges_detail_rec.pricing_attribute90,
13095 P_Pricing_Attribute91 => x_charges_detail_rec.pricing_attribute91,
13096 P_Pricing_Attribute92 => x_charges_detail_rec.pricing_attribute92,
13097 P_Pricing_Attribute93 => x_charges_detail_rec.pricing_attribute93,
13098 P_Pricing_Attribute94 => x_charges_detail_rec.pricing_attribute94,
13099 P_Pricing_Attribute95 => x_charges_detail_rec.pricing_attribute95,
13100 P_Pricing_Attribute96 => x_charges_detail_rec.pricing_attribute96,
13101 P_Pricing_Attribute97 => x_charges_detail_rec.pricing_attribute97,
13102 P_Pricing_Attribute98 => x_charges_detail_rec.pricing_attribute98,
13103 P_Pricing_Attribute99 => x_charges_detail_rec.pricing_attribute99,
13104 P_Pricing_Attribute100 => x_charges_detail_rec.pricing_attribute100,
13105 x_return_status => l_return_status,
13106 x_msg_count => l_msg_count,
13107 x_msg_data => l_msg_data);
13108
13109 --DBMS_OUTPUT.PUT_LINE('After calling CS_Pricing_Item_Pkg.Call_Pricing_Item ...');
13110 --DBMS_OUTPUT.PUT_LINE('l_msg_data '||l_msg_data);
13111
13112 IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
13113 FND_MESSAGE.Set_Name('CS', 'CS_CHG_API_PRICING_ITEM_ERROR');
13114 FND_MESSAGE.set_token('INV_ID', x_charges_detail_rec.inventory_item_id_in);
13115 FND_MESSAGE.set_token('PRICE_LIST_ID', x_charges_detail_rec.price_list_id);
13116 FND_MESSAGE.set_token('UOM', x_charges_detail_rec.unit_of_measure_code);
13117 FND_MESSAGE.set_token('CURR_CODE', x_charges_detail_rec.currency_code);
13118 --FND_MESSAGE.SET_TOKEN('TEXT', l_msg_data, TRUE);
13119 FND_MSG_PUB.Add;
13120 RAISE FND_API.G_EXC_ERROR;
13121 END IF;
13122
13123 --bug # 3056622 charge amount is zero for items with negative prices
13124 --assign to out record
13125 x_charges_detail_rec.list_price := l_list_price;
13126 IF p_charges_detail_rec.selling_price <> FND_API.G_MISS_NUM AND
13127 p_charges_detail_rec.selling_price IS NOT NULL THEN
13128 x_charges_detail_rec.selling_price := p_charges_detail_rec.selling_price;
13129 ELSE
13130 x_charges_detail_rec.selling_price := x_charges_detail_rec.list_price;
13131 END IF;
13132
13133
13134 IF x_charges_detail_rec.billing_flag = 'L' AND
13135 x_charges_detail_rec.con_pct_over_list_price IS NOT NULL THEN
13136 --get the new list price and selling price
13137 x_charges_detail_rec.list_price := x_charges_detail_rec.list_price +
13138 (x_charges_detail_rec.list_price * x_charges_detail_rec.con_pct_over_list_price/100);
13139 x_charges_detail_rec.selling_price := x_charges_detail_rec.list_price;
13140 ELSE
13141 x_charges_detail_rec.list_price := x_charges_detail_rec.list_price;
13142 x_charges_detail_rec.selling_price := x_charges_detail_rec.selling_price;
13143 END IF;
13144
13145
13146 --DBMS_OUTPUT.PUT_LINE('list_price '||x_charges_detail_rec.list_price);
13147 --DBMS_OUTPUT.PUT_LINE('Selling Price '||x_charges_detail_rec.selling_price);
13148 --DBMS_OUTPUT.PUT_LINE(' No Charge Flag is '||x_charges_detail_rec.no_charge_flag);
13149 --DBMS_OUTPUT.PUT_LINE(' Conversion needed flag '||l_conversion_needed_flag);
13150
13151
13152 --bug # 3056622 charge amount is zero for items with negative prices
13153 IF x_charges_detail_rec.no_charge_flag <> 'Y' AND x_charges_detail_rec.selling_price IS NOT NULL THEN
13154 IF l_conversion_needed_flag = 'Y' THEN
13155 IF p_charges_detail_rec.selling_price IS NOT NULL THEN
13156 x_charges_detail_rec.selling_price := x_charges_detail_rec.selling_price * x_charges_detail_rec.conversion_rate;
13157 x_charges_detail_rec.after_warranty_cost := x_charges_detail_rec.selling_price * x_charges_detail_rec.quantity_required;
13158 ELSE
13159 x_charges_detail_rec.after_warranty_cost := x_charges_detail_rec.selling_price * x_charges_detail_rec.quantity_required * x_charges_detail_rec.conversion_rate;
13160 END IF;
13161 ELSE
13162 x_charges_detail_rec.after_warranty_cost := x_charges_detail_rec.selling_price * x_charges_detail_rec.quantity_required;
13163 END IF;
13164 ELSE
13165 -- no charge flag = 'Y'
13166 x_charges_detail_rec.after_warranty_cost := 0;
13167 END IF;
13168
13169 --DBMS_OUTPUT.PUT_LINE(' after warr cost is '|| x_charges_detail_rec.after_warranty_cost);
13170
13171
13172 --check to see if contract discount needs to be applied
13173
13174 --DBMS_OUTPUT.PUT_LINE('apply contract discount '|| x_charges_detail_rec.apply_contract_discount);
13175
13176 IF x_charges_detail_rec.apply_contract_discount = 'Y' AND
13177 x_charges_detail_rec.contract_line_id IS NOT NULL AND
13178 x_charges_detail_rec.no_charge_flag <> 'Y' THEN
13179
13180 --assign to out record
13181 x_charges_detail_rec.apply_contract_discount := p_charges_detail_rec.apply_contract_discount;
13182
13183 --call contracts dicounting API
13184 --DBMS_OUTPUT.PUT_LINE('Call Contracts API to Apply contracts 5');
13185
13186 CS_Est_Apply_Contract_PKG.Apply_Contract(
13187 p_coverage_id => x_charges_detail_rec.contract_line_id,
13188 p_coverage_txn_group_id => x_charges_detail_rec.coverage_txn_group_id,
13189 p_txn_billing_type_id => x_charges_detail_rec.txn_billing_type_id,
13190 P_BUSINESS_PROCESS_ID => x_charges_detail_rec.business_process_id,
13191 P_REQUEST_DATE => l_request_date,
13192 p_amount => x_charges_detail_rec.after_warranty_cost,
13193 p_discount_amount => l_contract_discount,
13194 X_RETURN_STATUS => l_return_status,
13195 X_MSG_COUNT => l_msg_count,
13196 X_MSG_DATA => l_msg_data);
13197
13198 IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
13199 FND_MESSAGE.Set_Name('CS', 'CS_CHG_APPLY_CONTRACT_WARNING');
13200 FND_MESSAGE.SET_TOKEN('REASON', l_msg_data);
13201 FND_MSG_PUB.Add;
13202 RAISE FND_API.G_EXC_ERROR;
13203 END IF;
13204
13205 --Bug Fix for Bug # 3088397
13206 IF l_contract_discount IS NOT NULL THEN
13207 --assign the contract discount to the out record
13208 x_charges_detail_rec.contract_discount_amount := x_charges_detail_rec.after_warranty_cost - l_contract_discount;
13209
13210 --apply discount
13211 x_charges_detail_rec.after_warranty_cost := l_contract_discount;
13212
13213 ELSE
13214 -- contract discount amt should be 0
13215 --x_charges_detail_rec.contract_discount_amount := 0;
13216 null;
13217 END IF;
13218 --DBMS_OUTPUT.PUT_LINE('Contract 5'||x_charges_detail_rec.contract_discount_amount);
13219
13220 ELSE
13221 --Apply contract discount = 'N'
13222 --Fixed Bug # 3220253
13223 --passed p_charges_detail_rec.contract_discount_amount
13224 x_charges_detail_rec.apply_contract_discount := p_charges_detail_rec.apply_contract_discount;
13225 x_charges_detail_rec.contract_discount_amount := p_charges_detail_rec.contract_discount_amount;
13226
13227 IF x_charges_detail_rec.contract_discount_amount IS NULL THEN
13228 x_charges_detail_rec.contract_discount_amount := 0;
13229 ELSE
13230 x_charges_detail_rec.contract_discount_amount := x_charges_detail_rec.contract_discount_amount;
13231 END IF;
13232 END IF ;
13233
13234 ELSE
13235 --x_charges_detail_rec.inventory_item_id_in IS NULL
13236 --x_charges_detail_rec.unit_of_measure_code IS NULL
13237 --x_charges_detail_rec.price_list_id IS NULL
13238 --x_charges_detail_rec.quantity_required IS NULL
13239 --the list price cannot be derived and the
13240 --after warranty cost cannot be computed
13241 --assign 0 to list_price and after_warranty_cost
13242 x_charges_detail_rec.list_price := 0;
13243 x_charges_detail_rec.selling_price := 0;
13244 x_charges_detail_rec.after_warranty_cost := 0;
13245 x_charges_detail_rec.contract_discount_amount := 0;
13246
13247 END IF;
13248 ELSE
13249 --l_calc_sp = 'N'
13250 x_charges_detail_rec.list_price := l_db_det_rec.list_price;
13251 x_charges_detail_rec.selling_price := l_db_det_rec.selling_price;
13252
13253
13254 --calculate the contract % over list price
13255 IF x_charges_detail_rec.billing_flag = 'L' AND
13256 x_charges_detail_rec.con_pct_over_list_price IS NOT NULL THEN
13257 --get the new list price and selling price
13258 x_charges_detail_rec.list_price := x_charges_detail_rec.list_price +
13259 (x_charges_detail_rec.list_price * x_charges_detail_rec.con_pct_over_list_price/100);
13260
13261 x_charges_detail_rec.selling_price := x_charges_detail_rec.list_price;
13262 ELSE
13263 x_charges_detail_rec.list_price := l_db_det_rec.list_price;
13264 --x_charges_detail_rec.selling_price := l_db_det_rec.selling_price;
13265 -- Commented above and added below for Bug# 4689183
13266 IF (p_charges_detail_rec.selling_price <> FND_API.G_MISS_NUM AND
13267 p_charges_detail_rec.selling_price IS NOT NULL) THEN
13268 IF (p_charges_detail_rec.selling_price <> l_db_det_rec.selling_price) THEN
13269 x_charges_detail_rec.selling_price := p_charges_detail_rec.selling_price;
13270 ELSE
13271 x_charges_detail_rec.selling_price := l_db_det_rec.selling_price;
13272 END IF;
13273 END IF;
13274 END IF;
13275
13276 --bug # 3056622 charge amount is zero for items with negative prices
13277
13278 IF x_charges_detail_rec.no_charge_flag <> 'Y' AND x_charges_detail_rec.selling_price IS NOT NULL THEN
13279 IF l_conversion_needed_flag = 'Y' THEN
13280 x_charges_detail_rec.after_warranty_cost := x_charges_detail_rec.selling_price * x_charges_detail_rec.quantity_required * x_charges_detail_rec.conversion_rate;
13281 ELSE
13282 --Condition added to fix Bug # 3358531
13283 x_charges_detail_rec.after_warranty_cost := l_db_det_rec.after_warranty_cost;
13284 END IF;
13285 ELSE
13286 -- no charge flag = 'Y'
13287 x_charges_detail_rec.after_warranty_cost := 0;
13288 END IF;
13289
13290 --DBMS_OUTPUT.PUT_LINE(' after warr cost is '|| x_charges_detail_rec.after_warranty_cost);
13291
13292
13293 --check to see if contract discount needs to be applied
13294
13295 --DBMS_OUTPUT.PUT_LINE('apply contract discount '|| x_charges_detail_rec.apply_contract_discount);
13296
13297 IF x_charges_detail_rec.apply_contract_discount = 'Y' AND
13298 x_charges_detail_rec.contract_line_id IS NOT NULL AND
13299 x_charges_detail_rec.no_charge_flag <> 'Y' THEN
13300
13301 --assign to out record
13302 x_charges_detail_rec.apply_contract_discount := p_charges_detail_rec.apply_contract_discount;
13303
13304
13305 --call contracts dicounting API
13306 --DBMS_OUTPUT.PUT_LINE('Call Contracts API to Apply contracts 6');
13307
13308 CS_Est_Apply_Contract_PKG.Apply_Contract(
13309 p_coverage_id => x_charges_detail_rec.coverage_id,
13310 p_coverage_txn_group_id => x_charges_detail_rec.coverage_txn_group_id,
13311 p_txn_billing_type_id => x_charges_detail_rec.txn_billing_type_id,
13312 P_BUSINESS_PROCESS_ID => x_charges_detail_rec.business_process_id,
13313 P_REQUEST_DATE => l_request_date,
13314 p_amount => x_charges_detail_rec.after_warranty_cost,
13315 p_discount_amount => l_contract_discount,
13316 X_RETURN_STATUS => l_return_status,
13317 X_MSG_COUNT => l_msg_count,
13318 X_MSG_DATA => l_msg_data);
13319
13320 IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
13321 FND_MESSAGE.Set_Name('CS', 'CS_CHG_APPLY_CONTRACT_WARNING');
13322 FND_MESSAGE.SET_TOKEN('REASON', l_msg_data);
13323 FND_MSG_PUB.Add;
13324 RAISE FND_API.G_EXC_ERROR;
13325 END IF;
13326
13327 --Bug Fix for Bug # 3088397
13328 IF l_contract_discount IS NOT NULL THEN
13329 --assign the contract discount to the out record
13330 x_charges_detail_rec.contract_discount_amount := x_charges_detail_rec.after_warranty_cost - l_contract_discount;
13331
13332 --apply discount
13333 x_charges_detail_rec.after_warranty_cost := l_contract_discount;
13334 ELSE
13335 -- contract discount amt should be 0
13336 --x_charges_detail_rec.contract_discount_amount := 0;
13337 null;
13338 END IF;
13339 --DBMS_OUTPUT.PUT_LINE('Contract 6'||x_charges_detail_rec.contract_discount_amount);
13340
13341 ELSE
13342 --Apply contract discount = 'N'
13343 --Fixed Bug # 3220253
13344 --passed p_charges_detail_rec.contract_discount_amount
13345 x_charges_detail_rec.apply_contract_discount := p_charges_detail_rec.apply_contract_discount;
13346 IF p_charges_detail_rec.contract_discount_amount <> FND_API.G_MISS_NUM OR
13347 p_charges_detail_rec.contract_discount_amount IS NOT NULL THEN
13348 x_charges_detail_rec.contract_discount_amount := l_db_rec.contract_discount_amount;
13349 ELSIF p_charges_detail_rec.contract_discount_amount IS NULL THEN
13350 x_charges_detail_rec.contract_discount_amount := 0;
13351 ELSE
13352 x_charges_detail_rec.contract_discount_amount := p_charges_detail_rec.contract_discount_amount;
13353 END IF;
13354 END IF ;
13355 END IF;
13356
13357 ELSIF
13358 --Fix # 3069583 unable to override charges for labor charge line
13359 x_charges_detail_rec.billing_flag IN ('E', 'M', 'L') AND
13360 p_charges_detail_rec.after_warranty_cost <> FND_API.G_MISS_NUM AND
13361 p_charges_detail_rec.after_warranty_cost IS NOT NULL THEN
13362
13363 IF p_charges_detail_rec.list_price IS NULL THEN --12.1.3 Multi Currency, vpremach
13364 IF l_curr_in_conversion_list = 'Y' THEN
13365 FND_MESSAGE.SET_NAME('CS', 'CS_CHG_NOT_BASE_CURRENCY');
13366 FND_MESSAGE.Set_Token('CURRENCY_CODE', p_charges_detail_rec.currency_code);
13367 FND_MSG_PUB.Add;
13368 RAISE FND_API.G_EXC_ERROR;
13369 END IF;
13370 END IF;
13371
13372 --DBMS_OUTPUT.PUT_LINE('Update Expense line with after warr cost ');
13373 --DBMS_OUTPUT.PUT_LINE('Update l_conversion_needed_flag '||l_conversion_needed_flag);
13374 --DBMS_OUTPUT.PUT_LINE('Update after_warranty_cost = '||p_charges_detail_rec.after_warranty_cost );
13375 --DBMS_OUTPUT.PUT_LINE('DB After warranty cost = '||l_db_det_rec.after_warranty_cost);
13376
13377 IF p_charges_detail_rec.after_warranty_cost <> nvl(l_db_det_rec.after_warranty_cost, 0) THEN
13378
13379 l_calc_sp := 'Y';
13380
13381 --DBMS_OUTPUT.PUT_LINE(' In here ');
13382
13383 -- Added to fix Bug # 3819167
13384 --
13385 /*
13386 IF ((l_line_order_category_code = 'RETURN') AND
13387 (sign(x_charges_detail_rec.quantity_required) = -1)) THEN
13388 l_absolute_quantity_required := x_charges_detail_rec.quantity_required * -1;
13389 ELSE
13390 l_absolute_quantity_required := x_charges_detail_rec.quantity_required;
13391 END IF;
13392 */
13393 IF nvl(l_curr_in_conversion_list,'N') <> 'Y' THEN
13394 -- Call the pricing API just to verify that the item is on the price list
13395 CS_Pricing_Item_Pkg.Call_Pricing_Item(
13396 P_Inventory_Item_Id => x_charges_detail_rec.inventory_item_id_in,
13397 P_Price_List_Id => x_charges_detail_rec.price_list_id,
13398 P_UOM_Code => x_charges_detail_rec.unit_of_measure_code,
13399 p_Currency_Code => x_charges_detail_rec.currency_code,
13400 P_Quantity => abs(x_charges_detail_rec.quantity_required),
13401 P_Org_Id => x_charges_detail_rec.org_id,
13402 x_list_price => l_list_price,
13403 P_Pricing_Context => x_charges_detail_rec.pricing_context,
13404 P_Pricing_Attribute1 => x_charges_detail_rec.pricing_attribute1,
13405 P_Pricing_Attribute2 => x_charges_detail_rec.pricing_attribute2,
13406 P_Pricing_Attribute3 => x_charges_detail_rec.pricing_attribute3,
13407 P_Pricing_Attribute4 => x_charges_detail_rec.pricing_attribute4,
13408 P_Pricing_Attribute5 => x_charges_detail_rec.pricing_attribute5,
13409 P_Pricing_Attribute6 => x_charges_detail_rec.pricing_attribute6,
13410 P_Pricing_Attribute7 => x_charges_detail_rec.pricing_attribute7,
13411 P_Pricing_Attribute8 => x_charges_detail_rec.pricing_attribute8,
13412 P_Pricing_Attribute9 => x_charges_detail_rec.pricing_attribute9,
13413 P_Pricing_Attribute10 => x_charges_detail_rec.pricing_attribute10,
13414 P_Pricing_Attribute11 => x_charges_detail_rec.pricing_attribute11,
13415 P_Pricing_Attribute12 => x_charges_detail_rec.pricing_attribute12,
13416 P_Pricing_Attribute13 => x_charges_detail_rec.pricing_attribute13,
13417 P_Pricing_Attribute14 => x_charges_detail_rec.pricing_attribute14,
13418 P_Pricing_Attribute15 => x_charges_detail_rec.pricing_attribute15,
13419 P_Pricing_Attribute16 => x_charges_detail_rec.pricing_attribute16,
13420 P_Pricing_Attribute17 => x_charges_detail_rec.pricing_attribute17,
13421 P_Pricing_Attribute18 => x_charges_detail_rec.pricing_attribute18,
13422 P_Pricing_Attribute19 => x_charges_detail_rec.pricing_attribute19,
13423 P_Pricing_Attribute20 => x_charges_detail_rec.pricing_attribute20,
13424 P_Pricing_Attribute21 => x_charges_detail_rec.pricing_attribute21,
13425 P_Pricing_Attribute22 => x_charges_detail_rec.pricing_attribute22,
13426 P_Pricing_Attribute23 => x_charges_detail_rec.pricing_attribute23,
13427 P_Pricing_Attribute24 => x_charges_detail_rec.pricing_attribute24,
13428 P_Pricing_Attribute25 => x_charges_detail_rec.pricing_attribute25,
13429 p_Pricing_Attribute26 => x_charges_detail_rec.pricing_attribute26,
13430 P_Pricing_Attribute27 => x_charges_detail_rec.pricing_attribute27,
13431 P_Pricing_Attribute28 => x_charges_detail_rec.pricing_attribute28,
13432 P_Pricing_Attribute29 => x_charges_detail_rec.pricing_attribute29,
13433 P_Pricing_Attribute30 => x_charges_detail_rec.pricing_attribute30,
13434 P_PRICING_ATTRIBUTE31 => x_charges_detail_rec.pricing_attribute31,
13435 P_PRICING_ATTRIBUTE32 => x_charges_detail_rec.pricing_attribute32,
13436 P_PRICING_ATTRIBUTE33 => x_charges_detail_rec.pricing_attribute33,
13437 P_PRICING_ATTRIBUTE34 => x_charges_detail_rec.pricing_attribute34,
13438 P_Pricing_Attribute35 => x_charges_detail_rec.pricing_attribute35,
13439 P_Pricing_Attribute36 => x_charges_detail_rec.pricing_attribute36,
13440 P_Pricing_Attribute37 => x_charges_detail_rec.pricing_attribute37,
13441 P_Pricing_Attribute38 => x_charges_detail_rec.pricing_attribute38,
13442 P_Pricing_Attribute39 => x_charges_detail_rec.pricing_attribute39,
13443 P_Pricing_Attribute40 => x_charges_detail_rec.pricing_attribute40,
13444 P_Pricing_Attribute41 => x_charges_detail_rec.pricing_attribute41,
13445 P_Pricing_Attribute42 => x_charges_detail_rec.pricing_attribute42,
13446 P_Pricing_Attribute43 => x_charges_detail_rec.pricing_attribute43,
13447 P_Pricing_Attribute44 => x_charges_detail_rec.pricing_attribute44,
13448 P_Pricing_Attribute45 => x_charges_detail_rec.pricing_attribute45,
13449 P_Pricing_Attribute46 => x_charges_detail_rec.pricing_attribute46,
13450 P_Pricing_Attribute47 => x_charges_detail_rec.pricing_attribute47,
13451 P_Pricing_Attribute48 => x_charges_detail_rec.pricing_attribute48,
13452 P_Pricing_Attribute49 => x_charges_detail_rec.pricing_attribute49,
13453 P_Pricing_Attribute50 => x_charges_detail_rec.pricing_attribute50,
13454 P_Pricing_Attribute51 => x_charges_detail_rec.pricing_attribute51,
13455 P_Pricing_Attribute52 => x_charges_detail_rec.pricing_attribute52,
13456 P_Pricing_Attribute53 => x_charges_detail_rec.pricing_attribute53,
13457 P_Pricing_Attribute54 => x_charges_detail_rec.pricing_attribute54,
13458 P_Pricing_Attribute55 => x_charges_detail_rec.pricing_attribute55,
13459 P_Pricing_Attribute56 => x_charges_detail_rec.pricing_attribute56,
13460 P_Pricing_Attribute57 => x_charges_detail_rec.pricing_attribute57,
13461 P_Pricing_Attribute58 => x_charges_detail_rec.pricing_attribute58,
13462 P_Pricing_Attribute59 => x_charges_detail_rec.pricing_attribute59,
13463 P_Pricing_Attribute60 => x_charges_detail_rec.pricing_attribute60,
13464 P_Pricing_Attribute61 => x_charges_detail_rec.pricing_attribute61,
13465 P_Pricing_Attribute62 => x_charges_detail_rec.pricing_attribute62,
13466 P_Pricing_Attribute63 => x_charges_detail_rec.pricing_attribute63,
13467 P_Pricing_Attribute64 => x_charges_detail_rec.pricing_attribute64,
13468 P_Pricing_Attribute65 => x_charges_detail_rec.pricing_attribute65,
13469 P_Pricing_Attribute66 => x_charges_detail_rec.pricing_attribute66,
13470 P_Pricing_Attribute67 => x_charges_detail_rec.pricing_attribute67,
13471 P_Pricing_Attribute68 => x_charges_detail_rec.pricing_attribute68,
13472 P_Pricing_Attribute69 => x_charges_detail_rec.pricing_attribute69,
13473 P_Pricing_Attribute70 => x_charges_detail_rec.pricing_attribute70,
13474 P_Pricing_Attribute71 => x_charges_detail_rec.pricing_attribute71,
13475 P_Pricing_Attribute72 => x_charges_detail_rec.pricing_attribute72,
13476 P_Pricing_Attribute73 => x_charges_detail_rec.pricing_attribute73,
13477 P_Pricing_Attribute74 => x_charges_detail_rec.pricing_attribute74,
13478 P_Pricing_Attribute75 => x_charges_detail_rec.pricing_attribute75,
13479 P_Pricing_Attribute76 => x_charges_detail_rec.pricing_attribute76,
13480 P_Pricing_Attribute77 => x_charges_detail_rec.pricing_attribute77,
13481 P_Pricing_Attribute78 => x_charges_detail_rec.pricing_attribute78,
13482 P_Pricing_Attribute79 => x_charges_detail_rec.pricing_attribute79,
13483 P_Pricing_Attribute80 => x_charges_detail_rec.pricing_attribute80,
13484 P_Pricing_Attribute81 => x_charges_detail_rec.pricing_attribute81,
13485 P_Pricing_Attribute82 => x_charges_detail_rec.pricing_attribute82,
13486 P_Pricing_Attribute83 => x_charges_detail_rec.pricing_attribute83,
13487 P_Pricing_Attribute84 => x_charges_detail_rec.pricing_attribute84,
13488 P_Pricing_Attribute85 => x_charges_detail_rec.pricing_attribute85,
13489 P_Pricing_Attribute86 => x_charges_detail_rec.pricing_attribute86,
13490 P_Pricing_Attribute87 => x_charges_detail_rec.pricing_attribute87,
13491 P_Pricing_Attribute88 => x_charges_detail_rec.pricing_attribute88,
13492 P_Pricing_Attribute89 => x_charges_detail_rec.pricing_attribute89,
13493 P_Pricing_Attribute90 => x_charges_detail_rec.pricing_attribute90,
13494 P_Pricing_Attribute91 => x_charges_detail_rec.pricing_attribute91,
13495 P_Pricing_Attribute92 => x_charges_detail_rec.pricing_attribute92,
13496 P_Pricing_Attribute93 => x_charges_detail_rec.pricing_attribute93,
13497 P_Pricing_Attribute94 => x_charges_detail_rec.pricing_attribute94,
13498 P_Pricing_Attribute95 => x_charges_detail_rec.pricing_attribute95,
13499 P_Pricing_Attribute96 => x_charges_detail_rec.pricing_attribute96,
13500 P_Pricing_Attribute97 => x_charges_detail_rec.pricing_attribute97,
13501 P_Pricing_Attribute98 => x_charges_detail_rec.pricing_attribute98,
13502 P_Pricing_Attribute99 => x_charges_detail_rec.pricing_attribute99,
13503 P_Pricing_Attribute100 => x_charges_detail_rec.pricing_attribute100,
13504 x_return_status => l_return_status,
13505 x_msg_count => l_msg_count,
13506 x_msg_data => l_msg_data);
13507
13508 --DBMS_OUTPUT.PUT_LINE('After calling CS_Pricing_Item_Pkg.Call_Pricing_Item ...');
13509 --DBMS_OUTPUT.PUT_LINE('l_msg_data '||l_msg_data);
13510
13511 IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
13512 FND_MESSAGE.Set_Name('CS', 'CS_CHG_API_PRICING_ITEM_ERROR');
13513 FND_MESSAGE.set_token('INV_ID', x_charges_detail_rec.inventory_item_id_in);
13514 FND_MESSAGE.set_token('PRICE_LIST_ID', x_charges_detail_rec.price_list_id);
13515 FND_MESSAGE.set_token('UOM', x_charges_detail_rec.unit_of_measure_code);
13516 FND_MESSAGE.set_token('CURR_CODE', x_charges_detail_rec.currency_code);
13517 --FND_MESSAGE.SET_TOKEN('TEXT', l_msg_data, TRUE);
13518 FND_MSG_PUB.Add;
13519 RAISE FND_API.G_EXC_ERROR;
13520 END IF;
13521 END IF;
13522 -- Assign the after warranty that comes on the line
13523 x_charges_detail_rec.after_warranty_cost := p_charges_detail_rec.after_warranty_cost;
13524
13525 IF l_conversion_needed_flag = 'Y' THEN
13526 --assign coverted amt to after_warranty_cost
13527 x_charges_detail_rec.after_warranty_cost := x_charges_detail_rec.after_warranty_cost * x_charges_detail_rec.conversion_rate;
13528 IF l_curr_in_conversion_list = 'Y' THEN --12.1.3, vpremach
13529 x_charges_detail_rec.list_price := p_charges_detail_rec.list_price;
13530 ELSE
13531 x_charges_detail_rec.list_price := l_list_price;
13532 END IF;
13533
13534 --bug # 3056622 charge amount is zero for items with negative prices
13535
13536 IF p_charges_detail_rec.selling_price <> FND_API.G_MISS_NUM AND
13537 p_charges_detail_rec.selling_price IS NOT NULL THEN
13538 x_charges_detail_rec.selling_price := p_charges_detail_rec.selling_price * x_charges_detail_rec.conversion_rate;
13539 ELSE
13540 x_charges_detail_rec.selling_price := x_charges_detail_rec.list_price;
13541 END IF;
13542
13543 ELSE
13544 x_charges_detail_rec.after_warranty_cost := p_charges_detail_rec.after_warranty_cost;
13545 IF l_curr_in_conversion_list = 'Y' THEN --12.1.3, vpremach
13546 x_charges_detail_rec.list_price := p_charges_detail_rec.list_price;
13547 ELSE
13548 x_charges_detail_rec.list_price := l_list_price;
13549 END IF;
13550
13551 --bug # 3056622 charge amount is zero for items with negative prices
13552
13553 IF p_charges_detail_rec.selling_price IS NOT NULL
13554 and p_charges_detail_rec.selling_price <> FND_API.G_MISS_NUM THEN -- charges logistics
13555 x_charges_detail_rec.selling_price := p_charges_detail_rec.selling_price;
13556 ELSE
13557 x_charges_detail_rec.selling_price := x_charges_detail_rec.list_price;
13558 END IF;
13559 END IF;
13560
13561
13562 --DBMS_OUTPUT.PUT_LINE(' after_warranty_cost '||x_charges_detail_rec.after_warranty_cost );
13563 --DBMS_OUTPUT.PUT_LINE(' selling price is '|| x_charges_detail_rec.selling_price);
13564 --DBMS_OUTPUT.PUT_LINE(' list price is '|| x_charges_detail_rec.list_price);
13565 --DBMS_OUTPUT.PUT_LINE(' apply_contract_discount is '||x_charges_detail_rec.apply_contract_discount);
13566 --DBMS_OUTPUT.PUT_LINE(' no_charge_flag is '||x_charges_detail_rec.no_charge_flag);
13567 --DBMS_OUTPUT.PUT_LINE('l_request_date is '||l_request_date);
13568
13569 --Fixed Bug # 3468146
13570 --need to do this here so that contract discounting is done correctly
13571 --re-set the no_charge_flag for Charge Lines
13572 --since the line has come with after warranty cost from upstream
13573 IF x_charges_detail_rec.after_warranty_cost <> 0 THEN
13574 x_charges_detail_rec.no_charge_flag := 'N';
13575 END IF;
13576
13577 --DBMS_OUTPUT.PUT_LINE('re-setting the no_charge_flag' ||x_charges_detail_rec.no_charge_flag);
13578
13579
13580 IF x_charges_detail_rec.apply_contract_discount = 'Y' AND
13581 x_charges_detail_rec.contract_line_id IS NOT NULL AND
13582 x_charges_detail_rec.no_charge_flag <> 'Y' THEN
13583
13584
13585 --DBMS_OUTPUT.PUT_LINE('calling contract discount ');
13586
13587
13588 --call contracts dicounting API
13589 CS_Est_Apply_Contract_PKG.Apply_Contract(
13590 p_coverage_id => x_charges_detail_rec.contract_line_id,
13591 p_coverage_txn_group_id => x_charges_detail_rec.coverage_txn_group_id,
13592 p_txn_billing_type_id => x_charges_detail_rec.txn_billing_type_id,
13593 P_BUSINESS_PROCESS_ID => x_charges_detail_rec.business_process_id,
13594 P_REQUEST_DATE => l_request_date,
13595 p_amount => x_charges_detail_rec.after_warranty_cost,
13596 p_discount_amount => l_contract_discount,
13597 X_RETURN_STATUS => l_return_status,
13598 X_MSG_COUNT => l_msg_count,
13599 X_MSG_DATA => l_msg_data);
13600
13601 IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
13602 FND_MESSAGE.Set_Name('CS', 'CS_CHG_APPLY_CONTRACT_WARNING');
13603 FND_MESSAGE.SET_TOKEN('REASON', l_msg_data);
13604 FND_MSG_PUB.Add;
13605 RAISE FND_API.G_EXC_ERROR;
13606 END IF;
13607
13608 --DBMS_OUTPUT.PUT_LINE('l_contract_discount '||l_contract_discount);
13609
13610 --Bug Fix for Bug # 3088397
13611 IF l_contract_discount IS NOT NULL THEN
13612 --assign the contract discount to the out record
13613 x_charges_detail_rec.contract_discount_amount := x_charges_detail_rec.after_warranty_cost - l_contract_discount;
13614
13615 --apply discount
13616 x_charges_detail_rec.after_warranty_cost := l_contract_discount;
13617
13618 --DBMS_OUTPUT.PUT_LINE(' contract discount is : '||x_charges_detail_rec.contract_discount_amount);
13619 --DBMS_OUTPUT.PUT_LINE(' after_warranty_cost : '||x_charges_detail_rec.after_warranty_cost );
13620
13621 ELSE
13622 -- contract discount amt should be 0
13623 --x_charges_detail_rec.contract_discount_amount := 0;
13624 null;
13625
13626 END IF;
13627
13628 --DBMS_OUTPUT.PUT_LINE('Contract 7'||x_charges_detail_rec.contract_discount_amount);
13629 --DBMS_OUTPUT.PUT_LINE(' contract discount is : '||x_charges_detail_rec.contract_discount_amount);
13630 --DBMS_OUTPUT.PUT_LINE(' after_warranty_cost : '||x_charges_detail_rec.after_warranty_cost );
13631 ELSE
13632 --Apply contract discount = 'N'
13633 --Fixed Bug # 3220253
13634 --passed p_charges_detail_rec.contract_discount_amount
13635 x_charges_detail_rec.apply_contract_discount := p_charges_detail_rec.apply_contract_discount;
13636 x_charges_detail_rec.contract_discount_amount := p_charges_detail_rec.contract_discount_amount;
13637
13638 IF x_charges_detail_rec.contract_discount_amount IS NULL THEN
13639 x_charges_detail_rec.contract_discount_amount := 0;
13640 ELSE
13641 x_charges_detail_rec.contract_discount_amount := x_charges_detail_rec.contract_discount_amount;
13642 END IF;
13643 END IF ;
13644 ELSE
13645 --l_calc_sp = 'N'
13646 -- Assign the after warranty that is in the databse
13647 x_charges_detail_rec.after_warranty_cost := l_db_det_rec.after_warranty_cost;
13648
13649 IF l_conversion_needed_flag = 'Y' AND
13650 l_db_det_rec.conversion_rate IS NULL THEN
13651 --assign coverted amt to after_warranty_cost
13652
13653 --bug # 3056622 charge amount is zero for items with negative prices
13654
13655 IF p_charges_detail_rec.selling_price <> FND_API.G_MISS_NUM AND
13656 p_charges_detail_rec.selling_price IS NOT NULL THEN
13657 x_charges_detail_rec.selling_price := p_charges_detail_rec.selling_price * x_charges_detail_rec.conversion_rate;
13658 x_charges_detail_rec.after_warranty_cost := x_charges_detail_rec.after_warranty_cost * x_charges_detail_rec.conversion_rate;
13659 x_charges_detail_rec.list_price := l_db_det_rec.list_price * x_charges_detail_rec.conversion_rate;
13660 ELSE
13661 x_charges_detail_rec.selling_price := l_db_det_rec.selling_price * x_charges_detail_rec.conversion_rate ;
13662 x_charges_detail_rec.after_warranty_cost := x_charges_detail_rec.after_warranty_cost * x_charges_detail_rec.conversion_rate;
13663 x_charges_detail_rec.list_price := l_db_det_rec.list_price * x_charges_detail_rec.conversion_rate;
13664 END IF;
13665
13666 ELSE
13667 --bug # 3056622 charge amount is zero for items with negative prices
13668 IF p_charges_detail_rec.selling_price <> FND_API.G_MISS_NUM AND
13669 p_charges_detail_rec.selling_price IS NOT NULL THEN
13670 x_charges_detail_rec.selling_price := p_charges_detail_rec.selling_price;
13671 x_charges_detail_rec.after_warranty_cost := x_charges_detail_rec.after_warranty_cost;
13672 x_charges_detail_rec.list_price := l_db_det_rec.list_price;
13673 ELSE
13674 x_charges_detail_rec.after_warranty_cost := l_db_det_rec.after_warranty_cost;
13675 x_charges_detail_rec.list_price := l_db_det_rec.list_price;
13676 x_charges_detail_rec.selling_price := l_db_det_rec.selling_price;
13677 END IF;
13678 END IF;
13679
13680 --DBMS_OUTPUT.PUT_LINE(' after_warranty_cost '||x_charges_detail_rec.after_warranty_cost );
13681
13682 IF x_charges_detail_rec.apply_contract_discount = 'Y' AND
13683 x_charges_detail_rec.contract_line_id IS NOT NULL AND
13684 x_charges_detail_rec.no_charge_flag <> 'Y' THEN
13685
13686
13687 --call contracts dicounting API
13688 CS_Est_Apply_Contract_PKG.Apply_Contract(
13689 p_coverage_id => x_charges_detail_rec.contract_line_id,
13690 p_coverage_txn_group_id => x_charges_detail_rec.coverage_txn_group_id,
13691 p_txn_billing_type_id => x_charges_detail_rec.txn_billing_type_id,
13692 P_BUSINESS_PROCESS_ID => x_charges_detail_rec.business_process_id,
13693 P_REQUEST_DATE => l_request_date,
13694 p_amount => x_charges_detail_rec.after_warranty_cost,
13695 p_discount_amount => l_contract_discount,
13696 X_RETURN_STATUS => l_return_status,
13697 X_MSG_COUNT => l_msg_count,
13698 X_MSG_DATA => l_msg_data);
13699
13700 IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
13701 FND_MESSAGE.Set_Name('CS', 'CS_CHG_APPLY_CONTRACT_WARNING');
13702 FND_MESSAGE.SET_TOKEN('REASON', l_msg_data);
13703 FND_MSG_PUB.Add;
13704 RAISE FND_API.G_EXC_ERROR;
13705 END IF;
13706
13707 --Bug Fix for Bug # 3088397
13708 IF l_contract_discount IS NOT NULL THEN
13709 --assign the contract discount to the out record
13710 x_charges_detail_rec.contract_discount_amount := x_charges_detail_rec.after_warranty_cost - l_contract_discount;
13711
13712 --apply discount
13713 x_charges_detail_rec.after_warranty_cost := l_contract_discount;
13714
13715 ELSE
13716 -- contract discount amt should be 0
13717 --x_charges_detail_rec.contract_discount_amount := 0;
13718 null;
13719 END IF;
13720 --DBMS_OUTPUT.PUT_LINE('Contract 8'||x_charges_detail_rec.contract_discount_amount);
13721
13722 --DBMS_OUTPUT.PUT_LINE('Contract Amount '||x_charges_detail_rec.contract_discount_amount );
13723
13724 ELSE
13725 --Apply contract discount = 'N'
13726 --Fixed Bug # 3220253
13727 --passed p_charges_detail_rec.contract_discount_amount
13728 x_charges_detail_rec.apply_contract_discount := p_charges_detail_rec.apply_contract_discount;
13729 IF p_charges_detail_rec.contract_discount_amount <> FND_API.G_MISS_NUM OR
13730 p_charges_detail_rec.contract_discount_amount IS NOT NULL THEN
13731 x_charges_detail_rec.contract_discount_amount := l_db_rec.contract_discount_amount;
13732 ELSIF p_charges_detail_rec.contract_discount_amount IS NULL THEN
13733 x_charges_detail_rec.contract_discount_amount := 0;
13734 ELSE
13735 x_charges_detail_rec.contract_discount_amount := p_charges_detail_rec.contract_discount_amount;
13736 END IF;
13737 END IF ;
13738 END IF;
13739 END IF;
13740 IF l_line_order_category_code = 'ORDER' THEN --Bug 6960562
13741 /* Start : 5705568 */
13742 -- If x_charges_detail_rec.after_warranty_cost < 0 Then
13743 -- Bug 8305664 Removed the and condition in the if statement.
13744 If x_charges_detail_rec.after_warranty_cost < 0 Then -- bug 7459205
13745 x_charges_detail_rec.after_warranty_cost := 0;
13746 End If;
13747 /* End : 5705568 */
13748 End If;
13749 END IF;
13750
13751 --==================================
13752 --final re-set of no_charge_flag
13753 --if after_warranty_cost <> 0
13754 --Fixed Bug # 3468146
13755 --since the line has come with after warranty cost from upstream
13756 IF x_charges_detail_rec.after_warranty_cost <> 0 THEN
13757 x_charges_detail_rec.no_charge_flag := 'N';
13758 END IF;
13759
13760
13761 --===================================
13762 --Validate Transaction Inventory Org
13763 --===================================
13764 --DBMS_OUTPUT.PUT_LINE('Validate Transaction Inventory Org ...');
13765 --DBMS_OUTPUT.PUT_LINE('p_charges_detail_rec.transaction_inventory_org = '||p_charges_detail_rec.transaction_inventory_org);
13766 IF p_validation_mode = 'I' THEN
13767 IF p_charges_detail_rec.transaction_inventory_org IS NOT NULL THEN
13768 l_valid_check := IS_TXN_INV_ORG_VALID(p_txn_inv_org => p_charges_detail_rec.transaction_inventory_org,
13769 --p_org_id => l_org_id,
13770 -- p_org_id => x_charges_detail_rec.org_id,
13771 p_inv_id => x_charges_detail_rec.inventory_item_id_in,
13772 x_msg_data => l_msg_data,
13773 x_msg_count => l_msg_count,
13774 x_return_status => l_return_status ) ;
13775
13776 IF l_return_status = G_RET_STS_UNEXP_ERROR THEN
13777 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
13778 ELSIF l_return_status = G_RET_STS_ERROR THEN
13779 RAISE FND_API.G_EXC_ERROR;
13780 END IF;
13781
13782 IF l_valid_check <> 'Y' THEN
13783 FND_MESSAGE.Set_Name('CS', 'CS_CHG_INVALID_TXN_INV_ORG');
13784 FND_MESSAGE.Set_Token('ORG_ID', p_charges_detail_rec.transaction_inventory_org);
13785 FND_MSG_PUB.Add;
13786 RAISE FND_API.G_EXC_ERROR;
13787 END IF;
13788
13789 END IF;
13790 x_charges_detail_rec.transaction_inventory_org := p_charges_detail_rec.transaction_inventory_org;
13791
13792 ELSIF p_validation_mode = 'U' THEN
13793 -- assign from db record
13794 -- need to find out if we can update the transaction_inventory_org
13795 --
13796
13797 IF p_charges_detail_rec.transaction_inventory_org <> FND_API.G_MISS_NUM AND
13798 p_charges_detail_rec.transaction_inventory_org IS NOT NULL THEN
13799
13800 l_valid_check := IS_TXN_INV_ORG_VALID
13801 (p_txn_inv_org => p_charges_detail_rec.transaction_inventory_org,
13802 -- p_org_id => x_charges_detail_rec.org_id,
13803 p_inv_id => x_charges_detail_rec.inventory_item_id_in,
13804 x_msg_data => l_msg_data,
13805 x_msg_count => l_msg_count,
13806 x_return_status => l_return_status ) ;
13807
13808 IF l_return_status = G_RET_STS_UNEXP_ERROR THEN
13809 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
13810 ELSIF l_return_status = G_RET_STS_ERROR THEN
13811 RAISE FND_API.G_EXC_ERROR;
13812 END IF;
13813
13814 IF l_valid_check <> 'Y' THEN
13815 FND_MESSAGE.Set_Name('CS', 'CS_CHG_INVALID_TXN_INV_ORG');
13816 FND_MESSAGE.Set_Token('ORG_ID', p_charges_detail_rec.transaction_inventory_org);
13817 FND_MSG_PUB.Add;
13818 RAISE FND_API.G_EXC_ERROR;
13819 END IF;
13820
13821 x_charges_detail_rec.transaction_inventory_org := p_charges_detail_rec.transaction_inventory_org;
13822
13823 ELSIF p_charges_detail_rec.transaction_inventory_org = FND_API.G_MISS_NUM THEN
13824 x_charges_detail_rec.transaction_inventory_org := l_db_det_rec.transaction_inventory_org;
13825 ELSE
13826 x_charges_detail_rec.transaction_inventory_org := NULL;
13827 END IF;
13828
13829 END IF;
13830
13831 --DBMS_OUTPUT.PUT_LINE('Validate Transaction Inventory Org completed. x_charges_detail_rec.transaction_inventory_org = '|| x_charges_detail_rec.transaction_inventory_org);
13832
13833 -- 12.1.3 Charges Logistics PRoject
13834
13835 IF p_validation_mode = 'I' THEN
13836
13837
13838 x_charges_detail_rec.shipping_method := null;
13839 x_charges_detail_rec.arrival_date_time := null;
13840 x_charges_detail_rec.shipping_method := null;
13841 x_charges_detail_rec.distance := null;
13842 x_charges_detail_rec.need_by_date := null;
13843
13844 IF x_charges_detail_rec.line_category_code = 'ORDER' AND fnd_profile.value('CS_SR_EN_SHIP_SOUR_RULE') = 'Y' Then
13845
13846 If x_charges_detail_rec.transaction_inventory_org is not Null AND x_charges_detail_rec.transaction_inventory_org <> FND_API.G_MISS_NUM THEN
13847
13848 IF p_charges_detail_rec.transaction_sub_inventory IS NOT NULL AND p_charges_detail_rec.transaction_sub_inventory <> FND_API.G_MISS_CHAR Then
13849 Open c_sub_inventory(x_charges_detail_rec.transaction_inventory_org, p_charges_detail_rec.transaction_sub_inventory);
13850 Fetch c_sub_inventory into l_sub_inv_exists;
13851 If c_sub_inventory%FOUND Then
13852 x_charges_detail_rec.transaction_sub_inventory := p_charges_detail_rec.transaction_sub_inventory;
13853 Else
13854 FND_MESSAGE.Set_Name('CS', 'CS_CHG_INVALID_SUB_INV');
13855 FND_MESSAGE.Set_Token('SUB_INVENTORY', p_charges_detail_rec.transaction_sub_inventory);
13856 FND_MSG_PUB.Add;
13857 RAISE FND_API.G_EXC_ERROR;
13858 End If;
13859 Else
13860 x_charges_detail_rec.transaction_sub_inventory := Null;
13861 End If;
13862
13863 If ( p_charges_detail_rec.shipping_method is not null and p_charges_detail_rec.shipping_method <> FND_API.G_MISS_CHAR)
13864 OR (p_charges_detail_rec.arrival_date_time is not Null and p_charges_detail_rec.arrival_date_time <> FND_API.G_MISS_DATE) Then
13865
13866 l_required_parts(1).inventory_item_id := x_charges_detail_rec.inventory_item_id_in;
13867 l_required_parts(1).quantity := x_charges_detail_rec.quantity_required;
13868 l_party_site_id := x_charges_detail_rec.ship_to_org_id;
13869
13870 Open c_location_id(l_party_site_id);
13871 Fetch c_location_id into l_location_id;
13872 Close c_location_id;
13873
13874 l_search_params.manned_warehouses := TRUE;
13875 l_search_params.to_hz_location_id := l_location_id;
13876 l_search_params.include_closed := TRUE;
13877
13878 If p_charges_detail_rec.need_by_date is not Null and p_charges_detail_rec.need_by_date <> FND_API.G_MISS_DATE Then
13879 l_search_params.need_by_date := p_charges_detail_rec.need_by_date;
13880 x_charges_detail_rec.need_by_date := p_charges_detail_rec.need_by_date;
13881 Else
13882 l_search_params.need_by_date := null;
13883 End If;
13884
13885 csp_part_search_pvt.search(
13886 p_required_parts => l_required_parts,
13887 p_search_params => l_search_params,
13888 x_return_status => x_return_status,
13889 x_msg_data => x_msg_data,
13890 x_msg_count => x_msg_count);
13891
13892 If x_return_status = 'S' then
13893
13894 For i in c_ship_dtls(x_charges_detail_rec.transaction_inventory_org) Loop
13895 If ( p_charges_detail_rec.shipping_method is not null and p_charges_detail_rec.shipping_method <> FND_API.G_MISS_CHAR) Then
13896
13897 if i.shipping_method = p_charges_detail_rec.shipping_method Then
13898 x_charges_detail_rec.shipping_method := p_charges_detail_rec.shipping_method;
13899 l_shipping_method_found :='Y';
13900 l_found := 'Y';
13901 else
13902 l_found := 'N';
13903 End If;
13904 End If;
13905
13906 If (p_charges_detail_rec.arrival_date_time is not Null and p_charges_detail_rec.arrival_date_time <> FND_API.G_MISS_DATE) Then
13907 If trunc(i.arrival_date) = trunc(p_charges_detail_rec.arrival_date_time) then
13908 x_charges_detail_rec.arrival_date_time := p_charges_detail_rec.arrival_date_time;
13909 l_arrival_date_found :='Y';
13910 l_found := 'Y';
13911 Else
13912 l_found := 'N';
13913 End If;
13914 Else
13915 x_charges_detail_rec.arrival_date_time := Null;
13916 End If;
13917
13918 If (p_charges_detail_rec.distance is not Null and p_charges_detail_rec.distance <> FND_API.G_MISS_NUM) Then
13919
13920 If i.distance = p_charges_detail_rec.distance then
13921 x_charges_detail_rec.distance := p_charges_detail_rec.distance;
13922 l_distance_found :='Y';
13923 l_found := 'Y';
13924 Else
13925 l_found := 'N';
13926 End If;
13927 Else
13928 x_charges_detail_rec.distance := Null;
13929 End If;
13930
13931 If ((l_found ='Y') and (NOT (p_charges_detail_rec.shipping_method is not null and l_shipping_method_found = 'N' ))
13932 and (NOT (p_charges_detail_rec.arrival_date_time is not null and l_arrival_date_found = 'N' ))
13933 and (NOT (p_charges_detail_rec.distance is not null and l_distance_found = 'N' ))
13934 ) Then
13935 Exit;
13936 End If;
13937 End Loop;
13938
13939 If (p_charges_detail_rec.shipping_method is not null and l_shipping_method_found ='N' ) then
13940 FND_MESSAGE.Set_Name('CS', 'CS_CHG_INVALID_SHIP_METHOD');
13941 FND_MESSAGE.Set_Token('SHIPPING_METHOD', p_charges_detail_rec.shipping_method);
13942 FND_MSG_PUB.Add;
13943 RAISE FND_API.G_EXC_ERROR;
13944 end if;
13945
13946 If (l_arrival_date_found ='N' and p_charges_detail_rec.arrival_date_time is not null ) Then
13947 FND_MESSAGE.Set_Name('CS', 'CS_CHG_INVALID_ARRV_DT');
13948 FND_MESSAGE.Set_Token('ARRIVAL_DATE', p_charges_detail_rec.arrival_date_time);
13949 FND_MSG_PUB.Add;
13950 RAISE FND_API.G_EXC_ERROR;
13951 End If;
13952 If (l_distance_found ='N' and p_charges_detail_rec.distance is not null and p_charges_detail_rec.distance <> FND_API.G_MISS_NUM) Then
13953 FND_MESSAGE.Set_Name('CS', 'CS_CHG_INVALID_SHIP_DIST');
13954 FND_MESSAGE.Set_Token('DISTANCE', p_charges_detail_rec.distance);
13955 FND_MSG_PUB.Add;
13956 RAISE FND_API.G_EXC_ERROR;
13957 end if;
13958 End If; --x_return_status = 'S'
13959 Else
13960 x_charges_detail_rec.shipping_method := Null;
13961 x_charges_detail_rec.arrival_date_time := Null;
13962 x_charges_detail_rec.distance := null;
13963 x_charges_detail_rec.need_by_date := null;
13964 End If;
13965 Else -- transaction_inventory_org is null
13966 x_charges_detail_rec.shipping_method := Null;
13967 x_charges_detail_rec.arrival_date_time := Null;
13968 x_charges_detail_rec.distance := null;
13969 x_charges_detail_rec.need_by_date := null;
13970 End If;
13971 End If;
13972 /* End bug 12537583 */
13973 /* Commented below code for bug 12537583 */
13974 /* l_search_params.manned_warehouses := TRUE;
13975 l_search_params.need_by_date := null;
13976 l_search_params.to_hz_location_id := l_location_id;
13977 l_search_params.include_closed := TRUE;
13978
13979 csp_part_search_pvt.search(
13980 p_required_parts => l_required_parts,
13981 p_search_params => l_search_params,
13982 x_return_status => x_return_status,
13983 x_msg_data => x_msg_data,
13984 x_msg_count => x_msg_count);
13985
13986 If x_return_status = 'S' then
13987 Open c_ship_dtls(x_charges_detail_rec.transaction_inventory_org, x_charges_detail_rec.transaction_sub_inventory);
13988 Fetch c_ship_dtls into l_shipping_method_code, l_arrival_date;
13989 Close c_ship_dtls;
13990
13991 If p_charges_detail_rec.shipping_method is not null and p_charges_detail_rec.shipping_method <> FND_API.G_MISS_CHAR Then
13992 If l_shipping_method_code = p_charges_detail_rec.shipping_method Then
13993 x_charges_detail_rec.shipping_method := p_charges_detail_rec.shipping_method;
13994 Else
13995 FND_MESSAGE.Set_Name('CS', 'CS_CHG_INVALID_SHIP_METHOD');
13996 FND_MESSAGE.Set_Token('SHIPPING_METHOD', p_charges_detail_rec.shipping_method);
13997 FND_MSG_PUB.Add;
13998 RAISE FND_API.G_EXC_ERROR;
13999 End If;
14000 Else
14001 x_charges_detail_rec.shipping_method := Null;
14002 End If;
14003
14004 If p_charges_detail_rec.arrival_date_time is not Null and p_charges_detail_rec.arrival_date_time <> FND_API.G_MISS_DATE Then
14005 If trunc(l_arrival_date) = trunc(p_charges_detail_rec.arrival_date_time) then
14006 x_charges_detail_rec.arrival_date_time := p_charges_detail_rec.arrival_date_time;
14007 Else
14008 FND_MESSAGE.Set_Name('CS', 'CS_CHG_INVALID_ARRV_DT');
14009 FND_MESSAGE.Set_Token('ARRIVAL_DATE', p_charges_detail_rec.arrival_date_time);
14010 FND_MSG_PUB.Add;
14011 RAISE FND_API.G_EXC_ERROR;
14012 End If;
14013 Else
14014 x_charges_detail_rec.arrival_date_time := Null;
14015 End If;
14016 End If; --x_return_status
14017 Else -- shipping method , arrival date not null
14018
14019 x_charges_detail_rec.shipping_method := Null;
14020 x_charges_detail_rec.arrival_date_time := Null;
14021 End If;
14022
14023 Else
14024
14025 FND_MESSAGE.Set_Name('CS', 'CS_CHG_INVALID_SUB_INV');
14026 FND_MESSAGE.Set_Token('SUB_INVENTORY', p_charges_detail_rec.transaction_sub_inventory);
14027 FND_MSG_PUB.Add;
14028 RAISE FND_API.G_EXC_ERROR;
14029 End If; --c_sub_inventory
14030 Close c_sub_inventory; */
14031 -- Else
14032 -- x_charges_detail_rec.transaction_sub_inventory := Null;
14033 -- End If;
14034
14035 ELSIF p_validation_mode = 'U' THEN
14036 -- bug 10404123
14037 IF x_charges_detail_rec.line_category_code = 'ORDER' AND fnd_profile.value('CS_SR_EN_SHIP_SOUR_RULE') = 'Y' Then
14038 If (x_charges_detail_rec.transaction_inventory_org is not Null AND x_charges_detail_rec.transaction_inventory_org <> FND_API.G_MISS_NUM) THEN
14039
14040 IF (p_charges_detail_rec.transaction_sub_inventory IS NOT NULL AND p_charges_detail_rec.transaction_sub_inventory <> FND_API.G_MISS_CHAR) Then
14041
14042 Open c_sub_inventory(x_charges_detail_rec.transaction_inventory_org, p_charges_detail_rec.transaction_sub_inventory);
14043 Fetch c_sub_inventory into l_sub_inv_exists;
14044 If c_sub_inventory%FOUND Then
14045 x_charges_detail_rec.transaction_sub_inventory := p_charges_detail_rec.transaction_sub_inventory;
14046 Else
14047 FND_MESSAGE.Set_Name('CS', 'CS_CHG_INVALID_SUB_INV');
14048 FND_MESSAGE.Set_Token('SUB_INVENTORY', p_charges_detail_rec.transaction_sub_inventory);
14049 FND_MSG_PUB.Add;
14050 RAISE FND_API.G_EXC_ERROR;
14051 End If;
14052 Close c_sub_inventory;
14053 ELSE
14054 x_charges_detail_rec.transaction_sub_inventory := l_db_det_rec.transaction_sub_inventory;
14055 End if;
14056
14057 IF ( p_charges_detail_rec.shipping_method is not null and p_charges_detail_rec.shipping_method <> FND_API.G_MISS_CHAR)
14058 OR (p_charges_detail_rec.arrival_date_time is not Null and p_charges_detail_rec.arrival_date_time <> FND_API.G_MISS_DATE) Then
14059
14060 l_required_parts(1).inventory_item_id := x_charges_detail_rec.inventory_item_id_in;
14061 l_required_parts(1).quantity := x_charges_detail_rec.quantity_required;
14062 l_party_site_id := x_charges_detail_rec.ship_to_org_id;
14063
14064 Open c_location_id(l_party_site_id);
14065 Fetch c_location_id into l_location_id;
14066 Close c_location_id;
14067
14068 l_search_params.manned_warehouses := TRUE;
14069 -- Charges MED Project
14070 If p_charges_detail_rec.need_by_date is not Null and p_charges_detail_rec.need_by_date <> FND_API.G_MISS_DATE Then
14071 l_search_params.need_by_date := p_charges_detail_rec.need_by_date;
14072 x_charges_detail_rec.need_by_date := p_charges_detail_rec.need_by_date;
14073 else
14074 l_search_params.need_by_date := Null;
14075 End If;
14076 l_search_params.to_hz_location_id := l_location_id;
14077 l_search_params.include_closed := TRUE;
14078
14079 csp_part_search_pvt.search(
14080 p_required_parts => l_required_parts,
14081 p_search_params => l_search_params,
14082 x_return_status => x_return_status,
14083 x_msg_data => x_msg_data,
14084 x_msg_count => x_msg_count);
14085
14086 If x_return_status = 'S' then
14087
14088
14089 For i in c_ship_dtls(x_charges_detail_rec.transaction_inventory_org) Loop
14090 If p_charges_detail_rec.shipping_method is not null and p_charges_detail_rec.shipping_method <> FND_API.G_MISS_CHAR Then
14091
14092 If i.shipping_method = p_charges_detail_rec.shipping_method Then
14093 l_found :='Y';
14094 l_shipping_method_found := 'Y';
14095 x_charges_detail_rec.shipping_method := p_charges_detail_rec.shipping_method;
14096 Else
14097 l_found :='N';
14098 End If;
14099 Else
14100 x_charges_detail_rec.shipping_method := l_db_det_rec.shipping_method;
14101 End If;
14102
14103 If p_charges_detail_rec.arrival_date_time is not Null and p_charges_detail_rec.arrival_date_time <> FND_API.G_MISS_DATE Then
14104
14105 If trunc(i.arrival_date) = trunc(p_charges_detail_rec.arrival_date_time) then
14106 x_charges_detail_rec.arrival_date_time := p_charges_detail_rec.arrival_date_time;
14107 l_found := 'Y';
14108 l_arrival_date_found :='Y';
14109 Else
14110 l_found := 'N';
14111 End If;
14112 Else
14113 x_charges_detail_rec.arrival_date_time := l_db_det_rec.arrival_date_time;
14114 End If;
14115
14116 --Charges MED
14117
14118 If p_charges_detail_rec.distance is not Null and p_charges_detail_rec.distance <> FND_API.G_MISS_NUM Then
14119 If i.distance = p_charges_detail_rec.distance then
14120 l_found :='Y';
14121 l_distance_found :='Y';
14122 x_charges_detail_rec.distance := p_charges_detail_rec.distance;
14123 Else
14124 l_found := 'N';
14125 End If;
14126 Else
14127 x_charges_detail_rec.distance := l_db_det_rec.shipping_distance;
14128 End If;
14129
14130 If ((l_found ='Y') and (NOT (p_charges_detail_rec.shipping_method is not null and l_shipping_method_found = 'N' ))
14131 and (NOT (p_charges_detail_rec.arrival_date_time is not null and l_arrival_date_found = 'N' ))
14132 and (NOT (p_charges_detail_rec.distance is not null and l_distance_found = 'N' ))
14133 ) Then
14134 Exit;
14135 End If;
14136
14137 End Loop;
14138
14139 If (p_charges_detail_rec.shipping_method is not null and l_shipping_method_found ='N' ) then
14140 FND_MESSAGE.Set_Name('CS', 'CS_CHG_INVALID_SHIP_METHOD');
14141 FND_MESSAGE.Set_Token('SHIPPING_METHOD', p_charges_detail_rec.shipping_method);
14142 FND_MSG_PUB.Add;
14143 RAISE FND_API.G_EXC_ERROR;
14144 end if;
14145
14146 If (l_arrival_date_found ='N' and p_charges_detail_rec.arrival_date_time is not null ) Then
14147 FND_MESSAGE.Set_Name('CS', 'CS_CHG_INVALID_ARRV_DT');
14148 FND_MESSAGE.Set_Token('ARRIVAL_DATE', p_charges_detail_rec.arrival_date_time);
14149 FND_MSG_PUB.Add;
14150 RAISE FND_API.G_EXC_ERROR;
14151 End If;
14152 If (l_distance_found ='N' and p_charges_detail_rec.distance is not null and p_charges_detail_rec.distance <> FND_API.G_MISS_NUM) Then
14153 FND_MESSAGE.Set_Name('CS', 'CS_CHG_INVALID_SHIP_DIST');
14154 FND_MESSAGE.Set_Token('DISTANCE', p_charges_detail_rec.distance);
14155 FND_MSG_PUB.Add;
14156 RAISE FND_API.G_EXC_ERROR;
14157 end if;
14158
14159 End If; -- return status = 'S'
14160
14161 /*Open c_ship_dtls(x_charges_detail_rec.transaction_inventory_org, x_charges_detail_rec.transaction_sub_inventory);
14162 Fetch c_ship_dtls into l_shipping_method_code, l_arrival_date,l_distance;
14163 Close c_ship_dtls;*/
14164 Else
14165 x_charges_detail_rec.shipping_method := l_db_det_rec.shipping_method;
14166 x_charges_detail_rec.arrival_date_time := l_db_det_rec.arrival_date_time;
14167 x_charges_detail_rec.distance := l_db_det_rec.shipping_distance;
14168 x_charges_detail_rec.need_by_date := l_db_det_rec.need_by_date;
14169
14170 End If;
14171 END IF;
14172 End If;
14173 End If;
14174
14175 IF p_validation_mode = 'I' THEN
14176
14177 IF p_charges_detail_rec.return_type IS NOT NULL and p_charges_detail_rec.return_type <> FND_API.G_MISS_CHAR THEN
14178 Open c_return_type(p_charges_detail_rec.return_type);
14179 Fetch c_return_type into l_return_type;
14180 If c_return_type%FOUND Then
14181
14182 x_charges_detail_rec.return_type := p_charges_detail_rec.return_type;
14183
14184 IF l_line_order_category_code = 'RETURN' THEN
14185
14186 Open c_location_id(x_charges_detail_rec.ship_to_org_id);
14187 Fetch c_location_id into l_location_id;
14188 Close c_location_id;
14189
14190 CSP_EXCESS_PARTS_PVT.charges_return_routing(
14191 p_return_type => p_charges_detail_rec.return_type,
14192 p_hz_location_id => l_location_id,
14193 p_item_id => x_charges_detail_rec.inventory_item_id_in,
14194 x_organization_id => x_organization_id,
14195 x_subinventory_code => x_subinventory_code,
14196 x_hz_location_id => x_hz_location_id,
14197 x_hr_location_id => x_hr_location_id,
14198 x_operating_unit => x_operating_unit,
14199 x_return_status => l_return_status,
14200 x_msg_count => l_msg_count,
14201 x_msg_data => l_msg_data);
14202
14203 IF x_return_status = 'S' THEN
14204 x_charges_detail_rec.transaction_inventory_org := x_organization_id;
14205 x_charges_detail_rec.transaction_sub_inventory := x_subinventory_code;
14206 END IF;
14207 End If;
14208 Else
14209 FND_MESSAGE.Set_Name('CS', 'CS_CHG_INVALID_RETURN_TYPE');
14210 FND_MESSAGE.Set_Token('RETURN_TYPE', p_charges_detail_rec.return_type);
14211 FND_MSG_PUB.Add;
14212 RAISE FND_API.G_EXC_ERROR;
14213 End If;
14214 Close c_return_type;
14215 Else
14216 x_charges_detail_rec.return_type := Null;
14217
14218 End If;
14219
14220 ELSIF p_validation_mode = 'U' THEN
14221 IF p_charges_detail_rec.return_type <> FND_API.G_MISS_CHAR AND
14222 p_charges_detail_rec.return_type <> l_db_det_rec.return_type AND
14223 p_charges_detail_rec.return_type IS NOT NULL THEN
14224
14225 Open c_return_type(p_charges_detail_rec.return_type);
14226 Fetch c_return_type into l_return_type;
14227 If c_return_type%FOUND Then
14228
14229 x_charges_detail_rec.return_type := p_charges_detail_rec.return_type;
14230
14231 IF l_line_order_category_code = 'RETURN' THEN
14232
14233 Open c_location_id(x_charges_detail_rec.ship_to_org_id);
14234 Fetch c_location_id into l_location_id;
14235 Close c_location_id;
14236
14237 CSP_EXCESS_PARTS_PVT.charges_return_routing(
14238 p_return_type => p_charges_detail_rec.return_type,
14239 p_hz_location_id => l_location_id,
14240 p_item_id => x_charges_detail_rec.inventory_item_id_in,
14241 x_organization_id => x_organization_id,
14242 x_subinventory_code => x_subinventory_code,
14243 x_hz_location_id => x_hz_location_id,
14244 x_hr_location_id => x_hr_location_id,
14245 x_operating_unit => x_operating_unit,
14246 x_return_status => l_return_status,
14247 x_msg_count => l_msg_count,
14248 x_msg_data => l_msg_data);
14249
14250 IF x_return_status = 'S' THEN
14251 x_charges_detail_rec.transaction_inventory_org := x_organization_id;
14252 x_charges_detail_rec.transaction_sub_inventory := x_subinventory_code;
14253 END IF;
14254 End If;
14255 Else
14256 FND_MESSAGE.Set_Name('CS', 'CS_CHG_INVALID_RETURN_TYPE');
14257 FND_MESSAGE.Set_Token('RETURN_TYPE', p_charges_detail_rec.return_type);
14258 FND_MSG_PUB.Add;
14259 RAISE FND_API.G_EXC_ERROR;
14260 End If;
14261 Close c_return_type;
14262 ELSIF p_charges_detail_rec.return_type = FND_API.G_MISS_CHAR THEN
14263 x_charges_detail_rec.return_type := l_db_det_rec.return_type;
14264 ELSE
14265 x_charges_detail_rec.return_type := NULL;
14266 END IF;
14267
14268 END IF;
14269 -- End of 12.1.3 Charges Logistics Project
14270
14271
14272 --===================================
14273 -- Validate Order Information
14274 --===================================
14275 --DBMS_OUTPUT.PUT_LINE('Validate Order Information ...');
14276
14277 IF p_validation_mode = 'I' THEN
14278
14279 IF x_charges_detail_rec.add_to_order_flag = 'Y' AND
14280 x_charges_detail_rec.interface_to_oe_flag = 'Y' THEN
14281
14282 IF p_charges_detail_rec.order_header_id IS NULL THEN
14283
14284 --Charges needs a order number when interfaceing
14285 --to OM if add to order flag = 'Y'
14286
14287 --RAISE FND_API.G_EXC_ERROR;
14288 --null;
14289 FND_MESSAGE.Set_Name('CS', 'CS_CHG_ORDER_NUMBER_REQUIRED');
14290 FND_MSG_PUB.Add;
14291 RAISE FND_API.G_EXC_ERROR;
14292 ELSE
14293
14294 -- If order number provided then validate the order
14295
14296 Validate_Order(
14297 p_api_name => p_api_name,
14298 p_order_header_id => p_charges_detail_rec.order_header_id,
14299 --p_org_id => l_org_id,
14300 p_org_id => x_charges_detail_rec.org_id,
14301 x_return_status => l_return_status,
14302 x_msg_count => l_msg_count,
14303 x_msg_data => l_msg_data);
14304
14305 IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
14306
14307 --RAISE FND_API.G_EXC_ERROR ;
14308 FND_MESSAGE.Set_Name('CS', 'CS_CHG_INVALID_ORDER');
14309 FND_MESSAGE.SET_TOKEN('ORDER_HEADER_ID', p_charges_detail_rec.order_header_id);
14310 --FND_MESSAGE.SET_TOKEN('TEXT', l_msg_data, TRUE);
14311 FND_MSG_PUB.Add;
14312 RAISE FND_API.G_EXC_ERROR;
14313 ELSE
14314
14315 x_charges_detail_rec.order_header_id := p_charges_detail_rec.order_header_id;
14316 x_charges_detail_rec.order_line_id := p_charges_detail_rec.order_line_id;
14317
14318 END IF;
14319
14320 END IF;
14321
14322 ELSE
14323
14324 --If the add_to_order_flag = 'Y' and order is provided
14325
14326 IF x_charges_detail_rec.add_to_order_flag = 'Y' AND
14327 p_charges_detail_rec.order_header_id IS NOT NULL THEN
14328
14329 Validate_Order(
14330 p_api_name => p_api_name,
14331 p_order_header_id => p_charges_detail_rec.order_header_id,
14332 --p_org_id => l_org_id,
14333 p_org_id => x_charges_detail_rec.org_id,
14334 x_return_status => l_return_status,
14335 x_msg_count => l_msg_count,
14336 x_msg_data => l_msg_data);
14337
14338 IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
14339
14340 --RAISE FND_API.G_EXC_ERROR ;
14341 FND_MESSAGE.Set_Name('CS', 'CS_CHG_INVALID_ORDER');
14342 FND_MESSAGE.SET_TOKEN('ORDER_HEADER_ID', p_charges_detail_rec.order_header_id);
14343 --FND_MESSAGE.SET_TOKEN('TEXT', l_msg_data, TRUE);
14344 FND_MSG_PUB.Add;
14345 RAISE FND_API.G_EXC_ERROR;
14346
14347 ELSE
14348
14349 x_charges_detail_rec.order_header_id := p_charges_detail_rec.order_header_id;
14350 x_charges_detail_rec.order_line_id := p_charges_detail_rec.order_line_id;
14351
14352 END IF;
14353
14354 --In all other cases
14355
14356 ELSE
14357
14358 x_charges_detail_rec.order_line_id := NULL;
14359 x_charges_detail_rec.order_header_id := NULL;
14360
14361 END IF;
14362 END IF;
14363
14364 ELSIF p_validation_mode = 'U' THEN
14365
14366 IF l_db_det_rec.order_line_id IS NULL THEN
14367
14368 IF x_charges_detail_rec.add_to_order_flag = 'Y' AND
14369 x_charges_detail_rec.interface_to_oe_flag = 'Y' THEN
14370
14371
14372 IF p_charges_detail_rec.order_header_id <> FND_API.G_MISS_NUM AND
14373 p_charges_detail_rec.order_header_id IS NOT NULL THEN
14374
14375 Validate_Order(
14376 p_api_name => p_api_name,
14377 p_order_header_id => p_charges_detail_rec.order_header_id,
14378 p_org_id => x_charges_detail_rec.org_id,
14379 x_return_status => l_return_status,
14380 x_msg_count => l_msg_count,
14381 x_msg_data => l_msg_data);
14382
14383 IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
14384 --RAISE FND_API.G_EXC_ERROR ;
14385 FND_MESSAGE.Set_Name('CS', 'CS_CHG_INVALID_ORDER');
14386 FND_MESSAGE.SET_TOKEN('ORDER_HEADER_ID', p_charges_detail_rec.order_header_id);
14387 FND_MSG_PUB.Add;
14388 RAISE FND_API.G_EXC_ERROR;
14389 ELSE
14390 x_charges_detail_rec.order_header_id := p_charges_detail_rec.order_header_id;
14391 END IF;
14392
14393 ELSIF p_charges_detail_rec.order_header_id = FND_API.G_MISS_NUM THEN
14394 IF l_db_det_rec.order_header_id IS NOT NULL THEN
14395 x_charges_detail_rec.order_header_id := l_db_det_rec.order_header_id;
14396 ELSE
14397 --order number required
14398 FND_MESSAGE.Set_Name('CS', 'CS_CHG_ORDER_NUMBER_REQUIRED');
14399 FND_MSG_PUB.Add;
14400 RAISE FND_API.G_EXC_ERROR;
14401 END IF;
14402 ELSE
14403 --order number not passed
14404 --order number required
14405 FND_MESSAGE.Set_Name('CS', 'CS_CHG_ORDER_NUMBER_REQUIRED');
14406 FND_MSG_PUB.Add;
14407 RAISE FND_API.G_EXC_ERROR;
14408 END IF;
14409
14410
14411 ELSE
14412 --If the add_to_order_flag = 'Y' and order is provided
14413 IF x_charges_detail_rec.add_to_order_flag = 'Y' AND
14414 p_charges_detail_rec.order_header_id <> FND_API.G_MISS_NUM AND
14415 p_charges_detail_rec.order_header_id IS NOT NULL THEN
14416
14417 Validate_Order(
14418 p_api_name => p_api_name,
14419 p_order_header_id => p_charges_detail_rec.order_header_id,
14420 --p_org_id => l_org_id,
14421 p_org_id => x_charges_detail_rec.org_id,
14422 x_return_status => l_return_status,
14423 x_msg_count => l_msg_count,
14424 x_msg_data => l_msg_data);
14425
14426 IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
14427
14428 --RAISE FND_API.G_EXC_ERROR ;
14429 FND_MESSAGE.Set_Name('CS', 'CS_CHG_INVALID_ORDER');
14430 FND_MESSAGE.SET_TOKEN('ORDER_HEADER_ID', p_charges_detail_rec.order_header_id);
14431 --FND_MESSAGE.SET_TOKEN('TEXT', l_msg_data, TRUE);
14432 FND_MSG_PUB.Add;
14433 RAISE FND_API.G_EXC_ERROR;
14434
14435 ELSE
14436
14437 x_charges_detail_rec.order_header_id := p_charges_detail_rec.order_header_id;
14438 x_charges_detail_rec.order_line_id := p_charges_detail_rec.order_line_id;
14439
14440 END IF;
14441
14442 --In all other cases
14443
14444 ELSE
14445
14446 x_charges_detail_rec.order_line_id := NULL;
14447 x_charges_detail_rec.order_header_id := NULL;
14448
14449 END IF;
14450 END IF;
14451 ELSE
14452
14453 --cannot add to order
14454 --line already interfaced to om
14455 --raise error
14456 FND_MESSAGE.SET_NAME('CS', 'CS_CHG_CANNOT_ADD_CHG_TO_ORDER');
14457 FND_MESSAGE.SET_TOKEN('API_NAME', p_api_name);
14458 FND_MSG_PUB.Add;
14459 RAISE FND_API.G_EXC_ERROR;
14460 END IF;
14461 END IF;
14462
14463
14464 --===================================
14465 --Validate Purchase Order Information
14466 --===================================
14467 --DBMS_OUTPUT.PUT_LINE('Validate Purchase Order Information ...');
14468
14469 IF p_validation_mode = 'I' THEN
14470 IF p_charges_detail_rec.purchase_order_num IS NOT NULL THEN
14471 -- assign to out record
14472 x_charges_detail_rec.purchase_order_num := p_charges_detail_rec.purchase_order_num;
14473 ELSE
14474 IF l_cust_po_number IS NOT NULL THEN
14475 -- assign the customer po number from service
14476 x_charges_detail_rec.purchase_order_num := l_cust_po_number;
14477 ELSE
14478 -- get the po number from contracts of a contract exists
14479 IF l_po_number IS NOT NULL THEN
14480 x_charges_detail_rec.purchase_order_num := l_po_number;
14481 ELSE
14482 x_charges_detail_rec.purchase_order_num := null;
14483 END IF;
14484 END IF;
14485 END IF;
14486 ELSIF p_validation_mode = 'U' THEN
14487 -- bug Fix for Bug # 3084256
14488 IF p_charges_detail_rec.purchase_order_num <> FND_API.G_MISS_CHAR AND
14489 p_charges_detail_rec.purchase_order_num IS NOT NULL THEN
14490 x_charges_detail_rec.purchase_order_num := p_charges_detail_rec.purchase_order_num;
14491 ELSIF
14492 p_charges_detail_rec.purchase_order_num = FND_API.G_MISS_CHAR THEN
14493 x_charges_detail_rec.purchase_order_num := l_db_det_rec.purchase_order_num;
14494 ELSE
14495 --null is passed
14496 x_charges_detail_rec.purchase_order_num := null;
14497 END IF;
14498 END IF;
14499
14500
14501 --====================================
14502 --Validate Billing Engine Information
14503 --====================================
14504 --DBMS_OUTPUT.PUT_LINE('Validate Billing Engine Information ...');
14505
14506 IF p_validation_mode = 'I' THEN
14507
14508 IF p_charges_detail_rec.generated_by_bca_engine IS NULL THEN
14509 x_charges_detail_rec.generated_by_bca_engine := 'N';
14510 ELSE
14511 x_charges_detail_rec.generated_by_bca_engine := p_charges_detail_rec.generated_by_bca_engine;
14512 END IF;
14513
14514 x_charges_detail_rec.activity_start_time := p_charges_detail_rec.activity_start_time;
14515 x_charges_detail_rec.activity_end_time := p_charges_detail_rec.activity_end_time;
14516
14517 --DBMS_OUTPUT.PUT_LINE('Customer Product Id '||x_charges_detail_rec.customer_product_id);
14518
14519 END IF;
14520
14521 /* Credit Card 9358401 */
14522 IF (p_validation_mode = 'I') THEN
14523 IF (p_charges_detail_rec.instrument_payment_use_id =FND_API.G_MISS_NUM) THEN
14524 x_charges_detail_rec.instrument_payment_use_id := NULL;
14525 ELSE
14526 x_charges_detail_rec.instrument_payment_use_id :=
14527 p_charges_detail_rec.instrument_payment_use_id;
14528 END IF;
14529 ELSE /*Update mode */
14530 IF (p_charges_detail_rec.instrument_payment_use_id =FND_API.G_MISS_NUM)
14531 THEN
14532 x_charges_detail_rec.instrument_payment_use_id :=
14533 l_db_det_rec.instrument_payment_use_id;
14534 ELSE
14535 x_charges_detail_rec.instrument_payment_use_id :=
14536 p_charges_detail_rec.instrument_payment_use_id;
14537 END IF;
14538 END IF; /*p_validation_mode*/
14539
14540 IF x_charges_detail_rec.instrument_payment_use_id is not null then
14541 l_credit_status := FALSE;
14542 CS_ServiceRequest_UTIL.validate_credit_card(
14543 p_api_name => l_api_name,
14544 p_parameter_name => 'P_INSTRUMENT_PAYMENT_USE_ID',
14545 p_instrument_payment_use_id =>
14546 x_charges_detail_rec.instrument_payment_use_id,
14547 p_bill_to_acct_id => x_charges_detail_rec.bill_to_account_id,
14548 p_called_from => p_validation_mode,
14549 x_return_status => l_return_status);
14550
14551 IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
14552 x_charges_detail_rec.instrument_payment_use_id := NULL;
14553 END IF;
14554 END IF;
14555
14556 IF (p_validation_mode = 'I' AND
14557 x_charges_detail_rec.instrument_payment_use_id is NULL AND
14558 p_charges_detail_rec.instrument_payment_use_id is not null AND
14559 l_credit_status) THEN
14560 BEGIN
14561 SELECT instrument_payment_use_id
14562 INTO x_charges_detail_rec.instrument_payment_use_id
14563 FROM CS_INCIDENTS_ALL_B
14564 WHERE incident_id = p_charges_detail_rec.incident_id;
14565
14566 EXCEPTION
14567 WHEN OTHERS THEN
14568 NULL;
14569 END;
14570 END IF;
14571
14572 --DBMS_OUTPUT.PUT_LINE('ORDER_LINE_ID IS '||x_charges_detail_rec.order_line_id);
14573
14574
14575
14576
14577 -- 12.2.2 Service Projects Integration project
14578 --project_id
14579 mo_global.set_policy_context('S',x_charges_detail_rec.org_id);
14580 IF (p_validation_mode = 'I') THEN
14581 -- setting charge line's operating unit before executing PA views
14582
14583
14584
14585 IF (p_charges_detail_rec.project_id =FND_API.G_MISS_NUM) THEN
14586 x_charges_detail_rec.project_id := NULL;
14587 ELSE
14588 x_charges_detail_rec.project_id := p_charges_detail_rec.project_id;
14589 END IF;
14590
14591 ELSE /*Update mode */
14592
14593 mo_global.set_policy_context('S',x_charges_detail_rec.org_id);
14594
14595 IF (p_charges_detail_rec.project_id =FND_API.G_MISS_NUM)
14596 THEN
14597 x_charges_detail_rec.project_id := l_db_det_rec.project_id;
14598 ELSE
14599 x_charges_detail_rec.project_id := p_charges_detail_rec.project_id;
14600 END IF;
14601
14602 END IF; /*p_validation_mode*/
14603
14604 IF x_charges_detail_rec.project_id is not null then
14605 BEGIN
14606 SELECT project_id
14607 INTO x_charges_detail_rec.project_id
14608 FROM PA_PROJECTS_EXPEND_V
14609 WHERE project_id = x_charges_detail_rec.project_id;
14610
14611 If sql%rowcount=0 then
14612 x_charges_detail_rec.project_id := null;
14613 End if;
14614 EXCEPTION
14615 When Others then
14616 NUll;
14617 END;
14618
14619 END IF;
14620
14621
14622 --project_task_id
14623
14624 IF (p_validation_mode = 'I') THEN
14625 IF (p_charges_detail_rec.project_task_id =FND_API.G_MISS_NUM) THEN
14626 x_charges_detail_rec.project_task_id := NULL;
14627 ELSE
14628 x_charges_detail_rec.project_task_id := p_charges_detail_rec.project_task_id;
14629 END IF;
14630 ELSE /*Update mode */
14631 IF (p_charges_detail_rec.project_task_id =FND_API.G_MISS_NUM)
14632 THEN
14633 x_charges_detail_rec.project_task_id := l_db_det_rec.project_task_id;
14634 ELSE
14635 x_charges_detail_rec.project_task_id := p_charges_detail_rec.project_task_id;
14636 END IF;
14637 END IF; /*p_validation_mode*/
14638
14639 IF x_charges_detail_rec.project_task_id is not null then
14640 BEGIN
14641 SELECT task_id
14642 INTO x_charges_detail_rec.project_task_id
14643 FROM PA_TASKS_EXPEND_V
14644 WHERE task_id = x_charges_detail_rec.project_task_id;
14645
14646 If sql%rowcount=0 then
14647 x_charges_detail_rec.project_task_id := null;
14648 End if;
14649
14650 EXCEPTION
14651 When Others then
14652 NUll;
14653 END;
14654
14655 END IF;
14656
14657
14658 --expenditure_org_id
14659
14660 IF (p_validation_mode = 'I') THEN
14661
14662
14663 IF (p_charges_detail_rec.expenditure_org_id =FND_API.G_MISS_NUM) THEN
14664 x_charges_detail_rec.expenditure_org_id := NULL;
14665 ELSE
14666 x_charges_detail_rec.expenditure_org_id := p_charges_detail_rec.expenditure_org_id;
14667 END IF;
14668 ELSE /*Update mode */
14669 IF (p_charges_detail_rec.expenditure_org_id =FND_API.G_MISS_NUM)
14670 THEN
14671 x_charges_detail_rec.expenditure_org_id := l_db_det_rec.expenditure_org_id;
14672 ELSE
14673 x_charges_detail_rec.expenditure_org_id := p_charges_detail_rec.expenditure_org_id;
14674 END IF;
14675 END IF; /*p_validation_mode*/
14676
14677 IF x_charges_detail_rec.expenditure_org_id is not null then
14678 BEGIN
14679 SELECT organization_id
14680 INTO x_charges_detail_rec.expenditure_org_id
14681 FROM PA_ORGANIZATIONS_EXPEND_V
14682 WHERE organization_id = x_charges_detail_rec.expenditure_org_id;
14683
14684 If sql%rowcount=0 then
14685 x_charges_detail_rec.expenditure_org_id := null;
14686 End if;
14687
14688 EXCEPTION
14689 When Others then
14690 NUll;
14691 END;
14692
14693 END IF;
14694
14695
14696 --
14697 -- All the 3 attributes project_id,project_task_id and expenditure_org_id should be passed , otherwise none of the 3 attrs will be saved
14698 -- A warning will be thrown in the insert charge line flow and in the update flow an error will be thrown and the charge line will not be updated
14699 If x_charges_detail_rec.project_id is not null and x_charges_detail_rec.project_task_id is null then
14700
14701 x_charges_detail_rec.project_id := null;
14702 x_charges_detail_rec.project_task_id := null;
14703 x_charges_detail_rec.expenditure_org_id := null;
14704
14705 FND_MESSAGE.SET_NAME('CS', 'CS_SR_NO_TASK_NUM');
14706 FND_MESSAGE.SET_TOKEN('API_NAME', p_api_name);
14707 FND_MSG_PUB.Add;
14708
14709 IF (p_validation_mode ='U') then
14710 RAISE FND_API.G_EXC_ERROR;
14711 End if;
14712
14713
14714
14715 Elsif x_charges_detail_rec.project_id is null and x_charges_detail_rec.project_task_id is not null then
14716
14717 x_charges_detail_rec.project_id := null;
14718 x_charges_detail_rec.project_task_id := null;
14719 x_charges_detail_rec.expenditure_org_id := null;
14720
14721 FND_MESSAGE.SET_NAME('CS', 'CS_SR_NO_PROJ_NUM');
14722 FND_MESSAGE.SET_TOKEN('API_NAME', p_api_name);
14723 FND_MSG_PUB.Add;
14724
14725 IF (p_validation_mode ='U') then
14726 RAISE FND_API.G_EXC_ERROR;
14727 End if;
14728
14729 Elsif x_charges_detail_rec.project_id is not null and x_charges_detail_rec.project_task_id is not null and
14730 x_charges_detail_rec.expenditure_org_id is null then
14731
14732 x_charges_detail_rec.project_id := null;
14733 x_charges_detail_rec.project_task_id := null;
14734 x_charges_detail_rec.expenditure_org_id := null;
14735
14736
14737 FND_MESSAGE.SET_NAME('CS', 'CS_SR_NO_EXPENDITURE_ORG');
14738 FND_MESSAGE.SET_TOKEN('API_NAME', p_api_name);
14739 FND_MSG_PUB.Add;
14740
14741
14742 IF (p_validation_mode ='U') then
14743 RAISE FND_API.G_EXC_ERROR;
14744 End if;
14745
14746 Elsif (x_charges_detail_rec.project_id is null or x_charges_detail_rec.project_task_id is null ) and
14747 x_charges_detail_rec.expenditure_org_id is not null then
14748
14749 x_charges_detail_rec.project_id := null;
14750 x_charges_detail_rec.project_task_id := null;
14751 x_charges_detail_rec.expenditure_org_id := null;
14752
14753
14754 FND_MESSAGE.SET_NAME('CS', 'CS_SR_NO_PROJ_DETAILS');
14755 FND_MESSAGE.SET_TOKEN('API_NAME', p_api_name);
14756 FND_MSG_PUB.Add;
14757
14758
14759 IF (p_validation_mode ='U') then
14760 RAISE FND_API.G_EXC_ERROR;
14761 End if;
14762
14763
14764 Elsif ( x_charges_detail_rec.project_id is not null and x_charges_detail_rec.project_task_id is not null and
14765 x_charges_detail_rec.expenditure_org_id is not null) then -- all the 3 values are passed
14766
14767
14768 BEGIN
14769
14770 SELECT pp.project_id,
14771 pt.task_id ,
14772 HOU.organization_id
14773 INTO x_charges_detail_rec.project_id ,x_charges_detail_rec.project_task_id ,x_charges_detail_rec.expenditure_org_id
14774 FROM pa_projects_expend_v pp,
14775 pa_tasks_expend_v pt,
14776 pa_organizations_expend_v hou
14777 WHERE pp.project_id = pt.project_id
14778 AND pp.project_id = x_charges_detail_rec.project_id
14779 AND pt.task_id = x_charges_detail_rec.project_task_id
14780 AND hou.organization_id =x_charges_detail_rec.expenditure_org_id ;
14781
14782
14783
14784
14785 EXCEPTION
14786 when no_data_found then
14787
14788 FND_MESSAGE.SET_NAME('CS', 'CS_SR_INVALID_PROJECT_DETAILS');
14789 FND_MESSAGE.SET_TOKEN('API_NAME', p_api_name);
14790 FND_MSG_PUB.Add;
14791
14792 /* x_charges_detail_rec.project_id := null;
14793 x_charges_detail_rec.project_task_id := null;
14794 x_charges_detail_rec.expenditure_org_id := null;
14795 */
14796
14797 IF (p_validation_mode ='U') then
14798 RAISE FND_API.G_EXC_ERROR;
14799 End if;
14800
14801 when others then
14802 FND_MESSAGE.SET_NAME('CS', 'CS_SR_INVALID_PROJECT_DETAILS');
14803 FND_MESSAGE.SET_TOKEN('API_NAME', p_api_name);
14804 FND_MSG_PUB.Add;
14805
14806
14807 IF (p_validation_mode ='U') then
14808 RAISE FND_API.G_EXC_ERROR;
14809 End if;
14810 END;
14811
14812 If x_charges_detail_rec.project_id is null or x_charges_detail_rec.project_task_id is null
14813 or x_charges_detail_rec.expenditure_org_id is null then
14814 x_charges_detail_rec.project_id :=null;
14815 x_charges_detail_rec.project_task_id :=null;
14816 x_charges_detail_rec.expenditure_org_id :=null;
14817
14818 FND_MESSAGE.SET_NAME('CS', 'CS_INC_CLEAR_PROJECT_INFO');
14819 FND_MESSAGE.SET_TOKEN('API_NAME', p_api_name);
14820 FND_MSG_PUB.Add;
14821
14822 End if;
14823 End if; --null checks
14824
14825
14826
14827 -- End if;--validation mode
14828
14829
14830
14831 --=================================
14832 --Assign to out record --
14833 --=================================
14834
14835 -- Exception Block
14836 EXCEPTION
14837
14838 WHEN FND_API.G_EXC_ERROR THEN
14839 ROLLBACK TO Validate_Charge_Details_PUB;
14840
14841 x_return_status := FND_API.G_RET_STS_ERROR;
14842 FND_MSG_PUB.Count_And_Get(
14843 p_count => x_msg_count,
14844 p_data => x_msg_data,
14845 p_encoded => FND_API.G_FALSE);
14846
14847 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
14848 ROLLBACK TO Validate_Charge_Details_PUB;
14849 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
14850 FND_MSG_PUB.Count_And_Get(
14851 p_count => x_msg_count,
14852 p_data => x_msg_data,
14853 p_encoded => FND_API.G_FALSE);
14854
14855 WHEN G_WARNING THEN
14856 ROLLBACK TO Validate_Charge_Details_PUB;
14857 x_return_status := FND_API.G_RET_STS_SUCCESS;
14858 FND_MSG_PUB.Count_And_Get(
14859 p_count => x_msg_count,
14860 p_data => x_msg_data,
14861 p_encoded => FND_API.G_FALSE);
14862
14863
14864 WHEN OTHERS THEN
14865 ROLLBACK TO Validate_Charge_Details_PUB;
14866 FND_MESSAGE.SET_NAME('CS', 'CS_CHG_UNEXPECTED_EXEC_ERRORS');
14867 FND_MESSAGE.SET_TOKEN('ROUTINE', l_api_name);
14868 FND_MESSAGE.SET_TOKEN('SQLERRM', sqlerrm);
14869 FND_MSG_PUB.ADD;
14870 IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
14871 FND_MSG_PUB.Add_Exc_Msg(G_PKG_NAME,l_api_name);
14872 END IF ;
14873 fnd_msg_pub.count_and_get(
14874 p_count => x_msg_count
14875 ,p_data => x_msg_data);
14876 x_return_status := FND_API.G_RET_STS_ERROR;
14877
14878
14879
14880 END VALIDATE_CHARGE_DETAILS;
14881
14882
14883 --==================================
14884 -- Get Defaults from Service Request
14885 --==================================
14886
14887 PROCEDURE GET_SR_DEFAULTS(P_API_NAME IN VARCHAR2,
14888 P_INCIDENT_ID IN NUMBER,
14889 X_BUSINESS_PROCESS_ID OUT NOCOPY NUMBER,
14890 X_CUSTOMER_ID OUT NOCOPY NUMBER,
14891 X_CUSTOMER_SITE_ID OUT NOCOPY NUMBER,
14892 X_CUST_PO_NUMBER OUT NOCOPY VARCHAR2,
14893 X_CUSTOMER_PRODUCT_ID OUT NOCOPY NUMBER,
14894 X_SYSTEM_ID OUT NOCOPY NUMBER, -- Fix bug
14895 X_INVENTORY_ITEM_ID OUT NOCOPY NUMBER, -- Fix bug
14896 X_ACCOUNT_ID OUT NOCOPY NUMBER,
14897 X_BILL_TO_PARTY_ID OUT NOCOPY NUMBER,
14898 X_BILL_TO_ACCOUNT_ID OUT NOCOPY NUMBER,
14899 X_BILL_TO_CONTACT_ID OUT NOCOPY NUMBER,
14900 X_BILL_TO_SITE_ID OUT NOCOPY NUMBER,
14901 X_SHIP_TO_PARTY_ID OUT NOCOPY NUMBER,
14902 X_SHIP_TO_ACCOUNT_ID OUT NOCOPY NUMBER,
14903 X_SHIP_TO_CONTACT_ID OUT NOCOPY NUMBER,
14904 X_SHIP_TO_SITE_ID OUT NOCOPY NUMBER,
14905 X_CONTRACT_ID OUT NOCOPY NUMBER,
14906 X_CONTRACT_SERVICE_ID OUT NOCOPY NUMBER,
14907 X_INCIDENT_DATE OUT NOCOPY DATE,
14908 X_CREATION_DATE OUT NOCOPY DATE,
14909 X_MSG_DATA OUT NOCOPY VARCHAR2,
14910 X_MSG_COUNT OUT NOCOPY NUMBER,
14911 X_RETURN_STATUS OUT NOCOPY VARCHAR2) IS
14912
14913
14914 CURSOR c_incidents_def(p_incident_id IN NUMBER) IS
14915
14916 SELECT intp.business_process_id,
14917 inc.customer_id,
14918 inc.customer_site_id,
14919 inc.contract_id,
14920 inc.contract_service_id,
14921 inc.customer_po_number,
14922 inc.customer_product_id,
14923 inc.system_id, -- Fix bug
14924 inc.inventory_item_id, -- Fix bug
14925 inc.account_id,
14926 inc.incident_date,
14927 inc.creation_date,
14928 substr(hza.account_name,1,30),
14929 NVL(inc.bill_to_party_id, -999) bill_to_party_id,
14930 NVL(inc.ship_to_party_id, -999) ship_to_party_id,
14931 NVL(inc.bill_to_site_id,-999),bill_to_site_id,
14932 NVL(inc.ship_to_site_id,-999)ship_to_site_id,
14933 NVL(inc.bill_to_account_id,-999) bill_to_account_id,
14934 NVL(inc.ship_to_account_id,-999) ship_to_account_id,
14935 NVL(inc.bill_to_contact_id,-999) bill_to_contact_id,
14936 NVL(inc.ship_to_contact_id,-999) ship_to_contact_id,
14937 inc.caller_type
14938 FROM cs_incidents_all_b inc,
14939 CS_INCIDENT_TYPES intp,
14940 CS_BUSINESS_PROCESSES bp,
14941 hz_parties hzp,
14942 hz_cust_accounts hza
14943 WHERE inc.incident_id = p_incident_id
14944 AND inc.incident_type_id = intp.incident_type_id
14945 AND intp.business_process_id = bp.business_process_id
14946 AND inc.customer_id = hzp.party_id
14947 AND inc.account_id = hza.cust_account_id(+);
14948
14949
14950
14951
14952 BEGIN
14953
14954 x_return_status := FND_API.G_RET_STS_SUCCESS;
14955
14956 FOR v_incidents_def IN c_incidents_def(p_incident_id) LOOP
14957
14958 x_business_process_id := v_incidents_def.business_process_id;
14959 x_customer_id := v_incidents_def.customer_id;
14960 x_customer_site_id := v_incidents_def.customer_site_id;
14961 x_cust_po_number := v_incidents_def.customer_po_number;
14962 x_customer_product_id := v_incidents_def.customer_product_id;
14963 x_system_id := v_incidents_def.system_id;
14964 x_inventory_item_id := v_incidents_def.inventory_item_id;
14965 x_account_id := v_incidents_def.account_id;
14966 x_bill_to_party_id := v_incidents_def.bill_to_party_id;
14967 x_bill_to_account_id := v_incidents_def.bill_to_account_id;
14968 x_bill_to_contact_id := v_incidents_def.bill_to_contact_id;
14969 x_bill_to_site_id := v_incidents_def.bill_to_site_id;
14970 x_ship_to_party_id := v_incidents_def.ship_to_party_id;
14971 x_ship_to_account_id := v_incidents_def.ship_to_account_id;
14972 x_ship_to_contact_id := v_incidents_def.ship_to_contact_id;
14973 x_ship_to_site_id := v_incidents_def.ship_to_site_id;
14974 x_contract_id := v_incidents_def.contract_id;
14975 x_contract_service_id := v_incidents_def.contract_service_id;
14976 x_incident_date := v_incidents_def.incident_date;
14977 x_creation_date := v_incidents_def.creation_date;
14978
14979 END LOOP;
14980
14981 EXCEPTION
14982
14983 WHEN OTHERS THEN
14984 x_return_status := FND_API.G_RET_STS_ERROR;
14985 fnd_msg_pub.count_and_get(
14986 p_count => x_msg_count,
14987 p_data => x_msg_data);
14988
14989 END GET_SR_DEFAULTS;
14990
14991 --================================
14992 --Validate Transaction Type Id
14993 --================================
14994 PROCEDURE VALIDATE_TXN_TYPE(P_API_NAME IN VARCHAR2,
14995 P_BUSINESS_PROCESS_ID IN NUMBER,
14996 P_TXN_TYPE_ID IN NUMBER,
14997 P_SOURCE_CODE IN VARCHAR2,
14998 X_LINE_ORDER_CATEGORY_CODE OUT NOCOPY VARCHAR2,
14999 X_NO_CHARGE_FLAG OUT NOCOPY VARCHAR2,
15000 X_INTERFACE_TO_OE_FLAG OUT NOCOPY VARCHAR2,
15001 X_UPDATE_IB_FLAG OUT NOCOPY VARCHAR2,
15002 X_SRC_REFERENCE_REQD_FLAG OUT NOCOPY VARCHAR2,
15003 X_SRC_RETURN_REQD_FLAG OUT NOCOPY VARCHAR2,
15004 X_NON_SRC_REFERENCE_REQD OUT NOCOPY VARCHAR2,
15005 X_NON_SRC_RETURN_REQD OUT NOCOPY VARCHAR2,
15006 X_MSG_DATA OUT NOCOPY VARCHAR2,
15007 X_MSG_COUNT OUT NOCOPY NUMBER,
15008 X_RETURN_STATUS OUT NOCOPY VARCHAR2) IS
15009
15010 Cursor c_txn_type(p_txn_type_id IN NUMBER,
15011 p_business_process_id IN NUMBER) IS
15012 SELECT tt.transaction_type_id,
15013 NVL(citt.src_reference_reqd,'N') src_reference_reqd,
15014 NVL(citt.src_return_reqd,'N') src_return_reqd,
15015 citt.src_change_owner_to_code,
15016 NVL(citt.non_src_reference_reqd,'N') non_src_reference_reqd,
15017 NVL(citt.non_src_return_reqd,'N') non_src_return_reqd,
15018 citt.non_src_change_owner_to_code,
15019 NVL(csit.update_ib_flag,'N') update_ib_flag,
15020 nvl(tt.no_charge_flag, 'N') no_charge_flag,
15021 nvl(tt.interface_to_oe_flag, 'N')interface_to_oe_flag,
15022 tt.line_order_category_code,
15023 ol.meaning line_category_meaning
15024 FROM CS_TRANSACTION_TYPES_VL tt,
15025 CS_BUS_PROCESS_TXNS bt,
15026 csi_ib_txn_types citt,
15027 csi_source_ib_types csit,
15028 CSI_TXN_TYPES ctt,
15029 OE_LOOKUPS ol
15030 WHERE tt.transaction_type_id = p_txn_type_id
15031 and bt.business_process_id = p_business_process_id
15032 and bt.transaction_type_id = tt.transaction_type_id
15033 and tt.line_order_category_code is not null
15034 and ol.lookup_code = tt.line_order_category_code
15035 and ol.lookup_type = 'LINE_CATEGORY'
15036 and tt.transaction_type_id = citt.cs_transaction_type_id (+)
15037 and nvl(citt.parent_reference_reqd, 'N') = 'N'
15038 and nvl(ctt.source_transaction_type, 'OM_SHIPMENT') =
15039 decode(tt.line_order_category_code, 'ORDER', 'OM_SHIPMENT',
15040 nvl(ctt.source_transaction_type, 'OM_SHIPMENT'))
15041 and nvl(ctt.source_transaction_type, 'RMA_RECEIPT') =
15042 decode(tt.line_order_category_code, 'RETURN', 'RMA_RECEIPT',
15043 nvl(ctt.source_transaction_type, 'RMA_RECEIPT'))
15044 and citt.sub_type_id = csit.sub_type_id (+)
15045 and csit.transaction_type_id = ctt.transaction_type_id (+)
15046 and nvl(ctt.source_application_id, 660) = 660
15047 and trunc(sysdate) between trunc(nvl(bt.start_date_active, sysdate))
15048 and trunc(nvl(bt.end_date_active, sysdate));
15049
15050
15051
15052
15053 Cursor c_txn_type_sd(p_txn_type_id IN NUMBER,
15054 p_business_process_id IN NUMBER) IS
15055 SELECT tt.transaction_type_id,
15056 nvl(tt.no_charge_flag, 'N') no_charge_flag,
15057 nvl(tt.interface_to_oe_flag, 'N')interface_to_oe_flag,
15058 tt.line_order_category_code,
15059 ol.meaning line_category_meaning
15060 FROM CS_TRANSACTION_TYPES_VL tt,
15061 CS_BUS_PROCESS_TXNS bt,
15062 OE_LOOKUPS ol
15063 WHERE tt.transaction_type_id = p_txn_type_id
15064 and bt.business_process_id = p_business_process_id
15065 and bt.transaction_type_id = tt.transaction_type_id
15066 and tt.line_order_category_code is not null
15067 and ol.lookup_code = tt.line_order_category_code
15068 and ol.lookup_type = 'LINE_CATEGORY'
15069 and trunc(sysdate) between trunc(nvl(bt.start_date_active, sysdate))
15070 and trunc(nvl(bt.end_date_active, sysdate));
15071
15072 lv_exists_flag VARCHAR2(1) := 'N';
15073
15074 BEGIN
15075 -- Initialize API return status to success
15076 x_return_status := FND_API.G_RET_STS_SUCCESS;
15077
15078 --DBMS_OUTPUT.PUT_LINE(' Source Code = :'||p_source_code);
15079
15080 IF p_source_code <> 'SD' THEN
15081
15082 FOR v_txn_type IN c_txn_type(p_txn_type_id, p_business_process_id) LOOP
15083 lv_exists_flag := 'Y';
15084
15085 -- Check with Anu if this logic is OK here
15086 IF v_txn_type.line_order_category_code = 'RETURN' THEN
15087 IF v_txn_type.src_change_owner_to_code = 'E' THEN
15088 --RAISE FND_API.G_EXC_ERROR;
15089 --null;
15090 FND_MESSAGE.Set_Name('CS', 'CS_CHG_INVALID_TXN_TYPE_OWNER');
15091 FND_MESSAGE.SET_TOKEN('TXN_TYPE_ID', p_txn_type_id);
15092 FND_MSG_PUB.Add;
15093 RAISE FND_API.G_EXC_ERROR;
15094 END IF;
15095
15096 ELSIF v_txn_type.line_order_category_code = 'ORDER' THEN
15097 IF v_txn_type.non_src_change_owner_to_code = 'E' THEN
15098 --RAISE FND_API.G_EXC_ERROR;
15099 --null;
15100 FND_MESSAGE.Set_Name('CS', 'CS_CHG_INVALID_TXN_TYPE_OWNER');
15101 FND_MESSAGE.SET_TOKEN('TXN_TYPE_ID', p_txn_type_id);
15102 FND_MSG_PUB.Add;
15103 RAISE FND_API.G_EXC_ERROR;
15104 END IF;
15105 END IF;
15106
15107 x_line_order_category_code := v_txn_type.line_order_category_code;
15108 x_no_charge_flag := v_txn_type.no_charge_flag;
15109 x_interface_to_oe_flag := v_txn_type.interface_to_oe_flag;
15110 x_update_ib_flag := v_txn_type.update_ib_flag;
15111 x_src_reference_reqd_flag := v_txn_type.src_reference_reqd;
15112 x_src_return_reqd_flag := v_txn_type.src_return_reqd;
15113 x_non_src_reference_reqd := v_txn_type.non_src_reference_reqd;
15114 x_non_src_return_reqd := v_txn_type.non_src_return_reqd;
15115
15116 END LOOP;
15117
15118 ELSE
15119
15120 FOR v_txn_type_sd IN c_txn_type_sd(p_txn_type_id, p_business_process_id) LOOP
15121 lv_exists_flag := 'Y';
15122
15123 x_line_order_category_code := v_txn_type_sd.line_order_category_code;
15124 x_no_charge_flag := v_txn_type_sd.no_charge_flag;
15125 x_interface_to_oe_flag := v_txn_type_sd.interface_to_oe_flag;
15126 END LOOP;
15127 END IF;
15128
15129
15130
15131 IF lv_exists_flag = 'N' THEN
15132 FND_MESSAGE.Set_Name('CS', 'CS_CHG_INVALID_TXN_TYPE');
15133 FND_MESSAGE.SET_TOKEN('TXN_TYPE_ID', p_txn_type_id);
15134 FND_MESSAGE.SET_TOKEN('BUSINESS_PROCESS_ID', p_business_process_id);
15135 FND_MSG_PUB.Add;
15136
15137 RAISE FND_API.G_EXC_ERROR;
15138
15139 END IF;
15140
15141 EXCEPTION
15142 WHEN FND_API.G_EXC_ERROR THEN
15143 x_return_status := FND_API.G_RET_STS_ERROR;
15144 fnd_msg_pub.count_and_get(
15145 p_count => x_msg_count
15146 ,p_data => x_msg_data);
15147
15148
15149 WHEN OTHERS THEN
15150 x_return_status := FND_API.G_RET_STS_ERROR;
15151 FND_MESSAGE.Set_Name('CS', 'CS_CHG_INVALID_TXN_TYPE');
15152 FND_MESSAGE.SET_TOKEN('TXN_TYPE_ID', p_txn_type_id);
15153 FND_MESSAGE.SET_TOKEN('BUSINESS_PROCESS_ID', p_business_process_id);
15154 FND_MSG_PUB.Add;
15155
15156 fnd_msg_pub.count_and_get(
15157 p_count => x_msg_count
15158 ,p_data => x_msg_data);
15159
15160
15161
15162
15163 END VALIDATE_TXN_TYPE;
15164
15165
15166 --=================================
15167 -- Validate Inventory Item ID
15168 --=================================
15169 PROCEDURE VALIDATE_ITEM(P_API_NAME IN VARCHAR2,
15170 P_INV_ID IN NUMBER,
15171 P_UPDATE_IB_FLAG IN VARCHAR2,
15172 X_COMMS_TRACKABLE_FLAG OUT NOCOPY VARCHAR2,
15173 X_SERIAL_CONTROL_FLAG OUT NOCOPY VARCHAR2,
15174 X_REV_CONTROL_FLAG OUT NOCOPY VARCHAR2,
15175 X_MSG_DATA OUT NOCOPY VARCHAR2,
15176 X_MSG_COUNT OUT NOCOPY NUMBER,
15177 X_RETURN_STATUS OUT NOCOPY VARCHAR2) IS
15178
15179 Cursor c_get_inv_item(p_inv_id NUMBER) IS
15180 SELECT inventory_item_id,
15181 serial_number_control_code,
15182 revision_qty_control_code,
15183 nvl(comms_nl_trackable_flag, 'N') comms_nl_trackable_flag
15184 -- contract_item_type_code -- Fix for Bug # 3109160
15185 FROM MTL_SYSTEM_ITEMS_KFV
15186 WHERE organization_id = cs_std.get_item_valdn_orgzn_id
15187 AND inventory_item_id = p_inv_id;
15188
15189
15190
15191 lv_exists_flag VARCHAR2(1) := 'N';
15192
15193 BEGIN
15194
15195
15196 -- Initialize API return status to success
15197 x_return_status := FND_API.G_RET_STS_SUCCESS;
15198
15199 --DBMS_OUTPUT.PUT_LINE('cs_std.get_item_valdn_orgzn_id = ' || cs_std.get_item_valdn_orgzn_id);
15200 --DBMS_OUTPUT.PUT_LINE('p_inv_id = ' || p_inv_id);
15201 --DBMS_OUTPUT.PUT_LINE('p_update_ib_flag = ' || p_update_ib_flag);
15202
15203
15204 FOR v_get_inv_item IN c_get_inv_item(p_inv_id) LOOP
15205
15206 x_comms_trackable_flag := v_get_inv_item.comms_nl_trackable_flag;
15207
15208 --DBMS_OUTPUT.PUT_LINE('inside loop');
15209 --DBMS_OUTPUT.PUT_LINE('comms_nl_trackable '||v_get_inv_item.comms_nl_trackable_flag);
15210
15211 --Comment this for bug # 3809160
15212 --
15213
15214 -- IF NOT (NVL(v_get_inv_item.contract_item_type_code, 'N') = 'N') THEN
15215 -- lv_exists_flag := 'N';
15216 -- --RAISE FND_API.G_EXC_ERROR;
15217 -- FND_MESSAGE.Set_Name('CS', 'CS_CHG_CONTRACT_ITEM_ERROR');
15218 -- FND_MESSAGE.SET_TOKEN('INVENTORY_ITEM_ID', p_inv_id, TRUE);
15219 -- FND_MSG_PUB.Add;
15220 -- RAISE FND_API.G_EXC_ERROR;
15221 -- END IF;
15222
15223 ------DBMS_OUTPUT.PUT_LINE('v_get_inv_item.contract_item_type_code '||v_get_inv_item.contract_item_type_code);
15224
15225 -- Indicator If Serial Number Controlled or not
15226 IF v_get_inv_item.serial_number_control_code <> 1 THEN
15227 x_serial_control_flag := 'Y';
15228 ELSE
15229 x_serial_control_flag := 'N';
15230 END IF;
15231
15232 --DBMS_OUTPUT.PUT_LINE('v_get_inv_item.serial_number_control_code '||v_get_inv_item.serial_number_control_code);
15233
15234
15235 -- Indicator If Item Revision Controlled or not
15236 IF v_get_inv_item.revision_qty_control_code <> 1 THEN
15237 x_rev_control_flag := 'Y';
15238 ELSE
15239 x_rev_control_flag := 'N';
15240 END IF;
15241
15242 lv_exists_flag := 'Y';
15243
15244 END LOOP;
15245 --DBMS_OUTPUT.PUT_LINE('lv_exists_flag '||lv_exists_flag);
15246
15247 IF lv_exists_flag = 'N' THEN
15248 -- --DBMS_OUTPUT.PUT_LINE('lv_exists_flag = ' || 'N');
15249 FND_MESSAGE.Set_Name('CS', 'CS_CHG_INVALID_INVENTORY_ITEM');
15250 FND_MESSAGE.SET_TOKEN('INVENTORY_ITEM_ID', p_inv_id);
15251 FND_MSG_PUB.Add;
15252 RAISE FND_API.G_EXC_ERROR;
15253 END IF;
15254
15255 EXCEPTION
15256
15257 WHEN FND_API.G_EXC_ERROR THEN
15258 x_return_status := FND_API.G_RET_STS_ERROR;
15259 fnd_msg_pub.count_and_get(
15260 p_count => x_msg_count
15261 ,p_data => x_msg_data);
15262
15263 WHEN OTHERS THEN
15264 x_return_status := FND_API.G_RET_STS_ERROR;
15265 FND_MESSAGE.Set_Name('CS', 'CS_CHG_INVALID_INVENTORY_ITEM');
15266 FND_MESSAGE.SET_TOKEN('INVENTORY_ITEM_ID', p_inv_id);
15267 FND_MSG_PUB.Add;
15268 fnd_msg_pub.count_and_get(
15269 p_count => x_msg_count
15270 ,p_data => x_msg_data);
15271
15272 END VALIDATE_ITEM;
15273
15274 --==============================================
15275 -- Get Item Billing Flag
15276 --==============================================
15277
15278 PROCEDURE GET_BILLING_FLAG(
15279 P_API_NAME IN VARCHAR2,
15280 P_INV_ID IN NUMBER,
15281 P_TXN_TYPE_ID IN NUMBER,
15282 X_BILLING_FLAG OUT NOCOPY VARCHAR2,
15283 X_MSG_DATA OUT NOCOPY VARCHAR2,
15284 X_MSG_COUNT OUT NOCOPY NUMBER,
15285 X_RETURN_STATUS OUT NOCOPY VARCHAR2) IS
15286
15287 Cursor c_get_billing_flag(p_inv_id IN NUMBER,
15288 p_txn_type_id IN NUMBER) IS
15289 SELECT bc.billing_category
15290 FROM cs_billing_type_categories bc,
15291 cs_txn_billing_types bt
15292 WHERE sysdate between nvl(bc.start_date_active,sysdate)
15293 AND nvl(bc.end_date_active,sysdate)
15294 AND sysdate between nvl(bt.start_date_active,sysdate)
15295 AND nvl(bt.end_date_active,sysdate)
15296 AND bt.billing_type = bc.billing_type
15297 AND bt.transaction_type_id = p_txn_type_id
15298 AND bc.billing_type IN (SELECT material_billable_flag
15299 FROM MTL_SYSTEM_ITEMS_KFV
15300 WHERE organization_id = cs_std.get_item_valdn_orgzn_id
15301 AND inventory_item_id = p_inv_id);
15302
15303
15304 lv_exists_flag VARCHAR2(1) := 'N';
15305
15306 BEGIN
15307 -- Initialize API return status to success
15308 x_return_status := FND_API.G_RET_STS_SUCCESS;
15309
15310 -- --DBMS_OUTPUT.PUT_LINE('p_inv_id = ' || p_inv_id);
15311 -- --DBMS_OUTPUT.PUT_LINE('p_txn_type_id = ' || p_txn_type_id);
15312
15313 FOR v_get_billing_flag in c_get_billing_flag(p_inv_id, p_txn_type_id) LOOP
15314
15315 lv_exists_flag := 'Y';
15316 x_billing_flag := v_get_billing_flag.billing_category;
15317
15318 END LOOP;
15319
15320 IF lv_exists_flag <> 'Y' THEN
15321 --RAISE FND_API.G_EXC_ERROR;
15322 FND_MESSAGE.Set_Name('CS', 'CS_CHG_ITM_BILL_FLG_NOT_IN_TXN');
15323 FND_MESSAGE.SET_TOKEN('INVENTORY_ITEM_ID', p_inv_id);
15324 FND_MESSAGE.SET_TOKEN('TXN_TYPE_ID', p_txn_type_id);
15325 FND_MSG_PUB.Add;
15326 RAISE FND_API.G_EXC_ERROR;
15327 END IF;
15328
15329 --DBMS_OUTPUT.PUT_LINE('lv_exists_flag = ' || lv_exists_flag);
15330 --DBMS_OUTPUT.PUT_LINE('x_return_status = ' || x_return_status);
15331
15332 EXCEPTION
15333
15334 WHEN FND_API.G_EXC_ERROR THEN
15335 x_return_status := FND_API.G_RET_STS_ERROR;
15336 fnd_msg_pub.count_and_get(
15337 p_count => x_msg_count
15338 ,p_data => x_msg_data);
15339
15340 WHEN OTHERS THEN
15341 x_return_status := FND_API.G_RET_STS_ERROR;
15342 FND_MESSAGE.Set_Name('CS', 'CS_CHG_ITM_BILL_FLG_NOT_IN_TXN');
15343 FND_MESSAGE.SET_TOKEN('INVENTORY_ITEM_ID', p_inv_id);
15344 FND_MESSAGE.SET_TOKEN('TXN_TYPE_ID', p_txn_type_id);
15345 FND_MSG_PUB.Add;
15346 fnd_msg_pub.count_and_get(
15347 p_count => x_msg_count
15348 ,p_data => x_msg_data);
15349
15350 END GET_BILLING_FLAG;
15351
15352
15353 --=============================================
15354 -- Get Txn Billing Type Id
15355 --=============================================
15356 PROCEDURE GET_TXN_BILLING_TYPE(
15357 P_API_NAME IN VARCHAR2,
15358 P_INV_ID IN NUMBER,
15359 P_TXN_TYPE_ID IN NUMBER,
15360 X_TXN_BILLING_TYPE_ID OUT NOCOPY NUMBER,
15361 X_MSG_DATA OUT NOCOPY VARCHAR2,
15362 X_MSG_COUNT OUT NOCOPY NUMBER,
15363 X_RETURN_STATUS OUT NOCOPY VARCHAR2) IS
15364
15365 Cursor c_txn_billing_type(p_inventory_item_id IN NUMBER,
15366 p_txn_type_id IN NUMBER) IS
15367 SELECT ctbt.txn_billing_type_id
15368 FROM mtl_system_items_kfv kfv,
15369 cs_txn_billing_types ctbt
15370 WHERE kfv.inventory_item_id = p_inventory_item_id
15371 AND organization_id = cs_std.get_item_valdn_orgzn_id --
15372 AND ctbt.transaction_type_id = p_txn_type_id
15373 AND ctbt.billing_type = kfv.material_billable_flag;
15374
15375 lv_exists_flag VARCHAR2(1) := 'N';
15376
15377
15378 BEGIN
15379 -- Initialize API return status to success
15380 x_return_status := FND_API.G_RET_STS_SUCCESS;
15381
15382 FOR v_txn_billing_type IN c_txn_billing_type(p_inv_id,
15383 p_txn_type_id) LOOP
15384 x_txn_billing_type_id := v_txn_billing_type.txn_billing_type_id;
15385 lv_exists_flag := 'Y';
15386 END LOOP;
15387
15388 IF lv_exists_flag <> 'Y' THEN
15389 --RAISE FND_API.G_EXC_ERROR;
15390 --null;
15391 FND_MESSAGE.Set_Name('CS', 'CS_CHG_ITM_BILL_TYP_NOT_IN_TXN');
15392 FND_MESSAGE.SET_TOKEN('INVENTORY_ITEM_ID', p_inv_id);
15393 FND_MESSAGE.SET_TOKEN('TXN_TYPE_ID', p_txn_type_id);
15394 FND_MSG_PUB.Add;
15395 RAISE FND_API.G_EXC_ERROR;
15396 END IF;
15397
15398 EXCEPTION
15399
15400 WHEN FND_API.G_EXC_ERROR THEN
15401 x_return_status := FND_API.G_RET_STS_ERROR;
15402 fnd_msg_pub.count_and_get(
15403 p_count => x_msg_count
15404 ,p_data => x_msg_data);
15405
15406 WHEN OTHERS THEN
15407 x_return_status := FND_API.G_RET_STS_ERROR;
15408 FND_MESSAGE.Set_Name('CS', 'CS_CHG_ITM_BILL_TYP_NOT_IN_TXN');
15409 FND_MESSAGE.SET_TOKEN('INVENTORY_ITEM_ID', p_inv_id);
15410 FND_MESSAGE.SET_TOKEN('TXN_TYPE_ID', p_txn_type_id);
15411 FND_MSG_PUB.Add;
15412 fnd_msg_pub.count_and_get(
15413 p_count => x_msg_count
15414 ,p_data => x_msg_data);
15415
15416 END GET_TXN_BILLING_TYPE;
15417
15418
15419 --==============================================
15420 -- Get Unit Of Measure
15421 --==============================================
15422
15423 PROCEDURE GET_UOM(P_INV_ID IN NUMBER,
15424 X_TBL_UOM OUT NOCOPY TBL_UOM,
15425 X_MSG_DATA OUT NOCOPY VARCHAR2,
15426 X_MSG_COUNT OUT NOCOPY NUMBER,
15427 X_RETURN_STATUS OUT NOCOPY VARCHAR2) IS
15428
15429
15430 Cursor c_uom(p_inv_id IN NUMBER) IS
15431 SELECT uom_code
15432 FROM MTL_ITEM_UOMS_VIEW
15433 WHERE inventory_item_id = P_INV_ID AND
15434 organization_id = cs_std.get_item_valdn_orgzn_id;
15435
15436 i NUMBER := 0;
15437
15438 BEGIN
15439 -- Initialize API return status to success
15440 x_return_status := FND_API.G_RET_STS_SUCCESS;
15441
15442 FOR v_uom IN c_uom(p_inv_id) LOOP
15443 i := i + 1;
15444 X_TBL_UOM(i).unit_of_measure := v_uom.uom_code;
15445 END LOOP;
15446
15447 EXCEPTION
15448
15449 WHEN OTHERS THEN
15450 x_return_status := FND_API.G_RET_STS_ERROR;
15451 FND_MESSAGE.Set_Name('CS', 'CS_CHG_GET_UOM_FAILED');
15452 FND_MESSAGE.SET_TOKEN('INVENTORY_ITEM_ID', p_inv_id);
15453 FND_MESSAGE.SET_TOKEN('ORGANIZATION_ID', cs_std.get_item_valdn_orgzn_id);
15454 FND_MSG_PUB.Add;
15455 fnd_msg_pub.count_and_get(
15456 p_count => x_msg_count
15457 ,p_data => x_msg_data);
15458
15459 END GET_UOM;
15460
15461
15462 --================================================
15463 -- Get Primary Unit of Measure
15464 --================================================
15465
15466 PROCEDURE GET_PRIMARY_UOM(P_INV_ID IN NUMBER,
15467 X_PRIMARY_UOM OUT NOCOPY VARCHAR2,
15468 X_MSG_DATA OUT NOCOPY VARCHAR2,
15469 X_MSG_COUNT OUT NOCOPY NUMBER,
15470 X_RETURN_STATUS OUT NOCOPY VARCHAR2)
15471 IS
15472
15473 Cursor c_primary_uom(p_inv_id IN NUMBER) IS
15474 SELECT mum.uom_code
15475 FROM mtl_system_items_b msi,
15476 MTL_UNITS_OF_MEASURE_TL mum
15477 WHERE msi.PRIMARY_UNIT_OF_MEASURE = mum.unit_of_measure
15478 AND msi.INVENTORY_ITEM_ID = P_INV_ID
15479 AND msi.organization_id = cs_std.get_item_valdn_orgzn_id;
15480
15481 lv_exists_flag VARCHAR2(1) := 'N';
15482 BEGIN
15483 -- Initialize API return status to success
15484 x_return_status := FND_API.G_RET_STS_SUCCESS;
15485
15486 FOR v_primary_uom IN c_primary_uom(p_inv_id) LOOP
15487 lv_exists_flag := 'Y';
15488 x_primary_uom := v_primary_uom.uom_code;
15489 END LOOP;
15490
15491 IF lv_exists_flag = 'N' THEN
15492 --RAISE FND_API.G_EXC_ERROR;
15493 --null;
15494 FND_MESSAGE.Set_Name('CS', 'CS_CHG_GET_UOM_FAILED');
15495 FND_MESSAGE.SET_TOKEN('INVENTORY_ITEM_ID', p_inv_id);
15496 FND_MESSAGE.SET_TOKEN('ORGANIZATION_ID', cs_std.get_item_valdn_orgzn_id);
15497 FND_MSG_PUB.Add;
15498 RAISE FND_API.G_EXC_ERROR;
15499 END IF;
15500
15501 EXCEPTION
15502
15503 WHEN FND_API.G_EXC_ERROR THEN
15504 x_return_status := FND_API.G_RET_STS_ERROR;
15505 fnd_msg_pub.count_and_get(
15506 p_count => x_msg_count
15507 ,p_data => x_msg_data);
15508
15509 WHEN OTHERS THEN
15510 x_return_status := FND_API.G_RET_STS_ERROR;
15511 FND_MESSAGE.Set_Name('CS', 'CS_CHG_GET_UOM_FAILED');
15512 FND_MESSAGE.SET_TOKEN('INVENTORY_ITEM_ID', p_inv_id);
15513 FND_MESSAGE.SET_TOKEN('ORGANIZATION_ID', cs_std.get_item_valdn_orgzn_id);
15514 FND_MSG_PUB.Add;
15515 fnd_msg_pub.count_and_get(
15516 p_count => x_msg_count
15517 ,p_data => x_msg_data);
15518
15519 END GET_PRIMARY_UOM;
15520
15521 --================================================
15522 -- Validate Source Code and Source Id being passed
15523 --===============================================
15524 PROCEDURE VALIDATE_SOURCE(
15525 P_API_NAME IN VARCHAR2,
15526 P_SOURCE_CODE IN VARCHAR2,
15527 P_SOURCE_ID IN NUMBER,
15528 P_ORG_ID IN NUMBER,
15529 X_SOURCE_ID OUT NOCOPY NUMBER,
15530 X_MSG_DATA OUT NOCOPY VARCHAR2,
15531 X_MSG_COUNT OUT NOCOPY NUMBER,
15532 X_RETURN_STATUS OUT NOCOPY VARCHAR2) IS
15533
15534 Cursor c_val_sr_source(p_source_id IN NUMBER) IS
15535
15536 -- Bug Fix for Bug # 3044488
15537 SELECT incident_id
15538 FROM CS_INCIDENTS_ALL_b
15539 WHERE incident_id = p_source_id;
15540 --AND org_id = p_org_id;
15541
15542 Cursor c_val_dr_source(p_source_id IN NUMBER) IS
15543 SELECT repair_line_id
15544 FROM CSD_REPAIRS
15545 WHERE repair_line_id = p_source_id;
15546
15547 Cursor c_val_sd_source(p_source_id IN NUMBER) IS
15548 --SELECT debrief_header_id
15549 -- FROM csf_debrief_headers
15550 -- WHERE debrief_header_id = p_source_id ;
15551 SELECT debrief_line_id
15552 FROM csf_debrief_lines
15553 WHERE debrief_line_id = p_source_id;
15554
15555 lv_exists_flag VARCHAR2(1) := 'N';
15556
15557 --DEBUG
15558 l_ERRM VARCHAR2(100);
15559
15560 BEGIN
15561 -- Initialize API return status to success
15562 x_return_status := FND_API.G_RET_STS_SUCCESS;
15563
15564 --DBMS_OUTPUT.PUT_LINE('p_source_code = ' || p_source_code);
15565 --DBMS_OUTPUT.PUT_LINE('p_source_id = ' || p_source_id);
15566 --DBMS_OUTPUT.PUT_LINE('p_org_id = ' || p_org_id);
15567
15568 IF p_source_code = 'SR' THEN
15569
15570 IF p_source_id IS NOT NULL THEN
15571 FOR v_val_sr_source IN c_val_sr_source(p_source_id) LOOP
15572 lv_exists_flag := 'Y';
15573 x_source_id := p_source_id;
15574 END LOOP;
15575
15576 IF lv_exists_flag <> 'Y' THEN
15577 --RAISE FND_API.G_EXC_ERROR;
15578 --null;
15579 FND_MESSAGE.Set_Name('CS', 'CS_CHG_INVALID_SOURCE');
15580 FND_MESSAGE.SET_TOKEN('SOURCE_CODE', p_source_code);
15581 FND_MESSAGE.SET_TOKEN('SOURCE_ID', p_source_id);
15582 FND_MSG_PUB.Add;
15583 RAISE FND_API.G_EXC_ERROR;
15584 END IF;
15585
15586 ELSE
15587 -- source_id cannot be cannot be null
15588 Add_Null_Parameter_Msg(p_api_name, 'p_source_id');
15589 RAISE FND_API.G_EXC_ERROR;
15590 END IF ;
15591
15592 ELSIF p_source_code = 'DR' THEN
15593 IF p_source_id IS NOT NULL THEN
15594 FOR v_val_dr_source IN c_val_dr_source(p_source_id) LOOP
15595 lv_exists_flag := 'Y';
15596 x_source_id := p_source_id;
15597 END LOOP;
15598
15599 IF lv_exists_flag <> 'Y' THEN
15600 --RAISE FND_API.G_EXC_ERROR;
15601 --null;
15602 FND_MESSAGE.Set_Name('CS', 'CS_CHG_INVALID_SOURCE');
15603 FND_MESSAGE.SET_TOKEN('SOURCE_CODE', p_source_code);
15604 FND_MESSAGE.SET_TOKEN('SOURCE_ID', p_source_id);
15605 FND_MSG_PUB.Add;
15606 RAISE FND_API.G_EXC_ERROR;
15607 END IF;
15608
15609 ELSE
15610 -- source_id cannot be cannot be null
15611 Add_Null_Parameter_Msg(p_api_name, 'p_source_id');
15612 RAISE FND_API.G_EXC_ERROR;
15613 END IF ;
15614
15615 ELSIF p_source_code = 'SD' THEN
15616 IF p_source_id IS NOT NULL THEN
15617 FOR v_val_dr_source IN c_val_sd_source(p_source_id) LOOP
15618 lv_exists_flag := 'Y';
15619 x_source_id := p_source_id;
15620 END LOOP;
15621
15622 IF lv_exists_flag <> 'Y' THEN
15623 --RAISE FND_API.G_EXC_ERROR;
15624 --null;
15625 FND_MESSAGE.Set_Name('CS', 'CS_CHG_INVALID_SOURCE');
15626 FND_MESSAGE.SET_TOKEN('SOURCE_CODE', p_source_code);
15627 FND_MESSAGE.SET_TOKEN('SOURCE_ID', p_source_id);
15628 FND_MSG_PUB.Add;
15629 RAISE FND_API.G_EXC_ERROR;
15630 END IF;
15631
15632 ELSE
15633 -- raise error as source_id cannot be cannot be null
15634 Add_Null_Parameter_Msg(p_api_name, 'p_source_id');
15635 RAISE FND_API.G_EXC_ERROR;
15636 END IF ;
15637
15638 ELSIF p_source_code = 'SD' THEN
15639 IF p_source_id IS NOT NULL THEN
15640 FOR v_val_sd_source IN c_val_sd_source(p_source_id) LOOP
15641
15642 lv_exists_flag := 'Y';
15643 x_source_id := p_source_id;
15644 END LOOP;
15645
15646 IF lv_exists_flag <> 'Y' THEN
15647 --RAISE FND_API.G_EXC_ERROR;
15648 --null;
15649 FND_MESSAGE.Set_Name('CS', 'CS_CHG_INVALID_SOURCE');
15650 FND_MESSAGE.SET_TOKEN('SOURCE_CODE', p_source_code);
15651 FND_MESSAGE.SET_TOKEN('SOURCE_ID', p_source_id);
15652 FND_MSG_PUB.Add;
15653 RAISE FND_API.G_EXC_ERROR;
15654 END IF;
15655 ELSE
15656 -- cannot be null
15657 Add_Null_Parameter_Msg(p_api_name, 'p_source_id');
15658 RAISE FND_API.G_EXC_ERROR;
15659 END IF ;
15660
15661 ELSE
15662 --Invalid source code passed. Raise an exception
15663 Add_Invalid_Argument_Msg(
15664 p_token_an => p_api_name,
15665 p_token_v => p_source_code,
15666 p_token_p => 'p_source_code');
15667
15668 RAISE FND_API.G_EXC_ERROR;
15669 END IF ;
15670
15671 EXCEPTION
15672
15673 WHEN FND_API.G_EXC_ERROR THEN
15674 x_return_status := FND_API.G_RET_STS_ERROR;
15675 fnd_msg_pub.count_and_get(
15676 p_count => x_msg_count
15677 ,p_data => x_msg_data);
15678
15679 WHEN NO_DATA_FOUND THEN
15680 x_return_status := FND_API.G_RET_STS_ERROR;
15681 IF p_source_id IS NOT NULL THEN
15682 Add_Invalid_Argument_Msg(p_token_an => p_api_name,
15683 p_token_v => p_source_id,
15684 p_token_p => 'p_source_id');
15685 END IF ;
15686
15687 WHEN OTHERS THEN
15688 --l_ERRM := SQLERRM;
15689 --DBMS_OUTPUT.PUT_LINE('Others Validate Source ' ||l_errm);
15690 --x_return_status := FND_API.G_RET_STS_ERROR ;
15691 x_return_status := FND_API.G_RET_STS_ERROR;
15692 FND_MESSAGE.Set_Name('CS', 'CS_CHG_INVALID_SOURCE');
15693 FND_MESSAGE.SET_TOKEN('SOURCE_CODE', p_source_code);
15694 FND_MESSAGE.SET_TOKEN('SOURCE_ID', p_source_id);
15695 FND_MSG_PUB.Add;
15696 fnd_msg_pub.count_and_get(
15697 p_count => x_msg_count
15698 ,p_data => x_msg_data);
15699
15700 END Validate_Source;
15701
15702 --===========================================================
15703 -- Get Site Id
15704 --==========================================================
15705
15706 PROCEDURE GET_SITE_FOR_PARTY(P_API_NAME IN VARCHAR2,
15707 P_SITE_USE_ID IN NUMBER,
15708 P_PARTY_ID IN NUMBER,
15709 P_VAL_MODE IN VARCHAR2,
15710 X_SITE_ID OUT NOCOPY NUMBER,
15711 X_RETURN_STATUS OUT NOCOPY VARCHAR2) IS
15712
15713 CURSOR c_bill_to_party_site(P_SITE_USE_ID IN NUMBER,
15714 P_PARTY_ID IN NUMBER) IS
15715 SELECT site_use.party_site_id
15716 FROM HZ_PARTY_SITE_USES site_use,
15717 HZ_PARTY_SITES site,
15718 HZ_PARTIES party
15719 WHERE site_use.party_site_use_id = p_site_use_id
15720 AND party.party_id = p_party_id
15721 AND nvl(site_use.status,'A') = 'A'
15722 AND site_use.site_use_type = 'BILL_TO'
15723 AND site_use.party_site_id = site.party_site_id
15724 AND site.party_id = party.party_id;
15725
15726 CURSOR c_ship_to_party_site(p_site_use_id IN NUMBER,
15727 p_party_id IN NUMBER) IS
15728 SELECT site_use.party_site_id
15729 FROM HZ_PARTY_SITE_USES site_use,
15730 HZ_PARTY_SITES site,
15731 HZ_PARTIES party
15732 WHERE site_use.party_site_use_id = p_site_use_id
15733 AND party.party_id = p_party_id
15734 AND nvl(site_use.status,'A') = 'A'
15735 AND site_use.site_use_type = 'SHIP_TO'
15736 AND site_use.party_site_id = site.party_site_id
15737 AND site.party_id = party.party_id;
15738
15739 lv_exists_flag VARCHAR2(1) := 'N';
15740 BEGIN
15741
15742 x_return_status := FND_API.G_RET_STS_SUCCESS;
15743 IF p_val_mode = 'BILL_TO' THEN
15744 FOR v_bill_to_party_site IN c_bill_to_party_site(p_site_use_id, p_party_id) LOOP
15745 lv_exists_flag := 'Y';
15746 x_site_id := v_bill_to_party_site.party_site_id;
15747 END LOOP;
15748 ELSE
15749 --p_val_mode = 'SHIP_TO'
15750 FOR v_ship_to_party_site IN c_ship_to_party_site(p_site_use_id, p_party_id) LOOP
15751 lv_exists_flag := 'Y';
15752 x_site_id := v_ship_to_party_site.party_site_id;
15753 END LOOP;
15754 END IF;
15755
15756 IF lv_exists_flag = 'N' THEN
15757 --RAISE FND_API.G_EXC_ERROR;
15758 --null;
15759 FND_MESSAGE.Set_Name('CS', 'CS_CHG_NO_SITE_FOUND');
15760 FND_MESSAGE.SET_TOKEN('PARTY_ID', p_party_id);
15761 FND_MESSAGE.SET_TOKEN('SITE_USE_ID', p_site_use_id);
15762 FND_MSG_PUB.Add;
15763 RAISE FND_API.G_EXC_ERROR;
15764 END IF;
15765
15766 EXCEPTION
15767
15768 WHEN FND_API.G_EXC_ERROR THEN
15769 x_return_status := FND_API.G_RET_STS_ERROR;
15770
15771 WHEN OTHERS THEN
15772 x_return_status := FND_API.G_RET_STS_ERROR;
15773 FND_MESSAGE.Set_Name('CS', 'CS_CHG_NO_SITE_FOUND');
15774 FND_MESSAGE.SET_TOKEN('PARTY_ID', p_party_id);
15775 FND_MESSAGE.SET_TOKEN('SITE_USE_ID', p_site_use_id);
15776 FND_MSG_PUB.Add;
15777
15778 END get_site_for_party;
15779
15780
15781 --============================================================
15782 -- Get Price List for Contract
15783 --============================================================
15784 PROCEDURE GET_CONTRACT_PRICE_LIST(
15785 p_api_name IN VARCHAR2,
15786 p_business_process_id IN NUMBER,
15787 p_request_date IN DATE,
15788 p_contract_line_id IN NUMBER,
15789 --p_coverage_id IN NUMBER,
15790 x_price_list_id OUT NOCOPY NUMBER,
15791 x_currency_code OUT NOCOPY VARCHAR2,
15792 x_msg_data OUT NOCOPY VARCHAR2,
15793 x_msg_count OUT NOCOPY NUMBER,
15794 x_return_status OUT NOCOPY VARCHAR2) IS
15795
15796
15797
15798 --Added to get the currency_code for the price list header id
15799 --Fixed Bug # 3546804
15800 Cursor get_currency_code(p_price_list_id NUMBER) IS
15801 select currency_code
15802 from qp_price_lists_v
15803 where price_list_id = p_price_list_id;
15804
15805 --Added to get the currency_code for the price list header id
15806 --Fixed Bug # 3546804
15807 l_pricing_tbl OKS_CON_COVERAGE_PUB.pricing_tbl_type ;
15808 l_index BINARY_INTEGER;
15809
15810
15811
15812 BEGIN
15813
15814 x_return_status := FND_API.G_RET_STS_SUCCESS;
15815
15816 --Changed the functionality to resolve bug # 3546804
15817
15818 IF p_business_process_id IS NOT NULL AND
15819 p_request_date IS NOT NULL AND
15820 p_contract_line_id IS NOT NULL THEN
15821
15822
15823 --Call the OKC API
15824 OKS_CON_COVERAGE_PUB.get_bp_pricelist
15825 (p_api_version => 1.0
15826 ,p_init_msg_list => 'T'
15827 ,p_Contract_line_id => p_contract_line_id
15828 ,p_business_process_id => p_business_process_id
15829 ,p_request_date => p_request_date
15830 ,x_return_status => x_return_status
15831 ,x_msg_count => x_msg_count
15832 ,x_msg_data => x_msg_data
15833 ,x_pricing_tbl => l_pricing_tbl);
15834
15835 l_index := l_pricing_tbl.FIRST;
15836
15837 FOR l_temp IN 1..l_pricing_tbl.COUNT LOOP
15838 --get the Business Process Price List ID
15839 x_price_list_id := l_pricing_tbl(l_index).BP_Price_list_id;
15840
15841 --get the currency_code for the same
15842 OPEN get_currency_code(x_price_list_id);
15843 FETCH get_currency_code INTO x_currency_code;
15844 CLOSE get_currency_code;
15845
15846 EXIT WHEN l_index = l_pricing_tbl.FIRST ;
15847 END LOOP;
15848 ELSE
15849 -- p_business_process_id or p_request_date is null
15850 -- default the contract price list and currency code to null
15851 -- as this cannot be derived
15852 x_price_list_id := null;
15853 x_currency_code := null;
15854 END IF;
15855
15856 EXCEPTION
15857
15858 WHEN OTHERS THEN
15859 x_return_status := FND_API.G_RET_STS_ERROR;
15860 FND_MESSAGE.SET_NAME('CS', 'CS_CHG_UNEXPECTED_EXEC_ERRORS');
15861 FND_MESSAGE.SET_TOKEN('ROUTINE', p_api_name);
15862 FND_MESSAGE.SET_TOKEN('SQLERRM', sqlerrm);
15863 FND_MSG_PUB.ADD;
15864 fnd_msg_pub.count_and_get(
15865 p_count => x_msg_count
15866 ,p_data => x_msg_data);
15867
15868 END get_contract_price_list;
15869
15870 --===========================================================
15871 -- Get Currency Code for Price List
15872 --===========================================================
15873
15874 PROCEDURE GET_CURRENCY_CODE(
15875 p_api_name IN VARCHAR2,
15876 p_price_list_id IN NUMBER ,
15877 x_currency_code OUT NOCOPY VARCHAR2,
15878 x_msg_data OUT NOCOPY VARCHAR2,
15879 x_msg_count OUT NOCOPY NUMBER,
15880 x_return_status OUT NOCOPY VARCHAR2)
15881 IS
15882
15883 Cursor c_currency_code(p_price_list_id NUMBER) IS
15884 SELECT currency_code
15885 FROM qp_price_lists_v
15886 WHERE price_list_id = p_price_list_id;
15887
15888 lv_exists_flag VARCHAR2(1) := 'N';
15889 BEGIN
15890 x_return_status := FND_API.G_RET_STS_SUCCESS;
15891
15892 IF p_price_list_id IS NOT NULL THEN
15893 FOR v_currency_code IN c_currency_code(p_price_list_id) LOOP
15894 --assign currency_code to out record
15895 x_currency_code := v_currency_code.currency_code;
15896 lv_exists_flag := 'Y';
15897 END LOOP;
15898
15899 IF lv_exists_flag <> 'Y' THEN
15900 --RAISE FND_API.G_EXC_ERROR;
15901 --null;
15902 FND_MESSAGE.Set_Name('CS', 'CS_CHG_GET_CURRENCY_FAILED');
15903 FND_MESSAGE.SET_TOKEN('PRICE_LIST_ID', p_price_list_id);
15904 FND_MSG_PUB.Add;
15905 RAISE FND_API.G_EXC_ERROR;
15906 END IF;
15907 ELSE
15908 --price list id is null
15909 -- this should never happen
15910 --RAISE FND_API.G_EXC_ERROR;
15911 --null;
15912 Add_Null_Parameter_Msg(p_api_name, 'p_price_list_id');
15913 RAISE FND_API.G_EXC_ERROR;
15914 END IF;
15915
15916 EXCEPTION
15917
15918 WHEN FND_API.G_EXC_ERROR THEN
15919 x_return_status := FND_API.G_RET_STS_ERROR;
15920 fnd_msg_pub.count_and_get(
15921 p_count => x_msg_count
15922 ,p_data => x_msg_data);
15923
15924 WHEN OTHERS THEN
15925 x_return_status := FND_API.G_RET_STS_ERROR;
15926 FND_MESSAGE.Set_Name('CS', 'CS_CHG_GET_CURRENCY_FAILED');
15927 FND_MESSAGE.SET_TOKEN('PRICE_LIST_ID', p_price_list_id);
15928 FND_MSG_PUB.Add;
15929 fnd_msg_pub.count_and_get(
15930 p_count => x_msg_count
15931 ,p_data => x_msg_data);
15932
15933 END get_currency_code;
15934
15935 --============================================================
15936 -- Get_Conversion_Rate - To get the conversion rate
15937 --=============================================================
15938
15939 PROCEDURE Get_Conversion_Rate
15940 ( p_api_name IN VARCHAR2,
15941 p_from_currency IN VARCHAR2,
15942 p_to_currency IN VARCHAR2,
15943 x_denominator OUT NOCOPY NUMBER,
15944 x_numerator OUT NOCOPY NUMBER,
15945 x_rate OUT NOCOPY NUMBER,
15946 x_return_status OUT NOCOPY VARCHAR) IS
15947
15948 l_api_name VARCHAR2(80) := 'CS_Charge_Details_PVT.Get_Conversion_Rate';
15949 l_api_name_full CONSTANT VARCHAR2(100) := G_PKG_NAME || '.' || l_api_name ;
15950 l_log_module CONSTANT VARCHAR2(255) := 'cs.plsql.' || l_api_name_full || '.';
15951 l_conversion_type VARCHAR2(30) := FND_PROFILE.VALUE('CS_CHG_DEFAULT_CONVERSION_TYPE');
15952 l_max_roll_days NUMBER := to_number(FND_PROFILE.VALUE('CS_CHG_MAX_ROLL_DAYS'));
15953 lx_numerator NUMBER;
15954 lx_denominator NUMBER;
15955 lx_rate NUMBER;
15956
15957 BEGIN
15958
15959 -- Initialize Return Status to SUCCESS
15960 x_return_status := FND_API.G_RET_STS_SUCCESS;
15961
15962 --DBMS_OUTPUT.PUT_LINE('Conversion Type is '||l_conversion_type);
15963 --DBMS_OUTPUT.PUT_LINE('l_max_roll_days '||l_max_roll_days);
15964
15965 IF FND_LOG.level_procedure >= FND_LOG.g_current_runtime_level
15966 THEN
15967 FND_LOG.String
15968 ( FND_LOG.level_procedure , L_LOG_MODULE || ''
15969 , 'The Value of profile CS_CHG_DEFAULT_CONVERSION_TYPE :' || l_conversion_type
15970 );
15971 FND_LOG.String
15972 ( FND_LOG.level_procedure , L_LOG_MODULE || ''
15973 , 'The Value of profile CS_CHG_MAX_ROLL_DAYS :' || l_max_roll_days
15974 );
15975 END IF;
15976
15977 IF p_from_currency IS NULL THEN
15978 -- return error
15979 FND_MESSAGE.SET_NAME('CS', 'CS_CHG_UNDEFINED_CONV_CURRENCY');
15980 FND_MESSAGE.SET_TOKEN('API_NAME', p_api_name);
15981 FND_MESSAGE.SET_TOKEN('FROM_CURRENCY', p_from_currency);
15982 FND_MESSAGE.SET_TOKEN('TO_CURRENCY', p_to_currency);
15983 FND_MSG_PUB.add;
15984 RAISE FND_API.g_exc_error;
15985 END IF;
15986
15987 IF p_to_currency IS NULL THEN
15988 -- return error
15989 FND_MESSAGE.SET_NAME('CS', 'CS_CHG_UNDEFINED_CONV_CURRENCY');
15990 FND_MESSAGE.SET_TOKEN('API_NAME', p_api_name);
15991 FND_MESSAGE.SET_TOKEN('FROM_CURRENCY', p_from_currency);
15992 FND_MESSAGE.SET_TOKEN('TO_CURRENCY', p_to_currency);
15993 FND_MSG_PUB.add;
15994 RAISE FND_API.g_exc_error;
15995 END IF;
15996
15997 IF ((l_conversion_type IS NULL) OR
15998 (l_max_roll_days IS NULL)) THEN
15999 -- return error
16000 FND_MESSAGE.SET_NAME('CS', 'CS_CHG_UNDEFINED_CONV_PROFILES');
16001 FND_MESSAGE.SET_TOKEN('API_NAME', p_api_name);
16002 FND_MESSAGE.SET_TOKEN('PROFILE1', 'CS_CHG_DEFAULT_CONVERSION_TYPE');
16003 FND_MESSAGE.SET_TOKEN('PROFILE2', 'CS_CHG_MAX_ROLL_DAYS');
16004 FND_MSG_PUB.add;
16005 RAISE FND_API.g_exc_error;
16006 END IF;
16007
16008
16009 IF ((l_conversion_type IS NOT NULL) AND
16010 (l_max_roll_days IS NOT NULL)) THEN
16011 gl_currency_api.get_closest_triangulation_rate (
16012 x_from_currency => p_from_currency,
16013 x_to_currency => p_to_currency,
16014 x_conversion_date => SYSDATE,
16015 x_conversion_type => l_conversion_type,
16016 x_max_roll_days => l_max_roll_days,
16017 x_denominator => lx_denominator,
16018 x_numerator => lx_numerator,
16019 x_rate => lx_rate );
16020
16021 IF lx_rate IS NULL THEN
16022 --RAISE FND_API.g_exc_error;
16023 FND_MESSAGE.SET_NAME('CS', 'CS_CHG_CONV_RATE_NOT_FOUND');
16024 FND_MESSAGE.SET_TOKEN('API_NAME', p_api_name);
16025 FND_MESSAGE.SET_TOKEN('FROM_CURRENCY', p_from_currency);
16026 FND_MESSAGE.SET_TOKEN('TO_CURRENCY', p_to_currency);
16027 FND_MESSAGE.SET_TOKEN('CONV_DATE', sysdate);
16028 FND_MSG_PUB.add;
16029 RAISE FND_API.g_exc_error;
16030 ELSE
16031 x_denominator := lx_denominator;
16032 x_numerator := lx_numerator;
16033 x_rate := lx_rate;
16034 END IF;
16035 END IF;
16036
16037 EXCEPTION
16038
16039 WHEN FND_API.g_exc_error THEN
16040 x_return_status := fnd_api.g_ret_sts_error;
16041
16042 WHEN OTHERS THEN
16043 x_return_status := FND_API.G_RET_STS_ERROR;
16044 FND_MESSAGE.SET_NAME('CS', 'CS_CHG_CONV_RATE_NOT_FOUND');
16045 FND_MESSAGE.SET_TOKEN('API_NAME', p_api_name);
16046 FND_MESSAGE.SET_TOKEN('FROM_CURRENCY', p_from_currency);
16047 FND_MESSAGE.SET_TOKEN('TO_CURRENCY', p_to_currency);
16048 FND_MESSAGE.SET_TOKEN('CONV_DATE', sysdate);
16049 FND_MSG_PUB.add;
16050
16051 END Get_Conversion_Rate;
16052
16053 --============================================================
16054 -- Get Contracts - Contracts information for Contract Service ID
16055 --============================================================
16056
16057 PROCEDURE GET_CONTRACT(
16058 p_api_name IN VARCHAR2,
16059 p_contract_SR_ID IN NUMBER,
16060 p_incident_date IN DATE,
16061 p_creation_date IN DATE,
16062 p_customer_id IN NUMBER,
16063 p_cust_account_id IN NUMBER,
16064 p_cust_product_id IN NUMBER,
16065 p_system_id IN NUMBER DEFAULT NULL, -- Fix bug
16066 p_inventory_item_id IN NUMBER DEFAULT NULL, -- Fix bug
16067 p_business_process_id IN NUMBER,
16068 x_contract_id OUT NOCOPY NUMBER,
16069 x_po_number OUT NOCOPY VARCHAR2,
16070 x_return_status OUT NOCOPY VARCHAR2,
16071 x_msg_count OUT NOCOPY NUMBER,
16072 x_msg_data OUT NOCOPY VARCHAR2) IS
16073
16074 --Changed to Fix Bug # 3419211
16075 Cursor Con_Coverage(p_service_line_id number,p_business_process_id number) IS
16076 SELECT cov.contract_id
16077 --cov.coverage_line_id,
16078 --cov.coverage_name,
16079 --ent.txn_group_id
16080 FROM oks_ent_line_details_v cov,
16081 oks_ent_txn_groups_v ent
16082 WHERE cov.service_line_id = p_service_line_id
16083 AND cov.coverage_line_id = ent.coverage_id
16084 AND ent.business_process_id = p_business_process_id;
16085
16086 TYPE T_CHCONCOVTAB IS TABLE OF Con_Coverage%rowtype
16087 INDEX BY BINARY_INTEGER;
16088
16089 CHCONCOVTAB T_CHCONCOVTAB;
16090
16091
16092
16093 l_count NUMBER := 0;
16094 l_record_count NUMBER := 0;
16095 k NUMBER := 0;
16096 l_ent_contracts OKS_ENTITLEMENTS_PUB.GET_CONTOP_TBL;
16097 l_request_date DATE;
16098
16099 l_Service_PO_required VARCHAR2(30);
16100 l_result VARCHAR2(1);
16101 l_return_status VARCHAR2(1);
16102 l_service_po VARCHAR2(30);
16103
16104
16105
16106 BEGIN
16107
16108 --Fixed Bug # 3480770
16109 -- Initiate contract value.
16110 x_contract_id := null;
16111 --x_coverage_id := null;
16112 --x_coverage_txn_group_id := null;
16113 x_po_number := null;
16114
16115 -- derive the request date which will be passed to the
16116 -- CS_EST_APPLY_Contract_Pkg.Get_Contract_lines API
16117 -- if p_incident_date is null then use p_creation_date
16118
16119 IF p_incident_date IS NOT NULL THEN
16120 l_request_date := p_incident_date;
16121 ELSE
16122 l_request_date := p_creation_date;
16123 END IF;
16124
16125
16126 --Changed to Fix Bug # 3419211
16127 IF p_contract_sr_id IS NOT NULL AND
16128 p_business_process_id IS NOT NULL THEN
16129
16130 OPEN Con_Coverage(p_contract_sr_id, p_business_process_id);
16131 FETCH Con_Coverage
16132 INTO CHCONCOVTAB(k);
16133 --Fixed Bug # 3480770
16134 IF Con_Coverage%FOUND THEN
16135 x_contract_id := CHCONCOVTAB(k).contract_id;
16136 --x_coverage_id := CHCONCOVTAB(k).coverage_line_id;
16137 --x_coverage_txn_group_id := CHCONCOVTAB(k).TXN_GROUP_ID;
16138 END IF;
16139 CLOSE Con_Coverage;
16140
16141
16142 --DBMS_OUTPUT.PUT_LINE('Calling PO Cursor');
16143
16144 IF x_contract_id IS NOT NULL THEN
16145 -- call the Contracts API to get the PO NUmber
16146 OKS_ENTITLEMENTS_PVT.Get_Service_PO(
16147 P_Chr_Id => x_contract_id,
16148 P_Set_ExcepionStack => 'F',
16149 X_Service_PO => l_service_po,
16150 X_Service_PO_required => l_Service_po_required,
16151 X_Result => l_result,
16152 X_Return_Status => l_return_status);
16153
16154 --DBMS_OUTPUT.PUT_LINE('l_return_status'||l_return_status);
16155
16156 IF l_return_status = 'S' THEN
16157 x_po_number := l_service_po;
16158 ELSIF l_return_status IN ('E', 'U') THEN
16159 x_po_number := null;
16160 END IF;
16161 END IF;
16162 ELSE
16163 --RAISE FND_API.G_EXC_ERROR;
16164 --null;
16165 FND_MESSAGE.SET_NAME('CS', 'CS_CHG_GET_CONTRACT_ERROR');
16166 FND_MESSAGE.SET_TOKEN('API_NAME', p_api_name);
16167 FND_MESSAGE.SET_TOKEN('CONTRACT_SERVICE_LINE_ID', p_contract_sr_id);
16168 FND_MESSAGE.SET_TOKEN('BUSINESS_PROCESS_ID', p_business_process_id);
16169 FND_MSG_PUB.add;
16170 RAISE FND_API.g_exc_error;
16171 END IF;
16172
16173 EXCEPTION
16174
16175 WHEN FND_API.g_exc_error THEN
16176 x_return_status := fnd_api.g_ret_sts_error;
16177 fnd_msg_pub.count_and_get(
16178 p_count => x_msg_count
16179 ,p_data => x_msg_data);
16180
16181 END get_contract;
16182
16183 --=============================================================
16184 -- Get Charge Detail Record
16185 --=============================================================
16186
16187 PROCEDURE GET_CHARGE_DETAIL_REC(
16188 P_API_NAME IN VARCHAR2,
16189 P_ESTIMATE_DETAIL_ID IN NUMBER,
16190 x_CHARGE_DETAIL_REC OUT NOCOPY CS_ESTIMATE_DETAILS%ROWTYPE ,
16191 x_MSG_DATA OUT NOCOPY VARCHAR2,
16192 x_MSG_COUNT OUT NOCOPY NUMBER,
16193 x_RETURN_STATUS OUT NOCOPY VARCHAR2) IS
16194 BEGIN
16195
16196 --DBMS_OUTPUT.PUT_LINE('In GET_CHARGE_DETAIL_REC .....');
16197
16198 -- Initialize the p_return_status to TRUE
16199 --p_return_status := FND_API.G_RET_STS_SUCCESS ;
16200 x_return_status := FND_API.G_RET_STS_SUCCESS ;
16201
16202 SELECT *
16203 INTO x_charge_detail_rec
16204 FROM CS_ESTIMATE_DETAILS
16205 WHERE ESTIMATE_DETAIL_ID = p_estimate_detail_id
16206 FOR UPDATE OF ESTIMATE_DETAIL_ID NOWAIT ;
16207
16208 EXCEPTION
16209 WHEN NO_DATA_FOUND THEN
16210 CS_Charge_Details_PVT.Add_Invalid_Argument_Msg(
16211 p_token_an => p_api_name,
16212 p_token_v => to_char(p_estimate_detail_id) ,
16213 p_token_p => 'p_estimate_detail_id') ;
16214 fnd_msg_pub.count_and_get(
16215 p_count => x_msg_count
16216 ,p_data => x_msg_data);
16217
16218 WHEN RECORD_LOCK_EXCEPTION THEN
16219 --p_return_status := FND_API.G_RET_STS_ERROR ;
16220 x_return_status := FND_API.G_RET_STS_ERROR ;
16221 CS_Charge_Details_PVT.Record_Is_Locked_Msg(
16222 p_token_an => p_api_name);
16223
16224 WHEN OTHERS THEN
16225 x_return_status := FND_API.G_RET_STS_ERROR;
16226 FND_MESSAGE.SET_NAME('CS', 'CS_CHG_GET_CHARGE_FAILED');
16227 FND_MESSAGE.SET_TOKEN('API_NAME', p_api_name);
16228 FND_MESSAGE.SET_TOKEN('ESTIMATE_DETAIL_ID', p_estimate_detail_id);
16229 FND_MSG_PUB.add;
16230 fnd_msg_pub.count_and_get(
16231 p_count => x_msg_count
16232 ,p_data => x_msg_data);
16233
16234 END;
16235
16236
16237 --=============================================================
16238 --Do_Txns_Exist -- Can This be a function instead of a procedure
16239 --============================================================
16240 PROCEDURE Do_Txns_Exist(
16241 p_api_name IN VARCHAR2,
16242 p_estimate_detail_id IN NUMBER ,
16243 x_order_line_id OUT NOCOPY NUMBER,
16244 x_gen_bca_flag OUT NOCOPY VARCHAR2,
16245 x_charge_line_type OUT NOCOPY VARCHAR2,
16246 x_return_status OUT NOCOPY VARCHAR2) AS
16247 BEGIN
16248 --p_return_status := FND_API.G_RET_STS_SUCCESS ;
16249 x_return_status := FND_API.G_RET_STS_SUCCESS;
16250 SELECT order_line_id,
16251 GENERATED_BY_BCA_ENGINE_FLAG,
16252 Charge_line_type
16253 INTO x_order_line_id,
16254 x_gen_bca_flag,
16255 x_charge_line_type
16256 FROM CS_ESTIMATE_DETAILS
16257 WHERE estimate_detail_id = p_estimate_detail_id
16258 FOR UPDATE OF ESTIMATE_DETAIL_ID NOWAIT ;
16259
16260
16261 EXCEPTION
16262 WHEN NO_DATA_FOUND THEN
16263 --p_return_status := FND_API.G_RET_STS_ERROR ;
16264 x_return_status := FND_API.G_RET_STS_ERROR ;
16265 Add_Invalid_Argument_Msg(p_token_an => p_api_name,
16266 p_token_v => to_char(p_estimate_detail_id) ,
16267 p_token_p => 'estimate_detail_id' ) ;
16268
16269 WHEN RECORD_LOCK_EXCEPTION THEN
16270 --p_return_status := FND_API.G_RET_STS_ERROR ;
16271 x_return_status := FND_API.G_RET_STS_ERROR ;
16272 Record_Is_Locked_Msg(p_token_an => p_api_name);
16273
16274 WHEN OTHERS THEN
16275 --p_return_status := FND_API.G_RET_STS_ERROR ;
16276 x_return_status := FND_API.G_RET_STS_ERROR ;
16277
16278 END Do_Txns_Exist ;
16279
16280
16281 --=================================
16282 -- Validate Org Id
16283 --================================
16284
16285 PROCEDURE VALIDATE_ORG_ID(
16286 P_API_NAME IN VARCHAR2,
16287 P_ORG_ID IN NUMBER,
16288 X_RETURN_STATUS OUT NOCOPY VARCHAR2,
16289 X_MSG_COUNT OUT NOCOPY NUMBER,
16290 X_MSG_DATA OUT NOCOPY VARCHAR2)
16291
16292 IS
16293
16294 Cursor c_org_id IS
16295 SELECT organization_id
16296 FROM hr_operating_units
16297 WHERE organization_id = p_org_id;
16298 --12.2 charges log shachoud : start
16299
16300 /* cursor c_org_id_moac IS
16301 SELECT organization_id
16302 FROM hr_operating_units
16303 WHERE organization_id = p_org_id and
16304 mo_global.check_access(organization_id) = 'Y'; */
16305
16306 --12.2 charges log shachoud : end
16307
16308
16309
16310 lv_exists_flag VARCHAR2(1) := 'N';
16311
16312 BEGIN
16313
16314 If Nvl(fnd_profile.value('CS_SR_RESTRICT_OPERATING_UNIT'),'N') = 'N' then
16315 FOR v_org_id IN c_org_id
16316 LOOP
16317 lv_exists_flag := 'Y';
16318 END LOOP;
16319
16320 IF lv_exists_flag = 'Y' THEN
16321 x_return_status := FND_API.G_RET_STS_SUCCESS ;
16322 ELSE
16323 raise NO_DATA_FOUND;
16324 END IF;
16325 else
16326 /*FOR v_org_id IN c_org_id_moac
16327 LOOP
16328 lv_exists_flag := 'Y';
16329 END LOOP;
16330
16331 IF lv_exists_flag = 'Y' THEN
16332 x_return_status := FND_API.G_RET_STS_SUCCESS ;
16333 ELSE
16334 raise NO_DATA_FOUND;
16335 END IF;*/
16336
16337 IF (MO_GLOBAL.check_valid_org(p_org_id) ='N') THEN -- Bug 10359327
16338 raise NO_DATA_FOUND;
16339 else
16340 x_return_status := FND_API.G_RET_STS_SUCCESS ;
16341 End if;
16342 end if;
16343
16344
16345
16346 EXCEPTION
16347
16348 WHEN NO_DATA_FOUND THEN
16349 CS_Charge_Details_PVT.Add_Invalid_Argument_Msg(
16350 p_token_an => p_api_name,
16351 p_token_v => to_char(p_org_id) ,
16352 p_token_p => 'p_org_id') ;
16353
16354 fnd_msg_pub.count_and_get(
16355 p_count => x_msg_count
16356 ,p_data => x_msg_data);
16357
16358 x_return_status := FND_API.G_RET_STS_ERROR ; -- Bug 10359327
16359
16360
16361 WHEN OTHERS THEN
16362 x_return_status := FND_API.G_RET_STS_ERROR ;
16363
16364 END VALIDATE_ORG_ID;
16365
16366
16367 --==================================
16368 -- Add_Invalid_Argument_Msg
16369 --==================================
16370
16371 PROCEDURE Add_Invalid_Argument_Msg
16372 ( p_token_an VARCHAR2,
16373 p_token_v VARCHAR2,
16374 p_token_p VARCHAR2
16375 )
16376 IS
16377
16378 BEGIN
16379
16380 IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
16381 FND_MESSAGE.Set_Name('CS', 'CS_API_ALL_INVALID_ARGUMENT');
16382 FND_MESSAGE.Set_Token('API_NAME', p_token_an);
16383 FND_MESSAGE.Set_Token('VALUE', p_token_v);
16384 FND_MESSAGE.Set_Token('PARAMETER', p_token_p);
16385 FND_MSG_PUB.Add;
16386
16387 END IF;
16388
16389 END Add_Invalid_Argument_Msg;
16390
16391
16392 --====================================
16393 -- Add_Null_Parameter_Msg
16394 --====================================
16395
16396 PROCEDURE Add_Null_Parameter_Msg
16397 ( p_token_an VARCHAR2,
16398 p_token_np VARCHAR2
16399 )
16400 IS
16401
16402 BEGIN
16403
16404 IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
16405
16406 FND_MESSAGE.Set_Name('CS', 'CS_API_ALL_NULL_PARAMETER');
16407 FND_MESSAGE.Set_Token('API_NAME', p_token_an);
16408 FND_MESSAGE.Set_Token('NULL_PARAM', p_token_np);
16409 FND_MSG_PUB.Add;
16410
16411 END IF;
16412
16413 END Add_Null_Parameter_Msg;
16414
16415 --============================
16416 --Cannot_Delete_Line_Msg
16417 --============================
16418 PROCEDURE Cannot_Delete_Line_Msg
16419 ( p_token_an IN VARCHAR2
16420 )
16421 IS
16422 BEGIN
16423 FND_MESSAGE.Set_Name('CS', 'CS_API_CHG_CANT_DELETE_DET');
16424 FND_MESSAGE.Set_Token('API_NAME', p_token_an);
16425 FND_MSG_PUB.Add;
16426 END;
16427
16428
16429 --============================
16430 --
16431 --============================
16432 PROCEDURE Cant_Update_Detail_Param_Msg
16433 ( p_token_an IN VARCHAR2,
16434 p_token_cn IN VARCHAR2,
16435 p_token_v IN VARCHAR2
16436 ) IS
16437 BEGIN
16438 FND_MESSAGE.Set_Name('CS', 'CS_API_CHG_CANT_UPD_DET_PARAM');
16439 FND_MESSAGE.Set_Token('API_NAME', p_token_an);
16440 FND_MESSAGE.Set_Token('COLUMN_NAME', p_token_cn);
16441 FND_MESSAGE.Set_Token('VALUE', p_token_v);
16442 FND_MSG_PUB.Add;
16443 END;
16444
16445
16446
16447 --=============================
16448 -- Record_Is_Locked_msg
16449 --=============================
16450
16451 PROCEDURE Record_Is_Locked_Msg
16452 ( p_token_an VARCHAR2
16453 )
16454 IS
16455
16456 BEGIN
16457
16458 FND_MESSAGE.Set_Name('CS', 'CS_API_ALL_CANT_LOCK_RECORD');
16459 FND_MESSAGE.Set_Token('API_NAME', p_token_an);
16460 FND_MSG_PUB.Add;
16461 END Record_IS_Locked_Msg;
16462
16463
16464 PROCEDURE Validate_Who_Info(
16465 P_API_NAME IN VARCHAR2,
16466 P_USER_ID IN NUMBER,
16467 P_LOGIN_ID IN NUMBER,
16468 X_RETURN_STATUS OUT NOCOPY VARCHAR2) IS
16469
16470 CURSOR c_user IS
16471 SELECT 1
16472 FROM fnd_user
16473 WHERE user_id = p_user_id
16474 AND TRUNC(SYSDATE) <= start_date
16475 AND NVL(end_date, SYSDATE) >= SYSDATE;
16476
16477 CURSOR c_login IS
16478 SELECT 1
16479 FROM fnd_logins
16480 WHERE login_id = p_login_id
16481 AND user_id = p_user_id;
16482
16483 l_dummy VARCHAR2(1);
16484
16485 BEGIN
16486
16487 x_return_status := FND_API.G_RET_STS_SUCCESS;
16488
16489 BEGIN
16490 IF p_user_id = -1 then
16491 SELECT 'x' into l_dummy
16492 FROM fnd_user
16493 WHERE user_id = p_user_id;
16494 ELSE
16495 SELECT 'x' into l_dummy
16496 FROM fnd_user
16497 WHERE user_id = p_user_id
16498 AND trunc(sysdate) BETWEEN trunc(nvl(start_date, sysdate))
16499 AND trunc(nvl(end_date, sysdate));
16500 END IF;
16501
16502 EXCEPTION
16503 WHEN NO_DATA_FOUND THEN
16504 x_return_status := FND_API.G_RET_STS_ERROR;
16505 Add_Invalid_Argument_Msg(p_token_an => p_api_name,
16506 p_token_v => TO_CHAR(p_user_id),
16507 p_token_p => 'p_user_id');
16508 return;
16509 END;
16510
16511 IF p_login_id is not null then
16512 BEGIN
16513 SELECT 'x' into l_dummy
16514 FROM fnd_logins
16515 WHERE login_id = p_login_id
16516 AND user_id = p_user_id;
16517
16518 EXCEPTION
16519 WHEN NO_DATA_FOUND THEN
16520 x_return_status := FND_API.G_RET_STS_ERROR;
16521 Add_Invalid_Argument_Msg(p_token_an => p_api_name,
16522 p_token_v => TO_CHAR(p_login_id),
16523 p_token_p => 'p_user_login');
16524 END;
16525 END IF;
16526
16527 END Validate_Who_Info;
16528
16529 -- Get line type id.
16530 --Fixed Bug # 3325667 added p_org_id to procedure get_line_type
16531 Procedure Get_Line_Type(p_api_name IN VARCHAR2,
16532 p_txn_billing_type_id IN NUMBER,
16533 p_org_id IN NUMBER,
16534 x_line_type_id OUT NOCOPY NUMBER,
16535 x_return_status OUT NOCOPY VARCHAR2,
16536 x_msg_count OUT NOCOPY NUMBER,
16537 x_msg_data OUT NOCOPY VARCHAR2) IS
16538
16539 --Fixed Bug # 3325667 added p_org_id to procedure get_line_type
16540 CURSOR get_line_type_csr IS
16541 select tb.line_type_id
16542 from cs_txn_billing_oetxn_all tb, cs_txn_billing_types tt
16543 where tb.txn_billing_type_id = p_txn_billing_type_id
16544 and tb.txn_billing_type_id = tt.txn_billing_type_id and
16545 tb.org_id = p_org_id;
16546
16547 BEGIN
16548 --DBMS_OUTPUT.PUT_LINE('p_txn_billing_type_id = ' || p_txn_billing_type_id);
16549
16550 x_return_status := FND_API.G_RET_STS_SUCCESS;
16551 x_line_type_id := null;
16552
16553 OPEN get_line_type_csr;
16554 FETCH get_line_type_csr
16555 INTO x_line_type_id;
16556 IF get_line_type_csr%NOTFOUND THEN
16557 CLOSE get_line_type_csr;
16558 FND_MESSAGE.SET_NAME('CS', 'CS_CHG_LINE_TYPE_NOT_FOUND');
16559 FND_MESSAGE.SET_TOKEN('TXN_BILLING_TYPE_ID', p_txn_billing_type_id);
16560 FND_MSG_PUB.ADD;
16561 RAISE FND_API.g_exc_error;
16562 END IF;
16563 CLOSE get_line_type_csr;
16564 --DBMS_OUTPUT.PUT_LINE('x_return_status = ' || x_return_status);
16565
16566 -- Exception Block
16567 EXCEPTION
16568 WHEN FND_API.g_exc_error THEN
16569 x_return_status := fnd_api.g_ret_sts_error;
16570 fnd_msg_pub.count_and_get(
16571 p_count => x_msg_count
16572 ,p_data => x_msg_data);
16573 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
16574 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
16575 fnd_msg_pub.count_and_get(
16576 p_count => x_msg_count
16577 ,p_data => x_msg_data);
16578 WHEN OTHERS THEN
16579 x_return_status := FND_API.G_RET_STS_ERROR;
16580 FND_MESSAGE.SET_NAME('CS', 'CS_CHG_UNEXPECTED_EXEC_ERRORS');
16581 FND_MESSAGE.SET_TOKEN('ROUTINE', p_api_name);
16582 FND_MESSAGE.SET_TOKEN('SQLERRM', sqlerrm);
16583 FND_MSG_PUB.ADD;
16584 fnd_msg_pub.count_and_get(
16585 p_count => x_msg_count
16586 ,p_data => x_msg_data);
16587
16588 END Get_Line_Type;
16589
16590 --==================================================
16591 -- GET_CHARGE_FLAGS_FROM_SR
16592 --==================================================
16593
16594 --Bug Fix for Bug # 3086455
16595 PROCEDURE get_charge_flags_from_sr(p_api_name IN VARCHAR2,
16596 p_incident_id IN NUMBER,
16597 x_disallow_new_charge OUT NOCOPY VARCHAR2,
16598 x_disallow_charge_update OUT NOCOPY VARCHAR2,
16599 x_msg_data OUT NOCOPY VARCHAR2,
16600 x_msg_count OUT NOCOPY NUMBER,
16601 x_return_status OUT NOCOPY NUMBER
16602 )IS
16603
16604 cursor c_charge_flags(p_incident_id IN NUMBER)IS
16605 select nvl(csinst.disallow_new_charge, 'N'),
16606 nvl(csinst.disallow_charge_update, 'N')
16607 from cs_incident_statuses csinst,
16608 cs_incidents_all csinall
16609 where csinst.incident_status_id = csinall.incident_status_id
16610 and csinall.incident_id = p_incident_id;
16611
16612
16613 BEGIN
16614
16615 OPEN c_charge_flags(p_incident_id);
16616 FETCH c_charge_flags
16617 INTO x_disallow_new_charge, x_disallow_charge_update;
16618 IF c_charge_flags%NOTFOUND THEN
16619 CLOSE c_charge_flags;
16620 --Add null argument error
16621 Add_Invalid_Argument_Msg(p_token_an => p_api_name,
16622 p_token_v => TO_CHAR(p_incident_id),
16623 p_token_p => 'p_incident_id');
16624 RAISE FND_API.G_EXC_ERROR;
16625 END IF;
16626 CLOSE c_charge_flags;
16627 END;
16628
16629
16630 --========================
16631 --CHARGE FLAG
16632 --========================
16633
16634 --added by bkanimoz on 15-dec-2007
16635
16636 PROCEDURE get_charge_flag_from_sac
16637 (p_api_name IN VARCHAR2,
16638 p_txn_type_id IN NUMBER,
16639 x_create_charge_flag OUT NOCOPY VARCHAR2,
16640 x_msg_data OUT NOCOPY VARCHAR2,
16641 x_msg_count OUT NOCOPY NUMBER,
16642 x_return_status OUT NOCOPY NUMBER
16643 )IS
16644
16645 cursor c_create_charge_flag ( p_txn_type_id IN NUMBER)IS
16646 select nvl(ctt.create_charge_flag, 'Y')
16647 from cs_transaction_types_b ctt
16648 where transaction_type_id= p_txn_type_id ;
16649
16650
16651 BEGIN
16652
16653 OPEN c_create_charge_flag(p_txn_type_id);
16654 FETCH c_create_charge_flag
16655 INTO x_create_charge_flag;
16656 IF c_create_charge_flag%NOTFOUND THEN
16657 CLOSE c_create_charge_flag;
16658 --Add null argument error
16659 Add_Invalid_Argument_Msg(p_token_an => p_api_name,
16660 p_token_v => TO_CHAR(p_txn_type_id),
16661 p_token_p => 'p_txn_type_id');
16662 RAISE FND_API.G_EXC_ERROR;
16663 END IF;
16664 CLOSE c_create_charge_flag;
16665
16666 END;
16667
16668
16669
16670
16671 --========================
16672 -- VALIDATE_ORDER
16673 --========================
16674
16675 PROCEDURE Validate_Order(p_api_name IN VARCHAR2,
16676 p_order_header_id IN NUMBER,
16677 p_org_id IN NUMBER,
16678 x_return_status OUT NOCOPY VARCHAR2,
16679 x_msg_count OUT NOCOPY NUMBER,
16680 x_msg_data OUT NOCOPY VARCHAR2) IS
16681
16682 CURSOR order_csr IS
16683 SELECT header_id,
16684 open_flag
16685 FROM OE_ORDER_HEADERS_ALL ooha,
16686 HZ_CUST_ACCOUNTS acct,
16687 HZ_PARTIES hp
16688 WHERE ooha.sold_to_org_id = acct.cust_account_id
16689 AND acct.party_id = hp.party_id
16690 AND ooha.header_id = p_order_header_id
16691 AND ooha.org_id = p_org_id;
16692
16693 l_order_header_id NUMBER;
16694 l_open_flag VARCHAR2(1);
16695
16696 BEGIN
16697 -- Initialize Return Status to SUCCESS
16698 x_return_status := FND_API.G_RET_STS_SUCCESS;
16699
16700 OPEN order_csr;
16701 FETCH order_csr
16702 INTO l_order_header_id, l_open_flag;
16703 IF order_csr%NOTFOUND THEN
16704 CLOSE order_csr;
16705 FND_MESSAGE.Set_Name('CS', 'CS_CHG_INVALID_ORDER');
16706 FND_MESSAGE.SET_TOKEN('ORDER_HEADER_ID', p_order_header_id);
16707 FND_MSG_PUB.Add;
16708 RAISE FND_API.G_EXC_ERROR;
16709 END IF;
16710 CLOSE order_csr;
16711
16712 --Bug Fix for Bug # 3085106
16713
16714 IF l_open_flag = 'N' THEN
16715 FND_MESSAGE.Set_Name('CS', 'CS_CHG_CANNOT_ADD_TO_ORDER');
16716 FND_MESSAGE.Set_token('API_NAME', p_api_name);
16717 FND_MESSAGE.SET_TOKEN('ORDER_HEADER_ID', p_order_header_id);
16718 FND_MSG_PUB.Add;
16719 RAISE FND_API.G_EXC_ERROR;
16720 END IF;
16721
16722
16723 -- Exception Block
16724 EXCEPTION
16725 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
16726 x_return_status := FND_API.G_RET_STS_ERROR;
16727 fnd_msg_pub.count_and_get(
16728 p_count => x_msg_count
16729 ,p_data => x_msg_data);
16730
16731 WHEN OTHERS THEN
16732 FND_MESSAGE.SET_NAME('CS', 'CS_CHG_UNEXPECTED_EXEC_ERRORS');
16733 FND_MESSAGE.SET_TOKEN('ROUTINE', p_api_name);
16734 FND_MESSAGE.SET_TOKEN('SQLERRM', sqlerrm);
16735 FND_MSG_PUB.ADD;
16736 fnd_msg_pub.count_and_get(
16737 p_count => x_msg_count
16738 ,p_data => x_msg_data);
16739 x_return_status := FND_API.G_RET_STS_ERROR;
16740
16741 END Validate_Order;
16742
16743 --------------------------------------------------------------------------------
16744 -- Procedure Name : PURGE_CHG_VALIDATIONS
16745 --
16746 -- Parameters (other than standard ones)
16747 -- IN
16748 -- p_object_type : Type of object for which this procedure is
16749 -- being called. (Here it will be 'SR')
16750 -- p_processing_set_id : Id that helps the API in identifying the
16751 -- set of SRs for which the child objects have
16752 -- to be deleted.
16753 --
16754 -- Description
16755 -- This procedure identifies the charge lines that are related to an SR
16756 -- and verifies if they can be deleted. The conditions checked during the
16757 -- varification are: if the charge line is 'ACTUAL' and if it does not have
16758 -- an order line id, the line cannot be deleted. In this case, the global
16759 -- temp table is updated with a purge_status as E against that SR which
16760 -- contains such a charge line.
16761 --
16762 -- HISTORY
16763 --
16764 ----------------+------------+--------------------------------------------------
16765 -- DATE | UPDATED BY | Change Description
16766 ----------------+------------+--------------------------------------------------
16767 -- 4-Aug-2005 | varnaray | Created
16768 -- | |
16769 ----------------+------------+--------------------------------------------------
16770 PROCEDURE Purge_Chg_Validations
16771 (
16772 p_api_version_number IN NUMBER := 1.0
16773 , p_init_msg_list IN VARCHAR2 := FND_API.G_FALSE
16774 , p_commit IN VARCHAR2 := FND_API.G_FALSE
16775 , p_object_type IN VARCHAR2
16776 , p_processing_set_id IN NUMBER
16777 , x_return_status OUT NOCOPY VARCHAR2
16778 , x_msg_count OUT NOCOPY NUMBER
16779 , x_msg_data OUT NOCOPY VARCHAR2
16780 )
16781 IS
16782 --------------------------------------------------------------------------------
16783
16784 L_API_VERSION CONSTANT NUMBER := 1.0;
16785 L_API_NAME CONSTANT VARCHAR2(30) := 'PURGE_CHG_VALIDATIONS';
16786 L_API_NAME_FULL CONSTANT VARCHAR2(100) := G_PKG_NAME || '.' || L_API_NAME;
16787 L_LOG_MODULE CONSTANT VARCHAR2(255) := 'cs.plsql.' || L_API_NAME_FULL || '.';
16788
16789 l_row_count NUMBER := 0;
16790
16791 BEGIN
16792 x_return_status := FND_API.G_RET_STS_SUCCESS;
16793
16794 IF FND_LOG.level_procedure >= FND_LOG.g_current_runtime_level
16795 THEN
16796 FND_LOG.String
16797 (
16798 FND_LOG.level_procedure
16799 , L_LOG_MODULE || 'start'
16800 , 'Inside ' || L_API_NAME_FULL
16801 || ', called with parameters below:'
16802 );
16803 FND_LOG.String
16804 (
16805 FND_LOG.level_procedure
16806 , L_LOG_MODULE || 'param 1'
16807 , 'p_api_version_number:' || p_api_version_number
16808 );
16809 FND_LOG.String
16810 (
16811 FND_LOG.level_procedure
16812 , L_LOG_MODULE || 'param 2'
16813 , 'p_init_msg_list:' || p_init_msg_list
16814 );
16815 FND_LOG.String
16816 (
16817 FND_LOG.level_procedure
16818 , L_LOG_MODULE || 'param 3'
16819 , 'p_commit:' || p_commit
16820 );
16821 FND_LOG.String
16822 (
16823 FND_LOG.level_procedure
16824 , L_LOG_MODULE || 'param 4'
16825 , 'p_object_type:' || p_object_type
16826 );
16827 FND_LOG.String
16828 (
16829 FND_LOG.level_procedure
16830 , L_LOG_MODULE || 'param 5'
16831 , 'p_processing_set_id:' || p_processing_set_id
16832 );
16833 END IF ;
16834
16835 IF NOT FND_API.Compatible_API_Call
16836 (
16837 L_API_VERSION
16838 , p_api_version_number
16839 , L_API_NAME
16840 , G_PKG_NAME
16841 )
16842 THEN
16843 FND_MSG_PUB.Count_And_Get
16844 (
16845 p_count => x_msg_count
16846 , p_data => x_msg_data
16847 );
16848 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
16849 END IF ;
16850
16851 IF FND_API.to_Boolean(p_init_msg_list)
16852 THEN
16853 FND_MSG_PUB.initialize;
16854 END IF ;
16855
16856 ------------------------------------------------------------------------------
16857 -- Parameter Validations:
16858 ------------------------------------------------------------------------------
16859
16860 IF NVL(p_object_type, 'X') <> 'SR'
16861 THEN
16862 IF FND_LOG.level_unexpected >= FND_LOG.g_current_runtime_level
16863 THEN
16864 FND_LOG.String
16865 (
16866 FND_LOG.level_unexpected
16867 , L_LOG_MODULE || 'object_type_invalid'
16868 , 'p_object_type has to be SR.'
16869 );
16870 END IF ;
16871
16872 FND_MESSAGE.Set_Name('CS', 'CS_SR_PARAM_VALUE_ERROR');
16873 FND_MESSAGE.Set_Token('API_NAME', L_API_NAME_FULL);
16874 FND_MESSAGE.Set_Token('PARAM', 'p_object_type');
16875 FND_MESSAGE.Set_Token('CURRVAL', p_object_type);
16876 FND_MSG_PUB.ADD;
16877
16878 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
16879 END IF;
16880
16881 ---
16882
16883 IF p_processing_set_id IS NULL
16884 THEN
16885 IF FND_LOG.level_unexpected >= FND_LOG.g_current_runtime_level
16886 THEN
16887 FND_LOG.String
16888 (
16889 FND_LOG.level_unexpected
16890 , L_LOG_MODULE || 'proc_set_id_invalid'
16891 , 'p_processing_set_id should not be NULL.'
16892 );
16893 END IF ;
16894
16895 FND_MESSAGE.Set_Name('CS', 'CS_SR_PARAM_VALUE_ERROR');
16896 FND_MESSAGE.Set_Token('API_NAME', L_API_NAME_FULL);
16897 FND_MESSAGE.Set_Token('PARAM', 'p_processing_set_id');
16898 FND_MESSAGE.Set_Token('CURRVAL', NVL(to_char(p_processing_set_id),'NULL'));
16899 FND_MSG_PUB.ADD;
16900
16901 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
16902 END IF;
16903
16904 ------------------------------------------------------------------------------
16905 -- Actual Logic starts below:
16906 ------------------------------------------------------------------------------
16907
16908 IF FND_LOG.level_statement >= FND_LOG.g_current_runtime_level
16909 THEN
16910 FND_LOG.String
16911 (
16912 FND_LOG.level_statement
16913 , L_LOG_MODULE || 'valid_chg_line_start'
16914 , 'validating charge lines against SRs in the global temp table'
16915 );
16916 END IF ;
16917
16918 -- validate the SRs that are submitted for purge
16919 -- against the charge lines created for them.
16920 -- if the charge lines are ACTUAL and do not have
16921 -- a line id attached to them, then the corresponding
16922 -- SRs cannot be purged.
16923
16924 UPDATE jtf_object_purge_param_tmp
16925 SET
16926 purge_status = 'E'
16927 , purge_error_message = 'CS:CS_CHG_LINE_VAL_ERR'
16928 WHERE
16929 object_id IN
16930 (
16931 SELECT
16932 t.object_id
16933 FROM
16934 cs_estimate_details e
16935 , jtf_object_purge_param_tmp t
16936 WHERE
16937 e.incident_id = t.object_id
16938 AND e.charge_line_type = 'ACTUAL'
16939 AND e.order_line_id IS NULL
16940 AND t.object_type = 'SR'
16941 AND t.processing_set_id = p_processing_set_id
16942 AND nvl(t.purge_status, 'S') = 'S'
16943 )
16944 AND nvl(purge_status, 'S') = 'S'
16945 AND object_type = 'SR'
16946 AND processing_set_id = p_processing_set_id;
16947
16948 l_row_count := SQL%ROWCOUNT;
16949
16950 IF FND_LOG.level_statement >= FND_LOG.g_current_runtime_level
16951 THEN
16952 FND_LOG.String
16953 (
16954 FND_LOG.level_statement
16955 , L_LOG_MODULE || 'valid_chg_line_end'
16956 , 'after validating charge lines against SRs in the global temp table '
16957 || l_row_count || ' rows failed validation'
16958 );
16959 END IF ;
16960
16961 ---
16962
16963 IF FND_LOG.level_procedure >= FND_LOG.g_current_runtime_level
16964 THEN
16965 FND_LOG.String
16966 (
16967 FND_LOG.level_procedure
16968 , L_LOG_MODULE || 'end'
16969 , 'Completed work in ' || L_API_NAME_FULL || ' successfully'
16970 );
16971 END IF ;
16972
16973 EXCEPTION
16974 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
16975 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
16976
16977 IF FND_LOG.level_unexpected >= FND_LOG.g_current_runtime_level
16978 THEN
16979 FND_LOG.String
16980 (
16981 FND_LOG.level_unexpected
16982 , L_LOG_MODULE || 'unexpected_error'
16983 , 'Inside WHEN FND_API.G_EXC_UNEXPECTED_ERROR of ' || L_API_NAME_FULL
16984 );
16985 END IF ;
16986
16987 WHEN OTHERS THEN
16988 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
16989 FND_MESSAGE.Set_Name('CS', 'CS_CHG_LINE_VAL_FAIL');
16990 FND_MESSAGE.Set_Token('API_NAME', L_API_NAME_FULL);
16991 FND_MESSAGE.Set_Token('ERROR', SQLERRM);
16992 FND_MSG_PUB.ADD;
16993
16994 IF FND_LOG.level_unexpected >= FND_LOG.g_current_runtime_level
16995 THEN
16996 FND_LOG.String
16997 (
16998 FND_LOG.level_unexpected
16999 , L_LOG_MODULE || 'when_others'
17000 , 'Inside WHEN OTHERS of ' || L_API_NAME_FULL || '. Oracle Error was:'
17001 );
17002 FND_LOG.String
17003 (
17004 FND_LOG.level_unexpected
17005 , L_LOG_MODULE || 'when_others'
17006 , SQLERRM
17007 );
17008 END IF ;
17009 END Purge_Chg_Validations;
17010
17011 --------------------------------------------------------------------------------
17012 -- Procedure Name : PURGE_CHARGES
17013 --
17014 -- Parameters (other than standard ones)
17015 -- IN
17016 -- p_object_type : Type of object for which this procedure is
17017 -- being called. (Here it will be 'SR')
17018 -- p_processing_set_id : Id that helps the API in identifying the
17019 -- set of SRs for which the child objects have
17020 -- to be deleted.
17021 --
17022 -- Description
17023 -- This procedure physically deletes all the charge lines attached to
17024 -- a service request. It reads the list of SRs for which the charge lines
17025 -- have to be deleted from the global temp table, looking only for rows
17026 -- having the purge_status as NULL. Using Set processing, the procedure
17027 -- deletes all the charge lines attached to such SRs.
17028 --
17029 -- HISTORY
17030 --
17031 ----------------+------------+--------------------------------------------------
17032 -- DATE | UPDATED BY | Change Description
17033 ----------------+------------+--------------------------------------------------
17034 -- 4-Aug-2005 | varnaray | Created
17035 -- | |
17036 ----------------+------------+--------------------------------------------------
17037 PROCEDURE Purge_Charges
17038 (
17039 p_api_version_number IN NUMBER := 1.0
17040 , p_init_msg_list IN VARCHAR2 := FND_API.G_FALSE
17041 , p_commit IN VARCHAR2 := FND_API.G_FALSE
17042 , p_object_type IN VARCHAR2
17043 , p_processing_set_id IN NUMBER
17044 , x_return_status OUT NOCOPY VARCHAR2
17045 , x_msg_count OUT NOCOPY NUMBER
17046 , x_msg_data OUT NOCOPY VARCHAR2
17047 )
17048 IS
17049 --------------------------------------------------------------------------------
17050
17051 L_API_VERSION CONSTANT NUMBER := 1.0;
17052 L_API_NAME CONSTANT VARCHAR2(30) := 'PURGE_CHARGES';
17053 L_API_NAME_FULL CONSTANT VARCHAR2(100) := G_PKG_NAME || '.' || L_API_NAME;
17054 L_LOG_MODULE CONSTANT VARCHAR2(255) := 'cs.plsql.' || L_API_NAME_FULL || '.';
17055
17056 l_row_count NUMBER := 0;
17057
17058 BEGIN
17059 x_return_status := FND_API.G_RET_STS_SUCCESS;
17060
17061 IF FND_LOG.level_procedure >= FND_LOG.g_current_runtime_level
17062 THEN
17063 FND_LOG.String
17064 (
17065 FND_LOG.level_procedure
17066 , L_LOG_MODULE || 'start'
17067 , 'Inside ' || L_API_NAME_FULL || ', called with parameters below:'
17068 );
17069 FND_LOG.String
17070 (
17071 FND_LOG.level_procedure
17072 , L_LOG_MODULE || 'param 1'
17073 , 'p_api_version_number:' || p_api_version_number
17074 );
17075 FND_LOG.String
17076 (
17077 FND_LOG.level_procedure
17078 , L_LOG_MODULE || 'param 2'
17079 , 'p_init_msg_list:' || p_init_msg_list
17080 );
17081 FND_LOG.String
17082 (
17083 FND_LOG.level_procedure
17084 , L_LOG_MODULE || 'param 3'
17085 , 'p_commit:' || p_commit
17086 );
17087 FND_LOG.String
17088 (
17089 FND_LOG.level_procedure
17090 , L_LOG_MODULE || 'param 4'
17091 , 'p_object_type:' || p_object_type
17092 );
17093 FND_LOG.String
17094 (
17095 FND_LOG.level_procedure
17096 , L_LOG_MODULE || 'param 5'
17097 , 'p_processing_set_id:' || p_processing_set_id
17098 );
17099 END IF ;
17100
17101 IF NOT FND_API.Compatible_API_Call
17102 (
17103 L_API_VERSION
17104 , p_api_version_number
17105 , L_API_NAME
17106 , G_PKG_NAME
17107 )
17108 THEN
17109 FND_MSG_PUB.Count_And_Get
17110 (
17111 p_count => x_msg_count
17112 , p_data => x_msg_data
17113 );
17114 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
17115 END IF ;
17116
17117 IF FND_API.to_Boolean(p_init_msg_list)
17118 THEN
17119 FND_MSG_PUB.initialize;
17120 END IF ;
17121
17122 ------------------------------------------------------------------------------
17123 -- Parameter Validations:
17124 ------------------------------------------------------------------------------
17125
17126 IF NVL(p_object_type, 'X') <> 'SR'
17127 THEN
17128 IF FND_LOG.level_unexpected >= FND_LOG.g_current_runtime_level
17129 THEN
17130 FND_LOG.String
17131 (
17132 FND_LOG.level_unexpected
17133 , L_LOG_MODULE || 'object_type_invalid'
17134 , 'p_object_type has to be SR.'
17135 );
17136 END IF ;
17137
17138 FND_MESSAGE.Set_Name('CS', 'CS_SR_PARAM_VALUE_ERROR');
17139 FND_MESSAGE.Set_Token('API_NAME', L_API_NAME_FULL);
17140 FND_MESSAGE.Set_Token('PARAM', 'p_object_type');
17141 FND_MESSAGE.Set_Token('CURRVAL', p_object_type);
17142 FND_MSG_PUB.ADD;
17143
17144 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
17145 END IF;
17146
17147 ---
17148
17149 IF p_processing_set_id IS NULL
17150 THEN
17151 IF FND_LOG.level_unexpected >= FND_LOG.g_current_runtime_level
17152 THEN
17153 FND_LOG.String
17154 (
17155 FND_LOG.level_unexpected
17156 , L_LOG_MODULE || 'proc_set_id_invalid'
17157 , 'p_processing_set_id should not be NULL.'
17158 );
17159 END IF ;
17160
17161 FND_MESSAGE.Set_Name('CS', 'CS_SR_PARAM_VALUE_ERROR');
17162 FND_MESSAGE.Set_Token('API_NAME', L_API_NAME_FULL);
17163 FND_MESSAGE.Set_Token('PARAM', 'p_processing_set_id');
17164 FND_MESSAGE.Set_Token('CURRVAL', NVL(to_char(p_processing_set_id),'NULL'));
17165 FND_MSG_PUB.ADD;
17166
17167 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
17168 END IF;
17169
17170 ------------------------------------------------------------------------------
17171 -- Actual Logic starts below:
17172 ------------------------------------------------------------------------------
17173
17174 IF FND_LOG.level_statement >= FND_LOG.g_current_runtime_level
17175 THEN
17176 FND_LOG.String
17177 (
17178 FND_LOG.level_statement
17179 , L_LOG_MODULE || 'del_chg_line_start'
17180 , 'deleting charge lines against SRs in the global temp table'
17181 );
17182 END IF ;
17183
17184 -- Delete all the estimate lines that correspond to the
17185 -- SRs that are available for purge after validations.
17186 -- bug 12681409 Change the hint to cardinality(jtf_object_purge_param_tmp, 10)
17187
17188 DELETE /*+ index(e) */ cs_estimate_details e
17189 WHERE
17190 incident_id IN
17191 (
17192 SELECT /*+ cardinality(jtf_object_purge_param_tmp, 10) */
17193 object_id
17194 FROM
17195 jtf_object_purge_param_tmp
17196 WHERE
17197 processing_set_id = p_processing_set_id
17198 AND object_type = 'SR'
17199 AND NVL(purge_status, 'S') = 'S'
17200 );
17201
17202 l_row_count := SQL%ROWCOUNT;
17203
17204 IF FND_LOG.level_statement >= FND_LOG.g_current_runtime_level
17205 THEN
17206 FND_LOG.String
17207 (
17208 FND_LOG.level_statement
17209 , L_LOG_MODULE || 'del_chg_line_end'
17210 , 'after deleting charge lines against SRs in the global temp table'
17211 || l_row_count || ' rows deleted.'
17212 );
17213 END IF ;
17214
17215 ---
17216
17217 IF FND_LOG.level_procedure >= FND_LOG.g_current_runtime_level
17218 THEN
17219 FND_LOG.String
17220 (
17221 FND_LOG.level_procedure
17222 , L_LOG_MODULE || 'end'
17223 , 'Completed work in ' || L_API_NAME_FULL || ' successfully'
17224 );
17225 END IF ;
17226
17227 EXCEPTION
17228 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
17229 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
17230
17231 IF FND_LOG.level_unexpected >= FND_LOG.g_current_runtime_level
17232 THEN
17233 FND_LOG.String
17234 (
17235 FND_LOG.level_unexpected
17236 , L_LOG_MODULE || 'unexpected_error'
17237 , 'Inside WHEN FND_API.G_EXC_UNEXPECTED_ERROR of ' || L_API_NAME_FULL
17238 );
17239 END IF ;
17240
17241 WHEN OTHERS THEN
17242 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
17243 FND_MESSAGE.Set_Name('CS', 'CS_CHG_LINE_DEL_FAIL');
17244 FND_MESSAGE.Set_Token('API_NAME', L_API_NAME_FULL);
17245 FND_MESSAGE.Set_Token('ERROR', SQLERRM);
17246 FND_MSG_PUB.ADD;
17247
17248 IF FND_LOG.level_unexpected >= FND_LOG.g_current_runtime_level
17249 THEN
17250 FND_LOG.String
17251 (
17252 FND_LOG.level_unexpected
17253 , L_LOG_MODULE || 'when_others'
17254 , 'Inside WHEN OTHERS of ' || L_API_NAME_FULL || '. Oracle Error was:'
17255 );
17256 FND_LOG.String
17257 (
17258 FND_LOG.level_unexpected
17259 , L_LOG_MODULE || 'when_others'
17260 , SQLERRM
17261 );
17262 END IF ;
17263 END Purge_Charges;
17264 --------------------------------------------------------------------------------
17265
17266 END CS_Charge_Details_PVT;