diff options
author | Étienne Loks <etienne.loks@iggdrasil.net> | 2021-04-28 09:55:25 +0200 |
---|---|---|
committer | Étienne Loks <etienne.loks@iggdrasil.net> | 2021-07-29 11:54:14 +0200 |
commit | d552436e1847fc7541d1abe643c5fed67109bae6 (patch) | |
tree | 8959fe77756ed8db59dcada5de146d1427030b9a /archaeological_files/views.py | |
parent | f5e7db4f7b3bceb0cdef84f9530e0cddc67beea8 (diff) | |
download | Ishtar-d552436e1847fc7541d1abe643c5fed67109bae6.tar.bz2 Ishtar-d552436e1847fc7541d1abe643c5fed67109bae6.zip |
WIP: preventive forms
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 |