diff --git a/src/budy/models/bag.py b/src/budy/models/bag.py index ab5b5ae7..8d6e3b9c 100644 --- a/src/budy/models/bag.py +++ b/src/budy/models/bag.py @@ -146,6 +146,18 @@ def add_product_s(self, product, quantity = 1.0): ) self.add_line_s(_bag_line) + def add_update_line_s(self, bag_line): + self.add_product_s( + bag_line.product, + quantity = bag_line.quantity + ) + + def merge_s(self, bag_id): + bag = Bag.get(id = bag_id) + for line in bag.lines: + line = line.clone() + self.add_update_line_s(line) + def _calculate(self): lines = self.lines if hasattr(self, "lines") else [] self.total = sum(line.total for line in lines) diff --git a/src/budy/test/bag.py b/src/budy/test/bag.py index ba678464..6f0c7f8d 100644 --- a/src/budy/test/bag.py +++ b/src/budy/test/bag.py @@ -114,3 +114,43 @@ def test_basic(self): self.assertEqual(bag.total, 0.0) self.assertEqual(len(bag.lines), 0) + + def test_merge(self): + product = budy.Product.new( + short_description = "product", + gender = "Male", + price = 10.0, + form = False + ) + product.save() + + bag = budy.Bag.new(form = False) + bag.save() + + bag_line = budy.BagLine.new( + quantity = 2.0, + form = False + ) + bag_line.product = product + bag_line.save() + bag.add_line_s(bag_line) + + self.assertEqual(bag_line.quantity, 2.0) + self.assertEqual(bag_line.total, 20.0) + self.assertEqual(bag.total, 20.0) + self.assertEqual(len(bag.lines), 1) + + extra = budy.Bag.new(form = False) + extra.save() + + self.assertEqual(len(extra.lines), 0) + + extra.merge_s(bag.id) + + self.assertEqual(extra.total, 20.0) + self.assertEqual(len(extra.lines), 1) + + extra.merge_s(bag.id) + + self.assertEqual(extra.total, 40.0) + self.assertEqual(len(extra.lines), 1)