DBA Data[Home] [Help]

PACKAGE BODY: APPS.QP_LIMIT_TRANSACTIONS_PVT

Source


1 PACKAGE BODY QP_LIMIT_TRANSACTIONS_PVT AS
2 /* $Header: QPXVLTDB.pls 120.1 2005/12/27 13:57:58 gtippire noship $ */
3 
4 l_debug VARCHAR2(3);
5 
6 /************************************************************************
7  Procedure to autonomously update qp_limit_balances table.
8  ***********************************************************************/
9 PROCEDURE Update_Balance(p_amount           IN  NUMBER,
10                          p_limit_balance_id IN  NUMBER)
11 IS
12 PRAGMA AUTONOMOUS_TRANSACTION;
13 BEGIN
14 /*
15 INDX,qp_limit_transactions_pvt.update.upd1,QP_LIMIT_BALANCES_U1,LIMIT_BALANCE_ID,1
16 */
17     --sql statement upd1
18     UPDATE qp_limit_balances
19     SET    available_amount = available_amount + p_amount
20     WHERE  limit_balance_id = p_limit_balance_id;
21 
22     COMMIT;
23 
24 END Update_Balance;
25 
26 
27 /***********************************************************************
28    Procedure to Delete a Limit Transaction record for an event and phase
29    combination that does not have a corresponding modifier in the
30    qp_npreq_ldets_tmp table.
31 ***********************************************************************/
32 PROCEDURE Delete (p_pricing_event_code IN  VARCHAR2,
33                   x_return_status      OUT NOCOPY VARCHAR2)
34 IS
35 /*
36 INDX,qp_limit_transactions_pvt.delete.limit_trans_cur,QP_LIMIT_TRANSACTIONS_U1,PRICE_REQUEST_CODE,1
37 INDX,qp_limit_transactions_pvt.delete.limit_trans_cur,QP_LIMIT_TRANSACTIONS_U1,LIST_HEADER_ID,2
38 INDX,qp_limit_transactions_pvt.delete.limit_trans_cur,QP_LIMIT_TRANSACTIONS_U1,LIST_LINE_ID,3
39 INDX,qp_limit_transactions_pvt.delete.limit_trans_cur,QP_LIMIT_TRANSACTIONS_U1,LIMIT_BALANCE_ID,4
40 INDX,qp_limit_transactions_pvt.delete.limit_trans_cur,qp_npreq_ldets_tmp_N1,LINE_INDEX,1
41 INDX,qp_limit_transactions_pvt.delete.limit_trans_cur,qp_npreq_ldets_tmp_N1,PRICING_STATUS_CODE,2
42 INDX,qp_limit_transactions_pvt.delete.limit_trans_cur,qp_npreq_ldets_tmp_N1,PRICING_PHASE_ID,3
43 INDX,qp_limit_transactions_pvt.delete.limit_trans_cur,qp_npreq_ldets_tmp_N1,CREATED_FROM_LIST_HEADER_ID,4
44 INDX,qp_limit_transactions_pvt.delete.limit_trans_cur,qp_npreq_ldets_tmp_N1,CREATED_FROM_LIST_LINE_ID,5
45 INDX,qp_limit_transactions_pvt.delete.limit_trans_cur,QP_EVENT_PHASES_U1,PRICING_EVENT_CODE,1
46 INDX,qp_limit_transactions_pvt.delete.limit_trans_cur,QP_EVENT_PHASES_U1,PRICING_PHASE_ID,2
47 */
48 CURSOR limit_trans_cur(a_pricing_event_code VARCHAR2)
49 IS
50   SELECT t.limit_balance_id, t.list_header_id, t.list_line_id,
51          t.price_request_code, t.pricing_phase_id, t.amount
52   FROM   qp_limit_transactions t, qp_npreq_lines_tmp b
53   WHERE  t.pricing_phase_id IN (SELECT pricing_phase_id
54                                 FROM   qp_event_phases evt
55 --                                WHERE pricing_event_code = a_pricing_event_code)
56                                 --fix for bug 4765137
57                                 WHERE instr(a_pricing_event_code, evt.pricing_event_code || ',') > 0)
58   AND    t.price_request_code = b.price_request_code
59   AND    NOT EXISTS (SELECT 'X'
60                      FROM   qp_npreq_ldets_tmp l
61                      WHERE  l.created_from_list_header_id = t.list_header_id
62                      AND    l.created_from_list_line_id = t.list_line_id
63                      AND    l.pricing_phase_id = t.pricing_phase_id
64                      AND    l.line_index = b.line_index
65                      AND    l.pricing_status_code = QP_PREQ_GRP.G_STATUS_NEW);
66 
67 BEGIN
68   l_debug := QP_PREQ_GRP.G_DEBUG_ENGINE;
69   IF l_debug = FND_API.G_TRUE THEN
70   QP_PREQ_GRP.engine_debug('***Begin Procedure Delete*** ');
71   QP_PREQ_GRP.engine_debug('***Begin Procedure Delete***: price_event: '|| p_pricing_event_code);
72 
73   for cl in (select line.line_index, line.price_request_code, trx.list_header_id, trx.pricing_phase_id
74              from qp_npreq_lines_tmp line, qp_limit_transactions trx
75              where trx.price_request_code = line.price_request_code)
76   LOOP
77     QP_PREQ_GRP.engine_debug('Limit transactions for current lines '||cl.line_index||' price_reqCode '||cl.price_request_code||' listhdrid '||cl.list_header_id);
78     for cl1 in (select ldet.created_from_list_header_id, ldet.pricing_status_code
79                 from qp_npreq_ldets_tmp ldet
80                 where ldet.created_from_list_header_id = cl.list_header_id
81                 and ldet.line_index = cl.line_index
82                 and ldet.pricing_phase_id in (select pricing_phase_id
83                                               from qp_event_phases evt
84                                               where instr(p_pricing_event_code, evt.pricing_event_code || ',') > 0))
85     LOOP
86       QP_PREQ_GRP.engine_debug('adjustments for above transactions '||cl1.created_from_list_header_id||' status '||cl1.pricing_status_code);
87     END LOOP;
88   END LOOP;
89 
90   END IF;
91   x_return_status := FND_API.G_RET_STS_SUCCESS;
92 
93   FOR l_rec IN limit_trans_cur(p_pricing_event_code)
94   LOOP
95     IF l_debug = FND_API.G_TRUE THEN
96       QP_PREQ_GRP.engine_debug('***Deleting LimitbalanceId: '||l_rec.limit_balance_id||' pricereqcode '||l_rec.price_request_code);
97     END IF;
98 
99     --For each transaction record selected in the cursor increment the
100     --corresponding limit balance by the transaction amount
101     Update_Balance(l_rec.amount, l_rec.limit_balance_id);
102 
103     --Then delete the transaction record
104 /*
105 INDX,qp_limit_transactions_pvt.delete.del1,QP_LIMIT_TRANSACTIONS_U1,PRICE_REQUEST_CODE,1
106 INDX,qp_limit_transactions_pvt.delete.del1,QP_LIMIT_TRANSACTIONS_U1,LIST_HEADER_ID,2
107 INDX,qp_limit_transactions_pvt.delete.del1,QP_LIMIT_TRANSACTIONS_U1,LIST_LINE_ID,3
108 INDX,qp_limit_transactions_pvt.delete.del1,QP_LIMIT_TRANSACTIONS_U1,LIMIT_BALANCE_ID,4
109 */
110     --sql statement del1
111     DELETE FROM qp_limit_transactions
112     WHERE  limit_balance_id = l_rec.limit_balance_id
113     AND    list_header_id  = l_rec.list_header_id
114     AND    list_line_id  = l_rec.list_line_id
115     AND    price_request_code  = l_rec.price_request_code;
116 
117   END LOOP; --Loop over records in limit_trans_cur
118 
119   IF l_debug = FND_API.G_TRUE THEN
120   QP_PREQ_GRP.engine_debug('***End Procedure Delete*** ');
121 
122   END IF;
123 EXCEPTION
124     WHEN FND_API.G_EXC_ERROR THEN
125 
126            x_return_status := FND_API.G_RET_STS_ERROR;
127 
128            IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_ERROR)
129            THEN
130                FND_MESSAGE.SET_NAME('QP','QP_INVALID_FORMULA');
131            END IF;
132 
133 --         RAISE;
134 
135     WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
136 
137            x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
138 
139 --         RAISE;
140 
141     WHEN OTHERS THEN
142            x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
143 
144         IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
145            THEN
146                FND_MSG_PUB.Add_Exc_Msg
147                   (G_PKG_NAME
148                   , 'Check Balance'
149                   );
150            END IF;
151 
152 --         RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
153 
154 END Delete;
155 
156 END QP_LIMIT_TRANSACTIONS_PVT;