summaryrefslogtreecommitdiff
path: root/archaeological_operations/forms.py
diff options
context:
space:
mode:
Diffstat (limited to 'archaeological_operations/forms.py')
-rw-r--r--archaeological_operations/forms.py374
1 files changed, 24 insertions, 350 deletions
diff --git a/archaeological_operations/forms.py b/archaeological_operations/forms.py
index d4152d4fa..d87e72423 100644
--- a/archaeological_operations/forms.py
+++ b/archaeological_operations/forms.py
@@ -31,37 +31,23 @@ from django.core.exceptions import ObjectDoesNotExist
from django.db.models import Max
from django.utils.translation import ugettext_lazy as _
+from ishtar_common.models import valid_id, PersonType, Person, Town
+from archaeological_files.models import File
import models
-import widgets
-from ishtar_common.forms import Wizard, FinalForm, FormSet, SearchWizard, \
- ClosingWizard, ClosingDateFormSelection, DeletionWizard, formset_factory, \
+from ishtar_common import widgets
+from ishtar_common.forms import FinalForm, FormSet, \
+ ClosingDateFormSelection, formset_factory, \
get_now, reverse_lazy, get_form_selection
from ishtar_common.forms_common import TownForm, TownFormSet, TownFormset, \
- AuthorFormset, SourceForm, SourceWizard, SourceSelect, \
+ AuthorFormset, SourceForm, SourceSelect, \
SourceDeletionForm, get_town_field
-def is_preventive(form_name, model, type_key='operation_type', key=''):
- def func(self, request, storage):
- if storage.prefix not in request.session or \
- 'step_data' not in request.session[storage.prefix] or \
- form_name not in request.session[storage.prefix]['step_data'] or\
- form_name + '-' + type_key not in \
- request.session[storage.prefix]['step_data'][form_name]:
- return False
- try:
- typ = int(request.session[storage.prefix]['step_data']\
- [form_name][form_name+'-'+type_key])
- return model.is_preventive(typ, key)
- except ValueError:
- return False
- return func
-
class ParcelForm(forms.Form):
form_label = _("Parcels")
base_model = 'parcel'
associated_models = {'parcel':models.Parcel, 'town':models.Town}
town = forms.ChoiceField(label=_("Town"), choices=(), required=False,
- validators=[models.valid_id(models.Town)])
+ validators=[valid_id(models.Town)])
section = forms.CharField(label=_(u"Section"), required=False,
validators=[validators.MaxLengthValidator(4)])
parcel_number = forms.CharField(label=_(u"Parcel number"), required=False,
@@ -107,109 +93,6 @@ ParcelFormSet = formset_factory(ParcelForm, can_delete=True,
formset=ParcelFormSet)
ParcelFormSet.form_label = _(u"Parcels")
-class OperationWizard(Wizard):
- model = models.Operation
- object_parcel_type = 'operation'
-
- def get_template(self, request, storage):
- templates = super(OperationWizard, self).get_template(request, storage)
- current_step = storage.get_current_step() or self.get_first_step(
- request, storage)
- if current_step.startswith('towns-'):
- templates = ['towns_wizard.html'] + templates
- return templates
-
- def get_extra_context(self, request, storage):
- """
- Return extra context for templates
- """
- context = super(OperationWizard, self).get_extra_context(request,
- storage)
- step = self.determine_step(request, storage)
- if not step.startswith('towns-'):
- return context
- context['TOWNS'] = self.get_towns(request, storage)
- return context
-
- def get_towns(self, request, storage):
- """
- Obtention des villes disponibles
- """
- general_form_key = 'general-' + self.url_name
- towns = []
- file_id = self.session_get_value(request, storage, general_form_key,
- "associated_file")
- if file_id:
- try:
- for town in models.File.objects.get(pk=int(file_id)
- ).towns.all():
- towns.append((town.pk, unicode(town)))
- except (ValueError, ObjectDoesNotExist):
- pass
- return sorted(towns, key=lambda x:x[1])
- else:
- return -1
-
- def get_form(self, request, storage, step=None, data=None, files=None):
- """
- Manage specifics fields
- """
- if data:
- data = data.copy()
- else:
- data = {}
- if not step:
- step = self.determine_step(request, storage)
- form = self.get_form_list(request, storage)[step]
- general_form_key = 'general-' + self.url_name
- # manage the dynamic choice of towns
- if step.startswith('towns-') and hasattr(form, 'management_form'):
- data['TOWNS'] = self.get_towns(request, storage)
- elif step.startswith('parcels') and hasattr(form, 'management_form'):
- file_id = self.session_get_value(request, storage, general_form_key,
- "associated_file")
- if file_id:
- parcels = []
- try:
- for parcel in models.File.objects.get(pk=int(file_id)
- ).parcels.all():
- parcels.append((parcel.pk, parcel.short_label()))
- except (ValueError, ObjectDoesNotExist):
- pass
- data['PARCELS'] = sorted(parcels, key=lambda x:x[1])
- else:
- town_form_key = step.startswith('parcelsgeneral') \
- and 'townsgeneral-' or 'towns-'
- town_form_key += self.url_name
- town_ids = self.session_get_value(request, storage,
- town_form_key, 'town', multi=True) or []
- towns = []
- for town_id in town_ids:
- try:
- town = models.Town.objects.get(pk=int(town_id))
- towns.append((town.pk, unicode(town)))
- except (ValueError, ObjectDoesNotExist):
- pass
- data['TOWNS'] = sorted(towns, key=lambda x:x[1])
- data = data or None
- form = super(OperationWizard, self).get_form(request, storage, step,
- data, files)
- return form
-
- def get_formated_datas(self, forms):
- """
- Show a specific warning if no archaelogical file is provided
- """
- datas = super(OperationWizard, self).get_formated_datas(forms)
- # if the general town form is used the advertissement is pertinent
- has_no_af = [form.prefix for form in forms
- if form.prefix == 'townsgeneral-operation'] and True
- if has_no_af:
- datas = [[_(u"Warning: No Archaelogical File is provided. "
- u"If you have forget it return to the first step."), []]]\
- + datas
- return datas
-
class OperationSelect(forms.Form):
common_name = forms.CharField(label=_(u"Name"), max_length=30)
towns = get_town_field()
@@ -233,7 +116,7 @@ class OperationFormSelection(forms.Form):
widget=widgets.JQueryJqGrid(reverse_lazy('get-operation'),
OperationSelect(), models.Operation,
source_full=reverse_lazy('get-operation-full')),
- validators=[models.valid_id(models.Operation)])
+ validators=[valid_id(models.Operation)])
def clean(self):
cleaned_data = self.cleaned_data
@@ -267,22 +150,22 @@ class OperationCodeInput(forms.TextInput):
class OperationFormGeneral(forms.Form):
form_label = _(u"General")
- associated_models = {'in_charge':models.Person,
- 'associated_file':models.File,
+ associated_models = {'in_charge':Person,
+ 'associated_file':File,
'operation_type':models.OperationType}
- currents = {'associated_file':models.File}
+ currents = {'associated_file':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(
- [unicode(models.PersonType.objects.get(txt_idx='head_scientist').pk),
- unicode(models.PersonType.objects.get(txt_idx='sra_agent').pk)])]),
- associated_model=models.Person, new=True),
- validators=[models.valid_id(models.Person)], required=False)
+ [unicode(PersonType.objects.get(txt_idx='head_scientist').pk),
+ unicode(PersonType.objects.get(txt_idx='sra_agent').pk)])]),
+ associated_model=Person, new=True),
+ validators=[valid_id(Person)], required=False)
associated_file = forms.IntegerField(label=_(u"Archaelogical file"),
widget=widgets.JQueryAutoComplete(reverse_lazy('autocomplete-file'),
- associated_model=models.File),
- validators=[models.valid_id(models.File)], required=False)
+ associated_model=File),
+ validators=[valid_id(File)], required=False)
operation_type = forms.ChoiceField(label=_(u"Operation type"),
choices=[])
start_date = forms.DateField(label=_(u"Start date"), required=False,
@@ -369,9 +252,9 @@ class OperationFormPreventiveDiag(forms.Form):
class SelectedTownForm(forms.Form):
form_label = _("Towns")
- associated_models = {'town':models.Town}
+ associated_models = {'town':Town}
town = forms.ChoiceField(label=_("Town"), choices=(),
- validators=[models.valid_id(models.Town)])
+ validators=[valid_id(Town)])
def __init__(self, *args, **kwargs):
towns = None
if 'data' in kwargs and 'TOWNS' in kwargs['data']:
@@ -395,7 +278,7 @@ class SelectedParcelForm(forms.Form):
form_label = _("Parcels")
associated_models = {'parcel':models.Parcel}
parcel = forms.ChoiceField(label=_("Parcel"), choices=(),
- validators=[models.valid_id(models.Parcel)])
+ validators=[valid_id(models.Parcel)])
def __init__(self, *args, **kwargs):
parcels = None
if 'data' in kwargs and 'PARCELS' in kwargs['data']:
@@ -453,10 +336,6 @@ PeriodFormset = formset_factory(PeriodForm, can_delete=True,
formset=PeriodFormSet)
PeriodFormset.form_label = _("Periods")
-operation_search_wizard = SearchWizard([
- ('general-operation_search', OperationFormSelection)],
- url_name='operation_search',)
-
def has_associated_file(form_name, file_key='associated_file', negate=False):
def func(self, request, storage):
if storage.prefix not in request.session or \
@@ -472,126 +351,18 @@ def has_associated_file(form_name, file_key='associated_file', negate=False):
except ValueError:
return negate
return func
-
-operation_creation_wizard = OperationWizard([
- ('general-operation_creation', OperationFormGeneral),
- ('preventive-operation_creation', OperationFormPreventive),
- ('preventivediag-operation_creation', OperationFormPreventiveDiag),
- ('townsgeneral-operation_creation', TownFormset),
- ('towns-operation_creation', SelectedTownFormset),
- ('parcelsgeneral-operation_creation', SelectedParcelGeneralFormSet),
- ('parcels-operation_creation', SelectedParcelFormSet),
- ('remains-operation_creation', RemainFormset),
- ('periods-operation_creation', PeriodFormset),
- ('final-operation_creation', FinalForm)],
- condition_list={
-'preventive-operation_creation':is_preventive('general-operation_creation',
- models.OperationType, 'operation_type', 'prev_excavation'),
-'preventivediag-operation_creation':is_preventive('general-operation_creation',
- models.OperationType, 'operation_type', 'arch_diagnostic'),
-'townsgeneral-operation_creation':has_associated_file(
- 'general-operation_creation', negate=True),
-'towns-operation_creation':has_associated_file('general-operation_creation'),
-'parcelsgeneral-operation_creation':has_associated_file(
- 'general-operation_creation', negate=True),
-'parcels-operation_creation':has_associated_file('general-operation_creation'),
- },
- url_name='operation_creation',)
-
-class OperationModificationWizard(OperationWizard):
- modification = True
-
-operation_modification_wizard = OperationModificationWizard([
- ('selec-operation_modification', OperationFormSelection),
- ('general-operation_modification', OperationFormGeneral),
- ('preventive-operation_modification', OperationFormPreventive),
- ('preventivediag-operation_modification', OperationFormPreventiveDiag),
- ('towns-operation_modification', SelectedTownFormset),
- ('townsgeneral-operation_modification', TownFormset),
- ('parcels-operation_modification', SelectedParcelFormSet),
- ('parcelsgeneral-operation_modification', SelectedParcelGeneralFormSet),
- ('remains-operation_modification', RemainFormset),
- ('periods-operation_modification', PeriodFormset),
- ('final-operation_modification', FinalForm)],
- condition_list={
-'preventive-operation_modification':is_preventive(
- 'general-operation_modification', models.OperationType,
- 'operation_type', 'prev_excavation'),
-'preventivediag-operation_modification':is_preventive(
- 'general-operation_modification', models.OperationType,
- 'operation_type', 'arch_diagnostic'),
-'townsgeneral-operation_modification':has_associated_file(
- 'general-operation_modification', negate=True),
-'towns-operation_modification':has_associated_file(
- 'general-operation_modification'),
-'parcelsgeneral-operation_modification':has_associated_file(
- 'general-operation_modification', negate=True),
-'parcels-operation_modification':has_associated_file(
- 'general-operation_modification'),
- },
- url_name='operation_modification',)
-
-class OperationClosingWizard(ClosingWizard):
- model = models.Operation
- fields = ['year', 'operation_code', 'operation_type', 'associated_file',
-'in_charge', 'start_date', 'excavation_end_date', 'comment', 'towns', 'remains']
-
class FinalOperationClosingForm(FinalForm):
confirm_msg = " "
confirm_end_msg = _(u"Would you like to close this operation?")
-operation_closing_wizard = OperationClosingWizard([
- ('selec-operation_closing', OperationFormSelection),
- ('date-operation_closing', ClosingDateFormSelection),
- ('final-operation_closing', FinalOperationClosingForm)],
- url_name='operation_closing',)
-
-class OperationDeletionWizard(DeletionWizard):
- model = models.Operation
- fields = OperationClosingWizard.fields
-
class OperationDeletionForm(FinalForm):
confirm_msg = " "
confirm_end_msg = _(u"Would you like to delete this operation?")
-operation_deletion_wizard = OperationDeletionWizard([
- ('selec-operation_deletion', OperationFormSelection),
- ('final-operation_deletion', OperationDeletionForm)],
- url_name='operation_deletion',)
-
####################################
# Source management for operations #
####################################
-class OperationSourceWizard(SourceWizard):
- model = models.OperationSource
- def get_form_initial(self, request, storage, step):
- initial = super(OperationSourceWizard, self).get_form_initial(request,
- storage, step)
- # put default index and operation_id field in the main source form
- general_form_key = 'selec-' + self.url_name
- if step.startswith('source-') \
- and self.session_has_key(request, storage, general_form_key):
- gen_storage = request.session[storage.prefix]['step_data']\
- [general_form_key]
- if general_form_key+"-operation" in gen_storage:
- operation_id = int(gen_storage[general_form_key+"-operation"])
- elif general_form_key+"-pk" in gen_storage:
- pk = int(gen_storage[general_form_key+"-pk"])
- try:
- source = models.OperationSource.objects.get(pk=pk)
- operation_id = source.operation.pk
- except ObjectDoesNotExist:
- pass
- if operation_id:
- initial['hidden_operation_id'] = operation_id
- if 'index' not in initial:
- max_val = models.OperationSource.objects.filter(
- operation__pk=operation_id).aggregate(
- Max('index'))["index__max"]
- initial['index'] = max_val and (max_val + 1) or 1
- return initial
-
class OperationSourceForm(SourceForm):
pk = forms.IntegerField(required=False, widget=forms.HiddenInput)
index = forms.IntegerField(label=_(u"Index"))
@@ -627,13 +398,6 @@ SourceOperationFormSelection = get_form_selection(
models.Operation, OperationSelect, 'get-operation',
_(u"You should select an operation."))
-operation_source_creation_wizard = OperationSourceWizard([
- ('selec-operation_source_creation', SourceOperationFormSelection),
- ('source-operation_source_creation',OperationSourceForm),
- ('authors-operation_source_creation', AuthorFormset),
- ('final-operation_source_creation', FinalForm)],
- url_name='operation_source_creation',)
-
class OperationSourceSelect(SourceSelect):
operation__towns = get_town_field(label=_(u"Operation's town"))
operation__operation_type = forms.ChoiceField(label=_(u"Operation type"),
@@ -653,66 +417,10 @@ OperationSourceFormSelection = get_form_selection(
models.OperationSource, OperationSourceSelect, 'get-operationsource',
_(u"You should select a document."))
-operation_source_modification_wizard = OperationSourceWizard([
- ('selec-operation_source_modification', OperationSourceFormSelection),
- ('source-operation_source_modification', OperationSourceForm),
- ('authors-operation_source_modification', AuthorFormset),
- ('final-operation_source_modification', FinalForm)],
- url_name='operation_source_modification',)
-
-class OperationSourceDeletionWizard(DeletionWizard):
- model = models.OperationSource
- fields = ['operation', 'title', 'source_type', 'authors',]
-
-operation_source_deletion_wizard = OperationSourceDeletionWizard([
- ('selec-operation_source_deletion', OperationSourceFormSelection),
- ('final-operation_source_deletion', SourceDeletionForm)],
- url_name='operation_source_deletion',)
-
################################################
# Administrative act management for operations #
################################################
-class OperationAdministrativeActWizard(OperationWizard):
- edit = False
-
- def get_extra_model(self, dct, request, storage, form_list):
- dct['history_modifier'] = request.user
- return dct
-
- def get_associated_item(self, request, storage, dct):
- return self.get_current_object(request, storage)
-
- def save_model(self, dct, m2m, whole_associated_models, request, storage,
- form_list, return_object):
- associated_item = self.get_associated_item(request, storage, dct)
- if not associated_item:
- return self.render(request, storage, form_list[-1])
- if isinstance(associated_item, models.File):
- dct['associated_file'] = associated_item
- elif isinstance(associated_item, models.Operation):
- dct['operation'] = associated_item
- dct['history_modifier'] = request.user
- if 'pk' in dct:
- dct.pop('pk')
- if self.edit:
- admact = self.get_current_object(request, storage)
- for k in dct:
- if hasattr(admact, k):
- setattr(admact, k, dct[k])
- else:
- admact = models.AdministrativeAct(**dct)
- admact.save()
- res = render_to_response('wizard_done.html', {},
- context_instance=RequestContext(request))
- return res
-
-class OperationEditAdministrativeActWizard(OperationAdministrativeActWizard):
- model = models.AdministrativeAct
- edit = True
- def get_associated_item(self, request, storage, dct):
- return self.get_current_object(request, storage).operation
-
class AdministrativeActOpeSelect(forms.Form):
operation__towns = get_town_field()
act_type = forms.ChoiceField(label=_("Act type"), choices=[])
@@ -732,7 +440,7 @@ class AdministrativeActOpeFormSelection(forms.Form):
widget=widgets.JQueryJqGrid(reverse_lazy('get-administrativeactop'),
AdministrativeActOpeSelect(), models.AdministrativeAct,
table_cols='TABLE_COLS_OPE'),
- validators=[models.valid_id(models.AdministrativeAct)])
+ validators=[valid_id(models.AdministrativeAct)])
def clean(self):
cleaned_data = self.cleaned_data
@@ -744,12 +452,12 @@ class AdministrativeActOpeFormSelection(forms.Form):
class AdministrativeActOpeForm(forms.Form):
form_label = _("General")
associated_models = {'act_type':models.ActType,
- 'signatory':models.Person}
+ 'signatory':Person}
act_type = forms.ChoiceField(label=_("Act type"), choices=[])
signatory = forms.IntegerField(label=_("Signatory"),
widget=widgets.JQueryAutoComplete(reverse_lazy('autocomplete-person'),
- associated_model=models.Person, new=True),
- validators=[models.valid_id(models.Person)])
+ associated_model=Person, new=True),
+ validators=[valid_id(Person)])
act_object = forms.CharField(label=_(u"Object"), max_length=200,
widget=forms.Textarea)
signature_date = forms.DateField(label=_(u"Signature date"),
@@ -764,41 +472,7 @@ class AdministrativeActOpeForm(forms.Form):
self.fields['act_type'].help_text = models.ActType.get_help(
dct={'intented_to':'O'})
-class AdministrativeActDeletionWizard(ClosingWizard):
- model = models.AdministrativeAct
- fields = ['act_type', 'in_charge', 'operator', 'scientific', 'signatory',
- 'operation', 'associated_file', 'signature_date', 'act_object',]
- if settings.COUNTRY == 'fr':
- fields += ['ref_sra']
-
- def done(self, request, storage, form_list, **kwargs):
- obj = self.get_current_object(request, storage)
- obj.delete()
- return render_to_response('wizard_done.html', {},
- context_instance=RequestContext(request))
-
class FinalAdministrativeActDeleteForm(FinalForm):
confirm_msg = " "
confirm_end_msg = _(u"Would you like to delete this administrative act?")
-operation_administrativeactop_wizard = OperationAdministrativeActWizard([
- ('selec-operation_administrativeactop', OperationFormSelection),
- ('administrativeact-operation_administrativeactop', AdministrativeActOpeForm),
- ('final-operation_administrativeactop', FinalForm)],
- url_name='operation_administrativeactop',)
-
-operation_administrativeactop_modification_wizard = \
- OperationEditAdministrativeActWizard([
- ('selec-operation_administrativeactop_modification',
- AdministrativeActOpeFormSelection),
- ('administrativeact-operation_administrativeactop_modification',
- AdministrativeActOpeForm),
- ('final-operation_administrativeactop_modification', FinalForm)],
- url_name='operation_administrativeactop_modification',)
-
-operation_administrativeactop_deletion_wizard = AdministrativeActDeletionWizard([
- ('selec-operation_administrativeactop_deletion',
- AdministrativeActOpeFormSelection),
- ('final-operation_administrativeactop_deletion',
- FinalAdministrativeActDeleteForm)],
- url_name='operation_administrativeactop_deletion',)