Subversion Repositories SmartDukaan

Rev

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

Rev Author Line No. Line
4607 rajveer 1
#!/usr/bin/python
2
 
3
'''
4
Creates a CSV report of all the shipped orders and send mail to Sandeep.
5
 
6
Created on 20-Feb-2012
7
 
8
@author: Rajveer
9
'''
10
import xlwt
11
import datetime
4709 rajveer 12
from optparse import OptionParser
4607 rajveer 13
 
14
 
15
 
16
if __name__ == '__main__' and __package__ is None:
17
    import sys
18
    import os
19
    sys.path.insert(0, os.getcwd())
20
 
4709 rajveer 21
from shop2020.utils.Utils import to_py_date, to_java_date
4607 rajveer 22
from shop2020.clients.TransactionClient import TransactionClient
4783 phani.kuma 23
from shop2020.clients.LogisticsClient import LogisticsClient
24
from shop2020.clients.CatalogClient import CatalogClient
4635 rajveer 25
from shop2020.thriftpy.model.v1.order.ttypes import  Order, DelayReason
4607 rajveer 26
from shop2020.utils.EmailAttachmentSender import mail, get_attachment_part
27
 
4709 rajveer 28
def generate_delayed_orders_file():
4607 rajveer 29
    txn_client = TransactionClient().get_client()
30
    slipped_orders = txn_client.getSlippedSippingDateOrders()
31
 
32
    wbk = xlwt.Workbook()
33
    sheet = wbk.add_sheet('main')
34
 
35
    heading_xf = xlwt.easyxf('font: bold on; align: wrap on, vert centre, horiz center')
36
    sheet.set_panes_frozen(True)
37
    sheet.set_horz_split_pos(1)
38
    sheet.set_remove_splits(True)
39
 
40
    excel_integer_format = '0'
41
    integer_style = xlwt.XFStyle()
42
    integer_style.num_format_str = excel_integer_format
43
 
44
    date_style = xlwt.XFStyle()
45
    date_style.num_format_str = "M/D/YY"
46
 
47
    sheet.write(0, 0, "Order ID", heading_xf)
48
    sheet.write(0, 1, "Mode.", heading_xf)
49
    sheet.write(0, 2, "Brand", heading_xf)
50
    sheet.write(0, 3, "Model Name", heading_xf)
51
    sheet.write(0, 4, "Model Number", heading_xf)
52
    sheet.write(0, 5, "Color", heading_xf)
53
    sheet.write(0, 6, "Creation Date", heading_xf)
54
    sheet.write(0, 7, "Promised Shipping Date", heading_xf)
55
    sheet.write(0, 8, "Expected Shipping Date", heading_xf)
56
    sheet.write(0, 9, "Delay Reason", heading_xf)
4648 rajveer 57
    sheet.write(0, 10, "Detailed Reason Text", heading_xf)    
4607 rajveer 58
 
59
    order = Order()
60
    mode = {}
61
    mode[0] = 'Prepaid'
62
    mode[1] = 'COD'
63
 
64
    i = 1
65
    for order in slipped_orders:
66
        sheet.write(i, 0, order.id) 
67
        sheet.write(i, 1, mode[order.cod])
68
 
69
        lineitem = order.lineitems[0]
70
        sheet.write(i, 2, lineitem.brand)
71
        sheet.write(i, 3, lineitem.model_name)
72
        sheet.write(i, 4, lineitem.model_number)
73
        sheet.write(i, 5, lineitem.color)
74
 
75
        sheet.write(i, 6, to_py_date(order.created_timestamp), date_style)
76
        sheet.write(i, 7, to_py_date(order.promised_shipping_time), date_style)
77
        sheet.write(i, 8, to_py_date(order.expected_shipping_time), date_style)
4635 rajveer 78
        if order.delayReason:
79
            sheet.write(i, 9, DelayReason._VALUES_TO_NAMES[order.delayReason])
4648 rajveer 80
        sheet.write(i, 10, order.delayReasonText)
4607 rajveer 81
 
82
        i= i+1
83
 
84
    today = datetime.date.today()
85
    datestr = str(today.year) + "-" + str(today.month) + "-" + str(today.day)
86
    filename = "/tmp/SlippedOrders-" + datestr + ".xls" 
87
    wbk.save(filename)
88
 
89
    try:
90
        part = get_attachment_part(filename)
4636 rajveer 91
        mail("cnc.center@shop2020.in", "5h0p2o2o", ["sandeep.sachdeva@shop2020.in","suraj.sharma@shop2020.in","pankaj.jain@spiceglobal.com", "pankaj.kankar@shop2020.in", "chaitnaya.vats@shop2020.in"], "Slipped Orders as on: " + datestr, "PFA attached xls files for the orders which missed the shipping date.", [part])
