diff options
author | Étienne Loks <etienne.loks@iggdrasil.net> | 2019-09-16 16:38:29 +0200 |
---|---|---|
committer | Étienne Loks <etienne.loks@iggdrasil.net> | 2019-09-16 16:38:29 +0200 |
commit | 0124b3fbcc45374a4b40ab988305a6ce1ac1a6f4 (patch) | |
tree | c0606a4bf7e067265305be96de3b86fda6444336 | |
parent | d29d61413717bbb03ed5ddd82194290109c4847f (diff) | |
download | Ishtar-0124b3fbcc45374a4b40ab988305a6ce1ac1a6f4.tar.bz2 Ishtar-0124b3fbcc45374a4b40ab988305a6ce1ac1a6f4.zip |
Treatment: warning when a treatment state is not reversible
-rw-r--r-- | archaeological_finds/forms_treatments.py | 36 |
1 files changed, 35 insertions, 1 deletions
diff --git a/archaeological_finds/forms_treatments.py b/archaeological_finds/forms_treatments.py index c9dcdea86..4f906f1b9 100644 --- a/archaeological_finds/forms_treatments.py +++ b/archaeological_finds/forms_treatments.py @@ -83,6 +83,39 @@ class TreatmentFormSelection(forms.Form): validators=[valid_id(models.Treatment)]) +class TreatmentStateSelect(forms.Select): + def render(self, name, value, attrs=None, renderer=None): + rendered = super(TreatmentStateSelect, self).render(name, value, attrs, + renderer) + executed_id = [ + str(t.pk) for t in models.TreatmentState.objects.filter( + executed=True).all()] + if not executed_id: + return rendered + message = '<i class="fa fa-exclamation-triangle" ' \ + 'aria-hidden="true"></i> ' + message += str(_("Once validated, this state is not reversible.")) + rendered += """ + <div id="%(name)s-msg"class="alert alert-warning d-none">%(message)s</div> + <script type='text/javascript'> + var %(id)s_exec_list = ['%(exec_list)s']; + var %(id)s_check = function(){ + var current_val = $("#id_%(name)s").val(); + if (%(id)s_exec_list.indexOf(current_val) != -1){ + $("#%(name)s-msg").removeClass("d-none"); + } else { + $("#%(name)s-msg").addClass("d-none"); + } + }; + + $("#id_%(name)s").change(%(id)s_check); + %(id)s_check(); + </script>""" % {"name": name, "id": name.replace("-", "_"), + "exec_list": "','".join(executed_id), + "message": message} + return rendered + + class BaseTreatmentForm(CustomForm, ManageOldType): UPSTREAM_IS_MANY = False DOWNSTREAM_IS_MANY = False @@ -104,7 +137,8 @@ class BaseTreatmentForm(CustomForm, ManageOldType): treatment_type = widgets.Select2MultipleField( label=_(u"Treatment type"), choices=[], widget=widgets.CheckboxSelectMultiple) - treatment_state = forms.ChoiceField(label=_(u"State"), choices=[]) + treatment_state = forms.ChoiceField(label=_(u"State"), choices=[], + widget=TreatmentStateSelect) year = forms.IntegerField(label=_("Year"), initial=lambda: datetime.datetime.now().year, validators=[validators.MinValueValidator(1000), |