Subversion Repositories SmartDukaan

Rev

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