P5-4783 add different designer pricepremium for each product group
This commit is contained in:
+6
-6
@@ -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
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|||||||
@@ -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
@@ -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
|
||||||
),
|
),
|
||||||
|
|||||||
@@ -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,
|
||||||
},
|
},
|
||||||
]
|
]
|
||||||
|
|||||||
Reference in New Issue
Block a user