Subversion Repositories SmartDukaan

Rev

Rev 5944 | Rev 6643 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
5677 rajveer 1
#!/usr/bin/python
2
 
3
'''
4
Send mail to courier partners to pickup the orders from store.
5
 
6
Created on 26-Jul-2012
7
 
8
@author: Rajveer
9
'''
5944 mandeep.dh 10
from elixir import session
5677 rajveer 11
from optparse import OptionParser
5944 mandeep.dh 12
from shop2020.clients.CRMClient import CRMClient
13
from shop2020.clients.CatalogClient import CatalogClient
14
from shop2020.clients.InventoryClient import InventoryClient
15
from shop2020.clients.LogisticsClient import LogisticsClient
16
from shop2020.clients.TransactionClient import TransactionClient
17
from shop2020.model.v1.order.impl import DataService
18
from shop2020.model.v1.order.impl.DataService import Order, Attribute
19
from shop2020.thriftpy.crm.ttypes import Ticket, Activity, TicketCategory, \
20
    TicketStatus, TicketPriority, ActivityType, SearchFilter
21
from shop2020.thriftpy.logistics.ttypes import PickupStore, DeliveryType
22
from shop2020.thriftpy.model.v1.order.ttypes import OrderStatus
23
from shop2020.utils.EmailAttachmentSender import mail, get_attachment_part
5677 rajveer 24
from textwrap import dedent
5944 mandeep.dh 25
import datetime
5791 anupam.sin 26
import traceback
5944 mandeep.dh 27
import xlwt
5870 rajveer 28
 
5677 rajveer 29
 
30
if __name__ == '__main__' and __package__ is None:
31
    import sys
32
    import os
33
    sys.path.insert(0, os.getcwd())
5870 rajveer 34
 
5677 rajveer 35
 
36
 
5791 anupam.sin 37
 
38
def createCrmTicket(order):
39
    try :
40
        cc = CRMClient().get_client()
41
        searchFilter = SearchFilter()
42
        searchFilter.ticketCategory = TicketCategory.STORE_PICKUP
43
        searchFilter.ticketStatuses = [TicketStatus.OPEN]
44
        tickets = cc.getTickets(searchFilter)
45
 
46
        ticketPresent = False
47
        for ticket in tickets :
48
            if ticket.orderId == order.id :
49
                ticketPresent = True
50
        if ticketPresent :
51
            return
52
 
53
        createTicket = True
54
        tc = TransactionClient().get_client()
55
        attributes = tc.getAllAttributesForOrderId(order.id)
56
        for attribute in attributes :
57
            if attribute.name == "pickupExtension" :
5976 anupam.sin 58
                expiryDate = order.delivery_timestamp + datetime.timedelta(days = 3) + datetime.timedelta(days = int(attribute.value))
5791 anupam.sin 59
                now = datetime.datetime.now()
60
                if expiryDate - now > datetime.timedelta(days = 2) :
61
                    createTicket = False
62
 
63
        if not createTicket:
64
            return
65
 
66
        ticket = Ticket()
67
        activity = Activity()
68
        ticket.category = TicketCategory.STORE_PICKUP
69
        ticket.customerEmailId = order.customer_email
70
        ticket.customerId = order.customer_id
71
        ticket.customerMobileNumber = order.customer_mobilenumber
72
        ticket.customerName = order.customer_name
73
        ticket.description = "Consignment not picked up yet. "
74
        ticket.orderId = order.id
75
        ticket.creatorId = 1
76
        ticket.priority = TicketPriority.HIGH
77
        ticket.status = TicketStatus.OPEN
78
 
79
        activity.creatorId = 1
80
        activity.ticketAssigneeId = ticket.assigneeId
81
        activity.type = ActivityType.OTHER
82
        activity.description = "Creating Ticket"
83
        activity.ticketCategory = ticket.category
84
        activity.ticketDescription = ticket.description
85
        activity.ticketPriority = ticket.priority
86
        activity.ticketStatus = ticket.status
87
        activity.customerEmailId = order.customer_email
88
        activity.customerId = order.customer_id
89
        activity.customerMobileNumber = order.customer_mobilenumber
90
        activity.customerName = order.customer_name
91
 
92
        cc.insertTicket(ticket, activity)
93
 
94
    except:
95
        print "Some issue while creating crm ticket for order :" + str(order.id)
96
        traceback.print_exc()
97
 
98
 
5677 rajveer 99
def process_pickup_store_returns():
100
    DataService.initialize(db_hostname="192.168.190.114", echoOn=True)
