Subversion Repositories SmartDukaan

Rev

Rev 17011 | Rev 17013 | 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
15445 amit.gupta 9
from dtr.storage import Mysql, DataService
15932 amit.gupta 10
from dtr.storage.DataService import Users, Clicks, FlipkartOrders,\
11
    All_user_addresses
14613 amit.gupta 12
from dtr.storage.Mysql import getOrdersAfterDate, getOrdersByTag
16947 amit.gupta 13
from dtr.utils import utils
15423 amit.gupta 14
from elixir import *
15440 amit.gupta 15
from sqlalchemy.sql.expression import func, func, or_
14450 amit.gupta 16
from email import encoders
17
from email.mime.base import MIMEBase
18
from email.mime.multipart import MIMEMultipart
19
from email.mime.text import MIMEText
20
from pymongo.mongo_client import MongoClient
14460 amit.gupta 21
from xlrd import open_workbook
14524 amit.gupta 22
from xlutils.copy import copy
14460 amit.gupta 23
from xlwt.Workbook import Workbook
14450 amit.gupta 24
import MySQLdb
25
import smtplib
26
import time
27
import xlwt
16317 amit.gupta 28
from dtr.utils import utils
17001 amit.gupta 29
from dtr.utils.utils import toTimeStamp
14460 amit.gupta 30
#from xlwt import 
14450 amit.gupta 31
 
15445 amit.gupta 32
DataService.initialize()
14450 amit.gupta 33
client = MongoClient('mongodb://localhost:27017/')
34
 
35
SENDER = "cnc.center@shop2020.in"
36
PASSWORD = "5h0p2o2o"
37
SUBJECT = "DTR User Segmentation report for " + date.today().isoformat()
38
SMTP_SERVER = "smtp.gmail.com"
39
SMTP_PORT = 587    
40
 
14647 amit.gupta 41
XLS_FILENAME = "snapdealaffiliatereco.xls"
14632 amit.gupta 42
XLS_O_FILENAME = "allorders.xls"
14647 amit.gupta 43
XLS_F_FILENAME = "flipkartaffiliatereco.xls"
14650 amit.gupta 44
XLS_A_FILENAME = "amazonaffiliatereco.xls"
15791 manish.sha 45
XLS_SC_FILENAME = "shopcluesaffiliatereco.xls"
14460 amit.gupta 46
boldStyle = xlwt.XFStyle()
47
f = xlwt.Font()
48
f.bold = True
49
boldStyle.font = f
50
i = -1
14616 amit.gupta 51
 
52
datetime_format = xlwt.XFStyle()
53
datetime_format.num_format_str = 'dd/mm/yyyy HH:MM AM/PM'
15540 amit.gupta 54
categoryMap = {3:"Mobiles", 5:"Tablets"}
14450 amit.gupta 55
def generateFlipkartReco():
14508 amit.gupta 56
    global i
57
    i = -1
14460 amit.gupta 58
    curs = getOrdersAfterDate(datetime.now() - timedelta(days=30), 2)
59
    db = client.Dtr
14647 amit.gupta 60
    wb = xlwt.Workbook()
61
    #rb = open_workbook(XLS_F_FILENAME)
62
    #wb = copy(rb)
14460 amit.gupta 63
    #wb = xlwt.Workbook()
64
    row = 0
14647 amit.gupta 65
    row2 = 0
66
    row3 = 0
67
    row4 = 0
68
    worksheet = wb.add_sheet("All Orders")
69
    worksheet1 = wb.add_sheet("Orders Reconciled")
70
    worksheet2 = wb.add_sheet("Orders not Reconciled")
71
    worksheet3 = wb.add_sheet("Aff not Reconciled")
14460 amit.gupta 72
    worksheet.write(row, inc(), 'Order Id', boldStyle)
14647 amit.gupta 73
    worksheet1.write(row, i, 'Order Id', boldStyle)
74
    worksheet2.write(row, i, 'Order Id', boldStyle)
14460 amit.gupta 75
    worksheet.write(row, inc(), 'User Id', boldStyle)
14647 amit.gupta 76
    worksheet1.write(row, i, 'User Id', boldStyle)
77
    worksheet2.write(row, i, 'User Id', boldStyle)
14474 amit.gupta 78
    worksheet.write(row, inc(), 'Username', boldStyle)
14647 amit.gupta 79
    worksheet1.write(row, i, 'Username', boldStyle)
80
    worksheet2.write(row, i, 'Username', boldStyle)
14771 amit.gupta 81
    worksheet.write(row, inc(), 'Version code', boldStyle)
82
    worksheet1.write(row, i, 'Version code', boldStyle)
83
    worksheet2.write(row, i, 'Version code', boldStyle)
84
    worksheet.write(row, inc(), 'Device', boldStyle)
85
    worksheet1.write(row, i, 'Device', boldStyle)
86
    worksheet2.write(row, i, 'Device', boldStyle)
14460 amit.gupta 87
    worksheet.write(row, inc(), 'Merchant Order Id', boldStyle)
14647 amit.gupta 88
    worksheet1.write(row, i, 'Merchant Order Id', boldStyle)
89
    worksheet2.write(row, i, 'Merchant Order Id', boldStyle)
14460 amit.gupta 90
    worksheet.write(row, inc(), 'Product Title', boldStyle)
14647 amit.gupta 91
    worksheet1.write(row, i, 'Product Title', boldStyle)
92
    worksheet2.write(row, i, 'Product Title', boldStyle)
14460 amit.gupta 93
    worksheet.write(row, inc(), 'Price', boldStyle)
14647 amit.gupta 94
    worksheet1.write(row, i, 'Price', boldStyle)
95
    worksheet2.write(row, i, 'Price', boldStyle)
14460 amit.gupta 96
    worksheet.write(row, inc(), 'Quantity', boldStyle)
14647 amit.gupta 97
    worksheet1.write(row, i, 'Quantity', boldStyle)
98
    worksheet2.write(row, i, 'Quantity', boldStyle)
14460 amit.gupta 99
    worksheet.write(row, inc(), 'Status', boldStyle)
14647 amit.gupta 100
    worksheet1.write(row, i, 'Status', boldStyle)
101
    worksheet2.write(row, i, 'Status', boldStyle)
14460 amit.gupta 102
    worksheet.write(row, inc(), 'Detailed Status', boldStyle)
14647 amit.gupta 103
    worksheet1.write(row, i, 'Detailed Status', boldStyle)
104
    worksheet2.write(row, i, 'Detailed Status', boldStyle)
14460 amit.gupta 105
    worksheet.write(row, inc(), 'Cashback Status', boldStyle)
14647 amit.gupta 106
    worksheet1.write(row, i, 'Cashback Status', boldStyle)
107
    worksheet2.write(row, i, 'Cashback Status', boldStyle)
14460 amit.gupta 108
    worksheet.write(row, inc(), 'Our CashBack', boldStyle)
14647 amit.gupta 109
    worksheet1.write(row, i, 'Our CashBack', boldStyle)
110
    worksheet2.write(row, i, 'Our CashBack', boldStyle)
111
    worksheet.write(row, inc(), 'Sale Date', boldStyle) 
112
    worksheet1.write(row, i, 'Sale Date', boldStyle)
113
    worksheet2.write(row, i, 'Sale Date', boldStyle)
14460 amit.gupta 114
    worksheet.write(row, inc(), 'SubtagId', boldStyle)
14647 amit.gupta 115
    worksheet1.write(row, i, 'SubtagId', boldStyle)
116
    worksheet2.write(row, i, 'SubtagId', boldStyle)
14460 amit.gupta 117
    worksheet.write(row, inc(), 'Category', boldStyle)
14647 amit.gupta 118
    worksheet1.write(row, i, 'Category', boldStyle)
14460 amit.gupta 119
    worksheet.write(row, inc(), 'Aff PayOut', boldStyle)
14647 amit.gupta 120
    worksheet1.write(row, i, 'Aff PayOut', boldStyle)
14460 amit.gupta 121
    worksheet.write(row, inc(), 'Aff Sale Amount', boldStyle)
14647 amit.gupta 122
    worksheet1.write(row, i, 'Aff Sale Amount', boldStyle)
14460 amit.gupta 123
    worksheet.write(row, inc(), 'Aff Sale Date', boldStyle)
14647 amit.gupta 124
    worksheet1.write(row, i, 'Aff Sale Date', boldStyle)
14460 amit.gupta 125
    for row1 in curs:
126
        orderId = row1[0]
127
        order = db.merchantOrder.find_one({"orderId":orderId})
128
        if order is None:
129
            continue
130
        saleTime = int(time.mktime(datetime.strptime(order['placedOn'], "%d %B, %Y %I:%M %p").replace(hour=0, minute=0, second=0, microsecond=0).timetuple()))
131
        #saleTime1 = int(time.mktime((datetime.strptime(order['placedOn'], "%b %d, %Y %I:%M %p") + timedelta(seconds=-60)).timetuple()))
14647 amit.gupta 132
        reconciled_affiliates = []
14460 amit.gupta 133
        for subOrder in order['subOrders']: 
14647 amit.gupta 134
            affs = list(db.flipkartOrderAffiliateInfo.find({"productCode":subOrder.get("productCode"), "saleDateInt":saleTime}))
