[Home] [Help]
PACKAGE BODY: APPS.QP_BULK_VALIDATE
Source
1 PACKAGE BODY QP_BULK_VALIDATE AS
2 /* $Header: QPXBLVAB.pls 120.71 2011/07/15 11:42:34 smbalara ship $ */
3
4 /* Begin Bug No. 8854118, shaneed
5 * changes
6 * procedure dup_line_check - modified completely
7 * function get_count - removed
8 * function check_dates_for_dupl - removed
9 * check_dates_overlap - new function added, similar to check_dates_overlap
10 * procedure mark_dup_line - new fuction, to mark a line is duplict
11 */
12
13 /* this function check whether the dates of both line overlap
14 * return true if there is an overlap, otherwise returns false
15 */
16 FUNCTION CHECK_DATES_OVERLAP(P_REQUEST_ID NUMBER,
17 p_orig_sys_header_ref VARCHAR2,
18 p_orig_sys_line_ref_a VARCHAR2,
19 p_orig_sys_line_ref_b VARCHAR2)
20 RETURN BOOLEAN
21 IS
22 l_min_date DATE;
23 l_max_date DATE;
24
25 l_a_start_date_active DATE;
26 l_a_end_date_active DATE;
27
28 l_b_start_date_active DATE;
29 l_b_end_date_active DATE;
30
31 l_routine VARCHAR2(230) := 'QP_BULK_VALIDATE.CHECK_DATES_OVERLAP ';
32
33 BEGIN
34 l_min_date := To_Date('01/01/1900', 'MM/DD/YYYY');
35 l_max_date := To_Date('12/31/9999', 'MM/DD/YYYY');
36
37 --fetching dates for first line, that will be in interface table
38 BEGIN
39 SELECT Nvl(a.start_date_active, l_min_date), Nvl(a.end_date_active, l_max_date)
40 INTO l_a_start_date_active, l_a_end_date_active
41 FROM qp_interface_list_lines a
42 WHERE a.orig_sys_header_ref = p_orig_sys_header_ref
43 AND a.orig_sys_line_ref = p_orig_sys_line_ref_a
44 AND a.request_id = p_request_id;
45 EXCEPTION
46 WHEN No_Data_Found
47 THEN
48 qp_bulk_loader_pub.write_log(l_routine || 'no line in qp_interface_list_lines for ' || p_orig_sys_line_ref_a);
49 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
50 WHEN OTHERS
51 THEN
52 qp_bulk_loader_pub.write_log(l_routine || '#100 Unexpected exception ' || SQLERRM);
53 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
54 END;
55
56 --fetching dates for second line, that can be either in interface table or setup table
57 BEGIN --begin1
58 SELECT Nvl(a.start_date_active, l_min_date), Nvl(a.end_date_active, l_max_date)
59 INTO l_b_start_date_active, l_b_end_date_active
60 FROM qp_interface_list_lines a
61 WHERE a.orig_sys_header_ref = p_orig_sys_header_ref
62 AND a.orig_sys_line_ref = p_orig_sys_line_ref_b
63 AND a.request_id = p_request_id;
64 EXCEPTION --begin1
65 WHEN No_Data_Found
66 THEN
67 BEGIN --begin2
68 SELECT Nvl(a.start_date_active, l_min_date), Nvl(a.end_date_active, l_max_date)
69 INTO l_b_start_date_active, l_b_end_date_active
70 FROM qp_list_lines a
71 WHERE a.orig_sys_header_ref = p_orig_sys_header_ref
72 AND a.orig_sys_line_ref = p_orig_sys_line_ref_b;
73 EXCEPTION --begin2
74 WHEN No_Data_Found
75 THEN
76 qp_bulk_loader_pub.write_log(l_routine || ' date not found in qp_list_lines and qp_interface_list_lines');
77 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
78 END; --begin2
79 END; --begin1
80
81 l_a_start_date_active := Trunc(l_a_start_date_active); --truncate the dates, to remove time part
82 l_a_end_date_active := Trunc(l_a_end_date_active);
83
84 l_b_start_date_active := Trunc(l_b_start_date_active);
85 l_b_end_date_active := Trunc(l_b_end_date_active);
86
87 /* checking for (S1 between S2 and E2) or (E1 between S2 and E2)
88 * that can be simplified as S1 <= E2 and S2 <= E1 -- condition for overlap
89 * S1 - start date of first line
90 */
91 IF l_a_start_date_active <= l_b_end_date_active --it is the simplified condition
92 AND l_b_start_date_active <= l_a_end_date_active
93 THEN
94 RETURN TRUE; --it overlap
95 END IF;
96
97 RETURN FALSE; --no overlap
98
99 EXCEPTION
100 WHEN OTHERS
101 THEN
102 qp_bulk_loader_pub.write_log(l_routine || '#200 Unexpected exception ' || SQLERRM);
103 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
104 END CHECK_DATES_OVERLAP; --check_dates_overlap;
105
106 --mark duplicate line - insert into qp_interface_errors
107 PROCEDURE mark_dup_line(p_request_id NUMBER,
108 p_orig_sys_header_ref VARCHAR2,
109 p_orig_sys_line_ref VARCHAR2)
110 IS
111 l_msg VARCHAR2(2000);
112 l_error_id NUMBER;
113
114 l_routine VARCHAR2(230) := 'MARK_DUP_LINE ';
115 BEGIN
116 UPDATE qp_interface_list_lines
117 SET process_status_flag = NULL --process_status_flag = NULL means, line errored out
118 WHERE orig_sys_header_ref = p_orig_sys_header_ref
119 AND orig_sys_line_ref = p_orig_sys_line_ref
120 AND request_id = p_request_id;
121
122 fnd_message.set_name('QP', 'QP_DUPLICATE_LIST_LINES');
123 l_msg := fnd_message.Get;
124
125 SELECT qp_interface_errors_s.NEXTVAL
126 INTO l_error_id
127 FROM dual;
128
129 INSERT INTO qp_interface_errors(error_id, last_update_date, last_updated_by,
130 creation_date, created_by, last_update_login, request_id,
131 program_application_id, program_id, program_update_date, entity_type,
132 table_name, column_name, orig_sys_header_ref, orig_sys_line_ref,
133 orig_sys_qualifier_ref, orig_sys_pricing_attr_ref, error_message)
134 VALUES(l_error_id, SYSDATE, FND_GLOBAL.USER_ID,
135 SYSDATE, FND_GLOBAL.USER_ID, FND_GLOBAL.CONC_LOGIN_ID, p_request_id,
136 661, NULL, NULL, 'PRL',
137 'QP_INTERFACE_LIST_LINES', NULL, p_orig_sys_header_ref, p_orig_sys_line_ref,
138 NULL, NULL, l_msg);
139
140 EXCEPTION
141 WHEN OTHERS
142 THEN
143 qp_bulk_loader_pub.write_log(l_routine || 'Unexpected exception ' || SQLERRM);
144 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
145 END mark_dup_line;
146
147 PROCEDURE dup_line_check(p_request_id NUMBER)
148 IS
149 /* This cursor gives lines which got atleast one
150 * duplicate pricing attibute with another line
151 * in qp_interface_pricing_attribs */
152 CURSOR c_dup_line_rec IS
153 SELECT distinct a_attr.orig_sys_header_ref,
154 a_attr.orig_sys_line_ref, --first line
155 b_attr.orig_sys_line_ref --second line
156 FROM qp_interface_pricing_attribs a_attr,
157 qp_interface_pricing_attribs b_attr
158 WHERE a_attr.request_id = p_request_id
159 AND b_attr.request_id = p_request_id
160 AND a_attr.process_status_flag = 'P'
161 AND b_attr.process_status_flag = 'P'
162 AND a_attr.interface_action_code IN ('INSERT', 'UPDATE') --don't have to consider attributes
163 AND b_attr.interface_action_code IN ('INSERT', 'UPDATE') --which are going to be deleted
164 AND a_attr.orig_sys_header_ref = b_attr.orig_sys_header_ref --should be in same price list
165 AND a_attr.orig_sys_line_ref <> b_attr.orig_sys_line_ref --not same line
166 AND a_attr.product_attribute_context = b_attr.product_attribute_context
167 AND a_attr.product_attribute = b_attr.product_attribute
168 AND a_attr.product_attr_value = b_attr.product_attr_value
169 AND Nvl(a_attr.product_uom_code, '*') = Nvl(b_attr.product_uom_code, '*')
170 AND (
171 ( --either no pricing attribute or same pricing attribute
172 a_attr.pricing_attribute_context = b_attr.pricing_attribute_context
173 AND a_attr.pricing_attribute = b_attr.pricing_attribute
174 AND nvl(a_attr.pricing_attr_value_from, 0) =
175 nvl(b_attr.pricing_attr_value_from, 0)
176 AND nvl(a_attr.pricing_attr_value_to, 0) =
177 nvl(b_attr.pricing_attr_value_to, 0)
178 AND a_attr.comparison_operator_code = b_attr.comparison_operator_code
179 )
180 OR --either no pricing attribute or same pricing attribute
181 (
182 a_attr.pricing_attribute_context IS NULL
183 AND b_attr.pricing_attribute_context IS NULL
184 AND a_attr.pricing_attribute IS NULL
185 AND b_attr.pricing_attribute IS NULL
186 )
187 )
188 ;
189
190 /* Cursor gives line that got atleast one duplicate pricing attribute line
191 * in qp_pricing_attributes table */
192 CURSOR c_dup_line_rec1 IS
193 SELECT DISTINCT a_attr.orig_sys_header_ref,
194 a_attr.orig_sys_line_ref,
195 b_attr.orig_sys_line_ref
196 FROM qp_interface_pricing_attribs a_attr,
197 qp_pricing_attributes b_attr
198 WHERE a_attr.request_id = p_request_id
199 AND a_attr.process_status_flag = 'P'
200 AND a_attr.interface_action_code IN ('INSERT', 'UPDATE')
201 AND b_attr.orig_sys_header_ref = a_attr.orig_sys_header_ref
202 AND b_attr.orig_sys_line_ref <> a_attr.orig_sys_line_ref
203 AND b_attr.product_attribute_context = a_attr.product_attribute_context
204 AND b_attr.product_attribute = a_attr.product_attribute
205 AND b_attr.product_attr_value = a_attr.product_attr_value
206 AND Nvl(b_attr.product_uom_code, '*') = Nvl(a_attr.product_uom_code, '*')
207 AND NOT EXISTS( /* should not consider pricing attribute which */
208 SELECT 'X' /* going to be updated or deleted */
209 FROM qp_interface_pricing_attribs c
210 WHERE c.request_id = p_request_id
211 AND c.orig_sys_pricing_attr_ref = b_attr.orig_sys_pricing_attr_ref
212 AND c.interface_action_code IN ('UPDATE', 'DELETE')
213 )
214 AND ( --either no pricing attribute or same pricing attribute
215 (
216 a_attr.pricing_attribute_context = b_attr.pricing_attribute_context
217 AND a_attr.pricing_attribute = b_attr.pricing_attribute
218 AND nvl(a_attr.pricing_attr_value_from, 0) =
219 nvl(b_attr.pricing_attr_value_from, 0)
220 AND nvl(a_attr.pricing_attr_value_to, 0) =
221 nvl(b_attr.pricing_attr_value_to, 0)
222 AND a_attr.comparison_operator_code = b_attr.comparison_operator_code
223 )
224 OR
225 (
226 a_attr.pricing_attribute_context IS NULL
227 AND b_attr.pricing_attribute_context IS NULL
228 AND a_attr.pricing_attribute IS NULL
229 AND b_attr.pricing_attribute IS NULL
230 )
231 )
232 ;
233
234 /* gives all pricing attribute of a line
235 * union b/w qp_interface_pricing_attribs and qp_pricing_attributes
236 */
237 CURSOR c_pricing_attr(l_orig_sys_line_ref VARCHAR2) IS
238 /* take attibute from qp_interface_pricing_attribs */
239 SELECT pricing_attribute_context,
240 pricing_attribute,
241 pricing_attr_value_from,
242 pricing_attr_value_to,
243 comparison_operator_code
244 FROM qp_interface_pricing_attribs
245 WHERE request_id = p_request_id
246 AND orig_sys_line_ref = l_orig_sys_line_ref
247 AND pricing_attribute_context IS NOT NULL
248 AND pricing_attribute IS NOT NULL
249
250 UNION /* union with qp_interface_pricing_attribs */
251
252 SELECT pricing_attribute_context,
253 pricing_attribute,
254 pricing_attr_value_from,
255 pricing_attr_value_to,
256 comparison_operator_code
257 FROM qp_pricing_attributes qpa
258 WHERE qpa.orig_sys_line_ref = l_orig_sys_line_ref
259 AND qpa.pricing_attribute_context IS NOT NULL
260 AND qpa.pricing_attribute IS NOT NULL
261 AND NOT EXISTS ( /* do not take an attribute from */
262 SELECT 1 /* qp_pricing_attributes if that going to */
263 /* be updated or deleted */
264 FROM qp_interface_pricing_attribs c
265 WHERE c.orig_sys_line_ref = l_orig_sys_line_ref
266 AND c.interface_action_code IN ('UPDATE', 'DELETE')
267 AND c.orig_sys_pricing_attr_ref = qpa.orig_sys_pricing_attr_ref
268 )
269 ;
270
271
272 TYPE char50_type IS TABLE OF Varchar2(50) INDEX BY BINARY_INTEGER;
273 TYPE char30_type IS TABLE OF Varchar2(50) INDEX BY BINARY_INTEGER;
274 TYPE char240_type IS TABLE OF Varchar2(50) INDEX BY BINARY_INTEGER;
275
276 TYPE dup_line_type IS RECORD (
277 orig_sys_header_ref char50_type,
278 a_orig_sys_line_ref char50_type,
279 b_orig_sys_line_ref char50_type
280 );
281 TYPE found_duplicate_type IS TABLE OF varchar2(1) INDEX BY varchar2(50);
282
283 TYPE pa_line_type IS RECORD (
284 pricing_attribute_context char30_type,
285 pricing_attribute char30_type,
286 pricing_attr_value_from char240_type,
287 pricing_attr_value_to char240_type,
288 comparison_operator_code char30_type
289 );
290
291 l_dup_line_rec dup_line_type;
292 l_found_duplicate_tbl FOUND_DUPLICATE_TYPE;
293
294 l_a_pa_line_rec PA_LINE_TYPE; --pricing attirbutes of first line
295 l_b_pa_line_rec PA_LINE_TYPE; --that of second line
296
297 l_limit NUMBER := 5000; --number of records to be bulk collected
298
299 l_a_pa_count NUMBER;
300 l_b_pa_count NUMBER;
301 l_pa_count NUMBER;
302
303 l_a_count NUMBER;
304 l_b_count NUMBER;
305
306 l_dummy VARCHAR2(2);
307
308 l_routine VARCHAR2(230) := 'DUP_LINE_CHECK ';
309 BEGIN
310 /* First we check for duplicates in qp_interface_pricing_attribs(i_mode = 1)
311 * then in qp_pricing_attributes(i_mode = 2) */
312 qp_bulk_loader_pub.write_log('In ' || l_routine);
313 FOR i_mode IN 1..2
314 LOOP
315 qp_bulk_loader_pub.write_log('i_mode = ' || i_mode);
316 IF i_mode = 1
317 THEN
318 OPEN c_dup_line_rec;
319 ELSE
320 OPEN c_dup_line_rec1;
321 END IF;
322
323 LOOP --LOOP_1
324 l_dup_line_rec.orig_sys_header_ref.DELETE;
325 l_dup_line_rec.a_orig_sys_line_ref.DELETE;
326 l_dup_line_rec.b_orig_sys_line_ref.DELETE;
327
328 IF i_mode = 1
329 THEN
330 FETCH c_dup_line_rec BULK COLLECT
331 INTO l_dup_line_rec.orig_sys_header_ref,
332 l_dup_line_rec.a_orig_sys_line_ref,
333 l_dup_line_rec.b_orig_sys_line_ref
334 LIMIT l_limit;
335
336 qp_bulk_loader_pub.write_log('count = ' || l_dup_line_rec.a_orig_sys_line_ref.count);
337
338 EXIT WHEN l_dup_line_rec.a_orig_sys_line_ref.COUNT = 0;
339 ELSIF i_mode = 2 --IF i_mode = 1
340 THEN
341 FETCH c_dup_line_rec1 BULK COLLECT
342 INTO l_dup_line_rec.orig_sys_header_ref,
343 l_dup_line_rec.a_orig_sys_line_ref,
344 l_dup_line_rec.b_orig_sys_line_ref
345 LIMIT l_limit;
346
347 qp_bulk_loader_pub.write_log('count = ' || l_dup_line_rec.a_orig_sys_line_ref.count);
348
349 EXIT WHEN l_dup_line_rec.a_orig_sys_line_ref.COUNT = 0;
350 END IF; --IF i_mode = 1
351
352 FOR i IN 1..l_dup_line_rec.a_orig_sys_line_ref.Count
353 LOOP
354 IF l_found_duplicate_tbl.EXISTS(l_dup_line_rec.a_orig_sys_line_ref(i)) --IF3
355 THEN
356 qp_bulk_loader_pub.write_log('a = ' || l_dup_line_rec.a_orig_sys_line_ref(i));
357 qp_bulk_loader_pub.write_log('b = ' || l_dup_line_rec.b_orig_sys_line_ref(i));
358 qp_bulk_loader_pub.write_log('already found these are duplicates');
359 ELSE --IF3
360 /* do not process price break */
361 IF i_mode = 1 --IF1
362 THEN
363 BEGIN
364 SELECT 'X' INTO l_dummy
365 FROM qp_interface_list_lines
366 WHERE orig_sys_line_ref = l_dup_line_rec.b_orig_sys_line_ref(i)
367 AND price_break_header_ref IS NOT NULL
368 AND rltd_modifier_grp_type = 'PRICE BREAK'; --test this
369 EXCEPTION
370 WHEN OTHERS
371 THEN
372 NULL;
373 END;
374 ELSIF i_mode = 2 --IF1
375 THEN
376 BEGIN
377 SELECT 'X' INTO l_dummy
378 FROM qp_rltd_modifiers qrm,
379 qp_list_lines b
380 WHERE b.orig_sys_header_ref = l_dup_line_rec.orig_sys_header_ref(i)
381 AND b.orig_sys_line_ref = l_dup_line_rec.b_orig_sys_line_ref(i)
382 AND qrm.rltd_modifier_grp_type = 'PRICE BREAK'
383 AND qrm.to_rltd_modifier_id = b.list_line_id;
384 EXCEPTION
385 WHEN OTHERS
386 THEN
387 NULL;
388 END;
389 END IF; --IF1
390
391 IF l_dummy IS NULL --this code does not process price breaks
392 THEN
393 /* first code checks if there is a date overlap
394 * if no overlap, line is not duplicate
395 * if overlaps, check whether all pricing attributes
396 * got duplicates
397 */
398 IF NOT check_dates_overlap(p_request_id, --if dates do not overlap
399 l_dup_line_rec.orig_sys_header_ref(i),
400 l_dup_line_rec.a_orig_sys_line_ref(i),
401 l_dup_line_rec.b_orig_sys_line_ref(i))
402 THEN
403 NULL; --not duplicates
404 ELSE --date overlap
405 l_a_pa_count := 0;
406 l_b_pa_count := 0;
407
408 l_a_pa_line_rec.pricing_attribute_context.DELETE;
409 l_a_pa_line_rec.pricing_attribute.DELETE;
410 l_a_pa_line_rec.pricing_attr_value_from.DELETE;
411 l_a_pa_line_rec.pricing_attr_value_to.DELETE;
412 l_a_pa_line_rec.comparison_operator_code.DELETE;
413
414 /* fetch pricing attribute of first line */
415 OPEN c_pricing_attr(l_dup_line_rec.a_orig_sys_line_ref(i));
416 FETCH c_pricing_attr BULK COLLECT
417 INTO l_a_pa_line_rec.pricing_attribute_context,
418 l_a_pa_line_rec.pricing_attribute,
419 l_a_pa_line_rec.pricing_attr_value_from,
420 l_a_pa_line_rec.pricing_attr_value_to,
421 l_a_pa_line_rec.comparison_operator_code;
422
423 CLOSE c_pricing_attr;
424
425 l_b_pa_line_rec.pricing_attribute_context.DELETE;
426 l_b_pa_line_rec.pricing_attribute.DELETE;
427 l_b_pa_line_rec.pricing_attr_value_from.DELETE;
428 l_b_pa_line_rec.pricing_attr_value_to.DELETE;
429 l_b_pa_line_rec.comparison_operator_code.DELETE;
430
431 /* fetch pricing attributes of second line */
432 OPEN c_pricing_attr(l_dup_line_rec.b_orig_sys_line_ref(i));
433 FETCH c_pricing_attr BULK COLLECT
434 INTO l_b_pa_line_rec.pricing_attribute_context,
435 l_b_pa_line_rec.pricing_attribute,
436 l_b_pa_line_rec.pricing_attr_value_from,
437 l_b_pa_line_rec.pricing_attr_value_to,
438 l_b_pa_line_rec.comparison_operator_code;
439
440 CLOSE c_pricing_attr;
441
442 l_a_pa_count := l_a_pa_line_rec.pricing_attribute_context.Count;
443 l_b_pa_count := l_b_pa_line_rec.pricing_attribute_context.Count;
444
445 /* if both got same number of pricing attibutes
446 * further checking
447 * otherwise it is not a duplicate
448 */
449 IF l_a_pa_count = l_b_pa_count
450 THEN
451 --check if the pricing attributes in both the lines match
452 l_pa_count := l_a_pa_count;
453 FOR j IN 1..l_a_pa_line_rec.pricing_attribute_context.Count --FOR1
454 LOOP
455 FOR k IN 1..l_b_pa_line_rec.pricing_attribute_context.Count --FOR2
456 LOOP
457 IF l_a_pa_line_rec.pricing_attribute_context(j)
458 = l_b_pa_line_rec.pricing_attribute_context(k)
459 AND l_a_pa_line_rec.pricing_attribute(j)
460 = l_b_pa_line_rec.pricing_attribute(k)
461 AND l_a_pa_line_rec.pricing_attr_value_from(j)
462 = l_b_pa_line_rec.pricing_attr_value_from(k)
463 AND Nvl(l_a_pa_line_rec.pricing_attr_value_to(j), '*')
464 = Nvl(l_b_pa_line_rec.pricing_attr_value_to(k), '*')
465 AND l_a_pa_line_rec.comparison_operator_code(j)
466 = l_b_pa_line_rec.comparison_operator_code(k)
467 THEN
468 l_pa_count := l_pa_count - 1;
469 EXIT; --exit loop FOR2
470 END IF;
471 END LOOP; --FOR2
472 END LOOP;--FOR1
473
474 IF l_pa_count = 0 --if all the attributes are same, then duplicates
475 THEN
476 mark_dup_line(p_request_id,
477 l_dup_line_rec.orig_sys_header_ref(i),
478 l_dup_line_rec.a_orig_sys_line_ref(i));
479
480 --mark it, so we don't have to procss the same line again!!
481 l_found_duplicate_tbl(l_dup_line_rec.a_orig_sys_line_ref(i)) := 'Y';
482 qp_bulk_loader_pub.write_log('Found a duplicate b/w '
483 || l_dup_line_rec.a_orig_sys_line_ref(i) ||
484 ' and ' || l_dup_line_rec.b_orig_sys_line_ref(i));
485 END IF; --IF l_pa_count = 0
486 END IF; --IF l_a_pa_count = l_b_pa_count
487 END IF; --IF3, end if for date overlap check
488 END IF; --IF l_dummy IS NULL
489 END IF; --IF l_found_duplicate_tbl.EXISTS(l_dup_line_rec.a_orig_sys_line_ref(i))
490 END LOOP; --FOR i IN 1..l_dup_line_rec.a_orig_sys_line_ref.Count
491 END LOOP; --LOOP_1
492
493 IF i_mode = 1
494 THEN
495 CLOSE c_dup_line_rec;
496 ELSE
497 CLOSE c_dup_line_rec1;
498 END IF;
499 END LOOP; --FOR i_mode IN 1..2
500 qp_bulk_loader_pub.write_log(l_routine || 'Done, found ' || l_found_duplicate_tbl.COUNT || ' duplicates');
501 EXCEPTION
502 WHEN OTHERS
503 THEN
504 qp_bulk_loader_pub.write_log(l_routine || 'Unexpected Exception ' || SQLERRM);
505 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
506 END dup_line_check; -- dup_line_check
507 --End Bug No: 8854118, shaneed
508
509 FUNCTION GET_FLEX_ENABLED_FLAG(p_flex_name VARCHAR2)
510 RETURN VARCHAR2
511 IS
512 l_count NUMBER;
513 BEGIN
514 SELECT count(*)
515 INTO l_count
516 FROM fnd_descr_flex_column_usages
517 WHERE APPLICATION_ID = 661
518 AND DESCRIPTIVE_FLEXFIELD_NAME = p_flex_name
519 AND ENABLED_FLAG = 'Y'
520 AND ROWNUM = 1;
521
522 IF l_count = 1 THEN
523 RETURN 'Y';
524 ELSE
525 RETURN 'N';
526 END IF;
527 EXCEPTION
528 WHEN OTHERS THEN
529 RETURN 'N';
530 END GET_FLEX_ENABLED_FLAG;
531
532 FUNCTION Desc_Flex ( p_flex_name IN VARCHAR2 )
533 RETURN BOOLEAN
534 IS
535 l_count NUMBER := 0;
536 BEGIN
537
538
539 qp_bulk_loader_pub.write_log( 'In Desc Flex '||p_flex_name);
540
541 g_context := NULL;
542 g_attribute1 := NULL;
543 g_attribute2 := NULL;
544 g_attribute3 := NULL;
545 g_attribute4 := NULL;
546 g_attribute5 := NULL;
547 g_attribute6 := NULL;
548 g_attribute7 := NULL;
549 g_attribute8 := NULL;
550 g_attribute9 := NULL;
551 g_attribute10 := NULL;
552 g_attribute11 := NULL;
553 g_attribute12 := NULL;
554 g_attribute13 := NULL;
555 g_attribute14 := NULL;
556 g_attribute15 := NULL;
557
558 IF FND_FLEX_DESCVAL.Validate_Desccols( 'QP', p_flex_name, 'D') THEN
559
560
561 -- Copying values into global variables
562 l_count := fnd_flex_descval.segment_count;
563 qp_bulk_loader_pub.write_log( 'segment count='||to_char(l_count));
564
565 FOR i IN 1..l_count LOOP
566
567 qp_bulk_loader_pub.write_log( 'segment col nam='||FND_FLEX_DESCVAL.segment_column_name(i));
568 qp_bulk_loader_pub.write_log( 'segment ID='|| FND_FLEX_DESCVAL.segment_id(i));
569
570 IF FND_FLEX_DESCVAL.segment_column_name(i) = g_context_name THEN
571 g_context := FND_FLEX_DESCVAL.segment_id(i);
572 ELSIF FND_FLEX_DESCVAL.segment_column_name(i) = g_attribute1_name THEN
573 g_attribute1 := FND_FLEX_DESCVAL.segment_id(i);
574 ELSIF FND_FLEX_DESCVAL.segment_column_name(i) = g_attribute2_name THEN
575 g_attribute2 := FND_FLEX_DESCVAL.segment_id(i);
576 ELSIF FND_FLEX_DESCVAL.segment_column_name(i) = g_attribute3_name THEN
577 g_attribute3 := FND_FLEX_DESCVAL.segment_id(i);
578 ELSIF FND_FLEX_DESCVAL.segment_column_name(i) = g_attribute4_name THEN
579 g_attribute4 := FND_FLEX_DESCVAL.segment_id(i);
580 ELSIF FND_FLEX_DESCVAL.segment_column_name(i) = g_attribute5_name THEN
581 g_attribute5 := FND_FLEX_DESCVAL.segment_id(i);
582 ELSIF FND_FLEX_DESCVAL.segment_column_name(i) = g_attribute6_name THEN
583 g_attribute6 := FND_FLEX_DESCVAL.segment_id(i);
584 ELSIF FND_FLEX_DESCVAL.segment_column_name(i) = g_attribute7_name THEN
585 g_attribute7 := FND_FLEX_DESCVAL.segment_id(i);
586 ELSIF FND_FLEX_DESCVAL.segment_column_name(i) = g_attribute8_name THEN
587 g_attribute8 := FND_FLEX_DESCVAL.segment_id(i);
588 ELSIF FND_FLEX_DESCVAL.segment_column_name(i) = g_attribute9_name THEN
589 g_attribute9 := FND_FLEX_DESCVAL.segment_id(i);
590 ELSIF FND_FLEX_DESCVAL.segment_column_name(i) = g_attribute10_name THEN
591 g_attribute10 := FND_FLEX_DESCVAL.segment_id(i);
592 ELSIF FND_FLEX_DESCVAL.segment_column_name(i) = g_attribute11_name THEN
593 g_attribute11 := FND_FLEX_DESCVAL.segment_id(i);
594 ELSIF FND_FLEX_DESCVAL.segment_column_name(i) = g_attribute12_name THEN
595 g_attribute12 := FND_FLEX_DESCVAL.segment_id(i);
596 ELSIF FND_FLEX_DESCVAL.segment_column_name(i) = g_attribute13_name THEN
597 g_attribute13 := FND_FLEX_DESCVAL.segment_id(i);
598 ELSIF FND_FLEX_DESCVAL.segment_column_name(i) = g_attribute14_name THEN
599 g_attribute14 := FND_FLEX_DESCVAL.segment_id(i);
600 ELSIF FND_FLEX_DESCVAL.segment_column_name(i) = g_attribute15_name THEN
601 g_attribute15 := FND_FLEX_DESCVAL.segment_id(i);
602 END IF;
603 END LOOP;
604
605 RETURN TRUE;
606
607 ELSE
608 -- Prepare the encoded message by setting it on the message
609 -- dictionary stack. Then, add it to the API message list.
610
611 FND_MESSAGE.Set_Encoded(FND_FLEX_DESCVAL.Encoded_Error_Message);
612
613 -- Derive return status.
614
615 IF FND_FLEX_DESCVAL.value_error OR
616 FND_FLEX_DESCVAL.unsupported_error
617 THEN
618 -- In case of an expected error return FALSE
619 qp_bulk_loader_pub.write_log( p_flex_name||'Desc Flex value/unsupport error');
620 RETURN FALSE;
621 ELSE
622 -- In case of an unexpected error raise an exception.
623 qp_bulk_loader_pub.write_log( p_flex_name||'Desc Flex unexpected error');
624 RETURN FALSE;
625 END IF;
626 END IF;
627
628
629 RETURN TRUE;
630 END Desc_Flex;
631
632 FUNCTION Init_Desc_Flex (p_flex_name IN VARCHAR2,
633 p_context IN VARCHAR2,
634 p_attribute1 IN VARCHAR2,
635 p_attribute2 IN VARCHAR2,
636 p_attribute3 IN VARCHAR2,
637 p_attribute4 IN VARCHAR2,
638 p_attribute5 IN VARCHAR2,
639 p_attribute6 IN VARCHAR2,
640 p_attribute7 IN VARCHAR2,
641 p_attribute8 IN VARCHAR2,
642 p_attribute9 IN VARCHAR2,
643 p_attribute10 IN VARCHAR2,
644 p_attribute11 IN VARCHAR2,
645 p_attribute12 IN VARCHAR2,
646 p_attribute13 IN VARCHAR2,
647 p_attribute14 IN VARCHAR2,
648 p_attribute15 IN VARCHAR2)
649 RETURN BOOLEAN
650 IS
651 l_column_value VARCHAR2(240) := null;
652 BEGIN
653 qp_bulk_loader_pub.write_log( 'In Init Desc Flex '||p_flex_name);
654
655 g_context_name := 'CONTEXT';
656 g_attribute1_name := 'ATTRIBUTE1';
657 g_attribute2_name := 'ATTRIBUTE2';
658 g_attribute3_name := 'ATTRIBUTE3';
659 g_attribute4_name := 'ATTRIBUTE4';
660 g_attribute5_name := 'ATTRIBUTE5';
661 g_attribute6_name := 'ATTRIBUTE6';
662 g_attribute7_name := 'ATTRIBUTE7';
663 g_attribute8_name := 'ATTRIBUTE8';
664 g_attribute9_name := 'ATTRIBUTE9';
665 g_attribute10_name := 'ATTRIBUTE10';
666 g_attribute11_name := 'ATTRIBUTE11';
667 g_attribute12_name := 'ATTRIBUTE12';
668 g_attribute13_name := 'ATTRIBUTE13';
669 g_attribute14_name := 'ATTRIBUTE14';
670 g_attribute15_name := 'ATTRIBUTE15';
671
672 IF p_attribute1 = FND_API.G_MISS_CHAR THEN
673
674 l_column_value := null;
675
676 ELSE
677
678 l_column_value := p_attribute1;
679 qp_bulk_loader_pub.write_log( 'Attribute1='||l_column_value);
680
681 END IF;
682
683 FND_FLEX_DESCVAL.Set_Column_Value
684 ( column_name => 'ATTRIBUTE1'
685 , column_value => l_column_value);
686
687 IF p_attribute2 = FND_API.G_MISS_CHAR THEN
688
689 l_column_value := null;
690
691 ELSE
692
693 l_column_value := p_attribute2;
694 qp_bulk_loader_pub.write_log( 'Attribute2='||l_column_value);
695
696 END IF;
697
698 FND_FLEX_DESCVAL.Set_Column_Value
699 ( column_name => 'ATTRIBUTE2'
700 , column_value => l_column_value);
701
702 IF p_attribute3 = FND_API.G_MISS_CHAR THEN
703
704 l_column_value := null;
705
706 ELSE
707
708 l_column_value := p_attribute3;
709 qp_bulk_loader_pub.write_log( 'Attribute3='||l_column_value);
710
711 END IF;
712
713 FND_FLEX_DESCVAL.Set_Column_Value
714 ( column_name => 'ATTRIBUTE3'
715 , column_value => l_column_value);
716
717 IF p_attribute4 = FND_API.G_MISS_CHAR THEN
718
719 l_column_value := null;
720
721 ELSE
722
723 l_column_value := p_attribute4;
724 qp_bulk_loader_pub.write_log( 'Attribute4='||l_column_value);
725
726 END IF;
727
728 FND_FLEX_DESCVAL.Set_Column_Value
729 ( column_name => 'ATTRIBUTE4'
730 , column_value => l_column_value);
731
732 IF p_attribute5 = FND_API.G_MISS_CHAR THEN
733
734 l_column_value := null;
735
736 ELSE
737
738 l_column_value := p_attribute5;
739 qp_bulk_loader_pub.write_log( 'Attribute5='||l_column_value);
740
741 END IF;
742
743 FND_FLEX_DESCVAL.Set_Column_Value
744 ( column_name => 'ATTRIBUTE5'
745 , column_value => l_column_value);
746
747 IF p_attribute6 = FND_API.G_MISS_CHAR THEN
748
749 l_column_value := null;
750
751 ELSE
752
753 l_column_value := p_attribute6;
754 qp_bulk_loader_pub.write_log( 'Attribute6='||l_column_value);
755
756 END IF;
757
758 FND_FLEX_DESCVAL.Set_Column_Value
759 ( column_name => 'ATTRIBUTE6'
760 , column_value => l_column_value);
761
762 IF p_attribute7 = FND_API.G_MISS_CHAR THEN
763
764 l_column_value := null;
765
766 ELSE
767
768 l_column_value := p_attribute7;
769 qp_bulk_loader_pub.write_log( 'Attribute7='||l_column_value);
770
771 END IF;
772
773 FND_FLEX_DESCVAL.Set_Column_Value
774 ( column_name => 'ATTRIBUTE7'
775 , column_value => l_column_value);
776
777 IF p_attribute8 = FND_API.G_MISS_CHAR THEN
778
779 l_column_value := null;
780
781 ELSE
782
783 l_column_value := p_attribute8;
784 qp_bulk_loader_pub.write_log( 'Attribute8='||l_column_value);
785
786 END IF;
787
788 FND_FLEX_DESCVAL.Set_Column_Value
789 ( column_name => 'ATTRIBUTE8'
790 , column_value => l_column_value);
791
792 IF p_attribute9 = FND_API.G_MISS_CHAR THEN
793
794 l_column_value := null;
795
796 ELSE
797
798 l_column_value := p_attribute9;
799 qp_bulk_loader_pub.write_log( 'Attribute9='||l_column_value);
800
801 END IF;
802
803 FND_FLEX_DESCVAL.Set_Column_Value
804 ( column_name => 'ATTRIBUTE9'
805 , column_value => l_column_value);
806
807 IF p_attribute10 = FND_API.G_MISS_CHAR THEN
808
809 l_column_value := null;
810
811 ELSE
812
813 l_column_value := p_attribute10;
814 qp_bulk_loader_pub.write_log( 'Attribute10='||l_column_value);
815
816 END IF;
817
818 FND_FLEX_DESCVAL.Set_Column_Value
819 ( column_name => 'ATTRIBUTE10'
820 , column_value => l_column_value);
821
822 IF p_attribute11 = FND_API.G_MISS_CHAR THEN
823
824 l_column_value := null;
825
826 ELSE
827
828 l_column_value := p_attribute11;
829 qp_bulk_loader_pub.write_log( 'Attribute11='||l_column_value);
830
831 END IF;
832
833 FND_FLEX_DESCVAL.Set_Column_Value
834 ( column_name => 'ATTRIBUTE11'
835 , column_value => l_column_value);
836
837 IF p_attribute12 = FND_API.G_MISS_CHAR THEN
838
839 l_column_value := null;
840
841 ELSE
842
843 l_column_value := p_attribute12;
844 qp_bulk_loader_pub.write_log( 'Attribute12='||l_column_value);
845
846 END IF;
847
848 FND_FLEX_DESCVAL.Set_Column_Value
849 ( column_name => 'ATTRIBUTE12'
850 , column_value => l_column_value);
851
852 IF p_attribute13 = FND_API.G_MISS_CHAR THEN
853
854 l_column_value := null;
855
856 ELSE
857
858 l_column_value := p_attribute13;
859 qp_bulk_loader_pub.write_log( 'Attribute13='||l_column_value);
860
861 END IF;
862
863 FND_FLEX_DESCVAL.Set_Column_Value
864 ( column_name => 'ATTRIBUTE13'
865 , column_value => l_column_value);
866
867 IF p_attribute14 = FND_API.G_MISS_CHAR THEN
868
869 l_column_value := null;
870
871 ELSE
872
873 l_column_value := p_attribute14;
874 qp_bulk_loader_pub.write_log( 'Attribute14='||l_column_value);
875
876 END IF;
877
878 FND_FLEX_DESCVAL.Set_Column_Value
879 ( column_name => 'ATTRIBUTE14'
880 , column_value => l_column_value);
881
882 IF p_attribute15 = FND_API.G_MISS_CHAR THEN
883
884 l_column_value := null;
885
886 ELSE
887
888 l_column_value := p_attribute15;
889 qp_bulk_loader_pub.write_log( 'Attribute15='||l_column_value);
890
891 END IF;
892
893 FND_FLEX_DESCVAL.Set_Column_Value
894 ( column_name => 'ATTRIBUTE15'
895 , column_value => l_column_value);
896
897 IF p_context = FND_API.G_MISS_CHAR THEN
898
899 l_column_value := null;
900
901 ELSE
902
903 l_column_value := p_context;
904 qp_bulk_loader_pub.write_log( 'Context='||l_column_value);
905
906 END IF;
907 FND_FLEX_DESCVAL.Set_Context_Value
908 ( context_value => l_column_value);
909
910 IF NOT Desc_Flex(p_flex_name) THEN
911 RETURN FALSE;
912 END IF;
913 RETURN TRUE;
914 END;
915
916 PROCEDURE ENTITY_HEADER
917 (p_header_rec IN OUT NOCOPY QP_BULK_LOADER_PUB.HEADER_REC_TYPE)
918
919 IS
920 l_msg_rec QP_BULK_MSG.Msg_Rec_Type;
921 l_old_PRICE_LIST_rec QP_Price_List_PUB.Price_List_Rec_Type;
922 l_dummy VARCHAR2(10);
923 l_unit_precision_type varchar2(255) ;
924 l_precision number := NULL;
925 l_extended_precision number := NULL;
926 l_price_rounding VARCHAR2(50);
927 l_list_header_id NUMBER;
928 l_exist NUMBER;
929 l_start_date_active VARCHAR2(30);
930 l_qp_pte VARCHAR2(50);
931 l_qp_source_system_code VARCHAR2(50);
932
933 l_header_flex_enabled VARCHAR2(1);
934 l_security_profile VARCHAR2(1);
935 l_header_id_null VARCHAR2(1); --bug 6961376
936
937 -- Bug 4904393 START RAVI
938 /**
939 Local variables to store the hdr interface dates in date format.
940 **/
941 l_start_date DATE;
942 l_end_date DATE;
943 -- Bug 4904393 END RAVI
944
945 -- Bug 5414062 START RAVI
946 l_first_date_hash VARCHAR2(1);
947 l_second_date_hash VARCHAR2(1);
948 l_date_length NUMBER;
949 -- Bug 5414062 END RAVI
950
951 BEGIN
952 qp_bulk_loader_pub.write_log('Entering Entity_header validation');
953
954 select fnd_date.date_to_canonical(TRUNC(SYSDATE))
955 into l_start_date_active
956 from DUAL;
957
958 l_qp_pte := FND_PROFILE.VALUE('QP_PRICING_TRANSACTION_ENTITY');
959 l_qp_source_system_code := FND_PROFILE.VALUE('QP_SOURCE_SYSTEM_CODE');
960
961 l_header_flex_enabled := get_flex_enabled_flag('QP_LIST_HEADERS');
962 qp_bulk_loader_pub.write_log('Flex enabled '||l_header_flex_enabled);
963
964 FOR I IN 1..p_header_rec.orig_sys_header_ref.COUNT
965 LOOP
966
967 --Initially setting the message context.
968
969 l_msg_rec.REQUEST_ID := P_HEADER_REC.REQUEST_ID(I);
970 l_msg_rec.ENTITY_TYPE :='PRL';
971 l_msg_rec.TABLE_NAME :='QP_INTERFACE_LIST_HEADERS';
972 l_msg_rec.ORIG_SYS_HEADER_REF := nvl(p_header_rec.orig_sys_header_ref(I),p_header_rec.list_header_id(I));
973 l_msg_rec.LIST_HEADER_ID := p_header_rec.list_header_id(I);
974 l_msg_rec.ORIG_SYS_LINE_REF := NULL;
975 l_msg_rec.ORIG_SYS_QUALIFIER_REF := NULL;
976 l_msg_rec.ORIG_SYS_PRICING_ATTR_REF := NULL;
977
978 -- Populating internal fields --
979
980 IF p_header_rec.interface_action_code(I) = 'INSERT' THEN
981 Select qp_list_headers_b_s.nextval
982 into p_header_rec.list_header_id(I)
983 from dual;
984 END IF;
985
986 p_header_rec.version_no(I) := '1';
987 p_header_rec.automatic_flag(I) := 'Y';
988 p_header_rec.discount_lines_flag(I) := 'N';
989 if p_header_rec.active_flag(I) is NULL then
990 p_header_rec.active_flag(I) := 'Y';
991 end if;
992 if p_header_rec.mobile_download(I) is NULL then
993 p_header_rec.mobile_download(I) := 'N';
994 end if;
995 if p_header_rec.global_flag(I) is NULL then
996 p_header_rec.global_flag(I) := 'Y';
997 end if;
998 --source_system_code
999 IF p_header_rec.source_system_code(I) IS NULL
1000 THEN
1001 p_header_rec.source_system_code(I) := l_qp_source_system_code;
1002 if p_header_rec.source_system_code(I) is NULL then
1003 p_header_rec.source_system_code(I) := 'QP';
1004 end if;
1005 END IF;
1006 --pte_code
1007 IF p_header_rec.pte_code(I) IS NULL
1008 THEN
1009 p_header_rec.pte_code(I) := l_qp_pte;
1010 if p_header_rec.pte_code(I) is NULL then
1011 p_header_rec.pte_code(I) := 'ORDFUL';
1012 end if;
1013 END IF;
1014
1015 /*------------ Performing required field validation for ----------------------*/
1016
1017 --orig_sys_header_ref,
1018 IF p_header_rec.interface_action_code(I) = 'INSERT' THEN
1019 IF p_header_rec.orig_sys_header_ref(I) IS NULL
1020 THEN
1021
1022 p_header_rec.process_status_flag(I):=NULL; --'E';
1023
1024 FND_MESSAGE.SET_NAME('QP','QP_ATTRIBUTE_REQUIRED');
1025 FND_MESSAGE.SET_TOKEN('ATTRIBUTE','ORIG_SYS_HEADER_ID');
1026 QP_BULK_MSG.ADD(l_msg_rec);
1027
1028 END IF;
1029 END IF;
1030
1031 --List_type_code
1032
1033 IF p_header_rec.list_type_code(I) IS NULL
1034 THEN
1035 p_header_rec.list_type_code(I):= '1';
1036 P_header_rec.process_status_flag(I):=NULL; --'E';
1037
1038 FND_MESSAGE.SET_NAME('QP','QP_ATTRIBUTE_REQUIRED');
1039 FND_MESSAGE.SET_TOKEN('ATTRIBUTE','LIST_TYPE_CODE');
1040 QP_BULK_MSG.ADD(l_msg_rec);
1041
1042 END IF;
1043
1044 --currency_code
1045 IF p_header_rec.currency_code(I) IS NULL
1046 THEN
1047 p_header_rec.currency_code(I) := '1';
1048 P_header_rec.process_status_flag(I):=NULL; --'E';
1049
1050 FND_MESSAGE.SET_NAME('QP','QP_ATTRIBUTE_REQUIRED');
1051 FND_MESSAGE.SET_TOKEN('ATTRIBUTE','CURRENCY_CODE');
1052 QP_BULK_MSG.ADD(l_msg_rec);
1053 qp_bulk_loader_pub.write_log('Currency Validation failed');
1054
1055 END IF;
1056
1057 --Name
1058 IF p_header_rec.name(I) IS NULL
1059 THEN
1060 p_header_rec.name(I) := '1';
1061 p_header_rec.process_status_flag(I):=NULL; --'E';
1062
1063 FND_MESSAGE.SET_NAME('QP','QP_ATTRIBUTE_REQUIRED');
1064 FND_MESSAGE.SET_TOKEN('ATTRIBUTE','NAME');
1065 QP_BULK_MSG.ADD(l_msg_rec);
1066
1067 END IF;
1068
1069 --Rounding_factor
1070 IF p_header_rec.rounding_factor(I) IS NULL
1071 THEN
1072 p_header_rec.rounding_factor(I):= -1;
1073 P_header_rec.process_status_flag(I):=NULL;
1074
1075 FND_MESSAGE.SET_NAME('QP','QP_ATTRIBUTE_REQUIRED');
1076 FND_MESSAGE.SET_TOKEN('ATTRIBUTE','ROUNDING_FACTOR');
1077 QP_BULK_MSG.ADD(l_msg_rec);
1078
1079 END IF;
1080
1081 IF p_header_rec.interface_action_code(I) = 'INSERT' THEN
1082 -- Language
1083 IF p_header_rec.language(I) IS NULL
1084 THEN
1085 p_header_rec.language(I):= '1';
1086 P_header_rec.process_status_flag(I):=NULL;
1087
1088 FND_MESSAGE.SET_NAME('QP','QP_ATTRIBUTE_REQUIRED');
1089 FND_MESSAGE.SET_TOKEN('ATTRIBUTE','LANGUAGE');
1090 QP_BULK_MSG.ADD(l_msg_rec);
1091
1092 END IF;
1093
1094 -- Source Language
1095 IF p_header_rec.source_lang(I) IS NULL
1096 THEN
1097 p_header_rec.source_lang(I):= '1';
1098 p_header_rec.process_status_flag(I):=NULL;
1099
1100 FND_MESSAGE.SET_NAME('QP','QP_ATTRIBUTE_REQUIRED');
1101 FND_MESSAGE.SET_TOKEN('ATTRIBUTE','SOURCE_LANG');
1102 QP_BULK_MSG.ADD(l_msg_rec);
1103
1104 END IF;
1105 END IF;
1106
1107 --curency_header_id (conditionally required)
1108 If NVL(fnd_profile.value('QP_MULTI_CURRENCY_INSTALLED'), 'N') = 'Y'
1109 AND p_header_rec.currency_header_id(I) IS NULL
1110 THEN
1111
1112 p_header_rec.process_status_flag(I):=NULL;
1113 FND_MESSAGE.SET_NAME('QP','QP_MUL_CURR_REQD');
1114 QP_BULK_MSG.ADD(l_msg_rec);
1115
1116 END IF;
1117
1118
1119 -- Effective Date Check
1120
1121 -- Bug 4904393 START RAVI (5138015,5207598,5207612,5414062)
1122 /**
1123 The date entered in the interface headers should be in the canonical format
1124 YYYY/MM/DD format or an error should be thrown
1125 **/
1126 IF p_header_rec.start_date_active(I) is not null THEN
1127
1128 l_first_date_hash := null;
1129 l_second_date_hash := null;
1130 l_date_length := null;
1131
1132 begin
1133 select substr(p_header_rec.start_date_active(I),5,1)
1134 into l_first_date_hash from dual;
1135 select substr(p_header_rec.start_date_active(I),8,1)
1136 into l_second_date_hash from dual;
1137 select length(p_header_rec.start_date_active(I))
1138 into l_date_length from dual;
1139
1140 IF l_date_length<>10 or l_first_date_hash<>'/' or l_second_date_hash<>'/'
1141 THEN
1142 p_header_rec.process_status_flag(I):=NULL;
1143 FND_MESSAGE.SET_NAME('QP', 'QP_INVALID_DATE');
1144 QP_BULK_MSG.Add(l_msg_rec);
1145 END IF;
1146
1147 l_start_date := to_date(p_header_rec.start_date_active(I),'YYYY/MM/DD');
1148 exception
1149 when others then
1150 p_header_rec.process_status_flag(I):=NULL;
1151 FND_MESSAGE.SET_NAME('QP', 'QP_INVALID_DATE');
1152 QP_BULK_MSG.Add(l_msg_rec);
1153 end;
1154 END IF;
1155
1156 IF p_header_rec.end_date_active(I) is not null THEN
1157
1158 l_first_date_hash := null;
1159 l_second_date_hash := null;
1160 l_date_length := null;
1161
1162 begin
1163 select substr(p_header_rec.end_date_active(I),5,1)
1164 into l_first_date_hash from dual;
1165 select substr(p_header_rec.end_date_active(I),8,1)
1166 into l_second_date_hash from dual;
1167 select length(p_header_rec.end_date_active(I))
1168 into l_date_length from dual;
1169
1170 IF l_date_length<>10 or l_first_date_hash<>'/' or l_second_date_hash<>'/'
1171 THEN
1172 p_header_rec.process_status_flag(I):=NULL;
1173 FND_MESSAGE.SET_NAME('QP', 'QP_INVALID_DATE');
1174 QP_BULK_MSG.Add(l_msg_rec);
1175 END IF;
1176
1177 l_end_date := to_date(p_header_rec.end_date_active(I),'YYYY/MM/DD');
1178 exception
1179 when others then
1180 p_header_rec.process_status_flag(I):=NULL;
1181 FND_MESSAGE.SET_NAME('QP', 'QP_INVALID_DATE');
1182 QP_BULK_MSG.Add(l_msg_rec);
1183 end;
1184 END IF;
1185 -- Bug 4904393 END RAVI (5138015,5207598,5207612,5414062)
1186
1187 -- Bug 4929691 START RAVI (5207598,5207612)
1188 /**
1189 If start date is null set it to sysdate and then check if it's greater
1190 than end date. If it is throw an error and set the process status to null
1191 **/
1192 IF l_end_date IS NOT NULL
1193 AND l_start_date IS NOT NULL
1194 THEN
1195 IF l_start_date > l_end_date THEN
1196 p_header_rec.process_status_flag(I):=NULL;
1197 FND_MESSAGE.SET_NAME('QP', 'QP_STRT_DATE_BFR_END_DATE');
1198 QP_BULK_MSG.Add(l_msg_rec);
1199 END IF;
1200 END IF;
1201 -- Bug 4929691 END RAVI (5207598,5207612)
1202
1203 -- Rounding factor value check
1204 l_unit_precision_type := FND_PROFILE.VALUE('QP_UNIT_PRICE_PRECISION_TYPE');
1205 l_price_rounding := fnd_profile.value('QP_PRICE_ROUNDING');
1206
1207 IF p_header_rec.currency_code(I) is not null THEN
1208 BEGIN
1209 SELECT -1*PRECISION, -1*EXTENDED_PRECISION
1210 INTO l_precision, l_extended_precision
1211 FROM FND_CURRENCIES
1212 WHERE CURRENCY_CODE = P_header_rec.CURRENCY_CODE(I);
1213 EXCEPTION
1214 WHEN NO_DATA_FOUND THEN
1215 p_header_rec.process_status_flag(I):=NULL;
1216 FND_MESSAGE.SET_NAME('QP','QP_INVALID_ATTRIBUTE');
1217 FND_MESSAGE.SET_TOKEN('ATTRIBUTE','rounding_factor');
1218 qp_bulk_msg.add(l_msg_rec);
1219 END;
1220 END IF;
1221
1222 IF p_header_rec.rounding_factor(I) IS NOT NULL
1223 THEN
1224
1225 IF l_unit_precision_type = 'STANDARD' THEN
1226
1227 IF l_price_rounding = 'PRECISION' THEN
1228 IF p_header_rec.rounding_factor(I) <> l_precision THEN
1229 p_header_rec.process_status_flag(I):=NULL;
1230 FND_MESSAGE.SET_NAME('QP', 'QP_ROUNDING_FACTOR_NO_UPDATE');
1231 qp_bulk_msg.add(l_msg_rec);
1232 END IF;
1233 END IF;
1234
1235 IF (p_header_rec.rounding_factor(I))
1236 < nvl((l_precision), (p_header_rec.rounding_factor(I))) THEN
1237 p_header_rec.process_status_flag(I):=NULL;
1238 FND_MESSAGE.SET_NAME('QP', 'OE_PRL_INVALID_ROUNDING_FACTOR');
1239 FND_MESSAGE.SET_TOKEN('PRECISION', l_precision);
1240 qp_bulk_msg.add(l_msg_rec);
1241 END IF;
1242
1243 ELSE
1244 IF l_price_rounding = 'PRECISION' THEN
1245 IF p_header_rec.rounding_factor(I) <> l_extended_precision THEN
1246 p_header_rec.process_status_flag(I):=NULL;
1247 FND_MESSAGE.SET_NAME('QP', 'QP_ROUNDING_FACTOR_NO_UPDATE');
1248 qp_bulk_msg.add(l_msg_rec);
1249 END IF;
1250 END IF;
1251
1252 IF (p_header_rec.rounding_factor(I))
1253 < nvl((l_extended_precision),(p_header_rec.rounding_factor(I))) THEN
1254 p_header_rec.process_status_flag(I):=NULL;
1255 FND_MESSAGE.SET_NAME('QP', 'OE_PRL_INVALID_ROUNDING_FACTOR');
1256 FND_MESSAGE.SET_TOKEN('PRECISION', l_extended_precision);
1257 qp_bulk_msg.add(l_msg_rec);
1258 END IF;
1259 END IF;
1260
1261 END IF;
1262 -- end rounding_factor
1263
1264 /*-------checking for the value of the flags ----------------------------
1265 --active_flag
1266 --automatic_flag
1267 --mobile_download
1268 --global_flag
1269 -------------------------------------------------------------------------*/
1270
1271 IF ( p_header_rec.active_flag(I) IS NOT NULL)
1272 THEN
1273 IF p_header_rec.active_flag(I) NOT IN ('Y', 'N', 'y', 'n')
1274 THEN
1275 p_header_rec.process_status_flag(I):=NULL;
1276 FND_MESSAGE.SET_NAME('QP','QP_INVALID_ATTRIBUTE');
1277 FND_MESSAGE.SET_TOKEN('ATTRIBUTE','active_flag');
1278 qp_bulk_msg.add(l_msg_rec);
1279 END IF;
1280 END IF;
1281
1282 IF ( p_header_rec.automatic_flag(I) IS NOT NULL)
1283 THEN
1284 IF p_header_rec.automatic_flag(I) NOT IN ('Y', 'N', 'y', 'n')
1285 THEN
1286 p_header_rec.process_status_flag(I):=NULL;
1287 FND_MESSAGE.SET_NAME('QP','QP_INVALID_ATTRIBUTE');
1288 FND_MESSAGE.SET_TOKEN('ATTRIBUTE','automatic_flag');
1289 qp_bulk_msg.add(l_msg_rec);
1290 END IF;
1291 END IF;
1292
1293 IF p_header_rec.global_flag(I) NOT IN ('Y', 'N', 'n')
1294 THEN
1295 p_header_rec.process_status_flag(I):=NULL;
1296 FND_MESSAGE.SET_NAME('QP','QP_INVALID_ATTRIBUTE');
1297 FND_MESSAGE.SET_TOKEN('ATTRIBUTE','global_flag');
1298 qp_bulk_msg.add(l_msg_rec);
1299 END IF;
1300
1301 --added for MOAC
1302 l_security_profile := QP_SECURITY.security_on;
1303
1304 IF ( p_header_rec.global_flag(I) IS NOT NULL)
1305 THEN
1306
1307 --if security is OFF, global_flag cannot be 'N'
1308 IF (l_security_profile = 'N'
1309 and p_header_rec.global_flag(I) in ('N', 'n')) THEN
1310 p_header_rec.process_status_flag(I):=NULL;
1311 FND_MESSAGE.SET_NAME('QP','QP_INVALID_ATTRIBUTE');
1312 FND_MESSAGE.SET_TOKEN('ATTRIBUTE','global_flag');
1313 qp_bulk_msg.add(l_msg_rec);
1314 END IF;
1315
1316 IF l_security_profile = 'Y' THEN
1317 --if security is ON and global_flag is 'N', orig_org_id cannot be null
1318 IF (p_header_rec.global_flag(I) in ('N', 'n')
1319 -- Bug 4947191 RAVI
1320 /**
1321 if security is ON and global_flag is 'N', orig_org_id cannot be null
1322 **/
1323 and p_header_rec.orig_org_id(I) is null) THEN
1324 p_header_rec.process_status_flag(I):=NULL;
1325 FND_MESSAGE.SET_NAME('QP','QP_ATTRIBUTE_REQUIRED');
1326 FND_MESSAGE.SET_TOKEN('ATTRIBUTE','ORIG_ORG_ID');
1327 qp_bulk_msg.add(l_msg_rec);
1328
1329 END IF;
1330
1331 /* for bug 4731613 moved this validation to attribute_header procedure
1332 --if orig_org_id is not null and it is not a valid org
1333 IF (p_header_rec.orig_org_id(I) is not null
1334 and QP_UTIL.validate_org_id(p_header_rec.orig_org_id(I)) = 'N') THEN
1335 p_header_rec.process_status_flag(I):=NULL;
1336 FND_MESSAGE.SET_NAME('FND','FND_MO_ORG_INVALID');
1337 -- FND_MESSAGE.SET_TOKEN('ATTRIBUTE','orig_org_id');
1338 qp_bulk_msg.add(l_msg_rec);
1339 END IF;
1340 */
1341 END IF;--IF l_security_profile = 'Y'
1342
1343 --global_flag 'Y', org_id not null combination is invalid
1344 IF ((p_header_rec.global_flag(I) = 'Y'
1345 and p_header_rec.orig_org_id(I) is not null) OR (p_header_rec.global_flag(I) = 'N' and p_header_rec.orig_org_id(I) is null)) THEN
1346 p_header_rec.process_status_flag(I):=NULL;
1347 FND_MESSAGE.SET_NAME('QP', 'QP_GLOBAL_OU_VALIDATION');
1348 qp_bulk_msg.add(l_msg_rec);
1349 END IF;--p_header_rec.global_flag
1350 END IF;
1351 --end validations for moac
1352
1353 IF ( p_header_rec.mobile_download(I) IS NOT NULL)
1354 THEN
1355 IF p_header_rec.mobile_download(I) NOT IN ('Y', 'N', 'y', 'n')
1356 THEN
1357 p_header_rec.process_status_flag(I):=NULL;
1358 FND_MESSAGE.SET_NAME('QP','QP_INVALID_ATTRIBUTE');
1359 FND_MESSAGE.SET_TOKEN('ATTRIBUTE','mobile_download');
1360 qp_bulk_msg.add(l_msg_rec);
1361 END IF;
1362 END IF;
1363
1364 --Checking for uniqueness of the Name in qp_list_headers.
1365 l_exist:=null;
1366 Begin
1367 Select 1 into l_exist
1368 from qp_list_headers_tl
1369 where name= p_header_rec.name(I)
1370 and list_header_id <>
1371 (select list_header_id From qp_list_headers_b
1372 -- ENH unod alcoa changes RAVI
1373 /**
1374 The key between interface and qp tables is only orig_sys_hdr_ref
1375 (not list_header_id)
1376 **/
1377 where orig_system_header_ref =p_header_rec.orig_sys_header_ref(I)
1378 and nvl(list_source_code,'*') =nvl(p_header_rec.list_source_code(I),'*')
1379 )
1380 and language = userenv('LANG');
1381
1382 Exception
1383 When no_data_found then
1384 l_exist := 0;
1385 End;
1386
1387 If l_exist = 1 THEN
1388 p_header_rec.process_status_flag(I):=NULL;
1389 fnd_message.set_name('QP', 'SO_OTHER_NAME_ALREADY_IN_USE');
1390 qp_bulk_msg.add(l_msg_rec);
1391 END IF;
1392
1393 l_exist := NULL;
1394
1395 IF p_header_rec.interface_action_code(I) = 'INSERT' THEN
1396 Select count(*) into l_exist
1397 from qp_interface_list_headers
1398 where request_id = p_header_rec.request_id(I)
1399 and name = p_header_rec.name(I)
1400 and orig_sys_header_ref <> p_header_rec.orig_sys_header_ref(I)
1401 and process_status_flag = 'P'; --is null;
1402
1403 IF l_exist >0 THEN
1404 p_header_rec.process_status_flag(I):=NULL;
1405 fnd_message.set_name('QP', 'SO_OTHER_NAME_ALREADY_IN_USE');
1406 qp_bulk_msg.add(l_msg_rec);
1407 END IF;
1408 END IF;
1409
1410 --Checking for uniqueness of orig_sys_header_ref in qp_list_headers
1411 --and qp_interface_list_headers
1412
1413 l_exist := NULL;
1414
1415 BEGIN
1416 select 1, list_header_id into l_exist, l_list_header_id
1417 from qp_list_headers_b
1418 -- ENH unod alcoa changes START RAVI
1419 /**
1420 The key between interface and qp tables is only orig_sys_hdr_ref
1421 (not list_header_id)
1422 **/
1423 where orig_system_header_ref = p_header_rec.orig_sys_header_ref(I)
1424 and nvl(list_source_code,'*') =nvl(p_header_rec.list_source_code(I),'*');
1425 EXCEPTION
1426 When no_data_found then
1427 l_exist := 0;
1428 END;
1429
1430 IF p_header_rec.interface_action_code(I) = 'INSERT' AND l_exist =1 THEN
1431 p_header_rec.process_status_flag(I):=NULL;
1432 fnd_message.set_name('QP', 'ORIG_SYS_HEADER_REF_NOT_UNIQUE');
1433 FND_MESSAGE.SET_TOKEN('REF_NO', p_header_rec.orig_sys_header_ref(I));
1434 FND_MESSAGE.SET_TOKEN('LS_CODE', p_header_rec.list_source_code(I));
1435 qp_bulk_msg.add(l_msg_rec);
1436 ELSIF p_header_rec.interface_action_code(I) = 'UPDATE' AND l_exist =0 THEN
1437 p_header_rec.process_status_flag(I):=NULL;
1438 fnd_message.set_name('QP', 'HEADER_RECORD_DOES_NOT_EXIST');
1439 FND_MESSAGE.SET_TOKEN('REF_NO', p_header_rec.orig_sys_header_ref(I));
1440 FND_MESSAGE.SET_TOKEN('LS_CODE', p_header_rec.list_source_code(I));
1441 qp_bulk_msg.add(l_msg_rec);
1442 END IF;
1443
1444 --bug 6961376 start
1445
1446 IF p_header_rec.list_header_id(I) IS NULL THEN
1447 l_header_id_null := 'Y';
1448 ELSE
1449 l_header_id_null := 'N';
1450 END IF;
1451 qp_bulk_loader_pub.write_log('Is Header Id null: ' || l_header_id_null);
1452
1453
1454 IF p_header_rec.interface_action_code(I) = 'UPDATE'
1455 AND p_header_rec.list_header_id(I) IS NULL
1456 AND l_exist =1 THEN
1457 p_header_rec.list_header_id(I):=l_list_header_id;
1458 END IF;
1459
1460 l_exist:= NULL;
1461
1462 IF p_header_rec.interface_action_code(I) = 'INSERT' THEN
1463 select count(*) into l_exist
1464 from qp_interface_list_headers
1465 where request_id =p_header_rec.request_id(I)
1466 and (list_header_id = p_header_rec.list_header_id(I) or
1467 orig_sys_header_ref = p_header_rec.orig_sys_header_ref(I))
1468 and nvl(list_source_code,'*') =nvl(p_header_rec.list_source_code(I),'*');
1469
1470 IF l_exist >1 THEN
1471 qp_bulk_loader_pub.write_log('Entity Header l_exist of orig is: '||l_exist);
1472 p_header_rec.process_status_flag(I):=NULL;
1473 fnd_message.set_name('QP','ORIG_SYS_HEADER_REF_NOT_UNIQUE');
1474 FND_MESSAGE.SET_TOKEN('REF_NO', p_header_rec.orig_sys_header_ref(I));
1475 FND_MESSAGE.SET_TOKEN('LS_CODE', p_header_rec.list_source_code(I));
1476 qp_bulk_msg.add(l_msg_rec);
1477 END IF;
1478 ELSIF p_header_rec.interface_action_code(I) = 'UPDATE' AND l_header_id_null = 'N' THEN
1479 qp_bulk_loader_pub.write_log('checking for unique orig_sys_header_ref: ' || p_header_rec.orig_sys_header_ref(I));
1480 select count(distinct list_header_id) into l_exist
1481 from qp_interface_list_headers
1482 where request_id =p_header_rec.request_id(I)
1483 and orig_sys_header_ref = p_header_rec.orig_sys_header_ref(I)
1484 and nvl(list_source_code,'*') =nvl(p_header_rec.list_source_code(I),'*');
1485 /* 1749 to 1764 commented to for the bug number 6961376 as the bug 3604226 and bug 6961376 are raised for the same problem and the fix for the
1486 bug 6961376 is giving better result than the bug 3604226 we commented these lines and incorporated the new code */
1487
1488 /* select count(*) into l_exist
1489 from qp_interface_list_headers
1490 where request_id =p_header_rec.request_id(I)
1491 -- Bug 3604226 RAVI
1492 /**
1493 Multiple headers for insert or delete action with same orig_sys_hdr_ref
1494 are not allowed
1495 **/
1496 -- and p_header_rec.interface_action_code(I) <> 'UPDATE'
1497 -- ENH undo alcoa changes RAVI
1498 /**
1499 The key between interface and qp tables is only orig_sys_hdr_ref
1500 (not list_header_id)
1501 **/
1502 -- and orig_sys_header_ref = p_header_rec.orig_sys_header_ref(I)
1503 -- and nvl(list_source_code,'*') =nvl(p_header_rec.list_source_code(I),'*'); */
1504
1505
1506 IF l_exist >1 THEN
1507 qp_bulk_loader_pub.write_log('Entity Header l_exist of orig is: '||l_exist);
1508 p_header_rec.process_status_flag(I):=NULL;
1509 fnd_message.set_name('QP','ORIG_SYS_HEADER_REF_NOT_UNIQUE');
1510 FND_MESSAGE.SET_TOKEN('REF_NO', p_header_rec.orig_sys_header_ref(I));
1511 FND_MESSAGE.SET_TOKEN('LS_CODE', p_header_rec.list_source_code(I));
1512 qp_bulk_msg.add(l_msg_rec);
1513 END IF;
1514 END IF;
1515 --bug 6961376 end
1516
1517 --QP_Security_check
1518 IF p_header_rec.interface_action_code(I) = 'UPDATE' THEN
1519 qp_bulk_loader_pub.write_log('Secu. Check list_header_id: '||to_char(p_header_rec.list_header_id(I)));
1520 IF QP_security.check_function( p_function_name => QP_Security.G_FUNCTION_UPDATE,
1521 p_instance_type => QP_Security.G_PRICELIST_OBJECT,
1522 p_instance_pk1 => p_header_rec.list_header_id(I)) <> 'T' THEN
1523 p_header_rec.process_status_flag(I):=NULL;
1524 fnd_message.set_name('QP', 'QP_NO_PRIVILEGE');
1525 fnd_message.set_token('PRICING_OBJECT', 'Price List');
1526 qp_bulk_msg.add(l_msg_rec);
1527 END IF;
1528 END IF;
1529
1530 --Defaulting
1531 -- Basic_Pricing_Condition
1532 IF (QP_BULK_LOADER_PUB.GET_QP_STATUS <> 'I' OR
1533 FND_PROFILE.VALUE('QP_MULTI_CURRENCY_INSTALLED') = 'N')
1534 AND p_header_rec.currency_header_id(I) IS NOT NULL THEN
1535 -- No multi currency in Basic Pricing
1536 p_header_rec.currency_header_id(I) := NULL;
1537 END IF;
1538
1539 --Flex field check
1540
1541 IF l_header_flex_enabled = 'Y' THEN
1542 qp_bulk_loader_pub.write_log( 'Header Flex enabled ');
1543
1544 IF NOT Init_Desc_Flex
1545 (p_flex_name =>'QP_LIST_HEADERS'
1546 ,p_context => p_header_rec.context(i)
1547 ,p_attribute1 => p_header_rec.attribute1(i)
1548 ,p_attribute2 => p_header_rec.attribute2(i)
1549 ,p_attribute3 => p_header_rec.attribute3(i)
1550 ,p_attribute4 => p_header_rec.attribute4(i)
1551 ,p_attribute5 => p_header_rec.attribute5(i)
1552 ,p_attribute6 => p_header_rec.attribute6(i)
1553 ,p_attribute7 => p_header_rec.attribute7(i)
1554 ,p_attribute8 => p_header_rec.attribute8(i)
1555 ,p_attribute9 => p_header_rec.attribute9(i)
1556 ,p_attribute10 => p_header_rec.attribute10(i)
1557 ,p_attribute11 => p_header_rec.attribute11(i)
1558 ,p_attribute12 => p_header_rec.attribute12(i)
1559 ,p_attribute13 => p_header_rec.attribute13(i)
1560 ,p_attribute14 => p_header_rec.attribute14(i)
1561 ,p_attribute15 => p_header_rec.attribute15(i)) THEN
1562
1563 QP_BULK_MSG.ADD(l_msg_rec);
1564
1565 -- Log Error Message
1566 FND_MESSAGE.SET_NAME('QP','QP_INVALID_ATTRIBUTE');
1567 FND_MESSAGE.SET_TOKEN('ATTRIBUTE',
1568 'Entity:Flexfield:Header_Desc_Flex');
1569 P_header_rec.process_status_flag(I):=NULL;
1570
1571 QP_BULK_MSG.ADD(l_msg_rec);
1572
1573 ELSE -- if the flex validation is successfull
1574
1575 IF p_header_rec.context(i) IS NULL
1576 OR p_header_rec.context(i) = FND_API.G_MISS_CHAR THEN
1577 p_header_rec.context(i) := g_context;
1578 END IF;
1579
1580 IF p_header_rec.attribute1(i) IS NULL
1581 OR p_header_rec.attribute1(i) = FND_API.G_MISS_CHAR THEN
1582 p_header_rec.attribute1(i) := g_attribute1;
1583 END IF;
1584
1585 IF p_header_rec.attribute2(i) IS NULL
1586 OR p_header_rec.attribute2(i) = FND_API.G_MISS_CHAR THEN
1587 p_header_rec.attribute2(i) := g_attribute2;
1588 END IF;
1589
1590 IF p_header_rec.attribute3(i) IS NULL
1591 OR p_header_rec.attribute3(i) = FND_API.G_MISS_CHAR THEN
1592 p_header_rec.attribute3(i) := g_attribute3;
1593 END IF;
1594
1595 IF p_header_rec.attribute4(i) IS NULL
1596 OR p_header_rec.attribute4(i) = FND_API.G_MISS_CHAR THEN
1597 p_header_rec.attribute4(i) := g_attribute4;
1598 END IF;
1599
1600 IF p_header_rec.attribute5(i) IS NULL
1601 OR p_header_rec.attribute5(i) = FND_API.G_MISS_CHAR THEN
1602 p_header_rec.attribute5(i) := g_attribute5;
1603 END IF;
1604
1605 IF p_header_rec.attribute6(i) IS NULL
1606 OR p_header_rec.attribute6(i) = FND_API.G_MISS_CHAR THEN
1607 p_header_rec.attribute6(i) := g_attribute6;
1608 END IF;
1609 IF p_header_rec.attribute7(i) IS NULL
1610 OR p_header_rec.attribute7(i) = FND_API.G_MISS_CHAR THEN
1611 p_header_rec.attribute7(i) := g_attribute7;
1612 END IF;
1613
1614 IF p_header_rec.attribute8(i) IS NULL
1615 OR p_header_rec.attribute8(i) = FND_API.G_MISS_CHAR THEN
1616 p_header_rec.attribute8(i) := g_attribute8;
1617 END IF;
1618
1619 IF p_header_rec.attribute9(i) IS NULL
1620 OR p_header_rec.attribute9(i) = FND_API.G_MISS_CHAR THEN
1621 p_header_rec.attribute9(i) := g_attribute9;
1622 END IF;
1623
1624 IF p_header_rec.attribute10(i) IS NULL
1625 OR p_header_rec.attribute10(i) = FND_API.G_MISS_CHAR THEN
1626 p_header_rec.attribute10(i) := G_attribute10;
1627 End IF;
1628
1629 IF p_header_rec.attribute11(i) IS NULL
1630 OR p_header_rec.attribute11(i) = FND_API.G_MISS_CHAR THEN
1631 p_header_rec.attribute11(i) := g_attribute11;
1632 END IF;
1633
1634 IF p_header_rec.attribute12(i) IS NULL
1635 OR p_header_rec.attribute12(i) = FND_API.G_MISS_CHAR THEN
1636 p_header_rec.attribute12(i) := g_attribute12;
1637 END IF;
1638
1639 IF p_header_rec.attribute13(i) IS NULL
1640 OR p_header_rec.attribute13(i) = FND_API.G_MISS_CHAR THEN
1641 p_header_rec.attribute13(i) := g_attribute13;
1642 END IF;
1643
1644 IF p_header_rec.attribute14(i) IS NULL
1645 OR p_header_rec.attribute14(i) = FND_API.G_MISS_CHAR THEN
1646 p_header_rec.attribute14(i) := g_attribute14;
1647 END IF;
1648
1649 IF p_header_rec.attribute15(i) IS NULL
1650 OR p_header_rec.attribute15(i) = FND_API.G_MISS_CHAR THEN
1651 p_header_rec.attribute15(i) := g_attribute15;
1652 END IF;
1653 END IF;
1654 END IF; --l_header_flex_enabled = 'Y'
1655
1656 --start_date_active
1657 -- bug 4510489
1658 /*
1659 IF p_header_rec.start_date_active(I) IS NULL
1660 AND (p_header_rec.end_date_active(I) IS NULL or
1661 to_date(p_header_rec.end_date_active(I), 'MM/DD/YYYY') <= to_date(l_start_date_active, 'MM/DD/YYYY'))
1662 THEN
1663 p_header_rec.start_date_active(I) := l_start_date_active;
1664 END IF;
1665 */
1666
1667
1668 -- Updation check
1669 --cannot update Source system code, pte code
1670 IF p_header_rec.interface_action_code(I) = 'UPDATE'
1671 AND p_header_rec.process_status_flag(I) = 'P' THEN
1672
1673 qp_bulk_loader_pub.write_log( 'Update header no: '||to_char(l_list_header_id));
1674 l_old_PRICE_LIST_rec := QP_Price_List_Util.Query_Row
1675 ( p_list_header_id => l_list_header_id
1676 );
1677
1678 qp_bulk_loader_pub.write_log( 'Update source_system_code : '||l_old_price_list_rec.source_system_code);
1679 qp_bulk_loader_pub.write_log( 'Update pte_code : '||l_old_price_list_rec.pte_code);
1680 IF l_old_price_list_rec.source_system_code <> p_header_rec.source_system_code(I) or
1681 l_old_price_list_rec.pte_code <> p_header_rec.pte_code(I) THEN
1682 p_header_rec.process_status_flag(I):=NULL;
1683 fnd_message.set_name('QP', 'QP_NO_UPDATE_ATTRIBUTE');
1684 fnd_message.set_token('ATTRIBUTE', 'Source System Code / PTE Code');
1685 qp_bulk_msg.add(l_msg_rec);
1686 END IF;
1687 END IF;
1688
1689 END LOOP;
1690
1691 qp_bulk_loader_pub.write_log('Leaving Entity_header validation');
1692
1693 EXCEPTION
1694 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
1695 qp_bulk_loader_pub.write_log( 'UNEXCPECTED ERROR IN PROCEDURE ENTITY_HEADER:'||sqlerrm);
1696 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1697 WHEN OTHERS THEN
1698 qp_bulk_loader_pub.write_log( 'UNEXCPECTED ERROR IN PROCEDURE ENTITY_HEADER:'||sqlerrm);
1699 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1700 END ENTITY_HEADER;
1701
1702
1703 PROCEDURE ENTITY_LINE
1704 (P_LINE_REC IN OUT NOCOPY QP_BULK_LOADER_PUB.LINE_REC_TYPE)
1705
1706 IS
1707 l_msg_rec QP_BULK_MSG.Msg_Rec_Type;
1708 l_dummy NUMBER;
1709 l_dummy_1 NUMBER;
1710 l_exist NUMBER;
1711 l_pb_type_code QP_LIST_LINES.price_break_type_code%type;
1712 l_art_opr QP_LIST_LINES.arithmetic_operator%type;
1713 l_list_header_id NUMBER:=null;
1714 l_orig_sys_header_ref VARCHAR2(50) := NULL;
1715 l_start_date date;
1716 l_line_flex_enabled VARCHAR2(1);
1717
1718 --Bug 5246745 RAVI
1719 l_header_start_date DATE;
1720 l_header_end_date DATE;
1721
1722 --Bug 5246745 RAVI
1723 l_servicable_item Varchar2(1) := 'N';
1724
1725 --Bug 5246745 RAVI
1726 l_PBH_start_date DATE;
1727 l_PBH_end_date DATE;
1728
1729 BEGIN
1730
1731 qp_bulk_loader_pub.write_log('Entering Entity Line');
1732
1733 l_line_flex_enabled := get_flex_enabled_flag('QP_LIST_LINES');
1734 qp_bulk_loader_pub.write_log('Flex enabled '||l_line_flex_enabled);
1735
1736 FOR I IN 1..p_line_rec.orig_sys_line_ref.count
1737 LOOP
1738
1739 --Initially setting the message context.
1740 --qp_bulk_loader_pub.write_log(' In the loop');
1741 l_msg_rec.REQUEST_ID := P_LINE_REC.REQUEST_ID(i);
1742 l_msg_rec.ENTITY_TYPE :='PRL';
1743 l_msg_rec.TABLE_NAME :='QP_INTERFACE_LIST_LINES';
1744 l_msg_rec.ORIG_SYS_HEADER_REF := p_line_rec.orig_sys_header_ref(I);
1745 l_msg_rec.ORIG_SYS_LINE_REF := p_line_rec.orig_sys_line_ref(I);
1746 l_msg_rec.ORIG_SYS_QUALIFIER_REF := NULL;
1747 l_msg_rec.ORIG_SYS_PRICING_ATTR_REF := NULL;
1748
1749 /*-- populating some internal fields --*/
1750 If p_line_rec.interface_action_code(I)='INSERT' THEN
1751 select qp_list_lines_s.nextval
1752 into p_line_rec.list_line_id(I)
1753 from dual;
1754 end if;
1755 p_line_rec.list_line_no(I):= p_line_rec.list_line_id(I);
1756 p_line_rec.pricing_phase_id(I) := 1;
1757 p_line_rec.automatic_flag(I) := 'Y';
1758 p_line_rec.modifier_level_code(I) := 'LINE';
1759 p_line_rec.incompatibility_grp_code(I) := 'EXCL';
1760
1761 IF l_orig_sys_header_ref IS NULL or
1762 l_orig_sys_header_ref <> p_line_rec.orig_sys_header_ref(I) THEN
1763 Begin
1764 select list_header_id, start_date_active
1765 into p_line_rec.list_header_id(I), l_start_date
1766 from qp_list_headers_b
1767 where orig_system_header_ref = p_line_rec.orig_sys_header_ref(I);
1768 Exception
1769 When no_data_found then
1770 p_line_rec.list_header_id(I) := -1;
1771 p_line_rec.process_status_flag(I):=NULL;
1772 fnd_message.set_name('QP', 'QP_INVALID_HEADER_REF');
1773 FND_MESSAGE.SET_TOKEN('REF_NO', p_line_rec.orig_sys_header_ref(I));
1774 FND_MESSAGE.SET_TOKEN('LS_CODE', NULL);
1775 qp_bulk_msg.add(l_msg_rec);
1776 End;
1777 IF p_line_rec.list_header_id(I) IS NOT NULL or
1778 p_line_rec.list_header_id(I) <> 0 THEN
1779 l_list_header_id := p_line_rec.list_header_id(I);
1780 l_orig_sys_header_ref := p_line_rec.orig_sys_header_ref(I);
1781 ELSE
1782 l_list_header_id := NULL;
1783 l_orig_sys_header_ref := NULL;
1784 END IF;
1785 ELSE
1786 p_line_rec.list_header_id(I) := l_list_header_id;
1787 END IF;
1788 qp_bulk_loader_pub.write_log('Line Start date active'||to_char(l_start_date));
1789
1790 /*------- Performing required field validation for ---------*/
1791
1792 --1.orig_sys_line_ref,
1793 IF p_line_rec.orig_sys_line_ref(I) IS NULL
1794 THEN
1795 p_line_rec.process_status_flag(I):=NULL;
1796 fnd_message.set_name('QP', 'QP_ATTRIBUTE_REQUIRED');
1797 fnd_message.set_token('ATTRIBUTE', 'ORIG_SYS_LINE_REF');
1798 qp_bulk_msg.add(l_msg_rec);
1799 END IF;
1800
1801 --Bug#5359974 RAVI START
1802 --The continuous PB flag set to 'Y' if the line is PBH
1803 --1.1 continuous_price_break_flag
1804 IF p_line_rec.list_line_type_code(I)='PBH'
1805 THEN
1806 p_line_rec.continuous_price_break_flag(I):= 'Y';
1807 END IF;
1808 --Bug#5359974 RAVI END
1809
1810 --2.List Line Type Code
1811 IF p_line_rec.list_line_type_code(I) IS NULL
1812 THEN
1813 p_line_rec.list_line_type_code(I):= '1';
1814 p_line_rec.process_status_flag(I):=NULL;
1815 fnd_message.set_name('QP', 'QP_ATTRIBUTE_REQUIRED');
1816 fnd_message.set_token('ATTRIBUTE', 'LIST_LINE_TYPE_CODE');
1817 qp_bulk_msg.add(l_msg_rec);
1818 END IF;
1819
1820 IF p_line_rec.list_line_type_code(I) <>'PLL' AND p_line_rec.list_line_type_code(I)<>'PBH' THEN
1821 p_line_rec.process_status_flag(I):=NULL;
1822 fnd_message.set_name('QP', 'QP_INVALID_ATTRIBUTE');
1823 fnd_message.set_token('ATTRIBUTE', 'LIST_LINE_TYPE_CODE');
1824 qp_bulk_msg.add(l_msg_rec);
1825 END IF;
1826
1827 --3. Arithmetic Operator
1828 IF p_line_rec.arithmetic_operator(I) IS NULL
1829 THEN
1830 p_line_rec.arithmetic_operator(I):= '1';
1831 p_line_rec.process_status_flag(I):=NULL;
1832 fnd_message.set_name('QP', 'QP_ATTRIBUTE_REQUIRED');
1833 fnd_message.set_token('ATTRIBUTE', 'ARITHMETIC_OPERATOR1');
1834 qp_bulk_msg.add(l_msg_rec);
1835 ELSE
1836 IF p_line_rec.arithmetic_operator(I) = 'BLOCK_PRICE' AND
1837 p_line_rec.list_line_type_code(I) <> 'PBH' AND
1838 p_line_rec.price_break_header_ref(I) IS NULL THEN
1839 p_line_rec.arithmetic_operator(I):= '1';
1840 p_line_rec.process_status_flag(I):=NULL;
1841 FND_MESSAGE.SET_NAME('QP', 'QP_INVALID_ATTRIBUTE');
1842 fnd_message.set_token('ATTRIBUTE', 'ARITHMETIC_OPERATOR 2');
1843 qp_bulk_msg.add(l_msg_rec);
1844 END IF;
1845 IF p_line_rec.arithmetic_operator(I) = 'BREAKUNIT_PRICE' THEN
1846 IF p_line_rec.list_line_type_code(I) = 'PLL' AND
1847 p_line_rec.price_break_header_ref(I) IS NOT NULL THEN
1848 NULL;
1849 ELSE
1850 p_line_rec.arithmetic_operator(I):= '1';
1851 p_line_rec.process_status_flag(I):=NULL;
1852 FND_MESSAGE.SET_NAME('QP', 'QP_INVALID_ATTRIBUTE');
1853 fnd_message.set_token('ATTRIBUTE', 'ARITHMETIC_OPERATOR 3');
1854 qp_bulk_msg.add(l_msg_rec);
1855 END IF;
1856 END IF;
1857 --End arithemetic operator check
1858
1859 -- Bug# 5246745 RAVI START
1860 --Check if item is servicable
1861 IF p_line_rec.arithmetic_operator(I) = 'PERCENT_PRICE' THEN
1862 qp_bulk_loader_pub.write_log('Percent Price - arithmetic operator check');
1863 l_exist :=0;
1864
1865 begin
1866 select count(*) into l_exist
1867 from qp_interface_pricing_attribs qipa, mtl_system_items_vl msiv
1868 where qipa.orig_sys_line_ref = p_line_rec.orig_sys_line_ref(I)
1869 and qipa.request_id = p_line_rec.request_id(I)
1870 and qipa.product_attribute_context = 'ITEM'
1871 and qipa.product_attribute = 'PRICING_ATTRIBUTE1'
1872 and msiv.inventory_item_id = to_number(qipa.PRODUCT_ATTR_VALUE)
1873 and msiv.organization_id = fnd_profile.value('QP_ORGANIZATION_ID')
1874 and msiv.service_item_flag = 'Y'
1875 and qipa.interface_action_code in ('INSERT','UPDATE');
1876 exception
1877 when NO_DATA_FOUND then
1878 l_exist := 0;
1879 end;
1880
1881 if l_exist=0 then
1882 begin
1883 select count(*) into l_exist
1884 from qp_pricing_attributes qpa, mtl_system_items_vl msiv
1885 where qpa.orig_sys_line_ref = p_line_rec.orig_sys_line_ref(I)
1886 -- Bug 5246745 Use Composite Index for Ref columns
1887 and qpa.orig_sys_header_ref = p_line_rec.orig_sys_header_ref(I)
1888 and qpa.product_attribute_context = 'ITEM'
1889 and qpa.product_attribute = 'PRICING_ATTRIBUTE1'
1890 and msiv.inventory_item_id = to_number(qpa.PRODUCT_ATTR_VALUE)
1891 and msiv.organization_id = fnd_profile.value('QP_ORGANIZATION_ID')
1892 and msiv.service_item_flag = 'Y'
1893 and qpa.orig_sys_pricing_attr_ref not in (
1894 select qpa.orig_sys_pricing_attr_ref
1895 from qp_interface_pricing_attribs qipa
1896 where qipa.orig_sys_pricing_attr_ref = qpa.orig_sys_pricing_attr_ref
1897 and qipa.interface_action_code = 'DELETE'
1898 and qipa.request_id = p_line_rec.request_id(I));
1899 exception
1900 when NO_DATA_FOUND then
1901 l_exist := 0;
1902 end;
1903 end if;
1904
1905 if l_exist = 0 then
1906 p_line_rec.arithmetic_operator(I):= '1';
1907 p_line_rec.process_status_flag(I):=NULL;
1908 FND_MESSAGE.SET_NAME('QP', 'QP_INVALID_ATTRIBUTE');
1909 fnd_message.set_token('ATTRIBUTE', 'ARITHMETIC_OPERATOR 4');
1910 qp_bulk_msg.add(l_msg_rec);
1911 else
1912 l_servicable_item := 'Y';
1913 end if;
1914 END IF;
1915 END IF; --End arithemetic operator check
1916
1917 qp_bulk_loader_pub.write_log('After required field check');
1918
1919 -- Uniqueness of orig_sys_line_ref
1920 l_exist := 0;
1921
1922 qp_bulk_loader_pub.write_log('Header ref'|| p_line_rec.orig_sys_header_ref(I));
1923 qp_bulk_loader_pub.write_log('Line ref'|| p_line_rec.orig_sys_line_ref(I));
1924
1925 BEGIN
1926 select count(*) into l_exist
1927 from qp_list_lines
1928 where orig_sys_line_ref = p_line_rec.orig_sys_line_ref(I)
1929 and orig_sys_header_ref = p_line_rec.orig_sys_header_ref(I) ;
1930
1931 EXCEPTION
1932 When no_data_found then
1933 l_exist := 0;
1934 END;
1935
1936 If p_line_rec.interface_action_code(I)='INSERT' AND l_exist >= 1 THEN
1937 p_line_rec.process_status_flag(I):=NULL;
1938 fnd_message.set_name('QP', 'ORIG_SYS_LINE_REF_NOT_UNIQUE');
1939 FND_MESSAGE.SET_TOKEN('REF_NO', p_line_rec.orig_sys_line_ref(I));
1940 qp_bulk_msg.add(l_msg_rec);
1941 ELSIF p_line_rec.interface_action_code(I)='UPDATE' AND l_exist = 0 THEN
1942 p_line_rec.process_status_flag(I):=NULL;
1943 fnd_message.set_name('QP', 'LINE_RECORD_DOES_NOT_EXIST');
1944 FND_MESSAGE.SET_TOKEN('REF_NO', p_line_rec.orig_sys_line_ref(I));
1945 qp_bulk_msg.add(l_msg_rec);
1946 END IF;
1947
1948 If p_line_rec.interface_action_code(I)='INSERT' THEN
1949 l_exist:= NULL;
1950 select count(*) into l_exist
1951 from qp_interface_list_lines
1952 where request_id = p_line_rec.request_id(I)
1953 and orig_sys_line_ref = p_line_rec.orig_sys_line_ref(I)
1954 and orig_sys_header_ref = p_line_rec.orig_sys_header_ref(I);
1955
1956 IF l_exist >1 THEN
1957 p_line_rec.process_status_flag(I):=NULL;
1958 fnd_message.set_name('QP', 'ORIG_SYS_LINE_REF_NOT_UNIQUE');
1959 FND_MESSAGE.SET_TOKEN('REF_NO', p_line_rec.orig_sys_line_ref(I));
1960 qp_bulk_msg.add(l_msg_rec);
1961 END IF;
1962 end if;
1963
1964 /*
1965 Commenting code for bug 9350532.
1966 Duplicate validation is not required for orig_sys_line_ref in case of UPDATE.
1967 Since orig_sys_line_ref is considered as a primary key in bulk loader
1968 the line to be updated will be identified by orig_sys_line_ref instead
1969 of list_line_id (if the user has provided both). Also list line id is not
1970 updated for the line identified with orig_sys_line_ref.
1971 */
1972
1973 --bug 9247305 start
1974 /*If p_line_rec.interface_action_code(I)='UPDATE' THEN
1975 l_exist:= NULL;
1976
1977 select 1 INTO l_exist
1978 from qp_list_lines qpll
1979 WHERE qpll.orig_sys_line_ref = p_line_rec.orig_sys_line_ref(I)
1980 and qpll.list_line_id is not null
1981 and qpll.list_line_id <> p_line_rec.list_line_id(I);
1982
1983 IF l_exist = 1 THEN
1984 p_line_rec.process_status_flag(I):=NULL;
1985 fnd_message.set_name('QP', 'ORIG_SYS_LINE_REF_NOT_UNIQUE');
1986 FND_MESSAGE.SET_TOKEN('REF_NO', p_line_rec.orig_sys_line_ref(I));
1987 qp_bulk_msg.add(l_msg_rec);
1988 END IF;
1989 end if;*/
1990 --bug 9247305 end
1991
1992 --- check for conditionally required fields --------
1993 IF p_line_rec.list_line_type_code(I) = 'PBH' then
1994 IF p_line_rec.price_break_type_code(I) IS NULL then
1995 p_line_rec.process_status_flag(I):=NULL;
1996 fnd_message.set_name('QP', 'QP_ATTRIBUTE_REQUIRED');
1997 fnd_message.set_token('ATTRIBUTE', 'PRICE_BREAK_TYPE_CODE');
1998 qp_bulk_msg.add(l_msg_rec);
1999 END IF;
2000 ELSE
2001 IF p_line_rec.price_break_header_ref(I) IS NULL and
2002 p_line_rec.price_break_type_code(I) IS NOT NULL then
2003 p_line_rec.process_status_flag(I):=NULL;
2004 FND_MESSAGE.SET_NAME('QP', 'QP_INVALID_ATTRIBUTE');
2005 fnd_message.set_token('ATTRIBUTE', 'PRICE_BREAK_TYPE_CODE');
2006 qp_bulk_msg.add(l_msg_rec);
2007 END IF;
2008 END IF;
2009
2010 IF p_line_rec.price_break_header_ref(I) IS NOT NULL then
2011 IF p_line_rec.rltd_modifier_grp_type(I) IS NULL then
2012 p_line_rec.process_status_flag(I):=NULL;
2013 fnd_message.set_name('QP', 'QP_ATTRIBUTE_REQUIRED');
2014 fnd_message.set_token('ATTRIBUTE', 'RLTD_MODIFIER_GRP_TYPE');
2015 qp_bulk_msg.add(l_msg_rec);
2016 END IF;
2017 END IF;
2018
2019 qp_bulk_loader_pub.write_log('check price break ARITHMETIC OPERATOR');
2020 -- check UNIT price break has no BLOCK price break child lines
2021
2022 l_dummy:= null;
2023 IF p_line_rec.list_line_type_code(I) = 'PBH' then
2024 IF (p_LINE_rec.arithmetic_operator(I) = 'UNIT_PRICE')
2025 THEN
2026 SELECT count(*)
2027 INTO l_dummy
2028 FROM qp_interface_list_lines
2029 WHERE price_break_header_ref = p_LINE_rec.orig_sys_line_ref(I)
2030 AND arithmetic_operator = 'BLOCK_PRICE';
2031
2032 -- if any price breaks are BLOCK
2033 IF (l_dummy > 0) THEN
2034 p_line_rec.process_status_flag(I):=NULL;
2035 FND_MESSAGE.SET_NAME('QP','QP_INVALID_CHILD_APPL_METHOD');
2036 qp_bulk_msg.add(l_msg_rec);
2037 END IF;
2038
2039 -- Bug# 5228560 RAVI START
2040 l_dummy:= null;
2041
2042 select count(*) into l_dummy
2043 from qp_list_lines l1, qp_list_lines l2, qp_rltd_modifiers l3
2044 where l1.orig_sys_line_ref=p_LINE_rec.orig_sys_line_ref(I)
2045 -- Bug 5246745 Use Composite Index for Ref columns
2046 and l1.orig_sys_header_ref=p_LINE_rec.orig_sys_header_ref(I)
2047 and l1.list_line_id=l3.FROM_RLTD_MODIFIER_ID
2048 and l3.TO_RLTD_MODIFIER_ID=l2.list_line_id
2049 and l3.RLTD_MODIFIER_GRP_TYPE='PRICE BREAK'
2050 AND l2.arithmetic_operator <> 'UNIT_PRICE';
2051
2052 -- if any price breaks are BLOCK in old lines
2053 IF (l_dummy > 0) THEN
2054 p_line_rec.process_status_flag(I):=NULL;
2055 FND_MESSAGE.SET_NAME('QP','QP_INVALID_CHILD_APPL_METHOD');
2056 qp_bulk_msg.add(l_msg_rec);
2057 END IF;
2058 -- Bug# 5228560 RAVI END
2059 END IF;
2060
2061 -- block pricing
2062 l_dummy := null;
2063 l_dummy_1 := null;
2064 IF (p_LINE_rec.arithmetic_operator(I) = 'BLOCK_PRICE' AND
2065 p_LINE_rec.price_break_type_code(I) = 'POINT')
2066 THEN
2067 -- SELECT count(*)
2068 -- INTO l_dummy
2069 -- FROM qp_list_lines pl, qp_list_lines cl,qp_rltd_modifiers rtd
2070 -- WHERE pl.orig_sys_line_ref = p_line_rec.orig_sys_line_ref(I)
2071 -- AND rtd.from_rltd_modifier_id = pl.list_line_id
2072 -- AND cl.list_line_id = rtd.to_rltd_modifier_id
2073 -- AND (cl.arithmetic_operator = 'UNIT_PRICE' OR cl.recurring_value IS NOT NULL);
2074 --
2075 SELECT count(*)
2076 INTO l_dummy
2077 FROM qp_interface_list_lines
2078 WHERE price_break_header_ref = p_LINE_rec.orig_sys_line_ref(I)
2079 AND (arithmetic_operator = 'UNIT_PRICE' OR recurring_value IS NOT NULL);
2080
2081 IF (l_dummy > 0) THEN
2082 p_line_rec.process_status_flag(I):=NULL;
2083 FND_MESSAGE.SET_NAME('QP','QP_INVALID_PRICE_BREAK');
2084 qp_bulk_msg.add(l_msg_rec);
2085 END IF;
2086
2087 END IF;
2088
2089 -- Bug# 5228560 RAVI START
2090 IF p_LINE_rec.arithmetic_operator(I) = 'BLOCK_PRICE' THEN
2091 l_dummy := null;
2092 IF p_LINE_rec.price_break_type_code(I) = 'RANGE' THEN
2093 select count(*) into l_dummy
2094 from qp_list_lines l1, qp_list_lines l2, qp_rltd_modifiers l3
2095 where l1.orig_sys_line_ref=p_LINE_rec.orig_sys_line_ref(I)
2096 -- Bug 5246745 Use Composite Index for Ref columns
2097 and l1.orig_sys_header_ref=p_LINE_rec.orig_sys_header_ref(I)
2098 and l1.list_line_id=l3.FROM_RLTD_MODIFIER_ID
2099 and l3.TO_RLTD_MODIFIER_ID=l2.list_line_id
2100 and l3.RLTD_MODIFIER_GRP_TYPE='PRICE BREAK'
2101 AND l2.arithmetic_operator = 'UNIT_PRICE';
2102 END IF;
2103
2104 IF (l_dummy > 0) THEN
2105 p_line_rec.process_status_flag(I):=NULL;
2106 FND_MESSAGE.SET_NAME('QP','QP_INVALID_PRICE_BREAK');
2107 qp_bulk_msg.add(l_msg_rec);
2108 END IF;
2109
2110 l_dummy := null;
2111 IF p_LINE_rec.price_break_type_code(I) = 'POINT' THEN
2112 select count(*) into l_dummy
2113 from qp_list_lines l1, qp_list_lines l2, qp_rltd_modifiers l3
2114 where l1.orig_sys_line_ref=p_LINE_rec.orig_sys_line_ref(I)
2115 -- Bug 5246745 Use Composite Index for Ref columns
2116 and l1.orig_sys_header_ref=p_LINE_rec.orig_sys_header_ref(I)
2117 and l1.list_line_id=l3.FROM_RLTD_MODIFIER_ID
2118 and l3.TO_RLTD_MODIFIER_ID=l2.list_line_id
2119 and l3.RLTD_MODIFIER_GRP_TYPE='PRICE BREAK'
2120 AND l2.arithmetic_operator <> 'UNIT_PRICE';
2121 END IF;
2122
2123 IF (l_dummy > 0) THEN
2124 p_line_rec.process_status_flag(I):=NULL;
2125 FND_MESSAGE.SET_NAME('QP','QP_INVALID_PRICE_BREAK');
2126 qp_bulk_msg.add(l_msg_rec);
2127 END IF;
2128 END IF;
2129 -- Bug# 5228560 RAVI END
2130
2131 END IF;
2132
2133 -- check for pbh child line arithmetic operator
2134 IF p_line_rec.list_line_type_code(I) = 'PLL' AND
2135 p_line_rec.price_break_header_ref(I) IS NOT NULL THEN
2136
2137 IF p_line_rec.arithmetic_operator(I) = 'BREAKUNIT_PRICE' and
2138 p_line_rec.recurring_value(I) is not NULL THEN
2139 P_LINE_REC.PROCESS_STATUS_FLAG(I):= NULL; --'E';
2140 FND_MESSAGE.SET_NAME('QP', 'QP_INVALID_ATTRIBUTE');
2141 FND_MESSAGE.SET_TOKEN('ATTRIBUTE', 'Recurring Value');
2142 QP_BULK_MSG.ADD(l_msg_rec);
2143 END IF;
2144
2145 BEGIN
2146 SELECT price_break_type_code, arithmetic_operator
2147 INTO l_pb_type_code, l_art_opr
2148 FROM QP_INTERFACE_LIST_LINES
2149 WHERE orig_sys_line_ref = p_line_rec.price_break_header_ref(I)
2150 AND orig_sys_header_ref = p_line_rec.orig_sys_header_ref(I)
2151 AND request_id = p_line_rec.request_id(I);
2152 --Bug 4405737 START RAVI
2153 /**
2154 Price break type of Price break hdr line and child line should not be null.
2155 The price break type code of Price break hdr line and child line should be
2156 equal.
2157 **/
2158 IF p_line_rec.price_break_type_code(I) IS NULL OR
2159 l_pb_type_code IS NULL THEN
2160 P_LINE_REC.PROCESS_STATUS_FLAG(I):= NULL; --'E';
2161 FND_MESSAGE.SET_NAME('QP', 'QP_INVALID_ATTRIBUTE');
2162 FND_MESSAGE.SET_TOKEN('ATTRIBUTE', 'Recurring Value');
2163 QP_BULK_MSG.ADD(l_msg_rec);
2164 qp_bulk_loader_pub.write_log('PRICE BREAK TYPE CODE NULL');
2165 ELSE
2166 IF p_line_rec.price_break_type_code(I) = l_pb_type_code
2167 THEN
2168 NULL;
2169 ELSE
2170 P_LINE_REC.PROCESS_STATUS_FLAG(I):= NULL; --'E';
2171 FND_MESSAGE.SET_NAME('QP', 'QP_INVALID_ATTRIBUTE');
2172 FND_MESSAGE.SET_TOKEN('ATTRIBUTE', 'Recurring Value');
2173 QP_BULK_MSG.ADD(l_msg_rec);
2174 qp_bulk_loader_pub.write_log('PRICE BREAK TYPE CODE OF PARENT AND CHILD UNEQUAL');
2175 END IF;
2176 END IF;
2177 --Bug 4405737 END RAVI
2178 IF l_servicable_item='N' THEN
2179 IF p_line_rec.arithmetic_operator(I) = 'UNIT_PRICE' THEN
2180 IF l_art_opr <> 'UNIT_PRICE'
2181 and l_art_opr <> 'PERCENT_PRICE'
2182 THEN
2183 P_LINE_REC.PROCESS_STATUS_FLAG(I):= NULL; --'E';
2184 FND_MESSAGE.SET_NAME('QP', 'QP_INVALID_ATTRIBUTE');
2185 FND_MESSAGE.SET_TOKEN('ATTRIBUTE', 'Arithmetic Operator');
2186 QP_BULK_MSG.ADD(l_msg_rec);
2187 END IF;
2188 ELSIF p_line_rec.arithmetic_operator(I) = 'BLOCK_PRICE' THEN
2189 IF l_art_opr <> 'BLOCK_PRICE' THEN
2190 P_LINE_REC.PROCESS_STATUS_FLAG(I):= NULL; --'E';
2191 FND_MESSAGE.SET_NAME('QP', 'QP_INVALID_ATTRIBUTE');
2192 FND_MESSAGE.SET_TOKEN('ATTRIBUTE', 'Arithmetic Operator');
2193 QP_BULK_MSG.ADD(l_msg_rec);
2194 END IF;
2195 ELSIF p_line_rec.arithmetic_operator(I) = 'BREAKUNIT_PRICE' THEN
2196 IF l_art_opr <> 'BLOCK_PRICE' OR l_pb_type_code <> 'RANGE' THEN
2197 P_LINE_REC.PROCESS_STATUS_FLAG(I):= NULL; --'E';
2198 FND_MESSAGE.SET_NAME('QP', 'QP_INVALID_ATTRIBUTE');
2199 FND_MESSAGE.SET_TOKEN('ATTRIBUTE', 'Arithmetic Operator');
2200 QP_BULK_MSG.ADD(l_msg_rec);
2201 END IF;
2202 END IF;
2203 END IF;
2204
2205 -- Bug# 5228560 (5246745) RAVI START
2206 -- Check for application method compatibility between PBH line and PBC line
2207 l_pb_type_code := NULL;
2208 l_art_opr := NULL;
2209
2210 --Get the PBH details
2211 SELECT L2.price_break_type_code, L2.arithmetic_operator
2212 INTO l_pb_type_code, l_art_opr
2213 from qp_list_lines l1, qp_list_lines l2, qp_rltd_modifiers l3
2214 where l1.orig_sys_line_ref=p_LINE_rec.orig_sys_line_ref(I)
2215 -- Bug 5246745 Use Composite Index for Ref columns
2216 and l1.orig_sys_header_ref=p_LINE_rec.orig_sys_header_ref(I)
2217 and l1.list_line_id=l3.TO_RLTD_MODIFIER_ID
2218 and l3.FROM_RLTD_MODIFIER_ID=l2.list_line_id
2219 and l3.RLTD_MODIFIER_GRP_TYPE='PRICE BREAK';
2220
2221 IF l_servicable_item='N' THEN
2222 IF p_line_rec.arithmetic_operator(I) = 'UNIT_PRICE' THEN
2223 IF l_art_opr <> 'UNIT_PRICE' THEN
2224 P_LINE_REC.PROCESS_STATUS_FLAG(I):= NULL; --'E';
2225 FND_MESSAGE.SET_NAME('QP', 'QP_INVALID_ATTRIBUTE');
2226 FND_MESSAGE.SET_TOKEN('ATTRIBUTE', 'Arithmetic Operator - Orderable item - PBC UNIT_PRICE -- PBH Wrong');
2227 QP_BULK_MSG.ADD(l_msg_rec);
2228 END IF;
2229 ELSIF p_line_rec.arithmetic_operator(I) = 'BLOCK_PRICE' THEN
2230 IF l_art_opr <> 'BLOCK_PRICE' THEN
2231 P_LINE_REC.PROCESS_STATUS_FLAG(I):= NULL; --'E';
2232 FND_MESSAGE.SET_NAME('QP', 'QP_INVALID_ATTRIBUTE');
2233 FND_MESSAGE.SET_TOKEN('ATTRIBUTE', 'Arithmetic Operator - Orderable item - PBC BLOCK_PRICE -- PBH Wrong');
2234 QP_BULK_MSG.ADD(l_msg_rec);
2235 END IF;
2236 ELSIF p_line_rec.arithmetic_operator(I) = 'BREAKUNIT_PRICE' THEN
2237 IF l_art_opr <> 'BLOCK_PRICE' OR l_pb_type_code <> 'RANGE' THEN
2238 P_LINE_REC.PROCESS_STATUS_FLAG(I):= NULL; --'E';
2239 FND_MESSAGE.SET_NAME('QP', 'QP_INVALID_ATTRIBUTE');
2240 FND_MESSAGE.SET_TOKEN('ATTRIBUTE', 'Arithmetic Operator - Orderable item - PBC BREAKUNIT_PRICE -- PBH Wrong');
2241 QP_BULK_MSG.ADD(l_msg_rec);
2242 END IF;
2243 END IF;
2244 ELSIF l_servicable_item='Y' THEN
2245 IF p_line_rec.arithmetic_operator(I) = 'UNIT_PRICE' THEN
2246 IF l_art_opr <> 'UNIT_PRICE' and l_art_opr <> 'PERCENT_PRICE' THEN
2247 P_LINE_REC.PROCESS_STATUS_FLAG(I):= NULL; --'E';
2248 FND_MESSAGE.SET_NAME('QP', 'QP_INVALID_ATTRIBUTE');
2249 FND_MESSAGE.SET_TOKEN('ATTRIBUTE', 'Arithmetic Operator - Servicable item - PBC UNIT_PRICE -- PBH Wrong');
2250 QP_BULK_MSG.ADD(l_msg_rec);
2251 END IF;
2252 ELSIF p_line_rec.arithmetic_operator(I) = 'BLOCK_PRICE' THEN
2253 IF l_art_opr <> 'BLOCK_PRICE' THEN
2254 P_LINE_REC.PROCESS_STATUS_FLAG(I):= NULL; --'E';
2255 FND_MESSAGE.SET_NAME('QP', 'QP_INVALID_ATTRIBUTE');
2256 FND_MESSAGE.SET_TOKEN('ATTRIBUTE', 'Arithmetic Operator - Servicable item - PBC BLOCK_PRICE -- PBH Wrong');
2257 QP_BULK_MSG.ADD(l_msg_rec);
2258 END IF;
2259 ELSIF p_line_rec.arithmetic_operator(I) = 'BREAKUNIT_PRICE' THEN
2260 IF l_art_opr <> 'BLOCK_PRICE' THEN
2261 P_LINE_REC.PROCESS_STATUS_FLAG(I):= NULL; --'E';
2262 FND_MESSAGE.SET_NAME('QP', 'QP_INVALID_ATTRIBUTE');
2263 FND_MESSAGE.SET_TOKEN('ATTRIBUTE', 'Arithmetic Operator - Servicable item - PBC BREAKUNIT_PRICE -- PBH Wrong');
2264 QP_BULK_MSG.ADD(l_msg_rec);
2265 END IF;
2266 ELSIF p_line_rec.arithmetic_operator(I) = 'PERCENT_PRICE' THEN
2267 IF l_art_opr <> 'BLOCK_PRICE' OR
2268 l_art_opr <> 'PERCENT_PRICE' OR
2269 l_art_opr <> 'UNIT_PRICE'
2270 THEN
2271 P_LINE_REC.PROCESS_STATUS_FLAG(I):= NULL; --'E';
2272 FND_MESSAGE.SET_NAME('QP', 'QP_INVALID_ATTRIBUTE');
2273 FND_MESSAGE.SET_TOKEN('ATTRIBUTE', 'Arithmetic Operator - Servicable item - PBC PERCENT_PRICE -- PBH Wrong');
2274 QP_BULK_MSG.ADD(l_msg_rec);
2275 END IF;
2276 END IF;
2277 END IF;
2278 -- Bug# 5228560 (5246745) RAVI END
2279
2280 EXCEPTION
2281 WHEN NO_DATA_FOUND THEN
2282 null;
2283 END;
2284 END IF;
2285
2286 qp_bulk_loader_pub.write_log('After pbh check');
2287
2288 -- check for operand value for the line.
2289 IF p_LINE_rec.list_line_type_code(I) = 'PLL'
2290 and p_LINE_rec.operand(I) IS NULL
2291 and p_LINE_rec.price_by_formula_id(I) IS NULL
2292 and p_LINE_rec.generate_using_formula_id(I) IS NULL
2293 THEN
2294
2295 p_line_rec.process_status_flag(I):=NULL;
2296 FND_MESSAGE.SET_NAME('QP','QP_OPERAND_FORMULA');
2297 QP_BULK_MSG.ADD(l_msg_rec);
2298
2299 END IF;
2300
2301 -- Recurring value check
2302 -- Bug 4995724 START RAVI
2303 /**
2304 Recurring value should always be more than 1.
2305 Recurring value allowed only for RANGE and BLOCK PRICE
2306 **/
2307 IF p_line_rec.recurring_value(I) is not null THEN
2308 IF p_line_rec.recurring_value(I) < 1 Then
2309 FND_MESSAGE.SET_NAME('QP','QP_INVALID_ATTRIBUTE');
2310 FND_MESSAGE.SET_TOKEN('ATTRIBUTE','Recurring Value');
2311 QP_BULK_MSG.ADD(l_msg_rec);
2312 ELSIF p_line_rec.arithmetic_operator(I) <> 'BLOCK_PRICE'
2313 OR l_art_opr <> 'BLOCK_PRICE'
2314 OR l_pb_type_code <> 'RANGE'
2315 THEN
2316 FND_MESSAGE.SET_NAME('QP','QP_INVALID_ATTRIBUTE');
2317 FND_MESSAGE.SET_TOKEN('ATTRIBUTE','Recurring Value');
2318 QP_BULK_MSG.ADD(l_msg_rec);
2319 END IF;
2320 END IF;
2321 /**
2322 IF p_line_rec.recurring_value(I) is not null
2323 And p_line_rec.recurring_value(I) < 1 Then
2324 FND_MESSAGE.SET_NAME('QP','QP_INVALID_ATTRIBUTE');
2325 FND_MESSAGE.SET_TOKEN('ATTRIBUTE','Recurring Value');
2326 QP_BULK_MSG.ADD(l_msg_rec);
2327 END IF;
2328 **/
2329 -- Bug 4995724 END RAVI
2330
2331
2332 -- Date Check
2333 IF p_line_rec.end_date_active(I) IS NULL
2334 OR p_line_rec.start_date_active(I) IS NULL
2335 THEN
2336 Null;
2337 ELSIF (p_line_rec.start_date_active(I) > p_line_rec.end_date_active(I) ) THEN
2338 FND_MESSAGE.SET_NAME('QP', 'QP_STRT_DATE_BFR_END_DATE');
2339 QP_BULK_MSG.Add(l_msg_rec);
2340 --Bug# 5228368 RAVI
2341 p_line_rec.process_status_flag(I):=NULL;
2342 END IF;
2343
2344
2345 -- Date check with respect to header dates
2346 /**
2347 * Bug 5246745 RAVI START
2348 * Price List Line Start date should be on or after Price List Header Start Date
2349 * Price List Line End date should be on or before Price List Header End Date
2350 **/
2351 l_header_start_date := null;
2352 l_header_end_date := null;
2353
2354 BEGIN
2355 select fnd_date.canonical_to_date(start_date_active),
2356 fnd_date.canonical_to_date(end_date_active)
2357 into l_header_start_date, l_header_end_date
2358 from qp_interface_list_headers
2359 where orig_sys_header_ref=p_line_rec.orig_sys_header_ref(I)
2360 and request_id=p_line_rec.request_id(I)
2361 and interface_action_code in ('INSERT','UPDATE');
2362 EXCEPTION
2363 WHEN OTHERS
2364 THEN
2365 qp_bulk_loader_pub.write_log( 'ERROR in comparing the Header and Line start Dates (INTERFACE)');
2366 END;
2367
2368 IF l_header_start_date IS NULL THEN
2369 BEGIN
2370 select start_date_active, end_date_active
2371 into l_header_start_date, l_header_end_date
2372 from qp_list_headers_b
2373 where orig_system_header_ref=p_line_rec.orig_sys_header_ref(I);
2374 EXCEPTION
2375 WHEN OTHERS
2376 THEN
2377 qp_bulk_loader_pub.write_log( 'ERROR in comparing the Header and Line start Dates (QP)');
2378 END;
2379 END IF;
2380
2381 IF p_line_rec.start_date_active(I) < l_header_start_date OR
2382 p_line_rec.end_date_active(I) > l_header_end_date
2383 THEN
2384 FND_MESSAGE.SET_NAME('QP', 'QP_INVALID_DATE');
2385 QP_BULK_MSG.Add(l_msg_rec);
2386 p_line_rec.process_status_flag(I):=NULL;
2387 END IF;
2388 -- Bug 5246745 RAVI END
2389
2390
2391 -- Price break child date check with respect to price break header dates
2392 /**
2393 * Bug 5246745 RAVI START
2394 * Price break child line Start date should be equal to Price break Header Start Date
2395 * Price break child line End date should be equal to Price break Header End Date
2396 **/
2397 l_PBH_start_date := null;
2398 l_PBH_end_date := null;
2399
2400 IF p_line_rec.list_line_type_code(I)='PLL' AND
2401 p_line_rec.PRICE_BREAK_HEADER_REF(I) is not null AND
2402 p_line_rec.RLTD_MODIFIER_GRP_TYPE(I)='PRICE BREAK'
2403 THEN
2404 BEGIN
2405 select start_date_active, end_date_active
2406 into l_PBH_start_date, l_PBH_end_date
2407 from qp_interface_list_lines
2408 where orig_sys_line_ref=p_line_rec.PRICE_BREAK_HEADER_REF(I)
2409 -- Bug 5246745 Use Composite Index for Ref columns
2410 and orig_sys_header_ref=p_LINE_rec.orig_sys_header_ref(I)
2411 and request_id=p_line_rec.request_id(I)
2412 and interface_action_code in ('INSERT','UPDATE');
2413 EXCEPTION
2414 WHEN OTHERS
2415 THEN
2416 qp_bulk_loader_pub.write_log( 'ERROR in comparing the PBH and PBC start Dates (INTERFACE)');
2417 END;
2418
2419 IF l_PBH_start_date is null THEN
2420 BEGIN
2421 select start_date_active, end_date_active
2422 into l_PBH_start_date, l_PBH_end_date
2423 from qp_list_lines
2424 where orig_sys_line_ref=p_line_rec.PRICE_BREAK_HEADER_REF(I)
2425 -- Bug 5246745 Use Composite Index for Ref columns
2426 and orig_sys_header_ref=p_LINE_rec.orig_sys_header_ref(I);
2427 EXCEPTION
2428 WHEN OTHERS
2429 THEN
2430 qp_bulk_loader_pub.write_log( 'ERROR in comparing the PBH and PBC start Dates (INTERFACE)');
2431 END;
2432 END IF;
2433
2434 IF l_PBH_start_date <> p_line_rec.start_date_active(I) OR
2435 l_PBH_end_date <> p_line_rec.end_date_active(I)
2436 THEN
2437 FND_MESSAGE.SET_NAME('QP', 'QP_INVALID_DATE');
2438 QP_BULK_MSG.Add(l_msg_rec);
2439 p_line_rec.process_status_flag(I):=NULL;
2440 END IF;
2441 END IF;
2442 -- Bug 5246745 RAVI END
2443
2444 --Flex field check
2445
2446 IF l_line_flex_enabled = 'Y' THEN
2447 qp_bulk_loader_pub.write_log( 'Line Flex enabled ');
2448
2449 IF NOT Init_Desc_Flex
2450 (p_flex_name =>'QP_LIST_LINES'
2451 ,p_context => p_line_rec.context(i)
2452 ,p_attribute1 => p_line_rec.attribute1(i)
2453 ,p_attribute2 => p_line_rec.attribute2(i)
2454 ,p_attribute3 => p_line_rec.attribute3(i)
2455 ,p_attribute4 => p_line_rec.attribute4(i)
2456 ,p_attribute5 => p_line_rec.attribute5(i)
2457 ,p_attribute6 => p_line_rec.attribute6(i)
2458 ,p_attribute7 => p_line_rec.attribute7(i)
2459 ,p_attribute8 => p_line_rec.attribute8(i)
2460 ,p_attribute9 => p_line_rec.attribute9(i)
2461 ,p_attribute10 => p_line_rec.attribute10(i)
2462 ,p_attribute11 => p_line_rec.attribute11(i)
2463 ,p_attribute12 => p_line_rec.attribute12(i)
2464 ,p_attribute13 => p_line_rec.attribute13(i)
2465 ,p_attribute14 => p_line_rec.attribute14(i)
2466 ,p_attribute15 => p_line_rec.attribute15(i)) THEN
2467
2468 QP_BULK_MSG.ADD(l_msg_rec);
2469
2470 -- Log Error Message
2471 FND_MESSAGE.SET_NAME('QP','QP_INVALID_ATTRIBUTE');
2472 FND_MESSAGE.SET_TOKEN('ATTRIBUTE',
2473 'Entity:Flexfield:Line_Desc_Flex');
2474 p_line_rec.process_status_flag(I):=NULL;
2475
2476 QP_BULK_MSG.ADD(l_msg_rec);
2477
2478 ELSE -- if the flex validation is successfull
2479
2480 IF p_line_rec.context(i) IS NULL
2481 OR p_line_rec.context(i) = FND_API.G_MISS_CHAR THEN
2482 p_line_rec.context(i) := g_context;
2483 END IF;
2484
2485 IF p_line_rec.attribute1(i) IS NULL
2486 OR p_line_rec.attribute1(i) = FND_API.G_MISS_CHAR THEN
2487 p_line_rec.attribute1(i) := g_attribute1;
2488 END IF;
2489
2490 IF p_line_rec.attribute2(i) IS NULL
2491 OR p_line_rec.attribute2(i) = FND_API.G_MISS_CHAR THEN
2492 p_line_rec.attribute2(i) := g_attribute2;
2493 END IF;
2494
2495 IF p_line_rec.attribute3(i) IS NULL
2496 OR p_line_rec.attribute3(i) = FND_API.G_MISS_CHAR THEN
2497 p_line_rec.attribute3(i) := g_attribute3;
2498 END IF;
2499
2500 IF p_line_rec.attribute4(i) IS NULL
2501 OR p_line_rec.attribute4(i) = FND_API.G_MISS_CHAR THEN
2502 p_line_rec.attribute4(i) := g_attribute4;
2503 END IF;
2504
2505 IF p_line_rec.attribute5(i) IS NULL
2506 OR p_line_rec.attribute5(i) = FND_API.G_MISS_CHAR THEN
2507 p_line_rec.attribute5(i) := g_attribute5;
2508 END IF;
2509
2510 IF p_line_rec.attribute6(i) IS NULL
2511 OR p_line_rec.attribute6(i) = FND_API.G_MISS_CHAR THEN
2512 p_line_rec.attribute6(i) := g_attribute6;
2513 END IF;
2514 IF p_line_rec.attribute7(i) IS NULL
2515 OR p_line_rec.attribute7(i) = FND_API.G_MISS_CHAR THEN
2516 p_line_rec.attribute7(i) := g_attribute7;
2517 END IF;
2518
2519 IF p_line_rec.attribute8(i) IS NULL
2520 OR p_line_rec.attribute8(i) = FND_API.G_MISS_CHAR THEN
2521 p_line_rec.attribute8(i) := g_attribute8;
2522 END IF;
2523
2524 IF p_line_rec.attribute9(i) IS NULL
2525 OR p_line_rec.attribute9(i) = FND_API.G_MISS_CHAR THEN
2526 p_line_rec.attribute9(i) := g_attribute9;
2527 END IF;
2528
2529 IF p_line_rec.attribute10(i) IS NULL
2530 OR p_line_rec.attribute10(i) = FND_API.G_MISS_CHAR THEN
2531 p_line_rec.attribute10(i) := G_attribute10;
2532 End IF;
2533
2534 IF p_line_rec.attribute11(i) IS NULL
2535 OR p_line_rec.attribute11(i) = FND_API.G_MISS_CHAR THEN
2536 p_line_rec.attribute11(i) := g_attribute11;
2537 END IF;
2538
2539 IF p_line_rec.attribute12(i) IS NULL
2540 OR p_line_rec.attribute12(i) = FND_API.G_MISS_CHAR THEN
2541 p_line_rec.attribute12(i) := g_attribute12;
2542 END IF;
2543
2544 IF p_line_rec.attribute13(i) IS NULL
2545 OR p_line_rec.attribute13(i) = FND_API.G_MISS_CHAR THEN
2546 p_line_rec.attribute13(i) := g_attribute13;
2547 END IF;
2548
2549 IF p_line_rec.attribute14(i) IS NULL
2550 OR p_line_rec.attribute14(i) = FND_API.G_MISS_CHAR THEN
2551 p_line_rec.attribute14(i) := g_attribute14;
2552 END IF;
2553
2554 IF p_line_rec.attribute15(i) IS NULL
2555 OR p_line_rec.attribute15(i) = FND_API.G_MISS_CHAR THEN
2556 p_line_rec.attribute15(i) := g_attribute15;
2557 END IF;
2558 END IF;
2559 END IF;
2560
2561 -- Basic_Pricing_Condition
2562 IF QP_BULK_LOADER_PUB.GET_QP_STATUS <> 'I' THEN
2563 IF p_line_rec.price_break_type_code(I) IS NOT NULL THEN
2564 p_line_rec.price_break_type_code(I) := NULL;
2565 END IF;
2566 IF p_line_rec.primary_uom_flag(I) = 'Y' THEN
2567 p_line_rec.primary_uom_flag(I) := 'N';
2568 END IF;
2569 END IF;
2570 --start_date_active
2571 qp_bulk_loader_pub.write_log('Line Start date value'||nvl(to_char(p_line_rec.start_date_active(I)), 'NULL'));
2572 qp_bulk_loader_pub.write_log('Line end date value'||nvl(to_char(p_line_rec.end_date_active(I)), 'NULL'));
2573
2574 --Bug#5353889 RAVI START
2575 --Start date null should be allowed
2576 /**
2577 IF p_line_rec.start_date_active(I) IS NULL
2578 AND (p_line_rec.end_date_active(I) IS NULL or
2579 p_line_rec.end_date_active(I) <= l_start_date)
2580 THEN
2581 qp_bulk_loader_pub.write_log('Line Start date updated');
2582 p_line_rec.start_date_active(I) := l_start_date;
2583 END IF;
2584 **/
2585 --Bug#5353889 RAVI END
2586
2587 END LOOP;
2588
2589 qp_bulk_loader_pub.write_log('Leaving entity line validation');
2590
2591 EXCEPTION
2592 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
2593 qp_bulk_loader_pub.write_log( 'UNEXCPECTED ERROR IN PROCEDURE ENTITY_LINE:'||sqlerrm);
2594 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
2595 WHEN OTHERS THEN
2596 qp_bulk_loader_pub.write_log( 'UNEXCPECTED ERROR IN PROCEDURE ENTITY_LINE:'||sqlerrm);
2597 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
2598 END ENTITY_LINE;
2599
2600
2601 PROCEDURE ENTITY_QUALIFIER
2602 (p_qualifier_rec IN OUT NOCOPY QP_BULK_LOADER_PUB.qualifier_rec_type)
2603 IS
2604 l_msg_rec QP_BULK_MSG.Msg_Rec_Type;
2605 l_segment_name VARCHAR2(240);
2606 x_value VARCHAR2(240);
2607 x_id VARCHAR2(150);
2608 x_format_type VARCHAR2(1);
2609 l_exist NUMBER;
2610 l_dummy VARCHAR2(240);
2611 l_seg_level VARCHAR2(10);
2612
2613 l_context_error VARCHAR2(1);
2614 l_attribute_error VARCHAR2(1);
2615 l_value_error VARCHAR2(1);
2616 l_datatype VARCHAR2(1);
2617 l_precedence NUMBER;
2618 l_error_code NUMBER;
2619
2620 l_context_type VARCHAR2(30);
2621 l_sourcing_enabled VARCHAR2(1);
2622 l_sourcing_status VARCHAR2(1);
2623 l_hierarchy_enabled VARCHAR2(1);
2624 l_sourcing_method VARCHAR2(30);
2625
2626 -- Bug 4926775 RAVI
2627 /**
2628 local variable for header id.
2629 **/
2630 l_list_header_id NUMBER;
2631
2632 BEGIN
2633 qp_bulk_loader_pub.write_log('Entering Entity Qualifier');
2634
2635 FOR I IN p_qualifier_rec.orig_sys_qualifier_ref.first
2636 ..p_qualifier_rec.orig_sys_qualifier_ref.last
2637 LOOP
2638
2639 --qp_bulk_loader_pub.write_log('request_id: '||p_qualifier_rec.request_id(I));
2640 --Initially setting the message context.
2641
2642 l_msg_rec.REQUEST_ID := P_QUALIFIER_REC.REQUEST_ID(I);
2643 l_msg_rec.ENTITY_TYPE :='PRL';
2644 l_msg_rec.TABLE_NAME :='QP_INTERFACE_QUALIFIERS';
2645 l_msg_rec.ORIG_SYS_HEADER_REF := p_qualifier_rec.orig_sys_header_ref(I);
2646 l_msg_rec.ORIG_SYS_QUALIFIER_REF := p_qualifier_rec.orig_sys_qualifier_ref(I);
2647 l_msg_rec.ORIG_SYS_QUALIFIER_REF := NULL;
2648 l_msg_rec.ORIG_SYS_PRICING_ATTR_REF := NULL;
2649
2650 /*--- Internal Field populate ----*/
2651 p_qualifier_rec.excluder_flag(I) := 'N';
2652 p_qualifier_rec.orig_sys_line_ref(I) := '-1';
2653
2654 If p_qualifier_rec.interface_action_code(I)='INSERT' THEN
2655 Select qp_qualifiers_s.nextval
2656 into p_qualifier_rec.qualifier_id(I) from dual;
2657 end if;
2658
2659
2660
2661 /*---- Conversion of qualifier_context, qualifier_attribute,-------------
2662 --------qualifier_attr_value, qualifier_attr_value_to -----------------*/
2663
2664 IF p_qualifier_rec.qualifier_grouping_no(I) IS NULL THEN
2665 p_qualifier_rec.process_status_flag(I):=NULL;
2666 FND_MESSAGE.SET_NAME('QP','QP_ATTRIBUTE_REQUIRED');
2667 FND_MESSAGE.SET_TOKEN('ATTRIBUTE','QUALIFIER GROUPING NO');
2668 QP_BULK_MSG.ADD(l_msg_rec);
2669 END IF;
2670
2671 IF p_qualifier_rec.list_line_id(I) IS NOT NULL THEN
2672 IF p_qualifier_rec.list_line_id(I) <> -1 THEN
2673 p_qualifier_rec.process_status_flag(I):=NULL;
2674 FND_MESSAGE.SET_NAME('QP','QP_INVALID_ATTRIBUTE');
2675 FND_MESSAGE.SET_TOKEN('ATTRIBUTE','LIST_LINE_ID');
2676 QP_BULK_MSG.ADD(l_msg_rec);
2677 END IF;
2678 ELSE
2679 p_qualifier_rec.list_line_id(I):=-1;
2680 END IF;
2681 -- Qualifier Context
2682 /* IF p_qualifier_rec.qualifier_context(I) IS NULL THEN
2683 p_qualifier_rec.qualifier_context(I) := '1';
2684 p_qualifier_rec.process_status_flag(I):=NULL;
2685 FND_MESSAGE.SET_NAME('QP','QP_ATTRIBUTE_REQUIRED');
2686 FND_MESSAGE.SET_TOKEN('ATTRIBUTE','QUALIFIER CONTEXT');
2687 QP_BULK_MSG.ADD(l_msg_rec);
2688 END IF; */
2689
2690
2691 -- Qualifier Attribute
2692
2693 IF p_qualifier_rec.qualifier_attribute(I) IS NULL THEN
2694
2695 -- IF p_qualifier_rec.qualifier_attribute_code(I) IS NULL THEN
2696 p_qualifier_rec.qualifier_attribute_code(I):= '1';
2697 p_qualifier_rec.process_status_flag(I):=NULL;
2698 FND_MESSAGE.SET_NAME('QP','QP_ATTRIBUTE_REQUIRED');
2699 FND_MESSAGE.SET_TOKEN('ATTRIBUTE','QUALIFIER ATTRIBUTE CODE');
2700 QP_BULK_MSG.ADD(l_msg_rec);
2701 /* ELSE
2702
2703 BEGIN
2704 p_qualifier_rec.qualifier_attribute(I):= QP_UTIL.Get_Attribute_Name(
2705 p_application_short_name => 'QP',
2706 p_flexfield_name=> 'QP_ATTR_DEFNS_QUALIFIER',
2707 p_context_name =>p_qualifier_rec.qualifier_context(I),
2708 p_attribute_name=>p_qualifier_rec.qualifier_attribute_code(I));
2709
2710 IF p_qualifier_rec.qualifier_attribute(I) IS NULL THEN
2711 p_qualifier_rec.qualifier_attribute(I):='1';
2712 p_qualifier_rec.process_status_flag(I):=NULL;
2713 FND_MESSAGE.SET_NAME('QP','QP_VALUE_TO_ID_ERROR');
2714 FND_MESSAGE.SET_TOKEN('ATTRIBUTE','qualifier_attribute');
2715 QP_BULK_MSG.ADD(l_msg_rec);
2716 END IF;
2717 EXCEPTION
2718 WHEN NO_DATA_FOUND THEN
2719 p_qualifier_rec.qualifier_attribute(I):='1';
2720 p_qualifier_rec.process_status_flag(I):=NULL;
2721 FND_MESSAGE.SET_NAME('QP','QP_VALUE_TO_ID_ERROR');
2722 FND_MESSAGE.SET_TOKEN('ATTRIBUTE','qualifier_attribute');
2723 QP_BULK_MSG.ADD(l_msg_rec);
2724 END;
2725 END IF; */
2726
2727 END IF;
2728
2729 IF ( p_qualifier_rec.qualify_hier_descendents_flag(I) IS NOT NULL)
2730 THEN
2731 IF p_qualifier_rec.qualify_hier_descendents_flag(I) NOT IN ('Y', 'N', 'y', 'n')
2732 THEN
2733 p_qualifier_rec.process_status_flag(I):=NULL;
2734 FND_MESSAGE.SET_NAME('QP','QP_INVALID_ATTRIBUTE');
2735 FND_MESSAGE.SET_TOKEN('ATTRIBUTE','QUALIFY HIER DESCENDENTS FLAG ');
2736 qp_bulk_msg.add(l_msg_rec);
2737 ELSIF p_qualifier_rec.qualify_hier_descendents_flag(I) in ('Y','y') THEN
2738 BEGIN
2739 select 'Y' into l_hierarchy_enabled
2740 from dual
2741 where exists(select 'X'
2742 from qp_segments_b qs,qp_prc_contexts_b qpc
2743 where
2744 qs.prc_context_id = qpc.prc_context_id and
2745 qpc.prc_context_code = p_qualifier_rec.qualifier_context(I) and
2746 qs.segment_mapping_column = p_qualifier_rec.qualifier_attribute(I) and
2747 qpc.PRC_CONTEXT_TYPE = 'QUALIFIER'
2748 and qs.party_hierarchy_enabled_flag ='Y');
2749 p_qualifier_rec.qualify_hier_descendents_flag(I) := 'Y';
2750 EXCEPTION WHEN NO_DATA_FOUND THEN
2751 p_qualifier_rec.process_status_flag(I):=NULL;
2752 FND_MESSAGE.SET_NAME('QP','QP_INVALID_ATTRIBUTE');
2753 FND_MESSAGE.SET_TOKEN('ATTRIBUTE','QUALIFY HIER DESCENDENTS FLAG ');
2754 qp_bulk_msg.add(l_msg_rec);
2755 END;
2756 ELSE
2757 null;
2758 END IF;
2759 END IF;
2760
2761 -- Bug# 5214576 RAVI START
2762 -- Qualifier Start and End Date validation
2763 IF p_qualifier_rec.end_date_active(I) is not null THEN
2764 IF p_qualifier_rec.start_date_active(I) is not null THEN
2765 IF p_qualifier_rec.start_date_active(I) > p_qualifier_rec.end_date_active(I) THEN
2766 qp_bulk_loader_pub.write_log('End Date is before Start Date');
2767 p_qualifier_rec.process_status_flag(I):=NULL;
2768 FND_MESSAGE.SET_NAME('QP', 'QP_STRT_DATE_BFR_END_DATE');
2769 QP_BULK_MSG.Add(l_msg_rec);
2770 END IF;
2771 ELSE
2772 qp_bulk_loader_pub.write_log('Qualifier Start Date is null');
2773 p_qualifier_rec.process_status_flag(I):=NULL;
2774 FND_MESSAGE.SET_NAME('QP', 'QP_INVALID_DATE');
2775 QP_BULK_MSG.Add(l_msg_rec);
2776 END IF;
2777 END IF;
2778 -- Bug# 5214576 RAVI END
2779
2780 -- Qualifier Attr Value
2781
2782 --Bug 4929426 START RAVI
2783 /**
2784 Qualifier attribute value validation (Messages)
2785 **/
2786
2787 IF p_qualifier_rec.qualifier_context(I) = 'MODLIST'
2788 AND p_qualifier_rec.qualifier_attribute(I) = 'QUALIFIER_ATTRIBUTE4'
2789 THEN
2790 begin
2791 select 1 into l_exist from qp_list_headers_b
2792 where list_header_id = to_number(p_qualifier_rec.qualifier_attr_value(I));
2793 exception when others then
2794 p_qualifier_rec.process_status_flag(I):=NULL;
2795 FND_MESSAGE.SET_NAME('QP','QP_INVALID_ATTRIBUTE');
2796 FND_MESSAGE.SET_TOKEN('ATTRIBUTE','QUALIFIER_ATTR_VALUE');
2797 QP_BULK_MSG.ADD(l_msg_rec);
2798 end;
2799 ELSE
2800
2801 -- Bug 5152088 Checking if Qualifier Attribute Value Code is valid
2802 IF p_QUALIFIER_rec.qualifier_attr_value_code(I) IS NOT NULL THEN
2803 p_QUALIFIER_rec.qualifier_attr_value(I) := QP_Value_To_Id.qualifier_attr_value(
2804 p_QUALIFIER_rec.qualifier_attr_value_code(I),
2805 p_QUALIFIER_rec.qualifier_context(I),
2806 p_QUALIFIER_rec.qualifier_attribute(I)
2807 );
2808 END IF;
2809
2810 QP_UTIL.validate_qp_flexfield(
2811 flexfield_name =>'QP_ATTR_DEFNS_QUALIFIER'
2812 ,context =>p_QUALIFIER_rec.qualifier_context(I)
2813 ,attribute =>p_QUALIFIER_rec.qualifier_attribute(I)
2814 -- Bug 5152088 Checking if Qualifier Attribute Value Code is valid
2815 ,value =>p_QUALIFIER_rec.qualifier_attr_value(I)
2816 ,application_short_name=>'QP'
2817 ,context_flag =>l_context_error
2818 ,attribute_flag =>l_attribute_error
2819 ,value_flag =>l_value_error
2820 ,datatype =>l_datatype
2821 ,precedence =>l_precedence
2822 ,error_code =>l_error_code
2823 );
2824
2825 IF l_error_code IS NULL THEN
2826 p_qualifier_rec.process_status_flag(I):=NULL;
2827 FND_MESSAGE.SET_NAME('QP','QP_ATTRIBUTE_REQUIRED');
2828 FND_MESSAGE.SET_TOKEN('ATTRIBUTE','QUALIFIER ATTRIBUTE CODE');
2829 QP_BULK_MSG.ADD(l_msg_rec);
2830 ELSE
2831 IF l_error_code=1 THEN
2832 qp_bulk_loader_pub.write_log('Qualifier Flexfield_name is not passed.');
2833 p_qualifier_rec.process_status_flag(I):=NULL;
2834 FND_MESSAGE.SET_NAME('QP','QP_QLF_FLXFLD_NULL');
2835 --FND_MESSAGE.SET_TOKEN('ATTRIBUTE','QUALIFIER ATTRIBUTE CODE');
2836 QP_BULK_MSG.ADD(l_msg_rec);
2837 ELSIF l_error_code=2 THEN
2838 qp_bulk_loader_pub.write_log('Qualifier Context is not passed');
2839 p_qualifier_rec.process_status_flag(I):=NULL;
2840 FND_MESSAGE.SET_NAME('QP','QP_QLF_CNTXT_NULL');
2841 --FND_MESSAGE.SET_TOKEN('ATTRIBUTE','QUALIFIER ATTRIBUTE CODE');
2842 QP_BULK_MSG.ADD(l_msg_rec);
2843 ELSIF l_error_code=3 THEN
2844 qp_bulk_loader_pub.write_log('Qualifier Attribute is not passed.');
2845 p_qualifier_rec.process_status_flag(I):=NULL;
2846 FND_MESSAGE.SET_NAME('QP','QP_QLF_ATTR_NULL');
2847 --FND_MESSAGE.SET_TOKEN('ATTRIBUTE','QUALIFIER ATTRIBUTE CODE');
2848 QP_BULK_MSG.ADD(l_msg_rec);
2849 ELSIF l_error_code=4 THEN
2850 qp_bulk_loader_pub.write_log('Qualifier Value is not passed');
2851 p_qualifier_rec.process_status_flag(I):=NULL;
2852 FND_MESSAGE.SET_NAME('QP','QP_QLF_ATTR_VAL_NULL');
2853 --FND_MESSAGE.SET_TOKEN('ATTRIBUTE','QUALIFIER ATTRIBUTE CODE');
2854 QP_BULK_MSG.ADD(l_msg_rec);
2855 ELSIF l_error_code=5 THEN
2856 qp_bulk_loader_pub.write_log('Qualifier Application short name is not passed');
2857 p_qualifier_rec.process_status_flag(I):=NULL;
2858 FND_MESSAGE.SET_NAME('QP','QP_QLF_APP_NAME_NULL');
2859 --FND_MESSAGE.SET_TOKEN('ATTRIBUTE','QUALIFIER ATTRIBUTE CODE');
2860 QP_BULK_MSG.ADD(l_msg_rec);
2861 ELSIF l_error_code=6 THEN
2862 qp_bulk_loader_pub.write_log('Qualifier Invalid application short name.');
2863 p_qualifier_rec.process_status_flag(I):=NULL;
2864 FND_MESSAGE.SET_NAME('QP','QP_QLF_INVALID_APP_NAME');
2865 --FND_MESSAGE.SET_TOKEN('ATTRIBUTE','QUALIFIER ATTRIBUTE CODE');
2866 QP_BULK_MSG.ADD(l_msg_rec);
2867 ELSIF l_error_code=7 THEN
2868 qp_bulk_loader_pub.write_log('Qualifier Invalid context passed');
2869 p_qualifier_rec.process_status_flag(I):=NULL;
2870 FND_MESSAGE.SET_NAME('QP','QP_QLF_INVALID_CNTXT');
2871 --FND_MESSAGE.SET_TOKEN('ATTRIBUTE','QUALIFIER ATTRIBUTE CODE');
2872 QP_BULK_MSG.ADD(l_msg_rec);
2873 ELSIF l_error_code=8 THEN
2874 qp_bulk_loader_pub.write_log('Qualifier Invalid Attribute passed');
2875 p_qualifier_rec.process_status_flag(I):=NULL;
2876 FND_MESSAGE.SET_NAME('QP','QP_QLF_INVALID_ATTRIB');
2877 --FND_MESSAGE.SET_TOKEN('ATTRIBUTE','QUALIFIER ATTRIBUTE CODE');
2878 QP_BULK_MSG.ADD(l_msg_rec);
2879 ELSIF l_error_code=9 THEN
2880 qp_bulk_loader_pub.write_log('Qualifier Value does not exist');
2881 p_qualifier_rec.process_status_flag(I):=NULL;
2882 FND_MESSAGE.SET_NAME('QP','QP_QLF_INVALID_ATTR_VAL');
2883 --FND_MESSAGE.SET_TOKEN('ATTRIBUTE','QUALIFIER ATTRIBUTE CODE');
2884 QP_BULK_MSG.ADD(l_msg_rec);
2885 ELSIF l_error_code=10 THEN
2886 qp_bulk_loader_pub.write_log('Qualifier Invalid Flexfield Name');
2887 p_qualifier_rec.process_status_flag(I):=NULL;
2888 FND_MESSAGE.SET_NAME('QP','QP_QLF_INVALID_FLXFLD_NAME');
2889 --FND_MESSAGE.SET_TOKEN('ATTRIBUTE','QUALIFIER ATTRIBUTE CODE');
2890 QP_BULK_MSG.ADD(l_msg_rec);
2891 END IF;
2892 END IF;
2893 END IF;
2894
2895 --Bug 4929426 END RAVI
2896
2897 qp_bulk_loader_pub.write_log( 'Qualifier_attr_val:'||p_qualifier_rec.qualifier_attr_value(I));
2898 -- Qualifier Attr Value To
2899 IF p_qualifier_rec.comparison_operator_code(I)= 'BETWEEN' AND
2900 p_qualifier_rec.qualifier_attr_value_to(I) IS NULL THEN
2901
2902 IF p_qualifier_rec.qualifier_attr_value_to_code(I) IS NULL THEN
2903 p_qualifier_rec.process_status_flag(I):=NULL;
2904 FND_MESSAGE.SET_NAME('QP','QP_ATTRIBUTE_REQUIRED');
2905 FND_MESSAGE.SET_TOKEN('ATTRIBUTE','QUALIFIER ATTRIBUTE VALUE TO');
2906 QP_BULK_MSG.ADD(l_msg_rec);
2907 ELSE
2908
2909 BEGIN
2910 l_segment_name :=QP_PRICE_LIST_LINE_UTIL.Get_Segment_Name
2911 ('QP_ATTR_DEFNS_QUALIFIER',
2912 p_qualifier_rec.qualifier_context(I),
2913 p_qualifier_rec.qualifier_attribute(I));
2914
2915 QP_Value_To_ID.Flex_Meaning_To_Value_Id(
2916 p_flexfield_name => 'QP_ATTR_DEFNS_QUALIFIER',
2917 p_context => p_qualifier_rec.qualifier_context(I),
2918 p_segment => l_segment_name,
2919 p_meaning => p_qualifier_rec.qualifier_attr_value_to_code(I),
2920 x_value => x_value,
2921 x_id => x_id,
2922 x_format_type => x_format_type);
2923
2924 IF x_id IS NOT NULL THEN
2925 p_qualifier_rec.qualifier_attr_value_to(I) := x_id;
2926 ELSE
2927 p_qualifier_rec.qualifier_attr_value_to(I) := x_value;
2928 END IF;
2929
2930 IF p_qualifier_rec.qualifier_attr_value_to(I) IS NULL THEN
2931 p_qualifier_rec.process_status_flag(I):=NULL;
2932 FND_MESSAGE.SET_NAME('QP','QP_VALUE_TO_ID_ERROR');
2933 FND_MESSAGE.SET_TOKEN('ATTRIBUTE','qualifier_attr_value_to');
2934 QP_BULK_MSG.add(l_msg_rec);
2935 END IF;
2936
2937 EXCEPTION
2938 WHEN NO_DATA_FOUND THEN
2939 p_qualifier_rec.process_status_flag(I):=NULL;
2940 FND_MESSAGE.SET_NAME('QP','QP_VALUE_TO_ID_ERROR');
2941 FND_MESSAGE.SET_TOKEN('ATTRIBUTE','qualifier_attr_value_to');
2942 QP_BULK_MSG.ADD(l_msg_rec);
2943
2944 END;
2945 END IF;
2946 END IF;
2947
2948
2949
2950 /*------ Performing required field validation for ----------------
2951 orig_sys_qualifier_ref.
2952 -------------------------------------------------------------*/
2953 IF p_qualifier_rec.orig_sys_qualifier_ref(I) IS NULL THEN
2954 p_qualifier_rec.process_status_flag(I):=NULL;
2955 FND_MESSAGE.SET_NAME('QP','QP_ATTRIBUTE_REQUIRED');
2956 FND_MESSAGE.SET_TOKEN('ATTRIBUTE','ORIG_SYS_QUALIFIER_REF');
2957 QP_BULK_MSG.ADD(l_msg_rec);
2958 END IF;
2959 l_exist:=null;
2960 -- Check for uniqueness of orig_sys_qualifier_ref
2961 BEGIN
2962 Select 1 INTO l_exist
2963 from qp_qualifiers
2964 where orig_sys_qualifier_ref=p_qualifier_rec.orig_sys_qualifier_ref(I)
2965 and orig_sys_header_ref = p_qualifier_rec.orig_sys_header_ref(I);
2966 EXCEPTION
2967 WHEN NO_DATA_FOUND THEN
2968 l_exist := 0;
2969 END;
2970
2971 IF p_qualifier_rec.interface_action_code(I) = 'INSERT' AND l_exist = 1 THEN
2972 p_qualifier_rec.process_status_flag(I):=NULL;
2973 FND_MESSAGE.SET_NAME('QP', 'ORIG_SYS_QUAL_REF_NOT_UNIQUE');
2974 FND_MESSAGE.SET_TOKEN('REF_NO', p_qualifier_rec.orig_sys_qualifier_ref(I));
2975 QP_BULK_MSG.add(l_msg_rec);
2976 ELSIF p_qualifier_rec.interface_action_code(I) = 'UPDATE' AND l_exist = 0 THEN
2977 p_qualifier_rec.process_status_flag(I):=NULL;
2978 FND_MESSAGE.SET_NAME('QP', 'QUALIFIER_REC_DOES_NOT_EXIST');
2979 FND_MESSAGE.SET_TOKEN('REF_NO', p_qualifier_rec.orig_sys_qualifier_ref(I));
2980 QP_BULK_MSG.add(l_msg_rec);
2981 END IF;
2982 If p_qualifier_rec.interface_action_code(I)='INSERT' THEN
2983 l_exist:=null;
2984 Select /*+ index(qp_interface_qualifiers QP_INTERFACE_QUALIFIERS_N3) */ --bug8359604
2985 count(*) INTO l_exist
2986 from qp_interface_qualifiers
2987 where request_id = p_qualifier_rec.request_id(I)
2988 and orig_sys_qualifier_ref=p_qualifier_rec.orig_sys_qualifier_ref(I)
2989 and p_qualifier_rec.process_status_flag(I) ='P' --is null
2990 and orig_sys_header_ref = p_qualifier_rec.orig_sys_header_ref(I);
2991
2992 IF l_exist >1 THEN
2993 p_qualifier_rec.process_status_flag(I):=NULL;
2994 FND_MESSAGE.SET_NAME('QP', 'ORIG_SYS_QUAL_REF_NOT_UNIQUE');
2995 FND_MESSAGE.SET_TOKEN('REF_NO', p_qualifier_rec.orig_sys_qualifier_ref(I));
2996 QP_BULK_MSG.add(l_msg_rec);
2997 END IF;
2998 end if;
2999
3000 Begin
3001 select list_header_id, active_flag
3002 into p_qualifier_rec.list_header_id(I), p_qualifier_rec.active_flag(i)
3003 from qp_list_headers_b
3004 where orig_system_header_ref = p_qualifier_rec.orig_sys_header_ref(I);
3005 Exception
3006 When NO_DATA_FOUND then
3007 p_qualifier_rec.process_status_flag(I):=NULL;
3008 p_qualifier_rec.list_header_id(I) := -1;
3009 fnd_message.set_name('QP', 'QP_INVALID_HEADER_REF');
3010 FND_MESSAGE.SET_TOKEN('REF_NO',NULL);
3011 qp_bulk_msg.add(l_msg_rec);
3012 End;
3013
3014 --SECONDARY PRICELIST CHECK
3015 qp_bulk_loader_pub.write_log( 'SECONDARY PRICELIST CHECK');
3016 IF p_qualifier_rec.qualifier_context(I) = 'MODLIST'
3017 AND p_qualifier_rec.qualifier_attribute(I) = 'QUALIFIER_ATTRIBUTE4' THEN
3018
3019 -- Bug 4926775 START RAVI
3020 /**
3021 The currency code for the primary and secondary price lists should be same. (Messages)
3022 **/
3023 BEGIN
3024 SELECT qplh.list_header_id
3025 INTO l_list_header_id
3026 FROM QP_interface_list_headers qpilh, qp_list_headers qplh
3027 WHERE qplh.list_header_id = to_number(p_qualifier_rec.qualifier_attr_value(I))
3028 AND qpilh.ORIG_SYS_HEADER_REF = p_qualifier_rec.ORIG_SYS_HEADER_REF(I)
3029 AND qplh.currency_code = qpilh.currency_code;
3030 EXCEPTION
3031 WHEN NO_DATA_FOUND THEN
3032 qp_bulk_loader_pub.write_log( 'Secondary Price List Currency not compatible with primary price list currency code');
3033 P_QUALIFIER_REC.PROCESS_STATUS_FLAG(I):= NULL; --'E';
3034 FND_MESSAGE.SET_NAME('QP', 'QP_SEC_PRL_CCD_INVALID');
3035 --FND_MESSAGE.SET_TOKEN('PRICELIST_NAME', p_qualifier_rec.qualifier_attr_value(I));
3036 QP_BULK_MSG.ADD(l_msg_rec);
3037 END;
3038 -- Bug 4926775 END RAVI
3039
3040 IF p_qualifier_rec.qualifier_attr_value(I) IS NULL THEN
3041 qp_bulk_loader_pub.write_log( 'Secondary Price List read from qp_list_header');
3042 BEGIN
3043 SELECT to_char(list_header_id)
3044 INTO p_qualifier_rec.qualifier_attr_value(I)
3045 FROM QP_LIST_HEADERS_TL
3046 WHERE NAME = p_qualifier_rec.qualifier_attr_value_code(I)
3047 AND LANGUAGE = userenv('LANG');
3048 EXCEPTION
3049 WHEN NO_DATA_FOUND THEN
3050 P_QUALIFIER_REC.PROCESS_STATUS_FLAG(I):= NULL; --'E';
3051 FND_MESSAGE.SET_NAME('QP', 'SEC_PRL_ERROR');
3052 FND_MESSAGE.SET_TOKEN('PRICELIST_NAME', p_qualifier_rec.qualifier_attr_value_code(I));
3053 QP_BULK_MSG.ADD(l_msg_rec);
3054 END;
3055 END IF;
3056 IF p_qualifier_rec.qualifier_attr_value(I) IS NOT NULL THEN
3057 qp_bulk_loader_pub.write_log( 'Secondary Price List duplicate check');
3058 l_exist:=0;
3059 begin
3060 select 1 into l_exist
3061 from qp_qualifiers
3062 where qualifier_context = 'MODLIST'
3063 and qualifier_attribute = 'QUALIFIER_ATTRIBUTE4'
3064 and qualifier_attr_value = to_number(p_qualifier_rec.qualifier_attr_value(I))
3065 -- Bug# 5276935 RAVI
3066 -- Chcek for duplication in the remaining qualifiers
3067 and orig_sys_qualifier_ref <> p_qualifier_rec.orig_sys_qualifier_ref(I)
3068 and list_header_id = p_qualifier_rec.list_header_id(I);
3069 exception
3070 when others then
3071 null;
3072 end;
3073 if l_exist = 0 then
3074 qp_bulk_loader_pub.write_log( 'Secondary Price List dupl. checkin int. table');
3075 begin
3076 select 1 into l_exist
3077 from qp_interface_qualifiers
3078 where request_id = p_qualifier_rec.request_id(I)
3079 and orig_sys_header_ref = p_qualifier_rec.orig_sys_header_ref(I)
3080 and orig_sys_qualifier_ref <> p_qualifier_rec.orig_sys_qualifier_ref(I)
3081 and qualifier_context = 'MODLIST'
3082 and qualifier_attribute = 'QUALIFIER_ATTRIBUTE4'
3083 and qualifier_attr_value = p_qualifier_rec.qualifier_attr_value(I);
3084 exception
3085 when others then
3086 null;
3087 end;
3088 end if;
3089 if l_exist <> 0 then
3090 P_QUALIFIER_REC.PROCESS_STATUS_FLAG(I):= NULL; --'E';
3091 FND_MESSAGE.SET_NAME('QP','QP_INVALID_ATTRIBUTE');
3092 FND_MESSAGE.SET_TOKEN('ATTRIBUTE',' Price List');
3093 QP_BULK_MSG.ADD(l_msg_rec);
3094 end if;
3095 qp_bulk_loader_pub.write_log( 'Secondary Price List security check');
3096 IF QP_security.check_function(p_function_name => QP_Security.G_FUNCTION_UPDATE,
3097 p_instance_type => QP_Security.G_PRICELIST_OBJECT,
3098 p_instance_pk1 => to_number(p_qualifier_rec.qualifier_attr_value(I))) <> 'T' THEN
3099 p_qualifier_rec.process_status_flag(I):=NULL;
3100 fnd_message.set_name('QP', 'QP_NO_PRIVILEGE');
3101 fnd_message.set_token('PRICING_OBJECT', 'Price List');
3102 qp_bulk_msg.add(l_msg_rec);
3103 END IF;
3104 END IF;
3105 END IF;
3106
3107 -- Basic_Pricing_Condition
3108 -- Secondary PricelIst check while basic pricing
3109 IF QP_BULK_LOADER_PUB.GET_QP_STATUS<>'I' THEN
3110 IF p_qualifier_rec.qualifier_context(I) = 'MODLIST'
3111 AND p_qualifier_rec.qualifier_attribute(I) = 'QUALIFIER_ATTRIBUTE4' THEN
3112 l_exist:=0;
3113
3114 SELECT count(*)
3115 INTO l_exist
3116 FROM QP_SECONDARY_PRICE_LISTS_V
3117 WHERE parent_price_list_id = p_qualifier_rec.qualifier_attr_value(I);
3118
3119 qp_bulk_loader_pub.write_log( 'l_exist='||l_exist);
3120
3121 IF l_exist > 0 THEN
3122 P_QUALIFIER_REC.PROCESS_STATUS_FLAG(I):= NULL; --'E';
3123 FND_MESSAGE.SET_NAME('QP','QP_1_SEC_PLST_FOR_BASIC');
3124 --Only one secondary pricelist allowed in Basic Pricing
3125 QP_BULK_MSG.ADD(l_msg_rec);
3126 END IF;
3127 l_exist:=0;
3128 SELECT count(*)
3129 INTO l_exist
3130 FROM QP_INTERFACE_QUALIFIERS
3131 WHERE QUALIFIER_CONTEXT = 'MODLIST'
3132 AND QUALIFIER_ATTRIBUTE = 'QUALIFIER_ATTRIBUTE4'
3133 AND request_id = p_qualifier_rec.request_id(I)
3134 AND (QUALIFIER_ATTR_VALUE = p_qualifier_rec.qualifier_attr_value(I)
3135 OR QUALIFIER_ATTR_VALUE_CODE = p_qualifier_rec.qualifier_attr_value_code(I));
3136 IF l_exist > 1 THEN
3137 P_QUALIFIER_REC.PROCESS_STATUS_FLAG(I):= NULL; --'E';
3138 FND_MESSAGE.SET_NAME('QP','QP_1_SEC_PLST_FOR_BASIC');
3139 --Only one secondary pricelist allowed in Basic Pricing
3140 QP_BULK_MSG.ADD(l_msg_rec);
3141 END IF;
3142 END IF;
3143 END IF;
3144 --check for the qualifier level
3145 IF p_qualifier_rec.process_status_flag(I) ='P' THEN --IS NOT NULL THEN
3146 BEGIN
3147 SELECT f.segment_level
3148 INTO l_seg_level
3149 FROM qp_prc_contexts_b d,
3150 qp_segments_b e, qp_pte_segments f
3151 WHERE d.prc_context_code =p_qualifier_rec.qualifier_context(I)
3152 AND e.segment_mapping_column = p_qualifier_rec.qualifier_attribute(I)
3153 AND d.prc_context_id = e.prc_context_id
3154 AND e.segment_id = f.segment_id
3155 AND f.pte_code = 'ORDFUL';
3156
3157 IF l_seg_level = 'ORDER' THEN
3158 P_QUALIFIER_REC.PROCESS_STATUS_FLAG(I):= NULL; --'E';
3159 FND_MESSAGE.SET_NAME('QP', 'QP_ORDER_LEVEL_QUAL_NOT_ALLOWED');
3160 QP_BULK_MSG.ADD(l_msg_rec);
3161 END IF;
3162
3163 EXCEPTION
3164 WHEN NO_DATA_FOUND THEN
3165 NULL;
3166 END;
3167
3168 END IF;
3169
3170 IF p_qualifier_rec.qualifier_precedence(I) IS NULL or
3171 p_qualifier_rec.qualifier_precedence(I) = 0 THEN
3172 QP_UTIL.validate_qp_flexfield(flexfield_name =>'QP_ATTR_DEFNS_QUALIFIER'
3173 ,context =>p_qualifier_rec.qualifier_context(I)
3174 ,attribute =>p_qualifier_rec.qualifier_attribute(I)
3175 ,value =>p_qualifier_rec.qualifier_attr_value(I)
3176 ,application_short_name => 'QP'
3177 ,context_flag =>l_context_error
3178 ,attribute_flag =>l_attribute_error
3179 ,value_flag =>l_value_error
3180 ,datatype =>l_datatype
3181 ,precedence =>l_precedence
3182 ,error_code =>l_error_code
3183 );
3184
3185 If l_error_code = 0 Then
3186 p_qualifier_rec.qualifier_precedence(I) := l_precedence;
3187 end if;
3188 END IF;
3189
3190 --warning messages
3191 IF P_QUALIFIER_REC.PROCESS_STATUS_FLAG(I)='P' THEN --,'*')<> 'E' THEN
3192 qp_bulk_loader_pub.write_log('Entering Qualifier warnings');
3193
3194 IF p_Qualifier_rec.qualifier_context(I) IS NOT NULL AND
3195 p_Qualifier_rec.qualifier_attribute(I) IS NOT NULL
3196 THEN
3197 qp_bulk_loader_pub.write_log('Context and Attribute OK ');
3198 QP_UTIL.Get_Context_Type('QP_ATTR_DEFNS_QUALIFIER',
3199 p_Qualifier_rec.qualifier_context(I),
3200 l_context_type,
3201 l_error_code);
3202
3203 IF l_error_code = 0 THEN --successfully returned context_type
3204
3205 QP_UTIL.Get_Sourcing_Info(l_context_type,
3206 p_Qualifier_rec.qualifier_context(I),
3207 p_Qualifier_rec.qualifier_attribute(I),
3208 l_sourcing_enabled,
3209 l_sourcing_status,
3210 l_sourcing_method);
3211
3212 qp_bulk_loader_pub.write_log('Sourcing method / status / enabled'||l_sourcing_method||l_sourcing_status||l_sourcing_enabled);
3213
3214 IF l_sourcing_method = 'ATTRIBUTE MAPPING' THEN
3215
3216 IF l_sourcing_enabled <> 'Y' THEN
3217
3218 FND_MESSAGE.SET_NAME('QP','QP_ENABLE_SOURCING');
3219 FND_MESSAGE.SET_TOKEN('CONTEXT',
3220 p_Qualifier_rec.qualifier_context(I));
3221 FND_MESSAGE.SET_TOKEN('ATTRIBUTE',
3222 p_Qualifier_rec.qualifier_attribute(I));
3223 QP_BULK_MSG.ADD(l_msg_rec);
3224
3225 END IF;
3226
3227 IF l_sourcing_status <> 'Y' THEN
3228
3229 IF NOT (
3230 p_qualifier_rec.qualifier_context(I)= 'MODLIST' AND
3231 p_qualifier_rec.qualifier_attribute(I) = 'QUALIFIER_ATTRIBUTE10')
3232 THEN
3233 FND_MESSAGE.SET_NAME('QP','QP_BUILD_SOURCING_RULES');
3234 FND_MESSAGE.SET_TOKEN('CONTEXT',
3235 p_Qualifier_rec.qualifier_context(I));
3236 FND_MESSAGE.SET_TOKEN('ATTRIBUTE',
3237 p_Qualifier_rec.qualifier_attribute(I));
3238 QP_BULK_MSG.ADD(l_msg_rec);
3239 END IF;
3240
3241 END IF;
3242
3243 END IF; --If sourcing_method = 'ATTRIBUTE MAPPING'
3244
3245 END IF; --l_error_code = 0
3246
3247 END IF;--If qualifier_context and qualifier_attribute are NOT NULL
3248
3249 END IF;
3250 END LOOP;
3251
3252 qp_bulk_loader_pub.write_log('Leaving Entity qualifier validation');
3253
3254 EXCEPTION
3255 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
3256 qp_bulk_loader_pub.write_log( 'UNEXCPECTED ERROR IN PROCEDURE ENTITY_QUALIFIER:'||sqlerrm);
3257 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
3258 WHEN OTHERS THEN
3259 qp_bulk_loader_pub.write_log( 'UNEXCPECTED ERROR IN PROCEDURE ENTITY_QUALIFIER:'||sqlerrm);
3260 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
3261
3262
3263 END ENTITY_QUALIFIER;
3264
3265 PROCEDURE ENTITY_PRICING_ATTR
3266 (p_pricing_attr_rec IN OUT NOCOPY QP_BULK_LOADER_PUB.pricing_attr_rec_type)
3267 IS
3268 l_msg_rec QP_BULK_MSG.Msg_Rec_Type;
3269 l_exist NUMBER;
3270 l_exist1 NUMBER;
3271 l_comparison_operator_code VARCHAR2(30);
3272 l_error_code NUMBER;
3273 l_precedence NUMBER;
3274 l_datatype FND_FLEX_VALUE_SETS.Format_type%TYPE;
3275 l_value_error VARCHAR2(1);
3276 l_context_error VARCHAR2(1);
3277 l_attribute_error VARCHAR2(1);
3278 l_primary_uom_flag VARCHAR2(1);
3279 l_count NUMBER;
3280 l_count1 NUMBER;
3281 l_msg_txt VARCHAR2(2000);
3282 l_status VARCHAR2(20);
3283 l_status1 VARCHAR2(20);
3284 l_pricing_attribute_id NUMBER;
3285 l_old_pricing_attr_rec QP_Price_List_PUB.Pricing_Attr_Rec_Type;
3286 l_availability_in_basic VARCHAR2(1);
3287 l_pricing_attr_flex_enabled VARCHAR2(1);
3288 l_pte_code VARCHAR2(30);
3289
3290 l_context_type VARCHAR2(30);
3291 l_sourcing_enabled VARCHAR2(1);
3292 l_sourcing_status VARCHAR2(1);
3293 l_sourcing_method VARCHAR2(30);
3294 --smbalara 9458481/10152629 /10152629 START
3295 l_min_date DATE;
3296 l_max_date DATE;
3297 l_return_status VARCHAR2(1) := FND_API.G_RET_STS_SUCCESS;
3298 l_start_date_active DATE;
3299 l_end_date_active DATE;
3300 l_edate DATE;
3301 l_sdate DATE;
3302 l_revision VARCHAR2(30);
3303 l_list_header_id NUMBER;
3304 l_x_rows NUMBER := 0;
3305 l_x_revision BOOLEAN;
3306 l_x_effdates BOOLEAN;
3307 l_x_dup_sdate DATE;
3308 l_x_dup_edate DATE;
3309 --smbalara 9458481/10152629 /10152629 END
3310 l_ss_code VARCHAR2(30);
3311 l_fna_name VARCHAR2(4000);
3312 l_fna_desc VARCHAR2(489);
3313 l_fna_valid BOOLEAN;
3314
3315 --ENH Continuous Price Break START RAVI
3316 l_old_break_pa_count NUMBER := -1;
3317 l_new_break_pa_count NUMBER := -1;
3318 l_new_break_low_value NUMBER := -1;
3319 l_new_break_high_value NUMBER := -1;
3320 l_old_break_low_value NUMBER := -1;
3321 l_old_break_high_value NUMBER := -1;
3322 l_break_high_value NUMBER := -1;
3323 l_to_value_old NUMBER := -1;
3324 l_to_value_new NUMBER := -1;
3325 l_from_value_old NUMBER := -1;
3326 l_from_value_new NUMBER := -1;
3327 --ENH Continuous Price Break END RAVI
3328
3329 -- Bug# 5246745 RAVI
3330 l_pa_count NUMBER := 0;
3331
3332
3333 -- Bug# 5440851 RAVI
3334 l_pa_from_val_tmp NUMBER := 0;
3335 l_pa_to_val_tmp NUMBER := 0;
3336
3337 -- Bug# 5528754
3338 -- Local variable to store price break or price list line
3339 l_pa_price_break VARCHAR2(30):='PRICE LIST LINE';
3340
3341 Cursor C_break_lines(p_orig_sys_line_ref VARCHAR2,
3342 -- Bug 5246745 Use Composite Index for Ref columns
3343 p_orig_sys_header_ref VARCHAR2) IS
3344 --ENH Continuous Price Break RAVI
3345 /**
3346 Check for overlap of price breaks
3347 **/
3348 SELECT 'OVERLAP'
3349 FROM qp_list_lines la,
3350 qp_rltd_modifiers ra,
3351 qp_rltd_modifiers rb,
3352 qp_interface_pricing_attribs pa,
3353 qp_pricing_attributes pb
3354 WHERE la.orig_sys_line_ref = p_orig_sys_line_ref
3355 -- Bug 5246745 Use Composite Index for Ref columns
3356 AND la.orig_sys_header_ref = p_orig_sys_header_ref
3357 AND ra.to_rltd_modifier_id = la.list_line_id
3358 AND ra.rltd_modifier_grp_type = 'PRICE BREAK'
3359 -- Got Price Break Line
3360 AND ra.from_rltd_modifier_id = rb.from_rltd_modifier_id
3361 AND ra.to_rltd_modifier_id <> rb.to_rltd_modifier_id
3362 -- Got Remaining Price Break Lines
3363 AND pa.orig_sys_line_ref = la.orig_sys_line_ref
3364 -- Got Price Break Line New Values
3365 AND rb.to_rltd_modifier_id = pb.list_line_id
3366 -- Got Remaining Price Break Lines Values
3367 -- Bug# 5236432 RAVI
3368 AND pb.orig_sys_pricing_attr_ref NOT IN (
3369 select pia.orig_sys_pricing_attr_ref
3370 from qp_interface_pricing_attribs pia
3371 where pia.orig_sys_header_ref=pb.orig_sys_header_ref
3372 and pia.orig_sys_line_ref=pb.orig_sys_line_ref
3373 )
3374 -- Got the remaining Price Break Lines that are not being updated in this request
3375 AND (
3376 ( qp_number.canonical_to_number(pa.pricing_attr_value_from) >=
3377 qp_number.canonical_to_number(pa.pricing_attr_value_to)
3378 ) -- New Price Break To is greater than (or equal to) New Price Break From
3379 OR
3380 ( qp_number.canonical_to_number(pa.pricing_attr_value_from) <
3381 qp_number.canonical_to_number(pb.pricing_attr_value_to)
3382 AND qp_number.canonical_to_number(pa.pricing_attr_value_from) >=
3383 qp_number.canonical_to_number(pb.pricing_attr_value_from)
3384 ) -- New Price Break From in between Old Price Break
3385 OR
3386 ( qp_number.canonical_to_number(pa.pricing_attr_value_to) <=
3387 qp_number.canonical_to_number(pb.pricing_attr_value_to)
3388 AND qp_number.canonical_to_number(pa.pricing_attr_value_to) >
3389 qp_number.canonical_to_number(pb.pricing_attr_value_from)
3390 ) -- New Price Break To in between Old Price Break
3391 OR
3392 ( qp_number.canonical_to_number(pa.pricing_attr_value_from) <
3393 qp_number.canonical_to_number(pb.pricing_attr_value_from)
3394 AND qp_number.canonical_to_number(pa.pricing_attr_value_to) >
3395 qp_number.canonical_to_number(pb.pricing_attr_value_to)
3396 ) -- Old Price Break in between New Price Break
3397 );
3398
3399 Cursor C_old_cont_grp_break_line(p_orig_sys_line_ref VARCHAR2,
3400 -- Bug 5246745 Use Composite Index for Ref columns
3401 p_orig_sys_header_ref VARCHAR2) IS
3402 --ENH Continuous Price Break RAVI
3403 /**
3404 Count of old price breaks
3405 **/
3406 SELECT count(*) old_break_pa_count,
3407 min(to_number(pb.pricing_attr_value_from)) new_break_low_value,
3408 max(to_number(pb.pricing_attr_value_to)) new_break_high_value
3409 FROM qp_list_lines la,
3410 qp_rltd_modifiers ra,
3411 qp_rltd_modifiers rb,
3412 qp_interface_pricing_attribs pa,
3413 qp_pricing_attributes pb
3414 WHERE la.orig_sys_line_ref = p_orig_sys_line_ref
3415 -- Bug 5246745 Use Composite Index for Ref columns
3416 AND la.orig_sys_header_ref = p_orig_sys_header_ref
3417 AND ra.to_rltd_modifier_id = la.list_line_id
3418 AND ra.rltd_modifier_grp_type = 'PRICE BREAK'
3419 -- Got Price Break Line
3420 AND ra.from_rltd_modifier_id = rb.from_rltd_modifier_id
3421 AND ra.to_rltd_modifier_id <> rb.to_rltd_modifier_id
3422 -- Got Remaining Price Break Lines
3423 AND pa.orig_sys_line_ref = la.orig_sys_line_ref
3424 -- Got Price Break Line New Values
3425 AND rb.to_rltd_modifier_id = pb.list_line_id;
3426 -- Got Remaining Price Break Lines Values
3427
3428 --ENH Continuous Price Break RAVI
3429 /**
3430 Count of new price breaks
3431 **/
3432 Cursor C_new_cont_grp_break_lines(p_orig_sys_line_ref VARCHAR2,
3433 -- Bug 5246745 Use Composite Index for Ref columns
3434 p_orig_sys_header_ref VARCHAR2) IS
3435 SELECT count(*) new_break_pa_count,
3436 min(to_number(pb.pricing_attr_value_from)) new_break_low_value,
3437 max(to_number(pb.pricing_attr_value_to)) new_break_high_value
3438 FROM qp_list_lines la,
3439 qp_list_lines lb,
3440 qp_rltd_modifiers ra,
3441 qp_rltd_modifiers rb,
3442 qp_interface_pricing_attribs pa,
3443 qp_interface_pricing_attribs pb
3444 WHERE la.orig_sys_line_ref = p_orig_sys_line_ref
3445 -- Bug 5246745 Use Composite Index for Ref columns
3446 AND la.orig_sys_header_ref = p_orig_sys_header_ref
3447 AND ra.to_rltd_modifier_id = la.list_line_id
3448 AND ra.from_rltd_modifier_id = rb.from_rltd_modifier_id
3449 AND pa.orig_sys_line_ref = la.orig_sys_line_ref
3450 AND rb.to_rltd_modifier_id = lb.list_line_id
3451 AND pb.orig_sys_line_ref = lb.orig_sys_line_ref
3452 AND ra.rltd_modifier_grp_type = 'PRICE BREAK'
3453 AND ra.to_rltd_modifier_id <> rb.to_rltd_modifier_id;
3454
3455 --ENH Continuous Price Break RAVI
3456 /**
3457 Count of Old Price Breaks with Same From value
3458 **/
3459 Cursor C_from_value_old(p_orig_sys_line_ref VARCHAR2,
3460 -- Bug 5246745 Use Composite Index for Ref columns
3461 p_orig_sys_header_ref VARCHAR2) IS
3462 SELECT count(*) l_from_value_old
3463 FROM qp_list_lines la,
3464 qp_rltd_modifiers ra,
3465 qp_rltd_modifiers rb,
3466 qp_interface_pricing_attribs pa,
3467 qp_pricing_attributes pb
3468 WHERE la.orig_sys_line_ref = p_orig_sys_line_ref
3469 -- Bug 5246745 Use Composite Index for Ref columns
3470 AND la.orig_sys_header_ref = p_orig_sys_header_ref
3471 AND ra.to_rltd_modifier_id = la.list_line_id
3472 AND ra.rltd_modifier_grp_type = 'PRICE BREAK'
3473 -- Got Price Break Line
3474 AND ra.from_rltd_modifier_id = rb.from_rltd_modifier_id
3475 AND ra.to_rltd_modifier_id <> rb.to_rltd_modifier_id
3476 -- Got Remaining Price Break Lines
3477 AND pa.orig_sys_line_ref = la.orig_sys_line_ref
3478 -- Got Price Break Line New Values
3479 AND rb.to_rltd_modifier_id = pb.list_line_id
3480 -- Got Remaining Price Break Lines Values
3481 AND pa.pricing_attr_value_from=pb.pricing_attr_value_to;
3482
3483 --ENH Continuous Price Break RAVI
3484 /**
3485 Count of new Price Breaks with Same From value
3486 **/
3487 Cursor C_from_value_new(p_orig_sys_line_ref VARCHAR2,
3488 -- Bug 5246745 Use Composite Index for Ref columns
3489 p_orig_sys_header_ref VARCHAR2) IS
3490 SELECT count(*) l_from_value_new
3491 FROM qp_list_lines la,
3492 qp_list_lines lb,
3493 qp_rltd_modifiers ra,
3494 qp_rltd_modifiers rb,
3495 qp_interface_pricing_attribs pa,
3496 qp_interface_pricing_attribs pb
3497 WHERE la.orig_sys_line_ref = p_orig_sys_line_ref
3498 -- Bug 5246745 Use Composite Index for Ref columns
3499 AND la.orig_sys_header_ref = p_orig_sys_header_ref
3500 AND ra.to_rltd_modifier_id = la.list_line_id
3501 AND ra.from_rltd_modifier_id = rb.from_rltd_modifier_id
3502 AND pa.orig_sys_line_ref = la.orig_sys_line_ref
3503 AND rb.to_rltd_modifier_id = lb.list_line_id
3504 AND pb.orig_sys_line_ref = lb.orig_sys_line_ref
3505 AND ra.rltd_modifier_grp_type = 'PRICE BREAK'
3506 AND ra.to_rltd_modifier_id <> rb.to_rltd_modifier_id
3507 AND pa.pricing_attr_value_from=pb.pricing_attr_value_to;
3508
3509 --ENH Continuous Price Break RAVI
3510 /**
3511 Count of Old Price Breaks with Same to value
3512 **/
3513 Cursor C_to_value_old(p_orig_sys_line_ref VARCHAR2,
3514 -- Bug 5246745 Use Composite Index for Ref columns
3515 p_orig_sys_header_ref VARCHAR2) IS
3516 SELECT count(*) l_to_value_old
3517 FROM qp_list_lines la,
3518 qp_rltd_modifiers ra,
3519 qp_rltd_modifiers rb,
3520 qp_interface_pricing_attribs pa,
3521 qp_pricing_attributes pb
3522 WHERE la.orig_sys_line_ref = p_orig_sys_line_ref
3523 -- Bug 5246745 Use Composite Index for Ref columns
3524 AND la.orig_sys_header_ref = p_orig_sys_header_ref
3525 AND ra.to_rltd_modifier_id = la.list_line_id
3526 AND ra.rltd_modifier_grp_type = 'PRICE BREAK'
3527 -- Got Price Break Line
3528 AND ra.from_rltd_modifier_id = rb.from_rltd_modifier_id
3529 AND ra.to_rltd_modifier_id <> rb.to_rltd_modifier_id
3530 -- Got Remaining Price Break Lines
3531 AND pa.orig_sys_line_ref = la.orig_sys_line_ref
3532 -- Got Price Break Line New Values
3533 AND rb.to_rltd_modifier_id = pb.list_line_id
3534 -- Got Remaining Price Break Lines Values
3535 AND pa.pricing_attr_value_to=pb.pricing_attr_value_from;
3536
3537 --ENH Continuous Price Break RAVI
3538 /**
3539 Count of new Price Breaks with Same to value
3540 **/
3541 Cursor C_to_value_new(p_orig_sys_line_ref VARCHAR2,
3542 -- Bug 5246745 Use Composite Index for Ref columns
3543 p_orig_sys_header_ref VARCHAR2) IS
3544 SELECT count(*) l_to_value_new
3545 FROM qp_list_lines la,
3546 qp_list_lines lb,
3547 qp_rltd_modifiers ra,
3548 qp_rltd_modifiers rb,
3549 qp_interface_pricing_attribs pa,
3550 qp_interface_pricing_attribs pb
3551 WHERE la.orig_sys_line_ref = p_orig_sys_line_ref
3552 -- Bug 5246745 Use Composite Index for Ref columns
3553 AND la.orig_sys_header_ref = p_orig_sys_header_ref
3554 AND ra.to_rltd_modifier_id = la.list_line_id
3555 AND ra.from_rltd_modifier_id = rb.from_rltd_modifier_id
3556 AND pa.orig_sys_line_ref = la.orig_sys_line_ref
3557 AND rb.to_rltd_modifier_id = lb.list_line_id
3558 AND pb.orig_sys_line_ref = lb.orig_sys_line_ref
3559 AND ra.rltd_modifier_grp_type = 'PRICE BREAK'
3560 AND ra.to_rltd_modifier_id <> rb.to_rltd_modifier_id
3561 AND pa.pricing_attr_value_to=pb.pricing_attr_value_from;
3562
3563 Cursor C_Int_break_lines(p_orig_sys_line_ref VARCHAR2,
3564 -- Bug 5246745 Use Composite Index for Ref columns
3565 p_orig_sys_header_ref VARCHAR2,
3566 p_request_id number) IS -- changes done by rassharm for bug no 6028305
3567 SELECT /*+ leading(la) index(pa QP_INTERFACE_PRCNG_ATTRIBS_N4) index(pb QP_INTERFACE_PRCNG_ATTRIBS_N4) */ --7433219
3568 'OVERLAP'
3569 FROM qp_list_lines la,
3570 qp_list_lines lb,
3571 qp_rltd_modifiers ra,
3572 qp_rltd_modifiers rb,
3573 qp_interface_pricing_attribs pa,
3574 qp_interface_pricing_attribs pb
3575 WHERE la.orig_sys_line_ref = p_orig_sys_line_ref
3576 -- Bug 5246745 Use Composite Index for Ref columns
3577 AND la.orig_sys_header_ref = p_orig_sys_header_ref
3578 AND ra.to_rltd_modifier_id = la.list_line_id
3579 AND ra.from_rltd_modifier_id = rb.from_rltd_modifier_id
3580 AND pa.orig_sys_line_ref = la.orig_sys_line_ref
3581 AND rb.to_rltd_modifier_id = lb.list_line_id
3582 AND pb.orig_sys_line_ref = lb.orig_sys_line_ref
3583 AND ra.rltd_modifier_grp_type = 'PRICE BREAK'
3584 AND ra.to_rltd_modifier_id <> rb.to_rltd_modifier_id
3585 AND nvl(pa.pricing_attribute_datatype,'N') = 'N'
3586 -- changes done by rassharm for bug no 6028305
3587 AND pa.request_id=p_request_id
3588 AND pb.request_id=p_request_id
3589 -- end changes
3590
3591 AND (qp_number.canonical_to_number(pa.pricing_attr_value_from) < -- 4713369
3592 qp_number.canonical_to_number(pb.pricing_attr_value_to) AND
3593 qp_number.canonical_to_number(pa.pricing_attr_value_from) >=
3594 qp_number.canonical_to_number(pb.pricing_attr_value_from)
3595 OR
3596 qp_number.canonical_to_number(pa.pricing_attr_value_to) <=
3597 qp_number.canonical_to_number(pb.pricing_attr_value_to) AND
3598 qp_number.canonical_to_number(pa.pricing_attr_value_to) >
3599 qp_number.canonical_to_number(pb.pricing_attr_value_from)
3600 OR
3601 qp_number.canonical_to_number(pa.pricing_attr_value_from) <=
3602 qp_number.canonical_to_number(pb.pricing_attr_value_from) AND
3603 qp_number.canonical_to_number(pa.pricing_attr_value_to) >=
3604 qp_number.canonical_to_number(pb.pricing_attr_value_to));
3605
3606 BEGIN
3607 qp_bulk_loader_pub.write_log('Entering Entity pricing attribute validation');
3608 FND_PROFILE.GET('QP_PRICING_TRANSACTION_ENTITY',l_pte_code);
3609
3610 FOR I IN 1..p_pricing_attr_rec.orig_sys_pricing_attr_ref.COUNT
3611 LOOP
3612
3613 --Initially setting the message context.
3614
3615 l_msg_rec.REQUEST_ID := P_PRICING_ATTR_REC.REQUEST_ID(I);
3616 l_msg_rec.ENTITY_TYPE := 'PRL';
3617 l_msg_rec.TABLE_NAME := 'QP_INTERFACE_PRICING_ATTRIBS';
3618 l_msg_rec.ORIG_SYS_HEADER_REF := p_pricing_attr_rec.orig_sys_header_ref(I);
3619 l_msg_rec.ORIG_SYS_LINE_REF := p_pricing_attr_rec.orig_sys_line_ref(I);
3620 l_msg_rec.ORIG_SYS_QUALIFIER_REF := NULL;
3621 l_msg_rec.ORIG_SYS_PRICING_ATTR_REF := p_pricing_attr_rec.orig_sys_pricing_attr_ref(I);
3622
3623 qp_bulk_loader_pub.write_log('Inside entity pricing attr');
3624 -- Internal field population
3625 --List Line ID
3626 BEGIN
3627 select list_line_id
3628 into p_pricing_attr_rec.list_line_id(I)
3629 from qp_list_lines
3630 where orig_sys_line_ref = p_pricing_attr_rec.orig_sys_line_ref(I)
3631 and orig_sys_header_ref = p_pricing_attr_rec.orig_sys_header_ref(I);
3632
3633 EXCEPTION
3634 WHEN NO_DATA_FOUND THEN
3635 p_pricing_attr_rec.list_line_id(I) := -1;
3636 p_pricing_attr_rec.process_status_flag(I):=NULL;
3637 fnd_message.set_name('QP', 'QP_INVALID_LINE_REF');
3638 FND_MESSAGE.SET_TOKEN('REF_NO', p_pricing_attr_rec.orig_sys_line_ref(I));
3639 qp_bulk_msg.add(l_msg_rec);
3640 END;
3641 qp_bulk_loader_pub.write_log('After entity list_line_id pricing attribute');
3642
3643
3644 -- Bug# 5246745 RAVI START
3645 --2 If org is Purchasing or PO then the item must be Purchasable or Orderable.
3646 IF p_pricing_attr_rec.product_attribute_context(I)='ITEM' AND
3647 p_pricing_attr_rec.product_attribute(I)= 'PRICING_ATTRIBUTE1'
3648 THEN
3649 l_pa_count :=0;
3650 IF fnd_global.resp_appl_id=178 OR fnd_global.resp_appl_id=201
3651 THEN --Check if item is purchasing enabled
3652 Begin
3653 select count(*) into l_pa_count
3654 from qp_interface_pricing_attribs qipa, mtl_system_items msi
3655 where qipa.orig_sys_pricing_attr_ref = p_pricing_attr_rec.orig_sys_pricing_attr_ref(I)
3656 and qipa.request_id = P_PRICING_ATTR_REC.REQUEST_ID(I)
3657 and qipa.product_attribute_context = 'ITEM'
3658 and qipa.product_attribute = 'PRICING_ATTRIBUTE1'
3659 and msi.inventory_item_id = to_number(qipa.PRODUCT_ATTR_VALUE)
3660 and msi.organization_id = fnd_profile.value('QP_ORGANIZATION_ID')
3661 and msi.purchasing_enabled_flag = 'Y'
3662 and qipa.interface_action_code in ('INSERT','UPDATE');
3663 Exception
3664 when NO_DATA_FOUND then
3665 l_pa_count := 0;
3666 End;
3667 ELSE --Check if item is orderable
3668 Begin
3669 select count(*) into l_pa_count
3670 from qp_interface_pricing_attribs qipa, mtl_system_items msi
3671 where qipa.orig_sys_pricing_attr_ref = p_pricing_attr_rec.orig_sys_pricing_attr_ref(I)
3672 and qipa.request_id = P_PRICING_ATTR_REC.REQUEST_ID(I)
3673 and qipa.product_attribute_context = 'ITEM'
3674 and qipa.product_attribute = 'PRICING_ATTRIBUTE1'
3675 and msi.inventory_item_id = to_number(qipa.PRODUCT_ATTR_VALUE)
3676 and msi.organization_id = fnd_profile.value('QP_ORGANIZATION_ID')
3677 and msi.CUSTOMER_ORDER_flag = 'Y'
3678 and qipa.interface_action_code in ('INSERT','UPDATE');
3679 Exception
3680 when NO_DATA_FOUND then
3681 l_pa_count := 0;
3682 End;
3683 END IF;
3684 if l_pa_count=0 then
3685 p_pricing_attr_rec.process_status_flag(I):=NULL;
3686 FND_MESSAGE.SET_NAME('QP', 'QP_INVALID_ATTRIBUTE');
3687 fnd_message.set_token('ATTRIBUTE', 'PRODUCT_ATTRIBUTE_VALUE');
3688 qp_bulk_msg.add(l_msg_rec);
3689 end if;
3690 END IF;
3691 -- Bug# 5246745 RAVI END
3692
3693 --list_header_id
3694
3695 BEGIN
3696 select list_header_id
3697 into p_pricing_attr_rec.list_header_id(I)
3698 from qp_list_headers_b
3699 where orig_system_header_ref = p_pricing_attr_rec.orig_sys_header_ref(I);
3700 EXCEPTION
3701 WHEN NO_DATA_FOUND THEN
3702 p_pricing_attr_rec.list_header_id(I) := -1;
3703 p_pricing_attr_rec.process_status_flag(I):=NULL;
3704 fnd_message.set_name('QP', 'QP_INVALID_HEADER_REF');
3705 FND_MESSAGE.SET_TOKEN('REF_NO', p_pricing_attr_rec.orig_sys_header_ref(I));
3706 FND_MESSAGE.SET_TOKEN('LS_CODE', NULL);
3707 qp_bulk_msg.add(l_msg_rec);
3708 END;
3709
3710 -- Excluder Flag
3711 p_pricing_attr_rec.excluder_flag(I):='N';
3712 p_pricing_attr_rec.accumulate_flag(I):='N';
3713
3714 -- Attribute Grouping No
3715
3716 IF p_pricing_attr_rec.interface_action_code(I) = 'INSERT' THEN
3717 Select qp_pricing_attr_group_no_s.nextval
3718 into p_pricing_attr_rec.attribute_grouping_no(I)
3719 from dual;
3720 END IF;
3721
3722 p_pricing_attr_rec.pricing_phase_id(I):=1;
3723
3724 -- Check for the uniqueness of orig_sys_pricing_attr_ref
3725 l_exist:=null;
3726 BEGIN
3727 SELECT 1,pricing_attribute_id INTO l_exist,l_pricing_attribute_id
3728 FROM qp_pricing_attributes
3729 WHERE orig_sys_pricing_attr_ref = p_pricing_attr_rec.orig_sys_pricing_attr_ref(I)
3730 AND orig_sys_line_ref = p_pricing_attr_rec.orig_sys_line_ref(I)
3731 AND orig_sys_header_ref = p_pricing_attr_rec.orig_sys_header_ref(I);
3732 EXCEPTION
3733 WHEN NO_DATA_FOUND THEN
3734 l_exist:=0;
3735 END;
3736
3737 IF p_pricing_attr_rec.interface_action_code(I) = 'INSERT' AND l_exist = 1 THEN
3738 p_pricing_attr_rec.process_status_flag(I):=NULL;
3739 fnd_message.set_name('QP', 'ORIG_SYS_PRC_ATTR_REF_NOT_UNIQ');
3740 FND_MESSAGE.SET_TOKEN('REF_NO', p_pricing_attr_rec.orig_sys_pricing_attr_ref(I));
3741 qp_bulk_msg.add(l_msg_rec);
3742 ELSIF p_pricing_attr_rec.interface_action_code(I) = 'UPDATE' AND l_exist = 0 THEN
3743 p_pricing_attr_rec.process_status_flag(I):=NULL;
3744 fnd_message.set_name('QP', 'PRC_ATTR_REC_DOES_NOT_EXIST');
3745 FND_MESSAGE.SET_TOKEN('REF_NO', p_pricing_attr_rec.orig_sys_pricing_attr_ref(I));
3746 qp_bulk_msg.add(l_msg_rec);
3747 END IF;
3748
3749 IF p_pricing_attr_rec.interface_action_code(I) = 'INSERT' THEN
3750 l_exist:=null;
3751 BEGIN
3752 SELECT count(*) INTO l_exist
3753 FROM qp_interface_pricing_attribs
3754 WHERE request_id = p_pricing_attr_rec.request_id(I)
3755 AND orig_sys_pricing_attr_ref = p_pricing_attr_rec.orig_sys_pricing_attr_ref(I)
3756 AND orig_sys_line_ref = p_pricing_attr_rec.orig_sys_line_ref(I)
3757 AND orig_sys_header_ref = p_pricing_attr_rec.orig_sys_header_ref(I);
3758
3759 EXCEPTION
3760 WHEN NO_DATA_FOUND THEN
3761 l_exist:=0;
3762 END;
3763
3764 IF l_exist > 1 THEN
3765 p_pricing_attr_rec.process_status_flag(I):=NULL;
3766 fnd_message.set_name('QP', 'ORIG_SYS_PRC_ATTR_REF_NOT_UNIQ');
3767 FND_MESSAGE.SET_TOKEN('REF_NO', p_pricing_attr_rec.orig_sys_pricing_attr_ref(I));
3768 qp_bulk_msg.add(l_msg_rec);
3769 END IF;
3770 END IF;
3771
3772 -- Functional Area Validation for Hierarchical Categories (sfiresto)
3773 IF p_PRICING_ATTR_rec.product_attribute_context(I) = 'ITEM' AND
3774 p_PRICING_ATTR_rec.product_attribute(I) = 'PRICING_ATTRIBUTE2' THEN
3775 BEGIN
3776
3777 SELECT nvl(pte_code, fnd_profile.value('QP_PRICING_TRANSACTION_ENTITY')),
3778 nvl(source_system_code, fnd_profile.value('QP_SOURCE_SYSTEM_CODE'))
3779 INTO l_pte_code, l_ss_code
3780 FROM qp_interface_list_headers
3781 WHERE orig_sys_header_ref = p_PRICING_ATTR_rec.orig_sys_header_ref(I);
3782
3783 QP_UTIL.Get_Item_Cat_Info(
3784 p_PRICING_ATTR_rec.product_attr_value(I),
3785 l_pte_code,
3786 l_ss_code,
3787 l_fna_name,
3788 l_fna_desc,
3789 l_fna_valid);
3790
3791 IF NOT l_fna_valid THEN
3792
3793 P_PRICING_ATTR_REC.process_status_flag(I):=NULL;
3794
3795 FND_MESSAGE.set_name('QP', 'QP_INVALID_CAT_FUNC_PTE');
3796 FND_MESSAGE.set_token('CATID', p_PRICING_ATTR_REC.product_attr_value(I));
3797 FND_MESSAGE.set_token('PTE', l_pte_code);
3798 FND_MESSAGE.set_token('SS', l_ss_code);
3799 QP_BULK_MSG.Add(L_MSG_REC);
3800
3801 END IF;
3802
3803 END;
3804 END IF;
3805
3806 ----- Getting product_attribute_datatype -----
3807 QP_UTIL.GET_PROD_FLEX_PROPERTIES(p_pricing_attr_rec.product_attribute_context(I),
3808 p_pricing_attr_rec.product_attribute(I),
3809 p_pricing_attr_rec.product_attr_value(I),
3810 l_datatype,
3811 l_precedence,
3812 l_error_code);
3813 IF l_datatype IS NOT NULL THEN
3814 p_pricing_attr_rec.product_attribute_datatype(I):=l_datatype;
3815 ELSE
3816 p_pricing_attr_rec.process_status_flag(I):=NULL;
3817 fnd_message.set_name('QP', 'QP_ATTRIBUTE_REQUIRED');
3818 FND_MESSAGE.SET_TOKEN('ATTRIBUTE','Product Attribute Datatype');
3819 qp_bulk_msg.add(l_msg_rec);
3820 END IF;
3821
3822 qp_bulk_loader_pub.write_log('After entity pricing attribute');
3823
3824 -- product uom code
3825
3826 IF P_PRICING_ATTR_REC.PRODUCT_UOM_CODE(I) IS NULL THEN
3827 P_PRICING_ATTR_REC.process_status_flag(I):=NULL;
3828 FND_MESSAGE.SET_NAME('QP','QP_ATTRIBUTE_REQUIRED');
3829 FND_MESSAGE.SET_TOKEN('ATTRIBUTE',QP_PRC_UTIL.Get_Attribute_Name('PRODUCT_UOM_CODE'));
3830 QP_BULK_MSG.ADD(L_MSG_REC);
3831 END IF;
3832
3833
3834 --- check for single pricing_attribute record with pricing context/attr/value null
3835 qp_bulk_loader_pub.write_log('Pricing attr ref' || p_pricing_attr_rec.orig_sys_pricing_attr_ref(I));
3836 IF p_pricing_attr_rec.pricing_attribute_context(I) IS NULL
3837 OR p_pricing_attr_rec.pricing_attribute(I) IS NULL THEN
3838 l_exist := 0;
3839 BEGIN
3840 SELECT count(*) INTO l_exist
3841 FROM qp_pricing_attributes
3842 WHERE orig_sys_line_ref = p_pricing_attr_rec.orig_sys_line_ref(I)
3843 AND orig_sys_header_ref = p_pricing_attr_rec.orig_sys_header_ref(I)
3844 AND pricing_attribute_context IS NULL
3845 AND pricing_attribute IS NULL
3846 AND orig_sys_pricing_attr_ref <> p_pricing_attr_rec.orig_sys_pricing_attr_ref(I)
3847 AND (pricing_attr_value_from IS NULL OR pricing_Attr_value_to IS NULL);
3848 EXCEPTION
3849 WHEN NO_DATA_FOUND THEN
3850 l_exist := 0;
3851 END;
3852
3853 qp_bulk_loader_pub.write_log('Count of records in Pricing Attr table with pricing contect/attr/value null' || to_char(l_exist));
3854 l_exist1:=null;
3855 BEGIN
3856 SELECT count(*) INTO l_exist1
3857 FROM qp_interface_pricing_attribs
3858 WHERE request_id = p_pricing_attr_rec.request_id(I)
3859 AND orig_sys_line_ref = p_pricing_attr_rec.orig_sys_line_ref(I)
3860 AND orig_sys_header_ref = p_pricing_attr_rec.orig_sys_header_ref(I)
3861 AND orig_sys_pricing_attr_ref <> p_pricing_attr_rec.orig_sys_pricing_attr_ref(I)
3862 AND pricing_attribute_context IS NULL
3863 AND pricing_attribute IS NULL
3864 AND (pricing_attr_value_from IS NULL OR pricing_attr_value_to IS NULL);
3865 EXCEPTION
3866 WHEN NO_DATA_FOUND THEN
3867 l_exist1 := 0;
3868 END;
3869
3870 qp_bulk_loader_pub.write_log('Count of records in Int table with pricing contect/attr/value null' || to_char(l_exist1));
3871 IF l_exist > 0 THEN
3872 p_pricing_attr_rec.process_status_flag(I):=NULL;
3873 FND_MESSAGE.SET_NAME('QP','QP_BULK_PRC_ATTR_ERROR');
3874 QP_BULK_MSG.ADD(l_msg_rec);
3875 END IF;
3876 IF l_exist1 > 0 THEN
3877 p_pricing_attr_rec.process_status_flag(I):=NULL;
3878 FND_MESSAGE.SET_NAME('QP','QP_BULK_INT_PRC_ATTR_ERROR');
3879 QP_BULK_MSG.ADD(l_msg_rec);
3880 END IF;
3881
3882 END IF;
3883
3884 -- Basic_Pricing_Condition
3885 IF QP_BULK_LOADER_PUB.GET_QP_STATUS <> 'I' THEN
3886 IF p_pricing_attr_rec.pricing_attribute_context(I) IS NOT NULL
3887 AND p_pricing_attr_rec.pricing_attribute(I) IS NOT NULL THEN
3888 l_exist := 0;
3889 BEGIN
3890 SELECT count(*) INTO l_exist
3891 FROM qp_pricing_attributes
3892 WHERE orig_sys_line_ref = p_pricing_attr_rec.orig_sys_line_ref(I)
3893 AND orig_sys_header_ref = p_pricing_attr_rec.orig_sys_header_ref(I)
3894 AND pricing_attribute_context <> p_pricing_attr_rec.pricing_attribute_context(I)
3895 AND orig_sys_pricing_attr_ref <> p_pricing_attr_rec.orig_sys_pricing_attr_ref(I);
3896 EXCEPTION
3897 WHEN NO_DATA_FOUND THEN
3898 l_exist := 0;
3899 END;
3900
3901 l_exist1:=null;
3902 BEGIN
3903 SELECT count(*) INTO l_exist1
3904 FROM qp_interface_pricing_attribs
3905 WHERE request_id = p_pricing_attr_rec.request_id(I)
3906 AND orig_sys_line_ref = p_pricing_attr_rec.orig_sys_line_ref(I)
3907 AND orig_sys_header_ref = p_pricing_attr_rec.orig_sys_header_ref(I)
3908 AND orig_sys_pricing_attr_ref <> p_pricing_attr_rec.orig_sys_pricing_attr_ref(I)
3909 AND pricing_attribute_context <> p_pricing_attr_rec.pricing_attribute_context(I);
3910 EXCEPTION
3911 WHEN NO_DATA_FOUND THEN
3912 l_exist1 := 0;
3913 END;
3914 IF l_exist > 0 OR l_exist1 > 0 THEN
3915 p_pricing_attr_rec.process_status_flag(I):=NULL;
3916 FND_MESSAGE.SET_NAME('QP','QP_1_PRIC_CONT_FOR_BASIC');
3917 --Only one pricing context allwed in Basic Pricing
3918 QP_BULK_MSG.ADD(l_msg_rec);
3919 END IF;
3920
3921 END IF;
3922 END IF;
3923
3924 -- Basic_Pricing_Condition
3925 IF QP_BULK_LOADER_PUB.GET_QP_STATUS <> 'I' THEN
3926 IF p_pricing_attr_rec.pricing_attribute_context(I) IS NOT NULL AND
3927 p_pricing_attr_rec.pricing_attribute(I) IS NOT NULL THEN
3928 BEGIN
3929 select s.availability_in_basic
3930 into l_availability_in_basic
3931 from qp_segments_b s, qp_prc_contexts_b c
3932 where s.prc_context_id = c.prc_context_id
3933 and c.prc_context_code = p_pricing_attr_rec.pricing_attribute_context(I)
3934 and s.segment_mapping_column = p_pricing_attr_rec.pricing_attribute(I)
3935 and s.availability_in_basic = 'Y';
3936 EXCEPTION
3937 WHEN NO_DATA_FOUND THEN
3938 p_pricing_attr_rec.process_status_flag(I):=NULL;
3939 FND_MESSAGE.SET_NAME('QP','QP_PRIC_CONTXT_NA_BASIC');
3940 --Pricing Attribute Context not allowed in Basic Pricing
3941 QP_BULK_MSG.ADD(l_msg_rec);
3942 END;
3943
3944 END IF;
3945
3946 IF p_pricing_attr_rec.product_attribute_context(I) IS NOT NULL AND
3947 p_pricing_attr_rec.product_attribute(I) IS NOT NULL THEN
3948 BEGIN
3949 select s.availability_in_basic
3950 into l_availability_in_basic
3951 from qp_segments_b s, qp_prc_contexts_b c
3952 where s.prc_context_id = c.prc_context_id
3953 and c.prc_context_code = p_pricing_attr_rec.product_attribute_context(I)
3954 and s.segment_mapping_column = p_pricing_attr_rec.product_attribute(I)
3955 and s.availability_in_basic = 'Y';
3956 EXCEPTION
3957 WHEN NO_DATA_FOUND THEN
3958 p_pricing_attr_rec.process_status_flag(I):=NULL;
3959 FND_MESSAGE.SET_NAME('QP','QP_PROD_CONTXT_NA_BASIC');
3960 --Product Attribute Context not allowed in Basic Pricing
3961 QP_BULK_MSG.ADD(l_msg_rec);
3962 END;
3963 END IF;
3964 END IF;
3965 --- check for consistency of product context/att/val among the attributes
3966
3967 BEGIN
3968 l_exist := NULL;
3969 SELECT count(*) INTO l_exist
3970 FROM qp_pricing_attributes
3971 WHERE orig_sys_line_ref = p_pricing_attr_rec.orig_sys_line_ref(I)
3972 AND orig_sys_header_ref = p_pricing_attr_rec.orig_sys_header_ref(I)
3973 AND product_attribute_context <> p_pricing_attr_rec.product_attribute_context(I)
3974 AND product_attribute <> p_pricing_attr_rec.product_attribute(I)
3975 AND product_attr_value <> p_pricing_attr_rec.product_attr_value(I);
3976 EXCEPTION
3977 WHEN NO_DATA_FOUND THEN
3978 l_exist:=0;
3979 END;
3980
3981 BEGIN
3982 l_exist1 := NULL;
3983 SELECT /*+ index(qipa QP_INTERFACE_PRCNG_ATTRIBS_N2) */ --7433219
3984 count(*) INTO l_exist1
3985 FROM qp_interface_pricing_attribs
3986 WHERE request_id = p_pricing_attr_rec.request_id(I)
3987 AND process_status_flag = 'P' --is null
3988 AND orig_sys_line_ref = p_pricing_attr_rec.orig_sys_line_ref(I)
3989 AND orig_sys_header_ref = p_pricing_attr_rec.orig_sys_header_ref(I)
3990 AND product_attribute_context <> p_pricing_attr_rec.product_attribute_context(I)
3991 AND product_attribute <> p_pricing_attr_rec.product_attribute(I)
3992 AND product_attr_value <> p_pricing_attr_rec.product_attr_value(I);
3993 EXCEPTION
3994 WHEN NO_DATA_FOUND THEN
3995 l_exist1:=0;
3996 END;
3997
3998 IF l_exist >0 OR l_exist1>0 THEN
3999 p_pricing_attr_rec.process_status_flag(I):=NULL;
4000 FND_MESSAGE.SET_NAME('QP', 'INVALID_PROD_CONTEXT_ATTR_PAIR');
4001 QP_BULK_MSG.ADD(l_msg_rec);
4002 END IF;
4003
4004 -- check for pricing atributes
4005 IF (p_Pricing_Attr_rec.pricing_attribute_context(I) IS NOT NULL
4006 OR p_Pricing_Attr_rec.pricing_attribute(I) IS NOT NULL
4007 OR p_Pricing_Attr_rec.pricing_attr_value_from(I) IS NOT NULL
4008 OR p_Pricing_Attr_rec.pricing_attr_value_to(I) IS NOT NULL)
4009 THEN
4010 IF (p_Pricing_Attr_rec.pricing_attribute_context(I) IS NULL
4011 OR p_Pricing_Attr_rec.pricing_attribute(I) IS NULL
4012 OR p_Pricing_Attr_rec.comparison_operator_code(I) IS NULL)
4013 THEN
4014 p_pricing_attr_rec.process_status_flag(I):=NULL;
4015 IF p_Pricing_Attr_rec.pricing_attribute_context(I) IS NULL THEN
4016 FND_MESSAGE.SET_NAME('QP','QP_ATTRIBUTE_REQUIRED' );
4017 FND_MESSAGE.SET_TOKEN('ATTRIBUTE', 'PRICING_ATTRIBUTE_CONTEXT');
4018 QP_BULK_MSG.ADD(l_msg_rec);
4019 END IF;
4020 IF p_Pricing_Attr_rec.pricing_attribute(I) IS NULL THEN
4021 IF p_Pricing_Attr_rec.pricing_attr_code(I) IS NULL THEN
4022 FND_MESSAGE.SET_NAME('QP','QP_ATTRIBUTE_REQUIRED' );
4023 FND_MESSAGE.SET_TOKEN('ATTRIBUTE', 'PRICING_ATTRIBUTE');
4024 QP_BULK_MSG.ADD(l_msg_rec);
4025 ELSE
4026 FND_MESSAGE.SET_NAME('QP','QP_VALUE_TO_ID_ERROR' );
4027 FND_MESSAGE.SET_TOKEN('ATTRIBUTE', 'PRICING_ATTRIBUTE');
4028 QP_BULK_MSG.ADD(l_msg_rec);
4029 END IF;
4030 END IF;
4031 IF p_Pricing_Attr_rec.comparison_operator_code(I) IS NULL THEN
4032 FND_MESSAGE.SET_NAME('QP','QP_ATTRIBUTE_REQUIRED' );
4033 FND_MESSAGE.SET_TOKEN('ATTRIBUTE', 'COMPARISON_OPERATOR_CODE');
4034 QP_BULK_MSG.ADD(l_msg_rec);
4035 END IF;
4036 ELSE
4037 QP_UTIL.validate_qp_flexfield(flexfield_name =>'QP_ATTR_DEFNS_PRICING'
4038 ,context =>p_Pricing_Attr_rec.pricing_attribute_context(I)
4039 ,attribute =>p_Pricing_Attr_rec.pricing_attribute(I)
4040 ,value =>p_Pricing_Attr_rec.pricing_attr_value_from(I)
4041 ,application_short_name => 'QP'
4042 ,context_flag =>l_context_error
4043 ,attribute_flag =>l_attribute_error
4044 ,value_flag =>l_value_error
4045 ,datatype =>l_datatype
4046 ,precedence =>l_precedence
4047 ,error_code =>l_error_code
4048 );
4049
4050 If (l_context_error = 'N' AND l_error_code = 7) -- invalid context
4051 Then
4052 p_pricing_attr_rec.process_status_flag(I):=NULL;
4053 FND_MESSAGE.SET_NAME('QP','QP_ATTRIBUTE_REQUIRED' );
4054 FND_MESSAGE.SET_TOKEN('ATTRIBUTE',
4055 QP_PRC_UTIL.Get_Attribute_Name('PRICING_ATTRIBUTE_CONTEXT'));
4056
4057 QP_BULK_MSG.Add(l_msg_rec);
4058 END IF;
4059
4060 If l_attribute_error = 'N' AND l_error_code = 8 -- invalid Attribute
4061 Then
4062 p_pricing_attr_rec.process_status_flag(I):=NULL;
4063 FND_MESSAGE.SET_NAME('QP','QP_INVALID_ATTRIBUTE');
4064 FND_MESSAGE.SET_TOKEN('ATTRIBUTE',' Attribute');
4065 QP_BULK_MSG.Add(l_msg_rec);
4066 END IF;
4067
4068 IF p_pricing_Attr_rec.comparison_operator_code(I) = '=' Then
4069
4070 If l_value_error = 'N' AND l_error_code = 9 -- invalid value
4071 Then
4072 p_pricing_attr_rec.process_status_flag(I):=NULL;
4073 FND_MESSAGE.SET_NAME('QP','QP_INVALID_ATTRIBUTE');
4074 FND_MESSAGE.SET_TOKEN('ATTRIBUTE',' Value From ');
4075 QP_BULK_MSG.Add(l_msg_rec);
4076 End If;
4077 END IF;
4078
4079 p_pricing_attr_rec.pricing_attribute_datatype(I):=l_datatype;
4080
4081 IF p_Pricing_Attr_rec.pricing_attribute_context(I) = 'VOLUME' AND
4082 p_Pricing_Attr_rec.pricing_attribute(I) = 'PRICING_ATTRIBUTE12'
4083 --When Pricing Context is 'Volume' and Attribute is 'Item Amount'
4084 THEN
4085 p_pricing_attr_rec.process_status_flag(I):=NULL;
4086 FND_MESSAGE.SET_NAME('QP','QP_INVALID_ATTRIBUTE');
4087 FND_MESSAGE.SET_TOKEN('ATTRIBUTE','Pricing Attribute');
4088 QP_BULK_MSG.Add(l_msg_rec);
4089 END IF;
4090
4091 --validation for canonical form
4092 l_error_code:=QP_UTIL.validate_num_date(p_Pricing_Attr_rec.pricing_attribute_datatype(I),
4093 p_Pricing_Attr_rec.pricing_attr_value_from(I));
4094 IF l_error_code <> 0 THEN
4095 p_pricing_attr_rec.process_status_flag(I):=NULL;
4096 FND_MESSAGE.SET_NAME('QP','QP_INVALID_ATTRIBUTE');
4097 FND_MESSAGE.SET_TOKEN('ATTRIBUTE','Value From ');
4098 QP_BULK_MSG.Add(l_msg_rec);
4099 END IF;
4100
4101 -- Validation for Value_To
4102
4103 IF p_Pricing_Attr_rec.pricing_attribute_context(I) IS NOT NULL AND
4104 p_Pricing_Attr_rec.pricing_attribute(I) IS NOT NULL AND
4105 UPPER(p_Pricing_Attr_rec.comparison_operator_code(I)) = 'BETWEEN' AND
4106 (p_Pricing_Attr_rec.pricing_attr_value_to(I) IS NULL OR
4107 p_Pricing_Attr_rec.pricing_attr_value_from(I) IS NULL)
4108 THEN
4109 p_pricing_attr_rec.process_status_flag(I):=NULL;
4110 FND_MESSAGE.SET_NAME('QP','QP_ATTRIBUTE_REQUIRED' );
4111 FND_MESSAGE.SET_TOKEN('ATTRIBUTE',
4112 QP_PRC_UTIL.Get_Attribute_Name('PRICING_ATTR_VALUE_TO')||'/'||
4113 QP_PRC_UTIL.Get_Attribute_Name('PRICING_ATTR_VALUE_FROM'));
4114 QP_BULK_MSG.Add(l_msg_rec);
4115 END IF;
4116
4117 -- validate value from
4118
4119 IF p_Pricing_Attr_rec.pricing_attribute_context(I) IS NOT NULL AND
4120 p_Pricing_Attr_rec.pricing_attribute(I) IS NOT NULL AND
4121 UPPER(p_Pricing_Attr_rec.comparison_operator_code(I)) <> 'BETWEEN' AND
4122 p_Pricing_Attr_rec.pricing_attr_value_from(I) IS NULL
4123 THEN
4124 p_pricing_attr_rec.process_status_flag(I):=NULL;
4125 FND_MESSAGE.SET_NAME('QP','QP_ATTRIBUTE_REQUIRED' );
4126 FND_MESSAGE.SET_TOKEN('ATTRIBUTE',
4127 QP_PRC_UTIL.Get_Attribute_Name('PRICING_ATTR_VALUE_FROM'));
4128 QP_BULK_MSG.Add(l_msg_rec);
4129 END IF;
4130
4131 l_error_code:=QP_UTIL.validate_num_date(p_Pricing_Attr_rec.pricing_attribute_datatype(I),
4132 p_Pricing_Attr_rec.pricing_attr_value_to(I));
4133
4134 IF l_error_code <> 0 THEN
4135 p_pricing_attr_rec.process_status_flag(I):=NULL;
4136 FND_MESSAGE.SET_NAME('QP','QP_INVALID_ATTRIBUTE');
4137 FND_MESSAGE.SET_TOKEN('ATTRIBUTE','Value To ');
4138 QP_BULK_MSG.Add(l_msg_rec);
4139 END IF;
4140
4141 END IF; -- Else
4142
4143 END IF; -- pricing attr pair not null
4144
4145 IF ( p_Pricing_Attr_rec.pricing_attribute_context(I) is not null
4146 or p_Pricing_Attr_rec.pricing_attribute(I) is not null ) then
4147
4148 IF p_Pricing_Attr_rec.comparison_operator_code(I) is null then
4149 p_pricing_attr_rec.process_status_flag(I) :=NULL; --'E';
4150 FND_MESSAGE.SET_NAME('QP','QP_ATTRIBUTE_REQUIRED' );
4151 FND_MESSAGE.SET_TOKEN('ATTRIBUTE',
4152 QP_PRC_UTIL.Get_Attribute_Name('COMPARISON_OPERATOR_CODE'));
4153 QP_BULK_MSG.Add(l_msg_rec);
4154 ElSE
4155 SELECT lookup_code
4156 INTO l_comparison_operator_code
4157 FROM QP_LOOKUPS
4158 WHERE LOOKUP_TYPE = 'COMPARISON_OPERATOR'
4159 AND LOOKUP_CODE = UPPER(p_Pricing_Attr_rec.comparison_operator_code(I));
4160
4161 If SQL%NOTFOUND
4162 Then
4163 p_pricing_attr_rec.process_status_flag(I) :=NULL; --'E';
4164 FND_MESSAGE.SET_NAME('QP','QP_ATTRIBUTE_REQUIRED' );
4165 FND_MESSAGE.SET_TOKEN('ATTRIBUTE',
4166 QP_PRC_UTIL.Get_Attribute_Name('COMPARISON_OPERATOR_CODE'));
4167 QP_BULK_MSG.Add(l_msg_rec);
4168 END IF;
4169
4170 END IF; /* comparison_operator_code is null */
4171
4172 l_exist := 0;
4173 begin
4174 SELECT 1
4175 into l_exist
4176 FROM qp_interface_pricing_attribs b, qp_prc_contexts_b d,
4177 qp_segments_b e, qp_pte_segments f
4178 WHERE orig_sys_pricing_attr_ref = p_pricing_attr_rec.orig_sys_pricing_attr_ref(I)
4179 AND b.product_attribute_context = d.prc_context_code
4180 AND b.product_attribute = e.segment_mapping_column
4181 AND d.prc_context_id = e.prc_context_id
4182 AND d.prc_context_type = 'PRICING_ATTRIBUTE'
4183 AND e.segment_id = f.segment_id
4184 AND f.pte_code = l_pte_code
4185 AND f.segment_level <> 'LINE';
4186 exception
4187 when others then
4188 null;
4189 end;
4190 if l_exist > 0 then
4191 p_pricing_attr_rec.process_status_flag(I) :=NULL; --'E';
4192 FND_MESSAGE.SET_NAME('QP','QP_INVALID_ATTRIBUTE');
4193 FND_MESSAGE.SET_TOKEN('ATTRIBUTE', 'PRICING ATTRIBUTE');
4194 QP_BULK_MSG.Add(l_msg_rec);
4195 end if;
4196
4197 END IF; /* context or atttribute is not null */
4198
4199 -- price break child line can have only VOLUME pricing context
4200
4201 IF p_pricing_attr_rec.process_status_flag(I)='P' --<> 'E'
4202 THEN
4203 BEGIN
4204 --Bug# 5528754 RAVI
4205 --Check if the pricing attribute is for a PRICE BREAK
4206 SELECT /*+ index(l qp_list_lines_n11) index(r qp_rltd_modifiers_n2) */ --bug 9247305
4207 r.rltd_modifier_grp_type
4208 INTO l_pa_price_break
4209 FROM qp_list_lines l, qp_rltd_modifiers r
4210 WHERE l.orig_sys_line_ref = p_pricing_attr_rec.orig_sys_line_ref(I)
4211 -- Bug 5246745 Use Composite Index for Ref columns
4212 AND l.orig_sys_header_ref = p_pricing_attr_rec.orig_sys_header_ref(I)
4213 AND r.to_rltd_modifier_id = l.list_line_id
4214 AND r.rltd_modifier_grp_type = 'PRICE BREAK';
4215
4216 IF p_pricing_attr_rec.pricing_attribute_context(I) IS NULL THEN
4217 p_pricing_attr_rec.process_status_flag(I) :=NULL; --'E';
4218 FND_MESSAGE.SET_NAME('QP','QP_ATTRIBUTE_REQUIRED');
4219 FND_MESSAGE.SET_TOKEN('ATTRIBUTE', 'Pricing Attribute Context');
4220 QP_BULK_MSG.Add(l_msg_rec);
4221 ELSIF p_pricing_attr_rec.pricing_attribute_context(I)<>'VOLUME' THEN
4222 p_pricing_attr_rec.process_status_flag(I) :=NULL; --'E';
4223 FND_MESSAGE.SET_NAME('QP','PBH_CHILD_LINE_INVALID_CONTEXT');
4224 QP_BULK_MSG.Add(l_msg_rec);
4225 END IF;
4226
4227 EXCEPTION
4228 WHEN NO_DATA_FOUND THEN
4229 --Bug 5649050 (If this pricing attribute is not for a price break then set it back to default)
4230 l_pa_price_break :='PRICE LIST LINE';
4231 END;
4232 END IF;
4233
4234 -- qp_bulk_loader_pub.write_log('check 5');
4235
4236 --check for duplicate primary uom flag set
4237 --check for duplicate primary uom flag set --smbalara 9458481/10152629 /10152629 start
4238 IF p_pricing_attr_rec.process_status_flag(I)='P' THEN -- IS NULL THEN
4239
4240 /* SELECT primary_uom_flag
4241 INTO l_primary_uom_flag
4242 FROM qp_list_lines
4243 WHERE list_line_id = p_PRICING_ATTR_rec.list_line_id(I);
4244
4245 IF l_primary_uom_flag = 'Y'
4246 AND p_PRICING_ATTR_rec.product_attribute(I) <> 'PRICING_ATTRIBUTE3' THEN
4247 l_count:= null;
4248 BEGIN
4249 -- Bug# 5228284 RAVI
4250 -- Do not consider the line if it's already the primary flag
4251 SELECT count(*)
4252 INTO l_count
4253 FROM qp_list_lines l, qp_pricing_attributes a
4254 WHERE l.list_line_id = a.list_line_id
4255 AND a.list_header_id = p_PRICING_ATTR_rec.list_header_id(I)
4256 AND a.product_attribute_context=p_PRICING_ATTR_rec.product_attribute_context(I)
4257 AND a.product_attribute = p_PRICING_ATTR_rec.product_attribute(I)
4258 AND a.product_attr_value = p_PRICING_ATTR_rec.product_attr_value(I)
4259 AND a.product_uom_code <> p_PRICING_ATTR_rec.product_uom_code(I)
4260 AND l.primary_uom_flag = 'Y'
4261 AND l.list_line_id <> p_PRICING_ATTR_rec.list_line_id(I);
4262
4263 EXCEPTION
4264 WHEN NO_DATA_FOUND THEN
4265 l_count := 0;
4266 END;
4267 */
4268 BEGIN
4269 SELECT primary_uom_flag
4270 INTO l_primary_uom_flag
4271 FROM qp_list_lines
4272 WHERE list_line_id = p_PRICING_ATTR_rec.list_line_id(I);
4273 EXCEPTION
4274 WHEN OTHERS THEN
4275 qp_bulk_loader_pub.write_log('9458481/10152629 smbalara 1 ');
4276 l_return_status := FND_API.G_RET_STS_ERROR;
4277 END;
4278
4279 qp_bulk_loader_pub.write_log('9458481/10152629 smbalara 2 :'||l_primary_uom_flag);
4280 --check for dates overlapping for lines with primary uom flag checked --smbalara 9458481/10152629 START
4281 select start_date_active, end_date_active , revision, list_header_id
4282 into l_start_date_active, l_end_date_active, l_revision, l_list_header_id
4283 from qp_list_lines
4284 where list_line_id = p_PRICING_ATTR_rec.list_line_id(I);
4285
4286 IF l_primary_uom_flag = 'Y' AND p_PRICING_ATTR_rec.product_attribute(I) <> 'PRICING_ATTRIBUTE3' THEN
4287 qp_bulk_loader_pub.write_log('9458481/10152629 smbalara 3 ');
4288 l_count:=null;
4289 for c1 in
4290 (
4291 select b.list_line_id col2
4292 from qp_pricing_attributes b, qp_list_lines c
4293 where b.list_line_id <> p_PRICING_ATTR_rec.list_line_id(I)
4294 and b.list_line_id=c.list_line_id
4295 and c.primary_uom_flag='Y'
4296 and b.product_attribute_context = p_PRICING_ATTR_rec.product_attribute_context(I)
4297 and b.product_attribute = p_PRICING_ATTR_rec.product_attribute(I)
4298 and b.product_attr_value = p_PRICING_ATTR_rec.product_attr_value(I)
4299 and b.list_header_id = p_PRICING_ATTR_rec.list_header_id(I)
4300 AND b.product_uom_code <> p_PRICING_ATTR_rec.product_uom_code(I) -- for bug 7135111
4301 )
4302 Loop
4303 /*----------------------------------------------*/
4304 l_min_date := to_date('01/01/1900', 'MM/DD/YYYY');
4305 l_max_date := to_date('12/31/9999', 'MM/DD/YYYY');
4306 /*--------------------------------------------*/
4307 begin
4308 SELECT start_date_active, end_date_active
4309 into l_sdate, l_edate
4310 from qp_list_lines
4311 where list_line_id = c1.col2;
4312
4313 exception
4314 when no_data_found then
4315 null;
4316 end;
4317
4318 qp_bulk_loader_pub.write_log('9458481/10152629 smbalara 4');
4319 IF ( nvl(l_Start_Date_Active, l_min_date) <= nvl(l_sdate, l_min_date))
4320 THEN
4321 l_min_date := nvl(l_Start_Date_Active, l_min_date);
4322 ELSE
4323 l_min_date := nvl(l_sdate, l_min_date);
4324 END IF;
4325
4326 IF ( nvl(l_End_Date_Active, l_max_date) >= nvl(l_edate, l_max_date))
4327 THEN
4328 l_max_date := nvl(l_End_Date_Active, l_max_date);
4329 ELSE
4330 l_max_date := nvl(l_edate, l_max_date);
4331 END IF;
4332 /*
4333 qp_bulk_loader_pub.write_log('printing dates :');
4334 qp_bulk_loader_pub.write_log('9458481/10152629 l_sdate :'||l_sdate);
4335 qp_bulk_loader_pub.write_log('9458481/10152629 l_edate :'||l_edate);
4336 qp_bulk_loader_pub.write_log('9458481/10152629 l_Start_Date_Active :'||l_Start_Date_Active);
4337 qp_bulk_loader_pub.write_log('9458481/10152629 l_End_Date_Active :'||l_End_Date_Active);
4338 qp_bulk_loader_pub.write_log('9458481/10152629 l_min_date :'||l_min_date);
4339 qp_bulk_loader_pub.write_log('9458481/10152629 l_max_date :'||l_max_date);
4340 */
4341 if ( trunc(nvl(l_sdate, l_min_date)) between
4342 trunc(nvl(l_Start_Date_Active, l_min_date))
4343 and trunc(nvl(l_End_Date_Active, l_max_date)) )
4344 OR
4345 ( trunc(nvl(l_edate, l_max_date)) between
4346 trunc(nvl(l_Start_Date_Active, l_min_date))
4347 and trunc(nvl(l_End_Date_Active, l_max_date)) )
4348
4349 OR
4350 ( trunc(nvl(l_sdate, l_min_date)) <=
4351 nvl(l_Start_Date_Active,l_min_date)
4352 AND
4353 trunc(nvl(l_edate, l_max_date)) >=
4354 nvl(l_End_Date_Active,l_max_date) )
4355
4356 THEN
4357 l_count:=1;
4358 qp_bulk_loader_pub.write_log('Dates Overlapping for lines with Primary UOM flag checked' );
4359 exit;
4360 end if;
4361
4362 end loop;
4363 --check for dates overlapping for lines with primary uom flag checked --smbalara 9458481/10152629 END
4364 IF l_count > 0 THEN
4365 p_pricing_attr_rec.process_status_flag(I):=NULL;
4366 FND_MESSAGE.SET_NAME('QP','QP_UNIQUE_PRIMARY_UOM');
4367 QP_BULK_MSG.Add(l_msg_rec);
4368
4369 -- set the corresponding line as errored
4370 UPDATE qp_interface_list_lines
4371 SET process_status_flag = NULL --'E'
4372 WHERE request_id = p_pricing_attr_rec.request_id(I)
4373 AND orig_sys_line_ref = p_pricing_attr_rec.orig_sys_line_ref(I)
4374 AND orig_sys_header_ref = p_pricing_attr_rec.orig_sys_header_ref(I);
4375
4376 FND_MESSAGE.SET_NAME('QP','QP_UNIQUE_PRIMARY_UOM');
4377 l_msg_txt:= FND_MESSAGE.GET;
4378
4379 INSERT INTO QP_INTERFACE_ERRORS
4380 (error_id,last_update_date, last_updated_by, creation_date,
4381 created_by, last_update_login, request_id, program_application_id,
4382 program_id, program_update_date, entity_type, table_name, column_name,
4383 orig_sys_header_ref,orig_sys_line_ref,orig_sys_qualifier_ref,
4384 orig_sys_pricing_attr_ref, error_message)
4385 VALUES
4386 (qp_interface_errors_s.nextval, sysdate ,FND_GLOBAL.USER_ID, sysdate,
4387 FND_GLOBAL.USER_ID, FND_GLOBAL.CONC_LOGIN_ID, p_pricing_attr_rec.request_id(I),661,
4388 NULL,NULL, 'PRL', 'QP_INTERFACE_LIST_LINES', NULL,
4389 p_pricing_attr_rec.orig_sys_header_ref(I),p_pricing_attr_rec.orig_sys_line_ref(I),null,
4390 null,l_msg_txt);
4391
4392 FOR J IN p_pricing_attr_rec.orig_sys_line_ref.first
4393 ..p_pricing_attr_rec.orig_sys_line_ref.last
4394 LOOP
4395 IF p_pricing_attr_rec.orig_sys_line_ref(J) = p_pricing_attr_rec.orig_sys_line_ref(I)
4396 AND p_pricing_attr_rec.orig_sys_pricing_attr_ref(J) <>
4397 p_pricing_attr_rec.orig_sys_pricing_attr_ref(I)
4398 THEN
4399 p_pricing_attr_rec.process_status_flag(J):=NULL; --'E';
4400 l_msg_rec.orig_sys_pricing_attr_ref := p_pricing_attr_rec.orig_sys_pricing_attr_ref(J);
4401 FND_MESSAGE.SET_NAME('QP', 'QP_PARENT_FAILED');
4402 QP_BULK_MSG.ADD(l_msg_rec);
4403 END IF;
4404 END LOOP;
4405
4406 END IF; --End duplicate exists
4407 IF (l_count IS NULL) THEN--check for interface attribs only if above check is successfull
4408 BEGIN
4409 l_count := null;
4410 SELECT count(*)
4411 INTO l_count
4412 FROM qp_list_lines l, qp_interface_pricing_attribs a
4413 WHERE l.orig_sys_line_ref = a.orig_sys_line_ref
4414 AND l.orig_sys_header_ref = a.orig_sys_header_ref
4415 AND a.orig_sys_header_ref = p_PRICING_ATTR_rec.orig_sys_header_ref(I)
4416 AND a.product_attribute_context = p_PRICING_ATTR_rec.product_attribute_context(I)
4417 AND a.product_attribute = p_PRICING_ATTR_rec.product_attribute(I)
4418 AND a.product_attr_value = p_PRICING_ATTR_rec.product_attr_value(I)
4419 AND a.product_uom_code <> p_PRICING_ATTR_rec.product_uom_code(I)
4420 AND a.orig_sys_pricing_attr_ref <> p_pricing_attr_rec.orig_sys_pricing_attr_ref(I)
4421 AND a.request_id = p_pricing_attr_rec.request_id(I) --bug 9247305
4422 AND a.process_status_flag = 'P' --bug 9247305
4423 AND l.primary_uom_flag = 'Y';
4424
4425 EXCEPTION
4426 WHEN NO_DATA_FOUND THEN
4427 l_count := 0;
4428 END;
4429
4430 IF l_count > 0 THEN
4431 p_pricing_attr_rec.process_status_flag(I):=NULL;
4432 FND_MESSAGE.SET_NAME('QP','QP_UNIQUE_PRIMARY_UOM');
4433 QP_BULK_MSG.Add(l_msg_rec);
4434
4435 -- set the corresponding line as errored
4436 UPDATE qp_interface_list_lines
4437 SET process_status_flag = NULL --'E'
4438 WHERE request_id = p_pricing_attr_rec.request_id(I)
4439 AND orig_sys_line_ref = p_pricing_attr_rec.orig_sys_line_ref(I)
4440 AND orig_sys_header_ref = p_pricing_attr_rec.orig_sys_header_ref(I);
4441
4442 FND_MESSAGE.SET_NAME('QP','QP_UNIQUE_PRIMARY_UOM');
4443 l_msg_txt:= FND_MESSAGE.GET;
4444
4445 INSERT INTO QP_INTERFACE_ERRORS
4446 (error_id,last_update_date, last_updated_by, creation_date,
4447 created_by, last_update_login, request_id, program_application_id,
4448 program_id, program_update_date, entity_type, table_name, column_name,
4449 orig_sys_header_ref,orig_sys_line_ref,orig_sys_qualifier_ref,
4450 orig_sys_pricing_attr_ref, error_message)
4451 VALUES
4452 (qp_interface_errors_s.nextval, sysdate ,FND_GLOBAL.USER_ID, sysdate,
4453 FND_GLOBAL.USER_ID, FND_GLOBAL.CONC_LOGIN_ID, p_pricing_attr_rec.request_id(I),661,
4454 NULL,NULL, 'PRL', 'QP_INTERFACE_LIST_LINES', NULL,
4455 p_pricing_attr_rec.orig_sys_header_ref(I),p_pricing_attr_rec.orig_sys_line_ref(I),null,
4456 null,l_msg_txt);
4457
4458 FOR J IN p_pricing_attr_rec.orig_sys_line_ref.first
4459 ..p_pricing_attr_rec.orig_sys_line_ref.last
4460 LOOP
4461 IF p_pricing_attr_rec.orig_sys_line_ref(J) = p_pricing_attr_rec.orig_sys_line_ref(I)
4462 AND p_pricing_attr_rec.orig_sys_pricing_attr_ref(J) <>
4463 p_pricing_attr_rec.orig_sys_pricing_attr_ref(I)
4464 THEN
4465 p_pricing_attr_rec.process_status_flag(J):=NULL; --'E';
4466 l_msg_rec.orig_sys_pricing_attr_ref := p_pricing_attr_rec.orig_sys_pricing_attr_ref(J);
4467 FND_MESSAGE.SET_NAME('QP', 'QP_PARENT_FAILED');
4468 QP_BULK_MSG.ADD(l_msg_rec);
4469 END IF;
4470 END LOOP;
4471 END IF; -- If duplicate
4472 END IF;
4473
4474 END IF; -- IF primary_uom_flag set
4475
4476 END IF; -- IF process_status_flag
4477
4478 l_msg_rec.orig_sys_pricing_attr_ref := p_pricing_attr_rec.orig_sys_pricing_attr_ref(I);
4479
4480 -- qp_bulk_loader_pub.write_log('check 6');
4481 --Delayed request validation
4482 -- Checking multiple price break attributes
4483
4484 BEGIN
4485
4486 l_count:=null;
4487 /* SELECT COUNT(1) INTO l_count
4488 FROM
4489 (SELECT /*+ ordered leading(la) index(pb QP_INTERFACE_PRCNG_ATTRIBS_N4) */ /*DISTINCT pb.pricing_attribute
4490 FROM qp_list_lines la,
4491 qp_pricing_attributes pb,
4492 qp_rltd_modifiers ra
4493 WHERE ra.to_rltd_modifier_id = la.list_line_id
4494 AND pb.list_line_id = ra.to_rltd_modifier_id
4495 AND ra.from_rltd_modifier_id = (select from_rltd_modifier_id
4496 from qp_rltd_modifiers, qp_list_lines
4497 where orig_sys_line_ref = p_pricing_attr_rec.orig_sys_line_ref(I)
4498 -- Bug 5246745 Use Composite Index for Ref columns
4499 and orig_sys_header_ref = p_pricing_attr_rec.orig_sys_header_ref(I)
4500 and to_rltd_modifier_id = list_line_id)
4501 AND ra.rltd_modifier_grp_type = 'PRICE BREAK'
4502 UNION
4503 SELECT /*+ leading(la) */ /*DISTINCT pb.pricing_attribute
4504 FROM qp_list_lines la,
4505 qp_interface_pricing_attribs pb,
4506 qp_rltd_modifiers ra
4507 WHERE ra.to_rltd_modifier_id = la.list_line_id
4508 AND pb.orig_sys_line_ref = la.orig_sys_line_ref
4509 AND pb.request_id = p_pricing_attr_rec.request_id(I)
4510 AND pb.process_status_flag = 'P' --IS NULL
4511 AND ra.from_rltd_modifier_id = (select from_rltd_modifier_id
4512 from qp_rltd_modifiers, qp_list_lines
4513 where orig_sys_line_ref = p_pricing_attr_rec.orig_sys_line_ref(I)
4514 -- Bug 5246745 Use Composite Index for Ref columns
4515 and orig_sys_header_ref = p_pricing_attr_rec.orig_sys_header_ref(I)
4516 and to_rltd_modifier_id = list_line_id)
4517 AND ra.rltd_modifier_grp_type = 'PRICE BREAK');*/
4518
4519
4520 SELECT COUNT(1) INTO l_count
4521 FROM
4522 (SELECT /*+ ordered leading(la) index(pb QP_INTERFACE_PRCNG_ATTRIBS_N4) */ DISTINCT pb.pricing_attribute
4523 FROM qp_list_lines la,
4524 qp_rltd_modifiers ra,
4525 qp_rltd_modifiers rb,
4526 qp_list_lines lb,
4527 qp_interface_pricing_attribs pb
4528 WHERE la.orig_sys_line_ref = p_pricing_attr_rec.orig_sys_line_ref(I) AND
4529 la.list_line_type_code = 'PLL' AND
4530 la.pricing_phase_id = 1 AND
4531 ra.to_rltd_modifier_id = la.list_line_id AND
4532 rb.from_rltd_modifier_id = ra.FROM_RLTD_MODIFIER_ID AND
4533 lb.list_line_id = rb.to_rltd_modifier_id AND
4534 pb.orig_sys_line_ref = lb.orig_sys_line_ref AND
4535 pb.request_id = p_pricing_attr_rec.request_id(I) AND
4536 pb.process_status_flag = 'P' AND --IS NULL AND
4537 rb.rltd_modifier_grp_type = 'PRICE BREAK'
4538 UNION
4539 SELECT /*+ leading(la) */ DISTINCT pb.pricing_attribute
4540 FROM qp_list_lines la,
4541 qp_pricing_attributes pb,
4542 qp_rltd_modifiers ra,
4543 qp_rltd_modifiers rb
4544 WHERE la.orig_sys_line_ref = p_pricing_attr_rec.orig_sys_line_ref(I) AND
4545 la.list_line_type_code = 'PLL' AND
4546 la.pricing_phase_id = 1 AND
4547 ra.to_rltd_modifier_id = la.list_line_id AND
4548 rb.from_rltd_modifier_id = ra.FROM_RLTD_MODIFIER_ID AND
4549 pb.list_line_id = rb.to_rltd_modifier_id AND
4550 rb.rltd_modifier_grp_type = 'PRICE BREAK');
4551
4552 --qp_bulk_loader_pub.write_log('multi_attr:'||l_count);
4553
4554 IF l_count>1 THEN
4555 P_PRICING_ATTR_REC.PROCESS_STATUS_FLAG(I):= NULL; --'E';
4556 FND_MESSAGE.SET_NAME('QP', 'QP_MULT_PRICE_BREAK_ATTRS');
4557 QP_BULK_MSG.ADD(l_msg_rec);
4558
4559 UPDATE qp_interface_list_lines
4560 SET process_status_flag = NULL --'E'
4561 WHERE orig_sys_line_ref = p_pricing_attr_rec.orig_sys_line_ref(I)
4562 AND orig_sys_header_ref = p_pricing_attr_rec.orig_sys_header_ref(I);
4563
4564 l_msg_txt:= FND_MESSAGE.GET;
4565
4566 INSERT INTO QP_INTERFACE_ERRORS
4567 (error_id,last_update_date, last_updated_by, creation_date,
4568 created_by, last_update_login, request_id, program_application_id,
4569 program_id, program_update_date, entity_type, table_name, column_name,
4570 orig_sys_header_ref,orig_sys_line_ref,orig_sys_qualifier_ref,
4571 orig_sys_pricing_attr_ref, error_message)
4572 VALUES
4573 (qp_interface_errors_s.nextval, sysdate ,FND_GLOBAL.USER_ID, sysdate,
4574 FND_GLOBAL.USER_ID, FND_GLOBAL.CONC_LOGIN_ID, p_pricing_attr_rec.request_id(I), 661,
4575 NULL,NULL, 'PRL', 'QP_INTERFACE_LIST_LINES', NULL,
4576 p_pricing_attr_rec.orig_sys_header_ref(I),p_pricing_attr_rec.orig_sys_line_ref(I),null,
4577 null,l_msg_txt);
4578
4579 END IF;
4580
4581 EXCEPTION
4582 WHEN NO_DATA_FOUND THEN
4583 NULL;
4584 END;
4585
4586 -- qp_bulk_loader_pub.write_log('check 7: Ref:'|| p_pricing_attr_rec.orig_sys_pricing_attr_ref(I));
4587
4588 -- Check Overlapping Price break child lines
4589 BEGIN
4590
4591 l_status := null;
4592 l_status1:= null;
4593
4594 IF p_pricing_attr_rec.pricing_attribute_datatype(I)='N' THEN
4595 OPEN C_break_lines(p_pricing_attr_rec.orig_sys_line_ref(I),
4596 -- Bug 5246745 Use Composite Index for Ref columns
4597 p_pricing_attr_rec.orig_sys_header_ref(I));
4598
4599 FETCH C_break_lines into l_status; CLOSE C_break_lines;
4600 END IF;
4601
4602 --ENH Continuous Price Breaks START RAVI
4603 /**
4604 Validation check for multiple continuous price breaks (Messages)
4605 **/
4606 IF p_pricing_attr_rec.pricing_attribute_datatype(I)='N' THEN
4607
4608 -- Bug# 5440851 RAVI START
4609 -- If the PA values are tried to be changed to Char from Num type throw an error.
4610 BEGIN
4611 l_pa_to_val_tmp:=to_number(p_pricing_attr_rec.pricing_attr_value_to(I));
4612 EXCEPTION
4613 WHEN OTHERS THEN
4614 P_PRICING_ATTR_REC.PROCESS_STATUS_FLAG(I):= NULL; --'E';
4615 FND_MESSAGE.SET_NAME('QP', 'QP_INVALID_DATA_TYPE');
4616 QP_BULK_MSG.ADD(l_msg_rec);
4617 p_pricing_attr_rec.pricing_attr_value_to(I):=0;
4618 END;
4619
4620 BEGIN
4621 l_pa_from_val_tmp:=to_number(p_pricing_attr_rec.pricing_attr_value_from(I));
4622 EXCEPTION
4623 WHEN OTHERS THEN
4624 P_PRICING_ATTR_REC.PROCESS_STATUS_FLAG(I):= NULL; --'E';
4625 FND_MESSAGE.SET_NAME('QP', 'QP_INVALID_DATA_TYPE');
4626 QP_BULK_MSG.ADD(l_msg_rec);
4627 p_pricing_attr_rec.pricing_attr_value_from(I):=0;
4628 END;
4629 -- Bug# 5440851 RAVI END
4630
4631 OPEN C_old_cont_grp_break_line(p_pricing_attr_rec.orig_sys_line_ref(I),
4632 -- Bug 5246745 Use Composite Index for Ref columns
4633 p_pricing_attr_rec.orig_sys_header_ref(I));
4634 FETCH C_old_cont_grp_break_line
4635 into l_old_break_pa_count, l_old_break_low_value, l_old_break_high_value;
4636 CLOSE C_old_cont_grp_break_line;
4637 OPEN C_new_cont_grp_break_lines(p_pricing_attr_rec.orig_sys_line_ref(I),
4638 -- Bug 5246745 Use Composite Index for Ref columns
4639 p_pricing_attr_rec.orig_sys_header_ref(I));
4640 FETCH C_new_cont_grp_break_lines
4641 into l_new_break_pa_count, l_new_break_low_value, l_new_break_high_value;
4642 CLOSE C_new_cont_grp_break_lines;
4643
4644 --Max from value
4645 l_break_high_value:=to_number(p_pricing_attr_rec.pricing_attr_value_to(I));
4646 IF l_break_high_value < l_old_break_high_value THEN
4647 l_break_high_value:=l_old_break_high_value;
4648 END IF;
4649
4650 IF l_break_high_value < l_new_break_high_value THEN
4651 l_break_high_value:=l_new_break_high_value;
4652 END IF;
4653
4654 --Continuous Price Break To and From Values Check
4655 OPEN C_to_value_old(p_pricing_attr_rec.orig_sys_line_ref(I),
4656 -- Bug 5246745 Use Composite Index for Ref columns
4657 p_pricing_attr_rec.orig_sys_header_ref(I));
4658 FETCH C_to_value_old into l_to_value_old;
4659 CLOSE C_to_value_old;
4660 OPEN C_to_value_new(p_pricing_attr_rec.orig_sys_line_ref(I),
4661 -- Bug 5246745 Use Composite Index for Ref columns
4662 p_pricing_attr_rec.orig_sys_header_ref(I));
4663 FETCH C_to_value_new into l_to_value_new;
4664 CLOSE C_to_value_new;
4665
4666 OPEN C_from_value_old(p_pricing_attr_rec.orig_sys_line_ref(I),
4667 -- Bug 5246745 Use Composite Index for Ref columns
4668 p_pricing_attr_rec.orig_sys_header_ref(I));
4669 FETCH C_from_value_old into l_from_value_old;
4670 CLOSE C_from_value_old;
4671 OPEN C_from_value_new(p_pricing_attr_rec.orig_sys_line_ref(I),
4672 -- Bug 5246745 Use Composite Index for Ref columns
4673 p_pricing_attr_rec.orig_sys_header_ref(I));
4674 FETCH C_from_value_new into l_from_value_new;
4675 CLOSE C_from_value_new;
4676
4677 IF l_old_break_pa_count > 0 OR l_new_break_pa_count > 0 THEN
4678 --Multiple price breaks
4679 qp_bulk_loader_pub.write_log('The price breaks header has multiple price breaks');
4680 IF l_to_value_old = 1 OR l_to_value_new = 1 OR
4681 to_number(p_pricing_attr_rec.pricing_attr_value_to(I)) = l_break_high_value THEN
4682 qp_bulk_loader_pub.write_log('TO value has a corresponding FROM value or is the max.');
4683 IF l_from_value_old = 1 OR l_from_value_new = 1 OR
4684 to_number(p_pricing_attr_rec.pricing_attr_value_from(I))=0 THEN
4685 null;
4686 qp_bulk_loader_pub.write_log('FROM value has a corresponding TO value or is zero.');
4687 ELSE
4688 qp_bulk_loader_pub.write_log('ERROR: No Same To_From Value for Price Break');
4689 P_PRICING_ATTR_REC.PROCESS_STATUS_FLAG(I):= NULL ; --'E';
4690 FND_MESSAGE.SET_NAME('QP', 'QP_PBK_CRSPNDNG_TO_FROM');
4691 QP_BULK_MSG.ADD(l_msg_rec);
4692
4693 UPDATE qp_interface_list_lines
4694 SET process_status_flag = NULL --'E'
4695 WHERE orig_sys_line_ref = p_pricing_attr_rec.orig_sys_line_ref(I)
4696 AND orig_sys_header_ref = p_pricing_attr_rec.orig_sys_header_ref(I);
4697
4698 FND_MESSAGE.SET_NAME('QP', 'QP_PBK_CRSPNDNG_TO_FROM');
4699 l_msg_txt:= FND_MESSAGE.GET;
4700
4701 INSERT INTO QP_INTERFACE_ERRORS
4702 (error_id,last_update_date, last_updated_by, creation_date,
4703 created_by, last_update_login, request_id, program_application_id,
4704 program_id, program_update_date, entity_type, table_name, column_name,
4705 orig_sys_header_ref,orig_sys_line_ref,orig_sys_qualifier_ref,
4706 orig_sys_pricing_attr_ref, error_message)
4707 VALUES
4708 (qp_interface_errors_s.nextval, sysdate ,FND_GLOBAL.USER_ID, sysdate,
4709 FND_GLOBAL.USER_ID, FND_GLOBAL.CONC_LOGIN_ID, p_pricing_attr_rec.request_id(I), 661,
4710 NULL,NULL, 'PRL', 'QP_INTERFACE_LIST_LINES', NULL,
4711 p_pricing_attr_rec.orig_sys_header_ref(I),p_pricing_attr_rec.orig_sys_line_ref(I),null,
4712 null,l_msg_txt);
4713 END IF;
4714 ELSE
4715 qp_bulk_loader_pub.write_log('ERROR: No Same From_To Value for Price Break');
4716 P_PRICING_ATTR_REC.PROCESS_STATUS_FLAG(I):= NULL ; --'E';
4717 FND_MESSAGE.SET_NAME('QP', 'QP_PBK_CRSPNDNG_FROM_TO');
4718 QP_BULK_MSG.ADD(l_msg_rec);
4719
4720 UPDATE qp_interface_list_lines
4721 SET process_status_flag = NULL --'E'
4722 WHERE orig_sys_line_ref = p_pricing_attr_rec.orig_sys_line_ref(I)
4723 AND orig_sys_header_ref = p_pricing_attr_rec.orig_sys_header_ref(I);
4724
4725 FND_MESSAGE.SET_NAME('QP', 'QP_PBK_CRSPNDNG_FROM_TO');
4726 l_msg_txt:= FND_MESSAGE.GET;
4727
4728 INSERT INTO QP_INTERFACE_ERRORS
4729 (error_id,last_update_date, last_updated_by, creation_date,
4730 created_by, last_update_login, request_id, program_application_id,
4731 program_id, program_update_date, entity_type, table_name, column_name,
4732 orig_sys_header_ref,orig_sys_line_ref,orig_sys_qualifier_ref,
4733 orig_sys_pricing_attr_ref, error_message)
4734 VALUES
4735 (qp_interface_errors_s.nextval, sysdate ,FND_GLOBAL.USER_ID, sysdate,
4736 FND_GLOBAL.USER_ID, FND_GLOBAL.CONC_LOGIN_ID, p_pricing_attr_rec.request_id(I), 661,
4737 NULL,NULL, 'PRL', 'QP_INTERFACE_LIST_LINES', NULL,
4738 p_pricing_attr_rec.orig_sys_header_ref(I),p_pricing_attr_rec.orig_sys_line_ref(I),null,
4739 null,l_msg_txt);
4740 END IF;
4741 END IF;
4742
4743 --Check if lowest PB value is zero
4744 IF to_number(p_pricing_attr_rec.pricing_attr_value_from(I)) <> 0 AND l_pa_price_break='PRICE BREAK'
4745 THEN
4746
4747 --Bug# 5528754 RAVI END
4748 IF l_old_break_low_value = 0 OR l_new_break_low_value = 0 THEN
4749 NULL;
4750 ELSE
4751 qp_bulk_loader_pub.write_log('ERROR: No 0 From Value');
4752 P_PRICING_ATTR_REC.PROCESS_STATUS_FLAG(I):= NULL ; --'E';
4753 FND_MESSAGE.SET_NAME('QP', 'QP_PBK_ZERO_FROM');
4754 QP_BULK_MSG.ADD(l_msg_rec);
4755
4756 UPDATE qp_interface_list_lines
4757 SET process_status_flag = NULL --'E'
4758 WHERE orig_sys_line_ref = p_pricing_attr_rec.orig_sys_line_ref(I)
4759 AND orig_sys_header_ref = p_pricing_attr_rec.orig_sys_header_ref(I);
4760
4761 FND_MESSAGE.SET_NAME('QP', 'QP_PBK_ZERO_FROM');
4762 l_msg_txt:= FND_MESSAGE.GET;
4763
4764 INSERT INTO QP_INTERFACE_ERRORS
4765 (error_id,last_update_date, last_updated_by, creation_date,
4766 created_by, last_update_login, request_id, program_application_id,
4767 program_id, program_update_date, entity_type, table_name, column_name,
4768 orig_sys_header_ref,orig_sys_line_ref,orig_sys_qualifier_ref,
4769 orig_sys_pricing_attr_ref, error_message)
4770 VALUES
4771 (qp_interface_errors_s.nextval, sysdate ,FND_GLOBAL.USER_ID, sysdate,
4772 FND_GLOBAL.USER_ID, FND_GLOBAL.CONC_LOGIN_ID, p_pricing_attr_rec.request_id(I), 661,
4773 NULL,NULL, 'PRL', 'QP_INTERFACE_LIST_LINES', NULL,
4774 p_pricing_attr_rec.orig_sys_header_ref(I),p_pricing_attr_rec.orig_sys_line_ref(I),null,
4775 null,l_msg_txt);
4776 END IF;
4777 END IF;
4778 END IF;
4779 --ENH Continuous Price Breaks END RAVI
4780
4781 IF p_pricing_attr_rec.pricing_attribute_datatype(I)='N' THEN
4782 OPEN C_Int_break_lines(p_pricing_attr_rec.orig_sys_line_ref(I),
4783 -- Bug 5246745 Use Composite Index for Ref columns
4784 p_pricing_attr_rec.orig_sys_header_ref(I),
4785 p_pricing_attr_rec.request_id(I)); -- changes done by rassharm for bug no 6028305
4786 FETCH C_Int_break_lines into l_status1;
4787
4788 CLOSE C_Int_break_lines;
4789 END IF;
4790
4791 IF l_status = 'OVERLAP' OR l_status1 = 'OVERLAP' THEN
4792 qp_bulk_loader_pub.write_log('Overlapping Price Breaks');
4793 P_PRICING_ATTR_REC.PROCESS_STATUS_FLAG(I):= NULL ; --'E';
4794 FND_MESSAGE.SET_NAME('QP', 'QP_OVERLAP_PRICE_BREAK_RANGE');
4795 QP_BULK_MSG.ADD(l_msg_rec);
4796
4797 UPDATE qp_interface_list_lines
4798 SET process_status_flag = NULL --'E'
4799 WHERE orig_sys_line_ref = p_pricing_attr_rec.orig_sys_line_ref(I)
4800 AND orig_sys_header_ref = p_pricing_attr_rec.orig_sys_header_ref(I);
4801
4802 FND_MESSAGE.SET_NAME('QP', 'QP_OVERLAP_PRICE_BREAK_RANGE');
4803 l_msg_txt:= FND_MESSAGE.GET;
4804
4805 INSERT INTO QP_INTERFACE_ERRORS
4806 (error_id,last_update_date, last_updated_by, creation_date,
4807 created_by, last_update_login, request_id, program_application_id,
4808 program_id, program_update_date, entity_type, table_name, column_name,
4809 orig_sys_header_ref,orig_sys_line_ref,orig_sys_qualifier_ref,
4810 orig_sys_pricing_attr_ref, error_message)
4811 VALUES
4812 (qp_interface_errors_s.nextval, sysdate ,FND_GLOBAL.USER_ID, sysdate,
4813 FND_GLOBAL.USER_ID, FND_GLOBAL.CONC_LOGIN_ID, p_pricing_attr_rec.request_id(I), 661,
4814 NULL,NULL, 'PRL', 'QP_INTERFACE_LIST_LINES', NULL,
4815 p_pricing_attr_rec.orig_sys_header_ref(I),p_pricing_attr_rec.orig_sys_line_ref(I),null,
4816 null,l_msg_txt);
4817
4818 END IF;
4819 EXCEPTION
4820 WHEN NO_DATA_FOUND THEN
4821 NULL;
4822 END;
4823
4824 --Flex field check
4825
4826 IF ( p_Pricing_Attr_rec.pricing_attribute_context(I) is not null
4827 or p_Pricing_Attr_rec.pricing_attribute(I) is not null ) then
4828
4829 IF l_pricing_attr_flex_enabled = 'Y' THEN
4830 qp_bulk_loader_pub.write_log( 'Pricing Attr Flex enabled ');
4831
4832 IF NOT Init_Desc_Flex
4833 (p_flex_name =>'QP_PRICING_ATTRIBUTES'
4834 ,p_context => p_pricing_attr_rec.context(i)
4835 ,p_attribute1 => p_pricing_attr_rec.attribute1(i)
4836 ,p_attribute2 => p_pricing_attr_rec.attribute2(i)
4837 ,p_attribute3 => p_pricing_attr_rec.attribute3(i)
4838 ,p_attribute4 => p_pricing_attr_rec.attribute4(i)
4839 ,p_attribute5 => p_pricing_attr_rec.attribute5(i)
4840 ,p_attribute6 => p_pricing_attr_rec.attribute6(i)
4841 ,p_attribute7 => p_pricing_attr_rec.attribute7(i)
4842 ,p_attribute8 => p_pricing_attr_rec.attribute8(i)
4843 ,p_attribute9 => p_pricing_attr_rec.attribute9(i)
4844 ,p_attribute10 => p_pricing_attr_rec.attribute10(i)
4845 ,p_attribute11 => p_pricing_attr_rec.attribute11(i)
4846 ,p_attribute12 => p_pricing_attr_rec.attribute12(i)
4847 ,p_attribute13 => p_pricing_attr_rec.attribute13(i)
4848 ,p_attribute14 => p_pricing_attr_rec.attribute14(i)
4849 ,p_attribute15 => p_pricing_attr_rec.attribute15(i)) THEN
4850
4851 QP_BULK_MSG.ADD(l_msg_rec);
4852
4853 -- Log Error Message
4854 FND_MESSAGE.SET_NAME('QP','QP_INVALID_ATTRIBUTE');
4855 FND_MESSAGE.SET_TOKEN('ATTRIBUTE',
4856 'Entity:Flexfield:Pricing_Attr_Desc_Flex');
4857 p_pricing_attr_rec.process_status_flag(I):=NULL;
4858
4859 QP_BULK_MSG.ADD(l_msg_rec);
4860
4861 ELSE -- if the flex validation is successfull
4862
4863 IF p_pricing_attr_rec.context(i) IS NULL
4864 OR p_pricing_attr_rec.context(i) = FND_API.G_MISS_CHAR THEN
4865 p_pricing_attr_rec.context(i) := g_context;
4866 END IF;
4867
4868 IF p_pricing_attr_rec.attribute1(i) IS NULL
4869 OR p_pricing_attr_rec.attribute1(i) = FND_API.G_MISS_CHAR THEN
4870 p_pricing_attr_rec.attribute1(i) := g_attribute1;
4871 END IF;
4872
4873 IF p_pricing_attr_rec.attribute2(i) IS NULL
4874 OR p_pricing_attr_rec.attribute2(i) = FND_API.G_MISS_CHAR THEN
4875 p_pricing_attr_rec.attribute2(i) := g_attribute2;
4876 END IF;
4877
4878 IF p_pricing_attr_rec.attribute3(i) IS NULL
4879 OR p_pricing_attr_rec.attribute3(i) = FND_API.G_MISS_CHAR THEN
4880 p_pricing_attr_rec.attribute3(i) := g_attribute3;
4881 END IF;
4882
4883 IF p_pricing_attr_rec.attribute4(i) IS NULL
4884 OR p_pricing_attr_rec.attribute4(i) = FND_API.G_MISS_CHAR THEN
4885 p_pricing_attr_rec.attribute4(i) := g_attribute4;
4886 END IF;
4887
4888 IF p_pricing_attr_rec.attribute5(i) IS NULL
4889 OR p_pricing_attr_rec.attribute5(i) = FND_API.G_MISS_CHAR THEN
4890 p_pricing_attr_rec.attribute5(i) := g_attribute5;
4891 END IF;
4892
4893 IF p_pricing_attr_rec.attribute6(i) IS NULL
4894 OR p_pricing_attr_rec.attribute6(i) = FND_API.G_MISS_CHAR THEN
4895 p_pricing_attr_rec.attribute6(i) := g_attribute6;
4896 END IF;
4897 IF p_pricing_attr_rec.attribute7(i) IS NULL
4898 OR p_pricing_attr_rec.attribute7(i) = FND_API.G_MISS_CHAR THEN
4899 p_pricing_attr_rec.attribute7(i) := g_attribute7;
4900 END IF;
4901
4902 IF p_pricing_attr_rec.attribute8(i) IS NULL
4903 OR p_pricing_attr_rec.attribute8(i) = FND_API.G_MISS_CHAR THEN
4904 p_pricing_attr_rec.attribute8(i) := g_attribute8;
4905 END IF;
4906
4907 IF p_pricing_attr_rec.attribute9(i) IS NULL
4908 OR p_pricing_attr_rec.attribute9(i) = FND_API.G_MISS_CHAR THEN
4909 p_pricing_attr_rec.attribute9(i) := g_attribute9;
4910 END IF;
4911
4912 IF p_pricing_attr_rec.attribute10(i) IS NULL
4913 OR p_pricing_attr_rec.attribute10(i) = FND_API.G_MISS_CHAR THEN
4914 p_pricing_attr_rec.attribute10(i) := G_attribute10;
4915 End IF;
4916
4917 IF p_pricing_attr_rec.attribute11(i) IS NULL
4918 OR p_pricing_attr_rec.attribute11(i) = FND_API.G_MISS_CHAR THEN
4919 p_pricing_attr_rec.attribute11(i) := g_attribute11;
4920 END IF;
4921
4922 IF p_pricing_attr_rec.attribute12(i) IS NULL
4923 OR p_pricing_attr_rec.attribute12(i) = FND_API.G_MISS_CHAR THEN
4924 p_pricing_attr_rec.attribute12(i) := g_attribute12;
4925 END IF;
4926
4927 IF p_pricing_attr_rec.attribute13(i) IS NULL
4928 OR p_pricing_attr_rec.attribute13(i) = FND_API.G_MISS_CHAR THEN
4929 p_pricing_attr_rec.attribute13(i) := g_attribute13;
4930 END IF;
4931
4932 IF p_pricing_attr_rec.attribute14(i) IS NULL
4933 OR p_pricing_attr_rec.attribute14(i) = FND_API.G_MISS_CHAR THEN
4934 p_pricing_attr_rec.attribute14(i) := g_attribute14;
4935 END IF;
4936
4937 IF p_pricing_attr_rec.attribute15(i) IS NULL
4938 OR p_pricing_attr_rec.attribute15(i) = FND_API.G_MISS_CHAR THEN
4939 p_pricing_attr_rec.attribute15(i) := g_attribute15;
4940 END IF;
4941 END IF;
4942 END IF;
4943 END IF; -- pricing attr pair not null
4944
4945 -- Updation check
4946 --cannot update product attribute
4947 IF p_pricing_attr_rec.interface_action_code(I) = 'UPDATE'
4948 AND p_pricing_attr_rec.process_status_flag(I)='P' THEN --,'*') <> 'E' THEN
4949
4950 l_old_pricing_attr_rec := Qp_pll_pricing_attr_Util.Query_Row
4951 ( p_pricing_attribute_id => l_pricing_attribute_id
4952 );
4953
4954 IF l_old_pricing_attr_rec.product_attribute_context <>
4955 p_pricing_attr_rec.product_attribute_context(I)
4956 OR l_old_pricing_attr_rec.product_attribute <>
4957 p_pricing_attr_rec.product_attribute(I)
4958 OR l_old_pricing_attr_rec.product_attr_value <>
4959 p_pricing_attr_rec.product_attr_value(I) THEN
4960
4961 P_PRICING_ATTR_REC.PROCESS_STATUS_FLAG(I):= NULL; --'E';
4962 FND_MESSAGE.SET_NAME('QP', 'NO_PRODUCT_ATTR_UPD');
4963 QP_BULK_MSG.ADD(l_msg_rec);
4964 END IF;
4965 END IF;
4966
4967
4968 --Warning messages
4969 -- Product attribute
4970 IF p_pricing_attr_rec.process_status_flag(I)='P' --,'*') <> 'E'
4971 and p_pricing_attr_rec.pricing_attribute_context(I) IS NULL
4972 and p_pricing_attr_rec.pricing_attribute(I) IS NULL THEN
4973
4974 QP_UTIL.Get_Context_Type('QP_ATTR_DEFNS_PRICING',
4975 p_Pricing_Attr_rec.product_attribute_context(I),
4976 l_context_type,
4977 l_error_code);
4978
4979 QP_UTIL.Get_Sourcing_Info(l_context_type,
4980 p_Pricing_Attr_rec.product_attribute_context(I),
4981 p_Pricing_Attr_rec.product_attribute(I),
4982 l_sourcing_enabled,
4983 l_sourcing_status,
4984 l_sourcing_method);
4985 qp_bulk_loader_pub.write_log('Sourcing method / status / enabled'||l_sourcing_method||l_sourcing_status||l_sourcing_enabled);
4986
4987 IF l_sourcing_method = 'ATTRIBUTE MAPPING' THEN
4988
4989 IF l_sourcing_enabled <> 'Y' THEN
4990
4991 FND_MESSAGE.SET_NAME('QP','QP_ENABLE_SOURCING');
4992 FND_MESSAGE.SET_TOKEN('CONTEXT',
4993 p_Pricing_Attr_rec.product_attribute_context(I));
4994 FND_MESSAGE.SET_TOKEN('ATTRIBUTE',
4995 p_Pricing_Attr_rec.product_attribute(I));
4996 QP_BULK_MSG.ADD(l_msg_rec);
4997 END IF;
4998
4999 IF l_sourcing_status <> 'Y' THEN
5000
5001 FND_MESSAGE.SET_NAME('QP','QP_BUILD_SOURCING_RULES');
5002 FND_MESSAGE.SET_TOKEN('CONTEXT',
5003 p_Pricing_Attr_rec.product_attribute_context(I));
5004 FND_MESSAGE.SET_TOKEN('ATTRIBUTE',
5005 p_Pricing_Attr_rec.product_attribute(I));
5006 QP_BULK_MSG.ADD(l_msg_rec, 'W'); --bug no: 9652756- set type of this message to Warning
5007
5008 END IF;
5009
5010 END IF; --If sourcing_method = 'ATTRIBUTE MAPPING'
5011 END IF; -- process_status_flag(I) <> 'E'
5012
5013 -- Pricing attribute
5014 IF p_pricing_attr_rec.process_status_flag(I)='P' --,'*') <> 'E'
5015 and p_pricing_attr_rec.pricing_attribute_context(I) IS NOT NULL
5016 and p_pricing_attr_rec.pricing_attribute(I) IS NOT NULL THEN
5017
5018 QP_UTIL.Get_Context_Type('QP_ATTR_DEFNS_PRICING',
5019 p_Pricing_Attr_rec.pricing_attribute_context(I),
5020 l_context_type,
5021 l_error_code);
5022
5023 QP_UTIL.Get_Sourcing_Info(l_context_type,
5024 p_Pricing_Attr_rec.pricing_attribute_context(I),
5025 p_Pricing_Attr_rec.pricing_attribute(I),
5026 l_sourcing_enabled,
5027 l_sourcing_status,
5028 l_sourcing_method);
5029
5030 qp_bulk_loader_pub.write_log('Sourcing method / status / enabled'||l_sourcing_method||l_sourcing_status||l_sourcing_enabled);
5031
5032 IF l_sourcing_method = 'ATTRIBUTE MAPPING' THEN
5033
5034 IF l_sourcing_enabled <> 'Y' THEN
5035
5036 FND_MESSAGE.SET_NAME('QP','QP_ENABLE_SOURCING');
5037 FND_MESSAGE.SET_TOKEN('CONTEXT',
5038 p_Pricing_Attr_rec.pricing_attribute_context(I));
5039 FND_MESSAGE.SET_TOKEN('ATTRIBUTE',
5040 p_Pricing_Attr_rec.pricing_attribute(I));
5041 QP_BULK_MSG.ADD(l_msg_rec);
5042 END IF;
5043
5044 IF l_sourcing_status <> 'Y' THEN
5045
5046 FND_MESSAGE.SET_NAME('QP','QP_BUILD_SOURCING_RULES');
5047 FND_MESSAGE.SET_TOKEN('CONTEXT',
5048 p_Pricing_Attr_rec.pricing_attribute_context(I));
5049 FND_MESSAGE.SET_TOKEN('ATTRIBUTE',
5050 p_Pricing_Attr_rec.pricing_attribute(I));
5051 QP_BULK_MSG.ADD(l_msg_rec, 'W'); --bug no: 9652756- set type of this message - Warning
5052
5053 END IF;
5054
5055 END IF; --If sourcing_method = 'ATTRIBUTE MAPPING'
5056 END IF; -- process_status_flag(I) <> 'E'
5057 END LOOP;
5058
5059 qp_bulk_loader_pub.write_log( 'Leaving Entity Pricing Attr validation');
5060
5061 EXCEPTION
5062 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
5063 qp_bulk_loader_pub.write_log( 'UNEXCPECTED ERROR IN PROCEDURE ENTITY_PRICING_ATTR:'||sqlerrm);
5064 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5065 WHEN OTHERS THEN
5066 qp_bulk_loader_pub.write_log( 'UNEXCPECTED ERROR IN PROCEDURE ENTITY_PRICING_ATTR:'||sqlerrm);
5067 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5068
5069
5070 END ENTITY_PRICING_ATTR;
5071
5072
5073
5074
5075 PROCEDURE ATTRIBUTE_HEADER
5076 (p_request_id NUMBER)
5077 IS
5078 l_msg_txt VARCHAR2(240);
5079
5080 BEGIN
5081
5082 --Currency Code
5083 --List Type Code
5084 --Freight Terms
5085 --Payment Terms
5086 --Ship Method (Freight Carrier)
5087 --Currency Header Id
5088 --Name
5089 --PTE
5090 --Source System
5091
5092 qp_bulk_loader_pub.write_log('Entering Attribute Header validation');
5093 -- 1.Currency Code
5094
5095 FND_MESSAGE.SET_NAME('QP','QP_INVALID_ATTRIBUTE');
5096 FND_MESSAGE.SET_TOKEN('ATTRIBUTE','CURRENCY CODE');
5097 l_msg_txt := FND_MESSAGE.GET;
5098
5099
5100 INSERT INTO QP_INTERFACE_ERRORS
5101 (error_id,last_update_date, last_updated_by, creation_date,
5102 created_by, last_update_login, request_id, program_application_id,
5103 program_id, program_update_date, entity_type, table_name, column_name,
5104 orig_sys_header_ref,orig_sys_line_ref,orig_sys_qualifier_ref,
5105 orig_sys_pricing_attr_ref, error_message)
5106 SELECT
5107 qp_interface_errors_s.nextval, sysdate ,FND_GLOBAL.USER_ID, sysdate,
5108 FND_GLOBAL.USER_ID, FND_GLOBAL.CONC_LOGIN_ID, qpih.request_id, 661,
5109 NULL,NULL, 'PRL', 'QP_INTERFACE_LIST_HEADERS', 'CURRENCY_CODE',
5110 qpih.orig_sys_header_ref,null,null,null,l_msg_txt
5111 FROM QP_INTERFACE_LIST_HEADERS qpih
5112 WHERE qpih.request_id = p_request_id
5113 AND qpih.process_status_flag ='P' --is null
5114 AND qpih.currency_code is not null
5115 AND qpih.interface_action_code IN ('INSERT', 'UPDATE')
5116 AND NOT EXISTS (SELECT currency_code -- Validation
5117 FROM fnd_currencies_vl
5118 WHERE enabled_flag = 'Y'
5119 AND currency_flag='Y'
5120 AND currency_code = qpih.currency_code
5121 );
5122
5123 -- 2.Freight Terms
5124
5125 FND_MESSAGE.SET_NAME('QP','QP_INVALID_ATTRIBUTE');
5126 FND_MESSAGE.SET_TOKEN('ATTRIBUTE', 'FREIGHT TERMS');
5127 l_msg_txt := FND_MESSAGE.GET;
5128
5129 --Bug# 5412029 START RAVI
5130 --Check if the frieght terms are valid
5131 INSERT INTO QP_INTERFACE_ERRORS
5132 (error_id,last_update_date, last_updated_by, creation_date,
5133 created_by, last_update_login, request_id, program_application_id,
5134 program_id, program_update_date, entity_type, table_name, column_name,
5135 orig_sys_header_ref,orig_sys_line_ref,orig_sys_qualifier_ref,
5136 orig_sys_pricing_attr_ref, error_message)
5137 SELECT
5138 qp_interface_errors_s.nextval, sysdate ,FND_GLOBAL.USER_ID, sysdate,
5139 FND_GLOBAL.USER_ID, FND_GLOBAL.CONC_LOGIN_ID, qpih.request_id, 661,
5140 NULL,NULL, 'PRL', 'QP_INTERFACE_LIST_HEADERS', 'FREIGHT TERMS',
5141 qpih.orig_sys_header_ref,null,null,null, l_msg_txt
5142 FROM QP_INTERFACE_LIST_HEADERS qpih
5143 WHERE qpih.request_id = p_request_id
5144 AND qpih.process_status_flag ='P' --is null
5145 AND qpih.interface_action_code IN ('INSERT', 'UPDATE')
5146 AND qpih.freight_terms_code IS NOT NULL
5147 AND qpih.freight_terms_code <> QP_BULK_LOADER_PUB.G_NULL_CHAR
5148 AND qpih.freight_terms IS NOT NULL
5149 AND NOT EXISTS (SELECT freight_terms_code
5150 FROM OE_FRGHT_TERMS_ACTIVE_V
5151 WHERE freight_terms_code = qpih.freight_terms_code
5152 AND freight_terms = qpih.freight_terms
5153 AND sysdate BETWEEN nvl(start_date_active, sysdate)
5154 AND nvl(end_date_active, sysdate));
5155
5156 INSERT INTO QP_INTERFACE_ERRORS
5157 (error_id,last_update_date, last_updated_by, creation_date,
5158 created_by, last_update_login, request_id, program_application_id,
5159 program_id, program_update_date, entity_type, table_name, column_name,
5160 orig_sys_header_ref,orig_sys_line_ref,orig_sys_qualifier_ref,
5161 orig_sys_pricing_attr_ref, error_message)
5162 SELECT
5163 qp_interface_errors_s.nextval, sysdate ,FND_GLOBAL.USER_ID, sysdate,
5164 FND_GLOBAL.USER_ID, FND_GLOBAL.CONC_LOGIN_ID, qpih.request_id, 661,
5165 NULL,NULL, 'PRL', 'QP_INTERFACE_LIST_HEADERS', 'FREIGHT TERMS',
5166 qpih.orig_sys_header_ref,null,null,null, l_msg_txt
5167 FROM QP_INTERFACE_LIST_HEADERS qpih
5168 WHERE qpih.request_id = p_request_id
5169 AND qpih.process_status_flag ='P' --is null
5170 AND qpih.interface_action_code IN ('INSERT', 'UPDATE')
5171 AND qpih.freight_terms IS NOT NULL
5172 AND qpih.freight_terms_code IS NULL
5173 AND NOT EXISTS (SELECT freight_terms_code
5174 FROM OE_FRGHT_TERMS_ACTIVE_V
5175 WHERE freight_terms = qpih.freight_terms
5176 AND sysdate BETWEEN nvl(start_date_active, sysdate)
5177 AND nvl(end_date_active, sysdate));
5178
5179 INSERT INTO QP_INTERFACE_ERRORS
5180 (error_id,last_update_date, last_updated_by, creation_date,
5181 created_by, last_update_login, request_id, program_application_id,
5182 program_id, program_update_date, entity_type, table_name, column_name,
5183 orig_sys_header_ref,orig_sys_line_ref,orig_sys_qualifier_ref,
5184 orig_sys_pricing_attr_ref, error_message)
5185 SELECT
5186 qp_interface_errors_s.nextval, sysdate ,FND_GLOBAL.USER_ID, sysdate,
5187 FND_GLOBAL.USER_ID, FND_GLOBAL.CONC_LOGIN_ID, qpih.request_id, 661,
5188 NULL,NULL, 'PRL', 'QP_INTERFACE_LIST_HEADERS', 'FREIGHT TERMS',
5189 qpih.orig_sys_header_ref,null,null,null, l_msg_txt
5190 FROM QP_INTERFACE_LIST_HEADERS qpih
5191 WHERE qpih.request_id = p_request_id
5192 AND qpih.process_status_flag ='P' --is null
5193 AND qpih.interface_action_code IN ('INSERT', 'UPDATE')
5194 AND qpih.freight_terms IS NULL
5195 AND qpih.freight_terms_code IS NOT NULL
5196 AND qpih.freight_terms_code <> QP_BULK_LOADER_PUB.G_NULL_CHAR
5197 AND NOT EXISTS (SELECT freight_terms_code
5198 FROM OE_FRGHT_TERMS_ACTIVE_V
5199 WHERE freight_terms_code = qpih.freight_terms_code
5200 AND sysdate BETWEEN nvl(start_date_active, sysdate)
5201 AND nvl(end_date_active, sysdate));
5202 --Bug# 5412029 END RAVI
5203
5204 -- 3. LIST TYPE CODE
5205
5206 FND_MESSAGE.SET_NAME('QP','QP_INVALID_ATTRIBUTE');
5207 FND_MESSAGE.SET_TOKEN('ATTRIBUTE','LIST TYPE CODE');
5208 l_msg_txt := FND_MESSAGE.GET;
5209
5210 INSERT INTO QP_INTERFACE_ERRORS
5211 (error_id,last_update_date, last_updated_by, creation_date,
5212 created_by, last_update_login, request_id, program_application_id,
5213 program_id, program_update_date, entity_type, table_name, column_name,
5214 orig_sys_header_ref,orig_sys_line_ref,orig_sys_qualifier_ref,
5215 orig_sys_pricing_attr_ref, error_message)
5216 SELECT
5217 qp_interface_errors_s.nextval, sysdate ,FND_GLOBAL.USER_ID, sysdate,
5218 FND_GLOBAL.USER_ID, FND_GLOBAL.CONC_LOGIN_ID, qpih.request_id, 661,
5219 NULL,NULL, 'PRL', 'QP_INTERFACE_LIST_HEADERS', 'LIST_TYPE_CODE',
5220 qpih.orig_sys_header_ref,null,null,null,l_msg_txt
5221 FROM QP_INTERFACE_LIST_HEADERS qpih
5222 WHERE qpih.request_id = p_request_id
5223 AND qpih.process_status_flag ='P' --is null
5224 AND qpih.interface_action_code IN ('INSERT', 'UPDATE')
5225 AND qpih.list_type_code IS NOT NULL
5226 AND NOT EXISTS (SELECT lookup_code
5227 FROM qp_lookups
5228 WHERE lookup_type = 'LIST_TYPE_CODE'
5229 AND lookup_code = qpih.list_type_code);
5230
5231 -- 4.Ship Method(Freight Carrier)
5232
5233 FND_MESSAGE.SET_NAME('QP','QP_INVALID_ATTRIBUTE');
5234 FND_MESSAGE.SET_TOKEN('ATTRIBUTE', 'FREIGHT CARRIER');
5235 l_msg_txt := FND_MESSAGE.GET;
5236
5237 --Bug# 5412029 START RAVI
5238 --Check if the ship method are valid
5239 INSERT INTO QP_INTERFACE_ERRORS
5240 (error_id,last_update_date, last_updated_by, creation_date,
5241 created_by, last_update_login, request_id, program_application_id,
5242 program_id, program_update_date, entity_type, table_name, column_name,
5243 orig_sys_header_ref,orig_sys_line_ref,orig_sys_qualifier_ref,
5244 orig_sys_pricing_attr_ref, error_message)
5245 SELECT
5246 qp_interface_errors_s.nextval, sysdate ,FND_GLOBAL.USER_ID, sysdate,
5247 FND_GLOBAL.USER_ID, FND_GLOBAL.CONC_LOGIN_ID, qpih.request_id, 661,
5248 NULL,NULL, 'PRL', 'QP_INTERFACE_LIST_HEADERS', 'FRIEGHT CARRIER',
5249 qpih.orig_sys_header_ref, null,null,null,l_msg_txt
5250 FROM QP_INTERFACE_LIST_HEADERS qpih
5251 WHERE qpih.request_id = p_request_id
5252 AND qpih.process_status_flag ='P' --is null
5253 AND qpih.interface_action_code IN ('INSERT', 'UPDATE')
5254 AND qpih.ship_method IS NOT NULL
5255 AND qpih.ship_method_code IS NOT NULL
5256 AND qpih.ship_method_code <> QP_BULK_LOADER_PUB.G_NULL_CHAR
5257 AND NOT EXISTS (SELECT LOOKUP_CODE
5258 FROM OE_SHIP_METHODS_V
5259 WHERE LOOKUP_TYPE = 'SHIP_METHOD'
5260 AND LOOKUP_CODE = qpih.ship_method_code
5261 AND MEANING = qpih.ship_method
5262 AND sysdate BETWEEN nvl(start_date_active, sysdate)
5263 AND nvl(end_date_active, sysdate) );
5264
5265 INSERT INTO QP_INTERFACE_ERRORS
5266 (error_id,last_update_date, last_updated_by, creation_date,
5267 created_by, last_update_login, request_id, program_application_id,
5268 program_id, program_update_date, entity_type, table_name, column_name,
5269 orig_sys_header_ref,orig_sys_line_ref,orig_sys_qualifier_ref,
5270 orig_sys_pricing_attr_ref, error_message)
5271 SELECT
5272 qp_interface_errors_s.nextval, sysdate ,FND_GLOBAL.USER_ID, sysdate,
5273 FND_GLOBAL.USER_ID, FND_GLOBAL.CONC_LOGIN_ID, qpih.request_id, 661,
5274 NULL,NULL, 'PRL', 'QP_INTERFACE_LIST_HEADERS', 'FRIEGHT CARRIER',
5275 qpih.orig_sys_header_ref, null,null,null,l_msg_txt
5276 FROM QP_INTERFACE_LIST_HEADERS qpih
5277 WHERE qpih.request_id = p_request_id
5278 AND qpih.process_status_flag ='P' --is null
5279 AND qpih.interface_action_code IN ('INSERT', 'UPDATE')
5280 AND qpih.ship_method IS NULL
5281 AND qpih.ship_method_code IS NOT NULL
5282 AND qpih.ship_method_code <> QP_BULK_LOADER_PUB.G_NULL_CHAR
5283 AND NOT EXISTS (SELECT LOOKUP_CODE
5284 FROM OE_SHIP_METHODS_V
5285 WHERE LOOKUP_TYPE = 'SHIP_METHOD'
5286 AND LOOKUP_CODE = qpih.ship_method_code
5287 AND sysdate BETWEEN nvl(start_date_active, sysdate)
5288 AND nvl(end_date_active, sysdate) );
5289
5290 INSERT INTO QP_INTERFACE_ERRORS
5291 (error_id,last_update_date, last_updated_by, creation_date,
5292 created_by, last_update_login, request_id, program_application_id,
5293 program_id, program_update_date, entity_type, table_name, column_name,
5294 orig_sys_header_ref,orig_sys_line_ref,orig_sys_qualifier_ref,
5295 orig_sys_pricing_attr_ref, error_message)
5296 SELECT
5297 qp_interface_errors_s.nextval, sysdate ,FND_GLOBAL.USER_ID, sysdate,
5298 FND_GLOBAL.USER_ID, FND_GLOBAL.CONC_LOGIN_ID, qpih.request_id, 661,
5299 NULL,NULL, 'PRL', 'QP_INTERFACE_LIST_HEADERS', 'FRIEGHT CARRIER',
5300 qpih.orig_sys_header_ref, null,null,null,l_msg_txt
5301 FROM QP_INTERFACE_LIST_HEADERS qpih
5302 WHERE qpih.request_id = p_request_id
5303 AND qpih.process_status_flag ='P' --is null
5304 AND qpih.interface_action_code IN ('INSERT', 'UPDATE')
5305 AND qpih.ship_method IS NOT NULL
5306 AND qpih.ship_method_code IS NULL
5307 AND NOT EXISTS (SELECT LOOKUP_CODE
5308 FROM OE_SHIP_METHODS_V
5309 WHERE LOOKUP_TYPE = 'SHIP_METHOD'
5310 AND MEANING = qpih.ship_method
5311 AND sysdate BETWEEN nvl(start_date_active, sysdate)
5312 AND nvl(end_date_active, sysdate) );
5313 --Bug# 5412029 END RAVI
5314
5315 -- 5. Payment Terms
5316 FND_MESSAGE.SET_NAME('QP','QP_INVALID_ATTRIBUTE');
5317 FND_MESSAGE.SET_TOKEN('ATTRIBUTE', 'PAYMENT TERMS');
5318 l_msg_txt := FND_MESSAGE.GET;
5319
5320 --Bug# 5412029 START RAVI
5321 --Check if the payment terms are valid
5322 INSERT INTO QP_INTERFACE_ERRORS
5323 (error_id,last_update_date, last_updated_by, creation_date,
5324 created_by, last_update_login, request_id, program_application_id,
5325 program_id, program_update_date, entity_type, table_name, column_name,
5326 orig_sys_header_ref,orig_sys_line_ref,orig_sys_qualifier_ref,
5327 orig_sys_pricing_attr_ref, error_message)
5328 SELECT
5329 qp_interface_errors_s.nextval, sysdate ,FND_GLOBAL.USER_ID, sysdate,
5330 FND_GLOBAL.USER_ID, FND_GLOBAL.CONC_LOGIN_ID, qpih.request_id, 661,
5331 NULL,NULL, 'PRL', 'QP_INTERFACE_LIST_HEADERS', 'PAYMENT TERMS',
5332 qpih.orig_sys_header_ref,null,null,null,l_msg_txt
5333 FROM QP_INTERFACE_LIST_HEADERS qpih
5334 WHERE qpih.request_id = p_request_id
5335 AND qpih.process_status_flag ='P' --is null
5336 AND qpih.interface_action_code IN ('INSERT', 'UPDATE')
5337 AND qpih.terms_id IS NOT NULL
5338 AND qpih.terms IS NOT NULL
5339 AND qpih.terms <> QP_BULK_LOADER_PUB.G_NULL_CHAR
5340 --Bug#5248659 RAVI
5341 --Use Term_id not terms_id
5342 AND NOT EXISTS (SELECT TERM_ID
5343 FROM RA_TERMS
5344 WHERE TERM_ID = qpih.terms_id
5345 AND name = qpih.terms
5346 AND sysdate BETWEEN nvl(start_date_active, sysdate)
5347 AND nvl(end_date_active, sysdate) );
5348
5349 INSERT INTO QP_INTERFACE_ERRORS
5350 (error_id,last_update_date, last_updated_by, creation_date,
5351 created_by, last_update_login, request_id, program_application_id,
5352 program_id, program_update_date, entity_type, table_name, column_name,
5353 orig_sys_header_ref,orig_sys_line_ref,orig_sys_qualifier_ref,
5354 orig_sys_pricing_attr_ref, error_message)
5355 SELECT
5356 qp_interface_errors_s.nextval, sysdate ,FND_GLOBAL.USER_ID, sysdate,
5357 FND_GLOBAL.USER_ID, FND_GLOBAL.CONC_LOGIN_ID, qpih.request_id, 661,
5358 NULL,NULL, 'PRL', 'QP_INTERFACE_LIST_HEADERS', 'PAYMENT TERMS',
5359 qpih.orig_sys_header_ref,null,null,null,l_msg_txt
5360 FROM QP_INTERFACE_LIST_HEADERS qpih
5361 WHERE qpih.request_id = p_request_id
5362 AND qpih.process_status_flag ='P' --is null
5363 AND qpih.interface_action_code IN ('INSERT', 'UPDATE')
5364 AND qpih.terms_id IS NOT NULL
5365 AND qpih.terms IS NULL
5366 --Bug#5248659 RAVI
5367 --Use Term_id not terms_id
5368 AND NOT EXISTS (SELECT TERM_ID
5369 FROM RA_TERMS
5370 WHERE TERM_ID = qpih.terms_id
5371 AND sysdate BETWEEN nvl(start_date_active, sysdate)
5372 AND nvl(end_date_active, sysdate) );
5373
5374 INSERT INTO QP_INTERFACE_ERRORS
5375 (error_id,last_update_date, last_updated_by, creation_date,
5376 created_by, last_update_login, request_id, program_application_id,
5377 program_id, program_update_date, entity_type, table_name, column_name,
5378 orig_sys_header_ref,orig_sys_line_ref,orig_sys_qualifier_ref,
5379 orig_sys_pricing_attr_ref, error_message)
5380 SELECT
5381 qp_interface_errors_s.nextval, sysdate ,FND_GLOBAL.USER_ID, sysdate,
5382 FND_GLOBAL.USER_ID, FND_GLOBAL.CONC_LOGIN_ID, qpih.request_id, 661,
5383 NULL,NULL, 'PRL', 'QP_INTERFACE_LIST_HEADERS', 'PAYMENT TERMS',
5384 qpih.orig_sys_header_ref,null,null,null,l_msg_txt
5385 FROM QP_INTERFACE_LIST_HEADERS qpih
5386 WHERE qpih.request_id = p_request_id
5387 AND qpih.process_status_flag ='P' --is null
5388 AND qpih.interface_action_code IN ('INSERT', 'UPDATE')
5389 AND qpih.terms_id IS NULL
5390 AND qpih.terms IS NOT NULL
5391 AND qpih.terms <> QP_BULK_LOADER_PUB.G_NULL_CHAR
5392 --Bug#5248659 RAVI
5393 --Use Term_id not terms_id
5394 AND NOT EXISTS (SELECT TERM_ID
5395 FROM RA_TERMS
5396 WHERE name = qpih.terms
5397 AND sysdate BETWEEN nvl(start_date_active, sysdate)
5398 AND nvl(end_date_active, sysdate) );
5399
5400 --Bug# 5412029 END RAVI
5401 -- 6. Currency Header
5402
5403 FND_MESSAGE.SET_NAME('QP','QP_INVALID_ATTRIBUTE');
5404 FND_MESSAGE.SET_TOKEN('ATTRIBUTE', 'CURRENCY HEADER');
5405 l_msg_txt := FND_MESSAGE.GET;
5406
5407 -- Bug 4938046,5412029 START RAVI
5408 /**
5409 Currency Header and Header ID validation
5410 **/
5411
5412 INSERT INTO QP_INTERFACE_ERRORS
5413 (error_id,last_update_date, last_updated_by, creation_date,
5414 created_by, last_update_login, request_id, program_application_id,
5415 program_id, program_update_date, entity_type, table_name, column_name,
5416 orig_sys_header_ref,orig_sys_line_ref,orig_sys_qualifier_ref,
5417 orig_sys_pricing_attr_ref, error_message)
5418 SELECT
5419 qp_interface_errors_s.nextval, sysdate ,FND_GLOBAL.USER_ID, sysdate,
5420 FND_GLOBAL.USER_ID, FND_GLOBAL.CONC_LOGIN_ID, qpih.request_id, 661,
5421 NULL,NULL, 'PRL', 'QP_INTERFACE_LIST_HEADERS', 'CURRENCY_HEADER',
5422 qpih.orig_sys_header_ref,null,null,null,l_msg_txt
5423 FROM QP_INTERFACE_LIST_HEADERS qpih
5424 WHERE qpih.request_id = p_request_id
5425 AND qpih.process_status_flag ='P' --is null
5426 AND qpih.interface_action_code IN ('INSERT', 'UPDATE')
5427 AND qpih.currency_header_id is NOT NULL
5428 AND qpih.currency_header is NOT NULL
5429 AND qpih.currency_header <> QP_BULK_LOADER_PUB.G_NULL_CHAR
5430 AND NOT EXISTS ( SELECT qpclb.currency_header_id
5431 FROM qp_currency_lists_b qpclb, qp_currency_lists_tl qpclt
5432 WHERE qpclb.currency_header_id = qpih.currency_header_id
5433 AND qpclb.base_currency_code = qpih.currency_code
5434 AND qpclt.currency_header_id = qpclb.currency_header_id
5435 AND qpclt.language = nvl(qpih.language,'US')
5436 AND qpclt.name = qpih.currency_header);
5437
5438 INSERT INTO QP_INTERFACE_ERRORS
5439 (error_id,last_update_date, last_updated_by, creation_date,
5440 created_by, last_update_login, request_id, program_application_id,
5441 program_id, program_update_date, entity_type, table_name, column_name,
5442 orig_sys_header_ref,orig_sys_line_ref,orig_sys_qualifier_ref,
5443 orig_sys_pricing_attr_ref, error_message)
5444 SELECT
5445 qp_interface_errors_s.nextval, sysdate ,FND_GLOBAL.USER_ID, sysdate,
5446 FND_GLOBAL.USER_ID, FND_GLOBAL.CONC_LOGIN_ID, qpih.request_id, 661,
5447 NULL,NULL, 'PRL', 'QP_INTERFACE_LIST_HEADERS', 'CURRENCY_HEADER',
5448 qpih.orig_sys_header_ref,null,null,null,l_msg_txt
5449 FROM QP_INTERFACE_LIST_HEADERS qpih
5450 WHERE qpih.request_id = p_request_id
5451 AND qpih.process_status_flag ='P' --is null
5452 AND qpih.interface_action_code IN ('INSERT', 'UPDATE')
5453 AND qpih.currency_header is NOT NULL
5454 AND qpih.currency_header <> QP_BULK_LOADER_PUB.G_NULL_CHAR
5455 AND qpih.currency_header_id is NULL
5456 AND NOT EXISTS ( SELECT qpclb.currency_header_id
5457 FROM qp_currency_lists_b qpclb, qp_currency_lists_tl qpclt
5458 WHERE qpclb.base_currency_code = qpih.currency_code
5459 AND qpclt.currency_header_id = qpclb.currency_header_id
5460 AND qpclt.language = nvl(qpih.language,'US')
5461 AND qpclt.name = qpih.currency_header);
5462
5463 INSERT INTO QP_INTERFACE_ERRORS
5464 (error_id,last_update_date, last_updated_by, creation_date,
5465 created_by, last_update_login, request_id, program_application_id,
5466 program_id, program_update_date, entity_type, table_name, column_name,
5467 orig_sys_header_ref,orig_sys_line_ref,orig_sys_qualifier_ref,
5468 orig_sys_pricing_attr_ref, error_message)
5469 SELECT
5470 qp_interface_errors_s.nextval, sysdate ,FND_GLOBAL.USER_ID, sysdate,
5471 FND_GLOBAL.USER_ID, FND_GLOBAL.CONC_LOGIN_ID, qpih.request_id, 661,
5472 NULL,NULL, 'PRL', 'QP_INTERFACE_LIST_HEADERS', 'CURRENCY_HEADER',
5473 qpih.orig_sys_header_ref,null,null,null,l_msg_txt
5474 FROM QP_INTERFACE_LIST_HEADERS qpih
5475 WHERE qpih.request_id = p_request_id
5476 AND qpih.process_status_flag ='P' --is null
5477 AND qpih.interface_action_code IN ('INSERT', 'UPDATE')
5478 AND qpih.currency_header_id is NOT NULL
5479 AND qpih.currency_header is NULL
5480 AND NOT EXISTS ( SELECT qpclb.currency_header_id
5481 FROM qp_currency_lists_b qpclb
5482 WHERE qpclb.currency_header_id = qpih.currency_header_id
5483 AND qpclb.base_currency_code = qpih.currency_code);
5484 -- Bug 4938046,5412029 END RAVI
5485
5486 -- 7. Name
5487
5488 fnd_message.set_name('QP', 'QP_ATTRIBUTE_REQUIRED');
5489 FND_MESSAGE.SET_TOKEN('ATTRIBUTE', 'NAME');
5490 l_msg_txt := FND_MESSAGE.GET;
5491
5492 INSERT INTO QP_INTERFACE_ERRORS
5493 (error_id,last_update_date, last_updated_by, creation_date,
5494 created_by, last_update_login, request_id, program_application_id,
5495 program_id, program_update_date, entity_type, table_name, column_name,
5496 orig_sys_header_ref,orig_sys_line_ref,orig_sys_qualifier_ref,
5497 orig_sys_pricing_attr_ref, error_message)
5498 SELECT
5499 qp_interface_errors_s.nextval, sysdate ,FND_GLOBAL.USER_ID, sysdate,
5500 FND_GLOBAL.USER_ID, FND_GLOBAL.CONC_LOGIN_ID, qpih.request_id, 661,
5501 NULL,NULL, 'PRL', 'QP_INTERFACE_LIST_HEADERS', 'Name',
5502 qpih.orig_sys_header_ref,null,null,null,l_msg_txt
5503 FROM QP_INTERFACE_LIST_HEADERS qpih
5504 WHERE qpih.request_id = p_request_id
5505 AND qpih.process_status_flag ='P' --is null
5506 -- AND qpih.interface_action_code IN ('INSERT', 'UPDATE')
5507 AND qpih.interface_action_code IN ('INSERT')
5508 AND (name is null or name = '');
5509
5510 -- 8. Name in other pricelists
5511
5512 fnd_message.set_name('QP', 'SO_OTHER_NAME_ALREADY_IN_USE');
5513 l_msg_txt := FND_MESSAGE.GET;
5514
5515 qp_bulk_loader_pub.write_log('Name check in TL table '||userenv('LANG')||' '||to_char(p_request_id));
5516
5517 INSERT INTO QP_INTERFACE_ERRORS
5518 (error_id,last_update_date, last_updated_by, creation_date,
5519 created_by, last_update_login, request_id, program_application_id,
5520 program_id, program_update_date, entity_type, table_name, column_name,
5521 orig_sys_header_ref,orig_sys_line_ref,orig_sys_qualifier_ref,
5522 orig_sys_pricing_attr_ref, error_message)
5523 SELECT
5524 qp_interface_errors_s.nextval, sysdate ,FND_GLOBAL.USER_ID, sysdate,
5525 FND_GLOBAL.USER_ID, FND_GLOBAL.CONC_LOGIN_ID, qpih.request_id, 661,
5526 NULL,NULL, 'PRL', 'QP_INTERFACE_LIST_HEADERS', 'Name',
5527 qpih.orig_sys_header_ref,null,null,null,l_msg_txt
5528 FROM QP_INTERFACE_LIST_HEADERS qpih
5529 WHERE qpih.request_id = p_request_id
5530 AND qpih.process_status_flag ='P' --is null
5531 AND qpih.interface_action_code IN ('INSERT')
5532 AND EXISTS ( Select qlht.name from qp_list_headers_tl qlht
5533 where qlht.name= qpih.name
5534 and qlht.language = qpih.language);
5535
5536 qp_bulk_loader_pub.write_log('Count '||SQL%ROWCOUNT);
5537
5538 -- 9. Name in other Interface header records
5539
5540 fnd_message.set_name('QP', 'SO_OTHER_NAME_ALREADY_IN_USE');
5541 l_msg_txt := FND_MESSAGE.GET;
5542
5543 INSERT INTO QP_INTERFACE_ERRORS
5544 (error_id,last_update_date, last_updated_by, creation_date,
5545 created_by, last_update_login, request_id, program_application_id,
5546 program_id, program_update_date, entity_type, table_name, column_name,
5547 orig_sys_header_ref,orig_sys_line_ref,orig_sys_qualifier_ref,
5548 orig_sys_pricing_attr_ref, error_message)
5549 SELECT
5550 qp_interface_errors_s.nextval, sysdate ,FND_GLOBAL.USER_ID, sysdate,
5551 FND_GLOBAL.USER_ID, FND_GLOBAL.CONC_LOGIN_ID, qpih.request_id, 661,
5552 NULL,NULL, 'PRL', 'QP_INTERFACE_LIST_HEADERS', 'Name',
5553 qpih.orig_sys_header_ref,null,null,null,l_msg_txt
5554 FROM QP_INTERFACE_LIST_HEADERS qpih
5555 WHERE qpih.request_id = p_request_id
5556 AND qpih.process_status_flag ='P' --is null
5557 AND qpih.interface_action_code IN ('INSERT')
5558 AND EXISTS ( Select 'x' from qp_interface_list_headers qpih1
5559 where qpih1.request_id = p_request_id
5560 and qpih1.name = qpih.name
5561 and qpih1.process_status_flag is null
5562 and qpih1.rowid <> qpih.rowid
5563 and qpih1.interface_action_code = 'INSERT');
5564 qp_bulk_loader_pub.write_log('Count 9 '||SQL%ROWCOUNT);
5565
5566 -- 10. Pricing Transaction Entity
5567
5568 FND_MESSAGE.SET_NAME('QP','QP_INVALID_ATTRIBUTE');
5569 FND_MESSAGE.SET_TOKEN('ATTRIBUTE', 'Pricing Transaction Entity');
5570 l_msg_txt := FND_MESSAGE.GET;
5571
5572 INSERT INTO QP_INTERFACE_ERRORS
5573 (error_id,last_update_date, last_updated_by, creation_date,
5574 created_by, last_update_login, request_id, program_application_id,
5575 program_id, program_update_date, entity_type, table_name, column_name,
5576 orig_sys_header_ref,orig_sys_line_ref,orig_sys_qualifier_ref,
5577 orig_sys_pricing_attr_ref, error_message)
5578 SELECT
5579 qp_interface_errors_s.nextval, sysdate ,FND_GLOBAL.USER_ID, sysdate,
5580 FND_GLOBAL.USER_ID, FND_GLOBAL.CONC_LOGIN_ID, qpih.request_id, 661,
5581 NULL,NULL, 'PRL', 'QP_INTERFACE_LIST_HEADERS', 'pte_code',
5582 qpih.orig_sys_header_ref,null,null,null,l_msg_txt
5583 FROM QP_INTERFACE_LIST_HEADERS qpih
5584 WHERE qpih.request_id = p_request_id
5585 AND qpih.process_status_flag ='P' --is null
5586 AND qpih.interface_action_code IN ('INSERT', 'UPDATE')
5587 AND qpih.pte_code IS NOT NULL
5588 AND NOT EXISTS (SELECT lookup_code
5589 FROM qp_lookups
5590 WHERE lookup_type = 'QP_PTE_TYPE'
5591 AND lookup_code = qpih.pte_code);
5592
5593 -- 11. Source System Code
5594
5595 FND_MESSAGE.SET_NAME('QP','QP_INVALID_ATTRIBUTE');
5596 FND_MESSAGE.SET_TOKEN('ATTRIBUTE', 'Source System Code');
5597 l_msg_txt := FND_MESSAGE.GET;
5598
5599 INSERT INTO QP_INTERFACE_ERRORS
5600 (error_id,last_update_date, last_updated_by, creation_date,
5601 created_by, last_update_login, request_id, program_application_id,
5602 program_id, program_update_date, entity_type, table_name, column_name,
5603 orig_sys_header_ref,orig_sys_line_ref,orig_sys_qualifier_ref,
5604 orig_sys_pricing_attr_ref, error_message)
5605 SELECT
5606 qp_interface_errors_s.nextval, sysdate ,FND_GLOBAL.USER_ID, sysdate,
5607 FND_GLOBAL.USER_ID, FND_GLOBAL.CONC_LOGIN_ID, qpih.request_id, 661,
5608 NULL,NULL, 'PRL', 'QP_INTERFACE_LIST_HEADERS', 'Name',
5609 qpih.orig_sys_header_ref,null,null,null,l_msg_txt
5610 FROM QP_INTERFACE_LIST_HEADERS qpih
5611 WHERE qpih.request_id = p_request_id
5612 AND qpih.process_status_flag ='P' --is null
5613 AND qpih.interface_action_code IN ('INSERT', 'UPDATE')
5614 AND qpih.source_system_code IS NOT NULL
5615 AND NOT EXISTS (SELECT lookup_code
5616 FROM qp_lookups
5617 WHERE lookup_type = 'SOURCE_SYSTEM'
5618 AND lookup_code = qpih.source_system_code);
5619
5620 -- Bug 5208365 RAVI
5621 INSERT INTO QP_INTERFACE_ERRORS
5622 (error_id,last_update_date, last_updated_by, creation_date,
5623 created_by, last_update_login, request_id, program_application_id,
5624 program_id, program_update_date, entity_type, table_name, column_name,
5625 orig_sys_header_ref,orig_sys_line_ref,orig_sys_qualifier_ref,
5626 orig_sys_pricing_attr_ref, error_message)
5627 SELECT
5628 qp_interface_errors_s.nextval, sysdate ,FND_GLOBAL.USER_ID, sysdate,
5629 FND_GLOBAL.USER_ID, FND_GLOBAL.CONC_LOGIN_ID, qpih.request_id, 661,
5630 NULL,NULL, 'PRL', 'QP_INTERFACE_LIST_HEADERS', 'Name',
5631 qpih.orig_sys_header_ref,null,null,null,l_msg_txt
5632 FROM QP_INTERFACE_LIST_HEADERS qpih
5633 WHERE qpih.request_id = p_request_id
5634 AND qpih.process_status_flag ='P' --is null
5635 AND qpih.interface_action_code IN ('INSERT', 'UPDATE')
5636 -- Bug 5416556 RAVI
5637 --Only Price Lists with source system code equal to FND_PROFILE.VALUE('QP_SOURCE_SYSTEM_CODE') should be updated.
5638 AND qpih.source_system_code <> FND_PROFILE.VALUE('QP_SOURCE_SYSTEM_CODE');
5639
5640 --for bug 4731613 moved this validation to attribute_header procedure
5641 -- 12. Validate Orig_Org_Id
5642
5643 FND_MESSAGE.SET_NAME('FND','FND_MO_ORG_INVALID');
5644 --FND_MESSAGE.SET_TOKEN('ATTRIBUTE', 'Source System Code');
5645 l_msg_txt := FND_MESSAGE.GET;
5646
5647 INSERT INTO QP_INTERFACE_ERRORS
5648 (error_id,last_update_date, last_updated_by, creation_date,
5649 created_by, last_update_login, request_id, program_application_id,
5650 program_id, program_update_date, entity_type, table_name, column_name,
5651 orig_sys_header_ref,orig_sys_line_ref,orig_sys_qualifier_ref,
5652 orig_sys_pricing_attr_ref, error_message)
5653 SELECT
5654 qp_interface_errors_s.nextval, sysdate ,FND_GLOBAL.USER_ID, sysdate,
5655 FND_GLOBAL.USER_ID, FND_GLOBAL.CONC_LOGIN_ID, qpih.request_id, 661,
5656 NULL,NULL, 'PRL', 'QP_INTERFACE_LIST_HEADERS', 'Name',
5657 qpih.orig_sys_header_ref,null,null,null,l_msg_txt
5658 FROM QP_INTERFACE_LIST_HEADERS qpih
5659 WHERE qpih.request_id = p_request_id
5660 AND qpih.process_status_flag ='P' --is null
5661 AND qpih.interface_action_code IN ('INSERT', 'UPDATE')
5662 AND qpih.global_flag = 'N' and qpih.orig_org_id IS NOT NULL
5663 AND QP_UTIL.validate_org_id(qpih.orig_org_id) = 'N';
5664
5665 --Bug#5208112 RAVI START
5666 -- 13. Validate Rounding Factor
5667
5668 FND_MESSAGE.SET_NAME('QP','QP_ROUNDING_FACTOR_NO_UPDATE');
5669 l_msg_txt := FND_MESSAGE.GET;
5670
5671 INSERT INTO QP_INTERFACE_ERRORS
5672 (error_id,last_update_date, last_updated_by, creation_date,
5673 created_by, last_update_login, request_id, program_application_id,
5674 program_id, program_update_date, entity_type, table_name, column_name,
5675 orig_sys_header_ref,orig_sys_line_ref,orig_sys_qualifier_ref,
5676 orig_sys_pricing_attr_ref, error_message)
5677 SELECT
5678 qp_interface_errors_s.nextval, sysdate ,FND_GLOBAL.USER_ID, sysdate,
5679 FND_GLOBAL.USER_ID, FND_GLOBAL.CONC_LOGIN_ID, qpih.request_id, 661,
5680 NULL,NULL, 'PRL', 'QP_INTERFACE_LIST_HEADERS', 'ROUNDING_FACTOR',
5681 qpih.orig_sys_header_ref,null,null,null,l_msg_txt
5682 FROM QP_INTERFACE_LIST_HEADERS qpih
5683 WHERE qpih.request_id = p_request_id
5684 AND qpih.process_status_flag ='P' --is null
5685 AND qpih.interface_action_code ='UPDATE'
5686 AND EXISTS(
5687 select 1 from qp_list_headers qplh
5688 where qplh.orig_system_header_ref=qpih.orig_sys_header_ref
5689 and qplh.rounding_factor <> qpih.rounding_factor
5690 );
5691 --Bug#5208112 RAVI END
5692
5693 -- Bug#3604226 RAVI START
5694
5695 -- 14. Only one record with a unique Orig_Sys_Hdr_ref must be updated in one request
5696 -- Commenting code for bug 6961376
5697
5698 /*fnd_message.set_name('QP', 'QP_HDR_REF_MULTIPLE_UPDATE');
5699 l_msg_txt := FND_MESSAGE.GET;
5700
5701 INSERT INTO QP_INTERFACE_ERRORS
5702 (error_id,last_update_date, last_updated_by, creation_date,
5703 created_by, last_update_login, request_id, program_application_id,
5704 program_id, program_update_date, entity_type, table_name, column_name,
5705 orig_sys_header_ref,orig_sys_line_ref,orig_sys_qualifier_ref,
5706 orig_sys_pricing_attr_ref, error_message)
5707 SELECT
5708 qp_interface_errors_s.nextval, sysdate ,FND_GLOBAL.USER_ID, sysdate,
5709 FND_GLOBAL.USER_ID, FND_GLOBAL.CONC_LOGIN_ID, qpih.request_id, 661,
5710 NULL,NULL, 'PRL', 'QP_INTERFACE_LIST_HEADERS', 'ORIG_SYS_HEADER_REF',
5711 qpih.orig_sys_header_ref,null,null,null,l_msg_txt
5712 FROM QP_INTERFACE_LIST_HEADERS qpih
5713 WHERE qpih.request_id = p_request_id
5714 AND qpih.process_status_flag ='P' --is null
5715 AND qpih.interface_action_code IN ('UPDATE', 'DELETE')
5716 AND ( select count(*) from qp_interface_list_headers qplh
5717 where qplh.orig_sys_header_ref=qpih.orig_sys_header_ref
5718 ) > 1;*/
5719 --Bug#3604226 RAVI END
5720
5721
5722 qp_bulk_loader_pub.write_log('Leaving Attribute Header validation');
5723
5724 EXCEPTION
5725 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
5726 qp_bulk_loader_pub.write_log( 'UNEXCPECTED ERROR IN PROCEDURE ATTRIBUTE_HEADER:'||sqlerrm);
5727 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5728 WHEN OTHERS THEN
5729 qp_bulk_loader_pub.write_log( 'UNEXCPECTED ERROR IN PROCEDURE ATTRIBUTE_HEADER:'||sqlerrm);
5730 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5731
5732 END ATTRIBUTE_HEADER;
5733
5734
5735
5736 PROCEDURE ATTRIBUTE_QUALIFIER
5737 (p_request_id NUMBER)
5738 IS
5739
5740 l_msg_txt VARCHAR2(240);
5741 l_pte_code VARCHAR2(30);
5742
5743 BEGIN
5744
5745 qp_bulk_loader_pub.write_log('Entering Attribute qualifier validation');
5746 FND_PROFILE.GET('QP_PRICING_TRANSACTION_ENTITY',l_pte_code);
5747 --1. Comparison Operator
5748
5749 FND_MESSAGE.SET_NAME('QP','QP_INVALID_ATTRIBUTE');
5750 FND_MESSAGE.SET_TOKEN('ATTRIBUTE','COMPARISON OPERATOR');
5751 l_msg_txt := FND_MESSAGE.GET;
5752
5753 INSERT INTO QP_INTERFACE_ERRORS
5754 (error_id,last_update_date, last_updated_by, creation_date,
5755 created_by, last_update_login, request_id, program_application_id,
5756 program_id, program_update_date, entity_type, table_name, column_name,
5757 orig_sys_header_ref,orig_sys_line_ref,orig_sys_qualifier_ref,
5758 orig_sys_pricing_attr_ref, error_message)
5759 SELECT
5760 qp_interface_errors_s.nextval, sysdate ,FND_GLOBAL.USER_ID, sysdate,
5761 FND_GLOBAL.USER_ID, FND_GLOBAL.CONC_LOGIN_ID, qpiq.request_id, 661,
5762 NULL,NULL, 'PRL', 'QP_INTERFACE_QUALIFIERS', 'COMPARISON_OPERATOR',
5763 qpiq.orig_sys_header_ref,null,qpiq.orig_sys_qualifier_ref,null, l_msg_txt
5764 FROM QP_INTERFACE_QUALIFIERS qpiq
5765 WHERE qpiq.request_id = p_request_id
5766 AND qpiq.process_status_flag ='P' --is null
5767 AND qpiq.interface_action_code IN ('INSERT', 'UPDATE')
5768 AND qpiq.comparison_operator_code is NOT NULL
5769 AND NOT EXISTS ( SELECT lookup_code
5770 FROM qp_lookups
5771 WHERE lookup_type = 'COMPARISON_OPERATOR'
5772 AND lookup_code = qpiq.comparison_operator_code);
5773
5774 --2. Orig sys header ref
5775
5776 FND_MESSAGE.SET_NAME('QP','QP_INVALID_ATTRIBUTE');
5777 FND_MESSAGE.SET_TOKEN('ATTRIBUTE','ORIG SYS HEADER REF');
5778 l_msg_txt := FND_MESSAGE.GET;
5779
5780 INSERT INTO QP_INTERFACE_ERRORS
5781 (error_id,last_update_date, last_updated_by, creation_date,
5782 created_by, last_update_login, request_id, program_application_id,
5783 program_id, program_update_date, entity_type, table_name, column_name,
5784 orig_sys_header_ref,orig_sys_line_ref,orig_sys_qualifier_ref,
5785 orig_sys_pricing_attr_ref,error_message)
5786 SELECT
5787 qp_interface_errors_s.nextval, sysdate ,FND_GLOBAL.USER_ID, sysdate,
5788 FND_GLOBAL.USER_ID, FND_GLOBAL.CONC_LOGIN_ID, qpiq.request_id, 661,
5789 NULL,NULL, 'PRL', 'QP_INTERFACE_QUALIFIERS', 'ORIG_SYS_HEADER_REF',
5790 qpiq.orig_sys_header_ref,null,qpiq.orig_sys_qualifier_ref,null,l_msg_txt
5791 FROM QP_INTERFACE_QUALIFIERS qpiq
5792 WHERE qpiq.request_id = p_request_id
5793 AND qpiq.process_status_flag ='P' --is null
5794 AND qpiq.interface_action_code IN ('INSERT', 'UPDATE')
5795 AND qpiq.orig_sys_header_ref is NOT NULL
5796 AND NOT EXISTS ( SELECT orig_system_header_ref
5797 FROM qp_list_headers_b
5798 WHERE orig_system_header_ref = qpiq.orig_sys_header_ref);
5799
5800 --3. Secondary Pricelist
5801
5802 -- Basic_Pricing_Condition
5803 -- In the case of Basic pricing only the qualifier of type secondary
5804 -- Pricelists are allowed.
5805
5806 IF QP_BULK_LOADER_PUB.GET_QP_STATUS <> 'I' THEN
5807
5808 FND_MESSAGE.SET_NAME('QP','QP_QUAL_NA_BASIC');
5809 --Qualifiers not allowed in Basic Pricing
5810 l_msg_txt := FND_MESSAGE.GET;
5811
5812 INSERT INTO QP_INTERFACE_ERRORS
5813 (error_id,last_update_date, last_updated_by, creation_date,
5814 created_by, last_update_login, request_id, program_application_id,
5815 program_id, program_update_date, entity_type, table_name,
5816 orig_sys_header_ref,orig_sys_line_ref,orig_sys_qualifier_ref,
5817 orig_sys_pricing_attr_ref, error_message)
5818 SELECT
5819 qp_interface_errors_s.nextval, sysdate ,FND_GLOBAL.USER_ID, sysdate,
5820 FND_GLOBAL.USER_ID, FND_GLOBAL.CONC_LOGIN_ID, qpiq.request_id, 661,
5821 NULL,NULL, 'PRL', 'QP_INTERFACE_QUALIFIERS',
5822 qpiq.orig_sys_header_ref,null,qpiq.orig_sys_qualifier_ref,null, l_msg_txt
5823 FROM QP_INTERFACE_QUALIFIERS qpiq
5824 WHERE qpiq.request_id = p_request_id
5825 AND qpiq.process_status_flag ='P' --is null
5826 AND qpiq.interface_action_code IN ('INSERT', 'UPDATE')
5827 AND (qpiq.qualifier_context <> 'MODLIST'
5828 OR qpiq.qualifier_attribute <> 'QUALIFIER_ATTRIBUTE4');
5829
5830 END IF;
5831
5832 --4. Qualifier Context
5833 FND_MESSAGE.SET_NAME('QP','QP_ATTRIBUTE_REQUIRED');
5834 FND_MESSAGE.SET_TOKEN('ATTRIBUTE', 'QUALIFIER CONTEXT');
5835
5836 l_msg_txt := FND_MESSAGE.GET;
5837
5838 INSERT INTO QP_INTERFACE_ERRORS
5839 (error_id,last_update_date, last_updated_by, creation_date,
5840 created_by, last_update_login, request_id, program_application_id,
5841 program_id, program_update_date, entity_type, table_name,
5842 orig_sys_header_ref,orig_sys_line_ref,orig_sys_qualifier_ref,
5843 orig_sys_pricing_attr_ref, error_message)
5844 SELECT
5845 qp_interface_errors_s.nextval, sysdate ,FND_GLOBAL.USER_ID, sysdate,
5846 FND_GLOBAL.USER_ID, FND_GLOBAL.CONC_LOGIN_ID, qpiq.request_id, 661,
5847 NULL,NULL, 'PRL', 'QP_INTERFACE_QUALIFIERS',
5848 qpiq.orig_sys_header_ref,null,qpiq.orig_sys_qualifier_ref,null, l_msg_txt
5849 FROM QP_INTERFACE_QUALIFIERS qpiq
5850 WHERE qpiq.request_id = p_request_id
5851 AND qpiq.process_status_flag ='P' --is null
5852 AND qpiq.interface_action_code IN ('INSERT', 'UPDATE')
5853 AND qpiq.qualifier_context IS NULL;
5854
5855 --5. Qualifier Attribute
5856
5857 FND_MESSAGE.SET_NAME('QP','QP_INVALID_ATTRIBUTE');
5858 FND_MESSAGE.SET_TOKEN('ATTRIBUTE','QUALIFIER ATTRIBUTE');
5859 l_msg_txt := FND_MESSAGE.GET;
5860
5861 --Bug# 5456164 START RAVI
5862 --Validate qualifier attribute
5863 INSERT INTO QP_INTERFACE_ERRORS
5864 (error_id,last_update_date, last_updated_by, creation_date,
5865 created_by, last_update_login, request_id, program_application_id,
5866 program_id, program_update_date, entity_type, table_name, column_name,
5867 orig_sys_header_ref,orig_sys_line_ref,orig_sys_qualifier_ref,
5868 orig_sys_pricing_attr_ref,error_message)
5869 SELECT
5870 qp_interface_errors_s.nextval, sysdate ,FND_GLOBAL.USER_ID, sysdate,
5871 FND_GLOBAL.USER_ID, FND_GLOBAL.CONC_LOGIN_ID, qpiq.request_id, 661,
5872 NULL,NULL, 'PRL', 'QP_INTERFACE_QUALIFIERS', 'QUALIFIER_ATTRIBUTE',
5873 qpiq.orig_sys_header_ref,null,qpiq.orig_sys_qualifier_ref,null,l_msg_txt
5874 FROM QP_INTERFACE_QUALIFIERS qpiq
5875 WHERE qpiq.request_id = p_request_id
5876 AND qpiq.process_status_flag ='P' --is null
5877 AND qpiq.interface_action_code IN ('INSERT', 'UPDATE')
5878 AND qpiq.qualifier_attribute is not null
5879 AND qpiq.qualifier_attribute_code is not null
5880 AND qpiq.qualifier_attribute_code <> QP_BULK_LOADER_PUB.G_NULL_CHAR
5881 AND NOT EXISTS (
5882 SELECT 'x'
5883 FROM qp_interface_qualifiers b,
5884 qp_prc_contexts_b d,
5885 qp_segments_b e,
5886 qp_pte_segments f
5887 WHERE b.qualifier_context = d.prc_context_code
5888 AND b.qualifier_attribute = e.segment_mapping_column
5889 and e.segment_code = b.qualifier_attribute_code
5890 AND d.prc_context_id = e.prc_context_id
5891 AND d.prc_context_type = 'QUALIFIER'
5892 AND e.segment_id = f.segment_id
5893 AND f.pte_code = l_pte_code
5894 -- AND f.segment_level NOT IN ('LINE') bug#12710486
5895 AND qpiq.rowid = b.rowid);
5896
5897 INSERT INTO QP_INTERFACE_ERRORS
5898 (error_id,last_update_date, last_updated_by, creation_date,
5899 created_by, last_update_login, request_id, program_application_id,
5900 program_id, program_update_date, entity_type, table_name, column_name,
5901 orig_sys_header_ref,orig_sys_line_ref,orig_sys_qualifier_ref,
5902 orig_sys_pricing_attr_ref,error_message)
5903 SELECT
5904 qp_interface_errors_s.nextval, sysdate ,FND_GLOBAL.USER_ID, sysdate,
5905 FND_GLOBAL.USER_ID, FND_GLOBAL.CONC_LOGIN_ID, qpiq.request_id, 661,
5906 NULL,NULL, 'PRL', 'QP_INTERFACE_QUALIFIERS', 'QUALIFIER_ATTRIBUTE',
5907 qpiq.orig_sys_header_ref,null,qpiq.orig_sys_qualifier_ref,null,l_msg_txt
5908 FROM QP_INTERFACE_QUALIFIERS qpiq
5909 WHERE qpiq.request_id = p_request_id
5910 AND qpiq.process_status_flag ='P' --is null
5911 AND qpiq.interface_action_code IN ('INSERT', 'UPDATE')
5912 AND qpiq.qualifier_attribute is null
5913 AND qpiq.qualifier_attribute_code is not null
5914 AND qpiq.qualifier_attribute_code <> QP_BULK_LOADER_PUB.G_NULL_CHAR
5915 AND NOT EXISTS (
5916 SELECT 'x'
5917 FROM qp_interface_qualifiers b,
5918 qp_prc_contexts_b d,
5919 qp_segments_b e,
5920 qp_pte_segments f
5921 WHERE b.qualifier_context = d.prc_context_code
5922 and e.segment_code = b.qualifier_attribute_code
5923 AND d.prc_context_id = e.prc_context_id
5924 AND d.prc_context_type = 'QUALIFIER'
5925 AND e.segment_id = f.segment_id
5926 AND f.pte_code = l_pte_code
5927 -- AND f.segment_level NOT IN ('LINE') bug#12710486
5928 AND qpiq.rowid = b.rowid);
5929
5930 INSERT INTO QP_INTERFACE_ERRORS
5931 (error_id,last_update_date, last_updated_by, creation_date,
5932 created_by, last_update_login, request_id, program_application_id,
5933 program_id, program_update_date, entity_type, table_name, column_name,
5934 orig_sys_header_ref,orig_sys_line_ref,orig_sys_qualifier_ref,
5935 orig_sys_pricing_attr_ref,error_message)
5936 SELECT
5937 qp_interface_errors_s.nextval, sysdate ,FND_GLOBAL.USER_ID, sysdate,
5938 FND_GLOBAL.USER_ID, FND_GLOBAL.CONC_LOGIN_ID, qpiq.request_id, 661,
5939 NULL,NULL, 'PRL', 'QP_INTERFACE_QUALIFIERS', 'QUALIFIER_ATTRIBUTE',
5940 qpiq.orig_sys_header_ref,null,qpiq.orig_sys_qualifier_ref,null,l_msg_txt
5941 FROM QP_INTERFACE_QUALIFIERS qpiq
5942 WHERE qpiq.request_id = p_request_id
5943 AND qpiq.process_status_flag ='P' --is null
5944 AND qpiq.interface_action_code IN ('INSERT', 'UPDATE')
5945 AND qpiq.qualifier_attribute is not null
5946 AND qpiq.qualifier_attribute_code is null
5947 AND NOT EXISTS (
5948 SELECT 'x'
5949 FROM qp_interface_qualifiers b,
5950 qp_prc_contexts_b d,
5951 qp_segments_b e,
5952 qp_pte_segments f
5953 WHERE b.qualifier_context = d.prc_context_code
5954 AND b.qualifier_attribute = e.segment_mapping_column
5955 AND d.prc_context_id = e.prc_context_id
5956 AND d.prc_context_type = 'QUALIFIER'
5957 AND e.segment_id = f.segment_id
5958 AND f.pte_code = l_pte_code
5959 -- AND f.segment_level NOT IN ('LINE') bug#12710486
5960 AND qpiq.rowid = b.rowid);
5961 --Bug# 5456164 END RAVI
5962
5963 qp_bulk_loader_pub.write_log('Leaving Attribute qualifier validation');
5964
5965 EXCEPTION
5966 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
5967 qp_bulk_loader_pub.write_log( 'UNEXCPECTED ERROR IN PROCEDURE ATTRIBUTE_QUALIFIER:'||sqlerrm);
5968 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5969 WHEN OTHERS THEN
5970 qp_bulk_loader_pub.write_log( 'UNEXCPECTED ERROR IN PROCEDURE ATTRIBUTE_QUALIFIER:'||sqlerrm);
5971 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5972
5973 END ATTRIBUTE_QUALIFIER;
5974
5975
5976 -- Bug# 5412045
5977 -- Shell for qp_validate.product_uom to return Varchar2 ('TRUE', 'FALSE')
5978 -- qp_validate.product_uom returns a boolean.
5979 Function product_uom ( p_product_uom_code IN VARCHAR2,
5980 p_category_id IN NUMBER,
5981 p_list_header_id IN NUMBER )
5982 RETURN VARCHAR2 IS
5983 BEGIN
5984 IF QP_Validate.product_uom(p_product_uom_code,p_category_id,p_list_header_id)=TRUE
5985 THEN
5986 RETURN 'TRUE';
5987 ELSE
5988 RETURN 'FALSE';
5989 END IF;
5990 EXCEPTION
5991 When OTHERS THEN
5992 RETURN 'FALSE';
5993 END product_uom;
5994
5995
5996 PROCEDURE ATTRIBUTE_LINE
5997 (p_request_id NUMBER)
5998 IS
5999
6000 l_msg_txt VARCHAR2(240);
6001 l_pte_code VARCHAR2(30);
6002
6003 BEGIN
6004
6005 qp_bulk_loader_pub.write_log('Entering Attribute line validation');
6006 FND_PROFILE.GET('QP_PRICING_TRANSACTION_ENTITY',l_pte_code);
6007
6008 -- 1. LIST LINE TYPE CODE
6009 FND_MESSAGE.SET_NAME('QP','QP_INVALID_ATTRIBUTE');
6010 FND_MESSAGE.SET_TOKEN('ATTRIBUTE','LIST_LINE_TYPE_CODE');
6011 l_msg_txt := FND_MESSAGE.GET;
6012
6013 INSERT INTO QP_INTERFACE_ERRORS
6014 (error_id,last_update_date, last_updated_by, creation_date,
6015 created_by, last_update_login, request_id, program_application_id,
6016 program_id, program_update_date, entity_type, table_name, column_name,
6017 orig_sys_header_ref,orig_sys_line_ref,orig_sys_qualifier_ref,
6018 orig_sys_pricing_attr_ref,error_message)
6019 SELECT
6020 qp_interface_errors_s.nextval, sysdate ,FND_GLOBAL.USER_ID, sysdate,
6021 FND_GLOBAL.USER_ID, FND_GLOBAL.CONC_LOGIN_ID, qpil.request_id, 661,
6022 NULL,NULL, 'PRL', 'QP_INTERFACE_LIST_LINES', 'LIST_LINE_TYPE_CODE',
6023 qpil.orig_sys_header_ref,qpil.orig_sys_line_ref,null,null, l_msg_txt
6024 FROM QP_INTERFACE_LIST_LINES qpil
6025 WHERE qpil.request_id = p_request_id
6026 AND qpil.process_status_flag ='P' --is null
6027 AND qpil.interface_action_code IN ('INSERT', 'UPDATE')
6028 AND qpil.list_line_type_code is NOT NULL
6029 AND NOT EXISTS ( SELECT lookup_code
6030 FROM qp_lookups
6031 WHERE lookup_type= 'LIST_LINE_TYPE_CODE'
6032 AND lookup_code= qpil.list_line_type_code
6033 AND qpil.list_line_type_code IN ('PLL', 'PBH') );
6034
6035 -- 2. ARITHMETIC OPERATOR
6036 FND_MESSAGE.SET_NAME('QP','QP_INVALID_ATTRIBUTE');
6037 FND_MESSAGE.SET_TOKEN('ATTRIBUTE','ARITHMETIC_OPERATOR 5');
6038 l_msg_txt := FND_MESSAGE.GET;
6039
6040 INSERT INTO QP_INTERFACE_ERRORS
6041 (error_id,last_update_date, last_updated_by, creation_date,
6042 created_by, last_update_login, request_id, program_application_id,
6043 program_id, program_update_date, entity_type, table_name, column_name,
6044 orig_sys_header_ref,orig_sys_line_ref,orig_sys_qualifier_ref,
6045 orig_sys_pricing_attr_ref,error_message)
6046 SELECT
6047 qp_interface_errors_s.nextval, sysdate ,FND_GLOBAL.USER_ID, sysdate,
6048 FND_GLOBAL.USER_ID, FND_GLOBAL.CONC_LOGIN_ID, qpil.request_id, 661,
6049 NULL,NULL, 'PRL', 'QP_INTERFACE_LIST_LINES', 'ARITHMETIC_OPERATOR',
6050 qpil.orig_sys_header_ref,qpil.orig_sys_line_ref,null,null,l_msg_txt
6051 FROM QP_INTERFACE_LIST_LINES qpil
6052 WHERE qpil.request_id = p_request_id
6053 AND qpil.process_status_flag ='P' --is null
6054 AND qpil.interface_action_code IN ('INSERT', 'UPDATE')
6055 AND qpil.arithmetic_operator is NOT NULL
6056 AND NOT EXISTS ( SELECT meaning
6057 FROM qp_lookups
6058 WHERE lookup_type= 'ARITHMETIC_OPERATOR'
6059 AND lookup_code= qpil.arithmetic_operator );
6060
6061 --3. PRICE BREAK TYPE CODE
6062 FND_MESSAGE.SET_NAME('QP','QP_INVALID_ATTRIBUTE');
6063 FND_MESSAGE.SET_TOKEN('ATTRIBUTE','PRICE_BREAK_TYPE_CODE');
6064 l_msg_txt := FND_MESSAGE.GET;
6065
6066 INSERT INTO QP_INTERFACE_ERRORS
6067 (error_id,last_update_date, last_updated_by, creation_date,
6068 created_by, last_update_login, request_id, program_application_id,
6069 program_id, program_update_date, entity_type, table_name, column_name,
6070 orig_sys_header_ref,orig_sys_line_ref,orig_sys_qualifier_ref,
6071 orig_sys_pricing_attr_ref,error_message)
6072 SELECT
6073 qp_interface_errors_s.nextval, sysdate ,FND_GLOBAL.USER_ID, sysdate,
6074 FND_GLOBAL.USER_ID, FND_GLOBAL.CONC_LOGIN_ID, qpil.request_id, 661,
6075 NULL,NULL, 'PRL', 'QP_INTERFACE_LIST_LINES', 'PRICE_BREAK_TYPE_CODE',
6076 qpil.orig_sys_header_ref,qpil.orig_sys_line_ref,null,null,l_msg_txt
6077 FROM QP_INTERFACE_LIST_LINES qpil
6078 WHERE qpil.request_id = p_request_id
6079 AND qpil.process_status_flag ='P' --is null
6080 AND qpil.interface_action_code IN ('INSERT', 'UPDATE')
6081 AND qpil.price_break_type_code is NOT NULL
6082 AND NOT EXISTS ( SELECT meaning
6083 FROM qp_lookups
6084 WHERE lookup_type= 'PRICE_BREAK_TYPE_CODE'
6085 AND lookup_code= qpil.price_break_type_code);
6086
6087 --4. UOM
6088 FND_MESSAGE.SET_NAME('QP','QP_INVALID_ATTRIBUTE');
6089 FND_MESSAGE.SET_TOKEN('ATTRIBUTE','Product Uom Code');
6090 l_msg_txt := FND_MESSAGE.GET;
6091
6092 -- Bug# 5412045
6093 -- Validate UOM for a category line
6094 INSERT INTO QP_INTERFACE_ERRORS
6095 (error_id,last_update_date, last_updated_by, creation_date,
6096 created_by, last_update_login, request_id, program_application_id,
6097 program_id, program_update_date, entity_type, table_name, column_name,
6098 orig_sys_header_ref,orig_sys_line_ref,orig_sys_qualifier_ref,
6099 orig_sys_pricing_attr_ref,error_message)
6100 SELECT /*+ index(qpip QP_INTERFACE_PRCNG_ATTRIBS_N4) */
6101 qp_interface_errors_s.nextval, sysdate ,FND_GLOBAL.USER_ID, sysdate,
6102 FND_GLOBAL.USER_ID, FND_GLOBAL.CONC_LOGIN_ID, qpil.request_id, 661,
6103 NULL,NULL, 'PRL', 'QP_INTERFACE_PRICING_ATTRIBS', 'PRODUCT_UOM_CODE',
6104 qpip.orig_sys_header_ref,qpip.orig_sys_line_ref,null,
6105 qpip.orig_sys_pricing_attr_ref, l_msg_txt
6106 FROM QP_INTERFACE_LIST_LINES qpil, QP_INTERFACE_PRICING_ATTRIBS qpip, QP_LIST_HEADERS_B qplh
6107 WHERE qpil.request_id = p_request_id
6108 AND qpip.request_id = p_request_id -- bug no 5881528
6109 AND qpil.process_status_flag ='P' --is null
6110 AND qpil.orig_sys_line_ref = qpip.orig_sys_line_ref
6111 -- ENH unod alcoa changes RAVI
6112 /**
6113 The key between interface and qp tables is only orig_sys_hdr_ref
6114 (not list_header_id)
6115 **/
6116 AND qpil.orig_sys_header_ref = qplh.orig_system_header_ref
6117 AND qpip.pricing_attribute_context IS NULL
6118 AND qpil.interface_action_code IN ('INSERT', 'UPDATE')
6119 AND qpip.interface_action_code IN ('INSERT', 'UPDATE')
6120 AND qpip.product_uom_code is NOT NULL
6121 and qpip.product_attribute_context = 'ITEM'
6122 and qpip.product_attribute = 'PRICING_ATTRIBUTE1'
6123 AND NOT EXISTS (
6124 select uom_code
6125 from mtl_item_uoms_view
6126 where organization_id = nvl(qpil.organization_id, organization_id)
6127 and inventory_item_id = to_number(qpip.product_attr_value)
6128 and uom_code = qpip.product_uom_code
6129 -- commented out for bug 4713401
6130 /*
6131 union
6132 select uom_code
6133 from mtl_item_uoms_view
6134 where (organization_id = qpil.organization_id or qpil.organization_id is null)
6135 and inventory_item_id in ( select inventory_item_id
6136 from mtl_item_categories
6137 where category_id = to_number(qpip.product_attr_value)
6138 and (organization_id = qpil.organization_id or qpil.organization_id is null ))
6139 and qpip.product_attribute_context = 'ITEM'
6140 and qpip.product_attribute = 'PRICING_ATTRIBUTE2'
6141 and uom_code = qpip.product_uom_code
6142 */
6143 -- added for bug 4713401
6144 /* commented out as this code is not performant
6145 union
6146 select uom_code
6147 from mtl_item_uoms_view
6148 where (organization_id = qpil.organization_id or qpil.organization_id is null) and
6149 qpip.product_attribute_context = 'ITEM' and
6150 qpip.product_attribute = 'PRICING_ATTRIBUTE2' and
6151 uom_code = qpip.product_uom_code and
6152 inventory_item_id in ( select inventory_item_id
6153 from mtl_item_categories cat
6154 where (category_id = to_number(qpip.product_attr_value) or
6155 exists (SELECT 'Y'
6156 FROM eni_denorm_hierarchies
6157 WHERE parent_id = to_number(qpip.product_attr_value) and
6158 child_id = cat.category_id
6159 and exists (select 'Y' from QP_SOURCESYSTEM_FNAREA_MAP A,
6160 qp_pte_source_systems B ,
6161 mtl_default_category_sets c,
6162 mtl_category_sets d
6163 where A.PTE_SOURCE_SYSTEM_ID = B.PTE_SOURCE_SYSTEM_ID and
6164 B.PTE_CODE = qplh.pte_code and
6165 B.APPLICATION_SHORT_NAME = qplh.source_system_code and
6166 A.FUNCTIONAL_AREA_ID = c.FUNCTIONAL_AREA_ID and
6167 c.CATEGORY_SET_ID = d.CATEGORY_SET_ID and
6168 d.HIERARCHY_ENABLED = 'Y' and
6169 A.ENABLED_FLAG = 'Y' and B.ENABLED_FLAG = 'Y'))))
6170 */
6171 union
6172 select uom_code
6173 from mtl_units_of_measure_vl
6174 where uom_code = qpip.product_uom_code
6175 );
6176
6177
6178 -- Bug# 5412045
6179 -- Validate UOM for a category line
6180 INSERT INTO QP_INTERFACE_ERRORS
6181 (error_id,last_update_date, last_updated_by, creation_date,
6182 created_by, last_update_login, request_id, program_application_id,
6183 program_id, program_update_date, entity_type, table_name, column_name,
6184 orig_sys_header_ref,orig_sys_line_ref,orig_sys_qualifier_ref,
6185 orig_sys_pricing_attr_ref,error_message)
6186 SELECT
6187 qp_interface_errors_s.nextval, sysdate ,FND_GLOBAL.USER_ID, sysdate,
6188 FND_GLOBAL.USER_ID, FND_GLOBAL.CONC_LOGIN_ID, qpil.request_id, 661,
6189 NULL,NULL, 'PRL', 'QP_INTERFACE_PRICING_ATTRIBS', 'PRODUCT_UOM_CODE',
6190 qpip.orig_sys_header_ref,qpip.orig_sys_line_ref,null,
6191 qpip.orig_sys_pricing_attr_ref, l_msg_txt
6192 FROM QP_INTERFACE_LIST_LINES qpil, QP_INTERFACE_PRICING_ATTRIBS qpip, QP_LIST_HEADERS_B qplh
6193 WHERE qpil.request_id = p_request_id
6194 AND qpip.request_id = p_request_id -- bug no 5881528
6195 AND qpil.process_status_flag ='P' --is null
6196 AND qpil.orig_sys_line_ref = qpip.orig_sys_line_ref
6197 AND qpil.orig_sys_header_ref = qplh.orig_system_header_ref
6198 AND qpip.pricing_attribute_context IS NULL
6199 AND qpil.interface_action_code IN ('INSERT', 'UPDATE')
6200 AND qpip.interface_action_code IN ('INSERT', 'UPDATE')
6201 AND qpip.product_uom_code is NOT NULL
6202 and qpip.product_attribute_context = 'ITEM'
6203 and qpip.product_attribute = 'PRICING_ATTRIBUTE2'
6204 AND NOT EXISTS (
6205 select 'EXISTS'
6206 from dual
6207 where QP_BULK_VALIDATE.product_uom(
6208 qpip.product_uom_code,
6209 to_number(qpip.product_attr_value),
6210 qplh.list_header_id) = 'TRUE'
6211 );
6212
6213
6214 /**
6215 Bug# 5465109 RAVI START
6216 4.1) UNIQUE FORMULA CHECK
6217 Only one formula should be inserted or updated in a line. Either PriceBy or Generate Formula is to be used.
6218 If one is used the other should be set to null. If both are used then an error should be thrown.
6219 **/
6220 FND_MESSAGE.SET_NAME('QP','QP_STATIC_OR_DYNAMIC_FORMULA');
6221 l_msg_txt := FND_MESSAGE.GET;
6222
6223 INSERT INTO QP_INTERFACE_ERRORS
6224 (error_id,last_update_date, last_updated_by, creation_date,
6225 created_by, last_update_login, request_id, program_application_id,
6226 program_id, program_update_date, entity_type, table_name, column_name,
6227 orig_sys_header_ref,orig_sys_line_ref,orig_sys_qualifier_ref,
6228 orig_sys_pricing_attr_ref,error_message)
6229 SELECT
6230 qp_interface_errors_s.nextval, sysdate ,FND_GLOBAL.USER_ID, sysdate,
6231 FND_GLOBAL.USER_ID, FND_GLOBAL.CONC_LOGIN_ID, qpil.request_id, 661,
6232 NULL,NULL, 'PRL', 'QP_INTERFACE_LIST_LINES', 'PRICE_BY_AND_GENERATE_FORMULA_ID',
6233 qpil.orig_sys_header_ref,qpil.orig_sys_line_ref,null,null,l_msg_txt
6234 FROM QP_INTERFACE_LIST_LINES qpil
6235 WHERE qpil.request_id = p_request_id
6236 AND qpil.process_status_flag ='P' --is null
6237 AND qpil.interface_action_code IN ('INSERT', 'UPDATE')
6238 AND qpil.price_by_formula_id is NOT NULL
6239 AND qpil.price_by_formula_id <> QP_BULK_LOADER_PUB.G_NULL_NUMBER
6240 AND qpil.generate_using_formula_id is NOT NULL
6241 AND qpil.generate_using_formula_id <> QP_BULK_LOADER_PUB.G_NULL_NUMBER;
6242 --Bug# 5465109 RAVI END
6243
6244 --5. PRICE BY FORMULA ID
6245
6246 -- Bug# 5236656 RAVI
6247 -- Change the message that needs to be thrown.
6248
6249 FND_MESSAGE.SET_NAME('QP','QP_PRC_FOR_NAME_ID_INCMPTBLE');
6250 l_msg_txt := FND_MESSAGE.GET;
6251
6252 INSERT INTO QP_INTERFACE_ERRORS
6253 (error_id,last_update_date, last_updated_by, creation_date,
6254 created_by, last_update_login, request_id, program_application_id,
6255 program_id, program_update_date, entity_type, table_name, column_name,
6256 orig_sys_header_ref,orig_sys_line_ref,orig_sys_qualifier_ref,
6257 orig_sys_pricing_attr_ref,error_message)
6258 SELECT
6259 qp_interface_errors_s.nextval, sysdate ,FND_GLOBAL.USER_ID, sysdate,
6260 FND_GLOBAL.USER_ID, FND_GLOBAL.CONC_LOGIN_ID, qpil.request_id, 661,
6261 NULL,NULL, 'PRL', 'QP_INTERFACE_LIST_LINES', 'PRICE_BY_FORMULA_ID',
6262 qpil.orig_sys_header_ref,qpil.orig_sys_line_ref,null,null,l_msg_txt
6263 FROM QP_INTERFACE_LIST_LINES qpil
6264 WHERE qpil.request_id = p_request_id
6265 AND qpil.process_status_flag ='P' --is null
6266 AND qpil.interface_action_code IN ('INSERT', 'UPDATE')
6267 AND qpil.price_by_formula_id is NOT NULL
6268 AND qpil.price_by_formula is NOT NULL
6269 AND qpil.price_by_formula <> QP_BULK_LOADER_PUB.G_NULL_CHAR
6270 AND NOT EXISTS ( SELECT name
6271 FROM qp_price_formulas_vl
6272 WHERE price_formula_id = qpil.price_by_formula_id
6273 AND name = qpil.price_by_formula);
6274
6275 INSERT INTO QP_INTERFACE_ERRORS
6276 (error_id,last_update_date, last_updated_by, creation_date,
6277 created_by, last_update_login, request_id, program_application_id,
6278 program_id, program_update_date, entity_type, table_name, column_name,
6279 orig_sys_header_ref,orig_sys_line_ref,orig_sys_qualifier_ref,
6280 orig_sys_pricing_attr_ref,error_message)
6281 SELECT
6282 qp_interface_errors_s.nextval, sysdate ,FND_GLOBAL.USER_ID, sysdate,
6283 FND_GLOBAL.USER_ID, FND_GLOBAL.CONC_LOGIN_ID, qpil.request_id, 661,
6284 NULL,NULL, 'PRL', 'QP_INTERFACE_LIST_LINES', 'PRICE_BY_FORMULA_ID',
6285 qpil.orig_sys_header_ref,qpil.orig_sys_line_ref,null,null,l_msg_txt
6286 FROM QP_INTERFACE_LIST_LINES qpil
6287 WHERE qpil.request_id = p_request_id
6288 AND qpil.process_status_flag ='P' --is null
6289 AND qpil.interface_action_code IN ('INSERT', 'UPDATE')
6290 AND qpil.price_by_formula_id is NOT NULL
6291 AND qpil.price_by_formula is NULL
6292 AND NOT EXISTS ( SELECT name
6293 FROM qp_price_formulas_vl
6294 WHERE price_formula_id = qpil.price_by_formula_id);
6295
6296 INSERT INTO QP_INTERFACE_ERRORS
6297 (error_id,last_update_date, last_updated_by, creation_date,
6298 created_by, last_update_login, request_id, program_application_id,
6299 program_id, program_update_date, entity_type, table_name, column_name,
6300 orig_sys_header_ref,orig_sys_line_ref,orig_sys_qualifier_ref,
6301 orig_sys_pricing_attr_ref,error_message)
6302 SELECT
6303 qp_interface_errors_s.nextval, sysdate ,FND_GLOBAL.USER_ID, sysdate,
6304 FND_GLOBAL.USER_ID, FND_GLOBAL.CONC_LOGIN_ID, qpil.request_id, 661,
6305 NULL,NULL, 'PRL', 'QP_INTERFACE_LIST_LINES', 'PRICE_BY_FORMULA_ID',
6306 qpil.orig_sys_header_ref,qpil.orig_sys_line_ref,null,null,l_msg_txt
6307 FROM QP_INTERFACE_LIST_LINES qpil
6308 WHERE qpil.request_id = p_request_id
6309 AND qpil.process_status_flag ='P' --is null
6310 AND qpil.interface_action_code IN ('INSERT', 'UPDATE')
6311 AND qpil.price_by_formula_id is NULL
6312 AND qpil.price_by_formula is NOT NULL
6313 AND qpil.price_by_formula <> QP_BULK_LOADER_PUB.G_NULL_CHAR
6314 AND NOT EXISTS ( SELECT name
6315 FROM qp_price_formulas_vl
6316 WHERE name = qpil.price_by_formula);
6317
6318 --5. GENERATE USING FORMULA ID
6319
6320 -- Bug# 5236656 RAVI START
6321 -- Change the message that needs to be thrown.
6322
6323 FND_MESSAGE.SET_NAME('QP','QP_GEN_FOR_NAME_ID_INCMPTBLE');
6324 l_msg_txt := FND_MESSAGE.GET;
6325
6326 INSERT INTO QP_INTERFACE_ERRORS
6327 (error_id,last_update_date, last_updated_by, creation_date,
6328 created_by, last_update_login, request_id, program_application_id,
6329 program_id, program_update_date, entity_type, table_name, column_name,
6330 orig_sys_header_ref,orig_sys_line_ref,orig_sys_qualifier_ref,
6331 orig_sys_pricing_attr_ref,error_message)
6332 SELECT
6333 qp_interface_errors_s.nextval, sysdate ,FND_GLOBAL.USER_ID, sysdate,
6334 FND_GLOBAL.USER_ID, FND_GLOBAL.CONC_LOGIN_ID, qpil.request_id, 661,
6335 NULL,NULL, 'PRL', 'QP_INTERFACE_LIST_LINES', 'GENERATE_USING_FORMULA_ID',
6336 qpil.orig_sys_header_ref,qpil.orig_sys_line_ref,null,null,l_msg_txt
6337 FROM QP_INTERFACE_LIST_LINES qpil
6338 WHERE qpil.request_id = p_request_id
6339 AND qpil.process_status_flag ='P' --is null
6340 AND qpil.interface_action_code IN ('INSERT', 'UPDATE')
6341 AND qpil.generate_using_formula_id is NOT NULL
6342 AND qpil.generate_using_formula is NOT NULL
6343 AND qpil.generate_using_formula <> QP_BULK_LOADER_PUB.G_NULL_CHAR
6344 AND NOT EXISTS ( SELECT name
6345 FROM qp_price_formulas_vl
6346 WHERE price_formula_id = qpil.generate_using_formula_id
6347 AND name = qpil.generate_using_formula);
6348
6349
6350 IF SQL%ROWCOUNT >0 THEN
6351 qp_bulk_loader_pub.write_log('Generate formula ID and Name are incompatible');
6352 END IF;
6353
6354 --FND_MESSAGE.SET_NAME('QP','QP_INVALID_FORMULA_FOR_PL');
6355 --l_msg_txt := FND_MESSAGE.GET;
6356 -- Bug# 5236656 RAVI END
6357
6358 INSERT INTO QP_INTERFACE_ERRORS
6359 (error_id,last_update_date, last_updated_by, creation_date,
6360 created_by, last_update_login, request_id, program_application_id,
6361 program_id, program_update_date, entity_type, table_name, column_name,
6362 orig_sys_header_ref,orig_sys_line_ref,orig_sys_qualifier_ref,
6363 orig_sys_pricing_attr_ref,error_message)
6364 SELECT
6365 qp_interface_errors_s.nextval, sysdate ,FND_GLOBAL.USER_ID, sysdate,
6366 FND_GLOBAL.USER_ID, FND_GLOBAL.CONC_LOGIN_ID, qpil.request_id, 661,
6367 NULL,NULL, 'PRL', 'QP_INTERFACE_LIST_LINES', 'GENERATE_USING_FORMULA_ID',
6368 qpil.orig_sys_header_ref,qpil.orig_sys_line_ref,null,null,l_msg_txt
6369 FROM QP_INTERFACE_LIST_LINES qpil
6370 WHERE qpil.request_id = p_request_id
6371 AND qpil.process_status_flag ='P' --is null
6372 AND qpil.interface_action_code IN ('INSERT', 'UPDATE')
6373 AND qpil.generate_using_formula_id is NOT NULL
6374 AND qpil.generate_using_formula is NULL
6375 AND NOT EXISTS ( SELECT name
6376 FROM qp_price_formulas_vl
6377 WHERE price_formula_id = qpil.generate_using_formula_id);
6378
6379 INSERT INTO QP_INTERFACE_ERRORS
6380 (error_id,last_update_date, last_updated_by, creation_date,
6381 created_by, last_update_login, request_id, program_application_id,
6382 program_id, program_update_date, entity_type, table_name, column_name,
6383 orig_sys_header_ref,orig_sys_line_ref,orig_sys_qualifier_ref,
6384 orig_sys_pricing_attr_ref,error_message)
6385 SELECT
6386 qp_interface_errors_s.nextval, sysdate ,FND_GLOBAL.USER_ID, sysdate,
6387 FND_GLOBAL.USER_ID, FND_GLOBAL.CONC_LOGIN_ID, qpil.request_id, 661,
6388 NULL,NULL, 'PRL', 'QP_INTERFACE_LIST_LINES', 'GENERATE_USING_FORMULA_ID',
6389 qpil.orig_sys_header_ref,qpil.orig_sys_line_ref,null,null,l_msg_txt
6390 FROM QP_INTERFACE_LIST_LINES qpil
6391 WHERE qpil.request_id = p_request_id
6392 AND qpil.process_status_flag ='P' --is null
6393 AND qpil.interface_action_code IN ('INSERT', 'UPDATE')
6394 AND qpil.generate_using_formula_id is NULL
6395 AND qpil.generate_using_formula is NOT NULL
6396 AND qpil.generate_using_formula <> QP_BULK_LOADER_PUB.G_NULL_CHAR
6397 AND NOT EXISTS ( SELECT name
6398 FROM qp_price_formulas_vl
6399 WHERE name = qpil.generate_using_formula);
6400
6401 -- Bug# 5236656 RAVI
6402 IF SQL%ROWCOUNT >0 THEN
6403 qp_bulk_loader_pub.write_log('Generate formula ID is inaccurate');
6404 END IF;
6405
6406 --6. PBH not allowed in Basic pricing
6407 -- Basic_Pricing_Condition
6408
6409 IF QP_BULK_LOADER_PUB.GET_QP_STATUS <> 'I' THEN
6410 FND_MESSAGE.SET_NAME('QP','QP_PBH_NA_BASIC');
6411 --Price Break Header not allowed in Basic Pricing
6412 l_msg_txt := FND_MESSAGE.GET;
6413
6414 INSERT INTO QP_INTERFACE_ERRORS
6415 (error_id,last_update_date, last_updated_by, creation_date,
6416 created_by, last_update_login, request_id, program_application_id,
6417 program_id, program_update_date, entity_type, table_name,
6418 orig_sys_header_ref,orig_sys_line_ref,orig_sys_qualifier_ref,
6419 orig_sys_pricing_attr_ref,error_message)
6420 SELECT
6421 qp_interface_errors_s.nextval, sysdate ,FND_GLOBAL.USER_ID, sysdate,
6422 FND_GLOBAL.USER_ID, FND_GLOBAL.CONC_LOGIN_ID, qpil.request_id, 661,
6423 NULL,NULL, 'PRL', 'QP_INTERFACE_LIST_LINES',
6424 qpil.orig_sys_header_ref,qpil.orig_sys_line_ref,null,null,l_msg_txt
6425 FROM QP_INTERFACE_LIST_LINES qpil
6426 WHERE qpil.request_id = p_request_id
6427 AND qpil.process_status_flag ='P' --is null
6428 AND qpil.interface_action_code IN ('INSERT', 'UPDATE')
6429 AND (qpil.list_line_type_code = 'PBH'
6430 OR qpil.price_break_header_ref is not NULL);
6431
6432 END IF;
6433
6434 --7. Product Attribute
6435 FND_MESSAGE.SET_NAME('QP','QP_INVALID_ATTRIBUTE');
6436 FND_MESSAGE.SET_TOKEN('ATTRIBUTE','Product Attribute ');
6437 l_msg_txt := FND_MESSAGE.GET;
6438
6439 INSERT INTO QP_INTERFACE_ERRORS
6440 (error_id,last_update_date, last_updated_by, creation_date,
6441 created_by, last_update_login, request_id, program_application_id,
6442 program_id, program_update_date, entity_type, table_name, column_name,
6443 orig_sys_header_ref,orig_sys_line_ref,orig_sys_qualifier_ref,
6444 orig_sys_pricing_attr_ref,error_message)
6445 SELECT
6446 qp_interface_errors_s.nextval, sysdate ,FND_GLOBAL.USER_ID, sysdate,
6447 FND_GLOBAL.USER_ID, FND_GLOBAL.CONC_LOGIN_ID, qpil.request_id, 661,
6448 NULL,NULL, 'PRL', 'QP_INTERFACE_LIST_LINES', 'PRODUCT_ATTRIBUTE',
6449 qpip.orig_sys_header_ref,qpip.orig_sys_line_ref,null,
6450 qpip.orig_sys_pricing_attr_ref, l_msg_txt
6451 FROM QP_INTERFACE_LIST_LINES qpil, QP_INTERFACE_PRICING_ATTRIBS qpip
6452 WHERE qpil.request_id = p_request_id
6453 AND qpip.request_id = p_request_id -- bug no 5881528
6454 AND qpil.process_status_flag ='P' --is null
6455 AND qpil.orig_sys_line_ref = qpip.orig_sys_line_ref
6456 AND qpip.pricing_attribute_context IS NULL
6457 AND qpil.interface_action_code IN ('INSERT', 'UPDATE')
6458 AND EXISTS ( SELECT 'x'
6459 FROM qp_interface_pricing_attribs b, qp_prc_contexts_b d, qp_segments_b e, qp_pte_segments f
6460 WHERE b.product_attribute_context = d.prc_context_code
6461 AND b.product_attribute = e.segment_mapping_column
6462 and e.segment_code = b.product_attr_code
6463 AND d.prc_context_id = e.prc_context_id
6464 AND d.prc_context_type = 'PRODUCT'
6465 AND e.segment_id = f.segment_id
6466 AND f.pte_code = l_pte_code
6467 AND f.segment_level <> 'LINE'
6468 AND qpip.rowid = b.rowid
6469 union
6470 SELECT 'x'
6471 FROM qp_interface_pricing_attribs b, qp_prc_contexts_b d, qp_segments_b e, qp_pte_segments f
6472 WHERE b.product_attribute_context = d.prc_context_code
6473 AND b.product_attribute is NULL and e.segment_code = b.product_attr_code
6474 AND d.prc_context_id = e.prc_context_id
6475 AND d.prc_context_type = 'PRODUCT'
6476 AND e.segment_id = f.segment_id
6477 AND f.pte_code = l_pte_code
6478 AND f.segment_level <> 'LINE'
6479 AND qpip.rowid = b.rowid);
6480
6481 --Bug# 5456164 START RAVI
6482 --Validate product attribute
6483 --8. Product Attribute
6484 FND_MESSAGE.SET_NAME('QP','QP_INVALID_ATTRIBUTE');
6485 FND_MESSAGE.SET_TOKEN('ATTRIBUTE','Product Attribute ');
6486 l_msg_txt := FND_MESSAGE.GET;
6487
6488 INSERT INTO QP_INTERFACE_ERRORS
6489 (error_id,last_update_date, last_updated_by, creation_date,
6490 created_by, last_update_login, request_id, program_application_id,
6491 program_id, program_update_date, entity_type, table_name, column_name,
6492 orig_sys_header_ref,orig_sys_line_ref,orig_sys_qualifier_ref,
6493 orig_sys_pricing_attr_ref,error_message)
6494 SELECT
6495 qp_interface_errors_s.nextval, sysdate ,FND_GLOBAL.USER_ID, sysdate,
6496 FND_GLOBAL.USER_ID, FND_GLOBAL.CONC_LOGIN_ID, qpil.request_id, 661,
6497 NULL,NULL, 'PRL', 'QP_INTERFACE_LIST_LINES', 'PRODUCT_ATTRIBUTE',
6498 qpip.orig_sys_header_ref,qpip.orig_sys_line_ref,null,
6499 qpip.orig_sys_pricing_attr_ref, l_msg_txt
6500 FROM QP_INTERFACE_LIST_LINES qpil, QP_INTERFACE_PRICING_ATTRIBS qpip
6501 WHERE qpil.request_id = p_request_id
6502 AND qpip.request_id = p_request_id -- bug no 5881528
6503 AND qpil.process_status_flag ='P' --is null
6504 AND qpil.orig_sys_line_ref = qpip.orig_sys_line_ref
6505 AND qpip.product_attribute_context IS NOT NULL
6506 AND qpip.product_attribute IS NOT NULL
6507 AND qpip.product_attr_code IS NOT NULL
6508 AND qpip.product_attr_code <> QP_BULK_LOADER_PUB.G_NULL_CHAR
6509 AND qpil.interface_action_code IN ('INSERT', 'UPDATE')
6510 AND NOT EXISTS ( SELECT 'x'
6511 FROM qp_interface_pricing_attribs b, qp_prc_contexts_b d, qp_segments_b e, qp_pte_segments f
6512 WHERE b.product_attribute_context = d.prc_context_code
6513 AND b.product_attribute = e.segment_mapping_column
6514 and e.segment_code = b.product_attr_code
6515 AND d.prc_context_id = e.prc_context_id
6516 AND d.prc_context_type = 'PRODUCT'
6517 AND e.segment_id = f.segment_id
6518 AND f.pte_code = l_pte_code
6519 AND qpip.rowid = b.rowid);
6520
6521 INSERT INTO QP_INTERFACE_ERRORS
6522 (error_id,last_update_date, last_updated_by, creation_date,
6523 created_by, last_update_login, request_id, program_application_id,
6524 program_id, program_update_date, entity_type, table_name, column_name,
6525 orig_sys_header_ref,orig_sys_line_ref,orig_sys_qualifier_ref,
6526 orig_sys_pricing_attr_ref,error_message)
6527 SELECT
6528 qp_interface_errors_s.nextval, sysdate ,FND_GLOBAL.USER_ID, sysdate,
6529 FND_GLOBAL.USER_ID, FND_GLOBAL.CONC_LOGIN_ID, qpil.request_id, 661,
6530 NULL,NULL, 'PRL', 'QP_INTERFACE_LIST_LINES', 'PRODUCT_ATTRIBUTE',
6531 qpip.orig_sys_header_ref,qpip.orig_sys_line_ref,null,
6532 qpip.orig_sys_pricing_attr_ref, l_msg_txt
6533 FROM QP_INTERFACE_LIST_LINES qpil, QP_INTERFACE_PRICING_ATTRIBS qpip
6534 WHERE qpil.request_id = p_request_id
6535 AND qpip.request_id = p_request_id -- bug no 5881528
6536 AND qpil.process_status_flag ='P' --is null
6537 AND qpil.orig_sys_line_ref = qpip.orig_sys_line_ref
6538 AND qpip.product_attribute_context IS NOT NULL
6539 AND qpip.product_attribute IS NULL
6540 AND qpip.product_attr_code IS NOT NULL
6541 AND qpip.product_attr_code <> QP_BULK_LOADER_PUB.G_NULL_CHAR
6542 AND qpil.interface_action_code IN ('INSERT', 'UPDATE')
6543 AND NOT EXISTS ( SELECT 'x'
6544 FROM qp_interface_pricing_attribs b, qp_prc_contexts_b d, qp_segments_b e, qp_pte_segments f
6545 WHERE b.product_attribute_context = d.prc_context_code
6546 and e.segment_code = b.product_attr_code
6547 AND d.prc_context_id = e.prc_context_id
6548 AND d.prc_context_type = 'PRODUCT'
6549 AND e.segment_id = f.segment_id
6550 AND f.pte_code = l_pte_code
6551 AND qpip.rowid = b.rowid);
6552
6553 INSERT INTO QP_INTERFACE_ERRORS
6554 (error_id,last_update_date, last_updated_by, creation_date,
6555 created_by, last_update_login, request_id, program_application_id,
6556 program_id, program_update_date, entity_type, table_name, column_name,
6557 orig_sys_header_ref,orig_sys_line_ref,orig_sys_qualifier_ref,
6558 orig_sys_pricing_attr_ref,error_message)
6559 SELECT
6560 qp_interface_errors_s.nextval, sysdate ,FND_GLOBAL.USER_ID, sysdate,
6561 FND_GLOBAL.USER_ID, FND_GLOBAL.CONC_LOGIN_ID, qpil.request_id, 661,
6562 NULL,NULL, 'PRL', 'QP_INTERFACE_LIST_LINES', 'PRODUCT_ATTRIBUTE',
6563 qpip.orig_sys_header_ref,qpip.orig_sys_line_ref,null,
6564 qpip.orig_sys_pricing_attr_ref, l_msg_txt
6565 FROM QP_INTERFACE_LIST_LINES qpil, QP_INTERFACE_PRICING_ATTRIBS qpip
6566 WHERE qpil.request_id = p_request_id
6567 AND qpip.request_id = p_request_id -- bug no 5881528
6568 AND qpil.process_status_flag ='P' --is null
6569 AND qpil.orig_sys_line_ref = qpip.orig_sys_line_ref
6570 AND qpip.product_attribute_context IS NOT NULL
6571 AND qpip.product_attribute IS NOT NULL
6572 AND qpip.product_attr_code IS NULL
6573 AND qpil.interface_action_code IN ('INSERT', 'UPDATE')
6574 AND NOT EXISTS ( SELECT 'x'
6575 FROM qp_interface_pricing_attribs b, qp_prc_contexts_b d, qp_segments_b e, qp_pte_segments f
6576 WHERE b.product_attribute_context = d.prc_context_code
6577 AND b.product_attribute = e.segment_mapping_column
6578 AND d.prc_context_id = e.prc_context_id
6579 AND d.prc_context_type = 'PRODUCT'
6580 AND e.segment_id = f.segment_id
6581 AND f.pte_code = l_pte_code
6582 AND qpip.rowid = b.rowid);
6583
6584 --Validate pricing attribute
6585 --9. Pricing Attribute
6586 FND_MESSAGE.SET_NAME('QP','QP_INVALID_ATTRIBUTE');
6587 FND_MESSAGE.SET_TOKEN('ATTRIBUTE','Pricing Attribute ');
6588 l_msg_txt := FND_MESSAGE.GET;
6589
6590 INSERT INTO QP_INTERFACE_ERRORS
6591 (error_id,last_update_date, last_updated_by, creation_date,
6592 created_by, last_update_login, request_id, program_application_id,
6593 program_id, program_update_date, entity_type, table_name, column_name,
6594 orig_sys_header_ref,orig_sys_line_ref,orig_sys_qualifier_ref,
6595 orig_sys_pricing_attr_ref,error_message)
6596 SELECT
6597 qp_interface_errors_s.nextval, sysdate ,FND_GLOBAL.USER_ID, sysdate,
6598 FND_GLOBAL.USER_ID, FND_GLOBAL.CONC_LOGIN_ID, qpil.request_id, 661,
6599 NULL,NULL, 'PRL', 'QP_INTERFACE_LIST_LINES', 'PRODUCT_ATTRIBUTE',
6600 qpip.orig_sys_header_ref,qpip.orig_sys_line_ref,null,
6601 qpip.orig_sys_pricing_attr_ref, l_msg_txt
6602 FROM QP_INTERFACE_LIST_LINES qpil, QP_INTERFACE_PRICING_ATTRIBS qpip
6603 WHERE qpil.request_id = p_request_id
6604 AND qpip.request_id = p_request_id -- bug no 5881528
6605 AND qpil.process_status_flag ='P' --is null
6606 AND qpil.orig_sys_line_ref = qpip.orig_sys_line_ref
6607 AND qpip.pricing_attribute_context IS NOT NULL
6608 AND qpip.pricing_attribute IS NOT NULL
6609 AND qpip.pricing_attr_code IS NOT NULL
6610 AND qpip.pricing_attr_code <> QP_BULK_LOADER_PUB.G_NULL_CHAR
6611 AND qpil.interface_action_code IN ('INSERT', 'UPDATE')
6612 AND NOT EXISTS ( SELECT 'x'
6613 FROM qp_interface_pricing_attribs b, qp_prc_contexts_b d, qp_segments_b e, qp_pte_segments f
6614 WHERE b.pricing_attribute_context = d.prc_context_code
6615 AND b.pricing_attribute = e.segment_mapping_column
6616 and e.segment_code = b.pricing_attr_code
6617 AND d.prc_context_id = e.prc_context_id
6618 AND d.prc_context_type = 'PRICING_ATTRIBUTE'
6619 AND e.segment_id = f.segment_id
6620 AND f.pte_code = l_pte_code
6621 AND qpip.rowid = b.rowid);
6622
6623 INSERT INTO QP_INTERFACE_ERRORS
6624 (error_id,last_update_date, last_updated_by, creation_date,
6625 created_by, last_update_login, request_id, program_application_id,
6626 program_id, program_update_date, entity_type, table_name, column_name,
6627 orig_sys_header_ref,orig_sys_line_ref,orig_sys_qualifier_ref,
6628 orig_sys_pricing_attr_ref,error_message)
6629 SELECT
6630 qp_interface_errors_s.nextval, sysdate ,FND_GLOBAL.USER_ID, sysdate,
6631 FND_GLOBAL.USER_ID, FND_GLOBAL.CONC_LOGIN_ID, qpil.request_id, 661,
6632 NULL,NULL, 'PRL', 'QP_INTERFACE_LIST_LINES', 'PRODUCT_ATTRIBUTE',
6633 qpip.orig_sys_header_ref,qpip.orig_sys_line_ref,null,
6634 qpip.orig_sys_pricing_attr_ref, l_msg_txt
6635 FROM QP_INTERFACE_LIST_LINES qpil, QP_INTERFACE_PRICING_ATTRIBS qpip
6636 WHERE qpil.request_id = p_request_id
6637 AND qpip.request_id = p_request_id -- bug no 5881528
6638 AND qpil.process_status_flag ='P' --is null
6639 AND qpil.orig_sys_line_ref = qpip.orig_sys_line_ref
6640 AND qpip.pricing_attribute_context IS NOT NULL
6641 AND qpip.pricing_attribute IS NULL
6642 AND qpip.pricing_attr_code IS NOT NULL
6643 AND qpip.pricing_attr_code <> QP_BULK_LOADER_PUB.G_NULL_CHAR
6644 AND qpil.interface_action_code IN ('INSERT', 'UPDATE')
6645 AND NOT EXISTS ( SELECT 'x'
6646 FROM qp_interface_pricing_attribs b, qp_prc_contexts_b d, qp_segments_b e, qp_pte_segments f
6647 WHERE b.pricing_attribute_context = d.prc_context_code
6648 and e.segment_code = b.pricing_attr_code
6649 AND d.prc_context_id = e.prc_context_id
6650 AND d.prc_context_type = 'PRICING_ATTRIBUTE'
6651 AND e.segment_id = f.segment_id
6652 AND f.pte_code = l_pte_code
6653 AND qpip.rowid = b.rowid);
6654
6655 INSERT INTO QP_INTERFACE_ERRORS
6656 (error_id,last_update_date, last_updated_by, creation_date,
6657 created_by, last_update_login, request_id, program_application_id,
6658 program_id, program_update_date, entity_type, table_name, column_name,
6659 orig_sys_header_ref,orig_sys_line_ref,orig_sys_qualifier_ref,
6660 orig_sys_pricing_attr_ref,error_message)
6661 SELECT
6662 qp_interface_errors_s.nextval, sysdate ,FND_GLOBAL.USER_ID, sysdate,
6663 FND_GLOBAL.USER_ID, FND_GLOBAL.CONC_LOGIN_ID, qpil.request_id, 661,
6664 NULL,NULL, 'PRL', 'QP_INTERFACE_LIST_LINES', 'PRODUCT_ATTRIBUTE',
6665 qpip.orig_sys_header_ref,qpip.orig_sys_line_ref,null,
6666 qpip.orig_sys_pricing_attr_ref, l_msg_txt
6667 FROM QP_INTERFACE_LIST_LINES qpil, QP_INTERFACE_PRICING_ATTRIBS qpip
6668 WHERE qpil.request_id = p_request_id
6669 AND qpip.request_id = p_request_id -- bug no 5881528
6670 AND qpil.process_status_flag ='P' --is null
6671 AND qpil.orig_sys_line_ref = qpip.orig_sys_line_ref
6672 AND qpip.pricing_attribute_context IS NOT NULL
6673 AND qpip.pricing_attribute IS NOT NULL
6674 AND qpip.pricing_attr_code IS NULL
6675 AND qpil.interface_action_code IN ('INSERT', 'UPDATE')
6676 AND NOT EXISTS ( SELECT 'x'
6677 FROM qp_interface_pricing_attribs b, qp_prc_contexts_b d, qp_segments_b e, qp_pte_segments f
6678 WHERE b.pricing_attribute_context = d.prc_context_code
6679 AND b.pricing_attribute = e.segment_mapping_column
6680 AND d.prc_context_id = e.prc_context_id
6681 AND d.prc_context_type = 'PRICING_ATTRIBUTE'
6682 AND e.segment_id = f.segment_id
6683 AND f.pte_code = l_pte_code
6684 AND qpip.rowid = b.rowid);
6685 --Bug# 5456164 END RAVI
6686
6687 qp_bulk_loader_pub.write_log('Leaving Attribute Line validation');
6688 EXCEPTION
6689 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
6690 qp_bulk_loader_pub.write_log( 'UNEXCPECTED ERROR IN PROCEDURE ATTRIBUTE_LINE:'||sqlerrm);
6691 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
6692 WHEN OTHERS THEN
6693 qp_bulk_loader_pub.write_log( 'UNEXCPECTED ERROR IN PROCEDURE ATTRIBUTE_LINE:'||sqlerrm);
6694 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
6695 END ATTRIBUTE_LINE;
6696
6697
6698 PROCEDURE MARK_ERRORED_INTERFACE_RECORD
6699 (p_table_type VARCHAR2,
6700 p_request_id NUMBER)
6701 IS
6702 BEGIN
6703
6704 qp_bulk_loader_pub.write_log('Entering Mark errored inreface record');
6705
6706 IF p_table_type = 'HEADER' THEN
6707
6708 UPDATE qp_interface_list_headers h
6709 SET h.process_status_flag = NULL --'E'
6710 WHERE h.request_id = p_request_id
6711 AND EXISTS
6712 (SELECT orig_sys_header_ref
6713 FROM qp_interface_errors e
6714 WHERE e.orig_sys_header_ref = h.orig_sys_header_ref
6715 AND e.table_name ='QP_INTERFACE_LIST_HEADERS'
6716 AND e.request_id = p_request_id );
6717
6718 ELSIF p_table_type = 'QUALIFIER' THEN
6719
6720 UPDATE qp_interface_qualifiers q
6721 SET process_status_flag = NULL --'E'
6722 WHERE q.request_id =p_request_id
6723 AND EXISTS
6724 (SELECT orig_sys_qualifier_ref
6725 FROM qp_interface_errors e
6726 WHERE e.orig_sys_qualifier_ref = q.orig_sys_qualifier_ref
6727 AND e.orig_sys_header_ref = q.orig_sys_header_ref
6728 AND e.table_name ='QP_INTERFACE_QUALIFIERS'
6729 AND e.request_id = p_request_id);
6730
6731 ELSIF p_table_type = 'LINE' THEN
6732
6733 UPDATE qp_interface_list_lines l
6734 SET process_status_flag = NULL --'E'
6735 WHERE l.request_id =p_request_id
6736 AND EXISTS
6737 (SELECT orig_sys_line_ref
6738 FROM qp_interface_errors e
6739 WHERE e.orig_sys_line_ref = l.orig_sys_line_ref
6740 AND e.orig_sys_header_ref = l.orig_sys_header_ref
6741 AND table_name ='QP_INTERFACE_LIST_LINES'
6742 AND e.request_id = p_request_id );
6743
6744 ELSIF p_table_type = 'PRICING_ATTRIBS' THEN
6745
6746 UPDATE qp_interface_pricing_attribs a
6747 SET process_status_flag = NULL --'E'
6748 WHERE a.request_id =p_request_id
6749 AND EXISTS
6750 (SELECT orig_sys_pricing_attr_ref
6751 FROM qp_interface_errors e
6752 WHERE e.orig_sys_line_ref = a.orig_sys_line_ref
6753 AND e.orig_sys_header_ref = a.orig_sys_header_ref
6754 AND e.orig_sys_pricing_attr_ref = a.orig_sys_pricing_attr_ref
6755 AND table_name ='QP_INTERFACE_PRICING_ATTRIBS'
6756 AND e.request_id = p_request_id
6757 AND NVL(e.message_type, 'E') = 'E' --bug no: 9652756 - only if this is an error. b/c warning messages also goes into errors table
6758 );
6759
6760 END IF;
6761
6762 qp_bulk_loader_pub.write_log('Entering Mark errored inreface record');
6763
6764 EXCEPTION
6765 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
6766 qp_bulk_loader_pub.write_log(
6767 'UNEXCPECTED ERROR IN PROCEDURE MARK_ERRORED_INTERFACE_RECORD:'||sqlerrm);
6768 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
6769 WHEN OTHERS THEN
6770 qp_bulk_loader_pub.write_log(
6771 'UNEXCPECTED ERROR IN PROCEDURE MARK_ERRORED_INTERFACE_RECORD:'||sqlerrm);
6772 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
6773
6774 END MARK_ERRORED_INTERFACE_RECORD;
6775
6776 END QP_BULK_VALIDATE;