Subversion Repositories SmartDukaan

Rev

Rev 14647 | Rev 14650 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
14450 amit.gupta 1
'''
2
Created on Mar 13, 2015
3
 
4
@author: amit
5
'''
6
from datetime import date, datetime, timedelta
14632 amit.gupta 7
from dtr.main import Store, sourceMap
14613 amit.gupta 8
from dtr.storage import Mysql
9
from dtr.storage.Mysql import getOrdersAfterDate, getOrdersByTag
14450 amit.gupta 10
from email import encoders
11
from email.mime.base import MIMEBase
12
from email.mime.multipart import MIMEMultipart
13
from email.mime.text import MIMEText
14
from pymongo.mongo_client import MongoClient
14460 amit.gupta 15
from xlrd import open_workbook
14524 amit.gupta 16
from xlutils.copy import copy
14460 amit.gupta 17
from xlwt.Workbook import Workbook
14450 amit.gupta 18
import MySQLdb
19
import smtplib
20
import time
21
import xlwt
14460 amit.gupta 22
#from xlwt import 
14450 amit.gupta 23
 
24
client = MongoClient('mongodb://localhost:27017/')
25
 
26
SENDER = "cnc.center@shop2020.in"
27
PASSWORD = "5h0p2o2o"
28
SUBJECT = "DTR User Segmentation report for " + date.today().isoformat()
29
SMTP_SERVER = "smtp.gmail.com"
30
SMTP_PORT = 587    
31
 
14647 amit.gupta 32
XLS_FILENAME = "snapdealaffiliatereco.xls"
14632 amit.gupta 33
XLS_O_FILENAME = "allorders.xls"
14647 amit.gupta 34
XLS_F_FILENAME = "flipkartaffiliatereco.xls"
14460 amit.gupta 35
boldStyle = xlwt.XFStyle()
36
f = xlwt.Font()
37
f.bold = True
38
boldStyle.font = f
39
i = -1
14616 amit.gupta 40
 
41
datetime_format = xlwt.XFStyle()
42
datetime_format.num_format_str = 'dd/mm/yyyy HH:MM AM/PM'
43
 
14450 amit.gupta 44
def generateFlipkartReco():
14508 amit.gupta 45
    global i
46
    i = -1
14460 amit.gupta 47
    curs = getOrdersAfterDate(datetime.now() - timedelta(days=30), 2)
48
    db = client.Dtr
14647 amit.gupta 49
    wb = xlwt.Workbook()
50
    #rb = open_workbook(XLS_F_FILENAME)
51
    #wb = copy(rb)
14460 amit.gupta 52
    #wb = xlwt.Workbook()
53
    row = 0
14647 amit.gupta 54
    row2 = 0
55
    row3 = 0
56
    row4 = 0
57
    worksheet = wb.add_sheet("All Orders")
58
    worksheet1 = wb.add_sheet("Orders Reconciled")
59
    worksheet2 = wb.add_sheet("Orders not Reconciled")
60
    worksheet3 = wb.add_sheet("Aff not Reconciled")
14460 amit.gupta 61
    worksheet.write(row, inc(), 'Order Id', boldStyle)
14647 amit.gupta 62
    worksheet1.write(row, i, 'Order Id', boldStyle)
63
    worksheet2.write(row, i, 'Order Id', boldStyle)
14460 amit.gupta 64
    worksheet.write(row, inc(), 'User Id', boldStyle)
14647 amit.gupta 65
    worksheet1.write(row, i, 'User Id', boldStyle)
66
    worksheet2.write(row, i, 'User Id', boldStyle)
14474 amit.gupta 67
    worksheet.write(row, inc(), 'Username', boldStyle)
14647 amit.gupta 68
    worksheet1.write(row, i, 'Username', boldStyle)
69
    worksheet2.write(row, i, 'Username', boldStyle)
14460 amit.gupta 70
    worksheet.write(row, inc(), 'Merchant Order Id', boldStyle)
14647 amit.gupta 71
    worksheet1.write(row, i, 'Merchant Order Id', boldStyle)
72
    worksheet2.write(row, i, 'Merchant Order Id', boldStyle)
14460 amit.gupta 73
    worksheet.write(row, inc(), 'Product Title', boldStyle)
14647 amit.gupta 74
    worksheet1.write(row, i, 'Product Title', boldStyle)
75
    worksheet2.write(row, i, 'Product Title', boldStyle)
14460 amit.gupta 76
    worksheet.write(row, inc(), 'Price', boldStyle)
14647 amit.gupta 77
    worksheet1.write(row, i, 'Price', boldStyle)
78
    worksheet2.write(row, i, 'Price', boldStyle)
14460 amit.gupta 79
    worksheet.write(row, inc(), 'Quantity', boldStyle)
14647 amit.gupta 80
    worksheet1.write(row, i, 'Quantity', boldStyle)
81
    worksheet2.write(row, i, 'Quantity', boldStyle)
14460 amit.gupta 82
    worksheet.write(row, inc(), 'Status', boldStyle)
14647 amit.gupta 83
    worksheet1.write(row, i, 'Status', boldStyle)
84
    worksheet2.write(row, i, 'Status', boldStyle)
14460 amit.gupta 85
    worksheet.write(row, inc(), 'Detailed Status', boldStyle)
14647 amit.gupta 86
    worksheet1.write(row, i, 'Detailed Status', boldStyle)
87
    worksheet2.write(row, i, 'Detailed Status', boldStyle)
14460 amit.gupta 88
    worksheet.write(row, inc(), 'Cashback Status', boldStyle)
