P5-6491 use market instead of territory for price calculations (#37)
This commit is contained in:
+4
-114
@@ -14,8 +14,11 @@ class Market(db.Model):
|
||||
vat = db.Column(db.Float, nullable=False)
|
||||
price_adjustments = db.Column("price_adjustment", db.Float, nullable=False)
|
||||
currency = db.Column(db.String(3), db.ForeignKey("product-currencies.iso3char"))
|
||||
exchange_rate = db.Column(db.Float)
|
||||
_pc = db.relationship(Currencies, uselist=False)
|
||||
exchange_rate = association_proxy("_pc", "exchange_rate")
|
||||
exchange_rate = association_proxy(
|
||||
"_pc", "exchange_rate", creator=lambda kw: Currencies(exchange_rate=kw)
|
||||
)
|
||||
|
||||
def to_json(self):
|
||||
return {
|
||||
@@ -26,116 +29,3 @@ class Market(db.Model):
|
||||
"currency": self.currency,
|
||||
"exchange_rate": str(self.exchange_rate),
|
||||
}
|
||||
|
||||
# hack: market need a territory to make it compatible with current price calculations code
|
||||
# this will be removed in P5-6491
|
||||
@property
|
||||
def territory(self):
|
||||
if self.name == 'GLOBAL':
|
||||
return 'EU'
|
||||
return self.name
|
||||
|
||||
|
||||
class PriceAdjustments(db.Model):
|
||||
|
||||
__tablename__ = "price_adjustments"
|
||||
|
||||
territory = db.Column(db.String(2), primary_key=True)
|
||||
adjustment = db.Column(db.Numeric)
|
||||
|
||||
|
||||
# P5-6490 deprecated market model. Will be replaced with Market
|
||||
class LegacyMarket(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 = 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.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.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 LegacyMarket(*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
|
||||
|
||||
Reference in New Issue
Block a user