14460 amit.gupta 135
            row += 1
136
            i=-1
137
            worksheet.write(row, inc(), orderId)
138
            worksheet.write(row, inc(), row1[1])
14474 amit.gupta 139
            worksheet.write(row, inc(), row1[-1])
14771 amit.gupta 140
            worksheet.write(row, inc(), row1[-2])
141
            worksheet.write(row, inc(), row1[-3])
14460 amit.gupta 142
            worksheet.write(row, inc(), order['merchantOrderId'])
143
            worksheet.write(row, inc(), subOrder['productTitle'])
144
            worksheet.write(row, inc(), subOrder['amountPaid'])
145
            worksheet.write(row, inc(), subOrder['quantity'])
146
            worksheet.write(row, inc(), subOrder['status'])
147
            worksheet.write(row, inc(), subOrder['detailedStatus'])
148
            worksheet.write(row, inc(), subOrder['cashBackStatus'])
149
            worksheet.write(row, inc(), subOrder['cashBackAmount'])
150
            worksheet.write(row, inc(), subOrder['placedOn'])
151
            worksheet.write(row, inc(), order['subTagId'])
152
            for aff in affs:
14647 amit.gupta 153
                if aff["_id"] not in reconciled_affiliates and aff['subTagId']== order['subTagId']:
154
                    reconciled_affiliates.append(aff["_id"])
155
                    row2 += 1
156
                    i = -1 
157
                    worksheet1.write(row2, inc(), orderId)
158
                    worksheet1.write(row2, inc(), row1[1])
159
                    worksheet1.write(row2, inc(), row1[-1])
14771 amit.gupta 160
                    worksheet1.write(row2, inc(), row1[-2])
161
                    worksheet1.write(row2, inc(), row1[-3])
14647 amit.gupta 162
                    worksheet1.write(row2, inc(), order['merchantOrderId'])
163
                    worksheet1.write(row2, inc(), subOrder['productTitle'])
164
                    worksheet1.write(row2, inc(), subOrder['amountPaid'])
165
                    worksheet1.write(row2, inc(), subOrder['quantity'])
166
                    worksheet1.write(row2, inc(), subOrder['status'])
167
                    worksheet1.write(row2, inc(), subOrder['detailedStatus'])
168
                    worksheet1.write(row2, inc(), subOrder['cashBackStatus'])
169
                    worksheet1.write(row2, inc(), subOrder['cashBackAmount'])
170
                    worksheet1.write(row2, inc(), subOrder['placedOn'])
171
                    worksheet1.write(row2, inc(), order['subTagId'])
172
                    db.flipkartOrderAffiliateInfo.update(
173
                        {"productCode":subOrder.get("productCode"), "saleDateInt":saleTime, "subTagId":aff['subTagId']}, 
174
                        {"$set":{"reconciled":True}})
175
                    db.merchantOrder.update({"merchantOrderId":order["merchantOrderId"]}, 
176
                                            {"$set":{"reconciled":True}})
14460 amit.gupta 177
                    worksheet.write(row, inc(), aff['category'])
14647 amit.gupta 178
                    worksheet1.write(row2, i, aff['category'])
14460 amit.gupta 179
                    worksheet.write(row, inc(), aff['payOut'])
14647 amit.gupta 180
                    worksheet1.write(row2, i, aff['payOut'])
14460 amit.gupta 181
                    worksheet.write(row, inc(), aff['saleAmount'])
14647 amit.gupta 182
                    worksheet1.write(row2, i, aff['saleAmount'])
14460 amit.gupta 183
                    worksheet.write(row, inc(), aff['saleDate'])
14647 amit.gupta 184
                    worksheet1.write(row2, i, aff['saleDate'])
14460 amit.gupta 185
                    break
14647 amit.gupta 186
            row3 += 1
187
            i=-1
188
            worksheet2.write(row3, inc(), orderId)
189
            worksheet2.write(row3, inc(), row1[1])
190
            worksheet2.write(row3, inc(), row1[-1])
14771 amit.gupta 191
            worksheet2.write(row3, inc(), row1[-2])
192
            worksheet2.write(row3, inc(), row1[-3])
14647 amit.gupta 193
            worksheet2.write(row3, inc(), order['merchantOrderId'])
194
            worksheet2.write(row3, inc(), subOrder['productTitle'])
195
            worksheet2.write(row3, inc(), subOrder['amountPaid'])
196
            worksheet2.write(row3, inc(), subOrder['quantity'])
197
            worksheet2.write(row3, inc(), subOrder['status'])
198
            worksheet2.write(row3, inc(), subOrder['detailedStatus'])
199
            worksheet2.write(row3, inc(), subOrder['cashBackStatus'])
200
            worksheet2.write(row3, inc(), subOrder['cashBackAmount'])
201
            worksheet2.write(row3, inc(), subOrder['placedOn'])
202
            worksheet2.write(row3, inc(), order['subTagId'])
203
 
204
    i=-1
205
    worksheet3.write(0, inc(), "category",boldStyle)    
206
    worksheet3.write(0, inc(), "conversionStatus",boldStyle)    
207
    worksheet3.write(0, inc(), "Product Title",boldStyle)    
208
    worksheet3.write(0, inc(), "price",boldStyle)    
209
    worksheet3.write(0, inc(), "quantity",boldStyle)    
210
    worksheet3.write(0, inc(), "payOut",boldStyle)    
211
    worksheet3.write(0, inc(), "saleDate",boldStyle)    
212
    worksheet3.write(0, inc(), "subTagId",boldStyle)
213
    for aff in db.flipkartOrderAffiliateInfo.find({"reconciled":{"$exists":False}}):
214
        row4 += 1
215
        i =-1
216
        worksheet3.write(row4, inc(), aff["category"])    
217
        worksheet3.write(row4, inc(), aff["conversionStatus"])    
218
        skuData = getSkuData(2, aff["productCode"])
219
        if skuData is None:    
220
            worksheet3.write(row4, inc(), aff["productTitle"])
221
        else:
222
            worksheet3.write(row4, inc(), skuData["product_name"])
223
        worksheet3.write(row4, inc(), aff['price'])    
224
        worksheet3.write(row4, inc(), aff['quantity'])    
225
        worksheet3.write(row4, inc(), aff['payOut'])    
226
        worksheet3.write(row4, inc(), aff['saleDate'])    
227
        worksheet3.write(row4, inc(), aff['subTagId'])    
228
 
229
 
230
 
231
    wb.save(XLS_F_FILENAME)
14450 amit.gupta 232
def generateSnapDealReco():
14524 amit.gupta 233
    global i
14460 amit.gupta 234
    curs = getOrdersAfterDate(datetime.now() - timedelta(days=30), 3)
14450 amit.gupta 235
    db = client.Dtr
14524 amit.gupta 236
    notReconciled = {}
14487 amit.gupta 237
    matchedList = []
14450 amit.gupta 238
    workbook = xlwt.Workbook()
14501 amit.gupta 239
    worksheet = workbook.add_sheet("Snapdeal Reconciled")
240
    worksheet1 = workbook.add_sheet("Snapdeal Reconciled All")
14508 amit.gupta 241
    worksheet2 = workbook.add_sheet("Snapdeal Orders not reconciled")
16947 amit.gupta 242
    worksheet3 = workbook.add_sheet("DateWise Sale Summary")
14508 amit.gupta 243
    affNotReconciledSheet = workbook.add_sheet("Snapdeal Aff not reconciled")
16947 amit.gupta 244
    setHeaders(worksheet, worksheet1, worksheet2, affNotReconciledSheet, worksheet3)
14450 amit.gupta 245
    row = 0
14501 amit.gupta 246
    anotherrow = 0
15577 amit.gupta 247
    row5=0
16947 amit.gupta 248
    datemap={}
14450 amit.gupta 249
    for row1 in curs:
250
        orderId = row1[0]
251
        order = db.merchantOrder.find_one({"orderId":orderId})
252
        if order is None:
253
            continue
14496 amit.gupta 254
        #saleTime = int(time.mktime(datetime.strptime(order['placedOn'], "%b %d, %Y, %I:%M %p").timetuple()))
16949 amit.gupta 255
        try:
16951 amit.gupta 256
            saleTime = datetime.strptime(order['placedOn'], "%a, %d %b, %Y").strftime("%Y-%m-%d")
16949 amit.gupta 257
        except:
17001 amit.gupta 258
            saleTime = datetime.strptime(order['placedOn'], "%b %d, %Y, %I:%M %p").strftime("%Y-%m-%d")    
16947 amit.gupta 259
 
14450 amit.gupta 260
        aff = list(db.snapdealOrderAffiliateInfo.find({"subTagId":order["subTagId"]}))
16718 amit.gupta 261
        if len(aff) > 1:
262
            aff = [f for f in aff if f.get("payOut")>0]
14501 amit.gupta 263
        anotherrow += 1
14988 amit.gupta 264
        try:
265
            formattedTimestamp = order['placedOn']
266
            timestamp1 = int(time.mktime(datetime.strptime(order['placedOn'], "%b %d, %Y, %I:%M %p").timetuple()))
267
        except:
268
            timestamp1 = int(time.mktime(row1[-4].timetuple()))
