summaryrefslogtreecommitdiff
path: root/archaeological_files/views.py
diff options
context:
space:
mode:
authorÉtienne Loks <etienne.loks@iggdrasil.net>2021-07-09 19:20:12 +0200
committerÉtienne Loks <etienne.loks@iggdrasil.net>2022-07-08 09:58:47 +0200
commitc3d97de7bdec3f7899340c606f46276836eb2a8b (patch)
treef65f72441311e7378b90674a31e3109034aca890 /archaeological_files/views.py
parent3142d9d08e88dfd58a02a10821bfd26b49a35f79 (diff)
downloadIshtar-c3d97de7bdec3f7899340c606f46276836eb2a8b.tar.bz2
Ishtar-c3d97de7bdec3f7899340c606f46276836eb2a8b.zip
Preventive file: work on inlines
Diffstat (limited to 'archaeological_files/views.py')
-rw-r--r--archaeological_files/views.py64
1 files changed, 49 insertions, 15 deletions
diff --git a/archaeological_files/views.py b/archaeological_files/views.py
index 366ef3754..90d41c68b 100644
--- a/archaeological_files/views.py
+++ b/archaeological_files/views.py
@@ -23,6 +23,7 @@ import re
from django.core.urlresolvers import reverse
from django.db.models import Q
from django.http import HttpResponse, Http404, HttpResponseRedirect
+from django.forms.formsets import formset_factory
from django.views.generic.edit import UpdateView
from django.shortcuts import redirect, render
from ishtar_common.utils import ugettext_lazy as _
@@ -361,37 +362,41 @@ def reset_wizards(request):
class MixFormFormsetUpdateView(UpdateView):
form_inlines_class = []
+ def get_form_inlines_class(self):
+ return self.form_inlines_class
+
def get(self, request, *args, **kwargs):
self.object = self.get_object()
self.inline_forms = [
inline(instance=self.object,
prefix=getattr(inline, "form_slug", "form"))
- for inline in self.form_inlines_class
+ for inline in self.get_form_inlines_class()
]
return super(MixFormFormsetUpdateView, self).get(request, *args, **kwargs)
def post(self, request, *args, **kwargs):
self.object = self.get_object()
- attrs = {"instance": self.object}
form = self.form_class(data=request.POST, instance=self.object)
- inline_forms = [
+ self.inline_forms = [
inline(instance=self.object, data=request.POST,
prefix=getattr(inline, "form_slug", "form"))
- for inline in self.form_inlines_class
+ for inline in self.get_form_inlines_class()
]
- if form.is_valid() and all((inline.is_valid() for inline in inline_forms)):
- return self.form_valid(form, inline_forms)
+ if form.is_valid() and all((inline.is_valid() for inline in self.inline_forms)):
+ return self.form_valid(form, self.inline_forms)
else:
- return self.form_invalid(form, inline_forms)
+ return self.form_invalid(form, self.inline_forms)
def form_valid(self, form, inline_forms):
self.object = form.save()
+ print("OK")
for inline in inline_forms:
- # save inlines...
+ inline.save()
pass
return HttpResponseRedirect(self.get_success_url())
def form_invalid(self, form, inline_forms):
+ print("NOP")
return self.render_to_response(
self.get_context_data(form=form, inlines=inline_forms)
)
@@ -405,15 +410,35 @@ class MixFormFormsetUpdateView(UpdateView):
class PreventiveEditView(IshtarMixin, LoginRequiredMixin, MixFormFormsetUpdateView):
page_name = _("Preventive modification")
form_class = forms.FileFormPreventiveDetail
- form_inlines_class = [
- forms.PreventiveFileJobFormSet,
- forms.PreventiveFileGroundJobFormSet,
- forms.PreventiveFileEquipmentFormSet,
- forms.PreventiveFileTechnicalServiceFormSet
- ]
template_name = "ishtar/forms/preventive_detail.html"
model = models.File
+ def get_form_inlines_class(self):
+ inlines = [
+ forms.PreventiveFileGroundJobFormSet,
+ forms.PreventiveFileJobFormSet,
+ ]
+ self.inline_types = list(
+ models.GenericEquipmentServiceType.objects.filter(available=True).all())
+
+ for inline_type in self.inline_types:
+ form_class_name = "".join([
+ t.capitalize()
+ for t in inline_type.txt_idx.replace(
+ '-', ' ').replace('_', ' ').split(" ")]) + "Formset"
+ form = type(form_class_name,
+ (forms.PreventiveFileEquipmentServiceForm,),
+ {"type_filter": inline_type.txt_idx})
+ formset = formset_factory(
+ form, formset=forms.PreventiveFileEquipmentServiceBaseFormSet,
+ can_delete=True
+ )
+ formset.form_label = str(inline_type)
+ formset.form_slug = inline_type.txt_idx
+ formset.dynamic_add = True
+ inlines.append(formset)
+ return inlines
+
def get_success_url(self):
return reverse("file_modification") + "?open_item={}".format(self.object.pk)
@@ -438,4 +463,13 @@ class PreventiveEditView(IshtarMixin, LoginRequiredMixin, MixFormFormsetUpdateVi
kwargs["initial"] = initial
kwargs["user"] = self.request.user
self.file = file
- return kwargs \ No newline at end of file
+ return kwargs
+
+ def get_context_data(self, **kwargs):
+ context = super(PreventiveEditView, self).get_context_data(**kwargs)
+ unities = {}
+ for inline_formset in context["inline_forms"]:
+ if inline_formset.forms and hasattr(inline_formset.forms[0], "unities"):
+ unities.update(inline_formset.forms[0].unities)
+ context["form_unities"] = unities.items()
+ return context