From 3682e9b5fbc2adbfdce3bffc2f27a921e2207739 Mon Sep 17 00:00:00 2001 From: Oliver Walters Date: Tue, 3 Sep 2019 22:28:53 +1000 Subject: [PATCH] Display currency selection in part pricing dialog --- .../part/templates/part/part_pricing.html | 16 ++++---- InvenTree/part/views.py | 38 +++++++++++++++++-- InvenTree/templates/price.html | 1 + 3 files changed, 44 insertions(+), 11 deletions(-) create mode 100644 InvenTree/templates/price.html diff --git a/InvenTree/part/templates/part/part_pricing.html b/InvenTree/part/templates/part/part_pricing.html index 55d68f06e2..c0b23ffbd7 100644 --- a/InvenTree/part/templates/part/part_pricing.html +++ b/InvenTree/part/templates/part/part_pricing.html @@ -24,14 +24,14 @@ Pricing information for:
{% if min_total_buy_price %} Unit Cost - Min: {{ min_unit_buy_price }} - Max: {{ max_unit_buy_price }} + Min: {% include "price.html" with price=min_unit_buy_price %} + Max: {% include "price.html" with price=max_unit_buy_price %} {% if quantity > 1 %} Total Cost - Min: {{ min_total_buy_price }} - Max: {{ max_total_buy_price }} + Min: {% include "price.html" with price=min_total_buy_price %} + Max: {% include "price.html" with price=max_total_buy_price %} {% endif %} {% else %} @@ -50,14 +50,14 @@ Pricing information for:
{% if min_total_bom_price %} Unit Cost - Min: {{ min_unit_bom_price }} - Max: {{ max_unit_bom_price }} + Min: {% include "price.html" with price=min_unit_bom_price %} + Max: {% include "price.html" with price=max_unit_bom_price %} {% if quantity > 1 %} Total Cost - Min: {{ min_total_bom_price }} - Max: {{ max_total_bom_price }} + Min: {% include "price.html" with price=min_total_bom_price %} + Max: {% include "price.html" with price=max_total_bom_price %} {% endif %} {% if part.has_complete_bom_pricing == False %} diff --git a/InvenTree/part/views.py b/InvenTree/part/views.py index cc1300238e..ca5272ad71 100644 --- a/InvenTree/part/views.py +++ b/InvenTree/part/views.py @@ -17,12 +17,14 @@ from django.forms import HiddenInput, CheckboxInput import tablib from fuzzywuzzy import fuzz +from decimal import Decimal from .models import PartCategory, Part, PartAttachment from .models import PartParameterTemplate, PartParameter from .models import BomItem from .models import match_part_names +from common.models import Currency from company.models import SupplierPart from . import forms as part_forms @@ -1325,7 +1327,7 @@ class PartPricing(AjaxView): except Part.DoesNotExist: return None - def get_pricing(self, quantity=1): + def get_pricing(self, quantity=1, currency=None): try: quantity = int(quantity) @@ -1335,11 +1337,18 @@ class PartPricing(AjaxView): if quantity < 1: quantity = 1 + # Currency scaler + scaler = Decimal(1.0) + + if currency is not None: + scaler = Decimal(currency.value) + part = self.get_part() ctx = { 'part': part, - 'quantity': quantity + 'quantity': quantity, + 'currency': currency, } if part is None: @@ -1352,6 +1361,12 @@ class PartPricing(AjaxView): if buy_price is not None: min_buy_price, max_buy_price = buy_price + min_buy_price /= scaler + max_buy_price /= scaler + + min_buy_price = round(min_buy_price, 3) + max_buy_price = round(max_buy_price, 3) + if min_buy_price: ctx['min_total_buy_price'] = min_buy_price ctx['min_unit_buy_price'] = min_buy_price / quantity @@ -1368,6 +1383,12 @@ class PartPricing(AjaxView): if bom_price is not None: min_bom_price, max_bom_price = bom_price + min_bom_price /= scaler + max_bom_price /= scaler + + min_bom_price = round(min_bom_price, 3) + max_bom_price = round(max_bom_price, 3) + if min_bom_price: ctx['min_total_bom_price'] = min_bom_price ctx['min_unit_bom_price'] = min_bom_price / quantity @@ -1384,17 +1405,28 @@ class PartPricing(AjaxView): def post(self, request, *args, **kwargs): + currency = None + try: quantity = int(self.request.POST.get('quantity', 1)) except ValueError: quantity = 1 + try: + currency_id = int(self.request.POST.get('currency', None)) + + if currency_id: + currency = Currency.objects.get(pk=currency_id) + except (ValueError, Currency.DoesNotExist): + pass + + # Always mark the form as 'invalid' (the user may wish to keep getting pricing data) data = { 'form_valid': False, } - return self.renderJsonResponse(request, self.form_class(), data=data, context=self.get_pricing(quantity)) + return self.renderJsonResponse(request, self.form_class(), data=data, context=self.get_pricing(quantity, currency)) class PartParameterTemplateCreate(AjaxCreateView): diff --git a/InvenTree/templates/price.html b/InvenTree/templates/price.html new file mode 100644 index 0000000000..ef47d5edf2 --- /dev/null +++ b/InvenTree/templates/price.html @@ -0,0 +1 @@ +{% if currency %}{{ currency.symbol }}{% endif %}{{ price }}{% if currency %} {{ currency.suffix }}{% endif %} \ No newline at end of file