14647 amit.gupta 89
    worksheet1.write(row, i, 'Cashback Status', boldStyle)
90
    worksheet2.write(row, i, 'Cashback Status', boldStyle)
14460 amit.gupta 91
    worksheet.write(row, inc(), 'Our CashBack', boldStyle)
14647 amit.gupta 92
    worksheet1.write(row, i, 'Our CashBack', boldStyle)
93
    worksheet2.write(row, i, 'Our CashBack', boldStyle)
94
    worksheet.write(row, inc(), 'Sale Date', boldStyle) 
95
    worksheet1.write(row, i, 'Sale Date', boldStyle)
96
    worksheet2.write(row, i, 'Sale Date', boldStyle)
14460 amit.gupta 97
    worksheet.write(row, inc(), 'SubtagId', boldStyle)
14647 amit.gupta 98
    worksheet1.write(row, i, 'SubtagId', boldStyle)
99
    worksheet2.write(row, i, 'SubtagId', boldStyle)
14460 amit.gupta 100
    worksheet.write(row, inc(), 'Category', boldStyle)
14647 amit.gupta 101
    worksheet1.write(row, i, 'Category', boldStyle)
14460 amit.gupta 102
    worksheet.write(row, inc(), 'Aff PayOut', boldStyle)
14647 amit.gupta 103
    worksheet1.write(row, i, 'Aff PayOut', boldStyle)
14460 amit.gupta 104
    worksheet.write(row, inc(), 'Aff Sale Amount', boldStyle)
14647 amit.gupta 105
    worksheet1.write(row, i, 'Aff Sale Amount', boldStyle)
14460 amit.gupta 106
    worksheet.write(row, inc(), 'Aff Sale Date', boldStyle)
14647 amit.gupta 107
    worksheet1.write(row, i, 'Aff Sale Date', boldStyle)
14460 amit.gupta 108
    for row1 in curs:
109
        orderId = row1[0]
110
        order = db.merchantOrder.find_one({"orderId":orderId})
111
        if order is None:
112
            continue
113
        saleTime = int(time.mktime(datetime.strptime(order['placedOn'], "%d %B, %Y %I:%M %p").replace(hour=0, minute=0, second=0, microsecond=0).timetuple()))
114
        #saleTime1 = int(time.mktime((datetime.strptime(order['placedOn'], "%b %d, %Y %I:%M %p") + timedelta(seconds=-60)).timetuple()))
14647 amit.gupta 115
        reconciled_affiliates = []
14460 amit.gupta 116
        for subOrder in order['subOrders']: 
14647 amit.gupta 117
            affs = list(db.flipkartOrderAffiliateInfo.find({"productCode":subOrder.get("productCode"), "saleDateInt":saleTime}))
14460 amit.gupta 118
            row += 1
119
            i=-1
120
            worksheet.write(row, inc(), orderId)
121
            worksheet.write(row, inc(), row1[1])
14474 amit.gupta 122
            worksheet.write(row, inc(), row1[-1])
14460 amit.gupta 123
            worksheet.write(row, inc(), order['merchantOrderId'])
124
            worksheet.write(row, inc(), subOrder['productTitle'])
125
            worksheet.write(row, inc(), subOrder['amountPaid'])
126
            worksheet.write(row, inc(), subOrder['quantity'])
127
            worksheet.write(row, inc(), subOrder['status'])
128
            worksheet.write(row, inc(), subOrder['detailedStatus'])
129
            worksheet.write(row, inc(), subOrder['cashBackStatus'])
130
            worksheet.write(row, inc(), subOrder['cashBackAmount'])
131
            worksheet.write(row, inc(), subOrder['placedOn'])
132
            worksheet.write(row, inc(), order['subTagId'])
133
            for aff in affs:
14647 amit.gupta 134
                if aff["_id"] not in reconciled_affiliates and aff['subTagId']== order['subTagId']:
135
                    reconciled_affiliates.append(aff["_id"])
136
                    row2 += 1
137
                    i = -1 
138
                    worksheet1.write(row2, inc(), orderId)
139
                    worksheet1.write(row2, inc(), row1[1])
140
                    worksheet1.write(row2, inc(), row1[-1])
141
                    worksheet1.write(row2, inc(), order['merchantOrderId'])
142
                    worksheet1.write(row2, inc(), subOrder['productTitle'])
143
                    worksheet1.write(row2, inc(), subOrder['amountPaid'])
144
                    worksheet1.write(row2, inc(), subOrder['quantity'])
145
                    worksheet1.write(row2, inc(), subOrder['status'])
146
                    worksheet1.write(row2, inc(), subOrder['detailedStatus'])
147
                    worksheet1.write(row2, inc(), subOrder['cashBackStatus'])
148
                    worksheet1.write(row2, inc(), subOrder['cashBackAmount'])
149
                    worksheet1.write(row2, inc(), subOrder['placedOn'])
150
                    worksheet1.write(row2, inc(), order['subTagId'])
151
                    db.flipkartOrderAffiliateInfo.update(
152
                        {"productCode":subOrder.get("productCode"), "saleDateInt":saleTime, "subTagId":aff['subTagId']}, 
153
                        {"$set":{"reconciled":True}})
154
                    db.merchantOrder.update({"merchantOrderId":order["merchantOrderId"]}, 
155
                                            {"$set":{"reconciled":True}})
14460 amit.gupta 156
                    worksheet.write(row, inc(), aff['category'])
14647 amit.gupta 157
                    worksheet1.write(row2, i, aff['category'])
