DBA Data[Home] [Help]

PACKAGE BODY: APPS.PO_PRICE_ADJ_DRAFT_PKG

Source


1 PACKAGE BODY PO_PRICE_ADJ_DRAFT_PKG AS
2 /* $Header: PO_PRICE_ADJ_DRAFT_PKG.plb 120.0.12010000.1 2009/06/01 23:30:02 ababujan noship $ */
3 
4 d_pkg_name CONSTANT varchar2(50) :=
5   PO_LOG.get_package_base('PO_PRICE_ADJ_DRAFT_PKG');
6 
7 -----------------------------------------------------------------------
8 --Start of Comments
9 --Name: delete_rows
10 --Pre-reqs: None
11 --Modifies:
12 --Locks:
13 --  None
14 --Function:
15 --  Deletes drafts for price adjustments based on the information given
16 --  If only draft_id is provided, then all price adjustments for the draft
17 --  will be deleted
18 --  If price_adjustment_id is also provided, then the one record that has such
19 --  primary key will be deleted
20 --Parameters:
21 --IN:
22 --p_draft_id
23 --  draft unique identifier
24 --p_price_adjustment_id
25 --  po price adjustment unique identifier
26 --IN OUT:
27 --OUT:
28 --Returns:
29 --Notes:
30 --Testing:
31 --End of Comments
32 ------------------------------------------------------------------------
33 PROCEDURE delete_rows
34 ( p_draft_id IN NUMBER,
35   p_price_adjustment_id IN NUMBER
36 ) IS
37 
38 d_api_name CONSTANT VARCHAR2(30) := 'delete_rows';
39 d_module CONSTANT VARCHAR2(2000) := d_pkg_name || d_api_name || '.';
40 d_position NUMBER;
41 
42 BEGIN
43   d_position := 0;
44   IF (PO_LOG.d_proc) THEN
45     PO_LOG.proc_begin(d_module);
46   END IF;
47 
48   DELETE FROM po_price_adj_attribs_draft
49   WHERE draft_id = p_draft_id
50   AND price_adjustment_id = NVL(p_price_adjustment_id, price_adjustment_id);
51 
52   DELETE FROM po_price_adjustments_draft
53   WHERE draft_id = p_draft_id
54   AND price_adjustment_id = NVL(p_price_adjustment_id, price_adjustment_id);
55 
56   d_position := 10;
57 EXCEPTION
58   WHEN OTHERS THEN
59     PO_MESSAGE_S.add_exc_msg
60     ( p_pkg_name => d_pkg_name,
61       p_procedure_name => d_api_name || '.' || d_position
62     );
63     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
64 END delete_rows;
65 
66 -----------------------------------------------------------------------
67 --Start of Comments
68 --Name: sync_draft_from_txn
69 --Pre-reqs: None
70 --Modifies:
71 --Locks:
72 --  None
73 --Function:
74 --  Copy data from transaction table to draft table, if the corresponding
75 --  record in draft table does not exist. It also sets the delete flag of
76 --  the draft record according to the parameter.
77 --Parameters:
78 --IN:
79 --p_price_adjustment_id_tbl
80 --  table of po price_adjustment unique identifier
81 --p_draft_id_tbl
82 --  table of draft ids this sync up will be done for
83 --p_delete_flag_tbl
84 --  table fo flags to indicate whether the draft record should be maked as
85 --  "to be deleted"
86 --IN OUT:
87 --OUT:
88 --x_record_already_exist_tbl
89 --  Returns whether the record was already in draft table or not
90 --Returns:
91 --Notes:
92 --Testing:
93 --End of Comments
94 ------------------------------------------------------------------------
95 PROCEDURE sync_draft_from_txn
96 ( p_price_adjustment_id_tbl  IN PO_TBL_NUMBER,
97   p_draft_id_tbl             IN PO_TBL_NUMBER,
98   p_delete_flag_tbl          IN PO_TBL_VARCHAR1,
99   x_record_already_exist_tbl OUT NOCOPY PO_TBL_VARCHAR1
100 ) IS
101 
102 d_api_name CONSTANT VARCHAR2(30) := 'sync_draft_from_txn';
103 d_module CONSTANT VARCHAR2(2000) := d_pkg_name || d_api_name || '.';
104 d_position NUMBER;
105 
106 l_distinct_id_list DBMS_SQL.NUMBER_TABLE;
107 l_duplicate_flag_tbl PO_TBL_VARCHAR1 := PO_TBL_VARCHAR1();
108 
109 BEGIN
110   d_position := 0;
111   IF (PO_LOG.d_proc) THEN
112     PO_LOG.proc_begin(d_module);
113   END IF;
114 
115   x_record_already_exist_tbl :=
116     PO_PRICE_ADJ_DRAFT_PVT.draft_changes_exist
117     ( p_draft_id_tbl => p_draft_id_tbl,
118       p_price_adjustment_id_tbl => p_price_adjustment_id_tbl
119     );
120 
121   -- If there're duplicate entries in the id table,
122   -- we do not want to insert multiple entries
123   -- Created an associative array to store what id has appeared.
124   l_duplicate_flag_tbl.EXTEND(p_price_adjustment_id_tbl.COUNT);
125 
126   FOR i IN 1..p_price_adjustment_id_tbl.COUNT LOOP
127     IF (x_record_already_exist_tbl(i) = FND_API.G_FALSE) THEN
128 
129       IF (l_distinct_id_list.EXISTS(p_price_adjustment_id_tbl(i))) THEN
130         l_duplicate_flag_tbl(i) := FND_API.G_TRUE;
131       ELSE
132         l_duplicate_flag_tbl(i) := FND_API.G_FALSE;
133         l_distinct_id_list(p_price_adjustment_id_tbl(i)) := 1;
134       END IF;
135     ELSE
136       l_duplicate_flag_tbl(i) := NULL;
137     END IF;
138   END LOOP;
139 
140   d_position := 10;
141   IF (PO_LOG.d_stmt) THEN
142     PO_LOG.stmt(d_module, d_position, 'transfer records from txn to dft');
143   END IF;
144 
145   FORALL i IN 1..p_price_adjustment_id_tbl.COUNT
146     INSERT INTO PO_PRICE_ADJUSTMENTS_DRAFT
147       (DRAFT_ID
148          , DELETE_FLAG
149          , CHANGE_ACCEPTED_FLAG
150          , PRICE_ADJUSTMENT_ID
151          , ADJ_LINE_NUM
152          , CREATION_DATE
153          , CREATED_BY
154          , LAST_UPDATE_DATE
155          , LAST_UPDATED_BY
156          , LAST_UPDATE_LOGIN
157          , PROGRAM_APPLICATION_ID
158          , PROGRAM_ID
159          , PROGRAM_UPDATE_DATE
160          , REQUEST_ID
161          , PO_HEADER_ID
162          , AUTOMATIC_FLAG
163          , PO_LINE_ID
164          , CONTEXT
165          , ATTRIBUTE1
166          , ATTRIBUTE2
167          , ATTRIBUTE3
168          , ATTRIBUTE4
169          , ATTRIBUTE5
170          , ATTRIBUTE6
171          , ATTRIBUTE7
172          , ATTRIBUTE8
173          , ATTRIBUTE9
174          , ATTRIBUTE10
175          , ATTRIBUTE11
176          , ATTRIBUTE12
177          , ATTRIBUTE13
178          , ATTRIBUTE14
179          , ATTRIBUTE15
180          , ORIG_SYS_DISCOUNT_REF
181          , LIST_HEADER_ID
182          , LIST_LINE_ID
183          , LIST_LINE_TYPE_CODE
184          , MODIFIED_FROM
185          , MODIFIED_TO
186          , UPDATED_FLAG
187          , UPDATE_ALLOWED
188          , APPLIED_FLAG
189          , CHANGE_REASON_CODE
190          , CHANGE_REASON_TEXT
191          , operand
192          , Arithmetic_operator
193          , COST_ID
194          , TAX_CODE
195          , TAX_EXEMPT_FLAG
196          , TAX_EXEMPT_NUMBER
197          , TAX_EXEMPT_REASON_CODE
198          , PARENT_ADJUSTMENT_ID
199          , INVOICED_FLAG
200          , ESTIMATED_FLAG
201          , INC_IN_SALES_PERFORMANCE
202          , ADJUSTED_AMOUNT
203          , PRICING_PHASE_ID
204          , CHARGE_TYPE_CODE
205          , CHARGE_SUBTYPE_CODE
206          , list_line_no
207          , source_system_code
208          , benefit_qty
209          , benefit_uom_code
210          , print_on_invoice_flag
211          , expiration_date
212          , rebate_transaction_type_code
213          , rebate_transaction_reference
214          , rebate_payment_system_code
215          , redeemed_date
216          , redeemed_flag
217          , accrual_flag
218          , range_break_quantity
219          , accrual_conversion_rate
220          , pricing_group_sequence
221          , modifier_level_code
222          , price_break_type_code
223          , substitution_attribute
224          , proration_type_code
225          , CREDIT_OR_CHARGE_FLAG
226          , INCLUDE_ON_RETURNS_FLAG
227          , AC_CONTEXT
228          , AC_ATTRIBUTE1
229          , AC_ATTRIBUTE2
230          , AC_ATTRIBUTE3
231          , AC_ATTRIBUTE4
232          , AC_ATTRIBUTE5
233          , AC_ATTRIBUTE6
234          , AC_ATTRIBUTE7
235          , AC_ATTRIBUTE8
236          , AC_ATTRIBUTE9
237          , AC_ATTRIBUTE10
238          , AC_ATTRIBUTE11
239          , AC_ATTRIBUTE12
240          , AC_ATTRIBUTE13
241          , AC_ATTRIBUTE14
242          , AC_ATTRIBUTE15
243          , OPERAND_PER_PQTY
244          , ADJUSTED_AMOUNT_PER_PQTY
245          , LOCK_CONTROL
246       )
247     SELECT p_draft_id_tbl(i)
248          , p_delete_flag_tbl(i)
249          , NULL
250          , ADJ.price_adjustment_id
251          , ADJ.adj_line_num
252          , ADJ.creation_date
253          , ADJ.created_by
254          , ADJ.last_update_date
255          , ADJ.last_updated_by
256          , ADJ.last_update_login
257          , ADJ.program_application_id
258          , ADJ.program_id
259          , ADJ.program_update_date
260          , ADJ.request_id
261          , ADJ.po_header_id
262          , ADJ.automatic_flag
263          , ADJ.po_line_id
264          , ADJ.context
265          , ADJ.attribute1
266          , ADJ.attribute2
267          , ADJ.attribute3
268          , ADJ.attribute4
269          , ADJ.attribute5
270          , ADJ.attribute6
271          , ADJ.attribute7
272          , ADJ.attribute8
273          , ADJ.attribute9
274          , ADJ.attribute10
275          , ADJ.attribute11
276          , ADJ.attribute12
277          , ADJ.attribute13
278          , ADJ.attribute14
279          , ADJ.attribute15
280          , ADJ.orig_sys_discount_ref
281          , ADJ.list_header_id
282          , ADJ.list_line_id
283          , ADJ.list_line_type_code
284          , ADJ.modified_from
285          , ADJ.modified_to
286          , ADJ.updated_flag
287          , ADJ.update_allowed
288          , ADJ.applied_flag
289          , ADJ.change_reason_code
290          , ADJ.change_reason_text
291          , ADJ.operand
292          , ADJ.arithmetic_operator
293          , ADJ.cost_id
294          , ADJ.tax_code
295          , ADJ.tax_exempt_flag
296          , ADJ.tax_exempt_number
297          , ADJ.tax_exempt_reason_code
298          , ADJ.parent_adjustment_id
299          , ADJ.invoiced_flag
300          , ADJ.estimated_flag
301          , ADJ.inc_in_sales_performance
302          , ADJ.adjusted_amount
303          , ADJ.pricing_phase_id
304          , ADJ.charge_type_code
305          , ADJ.charge_subtype_code
306          , ADJ.list_line_no
307          , ADJ.source_system_code
308          , ADJ.benefit_qty
309          , ADJ.benefit_uom_code
310          , ADJ.print_on_invoice_flag
311          , ADJ.expiration_date
312          , ADJ.rebate_transaction_type_code
313          , ADJ.rebate_transaction_reference
314          , ADJ.rebate_payment_system_code
315          , ADJ.redeemed_date
316          , ADJ.redeemed_flag
317          , ADJ.accrual_flag
318          , ADJ.range_break_quantity
319          , ADJ.accrual_conversion_rate
320          , ADJ.pricing_group_sequence
321          , ADJ.modifier_level_code
322          , ADJ.price_break_type_code
323          , ADJ.substitution_attribute
324          , ADJ.proration_type_code
325          , ADJ.credit_or_charge_flag
326          , ADJ.include_on_returns_flag
327          , ADJ.ac_context
328          , ADJ.ac_attribute1
329          , ADJ.ac_attribute2
330          , ADJ.ac_attribute3
331          , ADJ.ac_attribute4
332          , ADJ.ac_attribute5
333          , ADJ.ac_attribute6
334          , ADJ.ac_attribute7
335          , ADJ.ac_attribute8
336          , ADJ.ac_attribute9
337          , ADJ.ac_attribute10
338          , ADJ.ac_attribute11
339          , ADJ.ac_attribute12
340          , ADJ.ac_attribute13
341          , ADJ.ac_attribute14
342          , ADJ.ac_attribute15
343          , ADJ.operand_per_pqty
344          , ADJ.adjusted_amount_per_pqty
345          , 1
346     FROM PO_PRICE_ADJUSTMENTS ADJ
347     WHERE ADJ.price_adjustment_id = p_price_adjustment_id_tbl(i)
348     AND x_record_already_exist_tbl(i) = FND_API.G_FALSE
349     AND l_duplicate_flag_tbl(i) = FND_API.G_FALSE;
350 
351   d_position := 20;
352   IF (PO_LOG.d_stmt) THEN
353     PO_LOG.stmt(d_module, d_position, 'transfer count = ' || SQL%ROWCOUNT);
354   END IF;
355 
356   FORALL i IN 1..p_price_adjustment_id_tbl.COUNT
357     UPDATE po_price_adjustments_draft
358     SET    delete_flag = p_delete_flag_tbl(i)
359     WHERE  (price_adjustment_id = p_price_adjustment_id_tbl(i)
360             OR parent_adjustment_id = p_price_adjustment_id_tbl(i))
361     AND    draft_id = p_draft_id_tbl(i)
362     AND    NVL(delete_flag, 'N') <> 'Y'
363     AND    x_record_already_exist_tbl(i) = FND_API.G_TRUE;
364 
365   d_position := 30;
366   IF (PO_LOG.d_stmt) THEN
367     PO_LOG.stmt(d_module, d_position, 'update draft records that are already' ||
368                 ' in draft table. Count = ' || SQL%ROWCOUNT);
369   END IF;
370 
371   --No Need to update the price adjustment attributes if already found in draft table
372   FORALL i IN 1..p_price_adjustment_id_tbl.COUNT
373     INSERT INTO PO_PRICE_ADJ_ATTRIBS_DRAFT
374       (DRAFT_ID
375          , PRICE_ADJUSTMENT_ID
376          , PRICING_CONTEXT
377          , PRICING_ATTRIBUTE
378          , CREATION_DATE
379          , CREATED_BY
380          , LAST_UPDATE_DATE
381          , LAST_UPDATED_BY
382          , LAST_UPDATE_LOGIN
383          , PROGRAM_APPLICATION_ID
384          , PROGRAM_ID
385          , PROGRAM_UPDATE_DATE
386          , REQUEST_ID
387          , PRICING_ATTR_VALUE_FROM
388          , PRICING_ATTR_VALUE_TO
389          , COMPARISON_OPERATOR
390          , FLEX_TITLE
391          , PRICE_ADJ_ATTRIB_ID
392          , LOCK_CONTROL
393       )
394     SELECT p_draft_id_tbl(i)
395          , ATTR.price_adjustment_id
396          , ATTR.pricing_context
397          , ATTR.pricing_attribute
398          , ATTR.creation_date
399          , ATTR.created_by
400          , ATTR.last_update_date
401          , ATTR.last_updated_by
402          , ATTR.last_update_login
403          , ATTR.program_application_id
404          , ATTR.program_id
405          , ATTR.program_update_date
406          , ATTR.request_id
407          , ATTR.pricing_attr_value_from
408          , ATTR.pricing_attr_value_to
409          , ATTR.comparison_operator
410          , ATTR.flex_title
411          , ATTR.price_adj_attrib_id
412          , 1
413     FROM PO_PRICE_ADJ_ATTRIBS ATTR
414     WHERE ATTR.price_adjustment_id = p_price_adjustment_id_tbl(i)
415     AND x_record_already_exist_tbl(i) = FND_API.G_FALSE
416     AND l_duplicate_flag_tbl(i) = FND_API.G_FALSE;
417 
418   d_position := 40;
419   IF (PO_LOG.d_stmt) THEN
420     PO_LOG.stmt(d_module, d_position, 'Attribute records transfer count = ' || SQL%ROWCOUNT);
421   END IF;
422 
423   d_position := 50;
424   IF (PO_LOG.d_proc) THEN
425     PO_LOG.proc_end(d_module);
426   END IF;
427 
428 EXCEPTION
429   WHEN OTHERS THEN
430     PO_MESSAGE_S.add_exc_msg
431     ( p_pkg_name => d_pkg_name,
432       p_procedure_name => d_api_name || '.' || d_position
433     );
434     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
435 END sync_draft_from_txn;
436 
437 -----------------------------------------------------------------------
438 --Start of Comments
439 --Name: sync_draft_from_txn
440 --Pre-reqs: None
441 --Modifies:
442 --Locks:
443 --  None
444 --Function:
445 --  Same functionality as the bulk version of this procedure
446 --Parameters:
447 --IN:
448 --p_price_adjustment_id
449 --  price adjustment unique identifier
450 --p_draft_id
451 --  the draft this sync up will be done for
452 --p_delete_flag
453 --  flag to indicate whether the draft record should be maked as "to be
454 --  deleted"
455 --IN OUT:
456 --OUT:
457 --x_record_already_exist
458 --  Returns whether the record was already in draft table or not
459 --Returns:
460 --Notes:
461 --Testing:
462 --End of Comments
463 ------------------------------------------------------------------------
464 PROCEDURE sync_draft_from_txn
465 ( p_price_adjustment_id IN NUMBER,
466   p_draft_id IN NUMBER,
467   p_delete_flag IN VARCHAR2,
468   x_record_already_exist OUT NOCOPY VARCHAR2
469 ) IS
470 --
471   d_api_name CONSTANT VARCHAR2(30) := 'sync_draft_from_txn';
472   d_module CONSTANT VARCHAR2(2000) := d_pkg_name || d_api_name || '.';
473   d_position NUMBER;
474 
475   l_record_already_exist_tbl PO_TBL_VARCHAR1;
476 BEGIN
477   d_position := 0;
478   IF (PO_LOG.d_proc) THEN
479     PO_LOG.proc_begin(d_module);
480     PO_LOG.proc_begin(d_module, 'p_price_adjustment_id', p_price_adjustment_id);
481   END IF;
482 
483   sync_draft_from_txn
484   ( p_price_adjustment_id_tbl  => PO_TBL_NUMBER(p_price_adjustment_id),
485     p_draft_id_tbl             => PO_TBL_NUMBER(p_draft_id),
486     p_delete_flag_tbl          => PO_TBL_VARCHAR1(p_delete_flag),
487     x_record_already_exist_tbl => l_record_already_exist_tbl
488   );
489 
490   x_record_already_exist := l_record_already_exist_tbl(1);
491 
492   d_position := 10;
493   IF (PO_LOG.d_proc) THEN
494     PO_LOG.proc_end(d_module);
495     PO_LOG.proc_end(d_module, 'x_record_already_exist', x_record_already_exist);
496   END IF;
497 
498 EXCEPTION
499   WHEN OTHERS THEN
500     PO_MESSAGE_S.add_exc_msg
501     ( p_pkg_name => d_pkg_name,
502       p_procedure_name => d_api_name || '.' || d_position
503     );
504     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
505 END sync_draft_from_txn;
506 
507 
508 -----------------------------------------------------------------------
509 --Start of Comments
510 --Name: sync_draft_from_txn
511 --Pre-reqs: None
512 --Modifies:
513 --Locks:
514 --  None
515 --Function:
516 --  Same functionality as the bulk version of this procedure
517 --Parameters:
518 --IN:
519 --p_draft_id
520 --  this sync up will be done for
521 --p_order_line_id
522 --  po line unique identifier
523 --IN OUT:
524 --OUT:
525 
526 --Returns:
527 --Notes:
528 --Testing:
529 --End of Comments
530 ------------------------------------------------------------------------
531 PROCEDURE sync_draft_from_txn
532 ( p_draft_id IN NUMBER,
533   p_order_header_id NUMBER,
534   p_order_line_id IN NUMBER,
535   p_delete_flag IN VARCHAR2
536   --x_record_already_exist OUT NOCOPY VARCHAR2
537 ) IS
538 
539 d_api_name CONSTANT VARCHAR2(30) := 'sync_draft_from_txn';
540 d_module CONSTANT VARCHAR2(2000) := d_pkg_name || d_api_name || '.';
541 d_position NUMBER;
542 
543 l_record_already_exist_tbl PO_TBL_VARCHAR1;
544 l_price_adjustment_id_tbl  PO_TBL_NUMBER;
545 l_draft_id_tbl PO_TBL_NUMBER;
546 l_delete_flag_tbl PO_TBL_VARCHAR1;
547 
548 BEGIN
549   d_position := 0;
550   IF (PO_LOG.d_proc) THEN
551     PO_LOG.proc_begin(d_module);
552     PO_LOG.proc_begin(d_module, 'p_draft_id', p_draft_id);
553     PO_LOG.proc_begin(d_module, 'p_order_header_id', p_order_header_id);
554     PO_LOG.proc_begin(d_module, 'p_order_line_id', p_order_line_id);
555     PO_LOG.proc_begin(d_module, 'p_delete_flag', p_delete_flag);
556   END IF;
557 
558   --Get all price_adjustment_ids under the order line id
559   SELECT ADJ.price_adjustment_id
560         ,p_draft_id
561         ,p_delete_flag
562   BULK COLLECT INTO l_price_adjustment_id_tbl
563                    ,l_draft_id_tbl
564                    ,l_delete_flag_tbl
565   FROM po_price_adjustments ADJ
566   WHERE ADJ.po_header_id = p_order_header_id
567   AND ADJ.po_line_id = NVL(p_order_line_id, ADJ.po_line_id);
568 
569   sync_draft_from_txn
570   ( p_price_adjustment_id_tbl  => l_price_adjustment_id_tbl,
571     p_draft_id_tbl             => l_draft_id_tbl,
572     p_delete_flag_tbl          => l_delete_flag_tbl,
573     x_record_already_exist_tbl => l_record_already_exist_tbl
574   );
575   --x_record_already_exist := l_record_already_exist_tbl(1);
576 
577   d_position := 10;
578   IF (PO_LOG.d_proc) THEN
579     PO_LOG.proc_end(d_module);
580     --PO_LOG.proc_end(d_module, 'x_record_already_exist', x_record_already_exist);
581   END IF;
582 
583 EXCEPTION
584   WHEN OTHERS THEN
585     PO_MESSAGE_S.add_exc_msg
586     ( p_pkg_name => d_pkg_name,
587       p_procedure_name => d_api_name || '.' || d_position
588     );
589     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
590 END sync_draft_from_txn;
591 
592 -----------------------------------------------------------------------
593 --Start of Comments
594 --Name: merge_changes
595 --Pre-reqs: None
596 --Modifies:
597 --Locks:
598 --  None
599 --Function:
600 --  Merge the records in draft table to transaction table
601 --  Either insert, update or delete will be performed on top of transaction
602 --  table, depending on the delete_flag on the draft record and whether the
603 --  record already exists in transaction table
604 --
605 --Parameters:
606 --IN:
607 --p_draft_id
608 --  draft unique identifier
609 --IN OUT:
610 --OUT:
611 --Returns:
612 --Notes:
613 --Testing:
614 --End of Comments
615 ------------------------------------------------------------------------
616 PROCEDURE merge_changes
617 ( p_draft_id IN NUMBER
618 ) IS
619 
620   d_api_name CONSTANT VARCHAR2(30) := 'merge_changes';
621   d_module CONSTANT VARCHAR2(2000) := d_pkg_name || d_api_name || '.';
622   d_position NUMBER;
623 
624   l_price_adjustment_id_tbl NUMBER_TYPE;
625 BEGIN
626 
627   d_position := 0;
628   IF (PO_LOG.d_proc) THEN
629     PO_LOG.proc_begin(d_module);
630   END IF;
631 
632   -- Since putting DELETE within MERGE statement is causing database
633   -- to thrown internal error, for now we just separate the DELETE statement.
634   -- Once this is fixed we'll move the delete statement back to the merge
635   -- statement
636 
637   -- Delete only records that have not been rejected
638   DELETE FROM po_price_adjustments ADJ
639   WHERE ADJ.price_adjustment_id IN
640          ( SELECT ADJD.price_adjustment_id
641            FROM   po_price_adjustments_draft ADJD
642            WHERE  ADJD.draft_id = p_draft_id
643            AND    ADJD.delete_flag = 'Y'
644            AND    NVL(ADJD.change_accepted_flag, 'Y') = 'Y')
645   RETURNING ADJ.price_adjustment_id BULK COLLECT INTO l_price_adjustment_id_tbl;
646 
647 /*
648   --Set the Delete Flag to Y for the child price break lines if the price break header is marked for deletion
649   UPDATE po_price_adjustments_draft ADJD
650   SET delete_flag = 'Y'
651   WHERE EXISTS (SELECT 1
652                 FROM po_price_adjustments_draft DADJD
653                 WHERE DADJD.price_adjustment_id = ADJD.parent_adjustment_id
654                 AND DADJD.delete_flag = 'Y');
655 */
656   --Delete Child adjustment lines
657   FORALL i IN l_price_adjustment_id_tbl.FIRST .. l_price_adjustment_id_tbl.LAST
658   DELETE FROM po_price_adjustments ADJ
659   WHERE ADJ.parent_adjustment_id = l_price_adjustment_id_tbl(i);
660 
661   --Delete the attributes corresponding to the lines that are marked for deletion
662   DELETE FROM po_price_adj_attribs ATTR
663   WHERE ATTR.price_adjustment_id IN
664          (SELECT ADJD.price_adjustment_id
665           FROM   po_price_adjustments_draft ADJD
666           WHERE  ADJD.draft_id = p_draft_id
667           --AND    ADJD.delete_flag = 'Y'  --delete all attributes irrespective of the flag
668           AND    NVL(ADJD.change_accepted_flag, 'Y') = 'Y');
669 
670   MERGE INTO po_price_adjustments ADJ
671   USING (
672     SELECT DFT.draft_id
673          , DFT.change_accepted_flag
674          , DFT.delete_flag
675          , DFT.price_adjustment_id
676          , DFT.adj_line_num
677          , DFT.creation_date
678          , DFT.created_by
679          , DFT.last_update_date
680          , DFT.last_updated_by
681          , DFT.last_update_login
682          , DFT.program_application_id
683          , DFT.program_id
684          , DFT.program_update_date
685          , DFT.request_id
686          , DFT.po_header_id
687          , DFT.automatic_flag
688          , DFT.po_line_id
689          , DFT.context
690          , DFT.attribute1
691          , DFT.attribute2
692          , DFT.attribute3
693          , DFT.attribute4
694          , DFT.attribute5
695          , DFT.attribute6
696          , DFT.attribute7
697          , DFT.attribute8
698          , DFT.attribute9
699          , DFT.attribute10
700          , DFT.attribute11
701          , DFT.attribute12
702          , DFT.attribute13
703          , DFT.attribute14
704          , DFT.attribute15
705          , DFT.orig_sys_discount_ref
706          , DFT.list_header_id
707          , DFT.list_line_id
708          , DFT.list_line_type_code
709          , DFT.modified_from
710          , DFT.modified_to
711          , DFT.updated_flag
712          , DFT.update_allowed
713          , DFT.applied_flag
714          , DFT.change_reason_code
715          , DFT.change_reason_text
716          , DFT.operand
717          , DFT.arithmetic_operator
718          , DFT.cost_id
719          , DFT.tax_code
720          , DFT.tax_exempt_flag
721          , DFT.tax_exempt_number
722          , DFT.tax_exempt_reason_code
723          , DFT.parent_adjustment_id
724          , DFT.invoiced_flag
725          , DFT.estimated_flag
726          , DFT.inc_in_sales_performance
727          , DFT.adjusted_amount
728          , DFT.pricing_phase_id
729          , DFT.charge_type_code
730          , DFT.charge_subtype_code
731          , DFT.list_line_no
732          , DFT.source_system_code
733          , DFT.benefit_qty
734          , DFT.benefit_uom_code
735          , DFT.print_on_invoice_flag
736          , DFT.expiration_date
737          , DFT.rebate_transaction_type_code
738          , DFT.rebate_transaction_reference
739          , DFT.rebate_payment_system_code
740          , DFT.redeemed_date
741          , DFT.redeemed_flag
742          , DFT.accrual_flag
743          , DFT.range_break_quantity
744          , DFT.accrual_conversion_rate
745          , DFT.pricing_group_sequence
746          , DFT.modifier_level_code
747          , DFT.price_break_type_code
748          , DFT.substitution_attribute
749          , DFT.proration_type_code
750          , DFT.credit_or_charge_flag
751          , DFT.include_on_returns_flag
752          , DFT.ac_context
753          , DFT.ac_attribute1
754          , DFT.ac_attribute2
755          , DFT.ac_attribute3
756          , DFT.ac_attribute4
757          , DFT.ac_attribute5
758          , DFT.ac_attribute6
759          , DFT.ac_attribute7
760          , DFT.ac_attribute8
761          , DFT.ac_attribute9
762          , DFT.ac_attribute10
763          , DFT.ac_attribute11
764          , DFT.ac_attribute12
765          , DFT.ac_attribute13
766          , DFT.ac_attribute14
767          , DFT.ac_attribute15
768          , DFT.operand_per_pqty
769          , DFT.adjusted_amount_per_pqty
770     FROM po_price_adjustments_draft DFT
771     WHERE DFT.draft_id = p_draft_id
772     AND NVL(DFT.change_accepted_flag, 'Y') = 'Y') ADJD
773     ON (ADJ.price_adjustment_id = ADJD.price_adjustment_id)
774   WHEN MATCHED THEN
775     UPDATE
776       SET  ADJ.last_update_date  = ADJD.last_update_date
777          , ADJ.last_updated_by = ADJD.last_updated_by
778          , ADJ.last_update_login = ADJD.last_update_login
779          , ADJ.program_application_id = ADJD.program_application_id
780          , ADJ.program_id = ADJD.program_id
781          , ADJ.program_update_date = ADJD.program_update_date
782          , ADJ.request_id = ADJD.request_id
783          , ADJ.adj_line_num = ADJD.adj_line_num
784          , ADJ.po_header_id = ADJD.po_header_id
785          , ADJ.automatic_flag = ADJD.automatic_flag
786          , ADJ.po_line_id = ADJD.po_line_id
787          , ADJ.context = ADJD.context
788          , ADJ.attribute1 = ADJD.attribute1
789          , ADJ.attribute2 = ADJD.attribute2
790          , ADJ.attribute3 = ADJD.attribute3
791          , ADJ.attribute4 = ADJD.attribute4
792          , ADJ.attribute5 = ADJD.attribute5
793          , ADJ.attribute6 = ADJD.attribute6
794          , ADJ.attribute7 = ADJD.attribute7
795          , ADJ.attribute8 = ADJD.attribute8
796          , ADJ.attribute9 = ADJD.attribute9
797          , ADJ.attribute10 = ADJD.attribute10
798          , ADJ.attribute11 = ADJD.attribute11
799          , ADJ.attribute12 = ADJD.attribute12
800          , ADJ.attribute13 = ADJD.attribute13
801          , ADJ.attribute14 = ADJD.attribute14
802          , ADJ.attribute15 = ADJD.attribute15
803          , ADJ.orig_sys_discount_ref = ADJD.orig_sys_discount_ref
804          , ADJ.list_header_id = ADJD.list_header_id
805          , ADJ.list_line_id = ADJD.list_line_id
806          , ADJ.list_line_type_code = ADJD.list_line_type_code
807          , ADJ.modified_from = ADJD.modified_from
808          , ADJ.modified_to = ADJD.modified_to
809          , ADJ.updated_flag = ADJD.updated_flag
810          , ADJ.update_allowed = ADJD.update_allowed
811          , ADJ.applied_flag = ADJD.applied_flag
812          , ADJ.change_reason_code = ADJD.change_reason_code
813          , ADJ.change_reason_text = ADJD.change_reason_text
814          , ADJ.operand = ADJD.operand
815          , ADJ.arithmetic_operator = ADJD.arithmetic_operator
816          , ADJ.cost_id = ADJD.cost_id
817          , ADJ.tax_code   = ADJD.tax_code
818          , ADJ.tax_exempt_flag = ADJD.tax_exempt_flag
819          , ADJ.tax_exempt_number = ADJD.tax_exempt_number
820          , ADJ.tax_exempt_reason_code = ADJD.tax_exempt_reason_code
821          , ADJ.parent_adjustment_id = ADJD.parent_adjustment_id
822          , ADJ.invoiced_flag = ADJD.invoiced_flag
823          , ADJ.estimated_flag = ADJD.estimated_flag
824          , ADJ.inc_in_sales_performance  = ADJD.inc_in_sales_performance
825          , ADJ.adjusted_amount = ADJD.adjusted_amount
826          , ADJ.pricing_phase_id  = ADJD.pricing_phase_id
827          , ADJ.charge_type_code  = ADJD.charge_type_code
828          , ADJ.charge_subtype_code = ADJD.charge_subtype_code
829          , ADJ.list_line_no = ADJD.list_line_no
830          , ADJ.source_system_code = ADJD.source_system_code
831          , ADJ.benefit_qty = ADJD.benefit_qty
832          , ADJ.benefit_uom_code  = ADJD.benefit_uom_code
833          , ADJ.print_on_invoice_flag = ADJD.print_on_invoice_flag
834          , ADJ.expiration_date = ADJD.expiration_date
835          , ADJ.rebate_transaction_type_code = ADJD.rebate_transaction_type_code
836          , ADJ.rebate_transaction_reference = ADJD.rebate_transaction_reference
837          , ADJ.rebate_payment_system_code = ADJD.rebate_payment_system_code
838          , ADJ.redeemed_date = ADJD.redeemed_date
839          , ADJ.redeemed_flag = ADJD.redeemed_flag
840          , ADJ.accrual_flag = ADJD.accrual_flag
841          , ADJ.range_break_quantity = ADJD.range_break_quantity
842          , ADJ.accrual_conversion_rate = ADJD.accrual_conversion_rate
843          , ADJ.pricing_group_sequence = ADJD.pricing_group_sequence
844          , ADJ.modifier_level_code = ADJD.modifier_level_code
845          , ADJ.price_break_type_code = ADJD.price_break_type_code
846          , ADJ.substitution_attribute = ADJD.substitution_attribute
847          , ADJ.proration_type_code = ADJD.proration_type_code
848          , ADJ.credit_or_charge_flag = ADJD.credit_or_charge_flag
849          , ADJ.include_on_returns_flag = ADJD.include_on_returns_flag
850          , ADJ.ac_context = ADJD.ac_context
851          , ADJ.ac_attribute1 = ADJD.ac_attribute1
852          , ADJ.ac_attribute2 = ADJD.ac_attribute2
853          , ADJ.ac_attribute3 = ADJD.ac_attribute3
854          , ADJ.ac_attribute4 = ADJD.ac_attribute4
855          , ADJ.ac_attribute5 = ADJD.ac_attribute5
856          , ADJ.ac_attribute6 = ADJD.ac_attribute6
857          , ADJ.ac_attribute7 = ADJD.ac_attribute7
858          , ADJ.ac_attribute8 = ADJD.ac_attribute8
859          , ADJ.ac_attribute9 = ADJD.ac_attribute9
860          , ADJ.ac_attribute10 = ADJD.ac_attribute10
861          , ADJ.ac_attribute11 = ADJD.ac_attribute11
862          , ADJ.ac_attribute12 = ADJD.ac_attribute12
863          , ADJ.ac_attribute13 = ADJD.ac_attribute13
864          , ADJ.ac_attribute14 = ADJD.ac_attribute14
865          , ADJ.ac_attribute15 = ADJD.ac_attribute15
866          , ADJ.operand_per_pqty  = ADJD.operand_per_pqty
867          , ADJ.adjusted_amount_per_pqty  = ADJD.adjusted_amount_per_pqty
868          , ADJ.lock_control = ADJ.lock_control + 1
869   WHEN NOT MATCHED THEN
870     INSERT
871          ( PRICE_ADJUSTMENT_ID
872          , ADJ_LINE_NUM
873          , CREATION_DATE
874          , CREATED_BY
875          , LAST_UPDATE_DATE
876          , LAST_UPDATED_BY
877          , LAST_UPDATE_LOGIN
878          , PROGRAM_APPLICATION_ID
879          , PROGRAM_ID
880          , PROGRAM_UPDATE_DATE
881          , REQUEST_ID
882          , PO_HEADER_ID
883          , AUTOMATIC_FLAG
884          , PO_LINE_ID
885          , CONTEXT
886          , ATTRIBUTE1
887          , ATTRIBUTE2
888          , ATTRIBUTE3
889          , ATTRIBUTE4
890          , ATTRIBUTE5
891          , ATTRIBUTE6
892          , ATTRIBUTE7
893          , ATTRIBUTE8
894          , ATTRIBUTE9
895          , ATTRIBUTE10
896          , ATTRIBUTE11
897          , ATTRIBUTE12
898          , ATTRIBUTE13
899          , ATTRIBUTE14
900          , ATTRIBUTE15
901          , ORIG_SYS_DISCOUNT_REF
902          , LIST_HEADER_ID
903          , LIST_LINE_ID
904          , LIST_LINE_TYPE_CODE
905          , MODIFIED_FROM
906          , MODIFIED_TO
907          , UPDATED_FLAG
908          , UPDATE_ALLOWED
909          , APPLIED_FLAG
910          , CHANGE_REASON_CODE
911          , CHANGE_REASON_TEXT
912          , OPERAND
913          , ARITHMETIC_OPERATOR
914          , COST_ID
915          , TAX_CODE
916          , TAX_EXEMPT_FLAG
917          , TAX_EXEMPT_NUMBER
918          , TAX_EXEMPT_REASON_CODE
919          , PARENT_ADJUSTMENT_ID
920          , INVOICED_FLAG
921          , ESTIMATED_FLAG
922          , INC_IN_SALES_PERFORMANCE
923          , ADJUSTED_AMOUNT
924          , PRICING_PHASE_ID
925          , CHARGE_TYPE_CODE
926          , CHARGE_SUBTYPE_CODE
927          , LIST_LINE_NO
928          , SOURCE_SYSTEM_CODE
929          , BENEFIT_QTY
930          , BENEFIT_UOM_CODE
931          , PRINT_ON_INVOICE_FLAG
932          , EXPIRATION_DATE
933          , REBATE_TRANSACTION_TYPE_CODE
934          , REBATE_TRANSACTION_REFERENCE
935          , REBATE_PAYMENT_SYSTEM_CODE
936          , REDEEMED_DATE
937          , REDEEMED_FLAG
938          , ACCRUAL_FLAG
939          , RANGE_BREAK_QUANTITY
940          , ACCRUAL_CONVERSION_RATE
941          , PRICING_GROUP_SEQUENCE
942          , MODIFIER_LEVEL_CODE
943          , PRICE_BREAK_TYPE_CODE
944          , SUBSTITUTION_ATTRIBUTE
945          , PRORATION_TYPE_CODE
946          , CREDIT_OR_CHARGE_FLAG
947          , INCLUDE_ON_RETURNS_FLAG
948          , AC_CONTEXT
949          , AC_ATTRIBUTE1
950          , AC_ATTRIBUTE2
951          , AC_ATTRIBUTE3
952          , AC_ATTRIBUTE4
953          , AC_ATTRIBUTE5
954          , AC_ATTRIBUTE6
955          , AC_ATTRIBUTE7
956          , AC_ATTRIBUTE8
957          , AC_ATTRIBUTE9
958          , AC_ATTRIBUTE10
959          , AC_ATTRIBUTE11
960          , AC_ATTRIBUTE12
961          , AC_ATTRIBUTE13
962          , AC_ATTRIBUTE14
963          , AC_ATTRIBUTE15
964          , OPERAND_PER_PQTY
965          , ADJUSTED_AMOUNT_PER_PQTY
966          , LOCK_CONTROL
967          )
968     VALUES
969          ( ADJD.price_adjustment_id
970          , ADJD.adj_line_num
971          , ADJD.creation_date
972          , ADJD.created_by
973          , ADJD.last_update_date
974          , ADJD.last_updated_by
975          , ADJD.last_update_login
976          , ADJD.program_application_id
977          , ADJD.program_id
978          , ADJD.program_update_date
979          , ADJD.request_id
980          , ADJD.po_header_id
981          , ADJD.automatic_flag
982          , ADJD.po_line_id
983          , ADJD.context
984          , ADJD.attribute1
985          , ADJD.attribute2
986          , ADJD.attribute3
987          , ADJD.attribute4
988          , ADJD.attribute5
989          , ADJD.attribute6
990          , ADJD.attribute7
991          , ADJD.attribute8
992          , ADJD.attribute9
993          , ADJD.attribute10
994          , ADJD.attribute11
995          , ADJD.attribute12
996          , ADJD.attribute13
997          , ADJD.attribute14
998          , ADJD.attribute15
999          , ADJD.orig_sys_discount_ref
1000          , ADJD.list_header_id
1001          , ADJD.list_line_id
1002          , ADJD.list_line_type_code
1003          , ADJD.modified_from
1004          , ADJD.modified_to
1005          , ADJD.updated_flag
1006          , ADJD.update_allowed
1007          , ADJD.applied_flag
1008          , ADJD.change_reason_code
1009          , ADJD.change_reason_text
1010          , ADJD.operand
1011          , ADJD.arithmetic_operator
1012          , ADJD.cost_id
1013          , ADJD.tax_code
1014          , ADJD.tax_exempt_flag
1015          , ADJD.tax_exempt_number
1016          , ADJD.tax_exempt_reason_code
1017          , ADJD.parent_adjustment_id
1018          , ADJD.invoiced_flag
1019          , ADJD.estimated_flag
1020          , ADJD.inc_in_sales_performance
1021          , ADJD.adjusted_amount
1022          , ADJD.pricing_phase_id
1023          , ADJD.charge_type_code
1024          , ADJD.charge_subtype_code
1025          , ADJD.list_line_no
1026          , ADJD.source_system_code
1027          , ADJD.benefit_qty
1028          , ADJD.benefit_uom_code
1029          , ADJD.print_on_invoice_flag
1030          , ADJD.expiration_date
1031          , ADJD.rebate_transaction_type_code
1032          , ADJD.rebate_transaction_reference
1033          , ADJD.rebate_payment_system_code
1034          , ADJD.redeemed_date
1035          , ADJD.redeemed_flag
1036          , ADJD.accrual_flag
1037          , ADJD.range_break_quantity
1038          , ADJD.accrual_conversion_rate
1039          , ADJD.pricing_group_sequence
1040          , ADJD.modifier_level_code
1041          , ADJD.price_break_type_code
1042          , ADJD.substitution_attribute
1043          , ADJD.proration_type_code
1044          , ADJD.credit_or_charge_flag
1045          , ADJD.include_on_returns_flag
1046          , ADJD.ac_context
1047          , ADJD.ac_attribute1
1048          , ADJD.ac_attribute2
1049          , ADJD.ac_attribute3
1050          , ADJD.ac_attribute4
1051          , ADJD.ac_attribute5
1052          , ADJD.ac_attribute6
1053          , ADJD.ac_attribute7
1054          , ADJD.ac_attribute8
1055          , ADJD.ac_attribute9
1056          , ADJD.ac_attribute10
1057          , ADJD.ac_attribute11
1058          , ADJD.ac_attribute12
1059          , ADJD.ac_attribute13
1060          , ADJD.ac_attribute14
1061          , ADJD.ac_attribute15
1062          , ADJD.operand_per_pqty
1063          , ADJD.adjusted_amount_per_pqty
1064          , 1
1065          )
1066     WHERE NVL(ADJD.delete_flag, 'N') <> 'Y';
1067 
1068   INSERT INTO po_price_adj_attribs
1069     (PRICE_ADJUSTMENT_ID
1070        , PRICING_CONTEXT
1071        , PRICING_ATTRIBUTE
1072        , CREATION_DATE
1073        , CREATED_BY
1074        , LAST_UPDATE_DATE
1075        , LAST_UPDATED_BY
1076        , LAST_UPDATE_LOGIN
1077        , PROGRAM_APPLICATION_ID
1078        , PROGRAM_ID
1079        , PROGRAM_UPDATE_DATE
1080        , REQUEST_ID
1081        , PRICING_ATTR_VALUE_FROM
1082        , PRICING_ATTR_VALUE_TO
1083        , COMPARISON_OPERATOR
1084        , FLEX_TITLE
1085        , PRICE_ADJ_ATTRIB_ID
1086        , LOCK_CONTROL
1087     )
1088   SELECT ATTR.price_adjustment_id
1089        , ATTR.pricing_context
1090        , ATTR.pricing_attribute
1091        , ATTR.creation_date
1092        , ATTR.created_by
1093        , ATTR.last_update_date
1094        , ATTR.last_updated_by
1095        , ATTR.last_update_login
1096        , ATTR.program_application_id
1097        , ATTR.program_id
1098        , ATTR.program_update_date
1099        , ATTR.request_id
1100        , ATTR.pricing_attr_value_from
1101        , ATTR.pricing_attr_value_to
1102        , ATTR.comparison_operator
1103        , ATTR.flex_title
1104        , ATTR.price_adj_attrib_id
1105        , 1
1106   FROM po_price_adj_attribs_draft ATTR
1107       ,po_price_adjustments_draft ADJD
1108   WHERE ADJD.draft_id = p_draft_id
1109   AND ADJD.draft_id = ATTR.draft_id
1110   AND ADJD.price_adjustment_id = ATTR.price_adjustment_id
1111   AND NVL(ADJD.delete_flag, 'N') <> 'Y'
1112   AND NVL(ADJD.change_accepted_flag, 'Y') = 'Y';
1113 
1114   d_position := 40;
1115   IF (PO_LOG.d_stmt) THEN
1116     PO_LOG.stmt(d_module, d_position, 'Attribute records transfer count = ' || SQL%ROWCOUNT);
1117   END IF;
1118 
1119   d_position := 50;
1120 EXCEPTION
1121   WHEN OTHERS THEN
1122     PO_MESSAGE_S.add_exc_msg
1123     ( p_pkg_name => d_pkg_name,
1124       p_procedure_name => d_api_name || '.' || d_position
1125     );
1126     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1127 END merge_changes;
1128 
1129 -----------------------------------------------------------------------
1130 --Start of Comments
1131 --Name: lock_draft_record
1132 --Function:
1133 --  Obtain database lock for the record in draft table
1134 --Parameters:
1135 --IN:
1136 --p_price_adjustment_id
1137 --  id for po price adjustments record
1138 --p_draft_id
1139 --  draft unique identifier
1140 --RETURN:
1141 --End of Comments
1142 ------------------------------------------------------------------------
1143 PROCEDURE lock_draft_record
1144 ( p_price_adjustment_id IN NUMBER,
1145   p_draft_id        IN NUMBER
1146 ) IS
1147 
1148 d_api_name CONSTANT VARCHAR2(30) := 'lock_draft_record';
1149 d_module CONSTANT VARCHAR2(2000) := d_pkg_name || d_api_name || '.';
1150 d_position NUMBER;
1151 
1152 l_dummy NUMBER;
1153 
1154 BEGIN
1155   d_position := 0;
1156   IF (PO_LOG.d_proc) THEN
1157     PO_LOG.proc_begin(d_module);
1158   END IF;
1159 
1160   SELECT 1
1161   INTO l_dummy
1162   FROM po_price_adjustments_draft
1163   WHERE price_adjustment_id = p_price_adjustment_id
1164   AND draft_id = p_draft_id
1165   FOR UPDATE NOWAIT;
1166 
1167   IF (PO_LOG.d_proc) THEN
1168     PO_LOG.proc_end(d_module);
1169   END IF;
1170 
1171 EXCEPTION
1172 WHEN NO_DATA_FOUND THEN
1173   NULL;
1174 END lock_draft_record;
1175 
1176 -----------------------------------------------------------------------
1177 --Start of Comments
1178 --Name: lock_transaction_record
1179 --Function:
1180 --  Obtain database lock for the record in transaction table
1181 --Parameters:
1182 --IN:
1183 --p_price_adjustment_id
1184 --  id for price adjustment record
1185 --RETURN:
1186 --End of Comments
1187 ------------------------------------------------------------------------
1188 PROCEDURE lock_transaction_record
1189 ( p_price_adjustment_id IN NUMBER
1190 ) IS
1191 
1192 d_api_name CONSTANT VARCHAR2(30) := 'lock_transaction_record';
1193 d_module CONSTANT VARCHAR2(2000) := d_pkg_name || d_api_name || '.';
1194 d_position NUMBER;
1195 
1196 l_dummy NUMBER;
1197 
1198 BEGIN
1199   d_position := 0;
1200   IF (PO_LOG.d_proc) THEN
1201     PO_LOG.proc_begin(d_module);
1202   END IF;
1203 
1204   SELECT 1
1205   INTO l_dummy
1206   FROM po_price_adjustments
1207   WHERE price_adjustment_id = p_price_adjustment_id
1208   FOR UPDATE NOWAIT;
1209 
1210   IF (PO_LOG.d_proc) THEN
1211     PO_LOG.proc_end(d_module);
1212   END IF;
1213 
1214 EXCEPTION
1215 WHEN NO_DATA_FOUND THEN
1216   NULL;
1217 END lock_transaction_record;
1218 
1219 END PO_PRICE_ADJ_DRAFT_PKG;