# coding=UTF-8 from api.extensions import db from .product import Currencies class PriceAdjustments(db.Model): __tablename__ = "price_adjustments" territory = db.Column(db.String(2), primary_key=True) adjustment = db.Column(db.Numeric) class Market(object): def __init__(self, name, locale, currency, vat, iso3): self.name = name self.locale = locale self.currency = currency self.vat = vat self.iso3 = iso3 self.language = locale.split("_")[0] self.territory = locale.split("_")[1] self._price_adjustments = None self._exchange_rate = None self._price_adjustments = None @property def price_adjustments(self): if self._price_adjustments is None: row = PriceAdjustments.query.filter_by(territory=self.territory).first() if row: self._price_adjustments = float(row.adjustment) else: self._price_adjustments = 1 return self._price_adjustments @price_adjustments.setter def price_adjustments(self, value): self._price_adjustments = value @property def exchange_rate(self): if self._exchange_rate is None: row = Currencies.query.filter_by(iso3char=self.currency).first() if row: self._exchange_rate = float(row.exchange_rate) else: self._exchange_rate = 1 return self._exchange_rate @exchange_rate.setter def exchange_rate(self, value): self._exchange_rate = value def to_json(self): return { "name": self.name, "locale": self.locale, "currency": self.currency, "vat": self.vat, "iso3": self.iso3, "language": self.language, "territory": self.territory, "price_adjustments": self.price_adjustments, "exchange_rate": self.exchange_rate, } def __repr__(self): return self.locale _markets = [ ("Sweden", "sv_SE", "SEK", 1.25, "SWE"), ("Norway", "nn_NO", "NOK", 1.25, "NOR"), ("United kingdom", "en_GB", "GBP", 1.20, "GBR"), ("Denmark", "da_DK", "DKK", 1.25, "DNK"), ("Finland", "fi_FI", "EUR", 1.24, "FIN"), ("Russia", "ru_RU", "EUR", 1, "RUS"), ("Germany", "de_DE", "EUR", 1.19, "DEU"), ("Netherlands", "nl_NL", "EUR", 1.21, "NLD"), ("Austria", "de_AT", "EUR", 1.20, "AUT"), ("USA", "en_US", "USD", 1, "USA"), ("Spain", "es_ES", "EUR", 1.21, "ESP"), ("France", "fr_FR", "EUR", 1.20, "FRA"), ("Poland", "pl_PL", "EUR", 1.23, "POL"), ("International", "en_EU", "EUR", 1.25, None), ] def iter_markets(): for market in _markets: yield Market(*market) def from_locale(locale): for market in iter_markets(): if market.locale == locale: return market return None def from_territory(territory): for market in iter_markets(): if market.territory == territory.upper(): return market return None