16947 amit.gupta 269
            formattedTimestamp = datetime.strftime(utils.fromTimeStamp(timestamp1), "%b %d, %Y, %I:%M %p")
16718 amit.gupta 270
        if len(aff) > 0 and order["subTagId"] not in matchedList and int(order["paidAmount"])==int(aff[0]["saleAmount"]):
271
 
14501 amit.gupta 272
            matchedList.append(order["subTagId"])
14610 amit.gupta 273
            db.snapdealOrderAffiliateInfo.update({"adId":aff[0].get("adId")}, {"$set":{"reconciled":True, "orderId":orderId}}, multi=True)
14501 amit.gupta 274
            order['reconciled'] = True
14610 amit.gupta 275
            order['adId'] = aff[0].get("adId")
14501 amit.gupta 276
            db.merchantOrder.save(order)
277
            row += 1
278
            i=-1 
279
            worksheet.write(row, inc(), orderId)
280
            worksheet1.write(anotherrow, i, orderId)
281
            worksheet.write(row, inc(), row1[1])
282
            worksheet1.write(anotherrow, i, row1[1])
14850 amit.gupta 283
            worksheet.write(row, inc(), row1[-1])
284
            worksheet1.write(anotherrow, i, row1[-1])
285
            worksheet.write(row, inc(), row1[-2])
286
            worksheet1.write(anotherrow, i, row1[-2])
14771 amit.gupta 287
            worksheet.write(row, inc(), row1[-3])
288
            worksheet1.write(anotherrow, i, row1[-3])
14501 amit.gupta 289
            worksheet.write(row, inc(), order['merchantOrderId'])
290
            worksheet1.write(anotherrow, i, order['merchantOrderId'])
291
            worksheet.write(row, inc(), order['subTagId'])
292
            worksheet1.write(anotherrow, i, order['subTagId'])
293
            worksheet.write(row, inc(), order['placedOn'])
294
            worksheet1.write(anotherrow, i, order['placedOn'])
14988 amit.gupta 295
            worksheet.write(row, inc(), formattedTimestamp)
296
            worksheet1.write(anotherrow, i, formattedTimestamp)
14501 amit.gupta 297
            worksheet.write(row, inc(), int(order['paidAmount']))
298
            worksheet1.write(anotherrow, i, int(order['paidAmount']))
14524 amit.gupta 299
            worksheet.write(row, inc(), aff[0]['saleDate'])
300
            worksheet1.write(anotherrow, i, aff[0]['saleDate'])
301
            worksheet.write(row, inc(), aff[0]['saleAmount'])
302
            worksheet1.write(anotherrow, i, aff[0]['saleAmount'])
303
            worksheet.write(row, inc(), aff[0]['payOut'])
304
            worksheet1.write(anotherrow, i, aff[0]['payOut'])
14601 amit.gupta 305
            worksheet.write(row, inc(), aff[0]['ip'])
306
            worksheet1.write(anotherrow, i, aff[0]['ip'])
16718 amit.gupta 307
            worksheet.write(row, inc(), aff[0]['conversionStatus'])
308
            worksheet1.write(anotherrow, i, aff[0]['conversionStatus'])
14501 amit.gupta 309
            k = i
14504 amit.gupta 310
            row -= 1
311
            anotherrow -= 1
14501 amit.gupta 312
            for subOrder in order['subOrders']:
313
                i = k
14503 amit.gupta 314
                row += 1
315
                anotherrow += 1
14501 amit.gupta 316
                worksheet.write(row, inc(), subOrder['productTitle'])
317
                worksheet1.write(anotherrow, i, subOrder['productTitle'])
318
                worksheet.write(row, inc(), subOrder['amountPaid'])
319
                worksheet1.write(anotherrow, i, subOrder['amountPaid'])
320
                worksheet.write(row, inc(), subOrder['quantity'])
321
                worksheet1.write(anotherrow, i, subOrder['quantity'])
322
                worksheet.write(row, inc(), subOrder['status'])
323
                worksheet1.write(anotherrow, i, subOrder['status'])
324
                worksheet.write(row, inc(), subOrder['cashBackStatus'])
325
                worksheet1.write(anotherrow, i, subOrder['cashBackStatus'])
326
                worksheet.write(row, inc(), subOrder['cashBackAmount'])
327
                worksheet1.write(anotherrow, i, subOrder['cashBackAmount'])
14504 amit.gupta 328
 
14501 amit.gupta 329
        else:
14524 amit.gupta 330
            i=-1
14501 amit.gupta 331
            worksheet1.write(anotherrow, inc(), orderId)
332
            worksheet1.write(anotherrow, inc(), row1[1])
14850 amit.gupta 333
            worksheet1.write(anotherrow, inc(), row1[-1])
334
            worksheet1.write(anotherrow, inc(), row1[-2])
14771 amit.gupta 335
            worksheet1.write(anotherrow, inc(), row1[-3])
14501 amit.gupta 336
            worksheet1.write(anotherrow, inc(), order['merchantOrderId'])
337
            worksheet1.write(anotherrow, inc(), order['subTagId'])
338
            worksheet1.write(anotherrow, inc(), order['placedOn'])
15576 amit.gupta 339
            worksheet1.write(anotherrow, inc(), formattedTimestamp)
14501 amit.gupta 340
            worksheet1.write(anotherrow, inc(), int(order['paidAmount']))
14873 amit.gupta 341
 
14524 amit.gupta 342
            notReconciled[orderId] = (anotherrow, i, int(order['paidAmount']), timestamp1, order["subTagId"]) 
343
            inc()
344
            inc()
345
            inc()
14771 amit.gupta 346
            inc()
16718 amit.gupta 347
            inc()
14501 amit.gupta 348
            k = i
14504 amit.gupta 349
            anotherrow -= 1
14501 amit.gupta 350
            for subOrder in order['subOrders']:
14503 amit.gupta 351
                anotherrow += 1
14501 amit.gupta 352
                i = k
14505 amit.gupta 353
                worksheet1.write(anotherrow, inc(), subOrder['productTitle'])
354
                worksheet1.write(anotherrow, inc(), subOrder['amountPaid'])
355
                worksheet1.write(anotherrow, inc(), subOrder['quantity'])
356
                worksheet1.write(anotherrow, inc(), subOrder['status'])
357
                worksheet1.write(anotherrow, inc(), subOrder['cashBackStatus'])
358
                worksheet1.write(anotherrow, inc(), subOrder['cashBackAmount'])
15577 amit.gupta 359
            row5 += 1
360
            i=-1
361
            worksheet2.write(row5, inc(), order["orderId"])
362
            worksheet2.write(row5, inc(), row1[1])
363
            worksheet2.write(row5, inc(), row1[-1])
364
            worksheet2.write(row5, inc(), row1[-2])
365
            worksheet2.write(row5, inc(), row1[-3])
366
            worksheet2.write(row5, inc(), order['merchantOrderId'])
367
            worksheet2.write(row5, inc(), order['subTagId'])
368
            worksheet2.write(row5, inc(), order['placedOn'])
369
            worksheet2.write(row5, inc(), formattedTimestamp)
370
            worksheet2.write(row5, inc(), int(order['paidAmount']))
371
            row5 -=1
372
            k=i
373
            for subOrder in order['subOrders']:
374
                i = k
15578 amit.gupta 375
                row5 += 1
15577 amit.gupta 376
                worksheet2.write(row5, inc(), subOrder['productTitle'])
377
                worksheet2.write(row5, inc(), subOrder['amountPaid'])
378
                worksheet2.write(row5, inc(), subOrder['quantity'])
379
                worksheet2.write(row5, inc(), subOrder['status'])
380
                worksheet2.write(row5, inc(), subOrder['cashBackStatus'])
15578 amit.gupta 381
                worksheet2.write(row5, inc(), subOrder['cashBackAmount'])
14524 amit.gupta 382
 
383
    last30Days =  date.today() - timedelta(days=30)
384
    int(time.mktime(last30Days.timetuple()))
385
    row = 0
386
    for offer in db.snapdealOrderAffiliateInfo.find({"reconciled":{"$exists":False}, 
387
                                                     "saleTime":{"$gt":int(time.mktime(last30Days.timetuple())),
16953 amit.gupta 388
                                                                 "$lt":int(time.mktime(date.today().timetuple()))}}, timeout=False ):
14524 amit.gupta 389
        subTagId = offer.get("subTagId")
390
        saleTime = offer.get("saleTime")
391
        orders = getOrdersByTag(subTagId, 3)
392
        for order in orders:
393
            if notReconciled.has_key(order[0]):
394
                (roww, column, paidAmount, timestamp1, oSubTagId) = notReconciled[order[0]]
395
                if paidAmount==int(offer.get("saleAmount")) and timestamp1 <= saleTime and timestamp1 + 120 >= saleTime:
396
                    i = column
14570 amit.gupta 397
                    worksheet1.write(roww, inc(), offer.get("saleDate"))        
14527 amit.gupta 398
                    worksheet1.write(roww, inc(), offer.get("saleAmount"))        
399
                    worksheet1.write(roww, inc(), offer.get("payOut"))
400
                    del notReconciled[order[0]]
14530 amit.gupta 401
                    print "found match for user", order[1]
