diff options
author | Étienne Loks <etienne.loks@iggdrasil.net> | 2016-08-24 16:32:15 +0200 |
---|---|---|
committer | Étienne Loks <etienne.loks@iggdrasil.net> | 2016-08-24 16:32:15 +0200 |
commit | a88467414b3b8f10c747944a798cbe20363862aa (patch) | |
tree | 7e8d47e3370d8a213ca9888e5645bf51ea788ea0 | |
parent | 988312da8273e1fb285d972b3aab9df44d74717c (diff) | |
download | Ishtar-a88467414b3b8f10c747944a798cbe20363862aa.tar.bz2 Ishtar-a88467414b3b8f10c747944a798cbe20363862aa.zip |
Administrativ act: can modify index (refs #2248)
-rw-r--r-- | archaeological_files/forms.py | 10 | ||||
-rw-r--r-- | archaeological_files/views.py | 4 | ||||
-rw-r--r-- | archaeological_operations/forms.py | 43 | ||||
-rw-r--r-- | archaeological_operations/views.py | 2 |
4 files changed, 54 insertions, 5 deletions
diff --git a/archaeological_files/forms.py b/archaeological_files/forms.py index 41381e0b8..369ffdaf0 100644 --- a/archaeological_files/forms.py +++ b/archaeological_files/forms.py @@ -1,6 +1,6 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (C) 2010-2015 Étienne Loks <etienne.loks_AT_peacefrogsDOTnet> +# Copyright (C) 2010-2016 Étienne Loks <etienne.loks_AT_peacefrogsDOTnet> # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as @@ -37,7 +37,7 @@ from ishtar_common.forms import FinalForm, get_now, reverse_lazy, TableSelect from ishtar_common.forms_common import get_town_field from archaeological_operations.forms import AdministrativeActOpeForm, \ AdministrativeActOpeFormSelection, \ - ParcelField, SLICING, HEAD_SCIENTIST, SRA_AGENT + ParcelField, SLICING, HEAD_SCIENTIST, SRA_AGENT, AdministrativeActModifForm from ishtar_common import widgets GENERAL_CONTRACTOR, created = PersonType.objects.get_or_create( @@ -538,3 +538,9 @@ class AdministrativeActFileForm(AdministrativeActOpeForm): dct={'intented_to': 'F'}) self.fields['act_type'].help_text = ActType.get_help( dct={'intented_to': 'F'}) + + +class AdministrativeActFileModifForm(AdministrativeActModifForm, + AdministrativeActFileForm): + pk = forms.IntegerField(required=False, widget=forms.HiddenInput) + index = forms.IntegerField(label=_("Index"), required=False) diff --git a/archaeological_files/views.py b/archaeological_files/views.py index a1b453169..7e96c33d3 100644 --- a/archaeological_files/views.py +++ b/archaeological_files/views.py @@ -1,6 +1,6 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (C) 2010-2015 Étienne Loks <etienne.loks_AT_peacefrogsDOTnet> +# Copyright (C) 2010-2016 Étienne Loks <etienne.loks_AT_peacefrogsDOTnet> # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as @@ -236,7 +236,7 @@ file_administrativeactfile_modification_wizard = \ ('selec-file_administrativeactfile_modification', AdministrativeActFileModifyFormSelection), ('administrativeact-file_administrativeactfile_modification', - AdministrativeActFileForm), + AdministrativeActFileModifForm), ('final-file_administrativeactfile_modification', FinalForm)], label=_(u"File: administrative act modification"), url_name='file_administrativeactfile_modification',) diff --git a/archaeological_operations/forms.py b/archaeological_operations/forms.py index 67cc8892d..d2303a43b 100644 --- a/archaeological_operations/forms.py +++ b/archaeological_operations/forms.py @@ -1285,6 +1285,49 @@ class AdministrativeActOpeForm(forms.Form): dct={'intented_to': 'O'}) +class AdministrativeActModifForm(object): + def __init__(self, *args, **kwargs): + super(AdministrativeActModifForm, self).__init__(*args, **kwargs) + self.fields.keyOrder = list(self.fields.keyOrder) + self.fields.keyOrder.pop(self.fields.keyOrder.index( + 'index')) + self.fields.keyOrder.insert( + self.fields.keyOrder.index("signature_date") + 1, 'index') + + def clean(self): + # manage unique act ID + year = self.cleaned_data.get("signature_date") + if not year or not hasattr(year, 'year'): + return self.cleaned_data + year = year.year + index = self.cleaned_data.get("index", None) + if not index: + return self.cleaned_data + items = models.AdministrativeAct.objects.filter( + year=year, index=index) + if 'pk' in self.cleaned_data and self.cleaned_data['pk']: + items = items.exclude(pk=self.cleaned_data['pk']) + if items.count(): + max_val = models.AdministrativeAct.objects.filter( + year=year).aggregate(Max('index'))["index__max"] + msg = '' + if year and max_val: + msg = _( + u"This index already exist for year: %(year)d - use a " + u"value bigger than %(last_val)d") % { + 'year': year, 'last_val': max_val} + else: + msg = _(u"Bad index") + raise forms.ValidationError(msg) + return self.cleaned_data + + +class AdministrativeActOpeModifForm(AdministrativeActModifForm, + AdministrativeActOpeForm): + pk = forms.IntegerField(required=False, widget=forms.HiddenInput) + index = forms.IntegerField(label=_("Index"), required=False) + + class FinalAdministrativeActDeleteForm(FinalForm): confirm_msg = " " confirm_end_msg = _(u"Would you like to delete this administrative act?") diff --git a/archaeological_operations/views.py b/archaeological_operations/views.py index 0481edae3..013e329a1 100644 --- a/archaeological_operations/views.py +++ b/archaeological_operations/views.py @@ -421,7 +421,7 @@ operation_administrativeactop_modification_wizard = \ ('selec-operation_administrativeactop_modification', AdministrativeActOpeFormSelection), ('administrativeact-operation_administrativeactop_modification', - AdministrativeActOpeForm), + AdministrativeActOpeModifForm), ('final-operation_administrativeactop_modification', FinalForm)], label=_(u"Operation: administrative act modification"), url_name='operation_administrativeactop_modification',) |