diff --git a/api/models/market.py b/api/models/market.py index 93dc682..9e41155 100644 --- a/api/models/market.py +++ b/api/models/market.py @@ -3,6 +3,7 @@ from api.extensions import db from .product import Currencies from sqlalchemy.orm import validates +from sqlalchemy.ext.associationproxy import association_proxy class Market(db.Model): @@ -11,8 +12,10 @@ class Market(db.Model): id = db.Column(db.Integer, primary_key=True) name = db.Column(db.String(255)) vat = db.Column(db.Float, nullable=False) - currency = db.Column(db.String(3)) price_adjustment = db.Column(db.Float, nullable=False) + currency = db.Column(db.String(3), db.ForeignKey("product-currencies.iso3char")) + _pc = db.relationship(Currencies, uselist=False) + exchange_rate = association_proxy("_pc", "exchange_rate", creator=lambda v: Currencies(exchange_rate=v)) @validates("name") def validate_name(self, key, value): @@ -25,6 +28,7 @@ class Market(db.Model): "price_adjustment": str(self.price_adjustment), "vat": str(self.vat), "currency": self.currency, + "exchange_rate": str(self.exchange_rate), } @@ -70,7 +74,7 @@ class LegacyMarket(object): if self._exchange_rate is None: row = Currencies.query.filter_by(iso3char=self.currency).first() if row: - self._exchange_rate = float(row.exchange_rate) + self._exchange_rate = row.exchange_rate else: self._exchange_rate = 1 return self._exchange_rate diff --git a/api/models/product.py b/api/models/product.py index f79a81a..ffa716c 100644 --- a/api/models/product.py +++ b/api/models/product.py @@ -50,7 +50,7 @@ class Currencies(db.Model): __tablename__ = "product-currencies" iso3char = db.Column(db.String(3), primary_key=True) - exchange_rate = db.Column(db.Numeric, default=1) + exchange_rate = db.Column(db.Float, default=1) class MaterialQuery(BaseQuery): diff --git a/tests/models/test_market.py b/tests/models/test_market.py index ecbe0c1..7e20961 100644 --- a/tests/models/test_market.py +++ b/tests/models/test_market.py @@ -1,11 +1,10 @@ # coding=UTF-8 import unittest2 -from api.models import market +from api.models import Market class TestMarket(unittest2.TestCase): - def test_sweden(self): - sweden = market.from_territory("SE") - self.assertEqual("sv", sweden.language) - self.assertEqual("SE", sweden.territory) + def test_exchange_rate(self): + market = Market(exchange_rate=0.123) + self.assertEqual(0.123, market.exchange_rate)