summaryrefslogtreecommitdiff
path: root/ishtar/ishtar_base/forms_operations.py
diff options
context:
space:
mode:
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
commitdfc9ba4ecc8083deb734e26e0bcdc97413b6ff68 (patch)
treedc281023e466abcdb83ba2ecd9e167919b27c87d /ishtar/ishtar_base/forms_operations.py
parentdafa7363476af5570e1ca11bc39258980a3a88a2 (diff)
downloadIshtar-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.py113
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),