5791 anupam.sin 101
    to_date = datetime.datetime.today() + datetime.timedelta(days = -3)
102
    orders = Order.query.filter(Order.pickupStoreId > 0).filter(Order.status == OrderStatus.RECEIVED_AT_STORE).filter(Order.delivery_timestamp <= to_date).all()
103
    for order in orders:
104
        createCrmTicket(order)
105
 
5677 rajveer 106
    to_date = datetime.datetime.today() + datetime.timedelta(days = -5)
107
    logistics_store_order_mapping = {}
5791 anupam.sin 108
    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()
5677 rajveer 109
    for order in orders:
5791 anupam.sin 110
        attribute = Attribute.query.filter(Attribute.orderId == order.id).filter(Attribute.name == "pickupExtension").first()
5869 rajveer 111
        expiry = order.delivery_timestamp + datetime.timedelta(days = 5)  
112
        if attribute:
113
            expiry = expiry + datetime.timedelta(days = int(attribute.value))
5791 anupam.sin 114
        if expiry > datetime.datetime.today() :
115
            continue        
5869 rajveer 116
        if logistics_store_order_mapping.has_key((order.pickupStoreId, order.logistics_provider_id, order.warehouse_id)):
117
            logistics_store_order_mapping.get((order.pickupStoreId, order.logistics_provider_id, order.warehouse_id)).append(order.id)
5677 rajveer 118
        else:
119
            logistics_store_order_mapping[order.pickupStoreId, order.logistics_provider_id, order.warehouse_id] = [order.id]
120
        order.status = OrderStatus.RET_PICKUP_REQUEST_RAISED
121
        order.statusDescription = "Return request raised"
122
    session.commit()
123
 
124
    lclient = LogisticsClient().get_client()
5944 mandeep.dh 125
    iclient = InventoryClient().get_client()
5791 anupam.sin 126
    for key in logistics_store_order_mapping.keys():
5677 rajveer 127
        provider = lclient.getProvider(key[1])
128
        to_addr = provider.details[DeliveryType.PREPAID].email
129
        pickupStore = lclient.getPickupStore(key[0])
5944 mandeep.dh 130
        warehouse = iclient.getWarehouse(key[2])
5677 rajveer 131
        subject = "Pickup request from " + pickupStore.city
132
        raw_message = '''
133
        Dear Sir/Madam,
134
 
135
        Kindly arrange a pickup today from %(customer_city)s. Pickup and delivery addresses are mentioned below.
136
 
5869 rajveer 137
        Pickup Order Ids: %(order_ids)s
5677 rajveer 138
 
139
        Pickup CODE: %(provider_code)s
140
 
141
        Pickup Address:
142
 
143
        %(customer_address)s
144
 
145
        Delivery Address:
146
 
147
        %(warehouse_executive)s
148
        %(warehouse_address)s
149
        PIN %(warehouse_pin)s
150
 
151
        Thanks and Regards
152
        Sandeep Sachdeva
153
        '''
154
 
155
        if warehouse.id == 7:
156
            executive = 'Amit Kumar'
157
        else:
158
            executive = 'Dinesh Kumar'
159
 
160
        address = pickupStore.name + "\n" + pickupStore.line1 + "\n"
161
        if pickupStore.line2:
162
            address = address + pickupStore.line2 + "\n"
163
        address = address + pickupStore.city + "\n"
164
        address = address + pickupStore.state + "\n"
165
        address = address + "PIN " + pickupStore.pin + "\n"
166
        address = address + "Phone: " + pickupStore.phone
167
 
5869 rajveer 168
        order_ids= ""
169
        for order_id in logistics_store_order_mapping.get(key):
170
            order_ids = order_ids + '    ' + str(order_id)
5677 rajveer 171
 
172
        message = dedent(raw_message) % { 'customer_city' : pickupStore.city,
173
                                          'provider_code' : provider.details[DeliveryType.PREPAID].accountNo,
174
                                          'order_weight' : str(0.5),
175
                                          'customer_address' : address,
176
                                          'warehouse_executive' : executive,
177
                                          'warehouse_address' : warehouse.location,
178
                                          'warehouse_pin' : warehouse.pincode,
179
                                          'order_ids' : order_ids}
180
        to_addresses = [to_addr, 'suraj.sharma@shop2020.in']
181
 
182
        mail('cnc.center@shop2020.in', '5h0p2o2o', to_addresses, subject, message)
183
 
184
def main():
185
    process_pickup_store_returns()
186
 
187
if __name__ == '__main__':
188
    main()