14610 amit.gupta 402
                    db.snapdealOrderAffiliateInfo.update({"adId":offer.get("adId")}, {"$set":{"reconciled":True, "orderId":order[0]}}, multi=True)
403
                    db.merchantOrder.update({"orderId":order[0]}, {"$set":{"reconciled":True, "adId":offer.get("adId")}}, multi=True)
14570 amit.gupta 404
                    break
17010 amit.gupta 405
 
14570 amit.gupta 406
 
407
 
408
    for offer in db.snapdealOrderAffiliateInfo.find({"reconciled":{"$exists":False}, 
409
                                                     "saleTime":{"$gt":int(time.mktime(last30Days.timetuple())),
410
                                                                 "$lt":int(time.mktime(date.today().timetuple()))}} ):
411
        row += 1
412
        i=-1
413
        affNotReconciledSheet.write(row, inc(), offer.get("adId")) 
414
        affNotReconciledSheet.write(row, inc(), offer.get("subTagId")) 
415
        affNotReconciledSheet.write(row, inc(), offer.get("saleDate")) 
416
        affNotReconciledSheet.write(row, inc(), offer.get("saleAmount")) 
417
        affNotReconciledSheet.write(row, inc(), offer.get("payOut")) 
418
        affNotReconciledSheet.write(row, inc(), offer.get("conversionStatus"))
14601 amit.gupta 419
        affNotReconciledSheet.write(row, inc(), offer.get("ip"))
16947 amit.gupta 420
 
17010 amit.gupta 421
    mailBodyTemplate="""
422
        <html>
423
            <body>
424
            <table cellspacing="0" border="1" style="text-align:right">
425
                <thead>
426
                    <tr>
427
                        <th style="text-align:center">Date</th>
428
                        <th  style="text-align:center">Sale</th>
429
                        <th  style="text-align:center">Approved</th>
430
                        <th  style="text-align:center">Approved %</th>
431
                        <th  style="text-align:center">Rejected</th>
432
                        <th  style="text-align:center">Rejected %</th>
433
                    </tr>
434
                </thead>
435
                <tbody>
436
                    {0}
437
                </tbody>
438
            </table>
439
            </body>
440
        </html>
441
    """
442
    tbody=[]
443
    rowtemplate="<tr><td>{0}</td><td>{1}</td><td>{2}</td><td>{3}</td><td>{4}</td><td>{5}</td></tr>"
444
    for offer in db.flSaleSnapshot.find().limit(61).sort("_id",-1):
445
        approved = offer.get("approvedAmount")
446
        rejected = offer.get("rejectedAmount")
447
        total = approved + rejected
448
        if total ==0:
449
            continue
450
        tbody.append(rowtemplate.format(offer.get("_id"), offer.get("paidAmount"), approved, int((approved*100/total)), rejected, int((rejected*100/total))))
451
    message = mailBodyTemplate.format("".join(tbody))
15540 amit.gupta 452
    workbook.save(XLS_FILENAME)
16995 amit.gupta 453
    return message
454
 
17010 amit.gupta 455
 
15791 manish.sha 456
def generateShopcluesReco():
457
    global i
16238 manish.sha 458
    curs = getOrdersAfterDate(datetime.now() - timedelta(days=30), 5)
15791 manish.sha 459
    db = client.Dtr
460
    notReconciled = {}
461
    matchedList = []
462
    workbook = xlwt.Workbook()
463
    worksheet = workbook.add_sheet("Shopclues Reconciled")
464
    worksheet1 = workbook.add_sheet("Shopclues Reconciled All")
465
    worksheet2 = workbook.add_sheet("Shopclues Orders not reconciled")
466
    affNotReconciledSheet = workbook.add_sheet("Shopclues Aff not reconciled")
467
    setHeaders(worksheet, worksheet1, worksheet2, affNotReconciledSheet)
468
    row = 0
469
    anotherrow = 0
470
    row2 = 0
471
    row5=0
472
 
473
    for row1 in curs:
474
        orderId = row1[0]
475
        order = db.merchantOrder.find_one({"orderId":orderId})
476
        if order is None:
477
            continue
478
        #saleTime = int(time.mktime(datetime.strptime(order['placedOn'], "%b %d, %Y, %I:%M %p").timetuple()))  26 May 2015 02:12 PM
16204 manish.sha 479
        aff = list(db.shopcluesOrderAffiliateInfo.find({"merchantOrderId":order["merchantOrderId"]}))
15791 manish.sha 480
        anotherrow += 1
481
        try:
482
            formattedTimestamp = order['placedOn']
483
            timestamp1 = int(time.mktime(datetime.strptime(order['placedOn'], "%d %b %Y %I:%M %p").timetuple()))
484
        except:
485
            timestamp1 = int(time.mktime(row1[-4].timetuple()))
16947 amit.gupta 486
            formattedTimestamp = datetime.strftime(utils.fromTimeStamp(timestamp1), "%d %b %Y %I:%M %p")
15791 manish.sha 487
 
488
        if len(aff) > 0 and order["subTagId"] not in matchedList and long(order["paidAmount"])==long(float(aff[0]["transactionValue"])): 
489
            matchedList.append(order["subTagId"])
16204 manish.sha 490
            db.shopcluesOrderAffiliateInfo.update({"merchantOrderId":aff[0].get("merchantOrderId")}, {"$set":{"reconciled":True, "orderId":orderId}}, multi=True)
15791 manish.sha 491
            order['reconciled'] = True
492
            order['adId'] = aff[0].get("uniqueKey")
493
            db.merchantOrder.save(order)
494
            row += 1
495
            i=-1 
14450 amit.gupta 496
 
15791 manish.sha 497
            worksheet.write(row, inc(), orderId)
498
            worksheet1.write(anotherrow, i, orderId)
499
            worksheet.write(row, inc(), row1[1])
500
            worksheet1.write(anotherrow, i, row1[1])
501
            worksheet.write(row, inc(), row1[-1])
502
            worksheet1.write(anotherrow, i, row1[-1])
503
            worksheet.write(row, inc(), row1[-2])
504
            worksheet1.write(anotherrow, i, row1[-2])
505
            worksheet.write(row, inc(), row1[-3])
506
            worksheet1.write(anotherrow, i, row1[-3])
507
            worksheet.write(row, inc(), order['merchantOrderId'])
508
            worksheet1.write(anotherrow, i, order['merchantOrderId'])
509
            worksheet.write(row, inc(), order['subTagId'])
510
            worksheet1.write(anotherrow, i, order['subTagId'])
511
            worksheet.write(row, inc(), order['placedOn'])
512
            worksheet1.write(anotherrow, i, order['placedOn'])
513
            worksheet.write(row, inc(), formattedTimestamp)
514
            worksheet1.write(anotherrow, i, formattedTimestamp)
515
            worksheet.write(row, inc(), int(order['paidAmount']))
516
            worksheet1.write(anotherrow, i, int(order['paidAmount']))
16947 amit.gupta 517
            worksheet.write(row, inc(), datetime.strftime(utils.fromTimeStamp(aff[0]['transactionTime']), "%d %b %Y %I:%M %p"))
518
            worksheet1.write(anotherrow, i, datetime.strftime(utils.fromTimeStamp(aff[0]['transactionTime']), "%d %b %Y %I:%M %p"))
15791 manish.sha 519
            worksheet.write(row, inc(), aff[0]['transactionValue'])
520
            worksheet1.write(anotherrow, i, aff[0]['transactionValue'])
521
            worksheet.write(row, inc(), aff[0]['payOut'])
522
            worksheet1.write(anotherrow, i, aff[0]['payOut'])
16238 manish.sha 523
            worksheet.write(row, inc(), "NA")
524
            worksheet1.write(anotherrow, i, "NA")
15791 manish.sha 525
            k = i
526
            row -= 1
527
            anotherrow -= 1
528
            for subOrder in order['subOrders']:
529
                i = k
530
                row += 1
531
                anotherrow += 1
532
                worksheet.write(row, inc(), subOrder['productTitle'])
533
                worksheet1.write(anotherrow, i, subOrder['productTitle'])
534
                worksheet.write(row, inc(), subOrder['amountPaid'])
535
                worksheet1.write(anotherrow, i, subOrder['amountPaid'])
536
                worksheet.write(row, inc(), subOrder['quantity'])
537
                worksheet1.write(anotherrow, i, subOrder['quantity'])
538
                worksheet.write(row, inc(), subOrder['status'])
539
                worksheet1.write(anotherrow, i, subOrder['status'])
540
                worksheet.write(row, inc(), subOrder['cashBackStatus'])
541
                worksheet1.write(anotherrow, i, subOrder['cashBackStatus'])
542
                worksheet.write(row, inc(), subOrder['cashBackAmount'])
543
                worksheet1.write(anotherrow, i, subOrder['cashBackAmount'])
544
 
545
        else:
546
            i=-1
547
            worksheet1.write(anotherrow, inc(), orderId)
548
            worksheet1.write(anotherrow, inc(), row1[1])
549
            worksheet1.write(anotherrow, inc(), row1[-1])
550
            worksheet1.write(anotherrow, inc(), row1[-2])
551
            worksheet1.write(anotherrow, inc(), row1[-3])
