Rev 5791 | Rev 5870 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed
#!/usr/bin/python'''Send mail to courier partners to pickup the orders from store.Created on 26-Jul-2012@author: Rajveer'''import xlwtimport datetimefrom optparse import OptionParserfrom textwrap import dedentimport tracebackfrom shop2020.clients.TransactionClient import TransactionClientfrom mx.DateTime.DateTime import TimeDeltafrom elixir import sessionif __name__ == '__main__' and __package__ is None:import sysimport ossys.path.insert(0, os.getcwd())from shop2020.clients.CRMClient import CRMClientfrom shop2020.model.v1.order.impl import DataServicefrom shop2020.model.v1.order.impl.DataService import Order, Attributefrom shop2020.thriftpy.model.v1.order.ttypes import OrderStatusfrom shop2020.clients.LogisticsClient import LogisticsClientfrom shop2020.thriftpy.logistics.ttypes import PickupStore, DeliveryTypefrom shop2020.clients.CatalogClient import CatalogClientfrom shop2020.utils.EmailAttachmentSender import mail, get_attachment_partfrom shop2020.thriftpy.crm.ttypes import Ticket, Activity, TicketCategory, TicketStatus, TicketPriority, ActivityType, SearchFilterdef createCrmTicket(order):try :cc = CRMClient().get_client()searchFilter = SearchFilter()searchFilter.ticketCategory = TicketCategory.STORE_PICKUPsearchFilter.ticketStatuses = [TicketStatus.OPEN]tickets = cc.getTickets(searchFilter)ticketPresent = Falsefor ticket in tickets :if ticket.orderId == order.id :ticketPresent = Trueif ticketPresent :returncreateTicket = Truetc = TransactionClient().get_client()attributes = tc.getAllAttributesForOrderId(order.id)for attribute in attributes :if attribute.name == "pickupExtension" :expiryDate = datetime.datetime.strptime(order.delivery_timestamp, "%Y-%m-%d %H-%M-%S") + datetime.timedelta(days = 3) + datetime.timedelta(days = int(attribute.value))now = datetime.datetime.now()if expiryDate - now > datetime.timedelta(days = 2) :createTicket = Falseif not createTicket:returnticket = Ticket()activity = Activity()ticket.category = TicketCategory.STORE_PICKUPticket.customerEmailId = order.customer_emailticket.customerId = order.customer_idticket.customerMobileNumber = order.customer_mobilenumberticket.customerName = order.customer_nameticket.description = "Consignment not picked up yet. "ticket.orderId = order.idticket.creatorId = 1ticket.priority = TicketPriority.HIGHticket.status = TicketStatus.OPENactivity.creatorId = 1activity.ticketAssigneeId = ticket.assigneeIdactivity.type = ActivityType.OTHERactivity.description = "Creating Ticket"activity.ticketCategory = ticket.categoryactivity.ticketDescription = ticket.descriptionactivity.ticketPriority = ticket.priorityactivity.ticketStatus = ticket.statusactivity.customerEmailId = order.customer_emailactivity.customerId = order.customer_idactivity.customerMobileNumber = order.customer_mobilenumberactivity.customerName = order.customer_namecc.insertTicket(ticket, activity)except:print "Some issue while creating crm ticket for order :" + str(order.id)traceback.print_exc()def process_pickup_store_returns():DataService.initialize(db_hostname="192.168.190.114", echoOn=True)to_date = datetime.datetime.today() + datetime.timedelta(days = -3)orders = Order.query.filter(Order.pickupStoreId > 0).filter(Order.status == OrderStatus.RECEIVED_AT_STORE).filter(Order.delivery_timestamp <= to_date).all()for order in orders:createCrmTicket(order)to_date = datetime.datetime.today() + datetime.timedelta(days = -5)logistics_store_order_mapping = {}orders = Order.query.filter(Order.pickupStoreId > 0).filter(Order.status == OrderStatus.RECEIVED_AT_STORE).filter(Order.delivery_timestamp <= to_date).order_by(Order.pickupStoreId).order_by(Order.logistics_provider_id).order_by(Order.warehouse_id).all()for order in orders:attribute = Attribute.query.filter(Attribute.orderId == order.id).filter(Attribute.name == "pickupExtension").first()expiry = order.delivery_timestamp + datetime.timedelta(days = 5)if attribute:expiry = expiry + datetime.timedelta(days = int(attribute.value))if expiry > datetime.datetime.today() :continueif logistics_store_order_mapping.has_key((order.pickupStoreId, order.logistics_provider_id, order.warehouse_id)):logistics_store_order_mapping.get((order.pickupStoreId, order.logistics_provider_id, order.warehouse_id)).append(order.id)else:logistics_store_order_mapping[order.pickupStoreId, order.logistics_provider_id, order.warehouse_id] = [order.id]order.status = OrderStatus.RET_PICKUP_REQUEST_RAISEDorder.statusDescription = "Return request raised"session.commit()lclient = LogisticsClient().get_client()cclient = CatalogClient().get_client()for key in logistics_store_order_mapping.keys():provider = lclient.getProvider(key[1])to_addr = provider.details[DeliveryType.PREPAID].emailpickupStore = lclient.getPickupStore(key[0])warehouse = cclient.getWarehouse(key[2])subject = "Pickup request from " + pickupStore.cityraw_message = '''Dear Sir/Madam,Kindly arrange a pickup today from %(customer_city)s. Pickup and delivery addresses are mentioned below.Pickup Order Ids: %(order_ids)sPickup CODE: %(provider_code)sPickup Address:%(customer_address)sDelivery Address:%(warehouse_executive)s%(warehouse_address)sPIN %(warehouse_pin)sThanks and RegardsSandeep Sachdeva'''if warehouse.id == 7:executive = 'Amit Kumar'else:executive = 'Dinesh Kumar'address = pickupStore.name + "\n" + pickupStore.line1 + "\n"if pickupStore.line2:address = address + pickupStore.line2 + "\n"address = address + pickupStore.city + "\n"address = address + pickupStore.state + "\n"address = address + "PIN " + pickupStore.pin + "\n"address = address + "Phone: " + pickupStore.phoneorder_ids= ""for order_id in logistics_store_order_mapping.get(key):order_ids = order_ids + ' ' + str(order_id)message = dedent(raw_message) % { 'customer_city' : pickupStore.city,'provider_code' : provider.details[DeliveryType.PREPAID].accountNo,'order_weight' : str(0.5),'customer_address' : address,'warehouse_executive' : executive,'warehouse_address' : warehouse.location,'warehouse_pin' : warehouse.pincode,'order_ids' : order_ids}to_addresses = [to_addr, 'suraj.sharma@shop2020.in']mail('cnc.center@shop2020.in', '5h0p2o2o', to_addresses, subject, message)def main():process_pickup_store_returns()if __name__ == '__main__':main()