1 package body iby_querycc_pkg as
2 /*$Header: ibyqrccb.pls 120.2 2011/02/18 11:50:46 lmallick ship $*/
3
4 PROCEDURE listvpsid (merchant_id_in IN VARCHAR2,
5 batch_id_in IN VARCHAR2,
6 vendor_id_in IN NUMBER,
7 vendor_key_in IN VARCHAR2,
8 viby_id OUT NOCOPY VARCHAR2)
9
10 IS
11
12 loc_vpsid iby_batches_all.VPSBatchID%TYPE;
13 BEGIN
14
15 loc_vpsid := NULL;
16
17 SELECT distinct VPSBatchID
18 INTO loc_vpsid
19 FROM iby_batches_all
20 WHERE payeeid = merchant_id_in AND
21 BatchID = batch_id_in AND
22 bepid = vendor_id_in AND
23 bepkey = vendor_key_in;
24
25 viby_id := loc_vpsid;
26
27 EXCEPTION
28 WHEN NO_DATA_FOUND THEN
29 IF loc_vpsid IS NULL
30 THEN
31 raise_application_error(-20000, 'IBY_20209#', FALSE);
32 --raise_application_error(-20209,'No VPSBatchID for MerchBatchID');
33 END IF;
34
35 END listvpsid;
36
37
38 PROCEDURE checkunqorder
39 (order_id_in IN VARCHAR2,
40 merchant_id_in IN VARCHAR2,
41 payment_operation IN VARCHAR2,
42 trxn_type_in IN NUMBER,
43 check_status_out OUT NOCOPY NUMBER,
44 parent_trace_number_out OUT NOCOPY VARCHAR2,
45 bepid_out OUT NOCOPY NUMBER,
46 bepkey_out OUT NOCOPY VARCHAR2,
47 trxnid_out OUT NOCOPY NUMBER,
48 trxnref_out OUT NOCOPY VARCHAR2
49 )
50
51 IS
52
53 loc_status iby_transactions_v.status%TYPE;
54
55 CURSOR s1(i_reqtype1 iby_trxn_summaries_all.reqtype%type,
56 i_reqtype2 iby_trxn_summaries_all.reqtype%type DEFAULT
57 NULL)
58 IS
59 SELECT status, bepid, bepkey, transactionid, trxnref
60 FROM iby_trxn_summaries_all
61 WHERE tangibleid = order_id_in
62 AND payeeid = merchant_id_in
63 AND reqtype IN (i_reqtype1, i_reqtype2)
64 AND reqtype IS NOT NULL -- to ignore the 2nd arg
65 ORDER BY reqdate DESC;
66 -- first one is always the latest
67
68 CURSOR s2(tx1 NUMBER,
69 tx2 NUMBER DEFAULT NULL) IS
70 SELECT tracenumber
71 FROM iby_transactions_v
72 WHERE order_Id = order_id_in
73 AND merchant_id = merchant_id_in
74 AND trxn_type IN (tx1, tx2)
75 ORDER BY time DESC;
76
77 BEGIN
78
79 -- Depending on the payment operation the trxn_type varies
80 -- So we need to select based on this set
81 -- For an explanation of various trxn_types refer the design doc
82
83 IF (s1%ISOPEN) THEN
84 CLOSE s1;
85 END IF;
86
87 IF (s2%ISOPEN) THEN
88 CLOSE s2;
89 END IF;
90
91 IF (SUBSTR(payment_operation,1,4)='AUTH') OR (payment_operation='ORAPMTREQ') THEN
92 OPEN s1('ORAPMTREQ');
93 ELSIF (payment_operation = 'CAPTURE') OR (payment_operation='ORAPMTCAPTURE') THEN
94 OPEN s1('ORAPMTCAPTURE');
95 ELSIF (payment_operation = 'RETURN' OR
96 payment_operation = 'CREDIT') OR (payment_operation='ORAPMTRETURN' OR payment_operation='ORAPMTCREDIT') THEN
97 OPEN s1('ORAPMTRETURN', 'ORAPMTCREDIT');
98 ELSIF (payment_operation = 'VOID') OR (payment_operation='ORAPMTVOID') THEN
99 -- can't use this as offline void
100 -- will put the trxntypeid to be void
101 OPEN s1('ORAPMTVOID');
102 ELSIF (payment_operation = 'REVERSE') OR (payment_operation='ORAPMTREVERSE') THEN
103 OPEN s1('ORAPMTREVERSE');
104 END IF;
105
106 -- Fetch the first row to check the status
107 FETCH s1 INTO loc_status, bepid_out, bepkey_out, trxnid_out, trxnref_out;
108
109 IF s1%FOUND THEN
110 IF (loc_status = 0 OR -- previous successful ops, duplicate
111 loc_status = 1 OR -- communication error, retry
112 loc_status = 9999 OR -- timeout during ICX
113 loc_status = 2 OR -- If duplicate already
114 loc_status = 9 OR -- gateway transitional
115 loc_status = 14 OR -- cancelled, gateway
116 loc_status = 100 OR -- in an open batch
117 --loc_status = 101 OR -- batch comm error ;
118 -- enable when we have more time for regression testing
119 loc_status = 114 OR -- cancelled in an open batch
120 loc_status = 111 OR -- in a pending batch
121 loc_status = 109 OR -- in the midst of a patch close
122 loc_status = 11) THEN -- already scheduled offline
123 check_status_out := loc_status;
124 ELSE
125 check_status_out := -1; -- For any other error resubmit operation
126 END IF;
127 ELSE
128 check_status_out := -1; -- new order
129 bepid_out := -1;
130 bepkey_out := NULL;
131 END IF;
132
133 CLOSE s1;
134
135 -- get parent trace number for Concord gateway
136 IF payment_operation = 'CAPTURE' OR payment_operation = 'REVERSE' THEN
137 OPEN s2(2); -- authonly
138 ELSIF payment_operation = 'RETURN' THEN
139 OPEN s2(3, 8); -- authcapture/capture
140 ELSIF payment_operation = 'VOID' THEN
141 OPEN s2(trxn_type_in); -- trxn type to be void
142 ELSE
143 parent_trace_number_out := '';
144 RETURN;
145 END IF;
146
147 -- Fetch the first row to check the status
148 FETCH s2 INTO parent_trace_number_out;
149
150 IF s2%NOTFOUND THEN
151 parent_trace_number_out := NULL;
152 END IF;
153
154 CLOSE s2;
155
156 END checkunqorder;
157
158
159
160 PROCEDURE checkunqbatch (batch_id_in IN VARCHAR2,
161 merchant_id_in IN VARCHAR2,
162 stat OUT NOCOPY NUMBER,
163 viby_bid OUT NOCOPY VARCHAR2)
164
165
166 AS
167
168 loc_stat iby_batches_all.BatchStatus%TYPE;
169 loc_viby_bid iby_batches_all.VPSBatchID%TYPE;
170
171 CURSOR b1 IS
172 SELECT BatchStatus, VPSBatchID
173 FROM iby_batches_all
174 WHERE BatchID = batch_id_in
175 AND payeeid = merchant_id_in
176 ORDER BY BatchCloseDate DESC;
177
178
179 BEGIN
180
181 IF b1%ISOPEN THEN
182 CLOSE b1;
183 END IF;
184
185 OPEN b1;
186 FETCH b1 INTO loc_stat, loc_viby_bid;
187
188 IF b1%FOUND THEN
189 IF (loc_stat = 0 or loc_stat = 3 or loc_stat = 11) THEN
190 -- Batch successful,
191 -- Duplicate already marked. Return Duplicate batch id
192 -- already scheduled offline
193 stat := loc_stat;
194 CLOSE b1;
195 return;
196 ELSIF (loc_stat = 1 or loc_stat = 9999
197 or loc_stat = 6 or loc_stat = 7) THEN
198 -- communication error.
199 -- time out at Payment Server during ICX.
200 -- batch partial succeed
201 -- batch fail
202 --pass the VPSBatchID to payment systems in oraclosebatch
203 stat := loc_stat;
204 viby_bid := loc_viby_bid;
205 CLOSE b1;
206 return;
207 END IF;
208 END IF;
209
210 -- Batch not found
211 CLOSE b1;
212 stat := -1;
213
214 END checkunqbatch;
215
216
217
218 PROCEDURE getorderid (merchant_id_in IN VARCHAR2,
219 vendor_suffix IN VARCHAR2,
220 order_id_out OUT NOCOPY VARCHAR2)
221
222 AS
223
224 loc_order_id iby_trxn_summaries_all.Tangibleid%TYPE;
225
226 CURSOR o1 IS
227 SELECT order_Id
228 FROM iby_transactions_v trn, iby_bepinfo ven
229 WHERE merchant_id = merchant_id_in
230 AND UPPER(ven.suffix) = UPPER(vendor_suffix)
231 AND ven.bepid = trn.vendor_id
232 AND status = 0
233 AND trxn_type IN (8, 9, 5, 10) -- only looking at capture/return
234 AND merchbatchid IS NULL
235
236 ORDER BY time ASC;
237
238
239
240 BEGIN
241
242 OPEN o1;
243
244 -- Fetch the first row to get oldest order_id not settled
245 FETCH o1 INTO loc_order_id;
246
247 IF o1%FOUND THEN
248 order_id_out := loc_order_id;
249 CLOSE o1;
250 return;
251 END IF;
252
253 CLOSE o1;
254 order_id_out := -1;
255
256
257 END getorderid;
258
259 PROCEDURE getTrxnInfo
260 (
261 trxnid_in IN iby_trxn_summaries_all.transactionid%TYPE,
262 trxntypeid_in IN iby_trxn_summaries_all.trxntypeid%TYPE,
263 trxntypeid_aux_in IN iby_trxn_summaries_all.trxntypeid%TYPE,
264 status_in IN iby_trxn_summaries_all.status%TYPE,
265 status_aux_in IN iby_trxn_summaries_all.status%TYPE,
266 amount_out OUT NOCOPY iby_trxn_summaries_all.amount%TYPE,
267 currency_out OUT NOCOPY iby_trxn_summaries_all.currencynamecode%TYPE,
268 status_out OUT NOCOPY iby_trxn_summaries_all.status%TYPE
269 )
270 IS
271 BEGIN
272 SELECT amount, currencynamecode, status
273 INTO amount_out,currency_out, status_out
274 FROM iby_trxn_summaries_all
275 WHERE (transactionid=trxnid_in) AND (trxntypeid IN (trxntypeid_in,trxntypeid_aux_in))
276 AND (status in (status_in,status_aux_in));
277 EXCEPTION
278
279 WHEN no_data_found THEN
280 raise_application_error(-20000, 'IBY_20534#ID='||trxnid_in||'#TYPE='||trxntypeid_in||'/'||trxntypeid_aux_in||'#STATUS='||status_in||'/'||status_aux_in, FALSE);
281
282 END getTrxnInfo;
283
284 END iby_querycc_pkg;