Subversion Repositories SmartDukaan

Rev

Rev 4508 | Rev 4559 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 4508 Rev 4540
Line 87... Line 87...
87
        traceback.print_exc()
87
        traceback.print_exc()
88
 
88
 
89
def process_delivery_report(provider):
89
def process_delivery_report(provider):
90
    try:
90
    try:
91
        orders_tobe_delivered = fetch_data(provider.id, OrderStatus.SHIPPED_TO_LOGST)
91
        orders_tobe_delivered = fetch_data(provider.id, OrderStatus.SHIPPED_TO_LOGST)
92
        delivered_orders, returned_orders, undelivered_orders = read_delivery_orders(orders_tobe_delivered)
92
        delivered_orders, delivered_orders_but_wrong_code_mentioned, returned_orders, undelivered_orders = read_delivery_orders(orders_tobe_delivered)
93
        if undelivered_orders:
93
        if undelivered_orders:
94
            update_reason_of_undelivered_orders(provider.id, undelivered_orders)
94
            update_reason_of_undelivered_orders(provider.id, undelivered_orders)
95
        if delivered_orders:
95
        if delivered_orders:
96
            update_delivered_orders(provider.id, delivered_orders)
96
            update_delivered_orders(provider.id, delivered_orders)
97
        if returned_orders:
97
        if returned_orders:
Line 105... Line 105...
105
                     "This is a system generated email.Please don't reply to it.",\
105
                     "This is a system generated email.Please don't reply to it.",\
106
                     returned_orders_report)
106
                     returned_orders_report)
107
            except:
107
            except:
108
                print "Some issue sending the returned orders report"
108
                print "Some issue sending the returned orders report"
109
                traceback.print_exc()
109
                traceback.print_exc()
-
 
110
        if delivered_orders_but_wrong_code_mentioned:
-
 
111
            try:
-
 
112
                delivered_orders_but_wrong_code_mentioned_file = "/tmp/delivered_orders_but_wrong_code.csv"
-
 
113
                print_delivered_orders_but_wrong_code_mentioned_report(delivered_orders_but_wrong_code_mentioned_file, delivered_orders_but_wrong_code_mentioned)
-
 
114
                delivered_orders_but_wrong_code_mentioned_report = [get_attachment_part(delivered_orders_but_wrong_code_mentioned_file)]
-
 
115
                mail(from_user, from_pwd, to,\
-
 
116
                     "Delivered Orders but Wrong Code Mentioned Report for " + provider.name,\
-
 
117
                     "This is a system generated email.Please don't reply to it.",\
-
 
118
                     delivered_orders_but_wrong_code_mentioned_report)
-
 
119
            except:
-
 
120
                print "Some issue sending the delivered orders but wrong code mentioned report"
-
 
121
                traceback.print_exc()            
110
    except:
122
    except:
111
        print "Some issue while processing the returned orders"
123
        print "Some issue while processing the orders in SHIPPED_TO_LOGST status"
112
        traceback.print_exc()
124
        traceback.print_exc()
113
 
125
 
114
def get_provider_by_name(provider_name):
126
def get_provider_by_name(provider_name):
115
    logistics_client = LogisticsClient().get_client()
127
    logistics_client = LogisticsClient().get_client()
116
    provider = None
128
    provider = None
Line 139... Line 151...
139
        root = parse(urllib2.urlopen(uri)).getroot()
151
        root = parse(urllib2.urlopen(uri)).getroot()
140
        try:
152
        try:
141
            nodes = root.findall('HAWBDetails/HAWBHistory/HAWBUpdate')
153
            nodes = root.findall('HAWBDetails/HAWBHistory/HAWBUpdate')
142
            if len(nodes):
154
            if len(nodes):
143
                element = nodes[len(nodes)-1]
155
                element = nodes[len(nodes)-1]
144
                if element.findtext('TrackingCodeDescription', '') == 'Shipment Origin Received':
156
                if element.findtext('Status', '') == 'SHOR' and element.findtext('Condition', '') == 'PKUP':
145
                    delivery_date = get_py_datetime(element.findtext('ActionDate', ''))
157
                    delivery_date = get_py_datetime(element.findtext('ActionDate', ''))
