| 17137 |
naman |
1 |
'''
|
|
|
2 |
Created on 24-Sep-2015
|
|
|
3 |
|
|
|
4 |
@author: manish
|
|
|
5 |
'''
|
|
|
6 |
from datetime import date, datetime, timedelta
|
| 17156 |
amit.gupta |
7 |
from dtr.main import sourceMap
|
|
|
8 |
from dtr.storage import Mysql
|
|
|
9 |
from dtr.utils import utils
|
| 17137 |
naman |
10 |
from email.mime.multipart import MIMEMultipart
|
|
|
11 |
from email.mime.text import MIMEText
|
|
|
12 |
from pymongo import MongoClient
|
| 17156 |
amit.gupta |
13 |
import MySQLdb as mdb
|
|
|
14 |
import _mysql
|
| 17137 |
naman |
15 |
import smtplib
|
|
|
16 |
import sys
|
| 17736 |
manish.sha |
17 |
import re
|
| 19893 |
manas |
18 |
import traceback
|
| 17137 |
naman |
19 |
|
|
|
20 |
|
|
|
21 |
|
|
|
22 |
# DataService.initialize()
|
|
|
23 |
# client = MongoClient('mongodb://localhost:27017/')
|
|
|
24 |
SENDER = "cnc.center@shop2020.in"
|
|
|
25 |
PASSWORD = "5h0p2o2o"
|
|
|
26 |
SUBJECT = "Summary"
|
|
|
27 |
SMTP_SERVER = "smtp.gmail.com"
|
|
|
28 |
SMTP_PORT = 587
|
|
|
29 |
client = MongoClient()
|
| 22505 |
amit.gupta |
30 |
con = mdb.connect('127.0.0.1','root','shop2020','dtr')
|
| 17137 |
naman |
31 |
|
|
|
32 |
def getSkuData(storeId, identifier):
|
| 17139 |
naman |
33 |
if storeId in (1,2,4,5,6,7):
|
| 17137 |
naman |
34 |
skuData = client.Catalog.MasterData.find_one({'identifier':identifier, 'source_id':storeId})
|
|
|
35 |
elif storeId == 3:
|
|
|
36 |
skuData = client.Catalog.MasterData.find_one({'secondaryIdentifier':identifier, 'source_id':storeId})
|
|
|
37 |
return skuData
|
|
|
38 |
|
|
|
39 |
def sendmail(email, message, title, *varargs):
|
|
|
40 |
if email == "":
|
|
|
41 |
return
|
|
|
42 |
mailServer = smtplib.SMTP(SMTP_SERVER, SMTP_PORT)
|
|
|
43 |
mailServer.ehlo()
|
|
|
44 |
mailServer.starttls()
|
|
|
45 |
mailServer.ehlo()
|
|
|
46 |
|
|
|
47 |
# Create the container (outer) email message.
|
|
|
48 |
msg = MIMEMultipart()
|
|
|
49 |
msg['Subject'] = title
|
|
|
50 |
msg.preamble = title
|
|
|
51 |
html_msg = MIMEText(message, 'html')
|
|
|
52 |
msg.attach(html_msg)
|
|
|
53 |
|
|
|
54 |
# email.append('amit.gupta@shop2020.in')
|
|
|
55 |
MAILTO = email
|
|
|
56 |
mailServer.login(SENDER, PASSWORD)
|
|
|
57 |
mailServer.sendmail(PASSWORD, MAILTO, msg.as_string())
|
|
|
58 |
|
|
|
59 |
def addToAllOrders(start_date, end_date=None):
|
|
|
60 |
if not end_date:
|
|
|
61 |
end_date = datetime.now()
|
|
|
62 |
else:
|
|
|
63 |
end_date = end_date + timedelta(days=1)
|
|
|
64 |
try:
|
|
|
65 |
cur = con.cursor()
|
| 17138 |
naman |
66 |
db=client.Dtr
|
| 17137 |
naman |
67 |
db1 = client.Catalog
|
|
|
68 |
cur.execute("delete from allorder where created_on >= %s and created_on < %s", (start_date, end_date))
|
|
|
69 |
con.commit()
|
|
|
70 |
results = Mysql.fetchResult('''
|
| 17211 |
amit.gupta |
71 |
select ow.*, u.username, crm1.order_count, u.referrer, aua.city,aua.state,aua.pincode from order_view ow
|
| 17137 |
naman |
72 |
left join users u on u.id = ow.user_id
|
| 17194 |
amit.gupta |
73 |
left join (select user_id, count(*) as order_count from order_view where created >= %s and created < %s and status in ('ORDER_CREATED','DETAIL_CREATED') group by user_id)as crm1 on ow.user_id = crm1.user_id
|
| 17137 |
naman |
74 |
left join (select * from (select * from all_user_addresses order by source) s group by user_id)aua on aua.user_id=u.id
|
| 17211 |
amit.gupta |
75 |
where (lower(u.referrer) not like %s or u.utm_campaign is not null) and u.activated = 1 and ow.status in ('ORDER_CREATED','DETAIL_CREATED') and ow.created >= %s and ow.created < %s;
|
|
|
76 |
''', start_date, end_date, 'emp%', start_date, end_date, )
|
| 17137 |
naman |
77 |
|
| 17145 |
amit.gupta |
78 |
query = """INSERT INTO allorder
|
| 17234 |
amit.gupta |
79 |
(user_id, user_name, order_id, created_on, store_id, merchant_order_id, status, detailed_status, product_title, referrer, amount_paid, catalog_id, brand, model,category, deal_rank, max_nlc, min_nlc, dp, item_status, city, state, pincode, merchant_suborder_id,cashback_status,cashback_amount,quantity, reconciled, affstatus)
|
|
|
80 |
VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s)
|
| 17145 |
amit.gupta |
81 |
"""
|
| 17137 |
naman |
82 |
for result in results:
|
|
|
83 |
morder = db.merchantOrder.find_one({"orderId":result[0]})
|
|
|
84 |
if morder is not None:
|
| 17234 |
amit.gupta |
85 |
reconciled=morder.get("reconciled")
|
| 17137 |
naman |
86 |
subOrders = morder.get("subOrders")
|
|
|
87 |
if subOrders is not None:
|
|
|
88 |
for subOrder in subOrders:
|
| 19893 |
manas |
89 |
try:
|
|
|
90 |
user_id = result[1]
|
|
|
91 |
user_name= result[7]
|
|
|
92 |
order_id = result[0]
|
|
|
93 |
created_on =result[6]
|
|
|
94 |
store_id = sourceMap.get(result[2])
|
|
|
95 |
merchant_order_id = morder.get("merchantOrderId")
|
|
|
96 |
status = subOrder.get("status")
|
|
|
97 |
detailed_status = subOrder.get("detailedStatus")
|
|
|
98 |
product_title= subOrder.get("productTitle")
|
|
|
99 |
referrer = result[9]
|
|
|
100 |
amount_paid = int(subOrder.get("amountPaid"))
|
|
|
101 |
quantity=int(subOrder.get("quantity"))
|
|
|
102 |
skuData = getSkuData(morder.get("storeId"), subOrder.get("productCode"))
|
|
|
103 |
if morder.get("storeId") == 3:
|
|
|
104 |
skuData = db1.MasterData.find_one({'secondaryIdentifier':subOrder.get("productCode").strip(), 'source_id':morder.get("storeId")})
|
|
|
105 |
else:
|
|
|
106 |
skuData = db1.MasterData.find_one({'identifier':subOrder.get("productCode").strip(), 'source_id':morder.get("storeId")})
|
|
|
107 |
if skuData is not None:
|
|
|
108 |
catalog_id = skuData.get("skuBundleId")
|
|
|
109 |
brand= skuData.get("brand")
|
|
|
110 |
model = skuData.get("model_name")
|
|
|
111 |
category = skuData.get("category")
|
|
|
112 |
deal_rank = subOrder.get("dealRank")
|
|
|
113 |
max_nlc = subOrder.get("maxNlc")
|
|
|
114 |
min_nlc = subOrder.get("minNlc")
|
|
|
115 |
dp = subOrder.get("db")
|
|
|
116 |
item_status = utils.statusMap.get(subOrder.get("itemStatus"))
|
|
|
117 |
else:
|
|
|
118 |
catalog_id = 'None'
|
|
|
119 |
brand= 'None'
|
|
|
120 |
model = 'None'
|
|
|
121 |
category = 'None'
|
|
|
122 |
deal_rank = 'None'
|
|
|
123 |
max_nlc = 'None'
|
|
|
124 |
min_nlc = 'None'
|
|
|
125 |
dp = 'None'
|
|
|
126 |
item_status = 'None'
|
|
|
127 |
affStatus = subOrder.get('affStatus')
|
|
|
128 |
merchant_suborder_id = subOrder.get("merchantSubOrderId")
|
|
|
129 |
cashback_status = subOrder.get("cashBackStatus")
|
|
|
130 |
cashback_amount = subOrder.get("cashBackAmount")
|
|
|
131 |
city = result[10]
|
|
|
132 |
state = result[11]
|
|
|
133 |
pincode = result[12]
|
|
|
134 |
|
|
|
135 |
user_name = re.sub(r'[^\x00-\x7F]+',' ', user_name)
|
|
|
136 |
product_title = re.sub(r'[^\x00-\x7F]+',' ', product_title)
|
|
|
137 |
print user_id, user_name, product_title
|
|
|
138 |
|
|
|
139 |
values = (str(user_id), str(user_name), str(order_id), str(created_on), str(store_id), str(merchant_order_id), str(status), str(detailed_status), str(product_title), str(referrer), str(amount_paid), str(catalog_id), str(brand), str(model),str(category), str(deal_rank), str(max_nlc), str(min_nlc), str(dp), str(item_status), str(city), str(state), str(pincode),str(merchant_suborder_id),str(cashback_status),str(cashback_amount), str(quantity), str(reconciled), str(affStatus))
|
|
|
140 |
cur.execute(query,values)
|
|
|
141 |
con.commit()
|
|
|
142 |
except:
|
|
|
143 |
print traceback.print_exc()
|
|
|
144 |
continue
|
| 17137 |
naman |
145 |
except _mysql.Error, e:
|
|
|
146 |
print "Error %d: %s" % (e.args[0], e.args[1])
|
|
|
147 |
sys.exit(1)
|
|
|
148 |
|
|
|
149 |
finally:
|
|
|
150 |
|
|
|
151 |
if con:
|
|
|
152 |
con.close()
|
|
|
153 |
|
|
|
154 |
|
|
|
155 |
def summaryByBrandAndStore():
|
|
|
156 |
con = mdb.connect('localhost','root','shop2020','dtr')
|
|
|
157 |
try:
|
|
|
158 |
cur = con.cursor()
|
| 17153 |
amit.gupta |
159 |
# ----Data by brand---
|
| 17137 |
naman |
160 |
tbody = []
|
|
|
161 |
rowtemplate_brand="<tr><td>{0}</td><td>{1}</td><td>{2}</td><td>{3}</td></tr>"
|
|
|
162 |
mailBodyTemplate_brand="""
|
|
|
163 |
<html>
|
|
|
164 |
<body>
|
|
|
165 |
<table cellspacing="0" border="1" style="text-align:right">
|
|
|
166 |
<thead>
|
|
|
167 |
<tr>
|
|
|
168 |
<th colspan='4' style="text-align:center">Summary by Brand</th>
|
|
|
169 |
</tr>
|
|
|
170 |
<tr>
|
|
|
171 |
<th style="text-align:center">Brand</th>
|
|
|
172 |
<th style="text-align:center">Amount</th>
|
|
|
173 |
<th style="text-align:center">Quantity</th>
|
|
|
174 |
<th style="text-align:center">Number of Order</th>
|
|
|
175 |
</tr>
|
|
|
176 |
</thead>
|
|
|
177 |
<tbody>
|
|
|
178 |
{0}
|
|
|
179 |
</tbody>
|
|
|
180 |
</table><br><br>
|
|
|
181 |
</body>
|
|
|
182 |
</html>
|
|
|
183 |
"""
|
|
|
184 |
|
| 17149 |
amit.gupta |
185 |
cur.execute('''select brand ,sum(amount_paid) amount,count(brand) quantity, count(distinct order_id) no_of_orders
|
| 17150 |
amit.gupta |
186 |
from allorder where created_on >= CURDATE() - interval 1 day and created_on < CURDATE() group by brand order by count(brand) desc limit 10
|
| 17149 |
amit.gupta |
187 |
''')
|
| 17137 |
naman |
188 |
rows = cur.fetchall()
|
|
|
189 |
row = 1
|
|
|
190 |
alldata =''
|
|
|
191 |
for data in rows:
|
|
|
192 |
row +=1
|
|
|
193 |
if len(alldata)>0:
|
|
|
194 |
alldata = alldata + ",'"+ data[0]+"'"
|
|
|
195 |
else:
|
|
|
196 |
alldata = "'"+data[0]+"'"
|
|
|
197 |
tbody.append(rowtemplate_brand.format(data[0],data[1],data[2],data[3]))
|
|
|
198 |
|
| 17152 |
amit.gupta |
199 |
cur.execute("select sum(amount_paid) amount,count(*) quantity,count(distinct order_id) from allorder where created_on >= CURDATE() - interval 1 day and created_on < CURDATE() and brand not in("+alldata+")")
|
| 17137 |
naman |
200 |
row_other = cur.fetchall()
|
|
|
201 |
for data in row_other:
|
|
|
202 |
tbody.append(rowtemplate_brand.format('Other',data[0],data[1],data[2]))
|
|
|
203 |
tbody.append(rowtemplate_brand.format('','','',''))
|
|
|
204 |
tbody.append(rowtemplate_brand.format('','<b>MTD Amount</b>','<b>MTD Quantity</b>','<b>MTD No. of Order</b>'))
|
|
|
205 |
|
| 17153 |
amit.gupta |
206 |
|
|
|
207 |
|
| 17137 |
naman |
208 |
# Brand by MTD
|
| 17150 |
amit.gupta |
209 |
cur.execute('''select brand ,sum(amount_paid) amount,count(brand) quantity, count(distinct order_id) no_of_orders
|
|
|
210 |
from allorder where created_on >= CURDATE() - interval DAY(CURDATE()-INTERVAL 1 day) day and
|
|
|
211 |
created_on < CURDATE() group by brand order by count(brand) desc limit 10''')
|
| 17137 |
naman |
212 |
rows = cur.fetchall()
|
|
|
213 |
row += 2
|
|
|
214 |
alldata =''
|
|
|
215 |
for data in rows:
|
|
|
216 |
if len(alldata)>0:
|
|
|
217 |
alldata = alldata + ",'"+ data[0]+"'"
|
|
|
218 |
else:
|
|
|
219 |
alldata = "'"+data[0]+"'"
|
|
|
220 |
tbody.append(rowtemplate_brand.format(data[0],data[1],data[2],data[3]))
|
|
|
221 |
|
| 17152 |
amit.gupta |
222 |
cur.execute("select sum(amount_paid) amount,count(*) quantity,count(distinct order_id) from allorder where created_on >= CURDATE() - interval DAY(CURDATE()-INTERVAL 1 day) day and created_on < CURDATE() AND brand not in("+alldata+")")
|
| 17137 |
naman |
223 |
mtd_row_other = cur.fetchall()
|
|
|
224 |
for data in mtd_row_other:
|
|
|
225 |
tbody.append(rowtemplate_brand.format('Other',data[0],data[1],data[2]))
|
|
|
226 |
|
|
|
227 |
message_by_brand = mailBodyTemplate_brand.format("".join(tbody))
|
| 17153 |
amit.gupta |
228 |
|
| 17137 |
naman |
229 |
# Data by Store
|
|
|
230 |
# cur.execute("select store_id store,sum(amount_paid) amount,count(store_id) quantity ,count(distinct order_id) from allorder group by store_id order by store_id ASC;")
|
| 17194 |
amit.gupta |
231 |
cur.execute('''
|
|
|
232 |
select name, c.* from store left join (select b.store_id, a.amount, a.quantity, a.orders, b.mtdamount,b.mtdquantity, b.mtdorders from
|
|
|
233 |
(select ifnull(store_id, 'total') as store_id, sum(amount_paid) mtdamount, count(*) mtdquantity, count(distinct order_id) mtdorders from allorder
|
| 17218 |
amit.gupta |
234 |
where created_on >= CURDATE() - interval DAY(CURDATE()-INTERVAL 1 day) day and created_on < CURDATE() group by store_id with rollup) b
|
| 17194 |
amit.gupta |
235 |
left join
|
|
|
236 |
(select ifnull(store_id, 'total') as store_id, sum(amount_paid) amount, count(*) quantity, count(distinct order_id) orders from allorder
|
| 17219 |
amit.gupta |
237 |
where date(created_on)=curdate()-interval 1 day group by store_id with rollup) a
|
| 17194 |
amit.gupta |
238 |
on a.store_id=b.store_id) as c on name = c.store_id''')
|
| 17137 |
naman |
239 |
rows = cur.fetchall()
|
|
|
240 |
tbody =[]
|
|
|
241 |
rowtemplate="<tr><td>{0}</td><td>{1}</td><td>{2}</td><td>{3}</td><td>{4}</td><td>{5}</td><td>{6}</td></tr>"
|
|
|
242 |
for data in rows:
|
| 17155 |
amit.gupta |
243 |
tbody.append(rowtemplate.format(data[0],data[2] if data[2] else "-",data[3] if data[3] else "-",data[4] if data[4] else "-",
|
|
|
244 |
data[5] if data[5] else "-",data[6] if data[6] else "-",data[7] if data[7] else "-"))
|
| 17137 |
naman |
245 |
|
|
|
246 |
# book.save("/home/manish/Desktop/Summary.xls")
|
|
|
247 |
|
|
|
248 |
mailBodyTemplate="""
|
|
|
249 |
<html>
|
|
|
250 |
<body>
|
|
|
251 |
<table cellspacing="0" border="1" style="text-align:right">
|
|
|
252 |
<thead>
|
|
|
253 |
<tr>
|
|
|
254 |
<th colspan='7' style="text-align:center">Summary by Store</th>
|
|
|
255 |
</tr>
|
|
|
256 |
<tr>
|
| 17154 |
amit.gupta |
257 |
<th style="text-align:center">Store</th>
|
| 17137 |
naman |
258 |
<th style="text-align:center">Amount</th>
|
|
|
259 |
<th style="text-align:center">Quantity</th>
|
|
|
260 |
<th style="text-align:center">Number of Order</th>
|
|
|
261 |
<th style="text-align:center">MTD Amount</th>
|
|
|
262 |
<th style="text-align:center">MTD Quantity</th>
|
|
|
263 |
<th style="text-align:center">MTD Number of Order</th>
|
|
|
264 |
</tr>
|
|
|
265 |
</thead>
|
|
|
266 |
<tbody>
|
|
|
267 |
{0}
|
|
|
268 |
</tbody>
|
|
|
269 |
</table><br><br>
|
|
|
270 |
</body>
|
|
|
271 |
</html>
|
|
|
272 |
"""
|
|
|
273 |
message = mailBodyTemplate.format("".join(tbody))
|
|
|
274 |
return message+message_by_brand
|
|
|
275 |
except _mysql.Error, e:
|
|
|
276 |
|
|
|
277 |
print "Error %d: %s" % (e.args[0], e.args[1])
|
|
|
278 |
sys.exit(1)
|
|
|
279 |
|
|
|
280 |
finally:
|
|
|
281 |
|
|
|
282 |
if con:
|
|
|
283 |
con.close()
|
|
|
284 |
|
|
|
285 |
if __name__ == '__main__':
|
| 22505 |
amit.gupta |
286 |
#addToAllOrders(date(2017,7,1))
|
| 17160 |
amit.gupta |
287 |
#summaryByBrandAndStore()
|
|
|
288 |
pass
|