Subversion Repositories SmartDukaan

Rev

Rev 14498 | Rev 14501 | 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
7
from dtr.storage.Mysql import getOrdersAfterDate
8
from email import encoders
9
from email.mime.base import MIMEBase
10
from email.mime.multipart import MIMEMultipart
11
from email.mime.text import MIMEText
12
from pymongo.mongo_client import MongoClient
14460 amit.gupta 13
from xlrd import open_workbook
14
from xlwt.Workbook import Workbook
14450 amit.gupta 15
import MySQLdb
14460 amit.gupta 16
from xlutils.copy import copy
14450 amit.gupta 17
import smtplib
18
import time
19
import xlwt
14460 amit.gupta 20
#from xlwt import 
14450 amit.gupta 21
 
22
client = MongoClient('mongodb://localhost:27017/')
23
 
24
SENDER = "cnc.center@shop2020.in"
25
PASSWORD = "5h0p2o2o"
26
SUBJECT = "DTR User Segmentation report for " + date.today().isoformat()
27
SMTP_SERVER = "smtp.gmail.com"
28
SMTP_PORT = 587    
29
 
14460 amit.gupta 30
XLS_FILENAME = "dtrsourcesreco.xls"
31
boldStyle = xlwt.XFStyle()
32
f = xlwt.Font()
33
f.bold = True
34
boldStyle.font = f
35
i = -1
14450 amit.gupta 36
def generateFlipkartReco():
14460 amit.gupta 37
    curs = getOrdersAfterDate(datetime.now() - timedelta(days=30), 2)
38
    db = client.Dtr
39
    rb = open_workbook(XLS_FILENAME)
40
    wb = copy(rb)
41
    #wb = xlwt.Workbook()
42
    row = 0
43
    worksheet = wb.add_sheet("Flipkart")
44
    worksheet.write(row, inc(), 'Order Id', boldStyle)
45
    worksheet.write(row, inc(), 'User Id', boldStyle)
14474 amit.gupta 46
    worksheet.write(row, inc(), 'Username', boldStyle)
14460 amit.gupta 47
    worksheet.write(row, inc(), 'Merchant Order Id', boldStyle)
48
    worksheet.write(row, inc(), 'Product Title', boldStyle)
49
    worksheet.write(row, inc(), 'Price', boldStyle)
50
    worksheet.write(row, inc(), 'Quantity', boldStyle)
51
    worksheet.write(row, inc(), 'Status', boldStyle)
52
    worksheet.write(row, inc(), 'Detailed Status', boldStyle)
53
    worksheet.write(row, inc(), 'Cashback Status', boldStyle)
54
    worksheet.write(row, inc(), 'Our CashBack', boldStyle)
55
    worksheet.write(row, inc(), 'Sale Date', boldStyle)
56
    worksheet.write(row, inc(), 'SubtagId', boldStyle)
57
    worksheet.write(row, inc(), 'Category', boldStyle)
58
    worksheet.write(row, inc(), 'Aff PayOut', boldStyle)
59
    worksheet.write(row, inc(), 'Aff Sale Amount', boldStyle)
60
    worksheet.write(row, inc(), 'Aff Sale Date', boldStyle)
61
    for row1 in curs:
62
        orderId = row1[0]
63
        order = db.merchantOrder.find_one({"orderId":orderId})
64
        if order is None:
65
            continue
66
        saleTime = int(time.mktime(datetime.strptime(order['placedOn'], "%d %B, %Y %I:%M %p").replace(hour=0, minute=0, second=0, microsecond=0).timetuple()))
67
        #saleTime1 = int(time.mktime((datetime.strptime(order['placedOn'], "%b %d, %Y %I:%M %p") + timedelta(seconds=-60)).timetuple()))
68
 
69
        for subOrder in order['subOrders']: 
14489 amit.gupta 70
            affs = list(db.flipkartOrderAffiliateInfo.find({"subOrders.productCode":subOrder.get("productCode"), "saleDateInt":saleTime}))
