Merge pull request #939 from Tonow-c2c/add_is_unit_stock_packaging_calculator

[IMP][stock_packaging_calculator] Add key is_unit for in the packaging calculator return
This commit is contained in:
Simone Orsi
2020-07-17 16:23:28 +02:00
committed by GitHub
2 changed files with 167 additions and 25 deletions

View File

@@ -63,6 +63,7 @@ class Product(models.Model):
{contained: [{id: 1, qty: 4, name: "Big box"}]}
"""
self.ensure_one()
return self._product_qty_by_packaging(
self._ordered_packaging(), prod_qty, with_contained=with_contained,
)
@@ -100,7 +101,7 @@ class Product(models.Model):
for pkg in pkg_by_qty:
qty_per_pkg, qty = self._qty_by_pkg(pkg.qty, qty)
if qty_per_pkg:
value = {"id": pkg.id, "qty": qty_per_pkg, "name": pkg.name}
value = self._prepare_qty_by_packaging_values(pkg, qty_per_pkg)
if with_contained:
contained = None
if not pkg.is_unit:
@@ -123,3 +124,11 @@ class Product(models.Model):
qty -= pkg_qty
qty_per_pkg += 1
return qty_per_pkg, qty
def _prepare_qty_by_packaging_values(self, packaging, qty_per_pkg):
return {
"id": packaging.id,
"qty": qty_per_pkg,
"name": packaging.name,
"is_unit": packaging.is_unit,
}

View File

@@ -39,13 +39,24 @@ class TestCalc(SavepointCase):
"id": self.pkg_big_box.id,
"qty": 10,
"name": self.pkg_big_box.name,
"is_unit": False,
},
],
str(self.pkg_big_box.id): [
{"id": self.pkg_box.id, "qty": 4, "name": self.pkg_box.name},
{
"id": self.pkg_box.id,
"qty": 4,
"name": self.pkg_box.name,
"is_unit": False,
},
],
str(self.pkg_box.id): [
{"id": self.uom_unit.id, "qty": 50, "name": self.uom_unit.name},
{
"id": self.uom_unit.id,
"qty": 50,
"name": self.uom_unit.name,
"is_unit": True,
},
],
},
)
@@ -59,13 +70,24 @@ class TestCalc(SavepointCase):
"id": self.pkg_big_box.id,
"qty": 20,
"name": self.pkg_big_box.name,
"is_unit": False,
},
],
str(self.pkg_big_box.id): [
{"id": self.pkg_box.id, "qty": 4, "name": self.pkg_box.name},
{
"id": self.pkg_box.id,
"qty": 4,
"name": self.pkg_box.name,
"is_unit": False,
},
],
str(self.pkg_box.id): [
{"id": self.uom_unit.id, "qty": 50, "name": self.uom_unit.name},
{
"id": self.uom_unit.id,
"qty": 50,
"name": self.uom_unit.name,
"is_unit": True,
},
],
},
)
@@ -73,42 +95,102 @@ class TestCalc(SavepointCase):
def test_calc_1(self):
"""Test easy behavior 1."""
expected = [
{"id": self.pkg_pallet.id, "qty": 1, "name": self.pkg_pallet.name},
{"id": self.pkg_big_box.id, "qty": 3, "name": self.pkg_big_box.name},
{"id": self.pkg_box.id, "qty": 1, "name": self.pkg_box.name},
{"id": self.uom_unit.id, "qty": 5, "name": self.uom_unit.name},
{
"id": self.pkg_pallet.id,
"qty": 1,
"name": self.pkg_pallet.name,
"is_unit": False,
},
{
"id": self.pkg_big_box.id,
"qty": 3,
"name": self.pkg_big_box.name,
"is_unit": False,
},
{
"id": self.pkg_box.id,
"qty": 1,
"name": self.pkg_box.name,
"is_unit": False,
},
{
"id": self.uom_unit.id,
"qty": 5,
"name": self.uom_unit.name,
"is_unit": True,
},
]
self.assertEqual(self.product_a.product_qty_by_packaging(2655), expected)
def test_calc_2(self):
"""Test easy behavior 2."""
expected = [
{"id": self.pkg_big_box.id, "qty": 1, "name": self.pkg_big_box.name},
{"id": self.pkg_box.id, "qty": 3, "name": self.pkg_box.name},
{
"id": self.pkg_big_box.id,
"qty": 1,
"name": self.pkg_big_box.name,
"is_unit": False,
},
{
"id": self.pkg_box.id,
"qty": 3,
"name": self.pkg_box.name,
"is_unit": False,
},
]
self.assertEqual(self.product_a.product_qty_by_packaging(350), expected)
def test_calc_3(self):
"""Test easy behavior 3."""
expected = [
{"id": self.pkg_box.id, "qty": 1, "name": self.pkg_box.name},
{"id": self.uom_unit.id, "qty": 30, "name": self.uom_unit.name},
{
"id": self.pkg_box.id,
"qty": 1,
"name": self.pkg_box.name,
"is_unit": False,
},
{
"id": self.uom_unit.id,
"qty": 30,
"name": self.uom_unit.name,
"is_unit": True,
},
]
self.assertEqual(self.product_a.product_qty_by_packaging(80), expected)
def test_calc_6(self):
"""Test fractional qty is lost."""
expected = [
{"id": self.pkg_box.id, "qty": 1, "name": self.pkg_box.name},
{
"id": self.pkg_box.id,
"qty": 1,
"name": self.pkg_box.name,
"is_unit": False,
},
]
self.assertEqual(self.product_a.product_qty_by_packaging(50.5), expected)
def test_calc_filter(self):
"""Test packaging filter."""
expected = [
{"id": self.pkg_big_box.id, "qty": 13, "name": self.pkg_big_box.name},
{"id": self.pkg_box.id, "qty": 1, "name": self.pkg_box.name},
{"id": self.uom_unit.id, "qty": 5, "name": self.uom_unit.name},
{
"id": self.pkg_big_box.id,
"qty": 13,
"name": self.pkg_big_box.name,
"is_unit": False,
},
{
"id": self.pkg_box.id,
"qty": 1,
"name": self.pkg_box.name,
"is_unit": False,
},
{
"id": self.uom_unit.id,
"qty": 5,
"name": self.uom_unit.name,
"is_unit": True,
},
]
self.assertEqual(
self.product_a.with_context(
@@ -120,14 +202,30 @@ class TestCalc(SavepointCase):
def test_calc_name_get(self):
"""Test custom name getter."""
expected = [
{"id": self.pkg_pallet.id, "qty": 1, "name": "FOO " + self.pkg_pallet.name},
{
"id": self.pkg_pallet.id,
"qty": 1,
"name": "FOO " + self.pkg_pallet.name,
"is_unit": False,
},
{
"id": self.pkg_big_box.id,
"qty": 3,
"name": "FOO " + self.pkg_big_box.name,
"is_unit": False,
},
{
"id": self.pkg_box.id,
"qty": 1,
"name": "FOO " + self.pkg_box.name,
"is_unit": False,
},
{
"id": self.uom_unit.id,
"qty": 5,
"name": self.uom_unit.name,
"is_unit": True,
},
{"id": self.pkg_box.id, "qty": 1, "name": "FOO " + self.pkg_box.name},
{"id": self.uom_unit.id, "qty": 5, "name": self.uom_unit.name},
]
self.assertEqual(
self.product_a.with_context(
@@ -143,11 +241,13 @@ class TestCalc(SavepointCase):
"id": self.pkg_pallet.id,
"qty": 1,
"name": self.pkg_pallet.name,
"is_unit": False,
"contained": [
{
"id": self.pkg_big_box.id,
"qty": 10,
"name": self.pkg_big_box.name,
"is_unit": False,
},
],
},
@@ -155,22 +255,35 @@ class TestCalc(SavepointCase):
"id": self.pkg_big_box.id,
"qty": 3,
"name": self.pkg_big_box.name,
"is_unit": False,
"contained": [
{"id": self.pkg_box.id, "qty": 4, "name": self.pkg_box.name},
{
"id": self.pkg_box.id,
"qty": 4,
"name": self.pkg_box.name,
"is_unit": False,
},
],
},
{
"id": self.pkg_box.id,
"qty": 1,
"name": self.pkg_box.name,
"is_unit": False,
"contained": [
{"id": self.uom_unit.id, "qty": 50, "name": self.uom_unit.name},
{
"id": self.uom_unit.id,
"qty": 50,
"name": self.uom_unit.name,
"is_unit": True,
},
],
},
{
"id": self.uom_unit.id,
"qty": 5,
"name": self.uom_unit.name,
"is_unit": True,
"contained": None,
},
]
@@ -187,11 +300,13 @@ class TestCalc(SavepointCase):
"id": self.pkg_pallet.id,
"qty": 1,
"name": self.pkg_pallet.name,
"is_unit": False,
"contained": [
{
"id": self.pkg_big_box.id,
"qty": 10,
"name": self.pkg_big_box.name,
"is_unit": False,
},
],
},
@@ -199,23 +314,41 @@ class TestCalc(SavepointCase):
"id": self.pkg_big_box.id,
"qty": 3,
"name": self.pkg_big_box.name,
"is_unit": False,
"contained": [
{"id": self.pkg_box.id, "qty": 6, "name": self.pkg_box.name},
{"id": self.uom_unit.id, "qty": 20, "name": self.uom_unit.name},
{
"id": self.pkg_box.id,
"qty": 6,
"name": self.pkg_box.name,
"is_unit": False,
},
{
"id": self.uom_unit.id,
"qty": 20,
"name": self.uom_unit.name,
"is_unit": True,
},
],
},
{
"id": self.pkg_box.id,
"qty": 1,
"name": self.pkg_box.name,
"is_unit": False,
"contained": [
{"id": self.uom_unit.id, "qty": 30, "name": self.uom_unit.name},
{
"id": self.uom_unit.id,
"qty": 30,
"name": self.uom_unit.name,
"is_unit": True,
},
],
},
{
"id": self.uom_unit.id,
"qty": 25,
"name": self.uom_unit.name,
"is_unit": True,
"contained": None,
},
]