111 lines
3.1 KiB
Python
111 lines
3.1 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 = [
|
|
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.25, '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
|