diff options
Diffstat (limited to 'archaeological_files/views.py')
| -rw-r--r-- | archaeological_files/views.py | 64 | 
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 | 