14460 amit.gupta 158
                    worksheet.write(row, inc(), aff['payOut'])
14647 amit.gupta 159
                    worksheet1.write(row2, i, aff['payOut'])
14460 amit.gupta 160
                    worksheet.write(row, inc(), aff['saleAmount'])
14647 amit.gupta 161
                    worksheet1.write(row2, i, aff['saleAmount'])
14460 amit.gupta 162
                    worksheet.write(row, inc(), aff['saleDate'])
14647 amit.gupta 163
                    worksheet1.write(row2, i, aff['saleDate'])
14460 amit.gupta 164
                    break
14647 amit.gupta 165
            row3 += 1
166
            i=-1
167
            worksheet2.write(row3, inc(), orderId)
168
            worksheet2.write(row3, inc(), row1[1])
169
            worksheet2.write(row3, inc(), row1[-1])
170
            worksheet2.write(row3, inc(), order['merchantOrderId'])
171
            worksheet2.write(row3, inc(), subOrder['productTitle'])
172
            worksheet2.write(row3, inc(), subOrder['amountPaid'])
173
            worksheet2.write(row3, inc(), subOrder['quantity'])
174
            worksheet2.write(row3, inc(), subOrder['status'])
175
            worksheet2.write(row3, inc(), subOrder['detailedStatus'])
176
            worksheet2.write(row3, inc(), subOrder['cashBackStatus'])
177
            worksheet2.write(row3, inc(), subOrder['cashBackAmount'])
178
            worksheet2.write(row3, inc(), subOrder['placedOn'])
179
            worksheet2.write(row3, inc(), order['subTagId'])
180
 
181
    i=-1
182
    worksheet3.write(0, inc(), "category",boldStyle)    
183
    worksheet3.write(0, inc(), "conversionStatus",boldStyle)    
184
    worksheet3.write(0, inc(), "Product Title",boldStyle)    
185
    worksheet3.write(0, inc(), "price",boldStyle)    
186
    worksheet3.write(0, inc(), "quantity",boldStyle)    
187
    worksheet3.write(0, inc(), "payOut",boldStyle)    
188
    worksheet3.write(0, inc(), "saleDate",boldStyle)    
189
    worksheet3.write(0, inc(), "subTagId",boldStyle)
190
    for aff in db.flipkartOrderAffiliateInfo.find({"reconciled":{"$exists":False}}):
191
        row4 += 1
192
        i =-1
193
        worksheet3.write(row4, inc(), aff["category"])    
194
        worksheet3.write(row4, inc(), aff["conversionStatus"])    
195
        skuData = getSkuData(2, aff["productCode"])
196
        if skuData is None:    
197
            worksheet3.write(row4, inc(), aff["productTitle"])
198
        else:
199
            worksheet3.write(row4, inc(), skuData["product_name"])
200
        worksheet3.write(row4, inc(), aff['price'])    
201
        worksheet3.write(row4, inc(), aff['quantity'])    
202
        worksheet3.write(row4, inc(), aff['payOut'])    
203
        worksheet3.write(row4, inc(), aff['saleDate'])    
204
        worksheet3.write(row4, inc(), aff['subTagId'])    
205
 
206
 
207
 
208
    wb.save(XLS_F_FILENAME)
14450 amit.gupta 209
def generateSnapDealReco():
14524 amit.gupta 210
    global i
14460 amit.gupta 211
    curs = getOrdersAfterDate(datetime.now() - timedelta(days=30), 3)
14450 amit.gupta 212
    db = client.Dtr
14524 amit.gupta 213
    notReconciled = {}
14487 amit.gupta 214
    matchedList = []
14450 amit.gupta 215
    workbook = xlwt.Workbook()
14501 amit.gupta 216
    worksheet = workbook.add_sheet("Snapdeal Reconciled")
217
    worksheet1 = workbook.add_sheet("Snapdeal Reconciled All")
14508 amit.gupta 218
    worksheet2 = workbook.add_sheet("Snapdeal Orders not reconciled")
219
    affNotReconciledSheet = workbook.add_sheet("Snapdeal Aff not reconciled")
220
    setHeaders(worksheet, worksheet1, worksheet2, affNotReconciledSheet)
14450 amit.gupta 221
    row = 0
14501 amit.gupta 222
    anotherrow = 0
14508 amit.gupta 223
    row2 = 0
14450 amit.gupta 224
    for row1 in curs:
225
        orderId = row1[0]
226
        order = db.merchantOrder.find_one({"orderId":orderId})
227
        if order is None:
228
            continue
14496 amit.gupta 229
        #saleTime = int(time.mktime(datetime.strptime(order['placedOn'], "%b %d, %Y, %I:%M %p").timetuple()))
14450 amit.gupta 230
        aff = list(db.snapdealOrderAffiliateInfo.find({"subTagId":order["subTagId"]}))
14501 amit.gupta 231
        anotherrow += 1
14524 amit.gupta 232
        if len(aff) > 0 and order["subTagId"] not in matchedList and int(order["paidAmount"])==int(aff[0]["saleAmount"]): 
14501 amit.gupta 233
            matchedList.append(order["subTagId"])
14610 amit.gupta 234
            db.snapdealOrderAffiliateInfo.update({"adId":aff[0].get("adId")}, {"$set":{"reconciled":True, "orderId":orderId}}, multi=True)
14501 amit.gupta 235
            order['reconciled'] = True
14610 amit.gupta 236
            order['adId'] = aff[0].get("adId")
