summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--archaeological_context_records/forms.py2
-rw-r--r--archaeological_context_records/ishtar_menu.py1
-rw-r--r--archaeological_context_records/locale/django.pot37
-rw-r--r--archaeological_context_records/models.py14
-rw-r--r--archaeological_context_records/templates/ishtar/sheet_contextrecord.html8
-rw-r--r--archaeological_files/forms.py2
-rw-r--r--archaeological_files/ishtar_menu.py2
-rw-r--r--archaeological_files/locale/django.pot37
-rw-r--r--archaeological_files/models.py2
-rw-r--r--archaeological_files/templates/ishtar/sheet_file.html2
-rw-r--r--archaeological_files_pdl/locale/django.pot7
-rw-r--r--archaeological_files_pdl/templates/ishtar/wizard/file_confirm_wizard.html4
-rw-r--r--archaeological_finds/forms.py9
-rw-r--r--archaeological_finds/ishtar_menu.py1
-rw-r--r--archaeological_finds/locale/django.pot288
-rw-r--r--archaeological_finds/models.py40
-rw-r--r--archaeological_finds/views.py6
-rw-r--r--archaeological_operations/admin.py20
-rw-r--r--archaeological_operations/forms.py83
-rw-r--r--archaeological_operations/import_from_csv.py6
-rw-r--r--archaeological_operations/import_from_dbf.py6
-rw-r--r--archaeological_operations/ishtar_menu.py99
-rw-r--r--archaeological_operations/locale/django.pot531
-rw-r--r--archaeological_operations/models.py443
-rw-r--r--archaeological_operations/templates/ishtar/blocks/window_tables/archaeologicalsites.html20
-rw-r--r--archaeological_operations/templates/ishtar/sheet_operation.html17
-rw-r--r--archaeological_operations/templatetags/window_ope_tables.py9
-rw-r--r--archaeological_operations/views.py15
-rw-r--r--archaeological_operations/wizards.py8
-rw-r--r--archaeological_warehouse/ishtar_menu.py1
-rw-r--r--archaeological_warehouse/locale/django.pot6
-rw-r--r--archaeological_warehouse/models.py2
-rw-r--r--example_project/local_settings.py.sample12
-rw-r--r--example_project/settings.py20
-rw-r--r--example_project/urls.py8
-rw-r--r--ishtar_common/admin.py8
-rw-r--r--ishtar_common/context_processors.py14
-rw-r--r--ishtar_common/fixtures/groups_person_types-SRA-fr.json22
-rw-r--r--ishtar_common/locale/django.pot525
-rw-r--r--ishtar_common/management/commands/update_specific_importers.py7
-rw-r--r--ishtar_common/menu_base.py31
-rw-r--r--ishtar_common/migrations/0048_auto__add_ishtarsiteprofile.py374
-rw-r--r--ishtar_common/models.py174
-rw-r--r--ishtar_common/static/media/style.css2
-rw-r--r--ishtar_common/templates/blocks/comma_list.html1
-rw-r--r--ishtar_common/templates/ishtar/blocks/window_tables/static_documents.html11
-rw-r--r--ishtar_common/templates/ishtar/dashboards/dashboard_main_detail.html2
-rw-r--r--ishtar_common/templates/ishtar/sheet_person.html6
-rw-r--r--ishtar_common/templates/sheet_ope.html6
-rw-r--r--ishtar_common/templatetags/window_tables.py54
-rw-r--r--ishtar_common/tests.py156
-rw-r--r--ishtar_common/utils.py3
-rw-r--r--ishtar_common/views.py39
-rw-r--r--ishtar_common/widgets.py18
-rw-r--r--translations/fr/archaeological_context_records.po55
-rw-r--r--translations/fr/archaeological_files.po75
-rw-r--r--translations/fr/archaeological_files_pdl.po20
-rw-r--r--translations/fr/archaeological_finds.po316
-rw-r--r--translations/fr/archaeological_operations.po570
-rw-r--r--translations/fr/archaeological_warehouse.po18
-rw-r--r--translations/fr/ishtar_common.po611
61 files changed, 2809 insertions, 2077 deletions
diff --git a/archaeological_context_records/forms.py b/archaeological_context_records/forms.py
index 98da5ce10..e9b5994eb 100644
--- a/archaeological_context_records/forms.py
+++ b/archaeological_context_records/forms.py
@@ -156,7 +156,7 @@ class RecordFormGeneral(forms.Form):
if 'pk' in cleaned_data and cleaned_data['pk']:
cr = cr.exclude(pk=cleaned_data['pk'])
if cr.count():
- raise forms.ValidationError(_(u"This ID already exist for "
+ raise forms.ValidationError(_(u"This ID already exists for "
u"this operation."))
return cleaned_data
diff --git a/archaeological_context_records/ishtar_menu.py b/archaeological_context_records/ishtar_menu.py
index 826f99b0f..8e8f32218 100644
--- a/archaeological_context_records/ishtar_menu.py
+++ b/archaeological_context_records/ishtar_menu.py
@@ -27,6 +27,7 @@ import models
MENU_SECTIONS = [
(40, SectionItem('record_management', _(u"Context record"),
+ profile_restriction='context_record',
childs=[MenuItem('record_search', _(u"Search"),
model=models.ContextRecord,
access_controls=['view_contextrecord',
diff --git a/archaeological_context_records/locale/django.pot b/archaeological_context_records/locale/django.pot
index 8b88d7cc3..8a74c7110 100644
--- a/archaeological_context_records/locale/django.pot
+++ b/archaeological_context_records/locale/django.pot
@@ -2,8 +2,7 @@
# Copyright (C) 2010-2015
# This file is distributed under the same license as the Ishtar package.
# Étienne Loks <etienne.loks at peacefrogs net>, 2010-2015.
-# Étienne Loks <etienne.loks@iggdrasil.net>, 2015. #zanata
-# Étienne Loks <etienne.loks@iggdrasil.net>, 2016. #zanata
+# Valérie-Emma Leroux <emma@iggdrasil.net>, 2016. #zanata
msgid ""
msgstr ""
@@ -87,7 +86,7 @@ msgid "Location"
msgstr ""
#: forms.py:159
-msgid "This ID already exist for this operation."
+msgid "This ID already exists for this operation."
msgstr ""
#: forms.py:165 forms.py:189 models.py:59
@@ -195,27 +194,27 @@ msgstr ""
msgid "You should select a document."
msgstr ""
-#: ishtar_menu.py:30
+#: ishtar_menu.py:31
msgid "Search"
msgstr ""
-#: ishtar_menu.py:34
+#: ishtar_menu.py:35
msgid "Creation"
msgstr ""
-#: ishtar_menu.py:38 ishtar_menu.py:55
+#: ishtar_menu.py:39 ishtar_menu.py:56
msgid "Modification"
msgstr ""
-#: ishtar_menu.py:42 ishtar_menu.py:61
+#: ishtar_menu.py:43 ishtar_menu.py:62
msgid "Deletion"
msgstr ""
-#: ishtar_menu.py:46
+#: ishtar_menu.py:47
msgid "Documentation"
msgstr ""
-#: ishtar_menu.py:49
+#: ishtar_menu.py:50
msgid "Add"
msgstr ""
@@ -248,27 +247,27 @@ msgid "Parent unit"
msgstr ""
#: models.py:76
-msgid "Type Unit"
+msgid "Unit Type"
msgstr ""
#: models.py:77
-msgid "Types Unit"
+msgid "Unit Types"
msgstr ""
#: models.py:88
-msgid "Type Activity"
+msgid "Activity Type"
msgstr ""
#: models.py:89
-msgid "Types Activity"
+msgid "Activity Types"
msgstr ""
#: models.py:100
-msgid "Type Identification"
+msgid "Identification Type"
msgstr ""
#: models.py:101
-msgid "Types Identification"
+msgid "Identification Types"
msgstr ""
#: models.py:119
@@ -316,7 +315,7 @@ msgid "Context Record"
msgstr ""
#: models.py:175
-msgid "Can view all Context Record"
+msgid "Can view all Context Records"
msgstr ""
#: models.py:177
@@ -500,7 +499,7 @@ msgid "TAQ:"
msgstr ""
#: templates/ishtar/sheet_contextrecord.html:62
-msgid "TAQ estimated:"
+msgid "Estimated TAQ:"
msgstr ""
#: templates/ishtar/sheet_contextrecord.html:63
@@ -508,7 +507,7 @@ msgid "TPQ:"
msgstr ""
#: templates/ishtar/sheet_contextrecord.html:64
-msgid "TPQ estimated:"
+msgid "Estimated TPQ:"
msgstr ""
#: templates/ishtar/sheet_contextrecord.html:68
@@ -528,7 +527,7 @@ msgid "Details"
msgstr ""
#: templates/ishtar/sheet_contextrecord.html:95
-msgid "Operation resume"
+msgid "Operation summary"
msgstr ""
#: templates/ishtar/sheet_contextrecord.html:96
diff --git a/archaeological_context_records/models.py b/archaeological_context_records/models.py
index 52d976cfd..bd18ab5d4 100644
--- a/archaeological_context_records/models.py
+++ b/archaeological_context_records/models.py
@@ -73,8 +73,8 @@ class Unit(GeneralType):
blank=True, null=True)
class Meta:
- verbose_name = _(u"Type Unit")
- verbose_name_plural = _(u"Types Unit")
+ verbose_name = _(u"Unit Type")
+ verbose_name_plural = _(u"Unit Types")
ordering = ('order',)
def __unicode__(self):
@@ -85,8 +85,8 @@ class ActivityType(GeneralType):
order = models.IntegerField(_(u"Order"))
class Meta:
- verbose_name = _(u"Type Activity")
- verbose_name_plural = _(u"Types Activity")
+ verbose_name = _(u"Activity Type")
+ verbose_name_plural = _(u"Activity Types")
ordering = ('order',)
def __unicode__(self):
@@ -97,8 +97,8 @@ class IdentificationType(GeneralType):
order = models.IntegerField(_(u"Order"))
class Meta:
- verbose_name = _(u"Type Identification")
- verbose_name_plural = _(u"Types Identification")
+ verbose_name = _(u"Identification Type")
+ verbose_name_plural = _(u"Identification Types")
ordering = ('order',)
def __unicode__(self):
@@ -172,7 +172,7 @@ class ContextRecord(BaseHistorizedItem, OwnPerms, ShortMenuItem):
verbose_name = _(u"Context Record")
verbose_name_plural = _(u"Context Record")
permissions = (
- ("view_contextrecord", ugettext(u"Can view all Context Record")),
+ ("view_contextrecord", ugettext(u"Can view all Context Records")),
("view_own_contextrecord",
ugettext(u"Can view own Context Record")),
("add_own_contextrecord",
diff --git a/archaeological_context_records/templates/ishtar/sheet_contextrecord.html b/archaeological_context_records/templates/ishtar/sheet_contextrecord.html
index bca027414..f7296848b 100644
--- a/archaeological_context_records/templates/ishtar/sheet_contextrecord.html
+++ b/archaeological_context_records/templates/ishtar/sheet_contextrecord.html
@@ -59,9 +59,9 @@
{% if item.taq or item.taq_estimated or item.tpq or item.tpq_estimated %}
<h3>{% trans "Datations"%}</h3>
{% if item.taq %}<p><label>{% trans "TAQ:" %}</label> <span class='value'>{{ item.taq }}</span></p>{%endif%}
-{% if item.taq_estimated %}<p><label>{% trans "TAQ estimated:" %}</label> <span class='value'>{{ item.taq_estimated }}</span></p>{%endif%}
+{% if item.taq_estimated %}<p><label>{% trans "Estimated TAQ:" %}</label> <span class='value'>{{ item.taq_estimated }}</span></p>{%endif%}
{% if item.tpq %}<p><label>{% trans "TPQ:" %}</label> <span class='value'>{{ item.tpq }}</span></p>{%endif%}
-{% if item.tpq_estimated %}<p><label>{% trans "TPQ estimated:" %}</label> <span class='value'>{{ item.tpq_estimated }}</span></p>{%endif%}
+{% if item.tpq_estimated %}<p><label>{% trans "Estimated TPQ:" %}</label> <span class='value'>{{ item.tpq_estimated }}</span></p>{%endif%}
{%endif%}
{% if item.right_relations.count %}
@@ -92,7 +92,7 @@
{% endif %}
{% if item.operation %}
-<h3>{% trans "Operation resume"%}</h3>
+<h3>{% trans "Operation summary"%}</h3>
<p><label>{%trans "Year:"%}</label> <span class='value'>{{ item.operation.year }}</span></p>
{% field "Numerical reference" item.operation.operation_code %}
{% if item.operation.code_patriarche %}
@@ -128,7 +128,7 @@
{% trans "Finds" as finds %}
{% if item.base_finds.count %}
-{% dynamic_table_document finds 'finds_for_ope' 'base_finds__context_record' item.pk 'TABLE_COLS_FOR_OPE' %}
+{% dynamic_table_document finds 'finds_for_ope' 'base_finds__context_record' item.pk 'TABLE_COLS_FOR_OPE' output %}
{% endif %}
{% trans "Documents from associated finds" as find_docs %}
diff --git a/archaeological_files/forms.py b/archaeological_files/forms.py
index 8b3513438..128fd2ebc 100644
--- a/archaeological_files/forms.py
+++ b/archaeological_files/forms.py
@@ -56,7 +56,7 @@ class FileSelect(TableSelect):
parcel = ParcelField(label=_("Parcel (section/number)"))
if settings.ISHTAR_DPTS:
towns__numero_insee__startswith = forms.ChoiceField(
- label="Department", choices=[])
+ label=_(u"Department"), choices=[])
name = forms.CharField(label=_(u"File name"), max_length=200)
file_type = forms.ChoiceField(label=_("File type"), choices=[])
end_date = forms.NullBooleanField(label=_(u"Is active?"))
diff --git a/archaeological_files/ishtar_menu.py b/archaeological_files/ishtar_menu.py
index b120d18d1..326fec23b 100644
--- a/archaeological_files/ishtar_menu.py
+++ b/archaeological_files/ishtar_menu.py
@@ -31,6 +31,7 @@ MENU_SECTIONS = [
(20,
SectionItem(
'file_management', _(u"Archaeological file"),
+ profile_restriction='files',
childs=[
MenuItem(
'file_search', _(u"Search"),
@@ -79,6 +80,7 @@ MENU_SECTIONS = [
(100,
SectionItem(
'dashboard', _(u"Dashboard"),
+ profile_restriction='files',
childs=[MenuItem('dashboard_main', _(u"General informations"),
model=models.File,
access_controls=['change_file', 'change_own_file']),
diff --git a/archaeological_files/locale/django.pot b/archaeological_files/locale/django.pot
index b1732ae06..ef6db9a16 100644
--- a/archaeological_files/locale/django.pot
+++ b/archaeological_files/locale/django.pot
@@ -3,6 +3,7 @@
# This file is distributed under the same license as the Ishtar package.
# Étienne Loks <etienne.loks at peacefrogs net>, 2010-2014.
# Étienne Loks <etienne.loks@iggdrasil.net>, 2015. #zanata
+# Valérie-Emma Leroux <emma@iggdrasil.net>, 2016. #zanata
# Étienne Loks <etienne.loks@iggdrasil.net>, 2016. #zanata
msgid ""
msgstr ""
@@ -24,6 +25,10 @@ msgstr ""
msgid "Parcel (section/number)"
msgstr ""
+#: forms.py:59 forms.py:405 forms.py:432 models.py:518
+msgid "Department"
+msgstr ""
+
#: forms.py:60 forms.py:441
msgid "File name"
msgstr ""
@@ -207,10 +212,6 @@ msgstr ""
msgid "Object (full text search)"
msgstr ""
-#: forms.py:405 forms.py:432 models.py:518
-msgid "Department"
-msgstr ""
-
#: forms.py:427
msgid "Indexed?"
msgstr ""
@@ -251,47 +252,47 @@ msgstr ""
msgid "Archaeological file"
msgstr ""
-#: ishtar_menu.py:36 ishtar_menu.py:59
+#: ishtar_menu.py:37 ishtar_menu.py:60
msgid "Search"
msgstr ""
-#: ishtar_menu.py:40
+#: ishtar_menu.py:41
msgid "Creation"
msgstr ""
-#: ishtar_menu.py:44 ishtar_menu.py:67
+#: ishtar_menu.py:45 ishtar_menu.py:68
msgid "Modification"
msgstr ""
-#: ishtar_menu.py:48
+#: ishtar_menu.py:49
msgid "Closing"
msgstr ""
-#: ishtar_menu.py:52 ishtar_menu.py:71
+#: ishtar_menu.py:53 ishtar_menu.py:72
msgid "Deletion"
msgstr ""
-#: ishtar_menu.py:56
+#: ishtar_menu.py:57
msgid "Administrative act"
msgstr ""
-#: ishtar_menu.py:63
+#: ishtar_menu.py:64
msgid "Add"
msgstr ""
-#: ishtar_menu.py:75
+#: ishtar_menu.py:76
msgid "Documents"
msgstr ""
-#: ishtar_menu.py:81
+#: ishtar_menu.py:82
msgid "Dashboard"
msgstr ""
-#: ishtar_menu.py:82
+#: ishtar_menu.py:84
msgid "General informations"
msgstr ""
-#: ishtar_menu.py:85 models.py:186
+#: ishtar_menu.py:87 models.py:186
#: templates/ishtar/dashboards/dashboard_file.html:8
msgid "Archaeological files"
msgstr ""
@@ -377,7 +378,7 @@ msgid "Imported line"
msgstr ""
#: models.py:188
-msgid "Can view all Archaelogical file"
+msgid "Can view all Archaelogical files"
msgstr ""
#: models.py:189
@@ -456,7 +457,7 @@ msgstr ""
msgid "Associated operations"
msgstr ""
-#: wizards.py:141 wizards.py:151
+#: wizards.py:142 wizards.py:152
msgid "Archaelogical file"
msgstr ""
@@ -584,7 +585,7 @@ msgid "Associated parcels"
msgstr ""
#: templates/ishtar/sheet_file.html:118
-msgid "Administrativ acts"
+msgid "Administrative acts"
msgstr ""
#: templates/ishtar/sheet_file.html:124 templates/ishtar/sheet_file.html:151
diff --git a/archaeological_files/models.py b/archaeological_files/models.py
index bd6a39340..519d3ced3 100644
--- a/archaeological_files/models.py
+++ b/archaeological_files/models.py
@@ -185,7 +185,7 @@ class File(BaseHistorizedItem, OwnPerms, ValueGetter, ShortMenuItem,
verbose_name = _(u"Archaeological file")
verbose_name_plural = _(u"Archaeological files")
permissions = (
- ("view_file", ugettext(u"Can view all Archaelogical file")),
+ ("view_file", ugettext(u"Can view all Archaelogical files")),
("view_own_file", ugettext(u"Can view own Archaelogical file")),
("add_own_file", ugettext(u"Can add own Archaelogical file")),
("change_own_file",
diff --git a/archaeological_files/templates/ishtar/sheet_file.html b/archaeological_files/templates/ishtar/sheet_file.html
index c14327b5b..3272e87e3 100644
--- a/archaeological_files/templates/ishtar/sheet_file.html
+++ b/archaeological_files/templates/ishtar/sheet_file.html
@@ -115,7 +115,7 @@
{% trans "Associated parcels" as parcels_label %}
{% include "ishtar/blocks/window_tables/parcels.html" %}
-{% trans "Administrativ acts" as administrativeacts_label %}
+{% trans "Administrative acts" as administrativeacts_label %}
{% table_administrativact administrativeacts_label item.administrative_act.all %}
<table class='simple'>
diff --git a/archaeological_files_pdl/locale/django.pot b/archaeological_files_pdl/locale/django.pot
index e7592e95d..ebafd55d6 100644
--- a/archaeological_files_pdl/locale/django.pot
+++ b/archaeological_files_pdl/locale/django.pot
@@ -3,6 +3,7 @@
# This file is distributed under the same license as the Ishtar package.
# Étienne Loks <etienne.loks at peacefrogs net>, 2014.
# Étienne Loks <etienne.loks@iggdrasil.net>, 2015. #zanata
+# Valérie-Emma Leroux <emma@iggdrasil.net>, 2016. #zanata
msgid ""
msgstr ""
@@ -133,7 +134,7 @@ msgid "File followed by"
msgstr ""
#: templates/ishtar/wizard/file_confirm_wizard.html:8
-msgid "These(s) file(s) have the same numeric index."
+msgid "The following files have the same numeric index as this file:"
msgstr ""
#: templates/ishtar/wizard/file_confirm_wizard.html:11
@@ -142,7 +143,9 @@ msgid "Details"
msgstr ""
#: templates/ishtar/wizard/file_confirm_wizard.html:19
-msgid "These(s) file(s) are in the same town and have parcel(s) in common."
+msgid ""
+"The following files are in the same town and have parcels in common with "
+"this file:"
msgstr ""
#: templates/ishtar/wizard/wizard_person_orga.html:28
diff --git a/archaeological_files_pdl/templates/ishtar/wizard/file_confirm_wizard.html b/archaeological_files_pdl/templates/ishtar/wizard/file_confirm_wizard.html
index 18b8378de..fd85de473 100644
--- a/archaeological_files_pdl/templates/ishtar/wizard/file_confirm_wizard.html
+++ b/archaeological_files_pdl/templates/ishtar/wizard/file_confirm_wizard.html
@@ -5,7 +5,7 @@
{% block "warning_informations" %}
{% for file in numeric_reference_files %}
{% if forloop.first %}
-<p class='alert'><label>{% trans "These(s) file(s) have the same numeric index." %}</label></p>
+<p class='alert'><label>{% trans "The following files have the same numeric index as this file:" %}</label></p>
<ul>
{% endif%}
<li>{{file}} <a href='#' onclick='load_window("{% url 'show-file' file.pk '' %}", "{{model_name}}");' class='display_details'>{% trans "Details" %}</a></li>
@@ -16,7 +16,7 @@
{% endfor %}
{% for file in similar_files %}
{% if forloop.first %}
-<p class='alert'><label>{% trans "These(s) file(s) are in the same town and have parcel(s) in common." %}</label></p>
+<p class='alert'><label>{% trans "The following files are in the same town and have parcels in common with this file:" %}</label></p>
<ul>
{% endif%}
<li>{{file}} <a href='#' onclick='load_window("{% url 'show-file' file.pk '' %}", "{{model_name}}");' class='display_details'>{% trans "Details" %}</a></li>
diff --git a/archaeological_finds/forms.py b/archaeological_finds/forms.py
index 1498d4028..83a9e2da3 100644
--- a/archaeological_finds/forms.py
+++ b/archaeological_finds/forms.py
@@ -1,6 +1,6 @@
#!/usr/bin/env python
# -*- coding: utf-8 -*-
-# Copyright (C) 2010-2015 Étienne Loks <etienne.loks_AT_peacefrogsDOTnet>
+# Copyright (C) 2010-2016 Étienne Loks <etienne.loks_AT_peacefrogsDOTnet>
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as
@@ -51,7 +51,7 @@ class FindForm(forms.Form):
'preservation_to_consider': models.PreservationType,
'integritie': models.IntegrityType}
label = forms.CharField(
- label=_(u"Free-ID"),
+ label=_(u"Free ID"),
validators=[validators.MaxLengthValidator(60)])
previous_id = forms.CharField(label=_("Previous ID"), required=False)
description = forms.CharField(label=_("Description"),
@@ -148,6 +148,9 @@ DatingFormSet.form_label = _("Dating")
class FindSelect(TableSelect):
+ base_finds__cache_short_id = forms.CharField(label=_(u"Short ID"))
+ base_finds__cache_complete_id = forms.CharField(label=_(u"Complete ID"))
+ label = forms.CharField(label=_(u"Free ID"))
base_finds__context_record__parcel__town = get_town_field()
base_finds__context_record__operation__year = forms.IntegerField(
label=_(u"Year"))
@@ -292,7 +295,7 @@ class ResultFindForm(forms.Form):
form_label = _(u"Resulting find")
associated_models = {'material_type': models.MaterialType}
label = forms.CharField(
- label=_(u"Free-ID"),
+ label=_(u"Free ID"),
validators=[validators.MaxLengthValidator(60)])
description = forms.CharField(label=_(u"Precise description"),
widget=forms.Textarea)
diff --git a/archaeological_finds/ishtar_menu.py b/archaeological_finds/ishtar_menu.py
index a688adbb4..ea8cd2c1f 100644
--- a/archaeological_finds/ishtar_menu.py
+++ b/archaeological_finds/ishtar_menu.py
@@ -29,6 +29,7 @@ MENU_SECTIONS = [
(50,
SectionItem(
'find_management', _(u"Find"),
+ profile_restriction='find',
childs=[
MenuItem(
'find_search', _(u"Search"),
diff --git a/archaeological_finds/locale/django.pot b/archaeological_finds/locale/django.pot
index ff9f8a546..6ff8bc10a 100644
--- a/archaeological_finds/locale/django.pot
+++ b/archaeological_finds/locale/django.pot
@@ -3,101 +3,101 @@
# This file is distributed under the same license as the Ishtar package.
# Étienne Loks <etienne.loks at peacefrogs net>, 2010-2015.
# Étienne Loks <etienne.loks@iggdrasil.net>, 2015. #zanata
-# Étienne Loks <etienne.loks@iggdrasil.net>, 2016. #zanata
+# Valérie-Emma Leroux <emma@iggdrasil.net>, 2016. #zanata
msgid ""
msgstr ""
-#: forms.py:45 ishtar_menu.py:31 models.py:346 models.py:542 models.py:612
+#: forms.py:45 ishtar_menu.py:31 models.py:341 models.py:537 models.py:605
#: templates/ishtar/sheet_find.html:6
msgid "Find"
msgstr ""
-#: forms.py:54 forms.py:295 models.py:108 models.py:288
-msgid "Free-ID"
+#: forms.py:54 forms.py:153 forms.py:298 models.py:104 models.py:284
+msgid "Free ID"
msgstr ""
-#: forms.py:56 models.py:330
+#: forms.py:56 models.py:325
msgid "Previous ID"
msgstr ""
-#: forms.py:57 forms.py:171 forms.py:235 models.py:111 models.py:289
-#: models.py:565 templates/ishtar/sheet_find.html:87
+#: forms.py:57 forms.py:174 forms.py:238 models.py:107 models.py:285
+#: models.py:559 templates/ishtar/sheet_find.html:87
msgid "Description"
msgstr ""
-#: forms.py:60 forms.py:173 models.py:122
+#: forms.py:60 forms.py:176 models.py:118
msgid "Batch/object"
msgstr ""
-#: forms.py:62 models.py:316
+#: forms.py:62 models.py:311
msgid "Is complete?"
msgstr ""
-#: forms.py:65 forms.py:164 forms.py:299 models.py:50
+#: forms.py:65 forms.py:167 forms.py:302 models.py:46
msgid "Material type"
msgstr ""
-#: forms.py:66 forms.py:168 models.py:60 models.py:293
+#: forms.py:66 forms.py:171 models.py:56 models.py:289
msgid "Conservatory state"
msgstr ""
-#: forms.py:69 models.py:85 models.py:319
+#: forms.py:69 models.py:81 models.py:314
msgid "Object types"
msgstr ""
-#: forms.py:71 forms.py:167 models.py:67
+#: forms.py:71 forms.py:170 models.py:63
msgid "Preservation type"
msgstr ""
-#: forms.py:74 forms.py:170 models.py:321
+#: forms.py:74 forms.py:173 models.py:316
msgid "Integrity"
msgstr ""
-#: forms.py:76 models.py:322
+#: forms.py:76 models.py:317
msgid "Length (cm)"
msgstr ""
-#: forms.py:77 models.py:323
+#: forms.py:77 models.py:318
msgid "Width (cm)"
msgstr ""
-#: forms.py:78 models.py:324
+#: forms.py:78 models.py:319
msgid "Height (cm)"
msgstr ""
-#: forms.py:79 models.py:325
+#: forms.py:79 models.py:320
msgid "Diameter (cm)"
msgstr ""
-#: forms.py:80 forms.py:300 models.py:298
+#: forms.py:80 forms.py:303 models.py:294
msgid "Volume (l)"
msgstr ""
-#: forms.py:81 forms.py:301 models.py:299
+#: forms.py:81 forms.py:304 models.py:295
msgid "Weight (g)"
msgstr ""
-#: forms.py:82 forms.py:302 models.py:302
+#: forms.py:82 forms.py:305 models.py:298
msgid "Find number"
msgstr ""
-#: forms.py:83 models.py:326
+#: forms.py:83 models.py:321
msgid "Mark"
msgstr ""
-#: forms.py:84 forms.py:175 models.py:332
+#: forms.py:84 forms.py:178 models.py:327
msgid "Check"
msgstr ""
-#: forms.py:86 models.py:334
+#: forms.py:86 models.py:329
msgid "Check date"
msgstr ""
-#: forms.py:87 models.py:112 models.py:327 models.py:566
+#: forms.py:87 models.py:108 models.py:322 models.py:560
msgid "Comment"
msgstr ""
-#: forms.py:90 models.py:328
+#: forms.py:90 models.py:323
msgid "Comment on dating"
msgstr ""
@@ -112,19 +112,19 @@ msgid ""
"p>"
msgstr ""
-#: forms.py:119 forms.py:147 models.py:310
+#: forms.py:119 forms.py:147 models.py:306
msgid "Dating"
msgstr ""
-#: forms.py:124 forms.py:162
+#: forms.py:124 forms.py:165
msgid "Period"
msgstr ""
-#: forms.py:125 forms.py:237 models.py:577 models.py:618
+#: forms.py:125 forms.py:240 models.py:570 models.py:610
msgid "Start date"
msgstr ""
-#: forms.py:127 forms.py:239 models.py:578 models.py:619
+#: forms.py:127 forms.py:242 models.py:571 models.py:611
msgid "End date"
msgstr ""
@@ -140,419 +140,419 @@ msgstr ""
msgid "Precise dating"
msgstr ""
-#: forms.py:153
+#: forms.py:151 models.py:123
+msgid "Short ID"
+msgstr ""
+
+#: forms.py:152 models.py:126 templates/ishtar/sheet_find.html:71
+msgid "Complete ID"
+msgstr ""
+
+#: forms.py:156
msgid "Year"
msgstr ""
-#: forms.py:155
+#: forms.py:158
msgid "Code PATRIARCHE"
msgstr ""
-#: forms.py:157
+#: forms.py:160
msgid "Archaelogical site"
msgstr ""
-#: forms.py:165 models.py:84
+#: forms.py:168 models.py:80
msgid "Object type"
msgstr ""
-#: forms.py:176
+#: forms.py:179
msgid "Has an image?"
msgstr ""
-#: forms.py:205 views.py:97
+#: forms.py:208 views.py:103
msgid "Find search"
msgstr ""
-#: forms.py:218
+#: forms.py:221
msgid "Base treatment"
msgstr ""
-#: forms.py:222 models.py:554 models.py:568
+#: forms.py:225 models.py:549 models.py:562
msgid "Treatment type"
msgstr ""
-#: forms.py:224 models.py:575 models.py:616
+#: forms.py:227 models.py:568 models.py:608
msgid "Person"
msgstr ""
-#: forms.py:230 models.py:570
+#: forms.py:233 models.py:563
msgid "Location"
msgstr ""
-#: forms.py:251
+#: forms.py:254
msgid "Upstream finds"
msgstr ""
-#: forms.py:253 models.py:347
+#: forms.py:256 models.py:342
msgid "Finds"
msgstr ""
-#: forms.py:263
+#: forms.py:266
msgid "You should at least select one archaeological find."
msgstr ""
-#: forms.py:292
+#: forms.py:295
msgid "Resulting find"
msgstr ""
-#: forms.py:297
+#: forms.py:300
msgid "Precise description"
msgstr ""
-#: forms.py:311
+#: forms.py:314
msgid "Resulting finds"
msgstr ""
-#: forms.py:315
+#: forms.py:318
msgid "Upstream find"
msgstr ""
-#: forms.py:322
+#: forms.py:325
msgid "Archaeological find search"
msgstr ""
-#: forms.py:324
+#: forms.py:327
msgid "You should select an archaeological find."
msgstr ""
-#: forms.py:329
+#: forms.py:332
msgid "Year of the operation"
msgstr ""
-#: forms.py:331
+#: forms.py:334
msgid "Period of the archaelogical find"
msgstr ""
-#: forms.py:333
+#: forms.py:336
msgid "Material type of the archaelogical find"
msgstr ""
-#: forms.py:335
+#: forms.py:338
msgid "Description of the archaelogical find"
msgstr ""
-#: forms.py:347
+#: forms.py:350
msgid "Documentation search"
msgstr ""
-#: forms.py:349
+#: forms.py:352
msgid "You should select a document."
msgstr ""
-#: ishtar_menu.py:34
+#: ishtar_menu.py:35
msgid "Search"
msgstr ""
-#: ishtar_menu.py:39 ishtar_menu.py:56
+#: ishtar_menu.py:40 ishtar_menu.py:57
msgid "Creation"
msgstr ""
-#: ishtar_menu.py:44 ishtar_menu.py:61
+#: ishtar_menu.py:45 ishtar_menu.py:62
msgid "Modification"
msgstr ""
-#: ishtar_menu.py:53
+#: ishtar_menu.py:54
msgid "Documentation"
msgstr ""
-#: ishtar_menu.py:66
+#: ishtar_menu.py:67
msgid "Deletion"
msgstr ""
-#: models.py:43
+#: models.py:39
msgid "Code"
msgstr ""
-#: models.py:44
+#: models.py:40
msgid "Recommendation"
msgstr ""
-#: models.py:47
+#: models.py:43
msgid "Parent material"
msgstr ""
-#: models.py:51 models.py:291
+#: models.py:47 models.py:287
msgid "Material types"
msgstr ""
-#: models.py:57
+#: models.py:53
msgid "Parent conservatory state"
msgstr ""
-#: models.py:61
+#: models.py:57
msgid "Conservatory states"
msgstr ""
-#: models.py:68
+#: models.py:64
msgid "Preservation types"
msgstr ""
-#: models.py:74 models.py:75
+#: models.py:70 models.py:71
msgid "Integrity type"
msgstr ""
-#: models.py:81
+#: models.py:77
msgid "Parent"
msgstr ""
-#: models.py:100
+#: models.py:96
msgid "Unknow"
msgstr ""
-#: models.py:101
+#: models.py:97
msgid "Object"
msgstr ""
-#: models.py:102
+#: models.py:98
msgid "Batch"
msgstr ""
-#: models.py:109 models.py:285 models.py:560
+#: models.py:105 models.py:281 models.py:555
msgid "External ID"
msgstr ""
-#: models.py:114
+#: models.py:110
msgid "Topographic localisation"
msgstr ""
-#: models.py:115 templates/ishtar/sheet_find.html:92
+#: models.py:111 templates/ishtar/sheet_find.html:92
msgid "Special interest"
msgstr ""
-#: models.py:119
+#: models.py:115
msgid "Context Record"
msgstr ""
-#: models.py:120 templates/ishtar/sheet_find.html:83
+#: models.py:116 templates/ishtar/sheet_find.html:83
msgid "Discovery date"
msgstr ""
-#: models.py:127
-msgid "Short ID"
-msgstr ""
-
-#: models.py:128 models.py:131
+#: models.py:124 models.py:127
msgid "Cached value - do not edit"
msgstr ""
-#: models.py:130 templates/ishtar/sheet_find.html:71
-msgid "Complete ID"
-msgstr ""
-
-#: models.py:136 models.py:283
+#: models.py:132 models.py:279
msgid "Base find"
msgstr ""
-#: models.py:137
+#: models.py:133
msgid "Base finds"
msgstr ""
-#: models.py:139
-msgid "Can view all Base find"
+#: models.py:135
+msgid "Can view all Base finds"
msgstr ""
-#: models.py:140
+#: models.py:136
msgid "Can view own Base find"
msgstr ""
-#: models.py:141
+#: models.py:137
msgid "Can add own Base find"
msgstr ""
-#: models.py:142
+#: models.py:138
msgid "Can change own Base find"
msgstr ""
-#: models.py:143
+#: models.py:139
msgid "Can delete own Base find"
msgstr ""
-#: models.py:238
+#: models.py:234
msgid "g"
msgstr ""
-#: models.py:239
+#: models.py:235
msgid "kg"
msgstr ""
-#: models.py:241
+#: models.py:237
msgid "Not checked"
msgstr ""
-#: models.py:242
+#: models.py:238
msgid "Checked but incorrect"
msgstr ""
-#: models.py:243
+#: models.py:239
msgid "Checked and correct"
msgstr ""
-#: models.py:273
-msgid "Base find - Short Id"
+#: models.py:269
+msgid "Base find - Short ID"
msgstr ""
-#: models.py:274
+#: models.py:270
msgid "Base find - Complete ID"
msgstr ""
-#: models.py:275
+#: models.py:271
msgid "Base find - Comment"
msgstr ""
-#: models.py:276
+#: models.py:272
msgid "Base find - Description"
msgstr ""
-#: models.py:277
+#: models.py:273
msgid "Base find - Topographic localisation"
msgstr ""
-#: models.py:279
+#: models.py:275
msgid "Base find - Special interest"
msgstr ""
-#: models.py:280
+#: models.py:276
msgid "Base find - Discovery date"
msgstr ""
-#: models.py:287
+#: models.py:283
msgid "Order"
msgstr ""
-#: models.py:296
+#: models.py:292
msgid "Type of preservation to consider"
msgstr ""
-#: models.py:300
+#: models.py:296
msgid "Weight unit"
msgstr ""
-#: models.py:306 templates/ishtar/sheet_find.html:61
+#: models.py:302 templates/ishtar/sheet_find.html:61
msgid "Upstream treatment"
msgstr ""
-#: models.py:309 templates/ishtar/sheet_find.html:63
+#: models.py:305 templates/ishtar/sheet_find.html:63
msgid "Downstream treatment"
msgstr ""
-#: models.py:314 models.py:563 templates/ishtar/sheet_find.html:65
+#: models.py:309 models.py:557 templates/ishtar/sheet_find.html:65
msgid "Container"
msgstr ""
-#: models.py:349
-msgid "Can view all Find"
+#: models.py:344
+msgid "Can view all Finds"
msgstr ""
-#: models.py:350
+#: models.py:345
msgid "Can view own Find"
msgstr ""
-#: models.py:351
+#: models.py:346
msgid "Can add own Find"
msgstr ""
-#: models.py:352
+#: models.py:347
msgid "Can change own Find"
msgstr ""
-#: models.py:353
+#: models.py:348
msgid "Can delete own Find"
msgstr ""
-#: models.py:358
+#: models.py:353
msgid "FIND"
msgstr ""
-#: models.py:540
+#: models.py:535
msgid "Find documentation"
msgstr ""
-#: models.py:541
+#: models.py:536
msgid "Find documentations"
msgstr ""
-#: models.py:551
+#: models.py:546
msgid "Virtual"
msgstr ""
-#: models.py:555
+#: models.py:550
msgid "Treatment types"
msgstr ""
-#: models.py:572
+#: models.py:565
msgid "Other location"
msgstr ""
-#: models.py:582 models.py:604
+#: models.py:575 models.py:597
msgid "Treatment"
msgstr ""
-#: models.py:583
+#: models.py:576
msgid "Treatments"
msgstr ""
-#: models.py:585
-msgid "Can view all Treatment"
+#: models.py:578
+msgid "Can view all Treatments"
msgstr ""
-#: models.py:586
+#: models.py:579
msgid "Can view own Treatment"
msgstr ""
-#: models.py:587
+#: models.py:580
msgid "Can add own Treatment"
msgstr ""
-#: models.py:588
+#: models.py:581
msgid "Can change own Treatment"
msgstr ""
-#: models.py:589
+#: models.py:582
msgid "Can delete own Treatment"
msgstr ""
-#: models.py:595
+#: models.py:588
msgid "by"
msgstr ""
-#: models.py:601
+#: models.py:594
msgid "Treatment documentation"
msgstr ""
-#: models.py:602
+#: models.py:595
msgid "Treament documentations"
msgstr ""
-#: models.py:615
+#: models.py:607
msgid "Administrative act"
msgstr ""
-#: models.py:622
+#: models.py:614
msgid "Property"
msgstr ""
-#: models.py:623
+#: models.py:615
msgid "Properties"
msgstr ""
-#: views.py:92
+#: views.py:98
msgid "New find"
msgstr ""
-#: views.py:105
+#: views.py:111
msgid "Find modification"
msgstr ""
-#: views.py:123
+#: views.py:129
msgid "Find: new source"
msgstr ""
-#: views.py:131
+#: views.py:137
msgid "Find: source modification"
msgstr ""
-#: views.py:137
+#: views.py:143
msgid "Find: source deletion"
msgstr ""
diff --git a/archaeological_finds/models.py b/archaeological_finds/models.py
index f677b1297..9308be593 100644
--- a/archaeological_finds/models.py
+++ b/archaeological_finds/models.py
@@ -32,11 +32,7 @@ from ishtar_common.models import GeneralType, ImageModel, BaseHistorizedItem, \
from archaeological_operations.models import AdministrativeAct
from archaeological_context_records.models import ContextRecord, Dating
-WAREHOUSE_AVAILABLE = 'archaeological_warehouse' in settings.INSTALLED_APPS
-if WAREHOUSE_AVAILABLE:
- from archaeological_warehouse.models import Warehouse, Container
-
-FILES_AVAILABLE = 'archaeological_files' in settings.INSTALLED_APPS
+from archaeological_warehouse.models import Warehouse, Container
class MaterialType(GeneralType):
@@ -105,7 +101,7 @@ IS_ISOLATED_CHOICES = (
class BaseFind(BaseHistorizedItem, OwnPerms):
IS_ISOLATED_DICT = dict(IS_ISOLATED_CHOICES)
- label = models.TextField(_(u"Free-ID"))
+ label = models.TextField(_(u"Free ID"))
external_id = models.CharField(_(u"External ID"), blank=True, null=True,
max_length=120)
description = models.TextField(_(u"Description"), blank=True, null=True)
@@ -136,7 +132,7 @@ class BaseFind(BaseHistorizedItem, OwnPerms):
verbose_name = _(u"Base find")
verbose_name_plural = _(u"Base finds")
permissions = (
- ("view_basefind", ugettext(u"Can view all Base find")),
+ ("view_basefind", ugettext(u"Can view all Base finds")),
("view_own_basefind", ugettext(u"Can view own Base find")),
("add_own_basefind", ugettext(u"Can add own Base find")),
("change_own_basefind", ugettext(u"Can change own Base find")),
@@ -270,7 +266,7 @@ class Find(BaseHistorizedItem, ImageModel, OwnPerms, ShortMenuItem):
'base_finds.special_interest',
'base_finds.discovery_date']
EXTRA_FULL_FIELDS_LABELS = {
- 'base_finds.cache_short_id': _(u"Base find - Short Id"),
+ 'base_finds.cache_short_id': _(u"Base find - Short ID"),
'base_finds.cache_complete_id': _(u"Base find - Complete ID"),
'base_finds.comment': _(u"Base find - Comment"),
'base_finds.description': _(u"Base find - Description"),
@@ -285,7 +281,7 @@ class Find(BaseHistorizedItem, ImageModel, OwnPerms, ShortMenuItem):
external_id = models.CharField(_(u"External ID"), blank=True, null=True,
max_length=120)
order = models.IntegerField(_(u"Order"), default=1)
- label = models.TextField(_(u"Free-ID"))
+ label = models.TextField(_(u"Free ID"))
description = models.TextField(_(u"Description"), blank=True, null=True)
material_types = models.ManyToManyField(
MaterialType, verbose_name=_(u"Material types"), related_name='finds')
@@ -309,10 +305,9 @@ class Find(BaseHistorizedItem, ImageModel, OwnPerms, ShortMenuItem):
verbose_name=_("Downstream treatment"))
datings = models.ManyToManyField(Dating, verbose_name=_(u"Dating"),
related_name='find')
- if WAREHOUSE_AVAILABLE:
- container = models.ForeignKey(
- Container, verbose_name=_(u"Container"), blank=True, null=True,
- related_name='finds')
+ container = models.ForeignKey(
+ Container, verbose_name=_(u"Container"), blank=True, null=True,
+ related_name='finds')
is_complete = models.NullBooleanField(_(u"Is complete?"), blank=True,
null=True)
object_types = models.ManyToManyField(
@@ -346,7 +341,7 @@ class Find(BaseHistorizedItem, ImageModel, OwnPerms, ShortMenuItem):
verbose_name = _(u"Find")
verbose_name_plural = _(u"Finds")
permissions = (
- ("view_find", ugettext(u"Can view all Find")),
+ ("view_find", ugettext(u"Can view all Finds")),
("view_own_find", ugettext(u"Can view own Find")),
("add_own_find", ugettext(u"Can add own Find")),
("change_own_find", ugettext(u"Can change own Find")),
@@ -559,16 +554,14 @@ class TreatmentType(GeneralType):
class Treatment(BaseHistorizedItem, OwnPerms):
external_id = models.CharField(_(u"External ID"), blank=True, null=True,
max_length=120)
- if WAREHOUSE_AVAILABLE:
- container = models.ForeignKey(Container, verbose_name=_(u"Container"),
- blank=True, null=True)
+ container = models.ForeignKey(Container, verbose_name=_(u"Container"),
+ blank=True, null=True)
description = models.TextField(_(u"Description"), blank=True, null=True)
comment = models.TextField(_(u"Comment"), blank=True, null=True)
treatment_type = models.ForeignKey(TreatmentType,
verbose_name=_(u"Treatment type"))
- if WAREHOUSE_AVAILABLE:
- location = models.ForeignKey(Warehouse, verbose_name=_(u"Location"),
- blank=True, null=True)
+ location = models.ForeignKey(Warehouse, verbose_name=_(u"Location"),
+ blank=True, null=True)
other_location = models.CharField(_(u"Other location"), max_length=200,
blank=True, null=True)
person = models.ForeignKey(
@@ -582,7 +575,7 @@ class Treatment(BaseHistorizedItem, OwnPerms):
verbose_name = _(u"Treatment")
verbose_name_plural = _(u"Treatments")
permissions = (
- ("view_treatment", ugettext(u"Can view all Treatment")),
+ ("view_treatment", ugettext(u"Can view all Treatments")),
("view_own_treatment", ugettext(u"Can view own Treatment")),
("add_own_treatment", ugettext(u"Can add own Treatment")),
("change_own_treatment", ugettext(u"Can change own Treatment")),
@@ -610,9 +603,8 @@ class TreatmentSource(Source):
class Property(LightHistorizedItem):
find = models.ForeignKey(Find, verbose_name=_(u"Find"))
- if FILES_AVAILABLE:
- administrative_act = models.ForeignKey(
- AdministrativeAct, verbose_name=_(u"Administrative act"))
+ administrative_act = models.ForeignKey(
+ AdministrativeAct, verbose_name=_(u"Administrative act"))
person = models.ForeignKey(Person, verbose_name=_(u"Person"),
related_name='properties')
start_date = models.DateField(_(u"Start date"))
diff --git a/archaeological_finds/views.py b/archaeological_finds/views.py
index 5306e84a5..f09b3099b 100644
--- a/archaeological_finds/views.py
+++ b/archaeological_finds/views.py
@@ -35,6 +35,12 @@ from forms import *
import models
find_extra_keys = {
+ 'base_finds__cache_short_id':
+ 'base_finds__cache_short_id__icontains',
+ 'base_finds__cache_complete_id':
+ 'base_finds__cache_complete_id__icontains',
+ 'label':
+ 'label__icontains',
'base_finds__context_record':
'base_finds__context_record__pk',
'base_finds__context_record__parcel__town':
diff --git a/archaeological_operations/admin.py b/archaeological_operations/admin.py
index 2a0ec652c..34e6da2ca 100644
--- a/archaeological_operations/admin.py
+++ b/archaeological_operations/admin.py
@@ -24,17 +24,15 @@ from ishtar_common.admin import HistorizedObjectAdmin, GeneralTypeAdmin
import models
-FILES_AVAILABLE = 'archaeological_files' in settings.INSTALLED_APPS
-if FILES_AVAILABLE:
- class AdministrativeActAdmin(HistorizedObjectAdmin):
- list_display = ('year', 'index', 'operation', 'associated_file',
- 'act_type')
- list_filter = ('act_type',)
- search_fields = ('year', 'index')
- model = models.AdministrativeAct
+class AdministrativeActAdmin(HistorizedObjectAdmin):
+ list_display = ('year', 'index', 'operation', 'associated_file',
+ 'act_type')
+ list_filter = ('act_type',)
+ search_fields = ('year', 'index')
+ model = models.AdministrativeAct
- admin.site.register(models.AdministrativeAct, AdministrativeActAdmin)
+admin.site.register(models.AdministrativeAct, AdministrativeActAdmin)
class PeriodAdmin(admin.ModelAdmin):
@@ -78,9 +76,7 @@ admin.site.register(models.OperationSource, OperationSourceAdmin)
class ParcelAdmin(HistorizedObjectAdmin):
- list_display = ['section', 'parcel_number', 'operation']
- if FILES_AVAILABLE:
- list_display.append('associated_file')
+ list_display = ['section', 'parcel_number', 'operation', 'associated_file']
search_fields = ('operation__name',)
model = models.Parcel
diff --git a/archaeological_operations/forms.py b/archaeological_operations/forms.py
index d2ec086ae..84af8f287 100644
--- a/archaeological_operations/forms.py
+++ b/archaeological_operations/forms.py
@@ -34,14 +34,11 @@ from django.utils.translation import ugettext_lazy as _, pgettext_lazy
from django.utils.safestring import mark_safe
from ishtar_common.models import valid_id, PersonType, Person, Town, \
- DocumentTemplate, Organization, OrganizationType
+ DocumentTemplate, Organization, OrganizationType, get_current_profile
from ishtar_common.wizards import MultiValueDict
-FILES_AVAILABLE = 'archaeological_files' in settings.INSTALLED_APPS
-
-if FILES_AVAILABLE:
- from archaeological_files.models import File
+from archaeological_files.models import File
import models
from widgets import ParcelWidget, SelectParcelWidget
@@ -411,16 +408,16 @@ OPERATOR, created = OrganizationType.objects.get_or_create(txt_idx='operator')
class OperationSelect(TableSelect):
+ year = forms.IntegerField(label=_("Year"))
+ operation_code = forms.IntegerField(label=_(u"Numeric reference"))
if settings.COUNTRY == 'fr':
code_patriarche = forms.IntegerField(
label="Numéro d'opération (OA Patriarche)")
- year = forms.IntegerField(label=_("Year"))
- operation_code = forms.IntegerField(label=_(u"Numeric reference"))
towns = get_town_field()
parcel = ParcelField(label=_("Parcel (section/number)"))
if settings.ISHTAR_DPTS:
towns__numero_insee__startswith = forms.ChoiceField(
- label="Department", choices=[])
+ label=_(u"Department"), choices=[])
common_name = forms.CharField(label=_(u"Name"),
max_length=30)
operation_type = forms.ChoiceField(label=_(u"Operation type"),
@@ -469,12 +466,12 @@ class OperationSelect(TableSelect):
report_processing = forms.ChoiceField(label=_(u"Report processing"),
choices=[])
virtual_operation = forms.NullBooleanField(label=_(u"Virtual operation"))
- archaeological_sites = forms.IntegerField(
- label=_("Archaelogical site"),
- widget=widgets.JQueryAutoComplete(
- reverse_lazy('autocomplete-archaeologicalsite'),
- associated_model=models.ArchaeologicalSite),
- validators=[valid_id(models.ArchaeologicalSite)])
+ # archaeological_sites = forms.IntegerField(
+ # label=_("Archaelogical site"),
+ # widget=widgets.JQueryAutoComplete(
+ # reverse_lazy('autocomplete-archaeologicalsite'),
+ # associated_model=models.ArchaeologicalSite),
+ # validators=[valid_id(models.ArchaeologicalSite)])
history_creator = forms.IntegerField(
label=_(u"Created by"),
widget=widgets.JQueryAutoComplete(
@@ -566,16 +563,16 @@ class OperationCodeInput(forms.TextInput):
'url': reverse_lazy('get_available_operation_code')}
return mark_safe(rendered + js)
-if FILES_AVAILABLE:
- class OperationFormFileChoice(forms.Form):
- form_label = _(u"Associated file")
- associated_models = {'associated_file': File, }
- currents = {'associated_file': File}
- associated_file = forms.IntegerField(
- label=_(u"Archaelogical file"),
- widget=widgets.JQueryAutoComplete(
- reverse_lazy('autocomplete-file'), associated_model=File),
- validators=[valid_id(File)], required=False)
+
+class OperationFormFileChoice(forms.Form):
+ form_label = _(u"Associated file")
+ associated_models = {'associated_file': File, }
+ currents = {'associated_file': File}
+ associated_file = forms.IntegerField(
+ label=_(u"Archaelogical file"),
+ widget=widgets.JQueryAutoComplete(
+ reverse_lazy('autocomplete-file'), associated_model=File),
+ validators=[valid_id(File)], required=False)
class OperationFormAbstract(forms.Form):
@@ -814,14 +811,13 @@ class OperationFormGeneral(forms.Form):
class OperationFormModifGeneral(OperationFormGeneral):
operation_code = forms.IntegerField(label=_(u"Operation code"),
required=False)
- if FILES_AVAILABLE:
- currents = {'associated_file': File}
- associated_file = forms.IntegerField(
- label=_(u"Archaelogical file"),
- widget=widgets.JQueryAutoComplete(
- reverse_lazy('autocomplete-file'),
- associated_model=File),
- validators=[valid_id(File)], required=False)
+ currents = {'associated_file': File}
+ associated_file = forms.IntegerField(
+ label=_(u"Archaelogical file"),
+ widget=widgets.JQueryAutoComplete(
+ reverse_lazy('autocomplete-file'),
+ associated_model=File),
+ validators=[valid_id(File)], required=False)
def __init__(self, *args, **kwargs):
super(OperationFormModifGeneral, self).__init__(*args, **kwargs)
@@ -829,12 +825,13 @@ class OperationFormModifGeneral(OperationFormGeneral):
self.fields.keyOrder.pop(self.fields.keyOrder.index('associated_file'))
self.fields.keyOrder.insert(self.fields.keyOrder.index('in_charge'),
'associated_file')
+ if not get_current_profile().files:
+ self.fields.pop('associated_file')
OperationFormModifGeneral.associated_models = \
OperationFormGeneral.associated_models.copy()
-if FILES_AVAILABLE:
- OperationFormModifGeneral.associated_models['associated_file'] = File
+OperationFormModifGeneral.associated_models['associated_file'] = File
class OperationFormPreventive(forms.Form):
@@ -993,6 +990,24 @@ class ArchaeologicalSiteForm(forms.Form):
return item
+class ArchaeologicalSiteBasicForm(forms.Form):
+ form_label = _("Archaeological site")
+ base_model = 'archaeological_site'
+ associated_models = {'archaeological_site': models.ArchaeologicalSite}
+ archaeological_site = forms.IntegerField(
+ label=_("Archaelogical site"),
+ widget=widgets.JQueryAutoComplete(
+ reverse_lazy('autocomplete-archaeologicalsite'),
+ associated_model=models.ArchaeologicalSite,
+ new=True),
+ validators=[valid_id(models.ArchaeologicalSite)])
+
+
+ArchaeologicalSiteFormSet = formset_factory(ArchaeologicalSiteBasicForm,
+ can_delete=True, formset=FormSet)
+ArchaeologicalSiteFormSet.form_label = _("Archaeological sites")
+
+
class ArchaeologicalSiteSelectionForm(forms.Form):
form_label = _("Associated archaelogical sites")
archaeological_sites = forms.IntegerField(
diff --git a/archaeological_operations/import_from_csv.py b/archaeological_operations/import_from_csv.py
index 714825ff4..45faae632 100644
--- a/archaeological_operations/import_from_csv.py
+++ b/archaeological_operations/import_from_csv.py
@@ -403,18 +403,18 @@ def import_operations_csv(values, col_defs=OPE_COLS, update=True, person=None,
errors = []
if error_ope:
- error = "Error while recording theses operations:\n"
+ error = "Error while recording these operations:\n"
for line_idx, args in error_ope:
error += "line: " + str(line_idx) + " args: " + str(args) + '\n'
errors.append(error)
if error_multis:
- error = "Error while recording theses multiples items attached to "\
+ error = "Error while recording these multiples items attached to "\
"operation:"
for line_idx, args in error_multis:
error += "line: " + str(line_idx) + " args: " + str(args) + '\n'
errors.append(error)
if error_reversed:
- error = "Error while recording theses items that depend to operation:"
+ error = "Error while recording these items that depend to operation:"
for line_idx, args in error_reversed:
error += "line: " + str(line_idx) + " args: " + str(args) + '\n'
errors.append(error)
diff --git a/archaeological_operations/import_from_dbf.py b/archaeological_operations/import_from_dbf.py
index 1e3d6a0ea..3ce41fdfc 100644
--- a/archaeological_operations/import_from_dbf.py
+++ b/archaeological_operations/import_from_dbf.py
@@ -308,18 +308,18 @@ def import_operations_dbf(values, col_defs=DBF_OPE_COLS, update=False,
if nb_error:
errors.append(ERROR_LBLS[error_key] + str(nb_error))
if error_ope:
- error = "Error while recording theses operations:\n"
+ error = "Error while recording these operations:\n"
for line_idx, args in error_ope:
error += "line: " + str(line_idx) + " args: " + str(args) + '\n'
errors.append(error)
if error_multis:
- error = "Error while recording theses multiples items attached to "\
+ error = "Error while recording these multiples items attached to "\
"operation:"
for line_idx, args in error_multis:
error += "line: " + str(line_idx) + " args: " + str(args) + '\n'
errors.append(error)
if error_reversed:
- error = "Error while recording theses items that depend to operation:"
+ error = "Error while recording these items that depend to operation:"
for line_idx, args in error_reversed:
error += "line: " + str(line_idx) + " args: " + str(args) + '\n'
errors.append(error)
diff --git a/archaeological_operations/ishtar_menu.py b/archaeological_operations/ishtar_menu.py
index 60f764ab7..a0852147a 100644
--- a/archaeological_operations/ishtar_menu.py
+++ b/archaeological_operations/ishtar_menu.py
@@ -17,7 +17,6 @@
# See the file COPYING for details.
-from django.conf import settings
from django.utils.translation import ugettext_lazy as _, pgettext_lazy
from ishtar_common.menu_base import SectionItem, MenuItem
@@ -26,8 +25,6 @@ import models
# be carreful: each access_controls must be relevant with check_rights in urls
-FILES_AVAILABLE = 'archaeological_files' in settings.INSTALLED_APPS
-
MENU_SECTIONS = [
(30, SectionItem(
'operation_management', _(u"Operation"),
@@ -57,6 +54,38 @@ MENU_SECTIONS = [
access_controls=['change_operation',
'change_own_operation']),
SectionItem(
+ 'admin_act_operations',
+ _(u"Administrative act"),
+ profile_restriction='files',
+ childs=[
+ MenuItem(
+ 'operation_administrativeactop_search',
+ _(u"Search"),
+ model=models.AdministrativeAct,
+ access_controls=[
+ 'change_administrativeact']),
+ MenuItem(
+ 'operation_administrativeactop',
+ _(u"Add"),
+ model=models.AdministrativeAct,
+ access_controls=['change_administrativeact']),
+ MenuItem(
+ 'operation_administrativeactop_modification',
+ _(u"Modification"),
+ model=models.AdministrativeAct,
+ access_controls=['change_administrativeact']),
+ MenuItem(
+ 'operation_administrativeactop_deletion',
+ _(u"Deletion"),
+ model=models.AdministrativeAct,
+ access_controls=['change_administrativeact']),
+ MenuItem(
+ 'operation_administrativeact_document',
+ _(u"Documents"),
+ model=models.AdministrativeAct,
+ access_controls=['change_administrativeact']),
+ ],),
+ SectionItem(
'operation_source', _(u"Documentation"),
childs=[
MenuItem('operation_source_search',
@@ -83,6 +112,19 @@ MENU_SECTIONS = [
]),
),
(
+ 35, SectionItem(
+ 'administrativact_management', _(u"Administrative Act"),
+ profile_restriction='files',
+ childs=[
+ MenuItem(
+ 'administrativact_register',
+ pgettext_lazy('admin act register', u"Register"),
+ model=models.AdministrativeAct,
+ access_controls=['view_administrativeact',
+ 'view_own_administrativeact']),
+ ])
+ ),
+ (
102, SectionItem(
'dashboard', _(u"Dashboard"),
childs=[
@@ -97,54 +139,3 @@ MENU_SECTIONS = [
]),
),
]
-
-if FILES_AVAILABLE:
- MENU_SECTIONS.insert(
- 1,
- (
- 35, SectionItem(
- 'administrativact_management', _(u"Administrative Act"),
- childs=[
- MenuItem(
- 'administrativact_register',
- pgettext_lazy('admin act register', u"Register"),
- model=models.AdministrativeAct,
- access_controls=['view_administrativeact',
- 'view_own_administrativeact']),
- ])
- )
- )
- MENU_SECTIONS[0][1].childs.insert(
- 5,
- SectionItem(
- 'admin_act_operations',
- _(u"Administrative act"),
- childs=[
- MenuItem(
- 'operation_administrativeactop_search',
- _(u"Search"),
- model=models.AdministrativeAct,
- access_controls=[
- 'change_administrativeact']),
- MenuItem(
- 'operation_administrativeactop',
- _(u"Add"),
- model=models.AdministrativeAct,
- access_controls=['change_administrativeact']),
- MenuItem(
- 'operation_administrativeactop_modification',
- _(u"Modification"),
- model=models.AdministrativeAct,
- access_controls=['change_administrativeact']),
- MenuItem(
- 'operation_administrativeactop_deletion',
- _(u"Deletion"),
- model=models.AdministrativeAct,
- access_controls=['change_administrativeact']),
- MenuItem(
- 'operation_administrativeact_document',
- _(u"Documents"),
- model=models.AdministrativeAct,
- access_controls=['change_administrativeact']),
- ],)
- )
diff --git a/archaeological_operations/locale/django.pot b/archaeological_operations/locale/django.pot
index a112d4d16..b78e36c6c 100644
--- a/archaeological_operations/locale/django.pot
+++ b/archaeological_operations/locale/django.pot
@@ -3,16 +3,16 @@
# This file is distributed under the same license as the Ishtar package.
# Étienne Loks <etienne.loks at peacefrogs net>, 2010-2015.
# Étienne Loks <etienne.loks@iggdrasil.net>, 2015. #zanata
-# Étienne Loks <etienne.loks@iggdrasil.net>, 2016. #zanata
+# Valérie-Emma Leroux <emma@iggdrasil.net>, 2016. #zanata
msgid ""
msgstr ""
-#: forms.py:69 forms.py:336 forms.py:895 forms.py:917 forms.py:921
-#: models.py:791 templates/ishtar/blocks/window_tables/parcels.html:8
+#: forms.py:66 forms.py:333 forms.py:892 forms.py:914 forms.py:918
+#: models.py:780 templates/ishtar/blocks/window_tables/parcels.html:8
msgid "Parcels"
msgstr ""
-#: forms.py:72 forms.py:188 forms.py:871 models.py:781
+#: forms.py:69 forms.py:185 forms.py:868 models.py:770
#: templates/ishtar/blocks/window_tables/parcels.html:5
#: templates/ishtar/dashboards/dashboard_operation.html:302
#: templates/ishtar/dashboards/dashboard_operation.html:315
@@ -21,887 +21,892 @@ msgstr ""
msgid "Town"
msgstr ""
-#: forms.py:74 forms.py:417 forms.py:685 forms.py:1084 models.py:161
-#: models.py:597 models.py:779
+#: forms.py:71 forms.py:411 forms.py:682 forms.py:1099 models.py:158
+#: models.py:587 models.py:768
#: templates/ishtar/blocks/window_tables/parcels.html:6
msgid "Year"
msgstr ""
-#: forms.py:77 models.py:782
+#: forms.py:74 models.py:771
#: templates/ishtar/blocks/window_tables/parcels.html:7
msgid "Section"
msgstr ""
-#: forms.py:80 models.py:783
+#: forms.py:77 models.py:772
msgid "Parcel number"
msgstr ""
-#: forms.py:110
+#: forms.py:107
msgid "Town section and parcel number fields are required."
msgstr ""
-#: forms.py:153
+#: forms.py:150
msgid "Current parcels"
msgstr ""
-#: forms.py:155
+#: forms.py:152
msgid "Deleted parcels"
msgstr ""
-#: forms.py:191
+#: forms.py:188
msgid "Full text input"
msgstr ""
-#: forms.py:193
+#: forms.py:190
msgid "example: \"2013: XD:1 to 13,24,33 to 39, YD:24\" or \"AB:24,AC:42\""
msgstr ""
-#: forms.py:330
+#: forms.py:327
msgid "There are identical parcels."
msgstr ""
-#: forms.py:345
+#: forms.py:342
msgid "Relation type"
msgstr ""
-#: forms.py:348 ishtar_menu.py:33 models.py:241 models.py:496 models.py:521
-#: models.py:536 models.py:588 models.py:778 wizards.py:341 wizards.py:352
+#: forms.py:345 ishtar_menu.py:30 models.py:237 models.py:488 models.py:513
+#: models.py:528 models.py:579 models.py:767 wizards.py:338 wizards.py:349
#: templates/ishtar/sheet_operation.html:6
msgid "Operation"
msgstr ""
-#: forms.py:367
+#: forms.py:364
msgid ":"
msgstr ""
-#: forms.py:398
+#: forms.py:395
msgid "Current relations"
msgstr ""
-#: forms.py:400
+#: forms.py:397
msgid "Deleted relations"
msgstr ""
-#: forms.py:404 templates/ishtar/sheet_operation.html:113
+#: forms.py:401 templates/ishtar/sheet_operation.html:115
msgid "Relations"
msgstr ""
-#: forms.py:418
+#: forms.py:412
msgid "Numeric reference"
msgstr ""
-#: forms.py:420 forms.py:1094
+#: forms.py:417 forms.py:1109
msgid "Parcel (section/number)"
msgstr ""
-#: forms.py:424 forms.py:956 models.py:79
+#: forms.py:420 forms.py:1112 models.py:489
+#: templates/ishtar/dashboards/dashboard_operation.html:273
+#: templates/ishtar/dashboards/dashboard_operation.html:286
+#: templates/ishtar/dashboards/dashboard_operation.html:453
+#: templates/ishtar/dashboards/dashboard_operation.html:466
+msgid "Department"
+msgstr ""
+
+#: forms.py:421 forms.py:953 models.py:77
+#: templates/ishtar/blocks/window_tables/archaeologicalsites.html:6
msgid "Name"
msgstr ""
-#: forms.py:426 forms.py:607 forms.py:683 forms.py:1061 models.py:170
+#: forms.py:423 forms.py:604 forms.py:680 forms.py:1076 models.py:166
msgid "Operation type"
msgstr ""
-#: forms.py:428
+#: forms.py:425
msgid "Is open?"
msgstr ""
-#: forms.py:437 forms.py:713 models.py:158
+#: forms.py:434 forms.py:710 models.py:155
msgid "In charge"
msgstr ""
-#: forms.py:444 models.py:582
+#: forms.py:441 models.py:573
msgid "Scientist in charge"
msgstr ""
-#: forms.py:446 forms.py:609 forms.py:704 models.py:156
+#: forms.py:443 forms.py:606 forms.py:701 models.py:153
msgid "Operator"
msgstr ""
-#: forms.py:453 forms.py:961 models.py:83 models.py:172
+#: forms.py:450 forms.py:958 models.py:81 models.py:168
+#: templates/ishtar/blocks/window_tables/archaeologicalsites.html:8
msgid "Remains"
msgstr ""
-#: forms.py:454 forms.py:940 forms.py:958 models.py:81 models.py:177
+#: forms.py:451 forms.py:937 forms.py:955 models.py:79 models.py:173
+#: templates/ishtar/blocks/window_tables/archaeologicalsites.html:7
msgid "Periods"
msgstr ""
-#: forms.py:455
+#: forms.py:452
msgid "Started before"
msgstr ""
-#: forms.py:457
+#: forms.py:454
msgid "Started after"
msgstr ""
-#: forms.py:459
+#: forms.py:456
msgid "Ended before"
msgstr ""
-#: forms.py:461
+#: forms.py:458
msgid "Ended after"
msgstr ""
-#: forms.py:464
+#: forms.py:461
msgid "Search within relations"
msgstr ""
-#: forms.py:466 forms.py:755 models.py:223
+#: forms.py:463 forms.py:752 models.py:219
msgid "Comment"
msgstr ""
-#: forms.py:467
+#: forms.py:464
msgid "Abstract (full text search)"
msgstr ""
-#: forms.py:468 forms.py:757 models.py:235
+#: forms.py:465 forms.py:754 models.py:231
msgid "Record quality"
msgstr ""
-#: forms.py:469 forms.py:736 models.py:189
+#: forms.py:466 forms.py:733 models.py:185
msgid "Report processing"
msgstr ""
-#: forms.py:471 forms.py:760 models.py:230
+#: forms.py:468 forms.py:757 models.py:226
msgid "Virtual operation"
msgstr ""
-#: forms.py:473
-msgid "Archaelogical site"
-msgstr ""
-
-#: forms.py:479 forms.py:1101
+#: forms.py:476 forms.py:1116
msgid "Created by"
msgstr ""
-#: forms.py:485 forms.py:1107
+#: forms.py:482 forms.py:1122
msgid "Modified by"
msgstr ""
-#: forms.py:527 forms.py:1054 views.py:230
+#: forms.py:524 forms.py:1069 views.py:231
msgid "Operation search"
msgstr ""
-#: forms.py:540 forms.py:1056
+#: forms.py:537 forms.py:1071
msgid "You should select an operation."
msgstr ""
-#: forms.py:571
+#: forms.py:568
msgid "Associated file"
msgstr ""
-#: forms.py:575 forms.py:820 models.py:594 wizards.py:78
+#: forms.py:572 forms.py:816 models.py:584 wizards.py:76
msgid "Archaelogical file"
msgstr ""
-#: forms.py:582 forms.py:584 models.py:237
+#: forms.py:579 forms.py:581 models.py:233
msgid "Abstract"
msgstr ""
-#: forms.py:587
+#: forms.py:584
msgid "months"
msgstr ""
-#: forms.py:587
+#: forms.py:584
msgid "years"
msgstr ""
-#: forms.py:589 models.py:142
+#: forms.py:586 models.py:139
msgid "Creation date"
msgstr ""
-#: forms.py:590
+#: forms.py:587
msgid "Start of field work"
msgstr ""
-#: forms.py:592
+#: forms.py:589
msgid "All"
msgstr ""
-#: forms.py:593
+#: forms.py:590
msgid "Preventive"
msgstr ""
-#: forms.py:594
+#: forms.py:591
msgid "Research"
msgstr ""
-#: forms.py:598
+#: forms.py:595
msgid "Slicing"
msgstr ""
-#: forms.py:601
+#: forms.py:598
msgid "Department detail"
msgstr ""
-#: forms.py:603
+#: forms.py:600
msgid "Date get from"
msgstr ""
-#: forms.py:605
+#: forms.py:602
msgid "Preventive/Research"
msgstr ""
-#: forms.py:611
+#: forms.py:608
msgid "Date after"
msgstr ""
-#: forms.py:613
+#: forms.py:610
msgid "Date before"
msgstr ""
-#: forms.py:615
+#: forms.py:612
msgid "With reports"
msgstr ""
-#: forms.py:616
+#: forms.py:613
msgid "With finds"
msgstr ""
-#: forms.py:668 forms.py:1154 templates/ishtar/sheet_administrativeact.html:11
+#: forms.py:665 forms.py:1169 templates/ishtar/sheet_administrativeact.html:11
#: templates/ishtar/sheet_operation.html:32
msgid "General"
msgstr ""
-#: forms.py:681 models.py:222
+#: forms.py:678 models.py:218
msgid "Generic name"
msgstr ""
-#: forms.py:690 forms.py:815 models.py:162 models.py:375
+#: forms.py:687 forms.py:812 models.py:159 models.py:368
msgid "Operation code"
msgstr ""
-#: forms.py:694
+#: forms.py:691
msgid "Head scientist"
msgstr ""
-#: forms.py:710 models.py:221
+#: forms.py:707 models.py:217
msgid "Operator reference"
msgstr ""
-#: forms.py:722
+#: forms.py:719
msgid "Total surface (m2)"
msgstr ""
-#: forms.py:727
+#: forms.py:724
msgid "Associated archaeological sites"
msgstr ""
-#: forms.py:729 models.py:51 models.py:145 models.py:951
+#: forms.py:726 models.py:49 models.py:142 models.py:938
msgid "Start date"
msgstr ""
-#: forms.py:731 models.py:147
+#: forms.py:728 models.py:144
msgid "Excavation end date"
msgstr ""
-#: forms.py:734 models.py:148
+#: forms.py:731 models.py:145
msgid "Report delivery date"
msgstr ""
-#: forms.py:785
+#: forms.py:782
msgid ""
"If you want to set an excavation end date you have to provide a start date."
msgstr ""
-#: forms.py:790
+#: forms.py:787
msgid "The excavation end date cannot be before the start date."
msgstr ""
-#: forms.py:805
+#: forms.py:802
#, python-format
msgid ""
"Operation code already exist for year: %(year)d - use a value bigger than "
"%(last_val)d"
msgstr ""
-#: forms.py:809
+#: forms.py:806
msgid "Bad operation code"
msgstr ""
-#: forms.py:841
+#: forms.py:838
msgid "Preventive informations - excavation"
msgstr ""
-#: forms.py:842 models.py:175
+#: forms.py:839 models.py:171
#: templates/ishtar/dashboards/dashboard_operation.html:495
msgid "Cost (euros)"
msgstr ""
-#: forms.py:843 models.py:180
+#: forms.py:840 models.py:176
msgid "Scheduled man-days"
msgstr ""
-#: forms.py:845 models.py:183
+#: forms.py:842 models.py:179
msgid "Optional man-days"
msgstr ""
-#: forms.py:847 models.py:186
+#: forms.py:844 models.py:182
msgid "Effective man-days"
msgstr ""
-#: forms.py:857
+#: forms.py:854
msgid "Preventive informations - diagnostic"
msgstr ""
-#: forms.py:860 models.py:205
+#: forms.py:857 models.py:201
msgid "Prescription on zoning"
msgstr ""
-#: forms.py:862 models.py:208
+#: forms.py:859 models.py:204
msgid "Prescription on large area"
msgstr ""
-#: forms.py:865 models.py:210
+#: forms.py:862 models.py:206
msgid "Prescription on geoarchaeological context"
msgstr ""
-#: forms.py:869 forms.py:891 models.py:174 models.py:607
+#: forms.py:866 forms.py:888 models.py:170 models.py:597
msgid "Towns"
msgstr ""
-#: forms.py:898 models.py:790 models.py:949
+#: forms.py:895 models.py:779 models.py:936
msgid "Parcel"
msgstr ""
-#: forms.py:925 models.py:45
+#: forms.py:922 models.py:43
msgid "Remain types"
msgstr ""
-#: forms.py:929 models.py:44
+#: forms.py:926 models.py:42
msgid "Remain type"
msgstr ""
-#: forms.py:944
+#: forms.py:941
msgid "Period"
msgstr ""
-#: forms.py:955 models.py:78
+#: forms.py:952 models.py:76
msgid "Reference"
msgstr ""
-#: forms.py:980
+#: forms.py:977
msgid "This reference already exists."
msgstr ""
-#: forms.py:997
+#: forms.py:994 models.py:85
+msgid "Archaeological site"
+msgstr ""
+
+#: forms.py:998
+msgid "Archaelogical site"
+msgstr ""
+
+#: forms.py:1008 models.py:86 models.py:223
+#: templates/ishtar/sheet_operation.html:126
+msgid "Archaeological sites"
+msgstr ""
+
+#: forms.py:1012
msgid "Associated archaelogical sites"
msgstr ""
-#: forms.py:1003 ishtar_menu.py:36 ishtar_menu.py:63 ishtar_menu.py:125
+#: forms.py:1018 ishtar_menu.py:33 ishtar_menu.py:63 ishtar_menu.py:92
msgid "Search"
msgstr ""
-#: forms.py:1008
+#: forms.py:1023
msgid "Would you like to close this operation?"
msgstr ""
-#: forms.py:1013
+#: forms.py:1028
msgid "Would you like to delete this operation?"
msgstr ""
-#: forms.py:1022 forms.py:1085 models.py:523 models.py:573
+#: forms.py:1037 forms.py:1100 models.py:515 models.py:564
msgid "Index"
msgstr ""
-#: forms.py:1048
+#: forms.py:1063
#, python-format
msgid ""
"Index already exists for operation: %(operation)s - use a value bigger than "
"%(last_val)d"
msgstr ""
-#: forms.py:1060
+#: forms.py:1075
msgid "Operation's town"
msgstr ""
-#: forms.py:1063
+#: forms.py:1078
msgid "Operation's year"
msgstr ""
-#: forms.py:1074
+#: forms.py:1089
msgid "Documentation search"
msgstr ""
-#: forms.py:1076
+#: forms.py:1091
msgid "You should select a document."
msgstr ""
-#: forms.py:1091 forms.py:1157 models.py:547 models.py:567
+#: forms.py:1106 forms.py:1172 models.py:539 models.py:558
msgid "Act type"
msgstr ""
-#: forms.py:1092 forms.py:1245
+#: forms.py:1107 forms.py:1260
msgid "Indexed?"
msgstr ""
-#: forms.py:1097 models.py:497
-#: templates/ishtar/dashboards/dashboard_operation.html:273
-#: templates/ishtar/dashboards/dashboard_operation.html:286
-#: templates/ishtar/dashboards/dashboard_operation.html:453
-#: templates/ishtar/dashboards/dashboard_operation.html:466
-msgid "Department"
-msgstr ""
-
-#: forms.py:1098 forms.py:1162 models.py:598
+#: forms.py:1113 forms.py:1177 models.py:588
#: templates/ishtar/blocks/window_tables/administrativacts.html:8
msgid "Object"
msgstr ""
-#: forms.py:1134 views.py:366
+#: forms.py:1149 views.py:373
msgid "Administrative act search"
msgstr ""
-#: forms.py:1149 forms.py:1203 forms.py:1270
+#: forms.py:1164 forms.py:1218 forms.py:1285
msgid "You should select an administrative act."
msgstr ""
-#: forms.py:1165 models.py:595
+#: forms.py:1180 models.py:585
msgid "Signature date"
msgstr ""
-#: forms.py:1180
+#: forms.py:1195
msgid "Would you like to delete this administrative act?"
msgstr ""
-#: forms.py:1185
+#: forms.py:1200
msgid "Template"
msgstr ""
-#: forms.py:1209 forms.py:1213
+#: forms.py:1224 forms.py:1228
msgid "This document is not intended for this type of act."
msgstr ""
-#: forms.py:1231
+#: forms.py:1246
msgid "Doc generation"
msgstr ""
-#: forms.py:1233
+#: forms.py:1248
msgid "Generate the associated doc?"
msgstr ""
-#: forms.py:1254 ishtar_menu.py:110 views.py:400
+#: forms.py:1269 ishtar_menu.py:121 views.py:407
msgctxt "admin act register"
msgid "Register"
msgstr ""
-#: ishtar_menu.py:41
+#: ishtar_menu.py:38
msgid "Creation"
msgstr ""
-#: ishtar_menu.py:46 ishtar_menu.py:73 ishtar_menu.py:136
+#: ishtar_menu.py:43 ishtar_menu.py:74 ishtar_menu.py:102
msgid "Modification"
msgstr ""
-#: ishtar_menu.py:51
+#: ishtar_menu.py:48
msgid "Closing"
msgstr ""
-#: ishtar_menu.py:55 ishtar_menu.py:78 ishtar_menu.py:141
+#: ishtar_menu.py:52 ishtar_menu.py:79 ishtar_menu.py:107
msgid "Deletion"
msgstr ""
-#: ishtar_menu.py:60
-msgid "Documentation"
+#: ishtar_menu.py:58 models.py:604
+#: templates/ishtar/sheet_administrativeact.html:6
+msgid "Administrative act"
msgstr ""
-#: ishtar_menu.py:68 ishtar_menu.py:131 widgets.py:52
+#: ishtar_menu.py:69 ishtar_menu.py:97 widgets.py:52
msgid "Add"
msgstr ""
-#: ishtar_menu.py:87
-msgid "Dashboard"
+#: ishtar_menu.py:84
+msgid "Documents"
msgstr ""
-#: ishtar_menu.py:90
-msgid "General informations"
+#: ishtar_menu.py:89
+msgid "Documentation"
msgstr ""
-#: ishtar_menu.py:94 models.py:242
-#: templates/ishtar/dashboards/dashboard_operation.html:9
-msgid "Operations"
+#: ishtar_menu.py:116
+msgid "Administrative Act"
msgstr ""
-#: ishtar_menu.py:106
-msgid "Administrative Act"
+#: ishtar_menu.py:129
+msgid "Dashboard"
msgstr ""
-#: ishtar_menu.py:121 models.py:614
-#: templates/ishtar/sheet_administrativeact.html:6
-msgid "Administrative act"
+#: ishtar_menu.py:132
+msgid "General informations"
msgstr ""
-#: ishtar_menu.py:146
-msgid "Documents"
+#: ishtar_menu.py:136 models.py:238
+#: templates/ishtar/dashboards/dashboard_operation.html:9
+msgid "Operations"
msgstr ""
-#: models.py:50 models.py:66 models.py:1413
+#: models.py:48 models.py:64 models.py:1400
msgid "Order"
msgstr ""
-#: models.py:52 models.py:952
+#: models.py:50 models.py:939
msgid "End date"
msgstr ""
-#: models.py:53
+#: models.py:51
msgid "Parent period"
msgstr ""
-#: models.py:57
+#: models.py:55
msgid "Type Period"
msgstr ""
-#: models.py:58
+#: models.py:56
msgid "Types Period"
msgstr ""
-#: models.py:69
+#: models.py:67
msgid "Report state"
msgstr ""
-#: models.py:70
+#: models.py:68
msgid "Report states"
msgstr ""
-#: models.py:87
-msgid "Archaeological site"
-msgstr ""
-
-#: models.py:88 models.py:227
-msgid "Archaeological sites"
+#: models.py:89
+msgid "Can view all Archaeological sites"
msgstr ""
#: models.py:91
-msgid "Can view all Archaeological site"
-msgstr ""
-
-#: models.py:93
msgid "Can view own Archaeological site"
msgstr ""
-#: models.py:95
+#: models.py:93
msgid "Can add own Archaeological site"
msgstr ""
-#: models.py:97
+#: models.py:95
msgid "Can change own Archaeological site"
msgstr ""
-#: models.py:99
+#: models.py:97
msgid "Can delete own Archaeological site"
msgstr ""
-#: models.py:129
+#: models.py:127
msgid "Not documented"
msgstr ""
-#: models.py:130
+#: models.py:128
msgid "Arbitrary"
msgstr ""
-#: models.py:131
+#: models.py:129
msgid "Reliable"
msgstr ""
-#: models.py:144
+#: models.py:141
msgid "Closing date"
msgstr ""
-#: models.py:151
+#: models.py:148
msgid "In charge scientist"
msgstr ""
-#: models.py:167 models.py:774
+#: models.py:163 models.py:763
msgid "File"
msgstr ""
-#: models.py:171
+#: models.py:167
msgid "Surface (m2)"
msgstr ""
-#: models.py:224
+#: models.py:220
msgid "Cached name"
msgstr ""
-#: models.py:232
+#: models.py:228
msgid ""
"If checked, it means that this operation have not been officialy registered."
msgstr ""
-#: models.py:244
-msgid "Can view all Operation"
+#: models.py:240
+msgid "Can view all Operations"
msgstr ""
-#: models.py:245
+#: models.py:241
msgid "Can view own Operation"
msgstr ""
-#: models.py:246
+#: models.py:242
msgid "Can add own Operation"
msgstr ""
-#: models.py:247
+#: models.py:243
msgid "Can change own Operation"
msgstr ""
-#: models.py:248
+#: models.py:244
msgid "Can delete own Operation"
msgstr ""
-#: models.py:249
+#: models.py:245
msgid "Can close Operation"
msgstr ""
-#: models.py:272
+#: models.py:268
msgid "OPE"
msgstr ""
-#: models.py:332
+#: models.py:325
msgid "Intercommunal"
msgstr ""
-#: models.py:358 models.py:535
+#: models.py:351 models.py:527
msgid "Archaeological file"
msgstr ""
-#: models.py:359
+#: models.py:352
msgid "Code patriarche"
msgstr ""
-#: models.py:401
+#: models.py:394
msgid "This operation code already exists for this year"
msgstr ""
-#: models.py:467
+#: models.py:459
msgid "Inverse relation"
msgstr ""
-#: models.py:471
+#: models.py:463
msgid "Operation relation type"
msgstr ""
-#: models.py:472
+#: models.py:464
msgid "Operation relation types"
msgstr ""
-#: models.py:485
+#: models.py:477
msgid "Operation record relation"
msgstr ""
-#: models.py:486
+#: models.py:478
msgid "Operation record relations"
msgstr ""
-#: models.py:507
+#: models.py:499
msgid "Operation documentation"
msgstr ""
-#: models.py:508
+#: models.py:500
msgid "Operation documentations"
msgstr ""
-#: models.py:511
-msgid "Can view all Operation source"
+#: models.py:503
+msgid "Can view all Operation sources"
msgstr ""
-#: models.py:513
+#: models.py:505
msgid "Can view own Operation source"
msgstr ""
-#: models.py:515
+#: models.py:507
msgid "Can add own Operation source"
msgstr ""
-#: models.py:517
+#: models.py:509
msgid "Can change own Operation source"
msgstr ""
-#: models.py:519
+#: models.py:511
msgid "Can delete own Operation source"
msgstr ""
-#: models.py:538
+#: models.py:530
msgid "Intended to"
msgstr ""
-#: models.py:540
+#: models.py:532
msgid "Code"
msgstr ""
-#: models.py:543
+#: models.py:535
msgid "Associated template"
msgstr ""
-#: models.py:544
+#: models.py:536
msgid "Indexed"
msgstr ""
-#: models.py:548
+#: models.py:540
msgid "Act types"
msgstr ""
-#: models.py:571
+#: models.py:562
msgid "Person in charge of the operation"
msgstr ""
-#: models.py:577
+#: models.py:568
msgid "Archaeological preventive operator"
msgstr ""
-#: models.py:585
+#: models.py:576
msgid "Signatory"
msgstr ""
-#: models.py:604
+#: models.py:594
msgid "Departments"
msgstr ""
-#: models.py:605
+#: models.py:595
msgid "Cached values get from associated departments"
msgstr ""
-#: models.py:608
+#: models.py:598
msgid "Cached values get from associated towns"
msgstr ""
-#: models.py:615
+#: models.py:605 templates/ishtar/sheet_operation.html:134
msgid "Administrative acts"
msgstr ""
-#: models.py:618
-msgid "Can view all Administrative act"
+#: models.py:608
+msgid "Can view all Administrative acts"
msgstr ""
-#: models.py:620
+#: models.py:610
msgid "Can view own Administrative act"
msgstr ""
-#: models.py:622
+#: models.py:612
msgid "Can add own Administrative act"
msgstr ""
-#: models.py:624
+#: models.py:614
msgid "Can change own Administrative act"
msgstr ""
-#: models.py:626
+#: models.py:616
msgid "Can delete own Administrative act"
msgstr ""
-#: models.py:635
+#: models.py:625
#: templates/ishtar/blocks/window_tables/administrativacts.html:5
+#: templates/ishtar/blocks/window_tables/archaeologicalsites.html:5
msgid "Ref."
msgstr ""
-#: models.py:718
+#: models.py:708
msgid "This index already exists for this year"
msgstr ""
-#: models.py:785
+#: models.py:774
msgid "External ID"
msgstr ""
-#: models.py:787
+#: models.py:776
msgid "Address - Locality"
msgstr ""
-#: models.py:947
+#: models.py:934
msgid "Owner"
msgstr ""
-#: models.py:955
+#: models.py:942
msgid "Parcel owner"
msgstr ""
-#: models.py:956
+#: models.py:943
msgid "Parcel owners"
msgstr ""
-#: models.py:982
+#: models.py:969
msgid "Recorded"
msgstr ""
-#: models.py:983
+#: models.py:970
msgid "Effective"
msgstr ""
-#: models.py:984
+#: models.py:971
msgid "Active"
msgstr ""
-#: models.py:985
+#: models.py:972
msgid "Field completed"
msgstr ""
-#: models.py:986
+#: models.py:973
msgid "Associated report"
msgstr ""
-#: models.py:987
+#: models.py:974
msgid "Closed"
msgstr ""
-#: models.py:988
+#: models.py:975
msgid "Documented and closed"
msgstr ""
-#: models.py:1414
+#: models.py:1401
msgid "Is preventive"
msgstr ""
-#: models.py:1417
+#: models.py:1404
msgid "Operation type old"
msgstr ""
-#: models.py:1418
+#: models.py:1405
msgid "Operation types old"
msgstr ""
-#: views.py:252
+#: views.py:258
msgid "New operation"
msgstr ""
-#: views.py:287
+#: views.py:294
msgid "Operation modification"
msgstr ""
-#: views.py:327
+#: views.py:334
msgid "Operation closing"
msgstr ""
-#: views.py:333
+#: views.py:340
msgid "Operation deletion"
msgstr ""
-#: views.py:338
+#: views.py:345
msgid "Operation: source search"
msgstr ""
-#: views.py:346
+#: views.py:353
msgid "Operation: source creation"
msgstr ""
-#: views.py:354
+#: views.py:361
msgid "Operation: source modification"
msgstr ""
-#: views.py:360
+#: views.py:367
msgid "Operation: source deletion"
msgstr ""
-#: views.py:375
+#: views.py:382
msgid "Operation: new administrative act"
msgstr ""
-#: views.py:385
+#: views.py:392
msgid "Operation: administrative act modification"
msgstr ""
-#: views.py:394
+#: views.py:401
msgid "Operation: administrative act deletion"
msgstr ""
-#: wizards.py:203
+#: wizards.py:199
msgid ""
"Warning: No Archaelogical File is provided. If you have forget it return to "
"the first step."
@@ -1069,47 +1074,43 @@ msgstr ""
msgid "Permit reference:"
msgstr ""
-#: templates/ishtar/sheet_operation.html:99
+#: templates/ishtar/sheet_operation.html:100
msgid "Localisation"
msgstr ""
-#: templates/ishtar/sheet_operation.html:100
+#: templates/ishtar/sheet_operation.html:101
msgid "Towns:"
msgstr ""
-#: templates/ishtar/sheet_operation.html:102
+#: templates/ishtar/sheet_operation.html:104
msgid "Main address:"
msgstr ""
-#: templates/ishtar/sheet_operation.html:103
+#: templates/ishtar/sheet_operation.html:105
msgid "Complement:"
msgstr ""
-#: templates/ishtar/sheet_operation.html:104
+#: templates/ishtar/sheet_operation.html:106
msgid "Postal code:"
msgstr ""
-#: templates/ishtar/sheet_operation.html:118
+#: templates/ishtar/sheet_operation.html:120
msgid "Details"
msgstr ""
-#: templates/ishtar/sheet_operation.html:123
+#: templates/ishtar/sheet_operation.html:130
msgid "Associated parcels"
msgstr ""
-#: templates/ishtar/sheet_operation.html:127
-msgid "Administrativ acts"
-msgstr ""
-
-#: templates/ishtar/sheet_operation.html:131
+#: templates/ishtar/sheet_operation.html:138
msgid "Document from this operation"
msgstr ""
-#: templates/ishtar/sheet_operation.html:136
+#: templates/ishtar/sheet_operation.html:143
msgid "Context records"
msgstr ""
-#: templates/ishtar/sheet_operation.html:148
+#: templates/ishtar/sheet_operation.html:155
msgid "Finds"
msgstr ""
@@ -1130,6 +1131,10 @@ msgstr ""
msgid "No administrative act associated"
msgstr ""
+#: templates/ishtar/blocks/window_tables/archaeologicalsites.html:18
+msgid "No archaeological site associated"
+msgstr ""
+
#: templates/ishtar/blocks/window_tables/parcels.html:20
msgid "No parcel"
msgstr ""
diff --git a/archaeological_operations/models.py b/archaeological_operations/models.py
index 448adcd68..945af21a4 100644
--- a/archaeological_operations/models.py
+++ b/archaeological_operations/models.py
@@ -35,8 +35,6 @@ from ishtar_common.models import GeneralType, BaseHistorizedItem, \
Person, Organization, Town, Dashboard, IshtarUser, ValueGetter, \
DocumentTemplate, ShortMenuItem, DashboardFormItem, GeneralRelationType,\
GeneralRecordRelations, post_delete_record_relation, OperationType
-FILES_AVAILABLE = 'archaeological_files' in settings.INSTALLED_APPS
-FINDS_AVAILABLE = 'archaeological_finds' in settings.INSTALLED_APPS
class RemainType(GeneralType):
@@ -88,7 +86,7 @@ class ArchaeologicalSite(BaseHistorizedItem):
verbose_name_plural = _(u"Archaeological sites")
permissions = (
("view_archaeologicalsite",
- ugettext(u"Can view all Archaeological site")),
+ ugettext(u"Can view all Archaeological sites")),
("view_own_archaeologicalsite",
ugettext(u"Can view own Archaeological site")),
("add_own_archaeologicalsite",
@@ -137,8 +135,7 @@ class Operation(BaseHistorizedItem, OwnPerms, ValueGetter, ShortMenuItem,
SHOW_URL = 'show-operation'
TABLE_COLS = ['year_index', 'operation_type', 'remains', 'towns',
'start_date', 'excavation_end_date']
- if FILES_AVAILABLE:
- TABLE_COLS.insert(4, 'associated_file_short_label')
+ TABLE_COLS.insert(4, 'associated_file_short_label')
creation_date = models.DateField(_(u"Creation date"),
default=datetime.date.today)
end_date = models.DateField(_(u"Closing date"), null=True, blank=True)
@@ -161,11 +158,10 @@ class Operation(BaseHistorizedItem, OwnPerms, ValueGetter, ShortMenuItem,
year = models.IntegerField(_(u"Year"), null=True, blank=True)
operation_code = models.IntegerField(_(u"Operation code"), null=True,
blank=True)
- if FILES_AVAILABLE:
- associated_file = models.ForeignKey(
- 'archaeological_files.File',
- related_name='operations', verbose_name=_(u"File"),
- blank=True, null=True)
+ associated_file = models.ForeignKey(
+ 'archaeological_files.File',
+ related_name='operations', verbose_name=_(u"File"),
+ blank=True, null=True)
operation_type = models.ForeignKey(OperationType, related_name='+',
verbose_name=_(u"Operation type"))
surface = models.IntegerField(_(u"Surface (m2)"), blank=True, null=True)
@@ -241,7 +237,7 @@ class Operation(BaseHistorizedItem, OwnPerms, ValueGetter, ShortMenuItem,
verbose_name = _(u"Operation")
verbose_name_plural = _(u"Operations")
permissions = (
- ("view_operation", ugettext(u"Can view all Operation")),
+ ("view_operation", ugettext(u"Can view all Operations")),
("view_own_operation", ugettext(u"Can view own Operation")),
("add_own_operation", ugettext(u"Can add own Operation")),
("change_own_operation", ugettext(u"Can change own Operation")),
@@ -286,15 +282,12 @@ class Operation(BaseHistorizedItem, OwnPerms, ValueGetter, ShortMenuItem,
return reverse('show-operation', args=[self.pk, ''])
def has_finds(self):
- if not FINDS_AVAILABLE:
- return
from archaeological_finds.models import BaseFind
return BaseFind.objects.filter(context_record__operation=self).count()
def finds(self):
- if FINDS_AVAILABLE:
- from archaeological_finds.models import BaseFind
- return BaseFind.objects.filter(context_record__operation=self)
+ from archaeological_finds.models import BaseFind
+ return BaseFind.objects.filter(context_record__operation=self)
def get_reference(self, full=False):
ref = ""
@@ -360,7 +353,7 @@ class Operation(BaseHistorizedItem, OwnPerms, ValueGetter, ShortMenuItem,
@property
def associated_file_short_label(self):
- if not FILES_AVAILABLE or not self.associated_file:
+ if not self.associated_file:
return ""
return self.associated_file.short_label
@@ -453,10 +446,9 @@ def operation_post_save(sender, **kwargs):
operation.fnap_financing = fnap_percent
operation.save()
cached_label_changed(sender, **kwargs)
- if FILES_AVAILABLE and operation.associated_file:
+ if operation.associated_file:
operation.associated_file.update_short_menu_class()
- # manage parcel association
- if FILES_AVAILABLE and operation.associated_file:
+ # manage parcel association
for parcel in operation.parcels.all():
parcel.copy_to_file()
post_save.connect(operation_post_save, sender=Operation)
@@ -508,7 +500,7 @@ class OperationSource(Source):
verbose_name_plural = _(u"Operation documentations")
permissions = (
("view_operationsource",
- ugettext(u"Can view all Operation source")),
+ ugettext(u"Can view all Operation sources")),
("view_own_operationsource",
ugettext(u"Can view own Operation source")),
("add_own_operationsource",
@@ -548,216 +540,214 @@ class ActType(GeneralType):
verbose_name_plural = _(u"Act types")
ordering = ('label',)
-AdministrativeAct = None
-if FILES_AVAILABLE:
- class AdministrativeAct(BaseHistorizedItem, OwnPerms, ValueGetter):
- TABLE_COLS = ['full_ref', 'year', 'index', 'act_type', 'act_object',
- 'signature_date', 'associated_file', 'operation',
- 'towns_label']
- TABLE_COLS_FILE = [
- 'full_ref', 'year', 'index', 'act_type',
- 'act_object', 'associated_file', 'towns_label',
- ]
- TABLE_COLS_OPE = ['full_ref', 'year', 'index', 'act_type', 'operation',
- 'act_object', 'towns_label']
- if settings.COUNTRY == 'fr':
- TABLE_COLS.append('departments_label')
- TABLE_COLS_FILE.append('departments_label')
- TABLE_COLS_OPE.append('departments_label')
- act_type = models.ForeignKey(ActType, verbose_name=_(u"Act type"))
- in_charge = models.ForeignKey(
- Person, blank=True, null=True,
- related_name='adminact_operation_in_charge',
- verbose_name=_(u"Person in charge of the operation"),
- on_delete=models.SET_NULL,)
- index = models.IntegerField(verbose_name=_(u"Index"), blank=True,
- null=True)
- operator = models.ForeignKey(
- Organization, blank=True, null=True,
- verbose_name=_(u"Archaeological preventive operator"),
- related_name='adminact_operator', on_delete=models.SET_NULL)
- scientist = models.ForeignKey(
- Person, blank=True, null=True,
- related_name='adminact_scientist', on_delete=models.SET_NULL,
- verbose_name=_(u"Scientist in charge"))
- signatory = models.ForeignKey(
- Person, blank=True, null=True, related_name='signatory',
- verbose_name=_(u"Signatory"), on_delete=models.SET_NULL,)
- operation = models.ForeignKey(
- Operation, blank=True, null=True,
- related_name='administrative_act', verbose_name=_(u"Operation"))
- if FILES_AVAILABLE:
- associated_file = models.ForeignKey(
- 'archaeological_files.File',
- blank=True, null=True,
- related_name='administrative_act',
- verbose_name=_(u"Archaelogical file"))
- signature_date = models.DateField(_(u"Signature date"), blank=True,
- null=True)
- year = models.IntegerField(_(u"Year"), blank=True, null=True)
- act_object = models.TextField(_(u"Object"), max_length=300, blank=True,
+
+class AdministrativeAct(BaseHistorizedItem, OwnPerms, ValueGetter):
+ TABLE_COLS = ['full_ref', 'year', 'index', 'act_type', 'act_object',
+ 'signature_date', 'associated_file', 'operation',
+ 'towns_label']
+ TABLE_COLS_FILE = [
+ 'full_ref', 'year', 'index', 'act_type',
+ 'act_object', 'associated_file', 'towns_label',
+ ]
+ TABLE_COLS_OPE = ['full_ref', 'year', 'index', 'act_type', 'operation',
+ 'act_object', 'towns_label']
+ if settings.COUNTRY == 'fr':
+ TABLE_COLS.append('departments_label')
+ TABLE_COLS_FILE.append('departments_label')
+ TABLE_COLS_OPE.append('departments_label')
+ act_type = models.ForeignKey(ActType, verbose_name=_(u"Act type"))
+ in_charge = models.ForeignKey(
+ Person, blank=True, null=True,
+ related_name='adminact_operation_in_charge',
+ verbose_name=_(u"Person in charge of the operation"),
+ on_delete=models.SET_NULL,)
+ index = models.IntegerField(verbose_name=_(u"Index"), blank=True,
+ null=True)
+ operator = models.ForeignKey(
+ Organization, blank=True, null=True,
+ verbose_name=_(u"Archaeological preventive operator"),
+ related_name='adminact_operator', on_delete=models.SET_NULL)
+ scientist = models.ForeignKey(
+ Person, blank=True, null=True,
+ related_name='adminact_scientist', on_delete=models.SET_NULL,
+ verbose_name=_(u"Scientist in charge"))
+ signatory = models.ForeignKey(
+ Person, blank=True, null=True, related_name='signatory',
+ verbose_name=_(u"Signatory"), on_delete=models.SET_NULL,)
+ operation = models.ForeignKey(
+ Operation, blank=True, null=True,
+ related_name='administrative_act', verbose_name=_(u"Operation"))
+ associated_file = models.ForeignKey(
+ 'archaeological_files.File',
+ blank=True, null=True,
+ related_name='administrative_act',
+ verbose_name=_(u"Archaelogical file"))
+ signature_date = models.DateField(_(u"Signature date"), blank=True,
null=True)
- if settings.COUNTRY == 'fr':
- ref_sra = models.CharField(u"Référence SRA", max_length=15,
- blank=True, null=True)
- departments_label = models.TextField(
- _(u"Departments"), blank=True, null=True,
- help_text=_(u"Cached values get from associated departments"))
- towns_label = models.TextField(
- _(u"Towns"), blank=True, null=True,
- help_text=_(u"Cached values get from associated towns"))
- history = HistoricalRecords()
- _prefix = 'adminact_'
-
- class Meta:
- ordering = ('year', 'signature_date', 'index', 'act_type')
- verbose_name = _(u"Administrative act")
- verbose_name_plural = _(u"Administrative acts")
- permissions = (
- ("view_administrativeact",
- ugettext(u"Can view all Administrative act")),
- ("view_own_administrativeact",
- ugettext(u"Can view own Administrative act")),
- ("add_own_administrativeact",
- ugettext(u"Can add own Administrative act")),
- ("change_own_administrativeact",
- ugettext(u"Can change own Administrative act")),
- ("delete_own_administrativeact",
- ugettext(u"Can delete own Administrative act")),
- )
+ year = models.IntegerField(_(u"Year"), blank=True, null=True)
+ act_object = models.TextField(_(u"Object"), max_length=300, blank=True,
+ null=True)
+ if settings.COUNTRY == 'fr':
+ ref_sra = models.CharField(u"Référence SRA", max_length=15,
+ blank=True, null=True)
+ departments_label = models.TextField(
+ _(u"Departments"), blank=True, null=True,
+ help_text=_(u"Cached values get from associated departments"))
+ towns_label = models.TextField(
+ _(u"Towns"), blank=True, null=True,
+ help_text=_(u"Cached values get from associated towns"))
+ history = HistoricalRecords()
+ _prefix = 'adminact_'
+
+ class Meta:
+ ordering = ('year', 'signature_date', 'index', 'act_type')
+ verbose_name = _(u"Administrative act")
+ verbose_name_plural = _(u"Administrative acts")
+ permissions = (
+ ("view_administrativeact",
+ ugettext(u"Can view all Administrative acts")),
+ ("view_own_administrativeact",
+ ugettext(u"Can view own Administrative act")),
+ ("add_own_administrativeact",
+ ugettext(u"Can add own Administrative act")),
+ ("change_own_administrativeact",
+ ugettext(u"Can change own Administrative act")),
+ ("delete_own_administrativeact",
+ ugettext(u"Can delete own Administrative act")),
+ )
+
+ def __unicode__(self):
+ return settings.JOINT.join(
+ [unicode(item) for item in [
+ self.operation, self.associated_file, self.act_object]
+ if item])
- def __unicode__(self):
- return settings.JOINT.join(
- [unicode(item) for item in [
- self.operation, self.associated_file, self.act_object]
- if item])
-
- full_ref_lbl = _(u"Ref.")
-
- @property
- def full_ref(self):
- lbl = []
- if self.year:
- lbl.append(unicode(self.year))
- if self.index:
- lbl.append(u"n°%d" % self.index)
- if settings.COUNTRY == 'fr' and self.ref_sra:
- lbl.append(u"[%s]" % self.ref_sra)
- return u" ".join(lbl)
-
- @property
- def towns(self):
- if self.associated_file:
- return self.associated_file.towns.all()
- elif self.operation:
- return self.operation.towns.all()
- return []
-
- @property
- def departments(self):
- if settings.COUNTRY != 'fr':
- return ''
- q = None
- if self.associated_file:
- q = self.associated_file.towns.all()
- elif self.operation:
- q = self.operation.towns.all()
- if not q:
- return ''
- dpts = []
- for town in q:
- dpt = town.numero_insee[:2]
- if dpt not in dpts:
- dpts.append(dpt)
- return ', '.join(list(sorted(dpts)))
-
- @property
- def related_item(self):
- return self.operation if self.operation else self.associated_file
-
- def get_filename(self):
- filename = self.related_item.associated_filename
- filename = u"-".join(filename.split('-')[:-1]) # remove date
- if self.act_type.code:
- filename += u"-" + self.act_type.code
- if self.signature_date and self.index:
- filename += u"-%d-%d" % (self.signature_date.year,
- self.index)
- if self.signature_date:
- filename += u"-" + self.signature_date.strftime('%Y%m%d')
- return filename
-
- def publish(self, template_pk=None):
- if not self.act_type.associated_template.count():
+ full_ref_lbl = _(u"Ref.")
+
+ @property
+ def full_ref(self):
+ lbl = []
+ if self.year:
+ lbl.append(unicode(self.year))
+ if self.index:
+ lbl.append(u"n°%d" % self.index)
+ if settings.COUNTRY == 'fr' and self.ref_sra:
+ lbl.append(u"[%s]" % self.ref_sra)
+ return u" ".join(lbl)
+
+ @property
+ def towns(self):
+ if self.associated_file:
+ return self.associated_file.towns.all()
+ elif self.operation:
+ return self.operation.towns.all()
+ return []
+
+ @property
+ def departments(self):
+ if settings.COUNTRY != 'fr':
+ return ''
+ q = None
+ if self.associated_file:
+ q = self.associated_file.towns.all()
+ elif self.operation:
+ q = self.operation.towns.all()
+ if not q:
+ return ''
+ dpts = []
+ for town in q:
+ dpt = town.numero_insee[:2]
+ if dpt not in dpts:
+ dpts.append(dpt)
+ return ', '.join(list(sorted(dpts)))
+
+ @property
+ def related_item(self):
+ return self.operation if self.operation else self.associated_file
+
+ def get_filename(self):
+ filename = self.related_item.associated_filename
+ filename = u"-".join(filename.split('-')[:-1]) # remove date
+ if self.act_type.code:
+ filename += u"-" + self.act_type.code
+ if self.signature_date and self.index:
+ filename += u"-%d-%d" % (self.signature_date.year,
+ self.index)
+ if self.signature_date:
+ filename += u"-" + self.signature_date.strftime('%Y%m%d')
+ return filename
+
+ def publish(self, template_pk=None):
+ if not self.act_type.associated_template.count():
+ return
+ if not template_pk:
+ template = self.act_type.associated_template.all()[0]
+ else:
+ q = self.act_type.associated_template.filter(pk=template_pk)
+ if not q.count():
return
- if not template_pk:
- template = self.act_type.associated_template.all()[0]
- else:
- q = self.act_type.associated_template.filter(pk=template_pk)
- if not q.count():
- return
- template = q.all()[0]
- return template.publish(self)
-
- def _get_index(self):
- if not self.index:
- c_index = 1
- q = AdministrativeAct.objects.filter(
- act_type__indexed=True, signature_date__year=self.year,
- index__isnull=False).order_by("-index")
- if q.count():
- c_index = q.all()[0].index + 1
- self.index = c_index
- conflict = AdministrativeAct.objects.filter(
+ template = q.all()[0]
+ return template.publish(self)
+
+ def _get_index(self):
+ if not self.index:
+ c_index = 1
+ q = AdministrativeAct.objects.filter(
act_type__indexed=True, signature_date__year=self.year,
- index=self.index)
+ index__isnull=False).order_by("-index")
+ if q.count():
+ c_index = q.all()[0].index + 1
+ self.index = c_index
+ conflict = AdministrativeAct.objects.filter(
+ act_type__indexed=True, signature_date__year=self.year,
+ index=self.index)
+ if self.pk:
+ conflict = conflict.exclude(pk=self.pk)
+ if conflict.count():
if self.pk:
- conflict = conflict.exclude(pk=self.pk)
- if conflict.count():
- if self.pk:
- raise ValidationError(_(u"This index already exists for "
- u"this year"))
- else:
- self._get_index()
-
- def clean(self, *args, **kwargs):
- if not self.signature_date:
- return super(AdministrativeAct, self).clean(*args, **kwargs)
- self.year = self.signature_date.year
- if not self.act_type.indexed:
- return super(AdministrativeAct, self).clean(*args, **kwargs)
- self._get_index()
- super(AdministrativeAct, self).clean(*args, **kwargs)
+ raise ValidationError(_(u"This index already exists for "
+ u"this year"))
+ else:
+ self._get_index()
+
+ def clean(self, *args, **kwargs):
+ if not self.signature_date:
+ return super(AdministrativeAct, self).clean(*args, **kwargs)
+ self.year = self.signature_date.year
+ if not self.act_type.indexed:
+ return super(AdministrativeAct, self).clean(*args, **kwargs)
+ self._get_index()
+ super(AdministrativeAct, self).clean(*args, **kwargs)
- def save(self, *args, **kwargs):
- if settings.COUNTRY == 'fr':
- self.departments_label = self.departments
- self.towns_label = u", ".join(
- list(sorted([unicode(town) for town in self.towns])))
+ def save(self, *args, **kwargs):
+ if settings.COUNTRY == 'fr':
+ self.departments_label = self.departments
+ self.towns_label = u", ".join(
+ list(sorted([unicode(town) for town in self.towns])))
- force = False
- if 'force' in kwargs:
- force = kwargs.pop('force')
+ force = False
+ if 'force' in kwargs:
+ force = kwargs.pop('force')
- if not self.signature_date:
- return super(AdministrativeAct, self).save(*args, **kwargs)
- self.year = self.signature_date.year
+ if not self.signature_date:
+ return super(AdministrativeAct, self).save(*args, **kwargs)
+ self.year = self.signature_date.year
- if not self.act_type.indexed:
- return super(AdministrativeAct, self).save(*args, **kwargs)
+ if not self.act_type.indexed:
+ return super(AdministrativeAct, self).save(*args, **kwargs)
- if not force:
+ if not force:
+ self._get_index()
+ else:
+ try:
self._get_index()
- else:
- try:
- self._get_index()
- except:
- pass
+ except:
+ pass
- super(AdministrativeAct, self).save(*args, **kwargs)
- if hasattr(self, 'associated_file') and self.associated_file:
- self.associated_file.update_has_admin_act()
- self.associated_file.update_short_menu_class()
+ super(AdministrativeAct, self).save(*args, **kwargs)
+ if hasattr(self, 'associated_file') and self.associated_file:
+ self.associated_file.update_has_admin_act()
+ self.associated_file.update_short_menu_class()
def strip_zero(value):
@@ -768,11 +758,10 @@ def strip_zero(value):
class Parcel(LightHistorizedItem):
- if FILES_AVAILABLE:
- associated_file = models.ForeignKey(
- 'archaeological_files.File',
- related_name='parcels', verbose_name=_(u"File"),
- blank=True, null=True)
+ associated_file = models.ForeignKey(
+ 'archaeological_files.File',
+ related_name='parcels', verbose_name=_(u"File"),
+ blank=True, null=True)
operation = models.ForeignKey(
Operation, related_name='parcels', blank=True, null=True,
verbose_name=_(u"Operation"))
@@ -867,7 +856,7 @@ class Parcel(LightHistorizedItem):
def long_label(self):
items = [unicode(self.operation) or
- (FILES_AVAILABLE and unicode(self.associated_file)) or ""]
+ unicode(self.associated_file) or ""]
items += [unicode(item) for item in [self.section, self.parcel_number]
if item]
return settings.JOINT.join(items)
@@ -931,12 +920,10 @@ def parcel_post_save(sender, **kwargs):
if parcel.operation and parcel.operation.pk and \
parcel.town not in list(parcel.operation.towns.all()):
parcel.operation.towns.add(parcel.town)
- if FILES_AVAILABLE and parcel.associated_file and \
+ if parcel.associated_file and \
parcel.associated_file.pk and \
parcel.town not in list(parcel.associated_file.towns.all()):
parcel.associated_file.towns.add(parcel.town)
- if not FILES_AVAILABLE:
- return
if parcel.operation and parcel.associated_file:
# parcels are copied between files and operations
parcel.copy_to_operation()
diff --git a/archaeological_operations/templates/ishtar/blocks/window_tables/archaeologicalsites.html b/archaeological_operations/templates/ishtar/blocks/window_tables/archaeologicalsites.html
new file mode 100644
index 000000000..d72291c5b
--- /dev/null
+++ b/archaeological_operations/templates/ishtar/blocks/window_tables/archaeologicalsites.html
@@ -0,0 +1,20 @@
+{% load i18n %}
+<table class='simple'>
+ <caption>{{caption}}</caption>
+ <tr>
+ <th>{% trans "Ref." %}</th>
+ <th>{% trans "Name" %}</th>
+ <th>{% trans "Periods" %}</th>
+ <th>{% trans "Remains" %}</th>
+ </tr>
+ {% for archaeosite in data %}
+ <tr>
+ <td class='string'>{{archaeosite.reference}}</td>
+ <td class='string'>{{archaeosite.name}}</td>
+ <td class='string'>{% for period in archaeosite.periods.all %}{{period}}{% include "blocks/comma_list.html" %}{% endfor %}</td>
+ <td class='string'>{% for remain in archaeosite.remains.all %}{{remain}}{% include "blocks/comma_list.html" %}{% endfor %}</td>
+ </tr>
+ {% empty %}
+ <tr><td colspan="4" class='no_items'>{% trans "No archaeological site associated" %}</td></tr>
+ {% endfor %}
+</table>
diff --git a/archaeological_operations/templates/ishtar/sheet_operation.html b/archaeological_operations/templates/ishtar/sheet_operation.html
index c45d6eb73..14210046b 100644
--- a/archaeological_operations/templates/ishtar/sheet_operation.html
+++ b/archaeological_operations/templates/ishtar/sheet_operation.html
@@ -96,8 +96,10 @@
{% field "Comment" item.comment "<pre>" "</pre>" %}
+{% if item.towns.count %}
<h3>{% trans "Localisation"%}</h3>
<p><label>{%trans "Towns:"%}</label> <span class='value'>{{ item.towns.all|join:", " }}</span></p>
+{% endif %}
{% if item.associated_file.address %}<p><label>{%trans "Main address:"%}</label> <span class='value'>{{ item.associated_file.address }}</span></p>
{% if item.associated_file.address_complement %}<p><label>{%trans "Complement:"%}</label> <span class='value'>{{ item.associated_file.address_complement }}</span></p>{%endif%}
@@ -120,34 +122,39 @@
{% endfor %}
{% endif %}
+{% if item.archaeological_sites.count %}
+{% trans "Archaeological sites" as archaeologicalsites_label %}
+{% table_archaeologicalsites archaeologicalsites_label item.archaeological_sites.all %}
+{% endif %}
+
{% trans "Associated parcels" as parcels_label %}
{% include "ishtar/blocks/window_tables/parcels.html" %}
{% if item.administrative_act %}
-{% trans "Administrativ acts" as administrativeacts_label %}
+{% trans "Administrative acts" as administrativeacts_label %}
{% table_administrativact administrativeacts_label item.administrative_act.all %}
{% endif %}
{% trans "Document from this operation" as operation_docs %}
{% if item.source.count %}
-{% dynamic_table_document operation_docs 'operation_docs' 'operation' item.pk %}
+{% dynamic_table_document operation_docs 'operation_docs' 'operation' item.pk '' output %}
{% endif %}
{% trans "Context records" as context_records %}
{% if item.context_record.count %}
-{% dynamic_table_document context_records 'context_records_for_ope' 'operation' item.pk 'TABLE_COLS_FOR_OPE' %}
+{% dynamic_table_document context_records 'context_records_for_ope' 'operation' item.pk 'TABLE_COLS_FOR_OPE' output %}
{% endif %}
{% comment %}
{% trans "Documents from associated context records" as cr_docs %}
{% if item.context_record_docs_q.count %}
-{% dynamic_table_document cr_docs 'context_records_docs' 'context_record__operation' item.pk %}
+{% dynamic_table_document cr_docs 'context_records_docs' 'context_record__operation' item.pk '' output %}
{% endif %}
{% endcomment %}
{% trans "Finds" as finds %}
{% if item.finds %}
-{% dynamic_table_document finds 'finds_for_ope' 'base_finds__context_record__operation' item.pk 'TABLE_COLS_FOR_OPE' %}
+{% dynamic_table_document finds 'finds_for_ope' 'base_finds__context_record__operation' item.pk 'TABLE_COLS_FOR_OPE' output %}
{% endif %}
{% comment %}
diff --git a/archaeological_operations/templatetags/window_ope_tables.py b/archaeological_operations/templatetags/window_ope_tables.py
index 5576fe32d..ca263832f 100644
--- a/archaeological_operations/templatetags/window_ope_tables.py
+++ b/archaeological_operations/templatetags/window_ope_tables.py
@@ -1,10 +1,13 @@
from django import template
-from django.utils.translation import ugettext as _
-import re
register = template.Library()
+
@register.inclusion_tag('ishtar/blocks/window_tables/administrativacts.html')
def table_administrativact(caption, data):
- return {'caption':caption, 'data':data}
+ return {'caption': caption, 'data': data}
+
+@register.inclusion_tag('ishtar/blocks/window_tables/archaeologicalsites.html')
+def table_archaeologicalsites(caption, data):
+ return {'caption': caption, 'data': data}
diff --git a/archaeological_operations/views.py b/archaeological_operations/views.py
index 5299b7131..0b9b9c453 100644
--- a/archaeological_operations/views.py
+++ b/archaeological_operations/views.py
@@ -30,6 +30,7 @@ from ishtar_common.wizards import SearchWizard, check_rights_condition
from ishtar_common.forms import ClosingDateFormSelection
from ishtar_common.forms_common import AuthorFormset, TownFormset, \
SourceDeletionForm
+from ishtar_common.models import get_current_profile
from wizards import *
from forms import *
import models
@@ -231,7 +232,9 @@ operation_search_wizard = SearchWizard.as_view([
url_name='operation_search',)
wizard_steps = [
+ ('filechoice-operation_creation', OperationFormFileChoice),
('general-operation_creation', OperationFormGeneral),
+ ('archaeologicalsite-operation_creation', ArchaeologicalSiteFormSet),
('preventive-operation_creation', OperationFormPreventive),
('preventivediag-operation_creation', OperationFormPreventiveDiag),
('townsgeneral-operation_creation', TownFormset),
@@ -243,16 +246,19 @@ wizard_steps = [
('relations-operation_creation', RecordRelationsFormSet),
('abstract-operation_creation', OperationFormAbstract),
('final-operation_creation', FinalForm)]
-if FILES_AVAILABLE:
- wizard_steps.insert(0, ('filechoice-operation_creation',
- OperationFormFileChoice))
+
+
+def check_files_for_operation(self):
+ if not check_rights_condition(['view_file'])(self):
+ return False
+ return get_current_profile().files
operation_creation_wizard = OperationWizard.as_view(
wizard_steps,
label=_(u"New operation"),
condition_dict={
'filechoice-operation_creation':
- check_rights_condition(['view_file']),
+ check_files_for_operation,
'preventive-operation_creation':
is_preventive('general-operation_creation', models.OperationType,
'operation_type', 'prev_excavation'),
@@ -273,6 +279,7 @@ operation_creation_wizard = OperationWizard.as_view(
operation_modification_wizard = OperationModificationWizard.as_view([
('selec-operation_modification', OperationFormSelection),
('general-operation_modification', OperationFormModifGeneral),
+ ('archaeologicalsite-operation_modification', ArchaeologicalSiteFormSet),
('preventive-operation_modification', OperationFormPreventive),
('preventivediag-operation_modification', OperationFormPreventiveDiag),
('towns-operation_modification', SelectedTownFormset),
diff --git a/archaeological_operations/wizards.py b/archaeological_operations/wizards.py
index 6e512e826..c90b6fa8a 100644
--- a/archaeological_operations/wizards.py
+++ b/archaeological_operations/wizards.py
@@ -31,9 +31,7 @@ from ishtar_common.wizards import Wizard, ClosingWizard, DeletionWizard, \
import models
from forms import GenerateDocForm
-FILES_AVAILABLE = 'archaeological_files' in settings.INSTALLED_APPS
-if FILES_AVAILABLE:
- from archaeological_files.models import File
+from archaeological_files.models import File
class OperationWizard(Wizard):
@@ -59,7 +57,7 @@ class OperationWizard(Wizard):
def get_current_file(self):
step = self.steps.current
- if not FILES_AVAILABLE or not step:
+ if not step:
return
file_form_key = 'general-' + self.url_name
if self.url_name == 'operation_creation':
@@ -104,8 +102,6 @@ class OperationWizard(Wizard):
"""
Get available towns
"""
- if not FILES_AVAILABLE:
- return -1
towns = []
file = self.get_current_file()
if not file:
diff --git a/archaeological_warehouse/ishtar_menu.py b/archaeological_warehouse/ishtar_menu.py
index 3551fab00..f9f0daf33 100644
--- a/archaeological_warehouse/ishtar_menu.py
+++ b/archaeological_warehouse/ishtar_menu.py
@@ -28,6 +28,7 @@ from archaeological_finds.models import Treatment
MENU_SECTIONS = [
(60, SectionItem('find_management', _(u"Find"),
+ profile_restriction='warehouse',
childs=[
MenuItem('warehouse_packaging', _(u"Packaging"),
model=Treatment,
diff --git a/archaeological_warehouse/locale/django.pot b/archaeological_warehouse/locale/django.pot
index c00251e73..99f03fed7 100644
--- a/archaeological_warehouse/locale/django.pot
+++ b/archaeological_warehouse/locale/django.pot
@@ -2,7 +2,7 @@
# Copyright (C) 2010-2011
# This file is distributed under the same license as the Ishtar package.
# Étienne Loks <etienne.loks at peacefrogs net>, 2010-2011.
-# Étienne Loks <etienne.loks@iggdrasil.net>, 2015. #zanata
+# Valérie-Emma Leroux <emma@iggdrasil.net>, 2016. #zanata
msgid ""
msgstr ""
@@ -74,7 +74,7 @@ msgstr ""
msgid "Add a new container"
msgstr ""
-#: forms.py:132 ishtar_menu.py:32 views.py:94
+#: forms.py:132 ishtar_menu.py:33 views.py:94
msgid "Packaging"
msgstr ""
@@ -103,7 +103,7 @@ msgid "Warehouses"
msgstr ""
#: models.py:47
-msgid "Can view all Warehouse"
+msgid "Can view all Warehouses"
msgstr ""
#: models.py:48
diff --git a/archaeological_warehouse/models.py b/archaeological_warehouse/models.py
index 9f5558d78..86e430a7e 100644
--- a/archaeological_warehouse/models.py
+++ b/archaeological_warehouse/models.py
@@ -44,7 +44,7 @@ class Warehouse(Address, OwnPerms):
verbose_name = _(u"Warehouse")
verbose_name_plural = _(u"Warehouses")
permissions = (
- ("view_warehouse", ugettext(u"Can view all Warehouse")),
+ ("view_warehouse", ugettext(u"Can view all Warehouses")),
("view_own_warehouse", ugettext(u"Can view own Warehouse")),
("add_own_warehouse", ugettext(u"Can add own Warehouse")),
("change_own_warehouse", ugettext(u"Can change own Warehouse")),
diff --git a/example_project/local_settings.py.sample b/example_project/local_settings.py.sample
index dae6f98b5..ee5338801 100644
--- a/example_project/local_settings.py.sample
+++ b/example_project/local_settings.py.sample
@@ -34,13 +34,14 @@ DEBUG_TOOLBAR = False
TEMPLATE_DEBUG = DEBUG
SQL_DEBUG = False
+# important to change on a server hosting multiple ishtar instances
PROJECT_SLUG = "my-project"
# complete with host/domain names that this website can serve
ALLOWED_HOSTS = []
# if your installation uses a prefix after the domain name modify and uncomment
-# theses lines
+# these lines
# DOMAIN_PREFIX = "/ishtar-test"
# LOGIN_URL = DOMAIN_PREFIX + '/accounts/login/'
# LOGIN_REDIRECT_URL = DOMAIN_PREFIX + '/accounts/profile/'
@@ -51,12 +52,3 @@ SRID = 27572
ENCODING = '' # specific encoding for CSV export - default to utf-8
SURFACE_UNIT = 'square-metre'
SURFACE_UNIT_LABEL = u'm²'
-
-# choose the extensions to install
-# you can remove lines according to the comments but don't change the order
-EXTRA_APPS = [
- 'archaeological_files',
- 'archaeological_context_records',
- 'archaeological_warehouse', # need archaeological_finds
- 'archaeological_finds', # need archaeological_context_records
-]
diff --git a/example_project/settings.py b/example_project/settings.py
index e124198aa..98eb14e9e 100644
--- a/example_project/settings.py
+++ b/example_project/settings.py
@@ -104,6 +104,7 @@ TEMPLATE_CONTEXT_PROCESSORS = (
"django.core.context_processors.i18n",
"django.core.context_processors.media",
"django.core.context_processors.static",
+ "django.core.context_processors.request",
)
ROOT_URLCONF = 'example_project.urls'
@@ -125,11 +126,18 @@ INSTALLED_APPS = [
'django.contrib.gis',
'django.contrib.staticfiles',
'django.contrib.formtools',
+ 'django.contrib.messages',
'south',
'registration',
# 'geodjangofla',
+ 'ishtar_pdl',
'ishtar_common',
- 'archaeological_operations', # mandatory app to run ishtar
+ 'archaeological_files_pdl',
+ 'archaeological_files',
+ 'archaeological_operations',
+ 'archaeological_context_records',
+ 'archaeological_warehouse',
+ 'archaeological_finds',
# 'django_extensions',
# 'debug_toolbar',
]
@@ -214,16 +222,6 @@ except ImportError, e:
if 'test' in sys.argv:
SOUTH_TESTS_MIGRATE = False
-for app in PRE_APPS:
- INSTALLED_APPS.insert(INSTALLED_APPS.index('ishtar_common'), app)
-
-if 'archaeological_files' in EXTRA_APPS:
- EXTRA_APPS.pop(EXTRA_APPS.index('archaeological_files'))
- INSTALLED_APPS.insert(INSTALLED_APPS.index('archaeological_operations'),
- 'archaeological_files')
-
-INSTALLED_APPS += EXTRA_APPS
-
PROJECT_SLUG = locals().get('PROJECT_SLUG', 'default')
if LOGFILE:
diff --git a/example_project/urls.py b/example_project/urls.py
index 203c44d4d..62a6b1e04 100644
--- a/example_project/urls.py
+++ b/example_project/urls.py
@@ -14,10 +14,10 @@ APP_LIST = ['archaeological_files_pdl', 'archaeological_files',
'archaeological_operations', 'archaeological_context_records',
'archaeological_warehouse', 'archaeological_finds']
for app in APP_LIST:
- if app in settings.INSTALLED_APPS:
- urlpatterns += patterns(
- '', ('', include(app + '.urls')),
- )
+ # filter by activated apps?
+ urlpatterns += patterns(
+ '', ('', include(app + '.urls')),
+ )
urlpatterns += patterns(
'', ('', include('ishtar_common.urls')),
diff --git a/ishtar_common/admin.py b/ishtar_common/admin.py
index f8cc34208..b7ad530b7 100644
--- a/ishtar_common/admin.py
+++ b/ishtar_common/admin.py
@@ -93,6 +93,14 @@ admin.site.unregister(Group)
admin.site.register(Group, MyGroupAdmin)
+class IshtarSiteProfileAdmin(admin.ModelAdmin):
+ list_display = ('label', 'slug', 'active', 'files', 'context_record',
+ 'find', 'warehouse')
+ model = models.IshtarSiteProfile
+
+admin.site.register(models.IshtarSiteProfile, IshtarSiteProfileAdmin)
+
+
class DepartmentAdmin(admin.ModelAdmin):
list_display = ('number', 'label',)
model = models.Department
diff --git a/ishtar_common/context_processors.py b/ishtar_common/context_processors.py
index ce303c344..03ba9bc36 100644
--- a/ishtar_common/context_processors.py
+++ b/ishtar_common/context_processors.py
@@ -25,18 +25,20 @@ from ishtar_common.utils import shortify
from menus import Menu
+from ishtar_common.models import get_current_profile
from archaeological_operations.models import Operation
+from archaeological_files.models import File
+from archaeological_context_records.models import ContextRecord
+from archaeological_finds.models import Find
+profile = get_current_profile()
CURRENT_ITEMS = []
-if 'archaeological_files' in settings.INSTALLED_APPS:
- from archaeological_files.models import File
+if profile.files:
CURRENT_ITEMS.append((_(u"Archaeological file"), File))
CURRENT_ITEMS.append((_(u"Operation"), Operation))
-if 'archaeological_context_records' in settings.INSTALLED_APPS:
- from archaeological_context_records.models import ContextRecord
+if profile.context_record:
CURRENT_ITEMS.append((_(u"Context record"), ContextRecord))
-if 'archaeological_finds' in settings.INSTALLED_APPS:
- from archaeological_finds.models import Find
+if profile.find:
CURRENT_ITEMS.append((_(u"Find"), Find))
diff --git a/ishtar_common/fixtures/groups_person_types-SRA-fr.json b/ishtar_common/fixtures/groups_person_types-SRA-fr.json
index 6a3044cdd..92fabaccd 100644
--- a/ishtar_common/fixtures/groups_person_types-SRA-fr.json
+++ b/ishtar_common/fixtures/groups_person_types-SRA-fr.json
@@ -112,7 +112,7 @@
"model": "auth.permission",
"fields": {
"codename": "view_contextrecord",
- "name": "Can view all Context Record",
+ "name": "Can view all Context Records",
"content_type": 50
}
},
@@ -382,7 +382,7 @@
"model": "auth.permission",
"fields": {
"codename": "view_file",
- "name": "Can view all Archaelogical file",
+ "name": "Can view all Archaelogical files",
"content_type": 29
}
},
@@ -589,7 +589,7 @@
"model": "auth.permission",
"fields": {
"codename": "view_basefind",
- "name": "Can view all Base find",
+ "name": "Can view all Base finds",
"content_type": 58
}
},
@@ -688,7 +688,7 @@
"model": "auth.permission",
"fields": {
"codename": "view_find",
- "name": "Can view all Find",
+ "name": "Can view all Finds",
"content_type": 60
}
},
@@ -931,7 +931,7 @@
"model": "auth.permission",
"fields": {
"codename": "view_treatment",
- "name": "Can view all Treatment",
+ "name": "Can view all Treatments",
"content_type": 64
}
},
@@ -1075,7 +1075,7 @@
"model": "auth.permission",
"fields": {
"codename": "view_administrativeact",
- "name": "Can view all Administrative act",
+ "name": "Can view all Administrative acts",
"content_type": 40
}
},
@@ -1147,7 +1147,7 @@
"model": "auth.permission",
"fields": {
"codename": "view_archaeologicalsite",
- "name": "Can view all Archaeological site",
+ "name": "Can view all Archaeological sites",
"content_type": 69
}
},
@@ -1282,7 +1282,7 @@
"model": "auth.permission",
"fields": {
"codename": "view_operation",
- "name": "Can view all Operation",
+ "name": "Can view all Operations",
"content_type": 35
}
},
@@ -1381,7 +1381,7 @@
"model": "auth.permission",
"fields": {
"codename": "view_operationsource",
- "name": "Can view all Operation source",
+ "name": "Can view all Operation sources",
"content_type": 37
}
},
@@ -1624,7 +1624,7 @@
"model": "auth.permission",
"fields": {
"codename": "view_warehouse",
- "name": "Can view all Warehouse",
+ "name": "Can view all Warehouses",
"content_type": 53
}
},
@@ -2038,7 +2038,7 @@
"model": "auth.permission",
"fields": {
"codename": "view_organization",
- "name": "Can view all Organization",
+ "name": "Can view all Organizations",
"content_type": 15
}
},
diff --git a/ishtar_common/locale/django.pot b/ishtar_common/locale/django.pot
index bb230179f..6f2d58879 100644
--- a/ishtar_common/locale/django.pot
+++ b/ishtar_common/locale/django.pot
@@ -3,6 +3,7 @@
# This file is distributed under the same license as the Ishtar package.
# Étienne Loks <etienne.loks at peacefrogs net>, 2010-2015.
# Étienne Loks <etienne.loks@iggdrasil.net>, 2015. #zanata
+# Valérie-Emma Leroux <emma@iggdrasil.net>, 2016. #zanata
# Étienne Loks <etienne.loks@iggdrasil.net>, 2016. #zanata
msgid ""
msgstr ""
@@ -19,19 +20,19 @@ msgstr ""
msgid "Related item"
msgstr ""
-#: context_processors.py:33
+#: context_processors.py:37
msgid "Archaeological file"
msgstr ""
-#: context_processors.py:34 models.py:1178
+#: context_processors.py:38 models.py:1251
msgid "Operation"
msgstr ""
-#: context_processors.py:37
+#: context_processors.py:40
msgid "Context record"
msgstr ""
-#: context_processors.py:40
+#: context_processors.py:42
msgid "Find"
msgstr ""
@@ -170,12 +171,12 @@ msgstr ""
msgid "Add a new item"
msgstr ""
-#: forms.py:171 models.py:993
+#: forms.py:171 models.py:1058
msgid "Template"
msgstr ""
#: forms_common.py:39 forms_common.py:57 forms_common.py:169
-#: forms_common.py:269 forms_common.py:274 models.py:1059 models.py:2274
+#: forms_common.py:269 forms_common.py:274 models.py:1124 models.py:2340
#: templates/blocks/JQueryAdvancedTown.html:19
#: templates/ishtar/sheet_organization.html:17
msgid "Town"
@@ -191,64 +192,64 @@ msgid ""
"french town Saint-Denis in the Seine-Saint-Denis department.</p>"
msgstr ""
-#: forms_common.py:66 forms_common.py:648 ishtar_menu.py:42 models.py:1973
-#: models.py:2102 models.py:2156 templates/ishtar/sheet_person.html:6
+#: forms_common.py:66 forms_common.py:648 ishtar_menu.py:42 models.py:2039
+#: models.py:2168 models.py:2222 templates/ishtar/sheet_person.html:6
msgid "Person"
msgstr ""
-#: forms_common.py:157 forms_common.py:231 ishtar_menu.py:66 models.py:1895
+#: forms_common.py:157 forms_common.py:231 ishtar_menu.py:66 models.py:1961
#: templates/ishtar/sheet_organization.html:6
msgid "Organization"
msgstr ""
#: forms_common.py:160 forms_common.py:196 forms_common.py:226
-#: forms_common.py:259 models.py:992 models.py:1228 models.py:1445
-#: models.py:1889 models.py:1963 models.py:2260
+#: forms_common.py:259 models.py:775 models.py:1057 models.py:1293
+#: models.py:1511 models.py:1955 models.py:2029 models.py:2326
#: templates/ishtar/sheet_organization.html:12
#: templates/ishtar/sheet_organization.html:25
msgid "Name"
msgstr ""
-#: forms_common.py:161 models.py:1173 models.py:1576
+#: forms_common.py:161 models.py:1238 models.py:1642
msgid "Organization type"
msgstr ""
-#: forms_common.py:163 forms_common.py:263 models.py:1054
+#: forms_common.py:163 forms_common.py:263 models.py:1119
#: templates/ishtar/sheet_organization.html:14
msgid "Address"
msgstr ""
-#: forms_common.py:165 forms_common.py:265 models.py:1055
+#: forms_common.py:165 forms_common.py:265 models.py:1120
#: templates/ishtar/sheet_organization.html:15
msgid "Address complement"
msgstr ""
-#: forms_common.py:167 forms_common.py:267 models.py:1057
+#: forms_common.py:167 forms_common.py:267 models.py:1122
#: templates/ishtar/sheet_organization.html:16
msgid "Postal code"
msgstr ""
-#: forms_common.py:170 forms_common.py:270 models.py:1060
+#: forms_common.py:170 forms_common.py:270 models.py:1125
msgid "Country"
msgstr ""
#: forms_common.py:172 forms_common.py:228 forms_common.py:272
-#: forms_common.py:376 models.py:1066
+#: forms_common.py:376 models.py:1131
msgid "Email"
msgstr ""
-#: forms_common.py:173 forms_common.py:273 models.py:1062
+#: forms_common.py:173 forms_common.py:273 models.py:1127
#: templates/ishtar/sheet_organization.html:18
msgid "Phone"
msgstr ""
-#: forms_common.py:174 models.py:1063
+#: forms_common.py:174 models.py:1128
#: templates/ishtar/sheet_organization.html:19
msgid "Mobile phone"
msgstr ""
-#: forms_common.py:197 forms_common.py:229 models.py:1600 models.py:1891
-#: models.py:2197 templates/sheet_ope.html:85 templates/sheet_ope.html.py:105
+#: forms_common.py:197 forms_common.py:229 models.py:1666 models.py:1957
+#: models.py:2263 templates/sheet_ope.html:85 templates/sheet_ope.html.py:105
#: templates/sheet_ope.html:126 templates/ishtar/import_list.html:13
#: templates/ishtar/sheet_organization.html:27
#: templates/ishtar/sheet_person.html:56
@@ -256,16 +257,16 @@ msgstr ""
msgid "Type"
msgstr ""
-#: forms_common.py:206 views.py:109
+#: forms_common.py:206 views.py:114
msgid "Organization search"
msgstr ""
-#: forms_common.py:227 forms_common.py:257 models.py:1961
+#: forms_common.py:227 forms_common.py:257 models.py:2027
#: templates/ishtar/sheet_organization.html:26
msgid "Surname"
msgstr ""
-#: forms_common.py:243 views.py:83
+#: forms_common.py:243 views.py:88
msgid "Person search"
msgstr ""
@@ -273,14 +274,14 @@ msgstr ""
msgid "Identity"
msgstr ""
-#: forms_common.py:256 forms_common.py:574 forms_common.py:615 models.py:1959
-#: models.py:2194 templates/sheet_ope.html:104
+#: forms_common.py:256 forms_common.py:574 forms_common.py:615 models.py:2025
+#: models.py:2260 templates/sheet_ope.html:104
#: templates/ishtar/sheet_person.html:55
#: templates/ishtar/blocks/window_tables/documents.html:5
msgid "Title"
msgstr ""
-#: forms_common.py:261 models.py:1965
+#: forms_common.py:261 models.py:2031
msgid "Raw name"
msgstr ""
@@ -288,7 +289,7 @@ msgstr ""
msgid "Current organization"
msgstr ""
-#: forms_common.py:325 forms_common.py:355 forms_common.py:359 models.py:1943
+#: forms_common.py:325 forms_common.py:355 forms_common.py:359 models.py:2009
msgid "Person type"
msgstr ""
@@ -296,7 +297,7 @@ msgstr ""
msgid "Account"
msgstr ""
-#: forms_common.py:379 wizards.py:1146
+#: forms_common.py:379 wizards.py:1154
msgid "New password"
msgstr ""
@@ -320,7 +321,7 @@ msgstr ""
msgid "Send the new password by email?"
msgstr ""
-#: forms_common.py:430 forms_common.py:443 models.py:2275
+#: forms_common.py:430 forms_common.py:443 models.py:2341
msgid "Towns"
msgstr ""
@@ -336,7 +337,7 @@ msgstr ""
msgid "Documentation informations"
msgstr ""
-#: forms_common.py:576 forms_common.py:616 models.py:1577 models.py:2177
+#: forms_common.py:576 forms_common.py:616 models.py:1643 models.py:2243
msgid "Source type"
msgstr ""
@@ -348,41 +349,41 @@ msgstr ""
msgid "Internal reference"
msgstr ""
-#: forms_common.py:584 models.py:2208
+#: forms_common.py:584 models.py:2274
msgid "Numerical ressource (web address)"
msgstr ""
-#: forms_common.py:585 models.py:2210
+#: forms_common.py:585 models.py:2276
msgid "Receipt date"
msgstr ""
-#: forms_common.py:587 models.py:1727 models.py:2212
+#: forms_common.py:587 models.py:1793 models.py:2278
msgid "Creation date"
msgstr ""
-#: forms_common.py:590 models.py:2215
+#: forms_common.py:590 models.py:2281
msgid "Receipt date in documentation"
msgstr ""
-#: forms_common.py:592 forms_common.py:620 models.py:260 models.py:1472
-#: models.py:2222
+#: forms_common.py:592 forms_common.py:620 models.py:277 models.py:1538
+#: models.py:2288
msgid "Comment"
msgstr ""
-#: forms_common.py:594 forms_common.py:619 models.py:1232 models.py:1404
-#: models.py:1446 models.py:2221 templates/sheet_ope.html:128
+#: forms_common.py:594 forms_common.py:619 models.py:777 models.py:1297
+#: models.py:1470 models.py:1512 models.py:2287 templates/sheet_ope.html:128
msgid "Description"
msgstr ""
-#: forms_common.py:597 models.py:2223
+#: forms_common.py:597 models.py:2289
msgid "Additional information"
msgstr ""
-#: forms_common.py:599 forms_common.py:623 models.py:2225
+#: forms_common.py:599 forms_common.py:623 models.py:2291
msgid "Has a duplicate"
msgstr ""
-#: forms_common.py:612 forms_common.py:641 forms_common.py:674 models.py:2161
+#: forms_common.py:612 forms_common.py:641 forms_common.py:674 models.py:2227
#: templates/ishtar/wizard/wizard_person_deletion.html:124
msgid "Author"
msgstr ""
@@ -395,7 +396,7 @@ msgstr ""
msgid "Would you like to delete this documentation?"
msgstr ""
-#: forms_common.py:649 models.py:1578 models.py:2151 models.py:2158
+#: forms_common.py:649 models.py:1644 models.py:2217 models.py:2224
msgid "Author type"
msgstr ""
@@ -407,7 +408,7 @@ msgstr ""
msgid "There are identical authors."
msgstr ""
-#: forms_common.py:685 models.py:2162 models.py:2204
+#: forms_common.py:685 models.py:2228 models.py:2270
#: templates/sheet_ope.html:106
#: templates/ishtar/blocks/window_tables/documents.html:7
msgid "Authors"
@@ -417,11 +418,11 @@ msgstr ""
msgid "Administration"
msgstr ""
-#: ishtar_menu.py:31 views.py:135
+#: ishtar_menu.py:31 views.py:140
msgid "Account management"
msgstr ""
-#: ishtar_menu.py:34 models.py:776 views.py:1116
+#: ishtar_menu.py:34 models.py:853 views.py:1115
msgid "Global variables"
msgstr ""
@@ -445,19 +446,19 @@ msgstr ""
msgid "Merge"
msgstr ""
-#: ishtar_menu.py:61 ishtar_menu.py:88 models.py:1764 widgets.py:110
+#: ishtar_menu.py:61 ishtar_menu.py:88 models.py:1830 widgets.py:110
msgid "Delete"
msgstr ""
-#: ishtar_menu.py:96 models.py:1738
+#: ishtar_menu.py:96 models.py:1804
msgid "Imports"
msgstr ""
-#: ishtar_menu.py:99 views.py:1124
+#: ishtar_menu.py:99 views.py:1123
msgid "New import"
msgstr ""
-#: ishtar_menu.py:103 views.py:1138
+#: ishtar_menu.py:103 views.py:1137
msgid "Current imports"
msgstr ""
@@ -470,690 +471,726 @@ msgid "Not a valid item."
msgstr ""
#: models.py:191
-msgid "An item selected is not a valid item."
+msgid "A selected item is not a valid item."
msgstr ""
#: models.py:202
-msgid "This item already exist."
+msgid "This item already exists."
msgstr ""
-#: models.py:256 models.py:1027 models.py:1039
+#: models.py:273 models.py:1092 models.py:1104
msgid "Label"
msgstr ""
-#: models.py:258
+#: models.py:275
msgid "Textual ID"
msgstr ""
-#: models.py:261 models.py:996
+#: models.py:278 models.py:1061
msgid "Available"
msgstr ""
-#: models.py:474 models.py:1518
+#: models.py:479 models.py:1584
msgid "Key"
msgstr ""
-#: models.py:480
-msgid "Key specific to an import"
+#: models.py:485
+msgid "Specific key to an import"
msgstr ""
-#: models.py:551
+#: models.py:556
msgid "Last editor"
msgstr ""
-#: models.py:554
+#: models.py:559
msgid "Creator"
msgstr ""
-#: models.py:687 models.py:2286
+#: models.py:692 models.py:2352
msgid "Order"
msgstr ""
-#: models.py:688
+#: models.py:693
msgid "Symmetrical"
msgstr ""
-#: models.py:701
+#: models.py:706
msgid "Cannot have symmetrical and an inverse_relation"
msgstr ""
-#: models.py:769
+#: models.py:776 models.py:1295
+msgid "Slug"
+msgstr ""
+
+#: models.py:778
+msgid "Files module"
+msgstr ""
+
+#: models.py:779
+msgid "Context records module"
+msgstr ""
+
+#: models.py:781
+msgid "Finds module"
+msgstr ""
+
+#: models.py:782
+msgid "Need context records module"
+msgstr ""
+
+#: models.py:784
+msgid "Warehouses module"
+msgstr ""
+
+#: models.py:785
+msgid "Need finds module"
+msgstr ""
+
+#: models.py:786
+msgid "Current active"
+msgstr ""
+
+#: models.py:789
+msgid "Ishtar site profile"
+msgstr ""
+
+#: models.py:790
+msgid "Ishtar site profiles"
+msgstr ""
+
+#: models.py:846
msgid "Variable name"
msgstr ""
-#: models.py:770
+#: models.py:847
msgid "Description of the variable"
msgstr ""
-#: models.py:772 models.py:1519
+#: models.py:849 models.py:1585
msgid "Value"
msgstr ""
-#: models.py:775
+#: models.py:852
msgid "Global variable"
msgstr ""
-#: models.py:897 models.py:927
+#: models.py:962 models.py:992
msgid "Total"
msgstr ""
-#: models.py:904 models.py:1028 models.py:1040
+#: models.py:969 models.py:1093 models.py:1105
#: templates/ishtar/dashboards/dashboard_main_detail.html:135
#: templates/ishtar/dashboards/dashboard_main_detail_users.html:26
msgid "Number"
msgstr ""
-#: models.py:991
+#: models.py:1056
msgid "Administrative Act"
msgstr ""
-#: models.py:995
+#: models.py:1060
msgid "Associated object"
msgstr ""
-#: models.py:999
+#: models.py:1064
msgid "Document template"
msgstr ""
-#: models.py:1000
+#: models.py:1065
msgid "Document templates"
msgstr ""
-#: models.py:1031 models.py:1041 models.py:1722
+#: models.py:1096 models.py:1106 models.py:1788
msgid "State"
msgstr ""
-#: models.py:1045 templates/blocks/JQueryAdvancedTown.html:12
+#: models.py:1110 templates/blocks/JQueryAdvancedTown.html:12
msgid "Department"
msgstr ""
-#: models.py:1046
+#: models.py:1111
msgid "Departments"
msgstr ""
-#: models.py:1100
+#: models.py:1165
msgid "Tel: "
msgstr ""
-#: models.py:1104
+#: models.py:1169
msgid "Mobile: "
msgstr ""
-#: models.py:1108
+#: models.py:1173
msgid "Email: "
msgstr ""
-#: models.py:1113
+#: models.py:1178
msgid "Merge key"
msgstr ""
-#: models.py:1174
+#: models.py:1239
msgid "Organization types"
msgstr ""
-#: models.py:1180
+#: models.py:1253
msgid "Archaeological site"
msgstr ""
-#: models.py:1181
+#: models.py:1254
msgid "Parcels"
msgstr ""
-#: models.py:1183
+#: models.py:1256
msgid "Operation source"
msgstr ""
-#: models.py:1189 views.py:931 views.py:988
+#: models.py:1259 views.py:940 views.py:991
msgid "Archaeological files"
msgstr ""
-#: models.py:1196 views.py:934 views.py:998
+#: models.py:1261 views.py:943 views.py:999
msgid "Context records"
msgstr ""
-#: models.py:1199 views.py:936 views.py:1003
+#: models.py:1263 views.py:945 views.py:1002
msgid "Finds"
msgstr ""
-#: models.py:1230
-msgid "Slug"
-msgstr ""
-
-#: models.py:1234 templates/ishtar/dashboards/dashboard_main.html:26
+#: models.py:1299 templates/ishtar/dashboards/dashboard_main.html:26
msgid "Users"
msgstr ""
-#: models.py:1236
+#: models.py:1301
msgid "Associated model"
msgstr ""
-#: models.py:1238
+#: models.py:1304
msgid "Is template"
msgstr ""
-#: models.py:1239
+#: models.py:1305
msgid "Unicity keys (separator \";\")"
msgstr ""
-#: models.py:1243
+#: models.py:1309
msgid "Importer - Type"
msgstr ""
-#: models.py:1244
+#: models.py:1310
msgid "Importer - Types"
msgstr ""
-#: models.py:1334
+#: models.py:1400
msgid "Importer - Default"
msgstr ""
-#: models.py:1335
+#: models.py:1401
msgid "Importer - Defaults"
msgstr ""
-#: models.py:1370
+#: models.py:1436
msgid "Importer - Default value"
msgstr ""
-#: models.py:1371
+#: models.py:1437
msgid "Importer - Default values"
msgstr ""
-#: models.py:1403
+#: models.py:1469
msgid "Column number"
msgstr ""
-#: models.py:1406
+#: models.py:1472
msgid "Required"
msgstr ""
-#: models.py:1409
+#: models.py:1475
msgid "Importer - Column"
msgstr ""
-#: models.py:1410
+#: models.py:1476
msgid "Importer - Columns"
msgstr ""
-#: models.py:1430
+#: models.py:1496
msgid "Field name"
msgstr ""
-#: models.py:1432 models.py:1466
-msgid "Force creation of new item"
+#: models.py:1498 models.py:1532
+msgid "Force creation of new items"
msgstr ""
-#: models.py:1434 models.py:1468
+#: models.py:1500 models.py:1534
msgid "Concatenate with existing"
msgstr ""
-#: models.py:1436 models.py:1470
+#: models.py:1502 models.py:1536
msgid "Concatenate character"
msgstr ""
-#: models.py:1440
+#: models.py:1506
msgid "Importer - Duplicate field"
msgstr ""
-#: models.py:1441
+#: models.py:1507
msgid "Importer - Duplicate fields"
msgstr ""
-#: models.py:1448
+#: models.py:1514
msgid "Regular expression"
msgstr ""
-#: models.py:1451
+#: models.py:1517
msgid "Importer - Regular expression"
msgstr ""
-#: models.py:1452
+#: models.py:1518
msgid "Importer - Regular expressions"
msgstr ""
-#: models.py:1475
+#: models.py:1541
msgid "Importer - Target"
msgstr ""
-#: models.py:1476
+#: models.py:1542
msgid "Importer - Targets"
msgstr ""
-#: models.py:1500 views.py:306
+#: models.py:1566 views.py:311
msgid "True"
msgstr ""
-#: models.py:1501 views.py:308
+#: models.py:1567 views.py:313
msgid "False"
msgstr ""
-#: models.py:1520
+#: models.py:1586
msgid "Is set"
msgstr ""
-#: models.py:1527
+#: models.py:1593
msgid "Importer - Target key"
msgstr ""
-#: models.py:1528
+#: models.py:1594
msgid "Importer - Targets keys"
msgstr ""
-#: models.py:1579 models.py:2189 models.py:2200
+#: models.py:1645 models.py:2255 models.py:2266
msgid "Format"
msgstr ""
-#: models.py:1580 models.py:2290
+#: models.py:1646 models.py:2356
msgid "Operation type"
msgstr ""
-#: models.py:1581
+#: models.py:1647
msgid "Period"
msgstr ""
-#: models.py:1582
+#: models.py:1648
msgid "Unit"
msgstr ""
-#: models.py:1583
+#: models.py:1649
msgid "Material"
msgstr ""
-#: models.py:1585
+#: models.py:1651
msgid "Conservatory state"
msgstr ""
-#: models.py:1586
+#: models.py:1652
msgid "Preservation type"
msgstr ""
-#: models.py:1587
+#: models.py:1653
msgid "Object type"
msgstr ""
-#: models.py:1589
+#: models.py:1655
msgid "Identification type"
msgstr ""
-#: models.py:1590 models.py:2183
+#: models.py:1656 models.py:2249
msgid "Support type"
msgstr ""
-#: models.py:1596
+#: models.py:1662
msgid "Integer"
msgstr ""
-#: models.py:1597
+#: models.py:1663
msgid "Float"
msgstr ""
-#: models.py:1598
+#: models.py:1664
msgid "String"
msgstr ""
-#: models.py:1599 templates/sheet_ope.html:86
+#: models.py:1665 templates/sheet_ope.html:86
msgid "Date"
msgstr ""
-#: models.py:1601 templates/sheet_ope.html:61 templates/sheet_ope.html.py:83
+#: models.py:1667 templates/sheet_ope.html:61 templates/sheet_ope.html.py:83
#: templates/ishtar/sheet_person.html:54
#: templates/ishtar/dashboards/dashboard_main_detail.html:120
msgid "Year"
msgstr ""
-#: models.py:1602
+#: models.py:1668
msgid "String to boolean"
msgstr ""
-#: models.py:1603
+#: models.py:1669
msgctxt "filesystem"
msgid "File"
msgstr ""
-#: models.py:1604
+#: models.py:1670
msgid "Unknow type"
msgstr ""
-#: models.py:1620
+#: models.py:1686
msgid "4 digit year. e.g.: \"2015\""
msgstr ""
-#: models.py:1621
+#: models.py:1687
msgid "4 digit year/month/day. e.g.: \"2015/02/04\""
msgstr ""
-#: models.py:1622
+#: models.py:1688
msgid "Day/month/4 digit year. e.g.: \"04/02/2015\""
msgstr ""
-#: models.py:1632
+#: models.py:1698
msgid "Options"
msgstr ""
-#: models.py:1634
+#: models.py:1700
msgid "Split character(s)"
msgstr ""
-#: models.py:1638
+#: models.py:1704
msgid "Importer - Formater type"
msgstr ""
-#: models.py:1639
+#: models.py:1705
msgid "Importer - Formater types"
msgstr ""
-#: models.py:1686 templates/ishtar/dashboards/dashboard_main_detail.html:61
+#: models.py:1752 templates/ishtar/dashboards/dashboard_main_detail.html:61
msgid "Created"
msgstr ""
-#: models.py:1687
+#: models.py:1753
msgid "Analyse in progress"
msgstr ""
-#: models.py:1688
+#: models.py:1754
msgid "Analysed"
msgstr ""
-#: models.py:1689
+#: models.py:1755
msgid "Import pending"
msgstr ""
-#: models.py:1690
+#: models.py:1756
msgid "Import in progress"
msgstr ""
-#: models.py:1691
+#: models.py:1757
msgid "Finished with errors"
msgstr ""
-#: models.py:1692
+#: models.py:1758
msgid "Finished"
msgstr ""
-#: models.py:1693
+#: models.py:1759
msgid "Archived"
msgstr ""
-#: models.py:1705
+#: models.py:1771
msgid "Imported file"
msgstr ""
-#: models.py:1708
+#: models.py:1774
msgid "Associated images (zip file)"
msgstr ""
-#: models.py:1710
+#: models.py:1776
msgid "Encoding"
msgstr ""
-#: models.py:1712
+#: models.py:1778
msgid "Skip lines"
msgstr ""
-#: models.py:1713 templates/ishtar/import_list.html:47
+#: models.py:1779 templates/ishtar/import_list.html:47
msgid "Error file"
msgstr ""
-#: models.py:1716
+#: models.py:1782
msgid "Result file"
msgstr ""
-#: models.py:1719 templates/ishtar/import_list.html:53
+#: models.py:1785 templates/ishtar/import_list.html:53
msgid "Match file"
msgstr ""
-#: models.py:1725
+#: models.py:1791
msgid "Conservative import"
msgstr ""
-#: models.py:1730
+#: models.py:1796
msgid "End date"
msgstr ""
-#: models.py:1732
-msgid "Seconds remaining"
+#: models.py:1798
+msgid "Remaining seconds"
msgstr ""
-#: models.py:1737
+#: models.py:1803
msgid "Import"
msgstr ""
-#: models.py:1754
+#: models.py:1820
msgid "Analyse"
msgstr ""
-#: models.py:1756 models.py:1759
+#: models.py:1822 models.py:1825
msgid "Re-analyse"
msgstr ""
-#: models.py:1757
+#: models.py:1823
msgid "Launch import"
msgstr ""
-#: models.py:1760
+#: models.py:1826
msgid "Re-import"
msgstr ""
-#: models.py:1761
+#: models.py:1827
msgid "Archive"
msgstr ""
-#: models.py:1763
+#: models.py:1829
msgid "Unarchive"
msgstr ""
-#: models.py:1896
+#: models.py:1962
msgid "Organizations"
msgstr ""
-#: models.py:1898
-msgid "Can view all Organization"
+#: models.py:1964
+msgid "Can view all Organizations"
msgstr ""
-#: models.py:1899
+#: models.py:1965
msgid "Can view own Organization"
msgstr ""
-#: models.py:1900
+#: models.py:1966
msgid "Can add own Organization"
msgstr ""
-#: models.py:1902
+#: models.py:1968
msgid "Can change own Organization"
msgstr ""
-#: models.py:1904
+#: models.py:1970
msgid "Can delete own Organization"
msgstr ""
-#: models.py:1939
+#: models.py:2005
msgid "Groups"
msgstr ""
-#: models.py:1944
+#: models.py:2010
msgid "Person types"
msgstr ""
-#: models.py:1951
+#: models.py:2017
msgid "Mr"
msgstr ""
-#: models.py:1952
+#: models.py:2018
msgid "Miss"
msgstr ""
-#: models.py:1953
-msgid "Mr and Miss"
+#: models.py:2019
+msgid "Mr and Mrs"
msgstr ""
-#: models.py:1954
+#: models.py:2020
msgid "Mrs"
msgstr ""
-#: models.py:1955
+#: models.py:2021
msgid "Doctor"
msgstr ""
-#: models.py:1967 models.py:2014
+#: models.py:2033 models.py:2080
msgid "Types"
msgstr ""
-#: models.py:1970
+#: models.py:2036
msgid "Is attached to"
msgstr ""
-#: models.py:1974
+#: models.py:2040
msgid "Persons"
msgstr ""
-#: models.py:1976
-msgid "Can view all Person"
+#: models.py:2042
+msgid "Can view all Persons"
msgstr ""
-#: models.py:1977
+#: models.py:2043
msgid "Can view own Person"
msgstr ""
-#: models.py:1978
+#: models.py:2044
msgid "Can add own Person"
msgstr ""
-#: models.py:1979
+#: models.py:2045
msgid "Can change own Person"
msgstr ""
-#: models.py:1980
+#: models.py:2046
msgid "Can delete own Person"
msgstr ""
-#: models.py:2106
+#: models.py:2172
msgid "Ishtar user"
msgstr ""
-#: models.py:2107
+#: models.py:2173
msgid "Ishtar users"
msgstr ""
-#: models.py:2152
+#: models.py:2218
msgid "Author types"
msgstr ""
-#: models.py:2178
+#: models.py:2244
msgid "Source types"
msgstr ""
-#: models.py:2184
+#: models.py:2250
msgid "Support types"
msgstr ""
-#: models.py:2190
+#: models.py:2256
msgid "Formats"
msgstr ""
-#: models.py:2195
+#: models.py:2261
msgid "External ID"
msgstr ""
-#: models.py:2198
+#: models.py:2264
msgid "Support"
msgstr ""
-#: models.py:2202
+#: models.py:2268
msgid "Scale"
msgstr ""
-#: models.py:2216
+#: models.py:2282
msgid "Item number"
msgstr ""
-#: models.py:2217
+#: models.py:2283
msgid "Ref."
msgstr ""
-#: models.py:2220
+#: models.py:2286
msgid "Internal ref."
msgstr ""
-#: models.py:2261
+#: models.py:2327
msgid "Surface (m2)"
msgstr ""
-#: models.py:2262 templates/sheet_ope.html:46 templates/sheet_ope.html.py:107
+#: models.py:2328 templates/sheet_ope.html:46 templates/sheet_ope.html.py:107
msgid "Localisation"
msgstr ""
-#: models.py:2287
+#: models.py:2353
msgid "Is preventive"
msgstr ""
-#: models.py:2291
+#: models.py:2357
msgid "Operation types"
msgstr ""
-#: models.py:2317
+#: models.py:2383
msgid "Preventive"
msgstr ""
-#: models.py:2318
+#: models.py:2384
msgid "Research"
msgstr ""
-#: utils.py:50
+#: utils.py:51
msgid " (...)"
msgstr ""
-#: views.py:90
+#: views.py:95
msgid "New person"
msgstr ""
-#: views.py:98
+#: views.py:103
msgid "Person modification"
msgstr ""
-#: views.py:104
+#: views.py:109
msgid "Person deletion"
msgstr ""
-#: views.py:115
+#: views.py:120
msgid "New organization"
msgstr ""
-#: views.py:122
+#: views.py:127
msgid "Organization modification"
msgstr ""
-#: views.py:128
+#: views.py:133
msgid "Organization deletion"
msgstr ""
-#: views.py:632 templates/base.html:80
+#: views.py:637 templates/base.html:80
#: templates/ishtar/sheet_organization.html:35
#: templatetags/link_to_window.py:16
msgid "Details"
msgstr ""
-#: views.py:860 views.py:914
+#: views.py:868 views.py:922
msgid "Operation not permitted."
msgstr ""
-#: views.py:862
+#: views.py:870
#, python-format
msgid "New %s"
msgstr ""
-#: views.py:932 views.py:992
+#: views.py:941 views.py:995
msgid "Operations"
msgstr ""
-#: views.py:1185 templates/ishtar/import_list.html:43
+#: views.py:1184 templates/ishtar/import_list.html:43
msgid "Link unmatched items"
msgstr ""
-#: views.py:1200
+#: views.py:1199
msgid "Delete import"
msgstr ""
-#: views.py:1259 views.py:1275
+#: views.py:1258 views.py:1274
msgid "Corporation manager"
msgstr ""
@@ -1161,27 +1198,27 @@ msgstr ""
msgid "Search..."
msgstr ""
-#: widgets.py:596 templatetags/window_tables.py:72
+#: widgets.py:602 templatetags/window_tables.py:80
msgid "No results"
msgstr ""
-#: widgets.py:597 templatetags/window_tables.py:73
+#: widgets.py:603 templatetags/window_tables.py:81
msgid "Loading..."
msgstr ""
-#: widgets.py:598
+#: widgets.py:604
msgid "Remove"
msgstr ""
-#: wizards.py:317 templates/ishtar/import_delete.html:20
+#: wizards.py:318 templates/ishtar/import_delete.html:20
msgid "Yes"
msgstr ""
-#: wizards.py:319
+#: wizards.py:320
msgid "No"
msgstr ""
-#: wizards.py:1203
+#: wizards.py:1211
#, python-format
msgid "[%(app_name)s] Account creation/modification"
msgstr ""
@@ -1465,7 +1502,7 @@ msgid "No document associated to this operation"
msgstr ""
#: templates/sheet_ope.html:121 templates/sheet_ope.html.py:123
-msgid "Recording Units"
+msgid "Context Records"
msgstr ""
#: templates/sheet_ope.html:125
@@ -1477,7 +1514,7 @@ msgid "Chronology"
msgstr ""
#: templates/sheet_ope.html:142
-msgid "No recording unit associated to this operation"
+msgid "No context record associated to this operation"
msgstr ""
#: templates/window.html:38 templates/blocks/JQueryJqGrid.html:25
@@ -1522,6 +1559,18 @@ msgstr ""
msgid "An error as occured during search. Check your query fields."
msgstr ""
+#: templates/blocks/comma_list.html:1
+msgid "and"
+msgstr ""
+
+#: templates/blocks/comma_list.html:1
+msgid ", "
+msgstr ""
+
+#: templates/blocks/comma_list.html:1
+msgid "."
+msgstr ""
+
#: templates/blocks/form_flex_snippet.html:10
#: templates/blocks/form_snippet.html:9
msgid "Help"
@@ -1776,7 +1825,7 @@ msgid "Modified"
msgstr ""
#: templates/ishtar/dashboards/dashboard_main_detail.html:108
-msgid "No data for theses criteria."
+msgid "No data for these criteria."
msgstr ""
#: templates/ishtar/dashboards/dashboard_main_detail.html:126
diff --git a/ishtar_common/management/commands/update_specific_importers.py b/ishtar_common/management/commands/update_specific_importers.py
index c5445eb0b..9a13e3f3e 100644
--- a/ishtar_common/management/commands/update_specific_importers.py
+++ b/ishtar_common/management/commands/update_specific_importers.py
@@ -4,14 +4,11 @@
from optparse import make_option
from django.core.management.base import BaseCommand
-from django.conf import settings
IMPORTERS = []
-
-if 'archaeological_files' in settings.INSTALLED_APPS:
- from archaeological_files.data_importer import FileImporterSraPdL
- IMPORTERS.append(FileImporterSraPdL)
+from archaeological_files.data_importer import FileImporterSraPdL
+IMPORTERS.append(FileImporterSraPdL)
class Command(BaseCommand):
diff --git a/ishtar_common/menu_base.py b/ishtar_common/menu_base.py
index ab0a43d41..eb08d8c78 100644
--- a/ishtar_common/menu_base.py
+++ b/ishtar_common/menu_base.py
@@ -17,16 +17,28 @@
# See the file COPYING for details.
+from ishtar_common.models import get_current_profile
+
class SectionItem:
- def __init__(self, idx, label, childs=[]):
+ def __init__(self, idx, label, childs=[], profile_restriction=None):
self.idx = idx
self.label = label
self.childs = childs
self.available = False
self.items = {}
+ self.profile_restriction = profile_restriction
+
+ def check_profile_restriction(self):
+ if self.profile_restriction:
+ profile = get_current_profile()
+ if not getattr(profile, self.profile_restriction):
+ return False
+ return True
def can_be_available(self, user, session=None):
+ if not self.check_profile_restriction():
+ return False
for child in self.childs:
if child.can_be_available(user, session=session):
return True
@@ -50,14 +62,27 @@ class SectionItem:
class MenuItem:
- def __init__(self, idx, label, model=None, access_controls=[]):
+ def __init__(self, idx, label, model=None, access_controls=[],
+ profile_restriction=None):
self.idx = idx
self.label = label
self.model = model
self.access_controls = access_controls
self.available = False
+ self.profile_restriction = profile_restriction
+ if not self.check_profile_restriction():
+ return False
+
+ def check_profile_restriction(self):
+ if self.profile_restriction:
+ profile = get_current_profile()
+ if not getattr(profile, self.profile_restriction):
+ return False
+ return True
def can_be_available(self, user, session=None):
+ if not self.check_profile_restriction():
+ return False
if not self.access_controls:
return True
prefix = (self.model._meta.app_label + '.') if self.model else ''
@@ -75,6 +100,8 @@ class MenuItem:
return False
def is_available(self, user, obj=None, session=None):
+ if not self.check_profile_restriction():
+ return False
if not self.access_controls:
return True
prefix = (self.model._meta.app_label + '.') if self.model else ''
diff --git a/ishtar_common/migrations/0048_auto__add_ishtarsiteprofile.py b/ishtar_common/migrations/0048_auto__add_ishtarsiteprofile.py
new file mode 100644
index 000000000..5a2c21bf1
--- /dev/null
+++ b/ishtar_common/migrations/0048_auto__add_ishtarsiteprofile.py
@@ -0,0 +1,374 @@
+# -*- coding: utf-8 -*-
+import datetime
+from south.db import db
+from south.v2 import SchemaMigration
+from django.db import models
+
+
+class Migration(SchemaMigration):
+
+ def forwards(self, orm):
+ # Adding model 'IshtarSiteProfile'
+ db.create_table('ishtar_common_ishtarsiteprofile', (
+ ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
+ ('label', self.gf('django.db.models.fields.TextField')()),
+ ('slug', self.gf('django.db.models.fields.SlugField')(unique=True, max_length=50)),
+ ('description', self.gf('django.db.models.fields.TextField')(null=True, blank=True)),
+ ('files', self.gf('django.db.models.fields.BooleanField')(default=False)),
+ ('context_record', self.gf('django.db.models.fields.BooleanField')(default=False)),
+ ('find', self.gf('django.db.models.fields.BooleanField')(default=False)),
+ ('warehouse', self.gf('django.db.models.fields.BooleanField')(default=False)),
+ ('active', self.gf('django.db.models.fields.BooleanField')(default=False)),
+ ))
+ db.send_create_signal('ishtar_common', ['IshtarSiteProfile'])
+
+
+ def backwards(self, orm):
+ # Deleting model 'IshtarSiteProfile'
+ db.delete_table('ishtar_common_ishtarsiteprofile')
+
+
+ models = {
+ 'auth.group': {
+ 'Meta': {'object_name': 'Group'},
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}),
+ 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'})
+ },
+ 'auth.permission': {
+ 'Meta': {'ordering': "('content_type__app_label', 'content_type__model', 'codename')", 'unique_together': "(('content_type', 'codename'),)", 'object_name': 'Permission'},
+ 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+ 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})
+ },
+ 'auth.user': {
+ 'Meta': {'object_name': 'User'},
+ 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
+ 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}),
+ 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
+ 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
+ 'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
+ 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
+ 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
+ 'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}),
+ 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'})
+ },
+ 'contenttypes.contenttype': {
+ 'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"},
+ 'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})
+ },
+ 'ishtar_common.arrondissement': {
+ 'Meta': {'object_name': 'Arrondissement'},
+ 'department': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['ishtar_common.Department']"}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '30'})
+ },
+ 'ishtar_common.author': {
+ 'Meta': {'object_name': 'Author'},
+ 'author_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['ishtar_common.AuthorType']"}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'person': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'author'", 'to': "orm['ishtar_common.Person']"})
+ },
+ 'ishtar_common.authortype': {
+ 'Meta': {'object_name': 'AuthorType'},
+ 'available': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
+ 'comment': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+ 'txt_idx': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '100'})
+ },
+ 'ishtar_common.canton': {
+ 'Meta': {'object_name': 'Canton'},
+ 'arrondissement': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['ishtar_common.Arrondissement']"}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '30'})
+ },
+ 'ishtar_common.department': {
+ 'Meta': {'ordering': "['number']", 'object_name': 'Department'},
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'label': ('django.db.models.fields.CharField', [], {'max_length': '30'}),
+ 'number': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '3'}),
+ 'state': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['ishtar_common.State']", 'null': 'True', 'blank': 'True'})
+ },
+ 'ishtar_common.documenttemplate': {
+ 'Meta': {'ordering': "['associated_object_name', 'name']", 'object_name': 'DocumentTemplate'},
+ 'associated_object_name': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+ 'available': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+ 'template': ('django.db.models.fields.files.FileField', [], {'max_length': '100'})
+ },
+ 'ishtar_common.format': {
+ 'Meta': {'object_name': 'Format'},
+ 'available': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
+ 'comment': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+ 'txt_idx': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '100'})
+ },
+ 'ishtar_common.formatertype': {
+ 'Meta': {'ordering': "('formater_type', 'options')", 'unique_together': "(('formater_type', 'options', 'many_split'),)", 'object_name': 'FormaterType'},
+ 'formater_type': ('django.db.models.fields.CharField', [], {'max_length': '20'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'many_split': ('django.db.models.fields.CharField', [], {'max_length': '10', 'null': 'True', 'blank': 'True'}),
+ 'options': ('django.db.models.fields.CharField', [], {'max_length': '500', 'null': 'True', 'blank': 'True'})
+ },
+ 'ishtar_common.globalvar': {
+ 'Meta': {'ordering': "['slug']", 'object_name': 'GlobalVar'},
+ 'description': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'slug': ('django.db.models.fields.SlugField', [], {'unique': 'True', 'max_length': '50'}),
+ 'value': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'})
+ },
+ 'ishtar_common.historicalorganization': {
+ 'Meta': {'ordering': "('-history_date', '-history_id')", 'object_name': 'HistoricalOrganization'},
+ 'address': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'address_complement': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'country': ('django.db.models.fields.CharField', [], {'max_length': '30', 'null': 'True', 'blank': 'True'}),
+ 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'null': 'True', 'blank': 'True'}),
+ 'exclude_from_merge': ('django.db.models.fields.NullBooleanField', [], {'default': 'False', 'null': 'True', 'blank': 'True'}),
+ 'history_creator_id': ('django.db.models.fields.IntegerField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'}),
+ 'history_date': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
+ 'history_id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'history_modifier_id': ('django.db.models.fields.IntegerField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'}),
+ 'history_type': ('django.db.models.fields.CharField', [], {'max_length': '1'}),
+ 'history_user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']", 'null': 'True'}),
+ 'id': ('django.db.models.fields.IntegerField', [], {'db_index': 'True', 'blank': 'True'}),
+ 'merge_key': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'mobile_phone': ('django.db.models.fields.CharField', [], {'max_length': '18', 'null': 'True', 'blank': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '300'}),
+ 'organization_type_id': ('django.db.models.fields.IntegerField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'}),
+ 'phone': ('django.db.models.fields.CharField', [], {'max_length': '18', 'null': 'True', 'blank': 'True'}),
+ 'postal_code': ('django.db.models.fields.CharField', [], {'max_length': '10', 'null': 'True', 'blank': 'True'}),
+ 'town': ('django.db.models.fields.CharField', [], {'max_length': '70', 'null': 'True', 'blank': 'True'})
+ },
+ 'ishtar_common.import': {
+ 'Meta': {'object_name': 'Import'},
+ 'conservative_import': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'creation_date': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'null': 'True', 'blank': 'True'}),
+ 'encoding': ('django.db.models.fields.CharField', [], {'default': "'utf-8'", 'max_length': '15'}),
+ 'end_date': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
+ 'error_file': ('django.db.models.fields.files.FileField', [], {'max_length': '100', 'null': 'True', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'imported_file': ('django.db.models.fields.files.FileField', [], {'max_length': '100'}),
+ 'imported_images': ('django.db.models.fields.files.FileField', [], {'max_length': '100', 'null': 'True', 'blank': 'True'}),
+ 'importer_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['ishtar_common.ImporterType']"}),
+ 'match_file': ('django.db.models.fields.files.FileField', [], {'max_length': '100', 'null': 'True', 'blank': 'True'}),
+ 'result_file': ('django.db.models.fields.files.FileField', [], {'max_length': '100', 'null': 'True', 'blank': 'True'}),
+ 'seconds_remaining': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
+ 'skip_lines': ('django.db.models.fields.IntegerField', [], {'default': '1'}),
+ 'state': ('django.db.models.fields.CharField', [], {'default': "'C'", 'max_length': '2'}),
+ 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['ishtar_common.IshtarUser']"})
+ },
+ 'ishtar_common.importercolumn': {
+ 'Meta': {'ordering': "('importer_type', 'col_number')", 'unique_together': "(('importer_type', 'col_number'),)", 'object_name': 'ImporterColumn'},
+ 'col_number': ('django.db.models.fields.IntegerField', [], {'default': '1'}),
+ 'description': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'importer_type': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'columns'", 'to': "orm['ishtar_common.ImporterType']"}),
+ 'regexp_pre_filter': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['ishtar_common.Regexp']", 'null': 'True', 'blank': 'True'}),
+ 'required': ('django.db.models.fields.BooleanField', [], {'default': 'False'})
+ },
+ 'ishtar_common.importerdefault': {
+ 'Meta': {'object_name': 'ImporterDefault'},
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'importer_type': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'defaults'", 'to': "orm['ishtar_common.ImporterType']"}),
+ 'target': ('django.db.models.fields.CharField', [], {'max_length': '500'})
+ },
+ 'ishtar_common.importerdefaultvalues': {
+ 'Meta': {'object_name': 'ImporterDefaultValues'},
+ 'default_target': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'default_values'", 'to': "orm['ishtar_common.ImporterDefault']"}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'target': ('django.db.models.fields.CharField', [], {'max_length': '500'}),
+ 'value': ('django.db.models.fields.CharField', [], {'max_length': '500'})
+ },
+ 'ishtar_common.importerduplicatefield': {
+ 'Meta': {'object_name': 'ImporterDuplicateField'},
+ 'column': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'duplicate_fields'", 'to': "orm['ishtar_common.ImporterColumn']"}),
+ 'concat': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'concat_str': ('django.db.models.fields.CharField', [], {'max_length': '5', 'null': 'True', 'blank': 'True'}),
+ 'field_name': ('django.db.models.fields.CharField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
+ 'force_new': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'})
+ },
+ 'ishtar_common.importertype': {
+ 'Meta': {'object_name': 'ImporterType'},
+ 'associated_models': ('django.db.models.fields.CharField', [], {'max_length': '200'}),
+ 'description': ('django.db.models.fields.CharField', [], {'max_length': '500', 'null': 'True', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'is_template': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '100', 'null': 'True', 'blank': 'True'}),
+ 'slug': ('django.db.models.fields.SlugField', [], {'max_length': '100', 'unique': 'True', 'null': 'True', 'blank': 'True'}),
+ 'unicity_keys': ('django.db.models.fields.CharField', [], {'max_length': '500', 'null': 'True', 'blank': 'True'}),
+ 'users': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'to': "orm['ishtar_common.IshtarUser']", 'null': 'True', 'blank': 'True'})
+ },
+ 'ishtar_common.importtarget': {
+ 'Meta': {'object_name': 'ImportTarget'},
+ 'column': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'targets'", 'to': "orm['ishtar_common.ImporterColumn']"}),
+ 'comment': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'concat': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'concat_str': ('django.db.models.fields.CharField', [], {'max_length': '5', 'null': 'True', 'blank': 'True'}),
+ 'force_new': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'formater_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['ishtar_common.FormaterType']"}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'regexp_filter': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['ishtar_common.Regexp']", 'null': 'True', 'blank': 'True'}),
+ 'target': ('django.db.models.fields.CharField', [], {'max_length': '500'})
+ },
+ 'ishtar_common.ishtarsiteprofile': {
+ 'Meta': {'ordering': "['label']", 'object_name': 'IshtarSiteProfile'},
+ 'active': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'context_record': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'description': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'files': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'find': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'label': ('django.db.models.fields.TextField', [], {}),
+ 'slug': ('django.db.models.fields.SlugField', [], {'unique': 'True', 'max_length': '50'}),
+ 'warehouse': ('django.db.models.fields.BooleanField', [], {'default': 'False'})
+ },
+ 'ishtar_common.ishtaruser': {
+ 'Meta': {'object_name': 'IshtarUser', '_ormbases': ['auth.User']},
+ 'person': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'ishtaruser'", 'unique': 'True', 'to': "orm['ishtar_common.Person']"}),
+ 'user_ptr': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['auth.User']", 'unique': 'True', 'primary_key': 'True'})
+ },
+ 'ishtar_common.itemkey': {
+ 'Meta': {'object_name': 'ItemKey'},
+ 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'importer': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['ishtar_common.Import']", 'null': 'True', 'blank': 'True'}),
+ 'key': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+ 'object_id': ('django.db.models.fields.PositiveIntegerField', [], {})
+ },
+ 'ishtar_common.operationtype': {
+ 'Meta': {'ordering': "['-preventive', 'order', 'label']", 'object_name': 'OperationType'},
+ 'available': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
+ 'comment': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+ 'order': ('django.db.models.fields.IntegerField', [], {'default': '1'}),
+ 'preventive': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
+ 'txt_idx': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '100'})
+ },
+ 'ishtar_common.organization': {
+ 'Meta': {'object_name': 'Organization'},
+ 'address': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'address_complement': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'country': ('django.db.models.fields.CharField', [], {'max_length': '30', 'null': 'True', 'blank': 'True'}),
+ 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'null': 'True', 'blank': 'True'}),
+ 'exclude_from_merge': ('django.db.models.fields.NullBooleanField', [], {'default': 'False', 'null': 'True', 'blank': 'True'}),
+ 'history_creator': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'+'", 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': "orm['auth.User']"}),
+ 'history_modifier': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'+'", 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': "orm['auth.User']"}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'imports': ('django.db.models.fields.related.ManyToManyField', [], {'blank': 'True', 'related_name': "'imported_ishtar_common_organization'", 'null': 'True', 'symmetrical': 'False', 'to': "orm['ishtar_common.Import']"}),
+ 'merge_candidate': ('django.db.models.fields.related.ManyToManyField', [], {'blank': 'True', 'related_name': "'merge_candidate_rel_+'", 'null': 'True', 'to': "orm['ishtar_common.Organization']"}),
+ 'merge_exclusion': ('django.db.models.fields.related.ManyToManyField', [], {'blank': 'True', 'related_name': "'merge_exclusion_rel_+'", 'null': 'True', 'to': "orm['ishtar_common.Organization']"}),
+ 'merge_key': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'mobile_phone': ('django.db.models.fields.CharField', [], {'max_length': '18', 'null': 'True', 'blank': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '300'}),
+ 'organization_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['ishtar_common.OrganizationType']"}),
+ 'phone': ('django.db.models.fields.CharField', [], {'max_length': '18', 'null': 'True', 'blank': 'True'}),
+ 'postal_code': ('django.db.models.fields.CharField', [], {'max_length': '10', 'null': 'True', 'blank': 'True'}),
+ 'town': ('django.db.models.fields.CharField', [], {'max_length': '70', 'null': 'True', 'blank': 'True'})
+ },
+ 'ishtar_common.organizationtype': {
+ 'Meta': {'ordering': "('label',)", 'object_name': 'OrganizationType'},
+ 'available': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
+ 'comment': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+ 'txt_idx': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '100'})
+ },
+ 'ishtar_common.person': {
+ 'Meta': {'object_name': 'Person'},
+ 'address': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'address_complement': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'attached_to': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'members'", 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': "orm['ishtar_common.Organization']"}),
+ 'country': ('django.db.models.fields.CharField', [], {'max_length': '30', 'null': 'True', 'blank': 'True'}),
+ 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'null': 'True', 'blank': 'True'}),
+ 'exclude_from_merge': ('django.db.models.fields.NullBooleanField', [], {'default': 'False', 'null': 'True', 'blank': 'True'}),
+ 'history_creator': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'+'", 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': "orm['auth.User']"}),
+ 'history_modifier': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'+'", 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': "orm['auth.User']"}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'imports': ('django.db.models.fields.related.ManyToManyField', [], {'blank': 'True', 'related_name': "'imported_ishtar_common_person'", 'null': 'True', 'symmetrical': 'False', 'to': "orm['ishtar_common.Import']"}),
+ 'merge_candidate': ('django.db.models.fields.related.ManyToManyField', [], {'blank': 'True', 'related_name': "'merge_candidate_rel_+'", 'null': 'True', 'to': "orm['ishtar_common.Person']"}),
+ 'merge_exclusion': ('django.db.models.fields.related.ManyToManyField', [], {'blank': 'True', 'related_name': "'merge_exclusion_rel_+'", 'null': 'True', 'to': "orm['ishtar_common.Person']"}),
+ 'merge_key': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'mobile_phone': ('django.db.models.fields.CharField', [], {'max_length': '18', 'null': 'True', 'blank': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
+ 'person_types': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['ishtar_common.PersonType']", 'symmetrical': 'False'}),
+ 'phone': ('django.db.models.fields.CharField', [], {'max_length': '18', 'null': 'True', 'blank': 'True'}),
+ 'postal_code': ('django.db.models.fields.CharField', [], {'max_length': '10', 'null': 'True', 'blank': 'True'}),
+ 'raw_name': ('django.db.models.fields.CharField', [], {'max_length': '300', 'null': 'True', 'blank': 'True'}),
+ 'surname': ('django.db.models.fields.CharField', [], {'max_length': '50', 'null': 'True', 'blank': 'True'}),
+ 'title': ('django.db.models.fields.CharField', [], {'max_length': '100', 'null': 'True', 'blank': 'True'}),
+ 'town': ('django.db.models.fields.CharField', [], {'max_length': '70', 'null': 'True', 'blank': 'True'})
+ },
+ 'ishtar_common.persontype': {
+ 'Meta': {'ordering': "('label',)", 'object_name': 'PersonType'},
+ 'available': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
+ 'comment': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'to': "orm['auth.Group']", 'null': 'True', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+ 'txt_idx': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '100'})
+ },
+ 'ishtar_common.regexp': {
+ 'Meta': {'object_name': 'Regexp'},
+ 'description': ('django.db.models.fields.CharField', [], {'max_length': '500', 'null': 'True', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+ 'regexp': ('django.db.models.fields.CharField', [], {'max_length': '500'})
+ },
+ 'ishtar_common.sourcetype': {
+ 'Meta': {'object_name': 'SourceType'},
+ 'available': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
+ 'comment': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+ 'txt_idx': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '100'})
+ },
+ 'ishtar_common.state': {
+ 'Meta': {'ordering': "['number']", 'object_name': 'State'},
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'label': ('django.db.models.fields.CharField', [], {'max_length': '30'}),
+ 'number': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '3'})
+ },
+ 'ishtar_common.supporttype': {
+ 'Meta': {'object_name': 'SupportType'},
+ 'available': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
+ 'comment': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+ 'txt_idx': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '100'})
+ },
+ 'ishtar_common.targetkey': {
+ 'Meta': {'unique_together': "(('target', 'key', 'associated_user', 'associated_import'),)", 'object_name': 'TargetKey'},
+ 'associated_import': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['ishtar_common.Import']", 'null': 'True', 'blank': 'True'}),
+ 'associated_user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['ishtar_common.IshtarUser']", 'null': 'True', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'is_set': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'key': ('django.db.models.fields.TextField', [], {}),
+ 'target': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'keys'", 'to': "orm['ishtar_common.ImportTarget']"}),
+ 'value': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'})
+ },
+ 'ishtar_common.town': {
+ 'Meta': {'ordering': "['numero_insee']", 'object_name': 'Town'},
+ 'canton': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['ishtar_common.Canton']", 'null': 'True', 'blank': 'True'}),
+ 'center': ('django.contrib.gis.db.models.fields.PointField', [], {'srid': '27572', 'null': 'True', 'blank': 'True'}),
+ 'departement': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['ishtar_common.Department']", 'null': 'True', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+ 'numero_insee': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '6'}),
+ 'surface': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'})
+ }
+ }
+
+ complete_apps = ['ishtar_common'] \ No newline at end of file
diff --git a/ishtar_common/models.py b/ishtar_common/models.py
index d7e63856b..2a12edc02 100644
--- a/ishtar_common/models.py
+++ b/ishtar_common/models.py
@@ -42,7 +42,7 @@ from django.core.urlresolvers import reverse, NoReverseMatch
from django.db.utils import DatabaseError
from django.db.models import Q, Max, Count
from django.db.models.base import ModelBase
-from django.db.models.signals import post_save, pre_delete
+from django.db.models.signals import post_save, pre_delete, post_delete
from django.utils.translation import ugettext_lazy as _, ugettext, \
pgettext_lazy
@@ -188,7 +188,7 @@ def valid_ids(cls):
cls.objects.get(pk=v)
except ObjectDoesNotExist:
raise ValidationError(
- _(u"An item selected is not a valid item."))
+ _(u"A selected item is not a valid item."))
return func
@@ -199,7 +199,7 @@ def is_unique(cls, field):
try:
assert cls.objects.filter(**query).count() == 0
except AssertionError:
- raise ValidationError(_(u"This item already exist."))
+ raise ValidationError(_(u"This item already exists."))
return func
@@ -249,7 +249,24 @@ class OwnPerms:
return cls.objects.filter(query).order_by(*cls._meta.ordering)
-class GeneralType(models.Model):
+class Cached(object):
+ slug_field = 'txt_idx'
+
+ @classmethod
+ def get_cache(cls, slug):
+ cache_key, value = get_cache(cls, slug)
+ if value:
+ return value
+ try:
+ k = {cls.slug_field: slug}
+ obj = cls.objects.get(**k)
+ cache.set(cache_key, obj, settings.CACHE_TIMEOUT)
+ return obj
+ except cls.DoesNotExist:
+ return None
+
+
+class GeneralType(models.Model, Cached):
"""
Abstract class for "types"
"""
@@ -457,18 +474,6 @@ class GeneralType(models.Model):
for item in cls.objects.all():
item.generate_key()
- @classmethod
- def get_cache(cls, slug):
- cache_key, value = get_cache(cls, slug)
- if value:
- return value
- try:
- obj = cls.objects.get(txt_idx=slug)
- cache.set(cache_key, obj, settings.CACHE_TIMEOUT)
- return obj
- except cls.DoesNotExist:
- return None
-
class ItemKey(models.Model):
key = models.CharField(_(u"Key"), max_length=100)
@@ -477,7 +482,7 @@ class ItemKey(models.Model):
content_object = generic.GenericForeignKey('content_type', 'object_id')
importer = models.ForeignKey(
'Import', null=True, blank=True,
- help_text=_(u"Key specific to an import"))
+ help_text=_(u"Specific key to an import"))
def __unicode__(self):
return self.key
@@ -765,7 +770,79 @@ class LightHistorizedItem(BaseHistorizedItem):
return True
-class GlobalVar(models.Model):
+class IshtarSiteProfile(models.Model, Cached):
+ slug_field = 'slug'
+ label = models.TextField(_(u"Name"))
+ slug = models.SlugField(_(u"Slug"), unique=True)
+ description = models.TextField(_(u"Description"), null=True, blank=True)
+ files = models.BooleanField(_(u"Files module"), default=False)
+ context_record = models.BooleanField(_(u"Context records module"),
+ default=False)
+ find = models.BooleanField(_(u"Finds module"), default=False,
+ help_text=_(u"Need context records module"))
+ warehouse = models.BooleanField(
+ _(u"Warehouses module"), default=False,
+ help_text=_(u"Need finds module"))
+ active = models.BooleanField(_(u"Current active"), default=False)
+
+ class Meta:
+ verbose_name = _(u"Ishtar site profile")
+ verbose_name_plural = _(u"Ishtar site profiles")
+ ordering = ['label']
+
+ def __unicode__(self):
+ return unicode(self.label)
+
+ def save(self, *args, **kwargs):
+ raw = False
+ if 'raw' in kwargs:
+ raw = kwargs.pop('raw')
+ super(IshtarSiteProfile, self).save(*args, **kwargs)
+ obj = self
+ if raw:
+ return obj
+ q = self.__class__.objects.filter(active=True).exclude(slug=self.slug)
+ if obj.active and q.count():
+ for profile in q.all():
+ profile.active = False
+ profile.save(raw=True)
+ changed = False
+ if not obj.active and not q.count():
+ obj.active = True
+ changed = True
+ if obj.warehouse and not obj.find:
+ obj.find = True
+ changed = True
+ if obj.find and not obj.context_record:
+ obj.context_record = True
+ changed = True
+ if changed:
+ obj = obj.save(raw=True)
+ return obj
+
+
+def get_current_profile(force=False):
+ cache_key, value = get_cache(IshtarSiteProfile, ['is-current-profile'])
+ if value and not force:
+ return value
+ q = IshtarSiteProfile.objects.filter(active=True)
+ if not q.count():
+ obj = IshtarSiteProfile.objects.create(
+ label="Default profile", slug='default', active=True)
+ else:
+ obj = q.all()[0]
+ cache.set(cache_key, obj, settings.CACHE_TIMEOUT)
+ return obj
+
+
+def cached_site_changed(sender, **kwargs):
+ get_current_profile(force=True)
+
+post_save.connect(cached_site_changed, sender=IshtarSiteProfile)
+post_delete.connect(cached_site_changed, sender=IshtarSiteProfile)
+
+
+class GlobalVar(models.Model, Cached):
slug = models.SlugField(_(u"Variable name"), unique=True)
description = models.TextField(_(u"Description of the variable"),
null=True, blank=True)
@@ -779,18 +856,6 @@ class GlobalVar(models.Model):
def __unicode__(self):
return unicode(self.slug)
- @classmethod
- def get_cache(cls, slug):
- cache_key, value = get_cache(cls, slug)
- if value:
- return value
- try:
- obj = cls.objects.get(slug=slug)
- cache.set(cache_key, obj.value, settings.CACHE_TIMEOUT)
- return obj.value
- except cls.DoesNotExist:
- return None
-
def cached_globalvar_changed(sender, **kwargs):
if not kwargs['instance']:
@@ -1174,29 +1239,29 @@ class OrganizationType(GeneralType):
verbose_name_plural = _(u"Organization types")
ordering = ('label',)
-MODELS = [
- ('archaeological_operations.models.Operation', _(u"Operation")),
- ('archaeological_operations.models.ArchaeologicalSite',
- _(u"Archaeological site")),
- ('archaeological_operations.models.Parcel', _(u"Parcels")),
- ('archaeological_operations.models.OperationSource',
- _(u"Operation source")),
-]
-
IMPORTER_CLASSES = {}
-if 'archaeological_files' in settings.INSTALLED_APPS:
- MODELS = [('archaeological_files.models.File', _(u"Archaeological files"))]\
- + MODELS
- IMPORTER_CLASSES.update({
- 'sra-pdl-files':
- 'archaeological_files.data_importer.FileImporterSraPdL'})
-if 'archaeological_context_records' in settings.INSTALLED_APPS:
+IMPORTER_CLASSES.update({
+ 'sra-pdl-files':
+ 'archaeological_files.data_importer.FileImporterSraPdL'})
+
+
+def get_importer_models():
+ MODELS = [
+ ('archaeological_operations.models.Operation', _(u"Operation")),
+ ('archaeological_operations.models.ArchaeologicalSite',
+ _(u"Archaeological site")),
+ ('archaeological_operations.models.Parcel', _(u"Parcels")),
+ ('archaeological_operations.models.OperationSource',
+ _(u"Operation source")),
+ ]
+ MODELS = [('archaeological_files.models.File',
+ _(u"Archaeological files"))] + MODELS
MODELS = [('archaeological_context_records.models.ContextRecord',
_(u"Context records")), ] + MODELS
-if 'archaeological_finds' in settings.INSTALLED_APPS:
MODELS = [('archaeological_finds.models.BaseFind',
_(u"Finds")), ] + MODELS
+ return MODELS
def get_model_fields(model):
@@ -1234,7 +1299,8 @@ class ImporterType(models.Model):
users = models.ManyToManyField('IshtarUser', verbose_name=_(u"Users"),
blank=True, null=True)
associated_models = models.CharField(_(u"Associated model"),
- max_length=200, choices=MODELS)
+ max_length=200,
+ choices=get_importer_models())
is_template = models.BooleanField(_(u"Is template"), default=False)
unicity_keys = models.CharField(_(u"Unicity keys (separator \";\")"),
blank=True, null=True, max_length=500)
@@ -1429,7 +1495,7 @@ class ImporterDuplicateField(models.Model):
column = models.ForeignKey(ImporterColumn, related_name='duplicate_fields')
field_name = models.CharField(_(u"Field name"), blank=True, null=True,
max_length=200)
- force_new = models.BooleanField(_(u"Force creation of new item"),
+ force_new = models.BooleanField(_(u"Force creation of new items"),
default=False)
concat = models.BooleanField(_(u"Concatenate with existing"),
default=False)
@@ -1463,7 +1529,7 @@ class ImportTarget(models.Model):
target = models.CharField(u"Target", max_length=500)
regexp_filter = models.ForeignKey("Regexp", blank=True, null=True)
formater_type = models.ForeignKey("FormaterType")
- force_new = models.BooleanField(_(u"Force creation of new item"),
+ force_new = models.BooleanField(_(u"Force creation of new items"),
default=False)
concat = models.BooleanField(_(u"Concatenate with existing"),
default=False)
@@ -1729,7 +1795,7 @@ class Import(models.Model):
null=True)
end_date = models.DateTimeField(_(u"End date"), blank=True,
null=True, editable=False)
- seconds_remaining = models.IntegerField(_(u"Seconds remaining"),
+ seconds_remaining = models.IntegerField(_(u"Remaining seconds"),
blank=True, null=True,
editable=False)
@@ -1895,7 +1961,7 @@ class Organization(Address, Merge, OwnPerms, ValueGetter):
verbose_name = _(u"Organization")
verbose_name_plural = _(u"Organizations")
permissions = (
- ("view_organization", ugettext(u"Can view all Organization")),
+ ("view_organization", ugettext(u"Can view all Organizations")),
("view_own_organization", ugettext(u"Can view own Organization")),
("add_own_organization", ugettext(u"Can add own Organization")),
("change_own_organization",
@@ -1950,7 +2016,7 @@ class Person(Address, Merge, OwnPerms, ValueGetter):
TYPE = (
('Mr', _(u'Mr')),
('Ms', _(u'Miss')),
- ('Mr and Miss', _(u'Mr and Miss')),
+ ('Mr and Miss', _(u'Mr and Mrs')),
('Md', _(u'Mrs')),
('Dr', _(u'Doctor')),
)
@@ -1973,7 +2039,7 @@ class Person(Address, Merge, OwnPerms, ValueGetter):
verbose_name = _(u"Person")
verbose_name_plural = _(u"Persons")
permissions = (
- ("view_person", ugettext(u"Can view all Person")),
+ ("view_person", ugettext(u"Can view all Persons")),
("view_own_person", ugettext(u"Can view own Person")),
("add_own_person", ugettext(u"Can add own Person")),
("change_own_person", ugettext(u"Can change own Person")),
diff --git a/ishtar_common/static/media/style.css b/ishtar_common/static/media/style.css
index a4c62739b..2a0079706 100644
--- a/ishtar_common/static/media/style.css
+++ b/ishtar_common/static/media/style.css
@@ -371,7 +371,7 @@ div#main_menu > ul > li{
-webkit-border-radius:0;
}
-#section-file_management, #section-administration,
+#section-file_management,
#section-administrativact_management{
background-color:#ddffdd;
}
diff --git a/ishtar_common/templates/blocks/comma_list.html b/ishtar_common/templates/blocks/comma_list.html
new file mode 100644
index 000000000..12fcd2b41
--- /dev/null
+++ b/ishtar_common/templates/blocks/comma_list.html
@@ -0,0 +1 @@
+{% load i18n %}{% if not forloop.last %}{% ifequal forloop.revcounter 2 %} {% trans "and" %} {% else %}{% trans ", "%}{% endifequal %}{% else %}{% trans "." %}{% endif %}
diff --git a/ishtar_common/templates/ishtar/blocks/window_tables/static_documents.html b/ishtar_common/templates/ishtar/blocks/window_tables/static_documents.html
new file mode 100644
index 000000000..d6686b553
--- /dev/null
+++ b/ishtar_common/templates/ishtar/blocks/window_tables/static_documents.html
@@ -0,0 +1,11 @@
+{% load i18n %}
+
+<table class='simple'>
+ <caption>{{caption}}</caption>
+ <tr>{% for col in col_names %}
+ <th>{% trans col %}</th>{% endfor %}
+ </tr>{% for item in data %}
+ <tr>{% for value in item %}
+ <td>{{value}}</td>{%endfor%}
+ </tr>{% endfor %}
+</table>
diff --git a/ishtar_common/templates/ishtar/dashboards/dashboard_main_detail.html b/ishtar_common/templates/ishtar/dashboards/dashboard_main_detail.html
index 87ce5c528..d7ea16d90 100644
--- a/ishtar_common/templates/ishtar/dashboards/dashboard_main_detail.html
+++ b/ishtar_common/templates/ishtar/dashboards/dashboard_main_detail.html
@@ -105,7 +105,7 @@ if (typeof values_1_{{unique_id}} === 'undefined'
|| values_1_{{unique_id}}.length == 0){
$('#chart_img_{{unique_id}}').hide();
-$('#chart_{{unique_id}}').html("<p class='alert'>{% trans 'No data for theses criteria.' %}</p>");
+$('#chart_{{unique_id}}').html("<p class='alert'>{% trans 'No data for these criteria.' %}</p>");
} else {
var showmarker = false;
diff --git a/ishtar_common/templates/ishtar/sheet_person.html b/ishtar_common/templates/ishtar/sheet_person.html
index 2dfc4bbea..796fe2c4a 100644
--- a/ishtar_common/templates/ishtar/sheet_person.html
+++ b/ishtar_common/templates/ishtar/sheet_person.html
@@ -35,17 +35,17 @@
{% trans "Associated operations as scientist" as ao %}
{% if item.operation_scientist_responsability.count %}
-{% dynamic_table_document ao 'operations' 'scientist' item.pk %}
+{% dynamic_table_document ao 'operations' 'scientist' item.pk '' output %}
{% endif %}
{% trans "Associated operations as responsible" as ao %}
{% if item.operation_responsability.count %}
-{% dynamic_table_document ao 'operations' 'in_charge' item.pk %}
+{% dynamic_table_document ao 'operations' 'in_charge' item.pk '' output %}
{% endif %}
{% trans "Associated archaelogical files" as af %}
{% if item.file_responsability.count %}
-{% dynamic_table_document af 'files' 'in_charge' item.pk %}
+{% dynamic_table_document af 'files' 'in_charge' item.pk '' output %}
{% endif %}
<table>
diff --git a/ishtar_common/templates/sheet_ope.html b/ishtar_common/templates/sheet_ope.html
index dbe3297b3..28390af45 100644
--- a/ishtar_common/templates/sheet_ope.html
+++ b/ishtar_common/templates/sheet_ope.html
@@ -118,9 +118,9 @@
{% endfor %}
</table>
-<h3>{% trans "Recording Units"%}</h3>
+<h3>{% trans "Context Records"%}</h3>
<table>
- <caption>{%trans "Recording Units"%}</caption>
+ <caption>{%trans "Context Records"%}</caption>
<tr>
<th>{% trans "ID" %}</th>
<th>{% trans "Type" %}</th>
@@ -139,7 +139,7 @@
<td class='link'><a href="#{#{%url show-record_unit record_unit.pk%}#}">{% trans "Details" %}</a></td>
</tr>
{% empty %}
- <tr><td colspan="6" class='no_items'>{% trans "No recording unit associated to this operation" %}</td></tr>
+ <tr><td colspan="6" class='no_items'>{% trans "No context record associated to this operation" %}</td></tr>
{% endfor %}
</table>
diff --git a/ishtar_common/templatetags/window_tables.py b/ishtar_common/templatetags/window_tables.py
index a1aa735a7..687b2cf49 100644
--- a/ishtar_common/templatetags/window_tables.py
+++ b/ishtar_common/templatetags/window_tables.py
@@ -1,8 +1,11 @@
+import json
import time
from django import template
from django.conf import settings
+from django.core.urlresolvers import resolve
from django.template.defaultfilters import slugify
+from django.template.loader import get_template
from django.utils.translation import ugettext_lazy as _
from ishtar_common.forms import reverse_lazy
@@ -52,16 +55,21 @@ except:
pass
-@register.inclusion_tag('ishtar/blocks/window_tables/dynamic_documents.html')
-def dynamic_table_document(caption, associated_model, key, value,
- table_cols='TABLE_COLS'):
+@register.simple_tag(takes_context=True)
+def dynamic_table_document(context, caption, associated_model, key, value,
+ table_cols='TABLE_COLS', output='html'):
+ if not table_cols:
+ table_cols = 'TABLE_COLS'
model, url, url_full = ASSOCIATED_MODELS[associated_model]
grid = JQueryJqGrid(None, None, model, table_cols=table_cols)
source = unicode(reverse_lazy(url))
source_full = unicode(reverse_lazy(url_full)) if url_full else ''
source_attrs = '?{}={}'.format(key, value)
- col_names, extra_cols = grid.get_cols()
- return {'caption': caption,
+ if output == 'html':
+ col_names, extra_cols = grid.get_cols()
+ t = get_template('ishtar/blocks/window_tables/dynamic_documents.html')
+ context = template.Context({
+ 'caption': caption,
'name': slugify(caption) + '{}'.format(int(time.time())),
'source': source + source_attrs,
'source_full': source_full,
@@ -72,4 +80,38 @@ def dynamic_table_document(caption, associated_model, key, value,
'no_result': unicode(_("No results")),
'loading': unicode(_("Loading...")),
'encoding': settings.ENCODING or 'utf-8',
- }
+ })
+ return t.render(context)
+ else:
+ col_names, extra_cols = grid.get_cols(python=True)
+ view, args, kwargs = resolve(source)
+ request = context['request']
+ if source_attrs and source_attrs.startswith('?'):
+ source_attrs = source_attrs[1:]
+ dct = {}
+ for attr in source_attrs.split('&'):
+ if '=' in attr:
+ key, val = attr.split('=')
+ dct[key] = val
+ request.GET = dct
+ kwargs['request'] = request
+ page = view(*args, **kwargs)
+ data = []
+ if page.content:
+ res = json.loads(page.content)
+ if "rows" in res:
+ for r in res["rows"]:
+ d = []
+ for col in extra_cols:
+ if col in r:
+ d.append(r[col])
+ else:
+ d.append('')
+ data.append(d)
+ t = get_template('ishtar/blocks/window_tables/static_documents.html')
+ context = template.Context({
+ 'caption': caption,
+ 'col_names': col_names,
+ 'data': data
+ })
+ return t.render(context)
diff --git a/ishtar_common/tests.py b/ishtar_common/tests.py
index 621b05242..82ab009e0 100644
--- a/ishtar_common/tests.py
+++ b/ishtar_common/tests.py
@@ -17,18 +17,22 @@
# See the file COPYING for details.
-import tempfile, datetime
-from zipfile import ZipFile, ZIP_DEFLATED
-
from django.conf import settings
from django.contrib.auth.models import User
from django.contrib.contenttypes.models import ContentType
+from django.core.cache import cache
+from django.core.urlresolvers import reverse
from django.template.defaultfilters import slugify
from django.test import TestCase
+from django.test.client import Client
from ishtar_common import models
"""
+from django.conf import settings
+import tempfile, datetime
+from zipfile import ZipFile, ZIP_DEFLATED
+
from oook_replace.oook_replace import oook_replace
class OOOGenerationTest(TestCase):
@@ -53,34 +57,36 @@ class OOOGenerationTest(TestCase):
class MergeTest(TestCase):
def setUp(self):
self.user, created = User.objects.get_or_create(username='username')
- self.organisation_types = models.OrganizationType.create_default_for_test()
+ self.organisation_types = \
+ models.OrganizationType.create_default_for_test()
self.person_types = [models.PersonType.objects.create(label='Admin'),
models.PersonType.objects.create(label='User')]
self.author_types = [models.AuthorType.objects.create(label='1'),
- models.AuthorType.objects.create(label='2'),]
+ models.AuthorType.objects.create(label='2')]
self.company_1 = models.Organization.objects.create(
- history_modifier=self.user, name='Franquin Comp.',
- organization_type=self.organisation_types[0])
- self.person_1 = models.Person.objects.create(name='Boule',
- surname=' ',
- history_modifier=self.user, attached_to=self.company_1)
+ history_modifier=self.user, name='Franquin Comp.',
+ organization_type=self.organisation_types[0])
+ self.person_1 = models.Person.objects.create(
+ name='Boule', surname=' ', history_modifier=self.user,
+ attached_to=self.company_1)
self.person_1.person_types.add(self.person_types[0])
- self.author_1_pk = models.Author.objects.create(person=self.person_1,
- author_type=self.author_types[0]).pk
+ self.author_1_pk = models.Author.objects.create(
+ person=self.person_1, author_type=self.author_types[0]).pk
self.company_2 = models.Organization.objects.create(
- history_modifier=self.user, name='Goscinny Corp.',
- organization_type=self.organisation_types[1])
- self.person_2 = models.Person.objects.create(name='Bill',
- history_modifier=self.user, surname='Peyo', title='Mr',
- attached_to=self.company_2)
+ history_modifier=self.user, name='Goscinny Corp.',
+ organization_type=self.organisation_types[1])
+ self.person_2 = models.Person.objects.create(
+ name='Bill', history_modifier=self.user, surname='Peyo',
+ title='Mr', attached_to=self.company_2)
self.person_2.person_types.add(self.person_types[1])
- self.author_2_pk = models.Author.objects.create(person=self.person_2,
- author_type=self.author_types[1]).pk
- self.person_3 = models.Person.objects.create(name='George',
- history_modifier=self.user, attached_to=self.company_1)
+ self.author_2_pk = models.Author.objects.create(
+ person=self.person_2, author_type=self.author_types[1]).pk
+ self.person_3 = models.Person.objects.create(
+ name='George', history_modifier=self.user,
+ attached_to=self.company_1)
def testPersonMerge(self):
self.person_1.merge(self.person_2)
@@ -93,9 +99,11 @@ class MergeTest(TestCase):
# preserve existing foreign key
self.assertEqual(self.person_1.attached_to, self.company_1)
# preserve existing many to many
- self.assertTrue(self.person_types[0] in self.person_1.person_types.all())
+ self.assertTrue(self.person_types[0]
+ in self.person_1.person_types.all())
# add new many to many
- self.assertTrue(self.person_types[1] in self.person_1.person_types.all())
+ self.assertTrue(self.person_types[1]
+ in self.person_1.person_types.all())
# update reverse foreign key association and dont break the existing
self.assertEqual(models.Author.objects.get(pk=self.author_1_pk).person,
self.person_1)
@@ -104,32 +112,37 @@ class MergeTest(TestCase):
self.person_3.merge(self.person_1)
# manage well empty many to many fields
- self.assertTrue(self.person_types[1] in self.person_3.person_types.all())
+ self.assertTrue(self.person_types[1]
+ in self.person_3.person_types.all())
+
class ImportKeyTest(TestCase):
def testKeys(self):
- content_type = ContentType.objects.get_for_model(models.OrganizationType)
+ content_type = ContentType.objects.get_for_model(
+ models.OrganizationType)
# creation
label = u"Ploufé"
ot = models.OrganizationType.objects.create(label=label)
- self.assertEqual(models.ItemKey.objects.filter(object_id=ot.pk,
- key=slugify(label),
- content_type=content_type).count(), 1)
+ self.assertEqual(models.ItemKey.objects.filter(
+ object_id=ot.pk, key=slugify(label),
+ content_type=content_type).count(), 1)
label_2 = u"Plif"
ot_2 = models.OrganizationType.objects.create(label=label_2)
- self.assertEqual(models.ItemKey.objects.filter(object_id=ot_2.pk,
- key=slugify(label_2),
- content_type=content_type).count(), 1)
+ self.assertEqual(models.ItemKey.objects.filter(
+ object_id=ot_2.pk, key=slugify(label_2),
+ content_type=content_type).count(), 1)
# replace key
ot_2.add_key(slugify(label), force=True)
# one key point to only one item
- self.assertEqual(models.ItemKey.objects.filter(key=slugify(label),
- content_type=content_type).count(), 1)
+ self.assertEqual(models.ItemKey.objects.filter(
+ key=slugify(label),
+ content_type=content_type).count(), 1)
# this key point to the right item
- self.assertEqual(models.ItemKey.objects.filter(object_id=ot_2.pk,
- key=slugify(label), content_type=content_type).count(), 1)
+ self.assertEqual(models.ItemKey.objects.filter(
+ object_id=ot_2.pk, key=slugify(label),
+ content_type=content_type).count(), 1)
# modification
label_3 = "Yop"
@@ -137,14 +150,67 @@ class ImportKeyTest(TestCase):
ot_2.txt_idx = slugify(label_3)
ot_2.save()
# old label not referenced anymore
- self.assertEqual(models.ItemKey.objects.filter(object_id=ot_2.pk,
- key=slugify(label_2), content_type=content_type).count(), 0)
- # forced key association is always here
- self.assertEqual(models.ItemKey.objects.filter(object_id=ot_2.pk,
- key=slugify(label), content_type=content_type).count(), 1)
+ self.assertEqual(models.ItemKey.objects.filter(
+ object_id=ot_2.pk, key=slugify(label_2),
+ content_type=content_type).count(), 0)
+ # # forced key association is always here
# new key is here
- self.assertEqual(models.ItemKey.objects.filter(object_id=ot_2.pk,
- key=slugify(label_3), content_type=content_type).count(), 1)
-
-
-
+ self.assertEqual(models.ItemKey.objects.filter(
+ object_id=ot_2.pk, key=slugify(label),
+ content_type=content_type).count(), 1)
+ self.assertEqual(models.ItemKey.objects.filter(
+ object_id=ot_2.pk, key=slugify(label_3),
+ content_type=content_type).count(), 1)
+
+
+class IshtarSiteProfileTest(TestCase):
+ def testRelevance(self):
+ cache.set('default-ishtarsiteprofile-is-current-profile', None,
+ settings.CACHE_TIMEOUT)
+ profile = models.get_current_profile()
+ default_slug = profile.slug
+ profile2 = models.IshtarSiteProfile.objects.create(
+ label="Test profile 2", slug='test-profile-2')
+ profile2.save()
+ # when no profile is the current, activate by default the first created
+ self.assertTrue(profile.active and not profile2.active)
+ profile2.active = True
+ profile2 = profile2.save()
+ # only one profile active at a time
+ profile = models.IshtarSiteProfile.objects.get(slug=default_slug)
+ self.assertTrue(profile2.active and not profile.active)
+ # activate find active automatically context records
+ self.assertFalse(profile.context_record)
+ profile.find = True
+ profile = profile.save()
+ self.assertTrue(profile.context_record)
+ # activate warehouse active automatically context records and finds
+ self.assertFalse(profile2.context_record or profile2.find)
+ profile2.warehouse = True
+ profile2 = profile2.save()
+ self.assertTrue(profile2.context_record and profile2.find)
+
+ def testDefaultProfile(self):
+ cache.set('default-ishtarsiteprofile-is-current-profile', None,
+ settings.CACHE_TIMEOUT)
+ self.assertFalse(models.IshtarSiteProfile.objects.count())
+ profile = models.get_current_profile()
+ self.assertTrue(profile)
+ self.assertTrue(models.IshtarSiteProfile.objects.count())
+
+ def testMenuFiltering(self):
+ cache.set('default-ishtarsiteprofile-is-current-profile', None,
+ settings.CACHE_TIMEOUT)
+ username = 'username4277'
+ password = 'dcbqj756456!@%'
+ User.objects.create_superuser(username, "nomail@nomail.com",
+ password)
+ c = Client()
+ c.login(username=username, password=password)
+ response = c.get(reverse('start'))
+ self.assertFalse("section-file_management" in response.content)
+ profile = models.get_current_profile()
+ profile.files = True
+ profile.save()
+ response = c.get(reverse('start'))
+ self.assertTrue("section-file_management" in response.content)
diff --git a/ishtar_common/utils.py b/ishtar_common/utils.py
index 65bd1ee15..25ae6ddf5 100644
--- a/ishtar_common/utils.py
+++ b/ishtar_common/utils.py
@@ -17,13 +17,14 @@
# See the file COPYING for details.
+from django.conf import settings
from django.core.cache import cache
from django.utils.translation import ugettext
from django.template.defaultfilters import slugify
def get_cache(cls, extra_args=[]):
- cache_key = cls.__name__
+ cache_key = u"{}-{}".format(settings.PROJECT_SLUG, cls.__name__)
for arg in extra_args:
if not arg:
cache_key += '-0'
diff --git a/ishtar_common/views.py b/ishtar_common/views.py
index 6f95e070a..5ea53374d 100644
--- a/ishtar_common/views.py
+++ b/ishtar_common/views.py
@@ -51,7 +51,12 @@ from xhtml2odt import xhtml2odt
from menus import menu
+from archaeological_files.models import File
+from archaeological_context_records.models import ContextRecord
+from archaeological_finds.models import Find
+
from archaeological_operations.forms import DashboardForm as DashboardFormOpe
+from archaeological_files.forms import DashboardForm as DashboardFormFile
from ishtar_common.forms import FinalForm, FinalDeleteForm
from ishtar_common import forms_common as forms
@@ -724,6 +729,7 @@ def show_item(model, name, extra_dct=None):
dct.update(extra_dct(request, item))
context_instance = RequestContext(request)
context_instance.update(dct)
+ context_instance['output'] = 'html'
filename = ""
if hasattr(item, 'history_object'):
filename = item.history_object.associated_filename
@@ -731,6 +737,7 @@ def show_item(model, name, extra_dct=None):
filename = item.associated_filename
if doc_type == "odt" and settings.ODT_TEMPLATE:
tpl = loader.get_template('ishtar/sheet_%s.html' % name)
+ context_instance['output'] = 'ODT'
content = tpl.render(context_instance)
try:
tidy_options = {'output-xhtml': 1, 'indent': 1,
@@ -770,6 +777,7 @@ def show_item(model, name, extra_dct=None):
return response
elif doc_type == 'pdf':
tpl = loader.get_template('ishtar/sheet_%s_pdf.html' % name)
+ context_instance['output'] = 'PDF'
content = tpl.render(context_instance)
result = StringIO.StringIO()
html = content.encode('utf-8')
@@ -927,22 +935,20 @@ def dashboard_main(request, dct, obj_id=None, *args, **kwargs):
Main dashboard
"""
app_list = []
- if 'archaeological_files' in settings.INSTALLED_APPS:
+ profile = models.get_current_profile()
+ if profile.files:
app_list.append((_(u"Archaeological files"), 'files'))
app_list.append((_(u"Operations"), 'operations'))
- if 'archaeological_context_records' in settings.INSTALLED_APPS:
+ if profile.context_record:
app_list.append((_(u"Context records"), 'contextrecords'))
- if 'archaeological_finds' in settings.INSTALLED_APPS:
+ if profile.find:
app_list.append((_(u"Finds"), 'finds'))
dct = {'app_list': app_list}
return render_to_response('ishtar/dashboards/dashboard_main.html', dct,
context_instance=RequestContext(request))
DASHBOARD_FORMS = {}
-if 'archaeological_files' in settings.INSTALLED_APPS:
- from archaeological_files.forms import DashboardForm as DashboardFormFile
- DASHBOARD_FORMS['files'] = DashboardFormFile
-
+DASHBOARD_FORMS['files'] = DashboardFormFile
DASHBOARD_FORMS['operations'] = DashboardFormOpe
@@ -957,8 +963,8 @@ def dashboard_main_detail(request, item_name):
dct, context_instance=RequestContext(request))
form = None
slicing, date_source, fltr, show_detail = 'year', None, {}, False
- if (item_name == 'files' and
- 'archaeological_files' in settings.INSTALLED_APPS) \
+ profile = models.get_current_profile()
+ if (item_name == 'files' and profile.files) \
or item_name == 'operations':
slicing = 'month'
if item_name in DASHBOARD_FORMS:
@@ -974,32 +980,25 @@ def dashboard_main_detail(request, item_name):
else:
form = DASHBOARD_FORMS[item_name]()
lbl, dashboard = None, None
- if (item_name == 'files' and
- 'archaeological_files' in settings.INSTALLED_APPS) \
+ if (item_name == 'files' and profile.files) \
or item_name == 'operations':
dashboard_kwargs = {'slice': slicing, 'fltr': fltr,
'show_detail': show_detail}
# date_source is only relevant when the form has set one
if date_source:
dashboard_kwargs['date_source'] = date_source
- if item_name == 'files' and \
- 'archaeological_files' in settings.INSTALLED_APPS:
- from archaeological_files.models import File
+ if item_name == 'files' and profile.files:
lbl, dashboard = (_(u"Archaeological files"),
models.Dashboard(File, **dashboard_kwargs))
if item_name == 'operations':
from archaeological_operations.models import Operation
lbl, dashboard = (_(u"Operations"),
models.Dashboard(Operation, **dashboard_kwargs))
- if item_name == 'contextrecords' and \
- 'archaeological_context_records' in settings.INSTALLED_APPS:
- from archaeological_context_records.models import ContextRecord
+ if item_name == 'contextrecords' and profile.context_record:
lbl, dashboard = (
_(u"Context records"),
models.Dashboard(ContextRecord, slice=slicing, fltr=fltr))
- if item_name == 'finds' and \
- 'archaeological_finds' in settings.INSTALLED_APPS:
- from archaeological_finds.models import Find
+ if item_name == 'finds' and profile.find:
lbl, dashboard = (_(u"Finds"), models.Dashboard(Find,
slice=slicing,
fltr=fltr))
diff --git a/ishtar_common/widgets.py b/ishtar_common/widgets.py
index 688648e10..57aa8cf69 100644
--- a/ishtar_common/widgets.py
+++ b/ishtar_common/widgets.py
@@ -524,7 +524,7 @@ class JQueryJqGrid(forms.RadioSelect):
self.new, self.new_message = new, new_message
self.source_full = source_full
- def get_cols(self):
+ def get_cols(self, python=False):
jq_col_names, extra_cols = [], []
col_labels = {}
if hasattr(self.associated_model, self.table_cols + '_LBL'):
@@ -557,13 +557,19 @@ class JQueryJqGrid(forms.RadioSelect):
field_name += f_name
field_verbose_names.append(unicode(field_verbose_name))
if field_name in col_labels:
- jq_col_names.append(u'"%s"' % unicode(col_labels[field_name]))
+ jq_col_names.append(unicode(col_labels[field_name]))
else:
- jq_col_names.append(u'"%s"' % settings.JOINT.join(
+ jq_col_names.append(settings.JOINT.join(
[f for f in field_verbose_names if f]))
- extra_cols.append(self.COL_TPL % {'idx': field_name})
- jq_col_names = jq_col_names and ", ".join(jq_col_names) or ""
- extra_cols = extra_cols and ", ".join(extra_cols) or ""
+ if not python:
+ jq_col_names[-1] = u'"%s"' % jq_col_names[-1]
+ if python:
+ extra_cols.append(field_name)
+ else:
+ extra_cols.append(self.COL_TPL % {'idx': field_name})
+ if not python:
+ jq_col_names = jq_col_names and ", ".join(jq_col_names) or ""
+ extra_cols = extra_cols and ", ".join(extra_cols) or ""
return jq_col_names, extra_cols
def render(self, name, value=None, attrs=None):
diff --git a/translations/fr/archaeological_context_records.po b/translations/fr/archaeological_context_records.po
index d81ad8fc5..d86fd954a 100644
--- a/translations/fr/archaeological_context_records.po
+++ b/translations/fr/archaeological_context_records.po
@@ -2,15 +2,14 @@
# Copyright (C) 2010-2015
# This file is distributed under the same license as the Ishtar package.
# Étienne Loks <etienne.loks at peacefrogs net>, 2010-2015.
-# Étienne Loks <etienne.loks@iggdrasil.net>, 2015. #zanata
-# Étienne Loks <etienne.loks@iggdrasil.net>, 2016. #zanata
+# Valérie-Emma Leroux <emma@iggdrasil.net>, 2016. #zanata
msgid ""
msgstr ""
"MIME-Version: 1.0\n"
"Content-Transfer-Encoding: 8bit\n"
"Content-Type: text/plain; charset=UTF-8\n"
-"PO-Revision-Date: 2016-01-28 03:54-0500\n"
-"Last-Translator: Étienne Loks <etienne.loks@iggdrasil.net>\n"
+"PO-Revision-Date: 2016-02-24 10:48-0500\n"
+"Last-Translator: Valérie-Emma Leroux <emma@iggdrasil.net>\n"
"Language-Team: \n"
"Language: fr\n"
"Plural-Forms: nplurals=2; plural=n>1;\n"
@@ -96,7 +95,7 @@ msgid "Location"
msgstr "Lieu"
#: forms.py:159
-msgid "This ID already exist for this operation."
+msgid "This ID already exists for this operation."
msgstr "Cet identifiant existe déjà pour cette opération."
#: forms.py:165 forms.py:189 models.py:59
@@ -166,11 +165,11 @@ msgstr "TPQ estimé"
#: forms.py:252
msgid "Operation search"
-msgstr "Recherche d'opérations"
+msgstr "Recherche d'Opérations"
#: forms.py:254
msgid "You should select an operation."
-msgstr "Vous devez sélectionner une opération."
+msgstr "Vous devez sélectionner une Opération."
#: forms.py:259
msgid "Would you like to delete this context record?"
@@ -198,33 +197,33 @@ msgstr "Type d'unité de l'Unité d'Enregistrement"
#: forms.py:292
msgid "Documentation search"
-msgstr "Recherche de document"
+msgstr "Recherche de documents"
#: forms.py:294
msgid "You should select a document."
msgstr "Vous devez sélectionner un document."
-#: ishtar_menu.py:30
+#: ishtar_menu.py:31
msgid "Search"
msgstr "Recherche"
-#: ishtar_menu.py:34
+#: ishtar_menu.py:35
msgid "Creation"
msgstr "Ajout"
-#: ishtar_menu.py:38 ishtar_menu.py:55
+#: ishtar_menu.py:39 ishtar_menu.py:56
msgid "Modification"
msgstr "Modification"
-#: ishtar_menu.py:42 ishtar_menu.py:61
+#: ishtar_menu.py:43 ishtar_menu.py:62
msgid "Deletion"
msgstr "Suppression"
-#: ishtar_menu.py:46
+#: ishtar_menu.py:47
msgid "Documentation"
msgstr "Documentation"
-#: ishtar_menu.py:49
+#: ishtar_menu.py:50
msgid "Add"
msgstr "Ajout"
@@ -257,27 +256,27 @@ msgid "Parent unit"
msgstr "Unité parente"
#: models.py:76
-msgid "Type Unit"
+msgid "Unit Type"
msgstr "Type d'unité"
#: models.py:77
-msgid "Types Unit"
+msgid "Unit Types"
msgstr "Types d'unité"
#: models.py:88
-msgid "Type Activity"
+msgid "Activity Type"
msgstr "Type d'activité"
#: models.py:89
-msgid "Types Activity"
+msgid "Activity Types"
msgstr "Types d'activité"
#: models.py:100
-msgid "Type Identification"
+msgid "Identification Type"
msgstr "Type d'identification"
#: models.py:101
-msgid "Types Identification"
+msgid "Identification Types"
msgstr "Types d'identification"
#: models.py:119
@@ -298,7 +297,7 @@ msgstr "Date d'ouverture"
#: models.py:138
msgid "A short description of the location of the context record"
-msgstr "Une courte description de la situation de l'Unité d'Enregistrement"
+msgstr "Une courte description de la localisation de l'Unité d'Enregistrement"
#: models.py:150
msgid ""
@@ -329,7 +328,7 @@ msgid "Context Record"
msgstr "Unité d'Enregistrement"
#: models.py:175
-msgid "Can view all Context Record"
+msgid "Can view all Context Records"
msgstr "Peut voir toutes les Unités d'Enregistrement"
#: models.py:177
@@ -342,7 +341,7 @@ msgstr "Peut ajouter sa propre Unité d'Enregistrement"
#: models.py:181
msgid "Can change own Context Record"
-msgstr "Peut changer sa propre Unité d'Enregistrement"
+msgstr "Peut modifier sa propre Unité d'Enregistrement"
#: models.py:183
msgid "Can delete own Context Record"
@@ -448,7 +447,7 @@ msgstr "ID temporaire :"
#: templates/ishtar/sheet_contextrecord.html:32
msgid "Creation date:"
-msgstr "Date de création"
+msgstr "Date de création :"
#: templates/ishtar/sheet_contextrecord.html:33
msgid "Created by:"
@@ -513,7 +512,7 @@ msgid "TAQ:"
msgstr "TAQ :"
#: templates/ishtar/sheet_contextrecord.html:62
-msgid "TAQ estimated:"
+msgid "Estimated TAQ:"
msgstr "TAQ estimé :"
#: templates/ishtar/sheet_contextrecord.html:63
@@ -521,7 +520,7 @@ msgid "TPQ:"
msgstr "TPQ :"
#: templates/ishtar/sheet_contextrecord.html:64
-msgid "TPQ estimated:"
+msgid "Estimated TPQ:"
msgstr "TPQ estimé :"
#: templates/ishtar/sheet_contextrecord.html:68
@@ -541,7 +540,7 @@ msgid "Details"
msgstr "Détails"
#: templates/ishtar/sheet_contextrecord.html:95
-msgid "Operation resume"
+msgid "Operation summary"
msgstr "Résumé de l'opération"
#: templates/ishtar/sheet_contextrecord.html:96
@@ -590,7 +589,7 @@ msgstr "Lieu"
#: templates/ishtar/sheet_contextrecord.html:119
msgid "Towns:"
-msgstr "Villes :"
+msgstr "Communes :"
#: templates/ishtar/sheet_contextrecord.html:120
msgid "Related operation:"
diff --git a/translations/fr/archaeological_files.po b/translations/fr/archaeological_files.po
index e20e6fd08..d66b22e69 100644
--- a/translations/fr/archaeological_files.po
+++ b/translations/fr/archaeological_files.po
@@ -3,13 +3,14 @@
# This file is distributed under the same license as the Ishtar package.
# Étienne Loks <etienne.loks at peacefrogs net>, 2010-2014.
# Étienne Loks <etienne.loks@iggdrasil.net>, 2015. #zanata
+# Valérie-Emma Leroux <emma@iggdrasil.net>, 2016. #zanata
# Étienne Loks <etienne.loks@iggdrasil.net>, 2016. #zanata
msgid ""
msgstr ""
"MIME-Version: 1.0\n"
"Content-Transfer-Encoding: 8bit\n"
"Content-Type: text/plain; charset=UTF-8\n"
-"PO-Revision-Date: 2016-02-03 06:49-0500\n"
+"PO-Revision-Date: 2016-02-24 02:09-0500\n"
"Last-Translator: Étienne Loks <etienne.loks@iggdrasil.net>\n"
"Language-Team: \n"
"Language: fr\n"
@@ -33,6 +34,10 @@ msgstr "Autre référence"
msgid "Parcel (section/number)"
msgstr "Parcelle (section/numéro)"
+#: forms.py:59 forms.py:405 forms.py:432 models.py:518
+msgid "Department"
+msgstr "Département"
+
#: forms.py:60 forms.py:441
msgid "File name"
msgstr "Nom du dossier"
@@ -132,7 +137,7 @@ msgstr "Nom"
#: forms.py:222 models.py:128
msgid "Related file"
-msgstr "Dossier en relation avec"
+msgstr "Dossier associé"
#: forms.py:230 models.py:136
msgid "Total surface (m2)"
@@ -216,10 +221,6 @@ msgstr "Type d'acte"
msgid "Object (full text search)"
msgstr "Objet (recherche texte intégral)"
-#: forms.py:405 forms.py:432 models.py:518
-msgid "Department"
-msgstr "Département"
-
#: forms.py:427
msgid "Indexed?"
msgstr "Indexé ?"
@@ -238,7 +239,7 @@ msgstr "Date de signature avant"
#: forms.py:460
msgid "File numeric reference"
-msgstr "Dossier : ref. numérique"
+msgstr "Dossier : réf. numérique"
#: forms.py:461
msgid "File year"
@@ -260,47 +261,47 @@ msgstr "Dossier : réf. du permis"
msgid "Archaeological file"
msgstr "Dossier"
-#: ishtar_menu.py:36 ishtar_menu.py:59
+#: ishtar_menu.py:37 ishtar_menu.py:60
msgid "Search"
msgstr "Recherche"
-#: ishtar_menu.py:40
+#: ishtar_menu.py:41
msgid "Creation"
msgstr "Ajout"
-#: ishtar_menu.py:44 ishtar_menu.py:67
+#: ishtar_menu.py:45 ishtar_menu.py:68
msgid "Modification"
msgstr "Modification"
-#: ishtar_menu.py:48
+#: ishtar_menu.py:49
msgid "Closing"
-msgstr "Clotûre"
+msgstr "Clôture"
-#: ishtar_menu.py:52 ishtar_menu.py:71
+#: ishtar_menu.py:53 ishtar_menu.py:72
msgid "Deletion"
msgstr "Suppression"
-#: ishtar_menu.py:56
+#: ishtar_menu.py:57
msgid "Administrative act"
msgstr "Acte administratif"
-#: ishtar_menu.py:63
+#: ishtar_menu.py:64
msgid "Add"
msgstr "Ajout"
-#: ishtar_menu.py:75
+#: ishtar_menu.py:76
msgid "Documents"
msgstr "Documents"
-#: ishtar_menu.py:81
+#: ishtar_menu.py:82
msgid "Dashboard"
msgstr "Tableau de bord"
-#: ishtar_menu.py:82
+#: ishtar_menu.py:84
msgid "General informations"
msgstr "Informations générales"
-#: ishtar_menu.py:85 models.py:186
+#: ishtar_menu.py:87 models.py:186
#: templates/ishtar/dashboards/dashboard_file.html:8
msgid "Archaeological files"
msgstr "Dossiers archéologiques"
@@ -319,7 +320,7 @@ msgstr "Types de permis"
#: models.py:63
msgid "Delay (in days)"
-msgstr "Delai (en jours)"
+msgstr "Délai (en jours)"
#: models.py:79
msgid "Internal reference"
@@ -347,7 +348,7 @@ msgstr "Service instructeur"
#: models.py:118
msgid "Closing date"
-msgstr "Date de clotûre"
+msgstr "Date de clôture"
#: models.py:119
msgid "Town"
@@ -386,8 +387,8 @@ msgid "Imported line"
msgstr "Ligne importée"
#: models.py:188
-msgid "Can view all Archaelogical file"
-msgstr "Peut voir tous les dossier archéologique"
+msgid "Can view all Archaelogical files"
+msgstr "Peut voir tous les Dossiers"
#: models.py:189
msgid "Can view own Archaelogical file"
@@ -399,7 +400,7 @@ msgstr "Peut ajouter son propre Dossier"
#: models.py:192
msgid "Can change own Archaelogical file"
-msgstr "Peut changer son propre Dossier"
+msgstr "Peut modifier son propre Dossier"
#: models.py:194
msgid "Can delete own Archaelogical file"
@@ -407,7 +408,7 @@ msgstr "Peut supprimer son propre Dossier"
#: models.py:195
msgid "Can close File"
-msgstr "Peut fermer un dossier"
+msgstr "Peut fermer un Dossier"
#: models.py:201
msgid "FILE"
@@ -439,7 +440,7 @@ msgstr "Modification de dossier archéologique"
#: views.py:206
msgid "File closing"
-msgstr "Clotûre de dossier"
+msgstr "Clôture de dossier archéologique"
#: views.py:211
msgid "File deletion"
@@ -459,13 +460,13 @@ msgstr "Dossier : modification d'acte administratif"
#: views.py:246
msgid "File: administrative act deletion"
-msgstr "Dossier : suppression acte administratif"
+msgstr "Dossier : suppression d'acte administratif"
#: wizards.py:112 templates/ishtar/sheet_file.html:122
msgid "Associated operations"
msgstr "Opérations associées"
-#: wizards.py:141 wizards.py:151
+#: wizards.py:142 wizards.py:152
msgid "Archaelogical file"
msgstr "Dossier"
@@ -531,7 +532,7 @@ msgstr "Dossier fermé"
#: templates/ishtar/sheet_file.html:55
msgid "Closing date:"
-msgstr "Date de clotûre :"
+msgstr "Date de clôture :"
#: templates/ishtar/sheet_file.html:55
msgid "by"
@@ -590,15 +591,15 @@ msgstr "Responsable scientifique"
#: templates/ishtar/sheet_file.html:115
msgid "Associated parcels"
-msgstr "Opérations associées"
+msgstr "Parcelles associées"
#: templates/ishtar/sheet_file.html:118
-msgid "Administrativ acts"
-msgstr "Actes administratif"
+msgid "Administrative acts"
+msgstr "Actes administratifs"
#: templates/ishtar/sheet_file.html:124 templates/ishtar/sheet_file.html:151
msgid "Ref."
-msgstr "Ref."
+msgstr "Réf."
#: templates/ishtar/sheet_file.html:126 templates/ishtar/sheet_file.html:152
msgid "Type"
@@ -622,7 +623,7 @@ msgstr "Pas d'opération associée à ce dossier archéologique"
#: templates/ishtar/sheet_file.html:148
msgid "Admninistrative acts linked to associated operations"
-msgstr "Actes administratifs associé à ces opérations"
+msgstr "Actes administratifs associés à ces opérations"
#: templates/ishtar/sheet_file.html:153
msgid "Date"
@@ -677,17 +678,17 @@ msgstr "Par acte administratif"
#: templates/ishtar/dashboards/dashboard_file.html:147
msgid "Archaeological files linked to at least one operation:"
-msgstr "Dossier associé au moins à une opération :"
+msgstr "Dossier associé à au moins une opération :"
#: templates/ishtar/dashboards/dashboard_file.html:148
#, python-format
msgid "Archaeological files linked to at least one operation (%%):"
-msgstr "Dossier associé au moins à une opération (%%) :"
+msgstr "Dossier associé à au moins une opération (%%) :"
#: templates/ishtar/dashboards/dashboard_file.html:152
#, python-format
msgid "Archaeological files linked to at least one operation (%%)"
-msgstr "Dossier associé au moins à une opération (%%)"
+msgstr "Dossiers associés à au moins une opération (%%)"
#: templates/ishtar/dashboards/dashboard_file.html:176
msgid "Surface by department (ha)"
diff --git a/translations/fr/archaeological_files_pdl.po b/translations/fr/archaeological_files_pdl.po
index f53c27e4c..c6eaa540b 100644
--- a/translations/fr/archaeological_files_pdl.po
+++ b/translations/fr/archaeological_files_pdl.po
@@ -3,13 +3,14 @@
# This file is distributed under the same license as the Ishtar package.
# Étienne Loks <etienne.loks at peacefrogs net>, 2014.
# Étienne Loks <etienne.loks@iggdrasil.net>, 2015. #zanata
+# Valérie-Emma Leroux <emma@iggdrasil.net>, 2016. #zanata
msgid ""
msgstr ""
"MIME-Version: 1.0\n"
"Content-Transfer-Encoding: 8bit\n"
"Content-Type: text/plain; charset=UTF-8\n"
-"PO-Revision-Date: 2015-12-08 06:24-0500\n"
-"Last-Translator: Étienne Loks <etienne.loks@iggdrasil.net>\n"
+"PO-Revision-Date: 2016-02-23 08:09-0500\n"
+"Last-Translator: Valérie-Emma Leroux <emma@iggdrasil.net>\n"
"Language-Team: \n"
"Language: fr\n"
"Plural-Forms: nplurals=2; plural=(n > 1)\n"
@@ -75,7 +76,7 @@ msgstr "Adresse (n° / voie)"
#: forms.py:96 forms.py:126
msgid "Number/street"
-msgstr "n° / voie"
+msgstr "N° / voie"
#: forms.py:98 forms.py:128
msgid "Postal code"
@@ -123,7 +124,7 @@ msgstr "Dossier lié à"
#: forms.py:395
msgid "Comment"
-msgstr "Commentaire"
+msgstr "Commentaires"
#: forms.py:402
msgid "Numeric reference"
@@ -142,8 +143,8 @@ msgid "File followed by"
msgstr "Dossier suivi par"
#: templates/ishtar/wizard/file_confirm_wizard.html:8
-msgid "These(s) file(s) have the same numeric index."
-msgstr "Ce(s) dossier(s) a(ont) le même index numérique."
+msgid "The following files have the same numeric index as this file:"
+msgstr "Les dossiers suivants ont le même index numérique que ce dossier :"
#: templates/ishtar/wizard/file_confirm_wizard.html:11
#: templates/ishtar/wizard/file_confirm_wizard.html:22
@@ -151,9 +152,10 @@ msgid "Details"
msgstr "Détails"
#: templates/ishtar/wizard/file_confirm_wizard.html:19
-msgid "These(s) file(s) are in the same town and have parcel(s) in common."
-msgstr ""
-"Ce(s) dossier(s) ont des parcelles liées au dossier que vous allez créer."
+msgid ""
+"The following files are in the same town and have parcels in common with "
+"this file:"
+msgstr "Les dossiers suivants ont des parcelles en commun avec ce dossier :"
#: templates/ishtar/wizard/wizard_person_orga.html:28
msgid "Corporation"
diff --git a/translations/fr/archaeological_finds.po b/translations/fr/archaeological_finds.po
index c4cb2d21a..6de4b7686 100644
--- a/translations/fr/archaeological_finds.po
+++ b/translations/fr/archaeological_finds.po
@@ -3,110 +3,110 @@
# This file is distributed under the same license as the Ishtar package.
# Étienne Loks <etienne.loks at peacefrogs net>, 2010-2015.
# Étienne Loks <etienne.loks@iggdrasil.net>, 2015. #zanata
-# Étienne Loks <etienne.loks@iggdrasil.net>, 2016. #zanata
+# Valérie-Emma Leroux <emma@iggdrasil.net>, 2016. #zanata
msgid ""
msgstr ""
"MIME-Version: 1.0\n"
"Content-Transfer-Encoding: 8bit\n"
"Content-Type: text/plain; charset=UTF-8\n"
-"PO-Revision-Date: 2016-01-28 03:55-0500\n"
-"Last-Translator: Étienne Loks <etienne.loks@iggdrasil.net>\n"
+"PO-Revision-Date: 2016-02-24 10:49-0500\n"
+"Last-Translator: Valérie-Emma Leroux <emma@iggdrasil.net>\n"
"Language-Team: \n"
"Language: fr\n"
"Plural-Forms: nplurals=2; plural=n>1;\n"
"X-Generator: Zanata 3.8.2\n"
-#: forms.py:45 ishtar_menu.py:31 models.py:346 models.py:542 models.py:612
+#: forms.py:45 ishtar_menu.py:31 models.py:341 models.py:537 models.py:605
#: templates/ishtar/sheet_find.html:6
msgid "Find"
msgstr "Mobilier"
-#: forms.py:54 forms.py:295 models.py:108 models.py:288
-msgid "Free-ID"
-msgstr "Identifiant libre"
+#: forms.py:54 forms.py:153 forms.py:298 models.py:104 models.py:284
+msgid "Free ID"
+msgstr "ID libre"
-#: forms.py:56 models.py:330
+#: forms.py:56 models.py:325
msgid "Previous ID"
msgstr "Identifiant précédent"
-#: forms.py:57 forms.py:171 forms.py:235 models.py:111 models.py:289
-#: models.py:565 templates/ishtar/sheet_find.html:87
+#: forms.py:57 forms.py:174 forms.py:238 models.py:107 models.py:285
+#: models.py:559 templates/ishtar/sheet_find.html:87
msgid "Description"
msgstr "Description"
-#: forms.py:60 forms.py:173 models.py:122
+#: forms.py:60 forms.py:176 models.py:118
msgid "Batch/object"
msgstr "Lot/objet"
-#: forms.py:62 models.py:316
+#: forms.py:62 models.py:311
msgid "Is complete?"
msgstr "Est complet ?"
-#: forms.py:65 forms.py:164 forms.py:299 models.py:50
+#: forms.py:65 forms.py:167 forms.py:302 models.py:46
msgid "Material type"
msgstr "Type de matériau"
-#: forms.py:66 forms.py:168 models.py:60 models.py:293
+#: forms.py:66 forms.py:171 models.py:56 models.py:289
msgid "Conservatory state"
msgstr "État sanitaire"
-#: forms.py:69 models.py:85 models.py:319
+#: forms.py:69 models.py:81 models.py:314
msgid "Object types"
msgstr "Types d'objet"
-#: forms.py:71 forms.py:167 models.py:67
+#: forms.py:71 forms.py:170 models.py:63
msgid "Preservation type"
msgstr "Type de conservation"
-#: forms.py:74 forms.py:170 models.py:321
+#: forms.py:74 forms.py:173 models.py:316
msgid "Integrity"
msgstr "Intégrité"
-#: forms.py:76 models.py:322
+#: forms.py:76 models.py:317
msgid "Length (cm)"
msgstr "Longueur (cm)"
-#: forms.py:77 models.py:323
+#: forms.py:77 models.py:318
msgid "Width (cm)"
msgstr "Largeur (cm)"
-#: forms.py:78 models.py:324
+#: forms.py:78 models.py:319
msgid "Height (cm)"
msgstr "Hauteur (cm)"
-#: forms.py:79 models.py:325
+#: forms.py:79 models.py:320
msgid "Diameter (cm)"
-msgstr "Diametre (cm)"
+msgstr "Diamètre (cm)"
-#: forms.py:80 forms.py:300 models.py:298
+#: forms.py:80 forms.py:303 models.py:294
msgid "Volume (l)"
msgstr "Volume (l)"
-#: forms.py:81 forms.py:301 models.py:299
+#: forms.py:81 forms.py:304 models.py:295
msgid "Weight (g)"
msgstr "Poids (g)"
-#: forms.py:82 forms.py:302 models.py:302
+#: forms.py:82 forms.py:305 models.py:298
msgid "Find number"
msgstr "Mobilier (en nombre)"
-#: forms.py:83 models.py:326
+#: forms.py:83 models.py:321
msgid "Mark"
msgstr "Marque"
-#: forms.py:84 forms.py:175 models.py:332
+#: forms.py:84 forms.py:178 models.py:327
msgid "Check"
msgstr "Vérification"
-#: forms.py:86 models.py:334
+#: forms.py:86 models.py:329
msgid "Check date"
msgstr "Date de vérification"
-#: forms.py:87 models.py:112 models.py:327 models.py:566
+#: forms.py:87 models.py:108 models.py:322 models.py:560
msgid "Comment"
-msgstr "Commentaire"
+msgstr "Commentaires"
-#: forms.py:90 models.py:328
+#: forms.py:90 models.py:323
msgid "Comment on dating"
msgstr "Commentaire général sur les datations"
@@ -123,19 +123,19 @@ msgstr ""
"<p>Les images trop grandes sont retaillées en : %(width)dx%(height)d (le "
"ratio est conservé).</p>"
-#: forms.py:119 forms.py:147 models.py:310
+#: forms.py:119 forms.py:147 models.py:306
msgid "Dating"
msgstr "Datation"
-#: forms.py:124 forms.py:162
+#: forms.py:124 forms.py:165
msgid "Period"
msgstr "Période"
-#: forms.py:125 forms.py:237 models.py:577 models.py:618
+#: forms.py:125 forms.py:240 models.py:570 models.py:610
msgid "Start date"
msgstr "Date de début"
-#: forms.py:127 forms.py:239 models.py:578 models.py:619
+#: forms.py:127 forms.py:242 models.py:571 models.py:611
msgid "End date"
msgstr "Date de fin"
@@ -151,419 +151,419 @@ msgstr "Type de datation"
msgid "Precise dating"
msgstr "Datation précise"
-#: forms.py:153
+#: forms.py:151 models.py:123
+msgid "Short ID"
+msgstr "ID court"
+
+#: forms.py:152 models.py:126 templates/ishtar/sheet_find.html:71
+msgid "Complete ID"
+msgstr "ID complet"
+
+#: forms.py:156
msgid "Year"
msgstr "Année"
-#: forms.py:155
+#: forms.py:158
msgid "Code PATRIARCHE"
msgstr "Code PATRIARCHE"
-#: forms.py:157
+#: forms.py:160
msgid "Archaelogical site"
msgstr "Entité Archéologique"
-#: forms.py:165 models.py:84
+#: forms.py:168 models.py:80
msgid "Object type"
msgstr "Type d'objet"
-#: forms.py:176
+#: forms.py:179
msgid "Has an image?"
msgstr "Dispose d'une image ?"
-#: forms.py:205 views.py:97
+#: forms.py:208 views.py:103
msgid "Find search"
msgstr "Recherche de mobilier"
-#: forms.py:218
+#: forms.py:221
msgid "Base treatment"
msgstr "Traitement de base"
-#: forms.py:222 models.py:554 models.py:568
+#: forms.py:225 models.py:549 models.py:562
msgid "Treatment type"
msgstr "Type de traitement"
-#: forms.py:224 models.py:575 models.py:616
+#: forms.py:227 models.py:568 models.py:608
msgid "Person"
msgstr "Individu"
-#: forms.py:230 models.py:570
+#: forms.py:233 models.py:563
msgid "Location"
msgstr "Lieu"
-#: forms.py:251
+#: forms.py:254
msgid "Upstream finds"
msgstr "Mobilier amont"
-#: forms.py:253 models.py:347
+#: forms.py:256 models.py:342
msgid "Finds"
msgstr "Mobilier"
-#: forms.py:263
+#: forms.py:266
msgid "You should at least select one archaeological find."
msgstr "Vous devez sélectionner au moins un mobilier archéologique."
-#: forms.py:292
+#: forms.py:295
msgid "Resulting find"
msgstr "Mobilier résultant"
-#: forms.py:297
+#: forms.py:300
msgid "Precise description"
msgstr "Description précise"
-#: forms.py:311
+#: forms.py:314
msgid "Resulting finds"
msgstr "Mobiliers résultants"
-#: forms.py:315
+#: forms.py:318
msgid "Upstream find"
msgstr "Mobilier amont"
-#: forms.py:322
+#: forms.py:325
msgid "Archaeological find search"
msgstr "Recherche de mobilier"
-#: forms.py:324
+#: forms.py:327
msgid "You should select an archaeological find."
msgstr "Vous devez sélectionner du mobilier."
-#: forms.py:329
+#: forms.py:332
msgid "Year of the operation"
msgstr "Année de l'opération"
-#: forms.py:331
+#: forms.py:334
msgid "Period of the archaelogical find"
msgstr "Période du mobilier"
-#: forms.py:333
+#: forms.py:336
msgid "Material type of the archaelogical find"
msgstr "Type de matériau du mobilier"
-#: forms.py:335
+#: forms.py:338
msgid "Description of the archaelogical find"
msgstr "Description du mobilier"
-#: forms.py:347
+#: forms.py:350
msgid "Documentation search"
msgstr "Recherche de document"
-#: forms.py:349
+#: forms.py:352
msgid "You should select a document."
msgstr "Vous devez sélectionner un document."
-#: ishtar_menu.py:34
+#: ishtar_menu.py:35
msgid "Search"
msgstr "Recherche"
-#: ishtar_menu.py:39 ishtar_menu.py:56
+#: ishtar_menu.py:40 ishtar_menu.py:57
msgid "Creation"
msgstr "Ajout"
-#: ishtar_menu.py:44 ishtar_menu.py:61
+#: ishtar_menu.py:45 ishtar_menu.py:62
msgid "Modification"
msgstr "Modification"
-#: ishtar_menu.py:53
+#: ishtar_menu.py:54
msgid "Documentation"
msgstr "Documentation"
-#: ishtar_menu.py:66
+#: ishtar_menu.py:67
msgid "Deletion"
msgstr "Suppression"
-#: models.py:43
+#: models.py:39
msgid "Code"
msgstr "Code"
-#: models.py:44
+#: models.py:40
msgid "Recommendation"
msgstr "Recommandation"
-#: models.py:47
+#: models.py:43
msgid "Parent material"
msgstr "Matériau parent"
-#: models.py:51 models.py:291
+#: models.py:47 models.py:287
msgid "Material types"
msgstr "Types de matériau"
-#: models.py:57
+#: models.py:53
msgid "Parent conservatory state"
msgstr "État sanitaire - parent"
-#: models.py:61
+#: models.py:57
msgid "Conservatory states"
msgstr "États sanitaires"
-#: models.py:68
+#: models.py:64
msgid "Preservation types"
msgstr "Types de conservation"
-#: models.py:74 models.py:75
+#: models.py:70 models.py:71
msgid "Integrity type"
msgstr "Type d'intégrité"
-#: models.py:81
+#: models.py:77
msgid "Parent"
msgstr "Parent"
-#: models.py:100
+#: models.py:96
msgid "Unknow"
msgstr "Inconnu"
-#: models.py:101
+#: models.py:97
msgid "Object"
msgstr "Objet"
-#: models.py:102
+#: models.py:98
msgid "Batch"
msgstr "Lot"
-#: models.py:109 models.py:285 models.py:560
+#: models.py:105 models.py:281 models.py:555
msgid "External ID"
msgstr "ID externe"
-#: models.py:114
+#: models.py:110
msgid "Topographic localisation"
msgstr "Localisation topogaphique"
-#: models.py:115 templates/ishtar/sheet_find.html:92
+#: models.py:111 templates/ishtar/sheet_find.html:92
msgid "Special interest"
msgstr "Intérêt spécifique"
-#: models.py:119
+#: models.py:115
msgid "Context Record"
msgstr "Unité d'Enregistrement"
-#: models.py:120 templates/ishtar/sheet_find.html:83
+#: models.py:116 templates/ishtar/sheet_find.html:83
msgid "Discovery date"
msgstr "Date de découverte"
-#: models.py:127
-msgid "Short ID"
-msgstr "ID court"
-
-#: models.py:128 models.py:131
+#: models.py:124 models.py:127
msgid "Cached value - do not edit"
msgstr "Valeur en cache - ne pas éditer"
-#: models.py:130 templates/ishtar/sheet_find.html:71
-msgid "Complete ID"
-msgstr "ID complet"
-
-#: models.py:136 models.py:283
+#: models.py:132 models.py:279
msgid "Base find"
msgstr "Mobilier de base"
-#: models.py:137
+#: models.py:133
msgid "Base finds"
-msgstr "Mobiliers de base"
+msgstr "Mobilier de base"
-#: models.py:139
-msgid "Can view all Base find"
+#: models.py:135
+msgid "Can view all Base finds"
msgstr "Peut voir tout le Mobilier de base"
-#: models.py:140
+#: models.py:136
msgid "Can view own Base find"
msgstr "Peut voir son propre Mobilier de base"
-#: models.py:141
+#: models.py:137
msgid "Can add own Base find"
msgstr "Peut ajouter son propre Mobilier de base"
-#: models.py:142
+#: models.py:138
msgid "Can change own Base find"
-msgstr "Peut changer son propre Mobilier de base"
+msgstr "Peut modifier son propre Mobilier de base"
-#: models.py:143
+#: models.py:139
msgid "Can delete own Base find"
msgstr "Peut supprimer son propre Mobilier de base"
-#: models.py:238
+#: models.py:234
msgid "g"
msgstr "g"
-#: models.py:239
+#: models.py:235
msgid "kg"
msgstr "kg"
-#: models.py:241
+#: models.py:237
msgid "Not checked"
msgstr "Non vérifié"
-#: models.py:242
+#: models.py:238
msgid "Checked but incorrect"
-msgstr "Vérifié mais non correct"
+msgstr "Vérifié mais incorrect"
-#: models.py:243
+#: models.py:239
msgid "Checked and correct"
msgstr "Vérifié et correct"
-#: models.py:273
-msgid "Base find - Short Id"
-msgstr "Mobilier de base - Id court"
+#: models.py:269
+msgid "Base find - Short ID"
+msgstr "Mobilier de base - ID court"
-#: models.py:274
+#: models.py:270
msgid "Base find - Complete ID"
-msgstr "Mobilier de base - Id complet"
+msgstr "Mobilier de base - ID complet"
-#: models.py:275
+#: models.py:271
msgid "Base find - Comment"
-msgstr "Mobilier de base - Commentaire"
+msgstr "Mobilier de base - Commentaires"
-#: models.py:276
+#: models.py:272
msgid "Base find - Description"
msgstr "Mobilier de base - Description"
-#: models.py:277
+#: models.py:273
msgid "Base find - Topographic localisation"
msgstr "Mobilier de base - Localisation topographique"
-#: models.py:279
+#: models.py:275
msgid "Base find - Special interest"
msgstr "Mobilier de base - Intérêt spécifique"
-#: models.py:280
+#: models.py:276
msgid "Base find - Discovery date"
msgstr "Mobilier de base - Date de découverte"
-#: models.py:287
+#: models.py:283
msgid "Order"
msgstr "Ordre"
-#: models.py:296
+#: models.py:292
msgid "Type of preservation to consider"
msgstr "Mesures de conservation à envisager"
-#: models.py:300
+#: models.py:296
msgid "Weight unit"
msgstr "Unité de poids"
-#: models.py:306 templates/ishtar/sheet_find.html:61
+#: models.py:302 templates/ishtar/sheet_find.html:61
msgid "Upstream treatment"
msgstr "Traitement amont"
-#: models.py:309 templates/ishtar/sheet_find.html:63
+#: models.py:305 templates/ishtar/sheet_find.html:63
msgid "Downstream treatment"
msgstr "Traitement aval"
-#: models.py:314 models.py:563 templates/ishtar/sheet_find.html:65
+#: models.py:309 models.py:557 templates/ishtar/sheet_find.html:65
msgid "Container"
msgstr "Contenant"
-#: models.py:349
-msgid "Can view all Find"
+#: models.py:344
+msgid "Can view all Finds"
msgstr "Peut voir tout le Mobilier"
-#: models.py:350
+#: models.py:345
msgid "Can view own Find"
msgstr "Peut voir son propre Mobilier"
-#: models.py:351
+#: models.py:346
msgid "Can add own Find"
msgstr "Peut ajouter son propre Mobilier"
-#: models.py:352
+#: models.py:347
msgid "Can change own Find"
-msgstr "Peut changer son propre Mobilier"
+msgstr "Peut modifier son propre Mobilier"
-#: models.py:353
+#: models.py:348
msgid "Can delete own Find"
msgstr "Peut supprimer son propre Mobilier"
-#: models.py:358
+#: models.py:353
msgid "FIND"
msgstr "MOBILIER"
-#: models.py:540
+#: models.py:535
msgid "Find documentation"
msgstr "Documentation de mobilier"
-#: models.py:541
+#: models.py:536
msgid "Find documentations"
msgstr "Documentations de mobilier"
-#: models.py:551
+#: models.py:546
msgid "Virtual"
msgstr "Virtuel"
-#: models.py:555
+#: models.py:550
msgid "Treatment types"
msgstr "Types de traitement"
-#: models.py:572
+#: models.py:565
msgid "Other location"
msgstr "Autre lieu"
-#: models.py:582 models.py:604
+#: models.py:575 models.py:597
msgid "Treatment"
msgstr "Traitement"
-#: models.py:583
+#: models.py:576
msgid "Treatments"
msgstr "Traitements"
-#: models.py:585
-msgid "Can view all Treatment"
+#: models.py:578
+msgid "Can view all Treatments"
msgstr "Peut voir tous les Traitements"
-#: models.py:586
+#: models.py:579
msgid "Can view own Treatment"
msgstr "Peut voir son propre Traitement"
-#: models.py:587
+#: models.py:580
msgid "Can add own Treatment"
msgstr "Peut ajouter son propre Traitement"
-#: models.py:588
+#: models.py:581
msgid "Can change own Treatment"
-msgstr "Peut changer son propre Traitement"
+msgstr "Peut modifier son propre Traitement"
-#: models.py:589
+#: models.py:582
msgid "Can delete own Treatment"
msgstr "Peut supprimer son propre Traitement"
-#: models.py:595
+#: models.py:588
msgid "by"
msgstr "par"
-#: models.py:601
+#: models.py:594
msgid "Treatment documentation"
msgstr "Documentation d'un traitement"
-#: models.py:602
+#: models.py:595
msgid "Treament documentations"
msgstr "Documentations des traitements"
-#: models.py:615
+#: models.py:607
msgid "Administrative act"
msgstr "Acte administratif"
-#: models.py:622
+#: models.py:614
msgid "Property"
msgstr "Propriété"
-#: models.py:623
+#: models.py:615
msgid "Properties"
msgstr "Propriétés"
-#: views.py:92
+#: views.py:98
msgid "New find"
msgstr "Nouveau mobilier"
-#: views.py:105
+#: views.py:111
msgid "Find modification"
msgstr "Modification de mobilier"
-#: views.py:123
+#: views.py:129
msgid "Find: new source"
msgstr "Mobilier : nouvelle documentation associée"
-#: views.py:131
+#: views.py:137
msgid "Find: source modification"
msgstr "Mobilier : modification de documentation associée"
-#: views.py:137
+#: views.py:143
msgid "Find: source deletion"
msgstr "Mobilier : suppression de mobilier associé"
@@ -613,7 +613,7 @@ msgstr " :"
#: templates/ishtar/sheet_find.html:68
msgid "Associated base finds"
-msgstr "Matériel de référence associé"
+msgstr "Mobilier de base associé"
#: templates/ishtar/sheet_find.html:96
msgid "Related context record"
diff --git a/translations/fr/archaeological_operations.po b/translations/fr/archaeological_operations.po
index 4844ebacf..96e211cb1 100644
--- a/translations/fr/archaeological_operations.po
+++ b/translations/fr/archaeological_operations.po
@@ -3,25 +3,26 @@
# This file is distributed under the same license as the Ishtar package.
# Étienne Loks <etienne.loks at peacefrogs net>, 2010-2015.
# Étienne Loks <etienne.loks@iggdrasil.net>, 2015. #zanata
+# Valérie-Emma Leroux <emma@iggdrasil.net>, 2016. #zanata
# Étienne Loks <etienne.loks@iggdrasil.net>, 2016. #zanata
msgid ""
msgstr ""
"MIME-Version: 1.0\n"
"Content-Transfer-Encoding: 8bit\n"
"Content-Type: text/plain; charset=UTF-8\n"
-"PO-Revision-Date: 2016-02-03 06:50-0500\n"
+"PO-Revision-Date: 2016-02-25 07:05-0500\n"
"Last-Translator: Étienne Loks <etienne.loks@iggdrasil.net>\n"
"Language-Team: \n"
"Language: fr\n"
"Plural-Forms: nplurals=2; plural=n>1;\n"
"X-Generator: Zanata 3.8.2\n"
-#: forms.py:69 forms.py:336 forms.py:895 forms.py:917 forms.py:921
-#: models.py:791 templates/ishtar/blocks/window_tables/parcels.html:8
+#: forms.py:66 forms.py:333 forms.py:892 forms.py:914 forms.py:918
+#: models.py:780 templates/ishtar/blocks/window_tables/parcels.html:8
msgid "Parcels"
msgstr "Parcelles"
-#: forms.py:72 forms.py:188 forms.py:871 models.py:781
+#: forms.py:69 forms.py:185 forms.py:868 models.py:770
#: templates/ishtar/blocks/window_tables/parcels.html:5
#: templates/ishtar/dashboards/dashboard_operation.html:302
#: templates/ishtar/dashboards/dashboard_operation.html:315
@@ -30,297 +31,304 @@ msgstr "Parcelles"
msgid "Town"
msgstr "Commune"
-#: forms.py:74 forms.py:417 forms.py:685 forms.py:1084 models.py:161
-#: models.py:597 models.py:779
+#: forms.py:71 forms.py:411 forms.py:682 forms.py:1099 models.py:158
+#: models.py:587 models.py:768
#: templates/ishtar/blocks/window_tables/parcels.html:6
msgid "Year"
msgstr "Année"
-#: forms.py:77 models.py:782
+#: forms.py:74 models.py:771
#: templates/ishtar/blocks/window_tables/parcels.html:7
msgid "Section"
msgstr "Section"
-#: forms.py:80 models.py:783
+#: forms.py:77 models.py:772
msgid "Parcel number"
msgstr "Numéro de parcelle"
-#: forms.py:110
+#: forms.py:107
msgid "Town section and parcel number fields are required."
msgstr "La commune, la section et le numéro de parcelle sont obligatoires."
-#: forms.py:153
+#: forms.py:150
msgid "Current parcels"
msgstr "Parcelles actuelles"
-#: forms.py:155
+#: forms.py:152
msgid "Deleted parcels"
msgstr "Parcelles supprimées"
-#: forms.py:191
+#: forms.py:188
msgid "Full text input"
msgstr "Saisie libre"
-#: forms.py:193
+#: forms.py:190
msgid "example: \"2013: XD:1 to 13,24,33 to 39, YD:24\" or \"AB:24,AC:42\""
msgstr "exemple : \"2013: XD:1 à 13,24,33 à 39, YD:24\" ou \"AB:24,AC:42\""
-#: forms.py:330
+#: forms.py:327
msgid "There are identical parcels."
msgstr "Il y a des parcelles identiques."
-#: forms.py:345
+#: forms.py:342
msgid "Relation type"
msgstr "Type de relation"
-#: forms.py:348 ishtar_menu.py:33 models.py:241 models.py:496 models.py:521
-#: models.py:536 models.py:588 models.py:778 wizards.py:341 wizards.py:352
+#: forms.py:345 ishtar_menu.py:30 models.py:237 models.py:488 models.py:513
+#: models.py:528 models.py:579 models.py:767 wizards.py:338 wizards.py:349
#: templates/ishtar/sheet_operation.html:6
msgid "Operation"
msgstr "Opération"
-#: forms.py:367
+#: forms.py:364
msgid ":"
msgstr ": "
-#: forms.py:398
+#: forms.py:395
msgid "Current relations"
msgstr "Relations actuelles"
-#: forms.py:400
+#: forms.py:397
msgid "Deleted relations"
msgstr "Relations supprimées"
-#: forms.py:404 templates/ishtar/sheet_operation.html:113
+#: forms.py:401 templates/ishtar/sheet_operation.html:115
msgid "Relations"
msgstr "Relations"
-#: forms.py:418
+#: forms.py:412
msgid "Numeric reference"
msgstr "Identifiant numérique"
-#: forms.py:420 forms.py:1094
+#: forms.py:417 forms.py:1109
msgid "Parcel (section/number)"
msgstr "Parcelle (section/numéro)"
-#: forms.py:424 forms.py:956 models.py:79
+#: forms.py:420 forms.py:1112 models.py:489
+#: templates/ishtar/dashboards/dashboard_operation.html:273
+#: templates/ishtar/dashboards/dashboard_operation.html:286
+#: templates/ishtar/dashboards/dashboard_operation.html:453
+#: templates/ishtar/dashboards/dashboard_operation.html:466
+msgid "Department"
+msgstr "Département"
+
+#: forms.py:421 forms.py:953 models.py:77
+#: templates/ishtar/blocks/window_tables/archaeologicalsites.html:6
msgid "Name"
msgstr "Nom"
-#: forms.py:426 forms.py:607 forms.py:683 forms.py:1061 models.py:170
+#: forms.py:423 forms.py:604 forms.py:680 forms.py:1076 models.py:166
msgid "Operation type"
msgstr "Type d'opération"
-#: forms.py:428
+#: forms.py:425
msgid "Is open?"
msgstr "Est ouvert ?"
-#: forms.py:437 forms.py:713 models.py:158
+#: forms.py:434 forms.py:710 models.py:155
msgid "In charge"
msgstr "Responsable"
-#: forms.py:444 models.py:582
+#: forms.py:441 models.py:573
msgid "Scientist in charge"
msgstr "Responsable scientifique"
-#: forms.py:446 forms.py:609 forms.py:704 models.py:156
+#: forms.py:443 forms.py:606 forms.py:701 models.py:153
msgid "Operator"
msgstr "Opérateur"
-#: forms.py:453 forms.py:961 models.py:83 models.py:172
+#: forms.py:450 forms.py:958 models.py:81 models.py:168
+#: templates/ishtar/blocks/window_tables/archaeologicalsites.html:8
msgid "Remains"
msgstr "Vestiges"
-#: forms.py:454 forms.py:940 forms.py:958 models.py:81 models.py:177
+#: forms.py:451 forms.py:937 forms.py:955 models.py:79 models.py:173
+#: templates/ishtar/blocks/window_tables/archaeologicalsites.html:7
msgid "Periods"
msgstr "Périodes"
-#: forms.py:455
+#: forms.py:452
msgid "Started before"
msgstr "Commencé avant"
-#: forms.py:457
+#: forms.py:454
msgid "Started after"
msgstr "Commencé après"
-#: forms.py:459
+#: forms.py:456
msgid "Ended before"
msgstr "Terminé avant"
-#: forms.py:461
+#: forms.py:458
msgid "Ended after"
msgstr "Terminé après"
-#: forms.py:464
+#: forms.py:461
msgid "Search within relations"
msgstr "Recherche parmi les relations"
-#: forms.py:466 forms.py:755 models.py:223
+#: forms.py:463 forms.py:752 models.py:219
msgid "Comment"
msgstr "Commentaire"
-#: forms.py:467
+#: forms.py:464
msgid "Abstract (full text search)"
msgstr "Résumé (recherche texte intégral)"
-#: forms.py:468 forms.py:757 models.py:235
+#: forms.py:465 forms.py:754 models.py:231
msgid "Record quality"
msgstr "Qualité d'enregistrement"
-#: forms.py:469 forms.py:736 models.py:189
+#: forms.py:466 forms.py:733 models.py:185
msgid "Report processing"
msgstr "Traitement du rapport"
-#: forms.py:471 forms.py:760 models.py:230
+#: forms.py:468 forms.py:757 models.py:226
msgid "Virtual operation"
msgstr "Opération virtuelle"
-#: forms.py:473
-msgid "Archaelogical site"
-msgstr "Entité Archéologique"
-
-#: forms.py:479 forms.py:1101
+#: forms.py:476 forms.py:1116
msgid "Created by"
msgstr "Créé par"
-#: forms.py:485 forms.py:1107
+#: forms.py:482 forms.py:1122
msgid "Modified by"
msgstr "Modifié par"
-#: forms.py:527 forms.py:1054 views.py:230
+#: forms.py:524 forms.py:1069 views.py:231
msgid "Operation search"
msgstr "Recherche d'opérations"
-#: forms.py:540 forms.py:1056
+#: forms.py:537 forms.py:1071
msgid "You should select an operation."
msgstr "Vous devez sélectionner une opération."
-#: forms.py:571
+#: forms.py:568
msgid "Associated file"
msgstr "Dossier associé"
-#: forms.py:575 forms.py:820 models.py:594 wizards.py:78
+#: forms.py:572 forms.py:816 models.py:584 wizards.py:76
msgid "Archaelogical file"
msgstr "Dossier"
-#: forms.py:582 forms.py:584 models.py:237
+#: forms.py:579 forms.py:581 models.py:233
msgid "Abstract"
msgstr "Résumé"
-#: forms.py:587
+#: forms.py:584
msgid "months"
msgstr "mois"
-#: forms.py:587
+#: forms.py:584
msgid "years"
msgstr "années"
-#: forms.py:589 models.py:142
+#: forms.py:586 models.py:139
msgid "Creation date"
msgstr "Date de création"
-#: forms.py:590
+#: forms.py:587
msgid "Start of field work"
msgstr "Début du travail de terrain"
-#: forms.py:592
+#: forms.py:589
msgid "All"
msgstr "Tous"
-#: forms.py:593
+#: forms.py:590
msgid "Preventive"
msgstr "Préventif"
-#: forms.py:594
+#: forms.py:591
msgid "Research"
msgstr "Programmée"
-#: forms.py:598
+#: forms.py:595
msgid "Slicing"
msgstr "Découpage"
-#: forms.py:601
+#: forms.py:598
msgid "Department detail"
msgstr "Détail par département"
-#: forms.py:603
+#: forms.py:600
msgid "Date get from"
msgstr "Date obtenue depuis"
-#: forms.py:605
+#: forms.py:602
msgid "Preventive/Research"
msgstr "Préventif/Programmé"
-#: forms.py:611
+#: forms.py:608
msgid "Date after"
msgstr "Date après"
-#: forms.py:613
+#: forms.py:610
msgid "Date before"
msgstr "Date avant"
-#: forms.py:615
+#: forms.py:612
msgid "With reports"
msgstr "Avec un rapport"
-#: forms.py:616
+#: forms.py:613
msgid "With finds"
-msgstr "Avec du matériel"
+msgstr "Avec du mobilier"
-#: forms.py:668 forms.py:1154 templates/ishtar/sheet_administrativeact.html:11
+#: forms.py:665 forms.py:1169 templates/ishtar/sheet_administrativeact.html:11
#: templates/ishtar/sheet_operation.html:32
msgid "General"
msgstr "Général"
-#: forms.py:681 models.py:222
+#: forms.py:678 models.py:218
msgid "Generic name"
msgstr "Nom générique"
-#: forms.py:690 forms.py:815 models.py:162 models.py:375
+#: forms.py:687 forms.py:812 models.py:159 models.py:368
msgid "Operation code"
msgstr "Code de l'opération"
-#: forms.py:694
+#: forms.py:691
msgid "Head scientist"
msgstr "Responsable scientifique"
-#: forms.py:710 models.py:221
+#: forms.py:707 models.py:217
msgid "Operator reference"
msgstr "Référence de l'opérateur"
-#: forms.py:722
+#: forms.py:719
msgid "Total surface (m2)"
msgstr "Surface totale (m2)"
-#: forms.py:727
+#: forms.py:724
msgid "Associated archaeological sites"
msgstr "Entités archéologiques associées"
-#: forms.py:729 models.py:51 models.py:145 models.py:951
+#: forms.py:726 models.py:49 models.py:142 models.py:938
msgid "Start date"
msgstr "Date de début"
-#: forms.py:731 models.py:147
+#: forms.py:728 models.py:144
msgid "Excavation end date"
msgstr "Date de fin de chantier"
-#: forms.py:734 models.py:148
+#: forms.py:731 models.py:145
msgid "Report delivery date"
msgstr "Date de livraison du rapport"
-#: forms.py:785
+#: forms.py:782
msgid ""
"If you want to set an excavation end date you have to provide a start date."
msgstr ""
"Avant de renseigner la date de fin de chantier, il est nécessaire de "
"renseigner une date de début."
-#: forms.py:790
+#: forms.py:787
msgid "The excavation end date cannot be before the start date."
msgstr ""
"La date de fin de chantier ne peut être antérieure à la date de début."
-#: forms.py:805
+#: forms.py:802
#, python-format
msgid ""
"Operation code already exist for year: %(year)d - use a value bigger than "
@@ -329,96 +337,109 @@ msgstr ""
"Ce code d'opération existe déjà pour l'année %(year)d - utilisez une valeur "
"plus grande que %(last_val)d"
-#: forms.py:809
+#: forms.py:806
msgid "Bad operation code"
msgstr "Mauvais code d'opération"
-#: forms.py:841
+#: forms.py:838
msgid "Preventive informations - excavation"
msgstr "Information archéologie préventive - fouille"
-#: forms.py:842 models.py:175
+#: forms.py:839 models.py:171
#: templates/ishtar/dashboards/dashboard_operation.html:495
msgid "Cost (euros)"
msgstr "Coût (euros)"
-#: forms.py:843 models.py:180
+#: forms.py:840 models.py:176
msgid "Scheduled man-days"
msgstr "Jours-hommes prévus"
-#: forms.py:845 models.py:183
+#: forms.py:842 models.py:179
msgid "Optional man-days"
msgstr "Jours-hommes optionnels"
-#: forms.py:847 models.py:186
+#: forms.py:844 models.py:182
msgid "Effective man-days"
msgstr "Jours-hommes effectifs"
-#: forms.py:857
+#: forms.py:854
msgid "Preventive informations - diagnostic"
msgstr "Information archéologie préventive - diagnostic"
-#: forms.py:860 models.py:205
+#: forms.py:857 models.py:201
msgid "Prescription on zoning"
msgstr "Prescription sur zonage"
-#: forms.py:862 models.py:208
+#: forms.py:859 models.py:204
msgid "Prescription on large area"
msgstr "Prescription sur une vaste surface"
-#: forms.py:865 models.py:210
+#: forms.py:862 models.py:206
msgid "Prescription on geoarchaeological context"
msgstr "Prescription sur un contexte géoarchéologique"
-#: forms.py:869 forms.py:891 models.py:174 models.py:607
+#: forms.py:866 forms.py:888 models.py:170 models.py:597
msgid "Towns"
msgstr "Communes"
-#: forms.py:898 models.py:790 models.py:949
+#: forms.py:895 models.py:779 models.py:936
msgid "Parcel"
msgstr "Parcelle"
-#: forms.py:925 models.py:45
+#: forms.py:922 models.py:43
msgid "Remain types"
msgstr "Types de vestige"
-#: forms.py:929 models.py:44
+#: forms.py:926 models.py:42
msgid "Remain type"
msgstr "Type de vestige"
-#: forms.py:944
+#: forms.py:941
msgid "Period"
msgstr "Période"
-#: forms.py:955 models.py:78
+#: forms.py:952 models.py:76
msgid "Reference"
msgstr "Référence"
-#: forms.py:980
+#: forms.py:977
msgid "This reference already exists."
msgstr "Cette référence existe déjà."
-#: forms.py:997
+#: forms.py:994 models.py:85
+msgid "Archaeological site"
+msgstr "Entité archéologique"
+
+#: forms.py:998
+msgid "Archaelogical site"
+msgstr "Entité Archéologique"
+
+#: forms.py:1008 models.py:86 models.py:223
+#: templates/ishtar/sheet_operation.html:126
+msgid "Archaeological sites"
+msgstr "Entités archéologiques"
+
+#: forms.py:1012
msgid "Associated archaelogical sites"
msgstr "Entités archéologiques associées"
-#: forms.py:1003 ishtar_menu.py:36 ishtar_menu.py:63 ishtar_menu.py:125
+#: forms.py:1018 ishtar_menu.py:33 ishtar_menu.py:63 ishtar_menu.py:92
msgid "Search"
msgstr "Recherche"
-#: forms.py:1008
+#: forms.py:1023
msgid "Would you like to close this operation?"
msgstr "Voulez-vous clore cette opération ?"
-#: forms.py:1013
+#: forms.py:1028
msgid "Would you like to delete this operation?"
msgstr "Voulez-vous supprimer cette opération ?"
-#: forms.py:1022 forms.py:1085 models.py:523 models.py:573
+#: forms.py:1037 forms.py:1100 models.py:515 models.py:564
msgid "Index"
msgstr "Index"
-#: forms.py:1048
+#: forms.py:1063
#, python-format
msgid ""
"Index already exists for operation: %(operation)s - use a value bigger than "
@@ -427,499 +448,484 @@ msgstr ""
"Cet index existe déjà pour l'opération : %(operation)s, utilisez une valeur "
"plus grande que %(last_val)d"
-#: forms.py:1060
+#: forms.py:1075
msgid "Operation's town"
msgstr "Commune de l'opération"
-#: forms.py:1063
+#: forms.py:1078
msgid "Operation's year"
msgstr "Année de l'opération"
-#: forms.py:1074
+#: forms.py:1089
msgid "Documentation search"
msgstr "Recherche de document"
-#: forms.py:1076
+#: forms.py:1091
msgid "You should select a document."
msgstr "Vous devez sélectionner un document."
-#: forms.py:1091 forms.py:1157 models.py:547 models.py:567
+#: forms.py:1106 forms.py:1172 models.py:539 models.py:558
msgid "Act type"
msgstr "Type d'acte"
-#: forms.py:1092 forms.py:1245
+#: forms.py:1107 forms.py:1260
msgid "Indexed?"
msgstr "Indexé ?"
-#: forms.py:1097 models.py:497
-#: templates/ishtar/dashboards/dashboard_operation.html:273
-#: templates/ishtar/dashboards/dashboard_operation.html:286
-#: templates/ishtar/dashboards/dashboard_operation.html:453
-#: templates/ishtar/dashboards/dashboard_operation.html:466
-msgid "Department"
-msgstr "Département"
-
-#: forms.py:1098 forms.py:1162 models.py:598
+#: forms.py:1113 forms.py:1177 models.py:588
#: templates/ishtar/blocks/window_tables/administrativacts.html:8
msgid "Object"
msgstr "Objet"
-#: forms.py:1134 views.py:366
+#: forms.py:1149 views.py:373
msgid "Administrative act search"
msgstr "Recherche d'actes administratifs"
-#: forms.py:1149 forms.py:1203 forms.py:1270
+#: forms.py:1164 forms.py:1218 forms.py:1285
msgid "You should select an administrative act."
msgstr "Vous devez sélectionner un acte administratif."
-#: forms.py:1165 models.py:595
+#: forms.py:1180 models.py:585
msgid "Signature date"
msgstr "Date de signature"
-#: forms.py:1180
+#: forms.py:1195
msgid "Would you like to delete this administrative act?"
msgstr "Voulez-vous supprimer cet acte administratif ?"
-#: forms.py:1185
+#: forms.py:1200
msgid "Template"
msgstr "Patron"
-#: forms.py:1209 forms.py:1213
+#: forms.py:1224 forms.py:1228
msgid "This document is not intended for this type of act."
msgstr "Ce document n'est pas destiné à ce type d'acte."
-#: forms.py:1231
+#: forms.py:1246
msgid "Doc generation"
msgstr "Génération de document"
-#: forms.py:1233
+#: forms.py:1248
msgid "Generate the associated doc?"
msgstr "Générer le document associé ?"
-#: forms.py:1254 ishtar_menu.py:110 views.py:400
+#: forms.py:1269 ishtar_menu.py:121 views.py:407
msgctxt "admin act register"
msgid "Register"
msgstr "Registre"
-#: ishtar_menu.py:41
+#: ishtar_menu.py:38
msgid "Creation"
msgstr "Ajout"
-#: ishtar_menu.py:46 ishtar_menu.py:73 ishtar_menu.py:136
+#: ishtar_menu.py:43 ishtar_menu.py:74 ishtar_menu.py:102
msgid "Modification"
msgstr "Modification"
-#: ishtar_menu.py:51
+#: ishtar_menu.py:48
msgid "Closing"
msgstr "Clôture"
-#: ishtar_menu.py:55 ishtar_menu.py:78 ishtar_menu.py:141
+#: ishtar_menu.py:52 ishtar_menu.py:79 ishtar_menu.py:107
msgid "Deletion"
msgstr "Suppression"
-#: ishtar_menu.py:60
-msgid "Documentation"
-msgstr "Documentation"
+#: ishtar_menu.py:58 models.py:604
+#: templates/ishtar/sheet_administrativeact.html:6
+msgid "Administrative act"
+msgstr "Acte administratif"
-#: ishtar_menu.py:68 ishtar_menu.py:131 widgets.py:52
+#: ishtar_menu.py:69 ishtar_menu.py:97 widgets.py:52
msgid "Add"
msgstr "Ajout"
-#: ishtar_menu.py:87
+#: ishtar_menu.py:84
+msgid "Documents"
+msgstr "Documents"
+
+#: ishtar_menu.py:89
+msgid "Documentation"
+msgstr "Documentation"
+
+#: ishtar_menu.py:116
+msgid "Administrative Act"
+msgstr "Acte administratif"
+
+#: ishtar_menu.py:129
msgid "Dashboard"
msgstr "Tableau de bord"
-#: ishtar_menu.py:90
+#: ishtar_menu.py:132
msgid "General informations"
msgstr "Informations générales"
-#: ishtar_menu.py:94 models.py:242
+#: ishtar_menu.py:136 models.py:238
#: templates/ishtar/dashboards/dashboard_operation.html:9
msgid "Operations"
msgstr "Opérations"
-#: ishtar_menu.py:106
-msgid "Administrative Act"
-msgstr "Acte administratif"
-
-#: ishtar_menu.py:121 models.py:614
-#: templates/ishtar/sheet_administrativeact.html:6
-msgid "Administrative act"
-msgstr "Acte administratif"
-
-#: ishtar_menu.py:146
-msgid "Documents"
-msgstr "Documents"
-
-#: models.py:50 models.py:66 models.py:1413
+#: models.py:48 models.py:64 models.py:1400
msgid "Order"
msgstr "Ordre"
-#: models.py:52 models.py:952
+#: models.py:50 models.py:939
msgid "End date"
msgstr "Date de fin"
-#: models.py:53
+#: models.py:51
msgid "Parent period"
msgstr "Période parente"
-#: models.py:57
+#: models.py:55
msgid "Type Period"
msgstr "Type de période"
-#: models.py:58
+#: models.py:56
msgid "Types Period"
msgstr "Types de période"
-#: models.py:69
+#: models.py:67
msgid "Report state"
msgstr "État de rapport"
-#: models.py:70
+#: models.py:68
msgid "Report states"
msgstr "États de rapports"
-#: models.py:87
-msgid "Archaeological site"
-msgstr "Entité archéologique"
-
-#: models.py:88 models.py:227
-msgid "Archaeological sites"
-msgstr "Entités archéologiques"
-
-#: models.py:91
-msgid "Can view all Archaeological site"
+#: models.py:89
+msgid "Can view all Archaeological sites"
msgstr "Peut voir toutes les Entités archéologiques"
-#: models.py:93
+#: models.py:91
msgid "Can view own Archaeological site"
msgstr "Peut voir ses propres Entités archéologiques"
-#: models.py:95
+#: models.py:93
msgid "Can add own Archaeological site"
msgstr "Peut ajouter ses propres Entités archéologique"
-#: models.py:97
+#: models.py:95
msgid "Can change own Archaeological site"
-msgstr "Peut changer ses propres Entités archéologiques"
+msgstr "Peut modifier ses propres Entités archéologiques"
-#: models.py:99
+#: models.py:97
msgid "Can delete own Archaeological site"
msgstr "Peut supprimer ses propres Entités archéologiques"
-#: models.py:129
+#: models.py:127
msgid "Not documented"
msgstr "Non documenté"
-#: models.py:130
+#: models.py:128
msgid "Arbitrary"
msgstr "Arbitraire"
-#: models.py:131
+#: models.py:129
msgid "Reliable"
msgstr "Fiable"
-#: models.py:144
+#: models.py:141
msgid "Closing date"
msgstr "Date de clôture"
-#: models.py:151
+#: models.py:148
msgid "In charge scientist"
msgstr "Responsable scientifique"
-#: models.py:167 models.py:774
+#: models.py:163 models.py:763
msgid "File"
msgstr "Dossier"
-#: models.py:171
+#: models.py:167
msgid "Surface (m2)"
msgstr "Surface (m2)"
-#: models.py:224
+#: models.py:220
msgid "Cached name"
msgstr "Nom en cache"
-#: models.py:232
+#: models.py:228
msgid ""
"If checked, it means that this operation have not been officialy registered."
msgstr ""
"Si coché, cela signifie que cette opération n'a pas été officiellement "
"enregistrée."
-#: models.py:244
-msgid "Can view all Operation"
+#: models.py:240
+msgid "Can view all Operations"
msgstr "Peut voir toutes les Opérations"
-#: models.py:245
+#: models.py:241
msgid "Can view own Operation"
msgstr "Peut voir sa propre Opération"
-#: models.py:246
+#: models.py:242
msgid "Can add own Operation"
msgstr "Peut ajouter sa propre Opération"
-#: models.py:247
+#: models.py:243
msgid "Can change own Operation"
-msgstr "Peut changer sa propre Opération"
+msgstr "Peut modifier sa propre Opération"
-#: models.py:248
+#: models.py:244
msgid "Can delete own Operation"
msgstr "Peut supprimer sa propre Opération"
-#: models.py:249
+#: models.py:245
msgid "Can close Operation"
msgstr "Peut fermer une Opération"
-#: models.py:272
+#: models.py:268
msgid "OPE"
msgstr "OPE"
-#: models.py:332
+#: models.py:325
msgid "Intercommunal"
msgstr "Intercommunal"
-#: models.py:358 models.py:535
+#: models.py:351 models.py:527
msgid "Archaeological file"
msgstr "Dossier archéologique"
-#: models.py:359
+#: models.py:352
msgid "Code patriarche"
msgstr "Code patriarche"
-#: models.py:401
+#: models.py:394
msgid "This operation code already exists for this year"
msgstr "Ce code d'opération existe déjà pour cette année."
-#: models.py:467
+#: models.py:459
msgid "Inverse relation"
msgstr "Relation inverse"
-#: models.py:471
+#: models.py:463
msgid "Operation relation type"
msgstr "Type de relation entre opérations"
-#: models.py:472
+#: models.py:464
msgid "Operation relation types"
msgstr "Types de relation entre opérations"
-#: models.py:485
+#: models.py:477
msgid "Operation record relation"
msgstr "Relation entre opérations"
-#: models.py:486
+#: models.py:478
msgid "Operation record relations"
msgstr "Relations entre opérations"
-#: models.py:507
+#: models.py:499
msgid "Operation documentation"
msgstr "Documentation d'une opération"
-#: models.py:508
+#: models.py:500
msgid "Operation documentations"
msgstr "Documentations des opérations"
-#: models.py:511
-msgid "Can view all Operation source"
-msgstr "Peut voir toutes les Sources des opérations"
+#: models.py:503
+msgid "Can view all Operation sources"
+msgstr "Peut voir toutes les Documentations d'opération"
-#: models.py:513
+#: models.py:505
msgid "Can view own Operation source"
-msgstr "Peut voir sa propre Source d'opération"
+msgstr "Peut voir sa propre Documentation d'opération"
-#: models.py:515
+#: models.py:507
msgid "Can add own Operation source"
-msgstr "Peut ajouter sa propre Source d'opération"
+msgstr "Peut ajouter sa propre Documentation d'opération"
-#: models.py:517
+#: models.py:509
msgid "Can change own Operation source"
-msgstr "Peut changer sa propre Source d'opération"
+msgstr "Peut modifier sa propre Documentation d'opération"
-#: models.py:519
+#: models.py:511
msgid "Can delete own Operation source"
-msgstr "Peut supprimer sa propre Source d'opération"
+msgstr "Peut supprimer sa propre Documentation d'opération"
-#: models.py:538
+#: models.py:530
msgid "Intended to"
msgstr "Destiné à"
-#: models.py:540
+#: models.py:532
msgid "Code"
msgstr "Code"
-#: models.py:543
+#: models.py:535
msgid "Associated template"
msgstr "Patron associé"
-#: models.py:544
+#: models.py:536
msgid "Indexed"
msgstr "Indexé"
-#: models.py:548
+#: models.py:540
msgid "Act types"
msgstr "Types d'acte"
-#: models.py:571
+#: models.py:562
msgid "Person in charge of the operation"
msgstr "Responsable d'opération"
-#: models.py:577
+#: models.py:568
msgid "Archaeological preventive operator"
msgstr "Opérateur d'archéologie préventive"
-#: models.py:585
+#: models.py:576
msgid "Signatory"
msgstr "Signataire"
-#: models.py:604
+#: models.py:594
msgid "Departments"
msgstr "Départements"
-#: models.py:605
+#: models.py:595
msgid "Cached values get from associated departments"
msgstr "Valeur en cache des départements associés"
-#: models.py:608
+#: models.py:598
msgid "Cached values get from associated towns"
msgstr "Valeur en cache des communes associées"
-#: models.py:615
+#: models.py:605 templates/ishtar/sheet_operation.html:134
msgid "Administrative acts"
msgstr "Actes administratifs"
-#: models.py:618
-msgid "Can view all Administrative act"
+#: models.py:608
+msgid "Can view all Administrative acts"
msgstr "Peut voir tous les Actes administratifs"
-#: models.py:620
+#: models.py:610
msgid "Can view own Administrative act"
msgstr "Peut voir son propre Acte administratif"
-#: models.py:622
+#: models.py:612
msgid "Can add own Administrative act"
msgstr "Peut ajouter son propre Acte administratif"
-#: models.py:624
+#: models.py:614
msgid "Can change own Administrative act"
-msgstr "Peut changer son propre Acte administratif"
+msgstr "Peut modifier son propre Acte administratif"
-#: models.py:626
+#: models.py:616
msgid "Can delete own Administrative act"
msgstr "Peut supprimer son propre Acte administratif"
-#: models.py:635
+#: models.py:625
#: templates/ishtar/blocks/window_tables/administrativacts.html:5
+#: templates/ishtar/blocks/window_tables/archaeologicalsites.html:5
msgid "Ref."
msgstr "Réf."
-#: models.py:718
+#: models.py:708
msgid "This index already exists for this year"
msgstr "Cet index existe déjà pour cette année."
-#: models.py:785
+#: models.py:774
msgid "External ID"
msgstr "ID externe"
-#: models.py:787
+#: models.py:776
msgid "Address - Locality"
msgstr "Adresse - Lieu-dit"
-#: models.py:947
+#: models.py:934
msgid "Owner"
msgstr "Propriétaire"
-#: models.py:955
+#: models.py:942
msgid "Parcel owner"
msgstr "Propriétaire de parcelle"
-#: models.py:956
+#: models.py:943
msgid "Parcel owners"
msgstr "Propriétaires de parcelle"
-#: models.py:982
+#: models.py:969
msgid "Recorded"
msgstr "Enregistré"
-#: models.py:983
+#: models.py:970
msgid "Effective"
msgstr "Effectif"
-#: models.py:984
+#: models.py:971
msgid "Active"
msgstr "Actif"
-#: models.py:985
+#: models.py:972
msgid "Field completed"
msgstr "Terrain achevé"
-#: models.py:986
+#: models.py:973
msgid "Associated report"
msgstr "Rapport associé"
-#: models.py:987
+#: models.py:974
msgid "Closed"
-msgstr "Fermé"
+msgstr "Clos"
-#: models.py:988
+#: models.py:975
msgid "Documented and closed"
msgstr "Documenté et clos"
-#: models.py:1414
+#: models.py:1401
msgid "Is preventive"
msgstr "Préventif"
-#: models.py:1417
+#: models.py:1404
msgid "Operation type old"
msgstr "Type d'opération - ancien"
-#: models.py:1418
+#: models.py:1405
msgid "Operation types old"
msgstr "Types d'opération - ancien"
-#: views.py:252
+#: views.py:258
msgid "New operation"
msgstr "Nouvelle opération"
-#: views.py:287
+#: views.py:294
msgid "Operation modification"
msgstr "Modification d'une opération"
-#: views.py:327
+#: views.py:334
msgid "Operation closing"
-msgstr "Clôture de l'opération"
+msgstr "Clôture d'une opération"
-#: views.py:333
+#: views.py:340
msgid "Operation deletion"
msgstr "Suppression d'une opération"
-#: views.py:338
+#: views.py:345
msgid "Operation: source search"
msgstr "Opération : recherche de documentation associée"
-#: views.py:346
+#: views.py:353
msgid "Operation: source creation"
msgstr "Opération : nouvelle documentation associée"
-#: views.py:354
+#: views.py:361
msgid "Operation: source modification"
msgstr "Opération : modification d'une documentation associée"
-#: views.py:360
+#: views.py:367
msgid "Operation: source deletion"
msgstr "Opération : suppression d'une documentation associée"
-#: views.py:375
+#: views.py:382
msgid "Operation: new administrative act"
msgstr "Opération : nouvel acte administratif"
-#: views.py:385
+#: views.py:392
msgid "Operation: administrative act modification"
msgstr "Opération : modification d'un acte administratif"
-#: views.py:394
+#: views.py:401
msgid "Operation: administrative act deletion"
msgstr "Opération : suppression d'un acte administratif"
-#: wizards.py:203
+#: wizards.py:199
msgid ""
"Warning: No Archaelogical File is provided. If you have forget it return to "
"the first step."
@@ -1023,7 +1029,7 @@ msgstr "Nom :"
#: templates/ishtar/sheet_operation.html:37
msgid "Patriarche OA code:"
-msgstr "Code d'opération Patriarche"
+msgstr "Code d'opération Patriarche :"
#: templates/ishtar/sheet_operation.html:38
msgid "Patriarche OA code not yet recorded!"
@@ -1089,53 +1095,49 @@ msgstr "Type de permis :"
msgid "Permit reference:"
msgstr "Référence du permis :"
-#: templates/ishtar/sheet_operation.html:99
+#: templates/ishtar/sheet_operation.html:100
msgid "Localisation"
msgstr "Localisation"
-#: templates/ishtar/sheet_operation.html:100
+#: templates/ishtar/sheet_operation.html:101
msgid "Towns:"
msgstr "Communes :"
-#: templates/ishtar/sheet_operation.html:102
+#: templates/ishtar/sheet_operation.html:104
msgid "Main address:"
msgstr "Adresse des terrains :"
-#: templates/ishtar/sheet_operation.html:103
+#: templates/ishtar/sheet_operation.html:105
msgid "Complement:"
msgstr "Complément :"
-#: templates/ishtar/sheet_operation.html:104
+#: templates/ishtar/sheet_operation.html:106
msgid "Postal code:"
msgstr "Code postal :"
-#: templates/ishtar/sheet_operation.html:118
+#: templates/ishtar/sheet_operation.html:120
msgid "Details"
msgstr "Détails"
-#: templates/ishtar/sheet_operation.html:123
+#: templates/ishtar/sheet_operation.html:130
msgid "Associated parcels"
msgstr "Parcelles associées"
-#: templates/ishtar/sheet_operation.html:127
-msgid "Administrativ acts"
-msgstr "Actes administratifs"
-
-#: templates/ishtar/sheet_operation.html:131
+#: templates/ishtar/sheet_operation.html:138
msgid "Document from this operation"
msgstr "Documents de cette opération"
-#: templates/ishtar/sheet_operation.html:136
+#: templates/ishtar/sheet_operation.html:143
msgid "Context records"
msgstr "Unités d'Enregistrement"
-#: templates/ishtar/sheet_operation.html:148
+#: templates/ishtar/sheet_operation.html:155
msgid "Finds"
msgstr "Mobilier"
#: templates/ishtar/sheet_operationsource.html:6
msgid "Operation source"
-msgstr "Documentation associé à l'opération"
+msgstr "Documentation associée à l'opération"
#: templates/ishtar/blocks/window_tables/administrativacts.html:6
#: templates/ishtar/dashboards/dashboard_operation.html:82
@@ -1150,6 +1152,10 @@ msgstr "Date"
msgid "No administrative act associated"
msgstr "Aucun acte administratif associé"
+#: templates/ishtar/blocks/window_tables/archaeologicalsites.html:18
+msgid "No archaeological site associated"
+msgstr "Pas d'entité archéologique associée"
+
#: templates/ishtar/blocks/window_tables/parcels.html:20
msgid "No parcel"
msgstr "Pas de parcelle"
@@ -1274,7 +1280,7 @@ msgstr "Organisations (année en cours)"
#: templates/ishtar/dashboards/dashboard_operation.html:182
#: templates/ishtar/dashboards/dashboard_operation.html:368
msgid "Current realisation year"
-msgstr "Année actuelle (réalisations)"
+msgstr "Année de réalisation en cours"
#: templates/ishtar/dashboards/dashboard_operation.html:197
#: templates/ishtar/dashboards/dashboard_operation.html:383
@@ -1307,7 +1313,7 @@ msgstr "Moyenne"
#: templates/ishtar/dashboards/dashboard_operation.html:230
msgid "Effective operations areas (ha)"
-msgstr "Surface des opérations en cours (ha)"
+msgstr "Surface des opérations effectives (ha)"
#: templates/ishtar/dashboards/dashboard_operation.html:235
#: templates/ishtar/dashboards/dashboard_operation.html:273
diff --git a/translations/fr/archaeological_warehouse.po b/translations/fr/archaeological_warehouse.po
index 27a73417d..331e2a61e 100644
--- a/translations/fr/archaeological_warehouse.po
+++ b/translations/fr/archaeological_warehouse.po
@@ -2,14 +2,14 @@
# Copyright (C) 2010-2011
# This file is distributed under the same license as the Ishtar package.
# Étienne Loks <etienne.loks at peacefrogs net>, 2010-2011.
-# Étienne Loks <etienne.loks@iggdrasil.net>, 2015. #zanata
+# Valérie-Emma Leroux <emma@iggdrasil.net>, 2016. #zanata
msgid ""
msgstr ""
"MIME-Version: 1.0\n"
"Content-Transfer-Encoding: 8bit\n"
"Content-Type: text/plain; charset=UTF-8\n"
-"PO-Revision-Date: \n"
-"Last-Translator: Étienne Loks <etienne.loks at peacefrogs net>\n"
+"PO-Revision-Date: 2016-02-24 10:52-0500\n"
+"Last-Translator: Valérie-Emma Leroux <emma@iggdrasil.net>\n"
"Language-Team: \n"
"Language: fr\n"
"Plural-Forms: nplurals=2; plural=n>1;\n"
@@ -33,7 +33,7 @@ msgstr "Responsable"
#: forms.py:51 forms.py:94 models.py:41 models.py:75
msgid "Comment"
-msgstr "Commentaire"
+msgstr "Commentaires"
#: forms.py:53
msgid "Address"
@@ -83,7 +83,7 @@ msgstr "Vous devez sélectionner un contenant."
msgid "Add a new container"
msgstr "Ajouter un nouveau contenant."
-#: forms.py:132 ishtar_menu.py:32 views.py:94
+#: forms.py:132 ishtar_menu.py:33 views.py:94
msgid "Packaging"
msgstr "Conditionnement"
@@ -112,7 +112,7 @@ msgid "Warehouses"
msgstr "Dépôts"
#: models.py:47
-msgid "Can view all Warehouse"
+msgid "Can view all Warehouses"
msgstr "Peut voir tous les Dépôts"
#: models.py:48
@@ -125,7 +125,7 @@ msgstr "Peut ajouter son propre Dépôt"
#: models.py:50
msgid "Can change own Warehouse"
-msgstr "Peut changer son propre Dépôt"
+msgstr "Peut modifier son propre Dépôt"
#: models.py:51
msgid "Can delete own Warehouse"
@@ -133,11 +133,11 @@ msgstr "Peut supprimer son propre Dépôt"
#: models.py:58
msgid "Length (mm)"
-msgstr "Longueur (mm) :"
+msgstr "Longueur (mm)"
#: models.py:59
msgid "Width (mm)"
-msgstr "Largeur (mm) :"
+msgstr "Largeur (mm)"
#: models.py:60
msgid "Height (mm)"
diff --git a/translations/fr/ishtar_common.po b/translations/fr/ishtar_common.po
index 85c87abff..c7387396f 100644
--- a/translations/fr/ishtar_common.po
+++ b/translations/fr/ishtar_common.po
@@ -3,13 +3,14 @@
# This file is distributed under the same license as the Ishtar package.
# Étienne Loks <etienne.loks at peacefrogs net>, 2010-2015.
# Étienne Loks <etienne.loks@iggdrasil.net>, 2015. #zanata
+# Valérie-Emma Leroux <emma@iggdrasil.net>, 2016. #zanata
# Étienne Loks <etienne.loks@iggdrasil.net>, 2016. #zanata
msgid ""
msgstr ""
"MIME-Version: 1.0\n"
"Content-Transfer-Encoding: 8bit\n"
"Content-Type: text/plain; charset=UTF-8\n"
-"PO-Revision-Date: 2016-01-28 03:56-0500\n"
+"PO-Revision-Date: 2016-02-25 07:04-0500\n"
"Last-Translator: Étienne Loks <etienne.loks@iggdrasil.net>\n"
"Language-Team: \n"
"Language: fr\n"
@@ -28,19 +29,19 @@ msgstr "courriel"
msgid "Related item"
msgstr "Élément associé"
-#: context_processors.py:33
+#: context_processors.py:37
msgid "Archaeological file"
msgstr "Dossier"
-#: context_processors.py:34 models.py:1178
+#: context_processors.py:38 models.py:1251
msgid "Operation"
msgstr "Opération"
-#: context_processors.py:37
+#: context_processors.py:40
msgid "Context record"
msgstr "Unité d'Enregistrement"
-#: context_processors.py:40
+#: context_processors.py:42
msgid "Find"
msgstr "Mobilier"
@@ -59,7 +60,7 @@ msgstr "\"%(value)s\" diffère de oui ou non"
#: data_importer.py:210
#, python-format
msgid "\"%(value)s\" is not a float"
-msgstr "\"%(value)s\" n'est pas un flottant"
+msgstr "\"%(value)s\" n'est pas un nombre à virgule"
#: data_importer.py:223 data_importer.py:236 data_importer.py:479
#, python-format
@@ -121,7 +122,7 @@ msgstr "Au moins %d colonnes doivent être remplies"
#: data_importer.py:624
msgid "The regexp doesn't match."
-msgstr "L'expression régulière ne fonctionne pas"
+msgstr "L'expression régulière ne fonctionne pas."
#: data_importer.py:1032
msgid "Not imported"
@@ -162,7 +163,7 @@ msgstr "Entrez un nom correct composé de lettres, espaces et tirets."
#: forms.py:71 forms_common.py:420
msgid "Confirm"
-msgstr "Confirmation"
+msgstr "Confirmer"
#: forms.py:76
msgid "Are you sure you want to delete?"
@@ -184,12 +185,12 @@ msgstr "Vous devez sélectionner un élément."
msgid "Add a new item"
msgstr "Ajouter un nouvel élément"
-#: forms.py:171 models.py:993
+#: forms.py:171 models.py:1058
msgid "Template"
msgstr "Patron"
#: forms_common.py:39 forms_common.py:57 forms_common.py:169
-#: forms_common.py:269 forms_common.py:274 models.py:1059 models.py:2274
+#: forms_common.py:269 forms_common.py:274 models.py:1124 models.py:2340
#: templates/blocks/JQueryAdvancedTown.html:19
#: templates/ishtar/sheet_organization.html:17
msgid "Town"
@@ -204,73 +205,73 @@ msgid ""
"<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>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>"
-#: forms_common.py:66 forms_common.py:648 ishtar_menu.py:42 models.py:1973
-#: models.py:2102 models.py:2156 templates/ishtar/sheet_person.html:6
+#: forms_common.py:66 forms_common.py:648 ishtar_menu.py:42 models.py:2039
+#: models.py:2168 models.py:2222 templates/ishtar/sheet_person.html:6
msgid "Person"
msgstr "Individu"
-#: forms_common.py:157 forms_common.py:231 ishtar_menu.py:66 models.py:1895
+#: forms_common.py:157 forms_common.py:231 ishtar_menu.py:66 models.py:1961
#: templates/ishtar/sheet_organization.html:6
msgid "Organization"
msgstr "Organisation"
#: forms_common.py:160 forms_common.py:196 forms_common.py:226
-#: forms_common.py:259 models.py:992 models.py:1228 models.py:1445
-#: models.py:1889 models.py:1963 models.py:2260
+#: forms_common.py:259 models.py:775 models.py:1057 models.py:1293
+#: models.py:1511 models.py:1955 models.py:2029 models.py:2326
#: templates/ishtar/sheet_organization.html:12
#: templates/ishtar/sheet_organization.html:25
msgid "Name"
msgstr "Nom"
-#: forms_common.py:161 models.py:1173 models.py:1576
+#: forms_common.py:161 models.py:1238 models.py:1642
msgid "Organization type"
msgstr "Type d'organisation"
-#: forms_common.py:163 forms_common.py:263 models.py:1054
+#: forms_common.py:163 forms_common.py:263 models.py:1119
#: templates/ishtar/sheet_organization.html:14
msgid "Address"
msgstr "Adresse"
-#: forms_common.py:165 forms_common.py:265 models.py:1055
+#: forms_common.py:165 forms_common.py:265 models.py:1120
#: templates/ishtar/sheet_organization.html:15
msgid "Address complement"
msgstr "Complément d'adresse"
-#: forms_common.py:167 forms_common.py:267 models.py:1057
+#: forms_common.py:167 forms_common.py:267 models.py:1122
#: templates/ishtar/sheet_organization.html:16
msgid "Postal code"
msgstr "Code postal"
-#: forms_common.py:170 forms_common.py:270 models.py:1060
+#: forms_common.py:170 forms_common.py:270 models.py:1125
msgid "Country"
msgstr "Pays"
#: forms_common.py:172 forms_common.py:228 forms_common.py:272
-#: forms_common.py:376 models.py:1066
+#: forms_common.py:376 models.py:1131
msgid "Email"
msgstr "Courriel"
-#: forms_common.py:173 forms_common.py:273 models.py:1062
+#: forms_common.py:173 forms_common.py:273 models.py:1127
#: templates/ishtar/sheet_organization.html:18
msgid "Phone"
msgstr "Téléphone"
-#: forms_common.py:174 models.py:1063
+#: forms_common.py:174 models.py:1128
#: templates/ishtar/sheet_organization.html:19
msgid "Mobile phone"
msgstr "Téléphone portable"
-#: forms_common.py:197 forms_common.py:229 models.py:1600 models.py:1891
-#: models.py:2197 templates/sheet_ope.html:85 templates/sheet_ope.html.py:105
+#: forms_common.py:197 forms_common.py:229 models.py:1666 models.py:1957
+#: models.py:2263 templates/sheet_ope.html:85 templates/sheet_ope.html.py:105
#: templates/sheet_ope.html:126 templates/ishtar/import_list.html:13
#: templates/ishtar/sheet_organization.html:27
#: templates/ishtar/sheet_person.html:56
@@ -278,16 +279,16 @@ msgstr "Téléphone portable"
msgid "Type"
msgstr "Type"
-#: forms_common.py:206 views.py:109
+#: forms_common.py:206 views.py:114
msgid "Organization search"
msgstr "Recherche d'organisations"
-#: forms_common.py:227 forms_common.py:257 models.py:1961
+#: forms_common.py:227 forms_common.py:257 models.py:2027
#: templates/ishtar/sheet_organization.html:26
msgid "Surname"
msgstr "Prénom"
-#: forms_common.py:243 views.py:83
+#: forms_common.py:243 views.py:88
msgid "Person search"
msgstr "Recherche d'individus"
@@ -295,14 +296,14 @@ msgstr "Recherche d'individus"
msgid "Identity"
msgstr "Identité"
-#: forms_common.py:256 forms_common.py:574 forms_common.py:615 models.py:1959
-#: models.py:2194 templates/sheet_ope.html:104
+#: forms_common.py:256 forms_common.py:574 forms_common.py:615 models.py:2025
+#: models.py:2260 templates/sheet_ope.html:104
#: templates/ishtar/sheet_person.html:55
#: templates/ishtar/blocks/window_tables/documents.html:5
msgid "Title"
msgstr "Titre"
-#: forms_common.py:261 models.py:1965
+#: forms_common.py:261 models.py:2031
msgid "Raw name"
msgstr "Nom brut"
@@ -310,7 +311,7 @@ msgstr "Nom brut"
msgid "Current organization"
msgstr "Organisation actuelle"
-#: forms_common.py:325 forms_common.py:355 forms_common.py:359 models.py:1943
+#: forms_common.py:325 forms_common.py:355 forms_common.py:359 models.py:2009
msgid "Person type"
msgstr "Type d'individu"
@@ -318,7 +319,7 @@ msgstr "Type d'individu"
msgid "Account"
msgstr "Compte"
-#: forms_common.py:379 wizards.py:1146
+#: forms_common.py:379 wizards.py:1154
msgid "New password"
msgstr "Nouveau mot de passe"
@@ -342,7 +343,7 @@ msgstr "Ce nom d'utilisateur existe déjà."
msgid "Send the new password by email?"
msgstr "Envoyer le nouveau mot de passe par courriel ?"
-#: forms_common.py:430 forms_common.py:443 models.py:2275
+#: forms_common.py:430 forms_common.py:443 models.py:2341
msgid "Towns"
msgstr "Communes"
@@ -358,9 +359,9 @@ msgstr "Seul un choix peut être coché."
msgid "Documentation informations"
msgstr "Information sur le document"
-#: forms_common.py:576 forms_common.py:616 models.py:1577 models.py:2177
+#: forms_common.py:576 forms_common.py:616 models.py:1643 models.py:2243
msgid "Source type"
-msgstr "Type de source"
+msgstr "Type de document"
#: forms_common.py:578 forms_common.py:617 templates/sheet_ope.html:84
msgid "Reference"
@@ -370,41 +371,41 @@ msgstr "Référence"
msgid "Internal reference"
msgstr "Référence interne"
-#: forms_common.py:584 models.py:2208
+#: forms_common.py:584 models.py:2274
msgid "Numerical ressource (web address)"
msgstr "Ressource numérique (adresse web)"
-#: forms_common.py:585 models.py:2210
+#: forms_common.py:585 models.py:2276
msgid "Receipt date"
msgstr "Date de réception"
-#: forms_common.py:587 models.py:1727 models.py:2212
+#: forms_common.py:587 models.py:1793 models.py:2278
msgid "Creation date"
msgstr "Date de création"
-#: forms_common.py:590 models.py:2215
+#: forms_common.py:590 models.py:2281
msgid "Receipt date in documentation"
msgstr "Date de réception en documentation"
-#: forms_common.py:592 forms_common.py:620 models.py:260 models.py:1472
-#: models.py:2222
+#: forms_common.py:592 forms_common.py:620 models.py:277 models.py:1538
+#: models.py:2288
msgid "Comment"
msgstr "Commentaire"
-#: forms_common.py:594 forms_common.py:619 models.py:1232 models.py:1404
-#: models.py:1446 models.py:2221 templates/sheet_ope.html:128
+#: forms_common.py:594 forms_common.py:619 models.py:777 models.py:1297
+#: models.py:1470 models.py:1512 models.py:2287 templates/sheet_ope.html:128
msgid "Description"
msgstr "Description"
-#: forms_common.py:597 models.py:2223
+#: forms_common.py:597 models.py:2289
msgid "Additional information"
msgstr "Informations supplémentaires"
-#: forms_common.py:599 forms_common.py:623 models.py:2225
+#: forms_common.py:599 forms_common.py:623 models.py:2291
msgid "Has a duplicate"
msgstr "Existe en doublon"
-#: forms_common.py:612 forms_common.py:641 forms_common.py:674 models.py:2161
+#: forms_common.py:612 forms_common.py:641 forms_common.py:674 models.py:2227
#: templates/ishtar/wizard/wizard_person_deletion.html:124
msgid "Author"
msgstr "Auteur"
@@ -417,7 +418,7 @@ msgstr "Informations complémentaires"
msgid "Would you like to delete this documentation?"
msgstr "Voulez-vous supprimer ce document ?"
-#: forms_common.py:649 models.py:1578 models.py:2151 models.py:2158
+#: forms_common.py:649 models.py:1644 models.py:2217 models.py:2224
msgid "Author type"
msgstr "Type d'auteur"
@@ -429,7 +430,7 @@ msgstr "Sélection d'auteur"
msgid "There are identical authors."
msgstr "Il y a des auteurs identiques."
-#: forms_common.py:685 models.py:2162 models.py:2204
+#: forms_common.py:685 models.py:2228 models.py:2270
#: templates/sheet_ope.html:106
#: templates/ishtar/blocks/window_tables/documents.html:7
msgid "Authors"
@@ -439,11 +440,11 @@ msgstr "Auteurs"
msgid "Administration"
msgstr "Administration"
-#: ishtar_menu.py:31 views.py:135
+#: ishtar_menu.py:31 views.py:140
msgid "Account management"
msgstr "Gestion des comptes"
-#: ishtar_menu.py:34 models.py:776 views.py:1116
+#: ishtar_menu.py:34 models.py:853 views.py:1115
msgid "Global variables"
msgstr "Variables globales"
@@ -467,19 +468,19 @@ msgstr "Modification"
msgid "Merge"
msgstr "Fusion"
-#: ishtar_menu.py:61 ishtar_menu.py:88 models.py:1764 widgets.py:110
+#: ishtar_menu.py:61 ishtar_menu.py:88 models.py:1830 widgets.py:110
msgid "Delete"
msgstr "Suppression"
-#: ishtar_menu.py:96 models.py:1738
+#: ishtar_menu.py:96 models.py:1804
msgid "Imports"
msgstr "Imports"
-#: ishtar_menu.py:99 views.py:1124
+#: ishtar_menu.py:99 views.py:1123
msgid "New import"
msgstr "Nouvel import"
-#: ishtar_menu.py:103 views.py:1138
+#: ishtar_menu.py:103 views.py:1137
msgid "Current imports"
msgstr "Imports en cours"
@@ -492,690 +493,726 @@ msgid "Not a valid item."
msgstr "Élément invalide."
#: models.py:191
-msgid "An item selected is not a valid item."
+msgid "A selected item is not a valid item."
msgstr "Un élément sélectionné n'est pas valide."
#: models.py:202
-msgid "This item already exist."
+msgid "This item already exists."
msgstr "Cet élément existe déjà."
-#: models.py:256 models.py:1027 models.py:1039
+#: models.py:273 models.py:1092 models.py:1104
msgid "Label"
msgstr "Libellé"
-#: models.py:258
+#: models.py:275
msgid "Textual ID"
msgstr "Identifiant textuel"
-#: models.py:261 models.py:996
+#: models.py:278 models.py:1061
msgid "Available"
msgstr "Disponible"
-#: models.py:474 models.py:1518
+#: models.py:479 models.py:1584
msgid "Key"
msgstr "Clé"
-#: models.py:480
-msgid "Key specific to an import"
+#: models.py:485
+msgid "Specific key to an import"
msgstr "Clé spécifique à un import"
-#: models.py:551
+#: models.py:556
msgid "Last editor"
msgstr "Dernier éditeur"
-#: models.py:554
+#: models.py:559
msgid "Creator"
msgstr "Créateur"
-#: models.py:687 models.py:2286
+#: models.py:692 models.py:2352
msgid "Order"
msgstr "Ordre"
-#: models.py:688
+#: models.py:693
msgid "Symmetrical"
msgstr "Symétrique"
-#: models.py:701
+#: models.py:706
msgid "Cannot have symmetrical and an inverse_relation"
-msgstr "Ne pas être symétrique et avoir une relation inverse"
+msgstr "Ne peut pas être symétrique et avoir une relation inverse"
+
+#: models.py:776 models.py:1295
+msgid "Slug"
+msgstr "Identifiant texte"
+
+#: models.py:778
+msgid "Files module"
+msgstr "Module Dossiers"
+
+#: models.py:779
+msgid "Context records module"
+msgstr "Module Unités d'Enregistrement"
+
+#: models.py:781
+msgid "Finds module"
+msgstr "Module Mobilier"
+
+#: models.py:782
+msgid "Need context records module"
+msgstr "Nécessite le module Unités d'Enregistrement"
+
+#: models.py:784
+msgid "Warehouses module"
+msgstr "Module Dépôts"
+
+#: models.py:785
+msgid "Need finds module"
+msgstr "Nécessite le module mobilier"
-#: models.py:769
+#: models.py:786
+msgid "Current active"
+msgstr "Actuellement utilisé"
+
+#: models.py:789
+msgid "Ishtar site profile"
+msgstr "Profil d'instance Ishtar"
+
+#: models.py:790
+msgid "Ishtar site profiles"
+msgstr "Profils d'instance Ishtar"
+
+#: models.py:846
msgid "Variable name"
msgstr "Nom de la variable"
-#: models.py:770
+#: models.py:847
msgid "Description of the variable"
msgstr "Description de la variable"
-#: models.py:772 models.py:1519
+#: models.py:849 models.py:1585
msgid "Value"
msgstr "Valeur"
-#: models.py:775
+#: models.py:852
msgid "Global variable"
-msgstr "Variables globales"
+msgstr "Variable globale"
-#: models.py:897 models.py:927
+#: models.py:962 models.py:992
msgid "Total"
msgstr "Total"
-#: models.py:904 models.py:1028 models.py:1040
+#: models.py:969 models.py:1093 models.py:1105
#: templates/ishtar/dashboards/dashboard_main_detail.html:135
#: templates/ishtar/dashboards/dashboard_main_detail_users.html:26
msgid "Number"
msgstr "Nombre"
-#: models.py:991
+#: models.py:1056
msgid "Administrative Act"
msgstr "Acte administratif"
-#: models.py:995
+#: models.py:1060
msgid "Associated object"
msgstr "Objet associé"
-#: models.py:999
+#: models.py:1064
msgid "Document template"
msgstr "Patron de document"
-#: models.py:1000
+#: models.py:1065
msgid "Document templates"
msgstr "Patrons de documents"
-#: models.py:1031 models.py:1041 models.py:1722
+#: models.py:1096 models.py:1106 models.py:1788
msgid "State"
msgstr "État"
-#: models.py:1045 templates/blocks/JQueryAdvancedTown.html:12
+#: models.py:1110 templates/blocks/JQueryAdvancedTown.html:12
msgid "Department"
msgstr "Département"
-#: models.py:1046
+#: models.py:1111
msgid "Departments"
msgstr "Départements"
-#: models.py:1100
+#: models.py:1165
msgid "Tel: "
msgstr "Tél :"
-#: models.py:1104
+#: models.py:1169
msgid "Mobile: "
msgstr "Mobile :"
-#: models.py:1108
+#: models.py:1173
msgid "Email: "
msgstr "Courriel :"
-#: models.py:1113
+#: models.py:1178
msgid "Merge key"
msgstr "Clé de fusion"
-#: models.py:1174
+#: models.py:1239
msgid "Organization types"
msgstr "Types d'organisation"
-#: models.py:1180
+#: models.py:1253
msgid "Archaeological site"
msgstr "Entité Archéologique"
-#: models.py:1181
+#: models.py:1254
msgid "Parcels"
msgstr "Parcelles"
-#: models.py:1183
+#: models.py:1256
msgid "Operation source"
msgstr "Documentation de l'opération"
-#: models.py:1189 views.py:931 views.py:988
+#: models.py:1259 views.py:940 views.py:991
msgid "Archaeological files"
msgstr "Dossiers archéologiques"
-#: models.py:1196 views.py:934 views.py:998
+#: models.py:1261 views.py:943 views.py:999
msgid "Context records"
-msgstr "Unité d'Enregistrement"
+msgstr "Unités d'Enregistrement"
-#: models.py:1199 views.py:936 views.py:1003
+#: models.py:1263 views.py:945 views.py:1002
msgid "Finds"
msgstr "Mobilier"
-#: models.py:1230
-msgid "Slug"
-msgstr "Identifiant texte"
-
-#: models.py:1234 templates/ishtar/dashboards/dashboard_main.html:26
+#: models.py:1299 templates/ishtar/dashboards/dashboard_main.html:26
msgid "Users"
msgstr "Utilisateurs"
-#: models.py:1236
+#: models.py:1301
msgid "Associated model"
msgstr "Modèle associé"
-#: models.py:1238
+#: models.py:1304
msgid "Is template"
msgstr "Est un patron"
-#: models.py:1239
+#: models.py:1305
msgid "Unicity keys (separator \";\")"
msgstr "Clés d'unicité (séparateur « ; »)"
-#: models.py:1243
+#: models.py:1309
msgid "Importer - Type"
msgstr "Importeur - Type"
-#: models.py:1244
+#: models.py:1310
msgid "Importer - Types"
msgstr "Importeur - Types"
-#: models.py:1334
+#: models.py:1400
msgid "Importer - Default"
msgstr "Importeur - Par défaut"
-#: models.py:1335
+#: models.py:1401
msgid "Importer - Defaults"
msgstr "Importeur - Par défaut"
-#: models.py:1370
+#: models.py:1436
msgid "Importer - Default value"
msgstr "Importeur - Valeur par défaut"
-#: models.py:1371
+#: models.py:1437
msgid "Importer - Default values"
msgstr "Importeur - Valeurs par défaut"
-#: models.py:1403
+#: models.py:1469
msgid "Column number"
msgstr "Numéro de colonne"
-#: models.py:1406
+#: models.py:1472
msgid "Required"
msgstr "Requis"
-#: models.py:1409
+#: models.py:1475
msgid "Importer - Column"
msgstr "Importeur - Colonne"
-#: models.py:1410
+#: models.py:1476
msgid "Importer - Columns"
msgstr "Importeur - Colonnes"
-#: models.py:1430
+#: models.py:1496
msgid "Field name"
msgstr "Nom du champ"
-#: models.py:1432 models.py:1466
-msgid "Force creation of new item"
+#: models.py:1498 models.py:1532
+msgid "Force creation of new items"
msgstr "Forcer la création de nouveaux éléments"
-#: models.py:1434 models.py:1468
+#: models.py:1500 models.py:1534
msgid "Concatenate with existing"
msgstr "Concaténer avec l'existant"
-#: models.py:1436 models.py:1470
+#: models.py:1502 models.py:1536
msgid "Concatenate character"
msgstr "Caractère de concaténation"
-#: models.py:1440
+#: models.py:1506
msgid "Importer - Duplicate field"
msgstr "Importeur - Champ dupliqué"
-#: models.py:1441
+#: models.py:1507
msgid "Importer - Duplicate fields"
msgstr "Importeur - Champs dupliqués"
-#: models.py:1448
+#: models.py:1514
msgid "Regular expression"
msgstr "Expression régulière"
-#: models.py:1451
+#: models.py:1517
msgid "Importer - Regular expression"
msgstr "Importeur - Expression régulière"
-#: models.py:1452
+#: models.py:1518
msgid "Importer - Regular expressions"
msgstr "Importeur - Expressions régulières"
-#: models.py:1475
+#: models.py:1541
msgid "Importer - Target"
msgstr "Importeur - Cible"
-#: models.py:1476
+#: models.py:1542
msgid "Importer - Targets"
msgstr "Importeur - Cibles"
-#: models.py:1500 views.py:306
+#: models.py:1566 views.py:311
msgid "True"
msgstr "Oui"
-#: models.py:1501 views.py:308
+#: models.py:1567 views.py:313
msgid "False"
msgstr "Non"
-#: models.py:1520
+#: models.py:1586
msgid "Is set"
msgstr "Est défini"
-#: models.py:1527
+#: models.py:1593
msgid "Importer - Target key"
msgstr "Importeur - Rapprochement"
-#: models.py:1528
+#: models.py:1594
msgid "Importer - Targets keys"
msgstr "Importeur - Rapprochements"
-#: models.py:1579 models.py:2189 models.py:2200
+#: models.py:1645 models.py:2255 models.py:2266
msgid "Format"
msgstr "Format"
-#: models.py:1580 models.py:2290
+#: models.py:1646 models.py:2356
msgid "Operation type"
msgstr "Type d'opération"
-#: models.py:1581
+#: models.py:1647
msgid "Period"
msgstr "Périodes"
-#: models.py:1582
+#: models.py:1648
msgid "Unit"
msgstr "Unité"
-#: models.py:1583
+#: models.py:1649
msgid "Material"
msgstr "Matériau"
-#: models.py:1585
+#: models.py:1651
msgid "Conservatory state"
msgstr "État de conservation"
-#: models.py:1586
+#: models.py:1652
msgid "Preservation type"
msgstr "Type de conservation"
-#: models.py:1587
+#: models.py:1653
msgid "Object type"
msgstr "Type d'objet"
-#: models.py:1589
+#: models.py:1655
msgid "Identification type"
msgstr "Type d'identification"
-#: models.py:1590 models.py:2183
+#: models.py:1656 models.py:2249
msgid "Support type"
msgstr "Type de support"
-#: models.py:1596
+#: models.py:1662
msgid "Integer"
msgstr "Entier"
-#: models.py:1597
+#: models.py:1663
msgid "Float"
msgstr "Nombre à virgule"
-#: models.py:1598
+#: models.py:1664
msgid "String"
-msgstr "Chaine de caractères"
+msgstr "Chaîne de caractères"
-#: models.py:1599 templates/sheet_ope.html:86
+#: models.py:1665 templates/sheet_ope.html:86
msgid "Date"
msgstr "Date"
-#: models.py:1601 templates/sheet_ope.html:61 templates/sheet_ope.html.py:83
+#: models.py:1667 templates/sheet_ope.html:61 templates/sheet_ope.html.py:83
#: templates/ishtar/sheet_person.html:54
#: templates/ishtar/dashboards/dashboard_main_detail.html:120
msgid "Year"
msgstr "Année"
-#: models.py:1602
+#: models.py:1668
msgid "String to boolean"
-msgstr "Chaîne de caractère vers booléen"
+msgstr "Chaîne de caractères vers booléen"
-#: models.py:1603
+#: models.py:1669
msgctxt "filesystem"
msgid "File"
msgstr "Fichier"
-#: models.py:1604
+#: models.py:1670
msgid "Unknow type"
msgstr "Type inconnu"
-#: models.py:1620
+#: models.py:1686
msgid "4 digit year. e.g.: \"2015\""
-msgstr "Année à 4 chiffres. Exemple : « 2015 »"
+msgstr "Année sur 4 chiffres. Exemple : « 2015 »"
-#: models.py:1621
+#: models.py:1687
msgid "4 digit year/month/day. e.g.: \"2015/02/04\""
-msgstr "Année à 4 chiffres/mois/jour. Exemple : « 2015/02/04 »"
+msgstr "Année sur 4 chiffres/mois/jour. Exemple : « 2015/02/04 »"
-#: models.py:1622
+#: models.py:1688
msgid "Day/month/4 digit year. e.g.: \"04/02/2015\""
-msgstr "Jour/mois/année à 4 chiffres. Exemple : « 04/02/2015 »"
+msgstr "Jour/mois/année sur 4 chiffres. Exemple : « 04/02/2015 »"
-#: models.py:1632
+#: models.py:1698
msgid "Options"
msgstr "Options"
-#: models.py:1634
+#: models.py:1700
msgid "Split character(s)"
-msgstr "Caractère de séparation"
+msgstr "Caractère(s) de séparation"
-#: models.py:1638
+#: models.py:1704
msgid "Importer - Formater type"
msgstr "Importeur - Type de mise en forme"
-#: models.py:1639
+#: models.py:1705
msgid "Importer - Formater types"
msgstr "Importeur - Types de mise en forme"
-#: models.py:1686 templates/ishtar/dashboards/dashboard_main_detail.html:61
+#: models.py:1752 templates/ishtar/dashboards/dashboard_main_detail.html:61
msgid "Created"
msgstr "Créé"
-#: models.py:1687
+#: models.py:1753
msgid "Analyse in progress"
msgstr "Analyse en cours"
-#: models.py:1688
+#: models.py:1754
msgid "Analysed"
msgstr "Analysé"
-#: models.py:1689
+#: models.py:1755
msgid "Import pending"
msgstr "Import en attente"
-#: models.py:1690
+#: models.py:1756
msgid "Import in progress"
msgstr "Import en cours"
-#: models.py:1691
+#: models.py:1757
msgid "Finished with errors"
-msgstr "Finis avec des erreurs"
+msgstr "Terminé avec des erreurs"
-#: models.py:1692
+#: models.py:1758
msgid "Finished"
msgstr "Terminé"
-#: models.py:1693
+#: models.py:1759
msgid "Archived"
msgstr "Archivé"
-#: models.py:1705
+#: models.py:1771
msgid "Imported file"
msgstr "Fichier importé"
-#: models.py:1708
+#: models.py:1774
msgid "Associated images (zip file)"
msgstr "Images associées (fichier zip)"
-#: models.py:1710
+#: models.py:1776
msgid "Encoding"
msgstr "Codage"
-#: models.py:1712
+#: models.py:1778
msgid "Skip lines"
msgstr "Nombre de lignes d'entête"
-#: models.py:1713 templates/ishtar/import_list.html:47
+#: models.py:1779 templates/ishtar/import_list.html:47
msgid "Error file"
msgstr "Fichier erreur"
-#: models.py:1716
+#: models.py:1782
msgid "Result file"
msgstr "Fichier résultant"
-#: models.py:1719 templates/ishtar/import_list.html:53
+#: models.py:1785 templates/ishtar/import_list.html:53
msgid "Match file"
msgstr "Fichier de correspondance"
-#: models.py:1725
+#: models.py:1791
msgid "Conservative import"
msgstr "Import conservateur"
-#: models.py:1730
+#: models.py:1796
msgid "End date"
msgstr "Date de fin"
-#: models.py:1732
-msgid "Seconds remaining"
+#: models.py:1798
+msgid "Remaining seconds"
msgstr "Secondes restantes"
-#: models.py:1737
+#: models.py:1803
msgid "Import"
msgstr "Import"
-#: models.py:1754
+#: models.py:1820
msgid "Analyse"
msgstr "Analyser"
-#: models.py:1756 models.py:1759
+#: models.py:1822 models.py:1825
msgid "Re-analyse"
msgstr "Analyser de nouveau "
-#: models.py:1757
+#: models.py:1823
msgid "Launch import"
msgstr "Lancer l'import"
-#: models.py:1760
+#: models.py:1826
msgid "Re-import"
-msgstr "re-import"
+msgstr "Ré-importer"
-#: models.py:1761
+#: models.py:1827
msgid "Archive"
msgstr "Archiver"
-#: models.py:1763
+#: models.py:1829
msgid "Unarchive"
-msgstr "Dé-archiver"
+msgstr "Désarchiver"
-#: models.py:1896
+#: models.py:1962
msgid "Organizations"
msgstr "Organisations"
-#: models.py:1898
-msgid "Can view all Organization"
+#: models.py:1964
+msgid "Can view all Organizations"
msgstr "Peut voir toutes les Organisations"
-#: models.py:1899
+#: models.py:1965
msgid "Can view own Organization"
msgstr "Peut voir sa propre Organisation"
-#: models.py:1900
+#: models.py:1966
msgid "Can add own Organization"
msgstr "Peut ajouter sa propre Organisation"
-#: models.py:1902
+#: models.py:1968
msgid "Can change own Organization"
-msgstr "Peut changer sa propre Organisation"
+msgstr "Peut modifier sa propre Organisation"
-#: models.py:1904
+#: models.py:1970
msgid "Can delete own Organization"
msgstr "Peut supprimer sa propre Organisation"
-#: models.py:1939
+#: models.py:2005
msgid "Groups"
msgstr "Groupes"
-#: models.py:1944
+#: models.py:2010
msgid "Person types"
msgstr "Types d'individu"
-#: models.py:1951
+#: models.py:2017
msgid "Mr"
msgstr "M."
-#: models.py:1952
+#: models.py:2018
msgid "Miss"
msgstr "Mlle"
-#: models.py:1953
-msgid "Mr and Miss"
+#: models.py:2019
+msgid "Mr and Mrs"
msgstr "M. et Mme"
-#: models.py:1954
+#: models.py:2020
msgid "Mrs"
msgstr "Mme"
-#: models.py:1955
+#: models.py:2021
msgid "Doctor"
msgstr "Dr."
-#: models.py:1967 models.py:2014
+#: models.py:2033 models.py:2080
msgid "Types"
msgstr "Types"
-#: models.py:1970
+#: models.py:2036
msgid "Is attached to"
msgstr "Est rattaché à"
-#: models.py:1974
+#: models.py:2040
msgid "Persons"
-msgstr "Individus"
+msgstr "Personnes"
-#: models.py:1976
-msgid "Can view all Person"
+#: models.py:2042
+msgid "Can view all Persons"
msgstr "Peut voir toutes les Personnes"
-#: models.py:1977
+#: models.py:2043
msgid "Can view own Person"
msgstr "Peut voir sa propre Personne"
-#: models.py:1978
+#: models.py:2044
msgid "Can add own Person"
msgstr "Peut ajouter sa propre Personne"
-#: models.py:1979
+#: models.py:2045
msgid "Can change own Person"
-msgstr "Peut changer sa propre Personne"
+msgstr "Peut modifier sa propre Personne"
-#: models.py:1980
+#: models.py:2046
msgid "Can delete own Person"
msgstr "Peut supprimer sa propre Personne"
-#: models.py:2106
+#: models.py:2172
msgid "Ishtar user"
msgstr "Utilisateur d'Ishtar"
-#: models.py:2107
+#: models.py:2173
msgid "Ishtar users"
msgstr "Utilisateurs d'Ishtar"
-#: models.py:2152
+#: models.py:2218
msgid "Author types"
msgstr "Types d'auteur"
-#: models.py:2178
+#: models.py:2244
msgid "Source types"
-msgstr "Types de source"
+msgstr "Types de document"
-#: models.py:2184
+#: models.py:2250
msgid "Support types"
msgstr "Types de support"
-#: models.py:2190
+#: models.py:2256
msgid "Formats"
msgstr "Formats"
-#: models.py:2195
+#: models.py:2261
msgid "External ID"
-msgstr "Identifiant extern"
+msgstr "Identifiant externe"
-#: models.py:2198
+#: models.py:2264
msgid "Support"
msgstr "Support"
-#: models.py:2202
+#: models.py:2268
msgid "Scale"
msgstr "Échelle"
-#: models.py:2216
+#: models.py:2282
msgid "Item number"
msgstr "Numéro d'élément"
-#: models.py:2217
+#: models.py:2283
msgid "Ref."
msgstr "Réf."
-#: models.py:2220
+#: models.py:2286
msgid "Internal ref."
msgstr "Réf. interne"
-#: models.py:2261
+#: models.py:2327
msgid "Surface (m2)"
msgstr "Surface (m2)"
-#: models.py:2262 templates/sheet_ope.html:46 templates/sheet_ope.html.py:107
+#: models.py:2328 templates/sheet_ope.html:46 templates/sheet_ope.html.py:107
msgid "Localisation"
msgstr "Localisation"
-#: models.py:2287
+#: models.py:2353
msgid "Is preventive"
msgstr "Est du préventif"
-#: models.py:2291
+#: models.py:2357
msgid "Operation types"
msgstr "Types d'opération"
-#: models.py:2317
+#: models.py:2383
msgid "Preventive"
msgstr "Préventif"
-#: models.py:2318
+#: models.py:2384
msgid "Research"
-msgstr "Recherche"
+msgstr "Programmé"
-#: utils.py:50
+#: utils.py:51
msgid " (...)"
msgstr " (...)"
-#: views.py:90
+#: views.py:95
msgid "New person"
msgstr "Nouvelle personne"
-#: views.py:98
+#: views.py:103
msgid "Person modification"
msgstr "Modification d'une personne"
-#: views.py:104
+#: views.py:109
msgid "Person deletion"
msgstr "Suppression de personne"
-#: views.py:115
+#: views.py:120
msgid "New organization"
msgstr "Nouvelle organisation"
-#: views.py:122
+#: views.py:127
msgid "Organization modification"
msgstr "Modification d'une organisation"
-#: views.py:128
+#: views.py:133
msgid "Organization deletion"
msgstr "Suppression d'une organisation"
-#: views.py:632 templates/base.html:80
+#: views.py:637 templates/base.html:80
#: templates/ishtar/sheet_organization.html:35
#: templatetags/link_to_window.py:16
msgid "Details"
msgstr "Détails"
-#: views.py:860 views.py:914
+#: views.py:868 views.py:922
msgid "Operation not permitted."
msgstr "Opération non permise."
-#: views.py:862
+#: views.py:870
#, python-format
msgid "New %s"
msgstr "Nouveau %s"
-#: views.py:932 views.py:992
+#: views.py:941 views.py:995
msgid "Operations"
msgstr "Opérations"
-#: views.py:1185 templates/ishtar/import_list.html:43
+#: views.py:1184 templates/ishtar/import_list.html:43
msgid "Link unmatched items"
msgstr "Associer les éléments non rapprochés"
-#: views.py:1200
+#: views.py:1199
msgid "Delete import"
msgstr "Suppression de l'import"
-#: views.py:1259 views.py:1275
+#: views.py:1258 views.py:1274
msgid "Corporation manager"
msgstr "Représentant de la personne morale"
@@ -1183,30 +1220,30 @@ msgstr "Représentant de la personne morale"
msgid "Search..."
msgstr "Recherche..."
-#: widgets.py:596 templatetags/window_tables.py:72
+#: widgets.py:602 templatetags/window_tables.py:80
msgid "No results"
msgstr "Pas de résultats"
-#: widgets.py:597 templatetags/window_tables.py:73
+#: widgets.py:603 templatetags/window_tables.py:81
msgid "Loading..."
msgstr "Chargement..."
-#: widgets.py:598
+#: widgets.py:604
msgid "Remove"
msgstr "Enlever"
-#: wizards.py:317 templates/ishtar/import_delete.html:20
+#: wizards.py:318 templates/ishtar/import_delete.html:20
msgid "Yes"
msgstr "Oui"
-#: wizards.py:319
+#: wizards.py:320
msgid "No"
msgstr "Non"
-#: wizards.py:1203
+#: wizards.py:1211
#, python-format
msgid "[%(app_name)s] Account creation/modification"
-msgstr "[%(app_name)s] Ajout - modification du compte"
+msgstr "[%(app_name)s] Création /modification du compte"
#: templates/404.html:14
msgid "Page not found"
@@ -1316,7 +1353,7 @@ msgstr "Code Patriarche pas encore enregistré !"
#: templates/sheet_ope.html:12
msgid "Operation's name:"
-msgstr "Nom de l'opération"
+msgstr "Nom de l'opération :"
#: templates/sheet_ope.html:14
msgid "Edition date:"
@@ -1472,7 +1509,7 @@ msgstr "Actes administratifs"
#: templates/sheet_ope.html:96
msgid "No administrative act associated to this operation"
-msgstr "Pas d'acte administratif associé aux opérations"
+msgstr "Pas d'acte administratif associé à cette opération"
#: templates/sheet_ope.html:100
msgid "Documentation"
@@ -1487,8 +1524,8 @@ msgid "No document associated to this operation"
msgstr "Pas d'opération associée à cette opération"
#: templates/sheet_ope.html:121 templates/sheet_ope.html.py:123
-msgid "Recording Units"
-msgstr "Unités d'Enregistrement :"
+msgid "Context Records"
+msgstr "Unités d'Enregistrement"
#: templates/sheet_ope.html:125
msgid "ID"
@@ -1499,8 +1536,8 @@ msgid "Chronology"
msgstr "Chronologie"
#: templates/sheet_ope.html:142
-msgid "No recording unit associated to this operation"
-msgstr "Pas d'Unité d'Enregistrement associée à ce dossier"
+msgid "No context record associated to this operation"
+msgstr "Pas d'Unité d'Enregistrement associée à cette opération"
#: templates/window.html:38 templates/blocks/JQueryJqGrid.html:25
msgid "Add"
@@ -1546,6 +1583,18 @@ msgstr ""
"Une erreur est intervenue sur cette recherche. Vérifiez la pertinence de vos "
"critères de recherche."
+#: templates/blocks/comma_list.html:1
+msgid "and"
+msgstr "et"
+
+#: templates/blocks/comma_list.html:1
+msgid ", "
+msgstr ", "
+
+#: templates/blocks/comma_list.html:1
+msgid "."
+msgstr "."
+
#: templates/blocks/form_flex_snippet.html:10
#: templates/blocks/form_snippet.html:9
msgid "Help"
@@ -1619,11 +1668,11 @@ msgstr "Élément B"
#: templates/ishtar/merge.html:19
msgid "B is a duplicate of A"
-msgstr "B doublonne A"
+msgstr "B est un doublon de A"
#: templates/ishtar/merge.html:20
msgid "A is a duplicate of B"
-msgstr "A doublonne B"
+msgstr "A est un doublon de B"
#: templates/ishtar/merge.html:21
msgid "Is not duplicate"
@@ -1727,7 +1776,7 @@ msgstr "Associé à"
#: templates/ishtar/dashboards/dashboard_main_detail.html:5
msgid "Numbers"
-msgstr "Nombre"
+msgstr "Nombres"
#: templates/ishtar/dashboards/dashboard_main_detail.html:12
msgid "Change"
@@ -1749,7 +1798,7 @@ msgstr "Afficher comme une image"
#: templates/ishtar/dashboards/dashboard_main_detail.html:24
msgid "Right-click on this image to save it."
-msgstr "Click droit sur l'image pour l'enregistrer."
+msgstr "Clic droit sur l'image pour l'enregistrer."
#: templates/ishtar/dashboards/dashboard_main_detail.html:39
msgid "By years"
@@ -1795,14 +1844,14 @@ msgstr "Voir"
#: templates/ishtar/dashboards/dashboard_main_detail.html:69
msgid "Recent changes"
-msgstr "Derniers changés"
+msgstr "Dernières modifications"
#: templates/ishtar/dashboards/dashboard_main_detail.html:72
msgid "Modified"
-msgstr "Modifier"
+msgstr "Modifié"
#: templates/ishtar/dashboards/dashboard_main_detail.html:108
-msgid "No data for theses criteria."
+msgid "No data for these criteria."
msgstr "Pas de données pour ces critères."
#: templates/ishtar/dashboards/dashboard_main_detail.html:126
@@ -1820,7 +1869,7 @@ msgstr "Vous avez entré les informations suivantes :"
#: templates/ishtar/wizard/confirm_wizard.html:41
msgid "Would you like to save them?"
-msgstr "Voulez-vous sauver ces informations ?"
+msgstr "Voulez-vous sauvegarder ces informations ?"
#: templates/ishtar/wizard/default_wizard.html:35
#: templates/ishtar/wizard/parcels_wizard.html:24
@@ -1828,7 +1877,7 @@ msgstr "Voulez-vous sauver ces informations ?"
#: templates/ishtar/wizard/search.html:20
#: templates/ishtar/wizard/towns_wizard.html:19
msgid "Add/Modify"
-msgstr "Ajouter-Modifier"
+msgstr "Ajouter/Modifier"
#: templates/ishtar/wizard/default_wizard.html:56
msgid ""
@@ -1842,8 +1891,8 @@ msgid ""
"Existing parcels from the operation will be automatically added to the "
"archaeological file."
msgstr ""
-"Les parcelles exisantes de l'opération vont être automatiquement ajoutées au "
-"dossier."
+"Les parcelles existantes de l'opération vont être automatiquement ajoutées "
+"au dossier."
#: templates/ishtar/wizard/parcels_wizard.html:20
#: templates/ishtar/wizard/relations_wizard.html:20
@@ -1941,11 +1990,11 @@ msgstr "Responsable des opérations"
#: templates/ishtar/wizard/wizard_person_deletion.html:54
msgid "Rapporteur CIRA des operations"
-msgstr "Rapporteur CIRA des operations"
+msgstr "Rapporteur CIRA des opérations"
#: templates/ishtar/wizard/wizard_person_deletion.html:62
msgid "Administrativ act: in charge of archaeological operations"
-msgstr "Actes administratifs : responsable des dossiers"
+msgstr "Actes administratifs : responsable des opérations"
#: templates/ishtar/wizard/wizard_person_deletion.html:70
msgid "Administrativ act: scientist in charge"