Files
api2/api/models/market.py
T

111 lines
3.0 KiB
Python

# 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