Subversion Repositories SmartDukaan

Rev

Rev 14658 | Rev 14693 | 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)
14632 amit.gupta 501
    sh1.write(row, i, 'User Id', boldStyle)
14613 amit.gupta 502
    worksheet.write(row, inc(), 'User name', boldStyle)
503
    worksheet1.write(row, i, 'User name', boldStyle)
14632 amit.gupta 504
    sh1.write(row, i, 'User name', boldStyle)
14613 amit.gupta 505
    worksheet.write(row, inc(), 'Order Id', boldStyle)
506
    worksheet1.write(row, i, 'Order Id', boldStyle)
14632 amit.gupta 507
    sh1.write(row, i, 'Order Id', boldStyle)
14613 amit.gupta 508
    worksheet.write(row, inc(), 'Created On', boldStyle)
509
    worksheet1.write(row, i, 'Created On', boldStyle)
14632 amit.gupta 510
    sh1.write(row, i, 'Created On', boldStyle)
14613 amit.gupta 511
    worksheet.write(row, inc(), 'Store Id', boldStyle)
512
    worksheet1.write(row, i, 'Store Id', boldStyle)
14632 amit.gupta 513
    sh1.write(row, i, 'Store Id', boldStyle)
14613 amit.gupta 514
    worksheet.write(row, inc(), 'Merchant Order Id', boldStyle)
515
    worksheet1.write(row, i, 'Merchant Order Id', boldStyle)
14632 amit.gupta 516
    sh1.write(row, i, 'Merchant Order Id', boldStyle)
14616 amit.gupta 517
    worksheet.write(row, inc(), 'Product title', boldStyle)
518
    worksheet1.write(row, i, 'Product title', boldStyle)
14632 amit.gupta 519
    sh1.write(row, i, 'Product title', boldStyle)
14613 amit.gupta 520
    worksheet.write(row, inc(), 'Amount Paid', boldStyle)
521
    worksheet1.write(row, i, 'Amount Paid', boldStyle)
14632 amit.gupta 522
    sh1.write(row, i, 'Amount Paid', boldStyle)
14613 amit.gupta 523
    worksheet.write(row, inc(), 'Cashback', boldStyle)
524
    worksheet1.write(row, i, 'Cashback', boldStyle)
14632 amit.gupta 525
    sh1.write(row, i, 'Brand', boldStyle)
14613 amit.gupta 526
    worksheet.write(row, inc(), 'Order Status', boldStyle)
527
    worksheet1.write(row, i, 'Order Status', boldStyle)
14632 amit.gupta 528
    sh1.write(row, i, 'Model', boldStyle)
14613 amit.gupta 529
    worksheet.write(row, inc(), 'Detailed Status', boldStyle)
530
    worksheet1.write(row, i, 'Detailed Status', boldStyle)
14632 amit.gupta 531
    sh1.write(row, i, 'Category', boldStyle)
14613 amit.gupta 532
    worksheet.write(row, inc(), 'Cashback Status', boldStyle)
533
    worksheet1.write(row, i, 'Cashback Status', boldStyle)
534
    worksheet.write(row, inc(), 'Reconciled', boldStyle)
535
    worksheet1.write(row, i, 'Reconciled', boldStyle)
536
    worksheet.write(row, inc(), 'IP', boldStyle)
537
    worksheet1.write(row, i, 'IP', boldStyle)
538
 
539
    row=0
540
    row2=0
14632 amit.gupta 541
    row3=0
542
    db1 = client.Catalog
14613 amit.gupta 543
    for result in results:
544
        morder = db.merchantOrder.find_one({"orderId":result[0]})
545
        if morder is not None:
546
            subOrders = morder.get("subOrders")
547
            if subOrders is not None:
548
                for  subOrder in subOrders:
14632 amit.gupta 549
                    row3+=1
550
                    i=-1
551
                    sh1.write(row3, inc(), result[0])
552
                    sh1.write(row3, inc(), result[-3])
553
                    sh1.write(row3, inc(), result[1])
554
                    sh1.write(row3, inc(), result[-4], datetime_format)
555
                    sh1.write(row3, inc(), sourceMap.get(result[2]))
556
                    sh1.write(row3, inc(), morder.get("merchantOrderId"))
557
                    sh1.write(row3, inc(), subOrder.get("productTitle"))
558
                    inc()
559
                    if int(subOrder.get("quantity")) > 0:
560
                        sh1.write(row3, i, int(subOrder.get("amountPaid"))/int(subOrder.get("quantity")))
14647 amit.gupta 561
                    skuData = getSkuData(morder.get("storeId"), subOrder.get("productCode"))
562
                    if morder.get("storeId") in (1,2,4,5):
563
                        skuData = db1.MasterData.find_one({'identifier':subOrder.get("productCode").strip(), 'source_id':morder.get("storeId")})
564
                    elif morder.get("storeId") == 3:
565
                        skuData = db1.MasterData.find_one({'secondaryIdentifier':subOrder.get("productCode").strip(), 'source_id':morder.get("storeId")})