146
                    picked_up_doas[order.pickupRequestNo] = str(delivery_date)
158
                    picked_up_doas[order.pickupRequestNo] = str(delivery_date)
147
        except:
159
        except:
148
            pass
160
            pass
149
    
161
    
Line 165... Line 177...
165
        root = parse(urllib2.urlopen(uri)).getroot()
177
        root = parse(urllib2.urlopen(uri)).getroot()
166
        try:
178
        try:
167
            nodes = root.findall('HAWBDetails/HAWBHistory/HAWBUpdate')
179
            nodes = root.findall('HAWBDetails/HAWBHistory/HAWBUpdate')
168
            if len(nodes):
180
            if len(nodes):
169
                element = nodes[len(nodes)-1]
181
                element = nodes[len(nodes)-1]
170
                if element.findtext('TrackingCodeDescription', '') == 'Shipment Origin Received':
182
                if element.findtext('Status', '') == 'SHOR' and element.findtext('Condition', '') == 'PKUP':
171
                    delivery_date = get_py_datetime(element.findtext('ActionDate', ''))
183
                    delivery_date = get_py_datetime(element.findtext('ActionDate', ''))
172
                    picked_up_orders[order.airwaybill_no] = str(delivery_date)
184
                    picked_up_orders[order.airwaybill_no] = str(delivery_date)
173
        except:
185
        except:
174
            pass
186
            pass
175
    
187
    
Line 184... Line 196...
184
    except ConfigException as cex:
196
    except ConfigException as cex:
185
        print cex.message
197
        print cex.message
186
        traceback.print_exc()
198
        traceback.print_exc()
187
    
199
    
188
    delivered_orders = {}
200
    delivered_orders = {}
-
 
201
    delivered_orders_but_wrong_code_mentioned = {}
189
    returned_orders = {}
202
    returned_orders = {}
190
    undelivered_orders = {}
203
    undelivered_orders = {}
191
    for order in orders_tobe_delivered:
204
    for order in orders_tobe_delivered:
192
        uri = ARAMEX_URL + order.airwaybill_no
205
        uri = ARAMEX_URL + order.airwaybill_no
193
        root = parse(urllib2.urlopen(uri)).getroot()
206
        root = parse(urllib2.urlopen(uri)).getroot()
Line 195... Line 208...
195
            nodes = root.findall('HAWBDetails/HAWBHistory/HAWBUpdate')
208
            nodes = root.findall('HAWBDetails/HAWBHistory/HAWBUpdate')
196
            if len(nodes):
209
            if len(nodes):
197
                i = len(nodes)-1
210
                i = len(nodes)-1
198
                while i>=0:
211
                while i>=0:
199
                    element = nodes[i]
212
                    element = nodes[i]
200
                    if element.findtext('TrackingCodeDescription', '') == 'Shipment Delivered':
213
                    if element.findtext('Status', '') == 'SHDL' and (element.findtext('Condition', '') == 'DLVD' or element.findtext('Condition', '') == 'DPTT' or element.findtext('Condition', '') == 'DLPT' or element.findtext('Condition', '') == 'LTRB'):
201
                        delivery_date = get_py_datetime(element.findtext('ActionDate', ''))
214
                        delivery_date = get_py_datetime(element.findtext('ActionDate', ''))
202
                        receiver = root.findtext('HAWBDetails/DeliveredTo', '')
215
                        receiver = root.findtext('HAWBDetails/DeliveredTo', '')
203
                        delivered_orders[order.airwaybill_no] = str(delivery_date) + "|" +  receiver
216
                        delivered_orders[order.airwaybill_no] = str(delivery_date) + "|" +  receiver
-
 
217
                        if element.findtext('Condition', '') != 'DLVD':
-
 
218
                            delivered_orders_but_wrong_code_mentioned[order.airwaybill_no] = element.findtext('Condition', '')
204
                        break
219
                        break
205
                    elif element.findtext('TrackingCodeDescription', '') == 'Shipment Release Hold':
220
                    elif element.findtext('Condition', '') == 'RTRN' and (element.findtext('Status', '') == 'SHRH' or element.findtext('Status', '') == 'SHUP'):
