Subversion Repositories SmartDukaan

Rev

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