From 013db4c21bf74a75f087e8d7ca8f6a334c3f3cba Mon Sep 17 00:00:00 2001 From: Étienne Loks Date: Wed, 6 Jul 2022 18:51:25 +0200 Subject: Preventive file: choose price agreement form --- archaeological_files/forms.py | 11 ++++++ archaeological_files/urls.py | 7 ++++ archaeological_files/views.py | 39 ++++++++++++++++++++++ .../templates/ishtar/forms/base_form.html | 3 ++ 4 files changed, 60 insertions(+) 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 @@ -137,6 +137,13 @@ urlpatterns = [ check_rights(["add_operation"])(views.file_add_operation), name="file-add-operation", ), + url( + r'^file/edit-preventive-price/(?P\d+)/$', + check_rights(["change_file", "change_own_file"])( + views.PreventiveSimpleEditView.as_view() + ), + name="file-edit-preventive-price", + ), url( r'^file/edit-preventive/(?P\d+)/$', check_rights(["change_file", "change_own_file"])( 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 = ' ' + 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 %}

{{page_name}}

+ {% if info %}
+ {{info|safe}} +
{% endif %} {% if form.non_field_errors or form.errors %}
-- cgit v1.2.3