Subversion Repositories SmartDukaan

Rev

Rev 14530 | Rev 14571 | 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
14524 amit.gupta 7
from dtr.storage.Mysql import getOrdersAfterDate, \
8
    getOrdersByTag
14450 amit.gupta 9
from email import encoders
10
from email.mime.base import MIMEBase
11
from email.mime.multipart import MIMEMultipart
12
from email.mime.text import MIMEText
13
from pymongo.mongo_client import MongoClient
14460 amit.gupta 14
from xlrd import open_workbook
14524 amit.gupta 15
from xlutils.copy import copy
14460 amit.gupta 16
from xlwt.Workbook import Workbook
14450 amit.gupta 17
import MySQLdb
18
import smtplib
19
import time
20
import xlwt
14460 amit.gupta 21
#from xlwt import 
14450 amit.gupta 22
 
23
client = MongoClient('mongodb://localhost:27017/')
24
 
25
SENDER = "cnc.center@shop2020.in"
26
PASSWORD = "5h0p2o2o"
27
SUBJECT = "DTR User Segmentation report for " + date.today().isoformat()
28
SMTP_SERVER = "smtp.gmail.com"
29
SMTP_PORT = 587    
30
 
14460 amit.gupta 31
XLS_FILENAME = "dtrsourcesreco.xls"
32
boldStyle = xlwt.XFStyle()
33
f = xlwt.Font()
34
f.bold = True
35
boldStyle.font = f
36
i = -1
14450 amit.gupta 37
def generateFlipkartReco():
14508 amit.gupta 38
    global i
39
    i = -1
14460 amit.gupta 40
    curs = getOrdersAfterDate(datetime.now() - timedelta(days=30), 2)
41
    db = client.Dtr
42
    rb = open_workbook(XLS_FILENAME)
43
    wb = copy(rb)
44
    #wb = xlwt.Workbook()
45
    row = 0
46
    worksheet = wb.add_sheet("Flipkart")
47
    worksheet.write(row, inc(), 'Order Id', boldStyle)
48
    worksheet.write(row, inc(), 'User Id', boldStyle)
14474 amit.gupta 49
    worksheet.write(row, inc(), 'Username', boldStyle)
14460 amit.gupta 50
    worksheet.write(row, inc(), 'Merchant Order Id', boldStyle)
51
    worksheet.write(row, inc(), 'Product Title', boldStyle)
52
    worksheet.write(row, inc(), 'Price', boldStyle)
53
    worksheet.write(row, inc(), 'Quantity', boldStyle)
54
    worksheet.write(row, inc(), 'Status', boldStyle)
55
    worksheet.write(row, inc(), 'Detailed Status', boldStyle)
56
    worksheet.write(row, inc(), 'Cashback Status', boldStyle)
57
    worksheet.write(row, inc(), 'Our CashBack', boldStyle)
58
    worksheet.write(row, inc(), 'Sale Date', boldStyle)
59
    worksheet.write(row, inc(), 'SubtagId', boldStyle)
60
    worksheet.write(row, inc(), 'Category', boldStyle)
61
    worksheet.write(row, inc(), 'Aff PayOut', boldStyle)
62
    worksheet.write(row, inc(), 'Aff Sale Amount', boldStyle)
63
    worksheet.write(row, inc(), 'Aff Sale Date', boldStyle)
64
    for row1 in curs:
65
        orderId = row1[0]
66
        order = db.merchantOrder.find_one({"orderId":orderId})
67
        if order is None:
68
            continue
69
        saleTime = int(time.mktime(datetime.strptime(order['placedOn'], "%d %B, %Y %I:%M %p").replace(hour=0, minute=0, second=0, microsecond=0).timetuple()))
70
        #saleTime1 = int(time.mktime((datetime.strptime(order['placedOn'], "%b %d, %Y %I:%M %p") + timedelta(seconds=-60)).timetuple()))
71
 
72
        for subOrder in order['subOrders']: 
14489 amit.gupta 73
            affs = list(db.flipkartOrderAffiliateInfo.find({"subOrders.productCode":subOrder.get("productCode"), "saleDateInt":saleTime}))
14460 amit.gupta 74
            row += 1
75
            i=-1
76
            worksheet.write(row, inc(), orderId)
77
            worksheet.write(row, inc(), row1[1])
14474 amit.gupta 78
            worksheet.write(row, inc(), row1[-1])
14460 amit.gupta 79
            worksheet.write(row, inc(), order['merchantOrderId'])
80
            worksheet.write(row, inc(), subOrder['productTitle'])
81
            worksheet.write(row, inc(), subOrder['amountPaid'])
