summaryrefslogtreecommitdiff
path: root/archaeological_warehouse/forms.py
diff options
context:
space:
mode:
Diffstat (limited to 'archaeological_warehouse/forms.py')
-rw-r--r--archaeological_warehouse/forms.py170
1 files changed, 100 insertions, 70 deletions
diff --git a/archaeological_warehouse/forms.py b/archaeological_warehouse/forms.py
index a7390a890..83289819e 100644
--- a/archaeological_warehouse/forms.py
+++ b/archaeological_warehouse/forms.py
@@ -44,12 +44,13 @@ from ishtar_common.forms import name_validator, reverse_lazy, \
get_form_selection, ManageOldType, FinalForm, FormSet, \
CustomForm, FieldType, DocumentItemSelect, FormHeader, TableSelect, \
CustomFormSearch, MultiSearchForm, LockForm
-from ishtar_common.forms_common import get_town_field
+from ishtar_common.forms_common import get_town_field, MergeForm, ManualMerge,\
+ MergeIntoForm
from archaeological_finds.forms import FindMultipleFormSelection, \
SelectFindBasketForm
-def get_warehouse_field(label=_(u"Warehouse"), required=True):
+def get_warehouse_field(label=_("Warehouse"), required=True):
# !FIXME hard_link, reverse_lazy doen't seem to work with formsets
url = "/" + settings.URL_PATH + 'autocomplete-warehouse'
widget = widgets.JQueryAutoComplete(url, associated_model=models.Warehouse)
@@ -58,14 +59,14 @@ def get_warehouse_field(label=_(u"Warehouse"), required=True):
class SelectedDivisionForm(ManageOldType, forms.Form):
- form_label = _(u"Division")
+ form_label = _("Division")
base_model = 'associated_division'
associated_models = {'division': models.WarehouseDivision,
'associated_division': models.WarehouseDivisionLink}
division = forms.ChoiceField(
- label=_(u"Division"), choices=(),
+ label=_("Division"), choices=(),
validators=[valid_id(models.WarehouseDivision)])
- order = forms.IntegerField(label=_(u"Order"), min_value=0, required=False)
+ order = forms.IntegerField(label=_("Order"), min_value=0, required=False)
def __init__(self, *args, **kwargs):
super(SelectedDivisionForm, self).__init__(*args, **kwargs)
@@ -79,24 +80,24 @@ class DivisionFormSet(FormSet):
def clean(self):
"""Checks that no divisions are duplicated."""
self.check_duplicate(('division',), _("There are identical divisions."))
- self.check_duplicate(('order',), _(u"Order fields must be different."),
+ self.check_duplicate(('order',), _("Order fields must be different."),
check_null=True)
SelectedDivisionFormset = formset_factory(
SelectedDivisionForm, can_delete=True, formset=DivisionFormSet)
-SelectedDivisionFormset.form_label = _(u"Divisions")
-SelectedDivisionFormset.form_admin_name = _(u"Warehouse - 020 - Divisions")
+SelectedDivisionFormset.form_label = _("Divisions")
+SelectedDivisionFormset.form_admin_name = _("Warehouse - 020 - Divisions")
SelectedDivisionFormset.form_slug = "warehouse-020-divisions"
class WarehouseSelect(CustomForm, TableSelect):
_model = models.Warehouse
- form_admin_name = _(u"Warehouse - 001 - Search")
+ form_admin_name = _("Warehouse - 001 - Search")
form_slug = "warehouse-001-search"
search_vector = forms.CharField(
- label=_(u"Full text search"), widget=widgets.SearchWidget(
+ label=_("Full text search"), widget=widgets.SearchWidget(
'archaeological-warehouse', 'warehouse'
))
name = forms.CharField(label=_("Name"))
@@ -139,8 +140,8 @@ class WarehouseFormMultiSelection(LockForm, MultiSearchForm):
class WarehouseForm(CustomForm, ManageOldType, forms.Form):
HEADERS = {}
- form_label = _(u"Warehouse")
- form_admin_name = _(u"Warehouse - 010 - General")
+ form_label = _("Warehouse")
+ form_admin_name = _("Warehouse - 010 - General")
form_slug = "warehouse-010-general"
extra_form_modals = ["organization", "person"]
associated_models = {
@@ -151,9 +152,9 @@ class WarehouseForm(CustomForm, ManageOldType, forms.Form):
'spatial_reference_system': SpatialReferenceSystem
}
- name = forms.CharField(label=_(u"Name"), max_length=200,
+ name = forms.CharField(label=_("Name"), max_length=200,
validators=[name_validator])
- warehouse_type = forms.ChoiceField(label=_(u"Warehouse type"),
+ warehouse_type = forms.ChoiceField(label=_("Warehouse type"),
choices=[])
organization = forms.IntegerField(
label=_("Organization"),
@@ -173,28 +174,28 @@ class WarehouseForm(CustomForm, ManageOldType, forms.Form):
label=_("Create a new organization from this warehouse"),
required=False
)
- comment = forms.CharField(label=_(u"Comment"), widget=forms.Textarea,
+ comment = forms.CharField(label=_("Comment"), widget=forms.Textarea,
required=False)
HEADERS['address'] = FormHeader(
- _(u"Address"), collapse=True,
+ _("Address"), collapse=True,
help_message=_(
"Only fill the following fields if no organization is provided or "
"if the address of the warehouse is different from the one of the "
"organization. If a new organization is created from this "
"warehouse, the following fields are used for the organization."))
- address = forms.CharField(label=_(u"Address"), widget=forms.Textarea,
+ address = forms.CharField(label=_("Address"), widget=forms.Textarea,
required=False)
- address_complement = forms.CharField(label=_(u"Address complement"),
+ address_complement = forms.CharField(label=_("Address complement"),
widget=forms.Textarea, required=False)
- postal_code = forms.CharField(label=_(u"Postal code"), max_length=10,
+ postal_code = forms.CharField(label=_("Postal code"), max_length=10,
required=False)
- town = forms.CharField(label=_(u"Town (freeform)"), max_length=150,
+ town = forms.CharField(label=_("Town (freeform)"), max_length=150,
required=False)
precise_town = get_town_field(required=False)
- country = forms.CharField(label=_(u"Country"), max_length=30,
+ country = forms.CharField(label=_("Country"), max_length=30,
required=False)
- phone = forms.CharField(label=_(u"Phone"), max_length=18, required=False)
- mobile_phone = forms.CharField(label=_(u"Mobile phone"), max_length=18,
+ phone = forms.CharField(label=_("Phone"), max_length=18, required=False)
+ mobile_phone = forms.CharField(label=_("Mobile phone"), max_length=18,
required=False)
HEADERS['x'] = FormHeader(_("Coordinates"))
x = forms.FloatField(label=_("X"), required=False)
@@ -250,13 +251,13 @@ class WarehouseModifyForm(WarehouseForm):
class WarehouseDeletionForm(FinalForm):
- confirm_msg = _(u"Would you like to delete this warehouse?")
- confirm_end_msg = _(u"Would you like to delete this warehouse?")
+ confirm_msg = _("Would you like to delete this warehouse?")
+ confirm_end_msg = _("Would you like to delete this warehouse?")
class ContainerForm(CustomForm, ManageOldType, forms.Form):
- form_label = _(u"Container")
- form_admin_name = _(u"Container - 010 - General")
+ form_label = _("Container")
+ form_admin_name = _("Container - 010 - General")
form_slug = "container-010-general"
file_upload = True
extra_form_modals = ["warehouse", "organization", "person", "container"]
@@ -264,10 +265,10 @@ class ContainerForm(CustomForm, ManageOldType, forms.Form):
'location': models.Warehouse,
'parent': models.Container,
'responsible': models.Warehouse}
- reference = forms.CharField(label=_(u"Ref."), max_length=200)
- old_reference = forms.CharField(label=_(u"Old reference"), required=False,
+ reference = forms.CharField(label=_("Ref."), max_length=200)
+ old_reference = forms.CharField(label=_("Old reference"), required=False,
max_length=200)
- container_type = forms.ChoiceField(label=_(u"Container type"), choices=[])
+ container_type = forms.ChoiceField(label=_("Container type"), choices=[])
parent = forms.IntegerField(
label=_("Parent container"),
widget=widgets.JQueryAutoComplete(
@@ -277,18 +278,18 @@ class ContainerForm(CustomForm, ManageOldType, forms.Form):
required=False
)
responsible = forms.IntegerField(
- label=_(u"Responsible warehouse"),
+ label=_("Responsible warehouse"),
widget=widgets.JQueryAutoComplete(
reverse_lazy('autocomplete-warehouse'),
associated_model=models.Warehouse, new=True),
validators=[valid_id(models.Warehouse)])
location = forms.IntegerField(
- label=_(u"Current location (warehouse)"),
+ label=_("Current location (warehouse)"),
widget=widgets.JQueryAutoComplete(
reverse_lazy('autocomplete-warehouse'),
associated_model=models.Warehouse, new=True),
validators=[valid_id(models.Warehouse)])
- comment = forms.CharField(label=_(u"Comment"),
+ comment = forms.CharField(label=_("Comment"),
widget=forms.Textarea, required=False)
TYPES = [
FieldType('container_type', models.ContainerType),
@@ -306,12 +307,15 @@ class ContainerForm(CustomForm, ManageOldType, forms.Form):
cleaned_data = self.cleaned_data
warehouse = cleaned_data.get("location")
q = models.Container.objects.filter(
- reference=cleaned_data.get("reference"), location__pk=warehouse)
+ reference=cleaned_data.get("reference"), location__pk=warehouse,
+ container_type_id=cleaned_data.get("container_type"),
+ parent_id=cleaned_data.get("parent")
+ )
if 'pk' in cleaned_data and cleaned_data['pk']:
q = q.exclude(pk=int(cleaned_data['pk']))
if q.count():
- raise forms.ValidationError(_(u"This reference already exists for "
- u"this warehouse."))
+ raise forms.ValidationError(_("This reference already exists for "
+ "this warehouse."))
return cleaned_data
def save(self, user):
@@ -328,7 +332,7 @@ class ContainerForm(CustomForm, ManageOldType, forms.Form):
class ContainerModifyForm(ContainerForm):
pk = forms.IntegerField(required=False, widget=forms.HiddenInput)
- index = forms.IntegerField(label=_(u"ID"), required=False)
+ index = forms.IntegerField(label=_("ID"), required=False)
def __init__(self, *args, **kwargs):
super(ContainerModifyForm, self).__init__(*args, **kwargs)
@@ -358,25 +362,25 @@ class ContainerModifyForm(ContainerForm):
if 'pk' in cleaned_data and cleaned_data['pk']:
q = q.exclude(pk=int(cleaned_data['pk']))
if q.count():
- raise forms.ValidationError(_(u"This ID already exists for "
- u"this warehouse."))
+ raise forms.ValidationError(_("This ID already exists for "
+ "this warehouse."))
return cleaned_data
class ContainerSelect(DocumentItemSelect):
_model = models.Container
- form_admin_name = _(u"Container - 001 - Search")
+ form_admin_name = _("Container - 001 - Search")
form_slug = "container-001-search"
search_vector = forms.CharField(
- label=_(u"Full text search"), widget=widgets.SearchWidget(
+ label=_("Full text search"), widget=widgets.SearchWidget(
'archaeological-warehouse', 'container'
))
location_name = get_warehouse_field(label=_("Warehouse"))
container_type = forms.ChoiceField(label=_("Container type"), choices=[])
reference = forms.CharField(label=_("Ref."))
old_reference = forms.CharField(label=_("Old reference"))
- comment = forms.CharField(label=_(u"Comment"))
+ comment = forms.CharField(label=_("Comment"))
contain_containers = forms.NullBooleanField(label=_("Contain containers"))
empty = forms.NullBooleanField(label=_("Currently empty"))
is_stationary = forms.NullBooleanField(label=_("Is stationary"))
@@ -388,7 +392,7 @@ class ContainerSelect(DocumentItemSelect):
associated_model=ArchaeologicalSite),
validators=[valid_id(ArchaeologicalSite)])
archaeological_sites_name = forms.CharField(
- label=_(u"Archaeological site name (attached to the operation)")
+ label=_("Archaeological site name (attached to the operation)")
)
archaeological_sites_context_record = forms.IntegerField(
label=_("Archaeological site (attached to the context record)"),
@@ -397,7 +401,7 @@ class ContainerSelect(DocumentItemSelect):
associated_model=ArchaeologicalSite),
validators=[valid_id(ArchaeologicalSite)])
archaeological_sites_context_record_name = forms.CharField(
- label=_(u"Archaeological site name (attached to the context record)")
+ label=_("Archaeological site name (attached to the context record)")
)
code_patriarche = forms.IntegerField(label=_("Operation - Code PATRIARCHE"),
widget=OAWidget)
@@ -415,33 +419,33 @@ class ContainerSelect(DocumentItemSelect):
validators=[valid_id(ContextRecord)])
find_label = forms.CharField(label=_("Find - Label"))
find_denomination = forms.CharField(label=_("Find - Denomination"))
- description = forms.CharField(label=_(u"Find - Description"))
+ description = forms.CharField(label=_("Find - Description"))
material_types = forms.IntegerField(
- label=_(u"Material type"),
+ label=_("Material type"),
widget=widgets.JQueryAutoComplete(
reverse_lazy('autocomplete-materialtype'),
associated_model=MaterialType),
)
object_types = forms.IntegerField(
- label=_(u"Object type"),
+ label=_("Object type"),
widget=widgets.JQueryAutoComplete(
reverse_lazy('autocomplete-objecttype'),
associated_model=ObjectType),
)
- integrities = forms.ChoiceField(label=_(u"Integrity / interest"),
+ integrities = forms.ChoiceField(label=_("Integrity / interest"),
choices=[])
- remarkabilities = forms.ChoiceField(label=_(u"Remarkability"),
+ remarkabilities = forms.ChoiceField(label=_("Remarkability"),
choices=[])
- conservatory_state = forms.ChoiceField(label=_(u"Conservatory state"),
+ conservatory_state = forms.ChoiceField(label=_("Conservatory state"),
choices=[])
alterations = forms.ChoiceField(
- label=_(u"Alteration"), choices=[])
+ label=_("Alteration"), choices=[])
alteration_causes = forms.ChoiceField(
- label=_(u"Alteration cause"), choices=[])
+ label=_("Alteration cause"), choices=[])
preservation_to_considers = forms.ChoiceField(
- choices=[], label=_(u"Preservation type"))
+ choices=[], label=_("Preservation type"))
treatment_emergency = forms.ChoiceField(
- choices=[], label=_(u"Treatment emergency")
+ choices=[], label=_("Treatment emergency")
)
TYPES = [
@@ -463,56 +467,82 @@ class ContainerSelect(DocumentItemSelect):
ContainerFormSelection = get_form_selection(
- 'ContainerFormSelection', _(u"Container search"), 'container',
+ 'ContainerFormSelection', _("Container search"), 'container',
models.Container, ContainerSelect, 'get-container',
- _(u"You should select a container."), new=True,
- new_message=_(u"Add a new container"),
+ _("You should select a container."), new=True,
+ new_message=_("Add a new container"),
base_form_select=(LockForm, CustomFormSearch)
)
MainContainerFormSelection = get_form_selection(
- 'ContainerFormSelection', _(u"Container search"), 'pk',
+ 'ContainerFormSelection', _("Container search"), 'pk',
models.Container, ContainerSelect, 'get-container',
- _(u"You should select a container."), gallery=True, map=True,
+ _("You should select a container."), gallery=True, map=True,
base_form_select=CustomFormSearch
)
MainContainerFormMultiSelection = get_form_selection(
- 'ContainerFormSelection', _(u"Container search"), 'pks',
+ 'ContainerFormSelection', _("Container search"), 'pks',
models.Container, ContainerSelect, 'get-container',
- _(u"You should select a container."), gallery=True, map=True,
+ _("You should select a container."), gallery=True, map=True,
alt_pk_field="pk",
multi=True, base_form_select=(LockForm, MultiSearchForm)
)
+class MergeContainerForm(MergeForm):
+ class Meta:
+ model = models.Container
+ fields = []
+
+ FROM_KEY = 'from_container'
+ TO_KEY = 'to_container'
+
+
+class ContainerMergeFormSelection(ManualMerge, forms.Form):
+ SEARCH_AND_SELECT = True
+ form_label = _("Container to merge")
+ associated_models = {'to_merge': models.Container}
+ currents = {'to_merge': models.Container}
+ to_merge = forms.CharField(
+ label="", required=False,
+ widget=widgets.DataTable(
+ reverse_lazy('get-container'), ContainerSelect,
+ models.Container,
+ multiple_select=True,),)
+
+
+class ContainerMergeIntoForm(MergeIntoForm):
+ associated_model = models.Container
+
+
class BasePackagingForm(SelectFindBasketForm):
- form_label = _(u"Packaging")
+ form_label = _("Packaging")
associated_models = {'treatment_type': TreatmentType,
'person': Person,
'location': models.Warehouse,
'basket': FindBasket}
person = forms.IntegerField(
- label=_(u"Packager"),
+ label=_("Packager"),
widget=widgets.JQueryAutoComplete(
reverse_lazy('autocomplete-person'),
associated_model=Person, new=True),
validators=[valid_id(Person)])
start_date = forms.DateField(
- label=_(u"Date"), required=False, widget=DatePicker,
+ label=_("Date"), required=False, widget=DatePicker,
initial=datetime.date.today
)
class FindPackagingFormSelection(FindMultipleFormSelection):
- form_label = _(u"Packaged finds")
+ form_label = _("Packaged finds")
class LocalisationForm(CustomForm, forms.Form):
- form_admin_name = _(u"Container - 020 - Localisation")
+ form_admin_name = _("Container - 020 - Localisation")
form_slug = "container-020-localisation"
- form_label = _(u"Localisation")
+ form_label = _("Localisation")
def __init__(self, *args, **kwargs):
self.container, self.warehouse = None, None
@@ -524,7 +554,7 @@ class LocalisationForm(CustomForm, forms.Form):
if not self.warehouse:
return
for divlink in self.warehouse.divisions.order_by('order').all():
- initial = u"-"
+ initial = "-"
if self.container:
q = models.ContainerLocalisation.objects.filter(
division__division=divlink.division,
@@ -537,5 +567,5 @@ class LocalisationForm(CustomForm, forms.Form):
class ContainerDeletionForm(FinalForm):
- confirm_msg = _(u"Would you like to delete this container?")
- confirm_end_msg = _(u"Would you like to delete this container?")
+ confirm_msg = _("Would you like to delete this container?")
+ confirm_end_msg = _("Would you like to delete this container?")