552
            worksheet1.write(anotherrow, inc(), order['merchantOrderId'])
553
            worksheet1.write(anotherrow, inc(), order['subTagId'])
554
            worksheet1.write(anotherrow, inc(), order['placedOn'])
555
            worksheet1.write(anotherrow, inc(), formattedTimestamp)
556
            worksheet1.write(anotherrow, inc(), int(order['paidAmount']))
557
 
558
            notReconciled[orderId] = (anotherrow, i, int(order['paidAmount']), timestamp1, order["subTagId"]) 
559
            inc()
560
            inc()
561
            inc()
562
            inc()
563
            k = i
564
            anotherrow -= 1
565
            for subOrder in order['subOrders']:
566
                anotherrow += 1
567
                i = k
568
                worksheet1.write(anotherrow, inc(), subOrder['productTitle'])
569
                worksheet1.write(anotherrow, inc(), subOrder['amountPaid'])
570
                worksheet1.write(anotherrow, inc(), subOrder['quantity'])
571
                worksheet1.write(anotherrow, inc(), subOrder['status'])
572
                worksheet1.write(anotherrow, inc(), subOrder['cashBackStatus'])
573
                worksheet1.write(anotherrow, inc(), subOrder['cashBackAmount'])
574
            row5 += 1
575
            i=-1
576
            worksheet2.write(row5, inc(), order["orderId"])
577
            worksheet2.write(row5, inc(), row1[1])
578
            worksheet2.write(row5, inc(), row1[-1])
579
            worksheet2.write(row5, inc(), row1[-2])
580
            worksheet2.write(row5, inc(), row1[-3])
581
            worksheet2.write(row5, inc(), order['merchantOrderId'])
582
            worksheet2.write(row5, inc(), order['subTagId'])
583
            worksheet2.write(row5, inc(), order['placedOn'])
584
            worksheet2.write(row5, inc(), formattedTimestamp)
585
            worksheet2.write(row5, inc(), int(order['paidAmount']))
586
            row5 -=1
587
            k=i
588
            for subOrder in order['subOrders']:
589
                i = k
590
                row5 += 1
591
                worksheet2.write(row5, inc(), subOrder['productTitle'])
592
                worksheet2.write(row5, inc(), subOrder['amountPaid'])
593
                worksheet2.write(row5, inc(), subOrder['quantity'])
594
                worksheet2.write(row5, inc(), subOrder['status'])
595
                worksheet2.write(row5, inc(), subOrder['cashBackStatus'])
596
                worksheet2.write(row5, inc(), subOrder['cashBackAmount'])
597
 
598
    last30Days =  date.today() - timedelta(days=30)
599
    int(time.mktime(last30Days.timetuple()))
600
    row = 0
601
    for offer in db.shopcluesOrderAffiliateInfo.find({"reconciled":{"$exists":False}, 
602
                                                     "transactionTime":{"$gt":int(time.mktime(last30Days.timetuple())),
603
                                                                 "$lt":int(time.mktime(date.today().timetuple()))}} ):
604
        subTagId = offer.get("subTagId")
605
        saleTime = offer.get("transactionTime")
15794 manish.sha 606
        orders = getOrdersByTag(subTagId, 5)
15791 manish.sha 607
        for order in orders:
608
            if notReconciled.has_key(order[0]):
609
                (roww, column, paidAmount, timestamp1, oSubTagId) = notReconciled[order[0]]
610
                if paidAmount==int(offer.get("transactionValue")) and timestamp1 <= saleTime and timestamp1 + 120 >= saleTime:
611
                    i = column
16947 amit.gupta 612
                    worksheet1.write(roww, inc(), datetime.strftime(utils.fromTimeStamp(offer.get("transactionTime")), "%d %b %Y %I:%M %p"))        
15791 manish.sha 613
                    worksheet1.write(roww, inc(), offer.get("transactionValue"))        
614
                    worksheet1.write(roww, inc(), offer.get("payOut"))
615
                    del notReconciled[order[0]]
616
                    print "found match for user", order[1]
617
                    db.shopcluesOrderAffiliateInfo.update({"transactionId":offer.get("transactionId")}, {"$set":{"reconciled":True, "orderId":order[0]}}, multi=True)
618
                    db.merchantOrder.update({"orderId":order[0]}, {"$set":{"reconciled":True, "adId":offer.get("uniqueKey")}}, multi=True)
619
                    break
620
 
621
    unreconciledOrders = notReconciled.keys()
622
 
623
    for offer in db.shopcluesOrderAffiliateInfo.find({"reconciled":{"$exists":False}, 
624
                                                     "transactionTime":{"$gt":int(time.mktime(last30Days.timetuple())),
625
                                                                 "$lt":int(time.mktime(date.today().timetuple()))}} ):
626
        row += 1
627
        i=-1
628
        affNotReconciledSheet.write(row, inc(), offer.get("uniqueKey")) 
629
        affNotReconciledSheet.write(row, inc(), offer.get("subTagId")) 
16947 amit.gupta 630
        affNotReconciledSheet.write(row, inc(), datetime.strftime(utils.fromTimeStamp(offer.get("transactionTime")), "%d %b %Y %I:%M %p")) 
15791 manish.sha 631
        affNotReconciledSheet.write(row, inc(), offer.get("transactionValue")) 
632
        affNotReconciledSheet.write(row, inc(), offer.get("payOut")) 
633
        affNotReconciledSheet.write(row, inc(), offer.get("status"))
634
        affNotReconciledSheet.write(row, inc(), 'NA')
635
 
636
    workbook.save(XLS_SC_FILENAME)
637
 
14647 amit.gupta 638
def sendmail(email, message, title, *varargs):
14450 amit.gupta 639
    if email == "":
640
        return
641
    mailServer = smtplib.SMTP(SMTP_SERVER, SMTP_PORT)
642
    mailServer.ehlo()
643
    mailServer.starttls()
644
    mailServer.ehlo()
645
 
646
    # Create the container (outer) email message.
647
    msg = MIMEMultipart()
648
    msg['Subject'] = title
649
    msg.preamble = title
650
    html_msg = MIMEText(message, 'html')
651
    msg.attach(html_msg)
652
 
653
    #snapdeal more to be added here
14647 amit.gupta 654
    for fileName in varargs:
655
        snapdeal = MIMEBase('application', 'vnd.ms-excel')
656
        snapdeal.set_payload(file(fileName).read())
657
        encoders.encode_base64(snapdeal)
658
        snapdeal.add_header('Content-Disposition', 'attachment;filename=' + fileName)
659
        msg.attach(snapdeal)
14450 amit.gupta 660
 
661
 
662
    email.append('amit.gupta@shop2020.in')
663
    MAILTO = email 
664
    mailServer.login(SENDER, PASSWORD)
665
    mailServer.sendmail(PASSWORD, MAILTO, msg.as_string())
666
 
16958 amit.gupta 667
def setHeaders(worksheet, worksheet1, worksheet2, affNotReconciledSheet, worksheet3=None):
14505 amit.gupta 668
    boldStyle = xlwt.XFStyle()
669
    f = xlwt.Font()
670
    f.bold = True
671
    boldStyle.font = f
14501 amit.gupta 672
    row = 0
673
    global i
674
    i=-1    
675
    worksheet.write(row, inc(), 'Order Id', boldStyle)
676
    worksheet.write(row, inc(), 'User Id', boldStyle)
14850 amit.gupta 677
    worksheet.write(row, inc(), 'Username', boldStyle)
14601 amit.gupta 678
    worksheet.write(row, inc(), 'Version Code', boldStyle)
14771 amit.gupta 679
    worksheet.write(row, inc(), 'Device', boldStyle)
14501 amit.gupta 680
    worksheet.write(row, inc(), 'Merchant Order Id', boldStyle)
681
    worksheet.write(row, inc(), 'SubtagId', boldStyle)
682
    worksheet.write(row, inc(), 'Sale Date', boldStyle)
14988 amit.gupta 683
    worksheet.write(row, inc(), 'Dtr Sale Date', boldStyle)
14501 amit.gupta 684
    worksheet.write(row, inc(), 'Sale Amount', boldStyle)
685
    worksheet.write(row, inc(), 'Aff Sale Date', boldStyle)
686
    worksheet.write(row, inc(), 'Aff Sale Amt', boldStyle)
687
    worksheet.write(row, inc(), 'Aff PayOut', boldStyle)
14601 amit.gupta 688
    worksheet.write(row, inc(), 'IP', boldStyle)
16718 amit.gupta 689
    worksheet.write(row, inc(), 'Aff Status', boldStyle)
14501 amit.gupta 690
    worksheet.write(row, inc(), 'Product Title', boldStyle)
691
    worksheet.write(row, inc(), 'Price', boldStyle)
692
    worksheet.write(row, inc(), 'Quantity', boldStyle)
693
    worksheet.write(row, inc(), 'Status', boldStyle)
694
    worksheet.write(row, inc(), 'Cashback Status', boldStyle)
695
    worksheet.write(row, inc(), 'CashBack', boldStyle)
696
 
14505 amit.gupta 697
    i = -1
14501 amit.gupta 698
    worksheet1.write(row, inc(), 'Order Id', boldStyle)
