diff --git a/erpnext/erpnext_integrations/doctype/letmeship/__init__.py b/erpnext/erpnext_integrations/doctype/letmeship/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/erpnext/erpnext_integrations/doctype/letmeship/__init__.py
+++ /dev/null
diff --git a/erpnext/erpnext_integrations/doctype/letmeship/letmeship.js b/erpnext/erpnext_integrations/doctype/letmeship/letmeship.js
deleted file mode 100644
index 1e5e372..0000000
--- a/erpnext/erpnext_integrations/doctype/letmeship/letmeship.js
+++ /dev/null
@@ -1,8 +0,0 @@
-// Copyright (c) 2020, Frappe Technologies Pvt. Ltd. and contributors
-// For license information, please see license.txt
-
-frappe.ui.form.on('LetMeShip', {
-	// refresh: function(frm) {
-
-	// }
-});
diff --git a/erpnext/erpnext_integrations/doctype/letmeship/letmeship.json b/erpnext/erpnext_integrations/doctype/letmeship/letmeship.json
deleted file mode 100644
index 94b001e..0000000
--- a/erpnext/erpnext_integrations/doctype/letmeship/letmeship.json
+++ /dev/null
@@ -1,55 +0,0 @@
-{
- "actions": [],
- "creation": "2020-07-23 10:55:19.669830",
- "doctype": "DocType",
- "editable_grid": 1,
- "engine": "InnoDB",
- "field_order": [
-  "enabled",
-  "api_id",
-  "api_password"
- ],
- "fields": [
-  {
-   "default": "0",
-   "fieldname": "enabled",
-   "fieldtype": "Check",
-   "label": "Enabled"
-  },
-  {
-   "fieldname": "api_id",
-   "fieldtype": "Data",
-   "label": "API ID",
-   "read_only_depends_on": "eval:doc.enabled == 0"
-  },
-  {
-   "fieldname": "api_password",
-   "fieldtype": "Password",
-   "label": "API Password",
-   "read_only_depends_on": "eval:doc.enabled == 0"
-  }
- ],
- "issingle": 1,
- "links": [],
- "modified": "2020-10-21 10:28:37.607717",
- "modified_by": "Administrator",
- "module": "ERPNext Integrations",
- "name": "LetMeShip",
- "owner": "Administrator",
- "permissions": [
-  {
-   "create": 1,
-   "delete": 1,
-   "email": 1,
-   "print": 1,
-   "read": 1,
-   "role": "System Manager",
-   "share": 1,
-   "write": 1
-  }
- ],
- "quick_entry": 1,
- "sort_field": "modified",
- "sort_order": "DESC",
- "track_changes": 1
-}
\ No newline at end of file
diff --git a/erpnext/erpnext_integrations/doctype/letmeship/letmeship.py b/erpnext/erpnext_integrations/doctype/letmeship/letmeship.py
deleted file mode 100644
index 162c1ed..0000000
--- a/erpnext/erpnext_integrations/doctype/letmeship/letmeship.py
+++ /dev/null
@@ -1,386 +0,0 @@
-# -*- coding: utf-8 -*-
-# Copyright (c) 2020, Frappe Technologies and contributors
-# For license information, please see license.txt
-
-from __future__ import unicode_literals
-import requests
-import frappe
-import json
-import re
-from frappe import _
-from frappe.model.document import Document
-from erpnext.erpnext_integrations.utils import get_tracking_url
-
-LETMESHIP_PROVIDER = 'LetMeShip'
-
-class LetMeShip(Document):
-	pass
-
-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.
-	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 []
-
-	set_letmeship_specific_fields(pickup_contact, delivery_contact)
-
-	# LetMeShip have limit of 30 characters for Company field
-	if len(pickup_address.address_title) > 30:
-		pickup_address.address_title = pickup_address.address_title[:30]
-	if len(delivery_address.address_title) > 30:
-		delivery_address.address_title = delivery_address.address_title[:30]
-	parcel_list = get_parcel_list(json.loads(shipment_parcel), description_of_content)
-
-	url = 'https://api.letmeship.com/v1/available'
-	headers = {
-		'Content-Type': 'application/json',
-		'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
-	)
-	try:
-		available_services = []
-		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 'serviceList' in response_data:
-			for response in response_data['serviceList']:
-				available_service = frappe._dict()
-				basic_info = response['baseServiceDetails']
-				price_info = basic_info['priceInfo']
-				available_service.service_provider = LETMESHIP_PROVIDER
-				available_service.id = basic_info['id']
-				available_service.carrier = basic_info['carrier']
-				available_service.carrier_name = basic_info['name']
-				available_service.service_name = ''
-				available_service.is_preferred = 0
-				available_service.real_weight = price_info['realWeight']
-				available_service.total_price = price_info['netPrice']
-				available_service.price_info = price_info
-				available_services.append(available_service)
-			return available_services
-		else:
-			frappe.throw(
-				_('Error occurred while fetching LetMeShip prices: {0}')
-					.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)),
-			indicator='orange',
-			alert=True
-		)
-	return []
-
-
-def create_letmeship_shipment(pickup_address, delivery_address, shipment_parcel, description_of_content,
-	pickup_date, value_of_goods, service_info, shipment_notific_email, tracking_notific_email,
-	pickup_contact=None, delivery_contact=None):
-	# Create a transaction at LetMeShip
-	# LetMeShip have limit of 30 characters for Company field
-	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 []
-
-	set_letmeship_specific_fields(pickup_contact, delivery_contact)
-
-	if len(pickup_address.address_title) > 30:
-		pickup_address.address_title = pickup_address.address_title[:30]
-	if len(delivery_address.address_title) > 30:
-		delivery_address.address_title = delivery_address.address_title[:30]
-
-	parcel_list = get_parcel_list(json.loads(shipment_parcel), description_of_content)
-	url = 'https://api.letmeship.com/v1/shipments'
-	headers = {
-		'Content-Type': 'application/json',
-		'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': {
-				'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
-			}
-		}
-	}
-
-	if service_info:
-		payload['service'] = {
-			'baseServiceDetails': {
-				'id': service_info['id'],
-				'name': service_info['service_name'],
-				'carrier': service_info['carrier'],
-				'priceInfo': service_info['price_info'],
-			},
-			'supportedExWorkType': [],
-			'messages': [''],
-			'description': '',
-			'serviceInfo': '',
-		}
-		payload['shipmentNotification'] = {
-			'trackingNotification': {
-				'deliveryNotification': True,
-				'problemNotification': True,
-				'emails': [tracking_notific_email],
-				'notificationText': '',
-			}, 
-			'recipientNotification': {
-				'notificationText': '',
-				'emails': [ shipment_notific_email ]
-			}
-		}
-		payload['labelEmail'] = True
-	return payload
-
-def get_letmeship_label(shipment_id):
-	try:
-		# 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'])
-			)
-	except Exception as exc:
-		frappe.log_error(frappe.get_traceback())
-		frappe.msgprint(
-			_('Error occurred while printing Shipment: {0}')
-				.format(str(exc)),
-			indicator='orange',
-			alert=True
-		)
-
-
-def get_letmeship_tracking_data(shipment_id):
-	# return letmeship tracking data
-	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'
-	}
-	try:
-		url = 'https://api.letmeship.com/v1/tracking?shipmentid={id}'.format(id=shipment_id)
-		tracking_data_response = requests.get(
-			url,
-			auth=(api_id, api_password),
-			headers=headers
-		)
-		tracking_data = json.loads(tracking_data_response.text)
-		if 'awbNumber' in tracking_data:
-			tracking_status = 'In Progress'
-			if tracking_data['lmsTrackingStatus'].startswith('DELIVERED'):
-				tracking_status = 'Delivered'
-			if tracking_data['lmsTrackingStatus'] == 'RETURNED':
-				tracking_status = 'Returned'
-			if tracking_data['lmsTrackingStatus'] == 'LOST':
-				tracking_status = 'Lost'
-			tracking_url = get_tracking_url(
-				carrier=tracking_data['carrier'],
-				tracking_number=tracking_data['awbNumber']
-			)
-			return {
-				'awb_number': tracking_data['awbNumber'],
-				'tracking_status': tracking_status,
-				'tracking_status_info': tracking_data['lmsTrackingStatus'],
-				'tracking_url': tracking_url,
-			}
-		elif 'message' in tracking_data:
-			frappe.throw(
-				_('Error occurred while updating Shipment: {0}')
-					.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)),
-			indicator='orange',
-			alert=True
-		)
-
-
-def get_parcel_list(shipment_parcel, description_of_content):
-	parcel_list = []
-	for parcel in shipment_parcel:
-		formatted_parcel = {}
-		formatted_parcel['height'] = parcel.get('height')
-		formatted_parcel['width'] = parcel.get('width')
-		formatted_parcel['length'] = parcel.get('length')
-		formatted_parcel['weight'] = parcel.get('weight')
-		formatted_parcel['quantity'] = parcel.get('count')
-		formatted_parcel['contentDescription'] = description_of_content
-		parcel_list.append(formatted_parcel)
-	return parcel_list
-
-def set_letmeship_specific_fields(pickup_contact, delivery_contact):
-	pickup_contact.phone_prefix = pickup_contact.phone[:3]
-	pickup_contact.phone = re.sub('[^A-Za-z0-9]+', '', pickup_contact.phone[3:])
-
-	pickup_contact.title = 'MS'
-	if pickup_contact.gender == 'Male':
-		pickup_contact.title = 'MR'
-
-	delivery_contact.phone_prefix = delivery_contact.phone[:3]
-	delivery_contact.phone = re.sub('[^A-Za-z0-9]+', '', delivery_contact.phone[3:])
-
-	delivery_contact.title = 'MS'
-	if delivery_contact.gender == 'Male':
-		delivery_contact.title = 'MR'
\ No newline at end of file
diff --git a/erpnext/erpnext_integrations/doctype/letmeship/test_letmeship.py b/erpnext/erpnext_integrations/doctype/letmeship/test_letmeship.py
deleted file mode 100644
index 3439e4f..0000000
--- a/erpnext/erpnext_integrations/doctype/letmeship/test_letmeship.py
+++ /dev/null
@@ -1,10 +0,0 @@
-# -*- coding: utf-8 -*-
-# Copyright (c) 2020, Frappe Technologies Pvt. Ltd. and Contributors
-# See license.txt
-from __future__ import unicode_literals
-
-# import frappe
-import unittest
-
-class TestLetMeShip(unittest.TestCase):
-	pass
diff --git a/erpnext/erpnext_integrations/doctype/packlink/__init__.py b/erpnext/erpnext_integrations/doctype/packlink/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/erpnext/erpnext_integrations/doctype/packlink/__init__.py
+++ /dev/null
diff --git a/erpnext/erpnext_integrations/doctype/packlink/packlink.js b/erpnext/erpnext_integrations/doctype/packlink/packlink.js
deleted file mode 100644
index da86458..0000000
--- a/erpnext/erpnext_integrations/doctype/packlink/packlink.js
+++ /dev/null
@@ -1,8 +0,0 @@
-// Copyright (c) 2020, Frappe Technologies Pvt. Ltd. and contributors
-// For license information, please see license.txt
-
-frappe.ui.form.on('Packlink', {
-	// refresh: function(frm) {
-
-	// }
-});
diff --git a/erpnext/erpnext_integrations/doctype/packlink/packlink.json b/erpnext/erpnext_integrations/doctype/packlink/packlink.json
deleted file mode 100644
index a56595e..0000000
--- a/erpnext/erpnext_integrations/doctype/packlink/packlink.json
+++ /dev/null
@@ -1,48 +0,0 @@
-{
- "actions": [],
- "creation": "2020-07-22 10:45:17.672439",
- "doctype": "DocType",
- "editable_grid": 1,
- "engine": "InnoDB",
- "field_order": [
-  "enabled",
-  "api_key"
- ],
- "fields": [
-  {
-   "default": "0",
-   "fieldname": "enabled",
-   "fieldtype": "Check",
-   "label": "Enabled"
-  },
-  {
-   "fieldname": "api_key",
-   "fieldtype": "Data",
-   "label": "API Key",
-   "read_only_depends_on": "eval:doc.enabled == 0"
-  }
- ],
- "issingle": 1,
- "links": [],
- "modified": "2020-08-05 16:33:59.720980",
- "modified_by": "Administrator",
- "module": "ERPNext Integrations",
- "name": "Packlink",
- "owner": "Administrator",
- "permissions": [
-  {
-   "create": 1,
-   "delete": 1,
-   "email": 1,
-   "print": 1,
-   "read": 1,
-   "role": "System Manager",
-   "share": 1,
-   "write": 1
-  }
- ],
- "quick_entry": 1,
- "sort_field": "modified",
- "sort_order": "DESC",
- "track_changes": 1
-}
\ No newline at end of file
diff --git a/erpnext/erpnext_integrations/doctype/packlink/packlink.py b/erpnext/erpnext_integrations/doctype/packlink/packlink.py
deleted file mode 100644
index 1db08c3..0000000
--- a/erpnext/erpnext_integrations/doctype/packlink/packlink.py
+++ /dev/null
@@ -1,240 +0,0 @@
-# -*- coding: utf-8 -*-
-# Copyright (c) 2020, Frappe Technologies and contributors
-# For license information, please see license.txt
-
-from __future__ import unicode_literals
-import json
-import frappe
-import requests
-from frappe import _
-from frappe.model.document import Document
-from erpnext.erpnext_integrations.utils import get_tracking_url
-
-PACKLINK_PROVIDER = 'Packlink'
-
-class Packlink(Document):
-	pass
-
-def get_packlink_available_services(pickup_address, delivery_address, shipment_parcel,pickup_date):
-	# Retrieve rates at PackLink from specification stated.
-	from_zip = pickup_address.pincode
-	from_country_code = pickup_address.country_code
-	to_zip = delivery_address.pincode
-	to_country_code = delivery_address.country_code
-	shipment_parcel_params = ''
-	parcel_list = packlink_get_parcel_list(json.loads(shipment_parcel))
-	for (index, parcel) in enumerate(parcel_list):
-		shipment_parcel_params += 'packages[{index}][height]={height}&packages[{index}][length]={length}&packages[{index}][weight]={weight}&packages[{index}][width]={width}&'.format(
-			index=index,
-			height=parcel['height'],
-			length=parcel['length'],
-			weight=parcel['weight'],
-			width=parcel['width']
-		)
-	url = 'https://api.packlink.com/v1/services?from[country]={}&from[zip]={}&to[country]={}&to[zip]={}&{}sortBy=totalPrice&source=PRO'.format(
-		from_country_code,
-		from_zip,
-		to_country_code,
-		to_zip,
-		shipment_parcel_params
-	)
-	api_key = frappe.db.get_single_value('Packlink', 'api_key')
-	enabled = frappe.db.get_single_value('Packlink', 'enabled')
-	if not api_key or not enabled:
-		return []
-	try:
-		responses = requests.get(url, headers={'Authorization': api_key})
-		responses_dict = json.loads(responses.text)
-		# If an error occured on the api. Show the error message
-		if 'messages' in responses_dict:
-			frappe.msgprint(
-				_('Packlink: {0}'
-					.format(str(responses_dict['messages'][0]['message']))
-				),
-				indicator='orange',
-				alert=True
-			)
-		available_services = []
-		for response in responses_dict:
-			if parse_pickup_date(pickup_date) \
-					in response['available_dates'].keys():
-				available_service = frappe._dict()
-				available_service.service_provider = PACKLINK_PROVIDER
-				available_service.carrier = response['carrier_name']
-				available_service.carrier_name = response['name']
-				available_service.service_name = ''
-				available_service.is_preferred = 0
-				available_service.total_price = response['price']['base_price']
-				available_service.actual_price = response['price']['total_price']
-				available_service.service_id = response['id']
-				available_service.available_dates = response['available_dates']
-				available_services.append(available_service)
-
-		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',
-			alert=True
-		)
-	return []
-
-
-def create_packlink_shipment(pickup_address, delivery_address, shipment_parcel,
-	description_of_content, pickup_date, value_of_goods, pickup_contact,
-	delivery_contact, service_info):
-	# Create a transaction at PackLink
-	enabled = frappe.db.get_single_value('Packlink', 'enabled')
-	if not enabled:
-		frappe.throw(_('Packlink integration is not enabled'))
-	api_key = frappe.db.get_single_value('Packlink', 'api_key')
-	from_country_code = pickup_address.country_code
-	to_country_code = delivery_address.country_code
-	data = {
-		'additional_data': {
-			'postal_zone_id_from': '',
-			'postal_zone_name_from': pickup_address.country,
-			'postal_zone_id_to': '',
-			'postal_zone_name_to': delivery_address.country,
-		},
-		'collection_date': parse_pickup_date(pickup_date),
-		'collection_time': '',
-		'content': description_of_content,
-		'contentvalue': value_of_goods,
-		'content_second_hand': False,
-		'from': {
-			'city': pickup_address.city,
-			'company': pickup_address.address_title,
-			'country': from_country_code,
-			'email': pickup_contact.email,
-			'name': pickup_contact.first_name,
-			'phone': pickup_contact.phone,
-			'state': pickup_address.country,
-			'street1': pickup_address.address_line1,
-			'street2': pickup_address.address_line2,
-			'surname': pickup_contact.last_name,
-			'zip_code': pickup_address.pincode,
-		},
-		'insurance': {'amount': 0, 'insurance_selected': False},
-		'price': {},
-		'packages': packlink_get_parcel_list(json.loads(shipment_parcel)),
-		'service_id': service_info['service_id'],
-		'to': {
-			'city': delivery_address.city,
-			'company': delivery_address.address_title,
-			'country': to_country_code,
-			'email': delivery_contact.email,
-			'name': delivery_contact.first_name,
-			'phone': delivery_contact.phone,
-			'state': delivery_address.country,
-			'street1': delivery_address.address_line1,
-			'street2': delivery_address.address_line2,
-			'surname': delivery_contact.last_name,
-			'zip_code': delivery_address.pincode,
-		},
-	}
-
-	url = 'https://api.packlink.com/v1/shipments'
-	headers = {
-		'Authorization': api_key,
-		'Content-Type': 'application/json'
-	}
-	try:
-		response_data = requests.post(url, json=data, headers=headers)
-		response_data = json.loads(response_data.text)
-		if 'reference' in response_data:
-			return {
-				'service_provider': PACKLINK_PROVIDER,
-				'shipment_id': response_data['reference'],
-				'carrier': service_info['carrier'],
-				'carrier_service': service_info['service_name'],
-				'shipment_amount': service_info['actual_price'],
-				'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
-		)
-
-
-def get_packlink_label(shipment_id):
-	# Retrieve shipment label from PackLink
-	enabled = frappe.db.get_single_value('Packlink', 'enabled')
-	if not enabled:
-		frappe.throw(_('Packlink integration is not enabled'))
-	api_key = frappe.db.get_single_value('Packlink', 'api_key')
-	headers = {
-		'Authorization': api_key,
-		'Content-Type': 'application/json'
-	}
-	shipment_label_response = requests.get(
-		'https://api.packlink.com/v1/shipments/{id}/labels'.format(id=shipment_id),
-		headers=headers
-	)
-	shipment_label = json.loads(shipment_label_response.text)
-	if shipment_label:
-		return shipment_label
-	else:
-		frappe.msgprint(_('Shipment ID not found'))
-
-
-def get_packlink_tracking_data(shipment_id):
-	# Get Packlink Tracking Info
-	enabled = frappe.db.get_single_value('Packlink', 'enabled')
-	if not enabled:
-		frappe.throw(_('Packlink integration is not enabled'))
-	api_key = frappe.db.get_single_value('Packlink', 'api_key')
-	headers = {
-		'Authorization': api_key,
-		'Content-Type': 'application/json'
-	}
-	try:
-		url = 'https://api.packlink.com/v1/shipments/{id}'.format(id=shipment_id)
-		tracking_data_response = requests.get(url, headers=headers)
-		tracking_data = json.loads(tracking_data_response.text)
-		if 'trackings' in tracking_data:
-			tracking_status = 'In Progress'
-			if tracking_data['state'] == 'DELIVERED':
-				tracking_status = 'Delivered'
-			if tracking_data['state'] == 'RETURNED':
-				tracking_status = 'Returned'
-			if tracking_data['state'] == 'LOST':
-				tracking_status = 'Lost'
-			awb_number = None if not tracking_data['trackings'] else tracking_data['trackings'][0]
-			tracking_url = get_tracking_url(
-				carrier=tracking_data['carrier'],
-				tracking_number=awb_number
-			)
-			return {
-				'awb_number': awb_number,
-				'tracking_status': tracking_status,
-				'tracking_status_info': tracking_data['state'],
-				'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 []
-
-
-def packlink_get_parcel_list(shipment_parcel):
-	parcel_list = []
-	for parcel in shipment_parcel:
-		for count in range(parcel.get('count')):
-			formatted_parcel = {}
-			formatted_parcel['height'] = parcel.get('height')
-			formatted_parcel['width'] = parcel.get('width')
-			formatted_parcel['length'] = parcel.get('length')
-			formatted_parcel['weight'] = parcel.get('weight')
-			parcel_list.append(formatted_parcel)
-	return parcel_list
-
-
-def parse_pickup_date(pickup_date):
-	return pickup_date.replace('-', '/')
\ No newline at end of file
diff --git a/erpnext/erpnext_integrations/doctype/packlink/test_packlink.py b/erpnext/erpnext_integrations/doctype/packlink/test_packlink.py
deleted file mode 100644
index 106ae51..0000000
--- a/erpnext/erpnext_integrations/doctype/packlink/test_packlink.py
+++ /dev/null
@@ -1,10 +0,0 @@
-# -*- coding: utf-8 -*-
-# Copyright (c) 2020, Frappe Technologies Pvt. Ltd. and Contributors
-# See license.txt
-from __future__ import unicode_literals
-
-# import frappe
-import unittest
-
-class TestPacklink(unittest.TestCase):
-	pass
diff --git a/erpnext/erpnext_integrations/doctype/sendcloud/__init__.py b/erpnext/erpnext_integrations/doctype/sendcloud/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/erpnext/erpnext_integrations/doctype/sendcloud/__init__.py
+++ /dev/null
diff --git a/erpnext/erpnext_integrations/doctype/sendcloud/sendcloud.js b/erpnext/erpnext_integrations/doctype/sendcloud/sendcloud.js
deleted file mode 100644
index 3b85236..0000000
--- a/erpnext/erpnext_integrations/doctype/sendcloud/sendcloud.js
+++ /dev/null
@@ -1,8 +0,0 @@
-// Copyright (c) 2020, Frappe Technologies Pvt. Ltd. and contributors
-// For license information, please see license.txt
-
-frappe.ui.form.on('SendCloud', {
-	// refresh: function(frm) {
-
-	// }
-});
diff --git a/erpnext/erpnext_integrations/doctype/sendcloud/sendcloud.json b/erpnext/erpnext_integrations/doctype/sendcloud/sendcloud.json
deleted file mode 100644
index 37b6898..0000000
--- a/erpnext/erpnext_integrations/doctype/sendcloud/sendcloud.json
+++ /dev/null
@@ -1,56 +0,0 @@
-{
- "actions": [],
- "creation": "2020-08-18 09:48:50.836233",
- "doctype": "DocType",
- "editable_grid": 1,
- "engine": "InnoDB",
- "field_order": [
-  "enabled",
-  "api_key",
-  "api_secret"
- ],
- "fields": [
-  {
-   "default": "0",
-   "fieldname": "enabled",
-   "fieldtype": "Check",
-   "label": "Enabled"
-  },
-  {
-   "fieldname": "api_key",
-   "fieldtype": "Data",
-   "label": "API Key",
-   "read_only_depends_on": "eval:doc.enabled == 0"
-  },
-  {
-   "fieldname": "api_secret",
-   "fieldtype": "Password",
-   "label": "API Secret",
-   "read_only_depends_on": "eval:doc.enabled == 0"
-  }
- ],
- "index_web_pages_for_search": 1,
- "issingle": 1,
- "links": [],
- "modified": "2020-10-21 10:28:57.710549",
- "modified_by": "Administrator",
- "module": "ERPNext Integrations",
- "name": "SendCloud",
- "owner": "Administrator",
- "permissions": [
-  {
-   "create": 1,
-   "delete": 1,
-   "email": 1,
-   "print": 1,
-   "read": 1,
-   "role": "System Manager",
-   "share": 1,
-   "write": 1
-  }
- ],
- "quick_entry": 1,
- "sort_field": "modified",
- "sort_order": "DESC",
- "track_changes": 1
-}
\ No newline at end of file
diff --git a/erpnext/erpnext_integrations/doctype/sendcloud/sendcloud.py b/erpnext/erpnext_integrations/doctype/sendcloud/sendcloud.py
deleted file mode 100644
index d30af15..0000000
--- a/erpnext/erpnext_integrations/doctype/sendcloud/sendcloud.py
+++ /dev/null
@@ -1,168 +0,0 @@
-# -*- coding: utf-8 -*-
-# Copyright (c) 2020, Frappe Technologies Pvt. Ltd. and contributors
-# For license information, please see license.txt
-
-from __future__ import unicode_literals
-import requests
-import frappe
-import json
-from frappe import _
-from frappe.model.document import Document
-
-SENDCLOUD_PROVIDER = 'SendCloud'
-
-class SendCloud(Document):
-	pass
-
-def get_sendcloud_available_services(delivery_address, shipment_parcel):
-	# Retrieve rates at SendCloud from specification stated.
-	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 []
-
-	try:
-		url = 'https://panel.sendcloud.sc/api/v2/shipping_methods'
-		responses = requests.get(url, auth=(api_key, api_secret))
-		responses_dict = json.loads(responses.text)
-
-		available_services = []
-		for service in responses_dict['shipping_methods']:
-			for country in service['countries']:
-				if country['iso_2'] == delivery_address.country_code:
-					available_service = frappe._dict()
-					available_service.service_provider = 'SendCloud'
-					available_service.carrier = service['carrier']
-					available_service.service_name = service['name']
-					available_service.total_price = total_parcel_price(country['price'], json.loads(shipment_parcel))
-					available_service.service_id = service['id']
-					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)
-
-def create_sendcloud_shipment(
-	shipment,
-	delivery_address,
-	delivery_contact,
-	service_info,
-	shipment_parcel,
-	description_of_content,
-	value_of_goods
-):
-	# Create a transaction at SendCloud
-	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 []
-
-	parcels = []
-	for i, parcel in enumerate(json.loads(shipment_parcel), start=1):
-		parcel_data = {
-			'name': "{} {}".format(delivery_contact.first_name, delivery_contact.last_name),
-			'company_name': delivery_address.address_title,
-			'address': delivery_address.address_line1,
-			'address_2': delivery_address.address_line2 or '',
-			'city': delivery_address.city,
-			'postal_code': delivery_address.pincode,
-			'telephone': delivery_contact.phone,
-			'request_label': True,
-			'email': delivery_contact.email,
-			'data': [],
-			'country': delivery_address.country_code,
-			'shipment': {
-				'id': service_info['service_id']
-			},
-			'order_number': "{}-{}".format(shipment, i),
-			'external_reference': "{}-{}".format(shipment, i),
-			'weight': parcel.get('weight'),
-			'parcel_items': get_parcel_items(parcel, description_of_content, value_of_goods)
-		}
-		parcels.append(parcel_data)
-	data = {
-		'parcels': parcels
-	}
-	try:
-		url = 'https://panel.sendcloud.sc/api/v2/parcels?errors=verbose'
-		response_data = requests.post(url, json=data, auth=(api_key, api_secret))
-		response_data = json.loads(response_data.text)
-		if 'failed_parcels' in response_data:
-			frappe.msgprint(_('Error occurred while creating Shipment: {0}'
-									).format(response_data['failed_parcels'][0]['errors']), indicator='orange',
-								alert=True)
-		else:
-			shipment_id = ', '.join([str(x['id']) for x in response_data['parcels']])
-			awb_number = ', '.join([str(x['tracking_number']) for x in response_data['parcels']])
-			return {
-				'service_provider': 'SendCloud',
-				'shipment_id': shipment_id,
-				'carrier': service_info['carrier'],
-				'carrier_service': service_info['service_name'],
-				'shipment_amount': service_info['total_price'],
-				'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)
-
-def get_sendcloud_label(shipment_id):
-	# Retrieve shipment label from SendCloud
-	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(', ')
-	label_urls = []
-	for ship_id in shipment_id_list:
-		shipment_label_response = \
-			requests.get('https://panel.sendcloud.sc/api/v2/labels/{id}'.format(id=ship_id), auth=(api_key, api_secret))
-		shipment_label = json.loads(shipment_label_response.text)
-		label_urls.append(shipment_label['label']['label_printer'])
-	if len(label_urls):
-		return label_urls
-	else:
-		frappe.msgprint(_('Shipment ID not found'))
-
-def get_sendcloud_tracking_data(shipment_id):
-	# return SendCloud tracking data 
-	try:
-		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(', ')
-		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_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'])
-		return {
-			'awb_number': ', '.join(awb_number),
-			'tracking_status': ', '.join(tracking_status),
-			'tracking_status_info': ', '.join(tracking_status_info),
-			'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)
-
-def total_parcel_price(parcel_price, shipment_parcel):
-	count = 0
-	for parcel in shipment_parcel:
-		count += parcel.get('count')
-	return parcel_price * count
-
-def get_parcel_items(parcel, description_of_content, value_of_goods):
-	parcel_list = []
-	formatted_parcel = {}
-	formatted_parcel['description'] = description_of_content
-	formatted_parcel['quantity'] = parcel.get('count')
-	formatted_parcel['weight'] = parcel.get('weight')
-	formatted_parcel['value'] = value_of_goods
-	parcel_list.append(formatted_parcel)
-	return parcel_list
\ No newline at end of file
diff --git a/erpnext/erpnext_integrations/doctype/sendcloud/test_sendcloud.py b/erpnext/erpnext_integrations/doctype/sendcloud/test_sendcloud.py
deleted file mode 100644
index 5cbe80e..0000000
--- a/erpnext/erpnext_integrations/doctype/sendcloud/test_sendcloud.py
+++ /dev/null
@@ -1,10 +0,0 @@
-# -*- coding: utf-8 -*-
-# Copyright (c) 2020, Frappe Technologies Pvt. Ltd. and Contributors
-# See license.txt
-from __future__ import unicode_literals
-
-# import frappe
-import unittest
-
-class TestSendCloud(unittest.TestCase):
-	pass
diff --git a/erpnext/stock/doctype/parcel_service/__init__.py b/erpnext/stock/doctype/parcel_service/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/erpnext/stock/doctype/parcel_service/__init__.py
+++ /dev/null
diff --git a/erpnext/stock/doctype/parcel_service/parcel_service.js b/erpnext/stock/doctype/parcel_service/parcel_service.js
deleted file mode 100644
index 43b8ed5..0000000
--- a/erpnext/stock/doctype/parcel_service/parcel_service.js
+++ /dev/null
@@ -1,8 +0,0 @@
-// Copyright (c) 2020, Frappe Technologies Pvt. Ltd. and contributors
-// For license information, please see license.txt
-
-frappe.ui.form.on('Parcel Service', {
-	// refresh: function(frm) {
-
-	// }
-});
diff --git a/erpnext/stock/doctype/parcel_service/parcel_service.json b/erpnext/stock/doctype/parcel_service/parcel_service.json
deleted file mode 100644
index 9960acf..0000000
--- a/erpnext/stock/doctype/parcel_service/parcel_service.json
+++ /dev/null
@@ -1,56 +0,0 @@
-{
- "actions": [],
- "allow_rename": 1,
- "autoname": "field:parcel_service_name",
- "creation": "2020-07-23 10:35:38.211715",
- "doctype": "DocType",
- "editable_grid": 1,
- "engine": "InnoDB",
- "field_order": [
-  "parcel_service_name",
-  "parcel_service_code",
-  "url_reference"
- ],
- "fields": [
-  {
-   "fieldname": "parcel_service_name",
-   "fieldtype": "Data",
-   "label": "Parcel Service Name",
-   "unique": 1
-  },
-  {
-   "fieldname": "parcel_service_code",
-   "fieldtype": "Data",
-   "label": "Parcel Service Code"
-  },
-  {
-   "fieldname": "url_reference",
-   "fieldtype": "Data",
-   "label": "URL Reference"
-  }
- ],
- "links": [],
- "modified": "2020-07-23 10:35:38.211715",
- "modified_by": "Administrator",
- "module": "Stock",
- "name": "Parcel Service",
- "owner": "Administrator",
- "permissions": [
-  {
-   "create": 1,
-   "delete": 1,
-   "email": 1,
-   "export": 1,
-   "print": 1,
-   "read": 1,
-   "report": 1,
-   "role": "System Manager",
-   "share": 1,
-   "write": 1
-  }
- ],
- "quick_entry": 1,
- "sort_field": "modified",
- "sort_order": "DESC",
- "track_changes": 1
-}
\ No newline at end of file
diff --git a/erpnext/stock/doctype/parcel_service/parcel_service.py b/erpnext/stock/doctype/parcel_service/parcel_service.py
deleted file mode 100644
index e46ac76..0000000
--- a/erpnext/stock/doctype/parcel_service/parcel_service.py
+++ /dev/null
@@ -1,10 +0,0 @@
-# -*- coding: utf-8 -*-
-# Copyright (c) 2020, Frappe Technologies Pvt. Ltd. and contributors
-# For license information, please see license.txt
-
-from __future__ import unicode_literals
-# import frappe
-from frappe.model.document import Document
-
-class ParcelService(Document):
-	pass
diff --git a/erpnext/stock/doctype/parcel_service/test_parcel_service.py b/erpnext/stock/doctype/parcel_service/test_parcel_service.py
deleted file mode 100644
index c2f96d9..0000000
--- a/erpnext/stock/doctype/parcel_service/test_parcel_service.py
+++ /dev/null
@@ -1,10 +0,0 @@
-# -*- coding: utf-8 -*-
-# Copyright (c) 2020, Frappe Technologies Pvt. Ltd. and Contributors
-# See license.txt
-from __future__ import unicode_literals
-
-# import frappe
-import unittest
-
-class TestParcelService(unittest.TestCase):
-	pass
diff --git a/erpnext/stock/doctype/parcel_service_type/__init__.py b/erpnext/stock/doctype/parcel_service_type/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/erpnext/stock/doctype/parcel_service_type/__init__.py
+++ /dev/null
diff --git a/erpnext/stock/doctype/parcel_service_type/parcel_service_type.js b/erpnext/stock/doctype/parcel_service_type/parcel_service_type.js
deleted file mode 100644
index 31d5453..0000000
--- a/erpnext/stock/doctype/parcel_service_type/parcel_service_type.js
+++ /dev/null
@@ -1,12 +0,0 @@
-// Copyright (c) 2020, Frappe Technologies Pvt. Ltd. and contributors
-// For license information, please see license.txt
-
-frappe.ui.form.on('Parcel Service Type Alias', {
-	parcel_type_alias: function(frm, cdt, cdn) {
-		let row = locals[cdt][cdn];
-		if (row.parcel_type_alias) {
-			frappe.model.set_value(cdt, cdn, 'parcel_service', frm.doc.parcel_service);
-			frm.refresh_field('parcel_service_type_alias');
-		}
-	}
-});
diff --git a/erpnext/stock/doctype/parcel_service_type/parcel_service_type.json b/erpnext/stock/doctype/parcel_service_type/parcel_service_type.json
deleted file mode 100644
index 3c0c4d5..0000000
--- a/erpnext/stock/doctype/parcel_service_type/parcel_service_type.json
+++ /dev/null
@@ -1,89 +0,0 @@
-{
- "actions": [],
- "allow_rename": 1,
- "autoname": "format: {parcel_service} - {parcel_service_type}",
- "creation": "2020-07-23 10:47:43.794083",
- "doctype": "DocType",
- "editable_grid": 1,
- "engine": "InnoDB",
- "field_order": [
-  "parcel_service",
-  "parcel_service_type",
-  "description",
-  "section_break_4",
-  "parcel_service_type_alias",
-  "column_break_6",
-  "section_break_7",
-  "show_in_preferred_services_list"
- ],
- "fields": [
-  {
-   "fieldname": "parcel_service",
-   "fieldtype": "Link",
-   "in_list_view": 1,
-   "label": "Parcel Service",
-   "options": "Parcel Service",
-   "reqd": 1
-  },
-  {
-   "fieldname": "parcel_service_type",
-   "fieldtype": "Data",
-   "label": "Parcel Service Type",
-   "reqd": 1,
-   "set_only_once": 1
-  },
-  {
-   "fieldname": "description",
-   "fieldtype": "Small Text",
-   "label": "Description"
-  },
-  {
-   "fieldname": "section_break_4",
-   "fieldtype": "Section Break"
-  },
-  {
-   "fieldname": "parcel_service_type_alias",
-   "fieldtype": "Table",
-   "label": "Parcel Service Type Alias",
-   "options": "Parcel Service Type Alias"
-  },
-  {
-   "fieldname": "column_break_6",
-   "fieldtype": "Column Break"
-  },
-  {
-   "fieldname": "section_break_7",
-   "fieldtype": "Section Break"
-  },
-  {
-   "default": "0",
-   "fieldname": "show_in_preferred_services_list",
-   "fieldtype": "Check",
-   "label": "Show in Preferred Services List"
-  }
- ],
- "links": [],
- "modified": "2020-07-23 10:47:43.794083",
- "modified_by": "Administrator",
- "module": "Stock",
- "name": "Parcel Service Type",
- "owner": "Administrator",
- "permissions": [
-  {
-   "create": 1,
-   "delete": 1,
-   "email": 1,
-   "export": 1,
-   "print": 1,
-   "read": 1,
-   "report": 1,
-   "role": "System Manager",
-   "share": 1,
-   "write": 1
-  }
- ],
- "quick_entry": 1,
- "sort_field": "modified",
- "sort_order": "DESC",
- "track_changes": 1
-}
\ No newline at end of file
diff --git a/erpnext/stock/doctype/parcel_service_type/parcel_service_type.py b/erpnext/stock/doctype/parcel_service_type/parcel_service_type.py
deleted file mode 100644
index b55528c..0000000
--- a/erpnext/stock/doctype/parcel_service_type/parcel_service_type.py
+++ /dev/null
@@ -1,22 +0,0 @@
-# -*- coding: utf-8 -*-
-# Copyright (c) 2020, Frappe Technologies Pvt. Ltd. and contributors
-# For license information, please see license.txt
-
-from __future__ import unicode_literals
-import frappe
-from frappe.model.document import Document
-
-class ParcelServiceType(Document):
-	pass
-
-def match_parcel_service_type_alias(parcel_service_type, parcel_service):
-	# Match and return Parcel Service Type Alias to Parcel Service Type if exists.
-	if frappe.db.exists('Parcel Service', parcel_service):
-		matched_parcel_service_type = \
-			frappe.db.get_value('Parcel Service Type Alias', {
-				'parcel_type_alias': parcel_service_type,
-				'parcel_service': parcel_service
-			}, 'parent')
-		if matched_parcel_service_type:
-			parcel_service_type = matched_parcel_service_type
-	return parcel_service_type
diff --git a/erpnext/stock/doctype/parcel_service_type/test_parcel_service_type.py b/erpnext/stock/doctype/parcel_service_type/test_parcel_service_type.py
deleted file mode 100644
index e214264..0000000
--- a/erpnext/stock/doctype/parcel_service_type/test_parcel_service_type.py
+++ /dev/null
@@ -1,10 +0,0 @@
-# -*- coding: utf-8 -*-
-# Copyright (c) 2020, Frappe Technologies Pvt. Ltd. and Contributors
-# See license.txt
-from __future__ import unicode_literals
-
-# import frappe
-import unittest
-
-class TestParcelServiceType(unittest.TestCase):
-	pass
diff --git a/erpnext/stock/doctype/parcel_service_type_alias/__init__.py b/erpnext/stock/doctype/parcel_service_type_alias/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/erpnext/stock/doctype/parcel_service_type_alias/__init__.py
+++ /dev/null
diff --git a/erpnext/stock/doctype/parcel_service_type_alias/parcel_service_type_alias.json b/erpnext/stock/doctype/parcel_service_type_alias/parcel_service_type_alias.json
deleted file mode 100644
index 8e7731e..0000000
--- a/erpnext/stock/doctype/parcel_service_type_alias/parcel_service_type_alias.json
+++ /dev/null
@@ -1,41 +0,0 @@
-{
- "actions": [],
- "creation": "2020-07-23 10:47:23.626510",
- "doctype": "DocType",
- "editable_grid": 1,
- "engine": "InnoDB",
- "field_order": [
-  "parcel_service",
-  "parcel_type_alias"
- ],
- "fields": [
-  {
-   "fieldname": "parcel_service",
-   "fieldtype": "Link",
-   "hidden": 1,
-   "in_list_view": 1,
-   "label": "Parcel Service",
-   "options": "Parcel Service",
-   "read_only": 1
-  },
-  {
-   "fieldname": "parcel_type_alias",
-   "fieldtype": "Data",
-   "in_list_view": 1,
-   "label": "Parcel Type Alias",
-   "reqd": 1
-  }
- ],
- "istable": 1,
- "links": [],
- "modified": "2020-07-23 10:47:23.626510",
- "modified_by": "Administrator",
- "module": "Stock",
- "name": "Parcel Service Type Alias",
- "owner": "Administrator",
- "permissions": [],
- "quick_entry": 1,
- "sort_field": "modified",
- "sort_order": "DESC",
- "track_changes": 1
-}
\ No newline at end of file
diff --git a/erpnext/stock/doctype/parcel_service_type_alias/parcel_service_type_alias.py b/erpnext/stock/doctype/parcel_service_type_alias/parcel_service_type_alias.py
deleted file mode 100644
index fd0a7d8..0000000
--- a/erpnext/stock/doctype/parcel_service_type_alias/parcel_service_type_alias.py
+++ /dev/null
@@ -1,10 +0,0 @@
-# -*- coding: utf-8 -*-
-# Copyright (c) 2020, Frappe Technologies Pvt. Ltd. and contributors
-# For license information, please see license.txt
-
-from __future__ import unicode_literals
-# import frappe
-from frappe.model.document import Document
-
-class ParcelServiceTypeAlias(Document):
-	pass
diff --git a/erpnext/stock/doctype/shipment/shipment.js b/erpnext/stock/doctype/shipment/shipment.js
index fc0b05f..aa792a4 100644
--- a/erpnext/stock/doctype/shipment/shipment.js
+++ b/erpnext/stock/doctype/shipment/shipment.js
@@ -114,26 +114,6 @@
 		});
 	},
 	refresh: function(frm) {
-		if (frm.doc.docstatus === 1 && !frm.doc.shipment_id) {
-			frm.add_custom_button(__('Fetch Shipping Rates'), function() {
-				return frm.events.fetch_shipping_rates(frm);
-			});
-		}
-		if (frm.doc.shipment_id) {
-			frm.add_custom_button(__('Print Shipping Label'), function() {
-				return frm.events.print_shipping_label(frm);
-			}, __('Tools'));
-			if (frm.doc.tracking_status != 'Delivered') {
-				frm.add_custom_button(__('Update Tracking'), function() {
-					return frm.events.update_tracking(frm, frm.doc.service_provider, frm.doc.shipment_id);
-				}, __('Tools'));
-
-				frm.add_custom_button(__('Track Status'), function() {
-					const urls = frm.doc.tracking_url.split(', ');
-					urls.forEach(url => window.open(url));
-				}, __('View'));
-			}
-		}
 		$('div[data-fieldname=pickup_address] > div > .clearfix').hide();
 		$('div[data-fieldname=pickup_contact] > div > .clearfix').hide();
 		$('div[data-fieldname=delivery_address] > div > .clearfix').hide();
@@ -598,90 +578,6 @@
 			frm.refresh_fields("pickup_from_send_shipping_notification");
 			frm.refresh_fields("pickup_from_subscribe_to_status_updates");
 		}