14501 amit.gupta 237
            db.merchantOrder.save(order)
238
            row += 1
239
            i=-1 
240
            worksheet.write(row, inc(), orderId)
241
            worksheet1.write(anotherrow, i, orderId)
242
            worksheet.write(row, inc(), row1[1])
243
            worksheet1.write(anotherrow, i, row1[1])
14601 amit.gupta 244
            worksheet.write(row, inc(), row1[-2])
245
            worksheet1.write(anotherrow, i, row1[-2])
14501 amit.gupta 246
            worksheet.write(row, inc(), row1[-1])
247
            worksheet1.write(anotherrow, i, row1[-1])
248
            worksheet.write(row, inc(), order['merchantOrderId'])
249
            worksheet1.write(anotherrow, i, order['merchantOrderId'])
250
            worksheet.write(row, inc(), order['subTagId'])
251
            worksheet1.write(anotherrow, i, order['subTagId'])
252
            worksheet.write(row, inc(), order['placedOn'])
253
            worksheet1.write(anotherrow, i, order['placedOn'])
254
            worksheet.write(row, inc(), int(order['paidAmount']))
255
            worksheet1.write(anotherrow, i, int(order['paidAmount']))
14524 amit.gupta 256
            worksheet.write(row, inc(), aff[0]['saleDate'])
257
            worksheet1.write(anotherrow, i, aff[0]['saleDate'])
258
            worksheet.write(row, inc(), aff[0]['saleAmount'])
259
            worksheet1.write(anotherrow, i, aff[0]['saleAmount'])
260
            worksheet.write(row, inc(), aff[0]['payOut'])
261
            worksheet1.write(anotherrow, i, aff[0]['payOut'])
14601 amit.gupta 262
            worksheet.write(row, inc(), aff[0]['ip'])
263
            worksheet1.write(anotherrow, i, aff[0]['ip'])
14501 amit.gupta 264
            k = i
14504 amit.gupta 265
            row -= 1
266
            anotherrow -= 1
14501 amit.gupta 267
            for subOrder in order['subOrders']:
268
                i = k
14503 amit.gupta 269
                row += 1
270
                anotherrow += 1
14501 amit.gupta 271
                worksheet.write(row, inc(), subOrder['productTitle'])
272
                worksheet1.write(anotherrow, i, subOrder['productTitle'])
273
                worksheet.write(row, inc(), subOrder['amountPaid'])
274
                worksheet1.write(anotherrow, i, subOrder['amountPaid'])
275
                worksheet.write(row, inc(), subOrder['quantity'])
276
                worksheet1.write(anotherrow, i, subOrder['quantity'])
277
                worksheet.write(row, inc(), subOrder['status'])
278
                worksheet1.write(anotherrow, i, subOrder['status'])
279
                worksheet.write(row, inc(), subOrder['cashBackStatus'])
280
                worksheet1.write(anotherrow, i, subOrder['cashBackStatus'])
281
                worksheet.write(row, inc(), subOrder['cashBackAmount'])
282
                worksheet1.write(anotherrow, i, subOrder['cashBackAmount'])
14504 amit.gupta 283
 
14501 amit.gupta 284
        else:
14524 amit.gupta 285
            i=-1
14501 amit.gupta 286
            worksheet1.write(anotherrow, inc(), orderId)
287
            worksheet1.write(anotherrow, inc(), row1[1])
14601 amit.gupta 288
            worksheet1.write(anotherrow, inc(), row1[-2])
14501 amit.gupta 289
            worksheet1.write(anotherrow, inc(), row1[-1])
290
            worksheet1.write(anotherrow, inc(), order['merchantOrderId'])
291
            worksheet1.write(anotherrow, inc(), order['subTagId'])
292
            worksheet1.write(anotherrow, inc(), order['placedOn'])
293
            worksheet1.write(anotherrow, inc(), int(order['paidAmount']))
14524 amit.gupta 294
            timestamp1 = int(time.mktime(datetime.strptime(order['placedOn'], "%b %d, %Y, %I:%M %p").timetuple()))
295
            notReconciled[orderId] = (anotherrow, i, int(order['paidAmount']), timestamp1, order["subTagId"]) 
296
            inc()
297
            inc()
298
            inc()
14501 amit.gupta 299
            k = i
14504 amit.gupta 300
            anotherrow -= 1
14501 amit.gupta 301
            for subOrder in order['subOrders']:
14503 amit.gupta 302
                anotherrow += 1
14501 amit.gupta 303
                i = k
14505 amit.gupta 304
                worksheet1.write(anotherrow, inc(), subOrder['productTitle'])
305
                worksheet1.write(anotherrow, inc(), subOrder['amountPaid'])
306
                worksheet1.write(anotherrow, inc(), subOrder['quantity'])
307
                worksheet1.write(anotherrow, inc(), subOrder['status'])
308
                worksheet1.write(anotherrow, inc(), subOrder['cashBackStatus'])
309
                worksheet1.write(anotherrow, inc(), subOrder['cashBackAmount'])
14570 amit.gupta 310
 
14524 amit.gupta 311
 
312
    last30Days =  date.today() - timedelta(days=30)
313
    int(time.mktime(last30Days.timetuple()))
314
    row = 0
315
    for offer in db.snapdealOrderAffiliateInfo.find({"reconciled":{"$exists":False}, 
316
                                                     "saleTime":{"$gt":int(time.mktime(last30Days.timetuple())),
317
                                                                 "$lt":int(time.mktime(date.today().timetuple()))}} ):