4607 rajveer 92
    finally:
93
        os.remove(filename)
94
 
4709 rajveer 95
def generate_cancelled_orders_file():
96
    txn_client = TransactionClient().get_client()
97
    #cancelled_orders = txn_client.getAllOrders(OrderStatus.CANCELLED_DUE_TO_LOW_INVENTORY, to_java_date(datetime.datetime.now() - datetime.timedelta(hours = 24)), to_java_date(datetime.datetime.now()), -1)
98
    cancelled_orders = txn_client.getCancelledOrders(to_java_date(datetime.datetime.now() - datetime.timedelta(hours = 24)), to_java_date(datetime.datetime.now()))
99
 
100
    wbk = xlwt.Workbook()
101
    sheet = wbk.add_sheet('main')
102
 
103
    heading_xf = xlwt.easyxf('font: bold on; align: wrap on, vert centre, horiz center')
104
    sheet.set_panes_frozen(True)
105
    sheet.set_horz_split_pos(1)
106
    sheet.set_remove_splits(True)
107
 
108
    excel_integer_format = '0'
109
    integer_style = xlwt.XFStyle()
110
    integer_style.num_format_str = excel_integer_format
111
 
112
    date_style = xlwt.XFStyle()
113
    date_style.num_format_str = "M/D/YY"
114
 
115
    sheet.write(0, 0, "Order ID", heading_xf)
116
    sheet.write(0, 1, "Mode.", heading_xf)
117
    sheet.write(0, 2, "Brand", heading_xf)
118
    sheet.write(0, 3, "Model Name", heading_xf)
119
    sheet.write(0, 4, "Model Number", heading_xf)
120
    sheet.write(0, 5, "Color", heading_xf)
121
    sheet.write(0, 6, "Creation Date", heading_xf)
122
    sheet.write(0, 7, "Promised Shipping Date", heading_xf)
123
    sheet.write(0, 8, "Expected Shipping Date", heading_xf)
124
    sheet.write(0, 9, "Cancellation Reason", heading_xf)
125
    sheet.write(0, 10, "Cancellation Date", heading_xf)    
126
 
127
    order = Order()
128
    mode = {}
129
    mode[0] = 'Prepaid'
130
    mode[1] = 'COD'
131
 
132
    i = 1
133
    for order in cancelled_orders:
134
        sheet.write(i, 0, order.id) 
135
        sheet.write(i, 1, mode[order.cod])
136
 
137
        lineitem = order.lineitems[0]
138
        sheet.write(i, 2, lineitem.brand)
139
        sheet.write(i, 3, lineitem.model_name)
140
        sheet.write(i, 4, lineitem.model_number)
141
        sheet.write(i, 5, lineitem.color)
142
 
143
        sheet.write(i, 6, to_py_date(order.created_timestamp), date_style)
144
        sheet.write(i, 7, to_py_date(order.promised_shipping_time), date_style)
145
        sheet.write(i, 8, to_py_date(order.expected_shipping_time), date_style)
146
        sheet.write(i, 9, order.refundReason)
147
        sheet.write(i, 10, to_py_date(order.refund_timestamp), date_style)
148
 
149
        i= i+1
150
 
151
    today = datetime.date.today()
152
    datestr = str(today.year) + "-" + str(today.month) + "-" + str(today.day)
153
    filename = "/tmp/CancelledOrders-" + datestr + ".xls" 
154
    wbk.save(filename)
155
 
156
    try:
157
        part = get_attachment_part(filename)
158
        mail("cnc.center@shop2020.in", "5h0p2o2o", ["sandeep.sachdeva@shop2020.in","suraj.sharma@shop2020.in","pankaj.jain@spiceglobal.com", "pankaj.kankar@shop2020.in", "chaitnaya.vats@shop2020.in"], "Low Inventory Cancelled Orders as on: " + datestr, "PFA attached xls files for the orders which has been cancelled.", [part])
159
    finally:
160
        os.remove(filename)
4783 phani.kuma 161
 
162
def generate_expected_delivery_missed_orders_file():
163
    to = ["sandeep.sachdeva@shop2020.in","suraj.sharma@shop2020.in","pankaj.jain@spiceglobal.com", "pankaj.kankar@shop2020.in", "chaitnaya.vats@shop2020.in"]
164
 
165
    txn_client = TransactionClient().get_client()
166
    orders_not_delivered = txn_client.getUndeliveredOrdersExpectedDeliveryDateNotMet()
167
 
168
    print "orders_not_delivered"
169
    print orders_not_delivered
170
 
171
    logistics_client = LogisticsClient().get_client()
172
    providers = logistics_client.getAllProviders()
173
    providers_map = {}
