shipcloud: make build_sc_addr() a 'free' function

It doesn't need anything from the 'self' object, so let's make
it a function free to use by anyone
This commit is contained in:
Harald Welte 2021-03-15 21:15:00 +01:00
parent 95160dd623
commit 8a448e41e2
1 changed files with 41 additions and 41 deletions

View File

@ -28,47 +28,47 @@ def split_first_lastname(name):
return ("", name)
return (r[0], r[1])
def build_sc_addr(partner):
"""Convert an Odoo partner object into a shipcloud address."""
addr = {}
(street, house) = split_street_house(partner.street)
addr['street'] = street
addr['street_no'] = house
if partner.street2:
addr['care_of'] = partner.street2
addr['zip_code'] = partner.zip
addr['city'] = partner.city
if partner.state_id and partner.state_id.code:
addr['state'] = partner.state_id.code
addr['country'] = partner.country_id.code
if partner.is_company:
addr['company'] = partner.name
else:
if partner.parent_id.name:
addr['company'] = partner.parent_id.name
if partner.name:
(first, last) = split_first_lastname(partner.name)
addr['first_name'] = first
addr['last_name'] = last
if partner.email:
addr['email'] = partner.email
if partner.mobile:
addr['phone'] = partner.mobile
elif partner.phone:
addr['phone'] = partner.phone
elif partner.parent_id and partner.parent_id.phone:
addr['phone'] = partner.parent_id.phone
# We had trouble communicating with the carrier: ShipFrom phone number cannot be more than 15 digits long
if 'phone' in addr and len(addr['phone']) > 15:
addr['phone'] = ''.join(c for c in addr['phone'] if c.isdigit())
return addr
class SCDeliveryCarrier(models.Model):
_inherit = 'delivery.carrier'
def build_sc_addr(self, partner):
"""Convert an Odoo partner object into a shipcloud address."""
addr = {}
(street, house) = split_street_house(partner.street)
addr['street'] = street
addr['street_no'] = house
if partner.street2:
addr['care_of'] = partner.street2
addr['zip_code'] = partner.zip
addr['city'] = partner.city
if partner.state_id and partner.state_id.code:
addr['state'] = partner.state_id.code
addr['country'] = partner.country_id.code
if partner.is_company:
addr['company'] = partner.name
else:
if partner.parent_id.name:
addr['company'] = partner.parent_id.name
if partner.name:
(first, last) = split_first_lastname(partner.name)
addr['first_name'] = first
addr['last_name'] = last
if partner.email:
addr['email'] = partner.email
if partner.mobile:
addr['phone'] = partner.mobile
elif partner.phone:
addr['phone'] = partner.phone
elif partner.parent_id and partner.parent_id.phone:
addr['phone'] = partner.parent_id.phone
# We had trouble communicating with the carrier: ShipFrom phone number cannot be more than 15 digits long
if 'phone' in addr and len(addr['phone']) > 15:
addr['phone'] = ''.join(c for c in addr['phone'] if c.isdigit())
return addr
@staticmethod
def estimate_dimensions(weight_kg, density_kg_per_dm3):
@ -184,8 +184,8 @@ class SCDeliveryCarrier(models.Model):
carrier_service = self.sudo().sc_carrier_service
# build individual sub-objects of the shipment
from_addr = self.build_sc_addr(warehouse)
to_addr = self.build_sc_addr(recipient)
from_addr = build_sc_addr(warehouse)
to_addr = build_sc_addr(recipient)
pkg = self.build_sc_pkg(order=order)
# build the actual shipment object
shp = shipcloud.gen_shipment(from_addr, to_addr, pkg, order.name,
@ -218,8 +218,8 @@ class SCDeliveryCarrier(models.Model):
carrier_service = self.sudo().sc_carrier_service
# build individual sub-objects of the shipment
from_addr = self.build_sc_addr(warehouse)
to_addr = self.build_sc_addr(recipient)
from_addr = build_sc_addr(warehouse)
to_addr = build_sc_addr(recipient)
pkg = self.build_sc_pkg(picking=pickings)
if warehouse.country_id.code != recipient.country_id.code and self._is_outside_eu(recipient.country_id) and carrier_service.carrier != 'ups':
customs = self.build_sc_customs_decl(pickings, content_desc)