699
    worksheet1.write(row, inc(), 'User Id', boldStyle)
14850 amit.gupta 700
    worksheet1.write(row, inc(), 'Username', boldStyle)
14601 amit.gupta 701
    worksheet1.write(row, inc(), 'Version Code', boldStyle)
14771 amit.gupta 702
    worksheet1.write(row, inc(), 'Device', boldStyle)
14501 amit.gupta 703
    worksheet1.write(row, inc(), 'Merchant Order Id', boldStyle)
704
    worksheet1.write(row, inc(), 'SubtagId', boldStyle)
705
    worksheet1.write(row, inc(), 'Sale Date', boldStyle)
14988 amit.gupta 706
    worksheet1.write(row, inc(), 'Dtr Sale Date', boldStyle)
14501 amit.gupta 707
    worksheet1.write(row, inc(), 'Sale Amount', boldStyle)
708
    worksheet1.write(row, inc(), 'Aff Sale Date', boldStyle)
709
    worksheet1.write(row, inc(), 'Aff Sale Amt', boldStyle)
710
    worksheet1.write(row, inc(), 'Aff PayOut', boldStyle)
14601 amit.gupta 711
    worksheet1.write(row, inc(), 'IP', boldStyle)
16718 amit.gupta 712
    worksheet1.write(row, inc(), 'Aff Status', boldStyle)
14501 amit.gupta 713
    worksheet1.write(row, inc(), 'Product Title', boldStyle)
714
    worksheet1.write(row, inc(), 'Price', boldStyle)
715
    worksheet1.write(row, inc(), 'Quantity', boldStyle)
716
    worksheet1.write(row, inc(), 'Status', boldStyle)
717
    worksheet1.write(row, inc(), 'Cashback Status', boldStyle)
718
    worksheet1.write(row, inc(), 'CashBack', boldStyle) 
14508 amit.gupta 719
 
720
    i = -1
721
    worksheet2.write(row, inc(), 'Order Id', boldStyle)
722
    worksheet2.write(row, inc(), 'User Id', boldStyle)
14850 amit.gupta 723
    worksheet2.write(row, inc(), 'Username', boldStyle)
14605 amit.gupta 724
    worksheet2.write(row, inc(), 'Version Code', boldStyle)
14771 amit.gupta 725
    worksheet2.write(row, inc(), 'Device', boldStyle)
14508 amit.gupta 726
    worksheet2.write(row, inc(), 'Merchant Order Id', boldStyle)
727
    worksheet2.write(row, inc(), 'SubtagId', boldStyle)
728
    worksheet2.write(row, inc(), 'Sale Date', boldStyle)
14988 amit.gupta 729
    worksheet2.write(row, inc(), 'Dtr Sale Date', boldStyle)
14508 amit.gupta 730
    worksheet2.write(row, inc(), 'Sale Amount', boldStyle)
731
    worksheet2.write(row, inc(), 'Product Title', boldStyle)
732
    worksheet2.write(row, inc(), 'Price', boldStyle)
733
    worksheet2.write(row, inc(), 'Quantity', boldStyle)
734
    worksheet2.write(row, inc(), 'Status', boldStyle)
735
    worksheet2.write(row, inc(), 'Cashback Status', boldStyle)
736
    worksheet2.write(row, inc(), 'CashBack', boldStyle)
14450 amit.gupta 737
 
14508 amit.gupta 738
    i =-1
739
    affNotReconciledSheet.write(row, inc(), 'AdId', boldStyle) 
740
    affNotReconciledSheet.write(row, inc(), 'subTagId', boldStyle) 
741
    affNotReconciledSheet.write(row, inc(), 'Sale Date', boldStyle) 
742
    affNotReconciledSheet.write(row, inc(), 'Sale Amount', boldStyle) 
743
    affNotReconciledSheet.write(row, inc(), 'Pay Out', boldStyle) 
744
    affNotReconciledSheet.write(row, inc(), 'Status', boldStyle) 
14601 amit.gupta 745
    affNotReconciledSheet.write(row, inc(), 'IP', boldStyle)
14524 amit.gupta 746
 
16958 amit.gupta 747
    if worksheet3:
748
        i =-1
749
        worksheet3.write(row, inc(), 'Date', boldStyle) 
750
        worksheet3.write(row, inc(), 'Sale Amount', boldStyle) 
751
        worksheet3.write(row, inc(), 'Approved Sales', boldStyle) 
752
        worksheet3.write(row, inc(), 'Rejected Sales', boldStyle) 
16947 amit.gupta 753
 
14524 amit.gupta 754
def getUserAmountReconciled():
755
    pass
756
 
14613 amit.gupta 757
def getUserOrders():
758
    global i
759
    rb = open_workbook(XLS_FILENAME,formatting_info=True)
760
    wb = copy(rb)
761
    worksheet = wb.add_sheet("All Users")
16726 amit.gupta 762
    #worksheet1 = wb.add_sheet("Suspected Users")
17011 amit.gupta 763
    workbook = xlwt.Workbook("utf8")
14632 amit.gupta 764
    sh1 = workbook.add_sheet("All Orders")
15423 amit.gupta 765
    sh2 = workbook.add_sheet("Flipkart Orders")
14632 amit.gupta 766
 
14613 amit.gupta 767
    db=client.Dtr
768
    results = Mysql.fetchResult('''
15932 amit.gupta 769
        select ow.*, u.username, crm1.order_count, u.referrer, aua.city,aua.state,aua.pincode from order_view ow 
770
        left join users u on u.id = ow.user_id 
771
        left join (select user_id, count(*) as order_count from order_view where status in ('ORDER_CREATED','DETAIL_CREATED')  group by user_id)as crm1 on ow.user_id = crm1.user_id
772
        left join (select * from (select * from all_user_addresses order by source) s group by user_id)aua on aua.user_id=u.id 
773
        where (lower(u.referrer) not like 'emp%' or u.utm_campaign is not null) and u.activated = 1 and ow.status in ('ORDER_CREATED','DETAIL_CREATED'); 
14613 amit.gupta 774
        ''',)
775
    row = 0
776
    i=-1
777
    worksheet.write(row, inc(), 'User Id', boldStyle)
16726 amit.gupta 778
    #worksheet1.write(row, i, 'User Id', boldStyle)
14613 amit.gupta 779
    worksheet.write(row, inc(), 'User name', boldStyle)
16726 amit.gupta 780
    #worksheet1.write(row, i, 'User name', boldStyle)
14613 amit.gupta 781
    worksheet.write(row, inc(), 'Order Id', boldStyle)
16726 amit.gupta 782
    #worksheet1.write(row, i, 'Order Id', boldStyle)
14613 amit.gupta 783
    worksheet.write(row, inc(), 'Created On', boldStyle)
16726 amit.gupta 784
    #worksheet1.write(row, i, 'Created On', boldStyle)
14613 amit.gupta 785
    worksheet.write(row, inc(), 'Store Id', boldStyle)
16726 amit.gupta 786
    #worksheet1.write(row, i, 'Store Id', boldStyle)
14613 amit.gupta 787
    worksheet.write(row, inc(), 'Merchant Order Id', boldStyle)
16785 amit.gupta 788
    worksheet.write(row, inc(), 'SubOrder Id', boldStyle)
16726 amit.gupta 789
    #worksheet1.write(row, i, 'Merchant Order Id', boldStyle)
14616 amit.gupta 790
    worksheet.write(row, inc(), 'Product title', boldStyle)
16726 amit.gupta 791
    #worksheet1.write(row, i, 'Product title', boldStyle)
14613 amit.gupta 792
    worksheet.write(row, inc(), 'Amount Paid', boldStyle)
16726 amit.gupta 793
    #worksheet1.write(row, i, 'Amount Paid', boldStyle)
14613 amit.gupta 794
    worksheet.write(row, inc(), 'Cashback', boldStyle)
16726 amit.gupta 795
    #worksheet1.write(row, i, 'Cashback', boldStyle)
14613 amit.gupta 796
    worksheet.write(row, inc(), 'Order Status', boldStyle)
16726 amit.gupta 797
    #worksheet1.write(row, i, 'Order Status', boldStyle)
14613 amit.gupta 798
    worksheet.write(row, inc(), 'Detailed Status', boldStyle)
16726 amit.gupta 799
    #worksheet1.write(row, i, 'Detailed Status', boldStyle)
14613 amit.gupta 800
    worksheet.write(row, inc(), 'Cashback Status', boldStyle)
16726 amit.gupta 801
    #worksheet1.write(row, i, 'Cashback Status', boldStyle)
14613 amit.gupta 802
    worksheet.write(row, inc(), 'Reconciled', boldStyle)
16726 amit.gupta 803
    #worksheet1.write(row, i, 'Reconciled', boldStyle)
14613 amit.gupta 804
    worksheet.write(row, inc(), 'IP', boldStyle)
16726 amit.gupta 805
    #worksheet1.write(row, i, 'IP', boldStyle)
16718 amit.gupta 806
    worksheet.write(row, inc(), 'Aff Status', boldStyle)
16726 amit.gupta 807
    #worksheet1.write(row, i, 'Aff Status', boldStyle)
14693 amit.gupta 808
    i=-1
