Add price calculations in inches, new minimum size 30x30cm (#74)

Co-authored-by: Fredrik Ringqvist <fredrik.ringqvist@photowall.se>
This commit is contained in:
Anders Gustafsson
2024-05-24 14:23:12 +02:00
committed by GitHub
co-authored by Fredrik Ringqvist
parent 01769758d0
commit 5ca2ae727c
2 changed files with 31 additions and 12 deletions
+10 -3
View File
@@ -80,13 +80,19 @@ def wallpaper_price_new(
height,
material,
market,
unit,
inquiry=None,
):
m2_prices = wallpaper_m2_price_new(product_id, material.id, market, inquiry)
if (unit == 'inch'):
width = width * 2.54
height = height * 2.54
sqm = (width / 100) * (height / 100)
min_sqm = 1
# 0.09 m2 = 30x30 cm, which means we can accept 1 sq feet (0.0929 m2)
min_sqm = 0.09
sqm = max(sqm, min_sqm)
@@ -207,6 +213,7 @@ def inquiry_price_new(
):
width = kwargs.get("width", inquiry.width)
height = kwargs.get("height", inquiry.height)
unit = kwargs.get("unit", None)
material = kwargs.get("material", inquiry.material)
external_id = kwargs.get("external_id")
@@ -220,9 +227,9 @@ def inquiry_price_new(
return prices
elif inquiry.product_group == "photo-wallpaper":
if is_own_image:
prices = wallpaper_price_new(None, width, height, material, inquiry.market, inquiry)
prices = wallpaper_price_new(None, width, height, material, inquiry.market, unit, inquiry)
else:
prices = wallpaper_price_new(product_id, width, height, material, inquiry.market, inquiry)
prices = wallpaper_price_new(product_id, width, height, material, inquiry.market, unit, inquiry)
else:
raise ValueError("Invalid product group: {}".format(inquiry.product_group))
+21 -9
View File
@@ -45,23 +45,24 @@ def get_designer():
@validate_number("width", "height")
@validate_exists("market")
def wallpaper():
width = request.args.get("width", type=int)
height = request.args.get("height", type=int)
width = request.args.get("width", type=float)
height = request.args.get("height", type=float)
market_id = request.args.get("market", type=int)
product_id = request.args.get("product", type=int)
unit = request.args.get("unit", type=str)
new_version = request.args.get("new_version") is not None
market = Market.query.get_or_404(market_id)
designer = get_designer()
reseller = get_reseller()
if width is None or height is None:
raise ValidationError("width and height must be integers")
raise ValidationError("width and height must be float")
materials = Material.query.wallpapers().all()
data = []
for material in materials:
if new_version:
prices = wallpaper_price_new(product_id, width, height, material, market)
prices = wallpaper_price_new(product_id, width, height, material, market, unit)
data.append(
{
"material": material.name,
@@ -146,8 +147,18 @@ def get_inquiry_measurements(inquiry):
# first try to get it from the query string. If that fails try to get it
# from the inquiry row in the database
width = request.args.get("width", type=int, default=inquiry.width)
height = request.args.get("height", type=int, default=inquiry.height)
unit = request.args.get("unit", type=str, default=None)
width = request.args.get("width", type=float, default=None)
height = request.args.get("height", type=float, default=None)
if unit and not (width and height):
raise Exception("With unit in query string width and height must also be there.")
if not width:
width = inquiry.width
if not height:
height = inquiry.height
# if we still are missing a width/height just set them to 1 to avoid
# errors in the price calculations
@@ -157,24 +168,25 @@ def get_inquiry_measurements(inquiry):
if not height:
height = 1
return width, height
return width, height, unit
def inquiry_wallpaper(inquiry, new_version=False):
width, height = get_inquiry_measurements(inquiry)
width, height, unit = get_inquiry_measurements(inquiry)
data = {
"id": inquiry.id,
"group": "wallpaper",
"width": width,
"height": height,
"unit": unit,
"retouch_price": inquiry.local_price_retouch(rounded=False, inc_vat=True),
}
materials = Material.query.wallpapers().all()
prices = []
for material in materials:
if new_version:
price = inquiry_price_new(inquiry, material=material, width=width, height=height)
price = inquiry_price_new(inquiry, material=material, width=width, height=height, unit=unit)
prices.append(
{
"material": material.name,