summaryrefslogtreecommitdiff
path: root/archaeological_files/views.py
diff options
context:
space:
mode:
authorÉtienne Loks <etienne.loks@iggdrasil.net>2021-04-28 09:55:25 +0200
committerÉtienne Loks <etienne.loks@iggdrasil.net>2022-07-08 09:58:47 +0200
commitfd232fdba395c96564934052233dd23604082693 (patch)
tree5284082668976459d1b304532f883aad0f8044a9 /archaeological_files/views.py
parentde4a4dc7b9d7a227a4e48323db878c3db156389c (diff)
downloadIshtar-fd232fdba395c96564934052233dd23604082693.tar.bz2
Ishtar-fd232fdba395c96564934052233dd23604082693.zip
WIP: preventive forms
Diffstat (limited to 'archaeological_files/views.py')
-rw-r--r--archaeological_files/views.py84
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