318
        subTagId = offer.get("subTagId")
319
        saleTime = offer.get("saleTime")
320
        orders = getOrdersByTag(subTagId, 3)
321
        for order in orders:
322
            if notReconciled.has_key(order[0]):
323
                (roww, column, paidAmount, timestamp1, oSubTagId) = notReconciled[order[0]]
324
                if paidAmount==int(offer.get("saleAmount")) and timestamp1 <= saleTime and timestamp1 + 120 >= saleTime:
325
                    i = column
14570 amit.gupta 326
                    worksheet1.write(roww, inc(), offer.get("saleDate"))        
14527 amit.gupta 327
                    worksheet1.write(roww, inc(), offer.get("saleAmount"))        
328
                    worksheet1.write(roww, inc(), offer.get("payOut"))
329
                    del notReconciled[order[0]]
14530 amit.gupta 330
                    print "found match for user", order[1]
14610 amit.gupta 331
                    db.snapdealOrderAffiliateInfo.update({"adId":offer.get("adId")}, {"$set":{"reconciled":True, "orderId":order[0]}}, multi=True)
332
                    db.merchantOrder.update({"orderId":order[0]}, {"$set":{"reconciled":True, "adId":offer.get("adId")}}, multi=True)
14570 amit.gupta 333
                    break
14530 amit.gupta 334
 
14570 amit.gupta 335
    unreconciledOrders = notReconciled.keys()
336
    row2=0
337
    for row1 in curs:
338
        if row1[0] in unreconciledOrders:
339
            for order in db.merchantOrder.find({"orderId":row1[0]}):
340
                row2 += 1
341
                i=-1
342
                worksheet2.write(row2, inc(), order["orderId"])
343
                worksheet2.write(row2, inc(), row1[1])
14605 amit.gupta 344
                worksheet2.write(row2, inc(), row1[-2])
14570 amit.gupta 345
                worksheet2.write(row2, inc(), row1[-1])
346
                worksheet2.write(row2, inc(), order['merchantOrderId'])
347
                worksheet2.write(row2, inc(), order['subTagId'])
348
                worksheet2.write(row2, inc(), order['placedOn'])
349
                worksheet2.write(row2, inc(), int(order['paidAmount']))
350
                row2 -=1
351
                k=i
352
                for subOrder in order['subOrders']:
353
                    i = k
354
                    row2 += 1
355
                    worksheet2.write(row2, inc(), subOrder['productTitle'])
356
                    worksheet2.write(row2, inc(), subOrder['amountPaid'])
357
                    worksheet2.write(row2, inc(), subOrder['quantity'])
358
                    worksheet2.write(row2, inc(), subOrder['status'])
359
                    worksheet2.write(row2, inc(), subOrder['cashBackStatus'])
360
                    worksheet2.write(row2, inc(), subOrder['cashBackAmount'])
361
 
362
 
363
    for offer in db.snapdealOrderAffiliateInfo.find({"reconciled":{"$exists":False}, 
364
                                                     "saleTime":{"$gt":int(time.mktime(last30Days.timetuple())),
365
                                                                 "$lt":int(time.mktime(date.today().timetuple()))}} ):
366
        row += 1
367
        i=-1
368
        affNotReconciledSheet.write(row, inc(), offer.get("adId")) 
369
        affNotReconciledSheet.write(row, inc(), offer.get("subTagId")) 
370
        affNotReconciledSheet.write(row, inc(), offer.get("saleDate")) 
371
        affNotReconciledSheet.write(row, inc(), offer.get("saleAmount")) 
372
        affNotReconciledSheet.write(row, inc(), offer.get("payOut")) 
373
        affNotReconciledSheet.write(row, inc(), offer.get("conversionStatus"))
14601 amit.gupta 374
        affNotReconciledSheet.write(row, inc(), offer.get("ip"))
14570 amit.gupta 375
 
14460 amit.gupta 376
        workbook.save(XLS_FILENAME)
14450 amit.gupta 377
 
14647 amit.gupta 378
def sendmail(email, message, title, *varargs):
14450 amit.gupta 379
    if email == "":
380
        return
381
    mailServer = smtplib.SMTP(SMTP_SERVER, SMTP_PORT)
382
    mailServer.ehlo()
383
    mailServer.starttls()
384
    mailServer.ehlo()
385
 
386
    # Create the container (outer) email message.
387
    msg = MIMEMultipart()
388
    msg['Subject'] = title
389
    msg.preamble = title
390
    html_msg = MIMEText(message, 'html')
391
    msg.attach(html_msg)
392
 
393
    #snapdeal more to be added here
14647 amit.gupta 394
    for fileName in varargs:
395
        snapdeal = MIMEBase('application', 'vnd.ms-excel')
396
        snapdeal.set_payload(file(fileName).read())
397
        encoders.encode_base64(snapdeal)
398
        snapdeal.add_header('Content-Disposition', 'attachment;filename=' + fileName)
399
        msg.attach(snapdeal)
14450 amit.gupta 400
 
401
 
402
    email.append('amit.gupta@shop2020.in')
403
    MAILTO = email 
404
    mailServer.login(SENDER, PASSWORD)
405
    mailServer.sendmail(PASSWORD, MAILTO, msg.as_string())
406
 
14508 amit.gupta 407
def setHeaders(worksheet, worksheet1, worksheet2, affNotReconciledSheet):
14505 amit.gupta 408
    boldStyle = xlwt.XFStyle()
409
    f = xlwt.Font()
410
    f.bold = True
411
    boldStyle.font = f
