diff --git a/InvenTree/order/forms.py b/InvenTree/order/forms.py index 770dd392bf..aa0c897c8a 100644 --- a/InvenTree/order/forms.py +++ b/InvenTree/order/forms.py @@ -175,6 +175,7 @@ class EditPurchaseOrderLineItemForm(HelperForm): 'part', 'quantity', 'reference', + 'purchase_price', 'notes', ] diff --git a/InvenTree/order/migrations/0038_auto_20201112_1737.py b/InvenTree/order/migrations/0038_auto_20201112_1737.py new file mode 100644 index 0000000000..0d563c80d4 --- /dev/null +++ b/InvenTree/order/migrations/0038_auto_20201112_1737.py @@ -0,0 +1,24 @@ +# Generated by Django 3.0.7 on 2020-11-12 06:37 + +from django.db import migrations +import djmoney.models.fields + + +class Migration(migrations.Migration): + + dependencies = [ + ('order', '0037_auto_20201110_0911'), + ] + + operations = [ + migrations.AddField( + model_name='purchaseorderlineitem', + name='purchase_price', + field=djmoney.models.fields.MoneyField(decimal_places=4, default_currency='USD', help_text='Unit purchase price', max_digits=19, null=True, verbose_name='Purchase Price'), + ), + migrations.AddField( + model_name='purchaseorderlineitem', + name='purchase_price_currency', + field=djmoney.models.fields.CurrencyField(choices=[('AUD', 'Australian Dollar'), ('CAD', 'Canadian Dollar'), ('EUR', 'Euro'), ('NZD', 'New Zealand Dollar'), ('GBP', 'Pound Sterling'), ('USD', 'US Dollar'), ('JPY', 'Yen')], default='USD', editable=False, max_length=3), + ), + ] diff --git a/InvenTree/order/models.py b/InvenTree/order/models.py index 359b0cf752..e888ae11c7 100644 --- a/InvenTree/order/models.py +++ b/InvenTree/order/models.py @@ -4,6 +4,10 @@ Order model definitions # -*- coding: utf-8 -*- +import os +from datetime import datetime +from decimal import Decimal + from django.db import models, transaction from django.db.models import F, Sum from django.db.models.functions import Coalesce @@ -15,9 +19,7 @@ from django.utils.translation import ugettext as _ from markdownx.models import MarkdownxField -import os -from datetime import datetime -from decimal import Decimal +from djmoney.models.fields import MoneyField from part import models as PartModels from stock import models as stock_models @@ -499,6 +501,15 @@ class PurchaseOrderLineItem(OrderLineItem): received = models.DecimalField(decimal_places=5, max_digits=15, default=0, help_text=_('Number of items received')) + purchase_price = MoneyField( + max_digits=19, + decimal_places=4, + default_currency='USD', + null=True, + verbose_name=_('Purchase Price'), + help_text=_('Unit purchase price'), + ) + def remaining(self): """ Calculate the number of items remaining to be received """ r = self.quantity - self.received diff --git a/InvenTree/order/serializers.py b/InvenTree/order/serializers.py index e9838f3347..c91ec6e02d 100644 --- a/InvenTree/order/serializers.py +++ b/InvenTree/order/serializers.py @@ -95,6 +95,8 @@ class POLineItemSerializer(InvenTreeModelSerializer): part_detail = PartBriefSerializer(source='get_base_part', many=False, read_only=True) supplier_part_detail = SupplierPartSerializer(source='part', many=False, read_only=True) + purchase_price_string = serializers.CharField(source='purchase_price', read_only=True) + class Meta: model = PurchaseOrderLineItem @@ -108,6 +110,9 @@ class POLineItemSerializer(InvenTreeModelSerializer): 'part_detail', 'supplier_part_detail', 'received', + 'purchase_price', + 'purchase_price_currency', + 'purchase_price_string', ] diff --git a/InvenTree/order/templates/order/purchase_order_detail.html b/InvenTree/order/templates/order/purchase_order_detail.html index b9eb27d27c..0829eb18e1 100644 --- a/InvenTree/order/templates/order/purchase_order_detail.html +++ b/InvenTree/order/templates/order/purchase_order_detail.html @@ -178,6 +178,14 @@ $("#po-table").inventreeTable({ field: 'quantity', title: '{% trans "Quantity" %}' }, + { + sortable: true, + field: 'purchase_price', + title: '{% trans "Unit Price" %}', + formatter: function(value, row) { + return row.purchase_price_string || row.purchase_price; + } + }, { sortable: true, field: 'received',