Subversion Repositories SmartDukaan

Rev

Rev 19480 | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
19365 kshitij.so 1
from elixir import *
2
import datetime
3
from dtr.utils.utils import get_mongo_connection, to_java_date
4
from shop2020.model.v1.order.impl import DataService as OrderDataService
5
from shop2020.model.v1.catalog.impl import DataService as CatalogDataService 
6
from shop2020.model.v1.order.impl.DataService import Order, LineItem
7
from shop2020.model.v1.catalog.impl.DataService import Item
8
from shop2020.thriftpy.model.v1.order.ttypes import OrderStatus, OrderSource
19392 kshitij.so 9
import glob
10
import os
11
import smtplib
12
from email.mime.multipart import MIMEMultipart
13
from email.mime.text import MIMEText
19365 kshitij.so 14
 
19392 kshitij.so 15
 
19365 kshitij.so 16
dtrUserMap = {}
17
 
18
negative_items = []
19480 kshitij.so 19
negative_categories = [10013,10017,10006,12101]
19365 kshitij.so 20
 
21
pending_order_status = [2,3,4,5,6,7,8,13,9,10,16,17,81,80, 40]
22
 
23
startDate = datetime.datetime.strptime('01-04-2016 00:00:00', '%d-%m-%Y %H:%M:%S')
24
endDate = datetime.datetime.strptime('01-05-2016 00:00:00', '%d-%m-%Y %H:%M:%S')
19671 kshitij.so 25
run_time = to_java_date(datetime.datetime.strptime('30-04-2016 00:00:00', '%d-%m-%Y %H:%M:%S'))
19365 kshitij.so 26
 
19370 kshitij.so 27
cache_path = "/var/www/dtrdashboard/app/tmp/cache/target/"
19365 kshitij.so 28
 
19370 kshitij.so 29
 
19365 kshitij.so 30
class UserOrderData:
19392 kshitij.so 31
    def __init__(self, dtr_user_id, delivered_order_value, pending_order_value, email):
19365 kshitij.so 32
        self.dtr_user_id = dtr_user_id
33
        self.delivered_order_value = delivered_order_value
34
        self.pending_order_value = pending_order_value
19392 kshitij.so 35
        self.email = email
19365 kshitij.so 36
 
37
def fetchNegativeItems():
38
    global negative_items
39
    try:
40
        CatalogDataService.initialize('catalog', '192.168.190.114', False)
41
        itemIds = session.query(Item.id).filter(Item.category.in_(negative_categories)).all()
42
        negative_items = list(zip(*itemIds)[0])
43
    finally:
44
        session.close()
45
 
46
def main():
47
    all_users = get_mongo_connection().Catalog.PromoOffer.find({},{'user_id':1,'saholic_user_id':1})
48
    for user in all_users:
19392 kshitij.so 49
        dtrUserMap[user.get('saholic_user_id')] = UserOrderData(user.get('user_id'), 0, 0,"")
19365 kshitij.so 50
 
51
def fetchOrders():
52
    global dtrUserMap
53
    OrderDataService.initialize('transaction', '192.168.190.114', setup=False)
54
    try:
55
        for user_id in dtrUserMap.keys():
19392 kshitij.so 56
            customer_email = ""
57
            delivered_orders  = session.query(Order.customer_id, LineItem.item_id, LineItem.total_price, Order.customer_email) \
19365 kshitij.so 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()
59
            delivered_order_value = 0
60
            pending_order_value = 0
61
            for delivered_order in delivered_orders:
19392 kshitij.so 62
                if customer_email=="":
63
                    customer_email = delivered_order[3]
19365 kshitij.so 64
                if delivered_order[1] in negative_items:
65
                    continue
66
                delivered_order_value = delivered_order_value + delivered_order[2]
67
 
19392 kshitij.so 68
            pending_orders  = session.query(Order.customer_id, LineItem.item_id, LineItem.total_price, Order.customer_email) \
19365 kshitij.so 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()
70
            for pending_order in pending_orders:
19392 kshitij.so 71
                if customer_email=="":
72
                    customer_email = pending_order[3]
19365 kshitij.so 73
                if pending_order[1] in negative_items:
74
                    continue
75
                pending_order_value = pending_order_value + pending_order[2]
76
            user_order_obj = dtrUserMap.get(user_id)
77
            user_order_obj.delivered_order_value = delivered_order_value
78
            user_order_obj.pending_order_value = pending_order_value
19392 kshitij.so 79
            user_order_obj.email = customer_email
19365 kshitij.so 80
    finally:
81
        session.close()
82
 
83
def commit():
84
    for k, v in dtrUserMap.iteritems():
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}})
86
 
19370 kshitij.so 87
def removeCache():
19392 kshitij.so 88
    os.chdir(cache_path)
89
    files=glob.glob('cake*')
90
    for filename in files:
91
        os.unlink(filename)
19370 kshitij.so 92
 
19392 kshitij.so 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>
19396 kshitij.so 111
        <td style="text-align:center">"""+dtrUserMap.get(promo_offer['saholic_user_id']).email+"""</td>
19392 kshitij.so 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']
19393 kshitij.so 125
    #recipients = ['rajneesh.arora@saholic.com','kshitij.sood@saholic.com','chaitnaya.vats@saholic.com']
19392 kshitij.so 126
    msg = MIMEMultipart()
19396 kshitij.so 127
    msg['Subject'] = "April Acc Offer" + ' - ' + str(datetime.datetime.now().date())
19392 kshitij.so 128
    msg['From'] = ""
129
    msg['To'] = ",".join(recipients)
19396 kshitij.so 130
    msg.preamble = "April Acc Offer" + ' - ' + str(datetime.datetime.now().date())
19392 kshitij.so 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
 
137
 
19365 kshitij.so 138
if __name__ == '__main__':
139
    main()
140
    fetchNegativeItems()
141
    fetchOrders()
142
    commit()
19370 kshitij.so 143
    removeCache()
19392 kshitij.so 144
    sendMail()