def track(self, tracking_number): if not self.validate(tracking_number): raise InvalidTrackingNumber() track = FedexTrackRequest(self._get_cfg()) track.TrackPackageIdentifier.Type = 'TRACKING_NUMBER_OR_DOORTAG' track.TrackPackageIdentifier.Value = tracking_number track.IncludeDetailedScans = True # Fires off the request, sets the 'response' attribute on the object. try: track.send_request() except FedexInvalidTrackingNumber as e: raise InvalidTrackingNumber(e) except FedexError as e: raise TrackFailed(e) # TODO: I haven't actually seen an unsuccessful query yet if track.response.HighestSeverity != "SUCCESS": raise TrackFailed( "%d: %s" % (track.response.Notifications[0].Code, track.response.Notifications[0].LocalizedMessage)) return self._parse_response(track.response.TrackDetails[0], tracking_number)
def test_track(self): """ Test shipment tracking. Query for a tracking number and make sure the first (and hopefully only) result matches up. """ track = FedexTrackRequest(CONFIG_OBJ) track.TrackPackageIdentifier.Type = 'TRACKING_NUMBER_OR_DOORTAG' track.TrackPackageIdentifier.Value = '798114182456' track.send_request() for match in track.response.TrackDetails: # This should be the same tracking number on the response that we # asked for in the request. self.assertEqual(match.TrackingNumber, tracking_num)
def track_shipment(self, tracking_id): customer_transaction_id = "*** TrackService Request v10 using Python ***" # Optional transaction_id track = FedexTrackRequest(self.config_obj) # Track by Tracking Number track.SelectionDetails.PackageIdentifier.Type = 'TRACKING_NUMBER_OR_DOORTAG' track.SelectionDetails.PackageIdentifier.Value = '{0}'.format( tracking_id) # FedEx operating company or delete del track.SelectionDetails.OperatingCompany track.send_request() package_tracking_details = {} for c_t_d in track.response.CompletedTrackDetails: for t_d in c_t_d.TrackDetails: if hasattr(t_d, 'EstimatedDeliveryTimestamp'): package_tracking_details[ "EstimatedDelivery"] = t_d.EstimatedDeliveryTimestamp.strftime( "%Y-%m-%d %H:%M:%S") if hasattr(t_d, 'ActualDeliveryTimestamp'): package_tracking_details[ "ActualDelivery"] = t_d.ActualDeliveryTimestamp.strftime( "%Y-%m-%d %H:%M:%S") if hasattr(t_d, "Notification"): if t_d.Notification.Severity == "SUCCESS": package_tracking_details[ 'track_code'] = t_d.StatusDetail.Code package_tracking_details[ 'shipment_status'] = packing_slip_tracking_status( t_d.StatusDetail.Code ) if packing_slip_tracking_status( t_d.StatusDetail.Code) else "" package_tracking_details[ 'shipment_description'] = t_d.StatusDetail.Description package_tracking_details['message'] = "<b>Tracking ID -</b> {0}<br><b>Tracking Status -</b> {1} - {2}<br><b>Description - </b>{3}<br>".format(tracking_id,\ t_d.StatusDetail.Code,package_tracking_details['shipment_status'],t_d.StatusDetail.Description,t_d.Notification.LocalizedMessage) if t_d.Notification.Severity == "ERROR": package_tracking_details[ 'message'] = """<b>Tracking ID -</b> {0}<br> <b>Notification Code -</b> {1}<br>{2}""".format( tracking_id, t_d.Notification.Code, t_d.Notification.LocalizedMessage) package_tracking_details['shipment_status'] = "" package_tracking_details['shipment_description'] = "" package_tracking_details[ 'track_code'] = t_d.Notification.Code return package_tracking_details
def test_track(self): # Test shipment tracking. Query for a tracking number and make sure the # first (and hopefully only) result matches up. tracking_num = '781820562774' track = FedexTrackRequest(CONFIG_OBJ) # Track by Tracking Number track.SelectionDetails.PackageIdentifier.Type = 'TRACKING_NUMBER_OR_DOORTAG' track.SelectionDetails.PackageIdentifier.Value = tracking_num # FedEx operating company or delete del track.SelectionDetails.OperatingCompany track.send_request() assert track.response
def get_delivery_date(tracking_number): customer_transaction_id = "*** TrackService Request v10 using Python ***" # Optional transaction_id track = FedexTrackRequest(CONFIG_OBJ, customer_transaction_id=customer_transaction_id) # Track by Tracking Number track.SelectionDetails.PackageIdentifier.Type = 'TRACKING_NUMBER_OR_DOORTAG' track.SelectionDetails.PackageIdentifier.Value = tracking_number del track.SelectionDetails.OperatingCompany track.send_request() for match in track.response.CompletedTrackDetails[0].TrackDetails: event_details = [] if hasattr(match, 'Events'): for j in range(len(match.Events)): event_match = match.Events[j] event_details.append({ 'created': event_match.Timestamp, 'type': event_match.EventType, 'description': event_match.EventDescription }) if hasattr(event_match, 'StatusExceptionDescription'): event_details[j][ 'exception_description'] = event_match.StatusExceptionDescription delivery_date = None for item in event_details: if item["description"] == "Delivered": delivery_date = item["created"].strftime("%b %d, %Y") return delivery_date
def url_scrapping(self,cr,uid,ids,ups_browse,fedex_browse,context=None): print ids[0] obj = self.browse(cr, uid, ids[0], context=context) print '>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>',obj if obj.carrier_selection == 'dhl' and obj.delivered == False: try: url = "http://www.dhl.co.in/shipmentTracking" querystring = {"AWB":obj.tracking_no, "countryCode": "in", "languageCode": "en", "_": "1511447699608"} headers = { 'cache-control': "no-cache", 'postman-token': "cb9efd5e-f6be-248f-cf53-9bb555403121" } response = requests.request("GET", url, headers=headers, params=querystring) print response.text data=json.loads(response.text) # print'>>>>>>>>>>jsonloads', data for result in data['results']: count=0 for check in result.get('checkpoints'): count +=1 print count result_description=check.get('description') print ">>>",result_description result_time=check.get('time') result_date=check.get('date') result_date=parse(result_date).strftime('%d/%m/%Y') print ">>>", result_date result_location=check.get('location') print ">>>", result_date vsa_line_env=self.pool.get('vsa.line') vsa_id=vsa_line_env.search(cr,uid,[('date','=',result_date+'-'+result_time)],context) if not vsa_id: vals={'name':result_location, 'description':result_description, 'date':result_date+'-'+result_time, 'vsa_line':ids[0]} vsa_line_create=vsa_line_env.create(cr, uid, vals, context) result_edd='NA' if result.get('edd'): result_edd=result.get('edd').get('date') result_edd = parse(result_edd).strftime('%d/%m/%Y') result_signatory=result.get('signature').get('signatory') print '>>>>?>>>>>>',result_signatory if count ==1: write=obj.write({'expected_arrival':result_edd,'last_status':result_description+ " On "+result_date }) print '>>>>>>>>>>>>>>>>>>>>>>>>>>>write',write if "Delivered" in result_description: write=obj.write({'delivered':True}) except Exception: _logger.error("NO Records Found for DHL") vsa_line_env = self.pool.get('vsa.line') vals = {'name': "NOT FOUND", 'description': "NOT FOUND", 'date': "NOT FOUND", 'vsa_line': ids[0]} vsa_line_create = vsa_line_env.create(cr, uid, vals, context) if obj.carrier_selection =='ups' and obj.delivered == False: try: print ups_browse.name print ups_browse.password url_ups = "https://wwwcie.ups.com/rest/Track" payload ="""{ "Security": { "UsernameToken": { "Username":""" +ups_browse.name+""", "Password":"""+ups_browse.password+""" }, "UPSServiceAccessToken": { "AccessLicenseNumber":"""+ups_browse.access_key+""" } }, "TrackRequest": { "Request": { "RequestOption": "15", "TransactionReference": { "CustomerContext": "Your Test Case Summary Description" } }, "InquiryNumber":"""+obj.tracking_no+""", "TrackingOption": "02" } }""" headers = { 'content-type': "application/json", 'cache-control': "no-cache", 'postman-token': "12a378d9-76ec-08f6-e365-5e56d1a49479" } response = requests.request("POST", url_ups, data=payload, headers=headers) print response.text data=json.loads(response.text) count =0 for activity in data['TrackResponse']['Shipment']['Package']['Activity']: count +=1 if activity.get('ActivityLocation').get('Address'): city=activity.get('ActivityLocation').get('Address').get('City') print'>>>>>>>>>>>>>>>>>>>>',city description=activity.get("Status").get("Description") print'>>>>>>>>>>>>>>>>>>>>', description date = activity.get("Date") time_api = activity.get("Time") date_time=date+time_api date = parse(date_time).strftime('%d/%m/%Y %H:%M:%S') print'>>>>>>>>>>>>>>>>>>>>', date vsa_line_env = self.pool.get('vsa.line') vsa_id=vsa_line_env.search(cr,uid,[('date','=',date)],context) if not vsa_id: vals={'name':city, 'description':description, 'date':date, 'vsa_line':ids[0]} vsa_line_create=vsa_line_env.create(cr, uid, vals, context) if count ==1: write = obj.write({'expected_arrival': "NA", 'last_status': description +" at "+ city +" on " + date}) if "Delivered" in description: write=obj.write({'delivered':True}) except Exception: _logger.error("NO Records Found for UPS") vsa_line_env = self.pool.get('vsa.line') vals = {'name': "NOT FOUND", 'description': "NOT FOUND", 'date': "NOT FOUND", 'vsa_line': ids[0]} vsa_line_create = vsa_line_env.create(cr, uid, vals, context) if obj.carrier_selection =='fedex' and obj.delivered == False: try: CONFIG_OBJ = FedexConfig(key=fedex_browse.name, password=fedex_browse.password, account_number=fedex_browse.account_no, meter_number=fedex_browse.meter_no, # freight_account_number='xxxxxxxxxxx', use_test_server=True) customer_transaction_id = "*** TrackService Request v10 using Python ***" # Optional transaction_id track = FedexTrackRequest(CONFIG_OBJ, customer_transaction_id=customer_transaction_id) # Track by Tracking Number track.SelectionDetails.PackageIdentifier.Type = 'TRACKING_NUMBER_OR_DOORTAG' track.SelectionDetails.PackageIdentifier.Value = obj.tracking_no # FedEx operating company or delete del track.SelectionDetails.OperatingCompany track.send_request() print(track.response) data=track.response # print '>>>>>>>>>>>>>>>>>>>>>>>>>>EstimatedDeliveryTimestamp',data.CompletedTrackDetails for record in data.CompletedTrackDetails: for set in record.TrackDetails: print type(set) # print '>>>>>>>>>>>>>>>>>>>>>>>>>>EstimatedDeliveryTimestamp',time for event in set.Events: timestamp=event.Timestamp timestamp = timestamp.strftime('%d/%m/%Y-%H:%M:%S') print '>>>>>>>>>>>>>>>>>>>>>>>>>>timestamp', timestamp EventDescription=event.EventDescription print '>>>>>>>>>>>>>>>>>>>>>>>>>>EventDescription', EventDescription city='(Address Not Provided)' if 'City' in event.Address: city=event.Address.City print '>>>>>>>>>>>>>>>>>>>>>>>>>>city', city vsa_line_env = self.pool.get('vsa.line') vsa_id = vsa_line_env.search(cr, uid, [('date', '=', timestamp)], context) if not vsa_id: vals = {'name': city , 'description': EventDescription, 'date': timestamp, 'vsa_line': ids[0]} vsa_line_create = vsa_line_env.create(cr, uid, vals, context) split_time=timestamp.split('-') write=obj.write({'expected_arrival': "NA",'last_status': EventDescription + " at " + city + " on " + split_time[0]}) if "Delivered" in EventDescription: write = obj.write({'delivered': True}) cr.commit() if 'EstimatedDeliveryTimestamp' in set: time = set.EstimatedDeliveryTimestamp time = time.strftime('%d/%m/%Y') write = obj.write({'expected_arrival': time}) except Exception: _logger.error("NO Records Found for Fedex") vsa_line_env = self.pool.get('vsa.line') vals = {'name': "NOT FOUND", 'description': "Server is UnReachable or This Order is Arrived", 'date': "NOT FOUND", 'vsa_line': ids[0]} write = obj.write({'expected_arrival': "Server is UnReachable or This Order is Arrived"}) vsa_line_create = vsa_line_env.create(cr, uid, vals, context) return True
#!/usr/bin/env python """ This example shows how to track shipments. """ import logging from example_config import CONFIG_OBJ from fedex.services.track_service import FedexTrackRequest # Set this to the INFO level to see the response from Fedex printed in stdout. logging.basicConfig(level=logging.INFO) # NOTE: TRACKING IS VERY ERRATIC ON THE TEST SERVERS. YOU MAY NEED TO USE # PRODUCTION KEYS/PASSWORDS/ACCOUNT #. # We're using the FedexConfig object from example_config.py in this dir. track = FedexTrackRequest(CONFIG_OBJ) track.TrackPackageIdentifier.Type = 'TRACKING_NUMBER_OR_DOORTAG' track.TrackPackageIdentifier.Value = '798114182456' # Fires off the request, sets the 'response' attribute on the object. track.send_request() # See the response printed out. print track.response # Look through the matches (there should only be one for a tracking number # query), and show a few details about each shipment. print "== Results ==" for match in track.response.TrackDetails: print "Tracking #:", match.TrackingNumber print "Status:", match.StatusDescription
import logging import sys from example_config import CONFIG_OBJ from fedex.services.track_service import FedexTrackRequest # Un-comment to see the response from Fedex printed in stdout. logging.basicConfig(stream=sys.stdout, level=logging.INFO) # NOTE: TRACKING IS VERY ERRATIC ON THE TEST SERVERS. YOU MAY NEED TO USE # PRODUCTION KEYS/PASSWORDS/ACCOUNT #. THE TEST SERVERS OFTEN RETURN A NOT FOUND ERROR. # WHEN TESTING IN PRODUCTION, GIVE SOME TIME FOR THE TRACKING TO PROPAGATE. # We're using the FedexConfig object from example_config.py in this dir. customer_transaction_id = "*** TrackService Request v10 using Python ***" # Optional transaction_id track = FedexTrackRequest(CONFIG_OBJ, customer_transaction_id=customer_transaction_id) # Track by Tracking Number track.SelectionDetails.PackageIdentifier.Type = 'TRACKING_NUMBER_OR_DOORTAG' track.SelectionDetails.PackageIdentifier.Value = '781820562774' # FedEx operating company or delete del track.SelectionDetails.OperatingCompany # Can optionally set the TrackingNumberUniqueIdentifier # del track.SelectionDetails.TrackingNumberUniqueIdentifier # If you'd like to see some documentation on the ship service WSDL, un-comment # this line. (Spammy). # print(track.client)