14460 amit.gupta 71
            row += 1
72
            global i
73
            i=-1
74
            worksheet.write(row, inc(), orderId)
75
            worksheet.write(row, inc(), row1[1])
14474 amit.gupta 76
            worksheet.write(row, inc(), row1[-1])
14460 amit.gupta 77
            worksheet.write(row, inc(), order['merchantOrderId'])
78
            worksheet.write(row, inc(), subOrder['productTitle'])
79
            worksheet.write(row, inc(), subOrder['amountPaid'])
80
            worksheet.write(row, inc(), subOrder['quantity'])
81
            worksheet.write(row, inc(), subOrder['status'])
82
            worksheet.write(row, inc(), subOrder['detailedStatus'])
83
            worksheet.write(row, inc(), subOrder['cashBackStatus'])
84
            worksheet.write(row, inc(), subOrder['cashBackAmount'])
85
            worksheet.write(row, inc(), subOrder['placedOn'])
86
            worksheet.write(row, inc(), order['subTagId'])
87
            for aff in affs:
14487 amit.gupta 88
                if aff['subTagId']== subOrder['subTagId']:
14460 amit.gupta 89
                    worksheet.write(row, inc(), aff['category'])
90
                    worksheet.write(row, inc(), aff['payOut'])
91
                    worksheet.write(row, inc(), aff['saleAmount'])
92
                    worksheet.write(row, inc(), aff['saleDate'])
93
                    break
94
 
95
 
96
        wb.save(XLS_FILENAME)
14450 amit.gupta 97
def generateSnapDealReco():
14460 amit.gupta 98
    curs = getOrdersAfterDate(datetime.now() - timedelta(days=30), 3)
14450 amit.gupta 99
    db = client.Dtr
100
 
14487 amit.gupta 101
    matchedList = []
14450 amit.gupta 102
    workbook = xlwt.Workbook()
14460 amit.gupta 103
    worksheet = workbook.add_sheet("Snapdeal")
14450 amit.gupta 104
    column = 0
105
    row = 0
14474 amit.gupta 106
    global i
107
    i=-1    
108
    worksheet.write(row, inc(), 'Order Id', boldStyle)
109
    worksheet.write(row, inc(), 'User Id', boldStyle)
110
    worksheet.write(row, inc(), 'Username', boldStyle)
111
    worksheet.write(row, inc(), 'Merchant Order Id', boldStyle)
112
    worksheet.write(row, inc(), 'Product Title', boldStyle)
113
    worksheet.write(row, inc(), 'Price', boldStyle)
114
    worksheet.write(row, inc(), 'Quantity', boldStyle)
115
    worksheet.write(row, inc(), 'Status', boldStyle)
116
    worksheet.write(row, inc(), 'Detailed Status', boldStyle)
117
    worksheet.write(row, inc(), 'Cashback Status', boldStyle)
118
    worksheet.write(row, inc(), 'Our CashBack', boldStyle)
119
    worksheet.write(row, inc(), 'Sale Date', boldStyle)
120
    worksheet.write(row, inc(), 'SubtagId', boldStyle)
121
    worksheet.write(row, inc(), 'Ad Id', boldStyle)
122
    worksheet.write(row, inc(), 'Affiliate PayOut', boldStyle)
123
    worksheet.write(row, inc(), 'Affiliate Sale Amount', boldStyle)
124
    worksheet.write(row, inc(), 'Affiliate Sale Date', boldStyle)
14450 amit.gupta 125
 
126
    for row1 in curs:
127
        orderId = row1[0]
128
        order = db.merchantOrder.find_one({"orderId":orderId})
129
        if order is None:
130
            continue
14496 amit.gupta 131
        #saleTime = int(time.mktime(datetime.strptime(order['placedOn'], "%b %d, %Y, %I:%M %p").timetuple()))
