Rev 7558 | 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'''from elixir import sessionfrom optparse import OptionParserfrom shop2020.clients.CRMClient import CRMClientfrom shop2020.clients.CatalogClient import CatalogClientfrom shop2020.clients.InventoryClient import InventoryClientfrom shop2020.clients.LogisticsClient import LogisticsClientfrom shop2020.clients.TransactionClient import TransactionClientfrom shop2020.model.v1.order.impl import DataServicefrom shop2020.model.v1.order.impl.DataService import Order, Attributefrom shop2020.thriftpy.crm.ttypes import Ticket, Activity, TicketCategory, \TicketStatus, TicketPriority, ActivityType, SearchFilterfrom shop2020.thriftpy.logistics.ttypes import PickupStore, DeliveryTypefrom shop2020.thriftpy.model.v1.order.ttypes import OrderStatusfrom shop2020.utils.EmailAttachmentSender import mail, get_attachment_partfrom textwrap import dedentimport datetimeimport tracebackimport xlwtif __name__ == '__main__' and __package__ is None:import sysimport ossys.path.insert(0, os.getcwd())def 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 = order.delivery_timestamp + 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.RTO_IN_TRANSITorder.statusDescription = "Return request raised"session.commit()lclient = LogisticsClient().get_client()iclient = InventoryClient().get_client()for key in logistics_store_order_mapping.keys():provider = lclient.getProvider(key[1])pickupStore = lclient.getPickupStore(key[0])warehouse = iclient.getWarehouse(key[2])for detail in provider.details:if detail.type == DeliveryType.PREPAID and detail.logisticLocation == warehouse.logisticsLocation :to_addr = detail.emailsubject = "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)providerCode = ''for detail in provider.details:if detail.type == DeliveryType.PREPAID and detail.logisticLocation == warehouse.logisticsLocation :providerCode = detail.accountNomessage = dedent(raw_message) % { 'customer_city' : pickupStore.city,'provider_code' : providerCode,'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, 'amit.sirohi@shop2020.in']mail('cnc.center@shop2020.in', '5h0p2o2o', to_addresses, subject, message)def main():process_pickup_store_returns()if __name__ == '__main__':main()