From 7d47385b3efdb7450704463b5260c7fc905305b0 Mon Sep 17 00:00:00 2001 From: Jared Kipe Date: Wed, 19 Sep 2018 08:52:13 -0700 Subject: [PATCH] IMP `delivery_stamps` support CubicPricing Delivery Packaging gets a field to opt into CubicPricing, API restrictions still apply (e.g. height must be > 3/4"). --- delivery_stamps/models/delivery_stamps.py | 23 +++++++++++++++++++ .../views/delivery_stamps_view.xml | 11 +++++++++ 2 files changed, 34 insertions(+) diff --git a/delivery_stamps/models/delivery_stamps.py b/delivery_stamps/models/delivery_stamps.py index e653e294..8f346f55 100644 --- a/delivery_stamps/models/delivery_stamps.py +++ b/delivery_stamps/models/delivery_stamps.py @@ -36,6 +36,7 @@ class ProductPackaging(models.Model): _inherit = 'product.packaging' package_carrier_type = fields.Selection(selection_add=[('stamps', 'Stamps.com')]) + stamps_cubic_pricing = fields.Boolean(string="Stamps.com Use Cubic Pricing") class ProviderStamps(models.Model): @@ -72,6 +73,18 @@ class ProviderStamps(models.Model): return self.stamps_default_packaging_id.shipper_package_code return package.packaging_id.shipper_package_code if package.packaging_id.shipper_package_code in STAMPS_PACKAGE_TYPES else 'Package' + def _stamps_package_is_cubic_pricing(self, package=None): + if not package: + return self.stamps_default_packaging_id.stamps_cubic_pricing + return package.packaging_id.stamps_cubic_pricing + + def _stamps_package_dimensions(self, package=None): + if not package: + package_type = self.stamps_default_packaging_id + else: + package_type = package.packaging_id + return package_type.length, package_type.width, package_type.height + def _get_stamps_service(self): sudoself = self.sudo() config = StampsConfiguration(integration_id=sudoself.stamps_integration_id, @@ -136,23 +149,33 @@ class ProviderStamps(models.Model): for package in picking.package_ids: weight = self._stamps_convert_weight(package.shipping_weight) + l, w, h = self._stamps_package_dimensions(package=package) ret_val = service.create_shipping() ret_val.ShipDate = date.today().isoformat() ret_val.FromZIPCode = from_partner.zip ret_val.ToZIPCode = to_partner.zip ret_val.PackageType = self._stamps_package_type(package=package) + ret_val.CubicPricing = self._stamps_package_is_cubic_pricing(package=package) + ret_val.Length = l + ret_val.Width = w + ret_val.Height = h ret_val.ServiceType = self.stamps_service_type ret_val.WeightLb = weight ret.append((package.name + ret_val.ShipDate + str(ret_val.WeightLb), ret_val)) if not ret: weight = self._stamps_convert_weight(picking.shipping_weight) + l, w, h = self._stamps_package_dimensions() ret_val = service.create_shipping() ret_val.ShipDate = date.today().isoformat() ret_val.FromZIPCode = from_partner.zip ret_val.ToZIPCode = to_partner.zip ret_val.PackageType = self._stamps_package_type() + ret_val.CubicPricing = self._stamps_package_is_cubic_pricing() + ret_val.Length = l + ret_val.Width = w + ret_val.Height = h ret_val.ServiceType = self.stamps_service_type ret_val.WeightLb = weight ret.append((picking.name + ret_val.ShipDate + str(ret_val.WeightLb), ret_val)) diff --git a/delivery_stamps/views/delivery_stamps_view.xml b/delivery_stamps/views/delivery_stamps_view.xml index bb1d07f2..c4bb6fb0 100644 --- a/delivery_stamps/views/delivery_stamps_view.xml +++ b/delivery_stamps/views/delivery_stamps_view.xml @@ -25,4 +25,15 @@ + + stamps.product.packaging.form.delivery + product.packaging + + + + + + + +