14501 amit.gupta 412
    row = 0
413
    global i
414
    i=-1    
415
    worksheet.write(row, inc(), 'Order Id', boldStyle)
416
    worksheet.write(row, inc(), 'User Id', boldStyle)
14601 amit.gupta 417
    worksheet.write(row, inc(), 'Version Code', boldStyle)
14501 amit.gupta 418
    worksheet.write(row, inc(), 'Username', boldStyle)
419
    worksheet.write(row, inc(), 'Merchant Order Id', boldStyle)
420
    worksheet.write(row, inc(), 'SubtagId', boldStyle)
421
    worksheet.write(row, inc(), 'Sale Date', boldStyle)
422
    worksheet.write(row, inc(), 'Sale Amount', boldStyle)
423
    worksheet.write(row, inc(), 'Aff Sale Date', boldStyle)
424
    worksheet.write(row, inc(), 'Aff Sale Amt', boldStyle)
425
    worksheet.write(row, inc(), 'Aff PayOut', boldStyle)
14601 amit.gupta 426
    worksheet.write(row, inc(), 'IP', boldStyle)
14501 amit.gupta 427
    worksheet.write(row, inc(), 'Product Title', boldStyle)
428
    worksheet.write(row, inc(), 'Price', boldStyle)
429
    worksheet.write(row, inc(), 'Quantity', boldStyle)
430
    worksheet.write(row, inc(), 'Status', boldStyle)
431
    worksheet.write(row, inc(), 'Cashback Status', boldStyle)
432
    worksheet.write(row, inc(), 'CashBack', boldStyle)
433
 
14505 amit.gupta 434
    i = -1
14501 amit.gupta 435
    worksheet1.write(row, inc(), 'Order Id', boldStyle)
436
    worksheet1.write(row, inc(), 'User Id', boldStyle)
14601 amit.gupta 437
    worksheet1.write(row, inc(), 'Version Code', boldStyle)
14501 amit.gupta 438
    worksheet1.write(row, inc(), 'Username', boldStyle)
439
    worksheet1.write(row, inc(), 'Merchant Order Id', boldStyle)
440
    worksheet1.write(row, inc(), 'SubtagId', boldStyle)
441
    worksheet1.write(row, inc(), 'Sale Date', boldStyle)
442
    worksheet1.write(row, inc(), 'Sale Amount', boldStyle)
443
    worksheet1.write(row, inc(), 'Aff Sale Date', boldStyle)
444
    worksheet1.write(row, inc(), 'Aff Sale Amt', boldStyle)
445
    worksheet1.write(row, inc(), 'Aff PayOut', boldStyle)
14601 amit.gupta 446
    worksheet1.write(row, inc(), 'IP', boldStyle)
14501 amit.gupta 447
    worksheet1.write(row, inc(), 'Product Title', boldStyle)
448
    worksheet1.write(row, inc(), 'Price', boldStyle)
449
    worksheet1.write(row, inc(), 'Quantity', boldStyle)
450
    worksheet1.write(row, inc(), 'Status', boldStyle)
451
    worksheet1.write(row, inc(), 'Cashback Status', boldStyle)
452
    worksheet1.write(row, inc(), 'CashBack', boldStyle) 
14508 amit.gupta 453
 
454
    i = -1
455
    worksheet2.write(row, inc(), 'Order Id', boldStyle)
456
    worksheet2.write(row, inc(), 'User Id', boldStyle)
14605 amit.gupta 457
    worksheet2.write(row, inc(), 'Version Code', boldStyle)
14508 amit.gupta 458
    worksheet2.write(row, inc(), 'Username', boldStyle)
459
    worksheet2.write(row, inc(), 'Merchant Order Id', boldStyle)
460
    worksheet2.write(row, inc(), 'SubtagId', boldStyle)
461
    worksheet2.write(row, inc(), 'Sale Date', boldStyle)
462
    worksheet2.write(row, inc(), 'Sale Amount', boldStyle)
463
    worksheet2.write(row, inc(), 'Product Title', boldStyle)
464
    worksheet2.write(row, inc(), 'Price', boldStyle)
465
    worksheet2.write(row, inc(), 'Quantity', boldStyle)
466
    worksheet2.write(row, inc(), 'Status', boldStyle)
467
    worksheet2.write(row, inc(), 'Cashback Status', boldStyle)
468
    worksheet2.write(row, inc(), 'CashBack', boldStyle)
14450 amit.gupta 469
 
14508 amit.gupta 470
    i =-1
471
    affNotReconciledSheet.write(row, inc(), 'AdId', boldStyle) 
472
    affNotReconciledSheet.write(row, inc(), 'subTagId', boldStyle) 
473
    affNotReconciledSheet.write(row, inc(), 'Sale Date', boldStyle) 
474
    affNotReconciledSheet.write(row, inc(), 'Sale Amount', boldStyle) 
475
    affNotReconciledSheet.write(row, inc(), 'Pay Out', boldStyle) 
476
    affNotReconciledSheet.write(row, inc(), 'Status', boldStyle) 
14601 amit.gupta 477
    affNotReconciledSheet.write(row, inc(), 'IP', boldStyle)
14524 amit.gupta 478
 
479
def getUserAmountReconciled():
480
    pass
481
 
14613 amit.gupta 482
def getUserOrders():
483
    global i
484
    rb = open_workbook(XLS_FILENAME,formatting_info=True)
485
    wb = copy(rb)
486
    worksheet = wb.add_sheet("All Users")
487
    worksheet1 = wb.add_sheet("Suspected Users")
