summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ishtar/__init__.py2
-rw-r--r--ishtar/furnitures/forms_common.py42
-rw-r--r--ishtar/furnitures/forms_context_records.py19
-rw-r--r--ishtar/furnitures/forms_files.py48
-rw-r--r--ishtar/furnitures/forms_items.py15
-rw-r--r--ishtar/furnitures/forms_operations.py53
-rw-r--r--ishtar/furnitures/models.py67
-rw-r--r--ishtar/furnitures/widgets.py4
-rw-r--r--ishtar/locale/fr/LC_MESSAGES/django.po810
-rw-r--r--ishtar/templates/default_wizard.html20
-rw-r--r--ishtar/templates/grid_form.html10
-rw-r--r--static/js/ishtar.js6
-rw-r--r--static/media/style.css28
13 files changed, 657 insertions, 467 deletions
diff --git a/ishtar/__init__.py b/ishtar/__init__.py
index d73e2ee0b..c6c05bd5c 100644
--- a/ishtar/__init__.py
+++ b/ishtar/__init__.py
@@ -5,6 +5,8 @@ _(u"email address")
_(u"warehouse")
_(u"New warehouse")
_(u"warehouse")
+_(u"New organization")
+_(u"New person")
if settings.XHTML2ODT_PATH:
import sys
sys.path.append(settings.XHTML2ODT_PATH)
diff --git a/ishtar/furnitures/forms_common.py b/ishtar/furnitures/forms_common.py
index c62160df6..2082cd2b7 100644
--- a/ishtar/furnitures/forms_common.py
+++ b/ishtar/furnitures/forms_common.py
@@ -28,6 +28,7 @@ from django.shortcuts import render_to_response
from django.core import validators
from django.core.mail import send_mail
from django.core.exceptions import ObjectDoesNotExist
+from django.utils.safestring import mark_safe
from django.forms.formsets import formset_factory, DELETION_FIELD_NAME
from django.utils.translation import ugettext_lazy as _
from django.contrib.auth.models import User
@@ -40,11 +41,24 @@ import widgets
from forms import Wizard, FinalForm, FormSet, reverse_lazy, name_validator,\
clean_duplicated
+def get_town_field(required=True):
+ help_text = _(u"<p>Type name, department code and/or postal code of the "
+ u"town you would like to select. The search is insensitive to case.</p>\n"
+ u"<p>Only the first twenty results are displayed but specifying the "
+ u"department code is generally sufficient to get the appropriate result.</p>"
+ u"\n<p class='example'>For instance type \"saint denis 93\" for getting "
+ u"the french town Saint-Denis in the Seine-Saint-Denis department.</p>")
+ return forms.IntegerField(
+ widget=widgets.JQueryAutoComplete("/" + settings.URL_PATH + \
+ 'autocomplete-town', associated_model=models.Town),
+ validators=[models.valid_id(models.Town)], label=_(u"Town"),
+ help_text=mark_safe(help_text), required=required)
+
class WarehouseForm(forms.Form):
name = forms.CharField(label=_(u"Name"), max_length=40,
validators=[name_validator])
warehouse_type = forms.ChoiceField(label=_(u"Warehouse type"),
- choices=models.WarehouseType.get_types())
+ choices=[])
person_in_charge = forms.IntegerField(label=_(u"Person in charge"),
widget=widgets.JQueryAutoComplete(
reverse_lazy('autocomplete-person'), associated_model=models.Person),
@@ -65,6 +79,13 @@ class WarehouseForm(forms.Form):
mobile_phone = forms.CharField(label=_(u"Town"), max_length=18,
required=False)
+ def __init__(self, *args, **kwargs):
+ super(WarehouseForm, self).__init__(*args, **kwargs)
+ self.fields['warehouse_type'].choices = \
+ models.WarehouseType.get_types()
+ self.fields['warehouse_type'].help_text = \
+ models.WarehouseType.get_help()
+
def save(self, user):
dct = self.cleaned_data
dct['history_modifier'] = user
@@ -81,7 +102,7 @@ class OrganizationForm(forms.Form):
name = forms.CharField(label=_(u"Name"), max_length=40,
validators=[name_validator])
organization_type = forms.ChoiceField(label=_(u"Organization type"),
- choices=models.OrganizationType.get_types())
+ choices=[])
address = forms.CharField(label=_(u"Address"), widget=forms.Textarea,
required=False)
address_complement = forms.CharField(label=_(u"Address complement"),
@@ -95,6 +116,13 @@ class OrganizationForm(forms.Form):
mobile_phone = forms.CharField(label=_(u"Town"), max_length=18,
required=False)
+ def __init__(self, *args, **kwargs):
+ super(OrganizationForm, self).__init__(*args, **kwargs)
+ self.fields['organization_type'].choices = \
+ models.OrganizationType.get_types()
+ self.fields['organization_type'].help_text = \
+ models.OrganizationType.get_help()
+
def save(self, user):
dct = self.cleaned_data
dct['history_modifier'] = user
@@ -128,7 +156,7 @@ class PersonForm(forms.Form):
email = forms.CharField(label=_(u"Email"), max_length=40, required=False,
validators=[validators.validate_email])
person_type = forms.ChoiceField(label=_("Person type"),
- choices=models.PersonType.get_types())
+ choices=[])
attached_to = forms.IntegerField(label=_("Current organization"),
widget=widgets.JQueryAutoComplete(reverse_lazy('autocomplete-organization'),
associated_model=models.Organization, new=True),
@@ -141,6 +169,7 @@ class PersonForm(forms.Form):
def __init__(self, *args, **kwargs):
super(PersonForm, self).__init__(*args, **kwargs)
self.fields['person_type'].choices = models.PersonType.get_types()
+ self.fields['person_type'].help_text = models.PersonType.get_help()
def save(self, user):
dct = self.cleaned_data
@@ -255,7 +284,7 @@ class AccountForm(forms.Form):
form_label = _("Account")
associated_models = {'pk':models.Person}
currents = {'pk':models.Person}
- pk = forms.IntegerField(widget=forms.HiddenInput, required=False)
+ pk = forms.IntegerField(label=u"", widget=forms.HiddenInput, required=False)
username = forms.CharField(label=_(u"Account"), max_length=30)
email = forms.CharField(label=_(u"Email"), max_length=75,
validators=[validators.validate_email])
@@ -310,10 +339,7 @@ class TownForm(forms.Form):
form_label = _("Towns")
associated_models = {'town':models.Town}
# !FIXME hard_link, reverse_lazy doen't seem to work with formsets
- town = forms.IntegerField(label=_(u"Town"), required=False,
- widget=widgets.JQueryAutoComplete("/" + settings.URL_PATH + \
- 'autocomplete-town', associated_model=models.Town),
- validators=[models.valid_id(models.Town)])
+ town = get_town_field(required=False)
class TownFormSet(FormSet):
def clean(self):
diff --git a/ishtar/furnitures/forms_context_records.py b/ishtar/furnitures/forms_context_records.py
index d28bd998c..3af7d3f71 100644
--- a/ishtar/furnitures/forms_context_records.py
+++ b/ishtar/furnitures/forms_context_records.py
@@ -35,6 +35,7 @@ import models
import widgets
from forms import Wizard, FinalForm, FormSet, SearchWizard, DeletionWizard, \
formset_factory, get_now, reverse_lazy
+from forms_common import get_town_field
from forms_operations import OperationFormSelection
class RecordWizard(Wizard):
@@ -81,10 +82,7 @@ class RecordModifWizard(RecordWizard):
model = models.ContextRecord
class RecordSelect(forms.Form):
- parcel__town = forms.IntegerField(label=_(u"Town"),
- widget=widgets.JQueryAutoComplete("/" + settings.URL_PATH + \
- 'autocomplete-town', associated_model=models.Town),
- validators=[models.valid_id(models.Town)])
+ parcel__town = get_town_field()
parcel__operation__year = forms.IntegerField(label=_("Year"))
datings__period = forms.ChoiceField(label=_("Period"),
choices=models.Period.get_types())
@@ -164,7 +162,13 @@ class DatingForm(forms.Form):
quality = forms.ChoiceField(label=_("Quality"), required=False,
choices=models.DatingQuality.get_types())
dating_type = forms.ChoiceField(label=_("Dating type"), required=False,
- choices=models.DatingType.get_types())
+ choices=[])
+
+ def __init__(self, *args, **kwargs):
+ super(DatingForm, self).__init__(*args, **kwargs)
+ self.fields['dating_type'].choices = models.DatingType.get_types()
+ self.fields['dating_type'].help_text = models.DatingType.get_help()
+
DatingFormSet = formset_factory(DatingForm, can_delete=True,
formset=FormSet)
@@ -180,7 +184,7 @@ class RecordFormInterpretation(forms.Form):
widget=forms.Textarea, required=False)
interpretation = forms.CharField(label=_(u"Interpretation"),
widget=forms.Textarea, required=False)
- activity = forms.ChoiceField(label=_("Activity"), required=False,
+ activity = forms.ChoiceField(label=_(u"Activity"), required=False,
choices=[])
identification = forms.ChoiceField(label=_("Identification"),
required=False, choices=[])
@@ -194,8 +198,11 @@ class RecordFormInterpretation(forms.Form):
def __init__(self, *args, **kwargs):
super(RecordFormInterpretation, self).__init__(*args, **kwargs)
self.fields['activity'].choices = models.ActivityType.get_types()
+ self.fields['activity'].help_text = models.ActivityType.get_help()
self.fields['identification'].choices = \
models.IdentificationType.get_types()
+ self.fields['identification'].help_text = \
+ models.IdentificationType.get_help()
record_search_wizard = SearchWizard([
('general-record_search', RecordFormSelection)],
diff --git a/ishtar/furnitures/forms_files.py b/ishtar/furnitures/forms_files.py
index 632f1d9f3..da77eff85 100644
--- a/ishtar/furnitures/forms_files.py
+++ b/ishtar/furnitures/forms_files.py
@@ -36,7 +36,7 @@ import models
import widgets
from forms import Wizard, FinalForm, FormSet, ClosingWizard, SearchWizard, \
formset_factory, get_now, reverse_lazy
-from forms_common import TownFormSet, ParcelFormSet
+from forms_common import TownFormSet, ParcelFormSet, get_town_field
from forms_operations import OperationAdministrativeActWizard, \
AdministrativeActOpeForm, AdministrativeActOpeFormSelection, \
AdministrativeActDeletionWizard, FinalAdministrativeActDeleteForm, is_preventive
@@ -125,16 +125,17 @@ class FileWizard(Wizard):
return res
class FileSelect(forms.Form):
- towns = forms.IntegerField(label=_(u"Town"),
- widget=widgets.JQueryAutoComplete("/" + settings.URL_PATH + \
- 'autocomplete-town', associated_model=models.Town),
- validators=[models.valid_id(models.Town)])
+ towns = get_town_field()
file_type = forms.ChoiceField(label=_("File type"),
choices=models.FileType.get_types())
- saisine_type = forms.ChoiceField(label=_("Saisine type"),
- choices=models.SaisineType.get_types())
+ saisine_type = forms.ChoiceField(label=_("Saisine type"), choices=[])
year = forms.IntegerField(label=_("Year"))
+ def __init__(self, *args, **kwargs):
+ super(FileSelect, self).__init__(*args, **kwargs)
+ self.fields['saisine_type'].choices = models.SaisineType.get_types()
+ self.fields['saisine_type'].help_text = models.SaisineType.get_help()
+
class FileFormSelection(forms.Form):
form_label = _("Archaeological file search")
associated_models = {'pk':models.File}
@@ -229,10 +230,14 @@ class FileFormPreventive(forms.Form):
required=False, validators=[validators.MinValueValidator(0),
validators.MaxValueValidator(999999999)])
if settings.COUNTRY == 'fr':
- saisine_type = forms.ChoiceField(label=_("Saisine type"),
- choices=models.SaisineType.get_types())
+ saisine_type = forms.ChoiceField(label=_(u"Saisine type"),
+ choices=[])
reception_date = forms.DateField(label=_(u"Reception date"),
initial=get_now, widget=widgets.JQueryDate)
+ def __init__(self, *args, **kwargs):
+ super(FileFormPreventive, self).__init__(*args, **kwargs)
+ self.fields['saisine_type'].choices = models.SaisineType.get_types()
+ self.fields['saisine_type'].help_text = models.SaisineType.get_help()
file_search_wizard = SearchWizard([('general-file_search', FileFormSelection)],
url_name='file_search',)
@@ -320,12 +325,15 @@ class FileEditAdministrativeActWizard(FileAdministrativeActWizard):
return self.get_current_object(request, storage).associated_file
class AdministrativeActFileSelect(forms.Form):
- associated_file__towns = forms.IntegerField(label=_(u"Town"),
- widget=widgets.JQueryAutoComplete("/" + settings.URL_PATH + \
- 'autocomplete-town', associated_model=models.Town),
- validators=[models.valid_id(models.Town)])
- act_type = forms.ChoiceField(label=_("Act type"),
- choices=models.ActType.get_types(dct={'intented_to':'F'}))
+ associated_file__towns = get_town_field()
+ act_type = forms.ChoiceField(label=_("Act type"), choices=[])
+
+ def __init__(self, *args, **kwargs):
+ super(AdministrativeActFileSelect, self).__init__(*args, **kwargs)
+ self.fields['act_type'].choices = models.ActType.get_types(
+ dct={'intented_to':'F'})
+ self.fields['act_type'].help_text = models.ActType.get_help(
+ dct={'intented_to':'F'})
class AdministrativeActFileFormSelection(AdministrativeActOpeFormSelection):
pk = forms.IntegerField(label="", required=False,
@@ -335,8 +343,14 @@ class AdministrativeActFileFormSelection(AdministrativeActOpeFormSelection):
validators=[models.valid_id(models.AdministrativeAct)])
class AdministrativeActFileForm(AdministrativeActOpeForm):
- act_type = forms.ChoiceField(label=_("Act type"),
- choices=models.ActType.get_types(dct={'intented_to':'F'}))
+ act_type = forms.ChoiceField(label=_(u"Act type"), choices=[])
+
+ def __init__(self, *args, **kwargs):
+ super(AdministrativeActFileForm, self).__init__(*args, **kwargs)
+ self.fields['act_type'].choices = models.ActType.get_types(
+ dct={'intented_to':'F'})
+ self.fields['act_type'].help_text = models.ActType.get_help(
+ dct={'intented_to':'F'})
file_administrativeactfile_wizard = FileAdministrativeActWizard([
('selec-file_administrativeactfile', FileFormSelection),
diff --git a/ishtar/furnitures/forms_items.py b/ishtar/furnitures/forms_items.py
index d4cec0ce9..b3f360db3 100644
--- a/ishtar/furnitures/forms_items.py
+++ b/ishtar/furnitures/forms_items.py
@@ -34,6 +34,7 @@ import models
import widgets
from forms import Wizard, FinalForm, FormSet, SearchWizard, \
formset_factory, get_now, reverse_lazy
+from forms_common import get_town_field
from forms_context_records import RecordFormSelection
class ItemWizard(Wizard):
@@ -77,7 +78,12 @@ class DateForm(forms.Form):
dating__quality = forms.ChoiceField(label=_("Quality"), required=False,
choices=models.DatingQuality.get_types())
dating__dating_type = forms.ChoiceField(label=_("Dating type"),
- required=False, choices=models.DatingType.get_types())
+ 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()
item_creation_wizard = ItemWizard([
('selecrecord-item_creation', RecordFormSelection),
@@ -87,10 +93,7 @@ item_creation_wizard = ItemWizard([
url_name='item_creation',)
class ItemSelect(forms.Form):
- base_items__context_record__parcel__town = forms.IntegerField(
- widget=widgets.JQueryAutoComplete("/" + settings.URL_PATH + \
- 'autocomplete-town', associated_model=models.Town),
- validators=[models.valid_id(models.Town)], label=_(u"Town"))
+ base_items__context_record__parcel__town = get_town_field()
base_items__context_record__parcel__operation__year = forms.IntegerField(
label=_("Year"))
dating__period = forms.ChoiceField(
@@ -100,7 +103,7 @@ class ItemSelect(forms.Form):
base_items__is_isolated = forms.NullBooleanField(label=_("Is isolated?"))
class ItemFormSelection(forms.Form):
- form_label = _("Item")
+ form_label = _("Item search")
associated_models = {'pk':models.Item}
currents = {'pk':models.Item}
pk = forms.IntegerField(label="", required=False,
diff --git a/ishtar/furnitures/forms_operations.py b/ishtar/furnitures/forms_operations.py
index c69c62e84..17fd8f69d 100644
--- a/ishtar/furnitures/forms_operations.py
+++ b/ishtar/furnitures/forms_operations.py
@@ -36,7 +36,8 @@ import models
import widgets
from forms import Wizard, FinalForm, FormSet, SearchWizard, ClosingWizard, \
DeletionWizard, formset_factory, get_now, reverse_lazy, clean_duplicated
-from forms_common import TownForm, TownFormSet, ParcelFormSet, ParcelForm
+from forms_common import TownForm, TownFormSet, ParcelFormSet, ParcelForm,\
+ get_town_field
def is_preventive(form_name, model, type_key='operation_type', key=''):
def func(self, request, storage):
@@ -187,16 +188,18 @@ class OperationWizard(Wizard):
return datas
class OperationSelect(forms.Form):
- towns = forms.IntegerField(label=_(u"Town"),
- widget=widgets.JQueryAutoComplete("/" + settings.URL_PATH + \
- 'autocomplete-town', associated_model=models.Town),
- validators=[models.valid_id(models.Town)])
+ towns = get_town_field()
operation_type = forms.ChoiceField(label=_("Operation type"),
- choices=models.OperationType.get_types())
+ choices=[])
remains = forms.ChoiceField(label=_("Remains"),
choices=models.RemainType.get_types())
year = forms.IntegerField(label=_("Year"))
+ def __init__(self, *args, **kwargs):
+ super(OperationSelect, self).__init__(*args, **kwargs)
+ self.fields['operation_type'].choices = models.OperationType.get_types()
+ self.fields['operation_type'].help_text = models.OperationType.get_help()
+
class OperationFormSelection(forms.Form):
form_label = _(u"Operation search")
associated_models = {'pk':models.Operation}
@@ -225,25 +228,30 @@ class OperationFormGeneral(forms.Form):
unicode(models.PersonType.objects.get(txt_idx='sra_agent').pk)])]),
associated_model=models.Person, new=True),
validators=[models.valid_id(models.Person)], required=False)
- associated_file = forms.IntegerField(label=_("Archaelogical file"),
+ 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)
- operation_type = forms.ChoiceField(label=_("Operation type"),
- choices=models.OperationType.get_types())
+ operation_type = forms.ChoiceField(label=_(u"Operation type"),
+ choices=[])
start_date = forms.DateField(label=_(u"Start date"), required=False,
widget=widgets.JQueryDate)
surface = forms.IntegerField(required=False, widget=widgets.AreaWidget,
label=_(u"Total surface"),
validators=[validators.MinValueValidator(0),
validators.MaxValueValidator(999999999)])
- year = forms.IntegerField(label=_("Year"),
+ year = forms.IntegerField(label=_(u"Year"),
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()
+
class OperationFormReference(forms.Form):
form_label = _("References")
associated_models = {'in_charge':models.Person,
@@ -529,12 +537,15 @@ class OperationEditAdministrativeActWizard(OperationAdministrativeActWizard):
return self.get_current_object(request, storage).operation
class AdministrativeActOpeSelect(forms.Form):
- operation__towns = forms.IntegerField(label=_(u"Town"),
- widget=widgets.JQueryAutoComplete("/" + settings.URL_PATH + \
- 'autocomplete-town', associated_model=models.Town),
- validators=[models.valid_id(models.Town)])
- act_type = forms.ChoiceField(label=_("Act type"),
- choices=models.ActType.get_types(dct={'intented_to':'O'}))
+ operation__towns = get_town_field()
+ act_type = forms.ChoiceField(label=_("Act type"), choices=[])
+
+ def __init__(self, *args, **kwargs):
+ super(AdministrativeActOpeSelect, self).__init__(*args, **kwargs)
+ self.fields['act_type'].choices = models.ActType.get_types(
+ dct={'intented_to':'O'})
+ self.fields['act_type'].help_text = models.ActType.get_help(
+ dct={'intented_to':'O'})
class AdministrativeActOpeFormSelection(forms.Form):
form_label = _("Administrative act search")
@@ -557,8 +568,7 @@ class AdministrativeActOpeForm(forms.Form):
form_label = _("General")
associated_models = {'act_type':models.ActType,
'signatory':models.Person}
- act_type = forms.ChoiceField(label=_("Act type"),
- choices=models.ActType.get_types(dct={'intented_to':'O'}))
+ 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),
@@ -570,6 +580,13 @@ class AdministrativeActOpeForm(forms.Form):
if settings.COUNTRY == 'fr':
ref_sra = forms.CharField(label=u"Référence SRA", max_length=15)
+ def __init__(self, *args, **kwargs):
+ super(AdministrativeActOpeForm, self).__init__(*args, **kwargs)
+ self.fields['act_type'].choices = models.ActType.get_types(
+ dct={'intented_to':'O'})
+ 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',
diff --git a/ishtar/furnitures/models.py b/ishtar/furnitures/models.py
index 6dda192ea..3d6e12536 100644
--- a/ishtar/furnitures/models.py
+++ b/ishtar/furnitures/models.py
@@ -26,7 +26,7 @@ from django.core.exceptions import ObjectDoesNotExist, ValidationError
from django.core.validators import validate_slug
from django.utils.translation import ugettext_lazy as _, ugettext
from django.db.utils import DatabaseError
-from django.utils.safestring import SafeUnicode
+from django.utils.safestring import SafeUnicode, mark_safe
from django.db.models import Q, Max
from django.db.models.signals import m2m_changed
@@ -130,6 +130,7 @@ class GeneralType(models.Model):
validators=[validate_slug], max_length=30, unique=True)
comment = models.TextField(_(u"Comment"), blank=True, null=True)
available = models.BooleanField(_(u"Available"))
+ HELP_TEXT = u""
class Meta:
abstract = True
@@ -138,43 +139,79 @@ class GeneralType(models.Model):
return self.label
@classmethod
- def get_types(cls, dct={}):
+ def get_help(cls, dct={}):
+ help_text = cls.HELP_TEXT
+ c_rank = -1
+ help_items = u"\n"
+ for item in cls.get_types(dct=dct, instances=True):
+ if not item.comment:
+ continue
+ if c_rank > item.rank:
+ help_items += u"</dl>\n"
+ elif c_rank < item.rank:
+ help_items += u"<dl>\n"
+ c_rank = item.rank
+ help_items += u"<dt>%s</dt><dd>%s</dd>" % (item.label,
+ u"<br/>".join(item.comment.split('\n')))
+ c_rank += 1
+ if c_rank:
+ help_items += c_rank*u"</dl>"
+ return mark_safe(help_text + help_items)
+
+ @classmethod
+ def get_types(cls, dct={}, instances=False):
base_dct = dct.copy()
if hasattr(cls, 'parent'):
- return cls._get_parent_types(base_dct)
- return cls._get_types(base_dct)
+ return cls._get_parent_types(base_dct, instances)
+ return cls._get_types(base_dct, instances)
@classmethod
- def _get_types(cls, dct={}):
+ def _get_types(cls, dct={}, instances=False):
dct['available'] = True
- yield ('', '--')
+ if not instances:
+ yield ('', '--')
for item in cls.objects.filter(**dct).all():
- yield (item.pk, _(unicode(item)))
+ if instances:
+ item.rank = 0
+ yield item
+ else:
+ yield (item.pk, _(unicode(item)))
+
+ PREFIX = "&rsaquo; "
@classmethod
- def _get_childs(cls, item, dct, prefix=""):
- prefix += "&rsaquo; "
+ def _get_childs(cls, item, dct, prefix=0, instances=False):
+ prefix += 1
dct['parent'] = item
childs = cls.objects.filter(**dct)
if hasattr(cls, 'order'):
childs = childs.order_by('order')
for child in childs.all():
- yield (child.pk, SafeUnicode(prefix + \
+ if instances:
+ child.rank = prefix
+ yield child
+ else:
+ yield (child.pk, SafeUnicode(prefix*cls.PREFIX + \
unicode(_(unicode(child))) ))
- for sub_child in cls._get_childs(child, dct, prefix):
+ for sub_child in cls._get_childs(child, dct, prefix, instances):
yield sub_child
@classmethod
- def _get_parent_types(cls, dct={}):
+ def _get_parent_types(cls, dct={}, instances=False):
dct['available'] = True
- yield ('', '--')
+ if not instances:
+ yield ('', '--')
dct['parent'] = None
items = cls.objects.filter(**dct)
if hasattr(cls, 'order'):
items = items.order_by('order')
for item in items.all():
- yield (item.pk, unicode(item))
- for child in cls._get_childs(item, dct):
+ if instances:
+ item.rank = 0
+ yield item
+ else:
+ yield (item.pk, unicode(item))
+ for child in cls._get_childs(item, dct, instances):
yield child
class HistoryError(Exception):
diff --git a/ishtar/furnitures/widgets.py b/ishtar/furnitures/widgets.py
index d70f08dda..d813e2e63 100644
--- a/ishtar/furnitures/widgets.py
+++ b/ishtar/furnitures/widgets.py
@@ -19,6 +19,7 @@
# See the file COPYING for details.
from django import forms
+from django.template import Context, loader
from django.utils.safestring import mark_safe
from django.forms.widgets import flatatt
from django.utils.encoding import smart_unicode
@@ -213,7 +214,8 @@ class JQueryJqGrid(forms.RadioSelect):
self.multiple = multiple
def render(self, name, value=None, attrs=None):
- rendered = unicode(self.form)
+ t = loader.get_template('grid_form.html')
+ rendered = t.render(Context({'form':self.form}))
rendered += """
</table>
<button id='search_%s' class='submit'>%s</button>
diff --git a/ishtar/locale/fr/LC_MESSAGES/django.po b/ishtar/locale/fr/LC_MESSAGES/django.po
index f136502de..399bfa7a2 100644
--- a/ishtar/locale/fr/LC_MESSAGES/django.po
+++ b/ishtar/locale/fr/LC_MESSAGES/django.po
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: alpha\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2011-06-10 13:32+0200\n"
+"POT-Creation-Date: 2011-06-13 14:43+0200\n"
"PO-Revision-Date: 2010-12-09\n"
"Last-Translator: Étienne Loks <etienne.loks at peacefrogs net>\n"
"Language-Team: \n"
@@ -28,18 +28,30 @@ msgstr "identifiant"
msgid "email address"
msgstr "courriel"
-#: __init__.py:5
+#: __init__.py:5 __init__.py:7
msgid "warehouse"
msgstr "dépôt"
-#: furnitures/context_processors.py:42 furnitures/forms_operations.py:228
-#: furnitures/menus.py:102 furnitures/models.py:989 furnitures/models.py:1015
+#: __init__.py:6
+msgid "New warehouse"
+msgstr "Nouveau dépôt"
+
+#: __init__.py:8
+msgid "New organization"
+msgstr "Nouvelle organisation"
+
+#: __init__.py:9
+msgid "New person"
+msgstr "Nouvelle personne"
+
+#: furnitures/context_processors.py:42 furnitures/forms_operations.py:231
+#: furnitures/menus.py:102 furnitures/models.py:1027 furnitures/models.py:1053
msgid "Archaelogical file"
msgstr "Dossier archéologique"
#: furnitures/context_processors.py:43 furnitures/menus.py:132
-#: furnitures/models.py:569 furnitures/models.py:610 furnitures/models.py:990
-#: furnitures/models.py:1013
+#: furnitures/models.py:607 furnitures/models.py:648 furnitures/models.py:1028
+#: furnitures/models.py:1051
msgid "Operation"
msgstr "Opération"
@@ -51,179 +63,205 @@ msgstr "Il y a des éléments identiques."
msgid "Enter a valid name consisting of letters, spaces and hyphens."
msgstr "Entrez un nom correct composé de lettres, espaces et tirets."
-#: furnitures/forms.py:74 furnitures/forms_common.py:62
-#: furnitures/models.py:320 furnitures/models.py:350 furnitures/models.py:968
-#: furnitures/models.py:1075
+#: furnitures/forms.py:75 furnitures/forms_common.py:324
+msgid "Confirm"
+msgstr "Confirmation"
+
+#: furnitures/forms.py:191
+msgid "Yes"
+msgstr "Oui"
+
+#: furnitures/forms.py:193
+msgid "No"
+msgstr "Non"
+
+#: furnitures/forms_common.py:45
+msgid ""
+"<p>Type name, department code and/or postal code of the town you would like "
+"to select. The search is insensitive to case.</p>\n"
+"<p>Only the first twenty results are displayed but specifying the department "
+"code is generally sufficient to get the appropriate result.</p>\n"
+"<p class='example'>For instance type \"saint denis 93\" for getting the "
+"french town Saint-Denis in the Seine-Saint-Denis department.</p>"
+msgstr ""
+"<p>Tapez le nom, le numéro de département et - ou le code postal de la "
+"commune que vous voulez sélectionner. La recherche n'est pas sensible à la "
+"casse.</p>\n"
+"<p>Seuls les vingt premiers résultats sont affichés mais en plus du nom "
+"préciser le numéro de département est généralement suffisant pour obtenir le "
+"résultat souhaité.</p>\n"
+"<p class='example'>Par exemple tapez « saint denis 93 » pour obtenir la "
+"commune Saint-Denis dans le département français de Seine-Saint-Denis.</p>"
+
+#: furnitures/forms_common.py:54 furnitures/forms_common.py:75
+#: furnitures/forms_common.py:79 furnitures/forms_common.py:112
+#: furnitures/forms_common.py:116 furnitures/forms_common.py:368
+#: furnitures/forms_operations.py:307 furnitures/models.py:340
+#: furnitures/models.py:652 furnitures/models.py:1127
+msgid "Town"
+msgstr "Commune"
+
+#: furnitures/forms_common.py:58 furnitures/forms_common.py:102
+#: furnitures/forms_common.py:154 furnitures/models.py:357
+#: furnitures/models.py:387 furnitures/models.py:1006
+#: furnitures/models.py:1113
msgid "Name"
msgstr "Nom"
-#: furnitures/forms.py:76 furnitures/models.py:964 furnitures/models.py:970
+#: furnitures/forms_common.py:60 furnitures/models.py:1002
+#: furnitures/models.py:1008
msgid "Warehouse type"
msgstr "Type de dépôt"
-#: furnitures/forms.py:78 furnitures/forms_files.py:158
-#: furnitures/models.py:429 furnitures/models.py:972
+#: furnitures/forms_common.py:62 furnitures/forms_files.py:159
+#: furnitures/models.py:466 furnitures/models.py:1010
msgid "Person in charge"
msgstr "Responsable"
-#: furnitures/forms.py:83 furnitures/forms_files.py:179
-#: furnitures/forms_items.py:162 furnitures/forms_operations.py:244
-#: furnitures/models.py:131 furnitures/models.py:459 furnitures/models.py:565
-#: furnitures/models.py:973 furnitures/models.py:1053
+#: furnitures/forms_common.py:67 furnitures/forms_files.py:180
+#: furnitures/forms_items.py:165 furnitures/forms_operations.py:247
+#: furnitures/models.py:131 furnitures/models.py:497 furnitures/models.py:603
+#: furnitures/models.py:1011 furnitures/models.py:1091
msgid "Comment"
msgstr "Commentaire"
-#: furnitures/forms.py:85 furnitures/forms_files.py:191
-#: furnitures/models.py:298
+#: furnitures/forms_common.py:69 furnitures/forms_common.py:106
+#: furnitures/forms_files.py:192 furnitures/models.py:335
msgid "Address"
msgstr "Adresse"
-#: furnitures/forms.py:87 furnitures/models.py:299
+#: furnitures/forms_common.py:71 furnitures/forms_common.py:108
+#: furnitures/models.py:336
msgid "Address complement"
msgstr "Complément d'adresse"
-#: furnitures/forms.py:89 furnitures/models.py:301
+#: furnitures/forms_common.py:73 furnitures/forms_common.py:110
+#: furnitures/models.py:338
msgid "Postal code"
msgstr "Code postal"
-#: furnitures/forms.py:91 furnitures/forms.py:95
-#: furnitures/forms_common.py:236 furnitures/forms_common.py:265
-#: furnitures/forms_context_records.py:84 furnitures/forms_files.py:128
-#: furnitures/forms_files.py:323 furnitures/forms_items.py:93
-#: furnitures/forms_operations.py:190 furnitures/forms_operations.py:299
-#: furnitures/forms_operations.py:532 furnitures/models.py:303
-#: furnitures/models.py:614 furnitures/models.py:1089
-msgid "Town"
-msgstr "Commune"
-
-#: furnitures/forms.py:92 furnitures/models.py:304
+#: furnitures/forms_common.py:76 furnitures/forms_common.py:113
+#: furnitures/models.py:341
msgid "Country"
msgstr "Pays"
-#: furnitures/forms.py:94 furnitures/models.py:306
+#: furnitures/forms_common.py:78 furnitures/forms_common.py:115
+#: furnitures/models.py:343
msgid "Phone"
msgstr "Téléphone"
-#: furnitures/forms.py:112 furnitures/forms_common.py:218
-msgid "Confirm"
-msgstr "Confirmation"
-
-#: furnitures/forms.py:228
-msgid "Yes"
-msgstr "Oui"
-
-#: furnitures/forms.py:230
-msgid "No"
-msgstr "Non"
+#: furnitures/forms_common.py:104 furnitures/models.py:353
+msgid "Organization type"
+msgstr "Type d'organisation"
-#: furnitures/forms_common.py:47
+#: furnitures/forms_common.py:139
msgid "Person search"
msgstr "Recherche d'individus"
-#: furnitures/forms_common.py:50 furnitures/forms_items.py:134
-#: furnitures/menus.py:89 furnitures/models.py:361 furnitures/models.py:386
-#: furnitures/models.py:1113 furnitures/models.py:1135
-#: furnitures/models.py:1150
+#: furnitures/forms_common.py:142 furnitures/forms_items.py:137
+#: furnitures/menus.py:89 furnitures/models.py:398 furnitures/models.py:423
+#: furnitures/models.py:1151 furnitures/models.py:1173
+#: furnitures/models.py:1188
msgid "Person"
msgstr "Individu"
-#: furnitures/forms_common.py:56
+#: furnitures/forms_common.py:148
msgid "Identity"
msgstr "Identité"
-#: furnitures/forms_common.py:59 furnitures/models.py:348
-#: furnitures/models.py:787 templates/sheet_contextrecord.html:83
+#: furnitures/forms_common.py:151 furnitures/models.py:385
+#: furnitures/models.py:825 templates/sheet_contextrecord.html:83
#: templates/sheet_ope.html:104 templates/sheet_ope_modif.html:104
#: templates/sheet_operation.html:104
msgid "Title"
msgstr "Titre"
-#: furnitures/forms_common.py:60 furnitures/models.py:349
+#: furnitures/forms_common.py:152 furnitures/models.py:386
msgid "Surname"
msgstr "Prénom"
-#: furnitures/forms_common.py:64 furnitures/forms_common.py:183
-#: furnitures/models.py:351
+#: furnitures/forms_common.py:156 furnitures/forms_common.py:289
+#: furnitures/models.py:388
msgid "Email"
msgstr "Courriel"
-#: furnitures/forms_common.py:66 furnitures/models.py:339
+#: furnitures/forms_common.py:158 furnitures/models.py:376
msgid "Person type"
msgstr "Type d'individu"
-#: furnitures/forms_common.py:68
+#: furnitures/forms_common.py:160
msgid "Current organization"
msgstr "Organisation actuelle"
-#: furnitures/forms_common.py:72 furnitures/models.py:355
+#: furnitures/forms_common.py:164 furnitures/models.py:392
msgid "Is an author?"
msgstr "Est un auteur ?"
-#: furnitures/forms_common.py:75 furnitures/models.py:357
+#: furnitures/forms_common.py:167 furnitures/models.py:394
msgid "In charge of a storage?"
msgstr "Est responsable d'un dépôt ?"
-#: furnitures/forms_common.py:101 furnitures/forms_common.py:185
+#: furnitures/forms_common.py:207 furnitures/forms_common.py:291
msgid "New password"
msgstr "Nouveau mot de passe"
-#: furnitures/forms_common.py:155
+#: furnitures/forms_common.py:261
#, python-format
msgid "[%(app_name)s] Account creation/modification"
msgstr "[%(app_name)s] Création - modification du compte"
-#: furnitures/forms_common.py:178 furnitures/forms_common.py:182
+#: furnitures/forms_common.py:284 furnitures/forms_common.py:288
msgid "Account"
msgstr "Compte"
-#: furnitures/forms_common.py:189
+#: furnitures/forms_common.py:295
msgid "New password (confirmation)"
msgstr "Nouveau mot de passe (confirmation)"
-#: furnitures/forms_common.py:207
+#: furnitures/forms_common.py:313
msgid "Your password and confirmation password do not match."
msgstr "La vérification du mot de passe a échoué."
-#: furnitures/forms_common.py:212
+#: furnitures/forms_common.py:318
msgid "You must provide a correct password."
msgstr "Vous devez fournir un mot de passe correct."
-#: furnitures/forms_common.py:219
+#: furnitures/forms_common.py:325
msgid "Send the new password by email?"
msgstr "Envoyer le nouveau mot de passe par courriel ?"
-#: furnitures/forms_common.py:233 furnitures/forms_common.py:259
-#: furnitures/forms_operations.py:297 furnitures/forms_operations.py:318
-#: furnitures/forms_operations.py:322 furnitures/models.py:439
-#: furnitures/models.py:548 furnitures/models.py:1090
+#: furnitures/forms_common.py:339 furnitures/forms_common.py:362
+#: furnitures/forms_operations.py:305 furnitures/forms_operations.py:326
+#: furnitures/forms_operations.py:330 furnitures/models.py:476
+#: furnitures/models.py:586 furnitures/models.py:1128
msgid "Towns"
msgstr "Communes"
-#: furnitures/forms_common.py:255
+#: furnitures/forms_common.py:358
msgid "There are identical towns."
msgstr "Il y a des communes identiques."
-#: furnitures/forms_common.py:262 furnitures/forms_common.py:310
-#: furnitures/forms_operations.py:325 furnitures/forms_operations.py:346
-#: furnitures/forms_operations.py:350 furnitures/models.py:620
+#: furnitures/forms_common.py:365 furnitures/forms_common.py:413
+#: furnitures/forms_operations.py:333 furnitures/forms_operations.py:354
+#: furnitures/forms_operations.py:358 furnitures/models.py:658
msgid "Parcels"
msgstr "Parcelles"
-#: furnitures/forms_common.py:267 furnitures/models.py:615
+#: furnitures/forms_common.py:370 furnitures/models.py:653
#: templates/sheet_ope.html:62 templates/sheet_ope_modif.html:62
#: templates/sheet_operation.html:63
msgid "Section"
msgstr "Section"
-#: furnitures/forms_common.py:269 furnitures/models.py:616
+#: furnitures/forms_common.py:372 furnitures/models.py:654
msgid "Parcel number"
msgstr "Numéro de parcelle"
-#: furnitures/forms_common.py:271 furnitures/forms_context_records.py:88
-#: furnitures/forms_files.py:136 furnitures/forms_files.py:163
-#: furnitures/forms_files.py:183 furnitures/forms_items.py:95
-#: furnitures/forms_operations.py:198 furnitures/forms_operations.py:240
-#: furnitures/models.py:422 furnitures/models.py:540 furnitures/models.py:611
+#: furnitures/forms_common.py:374 furnitures/forms_context_records.py:86
+#: furnitures/forms_files.py:132 furnitures/forms_files.py:164
+#: furnitures/forms_files.py:184 furnitures/forms_items.py:98
+#: furnitures/forms_operations.py:196 furnitures/forms_operations.py:243
+#: furnitures/models.py:459 furnitures/models.py:578 furnitures/models.py:649
#: templates/sheet_file.html:68 templates/sheet_file.html.py:88
#: templates/sheet_file.html:116 templates/sheet_ope.html:61
#: templates/sheet_ope.html.py:83 templates/sheet_ope_modif.html:61
@@ -232,38 +270,38 @@ msgstr "Numéro de parcelle"
msgid "Year"
msgstr "Année"
-#: furnitures/forms_common.py:299
+#: furnitures/forms_common.py:402
msgid "All fields are required"
msgstr "Tous les champs sont nécessaires"
-#: furnitures/forms_context_records.py:89
-#: furnitures/forms_context_records.py:160 furnitures/forms_items.py:72
-#: furnitures/forms_items.py:97 furnitures/forms_operations.py:370
-#: furnitures/models.py:659
+#: furnitures/forms_context_records.py:87
+#: furnitures/forms_context_records.py:158 furnitures/forms_items.py:73
+#: furnitures/forms_items.py:100 furnitures/forms_operations.py:378
+#: furnitures/models.py:697
msgid "Period"
msgstr "Période"
-#: furnitures/forms_context_records.py:91
+#: furnitures/forms_context_records.py:89
msgid "Unit type"
msgstr "Type d'unité"
-#: furnitures/forms_context_records.py:95
+#: furnitures/forms_context_records.py:93
msgid "Context record search"
msgstr "Recherche d'Unité d'Enregistrement"
-#: furnitures/forms_context_records.py:106
+#: furnitures/forms_context_records.py:104
msgid "You should select a context record."
msgstr "Vous devez sélectionner une Unité d'Enregistrement."
-#: furnitures/forms_context_records.py:112 furnitures/forms_files.py:154
-#: furnitures/forms_operations.py:216 furnitures/forms_operations.py:557
+#: furnitures/forms_context_records.py:110 furnitures/forms_files.py:155
+#: furnitures/forms_operations.py:219 furnitures/forms_operations.py:568
#: templates/sheet_file.html:17 templates/sheet_ope.html:5
#: templates/sheet_ope_modif.html:5 templates/sheet_operation.html:5
msgid "General"
msgstr "Général"
-#: furnitures/forms_context_records.py:114 furnitures/forms_operations.py:327
-#: furnitures/models.py:619 furnitures/models.py:715 furnitures/models.py:951
+#: furnitures/forms_context_records.py:112 furnitures/forms_operations.py:335
+#: furnitures/models.py:657 furnitures/models.py:753 furnitures/models.py:989
#: templates/sheet_contextrecord.html:110 templates/sheet_ope.html:63
#: templates/sheet_ope.html.py:129 templates/sheet_ope_modif.html:63
#: templates/sheet_ope_modif.html.py:129 templates/sheet_ope_modif.html:157
@@ -272,17 +310,17 @@ msgstr "Général"
msgid "Parcel"
msgstr "Parcelle"
-#: furnitures/forms_context_records.py:115 furnitures/forms_items.py:54
-#: furnitures/forms_items.py:189 furnitures/models.py:717
-#: furnitures/models.py:807 furnitures/models.py:884
+#: furnitures/forms_context_records.py:113 furnitures/forms_items.py:55
+#: furnitures/forms_items.py:192 furnitures/models.py:755
+#: furnitures/models.py:845 furnitures/models.py:922
#: templates/sheet_ope.html:125 templates/sheet_ope_modif.html:125
#: templates/sheet_operation.html:124
msgid "ID"
msgstr "Identifiant"
-#: furnitures/forms_context_records.py:117 furnitures/forms_items.py:56
-#: furnitures/forms_items.py:132 furnitures/models.py:718
-#: furnitures/models.py:808 furnitures/models.py:885 furnitures/models.py:1108
+#: furnitures/forms_context_records.py:115 furnitures/forms_items.py:57
+#: furnitures/forms_items.py:135 furnitures/models.py:756
+#: furnitures/models.py:846 furnitures/models.py:923 furnitures/models.py:1146
#: templates/sheet_contextrecord.html:23
#: templates/sheet_contextrecord.html:107 templates/sheet_ope.html:128
#: templates/sheet_ope_modif.html:128 templates/sheet_ope_modif.html.py:154
@@ -290,283 +328,287 @@ msgstr "Identifiant"
msgid "Description"
msgstr "Description"
-#: furnitures/forms_context_records.py:119 furnitures/models.py:719
-#: furnitures/models.py:1038
+#: furnitures/forms_context_records.py:117 furnitures/models.py:757
+#: furnitures/models.py:1076
msgid "Length"
msgstr "Longueur (cm)"
-#: furnitures/forms_context_records.py:120 furnitures/models.py:720
-#: furnitures/models.py:1039
+#: furnitures/forms_context_records.py:118 furnitures/models.py:758
+#: furnitures/models.py:1077
msgid "Width"
msgstr "Largeur (cm)"
-#: furnitures/forms_context_records.py:121 furnitures/models.py:721
+#: furnitures/forms_context_records.py:119 furnitures/models.py:759
msgid "Thickness"
msgstr "Épaisseur (cm)"
-#: furnitures/forms_context_records.py:122 furnitures/models.py:722
+#: furnitures/forms_context_records.py:120 furnitures/models.py:760
msgid "Depth"
msgstr "Profondeur (cm)"
-#: furnitures/forms_context_records.py:123 furnitures/models.py:727
+#: furnitures/forms_context_records.py:121 furnitures/models.py:765
msgid "Unit"
msgstr "Unité"
-#: furnitures/forms_context_records.py:125 furnitures/forms_items.py:138
-#: furnitures/models.py:723 furnitures/models.py:1049
-#: furnitures/models.py:1111
+#: furnitures/forms_context_records.py:123 furnitures/forms_items.py:141
+#: furnitures/models.py:761 furnitures/models.py:1087
+#: furnitures/models.py:1149
msgid "Location"
msgstr "Lieu"
-#: furnitures/forms_context_records.py:155
-#: furnitures/forms_context_records.py:171 furnitures/forms_items.py:67
-#: furnitures/models.py:668 furnitures/models.py:895
+#: furnitures/forms_context_records.py:153
+#: furnitures/forms_context_records.py:175 furnitures/forms_items.py:68
+#: furnitures/models.py:706 furnitures/models.py:933
msgid "Dating"
msgstr "Datation"
-#: furnitures/forms_context_records.py:162 furnitures/forms_items.py:74
-#: furnitures/forms_items.py:143 furnitures/forms_operations.py:234
-#: furnitures/models.py:536 furnitures/models.py:636 furnitures/models.py:660
-#: furnitures/models.py:952 furnitures/models.py:1115
-#: furnitures/models.py:1151 templates/sheet_file.html:93
+#: furnitures/forms_context_records.py:160 furnitures/forms_items.py:75
+#: furnitures/forms_items.py:146 furnitures/forms_operations.py:237
+#: furnitures/models.py:574 furnitures/models.py:674 furnitures/models.py:698
+#: furnitures/models.py:990 furnitures/models.py:1153
+#: furnitures/models.py:1189 templates/sheet_file.html:93
msgid "Start date"
msgstr "Date de début"
-#: furnitures/forms_context_records.py:163 furnitures/forms_items.py:76
-#: furnitures/forms_items.py:145 furnitures/models.py:637
-#: furnitures/models.py:661 furnitures/models.py:953 furnitures/models.py:1116
-#: furnitures/models.py:1152 templates/sheet_file.html:94
+#: furnitures/forms_context_records.py:161 furnitures/forms_items.py:77
+#: furnitures/forms_items.py:148 furnitures/models.py:675
+#: furnitures/models.py:699 furnitures/models.py:991 furnitures/models.py:1154
+#: furnitures/models.py:1190 templates/sheet_file.html:94
msgid "End date"
msgstr "Date de fin"
-#: furnitures/forms_context_records.py:164 furnitures/forms_items.py:77
-#: furnitures/models.py:664
+#: furnitures/forms_context_records.py:162 furnitures/forms_items.py:78
+#: furnitures/models.py:702
msgid "Quality"
msgstr "Qualité"
-#: furnitures/forms_context_records.py:166 furnitures/forms_items.py:79
-#: furnitures/models.py:650 furnitures/models.py:662
+#: furnitures/forms_context_records.py:164 furnitures/forms_items.py:80
+#: furnitures/models.py:688 furnitures/models.py:700
msgid "Dating type"
msgstr "Type de datation"
-#: furnitures/forms_context_records.py:174
-#: furnitures/forms_context_records.py:181 furnitures/models.py:732
+#: furnitures/forms_context_records.py:178
+#: furnitures/forms_context_records.py:185 furnitures/models.py:770
#: templates/sheet_contextrecord.html:32
msgid "Interpretation"
msgstr "Interpretation"
-#: furnitures/forms_context_records.py:177
+#: furnitures/forms_context_records.py:181
msgid "Has furniture?"
msgstr "A du matériel ?"
-#: furnitures/forms_context_records.py:179 furnitures/models.py:731
+#: furnitures/forms_context_records.py:183 furnitures/models.py:769
msgid "Filling"
msgstr "Remplissage"
-#: furnitures/forms_context_records.py:183 furnitures/models.py:747
+#: furnitures/forms_context_records.py:187 furnitures/models.py:785
msgid "Activity"
msgstr "Activité"
-#: furnitures/forms_context_records.py:185 furnitures/models.py:745
+#: furnitures/forms_context_records.py:189 furnitures/models.py:783
msgid "Identification"
msgstr "Identification"
-#: furnitures/forms_context_records.py:187 furnitures/models.py:734
+#: furnitures/forms_context_records.py:191 furnitures/models.py:772
msgid "TAQ"
msgstr "TAQ"
-#: furnitures/forms_context_records.py:188 furnitures/models.py:737
+#: furnitures/forms_context_records.py:192 furnitures/models.py:775
msgid "Estimated TAQ"
msgstr "TAQ estimé"
-#: furnitures/forms_context_records.py:190 furnitures/models.py:739
+#: furnitures/forms_context_records.py:194 furnitures/models.py:777
msgid "TPQ"
msgstr "TPQ"
-#: furnitures/forms_context_records.py:191 furnitures/models.py:742
+#: furnitures/forms_context_records.py:195 furnitures/models.py:780
msgid "Estimated TPQ"
msgstr "TPQ estimé"
-#: furnitures/forms_context_records.py:229
+#: furnitures/forms_context_records.py:236
msgid "Would you like to delete this context record?"
msgstr "Voulez vous supprimer cette Unité d'Enregistrement ?"
-#: furnitures/forms_files.py:132 furnitures/forms_files.py:173
-#: furnitures/models.py:427
+#: furnitures/forms_files.py:129 furnitures/forms_files.py:174
+#: furnitures/models.py:464
msgid "File type"
msgstr "Type de dossier"
-#: furnitures/forms_files.py:134 furnitures/forms_files.py:232
+#: furnitures/forms_files.py:131 furnitures/forms_files.py:233
msgid "Saisine type"
msgstr "Type de saisine"
-#: furnitures/forms_files.py:139
+#: furnitures/forms_files.py:140
msgid "Archaeological file search"
msgstr "Recherche de dossiers archéologiques"
-#: furnitures/forms_files.py:150
+#: furnitures/forms_files.py:151
msgid "You should select a file."
msgstr "Vous devez sélectionner un dossier archéologique."
-#: furnitures/forms_files.py:167 furnitures/forms_files.py:185
-#: furnitures/models.py:424
+#: furnitures/forms_files.py:168 furnitures/forms_files.py:186
+#: furnitures/models.py:461
msgid "Numeric reference"
msgstr "Référence numérique"
-#: furnitures/forms_files.py:169 furnitures/forms_files.py:187
-#: furnitures/models.py:425
+#: furnitures/forms_files.py:170 furnitures/forms_files.py:188
+#: furnitures/models.py:462
msgid "Internal reference"
msgstr "Référence interne"
-#: furnitures/forms_files.py:171 furnitures/models.py:440
+#: furnitures/forms_files.py:172 furnitures/models.py:477
msgid "Creation date"
msgstr "Date de création"
-#: furnitures/forms_files.py:175 furnitures/models.py:444
+#: furnitures/forms_files.py:176 furnitures/models.py:481
msgid "Related file"
msgstr "Dossier en relation avec"
-#: furnitures/forms_files.py:195 furnitures/forms_operations.py:237
-#: furnitures/models.py:451
+#: furnitures/forms_files.py:196 furnitures/forms_operations.py:240
+#: furnitures/models.py:488
msgid "Total surface"
msgstr "Surface totale"
-#: furnitures/forms_files.py:198 furnitures/models.py:454
+#: furnitures/forms_files.py:199 furnitures/models.py:492
msgid "Main address"
msgstr "Adresse principale"
-#: furnitures/forms_files.py:199 furnitures/models.py:455
+#: furnitures/forms_files.py:200 furnitures/models.py:493
msgid "Main address - complement"
msgstr "Adresse principale - complément"
-#: furnitures/forms_files.py:201 furnitures/models.py:457
+#: furnitures/forms_files.py:202 furnitures/models.py:495
msgid "Main address - postal code"
msgstr "Adresse principale - code postal"
-#: furnitures/forms_files.py:205
+#: furnitures/forms_files.py:206
msgid "Preventive informations"
msgstr "Information archéologie préventive"
-#: furnitures/forms_files.py:210 furnitures/models.py:431
+#: furnitures/forms_files.py:211 furnitures/models.py:468
msgid "General contractor"
msgstr "Aménageur"
-#: furnitures/forms_files.py:217 furnitures/models.py:433
+#: furnitures/forms_files.py:218 furnitures/models.py:470
msgid "Town planning service"
msgstr "Service instructeur"
-#: furnitures/forms_files.py:223 furnitures/models.py:409
-#: furnitures/models.py:434
+#: furnitures/forms_files.py:224 furnitures/models.py:446
+#: furnitures/models.py:471
msgid "Permit type"
msgstr "Type de permis"
-#: furnitures/forms_files.py:225 furnitures/models.py:436
+#: furnitures/forms_files.py:226 furnitures/models.py:473
msgid "Permit reference"
msgstr "Référence du permis"
-#: furnitures/forms_files.py:228 furnitures/models.py:452
+#: furnitures/forms_files.py:229 furnitures/models.py:490
msgid "Total developed surface"
msgstr "Surface totale aménagée"
-#: furnitures/forms_files.py:234 furnitures/models.py:442
+#: furnitures/forms_files.py:235 furnitures/models.py:479
msgid "Reception date"
msgstr "Date de réception"
-#: furnitures/forms_files.py:280 templates/sheet_file.html:86
+#: furnitures/forms_files.py:285 templates/sheet_file.html:86
msgid "Associated operations"
msgstr "Opérations associées"
-#: furnitures/forms_files.py:299
+#: furnitures/forms_files.py:304
msgid "Would you like to delete this archaelogical file ?"
msgstr "Voulez vous supprimer ce dossier archéologique ?"
-#: furnitures/forms_files.py:327 furnitures/forms_files.py:338
-#: furnitures/forms_operations.py:536 furnitures/forms_operations.py:560
-#: furnitures/models.py:995 furnitures/models.py:1003
+#: furnitures/forms_files.py:329 furnitures/forms_files.py:346
+#: furnitures/forms_operations.py:541 furnitures/forms_operations.py:571
+#: furnitures/models.py:1033 furnitures/models.py:1041
msgid "Act type"
msgstr "Type d'acte"
-#: furnitures/forms_items.py:51 furnitures/forms_items.py:103
-#: furnitures/menus.py:193 furnitures/models.py:899 furnitures/models.py:1147
+#: furnitures/forms_items.py:52 furnitures/menus.py:193
+#: furnitures/models.py:937 furnitures/models.py:1185
msgid "Item"
msgstr "Mobilier"
-#: furnitures/forms_items.py:58 furnitures/forms_items.py:100
-#: furnitures/models.py:811
+#: furnitures/forms_items.py:59 furnitures/forms_items.py:103
+#: furnitures/models.py:849
msgid "Is isolated?"
msgstr "Est isolé ?"
-#: furnitures/forms_items.py:60 furnitures/forms_items.py:99
-#: furnitures/forms_items.py:193 furnitures/models.py:803
-#: furnitures/models.py:887 templates/sheet_contextrecord.html:104
+#: furnitures/forms_items.py:61 furnitures/forms_items.py:102
+#: furnitures/forms_items.py:196 furnitures/models.py:841
+#: furnitures/models.py:925 templates/sheet_contextrecord.html:104
#: templates/sheet_operation.html:153
msgid "Material type"
msgstr "Type de matériau"
-#: furnitures/forms_items.py:62 furnitures/forms_items.py:195
-#: furnitures/models.py:888 furnitures/models.py:1041
+#: furnitures/forms_items.py:63 furnitures/forms_items.py:198
+#: furnitures/models.py:926 furnitures/models.py:1079
msgid "Volume"
msgstr "Volume"
-#: furnitures/forms_items.py:63 furnitures/forms_items.py:196
-#: furnitures/models.py:889 templates/sheet_contextrecord.html:108
+#: furnitures/forms_items.py:64 furnitures/forms_items.py:199
+#: furnitures/models.py:927 templates/sheet_contextrecord.html:108
#: templates/sheet_ope_modif.html:155 templates/sheet_operation.html:157
msgid "Weight"
msgstr "Poids"
-#: furnitures/forms_items.py:64 furnitures/forms_items.py:197
-#: furnitures/models.py:890
+#: furnitures/forms_items.py:65 furnitures/forms_items.py:200
+#: furnitures/models.py:928
msgid "Item number"
msgstr "Nombre d'artefacts"
-#: furnitures/forms_items.py:126
+#: furnitures/forms_items.py:106
+msgid "Item search"
+msgstr "Recherche de mobilier"
+
+#: furnitures/forms_items.py:129
msgid "Base treatment"
msgstr "Traitement de base"
-#: furnitures/forms_items.py:130 furnitures/models.py:1102
-#: furnitures/models.py:1110
+#: furnitures/forms_items.py:133 furnitures/models.py:1140
+#: furnitures/models.py:1148
msgid "Treatment type"
msgstr "Type de traitement"
-#: furnitures/forms_items.py:149
+#: furnitures/forms_items.py:152
msgid "Upstream items"
msgstr "Mobilier amont"
-#: furnitures/forms_items.py:157 furnitures/models.py:1056
-#: furnitures/models.py:1106
+#: furnitures/forms_items.py:160 furnitures/models.py:1094
+#: furnitures/models.py:1144
msgid "Container"
msgstr "Contenant"
-#: furnitures/forms_items.py:159 furnitures/models.py:1042
-#: furnitures/models.py:1052 templates/sheet_file.html:69
+#: furnitures/forms_items.py:162 furnitures/models.py:1080
+#: furnitures/models.py:1090 templates/sheet_file.html:69
#: templates/sheet_file.html.py:89 templates/sheet_file.html:117
#: templates/sheet_ope.html:84 templates/sheet_ope_modif.html:84
#: templates/sheet_operation.html:84
msgid "Reference"
msgstr "Référence"
-#: furnitures/forms_items.py:160 furnitures/models.py:1045
-#: furnitures/models.py:1051
+#: furnitures/forms_items.py:163 furnitures/models.py:1083
+#: furnitures/models.py:1089
msgid "Container type"
msgstr "Type de contenant"
-#: furnitures/forms_items.py:187
+#: furnitures/forms_items.py:190
msgid "Resulting item"
msgstr "Mobilier résultant"
-#: furnitures/forms_items.py:191
+#: furnitures/forms_items.py:194
msgid "Precise description"
msgstr "Description précise"
-#: furnitures/forms_items.py:201
+#: furnitures/forms_items.py:204
msgid "Resulting items"
msgstr "Mobiliers résultants"
-#: furnitures/forms_items.py:204
+#: furnitures/forms_items.py:207
msgid "Upstream item"
msgstr "Mobilier amont"
-#: furnitures/forms_operations.py:184
+#: furnitures/forms_operations.py:185
msgid ""
"Warning: No Archaelogical File is provided. If you have forget it return to "
"the first step."
@@ -574,36 +616,36 @@ msgstr ""
"Attention : Aucun dossier archéologique n'a été précisé. S'il s'agit d'un "
"oubli, définissez le à la première étape."
-#: furnitures/forms_operations.py:194 furnitures/forms_operations.py:232
-#: furnitures/models.py:516 furnitures/models.py:545
+#: furnitures/forms_operations.py:192 furnitures/forms_operations.py:235
+#: furnitures/models.py:554 furnitures/models.py:583
msgid "Operation type"
msgstr "Type d'opération"
-#: furnitures/forms_operations.py:196 furnitures/models.py:547
+#: furnitures/forms_operations.py:194 furnitures/models.py:585
msgid "Remains"
msgstr "Vestiges"
-#: furnitures/forms_operations.py:201
+#: furnitures/forms_operations.py:204
msgid "Operation search"
msgstr "Recherche d'opérations"
-#: furnitures/forms_operations.py:212
+#: furnitures/forms_operations.py:215
msgid "You should select an operation."
msgstr "Vous devez sélectionner une opération."
-#: furnitures/forms_operations.py:221 furnitures/models.py:1005
+#: furnitures/forms_operations.py:224 furnitures/models.py:1043
msgid "Person in charge of the operation"
msgstr "Responsable d'opération"
-#: furnitures/forms_operations.py:248
+#: furnitures/forms_operations.py:256
msgid "References"
msgstr "Référence"
-#: furnitures/forms_operations.py:255 furnitures/models.py:541
+#: furnitures/forms_operations.py:263 furnitures/models.py:579
msgid "Operation code"
msgstr "Code de l'opération"
-#: furnitures/forms_operations.py:272
+#: furnitures/forms_operations.py:280
#, python-format
msgid ""
"Operation code already exist for year: %(year)d - use a value bigger than "
@@ -612,79 +654,79 @@ msgstr ""
"Ce code d'opération existe déjà pour l'année %(year)d - utilisez une valeur "
"plus grande que %(last_val)d"
-#: furnitures/forms_operations.py:278
+#: furnitures/forms_operations.py:286
msgid "Preventive informations - excavation"
msgstr "Information archéologie préventive - fouille"
-#: furnitures/forms_operations.py:279 furnitures/models.py:549
+#: furnitures/forms_operations.py:287 furnitures/models.py:587
msgid "Cost"
msgstr "Coût"
-#: furnitures/forms_operations.py:287
+#: furnitures/forms_operations.py:295
msgid "Preventive informations - diagnostic"
msgstr "Information archéologie préventive - diagnostic"
-#: furnitures/forms_operations.py:290 furnitures/models.py:560
+#: furnitures/forms_operations.py:298 furnitures/models.py:598
msgid "Prescription on zoning"
msgstr "Prescription sur zonage"
-#: furnitures/forms_operations.py:292 furnitures/models.py:562
+#: furnitures/forms_operations.py:300 furnitures/models.py:600
msgid "Prescription on large area"
msgstr "Prescription sur une vaste surface"
-#: furnitures/forms_operations.py:294 furnitures/models.py:564
+#: furnitures/forms_operations.py:302 furnitures/models.py:602
msgid "Prescription on geoarchaeological context"
msgstr "Prescription sur un contexte géoarchéologique"
-#: furnitures/forms_operations.py:353 furnitures/forms_operations.py:365
-#: furnitures/models.py:531
+#: furnitures/forms_operations.py:361 furnitures/forms_operations.py:373
+#: furnitures/models.py:569
msgid "Remain types"
msgstr "Types de vestige"
-#: furnitures/forms_operations.py:355 furnitures/models.py:530
+#: furnitures/forms_operations.py:363 furnitures/models.py:568
msgid "Remain type"
msgstr "Type de vestige"
-#: furnitures/forms_operations.py:368 furnitures/forms_operations.py:380
-#: furnitures/models.py:550 templates/sheet_contextrecord.html:106
+#: furnitures/forms_operations.py:376 furnitures/forms_operations.py:388
+#: furnitures/models.py:588 templates/sheet_contextrecord.html:106
#: templates/sheet_ope_modif.html:153 templates/sheet_operation.html:155
msgid "Periods"
msgstr "Périodes"
-#: furnitures/forms_operations.py:460 furnitures/forms_operations.py:461
-#: furnitures/models.py:537
+#: furnitures/forms_operations.py:468 furnitures/forms_operations.py:469
+#: furnitures/models.py:575
msgid "Closing date"
msgstr "Date de clotûre"
-#: furnitures/forms_operations.py:471
+#: furnitures/forms_operations.py:479
msgid "Would you like to close this operation?"
msgstr "Voulez vous clôturer cette opération ?"
-#: furnitures/forms_operations.py:484
+#: furnitures/forms_operations.py:492
msgid "Would you like to delete this operation?"
msgstr "Voulez vous supprimer cette opération ?"
-#: furnitures/forms_operations.py:540
+#: furnitures/forms_operations.py:551
msgid "Administrative act search"
msgstr "Recherche d'actes administratifs"
-#: furnitures/forms_operations.py:552
+#: furnitures/forms_operations.py:563
msgid "You should select an administrative act."
msgstr "Vous devez sélectionner un acte administratif."
-#: furnitures/forms_operations.py:562 furnitures/models.py:1011
+#: furnitures/forms_operations.py:572 furnitures/models.py:1049
msgid "Signatory"
msgstr "Signataire"
-#: furnitures/forms_operations.py:566 furnitures/models.py:1017
+#: furnitures/forms_operations.py:576 furnitures/models.py:1055
msgid "Object"
msgstr "Objet"
-#: furnitures/forms_operations.py:568 furnitures/models.py:1016
+#: furnitures/forms_operations.py:578 furnitures/models.py:1054
msgid "Signature date"
msgstr "Date de signature"
-#: furnitures/forms_operations.py:588
+#: furnitures/forms_operations.py:605
msgid "Would you like to delete this administrative act?"
msgstr "Voulez vous supprimer cet acte administratif ?"
@@ -708,7 +750,7 @@ msgid "Account management"
msgstr "Gestion des comptes"
#: furnitures/menus.py:104 furnitures/menus.py:134 furnitures/menus.py:176
-#: furnitures/menus.py:195 furnitures/widgets.py:219
+#: furnitures/menus.py:195 furnitures/widgets.py:223
msgid "Search"
msgstr "Recherche"
@@ -717,13 +759,13 @@ msgstr "Recherche"
msgid "Deletion"
msgstr "Suppression"
-#: furnitures/menus.py:116 furnitures/menus.py:155 furnitures/models.py:1023
-#: furnitures/models.py:1149
+#: furnitures/menus.py:116 furnitures/menus.py:155 furnitures/models.py:1061
+#: furnitures/models.py:1187
msgid "Administrative act"
msgstr "Acte administratif"
-#: furnitures/menus.py:119 furnitures/menus.py:158 furnitures/widgets.py:181
-#: furnitures/widgets.py:252 templates/window.html:33
+#: furnitures/menus.py:119 furnitures/menus.py:158 furnitures/widgets.py:256
+#: templates/window.html:37
msgid "Add"
msgstr "Ajout"
@@ -740,7 +782,7 @@ msgstr "Unité d'Enregistrement"
msgid "Add a treatment"
msgstr "Ajouter un traitement"
-#: furnitures/menus.py:212 furnitures/models.py:976
+#: furnitures/menus.py:212 furnitures/models.py:1014
msgid "Warehouse"
msgstr "Dépôt"
@@ -768,15 +810,15 @@ msgstr "Tableau de bord"
msgid "Files"
msgstr "Dossiers"
-#: furnitures/menus.py:232 furnitures/models.py:570
+#: furnitures/menus.py:232 furnitures/models.py:608
msgid "Operations"
msgstr "Opérations"
-#: furnitures/menus.py:235 furnitures/models.py:1121
+#: furnitures/menus.py:235 furnitures/models.py:1159
msgid "Treatments"
msgstr "Traitements"
-#: furnitures/menus.py:238 furnitures/models.py:977
+#: furnitures/menus.py:238 furnitures/models.py:1015
msgid "Warehouses"
msgstr "Dépôts"
@@ -788,7 +830,7 @@ msgstr "Élément invalide."
msgid "This item already exist."
msgstr "Cet élément existe déjà."
-#: furnitures/models.py:128 furnitures/models.py:286
+#: furnitures/models.py:128 furnitures/models.py:323
msgid "Label"
msgstr "Libellé"
@@ -800,35 +842,31 @@ msgstr "Identifiant textuel"
msgid "Available"
msgstr "Disponible"
-#: furnitures/models.py:188
+#: furnitures/models.py:225
msgid "Last modifier"
msgstr "Dernier modifieur"
-#: furnitures/models.py:287
+#: furnitures/models.py:324
msgid "Number"
msgstr "Nombre"
-#: furnitures/models.py:290
+#: furnitures/models.py:327
msgid "Departement"
msgstr "Département"
-#: furnitures/models.py:291
+#: furnitures/models.py:328
msgid "Departements"
msgstr "Départements"
-#: furnitures/models.py:307
+#: furnitures/models.py:344
msgid "Mobile phone"
msgstr "Téléphone portable"
-#: furnitures/models.py:316
-msgid "Organization type"
-msgstr "Type d'organisation"
-
-#: furnitures/models.py:317
+#: furnitures/models.py:354
msgid "Organization types"
msgstr "Types d'organisation"
-#: furnitures/models.py:322 furnitures/models.py:352 furnitures/models.py:788
+#: furnitures/models.py:359 furnitures/models.py:389 furnitures/models.py:826
#: templates/sheet_contextrecord.html:84 templates/sheet_file.html:70
#: templates/sheet_file.html.py:91 templates/sheet_file.html:118
#: templates/sheet_ope.html:85 templates/sheet_ope.html.py:105
@@ -839,236 +877,236 @@ msgstr "Types d'organisation"
msgid "Type"
msgstr "Type"
-#: furnitures/models.py:325
+#: furnitures/models.py:362
msgid "Organization"
msgstr "Organisation"
-#: furnitures/models.py:326
+#: furnitures/models.py:363
msgid "Organizations"
msgstr "Organisations"
-#: furnitures/models.py:328
+#: furnitures/models.py:365
msgid "Can view own Organization"
msgstr "Peut voir sa propre Organisation"
-#: furnitures/models.py:329
+#: furnitures/models.py:366
msgid "Can add own Organization"
msgstr "Peut ajouter sa propre Organisation"
-#: furnitures/models.py:330
+#: furnitures/models.py:367
msgid "Can change own Organization"
msgstr "Peut changer sa propre Organisation"
-#: furnitures/models.py:331
+#: furnitures/models.py:368
msgid "Can delete own Organization"
msgstr "Peut supprimer sa propre Organisation"
-#: furnitures/models.py:340
+#: furnitures/models.py:377
msgid "Person types"
msgstr "Types d'individu"
-#: furnitures/models.py:343
+#: furnitures/models.py:380
msgid "Mr"
msgstr "M"
-#: furnitures/models.py:344
+#: furnitures/models.py:381
msgid "Miss"
msgstr "Mlle"
-#: furnitures/models.py:345
+#: furnitures/models.py:382
msgid "Mrs"
msgstr "Mme"
-#: furnitures/models.py:346
+#: furnitures/models.py:383
msgid "Doctor"
msgstr "Dr"
-#: furnitures/models.py:354
+#: furnitures/models.py:391
msgid "Is attached to"
msgstr "Est rattaché à"
-#: furnitures/models.py:362
+#: furnitures/models.py:399
msgid "Persons"
msgstr "Individus"
-#: furnitures/models.py:364
+#: furnitures/models.py:401
msgid "Can view Person"
msgstr "Peut voir les Personnes"
-#: furnitures/models.py:365
+#: furnitures/models.py:402
msgid "Can view own Person"
msgstr "Peut voir sa propre Personne"
-#: furnitures/models.py:366
+#: furnitures/models.py:403
msgid "Can add own Person"
msgstr "Peut ajouter sa propre Personne"
-#: furnitures/models.py:367
+#: furnitures/models.py:404
msgid "Can change own Person"
msgstr "Peut changer sa propre Personne"
-#: furnitures/models.py:368
+#: furnitures/models.py:405
msgid "Can delete own Person"
msgstr "Peut supprimer sa propre Personne"
-#: furnitures/models.py:389
+#: furnitures/models.py:426
msgid "Ishtar user"
msgstr "Utilisateur d'Ishtar"
-#: furnitures/models.py:390
+#: furnitures/models.py:427
msgid "Ishtar users"
msgstr "Utilisateurs d'Ishtar"
-#: furnitures/models.py:395
+#: furnitures/models.py:432
msgid "Archaeological file type"
msgstr "Type de dossier archéologique"
-#: furnitures/models.py:396
+#: furnitures/models.py:433
msgid "Archaeological file types"
msgstr "Types de dossier archéologique"
-#: furnitures/models.py:410
+#: furnitures/models.py:447
msgid "Permit types"
msgstr "Types de permis"
-#: furnitures/models.py:414
+#: furnitures/models.py:451
msgid "Delay (in days)"
msgstr "Delai (en jours)"
-#: furnitures/models.py:438
+#: furnitures/models.py:475
msgid "Is active?"
msgstr "Est actif ?"
-#: furnitures/models.py:449
+#: furnitures/models.py:486
msgid "Reference number"
msgstr "Référence"
-#: furnitures/models.py:463
+#: furnitures/models.py:501
msgid "Archaeological file"
msgstr "Dossier archéologique"
-#: furnitures/models.py:464
+#: furnitures/models.py:502
msgid "Archaeological files"
msgstr "Dossiers archéologiques"
-#: furnitures/models.py:466
+#: furnitures/models.py:504
msgid "Can view own Archaelogical file"
msgstr "Peut voir son propre Dossier archéologique"
-#: furnitures/models.py:467
+#: furnitures/models.py:505
msgid "Can add own Archaelogical file"
msgstr "Peut ajouter son propre Dossier archéologique"
-#: furnitures/models.py:468
+#: furnitures/models.py:506
msgid "Can change own Archaelogical file"
msgstr "Peut changer son propre Dossier archéologique"
-#: furnitures/models.py:469
+#: furnitures/models.py:507
msgid "Can delete own Archaelogical file"
msgstr "Peut supprimer son propre Dossier archéologique"
-#: furnitures/models.py:474 furnitures/models.py:579
+#: furnitures/models.py:512 furnitures/models.py:617
msgid "Intercommunal"
msgstr "Intercommunal"
-#: furnitures/models.py:517
+#: furnitures/models.py:555
msgid "Operation types"
msgstr "Types d'opération"
-#: furnitures/models.py:539 templates/sheet_file.html:92
+#: furnitures/models.py:577 templates/sheet_file.html:92
msgid "In charge"
msgstr "Responsable"
-#: furnitures/models.py:543 furnitures/models.py:608
+#: furnitures/models.py:581 furnitures/models.py:646
msgid "File"
msgstr "Dossier"
-#: furnitures/models.py:546
+#: furnitures/models.py:584
msgid "Surface (m²)"
msgstr "Area (m²)"
-#: furnitures/models.py:572
+#: furnitures/models.py:610
msgid "Can view own Operation"
msgstr "Peut voir sa propre Opération"
-#: furnitures/models.py:573
+#: furnitures/models.py:611
msgid "Can add own Operation"
msgstr "Peut ajouter sa propre Opération"
-#: furnitures/models.py:574
+#: furnitures/models.py:612
msgid "Can change own Operation"
msgstr "Peut changer sa propre Opération"
-#: furnitures/models.py:575
+#: furnitures/models.py:613
msgid "Can delete own Operation"
msgstr "Peut supprimer sa propre Opération"
-#: furnitures/models.py:635 furnitures/models.py:679 furnitures/models.py:691
-#: furnitures/models.py:701 furnitures/models.py:883
+#: furnitures/models.py:673 furnitures/models.py:717 furnitures/models.py:729
+#: furnitures/models.py:739 furnitures/models.py:921
msgid "Order"
msgstr "Ordre"
-#: furnitures/models.py:638
+#: furnitures/models.py:676
msgid "Parent period"
msgstr "Période parente"
-#: furnitures/models.py:642
+#: furnitures/models.py:680
msgid "Type Period"
msgstr "Type de période"
-#: furnitures/models.py:643
+#: furnitures/models.py:681
msgid "Types Period"
msgstr "Types de période"
-#: furnitures/models.py:651
+#: furnitures/models.py:689
msgid "Dating types"
msgstr "Types de datation"
-#: furnitures/models.py:655
+#: furnitures/models.py:693
msgid "Dating quality"
msgstr "Qualité de datation"
-#: furnitures/models.py:656
+#: furnitures/models.py:694
msgid "Dating qualities"
msgstr "Qualités de datation"
-#: furnitures/models.py:669
+#: furnitures/models.py:707
msgid "Datings"
msgstr "Datations"
-#: furnitures/models.py:680
+#: furnitures/models.py:718
msgid "Parent unit"
msgstr "Unité parente"
-#: furnitures/models.py:684
+#: furnitures/models.py:722
msgid "Type Unit"
msgstr "Type d'unité"
-#: furnitures/models.py:685
+#: furnitures/models.py:723
msgid "Types Unit"
msgstr "Types d'unité"
-#: furnitures/models.py:694
+#: furnitures/models.py:732
msgid "Type Activity"
msgstr "Type d'activité"
-#: furnitures/models.py:695
+#: furnitures/models.py:733
msgid "Types Activity"
msgstr "Types d'activités"
-#: furnitures/models.py:703
+#: furnitures/models.py:741
msgid "Type Identification"
msgstr "Type d'identification"
-#: furnitures/models.py:704
+#: furnitures/models.py:742
msgid "Types Identification"
msgstr "Types d'identification"
-#: furnitures/models.py:725
+#: furnitures/models.py:763
msgid "A short description of the location of the context record"
msgstr "Une courte description de la situation de l'Unité d'Enregistrement"
-#: furnitures/models.py:735
+#: furnitures/models.py:773
msgid ""
"\"Terminus Ante Quem\" the context record can't have been created after this "
"date"
@@ -1076,11 +1114,11 @@ msgstr ""
"« Terminus Ante Quem » l'Unité d'Enregistrement ne peut avoir été crée après "
"cette date"
-#: furnitures/models.py:738
+#: furnitures/models.py:776
msgid "Estimation of a \"Terminus Ante Quem\""
msgstr "Estimation d'un « Terminus Ante Quem »"
-#: furnitures/models.py:740
+#: furnitures/models.py:778
msgid ""
"\"Terminus Post Quem\" the context record can't have been created before "
"this date"
@@ -1088,201 +1126,201 @@ msgstr ""
"« Terminus Post Quem » l'Unité d'Enregistrement ne peut avoir été crée avant "
"cette date"
-#: furnitures/models.py:743
+#: furnitures/models.py:781
msgid "Estimation of a \"Terminus Post Quem\""
msgstr "Estimation d'un « Terminus Post Quem »"
-#: furnitures/models.py:751 furnitures/models.py:752 furnitures/models.py:810
+#: furnitures/models.py:789 furnitures/models.py:790 furnitures/models.py:848
#: templates/sheet_contextrecord.html:6
msgid "Context Record"
msgstr "Unité d'Enregistrement"
-#: furnitures/models.py:754
+#: furnitures/models.py:792
msgid "Can view own Context Record"
msgstr "Peut voir sa propre Unité d'Enregistrement"
-#: furnitures/models.py:755
+#: furnitures/models.py:793
msgid "Can add own Context Record"
msgstr "Peut ajouter sa propre Unité d'Enregistrement"
-#: furnitures/models.py:756
+#: furnitures/models.py:794
msgid "Can change own Context Record"
msgstr "Peut changer sa propre Unité d'Enregistrement"
-#: furnitures/models.py:757
+#: furnitures/models.py:795
msgid "Can delete own Context Record"
msgstr "Peut supprimer sa propre Unité d'Enregistrement"
-#: furnitures/models.py:783
+#: furnitures/models.py:821
msgid "Source type"
msgstr "Type de source"
-#: furnitures/models.py:784
+#: furnitures/models.py:822
msgid "Source types"
msgstr "Types de source"
-#: furnitures/models.py:791 furnitures/models.py:1136
+#: furnitures/models.py:829 furnitures/models.py:1174
msgid "Source"
msgstr "Source"
-#: furnitures/models.py:792
+#: furnitures/models.py:830
msgid "Sources"
msgstr "Sources"
-#: furnitures/models.py:798
+#: furnitures/models.py:836
msgid "Recommendation"
msgstr "Recommendation"
-#: furnitures/models.py:800
+#: furnitures/models.py:838
msgid "Parent material"
msgstr "Matériau parent"
-#: furnitures/models.py:804
+#: furnitures/models.py:842
msgid "Material types"
msgstr "Types de matériaux"
-#: furnitures/models.py:819 furnitures/models.py:881
+#: furnitures/models.py:857 furnitures/models.py:919
msgid "Base item"
msgstr "Mobilier de base"
-#: furnitures/models.py:820
+#: furnitures/models.py:858
msgid "Base items"
msgstr "Mobiliers de base"
-#: furnitures/models.py:822
+#: furnitures/models.py:860
msgid "Can view own Base item"
msgstr "Peut voir son propre Mobilier de base"
-#: furnitures/models.py:823
+#: furnitures/models.py:861
msgid "Can add own Base item"
msgstr "Peut ajouter son propre Mobilier de base"
-#: furnitures/models.py:824
+#: furnitures/models.py:862
msgid "Can change own Base item"
msgstr "Peut changer son propre Mobilier de base"
-#: furnitures/models.py:825
+#: furnitures/models.py:863
msgid "Can delete own Base item"
msgstr "Peut supprimer son propre Mobilier de base"
-#: furnitures/models.py:841
+#: furnitures/models.py:879
msgid ":"
msgstr ": "
-#: furnitures/models.py:892
+#: furnitures/models.py:930
msgid "Upstream treatment"
msgstr "Traitement amont"
-#: furnitures/models.py:894
+#: furnitures/models.py:932
msgid "Downstream treatment"
msgstr "Traitement aval"
-#: furnitures/models.py:900
+#: furnitures/models.py:938
msgid "Items"
msgstr "Mobiliers"
-#: furnitures/models.py:902
+#: furnitures/models.py:940
msgid "Can view own Item"
msgstr "Peut voir son propre Mobilier"
-#: furnitures/models.py:903
+#: furnitures/models.py:941
msgid "Can add own Item"
msgstr "Peut ajouter son propre Mobilier"
-#: furnitures/models.py:904
+#: furnitures/models.py:942
msgid "Can change own Item"
msgstr "Peut changer son propre Mobilier"
-#: furnitures/models.py:905
+#: furnitures/models.py:943
msgid "Can delete own Item"
msgstr "Peut supprimer son propre Mobilier"
-#: furnitures/models.py:950 templates/sheet_ope.html:64
+#: furnitures/models.py:988 templates/sheet_ope.html:64
#: templates/sheet_ope_modif.html:64
msgid "Owner"
msgstr "Propriétaire"
-#: furnitures/models.py:956
+#: furnitures/models.py:994
msgid "Parcel owner"
msgstr "Propriétaire de parcelle"
-#: furnitures/models.py:957
+#: furnitures/models.py:995
msgid "Parcel owners"
msgstr "Propriétaires de parcelle"
-#: furnitures/models.py:965
+#: furnitures/models.py:1003
msgid "Warehouse types"
msgstr "Types de dépôts"
-#: furnitures/models.py:979
+#: furnitures/models.py:1017
msgid "Can view own Warehouse"
msgstr "Peut voir son propre Dépôt"
-#: furnitures/models.py:980
+#: furnitures/models.py:1018
msgid "Can add own Warehouse"
msgstr "Peut ajouter son propre Dépôt"
-#: furnitures/models.py:981
+#: furnitures/models.py:1019
msgid "Can change own Warehouse"
msgstr "Peut changer son propre Dépôt"
-#: furnitures/models.py:982
+#: furnitures/models.py:1020
msgid "Can delete own Warehouse"
msgstr "Peut supprimer son propre Dépôt"
-#: furnitures/models.py:992
+#: furnitures/models.py:1030
msgid "Intended to"
msgstr "Destiné à"
-#: furnitures/models.py:996
+#: furnitures/models.py:1034
msgid "Act types"
msgstr "Types d'acte"
-#: furnitures/models.py:1007
+#: furnitures/models.py:1045
msgid "Archaeological preventive operator"
msgstr "Opérateur d'archéologie préventive"
-#: furnitures/models.py:1009
+#: furnitures/models.py:1047
msgid "Person in charge of the scientific part"
msgstr "Responsable scientifique"
-#: furnitures/models.py:1024
+#: furnitures/models.py:1062
msgid "Administrative acts"
msgstr "Actes administratifs"
-#: furnitures/models.py:1026
+#: furnitures/models.py:1064
msgid "Can view own Administrative act"
msgstr "Peut voir son propre Acte administratif"
-#: furnitures/models.py:1027
+#: furnitures/models.py:1065
msgid "Can add own Administrative act"
msgstr "Peut ajouter son propre Acte administratif"
-#: furnitures/models.py:1028
+#: furnitures/models.py:1066
msgid "Can change own Administrative act"
msgstr "Peut changer son propre Acte administratif"
-#: furnitures/models.py:1029
+#: furnitures/models.py:1067
msgid "Can delete own Administrative act"
msgstr "Peut supprimer son propre Acte administratif"
-#: furnitures/models.py:1040
+#: furnitures/models.py:1078
msgid "Height"
msgstr "Hauteur"
-#: furnitures/models.py:1046
+#: furnitures/models.py:1084
msgid "Container types"
msgstr "Types de contenant"
-#: furnitures/models.py:1057
+#: furnitures/models.py:1095
msgid "Containers"
msgstr "Contenants"
-#: furnitures/models.py:1076
+#: furnitures/models.py:1114
msgid "Surface"
msgstr "Surface"
-#: furnitures/models.py:1077 templates/sheet_contextrecord.html:72
+#: furnitures/models.py:1115 templates/sheet_contextrecord.html:72
#: templates/sheet_contextrecord.html:86 templates/sheet_file.html:43
#: templates/sheet_ope.html:46 templates/sheet_ope.html.py:107
#: templates/sheet_ope_modif.html:46 templates/sheet_ope_modif.html.py:107
@@ -1290,57 +1328,57 @@ msgstr "Surface"
msgid "Localisation"
msgstr "Localisation"
-#: furnitures/models.py:1100
+#: furnitures/models.py:1138
msgid "Virtual"
msgstr "Virtuel"
-#: furnitures/models.py:1103
+#: furnitures/models.py:1141
msgid "Treatment types"
msgstr "Types de traitements"
-#: furnitures/models.py:1120
+#: furnitures/models.py:1158
msgid "Treatment"
msgstr "Traitement"
-#: furnitures/models.py:1123
+#: furnitures/models.py:1161
msgid "Can view own Treatment"
msgstr "Peut voir son propre Traitement"
-#: furnitures/models.py:1124
+#: furnitures/models.py:1162
msgid "Can add own Treatment"
msgstr "Peut ajouter son propre Traitement"
-#: furnitures/models.py:1125
+#: furnitures/models.py:1163
msgid "Can change own Treatment"
msgstr "Peut changer son propre Traitement"
-#: furnitures/models.py:1126
+#: furnitures/models.py:1164
msgid "Can delete own Treatment"
msgstr "Peut supprimer son propre traitement"
-#: furnitures/models.py:1131 furnitures/models.py:1137
+#: furnitures/models.py:1169 furnitures/models.py:1175
msgid "Author type"
msgstr "Type d'auteur"
-#: furnitures/models.py:1132
+#: furnitures/models.py:1170
msgid "Author types"
msgstr "Types d'auteur"
-#: furnitures/models.py:1140
+#: furnitures/models.py:1178
msgid "Author"
msgstr "Auteur"
-#: furnitures/models.py:1141 templates/sheet_contextrecord.html:85
+#: furnitures/models.py:1179 templates/sheet_contextrecord.html:85
#: templates/sheet_ope.html:106 templates/sheet_ope_modif.html:106
#: templates/sheet_operation.html:106
msgid "Authors"
msgstr "Auteurs"
-#: furnitures/models.py:1155
+#: furnitures/models.py:1193
msgid "Property"
msgstr "Propriété"
-#: furnitures/models.py:1156
+#: furnitures/models.py:1194
msgid "Properties"
msgstr "Propriétés"
@@ -1359,35 +1397,36 @@ msgstr "Non"
msgid "Details"
msgstr "Détails"
-#: furnitures/views.py:511 furnitures/views.py:541
+#: furnitures/views.py:511 furnitures/views.py:544
msgid "Operation not permitted."
msgstr "Opération non permise"
#: furnitures/views.py:514
-msgid "New "
-msgstr "Nouveau "
+#, python-format
+msgid "New %s"
+msgstr "Nouveau %s"
-#: furnitures/widgets.py:38
+#: furnitures/widgets.py:39
msgid "Delete"
msgstr "Supprimer"
-#: furnitures/widgets.py:219
+#: furnitures/widgets.py:223
msgid "Search and select an item"
msgstr "Rechercher puis sélectionner un élément"
-#: furnitures/widgets.py:246
+#: furnitures/widgets.py:250
msgid "Export as CSV"
msgstr "Export en CSV"
-#: furnitures/widgets.py:257
+#: furnitures/widgets.py:261
msgid "No results"
msgstr "Pas de résultats"
-#: furnitures/widgets.py:257
+#: furnitures/widgets.py:261
msgid "Loading..."
msgstr "Chargement..."
-#: furnitures/widgets.py:258
+#: furnitures/widgets.py:262
msgid "Remove"
msgstr "Enlever"
@@ -1422,12 +1461,17 @@ msgid "Would you like to save them?"
msgstr "Voulez vous sauver ces informations ?"
#: templates/confirm_wizard.html:30 templates/default_wizard.html:17
-#: templates/default_wizard.html.py:33 templates/search.html:13
+#: templates/default_wizard.html.py:49 templates/search.html:13
#: templates/towns_wizard.html:18 templates/towns_wizard.html.py:37
msgid "Validate"
msgstr "Valider"
-#: templates/default_wizard.html:24 templates/search.html:20
+#: templates/default_wizard.html:26 templates/default_wizard.html.py:40
+#: templates/grid_form.html:6
+msgid "Help"
+msgstr "Aide"
+
+#: templates/default_wizard.html:32 templates/search.html:20
#: templates/towns_wizard.html:25
msgid "Add/Modify"
msgstr "Ajouter-Modifier"
@@ -2045,15 +2089,3 @@ msgid "You are now registered. Activation email sent."
msgstr ""
"Vous être maintenant enregistré. Un courriel d'activation de votre compte "
"vous a été envoyé."
-
-#~ msgid "General ID"
-#~ msgstr "Identifiant général"
-
-#~ msgid "General description"
-#~ msgstr "Description générale"
-
-#~ msgid "Administrative Act"
-#~ msgstr "Acte administratif"
-
-#~ msgid "No context record associated to parcel:"
-#~ msgstr "Pas d'Unité d'Enregistrement associée à cette parcelle :"
diff --git a/ishtar/templates/default_wizard.html b/ishtar/templates/default_wizard.html
index 33eac942c..752728ab3 100644
--- a/ishtar/templates/default_wizard.html
+++ b/ishtar/templates/default_wizard.html
@@ -21,9 +21,13 @@
{% for formsetform in form.forms %}
{% for field in formsetform %}
<tr{% if field.field.required %} class='required'{% endif %}>
- <th><label for="{{ field.label }}">{{ field.label_tag }}</th>
- <td> {{ field.errors }}{{field|safe}}</td>
- </tr>{% endfor %}
+ <th>{{ field.label_tag }}</th>
+ <td> {{ field.errors }}{{field|safe}}</td>{% if field.help_text %}
+ <td><a href="#{{field.name}}" class="help_display" title="{% trans "Help"%}">?</a></td>
+ </tr>
+ <tr class="help_text" id="{{field.name}}_help">
+ <td colspan="3"><div>{{field.help_text}}</div></td>
+ {%endif%}</tr>{% endfor %}
{% endfor %}
<tr class='modify'><td colspan="2"><button name="formset_modify" value="{{form_step}}">{% trans "Add/Modify" %}</button></td></tr></li>
</table>
@@ -31,9 +35,13 @@
<table>
{% for field in form %}
<tr{% if field.field.required %} class='required'{% endif %}>
- <th><label for="{{ field.label }}">{{ field.label_tag }}</th>
- <td> {{ field.errors }}{{field|safe}}</td>
- </tr>{% endfor %}
+ <th>{{ field.label_tag }}</th>
+ <td> {{ field.errors }}{{field|safe}}</td>{% if field.help_text %}
+ <td><a href="#{{field.name}}" class="help_display" title="{% trans "Help"%}">?</a></td>
+ </tr>
+ <tr class="help_text" id="{{field.name}}_help">
+ <td colspan="3"><div>{{field.help_text}}</div></td>
+ {%endif%}</tr>{% endfor %}
</table>
{% endif %}
<input type="hidden" name="{{ step_field }}" value="{{ step0 }}" />
diff --git a/ishtar/templates/grid_form.html b/ishtar/templates/grid_form.html
new file mode 100644
index 000000000..8c02197b4
--- /dev/null
+++ b/ishtar/templates/grid_form.html
@@ -0,0 +1,10 @@
+{% load i18n %}
+ {% for field in form %}
+ <tr{% if field.field.required %} class='required'{% endif %}>
+ <th>{{ field.label_tag }}</th>
+ <td> {{ field.errors }}{{field|safe}}</td>{% if field.help_text %}
+ <td><a href="#{{field.name}}" class="help_display" title="{% trans "Help"%}">?</a></td>
+ </tr>
+ <tr class="help_text" id="{{field.name}}_help">
+ <td colspan="3"><div>{{field.help_text}}</div></td>
+ {%endif%}</tr>{% endfor %}
diff --git a/static/js/ishtar.js b/static/js/ishtar.js
index b7b0403c8..26fbbd950 100644
--- a/static/js/ishtar.js
+++ b/static/js/ishtar.js
@@ -45,6 +45,12 @@ $("#main_menu ul li").live('click', function(){
$(this).find('ul').show('slow');
});
+/* manage help texts */
+$(".help_display").live("click", function(){
+ var help_text_id = $(this).attr("href") + "_help";
+ $(help_text_id).toggle();
+})
+
var last_window;
function load_window(url, speed){
diff --git a/static/media/style.css b/static/media/style.css
index 75a5f975d..e8c94c552 100644
--- a/static/media/style.css
+++ b/static/media/style.css
@@ -33,6 +33,12 @@ textarea{
height:80px;
}
+dt{
+ font-weight:bold;
+ color:#922;
+ padding:1em;
+}
+
td{
text-align:left;
}
@@ -165,7 +171,7 @@ ul#form_path button {
color:#D14;
border:none;
background-color:white;
- font-size: 11pt;
+ font-size: 1em;
cursor:pointer;
padding:0;
margin:0;
@@ -191,6 +197,7 @@ div.form {
padding:0.2em;
margin-left:auto;
margin-right:auto;
+ width:600px;
}
.form table th{
@@ -212,6 +219,25 @@ div.form {
border:0;
}
+.help_text{
+ display:none;
+ font-size:0.9em;
+}
+
+.help_text div{
+ background-color:#FFF;
+ margin:1em;;
+ padding:0 1em;
+ -moz-border-radius:8px;
+ -webkit-border-radius:8px;
+ border-radius:8px;
+ border:1px solid #AAA;
+}
+
+.help_text .example{
+ font-style:italic;
+}
+
.info{
margin-left:auto;
margin-right:auto;