Files
api2/api/models/market.py
T

108 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),
]
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