174
    for provider in providers:
175
        providers_map[provider.id] = provider.name
176
 
177
    catalog_client = CatalogClient().get_client()
178
    warehouses = catalog_client.getAllWarehouses(True)
179
    warehouses_map = {}
180
    for warehouse in warehouses:
181
        warehouses_map[warehouse.id] = warehouse.displayName
182
 
183
    wbk = xlwt.Workbook()
184
    sheet = wbk.add_sheet('main')
185
 
186
    heading_xf = xlwt.easyxf('font: bold on; align: wrap on, vert centre, horiz center')
187
    sheet.set_panes_frozen(True)
188
    sheet.set_horz_split_pos(1)
189
    sheet.set_remove_splits(True)
190
 
191
    excel_integer_format = '0'
192
    integer_style = xlwt.XFStyle()
193
    integer_style.num_format_str = excel_integer_format
194
 
195
    date_style = xlwt.XFStyle()
196
    date_style.num_format_str = "M/D/YY"
197
 
198
    sheet.write(0, 0, "Order ID", heading_xf)
199
    sheet.write(0, 1, "Mode.", heading_xf)
200
    sheet.write(0, 2, "Airway BillNo", heading_xf)
201
    sheet.write(0, 3, "Current Status", heading_xf)
202
    sheet.write(0, 4, "Shipping Date", heading_xf)
203
    sheet.write(0, 5, "Pickup Date", heading_xf)
204
    sheet.write(0, 6, "Expected Delivery Date", heading_xf)
205
    sheet.write(0, 7, "Warehouse", heading_xf)
206
    sheet.write(0, 8, "Warehouse ID", heading_xf)
207
    sheet.write(0, 9, "Logistics Provider", heading_xf)
208
    sheet.write(0, 10, "Logistics Provider ID", heading_xf)
209
    sheet.write(0, 11, "Customer City", heading_xf)
210
    sheet.write(0, 12, "Customer State", heading_xf)
211
    sheet.write(0, 13, "Customer Pincode", heading_xf)
212
 
213
    order = Order()
214
    mode = {}
215
    mode[0] = 'Prepaid'
216
    mode[1] = 'COD'
217
 
218
    i = 1
219
    for order in orders_not_delivered:
220
        sheet.write(i, 0, order.id) 
221
        sheet.write(i, 1, mode[order.cod])
222
        sheet.write(i, 2, order.airwaybill_no)
223
        sheet.write(i, 3, order.statusDescription)
224
        sheet.write(i, 4, to_py_date(order.shipping_timestamp), date_style)
225
        sheet.write(i, 5, to_py_date(order.pickup_timestamp), date_style)
226
        sheet.write(i, 6, to_py_date(order.expected_delivery_time), date_style)
227
        sheet.write(i, 7, warehouses_map.get(order.warehouse_id))
228
        sheet.write(i, 8, order.warehouse_id)
229
        sheet.write(i, 9, providers_map.get(order.logistics_provider_id))
230
        sheet.write(i, 10, order.logistics_provider_id)
231
        sheet.write(i, 11, order.customer_city)
232
        sheet.write(i, 12, order.customer_state)
233
        sheet.write(i, 13, order.customer_pincode)
4709 rajveer 234
 
4783 phani.kuma 235
        i= i+1
236
 
237
    today = datetime.date.today()
238
    datestr = str(today.year) + "-" + str(today.month) + "-" + str(today.day)
239
    filename = "/tmp/UndeliveredOrders-" + datestr + ".xls" 
240
    wbk.save(filename)
241
 
242
    try:
243
        part = get_attachment_part(filename)
244
        mail("cnc.center@shop2020.in", "5h0p2o2o", to, "Orders which missed Expected Delivery Date as on: " + datestr, "PFA attached xls files for the orders which missed the Expected Delivery Date.", [part])
245
    finally:
246
        os.remove(filename)
247
 
4709 rajveer 248
def main():
249
    parser = OptionParser()
250
    parser.add_option("-d", "--delayed", dest="delayed",
251
                      action="store_true",
252
                      help="")
253
    parser.add_option("-c", "--cancelled", dest="cancelled",
254
                      action="store_true",
255
                      help="")
4783 phani.kuma 256
    parser.add_option("-u", "--undelivered", dest="undelivered",
257
                      action="store_true",
258
                      help="")
4709 rajveer 259
 
260
    (options, args) = parser.parse_args()
261
    if options.delayed:
262
        generate_delayed_orders_file()
263
    if options.cancelled:
264
        generate_cancelled_orders_file()
4783 phani.kuma 265
    if options.undelivered:
266
        generate_expected_delivery_missed_orders_file()
267
 
4607 rajveer 268
if __name__ == '__main__':
269
    main()