Subversion Repositories SmartDukaan

Rev

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