mirror of
https://github.com/frappe/erpnext.git
synced 2026-05-26 16:34:46 +00:00
fix(shipment): apply code review
This commit is contained in:
@@ -24,14 +24,14 @@
|
||||
},
|
||||
{
|
||||
"fieldname": "api_password",
|
||||
"fieldtype": "Data",
|
||||
"fieldtype": "Password",
|
||||
"label": "API Password",
|
||||
"read_only_depends_on": "eval:doc.enabled == 0"
|
||||
}
|
||||
],
|
||||
"issingle": 1,
|
||||
"links": [],
|
||||
"modified": "2020-08-05 16:33:44.548230",
|
||||
"modified": "2020-10-21 10:28:37.607717",
|
||||
"modified_by": "Administrator",
|
||||
"module": "ERPNext Integrations",
|
||||
"name": "LetMeShip",
|
||||
|
||||
@@ -20,9 +20,7 @@ def get_letmeship_available_services(delivery_to_type, pickup_address,
|
||||
delivery_address, shipment_parcel, description_of_content, pickup_date,
|
||||
value_of_goods, pickup_contact=None, delivery_contact=None):
|
||||
# Retrieve rates at LetMeShip from specification stated.
|
||||
enabled = frappe.db.get_single_value('LetMeShip','enabled')
|
||||
api_id = frappe.db.get_single_value('LetMeShip','api_id')
|
||||
api_password = frappe.db.get_single_value('LetMeShip','api_password')
|
||||
api_id, api_password, enabled = frappe.db.get_value('LetMeShip', 'LetMeShip', ['enabled', 'api_password', 'api_id'])
|
||||
if not enabled or not api_id or not api_password:
|
||||
return []
|
||||
|
||||
@@ -41,62 +39,16 @@ def get_letmeship_available_services(delivery_to_type, pickup_address,
|
||||
'Accept': 'application/json',
|
||||
'Access-Control-Allow-Origin': 'string'
|
||||
}
|
||||
payload = {'pickupInfo': {
|
||||
'address': {
|
||||
'countryCode': pickup_address.country_code,
|
||||
'zip': pickup_address.pincode,
|
||||
'city': pickup_address.city,
|
||||
'street': pickup_address.address_line1,
|
||||
'addressInfo1': pickup_address.address_line2,
|
||||
'houseNo': '',
|
||||
},
|
||||
'company': pickup_address.address_title,
|
||||
'person': {
|
||||
'title': pickup_contact.title,
|
||||
'firstname': pickup_contact.first_name,
|
||||
'lastname': pickup_contact.last_name
|
||||
},
|
||||
'phone': {
|
||||
'phoneNumber': pickup_contact.phone,
|
||||
'phoneNumberPrefix': pickup_contact.phone_prefix
|
||||
},
|
||||
'email': pickup_contact.email,
|
||||
}, 'deliveryInfo': {
|
||||
'address': {
|
||||
'countryCode': delivery_address.country_code,
|
||||
'zip': delivery_address.pincode,
|
||||
'city': delivery_address.city,
|
||||
'street': delivery_address.address_line1,
|
||||
'addressInfo1': delivery_address.address_line2,
|
||||
'houseNo': '',
|
||||
},
|
||||
'company': delivery_address.address_title,
|
||||
'person': {
|
||||
'title': delivery_contact.title,
|
||||
'firstname': delivery_contact.first_name,
|
||||
'lastname': delivery_contact.last_name
|
||||
},
|
||||
'phone': {
|
||||
'phoneNumber': delivery_contact.phone,
|
||||
'phoneNumberPrefix': delivery_contact.phone_prefix
|
||||
},
|
||||
'email': delivery_contact.email,
|
||||
}, 'shipmentDetails': {
|
||||
'contentDescription': description_of_content,
|
||||
'shipmentType': 'PARCEL',
|
||||
'shipmentSettings': {
|
||||
'saturdayDelivery': False,
|
||||
'ddp': False,
|
||||
'insurance': False,
|
||||
'pickupOrder': False,
|
||||
'pickupTailLift': False,
|
||||
'deliveryTailLift': False,
|
||||
'holidayDelivery': False,
|
||||
},
|
||||
'goodsValue': value_of_goods,
|
||||
'parcelList': parcel_list,
|
||||
'pickupInterval': {'date': pickup_date},
|
||||
}}
|
||||
payload = generate_payload(
|
||||
pickup_address=pickup_address,
|
||||
pickup_contact=pickup_contact,
|
||||
delivery_address=delivery_address,
|
||||
delivery_contact=delivery_contact,
|
||||
description_of_content=description_of_content,
|
||||
value_of_goods=value_of_goods,
|
||||
parcel_list=parcel_list,
|
||||
pickup_date=pickup_date
|
||||
)
|
||||
try:
|
||||
available_services = []
|
||||
response_data = requests.post(
|
||||
@@ -128,6 +80,7 @@ def get_letmeship_available_services(delivery_to_type, pickup_address,
|
||||
.format(response_data['message'])
|
||||
)
|
||||
except Exception as exc:
|
||||
frappe.log_error(frappe.get_traceback())
|
||||
frappe.msgprint(
|
||||
_('Error occurred while fetching LetMeShip Prices: {0}')
|
||||
.format(str(exc)),
|
||||
@@ -142,9 +95,7 @@ def create_letmeship_shipment(pickup_address, delivery_address, shipment_parcel,
|
||||
pickup_contact=None, delivery_contact=None):
|
||||
# Create a transaction at LetMeShip
|
||||
# LetMeShip have limit of 30 characters for Company field
|
||||
enabled = frappe.db.get_single_value('LetMeShip','enabled')
|
||||
api_id = frappe.db.get_single_value('LetMeShip','api_id')
|
||||
api_password = frappe.db.get_single_value('LetMeShip','api_password')
|
||||
api_id, api_password, enabled = frappe.db.get_value('LetMeShip', 'LetMeShip', ['enabled', 'api_password', 'api_id'])
|
||||
if not enabled or not api_id or not api_password:
|
||||
return []
|
||||
|
||||
@@ -162,6 +113,72 @@ def create_letmeship_shipment(pickup_address, delivery_address, shipment_parcel,
|
||||
'Accept': 'application/json',
|
||||
'Access-Control-Allow-Origin': 'string'
|
||||
}
|
||||
payload = generate_payload(
|
||||
pickup_address=pickup_address,
|
||||
pickup_contact=pickup_contact,
|
||||
delivery_address=delivery_address,
|
||||
delivery_contact=delivery_contact,
|
||||
description_of_content=description_of_content,
|
||||
value_of_goods=value_of_goods,
|
||||
parcel_list=parcel_list,
|
||||
pickup_date=pickup_date,
|
||||
service_info=service_info,
|
||||
tracking_notific_email=tracking_notific_email,
|
||||
shipment_notific_email=shipment_notific_email
|
||||
)
|
||||
try:
|
||||
response_data = requests.post(
|
||||
url=url,
|
||||
auth=(api_id, api_password),
|
||||
headers=headers,
|
||||
data=json.dumps(payload)
|
||||
)
|
||||
response_data = json.loads(response_data.text)
|
||||
if 'shipmentId' in response_data:
|
||||
shipment_amount = response_data['service']['priceInfo']['totalPrice']
|
||||
awb_number = ''
|
||||
url = 'https://api.letmeship.com/v1/shipments/{id}'.format(id=response_data['shipmentId'])
|
||||
tracking_response = requests.get(url, auth=(api_id, api_password),headers=headers)
|
||||
tracking_response_data = json.loads(tracking_response.text)
|
||||
if 'trackingData' in tracking_response_data:
|
||||
for parcel in tracking_response_data['trackingData']['parcelList']:
|
||||
if 'awbNumber' in parcel:
|
||||
awb_number = parcel['awbNumber']
|
||||
return {
|
||||
'service_provider': LETMESHIP_PROVIDER,
|
||||
'shipment_id': response_data['shipmentId'],
|
||||
'carrier': service_info['carrier'],
|
||||
'carrier_service': service_info['service_name'],
|
||||
'shipment_amount': shipment_amount,
|
||||
'awb_number': awb_number,
|
||||
}
|
||||
elif 'message' in response_data:
|
||||
frappe.throw(
|
||||
_('Error occurred while creating Shipment: {0}')
|
||||
.format(response_data['message'])
|
||||
)
|
||||
except Exception as exc:
|
||||
frappe.log_error(frappe.get_traceback())
|
||||
frappe.msgprint(
|
||||
_('Error occurred while creating Shipment: {0}')
|
||||
.format(str(exc)),
|
||||
indicator='orange',
|
||||
alert=True
|
||||
)
|
||||
|
||||
def generate_payload(
|
||||
pickup_address,
|
||||
pickup_contact,
|
||||
delivery_address,
|
||||
delivery_contact,
|
||||
description_of_content,
|
||||
value_of_goods,
|
||||
parcel_list,
|
||||
pickup_date,
|
||||
service_info=None,
|
||||
tracking_notific_email=None,
|
||||
shipment_notific_email=None
|
||||
):
|
||||
payload = {
|
||||
'pickupInfo': {
|
||||
'address': {
|
||||
@@ -205,18 +222,6 @@ def create_letmeship_shipment(pickup_address, delivery_address, shipment_parcel,
|
||||
},
|
||||
'email': delivery_contact.email,
|
||||
},
|
||||
'service': {
|
||||
'baseServiceDetails': {
|
||||
'id': service_info['id'],
|
||||
'name': service_info['service_name'],
|
||||
'carrier': service_info['carrier'],
|
||||
'priceInfo': service_info['price_info'],
|
||||
},
|
||||
'supportedExWorkType': [],
|
||||
'messages': [''],
|
||||
'description': '',
|
||||
'serviceInfo': '',
|
||||
},
|
||||
'shipmentDetails': {
|
||||
'contentDescription': description_of_content,
|
||||
'shipmentType': 'PARCEL',
|
||||
@@ -233,10 +238,24 @@ def create_letmeship_shipment(pickup_address, delivery_address, shipment_parcel,
|
||||
'parcelList': parcel_list,
|
||||
'pickupInterval': {
|
||||
'date': pickup_date
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if service_info:
|
||||
payload['service'] = {
|
||||
'baseServiceDetails': {
|
||||
'id': service_info['id'],
|
||||
'name': service_info['service_name'],
|
||||
'carrier': service_info['carrier'],
|
||||
'priceInfo': service_info['price_info'],
|
||||
},
|
||||
'contentDescription': description_of_content,
|
||||
},
|
||||
'shipmentNotification': {
|
||||
'supportedExWorkType': [],
|
||||
'messages': [''],
|
||||
'description': '',
|
||||
'serviceInfo': '',
|
||||
}
|
||||
payload['shipmentNotification'] = {
|
||||
'trackingNotification': {
|
||||
'deliveryNotification': True,
|
||||
'problemNotification': True,
|
||||
@@ -247,77 +266,47 @@ def create_letmeship_shipment(pickup_address, delivery_address, shipment_parcel,
|
||||
'notificationText': '',
|
||||
'emails': [ shipment_notific_email ]
|
||||
}
|
||||
},
|
||||
'labelEmail': True,
|
||||
}
|
||||
}
|
||||
payload['labelEmail'] = True
|
||||
return payload
|
||||
|
||||
def get_letmeship_label(shipment_id):
|
||||
try:
|
||||
response_data = requests.post(
|
||||
url=url,
|
||||
auth=(api_id, api_password),
|
||||
headers=headers,
|
||||
data=json.dumps(payload)
|
||||
# Retrieve shipment label from LetMeShip
|
||||
api_id = frappe.db.get_single_value('LetMeShip','api_id')
|
||||
api_password = frappe.db.get_single_value('LetMeShip','api_password')
|
||||
headers = {
|
||||
'Content-Type': 'application/json',
|
||||
'Accept': 'application/json',
|
||||
'Access-Control-Allow-Origin': 'string'
|
||||
}
|
||||
url = 'https://api.letmeship.com/v1/shipments/{id}/documents?types=LABEL'\
|
||||
.format(id=shipment_id)
|
||||
shipment_label_response = requests.get(
|
||||
url,
|
||||
auth=(api_id,api_password),
|
||||
headers=headers
|
||||
)
|
||||
response_data = json.loads(response_data.text)
|
||||
if 'shipmentId' in response_data:
|
||||
shipment_amount = response_data['service']['priceInfo']['totalPrice']
|
||||
awb_number = ''
|
||||
url = 'https://api.letmeship.com/v1/shipments/{id}'.format(id=response_data['shipmentId'])
|
||||
tracking_response = requests.get(url, auth=(api_id, api_password),headers=headers)
|
||||
tracking_response_data = json.loads(tracking_response.text)
|
||||
if 'trackingData' in tracking_response_data:
|
||||
for parcel in tracking_response_data['trackingData']['parcelList']:
|
||||
if 'awbNumber' in parcel:
|
||||
awb_number = parcel['awbNumber']
|
||||
return {
|
||||
'service_provider': LETMESHIP_PROVIDER,
|
||||
'shipment_id': response_data['shipmentId'],
|
||||
'carrier': service_info['carrier'],
|
||||
'carrier_service': service_info['service_name'],
|
||||
'shipment_amount': shipment_amount,
|
||||
'awb_number': awb_number,
|
||||
}
|
||||
elif 'message' in response_data:
|
||||
shipment_label_response_data = json.loads(shipment_label_response.text)
|
||||
if 'documents' in shipment_label_response_data:
|
||||
for label in shipment_label_response_data['documents']:
|
||||
if 'data' in label:
|
||||
return json.dumps(label['data'])
|
||||
else:
|
||||
frappe.throw(
|
||||
_('Error occurred while creating Shipment: {0}')
|
||||
.format(response_data['message'])
|
||||
_('Error occurred while printing Shipment: {0}')
|
||||
.format(shipment_label_response_data['message'])
|
||||
)
|
||||
except Exception as exc:
|
||||
frappe.log_error(frappe.get_traceback())
|
||||
frappe.msgprint(
|
||||
_('Error occurred while creating Shipment: {0}')
|
||||
_('Error occurred while printing Shipment: {0}')
|
||||
.format(str(exc)),
|
||||
indicator='orange',
|
||||
alert=True
|
||||
)
|
||||
|
||||
|
||||
def get_letmeship_label(shipment_id):
|
||||
# Retrieve shipment label from LetMeShip
|
||||
api_id = frappe.db.get_single_value('LetMeShip','api_id')
|
||||
api_password = frappe.db.get_single_value('LetMeShip','api_password')
|
||||
headers = {
|
||||
'Content-Type': 'application/json',
|
||||
'Accept': 'application/json',
|
||||
'Access-Control-Allow-Origin': 'string'
|
||||
}
|
||||
url = 'https://api.letmeship.com/v1/shipments/{id}/documents?types=LABEL'\
|
||||
.format(id=shipment_id)
|
||||
shipment_label_response = requests.get(
|
||||
url,
|
||||
auth=(api_id,api_password),
|
||||
headers=headers
|
||||
)
|
||||
shipment_label_response_data = json.loads(shipment_label_response.text)
|
||||
if 'documents' in shipment_label_response_data:
|
||||
for label in shipment_label_response_data['documents']:
|
||||
if 'data' in label:
|
||||
return json.dumps(label['data'])
|
||||
else:
|
||||
frappe.throw(
|
||||
_('Error occurred while printing Shipment: {0}')
|
||||
.format(shipment_label_response_data['message'])
|
||||
)
|
||||
|
||||
|
||||
def get_letmeship_tracking_data(shipment_id):
|
||||
# return letmeship tracking data
|
||||
api_id = frappe.db.get_single_value('LetMeShip','api_id')
|
||||
@@ -359,6 +348,7 @@ def get_letmeship_tracking_data(shipment_id):
|
||||
.format(tracking_data['message'])
|
||||
)
|
||||
except Exception as exc:
|
||||
frappe.log_error(frappe.get_traceback())
|
||||
frappe.msgprint(
|
||||
_('Error occurred while updating Shipment: {0}')
|
||||
.format(str(exc)),
|
||||
|
||||
@@ -72,6 +72,7 @@ def get_packlink_available_services(pickup_address, delivery_address, shipment_p
|
||||
|
||||
return available_services
|
||||
except Exception as exc:
|
||||
frappe.log_error(frappe.get_traceback())
|
||||
frappe.msgprint(
|
||||
_('Error occurred on Packlink: {0}')
|
||||
.format(str(exc)), indicator='orange',
|
||||
@@ -152,6 +153,7 @@ def create_packlink_shipment(pickup_address, delivery_address, shipment_parcel,
|
||||
'awb_number': '',
|
||||
}
|
||||
except Exception as exc:
|
||||
frappe.log_error(frappe.get_traceback())
|
||||
frappe.msgprint(
|
||||
_('Error occurred while creating Shipment: {0}')
|
||||
.format(str(exc)),
|
||||
@@ -215,6 +217,7 @@ def get_packlink_tracking_data(shipment_id):
|
||||
'tracking_url': tracking_url
|
||||
}
|
||||
except Exception as exc:
|
||||
frappe.log_error(frappe.get_traceback())
|
||||
frappe.msgprint(_('Error occurred while updating Shipment: {0}').format(
|
||||
str(exc)), indicator='orange', alert=True)
|
||||
return []
|
||||
|
||||
@@ -24,7 +24,7 @@
|
||||
},
|
||||
{
|
||||
"fieldname": "api_secret",
|
||||
"fieldtype": "Data",
|
||||
"fieldtype": "Password",
|
||||
"label": "API Secret",
|
||||
"read_only_depends_on": "eval:doc.enabled == 0"
|
||||
}
|
||||
@@ -32,7 +32,7 @@
|
||||
"index_web_pages_for_search": 1,
|
||||
"issingle": 1,
|
||||
"links": [],
|
||||
"modified": "2020-08-18 09:48:50.836233",
|
||||
"modified": "2020-10-21 10:28:57.710549",
|
||||
"modified_by": "Administrator",
|
||||
"module": "ERPNext Integrations",
|
||||
"name": "SendCloud",
|
||||
|
||||
@@ -16,9 +16,7 @@ class SendCloud(Document):
|
||||
|
||||
def get_sendcloud_available_services(delivery_address, shipment_parcel):
|
||||
# Retrieve rates at SendCloud from specification stated.
|
||||
enabled = frappe.db.get_single_value('SendCloud', 'enabled')
|
||||
api_key = frappe.db.get_single_value('SendCloud', 'api_key')
|
||||
api_secret = frappe.db.get_single_value('SendCloud', 'api_secret')
|
||||
api_key, api_secret, enabled = frappe.db.get_value('SendCloud', 'SendCloud', ['enabled', 'api_key', 'api_secret'])
|
||||
if not enabled or not api_key or not api_secret:
|
||||
return []
|
||||
|
||||
@@ -40,6 +38,7 @@ def get_sendcloud_available_services(delivery_address, shipment_parcel):
|
||||
available_services.append(available_service)
|
||||
return available_services
|
||||
except Exception as exc:
|
||||
frappe.log_error(frappe.get_traceback())
|
||||
frappe.msgprint(_('Error occurred on SendCloud: {0}').format(
|
||||
str(exc)), indicator='orange', alert=True)
|
||||
|
||||
@@ -53,9 +52,7 @@ def create_sendcloud_shipment(
|
||||
value_of_goods
|
||||
):
|
||||
# Create a transaction at SendCloud
|
||||
enabled = frappe.db.get_single_value('SendCloud', 'enabled')
|
||||
api_key = frappe.db.get_single_value('SendCloud', 'api_key')
|
||||
api_secret = frappe.db.get_single_value('SendCloud', 'api_secret')
|
||||
api_key, api_secret, enabled = frappe.db.get_value('SendCloud', 'SendCloud', ['enabled', 'api_key', 'api_secret'])
|
||||
if not enabled or not api_key or not api_secret:
|
||||
return []
|
||||
|
||||
@@ -105,6 +102,7 @@ def create_sendcloud_shipment(
|
||||
'awb_number': awb_number
|
||||
}
|
||||
except Exception as exc:
|
||||
frappe.log_error(frappe.get_traceback())
|
||||
frappe.msgprint(_('Error occurred while creating Shipment: {0}').format(
|
||||
str(exc)), indicator='orange', alert=True)
|
||||
|
||||
@@ -130,17 +128,15 @@ def get_sendcloud_tracking_data(shipment_id):
|
||||
api_key = frappe.db.get_single_value('SendCloud', 'api_key')
|
||||
api_secret = frappe.db.get_single_value('SendCloud', 'api_secret')
|
||||
shipment_id_list = shipment_id.split(', ')
|
||||
tracking_url = ''
|
||||
awb_number = []
|
||||
tracking_status = []
|
||||
tracking_status_info = []
|
||||
tracking_urls = []
|
||||
for ship_id in shipment_id_list:
|
||||
tracking_data_response = \
|
||||
requests.get('https://panel.sendcloud.sc/api/v2/parcels/{id}'.format(id=ship_id), auth=(api_key, api_secret))
|
||||
tracking_data = json.loads(tracking_data_response.text)
|
||||
tracking_url_template = \
|
||||
'<a href="{{ tracking_url }}" target="_blank"><b>{{ _("Click here to Track Shipment") }}</b></a><br>'
|
||||
tracking_url += frappe.render_template(tracking_url_template, {'tracking_url': tracking_data['parcel']['tracking_url']})
|
||||
tracking_urls.append(tracking_data['parcel']['tracking_url'])
|
||||
awb_number.append(tracking_data['parcel']['tracking_number'])
|
||||
tracking_status.append(tracking_data['parcel']['status']['message'])
|
||||
tracking_status_info.append(tracking_data['parcel']['status']['message'])
|
||||
@@ -148,9 +144,10 @@ def get_sendcloud_tracking_data(shipment_id):
|
||||
'awb_number': ', '.join(awb_number),
|
||||
'tracking_status': ', '.join(tracking_status),
|
||||
'tracking_status_info': ', '.join(tracking_status_info),
|
||||
'tracking_url': tracking_url
|
||||
'tracking_url': ', '.join(tracking_urls)
|
||||
}
|
||||
except Exception as exc:
|
||||
frappe.log_error(frappe.get_traceback())
|
||||
frappe.msgprint(_('Error occurred while updating Shipment: {0}').format(
|
||||
str(exc)), indicator='orange', alert=True)
|
||||
|
||||
|
||||
@@ -68,6 +68,4 @@ def get_tracking_url(carrier, tracking_number):
|
||||
url_reference = frappe.get_value('Parcel Service', carrier, 'url_reference')
|
||||
if url_reference:
|
||||
tracking_url = frappe.render_template(url_reference, {'tracking_number': tracking_number})
|
||||
tracking_url_template = '<a href="{{ tracking_url }}" target="_blank"><b>{{ _("Click here to Track Shipment") }}</a></b>'
|
||||
tracking_url = frappe.render_template(tracking_url_template, {'tracking_url': tracking_url})
|
||||
return tracking_url
|
||||
|
||||
Reference in New Issue
Block a user