809
    sh1.write(row, inc(), 'User Id', boldStyle)
810
    sh1.write(row, inc(), 'User name', boldStyle)
811
    sh1.write(row, inc(), 'Order Id', boldStyle)
812
    sh1.write(row, inc(), 'Created On', boldStyle)
813
    sh1.write(row, inc(), 'Store Id', boldStyle)
814
    sh1.write(row, inc(), 'Merchant Order Id', boldStyle)
14771 amit.gupta 815
    sh1.write(row, inc(), 'Status', boldStyle)
15932 amit.gupta 816
    sh1.write(row, inc(), 'Detailed Status', boldStyle)
14693 amit.gupta 817
    sh1.write(row, inc(), 'Product title', boldStyle)
818
    sh1.write(row, inc(), 'Referrer', boldStyle)
819
    sh1.write(row, inc(), 'Amount Paid', boldStyle)
14771 amit.gupta 820
    sh1.write(row, inc(), 'Catalog Id', boldStyle)
14693 amit.gupta 821
    sh1.write(row, inc(), 'Brand', boldStyle)
822
    sh1.write(row, inc(), 'Model', boldStyle)
823
    sh1.write(row, inc(), 'Category', boldStyle)
15932 amit.gupta 824
    sh1.write(row, inc(), 'Deal Rank', boldStyle)
16286 amit.gupta 825
    sh1.write(row, inc(), 'Max Nlc', boldStyle)
826
    sh1.write(row, inc(), 'Min Nlc', boldStyle)
827
    sh1.write(row, inc(), 'DP', boldStyle)
828
    sh1.write(row, inc(), 'Item status', boldStyle)
15932 amit.gupta 829
    sh1.write(row, inc(), 'City', boldStyle)
830
    sh1.write(row, inc(), 'State', boldStyle)
831
    sh1.write(row, inc(), 'Pincode', boldStyle)
15423 amit.gupta 832
    i =-1
833
    sh2.write(row, inc(), 'User Id', boldStyle)
834
    sh2.write(row, inc(), 'User name', boldStyle)
835
    sh2.write(row, inc(), 'Created On', boldStyle)
836
    sh2.write(row, inc(), 'Store', boldStyle)
837
    sh2.write(row, inc(), 'Status', boldStyle)
838
    sh2.write(row, inc(), 'Product title', boldStyle)
839
    sh2.write(row, inc(), 'Price', boldStyle)
840
    sh2.write(row, inc(), 'Quantity', boldStyle)
841
    sh2.write(row, inc(), 'Catalog Id', boldStyle)
842
    sh2.write(row, inc(), 'Brand', boldStyle)
843
    sh2.write(row, inc(), 'Model', boldStyle)
844
    sh2.write(row, inc(), 'Category', boldStyle)
14613 amit.gupta 845
 
846
    row=0
847
    row2=0
14632 amit.gupta 848
    row3=0
849
    db1 = client.Catalog
14613 amit.gupta 850
    for result in results:
851
        morder = db.merchantOrder.find_one({"orderId":result[0]})
852
        if morder is not None:
853
            subOrders = morder.get("subOrders")
854
            if subOrders is not None:
855
                for  subOrder in subOrders:
14632 amit.gupta 856
                    row3+=1
857
                    i=-1
14699 amit.gupta 858
                    sh1.write(row3, inc(), result[1])
15932 amit.gupta 859
                    sh1.write(row3, inc(), result[7])
14632 amit.gupta 860
                    sh1.write(row3, inc(), result[0])
15932 amit.gupta 861
                    sh1.write(row3, inc(), result[6], datetime_format)
14632 amit.gupta 862
                    sh1.write(row3, inc(), sourceMap.get(result[2]))
863
                    sh1.write(row3, inc(), morder.get("merchantOrderId"))
14771 amit.gupta 864
                    sh1.write(row3, inc(), subOrder.get("status"))
15932 amit.gupta 865
                    sh1.write(row3, inc(), subOrder.get("detailedStatus"))
14632 amit.gupta 866
                    sh1.write(row3, inc(), subOrder.get("productTitle"))
15932 amit.gupta 867
                    sh1.write(row3, inc(), result[9])
14632 amit.gupta 868
                    inc()
869
                    if int(subOrder.get("quantity")) > 0:
870
                        sh1.write(row3, i, int(subOrder.get("amountPaid"))/int(subOrder.get("quantity")))
14647 amit.gupta 871
                    skuData = getSkuData(morder.get("storeId"), subOrder.get("productCode"))
16492 amit.gupta 872
                    if morder.get("storeId") in (1,2,4,5,6):
14647 amit.gupta 873
                        skuData = db1.MasterData.find_one({'identifier':subOrder.get("productCode").strip(), 'source_id':morder.get("storeId")})
874
                    elif morder.get("storeId") == 3:
875
                        skuData = db1.MasterData.find_one({'secondaryIdentifier':subOrder.get("productCode").strip(), 'source_id':morder.get("storeId")})
14634 amit.gupta 876
                    if skuData is not None:
14771 amit.gupta 877
                        sh1.write(row3, inc(), skuData.get("skuBundleId"))
14634 amit.gupta 878
                        sh1.write(row3, inc(), skuData.get("brand"))
879
                        sh1.write(row3, inc(), skuData.get("model_name"))
880
                        sh1.write(row3, inc(), skuData.get("category"))
16213 amit.gupta 881
                        sh1.write(row3, inc(), subOrder.get("dealRank"))
16286 amit.gupta 882
                        sh1.write(row3, inc(), subOrder.get("maxNlc"))
883
                        sh1.write(row3, inc(), subOrder.get("minNlc"))
16317 amit.gupta 884
                        sh1.write(row3, inc(), utils.statusMap.get(subOrder.get("db")))
885
 
16286 amit.gupta 886
                        sh1.write(row3, inc(), subOrder.get("itemStatus"))
15932 amit.gupta 887
                    else:
888
                        sh1.write(row3, inc(), None)
889
                        sh1.write(row3, inc(), None)
890
                        sh1.write(row3, inc(), None)
891
                        sh1.write(row3, inc(), None)
892
                        sh1.write(row3, inc(), None)
16286 amit.gupta 893
                        sh1.write(row3, inc(), None)
894
                        sh1.write(row3, inc(), None)
895
                        sh1.write(row3, inc(), None)
896
                        sh1.write(row3, inc(), None)
17012 amit.gupta 897
                    print result[10]
898
                    sh1.write(row3, inc(), unicode(result[10], errors='ignore'))
15932 amit.gupta 899
                    sh1.write(row3, inc(), result[11])
900
                    sh1.write(row3, inc(), result[12])
901
 
14881 amit.gupta 902
                    #removed filter as requested by Rajneesh
903
                    #if subOrder.get("cashBackStatus") == Store.CB_APPROVED or subOrder.get("cashBackStatus") == Store.CB_PENDING:
904
                    row +=1
905
                    i=-1
906
                    worksheet.write(row, inc(), result[0])
15932 amit.gupta 907
                    worksheet.write(row, inc(), result[7])
14881 amit.gupta 908
                    worksheet.write(row, inc(), result[1])
15932 amit.gupta 909
                    worksheet.write(row, inc(), result[6], datetime_format)
14881 amit.gupta 910
                    worksheet.write(row, inc(), result[2])
911
                    worksheet.write(row, inc(), morder.get("merchantOrderId"))
16785 amit.gupta 912
                    worksheet.write(row, inc(), subOrder.get("merchantSubOrderId"))                    
14881 amit.gupta 913
                    worksheet.write(row, inc(), subOrder.get("productTitle"))
914
                    worksheet.write(row, inc(), subOrder.get("amountPaid"))
915
                    worksheet.write(row, inc(), subOrder.get("cashBackAmount"))
916
                    worksheet.write(row, inc(), subOrder.get("status"))
917
                    worksheet.write(row, inc(), subOrder.get("detailedStatus"))
918
                    worksheet.write(row, inc(), subOrder.get("cashBackStatus"))
919
                    worksheet.write(row, inc(), False if morder.get("reconciled") is None else True)
920
                    if morder.get("reconciled") and morder.get("storeId")==3:
921
                        try:
16718 amit.gupta 922
                            snapdealafinfo = db.snapdealOrderAffiliateInfo.find_one({"adId":morder.get("adId"), "reconciled":True})
923
                            worksheet.write(row, inc(), snapdealafinfo.get("ip"))
924
                            worksheet.write(row, inc(), snapdealafinfo.get("conversionStatus"))
14881 amit.gupta 925
                        except:
16718 amit.gupta 926
                            print "Could not find", morder.get("adId"), "that is reconciled for order", morder.get("orderId")
16726 amit.gupta 927
                    #if result[8] >= 10:
928
                    #    row2 +=1 
929
                    #    i=-1
930
                        #worksheet1.write(row2, inc(), result[0])
931
                        #worksheet1.write(row2, inc(), result[7])
932
                        #worksheet1.write(row2, inc(), result[1])
933
                        #worksheet1.write(row2, inc(), result[6], datetime_format)
934
                        #worksheet1.write(row2, inc(), result[2])
935
                        #worksheet1.write(row2, inc(), morder.get("merchantOrderId"))
936
                        #worksheet1.write(row2, inc(), subOrder.get("productTitle"))