82
            worksheet.write(row, inc(), subOrder['quantity'])
83
            worksheet.write(row, inc(), subOrder['status'])
84
            worksheet.write(row, inc(), subOrder['detailedStatus'])
85
            worksheet.write(row, inc(), subOrder['cashBackStatus'])
86
            worksheet.write(row, inc(), subOrder['cashBackAmount'])
87
            worksheet.write(row, inc(), subOrder['placedOn'])
88
            worksheet.write(row, inc(), order['subTagId'])
89
            for aff in affs:
14487 amit.gupta 90
                if aff['subTagId']== subOrder['subTagId']:
14460 amit.gupta 91
                    worksheet.write(row, inc(), aff['category'])
92
                    worksheet.write(row, inc(), aff['payOut'])
93
                    worksheet.write(row, inc(), aff['saleAmount'])
94
                    worksheet.write(row, inc(), aff['saleDate'])
95
                    break
96
 
97
 
98
        wb.save(XLS_FILENAME)
14450 amit.gupta 99
def generateSnapDealReco():
14524 amit.gupta 100
    global i
14460 amit.gupta 101
    curs = getOrdersAfterDate(datetime.now() - timedelta(days=30), 3)
14450 amit.gupta 102
    db = client.Dtr
14524 amit.gupta 103
    notReconciled = {}
14487 amit.gupta 104
    matchedList = []
14450 amit.gupta 105
    workbook = xlwt.Workbook()
14501 amit.gupta 106
    worksheet = workbook.add_sheet("Snapdeal Reconciled")
107
    worksheet1 = workbook.add_sheet("Snapdeal Reconciled All")
14508 amit.gupta 108
    worksheet2 = workbook.add_sheet("Snapdeal Orders not reconciled")
109
    affNotReconciledSheet = workbook.add_sheet("Snapdeal Aff not reconciled")
110
    setHeaders(worksheet, worksheet1, worksheet2, affNotReconciledSheet)
14450 amit.gupta 111
    row = 0
14501 amit.gupta 112
    anotherrow = 0
14508 amit.gupta 113
    row2 = 0
14450 amit.gupta 114
    for row1 in curs:
115
        orderId = row1[0]
116
        order = db.merchantOrder.find_one({"orderId":orderId})
117
        if order is None:
118
            continue
14496 amit.gupta 119
        #saleTime = int(time.mktime(datetime.strptime(order['placedOn'], "%b %d, %Y, %I:%M %p").timetuple()))
14450 amit.gupta 120
        aff = list(db.snapdealOrderAffiliateInfo.find({"subTagId":order["subTagId"]}))
14501 amit.gupta 121
        anotherrow += 1
14524 amit.gupta 122
        if len(aff) > 0 and order["subTagId"] not in matchedList and int(order["paidAmount"])==int(aff[0]["saleAmount"]): 
14501 amit.gupta 123
            matchedList.append(order["subTagId"])
14529 amit.gupta 124
            db.snapdealOrderAffiliateInfo.update({"adId":aff[0].get("adId")}, {"$set":{"reconciled":True}}, multi=True)
14501 amit.gupta 125
            order['reconciled'] = True
126
            db.merchantOrder.save(order)
127
            row += 1
128
            i=-1 
129
            worksheet.write(row, inc(), orderId)
130
            worksheet1.write(anotherrow, i, orderId)
131
            worksheet.write(row, inc(), row1[1])
132
            worksheet1.write(anotherrow, i, row1[1])
133
            worksheet.write(row, inc(), row1[-1])
134
            worksheet1.write(anotherrow, i, row1[-1])
135
            worksheet.write(row, inc(), order['merchantOrderId'])
136
            worksheet1.write(anotherrow, i, order['merchantOrderId'])
137
            worksheet.write(row, inc(), order['subTagId'])
138
            worksheet1.write(anotherrow, i, order['subTagId'])
139
            worksheet.write(row, inc(), order['placedOn'])
140
            worksheet1.write(anotherrow, i, order['placedOn'])
141
            worksheet.write(row, inc(), int(order['paidAmount']))
142
            worksheet1.write(anotherrow, i, int(order['paidAmount']))
14524 amit.gupta 143
            worksheet.write(row, inc(), aff[0]['saleDate'])
144
            worksheet1.write(anotherrow, i, aff[0]['saleDate'])
145
            worksheet.write(row, inc(), aff[0]['saleAmount'])
146
            worksheet1.write(anotherrow, i, aff[0]['saleAmount'])
147
            worksheet.write(row, inc(), aff[0]['payOut'])
148
            worksheet1.write(anotherrow, i, aff[0]['payOut'])
