diff options
author | Étienne Loks <etienne.loks@iggdrasil.net> | 2021-07-07 09:39:29 +0200 |
---|---|---|
committer | Étienne Loks <etienne.loks@iggdrasil.net> | 2021-11-16 17:04:41 +0100 |
commit | 6843da3f1dcac5b599d68a0ebaf9aade4f835667 (patch) | |
tree | 7354538e3f6cbdabad8b3e1008dd1ccee6be5bc8 /archaeological_files | |
parent | 6ef9750adef894a11001b959ba0f31def1f3fdd4 (diff) | |
download | Ishtar-6843da3f1dcac5b599d68a0ebaf9aade4f835667.tar.bz2 Ishtar-6843da3f1dcac5b599d68a0ebaf9aade4f835667.zip |
Preventive file - inline forms
Diffstat (limited to 'archaeological_files')
-rw-r--r-- | archaeological_files/forms.py | 87 | ||||
-rw-r--r-- | archaeological_files/templates/ishtar/forms/preventive_detail.html | 45 | ||||
-rw-r--r-- | archaeological_files/views.py | 9 |
3 files changed, 102 insertions, 39 deletions
diff --git a/archaeological_files/forms.py b/archaeological_files/forms.py index 51d1fdeb0..1710a5560 100644 --- a/archaeological_files/forms.py +++ b/archaeological_files/forms.py @@ -528,14 +528,20 @@ class FileFormPreventiveDetail(forms.ModelForm, CustomForm, ManageOldType): pk = forms.IntegerField(label="", required=False, widget=forms.HiddenInput) start_date = forms.DateField( - label=_("Start date"), widget=DatePicker, required=False + label=_("Start date"), required=False, + widget=DatePicker(attrs={"bs_col_width": "col-6 col-lg-3"}), + ) + end_date = forms.DateField( + label=_("End date"), required=False, + widget=DatePicker(attrs={"bs_col_width": "col-6 col-lg-3"}), ) - end_date = forms.DateField(label=_("End date"), widget=DatePicker, required=False) ground_start_date = forms.DateField( - label=_("Ground start date"), widget=DatePicker, required=False + label=_("Ground start date"), required=False, + widget=DatePicker(attrs={"bs_col_width": "col-6 col-lg-3"}), ) ground_end_date = forms.DateField( - label=_("Ground end date"), widget=DatePicker, required=False + label=_("Ground end date"), required=False, + widget=DatePicker(attrs={"bs_col_width": "col-6 col-lg-3"}), ) study_period = forms.CharField( label=_("Study period"), @@ -543,10 +549,11 @@ class FileFormPreventiveDetail(forms.ModelForm, CustomForm, ManageOldType): required=False, ) execution_report_date = forms.DateField( - label=_("Execution report date"), widget=DatePicker, required=False + label=_("Execution report date"), required=False, + widget=DatePicker(attrs={"bs_col_width": "col-6 col-lg-3"}), ) total_developed_surface = forms.FloatField( - widget=widgets.AreaWidget, + widget=widgets.AreaWidget(attrs={"bs_col_width": "col-6 col-lg-3"}), label=_("Total developed surface (m2)"), required=False, validators=[ @@ -556,7 +563,7 @@ class FileFormPreventiveDetail(forms.ModelForm, CustomForm, ManageOldType): ) total_surface = forms.FloatField( required=False, - widget=widgets.AreaWidget, + widget=widgets.AreaWidget(attrs={"bs_col_width": "col-6 col-lg-3"}), label=_("Total surface (m2)"), validators=[ validators.MinValueValidator(0), @@ -565,7 +572,7 @@ class FileFormPreventiveDetail(forms.ModelForm, CustomForm, ManageOldType): ) linear_meter = forms.IntegerField( label=_("Linear meter (m)"), required=False, - widget=widgets.MeterKilometerWidget, + widget=widgets.MeterKilometerWidget(attrs={"bs_col_width": "col-6 col-lg-3"}), ) def __init__(self, *args, **kwargs): @@ -586,17 +593,32 @@ class FileBaseFormset(forms.BaseModelFormSet): self.queryset = self.model.objects.filter(file_id=self.instance.pk) +INLINE_JOB_FIELDS = ["man_by_day_planned", "days_planned", "man_by_day_worked", + "days_worked"] +JOB_WIDGETS = { + "man_by_day_planned": forms.NumberInput(attrs={"class": "w-50 form-planned"}), + "days_planned": forms.NumberInput(attrs={"class": "w-50 form-planned"}), + "man_by_day_worked": forms.NumberInput(attrs={"class": "w-50 form-worked"}), + "days_worked": forms.NumberInput(attrs={"class": "w-50 form-worked"}) +} + +JOB_LABELS = { + "man_by_day_planned": _("Man by day"), + "days_planned": _("Days"), + "man_by_day_worked": _("Man by day"), + "days_worked": _("Days"), +} + class PreventiveFileJobForm(forms.ModelForm): file_id = forms.IntegerField(widget=forms.HiddenInput) - job = forms.ChoiceField(choices=[]) - man_by_day_planned = forms.FloatField(_("Man by day - planned"), required=False) - days_planned = forms.FloatField(_("Days - planned"), required=False) - man_by_day_worked = forms.FloatField(_("Man by day - worked"), required=False) - days_worked = forms.FloatField(_("Days - worked"), required=False) class Meta: model = models.PreventiveFileJob + fields = ["job"] + INLINE_JOB_FIELDS exclude = ["file"] + widgets = JOB_WIDGETS + labels = JOB_LABELS + class PreventiveFileJobBaseFormSet(FileBaseFormset): @@ -605,22 +627,20 @@ class PreventiveFileJobBaseFormSet(FileBaseFormset): PreventiveFileJobFormSet = formset_factory( PreventiveFileJobForm, formset=PreventiveFileJobBaseFormSet, can_delete=True) -PreventiveFileJobFormSet.form_label = _("Preventive - Jobs") +PreventiveFileJobFormSet.form_label = _("Jobs") PreventiveFileJobFormSet.form_admin_name = _("Preventive file - 030 - Jobs") PreventiveFileJobFormSet.form_slug = "preventive-030-jobs" +PreventiveFileJobFormSet.dynamic_add = True class PreventiveFileGroundJobForm(forms.ModelForm): file_id = forms.IntegerField(widget=forms.HiddenInput) - ground_job = forms.ChoiceField(choices=[]) - man_by_day_planned = forms.FloatField(_("Man by day - planned"), required=False) - days_planned = forms.FloatField(_("Days - planned"), required=False) - man_by_day_worked = forms.FloatField(_("Man by day - worked"), required=False) - days_worked = forms.FloatField(_("Days - worked"), required=False) class Meta: model = models.PreventiveFileGroundJob - exclude = ["file"] + fields = ["job"] + INLINE_JOB_FIELDS + widgets = JOB_WIDGETS + labels = JOB_LABELS class PreventiveFileGroundJobBaseFormSet(FileBaseFormset): @@ -631,24 +651,22 @@ PreventiveFileGroundJobFormSet = formset_factory( PreventiveFileGroundJobForm, formset=PreventiveFileGroundJobBaseFormSet, can_delete=True ) -PreventiveFileGroundJobFormSet.form_label = _("Preventive - Ground jobs") +PreventiveFileGroundJobFormSet.form_label = _("Ground jobs") PreventiveFileGroundJobFormSet.form_admin_name = _( "Preventive file - 040 - Ground jobs" ) PreventiveFileGroundJobFormSet.form_slug = "preventive-040-ground-jobs" +PreventiveFileGroundJobFormSet.dynamic_add = True class PreventiveFileEquipmentForm(forms.ModelForm): file_id = forms.IntegerField(widget=forms.HiddenInput) - equipment = forms.ChoiceField(choices=[]) - man_by_day_planned = forms.FloatField(_("Man by day - planned"), required=False) - days_planned = forms.FloatField(_("Days - planned"), required=False) - man_by_day_worked = forms.FloatField(_("Man by day - worked"), required=False) - days_worked = forms.FloatField(_("Days - worked"), required=False) class Meta: model = models.PreventiveFileEquipmentCost - exclude = ["file"] + fields = ["equipment_cost"] + INLINE_JOB_FIELDS + widgets = JOB_WIDGETS + labels = JOB_LABELS class PreventiveFileEquipmentBaseFormSet(FileBaseFormset): @@ -659,22 +677,20 @@ PreventiveFileEquipmentFormSet = formset_factory( PreventiveFileEquipmentForm, formset=PreventiveFileEquipmentBaseFormSet, can_delete=True ) -PreventiveFileEquipmentFormSet.form_label = _("Preventive - Equipment") +PreventiveFileEquipmentFormSet.form_label = _("Equipment") PreventiveFileEquipmentFormSet.form_admin_name = _("Preventive file - 050 - Equipments") PreventiveFileEquipmentFormSet.form_slug = "preventive-050-equipments" +PreventiveFileEquipmentFormSet.dynamic_add = True class PreventiveFileTechnicalServiceForm(forms.ModelForm): file_id = forms.IntegerField(widget=forms.HiddenInput) - technical_service = forms.ChoiceField(choices=[]) - man_by_day_planned = forms.FloatField(_("Man by day - planned"), required=False) - days_planned = forms.FloatField(_("Days - planned"), required=False) - man_by_day_worked = forms.FloatField(_("Man by day - worked"), required=False) - days_worked = forms.FloatField(_("Days - worked"), required=False) class Meta: model = models.PreventiveFileTechnicalServiceCost - exclude = ["file"] + fields = ["technical_service_cost"] + INLINE_JOB_FIELDS + widgets = JOB_WIDGETS + labels = JOB_LABELS class PreventiveFileTechnicalServiceBaseFormSet(FileBaseFormset): @@ -685,11 +701,12 @@ PreventiveFileTechnicalServiceFormSet = formset_factory( PreventiveFileTechnicalServiceForm, formset=PreventiveFileTechnicalServiceBaseFormSet, can_delete=True ) -PreventiveFileTechnicalServiceFormSet.form_label = _("Preventive - Technical Services") +PreventiveFileTechnicalServiceFormSet.form_label = _("Technical Services") PreventiveFileTechnicalServiceFormSet.form_admin_name = _( "Preventive file - 060 - TechnicalServices" ) PreventiveFileTechnicalServiceFormSet.form_slug = "preventive-060-technical_services" +PreventiveFileTechnicalServiceFormSet.dynamic_add = True class AdministrativeActFileModifySelect(TableSelect): diff --git a/archaeological_files/templates/ishtar/forms/preventive_detail.html b/archaeological_files/templates/ishtar/forms/preventive_detail.html index 3cdfb3da0..20adcccfb 100644 --- a/archaeological_files/templates/ishtar/forms/preventive_detail.html +++ b/archaeological_files/templates/ishtar/forms/preventive_detail.html @@ -1,2 +1,45 @@ {% extends "ishtar/forms/base_form.html" %} -{% load i18n %} +{% load i18n table_form %} + +{% block bs_form_inlines %} +<div class="card"> + <div class="card-body"> + <div class="w-100 pb-3 text-center"> + <div class="btn-group btn-group-toggle" data-toggle="buttons"> + <label class="btn btn-lg btn-secondary active"> + <input value="true" type="radio" name="planned-toggle" id="planned-toggle-true" autocomplete="off" checked> + {% trans "Planned" %} + </label> + <label class="btn btn-lg btn-secondary"> + <input value="false" type="radio" name="planned-toggle" id="planned-toggle-false" autocomplete="off"> + {% trans "Worked" %} + </label> + </div> + </div> + <div class="w-100 pb-3 text-center"> + <button class="btn btn-secondary btn-sm form-planned" type="button">{% trans "Add default costs" %}</button> + </div> + <div class="w-100 pb-3 text-center"> + <button class="btn btn-secondary btn-sm form-worked" type="button">{% trans "Copy planned costs" %}</button> + </div> + {{block.super}} + </div> +</div> +{% endblock %} + +{# <script type='text/javascript'> #} +{% block end_js %} + {{block.super}} + var check_planned_value = function() { + if (this.value == 'false'){ + $(".form-planned").parent().hide() + $(".form-worked").parent().show() + } else { + $(".form-planned").parent().show() + $(".form-worked").parent().hide() + } + }; + $('input[type=radio][name=planned-toggle]').change(check_planned_value); + $(document).ready(check_planned_value); +{% endblock %} +{# </script> #} diff --git a/archaeological_files/views.py b/archaeological_files/views.py index a927a94e6..366ef3754 100644 --- a/archaeological_files/views.py +++ b/archaeological_files/views.py @@ -364,15 +364,19 @@ class MixFormFormsetUpdateView(UpdateView): 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 + inline(instance=self.object, + prefix=getattr(inline, "form_slug", "form")) + 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() + attrs = {"instance": self.object} form = self.form_class(data=request.POST, instance=self.object) inline_forms = [ - inline(instance=self.object, data=request.POST) + inline(instance=self.object, data=request.POST, + prefix=getattr(inline, "form_slug", "form")) for inline in self.form_inlines_class ] if form.is_valid() and all((inline.is_valid() for inline in inline_forms)): @@ -410,7 +414,6 @@ class PreventiveEditView(IshtarMixin, LoginRequiredMixin, MixFormFormsetUpdateVi 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) |