Rev 19480 | Blame | Compare with Previous | Last modification | View Log | RSS feed
from elixir import *import datetimefrom dtr.utils.utils import get_mongo_connection, to_java_datefrom shop2020.model.v1.order.impl import DataService as OrderDataServicefrom shop2020.model.v1.catalog.impl import DataService as CatalogDataServicefrom shop2020.model.v1.order.impl.DataService import Order, LineItemfrom shop2020.model.v1.catalog.impl.DataService import Itemfrom shop2020.thriftpy.model.v1.order.ttypes import OrderStatus, OrderSourceimport globimport osimport smtplibfrom email.mime.multipart import MIMEMultipartfrom email.mime.text import MIMETextdtrUserMap = {}negative_items = []negative_categories = [10013,10017,10006,12101]pending_order_status = [2,3,4,5,6,7,8,13,9,10,16,17,81,80, 40]startDate = datetime.datetime.strptime('01-04-2016 00:00:00', '%d-%m-%Y %H:%M:%S')endDate = datetime.datetime.strptime('01-05-2016 00:00:00', '%d-%m-%Y %H:%M:%S')run_time = to_java_date(datetime.datetime.strptime('30-04-2016 00:00:00', '%d-%m-%Y %H:%M:%S'))cache_path = "/var/www/dtrdashboard/app/tmp/cache/target/"class UserOrderData:def __init__(self, dtr_user_id, delivered_order_value, pending_order_value, email):self.dtr_user_id = dtr_user_idself.delivered_order_value = delivered_order_valueself.pending_order_value = pending_order_valueself.email = emaildef fetchNegativeItems():global negative_itemstry:CatalogDataService.initialize('catalog', '192.168.190.114', False)itemIds = session.query(Item.id).filter(Item.category.in_(negative_categories)).all()negative_items = list(zip(*itemIds)[0])finally:session.close()def main():all_users = get_mongo_connection().Catalog.PromoOffer.find({},{'user_id':1,'saholic_user_id':1})for user in all_users:dtrUserMap[user.get('saholic_user_id')] = UserOrderData(user.get('user_id'), 0, 0,"")def fetchOrders():global dtrUserMapOrderDataService.initialize('transaction', '192.168.190.114', setup=False)try:for user_id in dtrUserMap.keys():customer_email = ""delivered_orders = session.query(Order.customer_id, LineItem.item_id, LineItem.total_price, Order.customer_email) \.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()delivered_order_value = 0pending_order_value = 0for delivered_order in delivered_orders:if customer_email=="":customer_email = delivered_order[3]if delivered_order[1] in negative_items:continuedelivered_order_value = delivered_order_value + delivered_order[2]pending_orders = session.query(Order.customer_id, LineItem.item_id, LineItem.total_price, Order.customer_email) \.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()for pending_order in pending_orders:if customer_email=="":customer_email = pending_order[3]if pending_order[1] in negative_items:continuepending_order_value = pending_order_value + pending_order[2]user_order_obj = dtrUserMap.get(user_id)user_order_obj.delivered_order_value = delivered_order_valueuser_order_obj.pending_order_value = pending_order_valueuser_order_obj.email = customer_emailfinally:session.close()def commit():for k, v in dtrUserMap.iteritems():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}})def removeCache():os.chdir(cache_path)files=glob.glob('cake*')for filename in files:os.unlink(filename)def sendMail():message="""<html><body><h3>April Acc. Offer</h3><table border="1" style="width:100%;"><thead><tr><th>user_id</th><th>email</th><th>target1</th><th>target2</th><th>delivered orders</th><th>pending orders</th></tr></thead><tbody>"""promo_offers = get_mongo_connection().Catalog.PromoOffer.find({})for promo_offer in promo_offers:message+="""<tr><td style="text-align:center">"""+str(promo_offer['user_id'])+"""</td><td style="text-align:center">"""+dtrUserMap.get(promo_offer['saholic_user_id']).email+"""</td><td style="text-align:center">"""+str(promo_offer['target1'])+"""</td><td style="text-align:center">"""+str(promo_offer['target2'])+"""</td><td style="text-align:center">"""+str(promo_offer['delivered_order_value'])+"""</td><td style="text-align:center">"""+str(promo_offer['pending_order_value'])+"""</td></tr>"""message+="""</tbody></table></body></html>"""print messagemailServer = smtplib.SMTP("smtp.gmail.com", 587)mailServer.ehlo()mailServer.starttls()mailServer.ehlo()recipients = ['kshitij.sood@saholic.com']#recipients = ['rajneesh.arora@saholic.com','kshitij.sood@saholic.com','chaitnaya.vats@saholic.com']msg = MIMEMultipart()msg['Subject'] = "April Acc Offer" + ' - ' + str(datetime.datetime.now().date())msg['From'] = ""msg['To'] = ",".join(recipients)msg.preamble = "April Acc Offer" + ' - ' + str(datetime.datetime.now().date())html_msg = MIMEText(message, 'html')msg.attach(html_msg)mailServer.login("build@shop2020.in", "cafe@nes")mailServer.sendmail("cafe@nes", recipients, msg.as_string())if __name__ == '__main__':main()fetchNegativeItems()fetchOrders()commit()removeCache()sendMail()