From c6134b54ab93224c22aa4f2c4a40ab9bae6d02a0 Mon Sep 17 00:00:00 2001 From: Oliver Walters Date: Fri, 18 Dec 2020 12:26:58 +1100 Subject: [PATCH] Add "overdue" status to SalesOrder serializer --- InvenTree/order/serializers.py | 28 +++++++++++++++++++++++----- InvenTree/templates/js/order.js | 8 +++++++- 2 files changed, 30 insertions(+), 6 deletions(-) diff --git a/InvenTree/order/serializers.py b/InvenTree/order/serializers.py index c91ec6e02d..84327e19b8 100644 --- a/InvenTree/order/serializers.py +++ b/InvenTree/order/serializers.py @@ -9,6 +9,9 @@ from rest_framework import serializers from sql_util.utils import SubqueryCount +from django.db.models import Case, When, Value +from django.db.models import BooleanField + from InvenTree.serializers import InvenTreeModelSerializer from InvenTree.serializers import InvenTreeAttachmentSerializerField @@ -152,12 +155,24 @@ class SalesOrderSerializer(InvenTreeModelSerializer): def annotate_queryset(queryset): """ Add extra information to the queryset + + - Number of line items in the SalesOrder + - Overdue status of the SalesOrder """ queryset = queryset.annotate( line_items=SubqueryCount('lines') ) + queryset = queryset.annotate( + overdue=Case( + When( + SalesOrder.OVERDUE_FILTER, then=Value(True, output_field=BooleanField()), + ), + default=Value(False, output_field=BooleanField()) + ) + ) + return queryset customer_detail = CompanyBriefSerializer(source='customer', many=False, read_only=True) @@ -166,6 +181,8 @@ class SalesOrderSerializer(InvenTreeModelSerializer): status_text = serializers.CharField(source='get_status_display', read_only=True) + overdue = serializers.BooleanField() + class Meta: model = SalesOrder @@ -173,17 +190,18 @@ class SalesOrderSerializer(InvenTreeModelSerializer): 'pk', 'shipment_date', 'creation_date', - 'description', - 'line_items', - 'link', - 'reference', 'customer', 'customer_detail', 'customer_reference', + 'description', + 'line_items', + 'link', + 'notes', + 'overdue', + 'reference', 'status', 'status_text', 'shipment_date', - 'notes', ] read_only_fields = [ diff --git a/InvenTree/templates/js/order.js b/InvenTree/templates/js/order.js index 69d4f584d9..027347e37c 100644 --- a/InvenTree/templates/js/order.js +++ b/InvenTree/templates/js/order.js @@ -235,7 +235,13 @@ function loadSalesOrderTable(table, options) { value = `${prefix}${value}`; } - return renderLink(value, `/order/sales-order/${row.pk}/`); + var html = renderLink(value, `/order/sales-order/${row.pk}/`); + + if (row.overdue) { + html += makeIconBadge('fa-calendar-times icon-red', '{% trans "Order is overdue" %}'); + } + + return html; }, }, {