From fcf79ca75ac4923110795ec2975a1df655d7cbe0 Mon Sep 17 00:00:00 2001 From: Martin Carlsson Date: Mon, 24 Feb 2020 10:07:43 +0100 Subject: [PATCH] P5-4783 add different designer pricepremium for each product group --- api/lib/prices.py | 12 +++--- api/models/designer.py | 5 ++- api/resources/prices.py | 12 +++--- tests/lib/test_prices.py | 74 +++++++++++++++------------------- tests/resources/test_prices.py | 23 +++++++---- 5 files changed, 63 insertions(+), 63 deletions(-) diff --git a/api/lib/prices.py b/api/lib/prices.py index 594ebfd..5f5a644 100644 --- a/api/lib/prices.py +++ b/api/lib/prices.py @@ -6,7 +6,7 @@ from api.lib.limits import calculate_canvas_limits from api.lib import pwinty -def m2_price( +def wallpaper_m2_price( material, market, designer=None, @@ -19,7 +19,7 @@ def m2_price( price = material.price / 100.0 if designer: - price *= (float(designer.pricepremium) / 100) + 1 + price *= (float(designer.pricepremium_wallpaper) / 100) + 1 if reseller: price *= (float(reseller.pricepremium) / 100) + 1 @@ -50,7 +50,7 @@ def wallpaper_price( rounded=True, inc_vat=True, ): - price = m2_price( + price = wallpaper_m2_price( material, market, designer, reseller, inquiry, rounded=False, inc_vat=False ) @@ -135,7 +135,7 @@ def canvas_price( price *= market.price_adjustments if designer: - price *= (float(designer.pricepremium) / 100) + 1 + price *= (float(designer.pricepremium_canvas) / 100) + 1 if reseller: price *= (float(reseller.pricepremium) / 100) + 1 @@ -232,7 +232,7 @@ def poster_price( price *= market.price_adjustments if designer: - price *= (float(designer.pricepremium) / 100) + 1 + price *= (float(designer.pricepremium_poster) / 100) + 1 if reseller: price *= (float(reseller.pricepremium) / 100) + 1 @@ -416,7 +416,7 @@ def framed_print_price( price *= market.price_adjustments if designer: - price *= (float(designer.pricepremium) / 100) + 1 + price *= (float(designer.pricepremium_framed_print) / 100) + 1 if reseller: price *= (float(reseller.pricepremium) / 100) + 1 diff --git a/api/models/designer.py b/api/models/designer.py index 0c6f38a..943e6cc 100644 --- a/api/models/designer.py +++ b/api/models/designer.py @@ -21,7 +21,10 @@ class Designer(db.Model): visible_list = db.Column(db.Integer(), nullable=False, default=1) visible_productpage = db.Column(db.Integer(), nullable=False, default=1) visible_search = db.Column(db.Integer(), nullable=False, default=1) - pricepremium = db.Column(db.Numeric(), nullable=False, default=0) + pricepremium_wallpaper = db.Column(db.Numeric(), nullable=False, default=0) + pricepremium_canvas = db.Column(db.Numeric(), nullable=False, default=0) + pricepremium_poster = db.Column(db.Numeric(), nullable=False, default=0) + pricepremium_framed_print = db.Column(db.Numeric(), nullable=False, default=0) def __init__(self, name, username, territory, currency, *args, **kwargs): super(Designer, self).__init__(*args, **kwargs) diff --git a/api/resources/prices.py b/api/resources/prices.py index 0b302e8..f5b62ba 100644 --- a/api/resources/prices.py +++ b/api/resources/prices.py @@ -13,7 +13,7 @@ from api.lib.prices import ( poster_price, poster_hanger_price, framed_print_price, - m2_price, + wallpaper_m2_price, inquiry_price, ) from api.lib.limits import calculate_canvas_limits @@ -56,7 +56,7 @@ def wallpaper(): { "material": material.name, "material_id": material.id, - "m2_price": m2_price( + "m2_price": wallpaper_m2_price( material, market, reseller=reseller, @@ -64,7 +64,7 @@ def wallpaper(): rounded=False, inc_vat=True, ), - "m2_price_excl_vat": m2_price( + "m2_price_excl_vat": wallpaper_m2_price( material, market, reseller=reseller, @@ -311,7 +311,7 @@ def inquiry_wallpaper(inquiry): { "material": material.name, "material_id": material.id, - "m2_price": m2_price( + "m2_price": wallpaper_m2_price( material, inquiry.market, designer=inquiry.designer, @@ -320,7 +320,7 @@ def inquiry_wallpaper(inquiry): rounded=False, inc_vat=True, ), - "m2_price_excl_vat": m2_price( + "m2_price_excl_vat": wallpaper_m2_price( material, inquiry.market, designer=inquiry.designer, @@ -555,7 +555,7 @@ def list_prices_wallpaper(territory): market = market_model.from_territory(territory) for wallpaper in wallpapers: - result[wallpaper.id] = m2_price( + result[wallpaper.id] = wallpaper_m2_price( material=material, market=market, designer=wallpaper.product.designer ) return jsonify(result) diff --git a/tests/lib/test_prices.py b/tests/lib/test_prices.py index e70d25e..90daa5c 100644 --- a/tests/lib/test_prices.py +++ b/tests/lib/test_prices.py @@ -35,12 +35,20 @@ russia.price_adjustments = 1 russia.exchange_rate = 0.100000 # russia uses EUR designer = DesignerFactory() -designer.pricepremium = 17.647 +designer.pricepremium_wallpaper = 17.647 +designer.pricepremium_canvas = 8 +designer.pricepremium_poster = 15.50 +designer.pricepremium_framed_print = 13 + + reseller = ContractCustomerFactory(pricepremium=15) piterra = ContractCustomerFactory(pricepremium=36.029411) designer_moomin = DesignerFactory() -designer_moomin.pricepremium = 2 +designer_moomin.pricepremium_wallpaper = 2 +designer_moomin.pricepremium_canvas = 3 +designer_moomin.pricepremium_poster = 4 +designer_moomin.pricepremium_framed_print = 7 standard_wallpaper = Material(name="standard-wallpaper", price=23600) premium_wallpaper = Material(name="premium-wallpaper", price=26000) @@ -50,51 +58,33 @@ standard_canvas = Material(name="standard-canvas", price=79920) class TestPrice(unittest2.TestCase): def test_m2_price(self): self.assertEqual( - 236, m2_price(material=standard_wallpaper, market=sweden, inc_vat=False) + 236, + wallpaper_m2_price( + material=standard_wallpaper, market=sweden, inc_vat=False + ), ) self.assertEqual( - 260, m2_price(material=premium_wallpaper, market=sweden, inc_vat=False) + 260, + wallpaper_m2_price( + material=premium_wallpaper, market=sweden, inc_vat=False + ), ) self.assertEqual( - 295, m2_price(material=standard_wallpaper, market=sweden, inc_vat=True) + 295, + wallpaper_m2_price( + material=standard_wallpaper, market=sweden, inc_vat=True + ), ) self.assertEqual( - 223, m2_price(material=standard_wallpaper, market=denmark, inc_vat=False) - ) - self.assertAlmostEqual( - 79.92, - m2_price( - material=standard_canvas, market=russia, rounded=False, inc_vat=False + 223, + wallpaper_m2_price( + material=standard_wallpaper, market=denmark, inc_vat=False ), - places=2, - ) - self.assertAlmostEqual( - 81.5184, - m2_price( - material=standard_canvas, - market=russia, - designer=designer_moomin, - rounded=False, - inc_vat=False, - ), - places=4, - ) - self.assertAlmostEqual( - 110.88899937662403, - m2_price( - material=standard_canvas, - market=russia, - designer=designer_moomin, - reseller=piterra, - rounded=False, - inc_vat=False, - ), - places=4, ) inquiry = Inquiry(pricepremium=36.029411) self.assertEqual( 44, - m2_price( + wallpaper_m2_price( material=standard_wallpaper, market=russia, reseller=piterra, @@ -315,7 +305,7 @@ class TestPrice(unittest2.TestCase): ) self.assertEqual( - 180, + 181, canvas_price( width=150, height=100, @@ -325,7 +315,7 @@ class TestPrice(unittest2.TestCase): ), ) self.assertEqual( - 180, + 181, canvas_price( width=150, height=100, market=us, designer=designer_moomin, inc_vat=True ), @@ -382,7 +372,7 @@ class TestPrice(unittest2.TestCase): def test_wallpaper_product_inquiry_price(self): designer = DesignerFactory() - designer.pricepremium = 4 + designer.pricepremium_wallpaper = 4 product = Product(designer=designer) with mock.patch.object(Inquiry, "market", sweden): inquiry = Inquiry( @@ -402,7 +392,7 @@ class TestPrice(unittest2.TestCase): def test_wallpaper_product2_inquiry_price(self): designer = DesignerFactory() - designer.pricepremium = 4 + designer.pricepremium_wallpaper = 4 product = Product(designer=designer) with mock.patch.object(Inquiry, "market", sweden): inquiry = Inquiry( @@ -517,7 +507,7 @@ class TestPrice(unittest2.TestCase): "high extra cost for us market wide posters", ) self.assertEqual( - 77, poster_price(width=120, height=40, market=us, designer=designer_moomin) + 78, poster_price(width=120, height=40, market=us, designer=designer_moomin) ) def test_poster_hanger_price(self): @@ -547,7 +537,7 @@ class TestPrice(unittest2.TestCase): def test_framed_print_price(self): self.assertEqual(598, framed_print_price(sku="GLOBAL-CFP-12x12", market=sweden)) self.assertEqual( - 609, + 639, framed_print_price( sku="GLOBAL-CFP-12x12", market=sweden, designer=designer_moomin ), diff --git a/tests/resources/test_prices.py b/tests/resources/test_prices.py index 972dc3c..9473c93 100644 --- a/tests/resources/test_prices.py +++ b/tests/resources/test_prices.py @@ -34,8 +34,15 @@ class TestEndpoints(flask_testing.TestCase): db.session.commit() return inquiry - def _add_designer(self, pricepremium): - designer = Designer("Disney", "disney", "US", "USD", pricepremium=pricepremium) + def _add_designer(self, pricepremium_wallpaper=0, pricepremium_canvas=0): + designer = Designer( + "Disney", + "disney", + "US", + "USD", + pricepremium_wallpaper=pricepremium_wallpaper, + pricepremium_canvas=pricepremium_canvas, + ) db.session.add(designer) db.session.commit() return designer @@ -74,7 +81,7 @@ class TestEndpoints(flask_testing.TestCase): def test_wallpaper_with_product(self): self._add_material("standard-wallpaper", 1, 23600) self._add_material("premium-wallpaper", 1, 26000) - designer = self._add_designer(4) + designer = self._add_designer(pricepremium_wallpaper=4) product = self._add_product(designer) response = self.client.get( "/prices/wallpaper?width=200&height=200&territory=SE&product=1" @@ -121,7 +128,7 @@ class TestEndpoints(flask_testing.TestCase): self.assertEqual(expected, response.json["data"]) def test_canvas_with_product(self): - designer = self._add_designer(4) + designer = self._add_designer(pricepremium_canvas=2) product = self._add_product(designer) response = self.client.get( "/prices/canvas?width=200&height=10&territory=SE&product=1" @@ -131,15 +138,15 @@ class TestEndpoints(flask_testing.TestCase): { "framed": True, "height": 40, - "price": 1048.32, - "price_excl_vat": 838.656, + "price": 1028.16, + "price_excl_vat": 822.528, "width": 150, }, { "framed": False, "height": 20, - "price": 598.4888000000001, - "price_excl_vat": 478.79104000000007, + "price": 586.9794, + "price_excl_vat": 469.58352, "width": 200, }, ]