diff options
Diffstat (limited to 'archaeological_files/views.py')
| -rw-r--r-- | archaeological_files/views.py | 84 | 
1 files changed, 83 insertions, 1 deletions
| diff --git a/archaeological_files/views.py b/archaeological_files/views.py index 35bd9d7c8..a927a94e6 100644 --- a/archaeological_files/views.py +++ b/archaeological_files/views.py @@ -23,11 +23,12 @@ import re  from django.core.urlresolvers import reverse  from django.db.models import Q  from django.http import HttpResponse, Http404, HttpResponseRedirect +from django.views.generic.edit import UpdateView  from django.shortcuts import redirect, render  from ishtar_common.utils import ugettext_lazy as _  from ishtar_common.views import wizard_is_available -from ishtar_common.views_item import get_item, show_item, revert_item +from ishtar_common.views_item import get_item, show_item, revert_item, check_permission  from archaeological_operations.wizards import (      AdministrativeActDeletionWizard, @@ -45,6 +46,7 @@ from archaeological_files.wizards import (      FileAdministrativeActWizard,      FileEditAdministrativeActWizard,  ) +from ishtar_common.views import IshtarMixin, LoginRequiredMixin  from archaeological_operations.wizards import OperationWizard  from archaeological_operations.views import operation_creation_wizard @@ -354,3 +356,83 @@ def reset_wizards(request):          (AdministrativeActDeletionWizard, "file_administrativeactfile_deletion_wizard"),      ):          wizard_class.session_reset(request, url_name) + + +class MixFormFormsetUpdateView(UpdateView): +    form_inlines_class = [] + +    def get(self, request, *args, **kwargs): +        self.object = self.get_object() +        self.inline_forms = [ +            inline(instance=self.object) for inline in self.form_inlines_class +        ] +        return super(MixFormFormsetUpdateView, self).get(request, *args, **kwargs) + +    def post(self, request, *args, **kwargs): +        self.object = self.get_object() +        form = self.form_class(data=request.POST, instance=self.object) +        inline_forms = [ +            inline(instance=self.object, data=request.POST) +            for inline in self.form_inlines_class +        ] +        if form.is_valid() and all((inline.is_valid() for inline in inline_forms)): +            return self.form_valid(form, inline_forms) +        else: +            return self.form_invalid(form, inline_forms) + +    def form_valid(self, form, inline_forms): +        self.object = form.save() +        for inline in inline_forms: +            # save inlines... +            pass +        return HttpResponseRedirect(self.get_success_url()) + +    def form_invalid(self, form, inline_forms): +        return self.render_to_response( +            self.get_context_data(form=form, inlines=inline_forms) +        ) + +    def get_context_data(self, *args, **kwargs): +        data = super(MixFormFormsetUpdateView, self).get_context_data(*args, **kwargs) +        data["inline_forms"] = self.inline_forms +        return data + + +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_success_url(self): +        return reverse("file_modification") + "?open_item={}".format(self.object.pk) + +    def get_form_kwargs(self): +        kwargs = super(PreventiveEditView, self).get_form_kwargs() +        try: +            file = models.File.objects.get(pk=self.kwargs.get("pk")) +        except models.Document.DoesNotExist: +            raise Http404() +        if not check_permission(self.request, "file/edit-preventive/", file.pk): +            raise Http404() +        initial = {} +        for k in ( +            list(self.form_class.base_fields.keys()) +        ): +            value = getattr(file, k) +            if hasattr(value, "all"): +                value = ",".join([str(v.pk) for v in value.all()]) +            if hasattr(value, "pk"): +                value = value.pk +            initial[k] = value +        kwargs["initial"] = initial +        kwargs["user"] = self.request.user +        self.file = file +        return kwargs
\ No newline at end of file | 
