Subversion Repositories SmartDukaan

Rev

Rev 17234 | Rev 17736 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
17137 naman 1
'''
2
Created on 24-Sep-2015
3
 
4
@author: manish
5
'''
6
from datetime import date, datetime, timedelta
17156 amit.gupta 7
from dtr.main import sourceMap
8
from dtr.storage import Mysql
9
from dtr.utils import utils
17137 naman 10
from email.mime.multipart import MIMEMultipart
11
from email.mime.text import MIMEText
12
from pymongo import MongoClient
17156 amit.gupta 13
import MySQLdb as mdb
14
import _mysql
17137 naman 15
import smtplib
16
import sys
17
 
18
 
19
 
20
# DataService.initialize()
21
# client = MongoClient('mongodb://localhost:27017/')
22
SENDER = "cnc.center@shop2020.in"
23
PASSWORD = "5h0p2o2o"
24
SUBJECT = "Summary"
25
SMTP_SERVER = "smtp.gmail.com"
26
SMTP_PORT = 587
27
client = MongoClient()
28
con = mdb.connect('localhost','root','shop2020','dtr')
29
 
30
def getSkuData(storeId, identifier):
17139 naman 31
    if storeId in (1,2,4,5,6,7):
17137 naman 32
        skuData = client.Catalog.MasterData.find_one({'identifier':identifier, 'source_id':storeId})
33
    elif storeId == 3:
34
        skuData = client.Catalog.MasterData.find_one({'secondaryIdentifier':identifier, 'source_id':storeId})
35
    return skuData
36
 
37
def sendmail(email, message, title, *varargs):
38
    if email == "":
39
        return
40
    mailServer = smtplib.SMTP(SMTP_SERVER, SMTP_PORT)
41
    mailServer.ehlo()
42
    mailServer.starttls()
43
    mailServer.ehlo()
44
 
45
    # Create the container (outer) email message.
46
    msg = MIMEMultipart()
47
    msg['Subject'] = title
48
    msg.preamble = title
49
    html_msg = MIMEText(message, 'html')
50
    msg.attach(html_msg)
51
 
52
#     email.append('amit.gupta@shop2020.in')
53
    MAILTO = email 
54
    mailServer.login(SENDER, PASSWORD)
55
    mailServer.sendmail(PASSWORD, MAILTO, msg.as_string())
56
 
57
def addToAllOrders(start_date, end_date=None):
58
    if not end_date:
59
        end_date = datetime.now()
60
    else:
61
        end_date = end_date + timedelta(days=1) 
62
    try:
63
        cur = con.cursor()            
17138 naman 64
        db=client.Dtr
17137 naman 65
        db1 = client.Catalog
66
        cur.execute("delete from allorder where created_on >= %s and created_on < %s", (start_date, end_date))
67
        con.commit()
68
        results = Mysql.fetchResult('''
17211 amit.gupta 69
                select ow.*, u.username, crm1.order_count, u.referrer, aua.city,aua.state,aua.pincode from order_view ow  
17137 naman 70
                left join users u on u.id = ow.user_id 
17194 amit.gupta 71
                left join (select user_id, count(*) as order_count from order_view where created >= %s and created < %s and status in ('ORDER_CREATED','DETAIL_CREATED')  group by user_id)as crm1 on ow.user_id = crm1.user_id
17137 naman 72
                left join (select * from (select * from all_user_addresses order by source) s group by user_id)aua on aua.user_id=u.id 
17211 amit.gupta 73
                where (lower(u.referrer) not like %s or u.utm_campaign is not null) and u.activated = 1 and ow.status in ('ORDER_CREATED','DETAIL_CREATED') and ow.created >= %s and ow.created < %s; 
74
                ''', start_date, end_date, 'emp%', start_date, end_date, )
17137 naman 75
 
17145 amit.gupta 76
        query = """INSERT INTO allorder 
17234 amit.gupta 77
                    (user_id, user_name, order_id, created_on, store_id, merchant_order_id, status, detailed_status, product_title, referrer, amount_paid, catalog_id, brand, model,category, deal_rank, max_nlc, min_nlc, dp, item_status, city, state, pincode, merchant_suborder_id,cashback_status,cashback_amount,quantity, reconciled, affstatus) 
78
                    VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s)
17145 amit.gupta 79
                """        
17137 naman 80
        for result in results:
81
            morder = db.merchantOrder.find_one({"orderId":result[0]})
82
            if morder is not None:
17234 amit.gupta 83
                reconciled=morder.get("reconciled")
17137 naman 84
                subOrders = morder.get("subOrders")
85
                if subOrders is not None:
86
                    for  subOrder in subOrders:
87
                        user_id = result[1]
88
                        user_name= result[7]
89
                        order_id =  result[0]
90
                        created_on =result[6]
91
                        store_id = sourceMap.get(result[2])
92
                        merchant_order_id = morder.get("merchantOrderId")
93
                        status = subOrder.get("status")
94
                        detailed_status = subOrder.get("detailedStatus")
95
                        product_title= subOrder.get("productTitle")
96
                        referrer =  result[9]
