| Line 34... |
Line 34... |
| 34 |
from shop2020.thriftpy.model.v1.order.ttypes import TransactionServiceException, \
|
34 |
from shop2020.thriftpy.model.v1.order.ttypes import TransactionServiceException, \
|
| 35 |
OrderStatus
|
35 |
OrderStatus
|
| 36 |
from shop2020.utils.EmailAttachmentSender import get_attachment_part, mail
|
36 |
from shop2020.utils.EmailAttachmentSender import get_attachment_part, mail
|
| 37 |
from shop2020.utils.Utils import to_py_date
|
37 |
from shop2020.utils.Utils import to_py_date
|
| 38 |
from xml.etree.ElementTree import parse, XML, fromstring
|
38 |
from xml.etree.ElementTree import parse, XML, fromstring
|
| - |
|
39 |
from datetime import datetime
|
| 39 |
import csv
|
40 |
import csv
|
| 40 |
import datetime
|
41 |
import datetime
|
| 41 |
import optparse
|
42 |
import optparse
|
| 42 |
import sys
|
43 |
import sys
|
| 43 |
import time
|
44 |
import time
|
| 44 |
import traceback
|
45 |
import traceback
|
| 45 |
import urllib2
|
46 |
import urllib2
|
| 46 |
from suds.client import Client
|
47 |
from suds.client import Client
|
| - |
|
48 |
import json
|
| - |
|
49 |
import StringIO
|
| - |
|
50 |
import zlib
|
| - |
|
51 |
import gzip
|
| - |
|
52 |
import xmltodict
|
| - |
|
53 |
import ast
|
| 47 |
if __name__ == '__main__' and __package__ is None:
|
54 |
if __name__ == '__main__' and __package__ is None:
|
| 48 |
import os
|
55 |
import os
|
| 49 |
sys.path.insert(0, os.getcwd())
|
56 |
sys.path.insert(0, os.getcwd())
|
| 50 |
|
57 |
|
| 51 |
|
58 |
|
| 52 |
RED_EXPRESS_URL = "http://tracking.getsetred.net/TrackingService.svc?wsdl"
|
59 |
RED_EXPRESS_URL = "http://tracking.getsetred.net/TrackingService.svc?wsdl"
|
| 53 |
username = 'C00086721141'
|
60 |
username = 'C00086721141'
|
| 54 |
password = 'SANDEEP.SACHDEVA@SHOP2020.IN'
|
61 |
password = 'SANDEEP.SACHDEVA@SHOP2020.IN'
|
| - |
|
62 |
tracking_Id_Type = 'REFERENCENO'
|
| - |
|
63 |
tracking_Level = 'ALL_DETAILS'
|
| - |
|
64 |
|
| - |
|
65 |
RED_EXPRESS_TRACKING_URL = 'http://webservices.getsetred.net/Services/BulkTracking.svc/'
|
| - |
|
66 |
headers = {
|
| - |
|
67 |
"User-Agent" : "Mozilla/5.0 (X11; Linux i686) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/13.0.782.218 Safari/535.1",
|
| - |
|
68 |
"Accept" : " text/html,application/xhtml+xml,application/xml;q=0.9,/;q=0.8",
|
| - |
|
69 |
"Accept-Language" : "en-us,en;q=0.5",
|
| - |
|
70 |
"Accept-Encoding" : "gzip, deflate",
|
| - |
|
71 |
"Connection" : "keep-alive",
|
| - |
|
72 |
"Accept-Charset" : "ISO-8859-1",
|
| - |
|
73 |
"Content-type": "application/json; charset=UTF-8"
|
| - |
|
74 |
}
|
| 55 |
|
75 |
|
| 56 |
client = None
|
76 |
client = None
|
| 57 |
def getClient():
|
77 |
def getClient():
|
| 58 |
global client
|
78 |
global client
|
| 59 |
if client is None:
|
79 |
if client is None:
|
| Line 82... |
Line 102... |
| 82 |
timestring = element.findtext('Time', '')
|
102 |
timestring = element.findtext('Time', '')
|
| 83 |
description = element.findtext('ServiceEvent', '')
|
103 |
description = element.findtext('ServiceEvent', '')
|
| 84 |
results.append(datestring+"~!~"+timestring+"~!~"+description)
|
104 |
results.append(datestring+"~!~"+timestring+"~!~"+description)
|
| 85 |
return results
|
105 |
return results
|
| 86 |
|
106 |
|
| - |
|
107 |
def get_track_updates(awb_numbers):
|
| - |
|
108 |
req_args = json.dumps({'password':password,
|
| - |
|
109 |
'trackingIdType':'REFERENCENO',
|
| - |
|
110 |
'trackingLevel':'ALL_DETAILS',
|
| - |
|
111 |
'userId':username,
|
| - |
|
112 |
'waybillNo': awb_numbers
|
| - |
|
113 |
})
|
| - |
|
114 |
request = urllib2.Request(RED_EXPRESS_TRACKING_URL, req_args, headers)
|
| - |
|
115 |
response = urllib2.urlopen(request)
|
| - |
|
116 |
|
| - |
|
117 |
encoding = response.info().get("Content-Encoding")
|
| - |
|
118 |
if encoding in ('gzip', 'x-gzip', 'deflate'):
|
| - |
|
119 |
content = response.read()
|
| - |
|
120 |
if encoding == 'deflate':
|
| - |
|
121 |
track_data_decoded = StringIO.StringIO(zlib.decompress(content))
|
| - |
|
122 |
else:
|
| - |
|
123 |
track_data_decoded = gzip.GzipFile('', 'rb', 9, StringIO.StringIO(content))
|
| - |
|
124 |
track_data_readable = track_data_decoded.read()
|
| - |
|
125 |
|
| - |
|
126 |
conv_dict = xmltodict.parse(track_data_readable)
|
| - |
|
127 |
track_data_json= json.dumps(conv_dict)
|
| - |
|
128 |
if track_data_json.find('null') > 0:
|
| - |
|
129 |
track_data_json = track_data_json.replace('null','\"No Description Available\"');
|
| - |
|
130 |
if len(awb_numbers) > 0:
|
| - |
|
131 |
track_data_dict = ast.literal_eval(track_data_json)
|
| - |
|
132 |
|
| - |
|
133 |
if len(awb_numbers)==1:
|
| - |
|
134 |
track_data_list=[]
|
| - |
|
135 |
track_data_list.append(track_data_dict['BulkTrackingResponse']['BulkResponse']['TrackingResponse'])
|
| - |
|
136 |
track_data_list.append('DUMMY')
|
| - |
|
137 |
elif len(awb_numbers)==0:
|
| - |
|
138 |
track_data_list=[]
|
| - |
|
139 |
else:
|
| - |
|
140 |
track_data_list = track_data_dict['BulkTrackingResponse']['BulkResponse']['TrackingResponse']
|
| - |
|
141 |
|
| - |
|
142 |
return track_data_list
|
| - |
|
143 |
|
| - |
|
144 |
|
| 87 |
def process_dao_pickup_orders(provider):
|
145 |
def process_dao_pickup_orders(provider):
|
| 88 |
try:
|
146 |
try:
|
| 89 |
doas_tobe_picked_up = fetch_data(provider.id, [OrderStatus.DOA_PICKUP_CONFIRMED])
|
147 |
doas_tobe_picked_up = fetch_data(provider.id, [OrderStatus.DOA_PICKUP_CONFIRMED])
|
| 90 |
doa_pickup_details = read_dao_return_pickup_orders(doas_tobe_picked_up)
|
148 |
doa_pickup_details = read_dao_return_pickup_orders(doas_tobe_picked_up)
|
| 91 |
if doa_pickup_details:
|
149 |
if doa_pickup_details:
|
| Line 348... |
Line 406... |
| 348 |
print picked_up_orders
|
406 |
print picked_up_orders
|
| 349 |
return picked_up_orders
|
407 |
return picked_up_orders
|
| 350 |
|
408 |
|
| 351 |
def read_pickup_orders(orders_tobe_picked_up):
|
409 |
def read_pickup_orders(orders_tobe_picked_up):
|
| 352 |
picked_up_orders = {}
|
410 |
picked_up_orders = {}
|
| - |
|
411 |
awb_number_list =[]
|
| 353 |
for order in orders_tobe_picked_up:
|
412 |
for order in orders_tobe_picked_up:
|
| 354 |
try:
|
- |
|
| 355 |
root = fromstring(str(get_updates(order.airwaybill_no)))
|
413 |
awb_number_list.append(order.airwaybill_no)
|
| 356 |
children = root.getchildren()
|
- |
|
| 357 |
for child in children:
|
- |
|
| 358 |
nodes = child.findall('ShipmentInfo/ShipmentEvent')
|
- |
|
| 359 |
for element in reversed(nodes):
|
- |
|
| 360 |
datestring = element.findtext('Date', '')
|
- |
|
| 361 |
timestring = element.findtext('Time', '')
|
- |
|
| 362 |
delivery_date = get_py_datetime(datestring, timestring)
|
- |
|
| 363 |
picked_up_orders[order.airwaybill_no] = str(delivery_date)
|
- |
|
| 364 |
break
|
- |
|
| 365 |
break
|
- |
|
| 366 |
except:
|
414 |
|
| 367 |
pass
|
415 |
track_update_list = get_track_updates(awb_number_list)
|
| 368 |
|
416 |
|
| - |
|
417 |
for update in track_update_list:
|
| - |
|
418 |
if update == 'DUMMY':
|
| - |
|
419 |
continue
|
| - |
|
420 |
else:
|
| - |
|
421 |
try:
|
| - |
|
422 |
airwaybill_no = update['ReferenceNo']
|
| - |
|
423 |
track_list = update['TrackingList']['TrackingList']
|
| - |
|
424 |
track_list.reverse()
|
| - |
|
425 |
for track_update in track_list:
|
| - |
|
426 |
if track_update['TrackingCode'] == 'BKD' :
|
| - |
|
427 |
date_obj = datetime.strptime(track_update['ExecutionDate'].split(' ')[0],"%m/%d/%Y")
|
| - |
|
428 |
datestring = date_obj.strftime("%Y-%m-%d")
|
| - |
|
429 |
timestring = track_update['ExecutionTime']+':00'
|
| - |
|
430 |
delivery_date = datestring + timestring
|
| - |
|
431 |
picked_up_orders[airwaybill_no] = delivery_date
|
| - |
|
432 |
break
|
| - |
|
433 |
break
|
| - |
|
434 |
except:
|
| - |
|
435 |
pass
|
| - |
|
436 |
|
| 369 |
print "Picked up Orders:"
|
437 |
print "Picked up Orders:"
|
| 370 |
print picked_up_orders
|
438 |
print picked_up_orders
|
| 371 |
return picked_up_orders
|
439 |
return picked_up_orders
|
| 372 |
|
440 |
|
| 373 |
def read_local_connection_orders(orders_tobe_local_connected):
|
441 |
def read_local_connection_orders(orders_tobe_local_connected):
|
| 374 |
local_connected_orders = {}
|
442 |
local_connected_orders = {}
|
| - |
|
443 |
|
| - |
|
444 |
awb_number_list =[]
|
| 375 |
for order in orders_tobe_local_connected:
|
445 |
for order in orders_tobe_local_connected:
|
| - |
|
446 |
awb_number_list.append(order.airwaybill_no)
|
| 376 |
try:
|
447 |
|
| 377 |
root = fromstring(str(get_updates(order.airwaybill_no)))
|
448 |
track_update_list = get_track_updates(awb_number_list)
|
| - |
|
449 |
|
| - |
|
450 |
for update in track_update_list:
|
| 378 |
children = root.getchildren()
|
451 |
if update == 'DUMMY':
|
| 379 |
for child in children:
|
452 |
continue
|
| - |
|
453 |
else:
|
| - |
|
454 |
try:
|
| - |
|
455 |
airwaybill_no = update['ReferenceNo']
|
| 380 |
nodes = child.findall('ShipmentInfo/ShipmentEvent')
|
456 |
track_list = update['TrackingList']['TrackingList']
|
| 381 |
for element in reversed(nodes):
|
457 |
track_list.reverse()
|
| - |
|
458 |
for track_update in track_list:
|
| 382 |
if element.findtext('TrackingCode', '') == 'PRO':
|
459 |
if track_update['TrackingCode'] == 'PRO' :
|
| - |
|
460 |
date_obj = datetime.strptime(track_update['ExecutionDate'].split(' ')[0],"%m/%d/%Y")
|
| 383 |
datestring = element.findtext('Date', '')
|
461 |
datestring = date_obj.strftime("%Y-%m-%d")
|
| 384 |
timestring = element.findtext('Time', '')
|
462 |
timestring = track_update['ExecutionTime']+':00'
|
| 385 |
delivery_date = get_py_datetime(datestring, timestring)
|
463 |
delivery_date = datestring + timestring
|
| 386 |
local_connected_orders[order.airwaybill_no] = str(delivery_date)
|
464 |
local_connected_orders[airwaybill_no] = delivery_date
|
| 387 |
break
|
465 |
break
|
| 388 |
break
|
466 |
break
|
| 389 |
except:
|
467 |
except:
|
| 390 |
pass
|
468 |
pass
|
| 391 |
|
469 |
|
| 392 |
print "Local Connected Orders"
|
470 |
print "Local Connected Orders"
|
| 393 |
print local_connected_orders
|
471 |
print local_connected_orders
|
| 394 |
|
472 |
|
| 395 |
return local_connected_orders
|
473 |
return local_connected_orders
|
| 396 |
|
474 |
|
| 397 |
def read_reached_destination_orders(orders_tobe_reached_destination_city):
|
475 |
def read_reached_destination_orders(orders_tobe_reached_destination_city):
|
| 398 |
destination_city_reached_orders = {}
|
476 |
destination_city_reached_orders = {}
|
| - |
|
477 |
|
| - |
|
478 |
awb_number_list =[]
|
| 399 |
for order in orders_tobe_reached_destination_city:
|
479 |
for order in orders_tobe_reached_destination_city:
|
| - |
|
480 |
awb_number_list.append(order.airwaybill_no)
|
| 400 |
try:
|
481 |
|
| 401 |
root = fromstring(str(get_updates(order.airwaybill_no)))
|
482 |
track_update_list = get_track_updates(awb_number_list)
|
| - |
|
483 |
|
| - |
|
484 |
for update in track_update_list:
|
| 402 |
children = root.getchildren()
|
485 |
if update == 'DUMMY':
|
| 403 |
child_number = 0
|
486 |
continue
|
| - |
|
487 |
else:
|
| 404 |
for child in children:
|
488 |
try:
|
| 405 |
child_number = child_number + 1
|
489 |
airwaybill_no = update['ReferenceNo']
|
| 406 |
nodes = child.findall('ShipmentInfo/ShipmentEvent')
|
490 |
track_list = update['TrackingList']['TrackingList']
|
| - |
|
491 |
track_list.reverse()
|
| 407 |
for element in nodes:
|
492 |
for track_update in track_list:
|
| 408 |
if element.findtext('TrackingCode', '') == 'RDB':
|
493 |
if track_update['TrackingCode'] == 'RDB' :
|
| - |
|
494 |
date_obj = datetime.strptime(track_update['ExecutionDate'].split(' ')[0],"%m/%d/%Y")
|
| 409 |
datestring = element.findtext('Date', '')
|
495 |
datestring = date_obj.strftime("%Y-%m-%d")
|
| 410 |
timestring = element.findtext('Time', '')
|
496 |
timestring = track_update['ExecutionTime']+':00'
|
| 411 |
delivery_date = get_py_datetime(datestring, timestring)
|
497 |
delivery_date = datestring + timestring
|
| 412 |
destination_city_reached_orders[order.airwaybill_no] = str(delivery_date)
|
498 |
destination_city_reached_orders[airwaybill_no] = delivery_date
|
| 413 |
break
|
499 |
break
|
| - |
|
500 |
break
|
| 414 |
except:
|
501 |
except:
|
| 415 |
pass
|
502 |
pass
|
| 416 |
|
503 |
|
| 417 |
print "Destination City Reached Orders"
|
504 |
print "Destination City Reached Orders"
|
| 418 |
print destination_city_reached_orders
|
505 |
print destination_city_reached_orders
|
| 419 |
|
506 |
|
| 420 |
return destination_city_reached_orders
|
507 |
return destination_city_reached_orders
|
| 421 |
|
508 |
|
| 422 |
def read_first_delivery_attempt_orders(orders_tobe_first_delivery_attempted):
|
509 |
def read_first_delivery_attempt_orders(orders_tobe_first_delivery_attempted):
|
| 423 |
first_atdl_orders = {}
|
510 |
first_atdl_orders = {}
|
| - |
|
511 |
|
| - |
|
512 |
awb_number_list =[]
|
| 424 |
for order in orders_tobe_first_delivery_attempted:
|
513 |
for order in orders_tobe_first_delivery_attempted:
|
| - |
|
514 |
awb_number_list.append(order.airwaybill_no)
|
| 425 |
try:
|
515 |
|
| 426 |
root = fromstring(str(get_updates(order.airwaybill_no)))
|
516 |
track_update_list = get_track_updates(awb_number_list)
|
| - |
|
517 |
|
| - |
|
518 |
for update in track_update_list:
|
| 427 |
children = root.getchildren()
|
519 |
if update == 'DUMMY':
|
| 428 |
for child in children:
|
520 |
continue
|
| - |
|
521 |
else:
|
| - |
|
522 |
try:
|
| - |
|
523 |
airwaybill_no = update['ReferenceNo']
|
| 429 |
nodes = child.findall('ShipmentInfo/ShipmentEvent')
|
524 |
track_list = update['TrackingList']['TrackingList']
|
| 430 |
for element in reversed(nodes):
|
525 |
track_list.reverse()
|
| - |
|
526 |
for track_update in track_list:
|
| 431 |
if element.findtext('TrackingCode', '') == 'OFD':
|
527 |
if track_update['TrackingCode'] == 'OFD' :
|
| - |
|
528 |
date_obj = datetime.strptime(track_update['ExecutionDate'].split(' ')[0],"%m/%d/%Y")
|
| 432 |
datestring = element.findtext('Date', '')
|
529 |
datestring = date_obj.strftime("%Y-%m-%d")
|
| 433 |
timestring = element.findtext('Time', '')
|
530 |
timestring = track_update['ExecutionTime']+':00'
|
| 434 |
delivery_date = get_py_datetime(datestring, timestring)
|
531 |
delivery_date = datestring + timestring
|
| 435 |
first_atdl_orders[order.airwaybill_no] = str(delivery_date)
|
532 |
first_atdl_orders[airwaybill_no] = delivery_date
|
| 436 |
break
|
533 |
break
|
| 437 |
break
|
534 |
break
|
| 438 |
except:
|
535 |
except:
|
| 439 |
pass
|
536 |
pass
|
| - |
|
537 |
|
| 440 |
|
538 |
|
| 441 |
print "FIRST DELIVERY ATTEMPT MADE Orders"
|
539 |
print "FIRST DELIVERY ATTEMPT MADE Orders"
|
| 442 |
print first_atdl_orders
|
540 |
print first_atdl_orders
|
| 443 |
|
541 |
|
| 444 |
return first_atdl_orders
|
542 |
return first_atdl_orders
|
| 445 |
|
543 |
|
| 446 |
def read_delivery_orders(orders_tobe_delivered):
|
544 |
def read_delivery_orders(orders_tobe_delivered):
|
| 447 |
delivered_orders = {}
|
545 |
delivered_orders = {}
|
| 448 |
returned_orders = {}
|
546 |
returned_orders = {}
|
| 449 |
undelivered_orders = {}
|
547 |
undelivered_orders = {}
|
| - |
|
548 |
awb_order_map = {}
|
| - |
|
549 |
|
| 450 |
for order in orders_tobe_delivered:
|
550 |
for order in orders_tobe_delivered:
|
| - |
|
551 |
awb_order_list =[]
|
| - |
|
552 |
awb_order_list.append(order.id)
|
| - |
|
553 |
awb_order_list.append(order.shipping_timestamp)
|
| - |
|
554 |
awb_order_map[order.airwaybill_no]= awb_order_list
|
| - |
|
555 |
|
| - |
|
556 |
track_update_list = get_track_updates(awb_order_map.keys())
|
| - |
|
557 |
|
| - |
|
558 |
for update in track_update_list:
|
| - |
|
559 |
if update == 'DUMMY':
|
| - |
|
560 |
continue
|
| - |
|
561 |
else:
|
| 451 |
try:
|
562 |
try:
|
| - |
|
563 |
airwaybill_no = update['ReferenceNo']
|
| 452 |
root = fromstring(str(get_updates(order.airwaybill_no)))
|
564 |
track_list = update['TrackingList']['TrackingList']
|
| 453 |
children = root.getchildren()
|
565 |
track_list.reverse()
|
| 454 |
child_number = 0
|
566 |
reason_for_return = None
|
| 455 |
for child in children:
|
567 |
for record in track_list:
|
| 456 |
child_number = child_number + 1
|
568 |
if record['TrackingCode'] == 'UDLD' :
|
| 457 |
nodes = child.findall('ShipmentInfo/ShipmentEvent')
|
569 |
reason_for_return = record['ServiceEvent'].split(" -")[1]
|
| 458 |
if len(nodes):
|
570 |
break
|
| 459 |
node_number = len(nodes)-1
|
571 |
|
| 460 |
for element in nodes:
|
572 |
for track_update in track_list:
|
| 461 |
if element.findtext('TrackingCode', '') == 'DLVD':
|
573 |
if track_update['TrackingCode'] == 'DLVD' :
|
| - |
|
574 |
date_obj = datetime.strptime(track_update['ExecutionDate'].split(' ')[0],"%m/%d/%Y")
|
| 462 |
datestring = element.findtext('Date', '')
|
575 |
datestring = date_obj.strftime("%Y-%m-%d")
|
| 463 |
timestring = element.findtext('Time', '')
|
576 |
timestring = track_update['ExecutionTime']+':00'
|
| 464 |
delivery_date = get_py_datetime(datestring, timestring)
|
577 |
del_date = datestring + timestring
|
| 465 |
element1 = child.findall('ShipmentInfo/Consignee')[0]
|
578 |
delivery_date = datetime.strptime(del_date,"%Y-%m-%d %H:%M:%S")
|
| 466 |
receiver = element1.findtext('Name', '')
|
579 |
receiver = track_update['ServiceEvent'].split("[ ")[1].split(" ]")[0]
|
| 467 |
if to_py_date(order.shipping_timestamp) > delivery_date:
|
580 |
if to_py_date(awb_order_map.get(airwaybill_no)[1]) > delivery_date:
|
| 468 |
mail(from_user, from_pwd, to, "Delivery Problem for Red Express", "Order id " + str(order.id) + " has shipping date " + str(order.shipping_timestamp) + " larger than delivery date " + str(delivery_date))
|
581 |
mail(from_user, from_pwd, to, "Delivery Problem for Red Express", "Order id " + str(awb_order_map.get(airwaybill_no)[0]) + " has shipping date " + str(awb_order_map.get(airwaybill_no)[1]) + " larger than delivery date " + str(delivery_date))
|
| 469 |
else:
|
582 |
else:
|
| 470 |
delivered_orders[order.airwaybill_no] = str(delivery_date) + "|" + receiver
|
583 |
delivered_orders[airwaybill_no] = str(delivery_date) + "|" + receiver
|
| 471 |
break
|
584 |
break
|
| 472 |
elif element.findtext('TrackingCode', '') == 'RTO':
|
585 |
elif track_update['TrackingCode'] == 'RTO' :
|
| - |
|
586 |
date_obj = datetime.strptime(track_update['ExecutionDate'].split(' ')[0],"%m/%d/%Y")
|
| 473 |
datestring = element.findtext('Date', '')
|
587 |
datestring = date_obj.strftime("%Y-%m-%d")
|
| 474 |
timestring = element.findtext('Time', '')
|
588 |
timestring = track_update['ExecutionTime']+':00'
|
| 475 |
delivery_date = get_py_datetime(datestring, timestring)
|
589 |
del_date = datestring + timestring
|
| - |
|
590 |
delivery_date = datetime.strptime(del_date,"%Y-%m-%d %H:%M:%S")
|
| 476 |
if node_number < len(nodes)-1:
|
591 |
if reason_for_return == None:
|
| 477 |
reason_for_return = nodes[node_number+1].findtext('ServiceEvent', '')
|
592 |
returned_orders[airwaybill_no] = str(delivery_date) + "|" + " Order Booked for Return"
|
| 478 |
else:
|
593 |
else:
|
| 479 |
reason_for_return = element.findtext('ServiceEvent', '')
|
- |
|
| 480 |
returned_orders[order.airwaybill_no] = str(delivery_date) + "|" + reason_for_return
|
594 |
returned_orders[airwaybill_no] = str(delivery_date) + "|" + reason_for_return
|
| 481 |
break
|
595 |
break
|
| 482 |
elif element.findtext('TrackingCode', '') == 'UDLD':
|
596 |
elif track_update['TrackingCode'] == 'UDLD' :
|
| - |
|
597 |
date_obj = datetime.strptime(track_update['ExecutionDate'].split(' ')[0],"%m/%d/%Y")
|
| 483 |
datestring = element.findtext('Date', '')
|
598 |
datestring = date_obj.strftime("%Y-%m-%d")
|
| 484 |
timestring = element.findtext('Time', '')
|
599 |
timestring = track_update['ExecutionTime']+':00'
|
| 485 |
delivery_date = get_py_datetime(datestring, timestring)
|
600 |
del_date = datestring + timestring
|
| - |
|
601 |
delivery_date = datetime.strptime(del_date,"%Y-%m-%d %H:%M:%S")
|
| 486 |
if node_number < len(nodes)-1:
|
602 |
if reason_for_return == None:
|
| 487 |
reason_for_return = nodes[node_number+1].findtext('ServiceEvent', '')
|
603 |
undelivered_orders[airwaybill_no] = str(delivery_date) + "|" + track_update['ServiceEvent'].split(" -")[1]
|
| 488 |
else:
|
604 |
else:
|
| 489 |
reason_for_return = element.findtext('ServiceEvent', '')
|
- |
|
| 490 |
undelivered_orders[order.airwaybill_no] = str(delivery_date) + "|" + reason_for_return
|
605 |
undelivered_orders[airwaybill_no] = str(delivery_date) + "|" + reason_for_return
|
| 491 |
break
|
606 |
break
|
| 492 |
node_number = node_number - 1
|
607 |
break
|
| 493 |
except:
|
608 |
except:
|
| 494 |
pass
|
609 |
pass
|
| 495 |
|
610 |
|
| 496 |
print "Delivered Orders:"
|
611 |
print "Delivered Orders:"
|
| 497 |
print delivered_orders
|
612 |
print delivered_orders
|
| 498 |
|
613 |
|
| 499 |
print "Returned Orders:"
|
614 |
print "Returned Orders:"
|