Subversion Repositories SmartDukaan

Rev

Rev 19371 | Rev 19393 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 19371 Rev 19392
Line 4... Line 4...
4
from shop2020.model.v1.order.impl import DataService as OrderDataService
4
from shop2020.model.v1.order.impl import DataService as OrderDataService
5
from shop2020.model.v1.catalog.impl import DataService as CatalogDataService 
5
from shop2020.model.v1.catalog.impl import DataService as CatalogDataService 
6
from shop2020.model.v1.order.impl.DataService import Order, LineItem
6
from shop2020.model.v1.order.impl.DataService import Order, LineItem
7
from shop2020.model.v1.catalog.impl.DataService import Item
7
from shop2020.model.v1.catalog.impl.DataService import Item
8
from shop2020.thriftpy.model.v1.order.ttypes import OrderStatus, OrderSource
8
from shop2020.thriftpy.model.v1.order.ttypes import OrderStatus, OrderSource
-
 
9
import glob
-
 
10
import os
9
import shutil
11
import smtplib
-
 
12
from email.mime.multipart import MIMEMultipart
-
 
13
from email.mime.text import MIMEText
-
 
14
 
10
 
15
 
11
dtrUserMap = {}
16
dtrUserMap = {}
12
 
17
 
13
negative_items = []
18
negative_items = []
14
negative_categories = [10013,10017,10006]
19
negative_categories = [10013,10017,10006]
Line 21... Line 26...
21
 
26
 
22
cache_path = "/var/www/dtrdashboard/app/tmp/cache/target/"
27
cache_path = "/var/www/dtrdashboard/app/tmp/cache/target/"
23
 
28
 
24
 
29
 
25
class UserOrderData:
30
class UserOrderData:
26
    def __init__(self, dtr_user_id, delivered_order_value, pending_order_value):
31
    def __init__(self, dtr_user_id, delivered_order_value, pending_order_value, email):
27
        self.dtr_user_id = dtr_user_id
32
        self.dtr_user_id = dtr_user_id
28
        self.delivered_order_value = delivered_order_value
33
        self.delivered_order_value = delivered_order_value
29
        self.pending_order_value = pending_order_value
34
        self.pending_order_value = pending_order_value
-
 
35
        self.email = email
30
 
36
 
31
def fetchNegativeItems():
37
def fetchNegativeItems():
32
    global negative_items
38
    global negative_items
33
    try:
39
    try:
34
        CatalogDataService.initialize('catalog', '192.168.190.114', False)
40
        CatalogDataService.initialize('catalog', '192.168.190.114', False)
Line 38... Line 44...
38
        session.close()
44
        session.close()
39
 
45
 
40
def main():
46
def main():
41
    all_users = get_mongo_connection().Catalog.PromoOffer.find({},{'user_id':1,'saholic_user_id':1})
47
    all_users = get_mongo_connection().Catalog.PromoOffer.find({},{'user_id':1,'saholic_user_id':1})
42
    for user in all_users:
48
    for user in all_users:
43
        dtrUserMap[user.get('saholic_user_id')] = UserOrderData(user.get('user_id'), 0, 0)
49
        dtrUserMap[user.get('saholic_user_id')] = UserOrderData(user.get('user_id'), 0, 0,"")
44
    
50
    
45
def fetchOrders():
51
def fetchOrders():
46
    global dtrUserMap
52
    global dtrUserMap
47
    OrderDataService.initialize('transaction', '192.168.190.114', setup=False)
53
    OrderDataService.initialize('transaction', '192.168.190.114', setup=False)
48
    try:
54
    try:
49
        for user_id in dtrUserMap.keys():
55
        for user_id in dtrUserMap.keys():
-
 
56
            customer_email = ""
50
            delivered_orders  = session.query(Order.customer_id, LineItem.item_id, LineItem.total_price) \
57
            delivered_orders  = session.query(Order.customer_id, LineItem.item_id, LineItem.total_price, Order.customer_email) \
51
            .join((LineItem,Order.id==LineItem.order_id)).filter(Order.customer_id==user_id).filter(Order.created_timestamp>startDate).filter(Order.created_timestamp<endDate).filter(Order.status==OrderStatus.DELIVERY_SUCCESS).filter(Order.source==OrderSource.WEBSITE).all()
58
            .join((LineItem,Order.id==LineItem.order_id)).filter(Order.customer_id==user_id).filter(Order.created_timestamp>startDate).filter(Order.created_timestamp<endDate).filter(Order.status==OrderStatus.DELIVERY_SUCCESS).filter(Order.source==OrderSource.WEBSITE).all()
52
            delivered_order_value = 0
59
            delivered_order_value = 0
53
            pending_order_value = 0
60
            pending_order_value = 0
54
            for delivered_order in delivered_orders:
61
            for delivered_order in delivered_orders:
-
 
62
                if customer_email=="":
-
 
63
                    customer_email = delivered_order[3]
55
                if delivered_order[1] in negative_items:
64
                if delivered_order[1] in negative_items:
56
                    continue
65
                    continue
57
                delivered_order_value = delivered_order_value + delivered_order[2]
66
                delivered_order_value = delivered_order_value + delivered_order[2]
58
            
67
            
59
            pending_orders  = session.query(Order.customer_id, LineItem.item_id, LineItem.total_price) \
68
            pending_orders  = session.query(Order.customer_id, LineItem.item_id, LineItem.total_price, Order.customer_email) \
60
            .join((LineItem,Order.id==LineItem.order_id)).filter(Order.customer_id==user_id).filter(Order.created_timestamp>startDate).filter(Order.created_timestamp<endDate).filter(Order.status.in_(pending_order_status)).filter(Order.source==OrderSource.WEBSITE).all()