17211 amit.gupta 97
                        amount_paid = int(subOrder.get("amountPaid"))
98
                        quantity=int(subOrder.get("quantity"))
17137 naman 99
                        skuData = getSkuData(morder.get("storeId"), subOrder.get("productCode"))
17218 amit.gupta 100
                        if morder.get("storeId") == 3:
101
                            skuData = db1.MasterData.find_one({'secondaryIdentifier':subOrder.get("productCode").strip(), 'source_id':morder.get("storeId")})
102
                        else:
17137 naman 103
                            skuData = db1.MasterData.find_one({'identifier':subOrder.get("productCode").strip(), 'source_id':morder.get("storeId")})
104
                        if skuData is not None:
105
                            catalog_id = skuData.get("skuBundleId")
106
                            brand= skuData.get("brand")
107
                            model = skuData.get("model_name")
108
                            category = skuData.get("category")
109
                            deal_rank = subOrder.get("dealRank")
110
                            max_nlc = subOrder.get("maxNlc")
111
                            min_nlc = subOrder.get("minNlc")
17145 amit.gupta 112
                            dp = subOrder.get("db")
113
                            item_status = utils.statusMap.get(subOrder.get("itemStatus"))
17137 naman 114
                        else:
115
                            catalog_id = 'None'
116
                            brand= 'None'
117
                            model = 'None'
118
                            category = 'None'
119
                            deal_rank = 'None'
120
                            max_nlc = 'None'
121
                            min_nlc = 'None'
122
                            dp = 'None'
123
                            item_status = 'None'
17558 amit.gupta 124
                        affStatus = subOrder.get('affStatus')
17137 naman 125
                        merchant_suborder_id = subOrder.get("merchantSubOrderId")
126
                        cashback_status = subOrder.get("cashBackStatus")
127
                        cashback_amount = subOrder.get("cashBackAmount")
128
                        city = result[10]
129
                        state = result[11]
130
                        pincode = result[12]
131
 
132
                        print user_id
17234 amit.gupta 133
                        values = (user_id, user_name, order_id, created_on, store_id, merchant_order_id, status, detailed_status, product_title, referrer, amount_paid, catalog_id, brand, model,category, deal_rank, max_nlc, min_nlc, dp, item_status, city, state, pincode,merchant_suborder_id,cashback_status,cashback_amount, quantity, reconciled, affStatus)
17148 amit.gupta 134
                        cur.execute(query,values)     
17137 naman 135
                        con.commit()
136
    except _mysql.Error, e:
137
        print "Error %d: %s" % (e.args[0], e.args[1])
138
        sys.exit(1)
139
 
140
    finally:
141
 
142
        if con:
143
            con.close()
144
 
145
 
146
def summaryByBrandAndStore():
147
    con = mdb.connect('localhost','root','shop2020','dtr')
148
    try:
149
        cur = con.cursor()            
17153 amit.gupta 150
        # ----Data by brand---
17137 naman 151
        tbody = []
152
        rowtemplate_brand="<tr><td>{0}</td><td>{1}</td><td>{2}</td><td>{3}</td></tr>"
153
        mailBodyTemplate_brand="""
154
                <html>
155
                    <body>
156
                    <table cellspacing="0" border="1" style="text-align:right">
157
                        <thead>
158
                            <tr>
159
                                <th colspan='4' style="text-align:center">Summary by Brand</th>
160
                            </tr>
161
                            <tr>
162
                                <th style="text-align:center">Brand</th>
163
                                <th  style="text-align:center">Amount</th>
164
                                <th  style="text-align:center">Quantity</th>
165
                                <th  style="text-align:center">Number of Order</th>
166
                            </tr>
167
                        </thead>
168
                        <tbody>
169
                            {0}
170
                        </tbody>
171
                    </table><br><br>
172
                    </body>
173
                </html>
174
            """
175
 
17149 amit.gupta 176
        cur.execute('''select brand ,sum(amount_paid) amount,count(brand) quantity, count(distinct order_id) no_of_orders  
17150 amit.gupta 177
                    from allorder where created_on >= CURDATE() -  interval 1 day and created_on < CURDATE() group by brand order by count(brand) desc limit 10
17149 amit.gupta 178
                    ''')
17137 naman 179
        rows = cur.fetchall()
180
        row = 1
181
        alldata =''
182
        for data in rows:
183
            row +=1
184
            if len(alldata)>0:
185
                alldata = alldata + ",'"+ data[0]+"'"
186
            else:
187
                alldata = "'"+data[0]+"'"
188
            tbody.append(rowtemplate_brand.format(data[0],data[1],data[2],data[3]))
189
 
17152 amit.gupta 190
        cur.execute("select sum(amount_paid) amount,count(*) quantity,count(distinct order_id) from allorder where created_on >= CURDATE() -  interval 1 day and created_on < CURDATE() and brand not in("+alldata+")")
17137 naman 191
        row_other = cur.fetchall()
192
        for data in row_other:
193
            tbody.append(rowtemplate_brand.format('Other',data[0],data[1],data[2]))
