diff options
author | Étienne Loks <etienne.loks@peacefrogs.net> | 2011-10-06 14:05:55 +0200 |
---|---|---|
committer | Étienne Loks <etienne.loks@peacefrogs.net> | 2011-10-06 14:05:55 +0200 |
commit | dfc9ba4ecc8083deb734e26e0bcdc97413b6ff68 (patch) | |
tree | dc281023e466abcdb83ba2ecd9e167919b27c87d /ishtar/ishtar_base/forms_operations.py | |
parent | dafa7363476af5570e1ca11bc39258980a3a88a2 (diff) | |
download | Ishtar-dfc9ba4ecc8083deb734e26e0bcdc97413b6ff68.tar.bz2 Ishtar-dfc9ba4ecc8083deb734e26e0bcdc97413b6ff68.zip |
Operations - Move reference panel to general panel (closes #638)
Also manage the auto-completion of references when changing a year
Diffstat (limited to 'ishtar/ishtar_base/forms_operations.py')
-rw-r--r-- | ishtar/ishtar_base/forms_operations.py | 113 |
1 files changed, 50 insertions, 63 deletions
diff --git a/ishtar/ishtar_base/forms_operations.py b/ishtar/ishtar_base/forms_operations.py index fbdeb3163..e163b5869 100644 --- a/ishtar/ishtar_base/forms_operations.py +++ b/ishtar/ishtar_base/forms_operations.py @@ -112,13 +112,6 @@ class OperationWizard(Wizard): step = self.determine_step(request, storage) form = self.get_form_list(request, storage)[step] general_form_key = 'general-' + self.url_name - # put hidden year field for refs - if data and step.startswith('refs-') \ - and self.session_has_key(request, storage, general_form_key): - prefix = 'refs-' + self.url_name - year = int(request.session[storage.prefix]['step_data']\ - [general_form_key][general_form_key+"-year"]) - data[prefix+'-hidden_year'] = year # manage the dynamic choice of towns if step.startswith('towns-') and hasattr(form, 'management_form'): data['TOWNS'] = self.get_towns(request, storage) @@ -153,22 +146,6 @@ class OperationWizard(Wizard): data, files) return form - def get_form_initial(self, request, storage, step): - initial = super(OperationWizard, self).get_form_initial(request, - storage, step) - # put hidden year and default operation_code field for refs - general_form_key = 'general-' + self.url_name - if step.startswith('refs-') \ - and self.session_has_key(request, storage, general_form_key)\ - and 'operation_code' not in initial: - year = int(request.session[storage.prefix]['step_data']\ - [general_form_key][general_form_key+"-year"]) - initial['hidden_year'] = year - max_val = models.Operation.objects.filter(year=year).aggregate( - Max('operation_code'))["operation_code__max"] - initial['operation_code'] = max_val and (max_val + 1) or 1 - return initial - def get_formated_datas(self, forms): """ Show a specific warning if no archaelogical file is provided @@ -214,12 +191,37 @@ class OperationFormSelection(forms.Form): raise forms.ValidationError(_(u"You should select an operation.")) return cleaned_data +class OperationCodeInput(forms.TextInput): + """Manage auto complete whene changing year in form""" + def render(self, *args, **kwargs): + name, value = args + base_name = '-'.join(name.split('-')[:-1]) + rendered = super(OperationCodeInput, self).render(*args, **kwargs) + js = u"""\n <script type="text/javascript"><!--// + function initialyse_operation_code () { + // if the form is in creation mode + if(!$("#id_%(base_name)s-pk").val()){ + $("#id_%(base_name)s-year").change(function() { + var year = $("#id_%(base_name)s-year").val(); + var url = "%(url)s" + year; + $.getJSON(url, function(data) { + $("#id_%(name)s").val(data.id); + }); + }); + } + } + $(document).ready(initialyse_operation_code()); + //--></script>\n""" % {'base_name':base_name, 'name':name, + 'url':reverse_lazy('get_available_operation_code')} + return rendered + js + class OperationFormGeneral(forms.Form): - form_label = _("General") + form_label = _(u"General") associated_models = {'in_charge':models.Person, 'associated_file':models.File, 'operation_type':models.OperationType} currents = {'associated_file':models.File} + pk = forms.IntegerField(required=False, widget=forms.HiddenInput) in_charge = forms.IntegerField(label=_("Person in charge of the operation"), widget=widgets.JQueryAutoComplete(reverse_lazy('autocomplete-person', args=["_".join( @@ -245,37 +247,9 @@ class OperationFormGeneral(forms.Form): initial=lambda:datetime.datetime.now().year, validators=[validators.MinValueValidator(1900), validators.MaxValueValidator(2100)]) - comment = forms.CharField(label=_(u"Comment"), widget=forms.Textarea, - required=False) - - def __init__(self, *args, **kwargs): - super(OperationFormGeneral, self).__init__(*args, **kwargs) - self.fields['operation_type'].choices = models.OperationType.get_types() - self.fields['operation_type'].help_text = models.OperationType.get_help() - - def clean(self): - # verify the logic between start date and excavation end date - if not self.cleaned_data['excavation_end_date']: - return self.cleaned_data - if self.cleaned_data['excavation_end_date'] and \ - not self.cleaned_data['start_date']: - raise forms.ValidationError(_(u"If you want to set an excavation \ -end date you have to provide a start date.")) - if self.cleaned_data['excavation_end_date'] < \ - self.cleaned_data['start_date']: - raise forms.ValidationError(_(u"The excavation end date cannot be \ -before the start date.")) - return self.cleaned_data - -class OperationFormReference(forms.Form): - form_label = _("References") - associated_models = {'in_charge':models.Person, - 'associated_file':models.File, - 'operation_type':models.OperationType} - currents = {'associated_file':models.File} - pk = forms.IntegerField(required=False, widget=forms.HiddenInput) - hidden_year = forms.IntegerField(widget=forms.HiddenInput) - operation_code = forms.IntegerField(label=_(u"Operation code")) + operation_code = forms.IntegerField(label=_(u"Operation code"), + initial=models.Operation.get_available_operation_code, + widget=OperationCodeInput) common_name = forms.CharField(label=_(u"Generic name"), required=False, max_length=120, widget=forms.Textarea) operator_reference = forms.CharField(label=_(u"Operator reference"), @@ -285,26 +259,41 @@ class OperationFormReference(forms.Form): required=False) code_dracar = forms.CharField(label=u"Code DRACAR", required=False, validators=[validators.MaxLengthValidator(10)]) + comment = forms.CharField(label=_(u"Comment"), widget=forms.Textarea, + required=False) + + def __init__(self, *args, **kwargs): + super(OperationFormGeneral, self).__init__(*args, **kwargs) + self.fields['operation_type'].choices = models.OperationType.get_types() + self.fields['operation_type'].help_text = models.OperationType.get_help() def clean(self): - # manage unique operation ID cleaned_data = self.cleaned_data - year = cleaned_data.get("hidden_year") + # verify the logic between start date and excavation end date + if cleaned_data['excavation_end_date']: + if not self.cleaned_data['start_date']: + raise forms.ValidationError(_(u"If you want to set an " + u"excavation end date you have to provide a start date.")) + if cleaned_data['excavation_end_date'] < cleaned_data['start_date']: + raise forms.ValidationError(_(u"The excavation end date "\ + u"cannot be before the start date.")) + year = self.cleaned_data.get("year") operation_code = cleaned_data.get("operation_code") ops = models.Operation.objects.filter(year=year, operation_code=operation_code) + # manage unique operation ID if 'pk' in cleaned_data and cleaned_data['pk']: ops = ops.exclude(pk=cleaned_data['pk']) if ops.count(): max_val = models.Operation.objects.filter(year=year).aggregate( Max('operation_code'))["operation_code__max"] raise forms.ValidationError(_(u"Operation code already exist for " -"year: %(year)d - use a value bigger than %(last_val)d") % {'year':year, - 'last_val':max_val}) - return cleaned_data + u"year: %(year)d - use a value bigger than %(last_val)d") % { + 'year':year, 'last_val':max_val}) + return self.cleaned_data class OperationFormPreventive(forms.Form): - form_label = _("Preventive informations - excavation") + form_label = _(u"Preventive informations - excavation") cost = forms.IntegerField(label=_(u"Cost (€)"), required=False) scheduled_man_days = forms.IntegerField(label=_(u"Scheduled man-days"), required=False) @@ -436,7 +425,6 @@ def has_associated_file(form_name, file_key='associated_file', negate=False): operation_creation_wizard = OperationWizard([ ('general-operation_creation', OperationFormGeneral), - ('refs-operation_creation', OperationFormReference), ('preventive-operation_creation', OperationFormPreventive), ('preventivediag-operation_creation', OperationFormPreventiveDiag), ('townsgeneral-operation_creation', TownFormset), @@ -466,7 +454,6 @@ class OperationModificationWizard(OperationWizard): operation_modification_wizard = OperationModificationWizard([ ('selec-operation_modification', OperationFormSelection), ('general-operation_modification', OperationFormGeneral), - ('refs-operation_modification', OperationFormReference), ('preventive-operation_modification', OperationFormPreventive), ('preventivediag-operation_modification', OperationFormPreventiveDiag), ('towns-operation_modification', SelectedTownFormset), |