14501 amit.gupta 149
            k = i
14504 amit.gupta 150
            row -= 1
151
            anotherrow -= 1
14501 amit.gupta 152
            for subOrder in order['subOrders']:
153
                i = k
14503 amit.gupta 154
                row += 1
155
                anotherrow += 1
14501 amit.gupta 156
                worksheet.write(row, inc(), subOrder['productTitle'])
157
                worksheet1.write(anotherrow, i, subOrder['productTitle'])
158
                worksheet.write(row, inc(), subOrder['amountPaid'])
159
                worksheet1.write(anotherrow, i, subOrder['amountPaid'])
160
                worksheet.write(row, inc(), subOrder['quantity'])
161
                worksheet1.write(anotherrow, i, subOrder['quantity'])
162
                worksheet.write(row, inc(), subOrder['status'])
163
                worksheet1.write(anotherrow, i, subOrder['status'])
164
                worksheet.write(row, inc(), subOrder['cashBackStatus'])
165
                worksheet1.write(anotherrow, i, subOrder['cashBackStatus'])
166
                worksheet.write(row, inc(), subOrder['cashBackAmount'])
167
                worksheet1.write(anotherrow, i, subOrder['cashBackAmount'])
14504 amit.gupta 168
 
14501 amit.gupta 169
        else:
14524 amit.gupta 170
            i=-1
14501 amit.gupta 171
            worksheet1.write(anotherrow, inc(), orderId)
172
            worksheet1.write(anotherrow, inc(), row1[1])
173
            worksheet1.write(anotherrow, inc(), row1[-1])
174
            worksheet1.write(anotherrow, inc(), order['merchantOrderId'])
175
            worksheet1.write(anotherrow, inc(), order['subTagId'])
176
            worksheet1.write(anotherrow, inc(), order['placedOn'])
177
            worksheet1.write(anotherrow, inc(), int(order['paidAmount']))
14524 amit.gupta 178
            timestamp1 = int(time.mktime(datetime.strptime(order['placedOn'], "%b %d, %Y, %I:%M %p").timetuple()))
179
            notReconciled[orderId] = (anotherrow, i, int(order['paidAmount']), timestamp1, order["subTagId"]) 
180
            inc()
181
            inc()
182
            inc()
14501 amit.gupta 183
            k = i
14504 amit.gupta 184
            anotherrow -= 1
14501 amit.gupta 185
            for subOrder in order['subOrders']:
14503 amit.gupta 186
                anotherrow += 1
14501 amit.gupta 187
                i = k
14505 amit.gupta 188
                worksheet1.write(anotherrow, inc(), subOrder['productTitle'])
189
                worksheet1.write(anotherrow, inc(), subOrder['amountPaid'])
190
                worksheet1.write(anotherrow, inc(), subOrder['quantity'])
191
                worksheet1.write(anotherrow, inc(), subOrder['status'])
192
                worksheet1.write(anotherrow, inc(), subOrder['cashBackStatus'])
193
                worksheet1.write(anotherrow, inc(), subOrder['cashBackAmount'])
14570 amit.gupta 194
 
14524 amit.gupta 195
 
196
    last30Days =  date.today() - timedelta(days=30)
197
    int(time.mktime(last30Days.timetuple()))
198
    row = 0
199
    for offer in db.snapdealOrderAffiliateInfo.find({"reconciled":{"$exists":False}, 
200
                                                     "saleTime":{"$gt":int(time.mktime(last30Days.timetuple())),
201
                                                                 "$lt":int(time.mktime(date.today().timetuple()))}} ):
202
        subTagId = offer.get("subTagId")
203
        saleTime = offer.get("saleTime")
204
        orders = getOrdersByTag(subTagId, 3)
205
        for order in orders:
206
            if notReconciled.has_key(order[0]):
207
                (roww, column, paidAmount, timestamp1, oSubTagId) = notReconciled[order[0]]
208
                if paidAmount==int(offer.get("saleAmount")) and timestamp1 <= saleTime and timestamp1 + 120 >= saleTime:
209
                    i = column
14570 amit.gupta 210
                    worksheet1.write(roww, inc(), offer.get("saleDate"))        
14527 amit.gupta 211
                    worksheet1.write(roww, inc(), offer.get("saleAmount"))        
212
                    worksheet1.write(roww, inc(), offer.get("payOut"))
14570 amit.gupta 213
                    worksheet1.write(roww, 16, offer.get("payOut"))
14527 amit.gupta 214
                    del notReconciled[order[0]]
14530 amit.gupta 215
                    print "found match for user", order[1]