-	},
-	fetch_shipping_rates: function(frm) {
-		if (!frm.doc.shipment_id) {
-			frappe.call({
-				method: "erpnext.stock.doctype.shipment.shipment.fetch_shipping_rates",
-				freeze: true,
-				freeze_message: __("Fetching Shipping Rates"),
-				args: {
-					pickup_from_type: frm.doc.pickup_from_type,
-					delivery_to_type: frm.doc.delivery_to_type,
-					pickup_address_name: frm.doc.pickup_address_name,
-					delivery_address_name: frm.doc.delivery_address_name,
-					shipment_parcel: frm.doc.shipment_parcel,
-					description_of_content: frm.doc.description_of_content,
-					pickup_date: frm.doc.pickup_date,
-					pickup_contact_name: frm.doc.pickup_from_type === 'Company' ? frm.doc.pickup_contact_person : frm.doc.pickup_contact_name,
-					delivery_contact_name: frm.doc.delivery_contact_name,
-					value_of_goods: frm.doc.value_of_goods
-				},
-				callback: function(r) {
-					if (r.message) {
-						select_from_available_services(frm, r.message);
-					}
-					else {
-						frappe.throw(__("No Shipment Services available"));
-					}
-				}
-			});
-		}
-		else {
-			frappe.throw(__("Shipment already created"));
-		}
-	},
-	print_shipping_label: function(frm) {
-		frappe.call({
-			method: "erpnext.stock.doctype.shipment.shipment.print_shipping_label",
-			freeze: true,
-			freeze_message: __("Printing Shipping Label"),
-			args: {
-				shipment_id: frm.doc.shipment_id,
-				service_provider: frm.doc.service_provider
-			},
-			callback: function(r) {
-				if (r.message) {
-					if (frm.doc.service_provider == "LetMeShip") {
-						var array = JSON.parse(r.message);
-						// Uint8Array for unsigned bytes
-						array = new Uint8Array(array);
-						const file = new Blob([array], {type: "application/pdf"});
-						const file_url = URL.createObjectURL(file);
-						window.open(file_url);
-					}
-					else {
-						if (Array.isArray(r.message)) {
-							r.message.forEach(url => window.open(url));
-						} else {
-							window.open(r.message);
-						}
-					}
-				}
-			}
-		});
-	},
-	update_tracking: function(frm, service_provider, shipment_id) {
-		let delivery_notes = [];
-		(frm.doc.shipment_delivery_note || []).forEach((d) => {
-			delivery_notes.push(d.delivery_note);
-		});
-		frappe.call({
-			method: "erpnext.stock.doctype.shipment.shipment.update_tracking",
-			freeze: true,
-			freeze_message: __("Updating Tracking"),
-			args: {
-				shipment: frm.doc.name,
-				shipment_id: shipment_id,
-				service_provider: service_provider,
-				delivery_notes: delivery_notes
-			},
-			callback: function(r) {
-				if (!r.exc) {
-					frm.reload_doc();
-				}
-			}
-		});
 	}
 });
 
