Subversion Repositories SmartDukaan

Rev

Rev 5631 | Rev 6004 | 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
'''
5944 mandeep.dh 10
from optparse import OptionParser
11
from shop2020.clients.CatalogClient import CatalogClient
12
from shop2020.clients.InventoryClient import InventoryClient
13
from shop2020.clients.LogisticsClient import LogisticsClient
14
from shop2020.clients.TransactionClient import TransactionClient
15
from shop2020.thriftpy.model.v1.order.ttypes import Order, DelayReason
16
from shop2020.utils.EmailAttachmentSender import mail, get_attachment_part, \
17
    mail_html
18
from shop2020.utils.Utils import to_py_date, to_java_date
19
import datetime
4607 rajveer 20
import xlwt
21
 
22
 
23
 
24
if __name__ == '__main__' and __package__ is None:
25
    import sys
26
    import os
27
    sys.path.insert(0, os.getcwd())
28
 
5577 rajveer 29
to = ["sandeep.sachdeva@shop2020.in","ashutosh.saxena@shop2020.in","suraj.sharma@shop2020.in","pankaj.jain@spiceglobal.com", "pankaj.kankar@shop2020.in", "chaitnaya.vats@shop2020.in", "asghar.bilgrami@shop2020.in", "rajneesharora@spiceretail.co.in"]
4607 rajveer 30
 
4709 rajveer 31
def generate_delayed_orders_file():
4607 rajveer 32
    txn_client = TransactionClient().get_client()
33
    slipped_orders = txn_client.getSlippedSippingDateOrders()
34
 
35
    wbk = xlwt.Workbook()
36
    sheet = wbk.add_sheet('main')
37
 
38
    heading_xf = xlwt.easyxf('font: bold on; align: wrap on, vert centre, horiz center')
39
    sheet.set_panes_frozen(True)
40
    sheet.set_horz_split_pos(1)
41
    sheet.set_remove_splits(True)
42
 
43
    excel_integer_format = '0'
44
    integer_style = xlwt.XFStyle()
45
    integer_style.num_format_str = excel_integer_format
46
 
47
    date_style = xlwt.XFStyle()
48
    date_style.num_format_str = "M/D/YY"
49
 
50
    sheet.write(0, 0, "Order ID", heading_xf)
51
    sheet.write(0, 1, "Mode.", heading_xf)
52
    sheet.write(0, 2, "Brand", heading_xf)
53
    sheet.write(0, 3, "Model Name", heading_xf)
54
    sheet.write(0, 4, "Model Number", heading_xf)
5631 amar.kumar 55
    sheet.write(0, 5, "Colour", heading_xf)
4607 rajveer 56
    sheet.write(0, 6, "Creation Date", heading_xf)
57
    sheet.write(0, 7, "Promised Shipping Date", heading_xf)
58
    sheet.write(0, 8, "Expected Shipping Date", heading_xf)
59
    sheet.write(0, 9, "Delay Reason", heading_xf)
4648 rajveer 60
    sheet.write(0, 10, "Detailed Reason Text", heading_xf)    
5631 amar.kumar 61
 
62
    html = """\
63
    <html>
64
        <head>
65
            <style type="text/css">
66
                table, tr, th { border :1px solid black;}
67
            </style>
68
        </head>
69
        <body>
70
            <center><h3>Delayed Orders</h3></center>
71
            <table>
72
                <tr>
73
                    <th>Order ID</th>
74
                    <th>Mode</th>
75
                    <th>Brand</th>
76
                    <th>Model Name</th>
77
                    <th>Model Number</th>
78
                    <th>Colour</th>
79
                    <th>Creation Date</th>
80
                    <th>Promised Shipping Date</th>
81
                    <th>Expected Shipping Date</th>
82
                    <th>Delay Reason</th>
83
                    <th>Detailed Reason Text</th>
84
                </tr>
85
    """  
86
 
4607 rajveer 87
    order = Order()
88
    mode = {}
89
    mode[0] = 'Prepaid'
90
    mode[1] = 'COD'
91
 
92
    i = 1
93
    for order in slipped_orders:
5631 amar.kumar 94
        html +="<tr>"
95
        sheet.write(i, 0, order.id)
96
        html +="<td>" + str(order.id) + "</td>" 
4607 rajveer 97
        sheet.write(i, 1, mode[order.cod])
5631 amar.kumar 98
        html +="<td>" + str(mode[order.cod]) + "</td>"
4607 rajveer 99
 
100
        lineitem = order.lineitems[0]
101
        sheet.write(i, 2, lineitem.brand)
5631 amar.kumar 102
        html +="<td>" + str(lineitem.brand) + "</td>"
4607 rajveer 103
        sheet.write(i, 3, lineitem.model_name)
5631 amar.kumar 104
        html +="<td>" + str(lineitem.model_name) + "</td>"
4607 rajveer 105
        sheet.write(i, 4, lineitem.model_number)
5631 amar.kumar 106
        html +="<td>" + str(lineitem.model_number) + "</td>"
4607 rajveer 107
        sheet.write(i, 5, lineitem.color)
5631 amar.kumar 108
        html +="<td>" + str(lineitem.color) + "</td>"
4607 rajveer 109
        sheet.write(i, 6, to_py_date(order.created_timestamp), date_style)
5631 amar.kumar 110
        html +="<td>" + str(to_py_date(order.created_timestamp)) + "</td>"
4607 rajveer 111
        sheet.write(i, 7, to_py_date(order.promised_shipping_time), date_style)
5631 amar.kumar 112
        html +="<td>" + str(to_py_date(order.promised_shipping_time)) + "</td>"
4607 rajveer 113
        sheet.write(i, 8, to_py_date(order.expected_shipping_time), date_style)
5631 amar.kumar 114
        html +="<td>" + str(to_py_date(order.expected_shipping_time)) + "</td>"
4635 rajveer 115
        if order.delayReason:
116
            sheet.write(i, 9, DelayReason._VALUES_TO_NAMES[order.delayReason])
5631 amar.kumar 117
            html +="<td>" + str(DelayReason._VALUES_TO_NAMES[order.delayReason]) + "</td>"
4648 rajveer 118
        sheet.write(i, 10, order.delayReasonText)
5631 amar.kumar 119
        html +="<td>" + str(order.delayReasonText) + "</td>"
120
        html +="</tr>"
4607 rajveer 121
        i= i+1
122
 
123
    today = datetime.date.today()
124
    datestr = str(today.year) + "-" + str(today.month) + "-" + str(today.day)
125
    filename = "/tmp/SlippedOrders-" + datestr + ".xls" 
126
    wbk.save(filename)
5631 amar.kumar 127
    html +="</table></body></html>"
4607 rajveer 128
    try:
129
        part = get_attachment_part(filename)
5631 amar.kumar 130
        mail_html("cnc.center@shop2020.in", "5h0p2o2o", to, "Slipped Orders as on: " + datestr, html, [part])
4607 rajveer 131
    finally:
132
        os.remove(filename)
133
 
4709 rajveer 134
def generate_cancelled_orders_file():
135
    txn_client = TransactionClient().get_client()
136
    #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)
137
    cancelled_orders = txn_client.getCancelledOrders(to_java_date(datetime.datetime.now() - datetime.timedelta(hours = 24)), to_java_date(datetime.datetime.now()))
138
 
139
    wbk = xlwt.Workbook()
140
    sheet = wbk.add_sheet('main')
141
 
142
    heading_xf = xlwt.easyxf('font: bold on; align: wrap on, vert centre, horiz center')
143
    sheet.set_panes_frozen(True)
144
    sheet.set_horz_split_pos(1)
145
    sheet.set_remove_splits(True)
146
 
147
    excel_integer_format = '0'
148
    integer_style = xlwt.XFStyle()
149
    integer_style.num_format_str = excel_integer_format
150
 
151
    date_style = xlwt.XFStyle()
152
    date_style.num_format_str = "M/D/YY"
153
 
154
    sheet.write(0, 0, "Order ID", heading_xf)
155
    sheet.write(0, 1, "Mode.", heading_xf)
156
    sheet.write(0, 2, "Brand", heading_xf)
157
    sheet.write(0, 3, "Model Name", heading_xf)
158
    sheet.write(0, 4, "Model Number", heading_xf)
5631 amar.kumar 159
    sheet.write(0, 5, "Colour", heading_xf)
4709 rajveer 160
    sheet.write(0, 6, "Creation Date", heading_xf)
161
    sheet.write(0, 7, "Promised Shipping Date", heading_xf)
162
    sheet.write(0, 8, "Expected Shipping Date", heading_xf)
163
    sheet.write(0, 9, "Cancellation Reason", heading_xf)
164
    sheet.write(0, 10, "Cancellation Date", heading_xf)    
165
 
5631 amar.kumar 166
    html = """\
167
    <html>
168
        <head>
169
            <style type="text/css">
170
                table, tr, th { border :1px solid black;}
171
            </style>
172
        </head>
173
        <body>
174
            <center><h3>Delayed Orders</h3></center>
175
            <table>
176
                <tr>
177
                    <th>Order ID</th>
178
                    <th>Mode</th>
179
                    <th>Brand</th>
180
                    <th>Model Name</th>
181
                    <th>Model Number</th>
182
                    <th>Colour</th>
183
                    <th>Creation Date</th>
184
                    <th>Promised Shipping Date</th>
185
                    <th>Expected Shipping Date</th>
186
                    <th>Cancellation Reason</th>
187
                    <th>Cancellation Date</th>
188
                </tr>
189
    """
190
 
191
 
4709 rajveer 192
    order = Order()
193
    mode = {}
194
    mode[0] = 'Prepaid'
195
    mode[1] = 'COD'
196
 
197
    i = 1
198
    for order in cancelled_orders:
5631 amar.kumar 199
        html +="<tr>"
4709 rajveer 200
        sheet.write(i, 0, order.id) 
5631 amar.kumar 201
        html +="<td>" + str(order.id) + "</td>" 
4709 rajveer 202
        sheet.write(i, 1, mode[order.cod])
5631 amar.kumar 203
        html +="<td>" + str(mode[order.cod]) + "</td>"
4709 rajveer 204
 
205
        lineitem = order.lineitems[0]
206
        sheet.write(i, 2, lineitem.brand)
5631 amar.kumar 207
        html +="<td>" + str(lineitem.brand) + "</td>"
4709 rajveer 208
        sheet.write(i, 3, lineitem.model_name)
5631 amar.kumar 209
        html +="<td>" + str(lineitem.model_name) + "</td>"
4709 rajveer 210
        sheet.write(i, 4, lineitem.model_number)
5631 amar.kumar 211
        html +="<td>" + str(lineitem.model_number) + "</td>"
4709 rajveer 212
        sheet.write(i, 5, lineitem.color)
5631 amar.kumar 213
        html +="<td>" + str(lineitem.color) + "</td>"
4709 rajveer 214
 
215
        sheet.write(i, 6, to_py_date(order.created_timestamp), date_style)
5631 amar.kumar 216
        html +="<td>" + str(to_py_date(order.created_timestamp)) + "</td>"
4709 rajveer 217
        sheet.write(i, 7, to_py_date(order.promised_shipping_time), date_style)
5631 amar.kumar 218
        html +="<td>" + str(to_py_date(order.promised_shipping_time)) + "</td>"
4709 rajveer 219
        sheet.write(i, 8, to_py_date(order.expected_shipping_time), date_style)
5631 amar.kumar 220
        html +="<td>" + str(to_py_date(order.expected_shipping_time)) + "</td>"
4709 rajveer 221
        sheet.write(i, 9, order.refundReason)
5631 amar.kumar 222
        html +="<td>" + str(order.refundReason) + "</td>"
4709 rajveer 223
        sheet.write(i, 10, to_py_date(order.refund_timestamp), date_style)
5631 amar.kumar 224
        html +="<td>" + str(to_py_date(order.refund_timestamp)) + "</td>"
225
        html +="<td>" + str(order.delayReasonText) + "</td>"
226
        html +="</tr>"
4709 rajveer 227
 
228
        i= i+1
229
 
230
    today = datetime.date.today()
231
    datestr = str(today.year) + "-" + str(today.month) + "-" + str(today.day)
232
    filename = "/tmp/CancelledOrders-" + datestr + ".xls" 
233
    wbk.save(filename)
5631 amar.kumar 234
    html +="</table></body></html>"
4709 rajveer 235
 
236
    try:
237
        part = get_attachment_part(filename)
5631 amar.kumar 238
        mail_html("cnc.center@shop2020.in", "5h0p2o2o", to, "Low Inventory Cancelled Orders as on: " + datestr, html, [part])
4709 rajveer 239
    finally:
240
        os.remove(filename)
4783 phani.kuma 241
 
242
def generate_expected_delivery_missed_orders_file():
243
 
244
    txn_client = TransactionClient().get_client()
245
    orders_not_delivered = txn_client.getUndeliveredOrdersExpectedDeliveryDateNotMet()
246
 
247
    print "orders_not_delivered"
248
    print orders_not_delivered
249
 
250
    logistics_client = LogisticsClient().get_client()
251
    providers = logistics_client.getAllProviders()
252
    providers_map = {}
253
    for provider in providers:
254
        providers_map[provider.id] = provider.name
255
 
5944 mandeep.dh 256
    inventory_client = InventoryClient().get_client()
257
    warehouses = inventory_client.getAllWarehouses(True)
4783 phani.kuma 258
    warehouses_map = {}
259
    for warehouse in warehouses:
260
        warehouses_map[warehouse.id] = warehouse.displayName
261
 
262
    wbk = xlwt.Workbook()
263
    sheet = wbk.add_sheet('main')
264
 
265
    heading_xf = xlwt.easyxf('font: bold on; align: wrap on, vert centre, horiz center')
266
    sheet.set_panes_frozen(True)
267
    sheet.set_horz_split_pos(1)
268
    sheet.set_remove_splits(True)
269
 
270
    excel_integer_format = '0'
271
    integer_style = xlwt.XFStyle()
272
    integer_style.num_format_str = excel_integer_format
273
 
274
    date_style = xlwt.XFStyle()
275
    date_style.num_format_str = "M/D/YY"
276
 
277
    sheet.write(0, 0, "Order ID", heading_xf)
278
    sheet.write(0, 1, "Mode.", heading_xf)
279
    sheet.write(0, 2, "Airway BillNo", heading_xf)
280
    sheet.write(0, 3, "Current Status", heading_xf)
281
    sheet.write(0, 4, "Shipping Date", heading_xf)
282
    sheet.write(0, 5, "Pickup Date", heading_xf)
283
    sheet.write(0, 6, "Expected Delivery Date", heading_xf)
284
    sheet.write(0, 7, "Warehouse", heading_xf)
285
    sheet.write(0, 8, "Warehouse ID", heading_xf)
286
    sheet.write(0, 9, "Logistics Provider", heading_xf)
287
    sheet.write(0, 10, "Logistics Provider ID", heading_xf)
288
    sheet.write(0, 11, "Customer City", heading_xf)
289
    sheet.write(0, 12, "Customer State", heading_xf)
290
    sheet.write(0, 13, "Customer Pincode", heading_xf)
291
 
5631 amar.kumar 292
    html = """\
293
    <html>
294
        <head>
295
            <style type="text/css">
296
                table, tr, th { border :1px solid black;}
297
            </style>
298
        </head>
299
        <body>
300
            <center><h3>Delayed Orders</h3></center>
301
            <table border=1>
302
                <tr>
303
                    <th>Order ID</th>
304
                    <th>Mode</th>
305
                    <th>Airway BillNo</th>
306
                    <th>Current Status</th>
307
                    <th>Shipping Date</th>
308
                    <th>Pickup Date</th>
309
                    <th>Expected Delivery Date</th>
310
                    <th>Warehouse</th>
311
                    <th>Warehouse ID</th>
312
                    <th>Logistics Provider</th>
313
                    <th>Logistics Provider ID</th>
314
                    <th>Customer City</th>
315
                    <th>Customer State</th>
316
                    <th>Customer Pincode</th>
317
                </tr>
318
    """  
319
 
4783 phani.kuma 320
    order = Order()
321
    mode = {}
322
    mode[0] = 'Prepaid'
323
    mode[1] = 'COD'
324
 
325
    i = 1
326
    for order in orders_not_delivered:
5631 amar.kumar 327
        html +="<tr>"
4783 phani.kuma 328
        sheet.write(i, 0, order.id) 
5631 amar.kumar 329
        html +="<td>" + str(order.id) + "</td>"
4783 phani.kuma 330
        sheet.write(i, 1, mode[order.cod])
5631 amar.kumar 331
        html +="<td>" + str(mode[order.cod]) + "</td>"
4783 phani.kuma 332
        sheet.write(i, 2, order.airwaybill_no)
5631 amar.kumar 333
        html +="<td>" + str(order.airwaybill_no) + "</td>"
4783 phani.kuma 334
        sheet.write(i, 3, order.statusDescription)
5631 amar.kumar 335
        html +="<td>" + order.statusDescription + "</td>"
4783 phani.kuma 336
        sheet.write(i, 4, to_py_date(order.shipping_timestamp), date_style)
5631 amar.kumar 337
        html +="<td>" + str(to_py_date(order.shipping_timestamp)) + "</td>"
4783 phani.kuma 338
        sheet.write(i, 5, to_py_date(order.pickup_timestamp), date_style)
5631 amar.kumar 339
        html +="<td>" + str(to_py_date(order.pickup_timestamp)) + "</td>"
4783 phani.kuma 340
        sheet.write(i, 6, to_py_date(order.expected_delivery_time), date_style)
5631 amar.kumar 341
        html +="<td>" + str(to_py_date(order.expected_delivery_time)) + "</td>"
4783 phani.kuma 342
        sheet.write(i, 7, warehouses_map.get(order.warehouse_id))
5631 amar.kumar 343
        html +="<td>" + str(warehouses_map.get(order.warehouse_id)) + "</td>"
4783 phani.kuma 344
        sheet.write(i, 8, order.warehouse_id)
5631 amar.kumar 345
        html +="<td>" + str(order.warehouse_id) + "</td>"
4783 phani.kuma 346
        sheet.write(i, 9, providers_map.get(order.logistics_provider_id))
5631 amar.kumar 347
        html +="<td>" + str(providers_map.get(order.logistics_provider_id)) + "</td>"
4783 phani.kuma 348
        sheet.write(i, 10, order.logistics_provider_id)
5631 amar.kumar 349
        html +="<td>" + str(order.logistics_provider_id) + "</td>"
4783 phani.kuma 350
        sheet.write(i, 11, order.customer_city)
5631 amar.kumar 351
        html +="<td>" + str(order.customer_city) + "</td>"
4783 phani.kuma 352
        sheet.write(i, 12, order.customer_state)
5631 amar.kumar 353
        html +="<td>" + str(order.customer_state) + "</td>"
4783 phani.kuma 354
        sheet.write(i, 13, order.customer_pincode)
5631 amar.kumar 355
        html +="<td>" + str(order.customer_pincode) + "</td>"
4709 rajveer 356
 
5631 amar.kumar 357
        html +="</tr>"
4783 phani.kuma 358
        i= i+1
359
 
360
    today = datetime.date.today()
361
    datestr = str(today.year) + "-" + str(today.month) + "-" + str(today.day)
362
    filename = "/tmp/UndeliveredOrders-" + datestr + ".xls" 
363
    wbk.save(filename)
5631 amar.kumar 364
    html +="</table></body></html>"
4783 phani.kuma 365
 
366
    try:
367
        part = get_attachment_part(filename)
5631 amar.kumar 368
        mail_html("cnc.center@shop2020.in", "5h0p2o2o", to, "Orders which missed Expected Delivery Date as on: " + datestr, html, [part])
4783 phani.kuma 369
    finally:
370
        os.remove(filename)
371
 
4709 rajveer 372
def main():
373
    parser = OptionParser()
374
    parser.add_option("-d", "--delayed", dest="delayed",
375
                      action="store_true",
376
                      help="")
377
    parser.add_option("-c", "--cancelled", dest="cancelled",
378
                      action="store_true",
379
                      help="")
4783 phani.kuma 380
    parser.add_option("-u", "--undelivered", dest="undelivered",
381
                      action="store_true",
382
                      help="")
4709 rajveer 383
 
384
    (options, args) = parser.parse_args()
385
    if options.delayed:
386
        generate_delayed_orders_file()
387
    if options.cancelled:
388
        generate_cancelled_orders_file()
4783 phani.kuma 389
    if options.undelivered:
390
        generate_expected_delivery_missed_orders_file()
391
 
4607 rajveer 392
if __name__ == '__main__':
393
    main()