194
        tbody.append(rowtemplate_brand.format('','','',''))
195
        tbody.append(rowtemplate_brand.format('','<b>MTD Amount</b>','<b>MTD Quantity</b>','<b>MTD No. of Order</b>'))
196
 
17153 amit.gupta 197
 
198
 
17137 naman 199
        # Brand by MTD
17150 amit.gupta 200
        cur.execute('''select brand ,sum(amount_paid) amount,count(brand) quantity, count(distinct order_id) no_of_orders  
201
                    from allorder where created_on >= CURDATE() -  interval DAY(CURDATE()-INTERVAL 1 day) day and 
202
                                        created_on < CURDATE() group by brand order by count(brand) desc limit 10''')
17137 naman 203
        rows = cur.fetchall()
204
        row += 2
205
        alldata =''
206
        for data in rows:
207
            if len(alldata)>0:
208
                alldata = alldata + ",'"+ data[0]+"'"
209
            else:
210
                alldata = "'"+data[0]+"'"
211
            tbody.append(rowtemplate_brand.format(data[0],data[1],data[2],data[3]))
212
 
17152 amit.gupta 213
        cur.execute("select sum(amount_paid) amount,count(*) quantity,count(distinct order_id) from allorder where created_on >= CURDATE() -  interval DAY(CURDATE()-INTERVAL 1 day) day and created_on < CURDATE() AND brand not in("+alldata+")")
17137 naman 214
        mtd_row_other = cur.fetchall()
215
        for data in mtd_row_other:
216
            tbody.append(rowtemplate_brand.format('Other',data[0],data[1],data[2]))
217
 
218
        message_by_brand = mailBodyTemplate_brand.format("".join(tbody))
17153 amit.gupta 219
 
17137 naman 220
        # Data by Store
221
        # cur.execute("select store_id store,sum(amount_paid) amount,count(store_id) quantity ,count(distinct order_id) from allorder group by store_id order by store_id ASC;")
17194 amit.gupta 222
        cur.execute('''
223
            select name, c.* from store left join (select b.store_id, a.amount, a.quantity, a.orders, b.mtdamount,b.mtdquantity, b.mtdorders from   
224
            (select ifnull(store_id, 'total') as store_id, sum(amount_paid) mtdamount, count(*) mtdquantity,  count(distinct order_id) mtdorders  from allorder 
17218 amit.gupta 225
                where created_on >= CURDATE() -  interval DAY(CURDATE()-INTERVAL 1 day) day and created_on < CURDATE() group by store_id with rollup) b 
17194 amit.gupta 226
            left join  
227
            (select ifnull(store_id, 'total') as store_id, sum(amount_paid) amount, count(*) quantity,  count(distinct order_id) orders  from allorder 
17219 amit.gupta 228
                where date(created_on)=curdate()-interval 1 day group by store_id with rollup) a   
17194 amit.gupta 229
            on a.store_id=b.store_id) as c on name = c.store_id''')
17137 naman 230
        rows = cur.fetchall()
231
        tbody =[]
232
        rowtemplate="<tr><td>{0}</td><td>{1}</td><td>{2}</td><td>{3}</td><td>{4}</td><td>{5}</td><td>{6}</td></tr>"
233
        for data in rows:
17155 amit.gupta 234
            tbody.append(rowtemplate.format(data[0],data[2] if data[2] else "-",data[3] if data[3] else "-",data[4] if data[4] else "-",
235
                                            data[5] if data[5] else "-",data[6] if data[6] else "-",data[7] if data[7] else "-"))
17137 naman 236
 
237
        # book.save("/home/manish/Desktop/Summary.xls")
238
 
239
        mailBodyTemplate="""
240
                <html>
241
                    <body>
242
                    <table cellspacing="0" border="1" style="text-align:right">
243
                        <thead>
244
                            <tr>
245
                                <th colspan='7' style="text-align:center">Summary by Store</th>
246
                            </tr>
247
                            <tr>
17154 amit.gupta 248
                                <th style="text-align:center">Store</th>
17137 naman 249
                                <th  style="text-align:center">Amount</th>
250
                                <th  style="text-align:center">Quantity</th>
251
                                <th  style="text-align:center">Number of Order</th>
252
                                <th  style="text-align:center">MTD Amount</th>
253
                                <th  style="text-align:center">MTD Quantity</th>
254
                                <th  style="text-align:center">MTD Number of Order</th>
255
                            </tr>
256
                        </thead>
257
                        <tbody>
258
                            {0}
259
                        </tbody>
260
                    </table><br><br>
261
                    </body>
262
                </html>
263
            """
264
        message = mailBodyTemplate.format("".join(tbody))
265
        return message+message_by_brand
266
    except _mysql.Error, e:
267
 
268
        print "Error %d: %s" % (e.args[0], e.args[1])
269
        sys.exit(1)
270
 
271
    finally:
272
 
273
        if con:
274
            con.close()               
275
 
276
if __name__ == '__main__':
17195 amit.gupta 277
    #addToAllOrders(date(2015,1,1))
17160 amit.gupta 278
    #summaryByBrandAndStore()
279
    pass