Subversion Repositories SmartDukaan

Rev

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