summaryrefslogtreecommitdiff
path: root/archaeological_finds/forms.py
diff options
context:
space:
mode:
Diffstat (limited to 'archaeological_finds/forms.py')
-rw-r--r--archaeological_finds/forms.py386
1 files changed, 84 insertions, 302 deletions
diff --git a/archaeological_finds/forms.py b/archaeological_finds/forms.py
index 7d64214f5..21593a450 100644
--- a/archaeological_finds/forms.py
+++ b/archaeological_finds/forms.py
@@ -1,6 +1,6 @@
#!/usr/bin/env python
# -*- coding: utf-8 -*-
-# Copyright (C) 2010-2011 Étienne Loks <etienne.loks_AT_peacefrogsDOTnet>
+# Copyright (C) 2010-2012 É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
@@ -18,7 +18,7 @@
# See the file COPYING for details.
"""
-Items forms definitions
+Finds forms definitions
"""
import datetime
@@ -33,67 +33,20 @@ from django.utils.translation import ugettext_lazy as _
from ishtar import settings
+from ishtar_common.models import Person, valid_id
+from archaeological_operations.models import Period, OperationType
+from archaeological_context_records.models import DatingType, DatingQuality
+from archaeological_warehouse.models import Warehouse, ContainerType, Container
import models
import widgets
-from forms import Wizard, FinalForm, FormSet, SearchWizard, DeletionWizard,\
+from forms import FinalForm, FormSet,\
FloatField, formset_factory, get_now, get_form_selection, reverse_lazy
from forms_common import get_town_field, get_warehouse_field, SourceForm, \
- SourceWizard, SourceSelect, SourceDeletionForm, AuthorFormset
+ SourceSelect, SourceDeletionForm, AuthorFormset
from forms_context_records import RecordFormSelection
-class ItemWizard(Wizard):
- model = models.Item
-
- def get_current_contextrecord(self, request, storage):
- step = storage.get_current_step()
- if not step:
- return
- if step.endswith('_creation'): # a context record has been selected
- main_form_key = 'selecrecord-' + self.url_name
- try:
- idx = int(self.session_get_value(request, storage,
- main_form_key, 'pk'))
- current_cr = models.ContextRecord.objects.get(pk=idx)
- return current_cr
- except(TypeError, ValueError, ObjectDoesNotExist):
- pass
- current_item = self.get_current_object(request, storage)
- if current_item:
- base_finds = current_item.base_finds.all()
- if base_finds:
- return base_finds[0].context_record
-
- def get_template_context(self, request, storage, form=None):
- """
- Get the operation and context record "reminder" on top of wizard forms
- """
- context = super(ItemWizard, self).get_template_context(request,
- storage, form)
- current_cr = self.get_current_contextrecord(request, storage)
- if not current_cr:
- return context
- operation = current_cr.operation
- items = []
- if hasattr(operation, 'code_patriarche') and operation.code_patriarche:
- items.append(unicode(operation.code_patriarche))
- items.append("-".join((unicode(operation.year),
- unicode(operation.operation_code))))
- reminder = unicode(_("Current operation: ")) + u" - ".join(items)
- reminder += u"<br/>" + unicode(_("Current context record: "))\
- + unicode(current_cr.label)
- context['reminder'] = mark_safe(reminder)
- return context
-
- def get_extra_model(self, dct, request, storage, form_list):
- dct = super(ItemWizard, self).get_extra_model(dct, request, storage,
- form_list)
- dct['order'] = 1
- if 'pk' in dct and type(dct['pk']) == models.ContextRecord:
- dct['base_finds__context_record'] = dct.pop('pk')
- return dct
-
-class ItemForm(forms.Form):
- form_label = _("Item")
+class FindForm(forms.Form):
+ form_label = _("Find")
base_model = 'base_finds'
associated_models = {'material_type':models.MaterialType,}
label = forms.CharField(label=_(u"ID"),
@@ -106,37 +59,30 @@ class ItemForm(forms.Form):
choices=models.MaterialType.get_types())
volume = FloatField(label=_(u"Volume (l)"), required=False)
weight = FloatField(label=_(u"Weight (g)"), required=False)
- item_number = forms.IntegerField(label=_(u"Item number"), required=False)
+ find_number = forms.IntegerField(label=_(u"Find number"), required=False)
class DateForm(forms.Form):
form_label = _("Dating")
base_model = 'dating'
- associated_models = {'dating__dating_type':models.DatingType,
- 'dating__quality':models.DatingQuality,
- 'dating__period':models.Period}
+ associated_models = {'dating__dating_type':DatingType,
+ 'dating__quality':DatingQuality,
+ 'dating__period':Period}
dating__period = forms.ChoiceField(label=_("Period"),
- choices=models.Period.get_types())
+ choices=Period.get_types())
dating__start_date = forms.IntegerField(label=_(u"Start date"),
required=False)
dating__end_date = forms.IntegerField(label=_(u"End date"), required=False)
dating__quality = forms.ChoiceField(label=_("Quality"), required=False,
- choices=models.DatingQuality.get_types())
+ choices=DatingQuality.get_types())
dating__dating_type = forms.ChoiceField(label=_("Dating type"),
required=False, choices=[])
def __init__(self, *args, **kwargs):
super(DateForm, self).__init__(*args, **kwargs)
- self.fields['dating__dating_type'].choices = models.DatingType.get_types()
- self.fields['dating__dating_type'].help_text = models.DatingType.get_help()
+ self.fields['dating__dating_type'].choices = DatingType.get_types()
+ self.fields['dating__dating_type'].help_text = DatingType.get_help()
-item_creation_wizard = ItemWizard([
- ('selecrecord-item_creation', RecordFormSelection),
- ('item-item_creation', ItemForm),
- ('dating-item_creation', DateForm),
- ('final-item_creation', FinalForm)],
- url_name='item_creation',)
-
-class ItemSelect(forms.Form):
+class FindSelect(forms.Form):
base_finds__context_record__parcel__town = get_town_field()
base_finds__context_record__operation__year = forms.IntegerField(
label=_(u"Year"))
@@ -145,61 +91,42 @@ class ItemSelect(forms.Form):
dating__period = forms.ChoiceField(label=_(u"Period"), choices=[])
# TODO search by warehouse
material_type = forms.ChoiceField(label=_(u"Material type"), choices=[])
- base_finds__item__description = forms.CharField(label=_(u"Description"))
+ base_finds__find__description = forms.CharField(label=_(u"Description"))
base_finds__is_isolated = forms.NullBooleanField(label=_(u"Is isolated?"))
def __init__(self, *args, **kwargs):
- super(ItemSelect, self).__init__(*args, **kwargs)
- self.fields['dating__period'].choices = \
- models.Period.get_types()
- self.fields['dating__period'].help_text = \
- models.Period.get_help()
+ super(FindSelect, self).__init__(*args, **kwargs)
+ self.fields['dating__period'].choices = Period.get_types()
+ self.fields['dating__period'].help_text = Period.get_help()
self.fields['material_type'].choices = \
models.MaterialType.get_types()
self.fields['material_type'].help_text = \
models.MaterialType.get_help()
-class ItemFormSelection(forms.Form):
- form_label = _("Item search")
- associated_models = {'pk':models.Item}
- currents = {'pk':models.Item}
+class FindFormSelection(forms.Form):
+ form_label = _("Find search")
+ associated_models = {'pk':models.Find}
+ currents = {'pk':models.Find}
pk = forms.IntegerField(label="", required=False,
- widget=widgets.JQueryJqGrid(reverse_lazy('get-item'),
- ItemSelect(), models.Item, source_full=reverse_lazy('get-item-full')),
- validators=[models.valid_id(models.Item)])
-
-item_search_wizard = SearchWizard([
- ('general-item_search', ItemFormSelection)],
- url_name='item_search',)
-
-class ItemModificationWizard(ItemWizard):
- modification = True
-
-item_modification_wizard = ItemModificationWizard([
- ('selec-item_modification', ItemFormSelection),
- ('item-item_modification', ItemForm),
- ('dating-item_modification', DateForm),
- ('final-item_modification', FinalForm)],
- url_name='item_modification',)
-
-class TreatmentWizard(Wizard):
- model = models.Treatment
+ widget=widgets.JQueryJqGrid(reverse_lazy('get-find'),
+ FindSelect(), models.Find, source_full=reverse_lazy('get-find-full')),
+ validators=[valid_id(models.Find)])
class BaseTreatmentForm(forms.Form):
form_label = _(u"Base treatment")
associated_models = {'treatment_type':models.TreatmentType,
- 'person':models.Person,
- 'location':models.Warehouse}
+ 'person':Person,
+ 'location':Warehouse}
treatment_type = forms.ChoiceField(label=_(u"Treatment type"), choices=[])
person = forms.IntegerField(label=_(u"Person"),
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)])
location = forms.IntegerField(label=_(u"Location"),
widget=widgets.JQueryAutoComplete(
- reverse_lazy('autocomplete-warehouse'), associated_model=models.Warehouse,
+ reverse_lazy('autocomplete-warehouse'), associated_model=Warehouse,
new=True),
- validators=[models.valid_id(models.Warehouse)])
+ validators=[valid_id(Warehouse)])
description = forms.CharField(label=_(u"Description"),
widget=forms.Textarea, required=False)
start_date = forms.DateField(label=_(u"Start date"), required=False,
@@ -214,19 +141,19 @@ class BaseTreatmentForm(forms.Form):
self.fields['treatment_type'].help_text = models.TreatmentType.get_help(
exclude=['packaging'])
-class ItemMultipleFormSelection(forms.Form):
- form_label = _(u"Upstream items")
- associated_models = {'items':models.Item}
- associated_labels = {'items':_(u"Items")}
- items = forms.CharField(label="", required=False,
- widget=widgets.JQueryJqGrid(reverse_lazy('get-item'),
- ItemSelect(), models.Item, multiple=True, multiple_cols=[2, 3, 4]),
- validators=[models.valid_ids(models.Item)])
+class FindMultipleFormSelection(forms.Form):
+ form_label = _(u"Upstream finds")
+ associated_models = {'finds':models.Find}
+ associated_labels = {'finds':_(u"Finds")}
+ finds = forms.CharField(label="", required=False,
+ widget=widgets.JQueryJqGrid(reverse_lazy('get-find'),
+ FindSelect(), models.Find, multiple=True, multiple_cols=[2, 3, 4]),
+ validators=[valid_ids(models.Find)])
def clean(self):
- if not 'items' in self.cleaned_data or not self.cleaned_data['items']:
+ if not 'finds' in self.cleaned_data or not self.cleaned_data['finds']:
raise forms.ValidationError(_(u"You should at least select one "
- u"archaeological item."))
+ u"archaeological find."))
return self.cleaned_data
class ContainerForm(forms.Form):
@@ -235,26 +162,24 @@ class ContainerForm(forms.Form):
container_type = forms.ChoiceField(label=_(u"Container type"), choices=[])
location = forms.IntegerField(label=_(u"Warehouse"),
widget=widgets.JQueryAutoComplete(
- reverse_lazy('autocomplete-warehouse'), associated_model=models.Warehouse,
+ reverse_lazy('autocomplete-warehouse'), associated_model=Warehouse,
new=True),
- validators=[models.valid_id(models.Warehouse)])
+ validators=[valid_id(Warehouse)])
comment = forms.CharField(label=_(u"Comment"),
widget=forms.Textarea, required=False)
def __init__(self, *args, **kwargs):
super(ContainerForm, self).__init__(*args, **kwargs)
- self.fields['container_type'].choices = \
- models.ContainerType.get_types()
- self.fields['container_type'].help_text = \
- models.ContainerType.get_help()
+ self.fields['container_type'].choices = ContainerType.get_types()
+ self.fields['container_type'].help_text = ContainerType.get_help()
def save(self, user):
dct = self.cleaned_data
dct['history_modifier'] = user
- dct['container_type'] = models.ContainerType.objects.get(
+ dct['container_type'] = ContainerType.objects.get(
pk=dct['container_type'])
- dct['location'] = models.Warehouse.objects.get(pk=dct['location'])
- new_item = models.Container(**dct)
+ dct['location'] = Warehouse.objects.get(pk=dct['location'])
+ new_item = Container(**dct)
new_item.save()
return new_item
@@ -279,8 +204,8 @@ def check_treatment(form_name, type_key, type_list=[], not_type_list=[]):
return False
return func
-class ResultItemForm(forms.Form):
- form_label = _(u"Resulting item")
+class ResultFindForm(forms.Form):
+ form_label = _(u"Resulting find")
associated_models = {'material_type':models.MaterialType}
label = forms.CharField(label=_(u"ID"),
validators=[validators.MaxLengthValidator(60)])
@@ -290,204 +215,60 @@ class ResultItemForm(forms.Form):
choices=models.MaterialType.get_types())
volume = forms.IntegerField(label=_(u"Volume (l)"))
weight = forms.IntegerField(label=_(u"Weight (g)"))
- item_number = forms.IntegerField(label=_(u"Item number"))
+ find_number = forms.IntegerField(label=_(u"Find number"))
-ResultItemFormSet = formset_factory(ResultItemForm, can_delete=True,
+ResultFindFormSet = formset_factory(ResultFindForm, can_delete=True,
formset=FormSet)
-ResultItemFormSet.form_label = _(u"Resulting items")
-
-class UpstreamItemFormSelection(ItemFormSelection):
- form_label = _(u"Upstream item")
-
-treatment_creation_wizard = TreatmentWizard([
- ('basetreatment-treatment_creation', BaseTreatmentForm),
- ('selecitem-treatment_creation', UpstreamItemFormSelection),
- ('multiselecitems-treatment_creation', ItemMultipleFormSelection),
- ('container-treatment_creation', ContainerForm),
- ('resultitem-treatment_creation', ResultItemForm),
- ('resultitems-treatment_creation', ResultItemFormSet),
- ('final-treatment_creation', FinalForm)],
- condition_list={
-'selecitem-treatment_creation':
- check_treatment('basetreatment-treatment_creation', 'treatment_type',
- not_type_list=['physical_grouping', 'packaging']),
-'multiselecitems-treatment_creation':
- check_treatment('basetreatment-treatment_creation', 'treatment_type',
- ['physical_grouping', 'packaging']),
-'resultitems-treatment_creation':
- check_treatment('basetreatment-treatment_creation', 'treatment_type',
- ['split']),
-'resultitem-treatment_creation':
- check_treatment('basetreatment-treatment_creation', 'treatment_type',
- not_type_list=['split']),
-'container-treatment_creation':
- check_treatment('basetreatment-treatment_creation', 'treatment_type',
- ['packaging']),
- },
- url_name='treatment_creation',)
-
-#############
-# Packaging #
-#############
-
-class PackagingWizard(TreatmentWizard):
- def save_model(self, dct, m2m, whole_associated_models, request, storage,
- form_list, return_object):
- dct = self.get_extra_model(dct, request, storage, form_list)
- obj = self.get_current_saved_object(request, storage)
- dct['location'] = dct['container'].location
- items = dct.pop('items')
- treatment = models.Treatment(**dct)
- treatment.save()
- if not hasattr(items, '__iter__'):
- items = [items]
- for item in items:
- new = item.duplicate(request.user)
- item.downstream_treatment = treatment
- item.save()
- new.upstream_treatment = treatment
- new.container = dct['container']
- new.save()
- res = render_to_response('wizard_done.html', {},
- context_instance=RequestContext(request))
- return return_object and (obj, res) or res
-
-class ContainerSelect(forms.Form):
- location = get_warehouse_field()
- container_type = forms.ChoiceField(label=_(u"Container type"), choices=[])
- reference = forms.CharField(label=_(u"Reference"))
-
- def __init__(self, *args, **kwargs):
- super(ContainerSelect, self).__init__(*args, **kwargs)
- self.fields['container_type'].choices = \
- models.ContainerType.get_types()
- self.fields['container_type'].help_text = \
- models.ContainerType.get_help()
-
-ContainerFormSelection = get_form_selection(
- 'ContainerFormSelection', _(u"Container search"), 'container',
- models.Container, ContainerSelect, 'get-container',
- _(u"You should select a container."), new=True,
- new_message=_(u"Add a new container"))
-
-class BasePackagingForm(forms.Form):
- form_label = _(u"Packaging")
- associated_models = {'treatment_type':models.TreatmentType,
- 'person':models.Person,
- 'location':models.Warehouse}
- treatment_type = forms.IntegerField(label="", widget=forms.HiddenInput)
- person = forms.IntegerField(label=_(u"Packager"),
- widget=widgets.JQueryAutoComplete(reverse_lazy('autocomplete-person'),
- associated_model=models.Person, new=True),
- validators=[models.valid_id(models.Person)])
- start_date = forms.DateField(label=_(u"Date"), required=False,
- widget=widgets.JQueryDate)
-
- def __init__(self, *args, **kwargs):
- super(BasePackagingForm, self).__init__(*args, **kwargs)
- self.fields['treatment_type'].initial = \
- models.TreatmentType.objects.get(txt_idx='packaging').pk
-
-class ItemPackagingFormSelection(ItemMultipleFormSelection):
- form_label = _(u"Packaged items")
+ResultFindFormSet.form_label = _(u"Resulting finds")
-warehouse_packaging_wizard = PackagingWizard([
- ('seleccontainer-packaging', ContainerFormSelection),
- ('base-packaging', BasePackagingForm),
- ('multiselecitems-packaging', ItemPackagingFormSelection),
- ('final-packaging', FinalForm)],
- url_name='warehouse_packaging',)
+class UpstreamFindFormSelection(FindFormSelection):
+ form_label = _(u"Upstream find")
-"""
-warehouse_packaging_wizard = ItemSourceWizard([
- ('selec-warehouse_packaging', ItemsSelection),
- ('final-warehouse_packaging', FinalForm)],
- url_name='warehouse_packaging',)
-"""
#############################################
-# Source management for archaelogical items #
+# Source management for archaelogical finds #
#############################################
-class ItemSourceWizard(SourceWizard):
- model = models.ItemSource
+SourceFindFormSelection = get_form_selection(
+ 'SourceFindFormSelection', _(u"Archaelogical find search"), 'find',
+ models.Find, FindSelect, 'get-find',
+ _(u"You should select an archaelogical find."))
-SourceItemFormSelection = get_form_selection(
- 'SourceItemFormSelection', _(u"Archaelogical item search"), 'item',
- models.Item, ItemSelect, 'get-item',
- _(u"You should select an archaelogical item."))
-
-item_source_creation_wizard = ItemSourceWizard([
- ('selec-item_source_creation', SourceItemFormSelection),
- ('source-item_source_creation', SourceForm),
- ('authors-item_source_creation', AuthorFormset),
- ('final-item_source_creation', FinalForm)],
- url_name='item_source_creation',)
-
-class ItemSourceSelect(SourceSelect):
- item__base_finds__context_record__operation__year = forms.IntegerField(
+class FindSourceSelect(SourceSelect):
+ find__base_finds__context_record__operation__year = forms.IntegerField(
label=_(u"Year of the operation"))
- item__dating__period = forms.ChoiceField(
- label=_(u"Period of the archaelogical item"),
+ find__dating__period = forms.ChoiceField(
+ label=_(u"Period of the archaelogical find"),
choices=[])
- item__material_type = forms.ChoiceField(
- label=_("Material type of the archaelogical item"),
+ find__material_type = forms.ChoiceField(
+ label=_("Material type of the archaelogical find"),
choices=models.MaterialType.get_types())
- item__description = forms.CharField(
- label=_(u"Description of the archaelogical item"))
+ find__description = forms.CharField(
+ label=_(u"Description of the archaelogical find"))
def __init__(self, *args, **kwargs):
- super(ItemSourceSelect, self).__init__(*args, **kwargs)
- self.fields['item__dating__period'].choices = \
- models.Period.get_types()
- self.fields['item__dating__period'].help_text = \
- models.Period.get_help()
- self.fields['item__material_type'].choices = \
+ super(FindSourceSelect, self).__init__(*args, **kwargs)
+ self.fields['find__dating__period'].choices = Period.get_types()
+ self.fields['find__dating__period'].help_text = Period.get_help()
+ self.fields['find__material_type'].choices = \
models.MaterialType.get_types()
- self.fields['item__material_type'].help_text = \
+ self.fields['find__material_type'].help_text = \
models.MaterialType.get_help()
-ItemSourceFormSelection = get_form_selection(
- 'ItemSourceFormSelection', _(u"Documentation search"), 'pk',
- models.ItemSource, ItemSourceSelect, 'get-itemsource',
+FindSourceFormSelection = get_form_selection(
+ 'FindSourceFormSelection', _(u"Documentation search"), 'pk',
+ models.FindSource, FindSourceSelect, 'get-findsource',
_(u"You should select a document."))
-item_source_modification_wizard = ItemSourceWizard([
- ('selec-item_source_modification', ItemSourceFormSelection),
- ('source-item_source_modification', SourceForm),
- ('authors-item_source_modification', AuthorFormset),
- ('final-item_source_modification', FinalForm)],
- url_name='item_source_modification',)
-
-class ItemSourceDeletionWizard(DeletionWizard):
- model = models.ItemSource
- fields = ['item', 'title', 'source_type', 'authors',]
-
-item_source_deletion_wizard = ItemSourceDeletionWizard([
- ('selec-item_source_deletion', ItemSourceFormSelection),
- ('final-item_source_deletion', SourceDeletionForm)],
- url_name='item_source_deletion',)
-
-"""
####################################
# Source management for treatments #
####################################
-class TreatmentSourceWizard(SourceWizard):
- model = models.TreamentSource
-
SourceTreatementFormSelection = get_form_selection(
'SourceTreatmentFormSelection', _(u"Treatment search"), 'operation',
models.Treatment, TreatmentSelect, 'get-treatment',
_(u"You should select a treatment."))
-treatment_source_creation_wizard = TreatmentSourceWizard([
- ('selec-treatment_source_creation', SourceTreatmentFormSelection),
- ('source-treatment_source_creation', SourceForm),
- ('authors-treatment_source_creation', AuthorFormset),
- ('final-treatment_source_creation', FinalForm)],
- url_name='treatment_source_creation',)
-
class TreatmentSourceSelect(SourceSelect):
operation__towns = get_town_field(label=_(u"Operation's town"))
treatment__treatment_type = forms.ChoiceField(label=_(u"Operation type"),
@@ -497,11 +278,12 @@ class TreatmentSourceSelect(SourceSelect):
def __init__(self, *args, **kwargs):
super(OperationSourceSelect, self).__init__(*args, **kwargs)
self.fields['operation__operation_type'].choices = \
- models.OperationType.get_types()
+ OperationType.get_types()
self.fields['operation__operation_type'].help_text = \
- models.OperationType.get_help()
+ OperationType.get_help()
+"""
OperationSourceFormSelection = get_form_selection(
'OperationSourceFormSelection', _(u"Documentation search"), 'pk',
models.OperationSource, OperationSourceSelect, 'get-operationsource',