diff options
author | Étienne Loks <etienne.loks@iggdrasil.net> | 2021-07-22 18:22:54 +0200 |
---|---|---|
committer | Étienne Loks <etienne.loks@iggdrasil.net> | 2021-10-25 12:06:02 +0200 |
commit | 5af75993e44d3beabb7b214c81f6453ab77a5c89 (patch) | |
tree | e635ca296c69b623236c56083c09de3c706ca167 /archaeological_files/forms.py | |
parent | d62b140949294a3939eb6095206aef416e188806 (diff) | |
download | Ishtar-5af75993e44d3beabb7b214c81f6453ab77a5c89.tar.bz2 Ishtar-5af75993e44d3beabb7b214c81f6453ab77a5c89.zip |
Preventive file: work on inlines - 2
Diffstat (limited to 'archaeological_files/forms.py')
-rw-r--r-- | archaeological_files/forms.py | 120 |
1 files changed, 89 insertions, 31 deletions
diff --git a/archaeological_files/forms.py b/archaeological_files/forms.py index 3c113c665..4918fdaaa 100644 --- a/archaeological_files/forms.py +++ b/archaeological_files/forms.py @@ -522,25 +522,37 @@ class FileFormPreventiveDetail(forms.ModelForm, CustomForm, ManageOldType): class Meta: model = models.File - fields = ["start_date", "end_date", "ground_start_date", - "ground_end_date", "study_period", "execution_report_date", - "total_developed_surface", "total_surface", "linear_meter"] + fields = [ + "start_date", + "end_date", + "ground_start_date", + "ground_end_date", + "study_period", + "execution_report_date", + "total_developed_surface", + "total_surface", + "linear_meter", + ] pk = forms.IntegerField(label="", required=False, widget=forms.HiddenInput) start_date = forms.DateField( - label=_("Start date"), 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, + label=_("End date"), + required=False, widget=DatePicker(attrs={"bs_col_width": "col-6 col-lg-3"}), ) ground_start_date = forms.DateField( - label=_("Ground start date"), 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"), required=False, + label=_("Ground end date"), + required=False, widget=DatePicker(attrs={"bs_col_width": "col-6 col-lg-3"}), ) study_period = forms.CharField( @@ -549,7 +561,8 @@ class FileFormPreventiveDetail(forms.ModelForm, CustomForm, ManageOldType): required=False, ) execution_report_date = forms.DateField( - label=_("Execution report date"), required=False, + label=_("Execution report date"), + required=False, widget=DatePicker(attrs={"bs_col_width": "col-6 col-lg-3"}), ) total_developed_surface = forms.FloatField( @@ -571,7 +584,8 @@ class FileFormPreventiveDetail(forms.ModelForm, CustomForm, ManageOldType): ], ) linear_meter = forms.IntegerField( - label=_("Linear meter (m)"), required=False, + label=_("Linear meter (m)"), + required=False, widget=widgets.MeterKilometerWidget(attrs={"bs_col_width": "col-6 col-lg-3"}), ) @@ -588,24 +602,32 @@ class FileBaseFormset(forms.BaseModelFormSet): if "instance" in kwargs: self.instance = kwargs.pop("instance") super().__init__(*args, **kwargs) - self.queryset = self.model.objects.filter(pk=None) + self.queryset = self.get_base_queryset() + + def get_base_queryset(self): + queryset = self.model.objects.filter(pk=None) if self.instance: - self.queryset = self.model.objects.filter(file_id=self.instance.pk) + queryset = self.model.objects.filter(file_id=self.instance.pk) + return queryset def get_form_kwargs(self, index): kwargs = super(FileBaseFormset, self).get_form_kwargs(index) if self.instance: - kwargs['file_id'] = self.instance.pk + kwargs["file_id"] = self.instance.pk return kwargs -INLINE_JOB_FIELDS = ["man_by_day_planned", "days_planned", "man_by_day_worked", - "days_worked"] +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"}) + "days_worked": forms.NumberInput(attrs={"class": "w-50 form-worked"}), } JOB_LABELS = { @@ -613,7 +635,7 @@ JOB_LABELS = { "days_planned": _("Days"), "man_by_day_worked": _("Man by day"), "days_worked": _("Days"), - "Job": _("Job") + "Job": _("Job"), } @@ -645,7 +667,8 @@ class PreventiveFileJobBaseFormSet(FileBaseFormset): PreventiveFileJobFormSet = formset_factory( - PreventiveFileJobForm, formset=PreventiveFileJobBaseFormSet, can_delete=True) + PreventiveFileJobForm, formset=PreventiveFileJobBaseFormSet, can_delete=True +) PreventiveFileJobFormSet.form_label = _("Post-excavation") PreventiveFileJobFormSet.form_admin_name = _("Preventive file - 030 - Post-excavation") PreventiveFileJobFormSet.form_slug = "preventive-030-post-excavation" @@ -665,8 +688,9 @@ class PreventiveFileGroundJobBaseFormSet(FileBaseFormset): PreventiveFileGroundJobFormSet = formset_factory( - PreventiveFileGroundJobForm, formset=PreventiveFileGroundJobBaseFormSet, - can_delete=True + PreventiveFileGroundJobForm, + formset=PreventiveFileGroundJobBaseFormSet, + can_delete=True, ) PreventiveFileGroundJobFormSet.form_label = _("Ground jobs") PreventiveFileGroundJobFormSet.form_admin_name = _( @@ -677,23 +701,27 @@ PreventiveFileGroundJobFormSet.dynamic_add = True COST_LABELS = { "quantity_by_day_planned": _("Quantity"), - "days_planned": _("Days / weeks / months"), + "days_planned": "", "quantity_by_day_worked": _("Quantity"), - "days_worked": _("Days / weeks / months"), - "equipment_service_cost": _("Equipment / service") + "days_worked": "", + "equipment_service_cost": _("Equipment / service"), } INLINE_COST_FIELDS = [ - "quantity_by_day_planned", "days_planned", "quantity_by_day_worked", "days_worked"] + "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"}), - "days_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 unit-form"}), "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 unit-form"}), "equipment_service_cost": forms.Select( - attrs={"class":"form-cost", "bs_col_width": "col-12"}) + attrs={"class": "form-cost", "bs_col_width": "col-12"} + ), } @@ -710,25 +738,55 @@ class PreventiveFileEquipmentServiceForm(PreventiveFileForm): 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 + parent__isnull=True, + equipment_service_type__generic_equipment_type__txt_idx=self.type_filter, ) self.unities = {} unit_dict = dict(models.ES_UNITS) choices = [("", "--")] - for cost in q.all(): + costs = list(q.all()) + if self.instance and self.instance.equipment_service_cost_id \ + and self.instance.equipment_service_cost not in costs: + costs.append(self.instance.equipment_service_cost) + self.flat_rates = [] + for cost in costs: choices.append((cost.pk, str(cost))) if cost.unit: self.unities[cost.pk] = unit_dict[cost.unit] + if cost.flat_rate: + self.flat_rates.append(cost.pk) self.fields["equipment_service_cost"].choices = choices self.fields["quantity_by_day_planned"].initial = 1 self.fields["days_planned"].unit = "..." + self.fields["days_worked"].unit = "..." + + def save(self, commit=True): + item = super().save(commit=True) + if not item: + return + for child in item.equipment_service_cost.equipment_service_type.children.all(): + if not self._meta.model.objects.filter( + file_id=item.file_id, equipment_service_cost=child).count(): + self._meta.model.objects.create( + file_id=item.file_id, equipment_service_cost=child, + quantity_by_day_planned=0 + ) + return item class PreventiveFileEquipmentServiceBaseFormSet(FileBaseFormset): model = models.PreventiveFileEquipmentServiceCost + def get_base_queryset(self): + queryset = super( + PreventiveFileEquipmentServiceBaseFormSet, self + ).get_base_queryset() + queryset = queryset.filter( + equipment_service_cost__equipment_service_type__generic_equipment_type__txt_idx=self.type_filter + ) + return queryset + class AdministrativeActFileModifySelect(TableSelect): _model = AdministrativeAct |