diff --git a/delivery_deliverea/__manifest__.py b/delivery_deliverea/__manifest__.py
index 2fb6a2f959..a8016e43f4 100644
--- a/delivery_deliverea/__manifest__.py
+++ b/delivery_deliverea/__manifest__.py
@@ -13,6 +13,7 @@
"depends": [
"delivery_state",
"delivery_package_number",
+ "stock_quant_package_dimension",
],
"external_dependencies": {"python": ["unidecode"]},
"data": [
diff --git a/delivery_deliverea/data/product_packaging_data.xml b/delivery_deliverea/data/product_packaging_data.xml
index 633c082dae..7dd455beaf 100644
--- a/delivery_deliverea/data/product_packaging_data.xml
+++ b/delivery_deliverea/data/product_packaging_data.xml
@@ -7,6 +7,7 @@
15
10
20
- 2
+ 0
+ 2
diff --git a/delivery_deliverea/models/delivery_carrier.py b/delivery_deliverea/models/delivery_carrier.py
index aefb9be9a6..4a5df12d10 100644
--- a/delivery_deliverea/models/delivery_carrier.py
+++ b/delivery_deliverea/models/delivery_carrier.py
@@ -310,37 +310,65 @@ def _get_deliverea_parcel_items(self, picking):
)
return items
- def _get_deliverea_parcel_info(self, carrier, picking):
- parcels = []
- num_packages = picking.number_of_packages or 1
- default_package = carrier.deliverea_default_packaging_id
- if (
- not default_package.max_weight
- or not default_package.height
- or not default_package.width
- or not default_package.packaging_length
+ def _get_package_weight(self, package):
+ return package.weight_uom_id._compute_quantity(
+ package.pack_weight, self.env.ref("uom.product_uom_kgm")
+ )
+
+ def _get_package_length(self, package, field):
+ return package.length_uom_id._compute_quantity(
+ getattr(package, field), self.env.ref("uom.product_uom_cm")
+ )
+
+ def assert_default_values(self, default_package):
+ if not all(
+ (
+ default_package.base_weight,
+ default_package.height,
+ default_package.width,
+ default_package.packaging_length,
+ )
):
raise UserError(
_(
- "The max_weight, height, width and length values must be defined"
+ "The base_weight, height, width and length values must be defined"
" in the package associated with the carrier."
)
)
- for i in range(num_packages):
+
+ def _get_deliverea_parcel_info(self, carrier, picking):
+ parcels = []
+ num_packages = picking.number_of_packages or 1
+ default_package = carrier.deliverea_default_packaging_id
+ warehouse_country_id = (
+ picking.picking_type_id.warehouse_id.partner_id.country_id
+ )
+ self.assert_default_values(default_package)
+ for package in picking.package_ids:
parcels.append(
{
- "weight": default_package.max_weight,
- "height": default_package.height,
- "width": default_package.width,
- "length": default_package.packaging_length,
+ "weight": self._get_package_weight(package)
+ or default_package.base_weight,
+ "height": self._get_package_length(package, "height")
+ or default_package.height,
+ "width": self._get_package_length(package, "width")
+ or default_package.width,
+ "length": self._get_package_length(package, "pack_length")
+ or default_package.packaging_length,
}
)
- if (
- i == 0
- and picking.picking_type_id.warehouse_id.partner_id.country_id.code
- != picking.partner_id.country_id.code
- ):
- parcels[0].update({"items": self._get_deliverea_parcel_items(picking)})
+ if not picking.package_ids:
+ for __ in range(num_packages):
+ parcels.append(
+ {
+ "weight": default_package.base_weight,
+ "height": default_package.height,
+ "width": default_package.width,
+ "length": default_package.packaging_length,
+ }
+ )
+ if warehouse_country_id.code != picking.partner_id.country_id.code:
+ parcels[0].update({"items": self._get_deliverea_parcel_items(picking)})
return parcels
def _get_service_attributes(self, carrier, service):
diff --git a/delivery_deliverea/tests/test_delivery_deliverea.py b/delivery_deliverea/tests/test_delivery_deliverea.py
index 4f2c77e576..af6b0c793c 100644
--- a/delivery_deliverea/tests/test_delivery_deliverea.py
+++ b/delivery_deliverea/tests/test_delivery_deliverea.py
@@ -457,3 +457,54 @@ def test_13_get_return_label(self):
]
)
self.assertTrue(attachment)
+
+ def test_14_get_default_packages(self):
+ default_package = self.carrier.deliverea_default_packaging_id
+ packages = self.carrier._get_deliverea_parcel_info(self.carrier, self.picking)
+ self.assertEqual(len(packages), 2)
+ self.assertTrue(packages[0].get("items"))
+ for package in packages:
+ self.assertEqual(package.get("weight"), default_package.base_weight)
+ self.assertEqual(package.get("width"), default_package.width)
+ self.assertEqual(package.get("height"), default_package.height)
+ self.assertEqual(package.get("length"), default_package.packaging_length)
+
+ def test_15_get_data_packages(self):
+ self.picking.package_ids = [
+ (
+ 0,
+ 0,
+ {
+ "name": "Test Package",
+ "pack_weight": 1,
+ "width": 1,
+ "height": 1,
+ "pack_length": 1,
+ },
+ ),
+ (
+ 0,
+ 0,
+ {
+ "name": "Test Package 2",
+ "pack_weight": 0,
+ "width": 0,
+ "height": 0,
+ "pack_length": 0,
+ },
+ ),
+ ]
+ # Package length uom is mm, weight uom is kg
+ packages = self.carrier._get_deliverea_parcel_info(self.carrier, self.picking)
+ self.assertEqual(len(packages), 2)
+ self.assertEqual(packages[0].get("weight"), 1.0)
+ self.assertEqual(packages[0].get("height"), 0.1)
+ self.assertEqual(packages[0].get("width"), 0.1)
+ self.assertEqual(packages[0].get("length"), 0.1)
+ self.assertTrue(packages[0].get("items"))
+ # Check default values
+ default_package = self.carrier.deliverea_default_packaging_id
+ self.assertEqual(packages[1].get("weight"), default_package.base_weight)
+ self.assertEqual(packages[1].get("width"), default_package.width)
+ self.assertEqual(packages[1].get("height"), default_package.height)
+ self.assertEqual(packages[1].get("length"), default_package.packaging_length)