From c3d97de7bdec3f7899340c606f46276836eb2a8b Mon Sep 17 00:00:00 2001 From: Étienne Loks Date: Fri, 9 Jul 2021 19:20:12 +0200 Subject: Preventive file: work on inlines --- archaeological_files/forms.py | 98 ++++++++++++++++++++++--------------------- 1 file changed, 51 insertions(+), 47 deletions(-) (limited to 'archaeological_files/forms.py') diff --git a/archaeological_files/forms.py b/archaeological_files/forms.py index 8b5b3d00d..3c113c665 100644 --- a/archaeological_files/forms.py +++ b/archaeological_files/forms.py @@ -26,7 +26,7 @@ import datetime from django import forms from django.conf import settings from django.core import validators -from django.forms.formsets import formset_factory, BaseFormSet +from django.forms.formsets import formset_factory from django.utils.functional import lazy from django.utils.safestring import mark_safe from ishtar_common.utils import ugettext_lazy as _ @@ -592,6 +592,12 @@ class FileBaseFormset(forms.BaseModelFormSet): if self.instance: self.queryset = self.model.objects.filter(file_id=self.instance.pk) + def get_form_kwargs(self, index): + kwargs = super(FileBaseFormset, self).get_form_kwargs(index) + if self.instance: + kwargs['file_id'] = self.instance.pk + return kwargs + INLINE_JOB_FIELDS = ["man_by_day_planned", "days_planned", "man_by_day_worked", "days_worked"] @@ -607,12 +613,25 @@ JOB_LABELS = { "days_planned": _("Days"), "man_by_day_worked": _("Man by day"), "days_worked": _("Days"), + "Job": _("Job") } -class PreventiveFileJobForm(forms.ModelForm): +class PreventiveFileForm(forms.ModelForm): file_id = forms.IntegerField(widget=forms.HiddenInput) + def __init__(self, *args, **kwargs): + self.file_id = kwargs.pop("file_id") + super().__init__(*args, **kwargs) + self.fields["file_id"].initial = self.file_id + + def save(self, commit=True): + if not self.errors: + self.instance.file_id = self.file_id + return super().save(commit=commit) + + +class PreventiveFileJobForm(PreventiveFileForm): class Meta: model = models.PreventiveFileJob fields = ["job"] + INLINE_JOB_FIELDS @@ -633,9 +652,7 @@ PreventiveFileJobFormSet.form_slug = "preventive-030-post-excavation" PreventiveFileJobFormSet.dynamic_add = True -class PreventiveFileGroundJobForm(forms.ModelForm): - file_id = forms.IntegerField(widget=forms.HiddenInput) - +class PreventiveFileGroundJobForm(PreventiveFileForm): class Meta: model = models.PreventiveFileGroundJob fields = ["job"] + INLINE_JOB_FIELDS @@ -663,67 +680,54 @@ COST_LABELS = { "days_planned": _("Days / weeks / months"), "quantity_by_day_worked": _("Quantity"), "days_worked": _("Days / weeks / months"), + "equipment_service_cost": _("Equipment / service") } INLINE_COST_FIELDS = [ "quantity_by_day_planned", "days_planned", "quantity_by_day_worked", "days_worked"] COST_WIDGETS = { - "quantity_by_day_planned": forms.NumberInput(attrs={"class": "w-50 form-planned"}), + "quantity_by_day_planned": forms.NumberInput( + attrs={"class": "w-50 form-planned"}), "days_planned": forms.NumberInput(attrs={"class": "w-50 form-planned"}), "quantity_by_day_worked": forms.NumberInput(attrs={"class": "w-50 form-worked"}), - "days_worked": forms.NumberInput(attrs={"class": "w-50 form-worked"}) + "days_worked": forms.NumberInput(attrs={"class": "w-50 form-worked"}), + "equipment_service_cost": forms.Select( + attrs={"class":"form-cost", "bs_col_width": "col-12"}) } -class PreventiveFileEquipmentForm(forms.ModelForm): - file_id = forms.IntegerField(widget=forms.HiddenInput) - - class Meta: - model = models.PreventiveFileEquipmentCost - fields = ["equipment_cost"] + INLINE_COST_FIELDS - widgets = COST_WIDGETS - labels = COST_LABELS - - -class PreventiveFileEquipmentBaseFormSet(FileBaseFormset): - model = models.PreventiveFileEquipmentCost - - -PreventiveFileEquipmentFormSet = formset_factory( - PreventiveFileEquipmentForm, formset=PreventiveFileEquipmentBaseFormSet, - can_delete=True -) -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) +class PreventiveFileEquipmentServiceForm(PreventiveFileForm): + type_filter = None class Meta: - model = models.PreventiveFileTechnicalServiceCost - fields = ["technical_service_cost"] + INLINE_COST_FIELDS + model = models.PreventiveFileEquipmentServiceCost + fields = ["equipment_service_cost"] + INLINE_COST_FIELDS widgets = COST_WIDGETS labels = COST_LABELS + def __init__(self, *args, **kwargs): + super(PreventiveFileEquipmentServiceForm, self).__init__(*args, **kwargs) + q = models.EquipmentServiceCost.objects.filter( + available=True, + equipment_service_type__parent__isnull=True, + equipment_service_type__generic_equipment_type__txt_idx=self.type_filter + ) -class PreventiveFileTechnicalServiceBaseFormSet(FileBaseFormset): - model = models.PreventiveFileTechnicalServiceCost + self.unities = {} + unit_dict = dict(models.ES_UNITS) + choices = [("", "--")] + for cost in q.all(): + choices.append((cost.pk, str(cost))) + if cost.unit: + self.unities[cost.pk] = unit_dict[cost.unit] + self.fields["equipment_service_cost"].choices = choices + self.fields["quantity_by_day_planned"].initial = 1 + self.fields["days_planned"].unit = "..." -PreventiveFileTechnicalServiceFormSet = formset_factory( - PreventiveFileTechnicalServiceForm, - formset=PreventiveFileTechnicalServiceBaseFormSet, can_delete=True -) -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 PreventiveFileEquipmentServiceBaseFormSet(FileBaseFormset): + model = models.PreventiveFileEquipmentServiceCost class AdministrativeActFileModifySelect(TableSelect): -- cgit v1.2.3