109 lines
3.0 KiB
Python
109 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"),
|
|
("Germany", "de_DE", "EUR", 1.16, "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),
|
|
("Italy", "it_IT", "EUR", 1.22, "ITA"),
|
|
]
|
|
|
|
|
|
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
|