From 150bc1e674d202ef176ee6247c87d4ab63901389 Mon Sep 17 00:00:00 2001 From: Oliver Walters Date: Wed, 17 Apr 2019 00:35:49 +1000 Subject: [PATCH] Add API interface for SupplierPriceBreak --- InvenTree/part/api.py | 23 +++++++++++++++++++++-- InvenTree/part/models.py | 4 ++++ InvenTree/part/serializers.py | 14 +++++++++++++- 3 files changed, 38 insertions(+), 3 deletions(-) diff --git a/InvenTree/part/api.py b/InvenTree/part/api.py index bbb44a14e6..d849506c06 100644 --- a/InvenTree/part/api.py +++ b/InvenTree/part/api.py @@ -10,10 +10,10 @@ from django.conf.urls import url, include from django.shortcuts import get_object_or_404 from .models import Part, PartCategory, BomItem -from .models import SupplierPart +from .models import SupplierPart, SupplierPriceBreak from .serializers import PartSerializer, BomItemSerializer -from .serializers import SupplierPartSerializer +from .serializers import SupplierPartSerializer, SupplierPriceBreakSerializer from .serializers import CategorySerializer from InvenTree.views import TreeSerializer @@ -168,6 +168,24 @@ class SupplierPartList(generics.ListAPIView): ] +class SupplierPriceBreakList(generics.ListCreateAPIView): + + queryset = SupplierPriceBreak.objects.all() + serializer_class = SupplierPriceBreakSerializer + + permission_classes = [ + permissions.IsAuthenticatedOrReadOnly, + ] + + filter_backends = [ + DjangoFilterBackend, + ] + + filter_fields = [ + 'part', + ] + + cat_api_urls = [ url(r'^$', CategoryList.as_view(), name='api-part-category-list'), ] @@ -177,6 +195,7 @@ part_api_urls = [ url(r'^category/', include(cat_api_urls)), + url(r'^price-break/?', SupplierPriceBreakList.as_view(), name='api-part-supplier-price'), url(r'^supplier/?', SupplierPartList.as_view(), name='api-part-supplier-list'), url(r'^bom/?', BomList.as_view(), name='api-bom-list'), diff --git a/InvenTree/part/models.py b/InvenTree/part/models.py index 8b5755550e..c7d6f8903f 100644 --- a/InvenTree/part/models.py +++ b/InvenTree/part/models.py @@ -508,6 +508,10 @@ class SupplierPart(models.Model): return ' | '.join(items) + @property + def has_price_breaks(self): + return self.price_breaks.count() > 0 + def get_price(self, quantity, moq=True, multiples=True): """ Calculate the supplier price based on quantity price breaks. - If no price breaks available, use the single_price field diff --git a/InvenTree/part/serializers.py b/InvenTree/part/serializers.py index 5e2596d126..26dc985666 100644 --- a/InvenTree/part/serializers.py +++ b/InvenTree/part/serializers.py @@ -1,7 +1,7 @@ from rest_framework import serializers from .models import Part, PartCategory, BomItem -from .models import SupplierPart +from .models import SupplierPart, SupplierPriceBreak from company.serializers import CompanyBriefSerializer @@ -104,3 +104,15 @@ class SupplierPartSerializer(serializers.ModelSerializer): 'manufacturer', 'MPN', ] + + +class SupplierPriceBreakSerializer(serializers.ModelSerializer): + + class Meta: + model = SupplierPriceBreak + fields = [ + 'pk', + 'part', + 'quantity', + 'cost' + ] \ No newline at end of file