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 | 4f6a2e13b52c8ec15bed754ed3da1fb817fc306f (patch) | |
| tree | dc281023e466abcdb83ba2ecd9e167919b27c87d /ishtar/ishtar_base/forms_operations.py | |
| parent | 4b650a37e2e99413660fe4632bab5ef4bdc0837e (diff) | |
| download | Ishtar-4f6a2e13b52c8ec15bed754ed3da1fb817fc306f.tar.bz2 Ishtar-4f6a2e13b52c8ec15bed754ed3da1fb817fc306f.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), | 
