DBA Data[Home] [Help]

PACKAGE BODY: APPS.IEX_DISPUTE_PVT

Source


1 PACKAGE BODY IEX_DISPUTE_PVT AS
2 /* $Header: iexvdisb.pls 120.4.12010000.5 2008/11/14 13:08:48 pnaveenk ship $ */
3 
4 --G_FILE_NAME CONSTANT VARCHAR2(12) := 'iexpimpb.pls';
5 G_PKG_NAME  CONSTANT VARCHAR2(30) := 'IEX_DISPUTE_PVT';
6 
7 --PG_DEBUG NUMBER(2) := TO_NUMBER(NVL(FND_PROFILE.value('IEX_DEBUG_LEVEL'), '20'));
8 PG_DEBUG NUMBER := FND_LOG.G_CURRENT_RUNTIME_LEVEL;
9 --Added parameters p_skip_workflow_flag and p_dispute_date
10 --for bug#6347547 by schekuri on 08-Nov-2007
11 -- Bug #6777367 bibeura 28-Jan-2008 Added parameter p_batch_source_name
12 PROCEDURE Create_Dispute(p_api_version     IN NUMBER,
13                          p_init_msg_list   IN VARCHAR2 := FND_API.G_FALSE,
14                          p_commit          IN VARCHAR2 := FND_API.G_FALSE,
15                          p_disp_header_rec IN IEX_DISPUTE_PUB.DISP_HEADER_REC,
16                          p_disp_line_tbl   IN IEX_DISPUTE_PUB.DISPUTE_LINE_TBL,
17 			 x_request_id      OUT NOCOPY NUMBER,
18                          x_return_status   OUT NOCOPY VARCHAR2,
19                          x_msg_count       OUT NOCOPY NUMBER,
20                          x_msg_data        OUT NOCOPY VARCHAR2,
21 			 p_skip_workflow_flag   IN VARCHAR2    DEFAULT 'N',
22 			 p_batch_source_name    IN VARCHAR2    DEFAULT NULL,
23 			 p_dispute_date	IN DATE	DEFAULT NULL) AS
24 
25 l_api_name            VARCHAR2(50)  := 'create_dispute';
26 l_api_version_number  NUMBER := 1.0;
27 l_request_id          NUMBER;
28 l_status              VARCHAR2(20);
29 l_dis_id              NUMBER; -- using this for the sequence
30 x                     VARCHAR(20);
31 l_return_status       VARCHAR2(1);
32 l_msg_count           NUMBER;
33 l_msg_data            VARCHAR2(32767);
34 l_init_msg_list       VARCHAR2(25) := p_init_msg_list;
35 l_commit              VARCHAR2(25) := p_commit;
36 
37 l_disp_header_rec     IEX_DISPUTE_PUB.DISP_HEADER_REC  := p_disp_header_rec;
38 lp_disp_line_tbl      IEX_DISPUTE_PUB.DISPUTE_LINE_TBL := p_disp_line_tbl;
39 l_disp_line_tbl       arw_cmreq_cover.Cm_line_Tbl_Type_cover;
40 l_cover_rec           arw_cmreq_cover.Cm_Line_Rec_Type_Cover;
41 i                     NUMBER;
42 lines_count           NUMBER;
43 l_line                NUMBER;
44 l_tax                 NUMBER;
45 l_freight             NUMBER;
46 
47 l_multiplier          NUMBER := -1;
48 l_creationSign        VARCHAR2(5);
49 l_credit_memo_type_id NUMBER;
50 
51 l_currency_code VARCHAR2(10) := 'USD';
52 l_request_url      VARCHAR2(1000);
53 l_transaction_url VARCHAR2(1000);
54 l_trans_act_url   VARCHAR2(1000);
55 l_org_id          NUMBER(15);
56 l_disp_component VARCHAR2(150);
57 
58 Cursor Get_Currency_Code Is
59    select invoice_currency_code, org_id
60      from ra_customer_trx
61     where customer_trx_id = l_disp_header_rec.cust_trx_id;
62 
63     BEGIN
64 
65       SAVEPOINT create_dispute_pvt;
66 
67       -- Initialize API return status to SUCCESS
68       x_return_status := FND_API.G_RET_STS_SUCCESS;
69 
70       -- Standard call to check for call compatibility.
71       IF NOT FND_API.Compatible_API_Call (l_api_version_number,
72                                           p_api_version,
73                                           l_api_name,
74                                           G_PKG_NAME)
75       THEN
76           RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
77       END IF;
78 
79       -- Initialize message list if p_init_msg_list is set to TRUE.
80       IF FND_API.to_Boolean(p_init_msg_list)
81       THEN
82           FND_MSG_PUB.initialize;
83       END IF;
84 
85       -- Debug Message
86 --      IF PG_DEBUG < 10  THEN
87       IF (FND_LOG.LEVEL_EVENT >= PG_DEBUG) THEN
88          IEX_DEBUG_PUB.logMessage('Create_Dispute: ' || 'PVT: ' || l_api_name || ' start');
89       END IF;
90       --
91       -- API body
92       --          --------------------------------------------------------
93 
94 
95 --    IF PG_DEBUG < 10  THEN
96     IF (FND_LOG.LEVEL_EVENT >= PG_DEBUG) THEN
97        IEX_DEBUG_PUB.logMessage('Create_Dispute: ' || 'IEX_DISPUTES_PVT: CreateDispute: getting creation_sign');
98     END IF;
99     -- added by ehuh for URL parameters
100     Open Get_Currency_Code;
101     Fetch Get_Currency_Code into l_currency_code, l_org_id;
102     Close Get_Currency_Code;
103 
104 
105     --Begin-fix bug #3817776-JYPARK-09/30/2005-change URL string to followin irec request
106 
107     IF l_disp_header_rec.dispute_section = 'LINES_SUBTOTAL' THEN
108       l_disp_component := 'DISP_SUBTOTAL';
109     ELSIF l_disp_header_rec.dispute_section = 'PERCENT' THEN
110       l_disp_component := 'DISP_TOTAL';
111     ELSIF l_disp_header_rec.dispute_section = 'SHIPPING' THEN
112       l_disp_component := 'DISP_SHIPPING';
113     ELSIF l_disp_header_rec.dispute_section = 'SPECIFIC_INVOICE_LINES' THEN
114       l_disp_component := 'DISP_SPEC_LINE';
115     ELSIF l_disp_header_rec.dispute_section = 'TAX' THEN
116       l_disp_component := 'DISP_TAX';
117     ELSIF l_disp_header_rec.dispute_section = 'TOTAL' THEN
118       l_disp_component := 'DISP_TOTAL';
119     END IF;
120 
121     l_request_url   := 'JSP:/OA_HTML/OA.jsp?akRegionCode=ARITEMPCMREQUESTDETAILSPAGE'||'&'||'akRegionApplicationId=222'||
122                               '&'||'Irtransactiontype=REQ'||'&'||'Ircustomertrxid='||l_disp_header_rec.cust_trx_id||
123                               -- '&'||'req_id='||'&'||'Ircurrencycode='||l_currency_code||'&'||'component=DISP_SPEC_LINE' ;
124                               '&'||'req_id='||'&'||'Ircurrencycode='||l_currency_code||
125                               '&'||'IcxPrintablePageButton=&OUnit='||l_org_id||'&NtfId=-&#NID-&' ||'component='||l_disp_component;
126 
127    l_transaction_url := 'JSP:/OA_HTML/OA.jsp?akRegionCode=ARITRANSACTIONDETAILSPAGE'||'&'||'akRegionApplicationId=222'||
128                                 '&'||'Irtransactiontype=INV'||'&'||'Ircustomertrxid='||l_disp_header_rec.cust_trx_id||'&'||'Irtermssequencenumber=1'||
129                                 --'&'||'Ircurrencycode='||l_currency_code;
130                                 '&'||'Ircurrencycode='||l_currency_code||'&IcxPrintablePageButton=&OUnit='||l_org_id||'&NtfId=-&#NID-';
131 
132     l_trans_act_url := 'JSP:/OA_HTML/OA.jsp?akRegionCode=ARITRANSACTIONDETAILSPAGE'||'&'||'akRegionApplicationId=222'||
133                                '&'||'Irtransactiontype=INV'||'&'||'Ircustomertrxid='||l_disp_header_rec.cust_trx_id||'&'||'Irtermssequencenumber=1'||
134                                --'&'||'Ircurrencycode='||l_currency_code||'&'||'AriInvDisplay=BOGUS_GO'||'&'||'AriInvDisplayType=INVOICE_ACTIVITIES';
135                                '&'||'Ircurrencycode='||l_currency_code||'&IcxPrintablePageButton=&OUnit='||l_org_id||'&NtfId=-&#NID-&AriInvDisplay=BOGUS_GO'||'&'||'AriInvDisplayType=INVOICE_ACTIVITIES';
136     --End-fix bug #3817776-JYPARK-09/30/2005-change URL string to followin irec request
137 
138     -- figure out NOCOPY creation sign
139     select TRX_TYPE.creation_sign, TRX_TYPE.CREDIT_MEMO_TYPE_ID into l_creationSign, l_credit_memo_type_id
140       from ra_cust_trx_types TRX_TYPE,
141            ra_customer_trx TRX
142      where TRX.CUST_TRX_TYPE_ID = TRX_TYPE.CUST_TRX_TYPE_ID and
143            TRX.Customer_Trx_ID = l_disp_header_rec.cust_trx_id;
144 
145     if l_credit_memo_type_id is not null then
146 
147         if l_creationSign = 'P' then
148             l_multiplier := -1;
149         elsif l_creationSign = 'N' then
150             l_multiplier := 1;
151         end if;
152 --        IF PG_DEBUG < 10  THEN
153         IF (FND_LOG.LEVEL_EVENT >= PG_DEBUG) THEN
154            IEX_DEBUG_PUB.logMessage('Create_Dispute: ' || 'IEX_DISPUTES_PVT: CreateDispute: creation_sign is ' || l_creationSign);
155         END IF;
156 --        IF PG_DEBUG < 10  THEN
157         IF (FND_LOG.LEVEL_EVENT >= PG_DEBUG) THEN
158            IEX_DEBUG_PUB.logMessage('Create_Dispute: ' || 'IEX_DISPUTES_PVT: CreateDispute: multiplier is ' || l_multiplier);
159         END IF;
160 
161           -- add this to avoid bug# 2166002
162          select decode(l_disp_header_rec.line_amt, FND_API.G_MISS_NUM, 0, l_disp_header_rec.line_amt) into l_line
163            from dual;
164          select decode(l_disp_header_rec.tax_amt, FND_API.G_MISS_NUM, 0, l_disp_header_rec.tax_amt) into l_tax
165            from dual;
166          select decode(l_disp_header_rec.freight_amt, FND_API.G_MISS_NUM, 0, l_disp_header_rec.freight_amt) into l_freight
167            from dual;
168 
169           if lp_disp_line_tbl is not null then
170               lines_count := lp_disp_line_tbl.count;
171 --              IF PG_DEBUG < 10  THEN
172               IF (FND_LOG.LEVEL_EVENT >= PG_DEBUG) THEN
173                  IEX_DEBUG_PUB.logMessage('Create_Dispute: ' || 'lines count is ' || lines_count);
174               END IF;
175 
176               if lines_count >= 1 then
177                   FOR  i in 1..lines_count
178                   LOOP
179                      BEGIN
180                         l_disp_line_tbl(i).customer_trx_line_id := lp_disp_line_tbl(i).customer_trx_line_id;
181                         l_disp_line_tbl(i).extended_amount      := lp_disp_line_tbl(i).extended_amount * l_multiplier;
182                         l_disp_line_tbl(i).quantity_credited    := lp_disp_line_tbl(i).quantity_credited * l_multiplier;
183 
184                         -- price should be positive no matter what
185                             SELECT UNIT_SELLING_PRICE
186                               INTO l_disp_line_tbl(i).price
187                               FROM ra_customer_trx_lines
188                              WHERE customer_trx_line_id = l_disp_line_tbl(i).customer_trx_line_id;
189                         EXCEPTION
190                         WHEN NO_DATA_FOUND THEN
191                           FND_MESSAGE.SET_NAME('IEX', 'IEX_NO_UNIT_PRICE');
192                           FND_MSG_PUB.Add;
193                           x_return_status := FND_API.G_RET_STS_ERROR;
194                           RAISE FND_API.G_EXC_ERROR;
195                      END  ;
196                      --   dbms_output.put_line('price for customer_trx_id is'||to_char(l_disp_line_tbl(i).price)) ;
197 
198                    END LOOP ;
199               end if;
200           end if;
201 
202 --        IF PG_DEBUG < 10  THEN
203         IF (FND_LOG.LEVEL_EVENT >= PG_DEBUG) THEN
204            IEX_DEBUG_PUB.logMessage('Create_Dispute: ' || 'IEX_DISPUTES_PVT: CreateDispute: Calling AR Create Request API');
205         END IF;
206         AR_CREDIT_MEMO_API_PUB.create_request(
207                 p_api_version          => l_api_version_number,
208                 p_init_msg_list        => FND_API.G_TRUE,
209                 p_commit               => FND_API.G_TRUE,
210                 p_validation_level     => FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
211                 x_return_status        => l_return_status,
212                 x_msg_count            => l_msg_count,
213                 x_msg_data             => l_msg_data,
214                 p_customer_trx_id      => l_disp_header_rec.cust_trx_id,
215                 p_line_credit_flag     => l_disp_header_rec.line_credit_flag,
216                 p_line_amount          => l_line * l_multiplier,
217                 p_tax_amount           => l_tax * l_multiplier,
218                 p_freight_amount       => l_freight * l_multiplier,
219                 p_cm_reason_code       => l_disp_header_rec.cm_reason_code,
220                 p_comments             => l_disp_header_rec.COMMENTS,
221 		p_internal_comment     => p_disp_header_rec.INTERNAL_COMMENT,   --Added for bug#7376422 by PNAVEENK on 4-sep-2008
222                 p_orig_trx_number      => l_disp_header_rec.orig_trx_number,
223                 p_tax_ex_cert_num      => l_disp_header_rec.tax_ex_cert_num,
224                 p_request_url          => l_request_url,     --'AR_CREDIT_MEMO_API_PUB.print_default_page',
225                 p_transaction_url      => l_transaction_url, --'AR_CREDIT_MEMO_API_PUB.print_default_page',
226                 p_trans_act_url        => l_trans_act_url,   --'AR_CREDIT_MEMO_API_PUB.print_default_page',
227                 p_cm_line_tbl          => l_disp_line_tbl,
228                 p_skip_workflow_flag   => p_skip_workflow_flag, --'N', --Modified for bug#6347547 by schekuri on 08-Nov-2007
229 		p_batch_source_name    => p_batch_source_name,  -- Bug #6777367 bibeura 28-Jan-2008
230                 x_request_id           => l_request_id,
231 		p_org_id               => l_org_id, --Bug4696678. Fix by LKKUMAR on 26-Oct-2005. Pass Org_id.
232 		p_dispute_date	       => p_dispute_date  --Added for bug#6347547 by schekuri on 08-Nov-2007
233 		);
234 
235           IF l_return_status = FND_API.G_RET_STS_SUCCESS THEN
236             SELECT iex_disputes_s.nextval INTO l_dis_id FROM dual;
237 
238 --           IF PG_DEBUG < 10  THEN
239            IF (FND_LOG.LEVEL_EVENT >= PG_DEBUG) THEN
240               IEX_DEBUG_PUB.logMessage('Create_Dispute: ' || 'IEX_DISPUTES_PVT: CreateDispute: Inserting a dispute row in IEX_DISPUTES');
241            END IF;
242            IEX_DISPUTES_PKG.Insert_Row(x_rowid              => x,
243                                        p_dispute_id         => l_dis_id,
244                                        p_last_update_date   => sysdate,
245                                        p_last_updated_by    => FND_GLOBAL.USER_ID,
246                                        p_creation_date      => sysdate,
247                                        p_created_by         => FND_GLOBAL.USER_ID,
248                                        p_last_update_login  => FND_GLOBAL.USER_ID,
249                                        p_cm_request_id      => l_request_id,
250                                        p_dispute_section    => p_disp_header_rec.dispute_section,
251                                        p_delinquency_id     => p_disp_header_rec.delinquency_id);
252            ELSE
253 --              IF PG_DEBUG < 10  THEN
254               IF (FND_LOG.LEVEL_EVENT >= PG_DEBUG) THEN
255                  IEX_DEBUG_PUB.logMessage('Create_Dispute: ' || 'IEX_DISPUTES_PVT: CreateDispute: Insert Failed');
256               END IF;
257               FND_MESSAGE.SET_NAME('IEX', 'IEX_DISPUTE_FAILED');
258               FND_MSG_PUB.Add;
259               x_return_status := FND_API.G_RET_STS_ERROR;
260               RAISE FND_API.G_EXC_ERROR;
261 
262           END IF ;
263 
264     else  -- no credit memo associated with transaction
265 --          IF PG_DEBUG < 10  THEN
266           IF (FND_LOG.LEVEL_EVENT >= PG_DEBUG) THEN
267              IEX_DEBUG_PUB.logMessage('Create_Dispute: ' || 'IEX_DISPUTES_PVT: CreateDispute: Credit Memo Configuration failure');
268           END IF;
269           FND_MESSAGE.SET_NAME('IEX', 'IEX_NO_CREDIT_MEMO');
270           FND_MSG_PUB.Add;
271           x_return_status := FND_API.G_RET_STS_ERROR;
272           RAISE FND_API.G_EXC_ERROR;
273 
274     end if;
275 
276        IF FND_API.to_Boolean( p_commit )
277        THEN
278         COMMIT WORK;
279        END IF;
280 
281       x_request_id    := l_request_id;
282       x_return_status := l_return_status;
283       x_msg_count     := l_msg_count;
284       x_msg_data      := l_msg_data;
285      -- End of API body
286 
287      -- Debug Message
288 --     IF PG_DEBUG < 10  THEN
289      IF (FND_LOG.LEVEL_EVENT >= PG_DEBUG) THEN
290         IEX_DEBUG_PUB.logMessage('Create_Dispute: ' || 'PVT: ' || l_api_name || ' end');
291      END IF;
292 
293       -- Standard call to get message count and if count is 1, get message info.
294       FND_MSG_PUB.Count_And_Get(p_count  => x_msg_count,
295                                 p_data   => x_msg_data);
296     EXCEPTION
297     WHEN FND_API.G_EXC_ERROR THEN
298       ROLLBACK TO create_dispute_pvt;
299         x_return_status := FND_API.G_RET_STS_ERROR;
300         FND_MSG_PUB.Count_And_Get(p_count => x_msg_count, p_data => x_msg_data);
301     WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
302       ROLLBACK TO create_dispute_pvt;
303         x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
304         FND_MSG_PUB.Count_And_Get(p_count => x_msg_count, p_data => x_msg_data);
305     WHEN OTHERS THEN
306       ROLLBACK TO create_dispute_pvt;
307         x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
308         IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
309         THEN
310           FND_MSG_PUB.Add_Exc_Msg(G_PKG_NAME, l_api_name);
311         END IF;
312         FND_MSG_PUB.Count_And_Get(p_count => x_msg_count, p_data => x_msg_data);
313 
314 END create_dispute;
315 
316 PROCEDURE is_delinquency_dispute(p_api_version         IN  NUMBER,
317                                  p_init_msg_list       IN  VARCHAR2 ,
318                                  p_delinquency_id      IN  NUMBER,
319                                  x_return_status       OUT NOCOPY VARCHAR2,
320                                  x_msg_count           OUT NOCOPY NUMBER,
321                                  x_msg_data            OUT NOCOPY VARCHAR2) AS
322 
323 l_api_name           VARCHAR2(50)  := 'is_delinquency_dispute';
324 l_api_version_number NUMBER := 1.0;
325 l_delinquency_id     NUMBER := p_delinquency_id;
326 l_count              NUMBER := 0 ;
327 l_request_id         NUMBER ;
328 l_status             VARCHAR(20) ;
329 
330 BEGIN
331       -- Standard Start of API savepoint
332       SAVEPOINT is_delinquency_dispute_pvt;
333 
334       -- Initialize API return status to SUCCESS
335       x_return_status := FND_API.G_RET_STS_SUCCESS;
336 
337       -- Standard call to check for call compatibility.
338       IF NOT FND_API.Compatible_API_Call (l_api_version_number,
339                                           p_api_version,
340                                           l_api_name,
341                                           G_PKG_NAME)
342       THEN
343           RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
344       END IF;
345 
346       -- Initialize message list if p_init_msg_list is set to TRUE.
347       IF FND_API.to_Boolean( p_init_msg_list )
348       THEN
349           FND_MSG_PUB.initialize;
350       END IF;
351 
352       -- Debug Message
353 --      IF PG_DEBUG < 10  THEN
354       IF (FND_LOG.LEVEL_EVENT >= PG_DEBUG) THEN
355          IEX_DEBUG_PUB.logMessage('is_delinquency_dispute: ' || 'PVT: ' || l_api_name || ' start');
356       END IF;
357 
358       --
359       -- API body
360       --
361 
362       select count(1) into l_count
363       from   iex_disputes
364       where  DELINQUENCY_ID = l_delinquency_id ;
365 
366       IF (l_count = 0 ) THEN
367         --dbms_output.put_line('No dispute exist for this delinquency') ;
368         FND_MESSAGE.Set_Name('IEX_NO_DISP_FOR_DEL', 'IEX_NO_DISP_FOR_DEL');
369         FND_MSG_PUB.Add;
370         x_return_status := 'F' ;
371       ELSE
372         select cm_request_id into l_request_id
373         from   iex_disputes
374         where  delinquency_id = l_delinquency_id ;
375 
376         select status into l_status
377         from   ra_cm_requests
378         where  request_id = l_request_id ;
379 
380         IF l_status = 'PENDING_APPROVAL' or l_status = 'APPROVED_PEND_COMP' then
381             x_return_status := 'T' ;
382         ELSIF l_status = 'COMPLETE' or l_status = 'NOT_APPROVED'  THEN
383             FND_MESSAGE.Set_Name('IEX_STATUS_COMPLETE_DEL', 'IEX_STATUS_COMPLETE_DEL');
384             FND_MSG_PUB.Add;
385             x_return_status := 'F' ;
386         ELSE
387             FND_MESSAGE.Set_Name('IEX_STATUS_NOEXIST_DEL', 'IEX_STATUS_NOEXIST_DEL');
388             FND_MSG_PUB.Add;
389             x_return_status := 'F' ;
390         END IF ;
391 
392       END IF ;
393 
394      -- End of API body
395 
396      -- Debug Message
397 --     IF PG_DEBUG < 10  THEN
398      IF (FND_LOG.LEVEL_EVENT >= PG_DEBUG) THEN
399         IEX_DEBUG_PUB.logMessage('is_delinquency_dispute: ' || 'PVT: ' || l_api_name || ' end');
400      END IF;
401 
402       -- Standard call to get message count and if count is 1, get message info.
403       FND_MSG_PUB.Count_And_Get
404       (  p_count          =>   x_msg_count,
405          p_data           =>   x_msg_data
406       );
407 
408       EXCEPTION
409     WHEN FND_API.G_EXC_ERROR THEN
410       ROLLBACK TO is_delinquency_dispute_pvt;
411         x_return_status := FND_API.G_RET_STS_ERROR;
412         FND_MSG_PUB.Count_And_Get(p_count => x_msg_count, p_data => x_msg_data);
413     WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
414       ROLLBACK TO is_delinquency_dispute_pvt;
415         x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
416         FND_MSG_PUB.Count_And_Get(p_count => x_msg_count, p_data => x_msg_data);
417     WHEN OTHERS THEN
418       ROLLBACK TO is_delinquency_dispute_pvt;
419         x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
420         IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
421         THEN
422           FND_MSG_PUB.Add_Exc_Msg(G_PKG_NAME, l_api_name);
423         END IF;
424         FND_MSG_PUB.Count_And_Get(p_count => x_msg_count, p_data => x_msg_data);
425 
426 
427 
428 END is_delinquency_dispute;
429 
430 PROCEDURE CANCEL_DISPUTE (p_api_version     IN NUMBER,
431                               p_commit          IN VARCHAR2,
432 			      p_dispute_id      IN NUMBER,
433 			      p_cancel_comments IN VARCHAR2,
434                               x_return_status   OUT NOCOPY VARCHAR2,
435                               x_msg_count       OUT NOCOPY NUMBER,
436                               x_msg_data        OUT NOCOPY VARCHAR2
437 			     )  IS
438 
439 l_item_type			VARCHAR2(100);
440 l_result			VARCHAR2(100);
441 l_status			VARCHAR2(8);
442 l_action_id			NUMBER := 0;
443 l_function_mode			VARCHAR2(10);
444 l_debug_mesg			VARCHAR2(240);
445 l_approver_id			NUMBER;
446 l_reason_code			VARCHAR2(45);
447 l_currency_code			VARCHAR2(15);
448 l_total_credit_to_invoice	NUMBER;
449 l_result_flag			VARCHAR2(1);
450 l_customer_trx_id		NUMBER;
451 
452 l_request_id			NUMBER;
453 new_dispute_date		DATE;
454 new_dispute_amt			NUMBER;
455 remove_from_dispute_amt		NUMBER;
456 l_org_id			NUMBER;
457 l_document_id			NUMBER;
458 l_approver_display_name		VARCHAR2(100);
459 l_note_id			NUMBER;
460 l_note_text			ar_notes.text%TYPE;
461 l_notes				wf_item_attribute_values.text_value%TYPE;
462 
463 l_last_updated_by		NUMBER;
464 l_last_update_login		NUMBER;
465 l_last_update_date		DATE;
466 l_creation_date			DATE;
467 l_created_by			NUMBER;
468 errmsg                          VARCHAR2(32767);
469 l_default_note_type		varchar2(240) := FND_PROFILE.VALUE('AST_NOTES_DEFAULT_TYPE');
470 l_party_id			number;
471 l_cust_account_id		number;
472 l_customer_site_use_id		number;
473 l_payment_schedule_id		number;
474 i                               number;
475 l_context_tab			IEX_NOTES_PVT.CONTEXTS_TBL_TYPE;
476 l_return_status             	VARCHAR2(1);
477 l_msg_count                 	NUMBER;
478 l_msg_data                  	VARCHAR2(32767);
479 
480 CURSOR ps_cur(p_customer_trx_id NUMBER) IS
481 SELECT payment_schedule_id,
482   due_date,
483   amount_in_dispute,
484   dispute_date
485 FROM ar_payment_schedules ps
486 WHERE ps.customer_trx_id = p_customer_trx_id;
487 
488 CURSOR c_item_type(l_item_key NUMBER) IS
489 SELECT item_type
490 FROM wf_items
491 WHERE item_key = l_item_key
492  AND item_type IN('ARCMREQ',   'ARAMECM');
493 
494 cursor get_partyid(p_cust_acct_id number) is
495 	select party_id
496 	from hz_cust_accounts
497 	where cust_account_id = p_cust_acct_id;
498 
499 Cursor  Get_billto(p_cust_trx_id number) Is
500             select bill_to_site_use_id
501               from ra_customer_trx
502               where customer_trx_id = p_cust_trx_id;
503 
504 Cursor Get_paymentid(p_cust_trx_id number) Is
505            select customer_id,payment_schedule_id
506              from ar_payment_schedules
507              where customer_trx_id = p_cust_trx_id;
508 
509 BEGIN
510 
511   IF (FND_LOG.LEVEL_EVENT >= PG_DEBUG) THEN
512 	IEX_DEBUG_PUB.logMessage('**** BEGIN IEX_DISPUTE_PVT.CANCEL_DISPUTE ************');
513   END IF;
514 
515   SAVEPOINT CANCEL_DISPUTE;
516 
517   -- Initialize API return status to success
518   l_return_status := FND_API.G_RET_STS_SUCCESS;
519 
520   OPEN c_item_type(p_dispute_id);
521   FETCH c_item_type
522   INTO l_item_type;
523   CLOSE c_item_type;
524 
525   IF (FND_LOG.LEVEL_EVENT >= PG_DEBUG) THEN
526 	IEX_DEBUG_PUB.logMessage('CANCEL_DISPUTE: l_item_type : '|| l_item_type);
527   END IF;
528 
529   IF l_item_type IS NOT NULL THEN
530 
531     l_function_mode := 'RUN';
532 
533     BEGIN
534 
535       BEGIN
536 
537         SELECT org_id
538         INTO l_org_id
539         FROM ra_cm_requests_all
540         WHERE request_id = p_dispute_id;
541 
542 	IF (FND_LOG.LEVEL_EVENT >= PG_DEBUG) THEN
543 		IEX_DEBUG_PUB.logMessage('CANCEL_DISPUTE: l_org_id: ' || l_org_id);
544 	END IF;
545 	----------------------------------------------------------
546         l_debug_mesg := 'Get the org_id for the credit memo request';
547         ----------------------------------------------------------
548 
549         mo_global.set_policy_context('S',   l_org_id);
550         IF (FND_LOG.LEVEL_EVENT >= PG_DEBUG) THEN
551 		IEX_DEBUG_PUB.logMessage('CANCEL_DISPUTE: l_org_id: ' || l_org_id);
552 	END IF;
553 
554       EXCEPTION
555       WHEN others THEN
556         ROLLBACK TO CANCEL_DISPUTE;
557 	x_return_status := FND_API.G_RET_STS_ERROR;
558 	IF (FND_LOG.LEVEL_EVENT >= PG_DEBUG) THEN
559 		IEX_DEBUG_PUB.logMessage('CANCEL_DISPUTE:  - exception');
560 		errmsg := SQLERRM;
561 	        IEX_DEBUG_PUB.logMessage('CANCEL_DISPUTE:  - errmsg='||errmsg);
562 	END IF;
563 	RAISE FND_API.G_EXC_ERROR;
564 
565       END;
566       ---------------------------------------------------------
567       l_debug_mesg := 'Remove Transaction from Dispute';
568       ---------------------------------------------------------
569 
570       IF(l_function_mode = 'RUN') THEN
571 
572         l_customer_trx_id := wf_engine.getitemattrnumber(l_item_type,   p_dispute_id,   'CUSTOMER_TRX_ID');
573         IF (FND_LOG.LEVEL_EVENT >= PG_DEBUG) THEN
574 		IEX_DEBUG_PUB.logMessage('CANCEL_DISPUTE: l_customer_trx_id: ' || l_customer_trx_id);
575 	END IF;
576 
577         SELECT total_amount * -1
578         INTO remove_from_dispute_amt
579         FROM ra_cm_requests
580         WHERE request_id = p_dispute_id;
581 
582         IF (FND_LOG.LEVEL_EVENT >= PG_DEBUG) THEN
583 		IEX_DEBUG_PUB.logMessage('CANCEL_DISPUTE: remove_from_dispute_amt: ' || remove_from_dispute_amt);
584 	END IF;
585 
586         BEGIN
587 
588           FOR ps_rec IN ps_cur(l_customer_trx_id)
589           LOOP
590 
591             new_dispute_amt := ps_rec.amount_in_dispute -remove_from_dispute_amt;
592 
593             IF new_dispute_amt = 0 THEN
594               new_dispute_date := NULL;
595             ELSE
596               new_dispute_date := ps_rec.dispute_date;
597             END IF;
598 
599             IF (FND_LOG.LEVEL_EVENT >= PG_DEBUG) THEN
600 		IEX_DEBUG_PUB.logMessage('CANCEL_DISPUTE: new_dispute_date: '||new_dispute_date);
601 	    END IF;
602             arp_process_cutil.update_ps(p_ps_id			=> ps_rec.payment_schedule_id,
603 					p_due_date		=> ps_rec.due_date,
604 					p_amount_in_dispute	=> new_dispute_amt,
605 					p_dispute_date		=> new_dispute_date,
606 					p_update_dff		=> 'N',
607 					p_attribute_category	=> NULL,
608 					p_attribute1		=> NULL,
609 					p_attribute2		=> NULL,
610 					p_attribute3		=> NULL,
611 					p_attribute4		=> NULL,
612 					p_attribute5		=> NULL,
613 					p_attribute6		=> NULL,
614 					p_attribute7		=> NULL,
615 					p_attribute8		=> NULL,
616 					p_attribute9		=> NULL,
617 					p_attribute10		=> NULL,
618 					p_attribute11		=> NULL,
619 					p_attribute12		=> NULL,
620 					p_attribute13		=> NULL,
621 					p_attribute14		=> NULL,
622 					p_attribute15		=> NULL);
623             IF (FND_LOG.LEVEL_EVENT >= PG_DEBUG) THEN
624 		IEX_DEBUG_PUB.logMessage('CANCEL_DISPUTE: After arp_process_cutil.update_ps for p_ps_id => ' || ps_rec.payment_schedule_id);
625 	    END IF;
626           END LOOP;
627 
628           IF (FND_LOG.LEVEL_EVENT >= PG_DEBUG) THEN
629 		IEX_DEBUG_PUB.logMessage('CANCEL_DISPUTE: End of FOR LOOP');
630 	  END IF;
631         END;
632 
633       END IF;  --IF(l_function_mode = 'RUN') THEN
634 
635     EXCEPTION
636     WHEN others THEN
637       ROLLBACK TO CANCEL_DISPUTE;
638       x_return_status := FND_API.G_RET_STS_ERROR;
639 	IF (FND_LOG.LEVEL_EVENT >= PG_DEBUG) THEN
640 		IEX_DEBUG_PUB.logMessage('CANCEL_DISPUTE:  - exception');
641 		errmsg := SQLERRM;
642 	        IEX_DEBUG_PUB.logMessage('CANCEL_DISPUTE:  - errmsg='||errmsg);
643 	END IF;
644 	RAISE FND_API.G_EXC_ERROR;
645 
646     END;
647 
648     IF (FND_LOG.LEVEL_EVENT >= PG_DEBUG) THEN
649 	IEX_DEBUG_PUB.logMessage('CANCEL_DISPUTE: Before calling wf_engine.itemstatus');
650     END IF;
651     wf_engine.itemstatus(itemtype => l_item_type,   itemkey => p_dispute_id,   status => l_status,   result => l_result);
652 
653     IF (FND_LOG.LEVEL_EVENT >= PG_DEBUG) THEN
654 	IEX_DEBUG_PUB.logMessage('CANCEL_DISPUTE: after workflow status check ' || l_status || ' item key' || p_dispute_id);
655     END IF;
656 
657     IF l_status <> wf_engine.eng_completed THEN
658       IF (FND_LOG.LEVEL_EVENT >= PG_DEBUG) THEN
659 	  IEX_DEBUG_PUB.logMessage('CANCEL_DISPUTE: process has not completed and status =>' || l_status);
660 	  IEX_DEBUG_PUB.logMessage('CANCEL_DISPUTE: Calling wf_engine.abortprocess');
661       END IF;
662       BEGIN
663         wf_engine.abortprocess(itemtype => l_item_type,   itemkey => p_dispute_id);
664         wf_engine.itemstatus(itemtype => l_item_type,   itemkey => p_dispute_id,   status => l_status,   result => l_result);
665         IF (FND_LOG.LEVEL_EVENT >= PG_DEBUG) THEN
666 		IEX_DEBUG_PUB.logMessage('CANCEL_DISPUTE: Abort process has completed and status =>' || l_status);
667 	END IF;
668 
669       EXCEPTION
670       WHEN others THEN
671         ROLLBACK TO CANCEL_DISPUTE;
672 	x_return_status := FND_API.G_RET_STS_ERROR;
673 	IF (FND_LOG.LEVEL_EVENT >= PG_DEBUG) THEN
674 		IEX_DEBUG_PUB.logMessage('CANCEL_DISPUTE:  - exception');
675 		IEX_DEBUG_PUB.logMessage('CANCEL_DISPUTE: abort process ' || l_item_type || 'itemkey ' || p_dispute_id || 'has failed');
676 		errmsg := SQLERRM;
677 	        IEX_DEBUG_PUB.logMessage('CANCEL_DISPUTE:  - errmsg='||errmsg);
678 	END IF;
679 	RAISE FND_API.G_EXC_ERROR;
680 
681       END;
682 
683       ---------------------------------------------------------------------
684       l_debug_mesg := 'Insert Rejected Response notes';
685       ---------------------------------------------------------------------
686       BEGIN
687         IF (FND_LOG.LEVEL_EVENT >= PG_DEBUG) THEN
688 		IEX_DEBUG_PUB.logMessage('CANCEL_DISPUTE: Insert Rejected Response notes');
689 	END IF;
690         arp_global.init_global;
691 
692         l_last_updated_by := arp_global.user_id;
693         l_last_update_login := arp_global.last_update_login;
694         IF (FND_LOG.LEVEL_EVENT >= PG_DEBUG) THEN
695 		IEX_DEBUG_PUB.logMessage('CANCEL_DISPUTE: l_last_updated_by: ' || l_last_updated_by || ' l_last_update_login: '|| l_last_update_login);
696 	END IF;
697         l_document_id := wf_engine.getitemattrnumber(l_item_type,   p_dispute_id,   'WORKFLOW_DOCUMENT_ID');
698         IF (FND_LOG.LEVEL_EVENT >= PG_DEBUG) THEN
699 		IEX_DEBUG_PUB.logMessage('CANCEL_DISPUTE: l_document_id: '||l_document_id);
700 	END IF;
701         l_customer_trx_id := wf_engine.getitemattrnumber(l_item_type,   p_dispute_id,   'CUSTOMER_TRX_ID');
702         IF (FND_LOG.LEVEL_EVENT >= PG_DEBUG) THEN
703 		IEX_DEBUG_PUB.logMessage('CANCEL_DISPUTE: l_customer_trx_id: '||l_customer_trx_id);
704 	END IF;
705 
706         if l_customer_trx_id is null then
707 		SELECT customer_trx_id
708 		INTO l_customer_trx_id
709 		FROM ra_cm_requests
710 		WHERE request_id = l_document_id;
711 
712 		IF (FND_LOG.LEVEL_EVENT >= PG_DEBUG) THEN
713 			IEX_DEBUG_PUB.logMessage('CANCEL_DISPUTE: l_customer_trx_id: '||l_customer_trx_id);
714 		END IF;
715 	end if;
716 
717 
718         l_notes := wf_engine.getitemattrtext(l_item_type,   p_dispute_id,   'NOTES');
719 
720         IF (FND_LOG.LEVEL_EVENT >= PG_DEBUG) THEN
721 		IEX_DEBUG_PUB.logMessage('CANCEL_DISPUTE: l_notes: '||l_notes);
722 	END IF;
723 
724         fnd_message.set_name('AR',   'AR_WF_REJECTED_RESPONSE');
725         fnd_message.set_token('REQUEST_ID',   to_char(p_dispute_id));
726         fnd_message.set_token('APPROVER',   fnd_global.user_id);
727 
728         l_note_text := fnd_message.GET;
729         IF (FND_LOG.LEVEL_EVENT >= PG_DEBUG) THEN
730 		IEX_DEBUG_PUB.logMessage('CANCEL_DISPUTE: l_note_text: ' ||l_note_text);
731 	END IF;
732 
733         IF l_notes IS NOT NULL THEN
734           l_note_text := substrb(l_note_text || ' "' || l_notes || '"',   1,   2000);
735         END IF;
736 
737         BEGIN
738           ---------------------------------------------------------------------------
739           l_debug_mesg := 'Insert call topic notes';
740           ---------------------------------------------------------------------------
741 
742           arp_global.init_global;
743 
744           l_created_by := fnd_global.user_id;
745           l_creation_date := sysdate;
746           l_last_update_login := arp_global.last_update_login;
747           l_last_update_date := sysdate;
748           l_last_updated_by := fnd_global.user_id;
749           IF (FND_LOG.LEVEL_EVENT >= PG_DEBUG) THEN
750 		IEX_DEBUG_PUB.logMessage('CANCEL_DISPUTE: Before calling arp_notes_pkg.insert_cover');
751 	  END IF;
752           arp_notes_pkg.insert_cover(
753 		p_note_type              => 'MAINTAIN',
754 		p_text                   => l_note_text,
755 		p_customer_call_id       => null,
756 		p_customer_call_topic_id => null,
757 		p_call_action_id         => NULL,
758 		p_customer_trx_id        => l_customer_trx_id,
759 		p_note_id                => l_note_id,
760 		p_last_updated_by        => l_last_updated_by,
761 		p_last_update_date       => l_last_update_date,
762 		p_last_update_login      => l_last_update_login,
763 		p_created_by             => l_created_by,
764 		p_creation_date          => l_creation_date);
765 
766         EXCEPTION
767         WHEN others THEN
768           ROLLBACK TO CANCEL_DISPUTE;
769 	  x_return_status := FND_API.G_RET_STS_ERROR;
770 		IF (FND_LOG.LEVEL_EVENT >= PG_DEBUG) THEN
771 			IEX_DEBUG_PUB.logMessage('CANCEL_DISPUTE:  - exception');
772 			errmsg := SQLERRM;
773 			IEX_DEBUG_PUB.logMessage('CANCEL_DISPUTE:  - errmsg='||errmsg);
774 		END IF;
775 	  RAISE FND_API.G_EXC_ERROR;
776         END;
777 	IF (FND_LOG.LEVEL_EVENT >= PG_DEBUG) THEN
778 		IEX_DEBUG_PUB.logMessage('CANCEL_DISPUTE: After calling arp_notes_pkg.insert_cover');
779         END IF;
780 
781       END;
782     END IF;  --IF l_status <> wf_engine.eng_completed THEN
783 
784    -- inserting a note
785 	if p_cancel_comments is not null then
786 
787                 IF (FND_LOG.LEVEL_EVENT >= PG_DEBUG) THEN
788 		   iex_debug_pub.LogMessage('CANCEL_DISPUTE: Going to build context for note...');
789                 END IF;
790 
791 		i := 1;
792 		l_context_tab(i).context_type := 'IEX_DISPUTE';
793 		l_context_tab(i).context_id := p_dispute_id;
794 		i := i + 1;
795 
796 		Open Get_paymentid(l_customer_trx_id);
797                 Fetch Get_paymentid INTO l_cust_account_id,l_payment_schedule_id;
798                 Close Get_paymentid;
799 
800 	        Open get_partyid(l_cust_account_id);
801 		Fetch get_partyid INTO l_party_id;
802                 Close get_partyid;
803 
804 		l_context_tab(i).context_type := 'PARTY';
805 		l_context_tab(i).context_id := l_party_id;
806 		i := i + 1;
807 
808 		/* adding account into note context */
809 		l_context_tab(i).context_type := 'IEX_ACCOUNT';
810 		l_context_tab(i).context_id := l_cust_account_id;
811 		i := i + 1;
812 
813 		Open Get_billto(l_customer_trx_id);
814                 Fetch Get_billto INTO l_customer_site_use_id;
815                 Close Get_billto;
816 
817 		l_context_tab(i).context_type := 'IEX_BILLTO';
818 		l_context_tab(i).context_id := l_customer_site_use_id;
819 		i := i + 1;
820 
821 		l_context_tab(i).context_type := 'IEX_INVOICES';
822 		l_context_tab(i).context_id := l_payment_schedule_id;
823 		i := i + 1;
824 
825 		FOR i IN 1..l_context_tab.COUNT LOOP
826                     IF (FND_LOG.LEVEL_EVENT >= PG_DEBUG) THEN
827 			iex_debug_pub.LogMessage('CANCEL_DISPUTE: l_context_tab(' || i || ').context_type = ' || l_context_tab(i).context_type);
828 			iex_debug_pub.LogMessage('CANCEL_DISPUTE: l_context_tab(' || i || ').context_id = ' || l_context_tab(i).context_id);
829                    END IF;
830 		END LOOP;
831 
832 		IF (FND_LOG.LEVEL_EVENT >= PG_DEBUG) THEN
833 		  iex_debug_pub.LogMessage('CANCEL_DISPUTE: Calling IEX_NOTES_PVT.Create_Note...');
834                 END IF;
835 
836 		IEX_NOTES_PVT.Create_Note(
837 			P_API_VERSION => 1.0,
838 			P_INIT_MSG_LIST => 'F',
839 			P_COMMIT => 'F',
840 			P_VALIDATION_LEVEL => 100,
841 			X_RETURN_STATUS => l_return_status,
842 			X_MSG_COUNT => l_msg_count,
843 			X_MSG_DATA => l_msg_data,
844 			p_source_object_id => p_dispute_id,
845 			p_source_object_code => 'IEX_DISPUTE',
846 			p_note_type => l_default_note_type,
847 			--p_note_type => 'IEX_DISPUTE',
848 			p_notes	=> p_cancel_comments,
849 			p_contexts_tbl => l_context_tab,
850 			x_note_id => l_note_id);
851 
852 		--X_PRORESP_REC.NOTE_ID := l_note_id;
853 
854 		IF (FND_LOG.LEVEL_EVENT >= PG_DEBUG) THEN
855 		      iex_debug_pub.LogMessage('CANCEL_DISPUTE: After call to IEX_NOTES_PVT.Create_Note');
856 		      iex_debug_pub.LogMessage('CANCEL_DISPUTE: Status = ' || L_RETURN_STATUS);
857                 END IF;
858 
859 		-- check for errors
860 		IF l_return_status<>FND_API.G_RET_STS_SUCCESS THEN
861 			IF (FND_LOG.LEVEL_EVENT >= PG_DEBUG) THEN
862 			     iex_debug_pub.LogMessage('CANCEL_DISPUTE: IEX_NOTES_PVT.Create_Note failed');
863                         END IF;
864 			RAISE FND_API.G_EXC_ERROR;
865 		END IF;
866 	else
867         IF (FND_LOG.LEVEL_EVENT >= PG_DEBUG) THEN
868 		  iex_debug_pub.LogMessage('CANCEL_DISPUTE: no note to save');
869         END IF;
870 	end if;
871 
872   END IF;  --IF l_item_type IS NOT NULL THEN
873 
874   -- Standard check for p_commit
875       IF FND_API.to_Boolean( p_commit )
876       THEN
877           COMMIT WORK;
878       END IF;
879 
880       x_return_status := l_return_status;
881       -- Standard call to get message count and if count is 1, get message info
882    	FND_MSG_PUB.Count_And_Get(
883                    p_encoded => FND_API.G_FALSE,
884                    p_count => x_msg_count,
885                    p_data => x_msg_data);
886 
887       IF (FND_LOG.LEVEL_EVENT >= PG_DEBUG) THEN
888 	IEX_DEBUG_PUB.logMessage('**** END IEX_DISPUTE_PVT.CANCEL_DISPUTE ************');
889       END IF;
890 
891 EXCEPTION
892         WHEN FND_API.G_EXC_ERROR THEN
893 		ROLLBACK TO CANCEL_DISPUTE;
894 		x_return_status := FND_API.G_RET_STS_ERROR;
895 		IF (FND_LOG.LEVEL_EVENT >= PG_DEBUG) THEN
896 			IEX_DEBUG_PUB.logMessage('CANCEL_DISPUTE:  - exception');
897 			errmsg := SQLERRM;
898 			IEX_DEBUG_PUB.logMessage('CANCEL_DISPUTE:  - errmsg='||errmsg);
899 		END IF;
900 		FND_MSG_PUB.Count_And_Get(p_count => x_msg_count, p_data => x_msg_data);
901 	WHEN others THEN
902           ROLLBACK TO CANCEL_DISPUTE;
903 		x_return_status := FND_API.G_RET_STS_ERROR;
904 		IF (FND_LOG.LEVEL_EVENT >= PG_DEBUG) THEN
905 			IEX_DEBUG_PUB.logMessage('CANCEL_DISPUTE:  - exception');
906 			errmsg := SQLERRM;
907 			IEX_DEBUG_PUB.logMessage('CANCEL_DISPUTE:  - errmsg='||errmsg);
908 		END IF;
909 
910 END CANCEL_DISPUTE;
911 
912 END IEX_DISPUTE_PVT ;