From e51fee081bd058f61ae99deadce4ad8baa32ea48 Mon Sep 17 00:00:00 2001 From: Oliver Walters Date: Thu, 17 Sep 2020 23:19:50 +1000 Subject: [PATCH] SupplierPart price break table now uses API rather than django template --- InvenTree/InvenTree/version.py | 2 +- InvenTree/common/models.py | 8 + InvenTree/company/serializers.py | 13 +- .../company/supplier_part_pricing.html | 138 ++++++++++-------- 4 files changed, 100 insertions(+), 61 deletions(-) diff --git a/InvenTree/InvenTree/version.py b/InvenTree/InvenTree/version.py index 4aac01c8df..b64a23a6fb 100644 --- a/InvenTree/InvenTree/version.py +++ b/InvenTree/InvenTree/version.py @@ -12,7 +12,7 @@ INVENTREE_SW_VERSION = "0.1.3 pre" def inventreeInstanceName(): """ Returns the InstanceName settings for the current database """ - return common.modelsInvenTreeSetting.get_setting("InstanceName", "") + return common.models.InvenTreeSetting.get_setting("InstanceName", "") def inventreeVersion(): diff --git a/InvenTree/common/models.py b/InvenTree/common/models.py index e92d55d111..b0a836118d 100644 --- a/InvenTree/common/models.py +++ b/InvenTree/common/models.py @@ -176,6 +176,14 @@ class PriceBreak(models.Model): currency = models.ForeignKey(Currency, blank=True, null=True, on_delete=models.SET_NULL) + @property + def symbol(self): + return self.currency.symbol if self.currency else '' + + @property + def suffix(self): + return self.currency.suffix if self.currency else '' + @property def converted_cost(self): """ diff --git a/InvenTree/company/serializers.py b/InvenTree/company/serializers.py index a80b3b55a9..f6de7d4f50 100644 --- a/InvenTree/company/serializers.py +++ b/InvenTree/company/serializers.py @@ -137,11 +137,22 @@ class SupplierPartSerializer(InvenTreeModelSerializer): class SupplierPriceBreakSerializer(InvenTreeModelSerializer): """ Serializer for SupplierPriceBreak object """ + symbol = serializers.CharField(read_only=True) + + suffix = serializers.CharField(read_only=True) + + quantity = serializers.FloatField() + + cost = serializers.FloatField() + class Meta: model = SupplierPriceBreak fields = [ 'pk', 'part', 'quantity', - 'cost' + 'cost', + 'currency', + 'symbol', + 'suffix', ] diff --git a/InvenTree/company/templates/company/supplier_part_pricing.html b/InvenTree/company/templates/company/supplier_part_pricing.html index 080871ace7..28cc917e1a 100644 --- a/InvenTree/company/templates/company/supplier_part_pricing.html +++ b/InvenTree/company/templates/company/supplier_part_pricing.html @@ -10,45 +10,12 @@

{% trans "Pricing Information" %}

- - - {% if part.base_cost > 0 %} - - {% endif %} - - - - - - - - - {% if part.price_breaks.all %} - {% for pb in part.price_breaks.all %} - - - - - {% endfor %} - {% else %} - - - - {% endif %} + +
+ +
+ +
{% trans "Order Multiple" %}{{ part.multiple }}
{% trans "Base Price (Flat Fee)" %}{{ part.base_cost }}
{% trans "Price Breaks" %} -
- -
-
{% trans "Quantity" %}{% trans "Price" %}
{% decimal pb.quantity %} - {% if pb.currency %}{{ pb.currency.symbol }}{% endif %} - {% decimal pb.cost %} - {% if pb.currency %}{{ pb.currency.suffix }}{% endif %} -
- - -
-
- {% trans "No price breaks have been added for this part" %} -
{% endblock %} @@ -56,7 +23,80 @@ {% block js_ready %} {{ block.super }} +function reloadPriceBreaks() { + $("#price-break-table").bootstrapTable("refresh"); +} +$('#price-break-table').inventreeTable({ + name: 'buypricebreaks', + formatNoMatches: function() { return "{% trans "No price break information found" %}"; }, + queryParams: { + part: {{ part.id }}, + }, + url: "{% url 'api-part-supplier-price' %}", + onLoadSuccess: function() { + var table = $('#price-break-table'); + + table.find('.button-price-break-delete').click(function() { + var pk = $(this).attr('pk'); + + launchModalForm( + `/price-break/${pk}/delete/`, + { + success: reloadPriceBreaks + } + ); + }); + + table.find('.button-price-break-edit').click(function() { + var pk = $(this).attr('pk'); + + launchModalForm( + `/price-break/${pk}/edit/`, + { + success: reloadPriceBreaks + } + ); + }); + }, + columns: [ + { + field: 'pk', + title: 'ID', + visible: false, + switchable: false, + }, + { + field: 'quantity', + title: '{% trans "Quantity" %}', + sortable: true, + }, + { + field: 'cost', + title: '{% trans "Price" %}', + sortable: true, + formatter: function(value, row, index) { + var html = ''; + + html += row.symbol || ''; + html += value; + + if (row.suffix) { + html += ' ' + row.suffix || ''; + } + + html += `
` + + html += makeIconButton('fa-edit icon-blue', 'button-price-break-edit', row.pk, '{% trans "Edit price break" %}'); + html += makeIconButton('fa-trash-alt icon-red', 'button-price-break-delete', row.pk, '{% trans "Delete price break" %}'); + + html += `
`; + + return html; + } + }, + ] +}); $('#new-price-break').click(function() { launchModalForm("{% url 'price-break-create' %}", @@ -69,24 +109,4 @@ $('#new-price-break').click(function() { ); }); -$('.pb-edit-button').click(function() { - var button = $(this); - - launchModalForm(button.attr('url'), - { - reload: true, - } - ); -}); - -$('.pb-delete-button').click(function() { - var button = $(this); - - launchModalForm(button.attr('url'), - { - reload: true, - } - ); -}); - {% endblock %} \ No newline at end of file