diff --git a/api/lib/prices.py b/api/lib/prices.py index 3a24811..633c120 100644 --- a/api/lib/prices.py +++ b/api/lib/prices.py @@ -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)) diff --git a/api/resources/prices.py b/api/resources/prices.py index f0df0ed..d85a3bf 100644 --- a/api/resources/prices.py +++ b/api/resources/prices.py @@ -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,