2
0
mirror of https://github.com/inventree/InvenTree.git synced 2025-06-20 13:56:30 +00:00

Separate concept of "OrderStatus" into "SalesOrderStatus" and "PurchaseOrderStatus"

This commit is contained in:
Oliver Walters
2020-04-23 20:38:09 +10:00
parent 7f020cbbf6
commit 435c13cf7c
19 changed files with 171 additions and 91 deletions

View File

@ -39,7 +39,7 @@ from InvenTree.models import InvenTreeTree, InvenTreeAttachment
from InvenTree.fields import InvenTreeURLField
from InvenTree.helpers import decimal2string, normalize
from InvenTree.status_codes import BuildStatus, StockStatus, OrderStatus
from InvenTree.status_codes import BuildStatus, StockStatus, PurchaseOrderStatus
from company.models import SupplierPart
@ -955,18 +955,18 @@ class Part(models.Model):
def open_purchase_orders(self):
""" Return a list of open purchase orders against this part """
return [order for order in self.purchase_orders() if order.status in OrderStatus.OPEN]
return [order for order in self.purchase_orders() if order.status in PurchaseOrderStatus.OPEN]
def closed_purchase_orders(self):
""" Return a list of closed purchase orders against this part """
return [order for order in self.purchase_orders() if order.status not in OrderStatus.OPEN]
return [order for order in self.purchase_orders() if order.status not in PurchaseOrderStatus.OPEN]
@property
def on_order(self):
""" Return the total number of items on order for this part. """
orders = self.supplier_parts.filter(purchase_order_line_items__order__status__in=OrderStatus.OPEN).aggregate(
orders = self.supplier_parts.filter(purchase_order_line_items__order__status__in=PurchaseOrderStatus.OPEN).aggregate(
quantity=Sum('purchase_order_line_items__quantity'),
received=Sum('purchase_order_line_items__received')
)

View File

@ -15,7 +15,7 @@ from decimal import Decimal
from django.db.models import Q, Sum
from django.db.models.functions import Coalesce
from InvenTree.status_codes import StockStatus, OrderStatus, BuildStatus
from InvenTree.status_codes import StockStatus, PurchaseOrderStatus, BuildStatus
from InvenTree.serializers import InvenTreeModelSerializer
@ -120,7 +120,7 @@ class PartSerializer(InvenTreeModelSerializer):
stock_filter = Q(stock_items__status__in=StockStatus.AVAILABLE_CODES)
# Filter to limit orders to "open"
order_filter = Q(supplier_parts__purchase_order_line_items__order__status__in=OrderStatus.OPEN)
order_filter = Q(supplier_parts__purchase_order_line_items__order__status__in=PurchaseOrderStatus.OPEN)
# Filter to limit builds to "active"
build_filter = Q(builds__status__in=BuildStatus.ACTIVE_CODES)

View File

@ -4,14 +4,20 @@ Provide templates for the various model status codes.
from django import template
from django.utils.safestring import mark_safe
from InvenTree.status_codes import OrderStatus, StockStatus, BuildStatus
from InvenTree.status_codes import PurchaseOrderStatus, SalesOrderStatus
from InvenTree.status_codes import StockStatus, BuildStatus
register = template.Library()
@register.simple_tag
def order_status(key, *args, **kwargs):
return mark_safe(OrderStatus.render(key))
def purchase_order_status(key, *args, **kwargs):
return mark_safe(PurchaseOrderStatus.render(key))
@register.simple_tag
def sales_order_status(key, *args, **kwargs):
return mark_safe(SalesOrderStatus.render(key))
@register.simple_tag
@ -30,7 +36,8 @@ def load_status_codes(context):
Make the various StatusCodes available to the page context
"""
context['order_status_codes'] = OrderStatus.list()
context['purchase_order_status_codes'] = PurchaseOrderStatus.list()
context['sales_order_status_codes'] = SalesOrderStatus.list()
context['stock_status_codes'] = StockStatus.list()
context['build_status_codes'] = BuildStatus.list()

View File

@ -38,7 +38,7 @@ from InvenTree.views import AjaxView, AjaxCreateView, AjaxUpdateView, AjaxDelete
from InvenTree.views import QRCodeView
from InvenTree.helpers import DownloadFile, str2bool
from InvenTree.status_codes import OrderStatus, BuildStatus
from InvenTree.status_codes import PurchaseOrderStatus, BuildStatus
class PartIndex(ListView):
@ -561,8 +561,6 @@ class PartNotes(UpdateView):
ctx['starred'] = part.isStarredBy(self.request.user)
ctx['disabled'] = not part.active
ctx['OrderStatus'] = OrderStatus
return ctx
@ -593,9 +591,6 @@ class PartDetail(DetailView):
context['starred'] = part.isStarredBy(self.request.user)
context['disabled'] = not part.active
context['OrderStatus'] = OrderStatus
context['BuildStatus'] = BuildStatus
return context