Subversion Repositories SmartDukaan

Rev

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