[Home] [Help]
PACKAGE BODY: APPS.QP_INT_LOADER_PUB
Source
1 PACKAGE BODY QP_INT_LOADER_PUB AS
2 /* $Header: QPXILDRB.pls 120.1 2005/06/14 05:36:31 appldev $ */
3
4 -- When List_Type_Code is 'PRL' Process_Price_List is invoked
5 -- When List_Type Code is 'PLL' Process_Mofidiers is invoked
6
7 PROCEDURE Load_Int_List
8 ( p_process_id IN NUMBER,
9 x_status OUT NOCOPY /* file.sql.39 change */ VARCHAR2,
10 x_errors OUT NOCOPY /* file.sql.39 change */ VARCHAR2
11 )
12 IS
13
14 l_request_type_code varchar2(3):= NULL;
15 gpr_return_status varchar2(30) := NULL;
16 gpr_msg_count number := 0;
17 gpr_msg_data varchar2(2000);
18 l_operation VARCHAR2(30);
19 l_process_type VARCHAR2(30);
20 i number := 1;
21 length number := 0;
22
23 l_interface_action_code VARCHAR2(30);
24 l_list_type_code VARCHAR2(30);
25 l_name VARCHAR2(30);
26 l_err_buffer VARCHAR2(240) :=NULL;
27 l_list_header_id NUMBER := 0;
28 l_list_line_id NUMBER := 0;
29 l_count NUMBER :=0;
30
31 -- for fte_batch_jobs and fte_job_errors tables
32 l_party_id NUMBER:=-1;
33 l_party_name VARCHAR2(30);
34 l_job_start_date DATE := SYSDATE;
35 l_job_completion_date DATE := NULL;
36 -- job status 0 = completed with success, 1 = completed with error, 2 = in process
37 l_job_status VARCHAR2(30) := 2;
38
39 l_region_id NUMBER :=NULL;
40 l_is_prclst_exists BOOLEAN := NULL;
41
42 null_interface_action_code EXCEPTION;
43 invalid_interface_action_code EXCEPTION;
44 null_list_type_code EXCEPTION;
45 invalid_list_type_code EXCEPTION;
46 boi_failed_exception EXCEPTION;
47 origin_rid_failed EXCEPTION;
48 destination_rid_failed EXCEPTION;
49 prclst_not_exist EXCEPTION;
50 party_id_failed EXCEPTION;
51 qualifier_prclst_not_exist EXCEPTION;
52
53
54 -- PRL, for Process_Price_List
55 gpr_price_list_rec QP_PRICE_LIST_PUB.Price_List_Rec_Type;
56 gpr_price_list_val_rec QP_PRICE_LIST_PUB.Price_List_Val_Rec_Type;
57 gpr_price_list_line_tbl QP_PRICE_LIST_PUB.Price_List_Line_Tbl_Type;
58 gpr_price_list_line_val_tbl QP_PRICE_LIST_PUB.Price_List_Line_Val_Tbl_Type;
59
60 gpr_qualifiers_tbl QP_Qualifier_Rules_Pub.Qualifiers_Tbl_Type;
61 gpr_qualifiers_val_tbl QP_Qualifier_Rules_Pub.Qualifiers_Val_Tbl_Type;
62 gpr_pricing_attr_tbl QP_PRICE_LIST_PUB.Pricing_Attr_Tbl_Type;
63 gpr_pricing_attr_val_tbl QP_PRICE_LIST_PUB.Pricing_Attr_Val_Tbl_Type;
64
65 ppr_price_list_rec QP_PRICE_LIST_PUB.Price_List_Rec_Type;
66 ppr_price_list_val_rec QP_PRICE_LIST_PUB.Price_List_Val_Rec_Type;
67 ppr_price_list_line_tbl QP_PRICE_LIST_PUB.Price_List_Line_Tbl_Type;
68 ppr_price_list_line_val_tbl QP_PRICE_LIST_PUB.Price_List_Line_Val_Tbl_Type;
69
70 ppr_qualifiers_tbl QP_Qualifier_Rules_Pub.Qualifiers_Tbl_Type;
71 ppr_qualifiers_val_tbl QP_Qualifier_Rules_Pub.Qualifiers_Val_Tbl_Type;
72 ppr_pricing_attr_tbl QP_PRICE_LIST_PUB.Pricing_Attr_Tbl_Type;
73 ppr_pricing_attr_val_tbl QP_PRICE_LIST_PUB.Pricing_Attr_Val_Tbl_Type;
74
75 -- SLT, for Process_Modifiers
76
77 gpr_modifier_list_rec QP_Modifiers_PUB.Modifier_List_Rec_Type;
78 gpr_modifier_list_val_rec QP_Modifiers_PUB.Modifier_List_Val_Rec_Type;
79 gpr_modifiers_tbl QP_Modifiers_PUB.Modifiers_Tbl_Type;
80 gpr_modifiers_val_tbl QP_Modifiers_PUB.Modifiers_Val_Tbl_Type;
81
82 --gpr_qualifiers_tbl QP_Qualifier_Rules_PUB.Qualifiers_Tbl_Type;
83 --gpr_qualifiers_val_tbl QP_Qualifier_Rules_PUB.Qualifiers_Val_Tbl_Type;
84 gpr_pricing_mod_attr_tbl QP_Modifiers_PUB.Pricing_Attr_Tbl_Type;
85 gpr_pricing_mod_attr_val_tbl QP_Modifiers_PUB.Pricing_Attr_Val_Tbl_Type;
86
87 ppr_modifier_list_rec QP_Modifiers_PUB.Modifier_List_Rec_Type;
88 ppr_modifier_list_val_rec QP_Modifiers_PUB.Modifier_List_Val_Rec_Type;
89 ppr_modifiers_tbl QP_Modifiers_PUB.Modifiers_Tbl_Type;
90 ppr_modifiers_val_tbl QP_Modifiers_PUB.Modifiers_Val_Tbl_Type;
91
92 --ppr_qualifiers_tbl QP_Qualifier_Rules_PUB.Qualifiers_Tbl_Type;
93 --ppr_qualifiers_val_tbl QP_Qualifier_Rules_PUB.Qualifiers_Val_Tbl_Type;
94 ppr_pricing_mod_attr_tbl QP_Modifiers_PUB.Pricing_Attr_Tbl_Type;
95 ppr_pricing_mod_attr_val_tbl QP_Modifiers_PUB.Pricing_Attr_Val_Tbl_Type;
96
97
98 -- Getting the data from the interface tables
99
100 CURSOR l_qualifiers IS
101 SELECT
102 qual.interface_action_code,
103 qual.excluder_flag,
104 qual.comparison_operator_code,
105 qual.qualifier_context,
106 qual.qualifier_attribute,
107 qual.qualifier_attr_value,
108 qual.qualifier_grouping_no
109 FROM
110 qp_interface_qualifiers qual
111 WHERE
112 qual.process_id = p_process_id;
113
114 CURSOR l_lines IS
115 SELECT
116 line.interface_action_code,
117 line.list_header_id,
118 line.list_line_id,
119 line.list_line_type_code,
120 line.automatic_flag,
121 line.override_flag,
122 line.modifier_level_code,
123 line.operand,
124 line.arithmetic_operator,
125 line.product_precedence,
126 line.comments,
127 line.price_break_type_code,
128 line.list_line_no,
129 line.price_break_header_index
130 FROM
131 qp_interface_list_lines line
132 WHERE
133 line.process_id = p_process_id
134 ORDER BY
135 line.list_line_no;
136
137 -- SLT
138 CURSOR l_mod_lines IS
139 SELECT
140 line.interface_action_code,
141 line.list_header_id,
142 line.list_line_id,
143 line.list_line_type_code,
144 line.automatic_flag,
145 line.override_flag,
146 line.modifier_level_code,
147 line.operand,
148 line.arithmetic_operator,
149 line.product_precedence,
150 line.pricing_group_sequence,
151 line.pricing_phase_id,
152 line.comments,
153 line.price_break_type_code,
154 line.list_line_no,
155 line.charge_type_code,
156 line.charge_subtype_code,
157 line.price_break_header_index
158 FROM
159 qp_interface_list_lines line
160 WHERE
161 line.process_id = p_process_id
162 ORDER BY
163 line.list_line_no;
164
165 -- PRL
166 CURSOR l_pricing_attribs IS
167 SELECT
168 pa.interface_action_code,
169 pa.list_line_id,
170 pa.excluder_flag,
171 pa.product_attribute_context,
172 pa.product_attribute,
173 pa.product_attr_value,
174 pa.product_uom_code,
175 pa.product_attribute_datatype,
176 pa.pricing_attribute_datatype,
177 pa.pricing_attribute_context,
178 pa.pricing_attribute,
179 pa.pricing_attr_value_from,
180 pa.pricing_attr_value_to,
181 pa.attribute_grouping_no,
182 pa.comparison_operator_code,
183 -- pa.price_list_line_index,
184 pa.list_line_no
185 FROM
186 qp_interface_pricing_attribs pa
187 WHERE
188 pa.process_id = p_process_id;
189
190 --SLT
191 CURSOR l_pricing_mod_attribs IS
192 SELECT
193 pa.interface_action_code,
194 pa.list_line_id,
195 pa.excluder_flag,
196 pa.product_attribute_context,
197 pa.product_attribute,
198 pa.product_attr_value,
199 pa.product_uom_code,
200 pa.product_attribute_datatype,
201 pa.pricing_attribute_datatype,
202 pa.pricing_attribute_context,
203 pa.pricing_attribute,
204 pa.pricing_attr_value_from,
205 pa.pricing_attr_value_to,
206 pa.attribute_grouping_no,
207 pa.comparison_operator_code,
208 -- pa.price_list_line_index,
209 pa.list_line_no
210 FROM
211 qp_interface_pricing_attribs pa
212 WHERE
213 pa.process_id = p_process_id;
214
215
216 BEGIN
217
218 --commit the interface table data
219 commit;
220
221 -- Transferring data into pl/sql tables used as input to the PriceList BOI
222 x_status := 1;
223
224 Get_Party_Id (p_process_id, l_party_id, l_err_buffer);
225 IF (l_party_id = -1) THEN
226 raise party_id_failed;
227 END IF;
228
229 -- obtain values for validations
230 SELECT process_type, list_type_code, interface_action_code, name, source_system_code
231 INTO l_process_type, l_list_type_code, l_interface_action_code, l_name, l_request_type_code
232 FROM qp_interface_list_headers
233 WHERE process_id = p_process_id;
234
235 QP_INT_LOADER_PUB.G_PROCESS_LST_REQ_TYPE := nvl(l_request_type_code, 'FTE'); --shulin, used in BOI
236
237 IF (l_interface_action_code IS NULL) THEN
238 RAISE null_interface_action_code;
239
240 ELSIF (l_interface_action_code <> 'C') AND (l_interface_action_code <> 'D') THEN
241 RAISE invalid_interface_action_code;
242
243 ELSIF (l_list_type_code IS NULL) THEN
244 RAISE null_list_type_code;
245
246 ELSIF (l_list_type_code <> 'PRL') AND (l_list_type_code <> 'SLT') THEN
247 RAISE invalid_list_type_code;
248
249 END IF;
250
251 IF (l_interface_action_code = 'D') THEN
252
253 -- see if data exists
254 SELECT count(1) INTO l_count FROM qp_list_headers_tl qp_lhdr_tl where qp_lhdr_tl.name = l_name;
255 IF l_count > 0 THEN
256
257 -- obtain list_header_id
258 SELECT qp_lhdr_tl.list_header_id INTO l_list_header_id FROM qp_list_headers_tl qp_lhdr_tl WHERE qp_lhdr_tl.name = l_name AND qp_lhdr_tl.language='US' ;
259
260 delete from qp_pricing_attributes qp_prc_att where qp_prc_att.list_header_id = l_list_header_id;
261 delete from qp_list_lines qp_ll where qp_ll.list_header_id = l_list_header_id;
262 delete from qp_qualifiers qp_qual where qp_qual.list_header_id = l_list_header_id;
263 delete from qp_list_headers_b qp_lhdr_b where qp_lhdr_b.list_header_id = l_list_header_id;
264 delete from qp_list_headers_tl qp_lhdr_tl where qp_lhdr_tl.list_header_id = l_list_header_id;
265
266 /*
267 update fte_lanes set fte_lanes.pricelist_view_flag = NULL WHERE fte_lanes.pricelist_id = l_list_header_id;
268 update fte_lanes set fte_lanes.pricelist_name = NULL WHERE fte_lanes.pricelist_id = l_list_header_id;
269 update fte_lanes set fte_lanes.pricelist_id = NULL WHERE fte_lanes.pricelist_id = l_list_header_id;
270 */
271 commit;
272
273 --extra for modifier
274 IF (l_list_type_code = 'SLT') THEN
275 select qp_ll.list_line_id INTO l_list_line_id from qp_list_lines qp_ll where qp_ll.list_header_id = l_list_header_id;
276 delete from qp_rltd_modifiers where qp_rltd_modifiers.from_rltd_modifier_id = l_list_line_id;
277 commit;
278 END IF;
279
280 /*
281 Insert_Job_Status (p_process_id, -1, -1, -1, 1, -1, x_status, l_process_type, l_name, SYSDATE, SYSDATE);
282 */
283 ELSE
284 raise prclst_not_exist;
285 END IF;
286 END IF;
287
288 IF (l_interface_action_code = 'C') THEN
289
290 IF (l_process_type = 'XML') AND (l_list_type_code = 'PRL') THEN
291
292 SELECT
293 lhdr.list_header_id,
294 lhdr.name,
295 lhdr.description,
296 lhdr.interface_action_code,
297 lhdr.list_type_code,
298 lhdr.currency_code,
299 TO_DATE(lhdr.start_date_active,'YYYYMMDD HH24MISS'),
300 TO_DATE(lhdr.end_date_active,'YYYYMMDD HH24MISS'),
301 lhdr.automatic_flag
302 INTO
303 gpr_price_list_rec.list_header_id,
304 gpr_price_list_rec.name,
305 gpr_price_list_rec.description,
306 l_operation,
307 gpr_price_list_rec.list_type_code,
308 gpr_price_list_rec.currency_code,
309 gpr_price_list_rec.start_date_active,
310 gpr_price_list_rec.end_date_active,
311 gpr_price_list_rec.automatic_flag
312 FROM
313 qp_interface_list_headers lhdr
314 WHERE
315 lhdr.process_id = p_process_id
316 AND
317 rownum < 2;
318
319
320 ELSIF (l_process_type = 'XML') AND (l_list_type_code = 'SLT') THEN
321
322 SELECT
323 lhdr.list_header_id,
324 lhdr.name,
325 lhdr.description,
326 lhdr.interface_action_code,
327 lhdr.list_type_code,
328 lhdr.currency_code,
329 TO_DATE(lhdr.start_date_active,'YYYYMMDD HH24MISS'),
330 TO_DATE(lhdr.end_date_active,'YYYYMMDD HH24MISS'),
331 lhdr.automatic_flag
332 INTO
333 gpr_modifier_list_rec.list_header_id,
334 gpr_modifier_list_rec.name,
335 gpr_modifier_list_rec.description,
336 l_operation,
337 gpr_modifier_list_rec.list_type_code,
338 gpr_modifier_list_rec.currency_code,
339 gpr_modifier_list_rec.start_date_active,
340 gpr_modifier_list_rec.end_date_active,
341 gpr_modifier_list_rec.automatic_flag
342 FROM
343 qp_interface_list_headers lhdr
344 WHERE
345 lhdr.process_id = p_process_id
346 AND
347 rownum < 2;
348
349 ELSIF (l_process_type = 'SSH') AND (l_list_type_code = 'PRL') THEN
350
351 SELECT
352 lhdr.list_header_id,
353 lhdr.name,
354 lhdr.description,
355 lhdr.interface_action_code,
356 lhdr.list_type_code,
357 lhdr.currency_code,
358 lhdr.start_date_active,
359 lhdr.end_date_active,
360 lhdr.automatic_flag
361 INTO
362 gpr_price_list_rec.list_header_id,
363 gpr_price_list_rec.name,
364 gpr_price_list_rec.description,
365 l_operation,
366 gpr_price_list_rec.list_type_code,
367 gpr_price_list_rec.currency_code,
368 gpr_price_list_rec.start_date_active,
369 gpr_price_list_rec.end_date_active,
370 gpr_price_list_rec.automatic_flag
371 FROM
372 qp_interface_list_headers lhdr
373 WHERE
374 lhdr.process_id = p_process_id
375 AND
376 rownum < 2;
377
378
379 ELSIF (l_process_type = 'SSH') AND (l_list_type_code = 'SLT') THEN
380
381 SELECT
382 lhdr.list_header_id,
383 lhdr.name,
384 lhdr.description,
385 lhdr.interface_action_code,
386 lhdr.list_type_code,
387 lhdr.currency_code,
388 lhdr.start_date_active,
389 lhdr.end_date_active,
390 lhdr.automatic_flag
391
392 INTO
393 gpr_modifier_list_rec.list_header_id,
394 gpr_modifier_list_rec.name,
395 gpr_modifier_list_rec.description,
396 l_operation,
397 gpr_modifier_list_rec.list_type_code,
398 gpr_modifier_list_rec.currency_code,
399 gpr_modifier_list_rec.start_date_active,
400 gpr_modifier_list_rec.end_date_active,
401 gpr_modifier_list_rec.automatic_flag
402 FROM
403 qp_interface_list_headers lhdr
404 WHERE
405 lhdr.process_id = p_process_id
406 AND
407 rownum < 2;
408
409 -- ELSE
410 -- dbms_output.put_line('Wrong process_type and list_type_code');
411
412 END IF;
413
414 IF (l_operation = 'C') AND (l_list_type_code = 'PRL') THEN
415 gpr_price_list_rec.list_header_id := FND_API.G_MISS_NUM;
416 gpr_price_list_rec.operation := QP_GLOBALS.G_OPR_CREATE;
417
418 IF (gpr_price_list_rec.automatic_flag IS NULL) THEN
419 gpr_price_list_rec.automatic_flag:= 'Y';
420 END IF;
421
422 ELSIF (l_operation = 'C') AND (l_list_type_code = 'SLT') THEN
423 gpr_modifier_list_rec.list_header_id := FND_API.G_MISS_NUM;
424 gpr_modifier_list_rec.operation := QP_GLOBALS.G_OPR_CREATE;
425
426 IF (gpr_modifier_list_rec.automatic_flag IS NULL) THEN
427 gpr_modifier_list_rec.automatic_flag:= 'Y';
428 END IF;
429
430 -- dbms_output.put_line('Header_id: ' || gpr_modifier_list_rec.list_header_id);
431 -- dbms_output.put_line('Name: ' || gpr_modifier_list_rec.name);
432 -- dbms_output.put_line('Description: ' || gpr_modifier_list_rec.description);
433 -- dbms_output.put_line('Operation: ' || gpr_modifier_list_rec.operation);
434 -- dbms_output.put_line('List_Type_Code: ' || gpr_modifier_list_rec.list_type_code);
435 -- dbms_output.put_line('Currency_Code: ' || gpr_modifier_list_rec.currency_code);
436 -- dbms_output.put_line('Start_Date_Active: ' || gpr_modifier_list_rec.start_date_active);
437 -- dbms_output.put_line('End_Date_Active: ' || gpr_modifier_list_rec.end_date_active);
438 -- dbms_output.put_line('Automatic_Flag: ' || gpr_modifier_list_rec.automatic_flag);
439
440 END IF;
441
442
443 i := 1;
444 OPEN l_qualifiers;
445 LOOP
446 FETCH l_qualifiers INTO
447 l_operation,
448 gpr_qualifiers_tbl(i).excluder_flag,
449 gpr_qualifiers_tbl(i).comparison_operator_code,
450 gpr_qualifiers_tbl(i).qualifier_context,
451 gpr_qualifiers_val_tbl(i).qualifier_attribute_desc,
452 gpr_qualifiers_val_tbl(i).qualifier_attr_value_desc,
453 gpr_qualifiers_tbl(i).qualifier_grouping_no;
454 EXIT WHEN l_qualifiers%NOTFOUND;
455
456 gpr_qualifiers_tbl(i).qualifier_attribute := FND_API.G_MISS_CHAR;
457 gpr_qualifiers_tbl(i).qualifier_attr_value := FND_API.G_MISS_CHAR;
458
459 IF (l_operation = 'C') THEN
460
461 gpr_qualifiers_tbl(i).list_header_id := FND_API.G_MISS_NUM;
462 gpr_qualifiers_tbl(i).operation := QP_GLOBALS.G_OPR_CREATE;
463
464 IF (gpr_qualifiers_tbl(i).excluder_flag IS NULL) THEN
465 IF (l_list_type_code = 'PRL') THEN
466 gpr_qualifiers_tbl(i).excluder_flag:= FND_API.G_MISS_CHAR;
467 ELSIF (l_list_type_code = 'SLT') THEN
468 gpr_qualifiers_tbl(i).excluder_flag:= 'N';
469 END IF;
470 END IF;
471
472 IF (gpr_qualifiers_tbl(i).qualifier_grouping_no IS NULL) THEN
473 gpr_qualifiers_tbl(i).qualifier_grouping_no:= FND_API.G_MISS_NUM;
474 END IF;
475
476 /*
477 -- region to id conversion
478 IF (UPPER (gpr_qualifiers_val_tbl(i).qualifier_attribute_desc) = 'ORIGIN') THEN
479 GetRegionId (gpr_qualifiers_val_tbl(i).qualifier_attr_value_desc, l_region_id, l_err_buffer);
480 IF (l_region_id = -1) THEN
481 l_err_buffer := 'Origin region id conversion failed. ' || l_err_buffer;
482 raise origin_rid_failed;
483 ELSE
484 gpr_qualifiers_val_tbl(i).qualifier_attr_value_desc := l_region_id;
485 END IF;
486
487 ELSIF (UPPER (gpr_qualifiers_val_tbl(i).qualifier_attribute_desc) = 'DESTINATION') THEN
488 GetRegionId (gpr_qualifiers_val_tbl(i).qualifier_attr_value_desc, l_region_id, l_err_buffer);
489 IF (l_region_id = -1) THEN
490 l_err_buffer := 'Destination region id conversion failed. ' || l_err_buffer;
491 raise destination_rid_failed;
492 ELSE
493 gpr_qualifiers_val_tbl(i).qualifier_attr_value_desc := l_region_id;
494 END IF;
495 END IF;
496 */
497
498 --check if specified price list to be a qualifier exists
499 IF (UPPER (gpr_qualifiers_tbl(i).qualifier_context) = 'MODLIST' AND UPPER (gpr_qualifiers_val_tbl(i).qualifier_attribute_desc) = 'PRICE_LIST' ) THEN
500 Is_Qualifier_Prclst_Exist (gpr_qualifiers_val_tbl(i).qualifier_attr_value_desc, l_is_prclst_exists, l_err_buffer);
501 IF l_is_prclst_exists = FALSE THEN
502 raise qualifier_prclst_not_exist;
503 END IF;
504 END IF;
505 END IF;
506
507
508 -- dbms_output.put_line('*** Qualifier ***');
509 -- dbms_output.put_line('excluder_flag: ' || gpr_qualifiers_tbl(i).excluder_flag);
510 -- dbms_output.put_line('comparison_operator_code: ' || gpr_qualifiers_tbl(i).comparison_operator_code);
511 -- dbms_output.put_line('qualifier_context: ' || gpr_qualifiers_tbl(i).qualifier_context);
512 -- dbms_output.put_line('qualifier_attribute_desc: ' || gpr_qualifiers_val_tbl(i).qualifier_attribute_desc);
513 -- dbms_output.put_line('qualifier_attr_value_desc: ' || gpr_qualifiers_val_tbl(i).qualifier_attr_value_desc);
514 -- dbms_output.put_line('qualifier_grouping_no: ' || gpr_qualifiers_tbl(i).qualifier_grouping_no);
515
516 i := i + 1;
517
518 END LOOP;
519 CLOSE l_qualifiers;
520
521 IF (l_list_type_code = 'PRL') THEN
522
523 i := 1;
524 OPEN l_lines;
525 LOOP
526 FETCH l_lines INTO
527 l_operation,
528 gpr_price_list_line_tbl(i).list_header_id,
529 gpr_price_list_line_tbl(i).list_line_id,
530 gpr_price_list_line_tbl(i).list_line_type_code,
531 gpr_price_list_line_tbl(i).automatic_flag,
532 gpr_price_list_line_tbl(i).override_flag,
533 gpr_price_list_line_tbl(i).modifier_level_code,
534 gpr_price_list_line_tbl(i).operand,
535 gpr_price_list_line_tbl(i).arithmetic_operator,
536 gpr_price_list_line_tbl(i).product_precedence,
537 gpr_price_list_line_tbl(i).comments,
538 gpr_price_list_line_tbl(i).price_break_type_code,
539 gpr_price_list_line_tbl(i).list_line_no,
540 gpr_price_list_line_tbl(i).price_break_header_index;
541 EXIT WHEN l_lines%NOTFOUND;
542
543 IF (l_operation = 'C') THEN
544 gpr_price_list_line_tbl(i).list_header_id := FND_API.G_MISS_NUM;
545 gpr_price_list_line_tbl(i).list_line_id := FND_API.G_MISS_NUM;
546 gpr_price_list_line_tbl(i).rltd_modifier_id := FND_API.G_MISS_NUM;
547 gpr_price_list_line_tbl(i).from_rltd_modifier_id := FND_API.G_MISS_NUM;
548 gpr_price_list_line_tbl(i).to_rltd_modifier_id := FND_API.G_MISS_NUM;
549 gpr_price_list_line_tbl(i).rltd_modifier_group_no := FND_API.G_MISS_NUM;
550 gpr_price_list_line_tbl(i).operation := QP_GLOBALS.G_OPR_CREATE;
551
552 IF (gpr_price_list_line_tbl(i).automatic_flag IS NULL) THEN
553 gpr_price_list_line_tbl(i).automatic_flag := FND_API.G_MISS_CHAR;
554 END IF;
555
556 IF (gpr_price_list_line_tbl(i).modifier_level_code IS NULL) THEN
557 gpr_price_list_line_tbl(i).modifier_level_code := FND_API.G_MISS_CHAR;
558 END IF;
559 END IF;
560
561 -- dbms_output.put_line('*** List Line ***');
562 -- dbms_output.put_line('operation: ' || gpr_price_list_line_tbl(i).operation);
563 -- dbms_output.put_line('Header_id: ' || gpr_price_list_line_tbl(i).list_header_id);
564 -- dbms_output.put_line('List_line_id: ' || gpr_price_list_line_tbl(i).list_line_id);
565 -- dbms_output.put_line('list_line_type_code: ' || gpr_price_list_line_tbl(i).list_line_type_code);
566 -- dbms_output.put_line('automatic_flag: ' || gpr_price_list_line_tbl(i).automatic_flag);
567 -- dbms_output.put_line('override_flag: ' || gpr_price_list_line_tbl(i).override_flag);
568 -- dbms_output.put_line('modifier_level_code: ' || gpr_price_list_line_tbl(i).modifier_level_code);
569 -- dbms_output.put_line('operand: ' || gpr_price_list_line_tbl(i).operand);
570 -- dbms_output.put_line('arithmetic_operator: ' || gpr_price_list_line_tbl(i).arithmetic_operator);
571 -- dbms_output.put_line('product_precedence: ' || gpr_price_list_line_tbl(i).product_precedence);
572 -- dbms_output.put_line('comments: ' || gpr_price_list_line_tbl(i).comments);
573 -- dbms_output.put_line('price_break_type_code: ' || gpr_price_list_line_tbl(i).price_break_type_code);
574 -- dbms_output.put_line('list_line_no: ' || gpr_price_list_line_tbl(i).list_line_no);
575 -- dbms_output.put_line('price_break_header_index: ' || gpr_price_list_line_tbl(i).price_break_header_index);
576
577 i := i + 1;
578 END LOOP;
579 CLOSE l_lines;
580
581 ELSIF (l_list_type_code = 'SLT') THEN
582
583 i := 1;
584 OPEN l_mod_lines;
585 LOOP
586 FETCH l_mod_lines INTO
587 l_operation,
588 gpr_modifiers_tbl(i).list_header_id,
589 gpr_modifiers_tbl(i).list_line_id,
590 gpr_modifiers_tbl(i).list_line_type_code,
591 gpr_modifiers_tbl(i).automatic_flag,
592 gpr_modifiers_tbl(i).override_flag,
593 gpr_modifiers_tbl(i).modifier_level_code,
594 gpr_modifiers_tbl(i).operand,
595 gpr_modifiers_tbl(i).arithmetic_operator,
596 gpr_modifiers_tbl(i).product_precedence,
597 gpr_modifiers_tbl(i).pricing_group_sequence,
598 gpr_modifiers_tbl(i).pricing_phase_id,
599 gpr_modifiers_tbl(i).comments,
600 gpr_modifiers_tbl(i).price_break_type_code,
601 gpr_modifiers_tbl(i).list_line_no,
602 gpr_modifiers_tbl(i).charge_type_code,
603 gpr_modifiers_tbl(i).charge_subtype_code,
604 gpr_modifiers_tbl(i).modifier_parent_index;
605 EXIT WHEN l_mod_lines%NOTFOUND;
606
607 IF (l_operation = 'C') THEN
608 gpr_modifiers_tbl(i).list_header_id := FND_API.G_MISS_NUM;
609 gpr_modifiers_tbl(i).list_line_id := FND_API.G_MISS_NUM;
610 gpr_modifiers_tbl(i).rltd_modifier_id := FND_API.G_MISS_NUM;
611 gpr_modifiers_tbl(i).from_rltd_modifier_id := FND_API.G_MISS_NUM;
612 gpr_modifiers_tbl(i).to_rltd_modifier_id := FND_API.G_MISS_NUM;
613 gpr_modifiers_tbl(i).rltd_modifier_grp_no := FND_API.G_MISS_NUM;
614 gpr_modifiers_tbl(i).operation := QP_GLOBALS.G_OPR_CREATE;
615
616 IF (gpr_modifiers_tbl(i).automatic_flag IS NULL) THEN
617 gpr_modifiers_tbl(i).automatic_flag := 'Y';
618 END IF;
619
620 IF (gpr_modifiers_tbl(i).override_flag IS NULL) THEN
621 gpr_modifiers_tbl(i).override_flag := 'N';
622 END IF;
623
624 -- BUG FIX, phase_id should be 2 (line level adjustment)
625 -- other values are in qp_pricing_phases table
626 IF (gpr_modifiers_tbl(i).pricing_phase_id IS NULL) THEN
627 gpr_modifiers_tbl(i).pricing_phase_id := 2;
628 END IF;
629
630 IF (gpr_modifiers_tbl(i).modifier_level_code IS NULL) THEN
631 gpr_modifiers_tbl(i).modifier_level_code := FND_API.G_MISS_CHAR;
632 END IF;
633
634 IF (gpr_modifiers_tbl(i).pricing_group_sequence IS NULL) THEN
635 gpr_modifiers_tbl(i).pricing_group_sequence := FND_API.G_MISS_NUM;
636 END IF;
637
638 -- add this 4/20/2001
639 IF (gpr_modifiers_tbl(i).product_precedence IS NULL) THEN
640 gpr_modifiers_tbl(i).product_precedence := 220;
641 END IF;
642 END IF;
643
644
645 -- dbms_output.put_line('*** List Line ***');
646 -- dbms_output.put_line('operation: ' || gpr_modifiers_tbl(i).operation);
647 -- dbms_output.put_line('Header_id: ' || gpr_modifiers_tbl(i).list_header_id);
648 -- dbms_output.put_line('List_line_id: ' || gpr_modifiers_tbl(i).list_line_id);
649 -- dbms_output.put_line('list_line_type_code: ' || gpr_modifiers_tbl(i).list_line_type_code);
650 -- dbms_output.put_line('automatic_flag: ' || gpr_modifiers_tbl(i).automatic_flag);
651 -- dbms_output.put_line('override_flag: ' || gpr_modifiers_tbl(i).override_flag);
652 -- dbms_output.put_line('modifier_level_code: ' || gpr_modifiers_tbl(i).modifier_level_code);
653 -- dbms_output.put_line('operand: ' || gpr_modifiers_tbl(i).operand);
654 -- dbms_output.put_line('arithmetic_operator: ' || gpr_modifiers_tbl(i).arithmetic_operator);
655 -- dbms_output.put_line('product_precedence: ' || gpr_modifiers_tbl(i).product_precedence);
656 -- dbms_output.put_line('pricing_group_sequence: ' || gpr_modifiers_tbl(i).pricing_group_sequence);
657 -- dbms_output.put_line('pricing_phase_id: ' || gpr_modifiers_tbl(i).pricing_phase_id);
658 -- dbms_output.put_line('comments: ' || gpr_modifiers_tbl(i).comments);
659 -- dbms_output.put_line('price_break_type_code: ' || gpr_modifiers_tbl(i).price_break_type_code);
660 -- dbms_output.put_line('list_line_no: ' || gpr_modifiers_tbl(i).list_line_no);
661 -- dbms_output.put_line('modifier_parent_index: ' || gpr_modifiers_tbl(i).modifier_parent_index);
662 -- dbms_output.put_line('charge_type_code: ' || gpr_modifiers_tbl(i).charge_type_code);
663 -- dbms_output.put_line('charge_subtype_code: ' || gpr_modifiers_tbl(i).charge_subtype_code);
664 i := i + 1;
665
666 END LOOP;
667 CLOSE l_mod_lines;
668
669 END IF;
670
671
672 IF (l_list_type_code = 'PRL') THEN
673
674 i := 1;
675 OPEN l_pricing_attribs;
676 LOOP
677 FETCH l_pricing_attribs INTO
678 l_operation,
679 gpr_pricing_attr_tbl(i).list_line_id,
680 gpr_pricing_attr_tbl(i).excluder_flag,
681 gpr_pricing_attr_tbl(i).product_attribute_context,
682 gpr_pricing_attr_tbl(i).product_attribute,
683 gpr_pricing_attr_tbl(i).product_attr_value,
684 gpr_pricing_attr_tbl(i).product_uom_code,
685 gpr_pricing_attr_tbl(i).product_attribute_datatype,
686 gpr_pricing_attr_tbl(i).pricing_attribute_datatype,
687 gpr_pricing_attr_tbl(i).pricing_attribute_context,
688 gpr_pricing_attr_val_tbl(i).pricing_attribute_desc,
689 gpr_pricing_attr_val_tbl(i).pricing_attr_value_from_desc,
690 gpr_pricing_attr_val_tbl(i).pricing_attr_value_to_desc,
691 gpr_pricing_attr_tbl(i).attribute_grouping_no,
692 gpr_pricing_attr_tbl(i).comparison_operator_code,
693 gpr_pricing_attr_tbl(i).price_list_line_index;
694 EXIT WHEN l_pricing_attribs%NOTFOUND;
695
696 gpr_pricing_attr_tbl(i).pricing_attribute := FND_API.G_MISS_CHAR;
697 gpr_pricing_attr_tbl(i).pricing_attr_value_from := FND_API.G_MISS_CHAR;
698 gpr_pricing_attr_tbl(i).pricing_attr_value_to := FND_API.G_MISS_CHAR;
699
700 IF (l_operation = 'C') THEN
701 gpr_pricing_attr_tbl(i).list_line_id := FND_API.G_MISS_NUM;
702 gpr_pricing_attr_tbl(i).operation := QP_GLOBALS.G_OPR_CREATE;
703
704 IF (gpr_pricing_attr_tbl(i).excluder_flag IS NULL) THEN
705 gpr_pricing_attr_tbl(i).excluder_flag := FND_API.G_MISS_CHAR;
706 END IF;
707
708 IF (gpr_pricing_attr_tbl(i).attribute_grouping_no IS NULL) THEN
709 gpr_pricing_attr_tbl(i).attribute_grouping_no := FND_API.G_MISS_NUM;
710 END IF;
711
712
713 IF (gpr_pricing_attr_tbl(i).product_attribute_datatype IS NULL) THEN
714 --gpr_pricing_attr_tbl(i).product_attribute_datatype := FND_API.G_MISS_CHAR;
715 gpr_pricing_attr_tbl(i).product_attribute_datatype := 'C';
716 END IF;
717
718 IF (gpr_pricing_attr_tbl(i).pricing_attribute_datatype IS NULL) THEN
719 gpr_pricing_attr_tbl(i).pricing_attribute_datatype := FND_API.G_MISS_CHAR;
720 --gpr_pricing_attr_tbl(i).pricing_attribute_datatype := 'C';
721 END IF;
722
723 -- the first pricing attribute (i.e. ALL, Pricingattribute3), comparison_operator_code should be '='
724 -- since BOI default it to 'BETWEEN' when null, it causes problem.
725 -- gpr_pricing_attr_tbl(1).comparison_operator_code := '=';
726 IF (gpr_pricing_attr_val_tbl(i).pricing_attribute_desc IS NULL AND
727 gpr_pricing_attr_val_tbl(i).pricing_attr_value_from_desc IS NULL) THEN
728 gpr_pricing_attr_tbl(i).comparison_operator_code := '=';
729 END IF;
730 END IF;
731
732 -- dbms_output.put_line('***Pricing Attribute***');
733 -- dbms_output.put_line('operation: ' || gpr_pricing_attr_tbl(i).operation);
734 -- dbms_output.put_line('excluder_flag: ' || gpr_pricing_attr_tbl(i).excluder_flag);
735 -- dbms_output.put_line('product_attribute_context: ' || gpr_pricing_attr_tbl(i).product_attribute_context);
736 -- dbms_output.put_line('product_attribute: ' || gpr_pricing_attr_tbl(i).product_attribute);
737 -- dbms_output.put_line('product_attr_value: ' || gpr_pricing_attr_tbl(i).product_attr_value);
738 -- dbms_output.put_line('product_uom_code: ' || gpr_pricing_attr_tbl(i).product_uom_code);
739 -- dbms_output.put_line('product_attribute_datatype: ' || gpr_pricing_attr_tbl(i).product_attribute_datatype);
740 -- dbms_output.put_line('pricing_attribute_datatype: ' || gpr_pricing_attr_tbl(i).pricing_attribute_datatype);
741 -- dbms_output.put_line('pricing_attribute_context: ' || gpr_pricing_attr_tbl(i).pricing_attribute_context);
742 -- dbms_output.put_line('pricing_attribute: ' || gpr_pricing_attr_val_tbl(i).pricing_attribute_desc);
743 -- dbms_output.put_line('pricing_attr_value_from: ' || gpr_pricing_attr_val_tbl(i).pricing_attr_value_from_desc);
744 -- dbms_output.put_line('pricing_attr_value_to: ' || gpr_pricing_attr_val_tbl(i).pricing_attr_value_to_desc);
745 -- dbms_output.put_line('attribute_grouping_no: ' || gpr_pricing_attr_tbl(i).attribute_grouping_no);
746 -- dbms_output.put_line('comparison_operator_code: ' || gpr_pricing_attr_tbl(i).comparison_operator_code);
747 -- dbms_output.put_line('price_list_line_index: ' || gpr_pricing_attr_tbl(i).price_list_line_index);
748
749 i := i + 1;
750 END LOOP;
751
752 -- since only pricing_attr_value_from was inserted at the xml gateway level for price breaks,
753 -- therefore we need to calculate and insert the pricing_attr_value_to here when context is VOLUME
754 length := i-1;
755 -- dbms_output.put_line ('length: ' || length);
756
757 -- no need to calculate the last one since it does not have the next record to calculate
758 FOR i IN 1 .. length-1 LOOP
759 -- dbms_output.put_line('pricing_attr_value_from: ' || gpr_pricing_attr_val_tbl(i).pricing_attr_value_from_desc);
760 IF (gpr_pricing_attr_tbl(i).comparison_operator_code = 'BETWEEN' AND gpr_pricing_attr_tbl(i).pricing_attribute_context = 'VOLUME') THEN
761 -- take next record's from value minus one to be current record's to value
762 gpr_pricing_attr_val_tbl(i).pricing_attr_value_to_desc := TO_CHAR(TO_NUMBER(gpr_pricing_attr_val_tbl(i+1).pricing_attr_value_from_desc) - 1);
763 END IF;
764 -- dbms_output.put_line('pricing_attr_value_to: ' || gpr_pricing_attr_val_tbl(i).pricing_attr_value_to_desc);
765 END LOOP;
766 --default the last pricing_attr_value_to_desc to 999,999
767 gpr_pricing_attr_val_tbl(length).pricing_attr_value_to_desc := '999999';
768
769 CLOSE l_pricing_attribs;
770
771 ELSIF (l_list_type_code = 'SLT') THEN
772
773 i := 1;
774 OPEN l_pricing_mod_attribs;
775 LOOP
776 FETCH l_pricing_mod_attribs INTO
777 l_operation,
778 gpr_pricing_mod_attr_tbl(i).list_line_id,
779 gpr_pricing_mod_attr_tbl(i).excluder_flag,
780 gpr_pricing_mod_attr_tbl(i).product_attribute_context,
781 gpr_pricing_mod_attr_tbl(i).product_attribute,
782 gpr_pricing_mod_attr_tbl(i).product_attr_value,
783 gpr_pricing_mod_attr_tbl(i).product_uom_code,
784 gpr_pricing_mod_attr_tbl(i).product_attribute_datatype,
785 gpr_pricing_mod_attr_tbl(i).pricing_attribute_datatype,
786 gpr_pricing_mod_attr_tbl(i).pricing_attribute_context,
787 gpr_pricing_mod_attr_val_tbl(i).pricing_attribute_desc,
788 gpr_pricing_mod_attr_val_tbl(i).pricing_attr_value_from_desc,
789 gpr_pricing_mod_attr_val_tbl(i).pricing_attr_value_to_desc,
790 gpr_pricing_mod_attr_tbl(i).attribute_grouping_no,
791 gpr_pricing_mod_attr_tbl(i).comparison_operator_code,
792 gpr_pricing_mod_attr_tbl(i).modifiers_index;
793 EXIT WHEN l_pricing_mod_attribs%NOTFOUND;
794
795 gpr_pricing_mod_attr_tbl(i).pricing_attribute := FND_API.G_MISS_CHAR;
796 gpr_pricing_mod_attr_tbl(i).pricing_attr_value_from := FND_API.G_MISS_CHAR;
797 gpr_pricing_mod_attr_tbl(i).pricing_attr_value_to := FND_API.G_MISS_CHAR;
798
799 IF (l_operation = 'C') THEN
800
801 gpr_pricing_mod_attr_tbl(i).list_line_id := FND_API.G_MISS_NUM;
802 gpr_pricing_mod_attr_tbl(i).operation := QP_GLOBALS.G_OPR_CREATE;
803
804 IF (gpr_pricing_mod_attr_tbl(i).excluder_flag IS NULL) THEN
805 --gpr_pricing_mod_attr_tbl(i).excluder_flag := FND_API.G_MISS_CHAR;
806 gpr_pricing_mod_attr_tbl(i).excluder_flag := 'N';
807 END IF;
808
809 IF (gpr_pricing_mod_attr_tbl(i).attribute_grouping_no IS NULL) THEN
810 gpr_pricing_mod_attr_tbl(i).attribute_grouping_no := FND_API.G_MISS_NUM;
811 END IF;
812
813
814 IF (gpr_pricing_mod_attr_tbl(i).product_attribute_datatype IS NULL) THEN
815 --gpr_pricing_mod_attr_tbl(i).product_attribute_datatype := FND_API.G_MISS_CHAR;
816 gpr_pricing_mod_attr_tbl(i).product_attribute_datatype := 'C';
817 END IF;
818
819 IF (gpr_pricing_mod_attr_tbl(i).pricing_attribute_datatype IS NULL) THEN
820 --gpr_pricing_mod_attr_tbl(i).pricing_attribute_datatype := FND_API.G_MISS_CHAR;
821 gpr_pricing_mod_attr_tbl(i).pricing_attribute_datatype := 'C';
822 END IF;
823
824 -- the first pricing attribute for each modifier line, comparison_operator_code should be null
825 IF (gpr_pricing_mod_attr_val_tbl(i).pricing_attribute_desc IS NULL AND
826 gpr_pricing_mod_attr_val_tbl(i).pricing_attr_value_from_desc IS NULL) THEN
827 gpr_pricing_mod_attr_tbl(i).comparison_operator_code := NULL;
828 END IF;
829
830 END IF;
831
832 -- dbms_output.put_line('***Pricing Mod Attribute***');
833 -- dbms_output.put_line('operation: ' || gpr_pricing_mod_attr_tbl(i).operation);
834 -- dbms_output.put_line('excluder_flag: ' || gpr_pricing_mod_attr_tbl(i).excluder_flag);
835 -- dbms_output.put_line('product_attribute_context: ' || gpr_pricing_mod_attr_tbl(i).product_attribute_context);
836 -- dbms_output.put_line('product_attribute: ' || gpr_pricing_mod_attr_tbl(i).product_attribute);
837 -- dbms_output.put_line('product_attr_value: ' || gpr_pricing_mod_attr_tbl(i).product_attr_value);
838 -- dbms_output.put_line('product_uom_code: ' || gpr_pricing_mod_attr_tbl(i).product_uom_code);
839 -- dbms_output.put_line('product_attribute_datatype: ' || gpr_pricing_mod_attr_tbl(i).product_attribute_datatype);
840 -- dbms_output.put_line('pricing_attribute_datatype: ' || gpr_pricing_mod_attr_tbl(i).pricing_attribute_datatype);
841 -- dbms_output.put_line('pricing_attribute_context: ' || gpr_pricing_mod_attr_tbl(i).pricing_attribute_context);
842 -- dbms_output.put_line('pricing_attribute: ' || gpr_pricing_mod_attr_val_tbl(i).pricing_attribute_desc);
843 -- dbms_output.put_line('pricing_attr_value_from: ' || gpr_pricing_mod_attr_val_tbl(i).pricing_attr_value_from_desc);
844 -- dbms_output.put_line('pricing_attr_value_to: ' || gpr_pricing_mod_attr_val_tbl(i).pricing_attr_value_to_desc);
845 -- dbms_output.put_line('attribute_grouping_no: ' || gpr_pricing_mod_attr_tbl(i).attribute_grouping_no);
846 -- dbms_output.put_line('comparison_operator_code: ' || gpr_pricing_mod_attr_tbl(i).comparison_operator_code);
847 -- dbms_output.put_line('modifiers_index: ' || gpr_pricing_mod_attr_tbl(i).modifiers_index);
848
849 i := i + 1;
850 END LOOP;
851
852 -- since only pricing_attr_value_from was inserted at the xml gateway level,
853 -- therefore we need to calculate and insert the pricing_attr_value_to here
854 length := i-1;
855 -- dbms_output.put_line ('length: ' || length);
856
857 -- no need to calculate the last one since it does not have the next record to calculate
858 FOR i IN 1 .. length-1 LOOP
859 -- dbms_output.put_line('pricing_attr_value_from: ' || gpr_pricing_mod_attr_val_tbl(i).pricing_attr_value_from_desc);
860 IF (gpr_pricing_mod_attr_tbl(i).comparison_operator_code = 'BETWEEN') THEN
861 -- take next record's from value minus one to be current record's to value
862 gpr_pricing_mod_attr_val_tbl(i).pricing_attr_value_to_desc := TO_CHAR(TO_NUMBER(gpr_pricing_mod_attr_val_tbl(i+1).pricing_attr_value_from_desc) - 1);
863 END IF;
864 -- dbms_output.put_line('pricing_attr_value_to: ' || gpr_pricing_mod_attr_val_tbl(i).pricing_attr_value_to_desc);
865 END LOOP;
866
867 -- default the last pricing_attr_value_to to a large number
868 gpr_pricing_mod_attr_val_tbl(length).pricing_attr_value_to_desc := '999999';
869
870 CLOSE l_pricing_mod_attribs;
871
872 END IF;
873
874 --commit data to interface table
875 commit;
876
877 IF (l_list_type_code = 'PRL') THEN
878
879 -- process price list
880
881 QP_PRICE_LIST_PUB.Process_Price_List
882 ( p_api_version_number => 1
883 , p_init_msg_list => FND_API.G_FALSE
884 , p_return_values => FND_API.G_FALSE
885 , p_commit => FND_API.G_FALSE
886 , x_return_status => gpr_return_status
887 , x_msg_count => gpr_msg_count
888 , x_msg_data => gpr_msg_data
889 , p_PRICE_LIST_rec => gpr_price_list_rec
890 , p_PRICE_LIST_LINE_tbl => gpr_price_list_line_tbl
891 , p_QUALIFIERS_tbl => gpr_qualifiers_tbl
892 , p_QUALIFIERS_val_tbl => gpr_qualifiers_val_tbl
893 , p_PRICING_ATTR_tbl => gpr_pricing_attr_tbl
894 , p_PRICING_ATTR_val_tbl => gpr_pricing_attr_val_tbl
895 , x_PRICE_LIST_rec => ppr_price_list_rec
896 , x_PRICE_LIST_val_rec => ppr_price_list_val_rec
897 , x_PRICE_LIST_LINE_tbl => ppr_price_list_line_tbl
898 , x_PRICE_LIST_LINE_val_tbl => ppr_price_list_line_val_tbl
899 , x_QUALIFIERS_tbl => ppr_qualifiers_tbl
900 , x_QUALIFIERS_val_tbl => ppr_qualifiers_val_tbl
901 , x_PRICING_ATTR_tbl => ppr_pricing_attr_tbl
902 , x_PRICING_ATTR_val_tbl => ppr_pricing_attr_val_tbl
903 );
904
905 ELSIF (l_list_type_code = 'SLT') THEN
906
907 -- process modifier list
908
909 QP_MODIFIERS_PUB.Process_Modifiers
910 ( p_api_version_number => 1
911 , p_init_msg_list => FND_API.G_FALSE
912 , p_return_values => FND_API.G_FALSE
913 , p_commit => FND_API.G_FALSE
914 , x_return_status => gpr_return_status
915 , x_msg_count => gpr_msg_count
916 , x_msg_data => gpr_msg_data
917 , p_MODIFIER_LIST_rec => gpr_modifier_list_rec
918 , p_MODIFIER_LIST_val_rec => gpr_modifier_list_val_rec
919 , p_MODIFIERS_tbl => gpr_modifiers_tbl
920 , p_MODIFIERS_val_tbl => gpr_modifiers_val_tbl
921 , p_QUALIFIERS_tbl => gpr_qualifiers_tbl
922 , p_QUALIFIERS_val_tbl => gpr_qualifiers_val_tbl
923 , p_PRICING_ATTR_tbl => gpr_pricing_mod_attr_tbl
924 , p_PRICING_ATTR_val_tbl => gpr_pricing_mod_attr_val_tbl
925 , x_MODIFIER_LIST_rec => ppr_modifier_list_rec
926 , x_MODIFIER_LIST_val_rec => ppr_modifier_list_val_rec
927 , x_MODIFIERS_tbl => ppr_modifiers_tbl
928 , x_MODIFIERS_val_tbl => ppr_modifiers_val_tbl
929 , x_QUALIFIERS_tbl => ppr_qualifiers_tbl
930 , x_QUALIFIERS_val_tbl => ppr_qualifiers_val_tbl
931 , x_PRICING_ATTR_tbl => ppr_pricing_mod_attr_tbl
932 , x_PRICING_ATTR_val_tbl => ppr_pricing_mod_attr_val_tbl
933 );
934
935 END IF;
936
937 -- get err msg from BOI
938 for k in 1 .. gpr_msg_count loop
939 gpr_msg_data := oe_msg_pub.get( p_msg_index => k,
940 p_encoded => 'F'
941 );
942
943 -- max length for err_msg is 240 char in fte_job_errors table
944 x_errors := x_errors || substr(gpr_msg_data,1,239) || ' , ';
945 -- dbms_output.put_line('Error msg: '|| x_errors);
946 end loop;
947
948 IF gpr_return_status = FND_API.G_RET_STS_SUCCESS THEN
949 x_status := 'COMPLETED';
950 l_job_status := 0;
951 l_job_completion_date := SYSDATE;
952
953 /*
954 -- job status 0 is success
955 --(JOB_ID, LINES_PROCESSED, LINES_FAILED, LINES_SUBMITTED, TOTAL_ERROR_NUMBER, SUPPLIER_ID, JOB_STATUS, JOB_TYPE, FILENAME, START_DATE, COMPLETION_DATE)
956 Insert_Job_Status (p_process_id, 1, 0, 1, 0, l_party_id, l_job_status, 'TARI', 'GATEWAY: '||l_name, l_job_start_date, l_job_completion_date);
957 */
958 -- dbms_output.put_line('Successfully completed Pricelist BOI');
959 END IF;
960
961 IF gpr_return_status <> FND_API.G_RET_STS_SUCCESS THEN
962
963 x_status := 'FAILED';
964 -- dbms_output.put_line('Error in BOI');
965 -- dbms_output.put_line('X_STATUS : ' || x_status);
966 -- dbms_output.put_line('X_ERRORS : ' || x_errors);
967
968 -- name must be unique for price list
969 IF ( substr(x_errors,1,22) = 'SO_NT_NOTE_NAME_IN_USE') THEN
970 l_err_buffer := 'Duplicate Price List.';
971
972 -- combination of (name, version no, language) must be unique for modifier list
973 -- 4/25/2001, match BOI msg change
974 ELSIF ( substr(x_errors,1,51) = 'The Modifier Number that you entered already exists') THEN
975 l_err_buffer := 'Duplicate Modifier List.';
976
977 ELSE
978 -- 4/25/2001, give all BOI msg instead of 1st msg only
979 l_err_buffer := SUBSTR(x_errors, 1,239);
980 -- dbms_output.put_line('ERRORS INSERT: ' || l_err_buffer);
981
982 END IF;
983 rollback; -- do not insert to qp tables
984
985 l_job_status := 1;
986 l_job_completion_date := SYSDATE;
987
988 /*
989 Insert_Err_Msg (p_process_id, 1, l_name, SYSDATE, l_err_buffer, SYSDATE);
990 -- job status 1 is completed with error
991 --(JOB_ID, LINES_PROCESSED, LINES_FAILED, LINES_SUBMITTED, TOTAL_ERROR_NUMBER, SUPPLIER_ID, JOB_STATUS, JOB_TYPE, FILENAME, START_DATE, COMPLETION_DATE)
992 Insert_Job_Status (p_process_id, 1, 1, 1, 1, l_party_id, l_job_status, 'TARI', 'GATEWAY:'||l_name, l_job_start_date, l_job_completion_date);
993 */
994 RAISE boi_failed_exception;
995
996
997 END IF;
998
999 END IF; -- END IF (l_interface_action_code = 'C')
1000
1001 EXCEPTION
1002
1003 WHEN party_id_failed THEN
1004 x_status := 'FAILED';
1005 l_job_status := 1;
1006 l_job_completion_date := SYSDATE;
1007 /*
1008 Insert_Err_Msg (p_process_id, 1, l_name, SYSDATE, l_err_buffer, SYSDATE);
1009 Insert_Job_Status (p_process_id, 1, 1, 1, 1, l_party_id, l_job_status, 'TARI', 'GATEWAY: '||l_name, l_job_start_date, l_job_completion_date);
1010 */
1011 WHEN null_list_type_code THEN
1012 --rollback;
1013 x_status := 'FAILED';
1014 l_err_buffer := 'PRICELSTTYPE cannot be NULL. Please specify PRICELSTTYPE data as PRL for pricelist or SLT for modifier. ';
1015 l_job_status := 1;
1016 l_job_completion_date := SYSDATE;
1017
1018 /*
1019 -- (JOB_ID, LINE_NUMBER, FIELD_NAME, CREATION_DATE, ERROR_MESSAGE, LAST_UPDATE_DATE)
1020 Insert_Err_Msg (p_process_id, 1, l_name, SYSDATE, l_err_buffer, SYSDATE);
1021
1022 -- (JOB_ID, LINES_PROCESSED, LINES_FAILED, LINES_SUBMITTED, TOTAL_ERROR_NUMBER, SUPPLIER_ID, JOB_STATUS, JOB_TYPE, FILENAME, START_DATE, COMPLETION_DATE)
1023 Insert_Job_Status (p_process_id, 1, 1, 1, 1, l_party_id, l_job_status, 'TARI', 'GATEWAY: '||l_name, l_job_start_date, l_job_completion_date);
1024 */
1025
1026 WHEN invalid_list_type_code THEN
1027 --rollback;
1028 x_status := 'FAILED';
1029 l_err_buffer := 'PRICELSTTYPE must be PRL or SLT. Please specify PRICELSTTYPE data as PRL for pricelist or SLT for modifier. ';
1030 l_job_status := 1;
1031 l_job_completion_date := SYSDATE;
1032
1033 /*
1034 Insert_Err_Msg (p_process_id, 1, l_name, SYSDATE, l_err_buffer, SYSDATE);
1035 Insert_Job_Status (p_process_id, 1, 1, 1, 1, l_party_id, l_job_status, 'TARI', 'GATEWAY: '||l_name, l_job_start_date, l_job_completion_date);
1036 */
1037 WHEN null_interface_action_code THEN
1038 --rollback;
1039 x_status := 'FAILED';
1040 l_err_buffer := 'SYNCIND cannot be NULL. Please specify SYNCIND data as C for create or D for delete. ';
1041 l_job_status := 1;
1042 l_job_completion_date := SYSDATE;
1043
1044 /*
1045 Insert_Err_Msg (p_process_id, 1, l_name, SYSDATE, l_err_buffer, SYSDATE);
1046 Insert_Job_Status (p_process_id, 1, 1, 1, 1, l_party_id, l_job_status, 'TARI', 'GATEWAY: '||l_name, l_job_start_date, l_job_completion_date);
1047 */
1048 WHEN invalid_interface_action_code THEN
1049 --rollback;
1050 x_status := 'FAILED';
1051 l_err_buffer := 'SYNCIND must be C or D. Please specify SYNCIND data as C for create or D for delete. ';
1052 l_job_status := 1;
1053 l_job_completion_date := SYSDATE;
1054
1055 /*
1056 Insert_Err_Msg (p_process_id, 1, l_name, SYSDATE, l_err_buffer, SYSDATE);
1057 Insert_Job_Status (p_process_id, 1, 1, 1, 1, l_party_id, l_job_status, 'TARI', 'GATEWAY: '||l_name, l_job_start_date, l_job_completion_date);
1058 */
1059 WHEN origin_rid_failed THEN
1060 --rollback;
1061 x_status := 'FAILED';
1062 l_job_status := 1;
1063 l_job_completion_date := SYSDATE;
1064 /*
1065 Insert_Err_Msg (p_process_id, 1, l_name, SYSDATE, l_err_buffer, SYSDATE);
1066 Insert_Job_Status (p_process_id, 1, 1, 1, 1, l_party_id, l_job_status, 'TARI', 'GATEWAY: '||l_name, l_job_start_date, l_job_completion_date);
1067 */
1068
1069 WHEN destination_rid_failed THEN
1070 --rollback;
1071 x_status := 'FAILED';
1072 l_job_status := 1;
1073 l_job_completion_date := SYSDATE;
1074 /*
1075 Insert_Err_Msg (p_process_id, 1, l_name, SYSDATE, l_err_buffer, SYSDATE);
1076 Insert_Job_Status (p_process_id, 1, 1, 1, 1, l_party_id, l_job_status, 'TARI', 'GATEWAY: '||l_name, l_job_start_date, l_job_completion_date);
1077 */
1078 WHEN prclst_not_exist THEN
1079 --rollback;
1080 x_status := 'FAILED';
1081 l_err_buffer := 'Price list to be deleted does not exist. Please correct data for PRICELSTID. ';
1082 l_job_status := 1;
1083 l_job_completion_date := SYSDATE;
1084 /*
1085 Insert_Err_Msg (p_process_id, 1, l_name, SYSDATE, l_err_buffer, SYSDATE);
1086 Insert_Job_Status (p_process_id, 1, 1, 1, 1, l_party_id, l_job_status, 'TARI', 'GATEWAY: '||l_name, l_job_start_date, l_job_completion_date);
1087 */
1088 WHEN qualifier_prclst_not_exist THEN
1089 x_status := 'FAILED';
1090 l_job_status := 1;
1091 l_job_completion_date := SYSDATE;
1092 /*
1093 Insert_Err_Msg (p_process_id, 1, l_name, SYSDATE, l_err_buffer, SYSDATE);
1094 Insert_Job_Status (p_process_id, 1, 1, 1, 1, l_party_id, l_job_status, 'TARI', 'GATEWAY: '||l_name, l_job_start_date, l_job_completion_date);
1095 */
1096 WHEN boi_failed_exception THEN
1097 x_status := 'FAILED';
1098
1099 WHEN others THEN
1100 rollback;
1101 x_status := 'FAILED';
1102 -- error_message column in fte_job_errors only has width 240
1103 l_err_buffer := SUBSTR('Unexpected error occurred. '||SQLERRM , 1, 239);
1104 l_job_status := 1;
1105 l_job_completion_date := SYSDATE;
1106 /*
1107 Insert_Err_Msg (p_process_id, 1, l_name, SYSDATE, l_err_buffer, SYSDATE);
1108 Insert_Job_Status (p_process_id, 1, 1, 1, 1, l_party_id, l_job_status, 'TARI', 'GATEWAY: '||l_name, l_job_start_date, l_job_completion_date);
1109 */
1110 END Load_Int_List;
1111
1112 --overload procedure
1113 PROCEDURE LOAD_INT_LIST
1114 ( p_process_id IN NUMBER,
1115 p_action_code IN VARCHAR2
1116 )
1117 IS
1118
1119 BEGIN
1120
1121 Load_INT_List(p_process_id, G_temp_status, G_temp_errors);
1122
1123 END LOAD_INT_LIST;
1124
1125 /*
1126 -- procedure to insert err message to FTE_JOB_ERRORS
1127 PROCEDURE Insert_Err_Msg
1128 (
1129 p_job_id IN NUMBER,
1130 p_line_num IN NUMBER,
1131 p_field_name IN VARCHAR2,
1132 p_creation_date IN DATE,
1133 p_err_msg IN VARCHAR2,
1134 p_last_update_date IN DATE
1135 )
1136 IS
1137 BEGIN
1138 INSERT INTO FTE_JOB_ERRORS (JOB_ID, LINE_NUMBER, FIELD_NAME, CREATION_DATE, ERROR_MESSAGE, LAST_UPDATE_DATE)
1139 VALUES (p_job_id, p_line_num, p_field_name, p_creation_date, p_err_msg, p_last_update_date);
1140 commit;
1141
1142 END Insert_Err_Msg;
1143
1144 PROCEDURE Insert_Job_Status
1145 (
1146 p_job_id IN NUMBER,
1147 p_lines_processed IN NUMBER,
1148 p_lines_failed IN NUMBER,
1149 p_lines_submitted IN NUMBER,
1150 p_total_error_number IN NUMBER,
1151 p_supplier_id IN NUMBER,
1152 p_job_status IN VARCHAR2,
1153 p_job_type IN VARCHAR2,
1154 p_file_name IN VARCHAR2,
1155 p_start_date IN DATE,
1156 p_completion_date IN DATE
1157 )
1158 IS
1159 BEGIN
1160 -- job status 0 = completed with success, 1 = completed with error
1161 INSERT INTO FTE_BATCH_JOBS (JOB_ID, LINES_PROCESSED, LINES_FAILED, LINES_SUBMITTED, TOTAL_ERROR_NUMBER, SUPPLIER_ID, JOB_STATUS, JOB_TYPE, FILENAME, START_DATE, COMPLETION_DATE)
1162 VALUES (p_job_id, p_lines_processed, p_lines_failed, p_lines_submitted, p_total_error_number, p_supplier_id, p_job_status, p_job_type, p_file_name, p_start_date, p_completion_date);
1163 commit;
1164 END Insert_Job_Status;
1165
1166
1167 PROCEDURE GetRegionId (
1168 p_region_str IN VARCHAR2,
1169 x_region_id OUT NOCOPY NUMBER,
1170 x_rid_err_msg OUT NOCOPY VARCHAR2
1171 )
1172 IS
1173
1174 l_occurance NUMBER := 1;
1175 l_width NUMBER:= 1;
1176 l_token VARCHAR2(100) := NULL;
1177 l_prev_width NUMBER:= 0;
1178 l_tk_prev_width NUMBER := 0;
1179 l_parse_str VARCHAR2(100) := NULL;
1180 l_tk_str VARCHAR2(100) := NULL;
1181 l_tk_attr VARCHAR2(50) := NULL;
1182 l_tk_attr_val VARCHAR2(50) := NULL;
1183 l_city VARCHAR2(100) := NULL;
1184 l_state VARCHAR2(100) := NULL;
1185 l_country VARCHAR2(100) := NULL;
1186 l_zip VARCHAR2(100) := NULL;
1187 l_zone VARCHAR2(100) := NULL;
1188 invalid_key EXCEPTION;
1189 no_regionid_found EXCEPTION;
1190
1191 BEGIN
1192
1193 -- append ',' to end city_state_country_str for tokenization reason
1194 l_parse_str := p_region_str || SUBSTR (',' , 1, 1);
1195
1196 LOOP
1197 l_width := INSTR (l_parse_str, ',', 1,l_occurance);
1198
1199 -- when no more tokens
1200 EXIT WHEN l_width = 0;
1201
1202 -- trim off the white space at left, ',' at right
1203 l_token := LTRIM (SUBSTR (l_parse_str, l_prev_width + 1, l_width - l_prev_width -1));
1204
1205 -- append '-' to end string for tokenization reason
1206 l_tk_str := l_token || SUBSTR ('-' , 1, 1);
1207 l_tk_prev_width := INSTR (l_tk_str, '-', 1, 1); -- up to first '-'
1208
1209 -- get key-value pair
1210 l_tk_attr := LTRIM (SUBSTR (l_tk_str, 1, l_tk_prev_width -1)); -- key
1211 l_tk_attr_val := LTRIM (SUBSTR (l_tk_str, l_tk_prev_width + 1, INSTR (l_tk_str, '-', 1, 2) - l_tk_prev_width-1)); --value
1212 -- dbms_output.put_line ('tk_attr ' || l_occurance || ': ' || l_tk_attr);
1213 -- dbms_output.put_line ('tk_attr_val ' || l_occurance || ': ' || l_tk_attr_val);
1214
1215 IF UPPER(l_tk_attr) = 'CITY' THEN
1216 l_city := l_tk_attr_val;
1217 ELSIF UPPER(l_tk_attr) = 'STATE' THEN
1218 l_state := l_tk_attr_val;
1219 ELSIF UPPER(l_tk_attr) = 'COUNTRY' THEN
1220 l_country := l_tk_attr_val;
1221 ELSIF UPPER(l_tk_attr) = 'ZONE' THEN
1222 l_zone := l_tk_attr_val;
1223 ELSIF UPPER(l_tk_attr) = 'POSTAL CODE' THEN
1224 l_zip := l_tk_attr_val;
1225 ELSE
1226 raise invalid_key;
1227 END IF;
1228
1229 l_prev_width := l_width;
1230 l_occurance := l_occurance + 1;
1231
1232 END LOOP;
1233
1234
1235 -- use FTE_REGIONS_PKG.Get_Region_Id_TL (parent_region_type, country, country_region, state, city, postal_code, zone, lang_code, interface_flag, x_region_id);
1236 FTE_REGIONS_PKG.Get_Region_Id_TL(NULL, l_country, NULL, l_state, l_city, l_zip, l_zone, NULL, 'N', x_region_id);
1237
1238 -- dbms_output.put_line('region id: ' || x_region_id);
1239 IF x_region_id = -1 THEN
1240 raise no_regionid_found;
1241 END IF;
1242
1243 EXCEPTION
1244 WHEN invalid_key THEN
1245 x_region_id := -1;
1246 x_rid_err_msg := 'Please use City, State, Country, Zone, Postal Code to define the region. Please correct data for ATTRIBUTE_VALUE. ';
1247 WHEN no_regionid_found THEN
1248 x_region_id := -1;
1249 x_rid_err_msg := 'No region id found. Please correct data for ATTRIBUTE_VALUE. ';
1250 WHEN others THEN
1251 x_region_id := -1;
1252 x_rid_err_msg := SUBSTR('Upnexpected error occurred while obtaining region id. Please correct data for ATTRIBUTE_VALUE. '||SQLERRM , 1, 239);
1253
1254 END GetRegionId;
1255 */
1256
1257 PROCEDURE Get_Party_Id
1258 (
1259 p_process_id IN NUMBER,
1260 x_party_id OUT NOCOPY /* file.sql.39 change */ NUMBER,
1261 x_pid_err_msg OUT NOCOPY /* file.sql.39 change */ VARCHAR2
1262 )
1263 IS
1264 l_party_name VARCHAR2(360):= NULL;
1265 BEGIN
1266
1267 -- obtain party_name
1268 SELECT q.qualifier_attr_value
1269 INTO l_party_name
1270 FROM qp_interface_qualifiers q
1271 WHERE q.process_id = p_process_id AND q.qualifier_context = 'PARTY';
1272
1273 --obtain the party_id
1274 SELECT hz_parties.party_id
1275 INTO x_party_id
1276 FROM hz_parties
1277 WHERE hz_parties.party_name = l_party_name;
1278
1279 Exception
1280
1281 WHEN NO_DATA_FOUND THEN
1282 x_party_id := -1;
1283 x_pid_err_msg := 'No party id found for the specified party name. Please correct data for SUPPLIERID. ';
1284 WHEN others THEN
1285 x_party_id := -1;
1286 x_pid_err_msg := SUBSTR('Upnexpected error occurred while obtaining party id. Please correct data for SUPPLIERID. '||SQLERRM , 1, 239);
1287
1288
1289 END Get_Party_Id;
1290
1291 PROCEDURE Is_Qualifier_Prclst_Exist
1292 (
1293 p_prclst_name IN VARCHAR2,
1294 x_prclst_exists OUT NOCOPY /* file.sql.39 change */ BOOLEAN,
1295 x_prclst_exists_err_msg OUT NOCOPY /* file.sql.39 change */ VARCHAR2
1296 )
1297 IS
1298 l_count NUMBER := NULL;
1299 BEGIN
1300 SELECT count(1) into l_count from qp_list_headers_tl where name = p_prclst_name;
1301 IF l_count = 0 THEN
1302 x_prclst_exists := FALSE;
1303 x_prclst_exists_err_msg := SUBSTR('Prclst specified as a qualifier does not exists. Please correct data for ATTRIBUTE_VALUE. ', 1,239);
1304 ELSE
1305 x_prclst_exists := TRUE;
1306 END IF;
1307
1308 EXCEPTION
1309
1310 WHEN others THEN
1311 x_prclst_exists := FALSE;
1312 x_prclst_exists_err_msg := SUBSTR('Upnexpected error occurred while obtaining the prclst specified as a qualifier. '||SQLERRM , 1, 239);
1313 END Is_Qualifier_Prclst_Exist;
1314
1315
1316 END QP_INT_LOADER_PUB;