# 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 = [ Market('Sweden', 'sv_SE', 'SEK', 1.25, 'SWE'), Market('Norway', 'nn_NO', 'NOK', 1.25, 'NOR'), Market('United kingdom', 'en_GB', 'GBP', 1.20, 'GBR'), Market('Denmark', 'da_DK', 'DKK', 1.25, 'DNK'), Market('Finland', 'fi_FI', 'EUR', 1.24, 'FIN'), Market('Russia', 'ru_RU', 'EUR', 1, 'RUS'), Market('Germany', 'de_DE', 'EUR', 1.19, 'DEU'), Market('Netherlands', 'nl_NL', 'EUR', 1.21, 'NLD'), Market('Austria', 'de_AT', 'EUR', 1.20, 'AUT'), Market('USA', 'en_US', 'USD', 1, 'USA'), Market('Spain', 'es_ES', 'EUR', 1.25, 'ESP'), Market('France', 'fr_FR', 'EUR', 1.20, 'FRA'), Market('Poland', 'pl_PL', 'PLN', 1.25, 'POL'), Market('International', 'en_EU', 'EUR', 1.25, None), ] def iter_markets(): for market in _markets: yield 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