14450 amit.gupta 132
        aff = list(db.snapdealOrderAffiliateInfo.find({"subTagId":order["subTagId"]}))
14500 amit.gupta 133
        matched = False
14488 amit.gupta 134
        if len(aff) > 0 and order["subTagId"] not in matchedList: 
14500 amit.gupta 135
            if int(order["paidAmount"]) == aff[0]["saleAmount"]:
136
                matchedList.append(order["subTagId"])
137
                aff[0]['reconciled'] = True
138
                db.snapdealOrderAffiliateInfo.save(aff[0])
139
                order['reconciled'] = True
140
                db.merchantOrder.save(order)
141
                once = True        
142
                for subOrder in order['subOrders']:
143
                    i=-1 
144
                    row += 1
145
                    worksheet.write(row, inc(), orderId)
146
                    worksheet.write(row, inc(), row1[1])
147
                    worksheet.write(row, inc(), row1[-1])
148
                    worksheet.write(row, inc(), order['merchantOrderId'])
149
                    worksheet.write(row, inc(), subOrder['productTitle'])
150
                    worksheet.write(row, inc(), subOrder['amountPaid'])
151
                    worksheet.write(row, inc(), subOrder['quantity'])
152
                    worksheet.write(row, inc(), subOrder['status'])
153
                    worksheet.write(row, inc(), subOrder['detailedStatus'])
154
                    worksheet.write(row, inc(), subOrder['cashBackStatus'])
155
                    worksheet.write(row, inc(), subOrder['cashBackAmount'])
156
                    worksheet.write(row, inc(), subOrder['placedOn'])
157
                    worksheet.write(row, inc(), order['subTagId'])
158
                    worksheet.write(row, inc(), aff[0]['adId'])
159
                    worksheet.write(row, inc(), aff[0]['saleDate'])
160
                    if once:
161
                        worksheet.write(row, inc(), aff[0]['payOut'])
162
                        worksheet.write(row, inc(), aff[0]['saleAmount'])
163
                        once = False
14460 amit.gupta 164
        workbook.save(XLS_FILENAME)
14450 amit.gupta 165
 
166
def sendmail(email, message, title):
167
    if email == "":
168
        return
169
    mailServer = smtplib.SMTP(SMTP_SERVER, SMTP_PORT)
170
    mailServer.ehlo()
171
    mailServer.starttls()
172
    mailServer.ehlo()
173
 
174
    # Create the container (outer) email message.
175
    msg = MIMEMultipart()
176
    msg['Subject'] = title
177
    msg.preamble = title
178
    html_msg = MIMEText(message, 'html')
179
    msg.attach(html_msg)
180
 
181
    #snapdeal more to be added here
182
    snapdeal = MIMEBase('application', 'vnd.ms-excel')
14460 amit.gupta 183
    snapdeal.set_payload(file(XLS_FILENAME).read())
14450 amit.gupta 184
    encoders.encode_base64(snapdeal)
14460 amit.gupta 185
    snapdeal.add_header('Content-Disposition', 'attachment;filename=' + XLS_FILENAME)
14450 amit.gupta 186
    msg.attach(snapdeal)
187
 
188
 
189
    email.append('amit.gupta@shop2020.in')
190
    MAILTO = email 
191
    mailServer.login(SENDER, PASSWORD)
192
    mailServer.sendmail(PASSWORD, MAILTO, msg.as_string())
193
 
194
 
14460 amit.gupta 195
 
196
def inc():
197
    global i
198
    i+=1
199
    return i
200
 
14450 amit.gupta 201
def main():
202
    generateSnapDealReco()
14460 amit.gupta 203
    generateFlipkartReco()
14452 amit.gupta 204
    sendmail(["amit.gupta@shop2020.in"], "", "DTR Affiliate Reco")
14450 amit.gupta 205
 
206
if __name__ == '__main__':
14460 amit.gupta 207
    main()
208