14570 amit.gupta 216
                    db.snapdealOrderAffiliateInfo.update({"adId":offer.get("adId")}, {"$set":{"reconciled":True}}, multi=True)
217
                    db.merchantOrder.update({"orderId":order[0]}, {"$set":{"reconciled":True}}, multi=True)
218
                    break
14530 amit.gupta 219
 
14570 amit.gupta 220
    unreconciledOrders = notReconciled.keys()
221
    row2=0
222
    for row1 in curs:
223
        if row1[0] in unreconciledOrders:
224
            for order in db.merchantOrder.find({"orderId":row1[0]}):
225
                row2 += 1
226
                i=-1
227
                worksheet2.write(row2, inc(), order["orderId"])
228
                worksheet2.write(row2, inc(), row1[1])
229
                worksheet2.write(row2, inc(), row1[-1])
230
                worksheet2.write(row2, inc(), order['merchantOrderId'])
231
                worksheet2.write(row2, inc(), order['subTagId'])
232
                worksheet2.write(row2, inc(), order['placedOn'])
233
                worksheet2.write(row2, inc(), int(order['paidAmount']))
234
                row2 -=1
235
                k=i
236
                for subOrder in order['subOrders']:
237
                    i = k
238
                    row2 += 1
239
                    worksheet2.write(row2, inc(), subOrder['productTitle'])
240
                    worksheet2.write(row2, inc(), subOrder['amountPaid'])
241
                    worksheet2.write(row2, inc(), subOrder['quantity'])
242
                    worksheet2.write(row2, inc(), subOrder['status'])
243
                    worksheet2.write(row2, inc(), subOrder['cashBackStatus'])
244
                    worksheet2.write(row2, inc(), subOrder['cashBackAmount'])
245
 
246
 
247
    for offer in db.snapdealOrderAffiliateInfo.find({"reconciled":{"$exists":False}, 
248
                                                     "saleTime":{"$gt":int(time.mktime(last30Days.timetuple())),
249
                                                                 "$lt":int(time.mktime(date.today().timetuple()))}} ):
250
        row += 1
251
        i=-1
252
        affNotReconciledSheet.write(row, inc(), offer.get("adId")) 
253
        affNotReconciledSheet.write(row, inc(), offer.get("subTagId")) 
254
        affNotReconciledSheet.write(row, inc(), offer.get("saleDate")) 
255
        affNotReconciledSheet.write(row, inc(), offer.get("saleAmount")) 
256
        affNotReconciledSheet.write(row, inc(), offer.get("payOut")) 
257
        affNotReconciledSheet.write(row, inc(), offer.get("conversionStatus"))
258
 
14460 amit.gupta 259
        workbook.save(XLS_FILENAME)
14450 amit.gupta 260
 
261
def sendmail(email, message, title):
262
    if email == "":
263
        return
264
    mailServer = smtplib.SMTP(SMTP_SERVER, SMTP_PORT)
265
    mailServer.ehlo()
266
    mailServer.starttls()
267
    mailServer.ehlo()
268
 
269
    # Create the container (outer) email message.
270
    msg = MIMEMultipart()
271
    msg['Subject'] = title
272
    msg.preamble = title
273
    html_msg = MIMEText(message, 'html')
274
    msg.attach(html_msg)
275
 
276
    #snapdeal more to be added here
277
    snapdeal = MIMEBase('application', 'vnd.ms-excel')
14460 amit.gupta 278
    snapdeal.set_payload(file(XLS_FILENAME).read())
14450 amit.gupta 279
    encoders.encode_base64(snapdeal)
14460 amit.gupta 280
    snapdeal.add_header('Content-Disposition', 'attachment;filename=' + XLS_FILENAME)
14450 amit.gupta 281
    msg.attach(snapdeal)
282
 
283
 
284
    email.append('amit.gupta@shop2020.in')
285
    MAILTO = email 
286
    mailServer.login(SENDER, PASSWORD)
287
    mailServer.sendmail(PASSWORD, MAILTO, msg.as_string())
288
 
14508 amit.gupta 289
def setHeaders(worksheet, worksheet1, worksheet2, affNotReconciledSheet):
14505 amit.gupta 290
    boldStyle = xlwt.XFStyle()
291
    f = xlwt.Font()
292
    f.bold = True
293
    boldStyle.font = f
14501 amit.gupta 294
    row = 0
295
    global i
296
    i=-1    
297
    worksheet.write(row, inc(), 'Order Id', boldStyle)
298
    worksheet.write(row, inc(), 'User Id', boldStyle)
299
    worksheet.write(row, inc(), 'Username', boldStyle)
300
    worksheet.write(row, inc(), 'Merchant Order Id', boldStyle)
