Subversion Repositories SmartDukaan

Rev

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