Subversion Repositories SmartDukaan

Rev

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