Remove listprice code and read price adjustments from database (#56)
This commit is contained in:
+3
-12
@@ -1,15 +1,10 @@
|
|||||||
# coding=UTF-8
|
# coding=UTF-8
|
||||||
""" Price formulas """
|
""" Price formulas """
|
||||||
import yaml
|
from api.lib.utils import round_half_up
|
||||||
from api.lib.utils import lru_with_ttl, round_half_up
|
|
||||||
from api.models.external_print_product import get_external_print_product
|
from api.models.external_print_product import get_external_print_product
|
||||||
|
from api.models.price_adjustments import get_price_adjustment
|
||||||
|
|
||||||
|
|
||||||
@lru_with_ttl(ttl_seconds=3600)
|
|
||||||
def get_adjustment_config():
|
|
||||||
with open("api/resources/price-adjustments.yaml") as f:
|
|
||||||
return yaml.load(f, Loader=yaml.FullLoader)
|
|
||||||
|
|
||||||
def wallpaper_m2_price(
|
def wallpaper_m2_price(
|
||||||
material,
|
material,
|
||||||
market,
|
market,
|
||||||
@@ -34,12 +29,8 @@ def wallpaper_m2_price(
|
|||||||
price *= market.exchange_rate
|
price *= market.exchange_rate
|
||||||
price *= market.price_adjustments
|
price *= market.price_adjustments
|
||||||
|
|
||||||
adjustment_config = get_adjustment_config()
|
|
||||||
|
|
||||||
inquiry_or_product_key = "product" if inquiry is None else "inquiry"
|
inquiry_or_product_key = "product" if inquiry is None else "inquiry"
|
||||||
|
price *= get_price_adjustment(market.name, material.name, inquiry_or_product_key)
|
||||||
adj_value = adjustment_config.get(material.name).get(inquiry_or_product_key).get(market.name, 1.0)
|
|
||||||
price *= adj_value
|
|
||||||
|
|
||||||
if inc_vat:
|
if inc_vat:
|
||||||
price *= market.vat
|
price *= market.vat
|
||||||
|
|||||||
@@ -0,0 +1,34 @@
|
|||||||
|
# coding=UTF-8
|
||||||
|
|
||||||
|
from api.extensions import db
|
||||||
|
from api.lib.utils import lru_with_ttl
|
||||||
|
|
||||||
|
@lru_with_ttl(ttl_seconds=3600)
|
||||||
|
def get_adjustment_config():
|
||||||
|
sql = """
|
||||||
|
select
|
||||||
|
material, product_type, markets.name, price_adjustments.value
|
||||||
|
from
|
||||||
|
price_adjustments
|
||||||
|
join "product-materials" on material_id = materialid
|
||||||
|
join markets on market_id = markets.id
|
||||||
|
"""
|
||||||
|
|
||||||
|
result = db.session.execute(sql)
|
||||||
|
rows = result.fetchall()
|
||||||
|
config = {}
|
||||||
|
for row in rows:
|
||||||
|
[material, product_type, market, value] = row
|
||||||
|
if material not in config:
|
||||||
|
config[material] = {}
|
||||||
|
if product_type not in config[material]:
|
||||||
|
config[material][product_type] = {}
|
||||||
|
config[material][product_type][market] = float(value)
|
||||||
|
|
||||||
|
return config
|
||||||
|
|
||||||
|
|
||||||
|
def get_price_adjustment(market, product_type, material):
|
||||||
|
config = get_adjustment_config()
|
||||||
|
|
||||||
|
return config.get(material, {}).get(product_type, {}).get(market, 1.0)
|
||||||
@@ -1,20 +0,0 @@
|
|||||||
standard-wallpaper:
|
|
||||||
inquiry:
|
|
||||||
IT: 1.1034
|
|
||||||
GB: 1.1154
|
|
||||||
DE: 1.0625
|
|
||||||
product:
|
|
||||||
GB: 1.1154
|
|
||||||
DE: 1.0625
|
|
||||||
premium-wallpaper:
|
|
||||||
inquiry:
|
|
||||||
IT: 1.1250
|
|
||||||
SE: 1.0462
|
|
||||||
GB: 1.1034
|
|
||||||
DE: 1.1143
|
|
||||||
NL: 1.0833
|
|
||||||
product:
|
|
||||||
GB: 1.1034
|
|
||||||
DE: 1.1143
|
|
||||||
SE: 1.0462
|
|
||||||
NL: 1.0833
|
|
||||||
+2
-51
@@ -1,13 +1,12 @@
|
|||||||
from api.models.external_print_product import get_cheapest_canvas_product, get_cheapest_poster_product
|
from api.models.external_print_product import get_cheapest_canvas_product, get_cheapest_poster_product
|
||||||
from flask import Blueprint, request, jsonify, abort
|
from flask import Blueprint, request, jsonify
|
||||||
from api.helpers import check_api_key
|
from api.helpers import check_api_key
|
||||||
from api.validators import validate_number, validate_any_of, validate_exists
|
from api.validators import validate_number, validate_exists
|
||||||
from api.models import (
|
from api.models import (
|
||||||
Inquiry,
|
Inquiry,
|
||||||
Market,
|
Market,
|
||||||
Material,
|
Material,
|
||||||
Product,
|
Product,
|
||||||
PrintProduct,
|
|
||||||
ContractCustomer,
|
ContractCustomer,
|
||||||
)
|
)
|
||||||
from api.lib.prices import (
|
from api.lib.prices import (
|
||||||
@@ -262,54 +261,6 @@ def inquiry(inquiry_id):
|
|||||||
return jsonify(data)
|
return jsonify(data)
|
||||||
|
|
||||||
|
|
||||||
@mod.route("/list-prices/<int:market_id>/wallpaper")
|
|
||||||
def list_prices_wallpaper(market_id):
|
|
||||||
wallpapers = PrintProduct.query.wallpapers().all()
|
|
||||||
result = {}
|
|
||||||
material = Material.query.filter(Material.name == "standard-wallpaper").one()
|
|
||||||
market = Market.query.get_or_404(market_id)
|
|
||||||
|
|
||||||
for wallpaper in wallpapers:
|
|
||||||
result[wallpaper.id] = wallpaper_m2_price(
|
|
||||||
material=material, market=market, designer=wallpaper.product.designer
|
|
||||||
)
|
|
||||||
return jsonify(result)
|
|
||||||
|
|
||||||
|
|
||||||
@mod.route("/list-prices/<int:market_id>/canvas_external")
|
|
||||||
def list_prices_canvas_external(market_id):
|
|
||||||
canvases = PrintProduct.query.canvases().all()
|
|
||||||
market = Market.query.get_or_404(market_id)
|
|
||||||
external_product_id = get_cheapest_canvas_product()
|
|
||||||
|
|
||||||
result = {}
|
|
||||||
for canvas in canvases:
|
|
||||||
result[canvas.id] = external_product_price(
|
|
||||||
id = external_product_id,
|
|
||||||
market=market,
|
|
||||||
designer=canvas.product.designer
|
|
||||||
)
|
|
||||||
|
|
||||||
return jsonify(result)
|
|
||||||
|
|
||||||
|
|
||||||
@mod.route("/list-prices/<int:market_id>/poster_external")
|
|
||||||
def list_prices_poster_external(market_id):
|
|
||||||
posters = PrintProduct.query.posters().all()
|
|
||||||
market = Market.query.get_or_404(market_id)
|
|
||||||
external_product_id = get_cheapest_poster_product()
|
|
||||||
|
|
||||||
result = {}
|
|
||||||
for poster in posters:
|
|
||||||
result[poster.id] = external_product_price(
|
|
||||||
id = external_product_id,
|
|
||||||
market=market,
|
|
||||||
designer=poster.product.designer
|
|
||||||
)
|
|
||||||
|
|
||||||
return jsonify(result)
|
|
||||||
|
|
||||||
|
|
||||||
@mod.route("/external-product", methods=["GET"])
|
@mod.route("/external-product", methods=["GET"])
|
||||||
@validate_exists("market")
|
@validate_exists("market")
|
||||||
@validate_exists("id")
|
@validate_exists("id")
|
||||||
|
|||||||
Reference in New Issue
Block a user