P5-4783 add different designer pricepremium for each product group

This commit is contained in:
Martin Carlsson
2020-02-24 10:07:43 +01:00
committed by GitHub
parent b6437b3d25
commit fcf79ca75a
5 changed files with 63 additions and 63 deletions
+6 -6
View File
@@ -6,7 +6,7 @@ from api.lib.limits import calculate_canvas_limits
from api.lib import pwinty from api.lib import pwinty
def m2_price( def wallpaper_m2_price(
material, material,
market, market,
designer=None, designer=None,
@@ -19,7 +19,7 @@ def m2_price(
price = material.price / 100.0 price = material.price / 100.0
if designer: if designer:
price *= (float(designer.pricepremium) / 100) + 1 price *= (float(designer.pricepremium_wallpaper) / 100) + 1
if reseller: if reseller:
price *= (float(reseller.pricepremium) / 100) + 1 price *= (float(reseller.pricepremium) / 100) + 1
@@ -50,7 +50,7 @@ def wallpaper_price(
rounded=True, rounded=True,
inc_vat=True, inc_vat=True,
): ):
price = m2_price( price = wallpaper_m2_price(
material, market, designer, reseller, inquiry, rounded=False, inc_vat=False material, market, designer, reseller, inquiry, rounded=False, inc_vat=False
) )
@@ -135,7 +135,7 @@ def canvas_price(
price *= market.price_adjustments price *= market.price_adjustments
if designer: if designer:
price *= (float(designer.pricepremium) / 100) + 1 price *= (float(designer.pricepremium_canvas) / 100) + 1
if reseller: if reseller:
price *= (float(reseller.pricepremium) / 100) + 1 price *= (float(reseller.pricepremium) / 100) + 1
@@ -232,7 +232,7 @@ def poster_price(
price *= market.price_adjustments price *= market.price_adjustments
if designer: if designer:
price *= (float(designer.pricepremium) / 100) + 1 price *= (float(designer.pricepremium_poster) / 100) + 1
if reseller: if reseller:
price *= (float(reseller.pricepremium) / 100) + 1 price *= (float(reseller.pricepremium) / 100) + 1
@@ -416,7 +416,7 @@ def framed_print_price(
price *= market.price_adjustments price *= market.price_adjustments
if designer: if designer:
price *= (float(designer.pricepremium) / 100) + 1 price *= (float(designer.pricepremium_framed_print) / 100) + 1
if reseller: if reseller:
price *= (float(reseller.pricepremium) / 100) + 1 price *= (float(reseller.pricepremium) / 100) + 1
+4 -1
View File
@@ -21,7 +21,10 @@ class Designer(db.Model):
visible_list = db.Column(db.Integer(), nullable=False, default=1) visible_list = db.Column(db.Integer(), nullable=False, default=1)
visible_productpage = 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) 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): def __init__(self, name, username, territory, currency, *args, **kwargs):
super(Designer, self).__init__(*args, **kwargs) super(Designer, self).__init__(*args, **kwargs)
+6 -6
View File
@@ -13,7 +13,7 @@ from api.lib.prices import (
poster_price, poster_price,
poster_hanger_price, poster_hanger_price,
framed_print_price, framed_print_price,
m2_price, wallpaper_m2_price,
inquiry_price, inquiry_price,
) )
from api.lib.limits import calculate_canvas_limits from api.lib.limits import calculate_canvas_limits
@@ -56,7 +56,7 @@ def wallpaper():
{ {
"material": material.name, "material": material.name,
"material_id": material.id, "material_id": material.id,
"m2_price": m2_price( "m2_price": wallpaper_m2_price(
material, material,
market, market,
reseller=reseller, reseller=reseller,
@@ -64,7 +64,7 @@ def wallpaper():
rounded=False, rounded=False,
inc_vat=True, inc_vat=True,
), ),
"m2_price_excl_vat": m2_price( "m2_price_excl_vat": wallpaper_m2_price(
material, material,
market, market,
reseller=reseller, reseller=reseller,
@@ -311,7 +311,7 @@ def inquiry_wallpaper(inquiry):
{ {
"material": material.name, "material": material.name,
"material_id": material.id, "material_id": material.id,
"m2_price": m2_price( "m2_price": wallpaper_m2_price(
material, material,
inquiry.market, inquiry.market,
designer=inquiry.designer, designer=inquiry.designer,
@@ -320,7 +320,7 @@ def inquiry_wallpaper(inquiry):
rounded=False, rounded=False,
inc_vat=True, inc_vat=True,
), ),
"m2_price_excl_vat": m2_price( "m2_price_excl_vat": wallpaper_m2_price(
material, material,
inquiry.market, inquiry.market,
designer=inquiry.designer, designer=inquiry.designer,
@@ -555,7 +555,7 @@ def list_prices_wallpaper(territory):
market = market_model.from_territory(territory) market = market_model.from_territory(territory)
for wallpaper in wallpapers: for wallpaper in wallpapers:
result[wallpaper.id] = m2_price( result[wallpaper.id] = wallpaper_m2_price(
material=material, market=market, designer=wallpaper.product.designer material=material, market=market, designer=wallpaper.product.designer
) )
return jsonify(result) return jsonify(result)
+32 -42
View File
@@ -35,12 +35,20 @@ russia.price_adjustments = 1
russia.exchange_rate = 0.100000 # russia uses EUR russia.exchange_rate = 0.100000 # russia uses EUR
designer = DesignerFactory() 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) reseller = ContractCustomerFactory(pricepremium=15)
piterra = ContractCustomerFactory(pricepremium=36.029411) piterra = ContractCustomerFactory(pricepremium=36.029411)
designer_moomin = DesignerFactory() 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) standard_wallpaper = Material(name="standard-wallpaper", price=23600)
premium_wallpaper = Material(name="premium-wallpaper", price=26000) premium_wallpaper = Material(name="premium-wallpaper", price=26000)
@@ -50,51 +58,33 @@ standard_canvas = Material(name="standard-canvas", price=79920)
class TestPrice(unittest2.TestCase): class TestPrice(unittest2.TestCase):
def test_m2_price(self): def test_m2_price(self):
self.assertEqual( 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( 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( 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( self.assertEqual(
223, m2_price(material=standard_wallpaper, market=denmark, inc_vat=False) 223,
) wallpaper_m2_price(
self.assertAlmostEqual( material=standard_wallpaper, market=denmark, inc_vat=False
79.92,
m2_price(
material=standard_canvas, market=russia, rounded=False, 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) inquiry = Inquiry(pricepremium=36.029411)
self.assertEqual( self.assertEqual(
44, 44,
m2_price( wallpaper_m2_price(
material=standard_wallpaper, material=standard_wallpaper,
market=russia, market=russia,
reseller=piterra, reseller=piterra,
@@ -315,7 +305,7 @@ class TestPrice(unittest2.TestCase):
) )
self.assertEqual( self.assertEqual(
180, 181,
canvas_price( canvas_price(
width=150, width=150,
height=100, height=100,
@@ -325,7 +315,7 @@ class TestPrice(unittest2.TestCase):
), ),
) )
self.assertEqual( self.assertEqual(
180, 181,
canvas_price( canvas_price(
width=150, height=100, market=us, designer=designer_moomin, inc_vat=True 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): def test_wallpaper_product_inquiry_price(self):
designer = DesignerFactory() designer = DesignerFactory()
designer.pricepremium = 4 designer.pricepremium_wallpaper = 4
product = Product(designer=designer) product = Product(designer=designer)
with mock.patch.object(Inquiry, "market", sweden): with mock.patch.object(Inquiry, "market", sweden):
inquiry = Inquiry( inquiry = Inquiry(
@@ -402,7 +392,7 @@ class TestPrice(unittest2.TestCase):
def test_wallpaper_product2_inquiry_price(self): def test_wallpaper_product2_inquiry_price(self):
designer = DesignerFactory() designer = DesignerFactory()
designer.pricepremium = 4 designer.pricepremium_wallpaper = 4
product = Product(designer=designer) product = Product(designer=designer)
with mock.patch.object(Inquiry, "market", sweden): with mock.patch.object(Inquiry, "market", sweden):
inquiry = Inquiry( inquiry = Inquiry(
@@ -517,7 +507,7 @@ class TestPrice(unittest2.TestCase):
"high extra cost for us market wide posters", "high extra cost for us market wide posters",
) )
self.assertEqual( 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): def test_poster_hanger_price(self):
@@ -547,7 +537,7 @@ class TestPrice(unittest2.TestCase):
def test_framed_print_price(self): def test_framed_print_price(self):
self.assertEqual(598, framed_print_price(sku="GLOBAL-CFP-12x12", market=sweden)) self.assertEqual(598, framed_print_price(sku="GLOBAL-CFP-12x12", market=sweden))
self.assertEqual( self.assertEqual(
609, 639,
framed_print_price( framed_print_price(
sku="GLOBAL-CFP-12x12", market=sweden, designer=designer_moomin sku="GLOBAL-CFP-12x12", market=sweden, designer=designer_moomin
), ),
+15 -8
View File
@@ -34,8 +34,15 @@ class TestEndpoints(flask_testing.TestCase):
db.session.commit() db.session.commit()
return inquiry return inquiry
def _add_designer(self, pricepremium): def _add_designer(self, pricepremium_wallpaper=0, pricepremium_canvas=0):
designer = Designer("Disney", "disney", "US", "USD", pricepremium=pricepremium) designer = Designer(
"Disney",
"disney",
"US",
"USD",
pricepremium_wallpaper=pricepremium_wallpaper,
pricepremium_canvas=pricepremium_canvas,
)
db.session.add(designer) db.session.add(designer)
db.session.commit() db.session.commit()
return designer return designer
@@ -74,7 +81,7 @@ class TestEndpoints(flask_testing.TestCase):
def test_wallpaper_with_product(self): def test_wallpaper_with_product(self):
self._add_material("standard-wallpaper", 1, 23600) self._add_material("standard-wallpaper", 1, 23600)
self._add_material("premium-wallpaper", 1, 26000) self._add_material("premium-wallpaper", 1, 26000)
designer = self._add_designer(4) designer = self._add_designer(pricepremium_wallpaper=4)
product = self._add_product(designer) product = self._add_product(designer)
response = self.client.get( response = self.client.get(
"/prices/wallpaper?width=200&height=200&territory=SE&product=1" "/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"]) self.assertEqual(expected, response.json["data"])
def test_canvas_with_product(self): def test_canvas_with_product(self):
designer = self._add_designer(4) designer = self._add_designer(pricepremium_canvas=2)
product = self._add_product(designer) product = self._add_product(designer)
response = self.client.get( response = self.client.get(
"/prices/canvas?width=200&height=10&territory=SE&product=1" "/prices/canvas?width=200&height=10&territory=SE&product=1"
@@ -131,15 +138,15 @@ class TestEndpoints(flask_testing.TestCase):
{ {
"framed": True, "framed": True,
"height": 40, "height": 40,
"price": 1048.32, "price": 1028.16,
"price_excl_vat": 838.656, "price_excl_vat": 822.528,
"width": 150, "width": 150,
}, },
{ {
"framed": False, "framed": False,
"height": 20, "height": 20,
"price": 598.4888000000001, "price": 586.9794,
"price_excl_vat": 478.79104000000007, "price_excl_vat": 469.58352,
"width": 200, "width": 200,
}, },
] ]