summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorÉtienne Loks <etienne.loks@iggdrasil.net>2022-07-06 18:51:25 +0200
committerÉtienne Loks <etienne.loks@iggdrasil.net>2022-07-08 09:59:31 +0200
commit013db4c21bf74a75f087e8d7ca8f6a334c3f3cba (patch)
tree0a2a1e81db0503c6b90e8a2279f92d93d2b642d4
parentb9c259a2cadd9717cb6854ac4931a87d6becc938 (diff)
downloadIshtar-013db4c21bf74a75f087e8d7ca8f6a334c3f3cba.tar.bz2
Ishtar-013db4c21bf74a75f087e8d7ca8f6a334c3f3cba.zip
Preventive file: choose price agreement form
-rw-r--r--archaeological_files/forms.py11
-rw-r--r--archaeological_files/urls.py7
-rw-r--r--archaeological_files/views.py39
-rw-r--r--ishtar_common/templates/ishtar/forms/base_form.html3
4 files changed, 60 insertions, 0 deletions
diff --git a/archaeological_files/forms.py b/archaeological_files/forms.py
index 46e0aae9c..1958cb2ae 100644
--- a/archaeological_files/forms.py
+++ b/archaeological_files/forms.py
@@ -669,6 +669,17 @@ class PreventiveFileForm(forms.ModelForm):
return super().save(commit=commit)
+class PreventiveFileSimpleForm(forms.ModelForm):
+ price_agreement = forms.ModelChoiceField(
+ label=_("Price agreement"),
+ queryset=models.PriceAgreement.objects.filter(available=True)
+ )
+
+ class Meta:
+ model = models.File
+ fields = ["price_agreement"]
+
+
class PreventiveFileGenJobForm(PreventiveFileForm):
def __init__(self, *args, **kwargs):
super(PreventiveFileGenJobForm, self).__init__(*args, **kwargs)
diff --git a/archaeological_files/urls.py b/archaeological_files/urls.py
index dda3ce8e7..942987491 100644
--- a/archaeological_files/urls.py
+++ b/archaeological_files/urls.py
@@ -138,6 +138,13 @@ urlpatterns = [
name="file-add-operation",
),
url(
+ r'^file/edit-preventive-price/(?P<pk>\d+)/$',
+ check_rights(["change_file", "change_own_file"])(
+ views.PreventiveSimpleEditView.as_view()
+ ),
+ name="file-edit-preventive-price",
+ ),
+ url(
r'^file/edit-preventive/(?P<pk>\d+)/$',
check_rights(["change_file", "change_own_file"])(
views.PreventiveEditView.as_view()
diff --git a/archaeological_files/views.py b/archaeological_files/views.py
index 3ed24f63b..3e8d37809 100644
--- a/archaeological_files/views.py
+++ b/archaeological_files/views.py
@@ -406,12 +406,51 @@ class MixFormFormsetUpdateView(UpdateView):
return data
+class PreventiveSimpleEditView(IshtarMixin, LoginRequiredMixin,
+ UpdateView):
+ page_name = _("Intervention plan")
+ form_class = forms.PreventiveFileSimpleForm
+ template_name = "ishtar/forms/base_form.html"
+ model = models.File
+
+ def get_context_data(self, **kwargs):
+ context = super().get_context_data(**kwargs)
+ info = '<i class="fa fa-exclamation-triangle" aria-hidden="true"></i> '
+ info += str(_("Changing the price agreement will delete all associated costs"))
+ context["info"] = info
+ return context
+
+ def form_valid(self, form):
+ price_agreement_id = self.object.price_agreement_id
+ queries = [
+ self.object.equipment_costs.exclude(
+ equipment_service_cost__price_agreement_id=price_agreement_id),
+ self.object.ground_jobs.exclude(
+ job__price_agreement_id=price_agreement_id),
+ self.object.jobs.exclude(
+ job__price_agreement_id=price_agreement_id)
+
+ ]
+ for query in queries:
+ for item in query.all():
+ item.delete()
+ return super().form_valid(form)
+
+
class PreventiveEditView(IshtarMixin, LoginRequiredMixin, MixFormFormsetUpdateView):
page_name = _("Intervention plan")
form_class = forms.FileFormPreventiveDetail
template_name = "ishtar/forms/preventive_detail.html"
model = models.File
+ def get(self, request, *args, **kwargs):
+ self.object = self.get_object()
+ if not self.object.price_agreement:
+ return redirect(
+ reverse("file-edit-preventive-price", args=[self.object.pk])
+ )
+ return super(PreventiveEditView, self).get(request, *args, **kwargs)
+
def get_form_inlines_class(self):
inlines = [
forms.PreventiveFileGroundJobFormSet,
diff --git a/ishtar_common/templates/ishtar/forms/base_form.html b/ishtar_common/templates/ishtar/forms/base_form.html
index 69825eed2..eba604929 100644
--- a/ishtar_common/templates/ishtar/forms/base_form.html
+++ b/ishtar_common/templates/ishtar/forms/base_form.html
@@ -11,6 +11,9 @@
{% block content %}
<h2>{{page_name}}</h2>
<div class='form{% if not form.SEARCH_AND_SELECT %} container{% endif %}'>
+ {% if info %}<div class="alert alert-info">
+ {{info|safe}}
+ </div>{% endif %}
{% if form.non_field_errors or form.errors %}
<div class="alert alert-danger">
<div><i class="fa fa-exclamation-triangle" aria-hidden="true"></i>