| 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"
|