69
            .join((LineItem,Order.id==LineItem.order_id)).filter(Order.customer_id==user_id).filter(Order.created_timestamp>startDate).filter(Order.created_timestamp<endDate).filter(Order.status.in_(pending_order_status)).filter(Order.source==OrderSource.WEBSITE).all()
61
            for pending_order in pending_orders:
70
            for pending_order in pending_orders:
-
 
71
                if customer_email=="":
-
 
72
                    customer_email = pending_order[3]
62
                if pending_order[1] in negative_items:
73
                if pending_order[1] in negative_items:
63
                    continue
74
                    continue
64
                pending_order_value = pending_order_value + pending_order[2]
75
                pending_order_value = pending_order_value + pending_order[2]
65
            user_order_obj = dtrUserMap.get(user_id)
76
            user_order_obj = dtrUserMap.get(user_id)
66
            user_order_obj.delivered_order_value = delivered_order_value
77
            user_order_obj.delivered_order_value = delivered_order_value
67
            user_order_obj.pending_order_value = pending_order_value
78
            user_order_obj.pending_order_value = pending_order_value
-
 
79
            user_order_obj.email = customer_email
68
    finally:
80
    finally:
69
        session.close()
81
        session.close()
70
 
82
 
71
def commit():
83
def commit():
72
    for k, v in dtrUserMap.iteritems():
84
    for k, v in dtrUserMap.iteritems():
73
        get_mongo_connection().Catalog.PromoOffer.update({'user_id':v.dtr_user_id},{"$set":{'pending_order_value':v.pending_order_value,'delivered_order_value':v.delivered_order_value,'last_run_timestamp': run_time}})
85
        get_mongo_connection().Catalog.PromoOffer.update({'user_id':v.dtr_user_id},{"$set":{'pending_order_value':v.pending_order_value,'delivered_order_value':v.delivered_order_value,'last_run_timestamp': run_time}})
74
 
86
 
75
def removeCache():
87
def removeCache():
-
 
88
    os.chdir(cache_path)
-
 
89
    files=glob.glob('cake*')
-
 
90
    for filename in files:
-
 
91
        os.unlink(filename)
-
 
92
 
-
 
93
def sendMail():
-
 
94
    message="""<html>
-
 
95
            <body>
-
 
96
            <h3>April Acc. Offer</h3>
-
 
97
            <table border="1" style="width:100%;">
-
 
98
            <thead>
-
 
99
            <tr><th>user_id</th>
-
 
100
            <th>email</th>
-
 
101
            <th>target1</th>
-
 
102
            <th>target2</th>
-
 
103
            <th>delivered orders</th>
-
 
104
            <th>pending orders</th>
-
 
105
            </tr></thead>
-
 
106
            <tbody>"""
-
 
107
    promo_offers = get_mongo_connection().Catalog.PromoOffer.find({})
-
 
108
    for promo_offer in promo_offers:
-
 
109
        message+="""<tr>
-
 
110
        <td style="text-align:center">"""+str(promo_offer['user_id'])+"""</td>
-
 
111
        <td style="text-align:center">"""+dtrUserMap.get(promo_offer['user_id']).email+"""</td>
-
 
112
        <td style="text-align:center">"""+str(promo_offer['target1'])+"""</td>
-
 
113
        <td style="text-align:center">"""+str(promo_offer['target2'])+"""</td>
-
 
114
        <td style="text-align:center">"""+str(promo_offer['delivered_order_value'])+"""</td>
-
 
115
        <td style="text-align:center">"""+str(promo_offer['pending_order_value'])+"""</td>
-
 
116
        </tr>"""
-
 
117
    message+="""</tbody></table></body></html>"""
-
 
118
    print message
-
 
119
    mailServer = smtplib.SMTP("smtp.gmail.com", 587)
-
 
120
    mailServer.ehlo()
-
 
121
    mailServer.starttls()
-
 
122
    mailServer.ehlo()
-
 
123
 
-
 
124
    recipients = ['kshitij.sood@saholic.com']
76
    shutil.rmtree(cache_path)
125
    #recipients = ['rajneesh.arora@saholic.com','anikendra.das@saholic.com','kshitij.sood@saholic.com','khushal.bhatia@saholic.com','chaitnaya.vats@saholic.com','chandan.kumar@saholic.com','manoj.kumar@saholic.com','yukti.jain@saholic.com','ankush.dhingra@saholic.com','manoj.pal@saholic.com']
-
 
126
    msg = MIMEMultipart()
-
 
127
    msg['Subject'] = "April Acc Offer" + ' - ' + str(run_time.date())
-
 
128
    msg['From'] = ""
-
 
129
    msg['To'] = ",".join(recipients)
-
 
130
    msg.preamble = "April Acc Offer" + ' - ' + str(run_time.date())
-
 
131
    html_msg = MIMEText(message, 'html')
-
 
132
    msg.attach(html_msg)
-
 
133
    mailServer.login("build@shop2020.in", "cafe@nes")
-
 
134
    mailServer.sendmail("cafe@nes", recipients, msg.as_string())
-
 
135
 
-
 
136
 
77
 
137
 
78
if __name__ == '__main__':
138
if __name__ == '__main__':
79
    main()
139
    main()
80
    fetchNegativeItems()
140
    fetchNegativeItems()
81
    fetchOrders()
141
    fetchOrders()
82
    commit()
142
    commit()
83
    removeCache()
143
    removeCache()
84
    
-
 
85
144
    sendMail()
-
 
145
86
146