From b3d0c569df119a61a32bb12d5c8acd5d8c441dd8 Mon Sep 17 00:00:00 2001 From: Benjamin Dauvergne Date: Sat, 20 Nov 2021 18:50:30 +0100 Subject: [PATCH] facture: toggle display of periodicite date fields (#326) --- eo_gestion/eo_facture/forms.py | 17 +++++++++++++++++ eo_gestion/eo_facture/static/facture.js | 19 +++++++++++++++++++ 2 files changed, 36 insertions(+) create mode 100644 eo_gestion/eo_facture/static/facture.js diff --git a/eo_gestion/eo_facture/forms.py b/eo_gestion/eo_facture/forms.py index c062859..721ef89 100644 --- a/eo_gestion/eo_facture/forms.py +++ b/eo_gestion/eo_facture/forms.py @@ -199,11 +199,28 @@ class ClientForm(forms.ModelForm): class ContratForm(forms.ModelForm): + def __init__(self, *args, **kwargs): + super().__init__(*args, **kwargs) + self.fields['periodicite_debut'].widget.attrs['data-depends-on'] = 'periodicite' + self.fields['periodicite_fin'].widget.attrs['data-depends-on'] = 'periodicite' + + def clean(self): + super().clean() + if 'periodicite_debut' in self.changed_data and self.instance.factures.filter( + numero_d_echeance__isnull=False + ): + raise ValidationError( + 'Vous ne pouvez pas changer le début d\'un contrat périodique qui a déjà des factures' + ) + class Meta: fields = '__all__' model = models.Contrat localized_fields = ("tva", "montant_sous_traite") + class Media: + js = ['facture.js'] + class PaymentForm(forms.ModelForm): class Meta: diff --git a/eo_gestion/eo_facture/static/facture.js b/eo_gestion/eo_facture/static/facture.js new file mode 100644 index 0000000..f05b880 --- /dev/null +++ b/eo_gestion/eo_facture/static/facture.js @@ -0,0 +1,19 @@ +$(function () { + console.log('facture.js loading...'); + $('[data-depends-on]').each(function (i, elt) { + const depends_on_name = $(elt).data('depends-on'); + const $widget = $('[name=' + depends_on_name + ']'); + const $form_row = $(elt).parents('.form-row'); + function update_visibility() { + const current_value = $widget.val(); + const state = current_value != ''; + $form_row.toggle(state); + $form_row.find('label').toggleClass('required', state); + $(elt).attr('required', state); + $(elt).attr('disabled', ! state); // prevent current value from being submitted + } + update_visibility(); + $widget.on('change', update_visibility); + }); + console.log('facture.js loaded.'); +})