@@ -712,82 +608,3 @@
 			: frm.doc[table].some((detail, i) => detail.email === fieldname && !(index === i))
 	);
 };
-
-function select_from_available_services(frm, available_services) {
-	var headers = [ __("Service Provider"), __("Carrier"), __("Carrier’s Service"), __("Price"), "" ];
-	cur_frm.render_available_services = function(d, headers, data){
-		const arranged_data = data.reduce((prev, curr) => {
-			if (curr.is_preferred) {
-				prev.preferred_services.push(curr);
-			} else {
-				prev.other_services.push(curr);
-			}
-			return prev;
-		}, { preferred_services: [], other_services: [] });
-		d.fields_dict.available_services.$wrapper.html(
-			frappe.render_template('shipment_service_selector',
-				{'header_columns': headers, 'data': arranged_data}
-			)
-		);
-	};
-	const d = new frappe.ui.Dialog({
-		title: __("Select Shipment Service to create Shipment"),
-		fields: [
-			{
-				fieldtype:'HTML',
-				fieldname:"available_services",
-				label: __('Available Services')
-			}
-		]
-	});
-	cur_frm.render_available_services(d, headers, available_services);
-	let shipment_notific_email = [];
-	let tracking_notific_email = [];
-	(frm.doc.shipment_notification_subscription || []).forEach((d) => {
-		if (!d.unsubscribed) {
-			shipment_notific_email.push(d.email);
-		}
-	});
-	(frm.doc.shipment_status_update_subscription || []).forEach((d) => {
-		if (!d.unsubscribed) {
-			tracking_notific_email.push(d.email);
-		}
-	});
-	let delivery_notes = [];
-	(frm.doc.shipment_delivery_note || []).forEach((d) => {
-		delivery_notes.push(d.delivery_note);
-	});
-	cur_frm.select_row = function(service_data){
-		frappe.call({
-			method: "erpnext.stock.doctype.shipment.shipment.create_shipment",
-			freeze: true,
-			freeze_message: __("Creating Shipment"),
-			args: {
-				shipment: frm.doc.name,
-				pickup_from_type: frm.doc.pickup_from_type,
-				delivery_to_type: frm.doc.delivery_to_type,
-				pickup_address_name: frm.doc.pickup_address_name,
-				delivery_address_name: frm.doc.delivery_address_name,
-				shipment_parcel: frm.doc.shipment_parcel,
-				description_of_content: frm.doc.description_of_content,
-				pickup_date: frm.doc.pickup_date,
-				pickup_contact_name: frm.doc.pickup_from_type === 'Company' ? frm.doc.pickup_contact_person : frm.doc.pickup_contact_name,
-				delivery_contact_name: frm.doc.delivery_contact_name,
-				value_of_goods: frm.doc.value_of_goods,
-				service_data: service_data,
-				shipment_notific_email: shipment_notific_email,
-				tracking_notific_email: tracking_notific_email,
-				delivery_notes: delivery_notes
-			},
-			callback: function(r) {
-				if (!r.exc) {
-					frm.reload_doc();
-					frappe.msgprint(__("Shipment created with {0}, ID is {1}", [r.message.service_provider, r.message.shipment_id]));
-					frm.events.update_tracking(frm, r.message.service_provider, r.message.shipment_id);
-				}
-			}
-		});
-		d.hide();
-	};
-	d.show();
-}
diff --git a/erpnext/stock/doctype/shipment/shipment.json b/erpnext/stock/doctype/shipment/shipment.json
index bbfbb71..9ac6102 100644
--- a/erpnext/stock/doctype/shipment/shipment.json
+++ b/erpnext/stock/doctype/shipment/shipment.json
@@ -358,28 +358,24 @@
   {
    "fieldname": "service_provider",
    "fieldtype": "Data",
-   "label": "Service Provider",
-   "read_only": 1
+   "label": "Service Provider"
   },
   {
    "fieldname": "shipment_id",
    "fieldtype": "Data",
-   "label": "Shipment ID",
-   "read_only": 1
+   "label": "Shipment ID"
   },
   {
    "fieldname": "shipment_amount",
    "fieldtype": "Currency",
    "label": "Shipment Amount",
-   "precision": "2",
-   "read_only": 1
+   "precision": "2"
   },
   {
    "fieldname": "status",
    "fieldtype": "Select",
    "label": "Status",
-   "options": "Draft\nSubmitted\nBooked\nCancelled\nCompleted",
-   "read_only": 1
+   "options": "Draft\nSubmitted\nBooked\nCancelled\nCompleted"
   },
   {
    "fieldname": "tracking_url",
@@ -391,27 +387,23 @@
   {
    "fieldname": "carrier",
    "fieldtype": "Data",
-   "label": "Carrier",
-   "read_only": 1
+   "label": "Carrier"
   },
   {
    "fieldname": "carrier_service",
    "fieldtype": "Data",
-   "label": "Carrier Service",
-   "read_only": 1
+   "label": "Carrier Service"
   },
   {
    "fieldname": "awb_number",
    "fieldtype": "Data",
-   "label": "AWB Number",
-   "read_only": 1
+   "label": "AWB Number"
   },
   {
    "fieldname": "tracking_status",
    "fieldtype": "Select",
    "label": "Tracking Status",
-   "options": "\nIn Progress\nDelivered\nReturned\nLost",
-   "read_only": 1
+   "options": "\nIn Progress\nDelivered\nReturned\nLost"
   },
   {
    "fieldname": "tracking_status_info",
@@ -468,7 +460,7 @@
  ],
  "is_submittable": 1,
  "links": [],
- "modified": "2020-09-29 13:59:50.241744",
+ "modified": "2020-11-20 16:19:06.157106",
  "modified_by": "Administrator",
  "module": "Stock",
  "name": "Shipment",
diff --git a/erpnext/stock/doctype/shipment/shipment.py b/erpnext/stock/doctype/shipment/shipment.py
index 9b3c976..4e16f95 100644
--- a/erpnext/stock/doctype/shipment/shipment.py
+++ b/erpnext/stock/doctype/shipment/shipment.py
@@ -10,10 +10,6 @@
 from frappe.model.document import Document
 from erpnext.accounts.party import get_party_shipping_address
 from frappe.contacts.doctype.contact.contact import get_default_contact
-from erpnext.erpnext_integrations.doctype.letmeship.letmeship import LETMESHIP_PROVIDER, get_letmeship_available_services, create_letmeship_shipment, get_letmeship_label, get_letmeship_tracking_data
-from erpnext.erpnext_integrations.doctype.packlink.packlink import PACKLINK_PROVIDER, get_packlink_available_services, create_packlink_shipment, get_packlink_label, get_packlink_tracking_data
-from erpnext.erpnext_integrations.doctype.sendcloud.sendcloud import SENDCLOUD_PROVIDER, get_sendcloud_available_services, create_sendcloud_shipment, get_sendcloud_label, get_sendcloud_tracking_data
-from erpnext.stock.doctype.parcel_service_type.parcel_service_type import match_parcel_service_type_alias
 
 class Shipment(Document):
 	def validate(self):
@@ -37,159 +33,6 @@
 				frappe.throw(_('Parcel weight cannot be 0'))
 
 @frappe.whitelist()
-def fetch_shipping_rates(pickup_from_type, delivery_to_type, pickup_address_name, delivery_address_name,
-		shipment_parcel, description_of_content, pickup_date, value_of_goods,
-		pickup_contact_name=None, delivery_contact_name=None):
-	# Return Shipping Rates for the various Shipping Providers
-	shipment_prices = []
-	letmeship_enabled = frappe.db.get_single_value('LetMeShip','enabled')
-	packlink_enabled = frappe.db.get_single_value('Packlink','enabled')
-	sendcloud_enabled = frappe.db.get_single_value('SendCloud','enabled')
-	pickup_address = get_address(pickup_address_name)
-	delivery_address = get_address(delivery_address_name)
-	if letmeship_enabled:
-		pickup_contact = None
-		delivery_contact = None
-		if pickup_from_type != 'Company':
-			pickup_contact = get_contact(pickup_contact_name)
-		else:
-			pickup_contact = get_company_contact(user=pickup_contact_name)
-		
-		if delivery_to_type != 'Company':
-			delivery_contact = get_contact(delivery_contact_name)
-		else:
-			delivery_contact = get_company_contact(user=pickup_contact_name)
-		letmeship_prices = get_letmeship_available_services(
-			delivery_to_type=delivery_to_type,
-			pickup_address=pickup_address,
-			delivery_address=delivery_address,
-			shipment_parcel=shipment_parcel,
-			description_of_content=description_of_content,
-			pickup_date=pickup_date,
-			value_of_goods=value_of_goods,
-			pickup_contact=pickup_contact,
-			delivery_contact=delivery_contact,
-		)
-		letmeship_prices = match_parcel_service_type_carrier(letmeship_prices, ['carrier', 'carrier_name'])
-		shipment_prices = shipment_prices + letmeship_prices
-	if packlink_enabled:
-		packlink_prices = get_packlink_available_services(
-			pickup_address=pickup_address,
-			delivery_address=delivery_address,
-			shipment_parcel=shipment_parcel, 
-			pickup_date=pickup_date
-		)
-		packlink_prices = match_parcel_service_type_carrier(packlink_prices, ['carrier_name', 'carrier'])
-		shipment_prices = shipment_prices + packlink_prices
-	if sendcloud_enabled and pickup_from_type == 'Company':
-		sendcloud_prices = get_sendcloud_available_services(
-			delivery_address=delivery_address,
-			shipment_parcel=shipment_parcel
-		)
-		shipment_prices = shipment_prices + sendcloud_prices
-	shipment_prices = sorted(shipment_prices, key=lambda k:k['total_price'])
-	return shipment_prices
-
-@frappe.whitelist()
-def create_shipment(shipment, pickup_from_type, delivery_to_type, pickup_address_name,
-		delivery_address_name, shipment_parcel, description_of_content, pickup_date,
-		value_of_goods, service_data, shipment_notific_email, tracking_notific_email,
-		pickup_contact_name=None, delivery_contact_name=None, delivery_notes=[]):
-	# Create Shipment for the selected provider
-	service_info = json.loads(service_data)
-	shipment_info = None
-	pickup_contact = None
-	delivery_contact = None
-	pickup_address = get_address(pickup_address_name)
-	delivery_address = get_address(delivery_address_name)
-	if pickup_from_type != 'Company':
-		pickup_contact = get_contact(pickup_contact_name)
-	else:
-		pickup_contact = get_company_contact(user=pickup_contact_name)
-	
-	if delivery_to_type != 'Company':
-		delivery_contact = get_contact(delivery_contact_name)
-	else:
-		delivery_contact = get_company_contact(user=pickup_contact_name)
-	if service_info['service_provider'] == LETMESHIP_PROVIDER:
-		shipment_info = create_letmeship_shipment(
-			pickup_address=pickup_address,
-			delivery_address=delivery_address,
-			shipment_parcel=shipment_parcel,
-			description_of_content=description_of_content,
-			pickup_date=pickup_date,
-			value_of_goods=value_of_goods,
-			pickup_contact=pickup_contact,
-			delivery_contact=delivery_contact,
-			service_info=service_info,
-			shipment_notific_email=shipment_notific_email,
-			tracking_notific_email=tracking_notific_email,
-		)
-
-	if service_info['service_provider'] == PACKLINK_PROVIDER:
-		shipment_info = create_packlink_shipment(
-			pickup_address=pickup_address,
-			delivery_address=delivery_address,
-			shipment_parcel=shipment_parcel,
-			description_of_content=description_of_content,
-			pickup_date=pickup_date,
-			value_of_goods=value_of_goods,
-			pickup_contact=pickup_contact,
-			delivery_contact=delivery_contact,
-			service_info=service_info,
-		)
-
-	if service_info['service_provider'] == SENDCLOUD_PROVIDER:
-		shipment_info = create_sendcloud_shipment(
-			shipment=shipment,
-			delivery_address=delivery_address,
-			shipment_parcel=shipment_parcel,
-			description_of_content=description_of_content,
-			value_of_goods=value_of_goods,
-			delivery_contact=delivery_contact,
-			service_info=service_info,
-		)
-
-	if shipment_info:
-		fields = ['service_provider', 'carrier', 'carrier_service', 'shipment_id', 'shipment_amount', 'awb_number']
-		for field in fields:
-			frappe.db.set_value('Shipment', shipment, field, shipment_info.get(field))
-		frappe.db.set_value('Shipment', shipment, 'status', 'Booked')
-		if delivery_notes:
-			update_delivery_note(delivery_notes=delivery_notes, shipment_info=shipment_info)
-	return shipment_info
-
-
-@frappe.whitelist()
-def print_shipping_label(service_provider, shipment_id):
-	if service_provider == LETMESHIP_PROVIDER:
-		shipping_label = get_letmeship_label(shipment_id)
-	elif service_provider == PACKLINK_PROVIDER:
-		shipping_label = get_packlink_label(shipment_id)
-	elif service_provider == SENDCLOUD_PROVIDER:
-		shipping_label = get_sendcloud_label(shipment_id)
-	return shipping_label
-
-
-@frappe.whitelist()
-def update_tracking(shipment, service_provider, shipment_id, delivery_notes=[]):
-	# Update Tracking info in Shipment
-	tracking_data = None
-	if service_provider == LETMESHIP_PROVIDER:
-		tracking_data = get_letmeship_tracking_data(shipment_id)
-	elif service_provider == PACKLINK_PROVIDER:
-		tracking_data = get_packlink_tracking_data(shipment_id)
-	elif service_provider == SENDCLOUD_PROVIDER:
-		tracking_data = get_sendcloud_tracking_data(shipment_id)
-	if tracking_data:
-		if delivery_notes:
-			update_delivery_note(delivery_notes=delivery_notes, tracking_info=tracking_data)
-		frappe.db.set_value('Shipment', shipment, 'awb_number', tracking_data.get('awb_number'))
-		frappe.db.set_value('Shipment', shipment, 'tracking_status', tracking_data.get('tracking_status'))
-		frappe.db.set_value('Shipment', shipment, 'tracking_status_info', tracking_data.get('tracking_status_info'))
-		frappe.db.set_value('Shipment', shipment, 'tracking_url', tracking_data.get('tracking_url'))
-
-@frappe.whitelist()
 def get_address_name(ref_doctype, docname):
 	# Return address name
 	return get_party_shipping_address(ref_doctype, docname)
@@ -199,90 +42,6 @@
 	# Return address name
 	return get_default_contact(ref_doctype, docname)
 
-def update_delivery_note(delivery_notes, shipment_info=None, tracking_info=None):
-	# Update Shipment Info in Delivery Note
-	# Using db_set since some services might not exist
-	for delivery_note in json.loads(delivery_notes):
-		dl_doc = frappe.get_doc('Delivery Note', delivery_note)
-		if shipment_info:
-			dl_doc.db_set('delivery_type', 'Parcel Service')
-			dl_doc.db_set('parcel_service', shipment_info.get('carrier'))
-			dl_doc.db_set('parcel_service_type', shipment_info.get('carrier_service'))
-		if tracking_info:		
-			dl_doc.db_set('tracking_number', tracking_info.get('awb_number'))
-			dl_doc.db_set('tracking_url', tracking_info.get('tracking_url'))
-			dl_doc.db_set('tracking_status', tracking_info.get('tracking_status'))
-			dl_doc.db_set('tracking_status_info', tracking_info.get('tracking_status_info'))
-
-
-def update_tracking_info():
-	# Daily scheduled event to update Tracking info for not delivered Shipments
-	# Also Updates the related Delivery Notes
-	shipments = frappe.get_all('Shipment', filters={
-		'docstatus': 1,
-		'status': 'Booked',
-		'shipment_id': ['!=', ''],
-		'tracking_status': ['!=', 'Delivered'],
-	})
-	for shipment in shipments:
-		shipment_doc = frappe.get_doc('Shipment', shipment.name)
-		tracking_info = \
-			update_tracking(
-				shipment_doc.service_provider,
-				shipment_doc.shipment_id,
-				shipment_doc.shipment_delivery_notes
-			)
-		if tracking_info:
-			shipment_doc.db_set('awb_number', tracking_info.get('awb_number'))
-			shipment_doc.db_set('tracking_url', tracking_info.get('tracking_url'))
-			shipment_doc.db_set('tracking_status', tracking_info.get('tracking_status'))
-			shipment_doc.db_set('tracking_status_info', tracking_info.get('tracking_status_info'))
-
-
-def get_address(address_name):
-	address = frappe.db.get_value('Address', address_name, [
-		'address_title',
-		'address_line1',
-		'address_line2',
-		'city',
-		'pincode',
-		'country',
-	], as_dict=1)
-	address.country_code = frappe.db.get_value('Country', address.country, 'code').upper()
-	if not address.pincode or address.pincode == '':
-		frappe.throw(_("Postal Code is mandatory to continue. </br> \
-				Please set Postal Code for Address <a href='#Form/Address/{0}'>{1}</a>"
-			).format(address_name, address_name))
-	address.pincode = address.pincode.replace(' ', '')
-	address.city = address.city.strip()
-	return address
-
-
-def get_contact(contact_name):
-	contact = frappe.db.get_value('Contact', contact_name, [
-		'first_name',
-		'last_name',
-		'email_id',
-		'phone',
-		'mobile_no',
-		'gender',
-	], as_dict=1)
-	if not contact.last_name:
-		frappe.throw(_("Last Name is mandatory to continue. </br> \
-				Please set Last Name for Contact <a href='#Form/Contact/{0}'>{1}</a>"
-			).format(contact_name, contact_name))
-	if not contact.phone:
-		contact.phone = contact.mobile_no
-	return contact
-
-def match_parcel_service_type_carrier(shipment_prices, reference):
-	for idx, prices in enumerate(shipment_prices):
-		service_name = match_parcel_service_type_alias(prices.get(reference[0]), prices.get(reference[1]))
-		is_preferred = frappe.db.get_value('Parcel Service Type', service_name, 'show_in_preferred_services_list')
-		shipment_prices[idx].service_name = service_name
-		shipment_prices[idx].is_preferred = is_preferred
-	return shipment_prices
-
 @frappe.whitelist()
 def get_company_contact(user):
 	contact = frappe.db.get_value('User', user, [
@@ -295,4 +54,4 @@
 	], as_dict=1)
 	if not contact.phone:
 		contact.phone = contact.mobile_no
-	return contact
\ No newline at end of file
+	return contact
diff --git a/erpnext/stock/doctype/shipment/shipment_service_selector.html b/erpnext/stock/doctype/shipment/shipment_service_selector.html
deleted file mode 100644
index 4ccbe34..0000000
--- a/erpnext/stock/doctype/shipment/shipment_service_selector.html
+++ /dev/null
@@ -1,74 +0,0 @@
-{% if (data.preferred_services.length || data.other_services.length) { %}
-	<div style="overflow-x:scroll; height: 550px;">
-		<h5>{{ __("Preferred Services") }}</h5>
-		{% if (data.preferred_services.length) { %}
-			<table class="table table-bordered table-hover">
-				<thead class="grid-heading-row">
-					<tr style="text-align: center">
-						{% for (var i = 0; i < header_columns.length; i++) { %} 
-							<th style="text-align: center">{{ header_columns[i] }}</th>
-						{% } %}
-					</tr>
-				</thead>
-				<tbody>
-					{% for (var i = 0; i < data.preferred_services.length; i++) { %}
-						<tr style="text-align: center" id="data-list-{{i}}">
-							<td style="width:20%">{{ data.preferred_services[i].service_provider }}</td>
-							<td style="width:20%">{{ data.preferred_services[i].carrier }}</td>
-							<td style="width:40%">{{ data.preferred_services[i].service_name }}</td>
-							<td style="width:10%">{{ format_currency(data.preferred_services[i].total_price, 'EUR', 2) }}</td>
-							<td style="width:10%">
-								<button id="data-list-{{i}}" onclick='cur_frm.select_row({{JSON.stringify(data.preferred_services[i])}})' type="button" class="btn btn-primary">
-									<span class="glyphicon glyphicon-ok"></span>
-								</button>
-							</td>
-						</tr>
-					{% } %}
-				</tbody>
-			</table>
-		{% } else { %}
-			<div><strong class="text-muted">{{ __("No Preferred Services Available") }}</strong></div>
-		{% } %}
-		<h5>{{ __("Other Services") }}</h5>
-		{% if (data.other_services.length) { %}
-			<table class="table table-bordered table-hover">
-				<thead class="grid-heading-row">
-					<tr style="text-align: center">
-						{% for (var i = 0; i < header_columns.length; i++) { %}
-							<th style="text-align: center" >{{ header_columns[i] }}</th>
-						{% } %}
-					</tr>
-				</thead>
-				<tbody>
-					{% for (var i = 0; i < data.other_services.length; i++) { %}
-						<tr style="text-align: center" id="data-list-{{i}}">
-							<td style="width:20%">{{ data.other_services[i].service_provider }}</td>
-							<td style="width:20%">{{ data.other_services[i].carrier }}</td>
-							<td style="width:40%">{{ data.other_services[i].service_name }}</td>
-							<td style="width:10%">{{ format_currency(data.other_services[i].total_price, 'EUR', 2) }}</td>
-							<td style="width:10%">
-								<button id="data-list-{{i}}" onclick='cur_frm.select_row({{JSON.stringify(data.other_services[i])}})' type="button" class="btn btn-primary">
-									<span class="glyphicon glyphicon-ok"></span>
-								</button>
-							</td>
-						</tr>
-					{% } %}
-				</tbody>
-			</table>
-		{% } else { %}
-			<div><strong class="text-muted">{{ __("No Services Available") }}</strong></div>
-		{% } %}
-	</div>
-{% } else { %}
-	<div><strong class="text-muted">{{ __("No Services Available") }}</strong></div>
-{% } %}
-
-<style type="text/css" media="screen">
-.modal-dialog {
-	width: 750px;
-}
-
-.table > tbody > tr > td, .table > tfoot > tr > td {
-	padding: 4px;
-}
-</style>
\ No newline at end of file