937
                        #worksheet1.write(row2, inc(), subOrder.get("amountPaid"))
938
                        #worksheet1.write(row2, inc(), subOrder.get("cashBackAmount"))
939
                        #worksheet1.write(row2, inc(), subOrder.get("status"))
940
                        #worksheet1.write(row2, inc(), subOrder.get("detailedStatus"))
941
                        #worksheet1.write(row2, inc(), subOrder.get("cashBackStatus"))
942
                        #worksheet1.write(row2, inc(), False if morder.get("reconciled") is None else True)
943
                        #worksheet1.write(row2, inc(), )
944
                        #if morder.get("reconciled") and morder.get("storeId")==3:
945
                        #    try:
946
                        #        snapdealafinfo = db.snapdealOrderAffiliateInfo.find_one({"adId":morder.get("adId"), "reconciled":True})
947
                        #        worksheet1.write(row2, inc(), snapdealafinfo.get("ip"))
948
                        #        worksheet1.write(row2, inc(), snapdealafinfo.get("conversionStatus"))
949
                        #    except:
950
                        #        print "Could not find", morder.get("adId"), "that is reconcired for order", morder.get("orderId")
15423 amit.gupta 951
 
15542 amit.gupta 952
    flipkartOrders = session.query(FlipkartOrders).order_by(FlipkartOrders.created.desc()).all()
15540 amit.gupta 953
    flipkartOrders.reverse()
15423 amit.gupta 954
    row3=0
15430 amit.gupta 955
    #try:
15540 amit.gupta 956
    for order in flipkartOrders:
15423 amit.gupta 957
        row3 += 1
958
        i=-1
15540 amit.gupta 959
        sh2.write(row3, inc(), order.user_id)
960
        sh2.write(row3, inc(), order.email)
961
        sh2.write(row3, inc(), order.created, datetime_format)
15423 amit.gupta 962
        sh2.write(row3, inc(), "Flipkart")
15540 amit.gupta 963
        sh2.write(row3, inc(), order.status)
964
        sh2.write(row3, inc(), order.title)
965
        sh2.write(row3, inc(), order.price)
966
        sh2.write(row3, inc(), order.quantity)
967
        sh2.write(row3, inc(), order.catalogId)
968
        sh2.write(row3, inc(), order.brand)
969
        sh2.write(row3, inc(), order.model)
970
        sh2.write(row3, inc(), order.category)
14632 amit.gupta 971
 
14613 amit.gupta 972
    wb.save(XLS_FILENAME)
14632 amit.gupta 973
    workbook.save(XLS_O_FILENAME)
14647 amit.gupta 974
 
975
def getSkuData(storeId, identifier):
16492 amit.gupta 976
    if storeId in (1,2,4,5,6):
14647 amit.gupta 977
        skuData = client.Catalog.MasterData.find_one({'identifier':identifier, 'source_id':storeId})
978
    elif storeId == 3:
979
        skuData = client.Catalog.MasterData.find_one({'secondaryIdentifier':identifier, 'source_id':storeId})
980
    return skuData
981
 
14460 amit.gupta 982
def inc():
983
    global i
984
    i+=1
985
    return i
15540 amit.gupta 986
 
987
def migrateFlipkartOrders():
988
    db = client.Dtr
989
    info = reversed(list(db.flipkartOrderAffiliateInfo.find()))
990
    #try:
991
    for order in info:
992
        userId = None
993
        subTagId = None
994
        email = None
995
        subTagId = order.get("subTagId")
996
        if subTagId:
997
            click = session.query(Clicks).filter_by(tag = subTagId).first()
998
            if click is not None:
999
                userId= click.user_id 
1000
                user = session.query(Users.email).filter_by(id = userId).first()
1001
                if user is not None:
1002
                    email = user.email
1003
 
1004
        flipkartOrder = FlipkartOrders()
1005
        flipkartOrder.user_id = userId
1006
        flipkartOrder.identifier = order.get("identifier")
1007
        flipkartOrder.email = email
1008
        flipkartOrder.subtagId = order.get("subTagId")
1009
        flipkartOrder.created = datetime.strptime(order.get("saleDate"), "%Y-%m-%d")
1010
        flipkartOrder.status = order.get("conversionStatus")
1011
        flipkartOrder.title = order.get("productTitle")
1012
        flipkartOrder.price = order.get("price")
1013
        flipkartOrder.quantity = order.get("quantity")
1014
        flipkartOrder.productCode = order.get("productCode")
1015
        skuData = getSkuData(2, order.get("productCode"))
1016
        if skuData is not None:
1017
            flipkartOrder.catalogId = skuData.get("skuBundleId")
1018
            flipkartOrder.brand = skuData.get("brand")
1019
            flipkartOrder.model = skuData.get("model_name")
1020
            flipkartOrder.category =categoryMap.get(skuData.get("category_id"))
1021
            flipkartOrder.title =skuData.get("source_product_name")
1022
 
1023
    session.commit()
16947 amit.gupta 1024
 
1025
 
1026
def main1():
1027
    db = client.Dtr
1028
    for offer in db.snapdealOrderAffiliateInfo.find({}):
1029
        print offer.get("adId"), offer.get("saleAmount"), type(offer.get("saleAmount"))  
1030
        #obj = offer.get(saleTime)
1031
        #obj['paidAmount'] += order["paidAmount"]
14632 amit.gupta 1032
def addHeaders(sheet):
1033
    global i
1034
    i = 0
1035
    sheet.write(0, inc(), )
14450 amit.gupta 1036
def main():
14647 amit.gupta 1037
 
16995 amit.gupta 1038
    message = generateSnapDealReco()
14647 amit.gupta 1039
    generateFlipkartReco()
15791 manish.sha 1040
    generateShopcluesReco()
14650 amit.gupta 1041
    generateAmazonReco(XLS_A_FILENAME)
14613 amit.gupta 1042
    getUserOrders()
16995 amit.gupta 1043
    sendmail(["amit.gupta@shop2020.in","rajneesh.arora@saholic.com","manish.sharma@shop2020.in"], message, "Affiliate Reco", XLS_FILENAME, XLS_F_FILENAME, XLS_A_FILENAME, XLS_SC_FILENAME)
17001 amit.gupta 1044
    #sendmail(["amit.gupta@shop2020.in"], "", "Affiliate Reco", XLS_FILENAME, XLS_F_FILENAME, XLS_A_FILENAME, XLS_SC_FILENAME)
16266 manish.sha 1045
    sendmail(["amit.gupta@shop2020.in", "rajneesh.arora@saholic.com", "chaitnaya.vats@saholic.com", "manoj.kumar@saholic.com", "manish.sharma@shop2020.in"], "", "All DTR Orders", XLS_O_FILENAME)
17001 amit.gupta 1046
 
1047
 
1048
def main2():
1049
    db = client.Dtr
1050
    curs = getOrdersAfterDate(datetime.now() - timedelta(days=1), 3)
1051
    datemap={}
1052
    for row1 in curs:
1053
        orderId = row1[0]
1054
        order = db.merchantOrder.find_one({"orderId":orderId})
1055
        if order is None:
1056
            continue
1057
        #saleTime = int(time.mktime(datetime.strptime(order['placedOn'], "%b %d, %Y, %I:%M %p").timetuple()))
1058
        try:
1059
            saleTime = datetime.strptime(order['placedOn'], "%a, %d %b, %Y").strftime("%Y-%m-%d")
1060
        except:
1061
            saleTime = datetime.strptime(order['placedOn'], "%b %d, %Y, %I:%M %p").strftime("%Y-%m-%d")
1062
        print "%s\t%s\t%s\t%s"%(orderId, order['placedOn'], saleTime, order['paidAmount'])
1063
        if not datemap.has_key(saleTime):
1064
            datemap[saleTime] = {"totalAmount":0, "paidAmount":0, "rejectedAmount":0, "approvedAmount":0, "count":0}
1065
 
1066
        obj = datemap.get(saleTime)
1067
        obj['paidAmount'] += order["paidAmount"]
1068
        obj['count'] += 1
1069
 
1070
    for offer in db.snapdealOrderAffiliateInfo1.find({"saleDate":{"$gte":toTimeStamp(datetime.now() - timedelta(days=1))}}):
1071
        saleTime =  utils.fromTimeStamp(offer.get('saleDate')).strftime("%Y-%m-%d")
1072
        obj = datemap.get(saleTime)
1073
        if obj is not None:
1074
            try:
1075
                if offer.get("payOut"):
1076
                    obj['approvedAmount'] += offer["saleAmount"]
1077
                else:
1078
                    obj['rejectedAmount'] += offer["saleAmount"]
1079
            except:
1080
                print "Exception for orderId" , offer.get("orderId")
1081
        else:
1082
            print "Could not find sale date", saleTime
1083
            continue
1084
 
1085
    for key,valmap in  datemap.iteritems():
1086
        valmap['_id'] = key
1087
        db.flSaleSnapshot.save(valmap)
14450 amit.gupta 1088
 
1089
if __name__ == '__main__':
17010 amit.gupta 1090
    main2()
17008 amit.gupta 1091
    main()
17010 amit.gupta 1092
 
14460 amit.gupta 1093