P5-6370 inquires should use markets instead of territores for calculating prices #36

This commit is contained in:
Martin Carlsson
2021-01-19 14:32:06 +01:00
committed by GitHub
parent 2692737100
commit dee7344ba5
6 changed files with 25 additions and 39 deletions
+1 -1
View File
@@ -4,7 +4,7 @@ from .designer import Designer
from .category import Category from .category import Category
from .contract_customer import ContractCustomer from .contract_customer import ContractCustomer
from .inquiry import Inquiry from .inquiry import Inquiry
from .product import Material, Product from .product import Material, Product, Currencies
from .order import ( from .order import (
Order, Order,
OrderField, OrderField,
+3 -8
View File
@@ -9,7 +9,9 @@ class Inquiry(db.Model):
__tablename__ = "inquiries" __tablename__ = "inquiries"
id = db.Column("inquiryid", db.Integer, primary_key=True) id = db.Column("inquiryid", db.Integer, primary_key=True)
territory = db.Column(db.String(2)) market_id = db.Column(db.Integer, db.ForeignKey("markets.id"))
market = db.relationship("Market", backref="inquiries")
product_group = db.Column(db.String(100)) product_group = db.Column(db.String(100))
price_m2 = db.Column(db.Numeric) price_m2 = db.Column(db.Numeric)
price_effect = db.Column(db.Numeric) price_effect = db.Column(db.Numeric)
@@ -36,13 +38,6 @@ class Inquiry(db.Model):
product = db.relationship("Product", uselist=False) product = db.relationship("Product", uselist=False)
automated = db.Column(db.Integer, nullable=False, default=0) automated = db.Column(db.Integer, nullable=False, default=0)
@property
def market(self):
market = market_model.from_territory(self.territory)
if not market:
raise ValueError("Invalid territory: {}".format(self.territory))
return market
def local_price_retouch(self, rounded=True, inc_vat=False): def local_price_retouch(self, rounded=True, inc_vat=False):
""" returns the retouch price in the inquiry local currency """ """ returns the retouch price in the inquiry local currency """
if not self.price_retouch: if not self.price_retouch:
+11 -7
View File
@@ -12,25 +12,29 @@ class Market(db.Model):
id = db.Column(db.Integer, primary_key=True) id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(255)) name = db.Column(db.String(255))
vat = db.Column(db.Float, nullable=False) vat = db.Column(db.Float, nullable=False)
price_adjustment = db.Column(db.Float, nullable=False) price_adjustments = db.Column("price_adjustment", db.Float, nullable=False)
currency = db.Column(db.String(3), db.ForeignKey("product-currencies.iso3char")) currency = db.Column(db.String(3), db.ForeignKey("product-currencies.iso3char"))
_pc = db.relationship(Currencies, uselist=False) _pc = db.relationship(Currencies, uselist=False)
exchange_rate = association_proxy("_pc", "exchange_rate", creator=lambda v: Currencies(exchange_rate=v)) exchange_rate = association_proxy("_pc", "exchange_rate")
@validates("name")
def validate_name(self, key, value):
raise ValueError("Name can not be modified")
def to_json(self): def to_json(self):
return { return {
"id": self.id, "id": self.id,
"name": self.name, "name": self.name,
"price_adjustment": str(self.price_adjustment), "price_adjustment": str(self.price_adjustments),
"vat": str(self.vat), "vat": str(self.vat),
"currency": self.currency, "currency": self.currency,
"exchange_rate": str(self.exchange_rate), "exchange_rate": str(self.exchange_rate),
} }
# hack: market need a territory to make it compatible with current price calculations code
# this will be removed in P5-6491
@property
def territory(self):
if self.name == 'GLOBAL':
return 'EU'
return self.name
class PriceAdjustments(db.Model): class PriceAdjustments(db.Model):
-5
View File
@@ -340,7 +340,6 @@ class TestPrice(unittest2.TestCase):
with mock.patch.object(Inquiry, "market", nl): with mock.patch.object(Inquiry, "market", nl):
inquiry = Inquiry( inquiry = Inquiry(
product_group="photo-wallpaper", product_group="photo-wallpaper",
territory="NL",
pricepremium=0, pricepremium=0,
width=350, width=350,
height=270, height=270,
@@ -373,7 +372,6 @@ class TestPrice(unittest2.TestCase):
with mock.patch.object(Inquiry, "market", sweden): with mock.patch.object(Inquiry, "market", sweden):
inquiry = Inquiry( inquiry = Inquiry(
product_group="photo-wallpaper", product_group="photo-wallpaper",
territory="SE",
pricepremium=0, pricepremium=0,
width=350, width=350,
height=280, height=280,
@@ -393,7 +391,6 @@ class TestPrice(unittest2.TestCase):
with mock.patch.object(Inquiry, "market", sweden): with mock.patch.object(Inquiry, "market", sweden):
inquiry = Inquiry( inquiry = Inquiry(
product_group="photo-wallpaper", product_group="photo-wallpaper",
territory="SE",
pricepremium=25, pricepremium=25,
width=250, width=250,
height=400, height=400,
@@ -412,7 +409,6 @@ class TestPrice(unittest2.TestCase):
with mock.patch.object(Inquiry, "market", sweden): with mock.patch.object(Inquiry, "market", sweden):
inquiry = Inquiry( inquiry = Inquiry(
product_group="canvas", product_group="canvas",
territory="SE",
width=100, width=100,
height=100, height=100,
framed=True, framed=True,
@@ -472,7 +468,6 @@ class TestPrice(unittest2.TestCase):
with mock.patch.object(Inquiry, "market", sweden): with mock.patch.object(Inquiry, "market", sweden):
inquiry = Inquiry( inquiry = Inquiry(
product_group="poster", product_group="poster",
territory="SE",
width=30, width=30,
height=40, height=40,
hanger=True, hanger=True,
-10
View File
@@ -1,10 +0,0 @@
# coding=UTF-8
import unittest2
from api.models import Market
class TestMarket(unittest2.TestCase):
def test_exchange_rate(self):
market = Market(exchange_rate=0.123)
self.assertEqual(0.123, market.exchange_rate)
+10 -8
View File
@@ -1,9 +1,8 @@
import json import json
import flask_testing import flask_testing
from api import create_app, db from api import create_app, db
from api.models.product import Material, Product from api.models.product import Material, Product, Currencies
from api.models.inquiry import Inquiry from api.models import Inquiry, Designer, Market
from api.models.designer import Designer
from api.lib import pwinty from api.lib import pwinty
@@ -24,9 +23,12 @@ class TestEndpoints(flask_testing.TestCase):
db.session.commit() db.session.commit()
return material return material
def _add_inquiry(self, territory, product_group, price_retouch=100): def _add_inquiry(self, product_group, price_retouch=100):
currency = Currencies(iso3char="SEK", exchange_rate=1)
db.session.add(currency)
market = Market(name="SE", vat=1.25, currency='SEK', price_adjustments=1)
inquiry = Inquiry( inquiry = Inquiry(
territory=territory, market=market,
product_group=product_group, product_group=product_group,
price_retouch=price_retouch, price_retouch=price_retouch,
) )
@@ -192,20 +194,20 @@ class TestEndpoints(flask_testing.TestCase):
def test_inquiry_wallpaper(self): def test_inquiry_wallpaper(self):
self._add_material("standard-wallpaper", 1, 236) self._add_material("standard-wallpaper", 1, 236)
self._add_material("premium-wallpaper", 1, 260) self._add_material("premium-wallpaper", 1, 260)
self._add_inquiry(territory="SE", product_group="photo-wallpaper") self._add_inquiry(product_group="photo-wallpaper")
response = self.client.get("/prices/inquiry/1?width=100&height=100") response = self.client.get("/prices/inquiry/1?width=100&height=100")
self.assert200(response) self.assert200(response)
self.assertEqual("wallpaper", response.json["group"]) self.assertEqual("wallpaper", response.json["group"])
def test_inquiry_canvas(self): def test_inquiry_canvas(self):
self._add_material("standard-canvas", 2, 799.2) self._add_material("standard-canvas", 2, 799.2)
self._add_inquiry(territory="SE", product_group="canvas") self._add_inquiry(product_group="canvas")
response = self.client.get("/prices/inquiry/1?width=100&height=100") response = self.client.get("/prices/inquiry/1?width=100&height=100")
self.assert200(response) self.assert200(response)
self.assertEqual("canvas", response.json["group"]) self.assertEqual("canvas", response.json["group"])
def test_inquiry_poster(self): def test_inquiry_poster(self):
self._add_inquiry(territory="SE", product_group="poster") self._add_inquiry(product_group="poster")
response = self.client.get("/prices/inquiry/1?width=100&height=100") response = self.client.get("/prices/inquiry/1?width=100&height=100")
self.assert200(response) self.assert200(response)
self.assertEqual("poster", response.json["group"]) self.assertEqual("poster", response.json["group"])