| 6147 |
rajveer |
1 |
#!/usr/bin/python
|
|
|
2 |
'''
|
|
|
3 |
It is used to process transactions for which the payment
|
|
|
4 |
was received but the order was not processed.
|
|
|
5 |
|
|
|
6 |
@author: Rajveer
|
|
|
7 |
'''
|
|
|
8 |
import optparse
|
|
|
9 |
import sys
|
| 6219 |
rajveer |
10 |
import datetime
|
| 9321 |
anupam.sin |
11 |
import base64, re
|
| 7141 |
rajveer |
12 |
from datetime import timedelta
|
| 6235 |
rajveer |
13 |
from elixir import *
|
| 7141 |
rajveer |
14 |
from sqlalchemy.sql import func
|
|
|
15 |
import urllib
|
|
|
16 |
import httplib
|
| 9321 |
anupam.sin |
17 |
from xml.dom.minidom import parseString
|
| 7175 |
rajveer |
18 |
from shop2020.utils.EmailAttachmentSender import mail, mail_html
|
| 8788 |
rajveer |
19 |
from shop2020.model.v1.order.impl.model.UserWalletHistory import UserWalletHistory
|
|
|
20 |
from shop2020.utils.Utils import to_java_date, to_py_date
|
|
|
21 |
from shop2020.clients.PaymentClient import PaymentClient
|
| 9321 |
anupam.sin |
22 |
from shop2020.model.v1.order.impl.model.BaseOrder import BaseOrder
|
| 6147 |
rajveer |
23 |
|
| 9321 |
anupam.sin |
24 |
from shop2020.clients.TransactionClient import TransactionClient
|
| 21376 |
kshitij.so |
25 |
import sys
|
| 6147 |
rajveer |
26 |
|
|
|
27 |
|
|
|
28 |
if __name__ == '__main__' and __package__ is None:
|
|
|
29 |
import os
|
|
|
30 |
sys.path.insert(0, os.getcwd())
|
| 7986 |
anupam.sin |
31 |
from datetime import date, timedelta
|
| 7967 |
anupam.sin |
32 |
from shop2020.clients.HelperClient import HelperClient
|
| 7167 |
rajveer |
33 |
from shop2020.thriftpy.model.v1.order.ttypes import RechargeOrderStatus,\
|
|
|
34 |
OrderType
|
| 6254 |
rajveer |
35 |
from shop2020.model.v1.order.impl.DataAccessors import get_recharge_orders_for_status, update_recharge_order_status,\
|
| 7147 |
rajveer |
36 |
update_recharge_transaction_status, get_next_invoice_number
|
| 7128 |
rajveer |
37 |
from shop2020.model.v1.order.impl import DataService
|
| 7147 |
rajveer |
38 |
from shop2020.model.v1.order.impl.DataService import RechargeTransaction, HotspotStore,\
|
| 8788 |
rajveer |
39 |
WalletForCompany, WalletHistoryForCompany, RechargeCollection, Company, HotspotServiceMatrix,\
|
| 14143 |
amit.gupta |
40 |
RechargeVoucherTracker, SpiceTransactionHistory, DtrBatchCreditTracker
|
| 6235 |
rajveer |
41 |
from shop2020.model.v1.order.impl.model.RechargeOrder import RechargeOrder
|
| 9321 |
anupam.sin |
42 |
from shop2020.model.v1.order.impl.RechargeService import checkTransactionStatus, getRefunds, getBalance,\
|
| 11486 |
kshitij.so |
43 |
getRechargeClient, checkTransactionStatus, getAllTransactions, getRechargeStatus
|
| 8788 |
rajveer |
44 |
from sqlalchemy.sql.expression import and_, or_, desc, not_, distinct, cast, between
|
| 6147 |
rajveer |
45 |
|
|
|
46 |
def main():
|
|
|
47 |
parser = optparse.OptionParser()
|
|
|
48 |
parser.add_option("-H", "--host", dest="hostname",
|
|
|
49 |
default="localhost",
|
|
|
50 |
type="string", help="The HOST where the DB server is running",
|
|
|
51 |
metavar="HOST")
|
| 6235 |
rajveer |
52 |
parser.add_option("-r", "--refund", dest="refund",
|
|
|
53 |
action="store_true",
|
|
|
54 |
help="")
|
|
|
55 |
parser.add_option("-u", "--unknown", dest="unknown",
|
|
|
56 |
action="store_true",
|
|
|
57 |
help="")
|
| 6452 |
rajveer |
58 |
parser.add_option("-a", "--authorized", dest="authorized",
|
| 6451 |
rajveer |
59 |
action="store_true",
|
|
|
60 |
help="")
|
| 7141 |
rajveer |
61 |
parser.add_option("-c", "--collection", dest="collection",
|
|
|
62 |
action="store_true",
|
|
|
63 |
help="")
|
| 9321 |
anupam.sin |
64 |
parser.add_option("-m", "--mobisoc", dest="mobisoc",
|
|
|
65 |
action="store_true",
|
|
|
66 |
help="")
|
| 8788 |
rajveer |
67 |
parser.add_option("-R", "--recon", dest="recon",
|
|
|
68 |
action="store_true",
|
|
|
69 |
help="")
|
| 7147 |
rajveer |
70 |
parser.add_option("-T", "--topup", dest="topup",
|
|
|
71 |
action="store_true",
|
|
|
72 |
help="")
|
| 6451 |
rajveer |
73 |
parser.add_option("-t", "--txn-id", dest="txn_id",
|
|
|
74 |
type="int",
|
|
|
75 |
help="mark the transaction(recharge order id) TXN_ID as successful",
|
|
|
76 |
metavar="TXN_ID")
|
| 6235 |
rajveer |
77 |
|
| 6147 |
rajveer |
78 |
(options, args) = parser.parse_args()
|
|
|
79 |
if len(args) != 0:
|
|
|
80 |
parser.error("You've supplied extra arguments. Are you sure you want to run this program?")
|
| 6254 |
rajveer |
81 |
DataService.initialize(db_hostname=options.hostname, echoOn=True)
|
|
|
82 |
|
| 6235 |
rajveer |
83 |
if options.refund:
|
|
|
84 |
processRefunds()
|
| 8788 |
rajveer |
85 |
if options.recon:
|
|
|
86 |
processRecon()
|
| 6235 |
rajveer |
87 |
if options.unknown:
|
|
|
88 |
processUnknownTransactions()
|
| 6451 |
rajveer |
89 |
if options.authorized:
|
|
|
90 |
processAuthorizedTransactions(options.txn_id)
|
| 7141 |
rajveer |
91 |
if options.collection:
|
| 7983 |
rajveer |
92 |
wallet = WalletForCompany.query.filter(WalletForCompany.id == 3).one()
|
|
|
93 |
oldBalance = wallet.amount
|
| 21376 |
kshitij.so |
94 |
try:
|
|
|
95 |
newBalance = getBalance()
|
|
|
96 |
except:
|
| 23132 |
amit.gupta |
97 |
mail_html("cnc.center@shop2020.in", "5h0p2o2o", ["amit.gupta@saholic.com", "kshitij.sood@saholic.com", "manoj.bajaj@spiceretail.co.in","amit.tyagi@spiceretail.co.in"], "Unable to fetch balance from spice digital api.Collection not created.", "", [])
|
| 21376 |
kshitij.so |
98 |
sys.exit(1)
|
| 7983 |
rajveer |
99 |
wallet.amount = newBalance
|
|
|
100 |
session.commit()
|
|
|
101 |
|
| 7141 |
rajveer |
102 |
d = datetime.datetime.now()
|
| 7144 |
rajveer |
103 |
d = d + timedelta(days = -1)
|
| 7141 |
rajveer |
104 |
compute_recharge_collection(d)
|
| 7983 |
rajveer |
105 |
compute_website_recharge_collection(d, oldBalance, newBalance)
|
| 7147 |
rajveer |
106 |
if options.topup:
|
|
|
107 |
topup_company_wallet(1,100000)
|
| 9321 |
anupam.sin |
108 |
|
|
|
109 |
if options.mobisoc:
|
|
|
110 |
reconcileWithMobisoc()
|
|
|
111 |
|
|
|
112 |
def reconcileWithMobisoc():
|
|
|
113 |
startTime = datetime.datetime.now() + timedelta(days = -1)
|
|
|
114 |
endTime = datetime.datetime.now()
|
| 11490 |
kshitij.so |
115 |
startTime = startTime.replace(hour=00,minute=00,second=00)
|
|
|
116 |
endTime = endTime.replace(hour=00,minute=00,second=00)
|
| 9321 |
anupam.sin |
117 |
websiteOrders = {}
|
|
|
118 |
storeOrders = {}
|
|
|
119 |
spiceOrders = {}
|
|
|
120 |
rechargeOrders = RechargeOrder.query.filter(not_(RechargeOrder.status.in_([RechargeOrderStatus.INIT, RechargeOrderStatus.PAYMENT_FAILED, RechargeOrderStatus.PAYMENT_PENDING]))).filter(RechargeOrder.creationTimestamp.between(startTime, endTime)).all()
|
|
|
121 |
rechargeTransactions = RechargeTransaction.query.filter(not_(RechargeTransaction.status.in_([RechargeOrderStatus.INIT, RechargeOrderStatus.PAYMENT_FAILED, RechargeOrderStatus.PAYMENT_PENDING]))).filter(RechargeTransaction.transactionTime.between(startTime, endTime)).all()
|
|
|
122 |
for rechargeOrder in rechargeOrders:
|
|
|
123 |
websiteOrders[int(rechargeOrder.id)] = rechargeOrder
|
|
|
124 |
|
|
|
125 |
for rechargeTxn in rechargeTransactions:
|
|
|
126 |
storeOrders[int(rechargeTxn.id)] = rechargeTxn
|
|
|
127 |
|
|
|
128 |
transactions = getAllTransactions(startTime, endTime)
|
| 6235 |
rajveer |
129 |
|
| 9321 |
anupam.sin |
130 |
for txn in transactions:
|
|
|
131 |
try:
|
|
|
132 |
print "in for loop"
|
|
|
133 |
respCode = txn.getElementsByTagName('transactionResponseCode')[0].childNodes[0].data
|
|
|
134 |
merchantTid = txn.getElementsByTagName('merchantTid')[0].childNodes[0].data
|
|
|
135 |
spiceTid = txn.getElementsByTagName('spiceTid')[0].childNodes[0].data
|
|
|
136 |
rechargeTime = txn.getElementsByTagName('rechargeDate')[0].childNodes[0].data
|
|
|
137 |
sth = SpiceTransactionHistory()
|
|
|
138 |
sth.rechargeTime = rechargeTime
|
|
|
139 |
sth.orderId = merchantTid
|
|
|
140 |
sth.spiceTID = spiceTid
|
|
|
141 |
sth.reponseCode = respCode
|
|
|
142 |
session.commit()
|
|
|
143 |
spiceOrders[int(merchantTid)] = respCode
|
|
|
144 |
except:
|
|
|
145 |
continue
|
|
|
146 |
|
|
|
147 |
print "Length of storeOrders : " + str(len(storeOrders.keys()))
|
|
|
148 |
print "Length of websiteOrders : " + str(len(websiteOrders.keys()))
|
|
|
149 |
print "Length of spiceOrders : " + str(len(spiceOrders.keys()))
|
|
|
150 |
|
|
|
151 |
for id in spiceOrders.keys():
|
|
|
152 |
spiceorder = spiceOrders.get(id)
|
|
|
153 |
order = storeOrders.get(id)
|
|
|
154 |
if order is None:
|
|
|
155 |
order = websiteOrders.get(id)
|
|
|
156 |
|
|
|
157 |
if order:
|
|
|
158 |
if spiceorder == '00' and order.status in (5, 6):
|
|
|
159 |
removed = storeOrders.pop(id, -1)
|
|
|
160 |
print str(removed)
|
|
|
161 |
if removed == -1:
|
|
|
162 |
removed = websiteOrders.pop(id, -1)
|
|
|
163 |
if removed != -1:
|
|
|
164 |
removed = spiceOrders.pop(id, -1)
|
|
|
165 |
|
|
|
166 |
elif spiceorder in ('STO','US', 'UP') and order.status in (3, 4, 5, 10, 6, 7, 8):
|
|
|
167 |
removed = storeOrders.pop(id, -1)
|
|
|
168 |
if removed == -1:
|
|
|
169 |
removed = websiteOrders.pop(id, -1)
|
|
|
170 |
if removed != -1:
|
|
|
171 |
removed = spiceOrders.pop(id, -1)
|
|
|
172 |
|
|
|
173 |
elif spiceorder not in ('STO','US', 'UP', '00') and order.status in (4, 6, 7, 8) :
|
|
|
174 |
removed = storeOrders.pop(id, -1)
|
|
|
175 |
if removed == -1:
|
|
|
176 |
removed = websiteOrders.pop(id, -1)
|
|
|
177 |
if removed != -1:
|
|
|
178 |
removed = spiceOrders.pop(id, -1)
|
|
|
179 |
|
|
|
180 |
print "Length of storeOrders : " + str(len(storeOrders.keys()))
|
|
|
181 |
print "Length of websiteOrders : " + str(len(websiteOrders.keys()))
|
|
|
182 |
print "Length of spiceOrders : " + str(len(spiceOrders.keys()))
|
|
|
183 |
|
|
|
184 |
if len(websiteOrders.keys()) > 0:
|
|
|
185 |
for woid in websiteOrders.keys():
|
|
|
186 |
try:
|
|
|
187 |
result = checkTransactionStatus("", str(woid))
|
|
|
188 |
except Exception:
|
| 11486 |
kshitij.so |
189 |
continue
|
|
|
190 |
if result[0]:
|
| 9321 |
anupam.sin |
191 |
removed = websiteOrders.pop(woid, -1)
|
|
|
192 |
|
|
|
193 |
if len(storeOrders.keys()) > 0:
|
|
|
194 |
for soid in storeOrders.keys():
|
|
|
195 |
try:
|
|
|
196 |
result = checkTransactionStatus("", str(soid))
|
|
|
197 |
except Exception:
|
| 11486 |
kshitij.so |
198 |
continue
|
|
|
199 |
if result[0]:
|
| 9321 |
anupam.sin |
200 |
removed = storeOrders.pop(soid, -1)
|
|
|
201 |
|
|
|
202 |
if len(spiceOrders.keys()) > 0:
|
|
|
203 |
for id in spiceOrders.keys():
|
|
|
204 |
order = RechargeOrder.query.filter(RechargeOrder.id == id).first()
|
|
|
205 |
if order is None:
|
|
|
206 |
order = RechargeTransaction.query.filter(RechargeTransaction.id == id).first()
|
|
|
207 |
if order:
|
|
|
208 |
spiceorder = spiceOrders.get(id)
|
|
|
209 |
if spiceorder == '00' and order.status in (5, 6):
|
|
|
210 |
removed = spiceOrders.pop(id, -1)
|
|
|
211 |
|
|
|
212 |
elif spiceorder in ('STO','US', 'UP') and order.status in (3, 4, 10, 5, 6, 7, 8):
|
|
|
213 |
removed = spiceOrders.pop(id, -1)
|
|
|
214 |
|
|
|
215 |
elif spiceorder not in ('STO','US', 'UP', '00') and order.status in (4, 6, 7, 8) :
|
|
|
216 |
removed = spiceOrders.pop(id, -1)
|
|
|
217 |
|
|
|
218 |
maildata = "<html><body><b>Website Recharges</b><br><br>"
|
|
|
219 |
for woid in websiteOrders.keys():
|
|
|
220 |
wo = websiteOrders.get(woid)
|
| 11486 |
kshitij.so |
221 |
try:
|
| 11489 |
kshitij.so |
222 |
recharge_status, desc = getRechargeStatus('',wo.id)
|
| 11486 |
kshitij.so |
223 |
except:
|
| 11489 |
kshitij.so |
224 |
recharge_status, desc= "",""
|
|
|
225 |
maildata = maildata + str(wo.id) + " : " + str(RechargeOrderStatus._VALUES_TO_NAMES.get(wo.status)) + " : "+recharge_status+" "+desc+"<br>"
|
| 9321 |
anupam.sin |
226 |
|
|
|
227 |
maildata = maildata + "<br><br><b>Store recharges</b><br><br>"
|
|
|
228 |
for soid in storeOrders.keys():
|
|
|
229 |
so = storeOrders.get(soid)
|
| 11486 |
kshitij.so |
230 |
try:
|
| 11489 |
kshitij.so |
231 |
recharge_status, desc = getRechargeStatus('',so.id)
|
| 11486 |
kshitij.so |
232 |
except:
|
| 11489 |
kshitij.so |
233 |
recharge_status,desc = "",""
|
|
|
234 |
maildata = maildata + str(so.id) + " : " + str(RechargeOrderStatus._VALUES_TO_NAMES.get(wo.status)) + " : "+recharge_status+" "+desc+"<br>"
|
| 9321 |
anupam.sin |
235 |
|
|
|
236 |
maildata = maildata + "<br><br><b>Spice Orders</b><br><br>"
|
|
|
237 |
for id in spiceOrders.keys():
|
|
|
238 |
maildata = maildata + str(id) + " : " + str(spiceOrders.get(id)) + "<br>"
|
|
|
239 |
|
|
|
240 |
maildata = maildata + "</body></html>"
|
| 11118 |
kshitij.so |
241 |
mail_html("cnc.center@shop2020.in", "5h0p2o2o", ["anikendra.das@saholic.com", "kshitij.sood@shop2020.in"], "Mobisoc Recharge Reconciliation for Date:- " + startTime.strftime("%d-%m-%Y"), maildata, [])
|
| 9321 |
anupam.sin |
242 |
|
|
|
243 |
|
| 8788 |
rajveer |
244 |
def processRecon():
|
|
|
245 |
cdate = datetime.datetime.now() + timedelta(days = -1)
|
|
|
246 |
startTime = datetime.datetime(cdate.year, cdate.month, cdate.day)
|
|
|
247 |
endTime = startTime + timedelta(days=1)
|
|
|
248 |
|
| 8795 |
rajveer |
249 |
|
| 8788 |
rajveer |
250 |
'''
|
|
|
251 |
A - All such orders for which we have attempted the recharge and recharge is either successful or unknown.
|
|
|
252 |
B - All such orders for which we have attempted the recharge and we received the refund after this time window.
|
|
|
253 |
C - All such orders for which we have received the refund in this time window, although the recharge was attempted before this window.
|
|
|
254 |
X1 = A + B - C Net amount debited for all the customers in this time window.
|
|
|
255 |
X2 - Total amount credited to all customers in their wallet under some promotion.
|
|
|
256 |
X3 - Net difference in wallet amount between this time window.
|
|
|
257 |
X4 - Payment received through gateway from all customer in this time window.
|
|
|
258 |
X5 - Payment refunded through gateway by all customer in this time window.
|
|
|
259 |
'''
|
|
|
260 |
|
| 8790 |
rajveer |
261 |
A1 = 0
|
|
|
262 |
B1 = 0
|
|
|
263 |
C1 = 0
|
|
|
264 |
A2 = 0
|
|
|
265 |
B2 = 0
|
|
|
266 |
C2 = 0
|
|
|
267 |
R = 0
|
|
|
268 |
P = 0
|
| 8788 |
rajveer |
269 |
X1 = 0
|
|
|
270 |
X2 = 0
|
|
|
271 |
X3 = 0
|
|
|
272 |
X4 = 0
|
|
|
273 |
X5 = 0
|
| 8790 |
rajveer |
274 |
X6 = 0
|
| 8788 |
rajveer |
275 |
D = 0
|
|
|
276 |
|
| 8790 |
rajveer |
277 |
sorder = session.query(func.sum(RechargeOrder.totalAmount), func.sum(RechargeOrder.couponAmount)).filter(RechargeOrder.status.in_([RechargeOrderStatus.RECHARGE_SUCCESSFUL, RechargeOrderStatus.PAYMENT_SUCCESSFUL])).filter(RechargeOrder.creationTimestamp.between(startTime,endTime)).first()
|
| 8788 |
rajveer |
278 |
if sorder and sorder[0]:
|
| 8790 |
rajveer |
279 |
A1 = int(sorder[0])
|
|
|
280 |
A2 = int(sorder[1])
|
| 8788 |
rajveer |
281 |
|
| 8790 |
rajveer |
282 |
forder = session.query(func.sum(RechargeOrder.totalAmount), func.sum(RechargeOrder.couponAmount)).filter(RechargeOrder.status.in_([RechargeOrderStatus.RECHARGE_FAILED, RechargeOrderStatus.RECHARGE_FAILED_REFUNDED, RechargeOrderStatus.REFUNDED, RechargeOrderStatus.PARTIALLY_REFUNDED])).filter(RechargeOrder.creationTimestamp.between(startTime,endTime)).filter(not_(RechargeOrder.responseTimestamp.between(startTime,endTime))).first()
|
| 8788 |
rajveer |
283 |
if forder and forder[0]:
|
| 8790 |
rajveer |
284 |
B1 = int(forder[0])
|
|
|
285 |
B2 = int(forder[1])
|
| 8788 |
rajveer |
286 |
|
| 8790 |
rajveer |
287 |
rorder = session.query(func.sum(RechargeOrder.totalAmount), func.sum(RechargeOrder.couponAmount)).filter(RechargeOrder.status.in_([RechargeOrderStatus.RECHARGE_FAILED, RechargeOrderStatus.RECHARGE_FAILED_REFUNDED, RechargeOrderStatus.REFUNDED, RechargeOrderStatus.PARTIALLY_REFUNDED])).filter(RechargeOrder.responseTimestamp.between(startTime,endTime)).filter(not_(RechargeOrder.creationTimestamp.between(startTime,endTime))).first()
|
| 8788 |
rajveer |
288 |
if rorder and rorder[0]:
|
| 8790 |
rajveer |
289 |
C1 = int(rorder[0])
|
|
|
290 |
C2 = int(rorder[1])
|
| 8788 |
rajveer |
291 |
|
| 8790 |
rajveer |
292 |
R = R + A1 + B1 - C1
|
|
|
293 |
X2 = X2 + A2 + B2 - C2
|
| 8788 |
rajveer |
294 |
|
|
|
295 |
rv = session.query(func.sum(RechargeVoucherTracker.amount)).filter(RechargeVoucherTracker.issuedOn.between(startTime,endTime)).first()
|
|
|
296 |
if rv and rv[0]:
|
| 8790 |
rajveer |
297 |
X3 = int(rv[0])
|
| 14143 |
amit.gupta |
298 |
|
|
|
299 |
rv1 = session.query(func.sum(DtrBatchCreditTracker.amount)).filter(DtrBatchCreditTracker.creditedOn.between(startTime,endTime)).first()
|
|
|
300 |
if rv1 and rv1[0]:
|
|
|
301 |
X3 += int(rv1[0])
|
| 8788 |
rajveer |
302 |
|
|
|
303 |
uw = session.query(func.sum(UserWalletHistory.amount)).filter(UserWalletHistory.timestamp.between(startTime,endTime)).first()
|
|
|
304 |
if uw and uw[0]:
|
| 8790 |
rajveer |
305 |
X4 = int(uw[0])
|
| 8788 |
rajveer |
306 |
|
| 8795 |
rajveer |
307 |
#X4 = 191497
|
| 8788 |
rajveer |
308 |
|
|
|
309 |
pc = PaymentClient().get_client()
|
| 13430 |
kshitij.so |
310 |
payments = pc.getPayments(to_java_date(startTime - datetime.timedelta(minutes = 30)), to_java_date(endTime + datetime.timedelta(minutes = 30)), 2, 1) + pc.getPayments(to_java_date(startTime - datetime.timedelta(minutes = 30)), to_java_date(endTime + datetime.timedelta(minutes = 30)), 2, 2) + pc.getPayments(to_java_date(startTime - datetime.timedelta(minutes = 30)), to_java_date(endTime + datetime.timedelta(minutes = 30)), 2, 19) + pc.getPayments(to_java_date(startTime - datetime.timedelta(minutes = 30)), to_java_date(endTime + datetime.timedelta(minutes = 30)), 8, 1) + \
|
|
|
311 |
pc.getPayments(to_java_date(startTime - datetime.timedelta(minutes = 30)), to_java_date(endTime + datetime.timedelta(minutes = 30)), 8, 2) + pc.getPayments(to_java_date(startTime - datetime.timedelta(minutes = 30)), to_java_date(endTime + datetime.timedelta(minutes = 30)), 8, 19)
|
| 8788 |
rajveer |
312 |
for payment in payments:
|
|
|
313 |
if payment.isDigital and to_py_date(payment.successTimestamp) >= startTime and to_py_date(payment.successTimestamp) <= endTime:
|
| 8790 |
rajveer |
314 |
X5 = X5 + payment.amount
|
| 8788 |
rajveer |
315 |
|
|
|
316 |
|
|
|
317 |
|
|
|
318 |
refunds = RechargeOrder.query.filter(RechargeOrder.status.in_([RechargeOrderStatus.PARTIALLY_REFUNDED, RechargeOrderStatus.REFUNDED])).filter(RechargeOrder.refundTimestamp.between(startTime, endTime)).all()
|
|
|
319 |
pc = PaymentClient().get_client()
|
|
|
320 |
for refund in refunds:
|
|
|
321 |
payments = pc.getPaymentForRechargeTxnId(refund.transaction_id)
|
|
|
322 |
for payment in payments:
|
|
|
323 |
if payment.gatewayId in (1,2) and payment.status == 8 and payment.isDigital:
|
| 8790 |
rajveer |
324 |
X6 = X6 + payment.refundAmount
|
| 8788 |
rajveer |
325 |
|
| 8790 |
rajveer |
326 |
P = X2+X3+X5-X4-X6
|
|
|
327 |
D = R - P
|
| 8788 |
rajveer |
328 |
|
|
|
329 |
maildata = "<html><body><table border='1'><thead><th>Symbol</th><th>Type</th><th>Amount</th></thead><tbody>"
|
| 8790 |
rajveer |
330 |
maildata += "<tr><td>A</td><td>Recharge Amount</td><td>" + str(A1) + "</td></tr>"
|
|
|
331 |
maildata += "<tr><td>B</td><td>Recharge Amount (Refunded in Future)</td><td>" + str(B1) + "</td></tr>"
|
|
|
332 |
maildata += "<tr><td>C</td><td>Recharge Refund Amount</td><td>" + str(C1) + "</td></tr>"
|
|
|
333 |
maildata += "<tr><td>R=A1+B1-C1</td><td>Net Recharge Amount</td><td>" + str(R) + "</td></tr>"
|
|
|
334 |
maildata += "<tr><td></td><td></td><td></td></tr>"
|
|
|
335 |
|
|
|
336 |
maildata += "<tr><td>A</td><td>Recharge Coupon Amount</td><td>" + str(A2) + "</td></tr>"
|
|
|
337 |
maildata += "<tr><td>B</td><td>Recharge Coupon Amount (Refunded in Future)</td><td>" + str(B2) + "</td></tr>"
|
|
|
338 |
maildata += "<tr><td>C</td><td>Recharge Coupon Refund Amount</td><td>" + str(C2) + "</td></tr>"
|
|
|
339 |
maildata += "<tr><td>X2=A2+B2-C2</td><td>Net Coupon Amount</td><td>" + str(X2) + "</td></tr>"
|
|
|
340 |
|
|
|
341 |
maildata += "<tr><td>X3</td><td>Gift Amount</td><td>" + str(X3) + "</td></tr>"
|
|
|
342 |
maildata += "<tr><td>X4</td><td>Wallet Difference</td><td>" + str(X4) + "</td></tr>"
|
|
|
343 |
maildata += "<tr><td>X5</td><td>Payment Amount</td><td>" + str(X5) + "</td></tr>"
|
|
|
344 |
maildata += "<tr><td>X6</td><td>Payment Refund Amount</td><td>" + str(X6) + "</td></tr>"
|
|
|
345 |
maildata += "<tr><td>P=X2+X3+X5-X4-X6</td><td>Net Payments</td><td>" + str(P) + "</td></tr>"
|
|
|
346 |
maildata += "<tr><td></td><td></td><td></td></tr>"
|
|
|
347 |
|
|
|
348 |
maildata += "<tr><td>D=R-P</td><td>Net Reconciliation Difference</td><td>" + str(D) + "</td></tr>"
|
| 8788 |
rajveer |
349 |
maildata += "</tbody></table>"
|
|
|
350 |
|
|
|
351 |
if D != 0:
|
| 8837 |
rajveer |
352 |
mismatches = []
|
| 14242 |
kshitij.so |
353 |
mismatches += RechargeOrder.query.filter(RechargeOrder.status.in_([RechargeOrderStatus.RECHARGE_SUCCESSFUL, RechargeOrderStatus.RECHARGE_FAILED, RechargeOrderStatus.RECHARGE_UNKNOWN, RechargeOrderStatus.RECHARGE_FAILED_REFUNDED, RechargeOrderStatus.PAYMENT_SUCCESSFUL])).filter(RechargeOrder.creationTimestamp.between(startTime, endTime)).filter(RechargeOrder.responseTimestamp.between(endTime, endTime + timedelta(minutes = 60))).all()
|
|
|
354 |
mismatches += RechargeOrder.query.filter(RechargeOrder.status.in_([RechargeOrderStatus.RECHARGE_SUCCESSFUL, RechargeOrderStatus.RECHARGE_FAILED, RechargeOrderStatus.RECHARGE_UNKNOWN, RechargeOrderStatus.RECHARGE_FAILED_REFUNDED, RechargeOrderStatus.PAYMENT_SUCCESSFUL])).filter(RechargeOrder.responseTimestamp.between(startTime, endTime)).filter(RechargeOrder.creationTimestamp.between(startTime - timedelta(minutes = 60), startTime)).all()
|
| 8788 |
rajveer |
355 |
if mismatches and len(mismatches) > 0:
|
|
|
356 |
maildata += "<h3>Possible mismatch orders</h3><table style='margin-top:30px;' border='1'><thead><th>OrderId</th><th>Total Amount</th><th>Wallet Amount</th><th>Coupon Amount</th><th>Creation Time</th><th>Response Time</th></thead><tbody>"
|
|
|
357 |
for mismatch in mismatches:
|
|
|
358 |
maildata += "<tr><td>" + str(mismatch.id) + "</td><td>" + str(mismatch.totalAmount) + "</td><td>" + str(mismatch.walletAmount) + "</td><td>" + str(mismatch.couponAmount) + "</td><td>" + str(mismatch.creationTimestamp) + "</td><td>" + str(mismatch.responseTimestamp) + "</td></tr>"
|
|
|
359 |
maildata += "</tbody></table>"
|
|
|
360 |
|
|
|
361 |
maildata += "</body></html>"
|
| 14709 |
kshitij.so |
362 |
mail_html("cnc.center@shop2020.in", "5h0p2o2o", ["anikendra.das@saholic.com", "kshitij.sood@shop2020.in", "rajneesh.arora@shop2020.in", "amit.gupta@saholic.com"], "Customer Recharge Reconciliation for Date:- " + startTime.strftime("%d-%m-%Y"), maildata, [])
|
| 8790 |
rajveer |
363 |
|
| 8788 |
rajveer |
364 |
|
| 6235 |
rajveer |
365 |
def processRefunds():
|
|
|
366 |
todate = datetime.datetime.now()
|
| 8788 |
rajveer |
367 |
for i in range(10):
|
| 6235 |
rajveer |
368 |
orderDate = todate + datetime.timedelta(days= -i)
|
|
|
369 |
refunds = getRefunds(orderDate)
|
|
|
370 |
for key in refunds.keys():
|
|
|
371 |
refund = refunds.get(key)
|
|
|
372 |
refundAmount = refund[0]
|
|
|
373 |
refundDate = refund[1]
|
|
|
374 |
order = RechargeOrder.get_by(spiceTID = key)
|
| 7127 |
rajveer |
375 |
if order:
|
|
|
376 |
amount = order.totalAmount
|
|
|
377 |
isStoreOrder = False
|
|
|
378 |
else:
|
|
|
379 |
order = RechargeTransaction.get_by(spiceTID = key)
|
| 7188 |
rajveer |
380 |
if not order:
|
|
|
381 |
continue
|
| 7127 |
rajveer |
382 |
isStoreOrder = True
|
|
|
383 |
amount = order.amount
|
| 6235 |
rajveer |
384 |
if order.status == RechargeOrderStatus.RECHARGE_FAILED_REFUNDED:
|
|
|
385 |
print "Refund is already processed."
|
|
|
386 |
continue
|
| 13564 |
kshitij.so |
387 |
if order.status not in (RechargeOrderStatus.RECHARGE_SUCCESSFUL, RechargeOrderStatus.PAYMENT_SUCCESSFUL, RechargeOrderStatus.RECHARGE_UNKNOWN, RechargeOrderStatus.RECHARGE_IN_PROCESS):
|
| 7075 |
rajveer |
388 |
print "Recharge/Payment is not successful. There is something wrong."
|
| 6235 |
rajveer |
389 |
continue
|
| 7127 |
rajveer |
390 |
if amount != refundAmount:
|
| 6235 |
rajveer |
391 |
print "Refund amount is not same as transaction amount"
|
|
|
392 |
continue
|
| 7127 |
rajveer |
393 |
if isStoreOrder:
|
| 7244 |
rajveer |
394 |
update_recharge_transaction_status(order.id, RechargeOrderStatus.RECHARGE_FAILED_REFUNDED)
|
| 7127 |
rajveer |
395 |
else:
|
| 7780 |
rajveer |
396 |
update_recharge_order_status(order.id, RechargeOrderStatus.RECHARGE_FAILED_REFUNDED)
|
| 6235 |
rajveer |
397 |
|
|
|
398 |
def processUnknownTransactions():
|
|
|
399 |
orders = get_recharge_orders_for_status(RechargeOrderStatus.PAYMENT_SUCCESSFUL)
|
| 6219 |
rajveer |
400 |
for order in orders:
|
| 6276 |
rajveer |
401 |
try:
|
|
|
402 |
if order.creationTimestamp + datetime.timedelta(minutes=10) < datetime.datetime.now():
|
|
|
403 |
status, description = checkTransactionStatus('', str(order.id))
|
|
|
404 |
print status, description
|
|
|
405 |
if status:
|
|
|
406 |
update_recharge_order_status(order.id, RechargeOrderStatus.RECHARGE_SUCCESSFUL)
|
|
|
407 |
else:
|
|
|
408 |
update_recharge_order_status(order.id, RechargeOrderStatus.RECHARGE_FAILED)
|
|
|
409 |
except:
|
|
|
410 |
print "Do Nothing"
|
| 13564 |
kshitij.so |
411 |
|
|
|
412 |
inprocessOrders = RechargeTransaction.query.filter(RechargeTransaction.status == RechargeOrderStatus.RECHARGE_IN_PROCESS).all()
|
|
|
413 |
for inprocessOrder in inprocessOrders:
|
|
|
414 |
inprocessOrder.status = RechargeOrderStatus.RECHARGE_UNKNOWN
|
|
|
415 |
session.commit()
|
|
|
416 |
|
| 7163 |
rajveer |
417 |
## For store transactions
|
| 7245 |
rajveer |
418 |
rorders = RechargeTransaction.query.filter(RechargeTransaction.status.in_([RechargeOrderStatus.RECHARGE_UNKNOWN, RechargeOrderStatus.INIT])).all()
|
| 7166 |
rajveer |
419 |
for order in rorders:
|
| 7163 |
rajveer |
420 |
try:
|
|
|
421 |
if order.transactionTime + datetime.timedelta(minutes=10) < datetime.datetime.now():
|
|
|
422 |
status, description = checkTransactionStatus('', str(order.id))
|
|
|
423 |
print status, description
|
|
|
424 |
if status:
|
|
|
425 |
update_recharge_transaction_status(order.id, RechargeOrderStatus.RECHARGE_SUCCESSFUL)
|
| 7245 |
rajveer |
426 |
elif order.status == RechargeOrderStatus.INIT:
|
|
|
427 |
update_recharge_transaction_status(order.id, RechargeOrderStatus.RECHARGE_FAILED)
|
| 7163 |
rajveer |
428 |
else:
|
| 7244 |
rajveer |
429 |
update_recharge_transaction_status(order.id, RechargeOrderStatus.RECHARGE_FAILED_REFUNDED)
|
| 7163 |
rajveer |
430 |
except:
|
|
|
431 |
print "Do Nothing"
|
|
|
432 |
|
|
|
433 |
|
| 6451 |
rajveer |
434 |
def processAuthorizedTransactions(txn_id):
|
|
|
435 |
update_recharge_order_status(txn_id, RechargeOrderStatus.PAYMENT_SUCCESSFUL)
|
| 6235 |
rajveer |
436 |
|
| 7141 |
rajveer |
437 |
|
|
|
438 |
def compute_recharge_collection(cdate):
|
|
|
439 |
todate = datetime.datetime(cdate.year, cdate.month, cdate.day)
|
|
|
440 |
tomorrow = todate + timedelta(days=1)
|
| 13564 |
kshitij.so |
441 |
txns = session.query(RechargeTransaction.storeId, RechargeTransaction.payMethod, RechargeTransaction.status, func.sum(RechargeTransaction.amount), func.sum(RechargeTransaction.discount)).filter(RechargeTransaction.status.in_([RechargeOrderStatus.RECHARGE_SUCCESSFUL, RechargeOrderStatus.RECHARGE_UNKNOWN, RechargeOrderStatus.RECHARGE_IN_PROCESS])).filter(RechargeTransaction.transactionTime.between(todate, tomorrow)).group_by(RechargeTransaction.storeId, RechargeTransaction.payMethod, RechargeTransaction.status).order_by(RechargeTransaction.storeId).all()
|
| 8875 |
rajveer |
442 |
txns = txns + session.query(RechargeTransaction.storeId, RechargeTransaction.payMethod, RechargeTransaction.status, func.sum(RechargeTransaction.amount), func.sum(RechargeTransaction.discount)).filter(RechargeTransaction.status.in_([RechargeOrderStatus.RECHARGE_FAILED, RechargeOrderStatus.RECHARGE_FAILED_REFUNDED])).filter(RechargeTransaction.transactionTime.between(todate, tomorrow)).filter(not_(RechargeTransaction.responseTime.between(todate, tomorrow))).group_by(RechargeTransaction.storeId, RechargeTransaction.payMethod, RechargeTransaction.status).order_by(RechargeTransaction.storeId).all()
|
| 7141 |
rajveer |
443 |
storeData = {}
|
|
|
444 |
for txn in txns:
|
|
|
445 |
print txn
|
|
|
446 |
if not storeData.has_key(txn[0]):
|
|
|
447 |
data = [0,0,0,0,0]
|
|
|
448 |
storeData[txn[0]] = data
|
|
|
449 |
else:
|
|
|
450 |
data = storeData[txn[0]]
|
| 7155 |
rajveer |
451 |
if txn[1] == 1:
|
| 7141 |
rajveer |
452 |
data[0] += int(txn[3]) - int(txn[4])
|
| 7155 |
rajveer |
453 |
if txn[1] == 2:
|
| 7141 |
rajveer |
454 |
data[1] += int(txn[3]) - int(txn[4])
|
| 9342 |
rajveer |
455 |
|
|
|
456 |
data[2] += int(txn[3])
|
|
|
457 |
data[3] += int(txn[4])
|
|
|
458 |
data[4] += int(txn[3]) - int(txn[4])
|
| 7141 |
rajveer |
459 |
storeData[txn[0]] = data
|
| 8868 |
rajveer |
460 |
|
|
|
461 |
|
| 8875 |
rajveer |
462 |
reftxns = session.query(RechargeTransaction.storeId, RechargeTransaction.payMethod, RechargeTransaction.status, func.sum(RechargeTransaction.amount), func.sum(RechargeTransaction.discount)).filter(RechargeTransaction.status.in_([RechargeOrderStatus.RECHARGE_FAILED, RechargeOrderStatus.RECHARGE_FAILED_REFUNDED])).filter(RechargeTransaction.responseTime.between(todate, tomorrow)).filter(not_(RechargeTransaction.transactionTime.between(todate, tomorrow))).group_by(RechargeTransaction.storeId, RechargeTransaction.payMethod, RechargeTransaction.status).order_by(RechargeTransaction.storeId).all()
|
| 7141 |
rajveer |
463 |
for txn in reftxns:
|
|
|
464 |
print txn
|
|
|
465 |
if not storeData.has_key(txn[0]):
|
|
|
466 |
data = [0,0,0,0,0]
|
|
|
467 |
storeData[txn[0]] = data
|
|
|
468 |
else:
|
|
|
469 |
data = storeData[txn[0]]
|
| 7155 |
rajveer |
470 |
if txn[1] == 1:
|
| 7148 |
rajveer |
471 |
data[0] -= int(txn[3]) - int(txn[4])
|
| 7155 |
rajveer |
472 |
if txn[1] == 2:
|
| 7148 |
rajveer |
473 |
data[1] -= int(txn[3]) - int(txn[4])
|
| 7141 |
rajveer |
474 |
data[2] -= int(txn[3])
|
|
|
475 |
data[3] -= int(txn[4])
|
|
|
476 |
data[4] -= int(txn[3]) - int(txn[4])
|
|
|
477 |
print storeData
|
| 7163 |
rajveer |
478 |
|
| 7175 |
rajveer |
479 |
wallet = WalletForCompany.query.filter(WalletForCompany.id == 1).one()
|
|
|
480 |
|
|
|
481 |
dt = session.query(func.sum(RechargeTransaction.amount)).filter(RechargeTransaction.status.in_([RechargeOrderStatus.RECHARGE_SUCCESSFUL])).one()
|
|
|
482 |
|
| 7511 |
rajveer |
483 |
# if int(dt[0]) != wallet.amount:
|
| 11118 |
kshitij.so |
484 |
# mail("cnc.center@shop2020.in", "5h0p2o2o", ["anikendra.das@saholic.com", "kshitij.sood@shop2020.in"], "Wallet amount: " + str(wallet.amount) + " does not match with transaction amount: " + str(int(dt[0])) , "", [], [], [])
|
| 7250 |
rajveer |
485 |
|
| 7175 |
rajveer |
486 |
maildata = "<html><body><table border='1'><thead><th>StoreId</th><th>Gross</th><th>Discount</th><th>Net</th></thead><tbody>"
|
|
|
487 |
trecharge = 0
|
| 7967 |
anupam.sin |
488 |
hotspotServiceMatrices = HotspotServiceMatrix.query.all()
|
|
|
489 |
hotspotServiceMatrixMap = {}
|
|
|
490 |
|
|
|
491 |
for hotspotServiceMatrix in hotspotServiceMatrices:
|
|
|
492 |
hotspotServiceMatrixMap[hotspotServiceMatrix.storeId] = hotspotServiceMatrix
|
|
|
493 |
|
| 7141 |
rajveer |
494 |
for storeId in storeData.keys():
|
|
|
495 |
store = HotspotStore.get_by(id = storeId)
|
| 7967 |
anupam.sin |
496 |
if hotspotServiceMatrixMap.has_key(storeId):
|
|
|
497 |
del hotspotServiceMatrixMap[storeId]
|
| 7141 |
rajveer |
498 |
store.collectedAmount = 0
|
|
|
499 |
store.availableLimit = store.creditLimit
|
| 7142 |
rajveer |
500 |
session.commit()
|
|
|
501 |
|
| 7141 |
rajveer |
502 |
data = storeData.get(storeId)
|
| 7250 |
rajveer |
503 |
rc = RechargeCollection()
|
|
|
504 |
rc.hotspotId = store.hotspotId
|
|
|
505 |
rc.reconDate = int(todate.strftime("%Y%m%d"))
|
|
|
506 |
rc.cash = data[0]
|
|
|
507 |
rc.hdfc = data[1]
|
|
|
508 |
rc.grossAmount = data[2]
|
|
|
509 |
rc.discount = data[3]
|
|
|
510 |
rc.netCollection = data[4]
|
|
|
511 |
rc.addedAt = datetime.datetime.now()
|
|
|
512 |
rc.pushedToOcr = False
|
|
|
513 |
session.commit()
|
|
|
514 |
|
| 7175 |
rajveer |
515 |
maildata += "<tr><td>" + store.hotspotId + "</td><td>" + str(data[2]) + "</td><td>" + str(data[3]) + "</td><td>" + str(data[4]) + "</td></tr>"
|
|
|
516 |
trecharge += data[2]
|
| 7250 |
rajveer |
517 |
|
| 7276 |
rajveer |
518 |
dit = session.query(func.sum(RechargeCollection.grossAmount)).one()
|
| 7821 |
rajveer |
519 |
dit2 = session.query(func.sum(WalletHistoryForCompany.amount)).filter(WalletHistoryForCompany.walletId == 1).filter(WalletHistoryForCompany.amount >= 100000).one()
|
| 7276 |
rajveer |
520 |
wamt = int(dit2[0])- int(dit[0])
|
|
|
521 |
wallet.amount = wamt
|
|
|
522 |
session.commit()
|
|
|
523 |
|
| 7250 |
rajveer |
524 |
maildata += "</tbody></table></body></html>"
|
| 21376 |
kshitij.so |
525 |
mail_html("cnc.center@shop2020.in", "5h0p2o2o", ["amit.gupta@saholic.com", "kshitij.sood@saholic.com", "manoj.bajaj@spiceretail.co.in","amit.tyagi@spiceretail.co.in","pradeep.panwar@spiceretail.co.in"], "MIS :- SpiceRetail (Date - " + todate.strftime("%d-%m-%Y") + ") (Wallet Amount - " + str(wallet.amount) + ") (Total Recharge - " + str(trecharge) + ")", maildata, [])
|
| 7252 |
rajveer |
526 |
try:
|
|
|
527 |
push_recharge_collection_to_ocr()
|
|
|
528 |
except:
|
| 21376 |
kshitij.so |
529 |
mail_html("cnc.center@shop2020.in", "5h0p2o2o", ["amit.gupta@saholic.com", "kshitij.sood@saholic.com", "manoj.bajaj@spiceretail.co.in","amit.tyagi@spiceretail.co.in","pradeep.panwar@spiceretail.co.in"], "Problem while pushing recharge collection to OCR", "", [])
|
| 7967 |
anupam.sin |
530 |
finally:
|
| 7986 |
anupam.sin |
531 |
msg = "<html><body>"
|
| 7967 |
anupam.sin |
532 |
for storeId in hotspotServiceMatrixMap.keys():
|
|
|
533 |
if hotspotServiceMatrixMap.get(storeId).rechargeService:
|
|
|
534 |
store = HotspotStore.get_by(id = storeId)
|
| 7986 |
anupam.sin |
535 |
msg = msg + str(store.hotspotId) + ' - ' + str(store.email) + '<br>'
|
|
|
536 |
msg = msg + '</body></html>'
|
|
|
537 |
helper_client = HelperClient().get_client()
|
| 21376 |
kshitij.so |
538 |
helper_client.saveUserEmailForSending(["manoj.bajaj@spiceretail.co.in"], "cnc.center@shop2020.in", "No Recharge happened for these stores on " + str(date.today()-timedelta(days=1)), msg, "NRM", "NoRechargeMail", ["kshitij.sood@shop2020.in"], ["kshitij.sood@shop2020.in"], 1)
|
| 7986 |
anupam.sin |
539 |
|
| 7967 |
anupam.sin |
540 |
|
| 7250 |
rajveer |
541 |
|
|
|
542 |
def push_recharge_collection_to_ocr():
|
|
|
543 |
rcs = RechargeCollection.query.filter(RechargeCollection.pushedToOcr == False).all()
|
|
|
544 |
|
|
|
545 |
for rc in rcs:
|
|
|
546 |
store_string = "<Store>" + rc.hotspotId + "</Store>"
|
|
|
547 |
date_string = "<ReconDate>" + str(rc.reconDate) + "</ReconDate>"
|
|
|
548 |
cash_string = "<Cash>" + str(rc.cash) + "</Cash>"
|
|
|
549 |
card_string = "<Hdfc>" + str(rc.hdfc) + "</Hdfc>"
|
|
|
550 |
type_string = "<Type>RechargeSale</Type>"
|
|
|
551 |
amount_string = "<GrossRechargeAmount>" + str(rc.grossAmount) + "</GrossRechargeAmount><Discount>" + str(rc.discount) + "</Discount><NetCollection>" + str(rc.netCollection) + "</NetCollection>";
|
|
|
552 |
|
| 7141 |
rajveer |
553 |
#SaholicRechargeSaleTransfer(string Store, int ReconDate, decimal Cash, decimal Hdfc, string Type, decimal GrossRechargeAmount, decimal Discount, decimal NetCollection)
|
|
|
554 |
|
| 20805 |
kshitij.so |
555 |
conn = httplib.HTTPConnection("14.141.109.13")
|
| 7141 |
rajveer |
556 |
XML="""
|
|
|
557 |
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
|
|
|
558 |
<soap:Body>
|
|
|
559 |
<SaholicRechargeSaleTransfer xmlns="http://tempuri.org/">
|
|
|
560 |
"""
|
|
|
561 |
|
| 8195 |
rajveer |
562 |
XML = XML + store_string + date_string + cash_string + card_string + "<Cheque>0</Cheque>" + type_string + amount_string
|
| 7141 |
rajveer |
563 |
|
|
|
564 |
footer = """
|
|
|
565 |
</SaholicRechargeSaleTransfer>
|
|
|
566 |
</soap:Body>
|
|
|
567 |
</soap:Envelope>
|
|
|
568 |
"""
|
|
|
569 |
XML = XML + footer
|
|
|
570 |
|
|
|
571 |
print XML
|
|
|
572 |
params = urllib.urlencode({'op': 'SaholicRechargeSaleTransfer'})
|
|
|
573 |
headers = { "Content-type": "text/xml", "Content-Length": "%d" % len(XML)}
|
|
|
574 |
conn.request("POST", "/loaddetect/Service.asmx?"+params, "", headers)
|
|
|
575 |
conn.send(XML)
|
|
|
576 |
response = conn.getresponse()
|
|
|
577 |
print response.status, response.reason
|
|
|
578 |
resp = response.read()
|
|
|
579 |
conn.close()
|
|
|
580 |
print resp
|
| 7250 |
rajveer |
581 |
if "Saved Successfully" in resp:
|
|
|
582 |
rc.pushedAt = datetime.datetime.now()
|
|
|
583 |
rc.pushedToOcr = True
|
|
|
584 |
session.commit()
|
|
|
585 |
elif "Error in Saving Data" in resp:
|
| 20596 |
amit.gupta |
586 |
mail_html("cnc.center@shop2020.in", "5h0p2o2o", ["amit.gupta@shop2020.in", "kshitij.sood@shop2020.in", "rajneesh.arora@shop2020.in"], "Problem while pushing recharge collection to OCR", resp, [])
|
| 7250 |
rajveer |
587 |
else:
|
| 20596 |
amit.gupta |
588 |
mail_html("cnc.center@shop2020.in", "5h0p2o2o", ["amit.gupta@shop2020.in", "kshitij.sood@shop2020.in", "rajneesh.arora@shop2020.in"], "Problem while pushing recharge collection to OCR", resp, [])
|
| 7250 |
rajveer |
589 |
|
| 7141 |
rajveer |
590 |
|
| 7175 |
rajveer |
591 |
|
| 7147 |
rajveer |
592 |
def topup_company_wallet(companyId, amount):
|
|
|
593 |
wallet = WalletForCompany.query.filter(WalletForCompany.id == companyId).with_lockmode("update").one()
|
| 7285 |
rajveer |
594 |
company = Company.get_by(id = companyId)
|
| 7147 |
rajveer |
595 |
wh = WalletHistoryForCompany()
|
|
|
596 |
wh.walletId = wallet.id
|
|
|
597 |
wh.openingBal = wallet.amount
|
|
|
598 |
wh.closingBal = wallet.amount + amount
|
|
|
599 |
wh.amount = amount
|
|
|
600 |
wh.transactionTime = datetime.datetime.now()
|
| 7167 |
rajveer |
601 |
wh.referenceNumber = get_next_invoice_number(OrderType.WALLETCREDIT)
|
| 7147 |
rajveer |
602 |
wh.description = "Wallet Credited"
|
|
|
603 |
|
|
|
604 |
wallet.amount += amount
|
|
|
605 |
session.commit()
|
| 23132 |
amit.gupta |
606 |
mail("cnc.center@shop2020.in", "5h0p2o2o", ["amit.gupta@shop2020.in", "amit.tyagi@spiceretail.co.in"] , company.name + " wallet topped up by " + str(amount) + " rupees.", "", [], [], [])
|
| 7821 |
rajveer |
607 |
|
| 7983 |
rajveer |
608 |
def compute_website_recharge_collection(cdate, oldBalance, newBalance):
|
| 8815 |
rajveer |
609 |
startTime = datetime.datetime(cdate.year, cdate.month, cdate.day)
|
|
|
610 |
endTime = startTime + timedelta(days=1)
|
|
|
611 |
tamount = 0
|
| 7147 |
rajveer |
612 |
|
| 8815 |
rajveer |
613 |
txns = session.query(func.sum(RechargeOrder.totalAmount), func.sum(RechargeOrder.couponAmount)).filter(RechargeOrder.status.in_([RechargeOrderStatus.RECHARGE_SUCCESSFUL, RechargeOrderStatus.PAYMENT_SUCCESSFUL])).filter(RechargeOrder.creationTimestamp.between(startTime,endTime)).first()
|
|
|
614 |
if txns and txns[0]:
|
|
|
615 |
tamount += int(txns[0])
|
| 7821 |
rajveer |
616 |
|
| 8815 |
rajveer |
617 |
otxns = session.query(func.sum(RechargeOrder.totalAmount), func.sum(RechargeOrder.couponAmount)).filter(RechargeOrder.status.in_([RechargeOrderStatus.RECHARGE_FAILED, RechargeOrderStatus.RECHARGE_FAILED_REFUNDED, RechargeOrderStatus.REFUNDED, RechargeOrderStatus.PARTIALLY_REFUNDED])).filter(RechargeOrder.creationTimestamp.between(startTime,endTime)).filter(not_(RechargeOrder.responseTimestamp.between(startTime,endTime))).first()
|
|
|
618 |
if otxns and otxns[0]:
|
|
|
619 |
tamount += int(otxns[0])
|
|
|
620 |
|
|
|
621 |
reftxns = session.query(func.sum(RechargeOrder.totalAmount), func.sum(RechargeOrder.couponAmount)).filter(RechargeOrder.status.in_([RechargeOrderStatus.RECHARGE_FAILED, RechargeOrderStatus.RECHARGE_FAILED_REFUNDED, RechargeOrderStatus.REFUNDED, RechargeOrderStatus.PARTIALLY_REFUNDED])).filter(RechargeOrder.responseTimestamp.between(startTime,endTime)).filter(not_(RechargeOrder.creationTimestamp.between(startTime,endTime))).first()
|
|
|
622 |
if reftxns and reftxns[0]:
|
|
|
623 |
tamount -= int(reftxns[0])
|
| 7821 |
rajveer |
624 |
|
|
|
625 |
wallet = WalletForCompany.query.filter(WalletForCompany.id == 2).with_lockmode("update").one()
|
| 7823 |
rajveer |
626 |
|
|
|
627 |
|
|
|
628 |
d = datetime.datetime.now()
|
|
|
629 |
wh = WalletHistoryForCompany()
|
|
|
630 |
wh.walletId = wallet.id
|
|
|
631 |
wh.openingBal = wallet.amount
|
|
|
632 |
wh.closingBal = wallet.amount - tamount
|
| 7982 |
rajveer |
633 |
wh.amount = -tamount
|
| 7823 |
rajveer |
634 |
wh.transactionTime = d
|
|
|
635 |
wh.referenceNumber = int(d.strftime("%Y%m%d"))
|
|
|
636 |
wh.description = "Wallet Credited"
|
|
|
637 |
wallet.amount = wallet.amount - tamount
|
| 7821 |
rajveer |
638 |
session.commit()
|
|
|
639 |
|
| 7823 |
rajveer |
640 |
|
| 8007 |
rajveer |
641 |
maildata = ""
|
| 21376 |
kshitij.so |
642 |
mail_html("cnc.center@shop2020.in", "5h0p2o2o", ["amit.gupta@saholic.com", "kshitij.sood@saholic.com", "manoj.bajaj@spiceretail.co.in","amit.tyagi@spiceretail.co.in","pradeep.panwar@spiceretail.co.in"], "MIS :- Saholic (Date - " + startTime.strftime("%d-%m-%Y") + ") (Wallet Amount - " + str(wallet.amount) + ") (Total Recharge - " + str(tamount) + ")", maildata, [])
|
| 7821 |
rajveer |
643 |
|
| 8012 |
rajveer |
644 |
rAmount = 0
|
| 8815 |
rajveer |
645 |
ramount = session.query(func.sum(WalletHistoryForCompany.amount)).filter(WalletHistoryForCompany.transactionTime >= startTime).filter(WalletHistoryForCompany.amount >= 100000).one()
|
| 8012 |
rajveer |
646 |
if ramount[0]:
|
|
|
647 |
rAmount = int(ramount[0])
|
| 8815 |
rajveer |
648 |
rcs = session.query(func.sum(RechargeCollection.grossAmount)).filter(RechargeCollection.reconDate == int(startTime.strftime("%Y%m%d"))).one()
|
| 8007 |
rajveer |
649 |
hamount = int(rcs[0])
|
|
|
650 |
|
| 8012 |
rajveer |
651 |
maildata = "(A) Old Wallet Amount is : " + str(oldBalance) + "<br>(B) New Wallet Amount is : " + str(newBalance) + "<br>(C) Recharge Amount is : " + str(rAmount) + "<br>---------------------------<br>(D) Total Debit Amount for Recharge(A-B+C) is : " + str(oldBalance - newBalance + rAmount) + "<br><br><br>(E) Saholic Recharge Amount is :" + str(tamount) + "<br>(F) Hotspot Recharge Amount is :" + str(hamount) + "<br>---------------------------<br>(G) Total Recharge Amount (E+F) is : " + str(tamount + hamount)
|
| 21376 |
kshitij.so |
652 |
mail_html("cnc.center@shop2020.in", "5h0p2o2o", ["amit.gupta@saholic.com", "kshitij.sood@saholic.com", "manoj.bajaj@spiceretail.co.in","amit.tyagi@spiceretail.co.in","pradeep.panwar@spiceretail.co.in"], "MIS :- Wallet and Recharge (Date - " + startTime.strftime("%d-%m-%Y") + ")", maildata, [])
|
| 8007 |
rajveer |
653 |
|
| 6147 |
rajveer |
654 |
if __name__ == '__main__':
|
| 7967 |
anupam.sin |
655 |
main()
|
| 9633 |
rajveer |
656 |
|