301
    worksheet.write(row, inc(), 'SubtagId', boldStyle)
302
    worksheet.write(row, inc(), 'Sale Date', boldStyle)
303
    worksheet.write(row, inc(), 'Sale Amount', boldStyle)
304
    worksheet.write(row, inc(), 'Aff Sale Date', boldStyle)
305
    worksheet.write(row, inc(), 'Aff Sale Amt', boldStyle)
306
    worksheet.write(row, inc(), 'Aff PayOut', boldStyle)
307
    worksheet.write(row, inc(), 'Product Title', boldStyle)
308
    worksheet.write(row, inc(), 'Price', boldStyle)
309
    worksheet.write(row, inc(), 'Quantity', boldStyle)
310
    worksheet.write(row, inc(), 'Status', boldStyle)
311
    worksheet.write(row, inc(), 'Cashback Status', boldStyle)
312
    worksheet.write(row, inc(), 'CashBack', boldStyle)
313
 
14505 amit.gupta 314
    i = -1
14501 amit.gupta 315
    worksheet1.write(row, inc(), 'Order Id', boldStyle)
316
    worksheet1.write(row, inc(), 'User Id', boldStyle)
317
    worksheet1.write(row, inc(), 'Username', boldStyle)
318
    worksheet1.write(row, inc(), 'Merchant Order Id', boldStyle)
319
    worksheet1.write(row, inc(), 'SubtagId', boldStyle)
320
    worksheet1.write(row, inc(), 'Sale Date', boldStyle)
321
    worksheet1.write(row, inc(), 'Sale Amount', boldStyle)
322
    worksheet1.write(row, inc(), 'Aff Sale Date', boldStyle)
323
    worksheet1.write(row, inc(), 'Aff Sale Amt', boldStyle)
324
    worksheet1.write(row, inc(), 'Aff PayOut', boldStyle)
325
    worksheet1.write(row, inc(), 'Product Title', boldStyle)
326
    worksheet1.write(row, inc(), 'Price', boldStyle)
327
    worksheet1.write(row, inc(), 'Quantity', boldStyle)
328
    worksheet1.write(row, inc(), 'Status', boldStyle)
329
    worksheet1.write(row, inc(), 'Cashback Status', boldStyle)
330
    worksheet1.write(row, inc(), 'CashBack', boldStyle) 
14508 amit.gupta 331
 
332
    i = -1
333
    worksheet2.write(row, inc(), 'Order Id', boldStyle)
334
    worksheet2.write(row, inc(), 'User Id', boldStyle)
335
    worksheet2.write(row, inc(), 'Username', boldStyle)
336
    worksheet2.write(row, inc(), 'Merchant Order Id', boldStyle)
337
    worksheet2.write(row, inc(), 'SubtagId', boldStyle)
338
    worksheet2.write(row, inc(), 'Sale Date', boldStyle)
339
    worksheet2.write(row, inc(), 'Sale Amount', boldStyle)
340
    worksheet2.write(row, inc(), 'Product Title', boldStyle)
341
    worksheet2.write(row, inc(), 'Price', boldStyle)
342
    worksheet2.write(row, inc(), 'Quantity', boldStyle)
343
    worksheet2.write(row, inc(), 'Status', boldStyle)
344
    worksheet2.write(row, inc(), 'Cashback Status', boldStyle)
345
    worksheet2.write(row, inc(), 'CashBack', boldStyle)
14450 amit.gupta 346
 
14508 amit.gupta 347
    i =-1
348
    affNotReconciledSheet.write(row, inc(), 'AdId', boldStyle) 
349
    affNotReconciledSheet.write(row, inc(), 'subTagId', boldStyle) 
350
    affNotReconciledSheet.write(row, inc(), 'Sale Date', boldStyle) 
351
    affNotReconciledSheet.write(row, inc(), 'Sale Amount', boldStyle) 
352
    affNotReconciledSheet.write(row, inc(), 'Pay Out', boldStyle) 
353
    affNotReconciledSheet.write(row, inc(), 'Status', boldStyle) 
14524 amit.gupta 354
 
355
def getUserAmountReconciled():
356
    pass
357
 
358
 
14460 amit.gupta 359
def inc():
360
    global i
361
    i+=1
362
    return i
363
 
14450 amit.gupta 364
def main():
365
    generateSnapDealReco()
14524 amit.gupta 366
    #generateFlipkartReco()
14570 amit.gupta 367
    #sendmail(["amit.gupta@shop2020.in"], "", "DTR Affiliate Reco")
14450 amit.gupta 368
 
369
if __name__ == '__main__':
14460 amit.gupta 370
    main()
371