14632 amit.gupta 488
    workbook = xlwt.Workbook()
489
    sh1 = workbook.add_sheet("All Orders")
490
 
14613 amit.gupta 491
    db=client.Dtr
492
    results = Mysql.fetchResult('''
493
        select ow.*, u.username, crm1.order_count, u.referrer from order_view ow left join users u on u.id = ow.user_id left join (select user_id, count(*) as order_count from order_view where status = 'ORDER_CREATED'  group by user_id) as crm1 on ow.user_id = crm1.user_id where lower(u.referrer) not like 'emp%' 
494
        ''',)
495
    orders = []
496
    orders.append("")
497
    orderH = []
498
    row = 0
499
    i=-1
500
    worksheet.write(row, inc(), 'User Id', boldStyle)
501
    worksheet1.write(row, i, 'User Id', boldStyle)
14632 amit.gupta 502
    sh1.write(row, i, 'User Id', boldStyle)
14613 amit.gupta 503
    worksheet.write(row, inc(), 'User name', boldStyle)
504
    worksheet1.write(row, i, 'User name', boldStyle)
14632 amit.gupta 505
    sh1.write(row, i, 'User name', boldStyle)
14613 amit.gupta 506
    worksheet.write(row, inc(), 'Order Id', boldStyle)
507
    worksheet1.write(row, i, 'Order Id', boldStyle)
14632 amit.gupta 508
    sh1.write(row, i, 'Order Id', boldStyle)
14613 amit.gupta 509
    worksheet.write(row, inc(), 'Created On', boldStyle)
510
    worksheet1.write(row, i, 'Created On', boldStyle)
14632 amit.gupta 511
    sh1.write(row, i, 'Created On', boldStyle)
14613 amit.gupta 512
    worksheet.write(row, inc(), 'Store Id', boldStyle)
513
    worksheet1.write(row, i, 'Store Id', boldStyle)
14632 amit.gupta 514
    sh1.write(row, i, 'Store Id', boldStyle)
14613 amit.gupta 515
    worksheet.write(row, inc(), 'Merchant Order Id', boldStyle)
516
    worksheet1.write(row, i, 'Merchant Order Id', boldStyle)
14632 amit.gupta 517
    sh1.write(row, i, 'Merchant Order Id', boldStyle)
14616 amit.gupta 518
    worksheet.write(row, inc(), 'Product title', boldStyle)
519
    worksheet1.write(row, i, 'Product title', boldStyle)
14632 amit.gupta 520
    sh1.write(row, i, 'Product title', boldStyle)
14613 amit.gupta 521
    worksheet.write(row, inc(), 'Amount Paid', boldStyle)
522
    worksheet1.write(row, i, 'Amount Paid', boldStyle)
14632 amit.gupta 523
    sh1.write(row, i, 'Amount Paid', boldStyle)
14613 amit.gupta 524
    worksheet.write(row, inc(), 'Cashback', boldStyle)
525
    worksheet1.write(row, i, 'Cashback', boldStyle)
14632 amit.gupta 526
    sh1.write(row, i, 'Brand', boldStyle)
14613 amit.gupta 527
    worksheet.write(row, inc(), 'Order Status', boldStyle)
528
    worksheet1.write(row, i, 'Order Status', boldStyle)
14632 amit.gupta 529
    sh1.write(row, i, 'Model', boldStyle)
14613 amit.gupta 530
    worksheet.write(row, inc(), 'Detailed Status', boldStyle)
531
    worksheet1.write(row, i, 'Detailed Status', boldStyle)
14632 amit.gupta 532
    sh1.write(row, i, 'Category', boldStyle)
14613 amit.gupta 533
    worksheet.write(row, inc(), 'Cashback Status', boldStyle)
534
    worksheet1.write(row, i, 'Cashback Status', boldStyle)
535
    worksheet.write(row, inc(), 'Reconciled', boldStyle)
536
    worksheet1.write(row, i, 'Reconciled', boldStyle)
537
    worksheet.write(row, inc(), 'IP', boldStyle)
538
    worksheet1.write(row, i, 'IP', boldStyle)
539
 
540
    row=0
541
    row2=0
14632 amit.gupta 542
    row3=0
543
    db1 = client.Catalog
14613 amit.gupta 544
    for result in results:
545
        morder = db.merchantOrder.find_one({"orderId":result[0]})
546
        if morder is not None:
547
            subOrders = morder.get("subOrders")
548
            if subOrders is not None:
549
                for  subOrder in subOrders:
14632 amit.gupta 550
                    row3+=1
551
                    i=-1
552
                    sh1.write(row3, inc(), result[0])
553
                    sh1.write(row3, inc(), result[-3])
554
                    sh1.write(row3, inc(), result[1])
555
                    sh1.write(row3, inc(), result[-4], datetime_format)
556
                    sh1.write(row3, inc(), sourceMap.get(result[2]))
557
                    sh1.write(row3, inc(), morder.get("merchantOrderId"))
558
                    sh1.write(row3, inc(), subOrder.get("productTitle"))
559
                    inc()
560
                    if int(subOrder.get("quantity")) > 0:
561
                        sh1.write(row3, i, int(subOrder.get("amountPaid"))/int(subOrder.get("quantity")))
14647 amit.gupta 562
                    skuData = getSkuData(morder.get("storeId"), subOrder.get("productCode"))
563
                    if morder.get("storeId") in (1,2,4,5):
564
                        skuData = db1.MasterData.find_one({'identifier':subOrder.get("productCode").strip(), 'source_id':morder.get("storeId")})
