DBA Data[Home] [Help]

PACKAGE BODY: APPS.IBY_AR_UTILS

Source


1 PACKAGE BODY IBY_AR_UTILS AS
2 /* $Header: ibyarutb.pls 120.7.12010000.3 2008/11/13 14:15:17 lmallick ship $*/
3 
4 
5  --
6  -- NOTE
7  --   For performance reasons this function returns a concatenation
8  --   of DocumentReceivable and DocumentReceivableCount
9  --
10  FUNCTION get_document_receivable
11  (
12  p_tangibleid      IN iby_trxn_summaries_all.tangibleid%TYPE,
13  p_trxntypeid      IN iby_trxn_summaries_all.trxntypeid%TYPE,
14  p_card_data_level IN iby_trxn_core.card_data_level%TYPE,
15  p_instrument_type IN iby_trxn_summaries_all.instrtype%TYPE
16  )
17  RETURN XMLType
18  IS
19 
20  BEGIN
21 
22   -- Stub out the code
23   RETURN NULL;
24 
25  END get_document_receivable;
26 
27  -- Overloaded form of the earlier API. This is transaction
28  -- extension driven. The earlier function has been obsoleted.
29  --
30  -- NOTE
31  --   For performance reasons this function returns a concatenation
32  --   of DocumentReceivable and DocumentReceivableCount
33  --
34  FUNCTION get_document_receivable
35  (
36  p_extension_id    IN iby_trxn_summaries_all.initiator_extension_id%TYPE,
37  p_trxntypeid      IN iby_trxn_summaries_all.trxntypeid%TYPE,
38  p_card_data_level IN iby_trxn_core.card_data_level%TYPE,
39  p_instrument_type IN iby_trxn_summaries_all.instrtype%TYPE
40  )
41  RETURN XMLType
42  IS
43    l_doc_rec  XMLType;
44 
45    CURSOR l_doc_rec_csr
46    (c_extension_id iby_trxn_summaries_all.initiator_extension_id%TYPE) IS
47      SELECT
48        XMLConcat(XMLAgg(document_headers),
49                  XMLElement("DocumentReceivableCount",count(trxn_extension_id)))
50      FROM iby_xml_fndcpt_doc_headers_v
51      WHERE trxn_extension_id = c_extension_id;
52  BEGIN
53 
54    -- only supported for capture trxn's
55    IF (NOT p_trxntypeid IN (8,9,100)) THEN
56      RETURN null;
57    END IF;
58 
59    IF (l_doc_rec_csr%ISOPEN) THEN
60      CLOSE l_doc_rec_csr;
61    END IF;
62 
63    OPEN l_doc_rec_csr(p_extension_id);
64    FETCH l_doc_rec_csr INTO l_doc_rec;
65    IF (l_doc_rec_csr%NOTFOUND) THEN
66      l_doc_rec := NULL;
67    END IF;
68    CLOSE l_doc_rec_csr;
69    RETURN l_doc_rec;
70 
71  END get_document_receivable;
72 
73  PROCEDURE call_get_payment_info(
74                p_payment_server_order_num IN
75                               ar_cash_receipts.payment_server_order_num%TYPE,
76                x_customer_trx_id OUT NOCOPY
77                               ar_receivable_applications.customer_trx_id%TYPE,
78                x_return_status   OUT NOCOPY VARCHAR2,
79                x_msg_count       OUT NOCOPY NUMBER,
80                x_msg_data        OUT NOCOPY VARCHAR2
81                ) IS
82 
83  l_receipt_header            ar_cash_receipts%ROWTYPE;
84  l_app_type  ar_receivable_applications.status%TYPE :='APP';
85  l_app_tbl_type AR_PUBLIC_UTILS.application_tbl_type;
86  l_app_rec_type ar_receivable_applications%ROWTYPE;
87 
88  BEGIN
89      x_customer_trx_id := 0;
90      x_return_status := FND_API.G_RET_STS_SUCCESS;
91 
92      IF p_payment_server_order_num IS NOT NULL THEN
93 
94          AR_PUBLIC_UTILS.get_payment_info(
95              p_payment_server_order_num,
96              l_app_type,
97              l_receipt_header,
98              l_app_tbl_type,
99              x_return_status,
100              x_msg_count,
101              x_msg_data);
102 
103          IF l_app_tbl_type.COUNT = 1 THEN
104             x_customer_trx_id := l_app_tbl_type(1).applied_customer_trx_id;
105          END IF;
106 
107      END IF;
108 
109  EXCEPTION
110     WHEN others THEN
111       x_msg_count := 1;
112       x_return_status := FND_API.G_RET_STS_ERROR;
113       x_msg_data := 'IBY_AR_UTILS.CALL_GET_PAYMENT_INFO ERROR: ' || x_msg_data;
114  END;
115 
116  FUNCTION call_get_payment_info
117  (p_payment_server_order_num IN
118    ar_cash_receipts.payment_server_order_num%TYPE)
119  RETURN ar_receivable_applications.customer_trx_id%TYPE
120  IS
121    l_trx_id ar_receivable_applications.customer_trx_id%TYPE;
122    l_ret_status VARCHAR2(2000);
123    l_msg_count NUMBER;
124    l_msg_data VARCHAR2(5000);
125  BEGIN
126 
127    call_get_payment_info
128      (p_payment_server_order_num,l_trx_id,l_ret_status,l_msg_count,l_msg_data);
129    RETURN l_trx_id;
130 
131  END call_get_payment_info;
132 
133  FUNCTION get_order_freight_amount(p_customer_trx_id IN
134    ar_invoice_header_v.customer_trx_id%TYPE)
135  RETURN NUMBER
136  IS
137    l_freight_amount NUMBER := 0;
138 
139    CURSOR c_header_freight
140    (ci_cust_trx_id ar_invoice_header_v.customer_trx_id%TYPE)
141    IS
142      SELECT extended_amount
143      FROM ar_invoice_lines_v
144      WHERE (link_to_cust_trx_line_id IS NULL)
145        AND (line_type = 'FREIGHT')
146        AND (customer_trx_id = ci_cust_trx_id);
147 
148    CURSOR c_freight_total
149    (ci_cust_trx_id ar_invoice_header_v.customer_trx_id%TYPE)
150    IS
151      SELECT SUM(extended_amount)
152      FROM ar_invoice_lines_v
153      WHERE
154        (line_type = 'FREIGHT')
155        AND (customer_trx_id = ci_cust_trx_id);
156 
157  BEGIN
158 
159    IF (c_header_freight%ISOPEN) THEN
160      CLOSE c_header_freight;
161    END IF;
162    IF (c_freight_total%ISOPEN) THEN
163      CLOSE c_freight_total;
164    END IF;
165 
166    OPEN c_header_freight(p_customer_trx_id);
167    FETCH c_header_freight INTO l_freight_amount;
168    IF (c_header_freight%NOTFOUND) THEN
169      l_freight_amount:=0;
170    END IF;
171    CLOSE c_header_freight;
172 
173    IF (l_freight_amount>0) THEN
174      RETURN l_freight_amount;
175    END IF;
176    --
177    -- if no header-level amount exists, then take
178    -- the sum of all line-level freight charges
179    --
180    OPEN c_freight_total(p_customer_trx_id);
181    FETCH c_freight_total INTO l_freight_amount;
182    IF (c_freight_total%NOTFOUND) THEN
183      l_freight_amount := 0;
184    END IF;
185    CLOSE c_freight_total;
186 
187    RETURN NVL(l_freight_amount,0);
188  END get_order_freight_amount;
189 
190  FUNCTION get_order_tax_amount
191   (p_customer_trx_id IN ar_invoice_header_v.customer_trx_id%TYPE,
192    p_tax_type        IN VARCHAR2)
193  RETURN NUMBER
194  IS
195    l_tax_total NUMBER := 0;
196 
197    CURSOR c_line_items
198    (ci_cust_trx_id ar_invoice_header_v.customer_trx_id%TYPE)
199    IS
200      SELECT customer_trx_line_id
201      FROM ar_invoice_lines_v
202      WHERE
203        ( line_type = 'LINE')
204        AND (customer_trx_id = ci_cust_trx_id);
205 
206  BEGIN
207 
208    FOR order_line IN c_line_items(p_customer_trx_id) LOOP
209      l_tax_total := get_line_tax_amount(p_customer_trx_id,
210                       order_line.customer_trx_line_id,
211                       p_tax_type);
212    END LOOP;
213 
214    RETURN l_tax_total;
215  END get_order_tax_amount;
216 
217  FUNCTION get_order_amount
218   (p_customer_trx_id IN ar_invoice_header_v.customer_trx_id%TYPE)
219  RETURN NUMBER
220  IS
221    l_order_total NUMBER := 0;
222 
223    CURSOR c_line_items
224    (ci_cust_trx_id ar_invoice_header_v.customer_trx_id%TYPE)
225    IS
226      SELECT extended_amount
227      FROM ar_invoice_lines_v
228      WHERE
229        ( line_type = 'LINE')
230        AND (customer_trx_id = ci_cust_trx_id);
231  BEGIN
232 
233    FOR order_line IN c_line_items(p_customer_trx_id) LOOP
234      l_order_total := l_order_total + NVL(order_line.extended_amount,0);
235    END LOOP;
236 
237    RETURN l_order_total;
238  END get_order_amount;
239 
240  FUNCTION get_line_tax_amount
241   (p_customer_trx_id IN ar_invoice_header_v.customer_trx_id%TYPE,
242    p_customer_trx_line_id IN ar_invoice_lines_v.customer_trx_line_id%TYPE,
243    p_tax_type             IN VARCHAR2)
244  RETURN NUMBER
245  IS
246 
247    l_sales_tax_total NUMBER := 0;
248    l_vat_tax_total NUMBER := 0;
249 
250    CURSOR c_tax_items
251    (ci_cust_trx_id ar_invoice_lines_v.customer_trx_id%TYPE,
252     ci_cust_trx_line_id ar_invoice_lines_v.link_to_cust_trx_line_id%TYPE)
253    IS
254      SELECT extended_amount, location_rate_id, location_segment_id
255      FROM ar_invoice_lines_v
256      WHERE
257        (line_type='TAX')
258        AND (customer_trx_id = ci_cust_trx_id)
259        AND (link_to_cust_trx_line_id = ci_cust_trx_line_id);
260 
261  BEGIN
262 
263    FOR tax_line IN c_tax_items(p_customer_trx_id,p_customer_trx_line_id) LOOP
264      IF (NOT tax_line.location_rate_id IS NULL)
265 	     OR (NOT tax_line.location_segment_id IS NULL)
266      THEN
267        l_sales_tax_total := l_sales_tax_total + NVL(tax_line.extended_amount,0);
268      ELSE
269        l_vat_tax_total := l_vat_tax_total + NVL(tax_line.extended_amount,0);
270      END IF;
271    END LOOP;
272 
273    IF (p_tax_type = G_TAX_TYPE_SALES) THEN
274      RETURN l_sales_tax_total;
275    ELSIF (p_tax_type = G_TAX_TYPE_VAT) THEN
276      RETURN l_vat_tax_total;
277    ELSE
278      RETURN 0;
279    END IF;
280 
281  END get_line_tax_amount;
282 
283  FUNCTION get_line_tax_rate
284   (p_customer_trx_id IN ar_invoice_header_v.customer_trx_id%TYPE,
285    p_customer_trx_line_id IN ar_invoice_lines_v.customer_trx_line_id%TYPE,
286    p_tax_type             IN VARCHAR2)
287  RETURN NUMBER
288  IS
289    l_sales_rate_total NUMBER := 0;
290    l_vat_rate_total NUMBER := 0;
291 
292    l_sales_count NUMBER := 0;
293    l_vat_count NUMBER := 0;
294 
295    CURSOR c_tax_items
296    (ci_cust_trx_id ar_invoice_lines_v.customer_trx_id%TYPE,
297     ci_cust_trx_line_id ar_invoice_lines_v.link_to_cust_trx_line_id%TYPE)
298    IS
299      SELECT location_rate_id, location_segment_id, tax_rate
300      FROM ar_invoice_lines_v
301      WHERE
302        (line_type='TAX')
303        AND (customer_trx_id = ci_cust_trx_id)
304        AND (link_to_cust_trx_line_id = ci_cust_trx_line_id);
305 
306  BEGIN
307 
308    FOR tax_line IN c_tax_items(p_customer_trx_id,p_customer_trx_line_id) LOOP
309      IF (NOT tax_line.location_rate_id IS NULL)
310 	     OR (NOT tax_line.location_segment_id IS NULL)
311 	 THEN
312        l_sales_rate_total := l_sales_rate_total + NVL(tax_line.tax_rate,0);
313        l_sales_count := l_sales_count + 1;
314      ELSE
315        l_vat_rate_total := l_vat_rate_total + NVL(tax_line.tax_rate,0);
316        l_vat_count := l_vat_count + 1;
317      END IF;
318    END LOOP;
319 
320    IF (p_tax_type = G_TAX_TYPE_SALES) THEN
321      RETURN (l_sales_rate_total/GREATEST(l_sales_count,1));
322    ELSIF (p_tax_type = G_TAX_TYPE_VAT) THEN
323      RETURN (l_vat_rate_total/GREATEST(l_vat_count,1));
324    ELSE
325      RETURN 0;
326    END IF;
327 
328  END get_line_tax_rate;
329 
330   -- Return: The Authorization Flag for the given Transaction Extension Id
331  PROCEDURE get_authorization_status
332  (p_trxn_extension_id  IN iby_fndcpt_tx_operations.trxn_extension_id%TYPE,
333   x_auth_flag   OUT NOCOPY VARCHAR2)
334  IS
335  BEGIN
336  SELECT decode(summ.status,   NULL,   'N',   'Y') AUTHORIZED_FLAG
337          into x_auth_flag
338    FROM iby_trxn_summaries_all summ
339       , iby_fndcpt_tx_operations op
340    WHERE summ.transactionid = op.transactionid
341       AND reqtype = 'ORAPMTREQ'
342       AND status IN(0,  100)
343       AND trxntypeid IN(2,  3, 20)
344       AND op.trxn_extension_id = p_trxn_extension_id
345       AND summ.trxnmid = (SELECT MAX(trxnmid)
346                           FROM iby_trxn_summaries_all summ1
347                              , iby_fndcpt_tx_operations op1
348                          WHERE summ1.transactionid = op1.transactionid
349                            AND summ1.reqtype = 'ORAPMTREQ'
350                            AND summ1.status IN(0, 100)
351                            AND summ1.trxntypeid IN(2,  3,   20)
352                            AND op1.trxn_extension_id = op.trxn_extension_id);
353       EXCEPTION
354         WHEN others THEN
355           x_auth_flag:='N';
356  END;
357 
358 END IBY_AR_UTILS;