Subversion Repositories SmartDukaan

Rev

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