diff --git a/InvenTree/build/models.py b/InvenTree/build/models.py index 2872fecb55..b3399ece59 100644 --- a/InvenTree/build/models.py +++ b/InvenTree/build/models.py @@ -259,6 +259,23 @@ class Build(MPTTModel): blank=True, help_text=_('Extra build notes') ) + def sub_builds(self, cascade=True): + """ + Return all Build Order objects under this one. + """ + + if cascade: + return Build.objects.filter(parent=self.pk) + else: + descendants = self.get_descendants(include_self=True) + Build.objects.filter(parent__pk__in=[d.pk for d in descendants]) + + + def sub_build_count(self, cascade=True): + + return self.sub_builds(cascade=cascade).count() + + @property def is_overdue(self): """ diff --git a/InvenTree/build/templates/build/build_children.html b/InvenTree/build/templates/build/build_children.html new file mode 100644 index 0000000000..f655a549eb --- /dev/null +++ b/InvenTree/build/templates/build/build_children.html @@ -0,0 +1,16 @@ +{% extends "build/build_base.html" %} +{% load static %} +{% load i18n %} + +{% block details %} + +{% include "build/tabs.html" with tab="children" %} + +

{% trans "Child Build Orders" %}

+ +
+ +{% endblock %} + +{% block js_ready %} +{% endblock %} \ No newline at end of file diff --git a/InvenTree/build/templates/build/tabs.html b/InvenTree/build/templates/build/tabs.html index c6d2893620..6b36c3d052 100644 --- a/InvenTree/build/templates/build/tabs.html +++ b/InvenTree/build/templates/build/tabs.html @@ -24,6 +24,12 @@ {{ build.output_count }} +
  • + + {% trans "Child Builds" %} + {{ build.sub_build_count }} + +
  • {% trans "Notes" %} diff --git a/InvenTree/build/urls.py b/InvenTree/build/urls.py index 6f681f5488..877b368817 100644 --- a/InvenTree/build/urls.py +++ b/InvenTree/build/urls.py @@ -20,6 +20,7 @@ build_detail_urls = [ url(r'^notes/', views.BuildNotes.as_view(), name='build-notes'), + url(r'^children/', views.BuildDetail.as_view(template_name='build/build_children.html'), name='build-children'), url(r'^parts/', views.BuildDetail.as_view(template_name='build/parts.html'), name='build-parts'), url(r'^attachments/', views.BuildDetail.as_view(template_name='build/attachments.html'), name='build-attachments'), url(r'^output/', views.BuildDetail.as_view(template_name='build/build_output.html'), name='build-output'), diff --git a/InvenTree/build/views.py b/InvenTree/build/views.py index 3c4b94c43d..272cd1e5d8 100644 --- a/InvenTree/build/views.py +++ b/InvenTree/build/views.py @@ -618,6 +618,7 @@ class BuildDetail(DetailView): ctx['bom_price'] = build.part.get_price_info(build.quantity, buy=False) ctx['BuildStatus'] = BuildStatus + ctx['sub_build_count'] = build.sub_build_count() return ctx