Subversion Repositories SmartDukaan

Rev

Rev 7558 | 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]
7558 rajveer 120
        order.status = OrderStatus.RTO_IN_TRANSIT
5677 rajveer 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
        pickupStore = lclient.getPickupStore(key[0])
5944 mandeep.dh 129
        warehouse = iclient.getWarehouse(key[2])
7792 anupam.sin 130
        for detail in provider.details:
131
            if detail.type == DeliveryType.PREPAID and detail.logisticLocation == warehouse.logisticsLocation :
132
                to_addr = detail.email
133
 
5677 rajveer 134
        subject = "Pickup request from " + pickupStore.city
135
        raw_message = '''
136
        Dear Sir/Madam,
137
 
138
        Kindly arrange a pickup today from %(customer_city)s. Pickup and delivery addresses are mentioned below.
139
 
5869 rajveer 140
        Pickup Order Ids: %(order_ids)s
5677 rajveer 141
 
142
        Pickup CODE: %(provider_code)s
143
 
144
        Pickup Address:
145
 
146
        %(customer_address)s
147
 
148
        Delivery Address:
149
 
150
        %(warehouse_executive)s
151
        %(warehouse_address)s
152
        PIN %(warehouse_pin)s
153
 
154
        Thanks and Regards
155
        Sandeep Sachdeva
156
        '''
157
 
158
        if warehouse.id == 7:
159
            executive = 'Amit Kumar'
160
        else:
161
            executive = 'Dinesh Kumar'
162
 
163
        address = pickupStore.name + "\n" + pickupStore.line1 + "\n"
164
        if pickupStore.line2:
165
            address = address + pickupStore.line2 + "\n"
166
        address = address + pickupStore.city + "\n"
167
        address = address + pickupStore.state + "\n"
168
        address = address + "PIN " + pickupStore.pin + "\n"
169
        address = address + "Phone: " + pickupStore.phone
170
 
5869 rajveer 171
        order_ids= ""
172
        for order_id in logistics_store_order_mapping.get(key):
173
            order_ids = order_ids + '    ' + str(order_id)
5677 rajveer 174
 
7792 anupam.sin 175
        providerCode = ''
176
        for detail in provider.details:
177
            if detail.type == DeliveryType.PREPAID and detail.logisticLocation == warehouse.logisticsLocation :
178
                providerCode = detail.accountNo        
5677 rajveer 179
        message = dedent(raw_message) % { 'customer_city' : pickupStore.city,
7792 anupam.sin 180
                                          'provider_code' : providerCode,
5677 rajveer 181
                                          'order_weight' : str(0.5),
182
                                          'customer_address' : address,
183
                                          'warehouse_executive' : executive,
184
                                          'warehouse_address' : warehouse.location,
185
                                          'warehouse_pin' : warehouse.pincode,
186
                                          'order_ids' : order_ids}
6643 rajveer 187
        to_addresses = [to_addr, 'amit.sirohi@shop2020.in']
5677 rajveer 188
 
189
        mail('cnc.center@shop2020.in', '5h0p2o2o', to_addresses, subject, message)
190
 
191
def main():
192
    process_pickup_store_returns()
193
 
194
if __name__ == '__main__':
195
    main()