Subversion Repositories SmartDukaan

Rev

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