206
                        delivery_date = get_py_datetime(element.findtext('ActionDate', ''))
221
                        delivery_date = get_py_datetime(element.findtext('ActionDate', ''))
207
                        if i < len(nodes)-1:
222
                        if i < len(nodes)-1:
208
                            reason_for_return = nodes[i+1].findtext('CustomerDescription', '')
223
                            reason_for_return = nodes[i+1].findtext('CustomerDescription', '')
209
                        else:
224
                        else:
210
                            reason_for_return = element.findtext('CustomerDescription', '')
225
                            reason_for_return = element.findtext('CustomerDescription', '')
211
                        returned_orders[order.airwaybill_no] = str(delivery_date) + "|" + reason_for_return
226
                        returned_orders[order.airwaybill_no] = str(delivery_date) + "|" + reason_for_return
212
                        break
227
                        break
213
                    elif i == 0:
228
                    elif i == 0:
214
                        reason = element.findtext('TrackingCodeDescription', '')
229
                        reason = root.findtext('CurrentStatus', '')
215
                        undelivered_orders[order.airwaybill_no] = reason
230
                        undelivered_orders[order.airwaybill_no] = reason
216
                        break
231
                        break
217
                    i = i-1
232
                    i = i-1
218
        except:
233
        except:
219
            pass
234
            pass
220
    
235
    
221
    print "Delivered Orders:"
236
    print "Delivered Orders:"
222
    print delivered_orders
237
    print delivered_orders
223
    
238
    
-
 
239
    print "Delivered Orders but wrong code mentioned:"
-
 
240
    print delivered_orders_but_wrong_code_mentioned
-
 
241
    
224
    print "Returned Orders:"
242
    print "Returned Orders:"
225
    print returned_orders
243
    print returned_orders
226
    
244
    
227
    print "Undelivered Orders"
245
    print "Undelivered Orders"
228
    print undelivered_orders
246
    print undelivered_orders
229
    
247
    
230
    return delivered_orders, returned_orders, undelivered_orders
248
    return delivered_orders, delivered_orders_but_wrong_code_mentioned, returned_orders, undelivered_orders
231
 
249
 
232
def update_picked_orders(provider_id, pickup_details):
250
def update_picked_orders(provider_id, pickup_details):
233
    txnClient = TransactionClient().get_client()
251
    txnClient = TransactionClient().get_client()
234
    try:
252
    try:
235
        orders_not_picked_up = txnClient.markOrdersAsPickedUp(provider_id, pickup_details)
253
        orders_not_picked_up = txnClient.markOrdersAsPickedUp(provider_id, pickup_details)
Line 277... Line 295...
277
    writer.writerow(['AWB No', 'Return date', 'Reason'])
295
    writer.writerow(['AWB No', 'Return date', 'Reason'])
278
    for awb, date_reason in returned_orders.iteritems():
296
    for awb, date_reason in returned_orders.iteritems():
279
        date, reason = date_reason.split('|')
297
        date, reason = date_reason.split('|')
280
        writer.writerow([awb, date, reason])
298
        writer.writerow([awb, date, reason])
281
 
299
 
-
 
300
def print_delivered_orders_but_wrong_code_mentioned_report(filename, delivered_orders_but_wrong_code_mentioned):
-
 
301
    writer = csv.writer(open(filename, "wb"), delimiter=',', quoting=csv.QUOTE_NONE)
-
 
302
    writer.writerow(['AWB No', 'Code Used'])
-
 
303
    for awb, code_used in delivered_orders_but_wrong_code_mentioned.iteritems():
-
 
304
        writer.writerow([awb, code_used])
-
 
305
 
282
def get_py_datetime(time_string):
306
def get_py_datetime(time_string):
283
    # This should be a command line argument.
307
    # This should be a command line argument.
284
    # Refer http://docs.python.org/library/time.html#time.strftime to
308
    # Refer http://docs.python.org/library/time.html#time.strftime to
285
    # get a complete list of format specifiers available for date time.
309
    # get a complete list of format specifiers available for date time.
286
    time_format = "%m/%d/%Y %I:%M:%S %p"
310
    time_format = "%m/%d/%Y %I:%M:%S %p"