""" Django views for interacting with Build objects """ from django.utils.translation import gettext_lazy as _ from django.views.generic import DetailView, ListView from .models import Build from InvenTree.views import AjaxDeleteView from InvenTree.views import InvenTreeRoleMixin from InvenTree.status_codes import BuildStatus from plugin.views import InvenTreePluginViewMixin class BuildIndex(InvenTreeRoleMixin, ListView): """ View for displaying list of Builds """ model = Build template_name = 'build/index.html' context_object_name = 'builds' def get_queryset(self): """ Return all Build objects (order by date, newest first) """ return Build.objects.order_by('status', '-completion_date') def get_context_data(self, **kwargs): context = super().get_context_data(**kwargs) context['BuildStatus'] = BuildStatus context['active'] = self.get_queryset().filter(status__in=BuildStatus.ACTIVE_CODES) context['completed'] = self.get_queryset().filter(status=BuildStatus.COMPLETE) context['cancelled'] = self.get_queryset().filter(status=BuildStatus.CANCELLED) return context class BuildDetail(InvenTreeRoleMixin, InvenTreePluginViewMixin, DetailView): """ Detail view of a single Build object. """ model = Build template_name = 'build/detail.html' context_object_name = 'build' def get_context_data(self, **kwargs): ctx = super().get_context_data(**kwargs) build = self.get_object() ctx['bom_price'] = build.part.get_price_info(build.quantity, buy=False) ctx['BuildStatus'] = BuildStatus ctx['sub_build_count'] = build.sub_build_count() part = build.part bom_items = build.bom_items ctx['part'] = part ctx['bom_items'] = bom_items ctx['has_tracked_bom_items'] = build.has_tracked_bom_items() ctx['has_untracked_bom_items'] = build.has_untracked_bom_items() return ctx class BuildDelete(AjaxDeleteView): """ View to delete a build """ model = Build ajax_template_name = 'build/delete_build.html' ajax_form_title = _('Delete Build Order')