Subversion Repositories SmartDukaan

Rev

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