14634 amit.gupta 566
                    if skuData is not None:
567
                        sh1.write(row3, inc(), skuData.get("brand"))
568
                        sh1.write(row3, inc(), skuData.get("model_name"))
569
                        sh1.write(row3, inc(), skuData.get("category"))
14613 amit.gupta 570
                    if subOrder.get("cashBackStatus") == Store.CB_APPROVED or subOrder.get("cashBackStatus") == Store.CB_PENDING:
571
                        row +=1
572
                        i=-1
573
                        worksheet.write(row, inc(), result[0])
574
                        worksheet.write(row, inc(), result[-3])
575
                        worksheet.write(row, inc(), result[1])
14616 amit.gupta 576
                        worksheet.write(row, inc(), result[-4], datetime_format)
14613 amit.gupta 577
                        worksheet.write(row, inc(), result[2])
578
                        worksheet.write(row, inc(), morder.get("merchantOrderId"))
14616 amit.gupta 579
                        worksheet.write(row, inc(), subOrder.get("productTitle"))
14613 amit.gupta 580
                        worksheet.write(row, inc(), subOrder.get("amountPaid"))
581
                        worksheet.write(row, inc(), subOrder.get("cashBackAmount"))
582
                        worksheet.write(row, inc(), subOrder.get("status"))
583
                        worksheet.write(row, inc(), subOrder.get("detailedStatus"))
584
                        worksheet.write(row, inc(), subOrder.get("cashBackStatus"))
585
                        worksheet.write(row, inc(), False if morder.get("reconciled") is None else True)
586
                        if morder.get("reconciled") and morder.get("storeId")==3:
587
                            try:
588
                                worksheet.write(row, inc(), db.snapdealOrderAffiliateInfo.find_one({"adId":morder.get("adId"), "reconciled":True}).get("ip"))
589
                            except:
590
                                print "Could not find", morder.get("adId"), "that is reconcired for order", morder.get("orderId")
591
 
592
                        if result[-2] >= 10 and result[-1].lower().startswith("crm"):
593
                            row2 +=1 
594
                            i=-1
595
                            worksheet1.write(row2, inc(), result[0])
596
                            worksheet1.write(row2, inc(), result[-3])
597
                            worksheet1.write(row2, inc(), result[1])
14616 amit.gupta 598
                            worksheet1.write(row2, inc(), result[-4], datetime_format)
14613 amit.gupta 599
                            worksheet1.write(row2, inc(), result[2])
600
                            worksheet1.write(row2, inc(), morder.get("merchantOrderId"))
14616 amit.gupta 601
                            worksheet1.write(row2, inc(), subOrder.get("productTitle"))
14613 amit.gupta 602
                            worksheet1.write(row2, inc(), subOrder.get("amountPaid"))
603
                            worksheet1.write(row2, inc(), subOrder.get("cashBackAmount"))
604
                            worksheet1.write(row2, inc(), subOrder.get("status"))
605
                            worksheet1.write(row2, inc(), subOrder.get("detailedStatus"))
606
                            worksheet1.write(row2, inc(), subOrder.get("cashBackStatus"))
607
                            worksheet1.write(row2, inc(), False if morder.get("reconciled") is None else True)
608
                            if morder.get("reconciled") and morder.get("storeId")==3:
609
                                try:
610
                                    worksheet1.write(row2, inc(), db.snapdealOrderAffiliateInfo.find_one({"adId":morder.get("adId"), "reconciled":True}).get("ip"))
611
                                except:
612
                                    print "Could not find", morder.get("adId"), "that is reconcired for order", morder.get("orderId")
14632 amit.gupta 613
 
614
 
14613 amit.gupta 615
    wb.save(XLS_FILENAME)
14632 amit.gupta 616
    workbook.save(XLS_O_FILENAME)
14647 amit.gupta 617
 
618
def getSkuData(storeId, identifier):
619
    if storeId in (1,2,4,5):
620
        skuData = client.Catalog.MasterData.find_one({'identifier':identifier, 'source_id':storeId})
621
    elif storeId == 3:
622
        skuData = client.Catalog.MasterData.find_one({'secondaryIdentifier':identifier, 'source_id':storeId})
623
    return skuData
624
 
14460 amit.gupta 625
def inc():
626
    global i
627
    i+=1
628
    return i
629
 
14632 amit.gupta 630
def addHeaders(sheet):
631
    global i
632
    i = 0
633
    sheet.write(0, inc(), )
14450 amit.gupta 634
def main():
14647 amit.gupta 635
 
14450 amit.gupta 636
    generateSnapDealReco()
14647 amit.gupta 637
    generateFlipkartReco()
14650 amit.gupta 638
    generateAmazonReco(XLS_A_FILENAME)
14613 amit.gupta 639
    getUserOrders()
14659 amit.gupta 640
    sendmail(["amit.gupta@shop2020.in","rajneesh.arora@saholic.com"], "", "Affiliate Reco", XLS_FILENAME, XLS_F_FILENAME, XLS_A_FILENAME)
14658 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