diff --git a/addons/delivery/models/delivery_carrier.py b/addons/delivery/models/delivery_carrier.py index 4e645b5c6a4..4a20f26e197 100644 --- a/addons/delivery/models/delivery_carrier.py +++ b/addons/delivery/models/delivery_carrier.py @@ -26,6 +26,7 @@ class DeliveryCarrier(models.Model): _send_shipping _get_tracking_link _cancel_shipment + __get_default_custom_package_code (they are documented hereunder) ''' @@ -183,6 +184,16 @@ class DeliveryCarrier(models.Model): except psycopg2.Error: pass + def _get_default_custom_package_code(self): + """ Some delivery carriers require a prefix to be sent in order to use custom + packages (ie not official ones). This optional method will return it as a string. + """ + self.ensure_one() + if hasattr(self, '_%s_get_default_custom_package_code' % self.delivery_type): + return getattr(self, '_%s_get_default_custom_package_code' % self.delivery_type)() + else: + return False + # ------------------------------------------------ # # Fixed price shipping, aka a very simple provider # # ------------------------------------------------ # diff --git a/addons/delivery/models/product_packaging.py b/addons/delivery/models/product_packaging.py index 58beebc7de2..1e27614d85f 100644 --- a/addons/delivery/models/product_packaging.py +++ b/addons/delivery/models/product_packaging.py @@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- # Part of Odoo. See LICENSE file for full copyright and licensing details. -from odoo import models, fields +from odoo import models, fields, api class ProductPackaging(models.Model): @@ -20,3 +20,11 @@ class ProductPackaging(models.Model): ('positive_length', 'CHECK(length>=0)', 'Length must be positive'), ('positive_max_weight', 'CHECK(max_weight>=0.0)', 'Max Weight must be positive'), ] + + @api.onchange('package_carrier_type') + def _onchange_carrier_type(self): + carrier_id = self.env['delivery.carrier'].search([('delivery_type', '=', self.package_carrier_type)], limit=1) + if carrier_id: + self.shipper_package_code = carrier_id._get_default_custom_package_code() + else: + self.shipper_package_code = False