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.py40
1 files changed, 28 insertions, 12 deletions
diff --git a/archaeological_warehouse/forms.py b/archaeological_warehouse/forms.py
index 553a01ce5..94e31b759 100644
--- a/archaeological_warehouse/forms.py
+++ b/archaeological_warehouse/forms.py
@@ -20,6 +20,7 @@
from django import forms
from django.conf import settings
from django.forms.formsets import formset_factory
+from django.utils.safestring import mark_safe
from django.utils.translation import ugettext_lazy as _
from ishtar_common.models import Person, valid_id
@@ -27,7 +28,7 @@ from archaeological_finds.models import TreatmentType, FindBasket
import models
from ishtar_common import widgets
from ishtar_common.forms import name_validator, reverse_lazy, \
- get_form_selection, TableSelect, ManageOldType, FinalForm
+ get_form_selection, TableSelect, ManageOldType, FinalForm, FormSet
from archaeological_finds.forms import FindMultipleFormSelection, \
SelectFindBasketForm
@@ -57,8 +58,15 @@ class SelectedDivisionForm(ManageOldType, forms.Form):
initial=self.init_data.get('division')
)
+
+class DivisionFormSet(FormSet):
+ def clean(self):
+ """Checks that no divisions are duplicated."""
+ return self.check_duplicate(('division',),
+ _("There are identical divisions."))
+
SelectedDivisionFormset = formset_factory(
- SelectedDivisionForm, can_delete=True)
+ SelectedDivisionForm, can_delete=True, formset=DivisionFormSet)
SelectedDivisionFormset.form_label = _(u"Divisions")
@@ -92,7 +100,7 @@ class WarehouseForm(ManageOldType, forms.Form):
associated_models = {'warehouse_type': models.WarehouseType,
'person_in_charge': Person}
- name = forms.CharField(label=_(u"Name"), max_length=40,
+ name = forms.CharField(label=_(u"Name"), max_length=200,
validators=[name_validator])
warehouse_type = forms.ChoiceField(label=_(u"Warehouse type"),
choices=[])
@@ -100,7 +108,7 @@ class WarehouseForm(ManageOldType, forms.Form):
label=_(u"Person in charge"),
widget=widgets.JQueryAutoComplete(
reverse_lazy('autocomplete-person'),
- associated_model=Person),
+ associated_model=Person, new=True),
validators=[valid_id(Person)],
required=False)
comment = forms.CharField(label=_(u"Comment"), widget=forms.Textarea,
@@ -148,6 +156,7 @@ class WarehouseDeletionForm(FinalForm):
class ContainerForm(ManageOldType, forms.Form):
form_label = _(u"Container")
+ file_upload = True
associated_models = {'container_type': models.ContainerType,
'location': models.Warehouse,
'responsible': models.Warehouse}
@@ -165,6 +174,13 @@ class ContainerForm(ManageOldType, forms.Form):
reverse_lazy('autocomplete-warehouse'),
associated_model=models.Warehouse, new=True),
validators=[valid_id(models.Warehouse)])
+ image = forms.ImageField(
+ label=_(u"Image"), help_text=mark_safe(
+ _(u"<p>Heavy images are resized to: %(width)dx%(height)d "
+ u"(ratio is preserved).</p>") % {
+ 'width': settings.IMAGE_MAX_SIZE[0],
+ 'height': settings.IMAGE_MAX_SIZE[1]}),
+ max_length=255, required=False, widget=widgets.ImageFileInput())
comment = forms.CharField(label=_(u"Comment"),
widget=forms.Textarea, required=False)
@@ -192,7 +208,7 @@ class ContainerForm(ManageOldType, forms.Form):
class ContainerModifyForm(ContainerForm):
pk = forms.IntegerField(required=False, widget=forms.HiddenInput)
- index = forms.IntegerField(_(u"Index"))
+ index = forms.IntegerField(label=_(u"ID"))
def __init__(self, *args, **kwargs):
super(ContainerModifyForm, self).__init__(*args, **kwargs)
@@ -264,20 +280,20 @@ class LocalisationForm(forms.Form):
form_label = _(u"Localisation")
def __init__(self, *args, **kwargs):
- container, warehouse = None, None
+ self.container, self.warehouse = None, None
if 'warehouse' in kwargs:
- warehouse = kwargs.pop('warehouse')
+ self.warehouse = kwargs.pop('warehouse')
if 'container' in kwargs:
- container = kwargs.pop('container')
+ self.container = kwargs.pop('container')
super(LocalisationForm, self).__init__(*args, **kwargs)
- if not warehouse:
+ if not self.warehouse:
return
- for divlink in warehouse.warehousedivisionlink_set.order_by(
+ for divlink in self.warehouse.warehousedivisionlink_set.order_by(
'order').all():
initial = u"-"
- if container:
+ if self.container:
q = models.ContainerLocalisation.objects.filter(
- division=divlink, container=container)
+ division=divlink, container=self.container)
if q.count():
initial = q.all()[0].reference
self.fields['division_{}'.format(divlink.pk)] = forms.CharField(