# 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.25, 'ESP'), ('France', 'fr_FR', 'EUR', 1.20, 'FRA'), ('Poland', 'pl_PL', 'PLN', 1.25, '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