565
                    elif morder.get("storeId") == 3:
566
                        skuData = db1.MasterData.find_one({'secondaryIdentifier':subOrder.get("productCode").strip(), 'source_id':morder.get("storeId")})
14634 amit.gupta 567
                    if skuData is not None:
568
                        sh1.write(row3, inc(), skuData.get("brand"))
569
                        sh1.write(row3, inc(), skuData.get("model_name"))
570
                        sh1.write(row3, inc(), skuData.get("category"))
14613 amit.gupta 571
                    if subOrder.get("cashBackStatus") == Store.CB_APPROVED or subOrder.get("cashBackStatus") == Store.CB_PENDING:
572
                        row +=1
573
                        i=-1
574
                        worksheet.write(row, inc(), result[0])
575
                        worksheet.write(row, inc(), result[-3])
576
                        worksheet.write(row, inc(), result[1])
14616 amit.gupta 577
                        worksheet.write(row, inc(), result[-4], datetime_format)
14613 amit.gupta 578
                        worksheet.write(row, inc(), result[2])
579
                        worksheet.write(row, inc(), morder.get("merchantOrderId"))
14616 amit.gupta 580
                        worksheet.write(row, inc(), subOrder.get("productTitle"))
14613 amit.gupta 581
                        worksheet.write(row, inc(), subOrder.get("amountPaid"))
582
                        worksheet.write(row, inc(), subOrder.get("cashBackAmount"))
583
                        worksheet.write(row, inc(), subOrder.get("status"))
584
                        worksheet.write(row, inc(), subOrder.get("detailedStatus"))
585
                        worksheet.write(row, inc(), subOrder.get("cashBackStatus"))
586
                        worksheet.write(row, inc(), False if morder.get("reconciled") is None else True)
587
                        if morder.get("reconciled") and morder.get("storeId")==3:
588
                            try:
589
                                worksheet.write(row, inc(), db.snapdealOrderAffiliateInfo.find_one({"adId":morder.get("adId"), "reconciled":True}).get("ip"))
590
                            except:
591
                                print "Could not find", morder.get("adId"), "that is reconcired for order", morder.get("orderId")
592
 
593
                        if result[-2] >= 10 and result[-1].lower().startswith("crm"):
594
                            row2 +=1 
595
                            i=-1
596
                            worksheet1.write(row2, inc(), result[0])
597
                            worksheet1.write(row2, inc(), result[-3])
598
                            worksheet1.write(row2, inc(), result[1])
14616 amit.gupta 599
                            worksheet1.write(row2, inc(), result[-4], datetime_format)
14613 amit.gupta 600
                            worksheet1.write(row2, inc(), result[2])
601
                            worksheet1.write(row2, inc(), morder.get("merchantOrderId"))
14616 amit.gupta 602
                            worksheet1.write(row2, inc(), subOrder.get("productTitle"))
14613 amit.gupta 603
                            worksheet1.write(row2, inc(), subOrder.get("amountPaid"))
604
                            worksheet1.write(row2, inc(), subOrder.get("cashBackAmount"))
605
                            worksheet1.write(row2, inc(), subOrder.get("status"))
606
                            worksheet1.write(row2, inc(), subOrder.get("detailedStatus"))
607
                            worksheet1.write(row2, inc(), subOrder.get("cashBackStatus"))
608
                            worksheet1.write(row2, inc(), False if morder.get("reconciled") is None else True)
609
                            if morder.get("reconciled") and morder.get("storeId")==3:
610
                                try:
611
                                    worksheet1.write(row2, inc(), db.snapdealOrderAffiliateInfo.find_one({"adId":morder.get("adId"), "reconciled":True}).get("ip"))
612
                                except:
613
                                    print "Could not find", morder.get("adId"), "that is reconcired for order", morder.get("orderId")
14632 amit.gupta 614
 
615
 
14613 amit.gupta 616
    wb.save(XLS_FILENAME)
14632 amit.gupta 617
    workbook.save(XLS_O_FILENAME)
14647 amit.gupta 618
 
619
def getSkuData(storeId, identifier):
620
    if storeId in (1,2,4,5):
621
        skuData = client.Catalog.MasterData.find_one({'identifier':identifier, 'source_id':storeId})
622
    elif storeId == 3:
623
        skuData = client.Catalog.MasterData.find_one({'secondaryIdentifier':identifier, 'source_id':storeId})
624
    return skuData
625
 
14460 amit.gupta 626
def inc():
627
    global i
628
    i+=1
629
    return i
630
 
14632 amit.gupta 631
def addHeaders(sheet):
632
    global i
633
    i = 0
634
    sheet.write(0, inc(), )
14450 amit.gupta 635
def main():
14647 amit.gupta 636
 
14450 amit.gupta 637
    generateSnapDealReco()
14647 amit.gupta 638
    generateFlipkartReco()
14613 amit.gupta 639
    getUserOrders()
14649 amit.gupta 640
    sendmail(["amit.gupta@shop2020.in", "rajneesh.arora@saholic.com"], "", "Affiliate Reco", XLS_FILENAME, XLS_F_FILENAME)
14633 amit.gupta 641
    sendmail(["amit.gupta@shop2020.in", "rajneesh.arora@saholic.com", "chaitnaya.vats@saholic.com", "manoj.kumar@saholic.com"], "", "All DTR Orders", XLS_O_FILENAME)
14450 amit.gupta 642
 
643
if __name__ == '__main__':
14460 amit.gupta 644
    main()
645