summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorÉtienne Loks <etienne.loks@iggdrasil.net>2017-05-16 12:27:34 +0200
committerÉtienne Loks <etienne.loks@iggdrasil.net>2017-05-16 12:27:34 +0200
commit8d9998014f3d7591f073dea645e3eee40b4917e6 (patch)
tree6bb5b6aa22d1720b8eb2dc26766dcad9dda1544d
parentdfd6fd2551a9cc54e6b69d4f5d4d4aa328b9cc7a (diff)
parenta25d54c314692843a0086f6c7f9d38c30affce40 (diff)
downloadIshtar-8d9998014f3d7591f073dea645e3eee40b4917e6.tar.bz2
Ishtar-8d9998014f3d7591f073dea645e3eee40b4917e6.zip
Merge branch 'master' into v0.9
-rw-r--r--.gitlab-ci.yml59
-rw-r--r--CHANGES.md18
-rw-r--r--archaeological_context_records/forms.py17
-rw-r--r--archaeological_context_records/locale/django.pot158
-rw-r--r--archaeological_context_records/models.py3
-rw-r--r--archaeological_context_records/tests.py2
-rw-r--r--archaeological_context_records/wizards.py8
-rw-r--r--archaeological_files/locale/django.pot1
-rw-r--r--archaeological_finds/forms.py22
-rw-r--r--archaeological_finds/forms_treatments.py98
-rw-r--r--archaeological_finds/locale/django.pot537
-rw-r--r--archaeological_finds/models_finds.py94
-rw-r--r--archaeological_finds/templates/ishtar/sheet_find.html4
-rw-r--r--archaeological_finds/tests.py76
-rw-r--r--archaeological_operations/locale/django.pot2
-rw-r--r--ishtar_common/fixtures/ishtar-access-control.json1
-rw-r--r--ishtar_common/forms.py2
-rw-r--r--ishtar_common/locale/django.pot634
-rw-r--r--ishtar_common/management/commands/export_access_controls.py89
-rw-r--r--ishtar_common/management/commands/import_access_controls.py106
-rw-r--r--ishtar_common/migrations/0076_auto__add_field_ishtarsiteprofile_find_index.py496
-rw-r--r--ishtar_common/models.py47
-rw-r--r--ishtar_common/static/media/style.css4
-rw-r--r--ishtar_common/templates/ishtar/dashboards/dashboard_main_detail.html2
-rw-r--r--ishtar_common/tests.py11
-rw-r--r--ishtar_common/views.py68
-rw-r--r--translations/de/ishtar_common.po634
-rw-r--r--translations/fr/archaeological_context_records.po158
-rw-r--r--translations/fr/archaeological_finds.po543
-rw-r--r--translations/fr/archaeological_operations.po2
-rw-r--r--translations/fr/ishtar_common.po641
-rw-r--r--version.py2
32 files changed, 2833 insertions, 1706 deletions
diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 1510bd619..14f80da21 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -1,6 +1,6 @@
before_script:
- apt-get update
- - apt-get install -q -y python-pip libpq-dev python-dev libjpeg-dev zlib1g-dev libxml2-dev libxslt1-dev libgeos-dev tidy
+ - apt-get install -q -y git python-pip libpq-dev python-dev libjpeg-dev zlib1g-dev libxml2-dev libxslt1-dev libgeos-dev tidy
- pip install -q -r requirements.txt
- cp Makefile.example Makefile
- cp example_project/local_settings.py.gitlab-ci example_project/local_settings.py
@@ -10,25 +10,54 @@ variables:
POSTGRES_USER: gis
POSTGRES_PASSWORD: "gis"
-services:
- - iggdrasil/postgis-1.5
-
build:
stage: "build"
script: "make build_gitlab"
+ services:
+ - iggdrasil/postgis-1.5
+ tags:
+ - wheezy
only:
- master
- v0.9
- wheezy
+build-v2:
+ stage: "build"
+ script: "make build_gitlab"
+ services:
+ - mdillon/postgis
+ tags:
+ - jessie
+ only:
+ - develop
+ - v2.0
+ - jessie
+
test:
stage: "test"
script: "make test_gitlab"
+ services:
+ - iggdrasil/postgis-1.5
+ tags:
+ - wheezy
only:
- master
- v0.9
- wheezy
+test-v2:
+ stage: "test"
+ script: "make test_gitlab"
+ services:
+ - mdillon/postgis
+ tags:
+ - jessie
+ only:
+ - develop
+ - v2.0
+ - jessie
+
debian:
stage: "test"
script:
@@ -40,5 +69,27 @@ debian:
- apt-get install -q -y --force-yes python-django-ishtar locales-all
- INSTANCE=my_ishtar URL=localhost ishtar-prepare-instance
- dpkg -i python-django-ishtar_*.deb
+ services:
+ - iggdrasil/postgis-1.5
+ tags:
+ - wheezy
only:
- wheezy
+
+debian-v2:
+ stage: "test"
+ script:
+ - apt-get install -q -y devscripts build-essential lintian wget
+ - make deb
+ - wget -O /etc/apt/sources.list.d/iggdrasil.list http://deb.iggdrasil.net/dists/wheezy/iggdrasil.list
+ - wget -O - http://deb.iggdrasil.net/contact@iggdrasil.net.gpg.key | apt-key add -
+ - apt-get update
+ - apt-get install -q -y --force-yes python-django-ishtar locales-all
+ - INSTANCE=my_ishtar URL=localhost ishtar-prepare-instance
+ - dpkg -i python-django-ishtar_*.deb
+ services:
+ - mdillon/postgis
+ tags:
+ - jessie
+ only:
+ - jessie
diff --git a/CHANGES.md b/CHANGES.md
index c02db8910..967fa9d76 100644
--- a/CHANGES.md
+++ b/CHANGES.md
@@ -1,6 +1,24 @@
Ishtar changelog
================
+v0.99.19 (2017-05-16)
+---------------------
+### Features ###
+- Can manage find index by context record
+- Sheet find: put a warning when displaying a find with attached downstream treatment
+- Find search: search by context records (and within relations)
+- Scripts to manage access control import and export
+- Add an access control fixture (specific format for ishtar)
+- Treament file dashboard: add filter form
+- Treament dashboard: add filter form
+
+### Bug fixes ###
+- Treatment form: remove "target_is_basket" field in modification form
+- Float field: fix clean with native float
+- Treatment form: reordering of some fields
+- Access control: fix show own item (not *all* items)
+- get_item: refactoring of access control check
+
v0.99.18 (2017-04-11)
---------------------
diff --git a/archaeological_context_records/forms.py b/archaeological_context_records/forms.py
index 522c69deb..91effb397 100644
--- a/archaeological_context_records/forms.py
+++ b/archaeological_context_records/forms.py
@@ -40,7 +40,7 @@ from ishtar_common.forms import FinalForm, FormSet, \
reverse_lazy, get_form_selection, TableSelect, ManageOldType
from ishtar_common.forms_common import get_town_field, SourceSelect
from archaeological_operations.forms import OperationSelect, ParcelField,\
- RecordRelationsForm as OpeRecordRelationsForm
+ RecordRelationsForm as OpeRecordRelationsForm, RecordRelationsFormSetBase
class OperationFormSelection(forms.Form):
@@ -77,7 +77,7 @@ class RecordSelect(TableSelect):
datings__period = forms.ChoiceField(label=_(u"Period"), choices=[])
unit = forms.ChoiceField(label=_(u"Unit type"), choices=[])
parcel = ParcelField(label=_(u"Parcel (section/number/public domain)"))
- relation_types = forms.MultipleChoiceField(
+ cr_relation_types = forms.MultipleChoiceField(
label=_(u"Search within relations"), choices=[],
widget=forms.CheckboxSelectMultiple)
@@ -87,8 +87,8 @@ class RecordSelect(TableSelect):
self.fields['datings__period'].help_text = Period.get_help()
self.fields['unit'].choices = models.Unit.get_types()
self.fields['unit'].help_text = models.Unit.get_help()
- self.fields['relation_types'].choices = models.RelationType.get_types(
- empty_first=False)
+ self.fields['cr_relation_types'].choices = \
+ models.RelationType.get_types(empty_first=False)
self.fields['ope_relation_types'].choices = OpeRelationType.get_types(
empty_first=False)
@@ -98,9 +98,9 @@ class RecordSelect(TableSelect):
ids.append('parcel_0')
ids.append('parcel_1')
ids.append('parcel_2')
- ids.pop(ids.index('relation_types'))
- for idx, c in enumerate(self.fields['relation_types'].choices):
- ids.append('relation_types_{}'.format(idx))
+ ids.pop(ids.index('cr_relation_types'))
+ for idx, c in enumerate(self.fields['cr_relation_types'].choices):
+ ids.append('cr_relation_types_{}'.format(idx))
ids.pop(ids.index('ope_relation_types'))
for idx, c in enumerate(self.fields['ope_relation_types'].choices):
ids.append('ope_relation_types_{}'.format(idx))
@@ -302,7 +302,8 @@ class RecordRelationsForm(OpeRecordRelationsForm):
if crs:
self.fields['right_record'].choices = [('', '-' * 2)] + crs
-RecordRelationsFormSet = formset_factory(RecordRelationsForm, can_delete=True)
+RecordRelationsFormSet = formset_factory(
+ RecordRelationsForm, can_delete=True, formset=RecordRelationsFormSetBase)
RecordRelationsFormSet.form_label = _(u"Relations")
diff --git a/archaeological_context_records/locale/django.pot b/archaeological_context_records/locale/django.pot
index 2e507ce15..1617d6692 100644
--- a/archaeological_context_records/locale/django.pot
+++ b/archaeological_context_records/locale/django.pot
@@ -8,11 +8,11 @@
msgid ""
msgstr ""
-#: forms.py:47 forms.py:51 models.py:216 models.py:599 wizards.py:77
+#: forms.py:47 forms.py:51 models.py:217 models.py:600 wizards.py:77
msgid "Operation"
msgstr ""
-#: forms.py:59 forms.py:141 models.py:218 models.py:567
+#: forms.py:59 forms.py:141 models.py:219 models.py:568
msgid "ID"
msgstr ""
@@ -52,7 +52,7 @@ msgstr ""
msgid "Search within relations"
msgstr ""
-#: forms.py:111 forms.py:357 views.py:92
+#: forms.py:111 forms.py:358 views.py:92
msgid "Context record search"
msgstr ""
@@ -64,48 +64,48 @@ msgstr ""
msgid "General"
msgstr ""
-#: forms.py:140 models.py:181 models.py:214 models.py:569
+#: forms.py:140 models.py:181 models.py:215 models.py:570
msgid "Parcel"
msgstr ""
-#: forms.py:143 models.py:219 models.py:570
+#: forms.py:143 models.py:220 models.py:571
#: templates/ishtar/sheet_contextrecord.html:30
msgid "Description"
msgstr ""
-#: forms.py:145 models.py:220
+#: forms.py:145 models.py:221
msgid "General comment"
msgstr ""
-#: forms.py:148 models.py:267
+#: forms.py:148 models.py:268
msgid "Excavation technique"
msgstr ""
-#: forms.py:149 models.py:224
+#: forms.py:149 models.py:225
msgid "Length (m)"
msgstr ""
-#: forms.py:150 models.py:225
+#: forms.py:150 models.py:226
msgid "Width (m)"
msgstr ""
-#: forms.py:151 models.py:226
+#: forms.py:151 models.py:227
msgid "Thickness (m)"
msgstr ""
-#: forms.py:152 models.py:228
+#: forms.py:152 models.py:229
msgid "Diameter (m)"
msgstr ""
-#: forms.py:153 models.py:229
+#: forms.py:153 models.py:230
msgid "Depth (m)"
msgstr ""
-#: forms.py:155 models.py:231
+#: forms.py:155 models.py:232
msgid "Depth of appearance (m)"
msgstr ""
-#: forms.py:156 forms.py:376 models.py:241 models.py:568
+#: forms.py:156 forms.py:377 models.py:242 models.py:569
msgid "Context record type"
msgstr ""
@@ -113,7 +113,7 @@ msgstr ""
msgid "Documentation"
msgstr ""
-#: forms.py:162 models.py:233
+#: forms.py:162 models.py:234
msgid "Location"
msgstr ""
@@ -140,7 +140,7 @@ msgstr ""
msgid "Start date"
msgstr ""
-#: forms.py:256 models.py:58 models.py:223
+#: forms.py:256 models.py:58 models.py:224
msgid "End date"
msgstr ""
@@ -152,88 +152,88 @@ msgstr ""
msgid "Dating type"
msgstr ""
-#: forms.py:285 ishtar_menu.py:29 models.py:641
+#: forms.py:285 ishtar_menu.py:29 models.py:642
msgid "Context record"
msgstr ""
-#: forms.py:306
+#: forms.py:307
msgid "Relations"
msgstr ""
-#: forms.py:310 forms.py:318 models.py:244
+#: forms.py:311 forms.py:319 models.py:245
#: templates/ishtar/sheet_contextrecord.html:44
msgid "Interpretation"
msgstr ""
-#: forms.py:314
+#: forms.py:315
msgid "Comments on dating"
msgstr ""
-#: forms.py:316 models.py:243
+#: forms.py:317 models.py:244
msgid "Filling"
msgstr ""
-#: forms.py:320 models.py:264
+#: forms.py:321 models.py:265
msgid "Activity"
msgstr ""
-#: forms.py:322 models.py:262
+#: forms.py:323 models.py:263
msgid "Identification"
msgstr ""
-#: forms.py:324 models.py:247
+#: forms.py:325 models.py:248
msgid "TAQ"
msgstr ""
-#: forms.py:325 models.py:251
+#: forms.py:326 models.py:252
msgid "Estimated TAQ"
msgstr ""
-#: forms.py:327 models.py:254
+#: forms.py:328 models.py:255
msgid "TPQ"
msgstr ""
-#: forms.py:328 models.py:258
+#: forms.py:329 models.py:259
msgid "Estimated TPQ"
msgstr ""
-#: forms.py:343
+#: forms.py:344
msgid "Operation search"
msgstr ""
-#: forms.py:345
+#: forms.py:346
msgid "You should select an operation."
msgstr ""
-#: forms.py:350
+#: forms.py:351
msgid "Would you like to delete this context record?"
msgstr ""
-#: forms.py:359
+#: forms.py:360
msgid "You should select a context record."
msgstr ""
-#: forms.py:364
+#: forms.py:365
msgid "Year of the operation"
msgstr ""
-#: forms.py:366
+#: forms.py:367
msgid "Numeric reference"
msgstr ""
-#: forms.py:372
+#: forms.py:373
msgid "Town of the operation"
msgstr ""
-#: forms.py:374
+#: forms.py:375
msgid "Period of the context record"
msgstr ""
-#: forms.py:389
+#: forms.py:390
msgid "Documentation search"
msgstr ""
-#: forms.py:391
+#: forms.py:392
msgid "You should select a document."
msgstr ""
@@ -321,7 +321,7 @@ msgstr ""
msgid "Documentation types"
msgstr ""
-#: models.py:172 models.py:571
+#: models.py:172 models.py:572
msgid "Periods"
msgstr ""
@@ -345,172 +345,172 @@ msgstr ""
msgid "Parcel (year)"
msgstr ""
-#: models.py:211
+#: models.py:212
msgid "External ID"
msgstr ""
-#: models.py:213
+#: models.py:214
msgid "External ID is set automatically"
msgstr ""
-#: models.py:221
+#: models.py:222
msgid "Date d'ouverture"
msgstr ""
-#: models.py:234
+#: models.py:235
msgid "A short description of the location of the context record"
msgstr ""
-#: models.py:239
+#: models.py:240
msgid "Comment on datings"
msgstr ""
-#: models.py:248
+#: models.py:249
msgid ""
"\"Terminus Ante Quem\" the context record can't have been created after this "
"date"
msgstr ""
-#: models.py:252
+#: models.py:253
msgid "Estimation of a \"Terminus Ante Quem\""
msgstr ""
-#: models.py:255
+#: models.py:256
msgid ""
"\"Terminus Post Quem\" the context record can't have been created before "
"this date"
msgstr ""
-#: models.py:259
+#: models.py:260
msgid "Estimation of a \"Terminus Post Quem\""
msgstr ""
-#: models.py:270
+#: models.py:271
msgid "Point"
msgstr ""
-#: models.py:271
+#: models.py:272
msgid "Polygon"
msgstr ""
-#: models.py:272
+#: models.py:273
msgid "Cached name"
msgstr ""
-#: models.py:276 models.py:277 templates/ishtar/sheet_contextrecord.html:4
+#: models.py:277 models.py:278 templates/ishtar/sheet_contextrecord.html:4
msgid "Context Record"
msgstr ""
-#: models.py:279
+#: models.py:280
msgid "Can view all Context Records"
msgstr ""
-#: models.py:281
+#: models.py:282
msgid "Can view own Context Record"
msgstr ""
-#: models.py:283
+#: models.py:284
msgid "Can add own Context Record"
msgstr ""
-#: models.py:285
+#: models.py:286
msgid "Can change own Context Record"
msgstr ""
-#: models.py:287
+#: models.py:288
msgid "Can delete own Context Record"
msgstr ""
-#: models.py:297
+#: models.py:298
msgctxt "short"
msgid "Context record"
msgstr ""
-#: models.py:501
+#: models.py:502
msgid "Inverse relation"
msgstr ""
-#: models.py:505 models.py:528 models.py:566
+#: models.py:506 models.py:529 models.py:567
msgid "Relation type"
msgstr ""
-#: models.py:506
+#: models.py:507
msgid "Relation types"
msgstr ""
-#: models.py:523
+#: models.py:524
msgid "ID (left)"
msgstr ""
-#: models.py:524
+#: models.py:525
msgid "Context record type (left)"
msgstr ""
-#: models.py:525
+#: models.py:526
msgid "Parcel (left)"
msgstr ""
-#: models.py:526
+#: models.py:527
msgid "Description (left)"
msgstr ""
-#: models.py:527
+#: models.py:528
msgid "Periods (left)"
msgstr ""
-#: models.py:529
+#: models.py:530
msgid "ID (right)"
msgstr ""
-#: models.py:530
+#: models.py:531
msgid "Context record type (right)"
msgstr ""
-#: models.py:531
+#: models.py:532
msgid "Parcel (right)"
msgstr ""
-#: models.py:532
+#: models.py:533
msgid "Description (right)"
msgstr ""
-#: models.py:533
+#: models.py:534
msgid "Periods (right)"
msgstr ""
-#: models.py:542
+#: models.py:543
msgid "Record relation"
msgstr ""
-#: models.py:543
+#: models.py:544
msgid "Record relations"
msgstr ""
-#: models.py:626
+#: models.py:627
msgid "Context record documentation"
msgstr ""
-#: models.py:627
+#: models.py:628
msgid "Context record documentations"
msgstr ""
-#: models.py:630
+#: models.py:631
msgid "Can view all Context record sources"
msgstr ""
-#: models.py:632
+#: models.py:633
msgid "Can view own Context record source"
msgstr ""
-#: models.py:634
+#: models.py:635
msgid "Can add own Context record source"
msgstr ""
-#: models.py:636
+#: models.py:637
msgid "Can change own Context record source"
msgstr ""
-#: models.py:638
+#: models.py:639
msgid "Can delete own Context record source"
msgstr ""
diff --git a/archaeological_context_records/models.py b/archaeological_context_records/models.py
index bb3afc899..855ea7d5c 100644
--- a/archaeological_context_records/models.py
+++ b/archaeological_context_records/models.py
@@ -202,7 +202,8 @@ class ContextRecord(BaseHistorizedItem, ImageModel, OwnPerms,
'archaeological_sites': 'operation__archaeological_sites__pk',
'cached_label': 'cached_label__icontains',
}
- RELATION_TYPES_PREFIX = {'ope_relation_types': 'operation__'}
+ RELATION_TYPES_PREFIX = {'ope_relation_types': 'operation__',
+ 'cr_relation_types': ''}
RELATIVE_SESSION_NAMES = [
('operation', 'operation__pk'),
('file', 'operation__associated_file__pk')]
diff --git a/archaeological_context_records/tests.py b/archaeological_context_records/tests.py
index e697459b5..df05f4898 100644
--- a/archaeological_context_records/tests.py
+++ b/archaeological_context_records/tests.py
@@ -369,7 +369,7 @@ class ContextRecordSearchTest(ContextRecordInit, TestCase):
# test search between relations
response = c.get(reverse('get-contextrecord'),
{'label': 'cr 1',
- 'relation_types_0': self.cr_rel_type.pk})
+ 'cr_relation_types_0': self.cr_rel_type.pk})
self.assertEqual(json.loads(response.content)['total'], 2)
# test search between related operations
first_ope = self.operations[0]
diff --git a/archaeological_context_records/wizards.py b/archaeological_context_records/wizards.py
index fd48ef3d9..cbeb1c1d2 100644
--- a/archaeological_context_records/wizards.py
+++ b/archaeological_context_records/wizards.py
@@ -134,6 +134,14 @@ class RecordModifWizard(RecordWizard):
model = models.ContextRecord
filter_owns = {'selec-record_modification': ['pk']}
+ def get_form_kwargs(self, step, **kwargs):
+ kwargs = super(RecordModifWizard, self).get_form_kwargs(
+ step, **kwargs)
+ if step != "relations-record_modification":
+ return kwargs
+ kwargs["left_record"] = self.get_current_object()
+ return kwargs
+
class RecordDeletionWizard(DeletionWizard):
model = models.ContextRecord
diff --git a/archaeological_files/locale/django.pot b/archaeological_files/locale/django.pot
index 2284a6fb5..c9312712c 100644
--- a/archaeological_files/locale/django.pot
+++ b/archaeological_files/locale/django.pot
@@ -6,6 +6,7 @@
# Valérie-Emma Leroux <emma@iggdrasil.net>, 2016. #zanata
# Étienne Loks <etienne.loks@iggdrasil.net>, 2016. #zanata
# Valérie-Emma Leroux <emma@iggdrasil.net>, 2017. #zanata
+# Étienne Loks <etienne.loks@iggdrasil.net>, 2017. #zanata
msgid ""
msgstr ""
diff --git a/archaeological_finds/forms.py b/archaeological_finds/forms.py
index bdb602606..2e7cc75f5 100644
--- a/archaeological_finds/forms.py
+++ b/archaeological_finds/forms.py
@@ -36,7 +36,7 @@ from ishtar_common.models import valid_id, valid_ids, get_current_profile, \
from archaeological_operations.models import Period, ArchaeologicalSite, \
RelationType as OpeRelationType
from archaeological_context_records.models import DatingType, DatingQuality, \
- ContextRecord
+ ContextRecord, RelationType as CRRelationType
import models
from ishtar_common.forms import FormSet, FloatField, \
@@ -61,7 +61,8 @@ from archaeological_finds.forms_treatments import TreatmentSelect, \
AdministrativeActTreatmentFileFormSelection, \
AdministrativeActTreatmentFileModifForm, SourceTreatmentFormSelection, \
SourceTreatmentFileFormSelection, TreatmentSourceFormSelection, \
- TreatmentFileSourceFormSelection
+ TreatmentFileSourceFormSelection, DashboardForm as DashboardTreatmentForm, \
+ DashboardTreatmentFileForm
__all__ = [
'TreatmentSelect', 'TreatmentFormSelection', 'BaseTreatmentForm',
@@ -75,7 +76,8 @@ __all__ = [
'AdministrativeActTreatmentFormSelection',
'AdministrativeActTreatmentFileModifForm', 'SourceTreatmentFormSelection',
'SourceTreatmentFileFormSelection', 'TreatmentSourceFormSelection',
- 'TreatmentFileSourceFormSelection',
+ 'TreatmentFileSourceFormSelection', 'DashboardTreatmentForm',
+ 'DashboardTreatmentFileForm',
'RecordFormSelection', 'FindForm', 'DateForm', 'DatingFormSet',
'FindSelect', 'FindFormSelection', 'FindFormSelectionWarehouseModule',
'MultipleFindFormSelection', 'MultipleFindFormSelectionWarehouseModule',
@@ -359,9 +361,18 @@ class FindSelect(TableSelect):
reverse_lazy('autocomplete-archaeologicalsite'),
associated_model=ArchaeologicalSite),
validators=[valid_id(ArchaeologicalSite)])
+ base_finds__context_record = forms.IntegerField(
+ label=_("Context record"),
+ widget=widgets.JQueryAutoComplete(
+ reverse_lazy('autocomplete-contextrecord'),
+ associated_model=ContextRecord),
+ validators=[valid_id(ContextRecord)])
ope_relation_types = forms.MultipleChoiceField(
label=_(u"Search within related operations"), choices=[],
widget=widgets.CheckboxSelectMultiple)
+ cr_relation_types = forms.MultipleChoiceField(
+ label=_(u"Search within related context records"), choices=[],
+ widget=widgets.CheckboxSelectMultiple)
datings__period = forms.ChoiceField(label=_(u"Period"), choices=[])
material_types = forms.ChoiceField(label=_(u"Material type"), choices=[])
object_types = forms.ChoiceField(label=_(u"Object type"), choices=[])
@@ -415,12 +426,17 @@ class FindSelect(TableSelect):
models.RemarkabilityType.get_help()
self.fields['ope_relation_types'].choices = OpeRelationType.get_types(
empty_first=False)
+ self.fields['cr_relation_types'].choices = CRRelationType.get_types(
+ empty_first=False)
def get_input_ids(self):
ids = super(FindSelect, self).get_input_ids()
ids.pop(ids.index('ope_relation_types'))
for idx, c in enumerate(self.fields['ope_relation_types'].choices):
ids.append('ope_relation_types_{}'.format(idx))
+ ids.pop(ids.index('cr_relation_types'))
+ for idx, c in enumerate(self.fields['cr_relation_types'].choices):
+ ids.append('cr_relation_types_{}'.format(idx))
return ids
diff --git a/archaeological_finds/forms_treatments.py b/archaeological_finds/forms_treatments.py
index b3ad8b115..83fb11028 100644
--- a/archaeological_finds/forms_treatments.py
+++ b/archaeological_finds/forms_treatments.py
@@ -129,12 +129,12 @@ class BaseTreatmentForm(ManageOldType, forms.Form):
validators=[valid_id(Container)], required=False)
external_id = forms.CharField(
label=_(u"External ref."), max_length=200, required=False)
- comment = forms.CharField(label=_(u"Comment"),
- widget=forms.Textarea, required=False)
- description = forms.CharField(label=_(u"Description"),
- widget=forms.Textarea, required=False)
goal = forms.CharField(label=_(u"Goal"),
widget=forms.Textarea, required=False)
+ description = forms.CharField(label=_(u"Description"),
+ widget=forms.Textarea, required=False)
+ comment = forms.CharField(label=_(u"Comment"),
+ widget=forms.Textarea, required=False)
start_date = forms.DateField(label=_(u"Start date"), required=False,
widget=widgets.JQueryDate)
end_date = forms.DateField(label=_(u"Closing date"), required=False,
@@ -239,6 +239,7 @@ class TreatmentModifyForm(BaseTreatmentForm):
def __init__(self, *args, **kwargs):
super(TreatmentModifyForm, self).__init__(*args, **kwargs)
+ self.fields.pop('target_is_basket')
self.fields.keyOrder.pop(self.fields.keyOrder.index('index'))
self.fields.keyOrder.insert(
self.fields.keyOrder.index('year') + 1, 'index')
@@ -277,6 +278,50 @@ class TreatmentDeletionForm(FinalForm):
u"lost!")
confirm_end_msg = _(u"Would you like to delete this treatment?")
+SLICING = (("month", _(u"months")), ('year', _(u"years")),)
+
+DATE_SOURCE = (("start", _(u"Start date")), ("end", _(u"Closing date")),)
+
+
+class DashboardForm(forms.Form):
+ slicing = forms.ChoiceField(label=_("Slicing"), choices=SLICING,
+ required=False)
+ date_source = forms.ChoiceField(
+ label=_("Date get from"), choices=DATE_SOURCE, required=False)
+ treatment_type = forms.ChoiceField(label=_("Treatment type"), choices=[],
+ required=False)
+ after = forms.DateField(label=_(u"Date after"),
+ widget=widgets.JQueryDate, required=False)
+ before = forms.DateField(label=_(u"Date before"),
+ widget=widgets.JQueryDate, required=False)
+
+ def __init__(self, *args, **kwargs):
+ if 'prefix' not in kwargs:
+ kwargs['prefix'] = 'treatments'
+ super(DashboardForm, self).__init__(*args, **kwargs)
+ self.fields['treatment_type'].choices = \
+ models.TreatmentType.get_types()
+
+ def get_date_source(self):
+ date_source = 'start'
+ if hasattr(self, 'cleaned_data') and \
+ self.cleaned_data.get('date_source'):
+ date_source = self.cleaned_data['date_source']
+ return date_source
+
+ def get_filter(self):
+ if not hasattr(self, 'cleaned_data') or not self.cleaned_data:
+ return {}
+ fltr = {}
+ date_source = self.get_date_source()
+ if self.cleaned_data.get('treatment_type'):
+ fltr['treatment_types__pk'] = self.cleaned_data['treatment_type']
+ if self.cleaned_data.get('after'):
+ fltr[date_source + '_date__gte'] = self.cleaned_data['after']
+ if self.cleaned_data.get('before'):
+ fltr[date_source + '_date__lte'] = self.cleaned_data['before']
+ return fltr
+
# administrative act treatment
@@ -484,6 +529,51 @@ class TreatmentFileDeletionForm(FinalForm):
confirm_msg = _(u"Are you sure you want to delete this treatment request?")
confirm_end_msg = _(u"Would you like to delete this treatment request?")
+DATE_SOURCE_FILE = (
+ ("creation", _(u"Creation date")),
+ ("reception", _(u"Reception date")),
+ ("end", _(u"Closing date")),)
+
+
+class DashboardTreatmentFileForm(forms.Form):
+ slicing = forms.ChoiceField(label=_("Slicing"), choices=SLICING,
+ required=False)
+ date_source = forms.ChoiceField(
+ label=_("Date get from"), choices=DATE_SOURCE_FILE, required=False)
+ treatmentfile_type = forms.ChoiceField(label=_("Treatment request type"),
+ choices=[], required=False)
+ after = forms.DateField(label=_(u"Date after"),
+ widget=widgets.JQueryDate, required=False)
+ before = forms.DateField(label=_(u"Date before"),
+ widget=widgets.JQueryDate, required=False)
+
+ def __init__(self, *args, **kwargs):
+ if 'prefix' not in kwargs:
+ kwargs['prefix'] = 'treatmentfiles'
+ super(DashboardTreatmentFileForm, self).__init__(*args, **kwargs)
+ self.fields['treatmentfile_type'].choices = \
+ models.TreatmentFileType.get_types()
+
+ def get_date_source(self):
+ date_source = 'creation'
+ if hasattr(self, 'cleaned_data') and \
+ self.cleaned_data.get('date_source'):
+ date_source = self.cleaned_data['date_source']
+ return date_source
+
+ def get_filter(self):
+ if not hasattr(self, 'cleaned_data') or not self.cleaned_data:
+ return {}
+ fltr = {}
+ date_source = self.get_date_source()
+ if self.cleaned_data.get('treatmentfile_type'):
+ fltr['type__pk'] = self.cleaned_data['treatmentfile_type']
+ if self.cleaned_data.get('after'):
+ fltr[date_source + '_date__gte'] = self.cleaned_data['after']
+ if self.cleaned_data.get('before'):
+ fltr[date_source + '_date__lte'] = self.cleaned_data['before']
+ return fltr
+
class AdministrativeActTreatmentFileSelect(TableSelect):
year = forms.IntegerField(label=_("Year"))
diff --git a/archaeological_finds/locale/django.pot b/archaeological_finds/locale/django.pot
index d2c407d1c..f3b087244 100644
--- a/archaeological_finds/locale/django.pot
+++ b/archaeological_finds/locale/django.pot
@@ -9,161 +9,161 @@
msgid ""
msgstr ""
-#: forms.py:93 forms.py:97 models_finds.py:519 wizards.py:64
+#: forms.py:95 forms.py:99 forms.py:365 models_finds.py:538 wizards.py:64
msgid "Context record"
msgstr ""
-#: forms.py:126 ishtar_menu.py:32 models_finds.py:683 models_finds.py:1114
-#: models_finds.py:1135 models_treatments.py:298
+#: forms.py:128 ishtar_menu.py:32 models_finds.py:705 models_finds.py:1160
+#: models_finds.py:1181 models_treatments.py:298
#: templates/ishtar/sheet_find.html:5
msgid "Find"
msgstr ""
-#: forms.py:140 forms.py:337 forms.py:605 models_finds.py:150
-#: models_finds.py:613
+#: forms.py:142 forms.py:347 forms.py:629 models_finds.py:151
+#: models_finds.py:635
msgid "Free ID"
msgstr ""
-#: forms.py:142 models_finds.py:666
+#: forms.py:144 models_finds.py:688
msgid "Previous ID"
msgstr ""
-#: forms.py:143 forms.py:368 forms_treatments.py:134 models_finds.py:154
-#: models_finds.py:614 models_treatments.py:128
+#: forms.py:145 forms.py:387 forms_treatments.py:134 models_finds.py:155
+#: models_finds.py:636 models_treatments.py:128
msgid "Description"
msgstr ""
-#: forms.py:146 forms.py:370 models_finds.py:163
+#: forms.py:148 forms.py:389 models_finds.py:164
msgid "Batch/object"
msgstr ""
-#: forms.py:148 models_finds.py:643
+#: forms.py:150 models_finds.py:665
msgid "Is complete?"
msgstr ""
-#: forms.py:151 forms.py:358 forms.py:609 models_finds.py:50
+#: forms.py:153 forms.py:377 forms.py:633 models_finds.py:51
msgid "Material type"
msgstr ""
-#: forms.py:154 forms.py:362 models_finds.py:62 models_finds.py:618
+#: forms.py:155 forms.py:381 models_finds.py:63 models_finds.py:640
msgid "Conservatory state"
msgstr ""
-#: forms.py:157 models_finds.py:620
+#: forms.py:158 models_finds.py:642
msgid "Conservatory comment"
msgstr ""
-#: forms.py:160 models_finds.py:112 models_finds.py:646
+#: forms.py:161 models_finds.py:113 models_finds.py:668
msgid "Object types"
msgstr ""
-#: forms.py:164 forms.py:361 models_finds.py:71
+#: forms.py:164 forms.py:380 models_finds.py:72
msgid "Preservation type"
msgstr ""
-#: forms.py:167 forms.py:364 models_finds.py:648
+#: forms.py:167 forms.py:383 models_finds.py:670
msgid "Integrity / interest"
msgstr ""
-#: forms.py:170 forms.py:366 models_finds.py:651
+#: forms.py:170 forms.py:385 models_finds.py:673
msgid "Remarkability"
msgstr ""
-#: forms.py:173 models_finds.py:168
+#: forms.py:173 models_finds.py:169
msgid "Point of topographic reference"
msgstr ""
-#: forms.py:176 models_finds.py:170 templates/ishtar/sheet_find.html:205
+#: forms.py:176 models_finds.py:171 templates/ishtar/sheet_find.html:209
msgid "X"
msgstr ""
-#: forms.py:177 models_finds.py:171 templates/ishtar/sheet_find.html:206
+#: forms.py:177 models_finds.py:172 templates/ishtar/sheet_find.html:210
msgid "Y"
msgstr ""
-#: forms.py:178 models_finds.py:172 templates/ishtar/sheet_find.html:207
+#: forms.py:178 models_finds.py:173 templates/ishtar/sheet_find.html:211
msgid "Z"
msgstr ""
-#: forms.py:180 models_finds.py:180
+#: forms.py:180 models_finds.py:181
msgid "Spatial Reference System"
msgstr ""
-#: forms.py:183 models_finds.py:173
+#: forms.py:183 models_finds.py:174
msgid "Estimated error for X"
msgstr ""
-#: forms.py:185 models_finds.py:175
+#: forms.py:185 models_finds.py:176
msgid "Estimated error for Y"
msgstr ""
-#: forms.py:187 models_finds.py:177
+#: forms.py:187 models_finds.py:178
msgid "Estimated error for Z"
msgstr ""
-#: forms.py:188 models_finds.py:655
+#: forms.py:188 models_finds.py:677
msgid "Length (cm)"
msgstr ""
-#: forms.py:189 models_finds.py:656
+#: forms.py:189 models_finds.py:678
msgid "Width (cm)"
msgstr ""
-#: forms.py:190 models_finds.py:657
+#: forms.py:190 models_finds.py:679
msgid "Height (cm)"
msgstr ""
-#: forms.py:191 models_finds.py:658
+#: forms.py:191 models_finds.py:680
msgid "Diameter (cm)"
msgstr ""
-#: forms.py:192 models_finds.py:659
+#: forms.py:192 models_finds.py:681
msgid "Thickness (cm)"
msgstr ""
-#: forms.py:193 forms.py:610 models_finds.py:625
+#: forms.py:193 forms.py:634 models_finds.py:647
msgid "Volume (l)"
msgstr ""
-#: forms.py:194 forms.py:611 models_finds.py:626
+#: forms.py:194 forms.py:635 models_finds.py:648
msgid "Weight (g)"
msgstr ""
-#: forms.py:196 models_finds.py:660
+#: forms.py:196 models_finds.py:682
msgid "Dimensions comment"
msgstr ""
-#: forms.py:197 forms.py:612 models_finds.py:629
+#: forms.py:197 forms.py:636 models_finds.py:651
msgid "Find number"
msgstr ""
-#: forms.py:199 models_finds.py:654
+#: forms.py:199 models_finds.py:676
msgid "Minimum number of individuals (MNI)"
msgstr ""
-#: forms.py:200 models_finds.py:662
+#: forms.py:200 models_finds.py:684
msgid "Mark"
msgstr ""
-#: forms.py:201 forms.py:371 models_finds.py:668
+#: forms.py:201 forms.py:390 models_finds.py:690
msgid "Check"
msgstr ""
-#: forms.py:203 models_finds.py:670
+#: forms.py:203 models_finds.py:692
msgid "Check date"
msgstr ""
-#: forms.py:204 forms_treatments.py:132 forms_treatments.py:434
-#: models_finds.py:155 models_finds.py:663 models_treatments.py:127
+#: forms.py:204 forms_treatments.py:136 forms_treatments.py:479
+#: models_finds.py:156 models_finds.py:685 models_treatments.py:127
#: models_treatments.py:511
msgid "Comment"
msgstr ""
-#: forms.py:207 models_finds.py:664
+#: forms.py:207 models_finds.py:686
msgid "Comment on dating"
msgstr ""
-#: forms.py:208 models_finds.py:672
+#: forms.py:208 models_finds.py:694
msgid "Estimated value"
msgstr ""
@@ -178,181 +178,186 @@ msgid ""
"p>"
msgstr ""
-#: forms.py:285
+#: forms.py:295
msgid "You should at least provide X, Y and the spatial reference system used."
msgstr ""
-#: forms.py:294
+#: forms.py:304
msgid "Coordinates are not relevant for the spatial reference system used: {}."
msgstr ""
-#: forms.py:300 forms.py:331 models_finds.py:637
+#: forms.py:310 forms.py:341 models_finds.py:659
msgid "Dating"
msgstr ""
-#: forms.py:305 forms.py:357
+#: forms.py:315 forms.py:376
msgid "Period"
msgstr ""
-#: forms.py:306 forms_treatments.py:138 forms_treatments.py:436
-#: models_finds.py:1140 models_treatments.py:130 models_treatments.py:309
-#: templates/ishtar/sheet_find.html:91 templates/ishtar/sheet_find.html:133
+#: forms.py:316 forms_treatments.py:138 forms_treatments.py:283
+#: forms_treatments.py:481 models_finds.py:1186 models_treatments.py:130
+#: models_treatments.py:309 templates/ishtar/sheet_find.html:95
+#: templates/ishtar/sheet_find.html:137
msgid "Start date"
msgstr ""
-#: forms.py:308 models_finds.py:1141 models_treatments.py:310
-#: templates/ishtar/sheet_find.html:92 templates/ishtar/sheet_find.html:134
+#: forms.py:318 models_finds.py:1187 models_treatments.py:310
+#: templates/ishtar/sheet_find.html:96 templates/ishtar/sheet_find.html:138
msgid "End date"
msgstr ""
-#: forms.py:309
+#: forms.py:319
msgid "Quality"
msgstr ""
-#: forms.py:311
+#: forms.py:321
msgid "Dating type"
msgstr ""
-#: forms.py:313
+#: forms.py:323
msgid "Precise dating"
msgstr ""
-#: forms.py:335 models_finds.py:187
+#: forms.py:345 models_finds.py:188
msgid "Short ID"
msgstr ""
-#: forms.py:336 models_finds.py:190
+#: forms.py:346 models_finds.py:191
msgid "Complete ID"
msgstr ""
-#: forms.py:340 forms_treatments.py:54 forms_treatments.py:96
-#: forms_treatments.py:284 forms_treatments.py:356 forms_treatments.py:406
-#: forms_treatments.py:489 models_treatments.py:103 models_treatments.py:483
+#: forms.py:350 forms_treatments.py:54 forms_treatments.py:96
+#: forms_treatments.py:329 forms_treatments.py:401 forms_treatments.py:451
+#: forms_treatments.py:579 models_treatments.py:103 models_treatments.py:483
msgid "Year"
msgstr ""
-#: forms.py:342
+#: forms.py:352
msgid "Operation's number (index by year)"
msgstr ""
-#: forms.py:345
+#: forms.py:355
msgid "Code PATRIARCHE"
msgstr ""
-#: forms.py:349
+#: forms.py:359
msgid "Archaeological site"
msgstr ""
-#: forms.py:355
+#: forms.py:371
msgid "Search within related operations"
msgstr ""
-#: forms.py:359 models_finds.py:111
+#: forms.py:374
+msgid "Search within related context records"
+msgstr ""
+
+#: forms.py:378 models_finds.py:112
msgid "Object type"
msgstr ""
-#: forms.py:372 forms_treatments.py:57
+#: forms.py:391 forms_treatments.py:57
msgid "Has an image?"
msgstr ""
-#: forms.py:421
+#: forms.py:445
msgid "Warehouse (location)"
msgstr ""
-#: forms.py:427
+#: forms.py:451
msgid "Warehouse (responsible)"
msgstr ""
-#: forms.py:432
+#: forms.py:456
msgid "Container ID"
msgstr ""
-#: forms.py:433
+#: forms.py:457
msgid "Container ref."
msgstr ""
-#: forms.py:437 forms.py:460 views.py:149
+#: forms.py:461 forms.py:484 views.py:149
msgid "Find search"
msgstr ""
-#: forms.py:485 templates/ishtar/sheet_treatment.html:46
+#: forms.py:509 templates/ishtar/sheet_treatment.html:46
msgid "Upstream finds"
msgstr ""
-#: forms.py:487 models_finds.py:684
+#: forms.py:511 models_finds.py:706
msgid "Finds"
msgstr ""
-#: forms.py:499
+#: forms.py:523
msgid "You should at least select one archaeological find."
msgstr ""
-#: forms.py:602
+#: forms.py:626
msgid "Resulting find"
msgstr ""
-#: forms.py:607
+#: forms.py:631
msgid "Precise description"
msgstr ""
-#: forms.py:622
+#: forms.py:646
msgid "Resulting finds"
msgstr ""
-#: forms.py:627
+#: forms.py:651
msgid "Would you like to delete this find?"
msgstr ""
-#: forms.py:631 models_treatments.py:91
+#: forms.py:655 models_treatments.py:91
msgid "Upstream find"
msgstr ""
-#: forms.py:644
+#: forms.py:668
msgid "Archaeological find search"
msgstr ""
-#: forms.py:646
+#: forms.py:670
msgid "You should select an archaeological find."
msgstr ""
-#: forms.py:651
+#: forms.py:675
msgid "Year of the operation"
msgstr ""
-#: forms.py:653
+#: forms.py:677
msgid "Numeric reference"
msgstr ""
-#: forms.py:660
+#: forms.py:684
msgid "Period of the archaeological find"
msgstr ""
-#: forms.py:662
+#: forms.py:686
msgid "Material type of the archaeological find"
msgstr ""
-#: forms.py:664
+#: forms.py:688
msgid "Description of the archaeological find"
msgstr ""
-#: forms.py:676 forms_treatments.py:590 forms_treatments.py:616
+#: forms.py:700 forms_treatments.py:680 forms_treatments.py:706
msgid "Documentation search"
msgstr ""
-#: forms.py:678 forms_treatments.py:592 forms_treatments.py:618
+#: forms.py:702 forms_treatments.py:682 forms_treatments.py:708
msgid "You should select a document."
msgstr ""
-#: forms.py:695
+#: forms.py:719
msgid "Another basket already exists with this name."
msgstr ""
-#: forms.py:705 forms.py:709 forms_treatments.py:175 ishtar_menu.py:57
+#: forms.py:729 forms.py:733 forms_treatments.py:175 ishtar_menu.py:57
msgid "Basket"
msgstr ""
#: forms_treatments.py:52 forms_treatments.py:92 models_treatments.py:99
-#: templates/ishtar/sheet_find.html:85 templates/ishtar/sheet_find.html:127
+#: templates/ishtar/sheet_find.html:89 templates/ishtar/sheet_find.html:131
msgid "Label"
msgstr ""
@@ -360,20 +365,20 @@ msgstr ""
msgid "Other ref."
msgstr ""
-#: forms_treatments.py:55 forms_treatments.py:237 forms_treatments.py:285
-#: forms_treatments.py:348 forms_treatments.py:357 forms_treatments.py:459
-#: forms_treatments.py:490 forms_treatments.py:557 models_treatments.py:105
+#: forms_treatments.py:55 forms_treatments.py:237 forms_treatments.py:330
+#: forms_treatments.py:393 forms_treatments.py:402 forms_treatments.py:504
+#: forms_treatments.py:580 forms_treatments.py:647 models_treatments.py:105
#: models_treatments.py:485
msgid "Index"
msgstr ""
-#: forms_treatments.py:56 forms_treatments.py:101 forms_treatments.py:301
-#: forms_treatments.py:578 models_treatments.py:56 models_treatments.py:110
-#: models_treatments.py:308
+#: forms_treatments.py:56 forms_treatments.py:101 forms_treatments.py:291
+#: forms_treatments.py:346 forms_treatments.py:668 models_treatments.py:56
+#: models_treatments.py:110 models_treatments.py:308
msgid "Treatment type"
msgstr ""
-#: forms_treatments.py:68 forms_treatments.py:560 views.py:398
+#: forms_treatments.py:68 forms_treatments.py:650 views.py:398
msgid "Treatment search"
msgstr ""
@@ -382,7 +387,7 @@ msgid "Base treatment"
msgstr ""
#: forms_treatments.py:103 models_treatments.py:93 models_treatments.py:112
-#: templates/ishtar/sheet_find.html:87 templates/ishtar/sheet_find.html:129
+#: templates/ishtar/sheet_find.html:91 templates/ishtar/sheet_find.html:133
msgid "State"
msgstr ""
@@ -390,7 +395,7 @@ msgstr ""
msgid "Target"
msgstr ""
-#: forms_treatments.py:107 forms_treatments.py:417 models_treatments.py:120
+#: forms_treatments.py:107 forms_treatments.py:462 models_treatments.py:120
msgid "Responsible"
msgstr ""
@@ -406,16 +411,16 @@ msgstr ""
msgid "Container (relevant for packaging)"
msgstr ""
-#: forms_treatments.py:131 forms_treatments.py:413
+#: forms_treatments.py:131 forms_treatments.py:458
msgid "External ref."
msgstr ""
-#: forms_treatments.py:136 models_treatments.py:129
+#: forms_treatments.py:132 models_treatments.py:129
msgid "Goal"
msgstr ""
-#: forms_treatments.py:140 forms_treatments.py:442 models_treatments.py:131
-#: models_treatments.py:505
+#: forms_treatments.py:140 forms_treatments.py:283 forms_treatments.py:487
+#: forms_treatments.py:535 models_treatments.py:131 models_treatments.py:505
msgid "Closing date"
msgstr ""
@@ -457,145 +462,173 @@ msgstr ""
msgid "A responsible or an organization must be defined."
msgstr ""
-#: forms_treatments.py:256
+#: forms_treatments.py:257
msgid "Another treatment with this index exists for {}."
msgstr ""
-#: forms_treatments.py:262 models_treatments.py:108
+#: forms_treatments.py:263 models_treatments.py:108
msgid "Associated request"
msgstr ""
-#: forms_treatments.py:266 forms_treatments.py:397 ishtar_menu.py:108
+#: forms_treatments.py:267 forms_treatments.py:442 ishtar_menu.py:108
#: models_treatments.py:516 models_treatments.py:544 models_treatments.py:619
#: wizards.py:187 templates/ishtar/sheet_treatmentfile.html:5
msgid "Treatment request"
msgstr ""
-#: forms_treatments.py:275
+#: forms_treatments.py:276
msgid ""
"Are you sure you want to delete this treatment? All changes made to the "
"associated finds since this treatment record will be lost!"
msgstr ""
-#: forms_treatments.py:278
+#: forms_treatments.py:279
msgid "Would you like to delete this treatment?"
msgstr ""
-#: forms_treatments.py:286 forms_treatments.py:334 forms_treatments.py:491
-#: forms_treatments.py:542
+#: forms_treatments.py:281
+msgid "months"
+msgstr ""
+
+#: forms_treatments.py:281
+msgid "years"
+msgstr ""
+
+#: forms_treatments.py:287 forms_treatments.py:539
+msgid "Slicing"
+msgstr ""
+
+#: forms_treatments.py:290 forms_treatments.py:542
+msgid "Date get from"
+msgstr ""
+
+#: forms_treatments.py:293 forms_treatments.py:545
+msgid "Date after"
+msgstr ""
+
+#: forms_treatments.py:295 forms_treatments.py:547
+msgid "Date before"
+msgstr ""
+
+#: forms_treatments.py:331 forms_treatments.py:379 forms_treatments.py:581
+#: forms_treatments.py:632
msgid "Act type"
msgstr ""
-#: forms_treatments.py:287 forms_treatments.py:492
+#: forms_treatments.py:332 forms_treatments.py:582
msgid "Indexed?"
msgstr ""
-#: forms_treatments.py:288 forms_treatments.py:493
+#: forms_treatments.py:333 forms_treatments.py:583
msgid "Object"
msgstr ""
-#: forms_treatments.py:292 forms_treatments.py:497
+#: forms_treatments.py:337 forms_treatments.py:587
msgid "Signature date after"
msgstr ""
-#: forms_treatments.py:294 forms_treatments.py:499
+#: forms_treatments.py:339 forms_treatments.py:589
msgid "Signature date before"
msgstr ""
-#: forms_treatments.py:296 forms_treatments.py:573
+#: forms_treatments.py:341 forms_treatments.py:663
msgid "Treatment name"
msgstr ""
-#: forms_treatments.py:297 forms_treatments.py:574
+#: forms_treatments.py:342 forms_treatments.py:664
msgid "Treatment year"
msgstr ""
-#: forms_treatments.py:298 forms_treatments.py:575
+#: forms_treatments.py:343 forms_treatments.py:665
msgid "Treatment index"
msgstr ""
-#: forms_treatments.py:300 forms_treatments.py:577
+#: forms_treatments.py:345 forms_treatments.py:667
msgid "Treatment internal reference"
msgstr ""
-#: forms_treatments.py:304 forms_treatments.py:511
+#: forms_treatments.py:349 forms_treatments.py:601
msgid "Modified by"
msgstr ""
-#: forms_treatments.py:354 forms_treatments.py:404 models_treatments.py:490
+#: forms_treatments.py:399 forms_treatments.py:449 models_treatments.py:490
msgid "Name"
msgstr ""
-#: forms_treatments.py:355 forms_treatments.py:411
+#: forms_treatments.py:400 forms_treatments.py:456
msgid "Internal ref."
msgstr ""
-#: forms_treatments.py:358 forms_treatments.py:415 models_treatments.py:92
-#: templates/ishtar/sheet_find.html:86 templates/ishtar/sheet_find.html:128
-#: templates/ishtar/sheet_find.html:228
+#: forms_treatments.py:403 forms_treatments.py:460 models_treatments.py:92
+#: templates/ishtar/sheet_find.html:90 templates/ishtar/sheet_find.html:132
+#: templates/ishtar/sheet_find.html:232
msgid "Type"
msgstr ""
-#: forms_treatments.py:360
+#: forms_treatments.py:405
msgid "In charge"
msgstr ""
-#: forms_treatments.py:366 forms_treatments.py:423 models_treatments.py:499
+#: forms_treatments.py:411 forms_treatments.py:468 models_treatments.py:499
#: templates/ishtar/sheet_treatmentfile.html:31
msgid "Applicant"
msgstr ""
-#: forms_treatments.py:372 forms_treatments.py:429 models_treatments.py:503
+#: forms_treatments.py:417 forms_treatments.py:474 models_treatments.py:503
#: templates/ishtar/sheet_treatmentfile.html:38
msgid "Applicant organisation"
msgstr ""
-#: forms_treatments.py:385 forms_treatments.py:565 views.py:502
+#: forms_treatments.py:430 forms_treatments.py:655 views.py:502
msgid "Treatment request search"
msgstr ""
-#: forms_treatments.py:439 models_treatments.py:509
+#: forms_treatments.py:484 forms_treatments.py:534 models_treatments.py:509
msgid "Reception date"
msgstr ""
-#: forms_treatments.py:478
+#: forms_treatments.py:523
msgid "Another treatment request with this index exists for {}."
msgstr ""
-#: forms_treatments.py:484
+#: forms_treatments.py:529
msgid "Are you sure you want to delete this treatment request?"
msgstr ""
-#: forms_treatments.py:485
+#: forms_treatments.py:530
msgid "Would you like to delete this treatment request?"
msgstr ""
-#: forms_treatments.py:501 forms_treatments.py:597
+#: forms_treatments.py:533 models_treatments.py:507
+msgid "Creation date"
+msgstr ""
+
+#: forms_treatments.py:543 forms_treatments.py:598 forms_treatments.py:694
+#: models_treatments.py:468 models_treatments.py:492
+msgid "Treatment request type"
+msgstr ""
+
+#: forms_treatments.py:591 forms_treatments.py:687
msgid "Treatment request name"
msgstr ""
-#: forms_treatments.py:503 forms_treatments.py:599
+#: forms_treatments.py:593 forms_treatments.py:689
msgid "Treatment request year"
msgstr ""
-#: forms_treatments.py:505 forms_treatments.py:601
+#: forms_treatments.py:595 forms_treatments.py:691
msgid "Treatment request index"
msgstr ""
-#: forms_treatments.py:507 forms_treatments.py:603
+#: forms_treatments.py:597 forms_treatments.py:693
msgid "Treatment request internal reference"
msgstr ""
-#: forms_treatments.py:508 forms_treatments.py:604 models_treatments.py:468
-#: models_treatments.py:492
-msgid "Treatment request type"
-msgstr ""
-
-#: forms_treatments.py:562
+#: forms_treatments.py:652
msgid "You should select a treatment."
msgstr ""
-#: forms_treatments.py:568
+#: forms_treatments.py:658
msgid "You should select a treatment request."
msgstr ""
@@ -629,12 +662,12 @@ msgstr ""
msgid "Documentation"
msgstr ""
-#: ishtar_menu.py:133 ishtar_menu.py:214 models_finds.py:1137
+#: ishtar_menu.py:133 ishtar_menu.py:214 models_finds.py:1183
msgid "Administrative act"
msgstr ""
-#: ishtar_menu.py:151 ishtar_menu.py:233 templates/ishtar/sheet_find.html:222
-#: templates/ishtar/sheet_find.html:224
+#: ishtar_menu.py:151 ishtar_menu.py:233 templates/ishtar/sheet_find.html:226
+#: templates/ishtar/sheet_find.html:228
msgid "Documents"
msgstr ""
@@ -652,303 +685,303 @@ msgstr ""
msgid "Simple treatments"
msgstr ""
-#: models_finds.py:43
+#: models_finds.py:44
msgid "Code"
msgstr ""
-#: models_finds.py:44
+#: models_finds.py:45
msgid "Recommendation"
msgstr ""
-#: models_finds.py:47
+#: models_finds.py:48
msgid "Parent material"
msgstr ""
-#: models_finds.py:51 models_finds.py:539 models_finds.py:616
+#: models_finds.py:52 models_finds.py:558 models_finds.py:638
msgid "Material types"
msgstr ""
-#: models_finds.py:59
+#: models_finds.py:60
msgid "Parent conservatory state"
msgstr ""
-#: models_finds.py:63
+#: models_finds.py:64
msgid "Conservatory states"
msgstr ""
-#: models_finds.py:72
+#: models_finds.py:73
msgid "Preservation types"
msgstr ""
-#: models_finds.py:80
+#: models_finds.py:81
msgid "Integrity / interest type"
msgstr ""
-#: models_finds.py:81
+#: models_finds.py:82
msgid "Integrity / interest types"
msgstr ""
-#: models_finds.py:89
+#: models_finds.py:90
msgid "Remarkability type"
msgstr ""
-#: models_finds.py:90
+#: models_finds.py:91
msgid "Remarkability types"
msgstr ""
-#: models_finds.py:97 models_finds.py:612 models_treatments.py:40
+#: models_finds.py:98 models_finds.py:634 models_treatments.py:40
#: models_treatments.py:304
msgid "Order"
msgstr ""
-#: models_finds.py:99
+#: models_finds.py:100
msgid "Batch type"
msgstr ""
-#: models_finds.py:100
+#: models_finds.py:101
msgid "Batch types"
msgstr ""
-#: models_finds.py:108
+#: models_finds.py:109
msgid "Parent"
msgstr ""
-#: models_finds.py:151 models_finds.py:609 models_treatments.py:125
+#: models_finds.py:152 models_finds.py:631 models_treatments.py:125
#: models_treatments.py:488
msgid "External ID"
msgstr ""
-#: models_finds.py:153 models_finds.py:611
+#: models_finds.py:154 models_finds.py:633
msgid "External ID is set automatically"
msgstr ""
-#: models_finds.py:156
+#: models_finds.py:157
msgid "Special interest"
msgstr ""
-#: models_finds.py:160
+#: models_finds.py:161
msgid "Context Record"
msgstr ""
-#: models_finds.py:161
+#: models_finds.py:162
msgid "Discovery date"
msgstr ""
-#: models_finds.py:166
+#: models_finds.py:167
msgid "Material index"
msgstr ""
-#: models_finds.py:182
+#: models_finds.py:183
msgid "Point (2D)"
msgstr ""
-#: models_finds.py:183
+#: models_finds.py:184
msgid "Point"
msgstr ""
-#: models_finds.py:184
+#: models_finds.py:185
msgid "Line"
msgstr ""
-#: models_finds.py:185
+#: models_finds.py:186
msgid "Polygon"
msgstr ""
-#: models_finds.py:188 models_finds.py:191
+#: models_finds.py:189 models_finds.py:192
msgid "Cached value - do not edit"
msgstr ""
-#: models_finds.py:197 models_finds.py:607
+#: models_finds.py:198 models_finds.py:629
msgid "Base find"
msgstr ""
-#: models_finds.py:198
+#: models_finds.py:199
msgid "Base finds"
msgstr ""
-#: models_finds.py:200
+#: models_finds.py:201
msgid "Can view all Base finds"
msgstr ""
-#: models_finds.py:201
+#: models_finds.py:202
msgid "Can view own Base find"
msgstr ""
-#: models_finds.py:202
+#: models_finds.py:203
msgid "Can add own Base find"
msgstr ""
-#: models_finds.py:203
+#: models_finds.py:204
msgid "Can change own Base find"
msgstr ""
-#: models_finds.py:204
+#: models_finds.py:205
msgid "Can delete own Base find"
msgstr ""
-#: models_finds.py:443
+#: models_finds.py:462
msgid "g"
msgstr ""
-#: models_finds.py:444
+#: models_finds.py:463
msgid "kg"
msgstr ""
-#: models_finds.py:446
+#: models_finds.py:465
msgid "Not checked"
msgstr ""
-#: models_finds.py:447
+#: models_finds.py:466
msgid "Checked but incorrect"
msgstr ""
-#: models_finds.py:448
+#: models_finds.py:467
msgid "Checked and correct"
msgstr ""
-#: models_finds.py:520
+#: models_finds.py:539
msgid "Base find - Short ID"
msgstr ""
-#: models_finds.py:521
+#: models_finds.py:540
msgid "Base find - Complete ID"
msgstr ""
-#: models_finds.py:523
+#: models_finds.py:542
msgid "Operation (code)"
msgstr ""
-#: models_finds.py:525
+#: models_finds.py:544
msgid "Town"
msgstr ""
-#: models_finds.py:527
+#: models_finds.py:546
msgid "Operation (name)"
msgstr ""
-#: models_finds.py:529
+#: models_finds.py:548
msgid "Parcel"
msgstr ""
-#: models_finds.py:530
+#: models_finds.py:549
msgid "Batch"
msgstr ""
-#: models_finds.py:531
+#: models_finds.py:550
msgid "Base find - Comment"
msgstr ""
-#: models_finds.py:532
+#: models_finds.py:551
msgid "Base find - Description"
msgstr ""
-#: models_finds.py:533
+#: models_finds.py:552
msgid "Base find - Topographic localisation"
msgstr ""
-#: models_finds.py:535
+#: models_finds.py:554
msgid "Base find - Special interest"
msgstr ""
-#: models_finds.py:536
+#: models_finds.py:555
msgid "Base find - Discovery date"
msgstr ""
-#: models_finds.py:537 models_finds.py:640 models_treatments.py:132
-#: models_treatments.py:312 templates/ishtar/sheet_find.html:90
-#: templates/ishtar/sheet_find.html:132
+#: models_finds.py:556 models_finds.py:662 models_treatments.py:132
+#: models_treatments.py:312 templates/ishtar/sheet_find.html:94
+#: templates/ishtar/sheet_find.html:136
msgid "Container"
msgstr ""
-#: models_finds.py:538
+#: models_finds.py:557
msgid "Periods"
msgstr ""
-#: models_finds.py:623
+#: models_finds.py:645
msgid "Type of preservation to consider"
msgstr ""
-#: models_finds.py:627
+#: models_finds.py:649
msgid "Weight unit"
msgstr ""
-#: models_finds.py:633 templates/ishtar/sheet_find.html:78
+#: models_finds.py:655 templates/ishtar/sheet_find.html:82
msgid "Upstream treatment"
msgstr ""
-#: models_finds.py:636 templates/ishtar/sheet_find.html:120
+#: models_finds.py:658 templates/ishtar/sheet_find.html:124
msgid "Downstream treatment"
msgstr ""
-#: models_finds.py:675
+#: models_finds.py:697
msgid "Collection"
msgstr ""
-#: models_finds.py:677 models_treatments.py:144 models_treatments.py:512
+#: models_finds.py:699 models_treatments.py:144 models_treatments.py:512
msgid "Cached name"
msgstr ""
-#: models_finds.py:686
+#: models_finds.py:708
msgid "Can view all Finds"
msgstr ""
-#: models_finds.py:687
+#: models_finds.py:709
msgid "Can view own Find"
msgstr ""
-#: models_finds.py:688
+#: models_finds.py:710
msgid "Can add own Find"
msgstr ""
-#: models_finds.py:689
+#: models_finds.py:711
msgid "Can change own Find"
msgstr ""
-#: models_finds.py:690
+#: models_finds.py:712
msgid "Can delete own Find"
msgstr ""
-#: models_finds.py:696
+#: models_finds.py:718
msgid "FIND"
msgstr ""
-#: models_finds.py:1100
+#: models_finds.py:1146
msgid "Find documentation"
msgstr ""
-#: models_finds.py:1101
+#: models_finds.py:1147
msgid "Find documentations"
msgstr ""
-#: models_finds.py:1104
+#: models_finds.py:1150
msgid "Can view all Find sources"
msgstr ""
-#: models_finds.py:1106
+#: models_finds.py:1152
msgid "Can view own Find source"
msgstr ""
-#: models_finds.py:1108
+#: models_finds.py:1154
msgid "Can add own Find source"
msgstr ""
-#: models_finds.py:1110
+#: models_finds.py:1156
msgid "Can change own Find source"
msgstr ""
-#: models_finds.py:1112
+#: models_finds.py:1158
msgid "Can delete own Find source"
msgstr ""
-#: models_finds.py:1138
+#: models_finds.py:1184
msgid "Person"
msgstr ""
-#: models_finds.py:1144
+#: models_finds.py:1190
msgid "Property"
msgstr ""
-#: models_finds.py:1145
+#: models_finds.py:1191
msgid "Properties"
msgstr ""
@@ -1016,7 +1049,7 @@ msgstr ""
msgid "Target a basket"
msgstr ""
-#: models_treatments.py:149 templates/ishtar/sheet_find.html:75
+#: models_treatments.py:149 templates/ishtar/sheet_find.html:79
#: templates/ishtar/sheet_treatmentfile.html:46
msgid "Treatments"
msgstr ""
@@ -1045,8 +1078,8 @@ msgstr ""
msgid "TREATMENT"
msgstr ""
-#: models_treatments.py:313 templates/ishtar/sheet_find.html:89
-#: templates/ishtar/sheet_find.html:131
+#: models_treatments.py:313 templates/ishtar/sheet_find.html:93
+#: templates/ishtar/sheet_find.html:135
msgid "Doer"
msgstr ""
@@ -1070,10 +1103,6 @@ msgstr ""
msgid "Person in charge"
msgstr ""
-#: models_treatments.py:507
-msgid "Creation date"
-msgstr ""
-
#: models_treatments.py:517
msgid "Treatment requests"
msgstr ""
@@ -1155,30 +1184,18 @@ msgid "Can view Treatment request source"
msgstr ""
#: models_treatments.py:633
-msgid "Can add Treatment request source"
-msgstr ""
-
-#: models_treatments.py:635
-msgid "Can change Treatment request source"
-msgstr ""
-
-#: models_treatments.py:637
-msgid "Can delete Treatment request source"
-msgstr ""
-
-#: models_treatments.py:639
msgid "Can view own Treatment request source"
msgstr ""
-#: models_treatments.py:641
+#: models_treatments.py:635
msgid "Can add own Treatment request source"
msgstr ""
-#: models_treatments.py:643
+#: models_treatments.py:637
msgid "Can change own Treatment request source"
msgstr ""
-#: models_treatments.py:645
+#: models_treatments.py:639
msgid "Can delete own Treatment request source"
msgstr ""
@@ -1306,55 +1323,61 @@ msgstr ""
msgid "Operation"
msgstr ""
-#: templates/ishtar/sheet_find.html:25
+#: templates/ishtar/sheet_find.html:14
+msgid ""
+"This sheet has a downstream treatment: it is related to an old version of "
+"the find."
+msgstr ""
+
+#: templates/ishtar/sheet_find.html:29
msgid "Administrative index"
msgstr ""
-#: templates/ishtar/sheet_find.html:67
+#: templates/ishtar/sheet_find.html:71
msgid "Warehouse"
msgstr ""
-#: templates/ishtar/sheet_find.html:84 templates/ishtar/sheet_find.html:126
+#: templates/ishtar/sheet_find.html:88 templates/ishtar/sheet_find.html:130
msgid "Year - index"
msgstr ""
-#: templates/ishtar/sheet_find.html:88 templates/ishtar/sheet_find.html:130
+#: templates/ishtar/sheet_find.html:92 templates/ishtar/sheet_find.html:134
msgid "Related finds (max. 15 displayed)"
msgstr ""
-#: templates/ishtar/sheet_find.html:116
+#: templates/ishtar/sheet_find.html:120
msgid "Export as CSV"
msgstr ""
-#: templates/ishtar/sheet_find.html:116 templates/ishtar/sheet_find.html:159
+#: templates/ishtar/sheet_find.html:120 templates/ishtar/sheet_find.html:163
msgid "CSV"
msgstr ""
-#: templates/ishtar/sheet_find.html:164
+#: templates/ishtar/sheet_find.html:168
msgid "Associated base finds"
msgstr ""
-#: templates/ishtar/sheet_find.html:171
+#: templates/ishtar/sheet_find.html:175
msgid "Internal ID"
msgstr ""
-#: templates/ishtar/sheet_find.html:203
+#: templates/ishtar/sheet_find.html:207
msgid "Coordinates"
msgstr ""
-#: templates/ishtar/sheet_find.html:210
+#: templates/ishtar/sheet_find.html:214
msgid "SRID"
msgstr ""
-#: templates/ishtar/sheet_find.html:227
+#: templates/ishtar/sheet_find.html:231
msgid "Title"
msgstr ""
-#: templates/ishtar/sheet_find.html:229
+#: templates/ishtar/sheet_find.html:233
msgid "Authors"
msgstr ""
-#: templates/ishtar/sheet_find.html:230
+#: templates/ishtar/sheet_find.html:234
msgid "Link"
msgstr ""
diff --git a/archaeological_finds/models_finds.py b/archaeological_finds/models_finds.py
index d33933264..668546602 100644
--- a/archaeological_finds/models_finds.py
+++ b/archaeological_finds/models_finds.py
@@ -31,7 +31,8 @@ from ishtar_common.utils import cached_label_changed, post_save_point
from ishtar_common.models import GeneralType, ImageModel, BaseHistorizedItem, \
ShortMenuItem, LightHistorizedItem, HistoricalRecords, OwnPerms, Source, \
- Person, Basket, get_external_id, post_save_cache, ValueGetter
+ Person, Basket, get_external_id, post_save_cache, ValueGetter, \
+ get_current_profile
from archaeological_operations.models import AdministrativeAct
from archaeological_context_records.models import ContextRecord, Dating
@@ -212,13 +213,31 @@ class BaseFind(BaseHistorizedItem, OwnPerms):
finds = self.find.filter().order_by("-order").all()
return finds and finds[0]
- @classmethod
- def get_max_index(cls, operation):
- q = BaseFind.objects \
- .filter(context_record__operation=operation)
+ def generate_index(self):
+ """
+ Generate index based on operation or context record (based on
+ the configuration)
+
+ :return: True if index has been changed.
+ """
+ profile = get_current_profile()
+ if profile.find_index == u'O':
+ operation = self.context_record.operation
+ q = Find.objects \
+ .filter(base_finds__context_record__operation=operation)
+ elif profile.find_index == u'CR':
+ cr = self.context_record
+ q = Find.objects \
+ .filter(base_finds__context_record=cr)
+ else:
+ return False
+ if self.pk:
+ q = q.exclude(pk=self.pk)
if q.count():
- return q.aggregate(Max('index'))['index__max']
- return 0
+ self.index = q.aggregate(Max('index'))['index__max'] + 1
+ else:
+ self.index = 1
+ return True
def _ope_code(self):
if not self.context_record.operation:
@@ -551,7 +570,10 @@ class Find(ValueGetter, BaseHistorizedItem, ImageModel, OwnPerms,
REVERSED_BOOL_FIELDS = ['image__isnull']
RELATION_TYPES_PREFIX = {
'ope_relation_types':
- 'base_finds__context_record__operation__'}
+ 'base_finds__context_record__operation__',
+ 'cr_relation_types':
+ 'base_finds__context_record__',
+ }
RELATIVE_SESSION_NAMES = [
('contextrecord', 'base_finds__context_record__pk'),
('operation', 'base_finds__context_record__operation__pk'),
@@ -989,6 +1011,43 @@ class Find(ValueGetter, BaseHistorizedItem, ImageModel, OwnPerms,
c.execute(sql, args)
transaction.commit_unless_managed()
+ def generate_index(self):
+ """
+ Generate index based on operation or context record (based on
+ the configuration)
+
+ :return: True if index has been changed.
+ """
+ bfs = self.base_finds
+ profile = get_current_profile()
+ if profile.find_index == u'O':
+ bfs = bfs.filter(
+ context_record__operation__pk__isnull=False).order_by(
+ '-context_record__operation__start_date')
+ if not bfs.count():
+ return False
+ operation = bfs.all()[0].context_record.operation
+ q = Find.objects \
+ .filter(base_finds__context_record__operation=operation)
+ elif profile.find_index == u'CR':
+ bfs = bfs.filter(
+ context_record__pk__isnull=False).order_by(
+ 'context_record__pk')
+ if not bfs.count():
+ return False
+ cr = bfs.all()[0].context_record
+ q = Find.objects \
+ .filter(base_finds__context_record=cr)
+ else:
+ return False
+ if self.pk:
+ q = q.exclude(pk=self.pk)
+ if q.count():
+ self.index = q.aggregate(Max('index'))['index__max'] + 1
+ else:
+ self.index = 1
+ return True
+
def save(self, *args, **kwargs):
super(Find, self).save(*args, **kwargs)
@@ -1007,28 +1066,15 @@ class Find(ValueGetter, BaseHistorizedItem, ImageModel, OwnPerms,
q = self.base_finds
if not self.index and q.count():
- operation = q.filter(
- context_record__operation__pk__isnull=False).order_by(
- '-context_record__operation__start_date')
- if operation.count():
- operation = operation.all()[0].context_record.operation
- q = Find.objects \
- .filter(base_finds__context_record__operation=operation)
- if self.pk:
- q = q.exclude(pk=self.pk)
- if q.count():
- self.index = q.aggregate(Max('index'))['index__max'] + 1
- else:
- self.index = 1
+ changed = self.generate_index()
+ if changed:
self._cached_label_checked = False
self.save()
for base_find in self.base_finds.filter(
context_record__operation__pk__isnull=False).all():
modified = False
if not base_find.index:
- modified = True
- base_find.index = BaseFind.get_max_index(
- base_find.context_record.operation) + 1
+ modified = base_find.generate_index()
short_id = base_find.short_id()
if base_find.cache_short_id != short_id:
base_find.cache_short_id = short_id
diff --git a/archaeological_finds/templates/ishtar/sheet_find.html b/archaeological_finds/templates/ishtar/sheet_find.html
index a78eb7706..db192cc9f 100644
--- a/archaeological_finds/templates/ishtar/sheet_find.html
+++ b/archaeological_finds/templates/ishtar/sheet_find.html
@@ -9,6 +9,10 @@
{% if item.image %}
<a href='{{item.image.url}}' rel="prettyPhoto" title="{{item.label}}" class='photo'><img src='{{item.thumbnail.url}}'/></a>
{% endif%}
+{% if item.downstream_treatment %}
+<p class='alert'><i class="fa fa-exclamation-triangle" aria-hidden="true"></i>
+ {% trans "This sheet has a downstream treatment: it is related to an old version of the find." %}</p>
+{% endif %}
<p class="window-refs">{{ item.label|default:"" }}</p>
<p class='window-refs'>{% for base_find in item.base_finds.all %}{% if forloop.counter0 %} &ndash; {% endif %}{{base_find.complete_id}}{% endfor %}</p>
diff --git a/archaeological_finds/tests.py b/archaeological_finds/tests.py
index 1268b4f03..3d33cf693 100644
--- a/archaeological_finds/tests.py
+++ b/archaeological_finds/tests.py
@@ -28,7 +28,7 @@ from django.test.client import Client
from ishtar_common.models import ImporterType, IshtarUser, ImporterColumn,\
FormaterType, ImportTarget
-from ishtar_common.models import Person
+from ishtar_common.models import Person, get_current_profile
from archaeological_context_records.models import Period, Dating
from archaeological_finds import models, views
from archaeological_warehouse.models import Warehouse, WarehouseType
@@ -91,7 +91,7 @@ class FindInit(ContextRecordInit):
self.base_find = []
-class AFindWizardCreationTest(WizardTest, FindInit, TestCase):
+class FindWizardCreationTest(WizardTest, FindInit, TestCase):
# TODO: first to be run because of strange init things...
fixtures = [settings.ROOT_PATH +
'../fixtures/initial_data.json',
@@ -134,12 +134,13 @@ class AFindWizardCreationTest(WizardTest, FindInit, TestCase):
cr = self.create_context_record(
data={'parcel': self.create_parcel()[-1]}, force=True)[-1]
- self.form_datas[0].form_datas['selecrecord-find_creation']['pk'] = cr.pk
+ self.form_datas[0].form_datas['selecrecord-find_creation']['pk'] = \
+ cr.pk
self.form_datas[0].form_datas['dating-find_creation'][0]['period'] = \
Period.objects.all()[0].pk
self.find_number = models.Find.objects.count()
self.basefind_number = models.BaseFind.objects.count()
- super(AFindWizardCreationTest, self).pre_wizard()
+ super(FindWizardCreationTest, self).pre_wizard()
def post_wizard(self):
self.assertEqual(models.BaseFind.objects.count(),
@@ -148,8 +149,7 @@ class AFindWizardCreationTest(WizardTest, FindInit, TestCase):
self.find_number + 1)
-class ATreatmentWizardCreationTest(WizardTest, FindInit, TestCase):
- # TODO: first to be run because of strange init things...
+class TreatmentWizardCreationTest(WizardTest, FindInit, TestCase):
fixtures = [settings.ROOT_PATH +
'../fixtures/initial_data.json',
settings.ROOT_PATH +
@@ -206,7 +206,7 @@ class ATreatmentWizardCreationTest(WizardTest, FindInit, TestCase):
self.form_datas[0].form_datas['selecfind-treatment_creation'][
'resulting_pk'] = self.find.pk
self.treatment_number = models.Treatment.objects.count()
- super(ATreatmentWizardCreationTest, self).pre_wizard()
+ super(TreatmentWizardCreationTest, self).pre_wizard()
def post_wizard(self):
self.assertEqual(models.Treatment.objects.count(),
@@ -312,6 +312,68 @@ class FindTest(FindInit, TestCase):
base_find.context_record.external_id,
base_find.label))
+ def testIndex(self):
+ profile = get_current_profile()
+ profile.find_index = u"O"
+ profile.save()
+ profile = get_current_profile(force=True)
+
+ op1 = self.create_operation()[-1]
+ op2 = self.create_operation()[-1]
+ op1_cr1 = self.create_context_record(data={'label': "CR1",
+ 'operation': op1})[-1]
+ op1_cr2 = self.create_context_record(data={'label': "CR2",
+ 'operation': op1})[-1]
+ op2_cr1 = self.create_context_record(data={'label': "CR3",
+ 'operation': op2})[-1]
+ self.create_finds(data_base={'context_record': op1_cr1})
+ find_1 = self.finds[-1]
+ bf_1 = models.BaseFind.objects.get(pk=self.base_finds[-1].pk)
+ self.assertEqual(find_1.index, 1)
+ self.assertEqual(bf_1.index, 1)
+
+ # index is based on operations
+ self.create_finds(data_base={'context_record': op1_cr2})
+ find_2 = self.finds[-1]
+ bf_2 = models.BaseFind.objects.get(pk=self.base_finds[-1].pk)
+ self.assertEqual(find_2.index, 2)
+ self.assertEqual(bf_2.index, 2)
+
+ self.create_finds(data_base={'context_record': op2_cr1})
+ find_3 = self.finds[-1]
+ bf_3 = models.BaseFind.objects.get(pk=self.base_finds[-1].pk)
+ self.assertEqual(find_3.index, 1)
+ self.assertEqual(bf_3.index, 1)
+
+ profile = get_current_profile(force=True)
+ profile.find_index = u"CR"
+ profile.save()
+ profile = get_current_profile(force=True)
+
+ op3 = self.create_operation()[-1]
+ op3_cr1 = self.create_context_record(data={'label': "CR1",
+ 'operation': op3})[-1]
+ op3_cr2 = self.create_context_record(data={'label': "CR2",
+ 'operation': op3})[-1]
+ self.create_finds(data_base={'context_record': op3_cr1})
+ find_1b = self.finds[-1]
+ bf_1b = models.BaseFind.objects.get(pk=self.base_finds[-1].pk)
+ self.assertEqual(find_1b.index, 1)
+ self.assertEqual(bf_1b.index, 1)
+
+ # index now based on context records
+ self.create_finds(data_base={'context_record': op3_cr2})
+ find_2b = self.finds[-1]
+ bf_2b = models.BaseFind.objects.get(pk=self.base_finds[-1].pk)
+ self.assertEqual(find_2b.index, 1)
+ self.assertEqual(bf_2b.index, 1)
+
+ self.create_finds(data_base={'context_record': op3_cr2})
+ find_3b = self.finds[-1]
+ bf_3b = models.BaseFind.objects.get(pk=self.base_finds[-1].pk)
+ self.assertEqual(find_3b.index, 2)
+ self.assertEqual(bf_3b.index, 2)
+
def testShowFind(self):
find = self.finds[0]
response = self.client.get(reverse('display-find', args=[find.pk]))
diff --git a/archaeological_operations/locale/django.pot b/archaeological_operations/locale/django.pot
index 13a161584..fafadea13 100644
--- a/archaeological_operations/locale/django.pot
+++ b/archaeological_operations/locale/django.pot
@@ -77,7 +77,7 @@ msgid "Relation type"
msgstr ""
#: forms.py:383 ishtar_menu.py:30 models.py:372 models.py:847 models.py:882
-#: models.py:922 models.py:1026 models.py:1235 wizards.py:353 wizards.py:364
+#: models.py:922 models.py:1026 models.py:1235 wizards.py:352 wizards.py:363
#: templates/ishtar/sheet_operation.html:4
msgid "Operation"
msgstr ""
diff --git a/ishtar_common/fixtures/ishtar-access-control.json b/ishtar_common/fixtures/ishtar-access-control.json
new file mode 100644
index 000000000..c44418f07
--- /dev/null
+++ b/ishtar_common/fixtures/ishtar-access-control.json
@@ -0,0 +1 @@
+{"content_types": [{"model": "activitytype", "name": "Activity Type", "app_label": "archaeological_context_records"}, {"model": "acttype", "name": "Act type", "app_label": "archaeological_operations"}, {"model": "administrativeact", "name": "Administrative act", "app_label": "archaeological_operations"}, {"model": "file", "name": "Archaeological file", "app_label": "archaeological_files"}, {"model": "filetype", "name": "Archaeological file type", "app_label": "archaeological_files"}, {"model": "archaeologicalsite", "name": "Archaeological site", "app_label": "archaeological_operations"}, {"model": "arrondissement", "name": "arrondissement", "app_label": "ishtar_common"}, {"model": "author", "name": "Author", "app_label": "ishtar_common"}, {"model": "authortype", "name": "Author type", "app_label": "ishtar_common"}, {"model": "basefind", "name": "Base find", "app_label": "archaeological_finds"}, {"model": "batchtype", "name": "Batch type", "app_label": "archaeological_finds"}, {"model": "canton", "name": "canton", "app_label": "ishtar_common"}, {"model": "collection", "name": "Collection", "app_label": "archaeological_warehouse"}, {"model": "conservatorystate", "name": "Conservatory state", "app_label": "archaeological_finds"}, {"model": "container", "name": "Container", "app_label": "archaeological_warehouse"}, {"model": "containerlocalisation", "name": "Container localisation", "app_label": "archaeological_warehouse"}, {"model": "containertype", "name": "Container type", "app_label": "archaeological_warehouse"}, {"model": "contenttype", "name": "content type", "app_label": "contenttypes"}, {"model": "contextrecord", "name": "Context Record", "app_label": "archaeological_context_records"}, {"model": "contextrecordsource", "name": "Context record documentation", "app_label": "archaeological_context_records"}, {"model": "dating", "name": "Dating", "app_label": "archaeological_context_records"}, {"model": "datingquality", "name": "Dating quality", "app_label": "archaeological_context_records"}, {"model": "datingtype", "name": "Dating type", "app_label": "archaeological_context_records"}, {"model": "department", "name": "Department", "app_label": "ishtar_common"}, {"model": "documentationtype", "name": "Documentation type", "app_label": "archaeological_context_records"}, {"model": "documenttemplate", "name": "Document template", "app_label": "ishtar_common"}, {"model": "excavationtechnictype", "name": "Excavation technic type", "app_label": "archaeological_context_records"}, {"model": "filebydepartment", "name": "file by department", "app_label": "archaeological_files"}, {"model": "find", "name": "Find", "app_label": "archaeological_finds"}, {"model": "findbasket", "name": "find basket", "app_label": "archaeological_finds"}, {"model": "findsource", "name": "Find documentation", "app_label": "archaeological_finds"}, {"model": "finddownstreamtreatments", "name": "find downstream treatments", "app_label": "archaeological_finds"}, {"model": "findtreatments", "name": "find treatments", "app_label": "archaeological_finds"}, {"model": "findupstreamtreatments", "name": "find upstream treatments", "app_label": "archaeological_finds"}, {"model": "format", "name": "Format", "app_label": "ishtar_common"}, {"model": "globalvar", "name": "Global variable", "app_label": "ishtar_common"}, {"model": "group", "name": "group", "app_label": "auth"}, {"model": "historicaladministrativeact", "name": "historical administrative act", "app_label": "archaeological_operations"}, {"model": "historicalbasefind", "name": "historical base find", "app_label": "archaeological_finds"}, {"model": "historicalcontextrecord", "name": "historical context record", "app_label": "archaeological_context_records"}, {"model": "historicalfile", "name": "historical file", "app_label": "archaeological_files"}, {"model": "historicalfind", "name": "historical find", "app_label": "archaeological_finds"}, {"model": "historicaloperation", "name": "historical operation", "app_label": "archaeological_operations"}, {"model": "historicalorganization", "name": "historical organization", "app_label": "ishtar_common"}, {"model": "historicalperson", "name": "historical person", "app_label": "ishtar_common"}, {"model": "historicaltreatment", "name": "historical treatment", "app_label": "archaeological_finds"}, {"model": "historicaltreatmentfile", "name": "historical treatment file", "app_label": "archaeological_finds"}, {"model": "identificationtype", "name": "Identification Type", "app_label": "archaeological_context_records"}, {"model": "import", "name": "Import", "app_label": "ishtar_common"}, {"model": "importercolumn", "name": "Importer - Column", "app_label": "ishtar_common"}, {"model": "importerdefault", "name": "Importer - Default", "app_label": "ishtar_common"}, {"model": "importerdefaultvalues", "name": "Importer - Default value", "app_label": "ishtar_common"}, {"model": "importerduplicatefield", "name": "Importer - Duplicate field", "app_label": "ishtar_common"}, {"model": "formatertype", "name": "Importer - Formater type", "app_label": "ishtar_common"}, {"model": "importermodel", "name": "Importer - Model", "app_label": "ishtar_common"}, {"model": "regexp", "name": "Importer - Regular expression", "app_label": "ishtar_common"}, {"model": "importtarget", "name": "Importer - Target", "app_label": "ishtar_common"}, {"model": "targetkey", "name": "Importer - Target key", "app_label": "ishtar_common"}, {"model": "importertype", "name": "Importer - Type", "app_label": "ishtar_common"}, {"model": "integritytype", "name": "Integrity type", "app_label": "archaeological_finds"}, {"model": "ishtarsiteprofile", "name": "Ishtar site profile", "app_label": "ishtar_common"}, {"model": "ishtaruser", "name": "Ishtar user", "app_label": "ishtar_common"}, {"model": "itemkey", "name": "item key", "app_label": "ishtar_common"}, {"model": "logentry", "name": "log entry", "app_label": "admin"}, {"model": "materialtype", "name": "Material type", "app_label": "archaeological_finds"}, {"model": "migrationhistory", "name": "migration history", "app_label": "south"}, {"model": "objecttype", "name": "Object type", "app_label": "archaeological_finds"}, {"model": "operation", "name": "Operation", "app_label": "archaeological_operations"}, {"model": "operationbydepartment", "name": "operation by department", "app_label": "archaeological_operations"}, {"model": "operationsource", "name": "Operation documentation", "app_label": "archaeological_operations"}, {"model": "recordrelations", "name": "Operation record relation", "app_label": "archaeological_operations"}, {"model": "relationtype", "name": "Operation relation type", "app_label": "archaeological_operations"}, {"model": "operationtype", "name": "Operation type", "app_label": "ishtar_common"}, {"model": "operationtypeold", "name": "Operation type old", "app_label": "archaeological_operations"}, {"model": "organization", "name": "Organization", "app_label": "ishtar_common"}, {"model": "organizationtype", "name": "Organization type", "app_label": "ishtar_common"}, {"model": "parcel", "name": "Parcel", "app_label": "archaeological_operations"}, {"model": "parcelowner", "name": "Parcel owner", "app_label": "archaeological_operations"}, {"model": "permission", "name": "permission", "app_label": "auth"}, {"model": "permittype", "name": "Permit type", "app_label": "archaeological_files"}, {"model": "person", "name": "Person", "app_label": "ishtar_common"}, {"model": "persontype", "name": "Person type", "app_label": "ishtar_common"}, {"model": "preservationtype", "name": "Preservation type", "app_label": "archaeological_finds"}, {"model": "property", "name": "Property", "app_label": "archaeological_finds"}, {"model": "recordrelations", "name": "Record relation", "app_label": "archaeological_context_records"}, {"model": "recordrelationview", "name": "record relation view", "app_label": "archaeological_context_records"}, {"model": "registrationprofile", "name": "registration profile", "app_label": "registration"}, {"model": "relationtype", "name": "Relation type", "app_label": "archaeological_context_records"}, {"model": "remaintype", "name": "Remain type", "app_label": "archaeological_operations"}, {"model": "remarkabilitytype", "name": "Remarkability type", "app_label": "archaeological_finds"}, {"model": "reportstate", "name": "Report state", "app_label": "archaeological_operations"}, {"model": "session", "name": "session", "app_label": "sessions"}, {"model": "site", "name": "site", "app_label": "sites"}, {"model": "sourcetype", "name": "Source type", "app_label": "ishtar_common"}, {"model": "spatialreferencesystem", "name": "Spatial reference system", "app_label": "ishtar_common"}, {"model": "state", "name": "State", "app_label": "ishtar_common"}, {"model": "supporttype", "name": "Support type", "app_label": "ishtar_common"}, {"model": "titletype", "name": "Title type", "app_label": "ishtar_common"}, {"model": "town", "name": "Town", "app_label": "ishtar_common"}, {"model": "treatment", "name": "Treatment", "app_label": "archaeological_finds"}, {"model": "treatmentsource", "name": "Treatment documentation", "app_label": "archaeological_finds"}, {"model": "treatmentfile", "name": "Treatment file", "app_label": "archaeological_finds"}, {"model": "treatmentfilesource", "name": "Treatment file documentation", "app_label": "archaeological_finds"}, {"model": "treatmentfiletype", "name": "Treatment file type", "app_label": "archaeological_finds"}, {"model": "treatmenttype", "name": "Treatment type", "app_label": "archaeological_finds"}, {"model": "treatmentstate", "name": "Type of treatment state", "app_label": "archaeological_finds"}, {"model": "period", "name": "Type Period", "app_label": "archaeological_operations"}, {"model": "saisinetype", "name": "Type Saisine", "app_label": "archaeological_files"}, {"model": "unit", "name": "Unit Type", "app_label": "archaeological_context_records"}, {"model": "user", "name": "user", "app_label": "auth"}, {"model": "warehouse", "name": "Warehouse", "app_label": "archaeological_warehouse"}, {"model": "warehousedivision", "name": "Warehouse division", "app_label": "archaeological_warehouse"}, {"model": "warehousedivisionlink", "name": "warehouse division link", "app_label": "archaeological_warehouse"}, {"model": "warehousetype", "name": "Warehouse type", "app_label": "archaeological_warehouse"}], "person_types": [{"comment": "Un acc\u00e8s limit\u00e9 \u00e0 la base, uniquement en lecture. Apr\u00e8s enregistrement.", "available": true, "txt_idx": "reader_access", "label": "Acc\u00e8s en lecture"}, {"comment": "", "available": true, "txt_idx": "administrator", "label": "Administrateur"}, {"comment": "Responsable de l'am\u00e9nagement (pr\u00e9ventif).", "available": true, "txt_idx": "general_contractor", "label": "Am\u00e9nageur"}, {"comment": "", "available": true, "txt_idx": "responsible_planning_service", "label": "Chef de service instructeur"}, {"comment": "Peut intervenir sur les donn\u00e9es d'une op\u00e9ration sans en \u00eatre responsable.", "available": true, "txt_idx": "collaborator", "label": "Collaborateur scientifique"}, {"comment": "Personne demandant une action sur le mobilier (traitements).", "available": true, "txt_idx": "applicant", "label": "Demandeur"}, {"comment": "Peut g\u00e9rer du mobilier qu'il n'a pas cr\u00e9\u00e9.\r\n\r\n", "available": true, "txt_idx": "warehouse_manager", "label": "Gestionnaire de d\u00e9p\u00f4t"}, {"comment": "", "available": true, "txt_idx": "sra_agent", "label": "Responsable de suivi scientifique"}, {"comment": "Responsable d'op\u00e9ration arch\u00e9ologique.", "available": true, "txt_idx": "head_scientist", "label": "Responsable scientifique"}, {"comment": "Peut utiliser toutes les fonctionnalit\u00e9s du module Administratif.", "available": true, "txt_idx": "secretarial_dept", "label": "Secr\u00e9tariat"}], "groups": [{"name": "Documents de demande de traitement : lecture"}, {"name": "Actes administratifs : modification/suppression"}, {"name": "Op\u00e9rations : cl\u00f4ture"}, {"name": "Dossiers : cl\u00f4ture"}, {"name": "D\u00e9p\u00f4ts : ajout"}, {"name": "D\u00e9p\u00f4ts : modification/suppression"}, {"name": "Actes administratifs rattach\u00e9s : lecture"}, {"name": "Demandes de traitement rattach\u00e9es : ajout"}, {"name": "Documents op\u00e9ration : ajout"}, {"name": "Documents op\u00e9ration : modification/suppression"}, {"name": "Demandes de traitement rattach\u00e9es : lecture"}, {"name": "Dossiers : ajout"}, {"name": "Documents de demande de traitement : ajout"}, {"name": "Dossiers : modification/suppression"}, {"name": "Demandes de traitement rattach\u00e9es : modification/suppression"}, {"name": "Mobilier : ajout"}, {"name": "Mobilier : modification/suppression"}, {"name": "Organisations rattach\u00e9es : lecture"}, {"name": "Op\u00e9rations : ajout"}, {"name": "Documents de demande de traitement : modification/suppression"}, {"name": "Op\u00e9rations : modification/suppression"}, {"name": "Organisations rattach\u00e9es : ajout"}, {"name": "Organisations : ajout"}, {"name": "Organisations : modification/suppression"}, {"name": "Organisations rattach\u00e9es : modification/suppression"}, {"name": "Traitements : ajout"}, {"name": "Traitements : modification/suppression"}, {"name": "Actes administratifs : ajout"}, {"name": "Documents UE : lecture"}, {"name": "Documents UE rattach\u00e9s : lecture"}, {"name": "Documents UE : ajout"}, {"name": "Actes administratifs : lecture"}, {"name": "Auteurs : lecture"}, {"name": "Personnes : ajout"}, {"name": "Personnes : modification/suppression"}, {"name": "Actes administratifs rattach\u00e9s : ajout"}, {"name": "Actes administratifs rattach\u00e9s : modification/suppression"}, {"name": "D\u00e9p\u00f4ts rattach\u00e9s : ajout"}, {"name": "D\u00e9p\u00f4ts rattach\u00e9s : modification/suppression"}, {"name": "Documents op\u00e9ration rattach\u00e9s : ajout"}, {"name": "Documents op\u00e9ration rattach\u00e9s : modification/suppression"}, {"name": "Dossiers rattach\u00e9s : ajout"}, {"name": "Dossiers rattach\u00e9s : modification/suppression"}, {"name": "Traitements rattach\u00e9s : ajout"}, {"name": "Traitements rattach\u00e9s : modification/suppression"}, {"name": "Demandes de traitement : ajout"}, {"name": "Demandes de traitement : lecture"}, {"name": "Demandes de traitement : modification/suppression"}, {"name": "Auteurs : ajout"}, {"name": "Auteurs : modification/suppression"}, {"name": "D\u00e9p\u00f4ts rattach\u00e9s : lecture"}, {"name": "D\u00e9p\u00f4ts : lecture"}, {"name": "Documents op\u00e9ration rattach\u00e9s : lecture"}, {"name": "Documents op\u00e9ration : lecture"}, {"name": "Dossiers rattach\u00e9s : lecture"}, {"name": "Dossiers : lecture"}, {"name": "Mobilier : lecture"}, {"name": "Op\u00e9rations : lecture"}, {"name": "Organisations : lecture"}, {"name": "Personnes : lecture"}, {"name": "Traitements rattach\u00e9s : lecture"}, {"name": "Traitements : lecture"}, {"name": "UE : lecture"}, {"name": "UE : ajout"}, {"name": "UE : modification/suppression"}, {"name": "UE rattach\u00e9es : ajout"}, {"name": "UE rattach\u00e9es : lecture"}, {"name": "UE rattach\u00e9es : modification/suppression"}, {"name": "Personnes rattach\u00e9es : ajout"}, {"name": "Personnes rattach\u00e9es : lecture"}, {"name": "Personnes rattach\u00e9es : modification/suppression"}, {"name": "Op\u00e9rations rattach\u00e9es : ajout"}, {"name": "Op\u00e9rations rattach\u00e9es : lecture"}, {"name": "Op\u00e9rations rattach\u00e9es : modification/suppression"}, {"name": "Mobilier rattach\u00e9 : ajout"}, {"name": "Mobilier rattach\u00e9 : lecture"}, {"name": "Mobilier rattach\u00e9 : modification/suppression"}, {"name": "Documents UE rattach\u00e9s : modification/suppression"}, {"name": "Documents UE : modification/suppression"}, {"name": "Documents UE rattach\u00e9s : ajout"}, {"name": "Documents mobilier : lecture"}, {"name": "Documents mobilier : ajout"}, {"name": "Documents mobilier : modification/suppression"}, {"name": "Documents mobilier rattach\u00e9s : ajout"}, {"name": "Documents mobilier rattach\u00e9s : lecture"}, {"name": "Documents mobilier rattach\u00e9s : modification/suppression"}, {"name": "Documents de traitement : lecture"}, {"name": "Documents de traitement : ajout"}, {"name": "Documents de traitement : modification/suppression"}, {"name": "Documents de traitement rattach\u00e9s : lecture"}, {"name": "Documents de traitement rattach\u00e9s : ajout"}, {"name": "Documents de traitement rattach\u00e9s : modification/suppression"}, {"name": "Documents de demande de traitement rattach\u00e9s : lecture"}, {"name": "Documents de demande de traitement rattach\u00e9s : ajout"}, {"name": "Documents de demande de traitement rattach\u00e9s : modification/suppression"}], "group_perms": [{"group": "Documents de demande de traitement : lecture", "permission": "view_filetreatmentsource"}, {"group": "Actes administratifs : modification/suppression", "permission": "change_administrativeact"}, {"group": "Actes administratifs : modification/suppression", "permission": "delete_administrativeact"}, {"group": "Op\u00e9rations : cl\u00f4ture", "permission": "close_operation"}, {"group": "Dossiers : cl\u00f4ture", "permission": "close_file"}, {"group": "D\u00e9p\u00f4ts : ajout", "permission": "add_warehouse"}, {"group": "D\u00e9p\u00f4ts : modification/suppression", "permission": "change_warehouse"}, {"group": "D\u00e9p\u00f4ts : modification/suppression", "permission": "delete_warehouse"}, {"group": "Actes administratifs rattach\u00e9s : lecture", "permission": "view_own_administrativeact"}, {"group": "Demandes de traitement rattach\u00e9es : ajout", "permission": "add_own_filetreatment"}, {"group": "Documents op\u00e9ration : ajout", "permission": "add_operation"}, {"group": "Documents op\u00e9ration : modification/suppression", "permission": "change_operation"}, {"group": "Documents op\u00e9ration : modification/suppression", "permission": "delete_operation"}, {"group": "Demandes de traitement rattach\u00e9es : lecture", "permission": "view_own_filetreatment"}, {"group": "Dossiers : ajout", "permission": "add_file"}, {"group": "Documents de demande de traitement : ajout", "permission": "add_treatmentfilesource"}, {"group": "Dossiers : modification/suppression", "permission": "change_file"}, {"group": "Dossiers : modification/suppression", "permission": "delete_file"}, {"group": "Demandes de traitement rattach\u00e9es : modification/suppression", "permission": "change_own_filetreatment"}, {"group": "Demandes de traitement rattach\u00e9es : modification/suppression", "permission": "delete_own_filetreatment"}, {"group": "Mobilier : ajout", "permission": "add_basefind"}, {"group": "Mobilier : ajout", "permission": "add_find"}, {"group": "Mobilier : modification/suppression", "permission": "change_basefind"}, {"group": "Mobilier : modification/suppression", "permission": "delete_basefind"}, {"group": "Mobilier : modification/suppression", "permission": "change_find"}, {"group": "Mobilier : modification/suppression", "permission": "delete_find"}, {"group": "Organisations rattach\u00e9es : lecture", "permission": "view_own_organization"}, {"group": "Op\u00e9rations : ajout", "permission": "add_operation"}, {"group": "Documents de demande de traitement : modification/suppression", "permission": "change_treatmentfilesource"}, {"group": "Documents de demande de traitement : modification/suppression", "permission": "delete_treatmentfilesource"}, {"group": "Op\u00e9rations : modification/suppression", "permission": "change_operation"}, {"group": "Op\u00e9rations : modification/suppression", "permission": "delete_operation"}, {"group": "Organisations rattach\u00e9es : ajout", "permission": "add_own_organization"}, {"group": "Organisations : ajout", "permission": "add_organization"}, {"group": "Organisations : modification/suppression", "permission": "change_organization"}, {"group": "Organisations : modification/suppression", "permission": "delete_organization"}, {"group": "Organisations rattach\u00e9es : modification/suppression", "permission": "change_own_organization"}, {"group": "Organisations rattach\u00e9es : modification/suppression", "permission": "delete_own_organization"}, {"group": "Traitements : ajout", "permission": "add_treatment"}, {"group": "Traitements : modification/suppression", "permission": "change_treatment"}, {"group": "Traitements : modification/suppression", "permission": "delete_treatment"}, {"group": "Actes administratifs : ajout", "permission": "add_administrativeact"}, {"group": "Documents UE : lecture", "permission": "view_contextrecordsource"}, {"group": "Documents UE rattach\u00e9s : lecture", "permission": "view_own_contextrecordsource"}, {"group": "Documents UE : ajout", "permission": "add_contextrecordsource"}, {"group": "Actes administratifs : lecture", "permission": "view_administrativeact"}, {"group": "Auteurs : lecture", "permission": "view_author"}, {"group": "Personnes : ajout", "permission": "add_person"}, {"group": "Personnes : modification/suppression", "permission": "change_person"}, {"group": "Personnes : modification/suppression", "permission": "delete_person"}, {"group": "Actes administratifs rattach\u00e9s : ajout", "permission": "add_own_administrativeact"}, {"group": "Actes administratifs rattach\u00e9s : modification/suppression", "permission": "change_own_administrativeact"}, {"group": "Actes administratifs rattach\u00e9s : modification/suppression", "permission": "delete_own_administrativeact"}, {"group": "D\u00e9p\u00f4ts rattach\u00e9s : ajout", "permission": "add_own_warehouse"}, {"group": "D\u00e9p\u00f4ts rattach\u00e9s : modification/suppression", "permission": "change_own_warehouse"}, {"group": "D\u00e9p\u00f4ts rattach\u00e9s : modification/suppression", "permission": "delete_own_warehouse"}, {"group": "Documents op\u00e9ration rattach\u00e9s : ajout", "permission": "add_own_operation"}, {"group": "Documents op\u00e9ration rattach\u00e9s : modification/suppression", "permission": "change_own_operation"}, {"group": "Documents op\u00e9ration rattach\u00e9s : modification/suppression", "permission": "delete_own_operation"}, {"group": "Dossiers rattach\u00e9s : ajout", "permission": "add_own_file"}, {"group": "Dossiers rattach\u00e9s : modification/suppression", "permission": "change_own_file"}, {"group": "Dossiers rattach\u00e9s : modification/suppression", "permission": "delete_own_file"}, {"group": "Traitements rattach\u00e9s : ajout", "permission": "add_own_treatment"}, {"group": "Traitements rattach\u00e9s : modification/suppression", "permission": "change_own_treatment"}, {"group": "Traitements rattach\u00e9s : modification/suppression", "permission": "delete_own_treatment"}, {"group": "Demandes de traitement : ajout", "permission": "add_filetreatment"}, {"group": "Demandes de traitement : lecture", "permission": "view_filetreatment"}, {"group": "Demandes de traitement : modification/suppression", "permission": "change_filetreatment"}, {"group": "Demandes de traitement : modification/suppression", "permission": "delete_filetreatment"}, {"group": "Auteurs : ajout", "permission": "add_author"}, {"group": "Auteurs : modification/suppression", "permission": "change_author"}, {"group": "Auteurs : modification/suppression", "permission": "delete_author"}, {"group": "D\u00e9p\u00f4ts rattach\u00e9s : lecture", "permission": "view_own_warehouse"}, {"group": "D\u00e9p\u00f4ts : lecture", "permission": "view_warehouse"}, {"group": "Documents op\u00e9ration rattach\u00e9s : lecture", "permission": "view_own_operationsource"}, {"group": "Documents op\u00e9ration : lecture", "permission": "view_operationsource"}, {"group": "Dossiers rattach\u00e9s : lecture", "permission": "view_own_file"}, {"group": "Dossiers : lecture", "permission": "view_file"}, {"group": "Mobilier : lecture", "permission": "view_basefind"}, {"group": "Mobilier : lecture", "permission": "view_find"}, {"group": "Op\u00e9rations : lecture", "permission": "view_operation"}, {"group": "Organisations : lecture", "permission": "view_organization"}, {"group": "Personnes : lecture", "permission": "view_person"}, {"group": "Traitements rattach\u00e9s : lecture", "permission": "view_own_treatment"}, {"group": "Traitements : lecture", "permission": "view_treatment"}, {"group": "UE : lecture", "permission": "view_contextrecord"}, {"group": "UE : ajout", "permission": "add_contextrecord"}, {"group": "UE : modification/suppression", "permission": "change_contextrecord"}, {"group": "UE : modification/suppression", "permission": "delete_contextrecord"}, {"group": "UE rattach\u00e9es : ajout", "permission": "add_own_contextrecord"}, {"group": "UE rattach\u00e9es : lecture", "permission": "view_own_contextrecord"}, {"group": "UE rattach\u00e9es : modification/suppression", "permission": "change_own_contextrecord"}, {"group": "UE rattach\u00e9es : modification/suppression", "permission": "delete_own_contextrecord"}, {"group": "Personnes rattach\u00e9es : ajout", "permission": "add_own_person"}, {"group": "Personnes rattach\u00e9es : lecture", "permission": "view_own_person"}, {"group": "Personnes rattach\u00e9es : modification/suppression", "permission": "change_own_person"}, {"group": "Personnes rattach\u00e9es : modification/suppression", "permission": "delete_own_person"}, {"group": "Op\u00e9rations rattach\u00e9es : ajout", "permission": "add_own_operation"}, {"group": "Op\u00e9rations rattach\u00e9es : lecture", "permission": "view_own_operation"}, {"group": "Op\u00e9rations rattach\u00e9es : modification/suppression", "permission": "change_own_operation"}, {"group": "Op\u00e9rations rattach\u00e9es : modification/suppression", "permission": "delete_own_operation"}, {"group": "Mobilier rattach\u00e9 : ajout", "permission": "add_own_basefind"}, {"group": "Mobilier rattach\u00e9 : ajout", "permission": "add_own_find"}, {"group": "Mobilier rattach\u00e9 : lecture", "permission": "view_own_basefind"}, {"group": "Mobilier rattach\u00e9 : lecture", "permission": "view_own_find"}, {"group": "Mobilier rattach\u00e9 : modification/suppression", "permission": "change_own_basefind"}, {"group": "Mobilier rattach\u00e9 : modification/suppression", "permission": "delete_own_basefind"}, {"group": "Mobilier rattach\u00e9 : modification/suppression", "permission": "change_own_find"}, {"group": "Mobilier rattach\u00e9 : modification/suppression", "permission": "delete_own_find"}, {"group": "Documents UE rattach\u00e9s : modification/suppression", "permission": "change_own_contextrecordsource"}, {"group": "Documents UE rattach\u00e9s : modification/suppression", "permission": "delete_own_contextrecordsource"}, {"group": "Documents UE : modification/suppression", "permission": "change_contextrecordsource"}, {"group": "Documents UE : modification/suppression", "permission": "delete_contextrecordsource"}, {"group": "Documents UE rattach\u00e9s : ajout", "permission": "add_own_contextrecordsource"}, {"group": "Documents mobilier : lecture", "permission": "view_findsource"}, {"group": "Documents mobilier : ajout", "permission": "add_findsource"}, {"group": "Documents mobilier : modification/suppression", "permission": "change_findsource"}, {"group": "Documents mobilier : modification/suppression", "permission": "delete_findsource"}, {"group": "Documents mobilier rattach\u00e9s : ajout", "permission": "add_own_findsource"}, {"group": "Documents mobilier rattach\u00e9s : lecture", "permission": "view_own_findsource"}, {"group": "Documents mobilier rattach\u00e9s : modification/suppression", "permission": "change_own_findsource"}, {"group": "Documents mobilier rattach\u00e9s : modification/suppression", "permission": "delete_own_findsource"}, {"group": "Documents de traitement : lecture", "permission": "view_treatmentsource"}, {"group": "Documents de traitement : ajout", "permission": "add_treatmentsource"}, {"group": "Documents de traitement : modification/suppression", "permission": "change_treatmentsource"}, {"group": "Documents de traitement : modification/suppression", "permission": "delete_treatmentsource"}, {"group": "Documents de traitement rattach\u00e9s : lecture", "permission": "view_own_treatmentsource"}, {"group": "Documents de traitement rattach\u00e9s : ajout", "permission": "add_own_treatmentsource"}, {"group": "Documents de traitement rattach\u00e9s : modification/suppression", "permission": "change_own_treatmentsource"}, {"group": "Documents de traitement rattach\u00e9s : modification/suppression", "permission": "delete_own_treatmentsource"}, {"group": "Documents de demande de traitement rattach\u00e9s : lecture", "permission": "view_own_filetreatmentsource"}, {"group": "Documents de demande de traitement rattach\u00e9s : ajout", "permission": "add_own_filetreatmentsource"}, {"group": "Documents de demande de traitement rattach\u00e9s : modification/suppression", "permission": "change_own_filetreatmentsource"}, {"group": "Documents de demande de traitement rattach\u00e9s : modification/suppression", "permission": "delete_own_filetreatmentsource"}], "person_type_groups": [{"person_type": "reader_access", "group": "Actes administratifs : lecture"}, {"person_type": "reader_access", "group": "Demandes de traitement : lecture"}, {"person_type": "reader_access", "group": "D\u00e9p\u00f4ts : lecture"}, {"person_type": "reader_access", "group": "Documents op\u00e9ration : lecture"}, {"person_type": "reader_access", "group": "Dossiers : lecture"}, {"person_type": "reader_access", "group": "Mobilier : lecture"}, {"person_type": "reader_access", "group": "Op\u00e9rations : lecture"}, {"person_type": "reader_access", "group": "Organisations : lecture"}, {"person_type": "reader_access", "group": "Personnes : lecture"}, {"person_type": "reader_access", "group": "Traitements : lecture"}, {"person_type": "reader_access", "group": "UE : lecture"}, {"person_type": "administrator", "group": "Op\u00e9rations : lecture"}, {"person_type": "administrator", "group": "Dossiers : lecture"}, {"person_type": "administrator", "group": "UE : lecture"}, {"person_type": "administrator", "group": "D\u00e9p\u00f4ts : lecture"}, {"person_type": "administrator", "group": "Mobilier : lecture"}, {"person_type": "administrator", "group": "Traitements : lecture"}, {"person_type": "administrator", "group": "Actes administratifs : lecture"}, {"person_type": "administrator", "group": "Actes administratifs : ajout"}, {"person_type": "administrator", "group": "Actes administratifs : modification/suppression"}, {"person_type": "administrator", "group": "D\u00e9p\u00f4ts : ajout"}, {"person_type": "administrator", "group": "D\u00e9p\u00f4ts : modification/suppression"}, {"person_type": "administrator", "group": "Dossiers : ajout"}, {"person_type": "administrator", "group": "Dossiers : modification/suppression"}, {"person_type": "administrator", "group": "Mobilier : ajout"}, {"person_type": "administrator", "group": "Mobilier : modification/suppression"}, {"person_type": "administrator", "group": "Op\u00e9rations : ajout"}, {"person_type": "administrator", "group": "Op\u00e9rations : modification/suppression"}, {"person_type": "administrator", "group": "Traitements : ajout"}, {"person_type": "administrator", "group": "Traitements : modification/suppression"}, {"person_type": "administrator", "group": "UE : ajout"}, {"person_type": "administrator", "group": "UE : modification/suppression"}, {"person_type": "administrator", "group": "Personnes : ajout"}, {"person_type": "administrator", "group": "Personnes : modification/suppression"}, {"person_type": "administrator", "group": "Organisations : lecture"}, {"person_type": "administrator", "group": "Organisations : modification/suppression"}, {"person_type": "administrator", "group": "Organisations : ajout"}, {"person_type": "administrator", "group": "Op\u00e9rations : cl\u00f4ture"}, {"person_type": "administrator", "group": "Dossiers : cl\u00f4ture"}, {"person_type": "administrator", "group": "Documents op\u00e9ration : lecture"}, {"person_type": "administrator", "group": "Documents op\u00e9ration : modification/suppression"}, {"person_type": "administrator", "group": "Documents op\u00e9ration : ajout"}, {"person_type": "administrator", "group": "Personnes : lecture"}, {"person_type": "administrator", "group": "Actes administratifs rattach\u00e9s : ajout"}, {"person_type": "administrator", "group": "Actes administratifs rattach\u00e9s : modification/suppression"}, {"person_type": "administrator", "group": "Actes administratifs rattach\u00e9s : lecture"}, {"person_type": "administrator", "group": "D\u00e9p\u00f4ts rattach\u00e9s : ajout"}, {"person_type": "administrator", "group": "D\u00e9p\u00f4ts rattach\u00e9s : modification/suppression"}, {"person_type": "administrator", "group": "D\u00e9p\u00f4ts rattach\u00e9s : lecture"}, {"person_type": "administrator", "group": "Documents op\u00e9ration rattach\u00e9s : ajout"}, {"person_type": "administrator", "group": "Documents op\u00e9ration rattach\u00e9s : modification/suppression"}, {"person_type": "administrator", "group": "Documents op\u00e9ration rattach\u00e9s : lecture"}, {"person_type": "administrator", "group": "Dossiers rattach\u00e9s : ajout"}, {"person_type": "administrator", "group": "Dossiers rattach\u00e9s : modification/suppression"}, {"person_type": "administrator", "group": "Dossiers rattach\u00e9s : lecture"}, {"person_type": "administrator", "group": "Mobilier rattach\u00e9 : ajout"}, {"person_type": "administrator", "group": "Mobilier rattach\u00e9 : modification/suppression"}, {"person_type": "administrator", "group": "Mobilier rattach\u00e9 : lecture"}, {"person_type": "administrator", "group": "Op\u00e9rations rattach\u00e9es : ajout"}, {"person_type": "administrator", "group": "Op\u00e9rations rattach\u00e9es : modification/suppression"}, {"person_type": "administrator", "group": "Op\u00e9rations rattach\u00e9es : lecture"}, {"person_type": "administrator", "group": "Organisations rattach\u00e9es : ajout"}, {"person_type": "administrator", "group": "Organisations rattach\u00e9es : modification/suppression"}, {"person_type": "administrator", "group": "Organisations rattach\u00e9es : lecture"}, {"person_type": "administrator", "group": "Traitements rattach\u00e9s : ajout"}, {"person_type": "administrator", "group": "Traitements rattach\u00e9s : modification/suppression"}, {"person_type": "administrator", "group": "Traitements rattach\u00e9s : lecture"}, {"person_type": "administrator", "group": "UE rattach\u00e9es : ajout"}, {"person_type": "administrator", "group": "UE rattach\u00e9es : modification/suppression"}, {"person_type": "administrator", "group": "UE rattach\u00e9es : lecture"}, {"person_type": "administrator", "group": "Personnes rattach\u00e9es : ajout"}, {"person_type": "administrator", "group": "Personnes rattach\u00e9es : modification/suppression"}, {"person_type": "administrator", "group": "Personnes rattach\u00e9es : lecture"}, {"person_type": "administrator", "group": "Demandes de traitement : ajout"}, {"person_type": "administrator", "group": "Demandes de traitement : modification/suppression"}, {"person_type": "administrator", "group": "Demandes de traitement : lecture"}, {"person_type": "administrator", "group": "Demandes de traitement rattach\u00e9es : ajout"}, {"person_type": "administrator", "group": "Demandes de traitement rattach\u00e9es : lecture"}, {"person_type": "administrator", "group": "Demandes de traitement rattach\u00e9es : modification/suppression"}, {"person_type": "administrator", "group": "Auteurs : ajout"}, {"person_type": "administrator", "group": "Auteurs : modification/suppression"}, {"person_type": "administrator", "group": "Auteurs : lecture"}, {"person_type": "collaborator", "group": "Auteurs : ajout"}, {"person_type": "collaborator", "group": "Auteurs : modification/suppression"}, {"person_type": "collaborator", "group": "Auteurs : lecture"}, {"person_type": "collaborator", "group": "Documents op\u00e9ration rattach\u00e9s : modification/suppression"}, {"person_type": "collaborator", "group": "Documents op\u00e9ration rattach\u00e9s : lecture"}, {"person_type": "collaborator", "group": "Mobilier rattach\u00e9 : ajout"}, {"person_type": "collaborator", "group": "Mobilier rattach\u00e9 : modification/suppression"}, {"person_type": "collaborator", "group": "Mobilier rattach\u00e9 : lecture"}, {"person_type": "collaborator", "group": "Documents op\u00e9ration rattach\u00e9s : ajout"}, {"person_type": "collaborator", "group": "Op\u00e9rations rattach\u00e9es : lecture"}, {"person_type": "collaborator", "group": "UE rattach\u00e9es : ajout"}, {"person_type": "collaborator", "group": "UE rattach\u00e9es : modification/suppression"}, {"person_type": "collaborator", "group": "UE rattach\u00e9es : lecture"}, {"person_type": "collaborator", "group": "Personnes rattach\u00e9es : lecture"}, {"person_type": "warehouse_manager", "group": "Demandes de traitement : ajout"}, {"person_type": "warehouse_manager", "group": "Demandes de traitement : modification/suppression"}, {"person_type": "warehouse_manager", "group": "Demandes de traitement : lecture"}, {"person_type": "warehouse_manager", "group": "UE : lecture"}, {"person_type": "warehouse_manager", "group": "D\u00e9p\u00f4ts : lecture"}, {"person_type": "warehouse_manager", "group": "Mobilier : lecture"}, {"person_type": "warehouse_manager", "group": "Op\u00e9rations : lecture"}, {"person_type": "warehouse_manager", "group": "Actes administratifs : lecture"}, {"person_type": "warehouse_manager", "group": "D\u00e9p\u00f4ts : ajout"}, {"person_type": "warehouse_manager", "group": "D\u00e9p\u00f4ts : modification/suppression"}, {"person_type": "warehouse_manager", "group": "Dossiers : lecture"}, {"person_type": "warehouse_manager", "group": "Mobilier : ajout"}, {"person_type": "warehouse_manager", "group": "Mobilier : modification/suppression"}, {"person_type": "warehouse_manager", "group": "Auteurs : lecture"}, {"person_type": "warehouse_manager", "group": "Traitements : ajout"}, {"person_type": "warehouse_manager", "group": "Traitements : modification/suppression"}, {"person_type": "warehouse_manager", "group": "Traitements : lecture"}, {"person_type": "warehouse_manager", "group": "Organisations : lecture"}, {"person_type": "warehouse_manager", "group": "Personnes : lecture"}, {"person_type": "warehouse_manager", "group": "Documents op\u00e9ration : lecture"}, {"person_type": "sra_agent", "group": "Op\u00e9rations : lecture"}, {"person_type": "sra_agent", "group": "Dossiers : lecture"}, {"person_type": "sra_agent", "group": "UE : lecture"}, {"person_type": "sra_agent", "group": "D\u00e9p\u00f4ts : lecture"}, {"person_type": "sra_agent", "group": "Mobilier : lecture"}, {"person_type": "sra_agent", "group": "Traitements : lecture"}, {"person_type": "sra_agent", "group": "Actes administratifs : lecture"}, {"person_type": "sra_agent", "group": "Actes administratifs : ajout"}, {"person_type": "sra_agent", "group": "Actes administratifs : modification/suppression"}, {"person_type": "sra_agent", "group": "Dossiers : ajout"}, {"person_type": "sra_agent", "group": "Dossiers : modification/suppression"}, {"person_type": "sra_agent", "group": "Mobilier : ajout"}, {"person_type": "sra_agent", "group": "Mobilier : modification/suppression"}, {"person_type": "sra_agent", "group": "Op\u00e9rations : ajout"}, {"person_type": "sra_agent", "group": "Op\u00e9rations : modification/suppression"}, {"person_type": "sra_agent", "group": "UE : ajout"}, {"person_type": "sra_agent", "group": "UE : modification/suppression"}, {"person_type": "sra_agent", "group": "Personnes : ajout"}, {"person_type": "sra_agent", "group": "Personnes : modification/suppression"}, {"person_type": "sra_agent", "group": "Organisations : lecture"}, {"person_type": "sra_agent", "group": "Organisations : modification/suppression"}, {"person_type": "sra_agent", "group": "Organisations : ajout"}, {"person_type": "sra_agent", "group": "Op\u00e9rations : cl\u00f4ture"}, {"person_type": "sra_agent", "group": "Dossiers : cl\u00f4ture"}, {"person_type": "sra_agent", "group": "Documents op\u00e9ration : lecture"}, {"person_type": "sra_agent", "group": "Documents op\u00e9ration : modification/suppression"}, {"person_type": "sra_agent", "group": "Documents op\u00e9ration : ajout"}, {"person_type": "sra_agent", "group": "Personnes : lecture"}, {"person_type": "sra_agent", "group": "Demandes de traitement : lecture"}, {"person_type": "sra_agent", "group": "Auteurs : ajout"}, {"person_type": "sra_agent", "group": "Auteurs : modification/suppression"}, {"person_type": "sra_agent", "group": "Auteurs : lecture"}, {"person_type": "head_scientist", "group": "Op\u00e9rations : lecture"}, {"person_type": "head_scientist", "group": "Auteurs : ajout"}, {"person_type": "head_scientist", "group": "Auteurs : modification/suppression"}, {"person_type": "head_scientist", "group": "Auteurs : lecture"}, {"person_type": "head_scientist", "group": "Documents op\u00e9ration rattach\u00e9s : modification/suppression"}, {"person_type": "head_scientist", "group": "Documents op\u00e9ration rattach\u00e9s : lecture"}, {"person_type": "head_scientist", "group": "Mobilier rattach\u00e9 : ajout"}, {"person_type": "head_scientist", "group": "Mobilier rattach\u00e9 : modification/suppression"}, {"person_type": "head_scientist", "group": "Mobilier rattach\u00e9 : lecture"}, {"person_type": "head_scientist", "group": "Documents op\u00e9ration rattach\u00e9s : ajout"}, {"person_type": "head_scientist", "group": "Op\u00e9rations rattach\u00e9es : modification/suppression"}, {"person_type": "head_scientist", "group": "UE rattach\u00e9es : ajout"}, {"person_type": "head_scientist", "group": "UE rattach\u00e9es : modification/suppression"}, {"person_type": "head_scientist", "group": "UE rattach\u00e9es : lecture"}, {"person_type": "head_scientist", "group": "Personnes rattach\u00e9es : lecture"}, {"person_type": "secretarial_dept", "group": "Op\u00e9rations : lecture"}, {"person_type": "secretarial_dept", "group": "Dossiers : lecture"}, {"person_type": "secretarial_dept", "group": "UE : lecture"}, {"person_type": "secretarial_dept", "group": "Mobilier : lecture"}, {"person_type": "secretarial_dept", "group": "Personnes : lecture"}, {"person_type": "secretarial_dept", "group": "Actes administratifs : lecture"}, {"person_type": "secretarial_dept", "group": "Actes administratifs : ajout"}, {"person_type": "secretarial_dept", "group": "Actes administratifs : modification/suppression"}, {"person_type": "secretarial_dept", "group": "Dossiers : ajout"}, {"person_type": "secretarial_dept", "group": "Dossiers : modification/suppression"}, {"person_type": "secretarial_dept", "group": "Op\u00e9rations : ajout"}, {"person_type": "secretarial_dept", "group": "Op\u00e9rations : modification/suppression"}, {"person_type": "secretarial_dept", "group": "Personnes : ajout"}, {"person_type": "secretarial_dept", "group": "Personnes : modification/suppression"}, {"person_type": "secretarial_dept", "group": "Organisations : lecture"}, {"person_type": "secretarial_dept", "group": "Organisations : modification/suppression"}, {"person_type": "secretarial_dept", "group": "Organisations : ajout"}, {"person_type": "secretarial_dept", "group": "Op\u00e9rations : cl\u00f4ture"}, {"person_type": "secretarial_dept", "group": "Dossiers : cl\u00f4ture"}], "permissions": [{"codename": "add_logentry", "name": "Can add log entry", "content_type": ["admin", "logentry"]}, {"codename": "change_logentry", "name": "Can change log entry", "content_type": ["admin", "logentry"]}, {"codename": "delete_logentry", "name": "Can delete log entry", "content_type": ["admin", "logentry"]}, {"codename": "add_activitytype", "name": "Can add Activity Type", "content_type": ["archaeological_context_records", "activitytype"]}, {"codename": "change_activitytype", "name": "Can change Activity Type", "content_type": ["archaeological_context_records", "activitytype"]}, {"codename": "delete_activitytype", "name": "Can delete Activity Type", "content_type": ["archaeological_context_records", "activitytype"]}, {"codename": "add_contextrecord", "name": "Can add Context Record", "content_type": ["archaeological_context_records", "contextrecord"]}, {"codename": "add_own_contextrecord", "name": "Can add own Context Record", "content_type": ["archaeological_context_records", "contextrecord"]}, {"codename": "change_contextrecord", "name": "Can change Context Record", "content_type": ["archaeological_context_records", "contextrecord"]}, {"codename": "change_own_contextrecord", "name": "Can change own Context Record", "content_type": ["archaeological_context_records", "contextrecord"]}, {"codename": "delete_contextrecord", "name": "Can delete Context Record", "content_type": ["archaeological_context_records", "contextrecord"]}, {"codename": "delete_own_contextrecord", "name": "Can delete own Context Record", "content_type": ["archaeological_context_records", "contextrecord"]}, {"codename": "view_contextrecord", "name": "Can view all Context Records", "content_type": ["archaeological_context_records", "contextrecord"]}, {"codename": "view_own_contextrecord", "name": "Can view own Context Record", "content_type": ["archaeological_context_records", "contextrecord"]}, {"codename": "add_contextrecordsource", "name": "Can add Context record documentation", "content_type": ["archaeological_context_records", "contextrecordsource"]}, {"codename": "add_own_contextrecordsource", "name": "Can add own Context record source", "content_type": ["archaeological_context_records", "contextrecordsource"]}, {"codename": "change_contextrecordsource", "name": "Can change Context record documentation", "content_type": ["archaeological_context_records", "contextrecordsource"]}, {"codename": "change_own_contextrecordsource", "name": "Can change own Context record source", "content_type": ["archaeological_context_records", "contextrecordsource"]}, {"codename": "delete_contextrecordsource", "name": "Can delete Context record documentation", "content_type": ["archaeological_context_records", "contextrecordsource"]}, {"codename": "delete_own_contextrecordsource", "name": "Can delete own Context record source", "content_type": ["archaeological_context_records", "contextrecordsource"]}, {"codename": "view_contextrecordsource", "name": "Can view all Context record sources", "content_type": ["archaeological_context_records", "contextrecordsource"]}, {"codename": "view_own_contextrecordsource", "name": "Can view own Context record source", "content_type": ["archaeological_context_records", "contextrecordsource"]}, {"codename": "add_dating", "name": "Can add Dating", "content_type": ["archaeological_context_records", "dating"]}, {"codename": "change_dating", "name": "Can change Dating", "content_type": ["archaeological_context_records", "dating"]}, {"codename": "delete_dating", "name": "Can delete Dating", "content_type": ["archaeological_context_records", "dating"]}, {"codename": "add_datingquality", "name": "Can add Dating quality", "content_type": ["archaeological_context_records", "datingquality"]}, {"codename": "change_datingquality", "name": "Can change Dating quality", "content_type": ["archaeological_context_records", "datingquality"]}, {"codename": "delete_datingquality", "name": "Can delete Dating quality", "content_type": ["archaeological_context_records", "datingquality"]}, {"codename": "add_datingtype", "name": "Can add Dating type", "content_type": ["archaeological_context_records", "datingtype"]}, {"codename": "change_datingtype", "name": "Can change Dating type", "content_type": ["archaeological_context_records", "datingtype"]}, {"codename": "delete_datingtype", "name": "Can delete Dating type", "content_type": ["archaeological_context_records", "datingtype"]}, {"codename": "add_documentationtype", "name": "Can add Documentation type", "content_type": ["archaeological_context_records", "documentationtype"]}, {"codename": "change_documentationtype", "name": "Can change Documentation type", "content_type": ["archaeological_context_records", "documentationtype"]}, {"codename": "delete_documentationtype", "name": "Can delete Documentation type", "content_type": ["archaeological_context_records", "documentationtype"]}, {"codename": "add_excavationtechnictype", "name": "Can add Excavation technic type", "content_type": ["archaeological_context_records", "excavationtechnictype"]}, {"codename": "change_excavationtechnictype", "name": "Can change Excavation technic type", "content_type": ["archaeological_context_records", "excavationtechnictype"]}, {"codename": "delete_excavationtechnictype", "name": "Can delete Excavation technic type", "content_type": ["archaeological_context_records", "excavationtechnictype"]}, {"codename": "add_historicalcontextrecord", "name": "Can add historical context record", "content_type": ["archaeological_context_records", "historicalcontextrecord"]}, {"codename": "change_historicalcontextrecord", "name": "Can change historical context record", "content_type": ["archaeological_context_records", "historicalcontextrecord"]}, {"codename": "delete_historicalcontextrecord", "name": "Can delete historical context record", "content_type": ["archaeological_context_records", "historicalcontextrecord"]}, {"codename": "add_identificationtype", "name": "Can add Identification Type", "content_type": ["archaeological_context_records", "identificationtype"]}, {"codename": "change_identificationtype", "name": "Can change Identification Type", "content_type": ["archaeological_context_records", "identificationtype"]}, {"codename": "delete_identificationtype", "name": "Can delete Identification Type", "content_type": ["archaeological_context_records", "identificationtype"]}, {"codename": "add_recordrelations", "name": "Can add Record relation", "content_type": ["archaeological_context_records", "recordrelations"]}, {"codename": "change_recordrelations", "name": "Can change Record relation", "content_type": ["archaeological_context_records", "recordrelations"]}, {"codename": "delete_recordrelations", "name": "Can delete Record relation", "content_type": ["archaeological_context_records", "recordrelations"]}, {"codename": "add_recordrelationview", "name": "Can add record relation view", "content_type": ["archaeological_context_records", "recordrelationview"]}, {"codename": "change_recordrelationview", "name": "Can change record relation view", "content_type": ["archaeological_context_records", "recordrelationview"]}, {"codename": "delete_recordrelationview", "name": "Can delete record relation view", "content_type": ["archaeological_context_records", "recordrelationview"]}, {"codename": "add_relationtype", "name": "Can add Relation type", "content_type": ["archaeological_context_records", "relationtype"]}, {"codename": "change_relationtype", "name": "Can change Relation type", "content_type": ["archaeological_context_records", "relationtype"]}, {"codename": "delete_relationtype", "name": "Can delete Relation type", "content_type": ["archaeological_context_records", "relationtype"]}, {"codename": "add_unit", "name": "Can add Unit Type", "content_type": ["archaeological_context_records", "unit"]}, {"codename": "change_unit", "name": "Can change Unit Type", "content_type": ["archaeological_context_records", "unit"]}, {"codename": "delete_unit", "name": "Can delete Unit Type", "content_type": ["archaeological_context_records", "unit"]}, {"codename": "add_file", "name": "Can add Archaeological file", "content_type": ["archaeological_files", "file"]}, {"codename": "add_own_file", "name": "Can add own Archaelogical file", "content_type": ["archaeological_files", "file"]}, {"codename": "change_file", "name": "Can change Archaeological file", "content_type": ["archaeological_files", "file"]}, {"codename": "change_own_file", "name": "Can change own Archaelogical file", "content_type": ["archaeological_files", "file"]}, {"codename": "close_file", "name": "Can close File", "content_type": ["archaeological_files", "file"]}, {"codename": "delete_file", "name": "Can delete Archaeological file", "content_type": ["archaeological_files", "file"]}, {"codename": "delete_own_file", "name": "Can delete own Archaelogical file", "content_type": ["archaeological_files", "file"]}, {"codename": "view_file", "name": "Can view all Archaelogical files", "content_type": ["archaeological_files", "file"]}, {"codename": "view_own_file", "name": "Can view own Archaelogical file", "content_type": ["archaeological_files", "file"]}, {"codename": "add_filebydepartment", "name": "Can add file by department", "content_type": ["archaeological_files", "filebydepartment"]}, {"codename": "change_filebydepartment", "name": "Can change file by department", "content_type": ["archaeological_files", "filebydepartment"]}, {"codename": "delete_filebydepartment", "name": "Can delete file by department", "content_type": ["archaeological_files", "filebydepartment"]}, {"codename": "add_filetype", "name": "Can add Archaeological file type", "content_type": ["archaeological_files", "filetype"]}, {"codename": "change_filetype", "name": "Can change Archaeological file type", "content_type": ["archaeological_files", "filetype"]}, {"codename": "delete_filetype", "name": "Can delete Archaeological file type", "content_type": ["archaeological_files", "filetype"]}, {"codename": "add_historicalfile", "name": "Can add historical file", "content_type": ["archaeological_files", "historicalfile"]}, {"codename": "change_historicalfile", "name": "Can change historical file", "content_type": ["archaeological_files", "historicalfile"]}, {"codename": "delete_historicalfile", "name": "Can delete historical file", "content_type": ["archaeological_files", "historicalfile"]}, {"codename": "add_permittype", "name": "Can add Permit type", "content_type": ["archaeological_files", "permittype"]}, {"codename": "change_permittype", "name": "Can change Permit type", "content_type": ["archaeological_files", "permittype"]}, {"codename": "delete_permittype", "name": "Can delete Permit type", "content_type": ["archaeological_files", "permittype"]}, {"codename": "add_saisinetype", "name": "Can add Type Saisine", "content_type": ["archaeological_files", "saisinetype"]}, {"codename": "change_saisinetype", "name": "Can change Type Saisine", "content_type": ["archaeological_files", "saisinetype"]}, {"codename": "delete_saisinetype", "name": "Can delete Type Saisine", "content_type": ["archaeological_files", "saisinetype"]}, {"codename": "add_basefind", "name": "Can add Base find", "content_type": ["archaeological_finds", "basefind"]}, {"codename": "add_own_basefind", "name": "Can add own Base find", "content_type": ["archaeological_finds", "basefind"]}, {"codename": "change_basefind", "name": "Can change Base find", "content_type": ["archaeological_finds", "basefind"]}, {"codename": "change_own_basefind", "name": "Can change own Base find", "content_type": ["archaeological_finds", "basefind"]}, {"codename": "delete_basefind", "name": "Can delete Base find", "content_type": ["archaeological_finds", "basefind"]}, {"codename": "delete_own_basefind", "name": "Can delete own Base find", "content_type": ["archaeological_finds", "basefind"]}, {"codename": "view_basefind", "name": "Can view all Base finds", "content_type": ["archaeological_finds", "basefind"]}, {"codename": "view_own_basefind", "name": "Can view own Base find", "content_type": ["archaeological_finds", "basefind"]}, {"codename": "add_batchtype", "name": "Can add Batch type", "content_type": ["archaeological_finds", "batchtype"]}, {"codename": "change_batchtype", "name": "Can change Batch type", "content_type": ["archaeological_finds", "batchtype"]}, {"codename": "delete_batchtype", "name": "Can delete Batch type", "content_type": ["archaeological_finds", "batchtype"]}, {"codename": "add_conservatorystate", "name": "Can add Conservatory state", "content_type": ["archaeological_finds", "conservatorystate"]}, {"codename": "change_conservatorystate", "name": "Can change Conservatory state", "content_type": ["archaeological_finds", "conservatorystate"]}, {"codename": "delete_conservatorystate", "name": "Can delete Conservatory state", "content_type": ["archaeological_finds", "conservatorystate"]}, {"codename": "add_find", "name": "Can add Find", "content_type": ["archaeological_finds", "find"]}, {"codename": "add_own_find", "name": "Can add own Find", "content_type": ["archaeological_finds", "find"]}, {"codename": "change_find", "name": "Can change Find", "content_type": ["archaeological_finds", "find"]}, {"codename": "change_own_find", "name": "Can change own Find", "content_type": ["archaeological_finds", "find"]}, {"codename": "delete_find", "name": "Can delete Find", "content_type": ["archaeological_finds", "find"]}, {"codename": "delete_own_find", "name": "Can delete own Find", "content_type": ["archaeological_finds", "find"]}, {"codename": "view_find", "name": "Can view all Finds", "content_type": ["archaeological_finds", "find"]}, {"codename": "view_own_find", "name": "Can view own Find", "content_type": ["archaeological_finds", "find"]}, {"codename": "add_findbasket", "name": "Can add find basket", "content_type": ["archaeological_finds", "findbasket"]}, {"codename": "change_findbasket", "name": "Can change find basket", "content_type": ["archaeological_finds", "findbasket"]}, {"codename": "delete_findbasket", "name": "Can delete find basket", "content_type": ["archaeological_finds", "findbasket"]}, {"codename": "add_finddownstreamtreatments", "name": "Can add find downstream treatments", "content_type": ["archaeological_finds", "finddownstreamtreatments"]}, {"codename": "change_finddownstreamtreatments", "name": "Can change find downstream treatments", "content_type": ["archaeological_finds", "finddownstreamtreatments"]}, {"codename": "delete_finddownstreamtreatments", "name": "Can delete find downstream treatments", "content_type": ["archaeological_finds", "finddownstreamtreatments"]}, {"codename": "add_findsource", "name": "Can add Find documentation", "content_type": ["archaeological_finds", "findsource"]}, {"codename": "add_own_findsource", "name": "Can add own Find source", "content_type": ["archaeological_finds", "findsource"]}, {"codename": "change_findsource", "name": "Can change Find documentation", "content_type": ["archaeological_finds", "findsource"]}, {"codename": "change_own_findsource", "name": "Can change own Find source", "content_type": ["archaeological_finds", "findsource"]}, {"codename": "delete_findsource", "name": "Can delete Find documentation", "content_type": ["archaeological_finds", "findsource"]}, {"codename": "delete_own_findsource", "name": "Can delete own Find source", "content_type": ["archaeological_finds", "findsource"]}, {"codename": "view_findsource", "name": "Can view all Find sources", "content_type": ["archaeological_finds", "findsource"]}, {"codename": "view_own_findsource", "name": "Can view own Find source", "content_type": ["archaeological_finds", "findsource"]}, {"codename": "add_findtreatments", "name": "Can add find treatments", "content_type": ["archaeological_finds", "findtreatments"]}, {"codename": "change_findtreatments", "name": "Can change find treatments", "content_type": ["archaeological_finds", "findtreatments"]}, {"codename": "delete_findtreatments", "name": "Can delete find treatments", "content_type": ["archaeological_finds", "findtreatments"]}, {"codename": "add_findupstreamtreatments", "name": "Can add find upstream treatments", "content_type": ["archaeological_finds", "findupstreamtreatments"]}, {"codename": "change_findupstreamtreatments", "name": "Can change find upstream treatments", "content_type": ["archaeological_finds", "findupstreamtreatments"]}, {"codename": "delete_findupstreamtreatments", "name": "Can delete find upstream treatments", "content_type": ["archaeological_finds", "findupstreamtreatments"]}, {"codename": "add_historicalbasefind", "name": "Can add historical base find", "content_type": ["archaeological_finds", "historicalbasefind"]}, {"codename": "change_historicalbasefind", "name": "Can change historical base find", "content_type": ["archaeological_finds", "historicalbasefind"]}, {"codename": "delete_historicalbasefind", "name": "Can delete historical base find", "content_type": ["archaeological_finds", "historicalbasefind"]}, {"codename": "add_historicalfind", "name": "Can add historical find", "content_type": ["archaeological_finds", "historicalfind"]}, {"codename": "change_historicalfind", "name": "Can change historical find", "content_type": ["archaeological_finds", "historicalfind"]}, {"codename": "delete_historicalfind", "name": "Can delete historical find", "content_type": ["archaeological_finds", "historicalfind"]}, {"codename": "add_historicaltreatment", "name": "Can add historical treatment", "content_type": ["archaeological_finds", "historicaltreatment"]}, {"codename": "change_historicaltreatment", "name": "Can change historical treatment", "content_type": ["archaeological_finds", "historicaltreatment"]}, {"codename": "delete_historicaltreatment", "name": "Can delete historical treatment", "content_type": ["archaeological_finds", "historicaltreatment"]}, {"codename": "add_historicaltreatmentfile", "name": "Can add historical treatment file", "content_type": ["archaeological_finds", "historicaltreatmentfile"]}, {"codename": "change_historicaltreatmentfile", "name": "Can change historical treatment file", "content_type": ["archaeological_finds", "historicaltreatmentfile"]}, {"codename": "delete_historicaltreatmentfile", "name": "Can delete historical treatment file", "content_type": ["archaeological_finds", "historicaltreatmentfile"]}, {"codename": "add_integritytype", "name": "Can add Integrity type", "content_type": ["archaeological_finds", "integritytype"]}, {"codename": "change_integritytype", "name": "Can change Integrity type", "content_type": ["archaeological_finds", "integritytype"]}, {"codename": "delete_integritytype", "name": "Can delete Integrity type", "content_type": ["archaeological_finds", "integritytype"]}, {"codename": "add_materialtype", "name": "Can add Material type", "content_type": ["archaeological_finds", "materialtype"]}, {"codename": "change_materialtype", "name": "Can change Material type", "content_type": ["archaeological_finds", "materialtype"]}, {"codename": "delete_materialtype", "name": "Can delete Material type", "content_type": ["archaeological_finds", "materialtype"]}, {"codename": "add_objecttype", "name": "Can add Object type", "content_type": ["archaeological_finds", "objecttype"]}, {"codename": "change_objecttype", "name": "Can change Object type", "content_type": ["archaeological_finds", "objecttype"]}, {"codename": "delete_objecttype", "name": "Can delete Object type", "content_type": ["archaeological_finds", "objecttype"]}, {"codename": "add_preservationtype", "name": "Can add Preservation type", "content_type": ["archaeological_finds", "preservationtype"]}, {"codename": "change_preservationtype", "name": "Can change Preservation type", "content_type": ["archaeological_finds", "preservationtype"]}, {"codename": "delete_preservationtype", "name": "Can delete Preservation type", "content_type": ["archaeological_finds", "preservationtype"]}, {"codename": "add_property", "name": "Can add Property", "content_type": ["archaeological_finds", "property"]}, {"codename": "change_property", "name": "Can change Property", "content_type": ["archaeological_finds", "property"]}, {"codename": "delete_property", "name": "Can delete Property", "content_type": ["archaeological_finds", "property"]}, {"codename": "add_remarkabilitytype", "name": "Can add Remarkability type", "content_type": ["archaeological_finds", "remarkabilitytype"]}, {"codename": "change_remarkabilitytype", "name": "Can change Remarkability type", "content_type": ["archaeological_finds", "remarkabilitytype"]}, {"codename": "delete_remarkabilitytype", "name": "Can delete Remarkability type", "content_type": ["archaeological_finds", "remarkabilitytype"]}, {"codename": "add_own_treatment", "name": "Can add own Treatment", "content_type": ["archaeological_finds", "treatment"]}, {"codename": "add_treatment", "name": "Can add Treatment", "content_type": ["archaeological_finds", "treatment"]}, {"codename": "change_own_treatment", "name": "Can change own Treatment", "content_type": ["archaeological_finds", "treatment"]}, {"codename": "change_treatment", "name": "Can change Treatment", "content_type": ["archaeological_finds", "treatment"]}, {"codename": "delete_own_treatment", "name": "Can delete own Treatment", "content_type": ["archaeological_finds", "treatment"]}, {"codename": "delete_treatment", "name": "Can delete Treatment", "content_type": ["archaeological_finds", "treatment"]}, {"codename": "view_own_treatment", "name": "Can view own Treatment", "content_type": ["archaeological_finds", "treatment"]}, {"codename": "view_treatment", "name": "Can view all Treatments", "content_type": ["archaeological_finds", "treatment"]}, {"codename": "add_filetreatment", "name": "Can add Treatment request", "content_type": ["archaeological_finds", "treatmentfile"]}, {"codename": "add_own_filetreatment", "name": "Can add own Treatment request", "content_type": ["archaeological_finds", "treatmentfile"]}, {"codename": "add_treatmentfile", "name": "Can add Treatment file", "content_type": ["archaeological_finds", "treatmentfile"]}, {"codename": "change_filetreatment", "name": "Can change Treatment request", "content_type": ["archaeological_finds", "treatmentfile"]}, {"codename": "change_own_filetreatment", "name": "Can change own Treatment request", "content_type": ["archaeological_finds", "treatmentfile"]}, {"codename": "change_treatmentfile", "name": "Can change Treatment file", "content_type": ["archaeological_finds", "treatmentfile"]}, {"codename": "delete_filetreatment", "name": "Can delete Treatment request", "content_type": ["archaeological_finds", "treatmentfile"]}, {"codename": "delete_own_filetreatment", "name": "Can delete own Treatment request", "content_type": ["archaeological_finds", "treatmentfile"]}, {"codename": "delete_treatmentfile", "name": "Can delete Treatment file", "content_type": ["archaeological_finds", "treatmentfile"]}, {"codename": "view_filetreatment", "name": "Can view all Treatment requests", "content_type": ["archaeological_finds", "treatmentfile"]}, {"codename": "view_own_filetreatment", "name": "Can view own Treatment request", "content_type": ["archaeological_finds", "treatmentfile"]}, {"codename": "add_own_filetreatmentsource", "name": "Can add own Treatment request source", "content_type": ["archaeological_finds", "treatmentfilesource"]}, {"codename": "add_treatmentfilesource", "name": "Can add Treatment file documentation", "content_type": ["archaeological_finds", "treatmentfilesource"]}, {"codename": "change_own_filetreatmentsource", "name": "Can change own Treatment request source", "content_type": ["archaeological_finds", "treatmentfilesource"]}, {"codename": "change_treatmentfilesource", "name": "Can change Treatment file documentation", "content_type": ["archaeological_finds", "treatmentfilesource"]}, {"codename": "delete_own_filetreatmentsource", "name": "Can delete own Treatment request source", "content_type": ["archaeological_finds", "treatmentfilesource"]}, {"codename": "delete_treatmentfilesource", "name": "Can delete Treatment file documentation", "content_type": ["archaeological_finds", "treatmentfilesource"]}, {"codename": "view_filetreatmentsource", "name": "Can view all Treatment request source", "content_type": ["archaeological_finds", "treatmentfilesource"]}, {"codename": "view_own_filetreatmentsource", "name": "Can view own Treatment request source", "content_type": ["archaeological_finds", "treatmentfilesource"]}, {"codename": "add_treatmentfiletype", "name": "Can add Treatment file type", "content_type": ["archaeological_finds", "treatmentfiletype"]}, {"codename": "change_treatmentfiletype", "name": "Can change Treatment file type", "content_type": ["archaeological_finds", "treatmentfiletype"]}, {"codename": "delete_treatmentfiletype", "name": "Can delete Treatment file type", "content_type": ["archaeological_finds", "treatmentfiletype"]}, {"codename": "add_own_treatmentsource", "name": "Can add own Treatment source", "content_type": ["archaeological_finds", "treatmentsource"]}, {"codename": "add_treatmentsource", "name": "Can add Treatment documentation", "content_type": ["archaeological_finds", "treatmentsource"]}, {"codename": "change_own_treatmentsource", "name": "Can change own Treatment source", "content_type": ["archaeological_finds", "treatmentsource"]}, {"codename": "change_treatmentsource", "name": "Can change Treatment documentation", "content_type": ["archaeological_finds", "treatmentsource"]}, {"codename": "delete_own_treatmentsource", "name": "Can delete own Treatment source", "content_type": ["archaeological_finds", "treatmentsource"]}, {"codename": "delete_treatmentsource", "name": "Can delete Treatment documentation", "content_type": ["archaeological_finds", "treatmentsource"]}, {"codename": "view_own_treatmentsource", "name": "Can view own Treatment source", "content_type": ["archaeological_finds", "treatmentsource"]}, {"codename": "view_treatmentsource", "name": "Can view all Treatment source", "content_type": ["archaeological_finds", "treatmentsource"]}, {"codename": "add_treatmentstate", "name": "Can add Type of treatment state", "content_type": ["archaeological_finds", "treatmentstate"]}, {"codename": "change_treatmentstate", "name": "Can change Type of treatment state", "content_type": ["archaeological_finds", "treatmentstate"]}, {"codename": "delete_treatmentstate", "name": "Can delete Type of treatment state", "content_type": ["archaeological_finds", "treatmentstate"]}, {"codename": "add_treatmenttype", "name": "Can add Treatment type", "content_type": ["archaeological_finds", "treatmenttype"]}, {"codename": "change_treatmenttype", "name": "Can change Treatment type", "content_type": ["archaeological_finds", "treatmenttype"]}, {"codename": "delete_treatmenttype", "name": "Can delete Treatment type", "content_type": ["archaeological_finds", "treatmenttype"]}, {"codename": "add_acttype", "name": "Can add Act type", "content_type": ["archaeological_operations", "acttype"]}, {"codename": "change_acttype", "name": "Can change Act type", "content_type": ["archaeological_operations", "acttype"]}, {"codename": "delete_acttype", "name": "Can delete Act type", "content_type": ["archaeological_operations", "acttype"]}, {"codename": "add_administrativeact", "name": "Can add Administrative act", "content_type": ["archaeological_operations", "administrativeact"]}, {"codename": "add_own_administrativeact", "name": "Can add own Administrative act", "content_type": ["archaeological_operations", "administrativeact"]}, {"codename": "change_administrativeact", "name": "Can change Administrative act", "content_type": ["archaeological_operations", "administrativeact"]}, {"codename": "change_own_administrativeact", "name": "Can change own Administrative act", "content_type": ["archaeological_operations", "administrativeact"]}, {"codename": "delete_administrativeact", "name": "Can delete Administrative act", "content_type": ["archaeological_operations", "administrativeact"]}, {"codename": "delete_own_administrativeact", "name": "Can delete own Administrative act", "content_type": ["archaeological_operations", "administrativeact"]}, {"codename": "view_administrativeact", "name": "Can view all Administrative acts", "content_type": ["archaeological_operations", "administrativeact"]}, {"codename": "view_own_administrativeact", "name": "Can view own Administrative act", "content_type": ["archaeological_operations", "administrativeact"]}, {"codename": "add_archaeologicalsite", "name": "Can add Archaeological site", "content_type": ["archaeological_operations", "archaeologicalsite"]}, {"codename": "add_own_archaeologicalsite", "name": "Can add own Archaeological site", "content_type": ["archaeological_operations", "archaeologicalsite"]}, {"codename": "change_archaeologicalsite", "name": "Can change Archaeological site", "content_type": ["archaeological_operations", "archaeologicalsite"]}, {"codename": "change_own_archaeologicalsite", "name": "Can change own Archaeological site", "content_type": ["archaeological_operations", "archaeologicalsite"]}, {"codename": "delete_archaeologicalsite", "name": "Can delete Archaeological site", "content_type": ["archaeological_operations", "archaeologicalsite"]}, {"codename": "delete_own_archaeologicalsite", "name": "Can delete own Archaeological site", "content_type": ["archaeological_operations", "archaeologicalsite"]}, {"codename": "view_archaeologicalsite", "name": "Can view all Archaeological sites", "content_type": ["archaeological_operations", "archaeologicalsite"]}, {"codename": "view_own_archaeologicalsite", "name": "Can view own Archaeological site", "content_type": ["archaeological_operations", "archaeologicalsite"]}, {"codename": "add_historicaladministrativeact", "name": "Can add historical administrative act", "content_type": ["archaeological_operations", "historicaladministrativeact"]}, {"codename": "change_historicaladministrativeact", "name": "Can change historical administrative act", "content_type": ["archaeological_operations", "historicaladministrativeact"]}, {"codename": "delete_historicaladministrativeact", "name": "Can delete historical administrative act", "content_type": ["archaeological_operations", "historicaladministrativeact"]}, {"codename": "add_historicaloperation", "name": "Can add historical operation", "content_type": ["archaeological_operations", "historicaloperation"]}, {"codename": "change_historicaloperation", "name": "Can change historical operation", "content_type": ["archaeological_operations", "historicaloperation"]}, {"codename": "delete_historicaloperation", "name": "Can delete historical operation", "content_type": ["archaeological_operations", "historicaloperation"]}, {"codename": "add_operation", "name": "Can add Operation", "content_type": ["archaeological_operations", "operation"]}, {"codename": "add_own_operation", "name": "Can add own Operation", "content_type": ["archaeological_operations", "operation"]}, {"codename": "change_operation", "name": "Can change Operation", "content_type": ["archaeological_operations", "operation"]}, {"codename": "change_own_operation", "name": "Can change own Operation", "content_type": ["archaeological_operations", "operation"]}, {"codename": "close_operation", "name": "Can close Operation", "content_type": ["archaeological_operations", "operation"]}, {"codename": "delete_operation", "name": "Can delete Operation", "content_type": ["archaeological_operations", "operation"]}, {"codename": "delete_own_operation", "name": "Can delete own Operation", "content_type": ["archaeological_operations", "operation"]}, {"codename": "view_operation", "name": "Can view all Operations", "content_type": ["archaeological_operations", "operation"]}, {"codename": "view_own_operation", "name": "Can view own Operation", "content_type": ["archaeological_operations", "operation"]}, {"codename": "add_operationbydepartment", "name": "Can add operation by department", "content_type": ["archaeological_operations", "operationbydepartment"]}, {"codename": "change_operationbydepartment", "name": "Can change operation by department", "content_type": ["archaeological_operations", "operationbydepartment"]}, {"codename": "delete_operationbydepartment", "name": "Can delete operation by department", "content_type": ["archaeological_operations", "operationbydepartment"]}, {"codename": "add_operationsource", "name": "Can add Operation documentation", "content_type": ["archaeological_operations", "operationsource"]}, {"codename": "add_own_operationsource", "name": "Can add own Operation source", "content_type": ["archaeological_operations", "operationsource"]}, {"codename": "change_operationsource", "name": "Can change Operation documentation", "content_type": ["archaeological_operations", "operationsource"]}, {"codename": "change_own_operationsource", "name": "Can change own Operation source", "content_type": ["archaeological_operations", "operationsource"]}, {"codename": "delete_operationsource", "name": "Can delete Operation documentation", "content_type": ["archaeological_operations", "operationsource"]}, {"codename": "delete_own_operationsource", "name": "Can delete own Operation source", "content_type": ["archaeological_operations", "operationsource"]}, {"codename": "view_operationsource", "name": "Can view all Operation sources", "content_type": ["archaeological_operations", "operationsource"]}, {"codename": "view_own_operationsource", "name": "Can view own Operation source", "content_type": ["archaeological_operations", "operationsource"]}, {"codename": "add_operationtypeold", "name": "Can add Operation type old", "content_type": ["archaeological_operations", "operationtypeold"]}, {"codename": "change_operationtypeold", "name": "Can change Operation type old", "content_type": ["archaeological_operations", "operationtypeold"]}, {"codename": "delete_operationtypeold", "name": "Can delete Operation type old", "content_type": ["archaeological_operations", "operationtypeold"]}, {"codename": "add_parcel", "name": "Can add Parcel", "content_type": ["archaeological_operations", "parcel"]}, {"codename": "change_parcel", "name": "Can change Parcel", "content_type": ["archaeological_operations", "parcel"]}, {"codename": "delete_parcel", "name": "Can delete Parcel", "content_type": ["archaeological_operations", "parcel"]}, {"codename": "add_parcelowner", "name": "Can add Parcel owner", "content_type": ["archaeological_operations", "parcelowner"]}, {"codename": "change_parcelowner", "name": "Can change Parcel owner", "content_type": ["archaeological_operations", "parcelowner"]}, {"codename": "delete_parcelowner", "name": "Can delete Parcel owner", "content_type": ["archaeological_operations", "parcelowner"]}, {"codename": "add_period", "name": "Can add Type Period", "content_type": ["archaeological_operations", "period"]}, {"codename": "change_period", "name": "Can change Type Period", "content_type": ["archaeological_operations", "period"]}, {"codename": "delete_period", "name": "Can delete Type Period", "content_type": ["archaeological_operations", "period"]}, {"codename": "add_recordrelations", "name": "Can add Operation record relation", "content_type": ["archaeological_operations", "recordrelations"]}, {"codename": "change_recordrelations", "name": "Can change Operation record relation", "content_type": ["archaeological_operations", "recordrelations"]}, {"codename": "delete_recordrelations", "name": "Can delete Operation record relation", "content_type": ["archaeological_operations", "recordrelations"]}, {"codename": "add_relationtype", "name": "Can add Operation relation type", "content_type": ["archaeological_operations", "relationtype"]}, {"codename": "change_relationtype", "name": "Can change Operation relation type", "content_type": ["archaeological_operations", "relationtype"]}, {"codename": "delete_relationtype", "name": "Can delete Operation relation type", "content_type": ["archaeological_operations", "relationtype"]}, {"codename": "add_remaintype", "name": "Can add Remain type", "content_type": ["archaeological_operations", "remaintype"]}, {"codename": "change_remaintype", "name": "Can change Remain type", "content_type": ["archaeological_operations", "remaintype"]}, {"codename": "delete_remaintype", "name": "Can delete Remain type", "content_type": ["archaeological_operations", "remaintype"]}, {"codename": "add_reportstate", "name": "Can add Report state", "content_type": ["archaeological_operations", "reportstate"]}, {"codename": "change_reportstate", "name": "Can change Report state", "content_type": ["archaeological_operations", "reportstate"]}, {"codename": "delete_reportstate", "name": "Can delete Report state", "content_type": ["archaeological_operations", "reportstate"]}, {"codename": "add_collection", "name": "Can add Collection", "content_type": ["archaeological_warehouse", "collection"]}, {"codename": "change_collection", "name": "Can change Collection", "content_type": ["archaeological_warehouse", "collection"]}, {"codename": "delete_collection", "name": "Can delete Collection", "content_type": ["archaeological_warehouse", "collection"]}, {"codename": "add_container", "name": "Can add Container", "content_type": ["archaeological_warehouse", "container"]}, {"codename": "change_container", "name": "Can change Container", "content_type": ["archaeological_warehouse", "container"]}, {"codename": "delete_container", "name": "Can delete Container", "content_type": ["archaeological_warehouse", "container"]}, {"codename": "add_containerlocalisation", "name": "Can add Container localisation", "content_type": ["archaeological_warehouse", "containerlocalisation"]}, {"codename": "change_containerlocalisation", "name": "Can change Container localisation", "content_type": ["archaeological_warehouse", "containerlocalisation"]}, {"codename": "delete_containerlocalisation", "name": "Can delete Container localisation", "content_type": ["archaeological_warehouse", "containerlocalisation"]}, {"codename": "add_containertype", "name": "Can add Container type", "content_type": ["archaeological_warehouse", "containertype"]}, {"codename": "change_containertype", "name": "Can change Container type", "content_type": ["archaeological_warehouse", "containertype"]}, {"codename": "delete_containertype", "name": "Can delete Container type", "content_type": ["archaeological_warehouse", "containertype"]}, {"codename": "add_own_warehouse", "name": "Can add own Warehouse", "content_type": ["archaeological_warehouse", "warehouse"]}, {"codename": "add_warehouse", "name": "Can add Warehouse", "content_type": ["archaeological_warehouse", "warehouse"]}, {"codename": "change_own_warehouse", "name": "Can change own Warehouse", "content_type": ["archaeological_warehouse", "warehouse"]}, {"codename": "change_warehouse", "name": "Can change Warehouse", "content_type": ["archaeological_warehouse", "warehouse"]}, {"codename": "delete_own_warehouse", "name": "Can delete own Warehouse", "content_type": ["archaeological_warehouse", "warehouse"]}, {"codename": "delete_warehouse", "name": "Can delete Warehouse", "content_type": ["archaeological_warehouse", "warehouse"]}, {"codename": "view_own_warehouse", "name": "Can view own Warehouse", "content_type": ["archaeological_warehouse", "warehouse"]}, {"codename": "view_warehouse", "name": "Can view all Warehouses", "content_type": ["archaeological_warehouse", "warehouse"]}, {"codename": "add_warehousedivision", "name": "Can add Warehouse division", "content_type": ["archaeological_warehouse", "warehousedivision"]}, {"codename": "change_warehousedivision", "name": "Can change Warehouse division", "content_type": ["archaeological_warehouse", "warehousedivision"]}, {"codename": "delete_warehousedivision", "name": "Can delete Warehouse division", "content_type": ["archaeological_warehouse", "warehousedivision"]}, {"codename": "add_warehousedivisionlink", "name": "Can add warehouse division link", "content_type": ["archaeological_warehouse", "warehousedivisionlink"]}, {"codename": "change_warehousedivisionlink", "name": "Can change warehouse division link", "content_type": ["archaeological_warehouse", "warehousedivisionlink"]}, {"codename": "delete_warehousedivisionlink", "name": "Can delete warehouse division link", "content_type": ["archaeological_warehouse", "warehousedivisionlink"]}, {"codename": "add_warehousetype", "name": "Can add Warehouse type", "content_type": ["archaeological_warehouse", "warehousetype"]}, {"codename": "change_warehousetype", "name": "Can change Warehouse type", "content_type": ["archaeological_warehouse", "warehousetype"]}, {"codename": "delete_warehousetype", "name": "Can delete Warehouse type", "content_type": ["archaeological_warehouse", "warehousetype"]}, {"codename": "add_group", "name": "Can add group", "content_type": ["auth", "group"]}, {"codename": "change_group", "name": "Can change group", "content_type": ["auth", "group"]}, {"codename": "delete_group", "name": "Can delete group", "content_type": ["auth", "group"]}, {"codename": "add_permission", "name": "Can add permission", "content_type": ["auth", "permission"]}, {"codename": "change_permission", "name": "Can change permission", "content_type": ["auth", "permission"]}, {"codename": "delete_permission", "name": "Can delete permission", "content_type": ["auth", "permission"]}, {"codename": "add_user", "name": "Can add user", "content_type": ["auth", "user"]}, {"codename": "change_user", "name": "Can change user", "content_type": ["auth", "user"]}, {"codename": "delete_user", "name": "Can delete user", "content_type": ["auth", "user"]}, {"codename": "add_contenttype", "name": "Can add content type", "content_type": ["contenttypes", "contenttype"]}, {"codename": "change_contenttype", "name": "Can change content type", "content_type": ["contenttypes", "contenttype"]}, {"codename": "delete_contenttype", "name": "Can delete content type", "content_type": ["contenttypes", "contenttype"]}, {"codename": "add_arrondissement", "name": "Can add arrondissement", "content_type": ["ishtar_common", "arrondissement"]}, {"codename": "change_arrondissement", "name": "Can change arrondissement", "content_type": ["ishtar_common", "arrondissement"]}, {"codename": "delete_arrondissement", "name": "Can delete arrondissement", "content_type": ["ishtar_common", "arrondissement"]}, {"codename": "add_author", "name": "Can add Author", "content_type": ["ishtar_common", "author"]}, {"codename": "add_own_author", "name": "Can add own Author", "content_type": ["ishtar_common", "author"]}, {"codename": "change_author", "name": "Can change Author", "content_type": ["ishtar_common", "author"]}, {"codename": "change_own_author", "name": "Can change own Author", "content_type": ["ishtar_common", "author"]}, {"codename": "delete_author", "name": "Can delete Author", "content_type": ["ishtar_common", "author"]}, {"codename": "delete_own_author", "name": "Can delete own Author", "content_type": ["ishtar_common", "author"]}, {"codename": "view_author", "name": "Can view all Authors", "content_type": ["ishtar_common", "author"]}, {"codename": "view_own_author", "name": "Can view own Author", "content_type": ["ishtar_common", "author"]}, {"codename": "add_authortype", "name": "Can add Author type", "content_type": ["ishtar_common", "authortype"]}, {"codename": "change_authortype", "name": "Can change Author type", "content_type": ["ishtar_common", "authortype"]}, {"codename": "delete_authortype", "name": "Can delete Author type", "content_type": ["ishtar_common", "authortype"]}, {"codename": "add_canton", "name": "Can add canton", "content_type": ["ishtar_common", "canton"]}, {"codename": "change_canton", "name": "Can change canton", "content_type": ["ishtar_common", "canton"]}, {"codename": "delete_canton", "name": "Can delete canton", "content_type": ["ishtar_common", "canton"]}, {"codename": "add_department", "name": "Can add Department", "content_type": ["ishtar_common", "department"]}, {"codename": "change_department", "name": "Can change Department", "content_type": ["ishtar_common", "department"]}, {"codename": "delete_department", "name": "Can delete Department", "content_type": ["ishtar_common", "department"]}, {"codename": "add_documenttemplate", "name": "Can add Document template", "content_type": ["ishtar_common", "documenttemplate"]}, {"codename": "change_documenttemplate", "name": "Can change Document template", "content_type": ["ishtar_common", "documenttemplate"]}, {"codename": "delete_documenttemplate", "name": "Can delete Document template", "content_type": ["ishtar_common", "documenttemplate"]}, {"codename": "add_format", "name": "Can add Format", "content_type": ["ishtar_common", "format"]}, {"codename": "change_format", "name": "Can change Format", "content_type": ["ishtar_common", "format"]}, {"codename": "delete_format", "name": "Can delete Format", "content_type": ["ishtar_common", "format"]}, {"codename": "add_formatertype", "name": "Can add Importer - Formater type", "content_type": ["ishtar_common", "formatertype"]}, {"codename": "change_formatertype", "name": "Can change Importer - Formater type", "content_type": ["ishtar_common", "formatertype"]}, {"codename": "delete_formatertype", "name": "Can delete Importer - Formater type", "content_type": ["ishtar_common", "formatertype"]}, {"codename": "add_globalvar", "name": "Can add Global variable", "content_type": ["ishtar_common", "globalvar"]}, {"codename": "change_globalvar", "name": "Can change Global variable", "content_type": ["ishtar_common", "globalvar"]}, {"codename": "delete_globalvar", "name": "Can delete Global variable", "content_type": ["ishtar_common", "globalvar"]}, {"codename": "add_historicalorganization", "name": "Can add historical organization", "content_type": ["ishtar_common", "historicalorganization"]}, {"codename": "change_historicalorganization", "name": "Can change historical organization", "content_type": ["ishtar_common", "historicalorganization"]}, {"codename": "delete_historicalorganization", "name": "Can delete historical organization", "content_type": ["ishtar_common", "historicalorganization"]}, {"codename": "add_historicalperson", "name": "Can add historical person", "content_type": ["ishtar_common", "historicalperson"]}, {"codename": "change_historicalperson", "name": "Can change historical person", "content_type": ["ishtar_common", "historicalperson"]}, {"codename": "delete_historicalperson", "name": "Can delete historical person", "content_type": ["ishtar_common", "historicalperson"]}, {"codename": "add_import", "name": "Can add Import", "content_type": ["ishtar_common", "import"]}, {"codename": "change_import", "name": "Can change Import", "content_type": ["ishtar_common", "import"]}, {"codename": "delete_import", "name": "Can delete Import", "content_type": ["ishtar_common", "import"]}, {"codename": "add_importercolumn", "name": "Can add Importer - Column", "content_type": ["ishtar_common", "importercolumn"]}, {"codename": "change_importercolumn", "name": "Can change Importer - Column", "content_type": ["ishtar_common", "importercolumn"]}, {"codename": "delete_importercolumn", "name": "Can delete Importer - Column", "content_type": ["ishtar_common", "importercolumn"]}, {"codename": "add_importerdefault", "name": "Can add Importer - Default", "content_type": ["ishtar_common", "importerdefault"]}, {"codename": "change_importerdefault", "name": "Can change Importer - Default", "content_type": ["ishtar_common", "importerdefault"]}, {"codename": "delete_importerdefault", "name": "Can delete Importer - Default", "content_type": ["ishtar_common", "importerdefault"]}, {"codename": "add_importerdefaultvalues", "name": "Can add Importer - Default value", "content_type": ["ishtar_common", "importerdefaultvalues"]}, {"codename": "change_importerdefaultvalues", "name": "Can change Importer - Default value", "content_type": ["ishtar_common", "importerdefaultvalues"]}, {"codename": "delete_importerdefaultvalues", "name": "Can delete Importer - Default value", "content_type": ["ishtar_common", "importerdefaultvalues"]}, {"codename": "add_importerduplicatefield", "name": "Can add Importer - Duplicate field", "content_type": ["ishtar_common", "importerduplicatefield"]}, {"codename": "change_importerduplicatefield", "name": "Can change Importer - Duplicate field", "content_type": ["ishtar_common", "importerduplicatefield"]}, {"codename": "delete_importerduplicatefield", "name": "Can delete Importer - Duplicate field", "content_type": ["ishtar_common", "importerduplicatefield"]}, {"codename": "add_importermodel", "name": "Can add Importer - Model", "content_type": ["ishtar_common", "importermodel"]}, {"codename": "change_importermodel", "name": "Can change Importer - Model", "content_type": ["ishtar_common", "importermodel"]}, {"codename": "delete_importermodel", "name": "Can delete Importer - Model", "content_type": ["ishtar_common", "importermodel"]}, {"codename": "add_importertype", "name": "Can add Importer - Type", "content_type": ["ishtar_common", "importertype"]}, {"codename": "change_importertype", "name": "Can change Importer - Type", "content_type": ["ishtar_common", "importertype"]}, {"codename": "delete_importertype", "name": "Can delete Importer - Type", "content_type": ["ishtar_common", "importertype"]}, {"codename": "add_importtarget", "name": "Can add Importer - Target", "content_type": ["ishtar_common", "importtarget"]}, {"codename": "change_importtarget", "name": "Can change Importer - Target", "content_type": ["ishtar_common", "importtarget"]}, {"codename": "delete_importtarget", "name": "Can delete Importer - Target", "content_type": ["ishtar_common", "importtarget"]}, {"codename": "add_ishtarsiteprofile", "name": "Can add Ishtar site profile", "content_type": ["ishtar_common", "ishtarsiteprofile"]}, {"codename": "change_ishtarsiteprofile", "name": "Can change Ishtar site profile", "content_type": ["ishtar_common", "ishtarsiteprofile"]}, {"codename": "delete_ishtarsiteprofile", "name": "Can delete Ishtar site profile", "content_type": ["ishtar_common", "ishtarsiteprofile"]}, {"codename": "add_ishtaruser", "name": "Can add Ishtar user", "content_type": ["ishtar_common", "ishtaruser"]}, {"codename": "change_ishtaruser", "name": "Can change Ishtar user", "content_type": ["ishtar_common", "ishtaruser"]}, {"codename": "delete_ishtaruser", "name": "Can delete Ishtar user", "content_type": ["ishtar_common", "ishtaruser"]}, {"codename": "add_itemkey", "name": "Can add item key", "content_type": ["ishtar_common", "itemkey"]}, {"codename": "change_itemkey", "name": "Can change item key", "content_type": ["ishtar_common", "itemkey"]}, {"codename": "delete_itemkey", "name": "Can delete item key", "content_type": ["ishtar_common", "itemkey"]}, {"codename": "add_operationtype", "name": "Can add Operation type", "content_type": ["ishtar_common", "operationtype"]}, {"codename": "change_operationtype", "name": "Can change Operation type", "content_type": ["ishtar_common", "operationtype"]}, {"codename": "delete_operationtype", "name": "Can delete Operation type", "content_type": ["ishtar_common", "operationtype"]}, {"codename": "add_organization", "name": "Can add Organization", "content_type": ["ishtar_common", "organization"]}, {"codename": "add_own_organization", "name": "Can add own Organization", "content_type": ["ishtar_common", "organization"]}, {"codename": "change_organization", "name": "Can change Organization", "content_type": ["ishtar_common", "organization"]}, {"codename": "change_own_organization", "name": "Can change own Organization", "content_type": ["ishtar_common", "organization"]}, {"codename": "delete_organization", "name": "Can delete Organization", "content_type": ["ishtar_common", "organization"]}, {"codename": "delete_own_organization", "name": "Can delete own Organization", "content_type": ["ishtar_common", "organization"]}, {"codename": "view_organization", "name": "Can view all Organizations", "content_type": ["ishtar_common", "organization"]}, {"codename": "view_own_organization", "name": "Can view own Organization", "content_type": ["ishtar_common", "organization"]}, {"codename": "add_organizationtype", "name": "Can add Organization type", "content_type": ["ishtar_common", "organizationtype"]}, {"codename": "change_organizationtype", "name": "Can change Organization type", "content_type": ["ishtar_common", "organizationtype"]}, {"codename": "delete_organizationtype", "name": "Can delete Organization type", "content_type": ["ishtar_common", "organizationtype"]}, {"codename": "add_own_person", "name": "Can add own Person", "content_type": ["ishtar_common", "person"]}, {"codename": "add_person", "name": "Can add Person", "content_type": ["ishtar_common", "person"]}, {"codename": "change_own_person", "name": "Can change own Person", "content_type": ["ishtar_common", "person"]}, {"codename": "change_person", "name": "Can change Person", "content_type": ["ishtar_common", "person"]}, {"codename": "delete_own_person", "name": "Can delete own Person", "content_type": ["ishtar_common", "person"]}, {"codename": "delete_person", "name": "Can delete Person", "content_type": ["ishtar_common", "person"]}, {"codename": "view_own_person", "name": "Can view own Person", "content_type": ["ishtar_common", "person"]}, {"codename": "view_person", "name": "Can view all Persons", "content_type": ["ishtar_common", "person"]}, {"codename": "add_persontype", "name": "Can add Person type", "content_type": ["ishtar_common", "persontype"]}, {"codename": "change_persontype", "name": "Can change Person type", "content_type": ["ishtar_common", "persontype"]}, {"codename": "delete_persontype", "name": "Can delete Person type", "content_type": ["ishtar_common", "persontype"]}, {"codename": "add_regexp", "name": "Can add Importer - Regular expression", "content_type": ["ishtar_common", "regexp"]}, {"codename": "change_regexp", "name": "Can change Importer - Regular expression", "content_type": ["ishtar_common", "regexp"]}, {"codename": "delete_regexp", "name": "Can delete Importer - Regular expression", "content_type": ["ishtar_common", "regexp"]}, {"codename": "add_sourcetype", "name": "Can add Source type", "content_type": ["ishtar_common", "sourcetype"]}, {"codename": "change_sourcetype", "name": "Can change Source type", "content_type": ["ishtar_common", "sourcetype"]}, {"codename": "delete_sourcetype", "name": "Can delete Source type", "content_type": ["ishtar_common", "sourcetype"]}, {"codename": "add_spatialreferencesystem", "name": "Can add Spatial reference system", "content_type": ["ishtar_common", "spatialreferencesystem"]}, {"codename": "change_spatialreferencesystem", "name": "Can change Spatial reference system", "content_type": ["ishtar_common", "spatialreferencesystem"]}, {"codename": "delete_spatialreferencesystem", "name": "Can delete Spatial reference system", "content_type": ["ishtar_common", "spatialreferencesystem"]}, {"codename": "add_state", "name": "Can add State", "content_type": ["ishtar_common", "state"]}, {"codename": "change_state", "name": "Can change State", "content_type": ["ishtar_common", "state"]}, {"codename": "delete_state", "name": "Can delete State", "content_type": ["ishtar_common", "state"]}, {"codename": "add_supporttype", "name": "Can add Support type", "content_type": ["ishtar_common", "supporttype"]}, {"codename": "change_supporttype", "name": "Can change Support type", "content_type": ["ishtar_common", "supporttype"]}, {"codename": "delete_supporttype", "name": "Can delete Support type", "content_type": ["ishtar_common", "supporttype"]}, {"codename": "add_targetkey", "name": "Can add Importer - Target key", "content_type": ["ishtar_common", "targetkey"]}, {"codename": "change_targetkey", "name": "Can change Importer - Target key", "content_type": ["ishtar_common", "targetkey"]}, {"codename": "delete_targetkey", "name": "Can delete Importer - Target key", "content_type": ["ishtar_common", "targetkey"]}, {"codename": "add_titletype", "name": "Can add Title type", "content_type": ["ishtar_common", "titletype"]}, {"codename": "change_titletype", "name": "Can change Title type", "content_type": ["ishtar_common", "titletype"]}, {"codename": "delete_titletype", "name": "Can delete Title type", "content_type": ["ishtar_common", "titletype"]}, {"codename": "add_town", "name": "Can add Town", "content_type": ["ishtar_common", "town"]}, {"codename": "change_town", "name": "Can change Town", "content_type": ["ishtar_common", "town"]}, {"codename": "delete_town", "name": "Can delete Town", "content_type": ["ishtar_common", "town"]}, {"codename": "add_registrationprofile", "name": "Can add registration profile", "content_type": ["registration", "registrationprofile"]}, {"codename": "change_registrationprofile", "name": "Can change registration profile", "content_type": ["registration", "registrationprofile"]}, {"codename": "delete_registrationprofile", "name": "Can delete registration profile", "content_type": ["registration", "registrationprofile"]}, {"codename": "add_session", "name": "Can add session", "content_type": ["sessions", "session"]}, {"codename": "change_session", "name": "Can change session", "content_type": ["sessions", "session"]}, {"codename": "delete_session", "name": "Can delete session", "content_type": ["sessions", "session"]}, {"codename": "add_site", "name": "Can add site", "content_type": ["sites", "site"]}, {"codename": "change_site", "name": "Can change site", "content_type": ["sites", "site"]}, {"codename": "delete_site", "name": "Can delete site", "content_type": ["sites", "site"]}, {"codename": "add_migrationhistory", "name": "Can add migration history", "content_type": ["south", "migrationhistory"]}, {"codename": "change_migrationhistory", "name": "Can change migration history", "content_type": ["south", "migrationhistory"]}, {"codename": "delete_migrationhistory", "name": "Can delete migration history", "content_type": ["south", "migrationhistory"]}]} \ No newline at end of file
diff --git a/ishtar_common/forms.py b/ishtar_common/forms.py
index ecae18c5e..7eb36f6cc 100644
--- a/ishtar_common/forms.py
+++ b/ishtar_common/forms.py
@@ -80,7 +80,7 @@ class FloatField(forms.FloatField):
Allow the use of comma for separating float fields
"""
def clean(self, value):
- if value:
+ if value and (isinstance(value, unicode) or isinstance(value, str)):
value = value.replace(',', '.').replace('%', '')
return super(FloatField, self).clean(value)
diff --git a/ishtar_common/locale/django.pot b/ishtar_common/locale/django.pot
index 9611caded..002f724cf 100644
--- a/ishtar_common/locale/django.pot
+++ b/ishtar_common/locale/django.pot
@@ -176,12 +176,12 @@ msgstr ""
msgid "Add a new item"
msgstr ""
-#: forms.py:297 models.py:1501
+#: forms.py:297 models.py:1556
msgid "Template"
msgstr ""
#: forms_common.py:41 forms_common.py:59 forms_common.py:184
-#: forms_common.py:408 models.py:1567 models.py:3030
+#: forms_common.py:408 models.py:1622 models.py:3085
#: templates/blocks/JQueryAdvancedTown.html:19
#: templates/ishtar/sheet_organization.html:13
msgid "Town"
@@ -197,8 +197,8 @@ msgid ""
"french town Saint-Denis in the Seine-Saint-Denis department.</p>"
msgstr ""
-#: forms_common.py:68 forms_common.py:863 ishtar_menu.py:47 models.py:2630
-#: models.py:2823 models.py:2885 templates/ishtar/sheet_person.html:4
+#: forms_common.py:68 forms_common.py:863 ishtar_menu.py:47 models.py:2685
+#: models.py:2878 models.py:2940 templates/ishtar/sheet_person.html:4
msgid "Person"
msgstr ""
@@ -209,64 +209,64 @@ msgid ""
msgstr ""
#: forms_common.py:172 forms_common.py:329 forms_common.py:453
-#: ishtar_menu.py:75 models.py:2513 models.py:2604
+#: ishtar_menu.py:75 models.py:2568 models.py:2659
#: templates/ishtar/sheet_organization.html:4
msgid "Organization"
msgstr ""
#: forms_common.py:175 forms_common.py:212 forms_common.py:324
-#: forms_common.py:378 forms_common.py:448 models.py:1109 models.py:1500
-#: models.py:1769 models.py:1785 models.py:2023 models.py:2301 models.py:2507
-#: models.py:2616 models.py:3016 templates/ishtar/import_list.html:13
+#: forms_common.py:378 forms_common.py:448 models.py:1159 models.py:1555
+#: models.py:1824 models.py:1840 models.py:2078 models.py:2356 models.py:2562
+#: models.py:2671 models.py:3071 templates/ishtar/import_list.html:13
#: templates/ishtar/sheet_organization.html:8
#: templates/ishtar/sheet_organization.html:21
msgid "Name"
msgstr ""
-#: forms_common.py:176 models.py:1722 models.py:2154
+#: forms_common.py:176 models.py:1777 models.py:2209
msgid "Organization type"
msgstr ""
-#: forms_common.py:178 forms_common.py:402 models.py:1562
+#: forms_common.py:178 forms_common.py:402 models.py:1617
#: templates/ishtar/sheet_organization.html:10
msgid "Address"
msgstr ""
-#: forms_common.py:180 forms_common.py:405 models.py:1563
+#: forms_common.py:180 forms_common.py:405 models.py:1618
#: templates/ishtar/sheet_organization.html:11
msgid "Address complement"
msgstr ""
-#: forms_common.py:182 forms_common.py:406 models.py:1565
+#: forms_common.py:182 forms_common.py:406 models.py:1620
#: templates/ishtar/sheet_organization.html:12
msgid "Postal code"
msgstr ""
-#: forms_common.py:185 forms_common.py:409 models.py:1568
+#: forms_common.py:185 forms_common.py:409 models.py:1623
msgid "Country"
msgstr ""
#: forms_common.py:187 forms_common.py:326 forms_common.py:382
-#: forms_common.py:450 forms_common.py:574 models.py:1595
+#: forms_common.py:450 forms_common.py:574 models.py:1650
msgid "Email"
msgstr ""
-#: forms_common.py:188 forms_common.py:385 models.py:1580
+#: forms_common.py:188 forms_common.py:385 models.py:1635
#: templates/ishtar/sheet_organization.html:14
#: templates/ishtar/sheet_person.html:21
#: templates/ishtar/wizard/wizard_person.html:17
msgid "Phone"
msgstr ""
-#: forms_common.py:189 forms_common.py:394 models.py:1592
+#: forms_common.py:189 forms_common.py:394 models.py:1647
#: templates/ishtar/sheet_organization.html:15
#: templates/ishtar/sheet_person.html:39
#: templates/ishtar/wizard/wizard_person.html:35
msgid "Mobile phone"
msgstr ""
-#: forms_common.py:213 forms_common.py:327 forms_common.py:451 models.py:2192
-#: models.py:2509 models.py:2951 templates/sheet_ope.html:85
+#: forms_common.py:213 forms_common.py:327 forms_common.py:451 models.py:2247
+#: models.py:2564 models.py:3006 templates/sheet_ope.html:85
#: templates/sheet_ope.html.py:105 templates/sheet_ope.html:126
#: templates/ishtar/import_list.html:14
#: templates/ishtar/sheet_organization.html:23
@@ -274,7 +274,7 @@ msgstr ""
msgid "Type"
msgstr ""
-#: forms_common.py:222 views.py:147
+#: forms_common.py:222 views.py:149
msgid "Organization search"
msgstr ""
@@ -290,12 +290,12 @@ msgstr ""
msgid "Organization to merge"
msgstr ""
-#: forms_common.py:325 forms_common.py:376 forms_common.py:449 models.py:2614
+#: forms_common.py:325 forms_common.py:376 forms_common.py:449 models.py:2669
#: templates/ishtar/sheet_organization.html:22
msgid "Surname"
msgstr ""
-#: forms_common.py:341 forms_common.py:436 views.py:112
+#: forms_common.py:341 forms_common.py:436 views.py:114
msgid "Person search"
msgstr ""
@@ -308,25 +308,25 @@ msgstr ""
msgid "Identity"
msgstr ""
-#: forms_common.py:373 forms_common.py:781 forms_common.py:830 models.py:2155
-#: models.py:2608 models.py:2610 models.py:2948 templates/sheet_ope.html:104
+#: forms_common.py:373 forms_common.py:781 forms_common.py:830 models.py:2210
+#: models.py:2663 models.py:2665 models.py:3003 templates/sheet_ope.html:104
#: templates/ishtar/blocks/window_tables/documents.html:7
msgid "Title"
msgstr ""
-#: forms_common.py:374 models.py:2612
+#: forms_common.py:374 models.py:2667
msgid "Salutation"
msgstr ""
-#: forms_common.py:380 models.py:2618
+#: forms_common.py:380 models.py:2673
msgid "Raw name"
msgstr ""
-#: forms_common.py:383 models.py:1581
+#: forms_common.py:383 models.py:1636
msgid "Phone description"
msgstr ""
-#: forms_common.py:386 models.py:1583 models.py:1585
+#: forms_common.py:386 models.py:1638 models.py:1640
msgid "Phone description 2"
msgstr ""
@@ -334,11 +334,11 @@ msgstr ""
msgid "Phone 2"
msgstr ""
-#: forms_common.py:390 models.py:1589
+#: forms_common.py:390 models.py:1644
msgid "Phone description 3"
msgstr ""
-#: forms_common.py:392 models.py:1587
+#: forms_common.py:392 models.py:1642
msgid "Phone 3"
msgstr ""
@@ -346,23 +346,23 @@ msgstr ""
msgid "Current organization"
msgstr ""
-#: forms_common.py:411 models.py:1570
+#: forms_common.py:411 models.py:1625
msgid "Other address: address"
msgstr ""
-#: forms_common.py:414 models.py:1573
+#: forms_common.py:414 models.py:1628
msgid "Other address: address complement"
msgstr ""
-#: forms_common.py:416 models.py:1574
+#: forms_common.py:416 models.py:1629
msgid "Other address: postal code"
msgstr ""
-#: forms_common.py:418 models.py:1576
+#: forms_common.py:418 models.py:1631
msgid "Other address: town"
msgstr ""
-#: forms_common.py:420 models.py:1578
+#: forms_common.py:420 models.py:1633
msgid "Other address: country"
msgstr ""
@@ -378,7 +378,7 @@ msgstr ""
msgid "Account search"
msgstr ""
-#: forms_common.py:512 forms_common.py:552 forms_common.py:556 models.py:2561
+#: forms_common.py:512 forms_common.py:552 forms_common.py:556 models.py:2616
msgid "Person type"
msgstr ""
@@ -410,7 +410,7 @@ msgstr ""
msgid "Send the new password by email?"
msgstr ""
-#: forms_common.py:636 forms_common.py:649 models.py:3031
+#: forms_common.py:636 forms_common.py:649 models.py:3086
msgid "Towns"
msgstr ""
@@ -426,7 +426,7 @@ msgstr ""
msgid "Documentation informations"
msgstr ""
-#: forms_common.py:783 forms_common.py:831 models.py:2156 models.py:2923
+#: forms_common.py:783 forms_common.py:831 models.py:2211 models.py:2978
msgid "Source type"
msgstr ""
@@ -438,37 +438,37 @@ msgstr ""
msgid "Internal reference"
msgstr ""
-#: forms_common.py:791 models.py:2962
+#: forms_common.py:791 models.py:3017
msgid "Numerical ressource (web address)"
msgstr ""
-#: forms_common.py:792 models.py:2964
+#: forms_common.py:792 models.py:3019
msgid "Receipt date"
msgstr ""
-#: forms_common.py:794 models.py:2327 models.py:2966
+#: forms_common.py:794 models.py:2382 models.py:3021
msgid "Creation date"
msgstr ""
-#: forms_common.py:797 models.py:2969
+#: forms_common.py:797 models.py:3024
msgid "Receipt date in documentation"
msgstr ""
-#: forms_common.py:799 forms_common.py:835 models.py:381 models.py:698
-#: models.py:2050 models.py:2622 models.py:2976
+#: forms_common.py:799 forms_common.py:835 models.py:419 models.py:746
+#: models.py:2105 models.py:2677 models.py:3031
msgid "Comment"
msgstr ""
-#: forms_common.py:801 forms_common.py:834 models.py:1111 models.py:1789
-#: models.py:1977 models.py:2024 models.py:2975 templates/sheet_ope.html:128
+#: forms_common.py:801 forms_common.py:834 models.py:1161 models.py:1844
+#: models.py:2032 models.py:2079 models.py:3030 templates/sheet_ope.html:128
msgid "Description"
msgstr ""
-#: forms_common.py:804 models.py:2977
+#: forms_common.py:804 models.py:3032
msgid "Additional information"
msgstr ""
-#: forms_common.py:806 forms_common.py:838 models.py:2979
+#: forms_common.py:806 forms_common.py:838 models.py:3034
msgid "Has a duplicate"
msgstr ""
@@ -483,7 +483,7 @@ msgid ""
"p>"
msgstr ""
-#: forms_common.py:827 forms_common.py:856 forms_common.py:890 models.py:2890
+#: forms_common.py:827 forms_common.py:856 forms_common.py:890 models.py:2945
#: templates/ishtar/wizard/wizard_person_deletion.html:124
msgid "Author"
msgstr ""
@@ -496,7 +496,7 @@ msgstr ""
msgid "Would you like to delete this documentation?"
msgstr ""
-#: forms_common.py:864 models.py:2157 models.py:2877 models.py:2887
+#: forms_common.py:864 models.py:2212 models.py:2932 models.py:2942
msgid "Author type"
msgstr ""
@@ -508,7 +508,7 @@ msgstr ""
msgid "There are identical authors."
msgstr ""
-#: forms_common.py:901 models.py:2891 models.py:2958
+#: forms_common.py:901 models.py:2946 models.py:3013
#: templates/sheet_ope.html:106
#: templates/ishtar/blocks/window_tables/documents.html:9
msgid "Authors"
@@ -526,7 +526,7 @@ msgstr ""
msgid "Deletion"
msgstr ""
-#: ishtar_menu.py:39 models.py:1283 views.py:1644
+#: ishtar_menu.py:39 models.py:1338 views.py:1640
msgid "Global variables"
msgstr ""
@@ -554,278 +554,296 @@ msgstr ""
msgid "Manual merge"
msgstr ""
-#: ishtar_menu.py:109 models.py:2335
+#: ishtar_menu.py:109 models.py:2390
msgid "Imports"
msgstr ""
-#: ishtar_menu.py:112 views.py:1652
+#: ishtar_menu.py:112 views.py:1648
msgid "New import"
msgstr ""
-#: ishtar_menu.py:116 views.py:1666
+#: ishtar_menu.py:116 views.py:1662
msgid "Current imports"
msgstr ""
-#: ishtar_menu.py:120 views.py:1705
+#: ishtar_menu.py:120 views.py:1701
msgid "Old imports"
msgstr ""
-#: models.py:186
+#: models.py:224
msgid "Not a valid item."
msgstr ""
-#: models.py:201
+#: models.py:239
msgid "A selected item is not a valid item."
msgstr ""
-#: models.py:212
+#: models.py:250
msgid "This item already exists."
msgstr ""
-#: models.py:377 models.py:697 models.py:1535 models.py:1547 models.py:1973
+#: models.py:415 models.py:745 models.py:1590 models.py:1602 models.py:2028
msgid "Label"
msgstr ""
-#: models.py:379
+#: models.py:417
msgid "Textual ID"
msgstr ""
-#: models.py:382 models.py:700 models.py:1504
+#: models.py:420 models.py:748 models.py:1559
msgid "Available"
msgstr ""
-#: models.py:724 models.py:2096
+#: models.py:772 models.py:2151
msgid "Key"
msgstr ""
-#: models.py:730
+#: models.py:778
msgid "Specific key to an import"
msgstr ""
-#: models.py:826
+#: models.py:874
msgid "Last editor"
msgstr ""
-#: models.py:829
+#: models.py:877
msgid "Creator"
msgstr ""
-#: models.py:971 models.py:2874 models.py:3042 models.py:3098
+#: models.py:1019 models.py:2929 models.py:3097 models.py:3153
msgid "Order"
msgstr ""
-#: models.py:972
+#: models.py:1020
msgid "Symmetrical"
msgstr ""
-#: models.py:973
+#: models.py:1021
msgid "Tiny label"
msgstr ""
-#: models.py:987
+#: models.py:1035
msgid "Cannot have symmetrical and an inverse_relation"
msgstr ""
-#: models.py:1103
+#: models.py:1151
msgid "Euro"
msgstr ""
-#: models.py:1104
+#: models.py:1152
msgid "US dollar"
msgstr ""
-#: models.py:1110 models.py:1787
+#: models.py:1153 views.py:1438 views.py:1500
+msgid "Operations"
+msgstr ""
+
+#: models.py:1154 views.py:1440 views.py:1504
+msgid "Context records"
+msgstr ""
+
+#: models.py:1160 models.py:1842
msgid "Slug"
msgstr ""
-#: models.py:1113
+#: models.py:1163
msgid "CSS color code for base module"
msgstr ""
-#: models.py:1115
+#: models.py:1165
msgid "Files module"
msgstr ""
-#: models.py:1117
+#: models.py:1167
msgid "CSS color code for files module"
msgstr ""
-#: models.py:1119
+#: models.py:1169
msgid "Context records module"
msgstr ""
-#: models.py:1122
+#: models.py:1172
msgid "CSS color code for context record module"
msgstr ""
-#: models.py:1124
+#: models.py:1174
msgid "Finds module"
msgstr ""
-#: models.py:1125
+#: models.py:1175
msgid "Need context records module"
msgstr ""
-#: models.py:1127
+#: models.py:1177
+msgid "Find index is based on"
+msgstr ""
+
+#: models.py:1179
+msgid ""
+"To prevent irrelevant indexes, change this parameter only if there is no "
+"find in the database"
+msgstr ""
+
+#: models.py:1182
msgid "CSS color code for find module"
msgstr ""
-#: models.py:1130
+#: models.py:1185
msgid "Warehouses module"
msgstr ""
-#: models.py:1131
+#: models.py:1186
msgid "Need finds module"
msgstr ""
-#: models.py:1133
+#: models.py:1188
msgid "CSS code for warehouse module"
msgstr ""
-#: models.py:1135
+#: models.py:1190
msgid "Mapping module"
msgstr ""
-#: models.py:1137
+#: models.py:1192
msgid "CSS code for mapping module"
msgstr ""
-#: models.py:1140
+#: models.py:1195
msgid "Home page"
msgstr ""
-#: models.py:1141
+#: models.py:1196
#, python-brace-format
msgid ""
"Homepage of Ishtar - if not defined a default homepage will appear. Use the "
"markdown syntax. {random_image} can be used to display a random image."
msgstr ""
-#: models.py:1145
+#: models.py:1200
msgid "File external id"
msgstr ""
-#: models.py:1147
+#: models.py:1202
msgid ""
"Formula to manage file external ID. Change this with care. With incorrect "
"formula, the application might be unusable and import of external data can "
"be destructive."
msgstr ""
-#: models.py:1152
+#: models.py:1207
msgid "Parcel external id"
msgstr ""
-#: models.py:1155
+#: models.py:1210
msgid ""
"Formula to manage parcel external ID. Change this with care. With incorrect "
"formula, the application might be unusable and import of external data can "
"be destructive."
msgstr ""
-#: models.py:1160
+#: models.py:1215
msgid "Context record external id"
msgstr ""
-#: models.py:1162
+#: models.py:1217
msgid ""
"Formula to manage context record external ID. Change this with care. With "
"incorrect formula, the application might be unusable and import of external "
"data can be destructive."
msgstr ""
-#: models.py:1167
+#: models.py:1222
msgid "Base find external id"
msgstr ""
-#: models.py:1169
+#: models.py:1224
msgid ""
"Formula to manage base find external ID. Change this with care. With "
"incorrect formula, the application might be unusable and import of external "
"data can be destructive."
msgstr ""
-#: models.py:1174
+#: models.py:1229
msgid "Find external id"
msgstr ""
-#: models.py:1176
+#: models.py:1231
msgid ""
"Formula to manage find external ID. Change this with care. With incorrect "
"formula, the application might be unusable and import of external data can "
"be destructive."
msgstr ""
-#: models.py:1181
+#: models.py:1236
msgid "Container external id"
msgstr ""
-#: models.py:1183
+#: models.py:1238
msgid ""
"Formula to manage container external ID. Change this with care. With "
"incorrect formula, the application might be unusable and import of external "
"data can be destructive."
msgstr ""
-#: models.py:1188
+#: models.py:1243
msgid "Warehouse external id"
msgstr ""
-#: models.py:1190
+#: models.py:1245
msgid ""
"Formula to manage warehouse external ID. Change this with care. With "
"incorrect formula, the application might be unusable and import of external "
"data can be destructive."
msgstr ""
-#: models.py:1195
+#: models.py:1250
msgid "Raw name for person"
msgstr ""
-#: models.py:1197
+#: models.py:1252
msgid ""
"Formula to manage person raw_name. Change this with care. With incorrect "
"formula, the application might be unusable and import of external data can "
"be destructive."
msgstr ""
-#: models.py:1201
+#: models.py:1256
msgid "Current active"
msgstr ""
-#: models.py:1202
+#: models.py:1257
msgid "Currency"
msgstr ""
-#: models.py:1206
+#: models.py:1261
msgid "Ishtar site profile"
msgstr ""
-#: models.py:1207
+#: models.py:1262
msgid "Ishtar site profiles"
msgstr ""
-#: models.py:1276
+#: models.py:1331
msgid "Variable name"
msgstr ""
-#: models.py:1277
+#: models.py:1332
msgid "Description of the variable"
msgstr ""
-#: models.py:1279 models.py:2097
+#: models.py:1334 models.py:2152
msgid "Value"
msgstr ""
-#: models.py:1282
+#: models.py:1337
msgid "Global variable"
msgstr ""
-#: models.py:1405 models.py:1435
+#: models.py:1460 models.py:1490
msgid "Total"
msgstr ""
-#: models.py:1412 models.py:1536 models.py:1548
+#: models.py:1467 models.py:1591 models.py:1603
#: templates/ishtar/sheet_person.html:24
#: templates/ishtar/dashboards/dashboard_main_detail.html:141
#: templates/ishtar/dashboards/dashboard_main_detail_users.html:26
@@ -833,663 +851,663 @@ msgstr ""
msgid "Number"
msgstr ""
-#: models.py:1499
+#: models.py:1554
msgid "Administrative Act"
msgstr ""
-#: models.py:1503
+#: models.py:1558
msgid "Associated object"
msgstr ""
-#: models.py:1507
+#: models.py:1562
msgid "Document template"
msgstr ""
-#: models.py:1508
+#: models.py:1563
msgid "Document templates"
msgstr ""
-#: models.py:1539 models.py:1549 models.py:2321
+#: models.py:1594 models.py:1604 models.py:2376
msgid "State"
msgstr ""
-#: models.py:1553 templates/blocks/JQueryAdvancedTown.html:12
+#: models.py:1608 templates/blocks/JQueryAdvancedTown.html:12
msgid "Department"
msgstr ""
-#: models.py:1554
+#: models.py:1609
msgid "Departments"
msgstr ""
-#: models.py:1591
+#: models.py:1646
msgid "Raw phone"
msgstr ""
-#: models.py:1597
+#: models.py:1652
msgid "Alternative address is prefered"
msgstr ""
-#: models.py:1636
+#: models.py:1691
msgid "Tel: "
msgstr ""
-#: models.py:1640
+#: models.py:1695
msgid "Mobile: "
msgstr ""
-#: models.py:1644
+#: models.py:1699
msgid "Email: "
msgstr ""
-#: models.py:1649
+#: models.py:1704
msgid "Merge key"
msgstr ""
-#: models.py:1723
+#: models.py:1778
msgid "Organization types"
msgstr ""
-#: models.py:1770
+#: models.py:1825
msgid "Class name"
msgstr ""
-#: models.py:1773
+#: models.py:1828
msgid "Importer - Model"
msgstr ""
-#: models.py:1774
+#: models.py:1829
msgid "Importer - Models"
msgstr ""
-#: models.py:1791 templates/ishtar/dashboards/dashboard_main.html:34
+#: models.py:1846 templates/ishtar/dashboards/dashboard_main.html:34
msgid "Users"
msgstr ""
-#: models.py:1794
+#: models.py:1849
msgid "Associated model"
msgstr ""
-#: models.py:1797
+#: models.py:1852
msgid "Models that can accept new items"
msgstr ""
-#: models.py:1798
+#: models.py:1853
msgid "Leave blank for no restrictions"
msgstr ""
-#: models.py:1800
+#: models.py:1855
msgid "Is template"
msgstr ""
-#: models.py:1801
+#: models.py:1856
msgid "Unicity keys (separator \";\")"
msgstr ""
-#: models.py:1805
+#: models.py:1860
msgid "Importer - Type"
msgstr ""
-#: models.py:1806
+#: models.py:1861
msgid "Importer - Types"
msgstr ""
-#: models.py:1905
+#: models.py:1960
msgid "Importer - Default"
msgstr ""
-#: models.py:1906
+#: models.py:1961
msgid "Importer - Defaults"
msgstr ""
-#: models.py:1941
+#: models.py:1996
msgid "Importer - Default value"
msgstr ""
-#: models.py:1942
+#: models.py:1997
msgid "Importer - Default values"
msgstr ""
-#: models.py:1976
+#: models.py:2031
msgid "Column number"
msgstr ""
-#: models.py:1979
+#: models.py:2034
msgid "Required"
msgstr ""
-#: models.py:1981
+#: models.py:2036
msgid "Export field name"
msgstr ""
-#: models.py:1982
+#: models.py:2037
msgid ""
"Fill this field if the field name is ambiguous for export. For instance: "
"concatenated fields."
msgstr ""
-#: models.py:1987
+#: models.py:2042
msgid "Importer - Column"
msgstr ""
-#: models.py:1988
+#: models.py:2043
msgid "Importer - Columns"
msgstr ""
-#: models.py:2008
+#: models.py:2063
msgid "Field name"
msgstr ""
-#: models.py:2010 models.py:2044
+#: models.py:2065 models.py:2099
msgid "Force creation of new items"
msgstr ""
-#: models.py:2012 models.py:2046
+#: models.py:2067 models.py:2101
msgid "Concatenate with existing"
msgstr ""
-#: models.py:2014 models.py:2048
+#: models.py:2069 models.py:2103
msgid "Concatenate character"
msgstr ""
-#: models.py:2018
+#: models.py:2073
msgid "Importer - Duplicate field"
msgstr ""
-#: models.py:2019
+#: models.py:2074
msgid "Importer - Duplicate fields"
msgstr ""
-#: models.py:2026
+#: models.py:2081
msgid "Regular expression"
msgstr ""
-#: models.py:2029
+#: models.py:2084
msgid "Importer - Regular expression"
msgstr ""
-#: models.py:2030
+#: models.py:2085
msgid "Importer - Regular expressions"
msgstr ""
-#: models.py:2053
+#: models.py:2108
msgid "Importer - Target"
msgstr ""
-#: models.py:2054
+#: models.py:2109
msgid "Importer - Targets"
msgstr ""
-#: models.py:2078 views.py:568
+#: models.py:2133 views.py:570
msgid "True"
msgstr ""
-#: models.py:2079 views.py:570
+#: models.py:2134 views.py:572
msgid "False"
msgstr ""
-#: models.py:2098
+#: models.py:2153
msgid "Is set"
msgstr ""
-#: models.py:2105
+#: models.py:2160
msgid "Importer - Target key"
msgstr ""
-#: models.py:2106
+#: models.py:2161
msgid "Importer - Targets keys"
msgstr ""
-#: models.py:2158 models.py:2954
+#: models.py:2213 models.py:3009
msgid "Format"
msgstr ""
-#: models.py:2159 models.py:3046
+#: models.py:2214 models.py:3101
msgid "Operation type"
msgstr ""
-#: models.py:2160
+#: models.py:2215
msgid "Period"
msgstr ""
-#: models.py:2161
+#: models.py:2216
msgid "Report state"
msgstr ""
-#: models.py:2162
+#: models.py:2217
msgid "Remain type"
msgstr ""
-#: models.py:2163
+#: models.py:2218
msgid "Unit"
msgstr ""
-#: models.py:2165
+#: models.py:2220
msgid "Activity type"
msgstr ""
-#: models.py:2166
+#: models.py:2221
msgid "Material"
msgstr ""
-#: models.py:2168
+#: models.py:2223
msgid "Conservatory state"
msgstr ""
-#: models.py:2169
+#: models.py:2224
msgid "Container type"
msgstr ""
-#: models.py:2170
+#: models.py:2225
msgid "Preservation type"
msgstr ""
-#: models.py:2171
+#: models.py:2226
msgid "Object type"
msgstr ""
-#: models.py:2172
+#: models.py:2227
msgid "Integrity type"
msgstr ""
-#: models.py:2174
+#: models.py:2229
msgid "Remarkability type"
msgstr ""
-#: models.py:2175
+#: models.py:2230
msgid "Batch type"
msgstr ""
-#: models.py:2177
+#: models.py:2232
msgid "Identification type"
msgstr ""
-#: models.py:2179
+#: models.py:2234
msgid "Context record relation type"
msgstr ""
-#: models.py:2180 models.py:3104
+#: models.py:2235 models.py:3159
msgid "Spatial reference system"
msgstr ""
-#: models.py:2181 models.py:2932
+#: models.py:2236 models.py:2987
msgid "Support type"
msgstr ""
-#: models.py:2182 models.py:2573
+#: models.py:2237 models.py:2628
msgid "Title type"
msgstr ""
-#: models.py:2188
+#: models.py:2243
msgid "Integer"
msgstr ""
-#: models.py:2189
+#: models.py:2244
msgid "Float"
msgstr ""
-#: models.py:2190
+#: models.py:2245
msgid "String"
msgstr ""
-#: models.py:2191 templates/sheet_ope.html:86
+#: models.py:2246 templates/sheet_ope.html:86
msgid "Date"
msgstr ""
-#: models.py:2193 templates/sheet_ope.html:61 templates/sheet_ope.html.py:83
+#: models.py:2248 templates/sheet_ope.html:61 templates/sheet_ope.html.py:83
#: templates/ishtar/dashboards/dashboard_main_detail.html:126
msgid "Year"
msgstr ""
-#: models.py:2194
+#: models.py:2249
msgid "String to boolean"
msgstr ""
-#: models.py:2195
+#: models.py:2250
msgctxt "filesystem"
msgid "File"
msgstr ""
-#: models.py:2196
+#: models.py:2251
msgid "Unknow type"
msgstr ""
-#: models.py:2212
+#: models.py:2267
msgid "4 digit year. e.g.: \"2015\""
msgstr ""
-#: models.py:2213
+#: models.py:2268
msgid "4 digit year/month/day. e.g.: \"2015/02/04\""
msgstr ""
-#: models.py:2214
+#: models.py:2269
msgid "Day/month/4 digit year. e.g.: \"04/02/2015\""
msgstr ""
-#: models.py:2224
+#: models.py:2279
msgid "Options"
msgstr ""
-#: models.py:2226
+#: models.py:2281
msgid "Split character(s)"
msgstr ""
-#: models.py:2230
+#: models.py:2285
msgid "Importer - Formater type"
msgstr ""
-#: models.py:2231
+#: models.py:2286
msgid "Importer - Formater types"
msgstr ""
-#: models.py:2283 templates/ishtar/dashboards/dashboard_main_detail.html:63
+#: models.py:2338 templates/ishtar/dashboards/dashboard_main_detail.html:63
msgid "Created"
msgstr ""
-#: models.py:2284
+#: models.py:2339
msgid "Analyse in progress"
msgstr ""
-#: models.py:2285
+#: models.py:2340
msgid "Analysed"
msgstr ""
-#: models.py:2286
+#: models.py:2341
msgid "Import pending"
msgstr ""
-#: models.py:2287
+#: models.py:2342
msgid "Import in progress"
msgstr ""
-#: models.py:2288
+#: models.py:2343
msgid "Finished with errors"
msgstr ""
-#: models.py:2289
+#: models.py:2344
msgid "Finished"
msgstr ""
-#: models.py:2290
+#: models.py:2345
msgid "Archived"
msgstr ""
-#: models.py:2305
+#: models.py:2360
msgid "Imported file"
msgstr ""
-#: models.py:2307
+#: models.py:2362
msgid "Associated images (zip file)"
msgstr ""
-#: models.py:2309
+#: models.py:2364
msgid "Encoding"
msgstr ""
-#: models.py:2311
+#: models.py:2366
msgid "Skip lines"
msgstr ""
-#: models.py:2312 templates/ishtar/import_list.html:51
+#: models.py:2367 templates/ishtar/import_list.html:51
msgid "Error file"
msgstr ""
-#: models.py:2315
+#: models.py:2370
msgid "Result file"
msgstr ""
-#: models.py:2318 templates/ishtar/import_list.html:57
+#: models.py:2373 templates/ishtar/import_list.html:57
msgid "Match file"
msgstr ""
-#: models.py:2324
+#: models.py:2379
msgid "Conservative import"
msgstr ""
-#: models.py:2328
+#: models.py:2383
msgid "End date"
msgstr ""
-#: models.py:2331
+#: models.py:2386
msgid "Remaining seconds"
msgstr ""
-#: models.py:2334
+#: models.py:2389
msgid "Import"
msgstr ""
-#: models.py:2363
+#: models.py:2418
msgid "Analyse"
msgstr ""
-#: models.py:2365 models.py:2368
+#: models.py:2420 models.py:2423
msgid "Re-analyse"
msgstr ""
-#: models.py:2366
+#: models.py:2421
msgid "Launch import"
msgstr ""
-#: models.py:2369
+#: models.py:2424
msgid "Re-import"
msgstr ""
-#: models.py:2370
+#: models.py:2425
msgid "Archive"
msgstr ""
-#: models.py:2372
+#: models.py:2427
msgid "Unarchive"
msgstr ""
-#: models.py:2373 widgets.py:184 templates/ishtar/form_delete.html:11
+#: models.py:2428 widgets.py:184 templates/ishtar/form_delete.html:11
msgid "Delete"
msgstr ""
-#: models.py:2514
+#: models.py:2569
msgid "Organizations"
msgstr ""
-#: models.py:2516
+#: models.py:2571
msgid "Can view all Organizations"
msgstr ""
-#: models.py:2517
+#: models.py:2572
msgid "Can view own Organization"
msgstr ""
-#: models.py:2518
+#: models.py:2573
msgid "Can add own Organization"
msgstr ""
-#: models.py:2520
+#: models.py:2575
msgid "Can change own Organization"
msgstr ""
-#: models.py:2522
+#: models.py:2577
msgid "Can delete own Organization"
msgstr ""
-#: models.py:2557
+#: models.py:2612
msgid "Groups"
msgstr ""
-#: models.py:2562
+#: models.py:2617
msgid "Person types"
msgstr ""
-#: models.py:2574
+#: models.py:2629
msgid "Title types"
msgstr ""
-#: models.py:2583
+#: models.py:2638
msgid "Mr"
msgstr ""
-#: models.py:2584
+#: models.py:2639
msgid "Miss"
msgstr ""
-#: models.py:2585
+#: models.py:2640
msgid "Mr and Mrs"
msgstr ""
-#: models.py:2586
+#: models.py:2641
msgid "Mrs"
msgstr ""
-#: models.py:2587
+#: models.py:2642
msgid "Doctor"
msgstr ""
-#: models.py:2620
+#: models.py:2675
msgid "Contact type"
msgstr ""
-#: models.py:2623 models.py:2687
+#: models.py:2678 models.py:2742
msgid "Types"
msgstr ""
-#: models.py:2626
+#: models.py:2681
msgid "Is attached to"
msgstr ""
-#: models.py:2631
+#: models.py:2686
msgid "Persons"
msgstr ""
-#: models.py:2633
+#: models.py:2688
msgid "Can view all Persons"
msgstr ""
-#: models.py:2634
+#: models.py:2689
msgid "Can view own Person"
msgstr ""
-#: models.py:2635
+#: models.py:2690
msgid "Can add own Person"
msgstr ""
-#: models.py:2636
+#: models.py:2691
msgid "Can change own Person"
msgstr ""
-#: models.py:2637
+#: models.py:2692
msgid "Can delete own Person"
msgstr ""
-#: models.py:2826
+#: models.py:2881
msgid "Advanced shortcut menu"
msgstr ""
-#: models.py:2829
+#: models.py:2884
msgid "Ishtar user"
msgstr ""
-#: models.py:2830
+#: models.py:2885
msgid "Ishtar users"
msgstr ""
-#: models.py:2870
+#: models.py:2925
msgid "To modify the password use the form in Auth > User"
msgstr ""
-#: models.py:2878
+#: models.py:2933
msgid "Author types"
msgstr ""
-#: models.py:2895
+#: models.py:2950
msgid "Can view all Authors"
msgstr ""
-#: models.py:2897
+#: models.py:2952
msgid "Can view own Author"
msgstr ""
-#: models.py:2899
+#: models.py:2954
msgid "Can add own Author"
msgstr ""
-#: models.py:2901
+#: models.py:2956
msgid "Can change own Author"
msgstr ""
-#: models.py:2903
+#: models.py:2958
msgid "Can delete own Author"
msgstr ""
-#: models.py:2924
+#: models.py:2979
msgid "Source types"
msgstr ""
-#: models.py:2933
+#: models.py:2988
msgid "Support types"
msgstr ""
-#: models.py:2940
+#: models.py:2995
msgid "Format type"
msgstr ""
-#: models.py:2941
+#: models.py:2996
msgid "Format types"
msgstr ""
-#: models.py:2949
+#: models.py:3004
msgid "External ID"
msgstr ""
-#: models.py:2952
+#: models.py:3007
msgid "Support"
msgstr ""
-#: models.py:2956
+#: models.py:3011
msgid "Scale"
msgstr ""
-#: models.py:2970
+#: models.py:3025
msgid "Item number"
msgstr ""
-#: models.py:2971
+#: models.py:3026
msgid "Ref."
msgstr ""
-#: models.py:2974
+#: models.py:3029
msgid "Internal ref."
msgstr ""
-#: models.py:3017
+#: models.py:3072
msgid "Surface (m2)"
msgstr ""
-#: models.py:3018 templates/sheet_ope.html:46 templates/sheet_ope.html.py:107
+#: models.py:3073 templates/sheet_ope.html:46 templates/sheet_ope.html.py:107
msgid "Localisation"
msgstr ""
-#: models.py:3043
+#: models.py:3098
msgid "Is preventive"
msgstr ""
-#: models.py:3047
+#: models.py:3102
msgid "Operation types"
msgstr ""
-#: models.py:3076
+#: models.py:3131
msgid "Preventive"
msgstr ""
-#: models.py:3077
+#: models.py:3132
msgid "Research"
msgstr ""
-#: models.py:3100
+#: models.py:3155
msgid "Authority name"
msgstr ""
-#: models.py:3101
+#: models.py:3156
msgid "Authority SRID"
msgstr ""
-#: models.py:3105
+#: models.py:3160
msgid "Spatial reference systems"
msgstr ""
@@ -1501,120 +1519,112 @@ msgstr ""
msgid "Load another random image?"
msgstr ""
-#: views.py:119
+#: views.py:121
msgid "New person"
msgstr ""
-#: views.py:127
+#: views.py:129
msgid "Person modification"
msgstr ""
-#: views.py:142
+#: views.py:144
msgid "Person deletion"
msgstr ""
-#: views.py:153
+#: views.py:155
msgid "New organization"
msgstr ""
-#: views.py:160
+#: views.py:162
msgid "Organization modification"
msgstr ""
-#: views.py:176
+#: views.py:178
msgid "Organization deletion"
msgstr ""
-#: views.py:183
+#: views.py:185
msgid "Account management"
msgstr ""
-#: views.py:189
+#: views.py:191
msgid "Account deletion"
msgstr ""
-#: views.py:251
+#: views.py:253
msgid "Archaeological file"
msgstr ""
-#: views.py:252
+#: views.py:254
msgid "Operation"
msgstr ""
-#: views.py:254
+#: views.py:256
msgid "Context record"
msgstr ""
-#: views.py:256
+#: views.py:258
msgid "Find"
msgstr ""
-#: views.py:258
+#: views.py:260
msgid "Treatment request"
msgstr ""
-#: views.py:259
+#: views.py:261
msgid "Treatment"
msgstr ""
-#: views.py:1387 views.py:1430
+#: views.py:1376 views.py:1419
msgid "Operation not permitted."
msgstr ""
-#: views.py:1389
+#: views.py:1378
#, python-format
msgid "New %s"
msgstr ""
-#: views.py:1448 views.py:1501
+#: views.py:1437 views.py:1496
msgid "Archaeological files"
msgstr ""
-#: views.py:1449 views.py:1505
-msgid "Operations"
-msgstr ""
-
-#: views.py:1451 views.py:1509
-msgid "Context records"
-msgstr ""
-
-#: views.py:1453 views.py:1512
+#: views.py:1442 views.py:1507
msgid "Finds"
msgstr ""
-#: views.py:1455 views.py:1517
+#: views.py:1444 views.py:1512
msgid "Treatment requests"
msgstr ""
-#: views.py:1456 views.py:1521
+#: views.py:1445 views.py:1518
msgid "Treatments"
msgstr ""
-#: views.py:1719 templates/ishtar/import_list.html:47
+#: views.py:1715 templates/ishtar/import_list.html:47
msgid "Link unmatched items"
msgstr ""
-#: views.py:1734
+#: views.py:1730
msgid "Delete import"
msgstr ""
-#: views.py:1773
+#: views.py:1769
msgid "Merge persons"
msgstr ""
-#: views.py:1797
+#: views.py:1793
msgid "Select the main person"
msgstr ""
-#: views.py:1806
+#: views.py:1802
msgid "Merge organization"
msgstr ""
-#: views.py:1816
+#: views.py:1812
msgid "Select the main organization"
msgstr ""
-#: views.py:1856 views.py:1872
+#: views.py:1852 views.py:1868
msgid "Corporation manager"
msgstr ""
diff --git a/ishtar_common/management/commands/export_access_controls.py b/ishtar_common/management/commands/export_access_controls.py
new file mode 100644
index 000000000..87b4819b9
--- /dev/null
+++ b/ishtar_common/management/commands/export_access_controls.py
@@ -0,0 +1,89 @@
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
+# Copyright (C) 2017 É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
+# published by the Free Software Foundation, either version 3 of the
+# License, or (at your option) any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU Affero General Public License for more details.
+
+# You should have received a copy of the GNU Affero General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+# See the file COPYING for details.
+
+import json
+import sys
+
+from django.core.management.base import BaseCommand
+
+from django.contrib.auth.models import Permission, Group
+from django.contrib.contenttypes.models import ContentType
+from ishtar_common.models import PersonType
+
+
+class Command(BaseCommand):
+ args = ''
+ help = 'Export access controls'
+
+ def handle(self, *args, **options):
+ result = {
+ 'content_types': [],
+ 'permissions': [],
+ 'groups': [],
+ 'group_perms': [],
+ 'person_types': [],
+ 'person_type_groups': [],
+ }
+
+ dct_ct = {}
+ for content_type in ContentType.objects.all():
+ value = {'app_label': content_type.app_label,
+ 'model': content_type.model,
+ 'name': content_type.name
+ }
+ result['content_types'].append(value)
+ dct_ct[content_type.pk] = (content_type.app_label,
+ content_type.model)
+
+ dct_perm = {}
+ for perm in Permission.objects.all():
+ value = {'content_type': dct_ct[perm.content_type_id],
+ 'codename': perm.codename,
+ 'name': perm.name}
+ result['permissions'].append(value)
+ dct_perm[perm.pk] = perm.codename
+
+ dct_groups = {}
+ for grp in Group.objects.all():
+ value = {
+ "name": grp.name
+ }
+ result['groups'].append(value)
+ dct_groups[grp.pk] = grp
+ for perm in grp.permissions.all():
+ result['group_perms'].append(
+ {'group': grp.name, 'permission': dct_perm[perm.pk]})
+
+ dct_pts = {}
+ for pt in PersonType.objects.all():
+ value = {
+ "label": pt.label,
+ "txt_idx": pt.txt_idx,
+ "comment": pt.comment,
+ "available": pt.available
+ }
+ result["person_types"].append(value)
+ dct_pts[pt.pk] = pt.txt_idx
+ for ptgp in pt.groups.all():
+ result['person_type_groups'].append(
+ {"person_type": pt.txt_idx, "group": ptgp.name}
+ )
+
+ data = json.dumps(result)
+ sys.stdout.write(data) \ No newline at end of file
diff --git a/ishtar_common/management/commands/import_access_controls.py b/ishtar_common/management/commands/import_access_controls.py
new file mode 100644
index 000000000..62692485d
--- /dev/null
+++ b/ishtar_common/management/commands/import_access_controls.py
@@ -0,0 +1,106 @@
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
+# Copyright (C) 2017 É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
+# published by the Free Software Foundation, either version 3 of the
+# License, or (at your option) any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU Affero General Public License for more details.
+
+# You should have received a copy of the GNU Affero General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+# See the file COPYING for details.
+
+import json
+
+from django.core.management.base import BaseCommand
+
+from django.contrib.auth.models import Permission, Group
+from django.contrib.contenttypes.models import ContentType
+
+from ishtar_common.models import PersonType
+
+class Command(BaseCommand):
+ args = '<access control file>'
+ help = 'Import access controls'
+
+ def handle(self, *args, **options):
+ f = open(args[0])
+ data = json.loads(f.read())
+
+ res = {'content_types': {},
+ 'permissions': {},
+ 'groups': {},
+ 'person_types': {}
+ }
+ for content_type in data['content_types']:
+ q = ContentType.objects.filter(
+ app_label=content_type['app_label'],
+ model=content_type['model'])
+ if not q.count():
+ ct = ContentType.objects.create(
+ app_label=content_type['app_label'],
+ model=content_type['model'],
+ name=content_type['name']
+ )
+ print("created", ct)
+ else:
+ ct = q.all()[0]
+ res['content_types'][(ct.app_label,
+ ct.model)] = ct
+
+ for perm in data['permissions']:
+ app_label, model = perm['content_type']
+ q = Permission.objects.filter(
+ codename=perm['codename'],
+ content_type__app_label=app_label,
+ content_type__model= model
+ )
+ if q.count():
+ p = q.all()[0]
+ else:
+ p = Permission.objects.create(
+ name=perm['name'], codename=perm['codename'],
+ content_type=res['content_types'][(app_label, model)])
+ print("created", p)
+ res['permissions'][perm['codename']] = p
+
+ for gp in data['groups']:
+ q = Group.objects.filter(name=gp['name'])
+ if q.count():
+ g = q.all()[0]
+ else:
+ g = Group.objects.create(name=gp['name'])
+ print("created", g)
+ res['groups'][gp['name']] = g
+ g.permissions.clear()
+
+ for gperm in data['group_perms']:
+ g = res['groups'][gperm['group']]
+ g.permissions.add(res['permissions'][gperm['permission']])
+
+ for pt in data['person_types']:
+ q = PersonType.objects.filter(txt_idx=pt['txt_idx'])
+ if q.count():
+ pt = q.all()[0]
+ else:
+ pt = PersonType.objects.create(
+ label=pt['label'],
+ txt_idx=pt['txt_idx'],
+ comment=pt['comment'],
+ available=pt['available']
+ )
+ print("created", pt)
+ res['person_types'][pt.txt_idx] = pt
+ pt.groups.clear()
+
+ for ptgp in data['person_type_groups']:
+ pt = res['person_types'][ptgp['person_type']]
+ gp = res['groups'][ptgp['group']]
+ pt.groups.add(gp)
diff --git a/ishtar_common/migrations/0076_auto__add_field_ishtarsiteprofile_find_index.py b/ishtar_common/migrations/0076_auto__add_field_ishtarsiteprofile_find_index.py
new file mode 100644
index 000000000..84bf5f971
--- /dev/null
+++ b/ishtar_common/migrations/0076_auto__add_field_ishtarsiteprofile_find_index.py
@@ -0,0 +1,496 @@
+# -*- 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 field 'IshtarSiteProfile.find_index'
+ db.add_column('ishtar_common_ishtarsiteprofile', 'find_index',
+ self.gf('django.db.models.fields.CharField')(default='O', max_length=2),
+ keep_default=False)
+
+
+ def backwards(self, orm):
+ # Deleting field 'IshtarSiteProfile.find_index'
+ db.delete_column('ishtar_common_ishtarsiteprofile', 'find_index')
+
+
+ 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': {'ordering': "('author_type__order', 'person__name')", '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': {'ordering': "['order', 'label']", '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'}),
+ 'order': ('django.db.models.fields.IntegerField', [], {'default': '1'}),
+ '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': {'ordering': "['label']", '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'}),
+ 'alt_address': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'alt_address_complement': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'alt_address_is_prefered': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'alt_country': ('django.db.models.fields.CharField', [], {'max_length': '30', 'null': 'True', 'blank': 'True'}),
+ 'alt_postal_code': ('django.db.models.fields.CharField', [], {'max_length': '10', 'null': 'True', 'blank': 'True'}),
+ 'alt_town': ('django.db.models.fields.CharField', [], {'max_length': '70', 'null': 'True', 'blank': 'True'}),
+ 'archived': ('django.db.models.fields.NullBooleanField', [], {'default': 'False', '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': '300', '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': '500'}),
+ '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'}),
+ 'phone2': ('django.db.models.fields.CharField', [], {'max_length': '18', 'null': 'True', 'blank': 'True'}),
+ 'phone3': ('django.db.models.fields.CharField', [], {'max_length': '18', 'null': 'True', 'blank': 'True'}),
+ 'phone_desc': ('django.db.models.fields.CharField', [], {'max_length': '300', 'null': 'True', 'blank': 'True'}),
+ 'phone_desc2': ('django.db.models.fields.CharField', [], {'max_length': '300', 'null': 'True', 'blank': 'True'}),
+ 'phone_desc3': ('django.db.models.fields.CharField', [], {'max_length': '300', 'null': 'True', 'blank': 'True'}),
+ 'postal_code': ('django.db.models.fields.CharField', [], {'max_length': '10', 'null': 'True', 'blank': 'True'}),
+ 'raw_phone': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'town': ('django.db.models.fields.CharField', [], {'max_length': '70', 'null': 'True', 'blank': 'True'})
+ },
+ 'ishtar_common.historicalperson': {
+ 'Meta': {'ordering': "('-history_date', '-history_id')", 'object_name': 'HistoricalPerson'},
+ 'address': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'address_complement': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'alt_address': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'alt_address_complement': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'alt_address_is_prefered': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'alt_country': ('django.db.models.fields.CharField', [], {'max_length': '30', 'null': 'True', 'blank': 'True'}),
+ 'alt_postal_code': ('django.db.models.fields.CharField', [], {'max_length': '10', 'null': 'True', 'blank': 'True'}),
+ 'alt_town': ('django.db.models.fields.CharField', [], {'max_length': '70', 'null': 'True', 'blank': 'True'}),
+ 'archived': ('django.db.models.fields.NullBooleanField', [], {'default': 'False', 'null': 'True', 'blank': 'True'}),
+ 'attached_to_id': ('django.db.models.fields.IntegerField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'}),
+ 'comment': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'contact_type': ('django.db.models.fields.CharField', [], {'max_length': '300', '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': '300', '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': '200', 'null': 'True', 'blank': 'True'}),
+ 'old_title': ('django.db.models.fields.CharField', [], {'max_length': '100', 'null': 'True', 'blank': 'True'}),
+ 'phone': ('django.db.models.fields.CharField', [], {'max_length': '18', 'null': 'True', 'blank': 'True'}),
+ 'phone2': ('django.db.models.fields.CharField', [], {'max_length': '18', 'null': 'True', 'blank': 'True'}),
+ 'phone3': ('django.db.models.fields.CharField', [], {'max_length': '18', 'null': 'True', 'blank': 'True'}),
+ 'phone_desc': ('django.db.models.fields.CharField', [], {'max_length': '300', 'null': 'True', 'blank': 'True'}),
+ 'phone_desc2': ('django.db.models.fields.CharField', [], {'max_length': '300', 'null': 'True', 'blank': 'True'}),
+ 'phone_desc3': ('django.db.models.fields.CharField', [], {'max_length': '300', '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'}),
+ 'raw_phone': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'salutation': ('django.db.models.fields.CharField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
+ 'surname': ('django.db.models.fields.CharField', [], {'max_length': '50', 'null': 'True', 'blank': 'True'}),
+ 'title_id': ('django.db.models.fields.IntegerField', [], {'db_index': 'True', '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': '255', 'null': 'True', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'imported_file': ('django.db.models.fields.files.FileField', [], {'max_length': '220'}),
+ 'imported_images': ('django.db.models.fields.files.FileField', [], {'max_length': '220', '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': '255', 'null': 'True', 'blank': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '500', 'null': 'True', 'blank': 'True'}),
+ 'result_file': ('django.db.models.fields.files.FileField', [], {'max_length': '255', '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'}),
+ 'export_field_name': ('django.db.models.fields.CharField', [], {'max_length': '200', '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']"}),
+ 'label': ('django.db.models.fields.CharField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
+ '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.importermodel': {
+ 'Meta': {'ordering': "('name',)", 'object_name': 'ImporterModel'},
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'klass': ('django.db.models.fields.CharField', [], {'max_length': '200'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '200'})
+ },
+ 'ishtar_common.importertype': {
+ 'Meta': {'ordering': "('name',)", 'object_name': 'ImporterType'},
+ 'associated_models': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'+'", 'null': 'True', 'to': "orm['ishtar_common.ImporterModel']"}),
+ 'created_models': ('django.db.models.fields.related.ManyToManyField', [], {'blank': 'True', 'related_name': "'+'", 'null': 'True', 'symmetrical': 'False', 'to': "orm['ishtar_common.ImporterModel']"}),
+ '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'}),
+ 'base_color': ('django.db.models.fields.CharField', [], {'default': "'rgba(0, 0, 0, 0)'", 'max_length': '200'}),
+ 'base_find_external_id': ('django.db.models.fields.TextField', [], {'default': "'{context_record__external_id}-{label}'"}),
+ 'container_external_id': ('django.db.models.fields.TextField', [], {'default': "'{responsible__external_id}-{index}'"}),
+ 'context_record': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'context_record_color': ('django.db.models.fields.CharField', [], {'default': "'rgba(210,200,0,0.2)'", 'max_length': '200'}),
+ 'context_record_external_id': ('django.db.models.fields.TextField', [], {'default': "'{parcel__external_id}-{label}'"}),
+ 'currency': ('django.db.models.fields.CharField', [], {'default': "u'\\u20ac'", 'max_length': "'5'"}),
+ 'description': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'file_external_id': ('django.db.models.fields.TextField', [], {'default': "'{year}-{numeric_reference}'"}),
+ 'files': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'files_color': ('django.db.models.fields.CharField', [], {'default': "'rgba(0, 32, 210, 0.1)'", 'max_length': '200'}),
+ 'find': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'find_color': ('django.db.models.fields.CharField', [], {'default': "'rgba(210,0,0,0.15)'", 'max_length': '200'}),
+ 'find_external_id': ('django.db.models.fields.TextField', [], {'default': "'{get_first_base_find__context_record__external_id}-{label}'"}),
+ 'find_index': ('django.db.models.fields.CharField', [], {'default': "'O'", 'max_length': '2'}),
+ 'homepage': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'label': ('django.db.models.fields.TextField', [], {}),
+ 'mapping': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'mapping_color': ('django.db.models.fields.CharField', [], {'default': "'rgba(72, 236, 0, 0.15)'", 'max_length': '200'}),
+ 'parcel_external_id': ('django.db.models.fields.TextField', [], {'default': "'{associated_file__external_id}{operation__code_patriarche}-{town__numero_insee}-{section}{parcel_number}'"}),
+ 'person_raw_name': ('django.db.models.fields.TextField', [], {'default': "'{name|upper} {surname}'"}),
+ 'slug': ('django.db.models.fields.SlugField', [], {'unique': 'True', 'max_length': '50'}),
+ 'warehouse': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'warehouse_color': ('django.db.models.fields.CharField', [], {'default': "'rgba(10,20,200,0.15)'", 'max_length': '200'}),
+ 'warehouse_external_id': ('django.db.models.fields.TextField', [], {'default': "'{name|slug}'"})
+ },
+ 'ishtar_common.ishtaruser': {
+ 'Meta': {'object_name': 'IshtarUser', '_ormbases': ['auth.User']},
+ 'advanced_shortcut_menu': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ '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'}),
+ 'alt_address': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'alt_address_complement': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'alt_address_is_prefered': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'alt_country': ('django.db.models.fields.CharField', [], {'max_length': '30', 'null': 'True', 'blank': 'True'}),
+ 'alt_postal_code': ('django.db.models.fields.CharField', [], {'max_length': '10', 'null': 'True', 'blank': 'True'}),
+ 'alt_town': ('django.db.models.fields.CharField', [], {'max_length': '70', 'null': 'True', 'blank': 'True'}),
+ 'archived': ('django.db.models.fields.NullBooleanField', [], {'default': 'False', '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': '300', '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': '500'}),
+ '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'}),
+ 'phone2': ('django.db.models.fields.CharField', [], {'max_length': '18', 'null': 'True', 'blank': 'True'}),
+ 'phone3': ('django.db.models.fields.CharField', [], {'max_length': '18', 'null': 'True', 'blank': 'True'}),
+ 'phone_desc': ('django.db.models.fields.CharField', [], {'max_length': '300', 'null': 'True', 'blank': 'True'}),
+ 'phone_desc2': ('django.db.models.fields.CharField', [], {'max_length': '300', 'null': 'True', 'blank': 'True'}),
+ 'phone_desc3': ('django.db.models.fields.CharField', [], {'max_length': '300', 'null': 'True', 'blank': 'True'}),
+ 'postal_code': ('django.db.models.fields.CharField', [], {'max_length': '10', 'null': 'True', 'blank': 'True'}),
+ 'raw_phone': ('django.db.models.fields.TextField', [], {'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'}),
+ 'alt_address': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'alt_address_complement': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'alt_address_is_prefered': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'alt_country': ('django.db.models.fields.CharField', [], {'max_length': '30', 'null': 'True', 'blank': 'True'}),
+ 'alt_postal_code': ('django.db.models.fields.CharField', [], {'max_length': '10', 'null': 'True', 'blank': 'True'}),
+ 'alt_town': ('django.db.models.fields.CharField', [], {'max_length': '70', 'null': 'True', 'blank': 'True'}),
+ 'archived': ('django.db.models.fields.NullBooleanField', [], {'default': 'False', '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']"}),
+ 'comment': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'contact_type': ('django.db.models.fields.CharField', [], {'max_length': '300', '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': '300', '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'}),
+ 'old_title': ('django.db.models.fields.CharField', [], {'max_length': '100', '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'}),
+ 'phone2': ('django.db.models.fields.CharField', [], {'max_length': '18', 'null': 'True', 'blank': 'True'}),
+ 'phone3': ('django.db.models.fields.CharField', [], {'max_length': '18', 'null': 'True', 'blank': 'True'}),
+ 'phone_desc': ('django.db.models.fields.CharField', [], {'max_length': '300', 'null': 'True', 'blank': 'True'}),
+ 'phone_desc2': ('django.db.models.fields.CharField', [], {'max_length': '300', 'null': 'True', 'blank': 'True'}),
+ 'phone_desc3': ('django.db.models.fields.CharField', [], {'max_length': '300', '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'}),
+ 'raw_phone': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'salutation': ('django.db.models.fields.CharField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
+ 'surname': ('django.db.models.fields.CharField', [], {'max_length': '50', 'null': 'True', 'blank': 'True'}),
+ 'title': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['ishtar_common.TitleType']", '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': {'ordering': "['label']", '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.spatialreferencesystem': {
+ 'Meta': {'ordering': "('label',)", 'object_name': 'SpatialReferenceSystem'},
+ 'auth_name': ('django.db.models.fields.CharField', [], {'default': "'EPSG'", 'max_length': '256'}),
+ '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': '10'}),
+ 'srid': ('django.db.models.fields.IntegerField', [], {}),
+ '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.titletype': {
+ 'Meta': {'ordering': "('label',)", 'object_name': 'TitleType'},
+ '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.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'}),
+ 'imports': ('django.db.models.fields.related.ManyToManyField', [], {'blank': 'True', 'related_name': "'imported_ishtar_common_town'", 'null': 'True', 'symmetrical': 'False', 'to': "orm['ishtar_common.Import']"}),
+ '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 83cb25d46..5095619e0 100644
--- a/ishtar_common/models.py
+++ b/ishtar_common/models.py
@@ -90,6 +90,44 @@ def post_save_user(sender, **kwargs):
post_save.connect(post_save_user, sender=User)
+def check_model_access_control(request, model, available_perms=None):
+ """
+ Check access control to a model for a specific request
+
+ :param request: the current request
+ :param model: the concerned model
+ :param available_perms: specific permissions to check if not specified
+ "view" and "view_own" will be checked
+ :return: (allowed, own) tuple
+ """
+ own = True # more restrictive by default
+ allowed = False
+ if not request.user.is_authenticated():
+ return allowed, own
+
+ if not available_perms:
+ available_perms = ['view_' + model.__name__.lower(),
+ 'view_own_' + model.__name__.lower()]
+ if request.user.ishtaruser.has_right('administrator',
+ session=request.session):
+ allowed = True
+ own = False
+ return allowed, own
+ for perm, lbl in model._meta.permissions:
+ if perm not in available_perms:
+ continue
+ cperm = model._meta.app_label + '.' + perm
+ if request.user.has_perm(cperm) \
+ or cperm in request.user.get_all_permissions() \
+ or request.user.ishtaruser.has_right(
+ perm, session=request.session):
+ allowed = True
+ if "_own_" not in perm:
+ own = False
+ break # max right reach
+ return allowed, own
+
+
class Imported(models.Model):
imports = models.ManyToManyField(
'Import', blank=True, null=True,
@@ -1112,6 +1150,8 @@ def get_external_id(key, item):
CURRENCY = ((u"€", _(u"Euro")),
(u"$", _(u"US dollar")))
+FIND_INDEX_SOURCE = ((u"O", _(u"Operations")),
+ (u"CR", _(u"Context records")))
class IshtarSiteProfile(models.Model, Cached):
@@ -1133,6 +1173,11 @@ class IshtarSiteProfile(models.Model, Cached):
default='rgba(210,200,0,0.2)', max_length=200)
find = models.BooleanField(_(u"Finds module"), default=False,
help_text=_(u"Need context records module"))
+ find_index = models.CharField(
+ _(u"Find index is based on"), default='O', max_length=2,
+ choices=FIND_INDEX_SOURCE,
+ help_text=_(u"To prevent irrelevant indexes, change this parameter "
+ u"only if there is no find in the database"))
find_color = models.CharField(
_(u"CSS color code for find module"),
default='rgba(210,0,0,0.15)', max_length=200)
@@ -1370,7 +1415,7 @@ class DashboardFormItem(object):
return q.distinct('pk').count()
-class Dashboard:
+class Dashboard(object):
def __init__(self, model, slice='year', date_source=None, show_detail=None,
fltr={}):
# don't provide date_source if it is not relevant
diff --git a/ishtar_common/static/media/style.css b/ishtar_common/static/media/style.css
index 056046e95..4e59b0f64 100644
--- a/ishtar_common/static/media/style.css
+++ b/ishtar_common/static/media/style.css
@@ -228,6 +228,10 @@ label:first-letter {
width: 370px;
}
+.form #login input[type="text"]{
+ width: auto;
+}
+
textarea{
height: 80px;
width: 370px;
diff --git a/ishtar_common/templates/ishtar/dashboards/dashboard_main_detail.html b/ishtar_common/templates/ishtar/dashboards/dashboard_main_detail.html
index fd92578a2..2650282ca 100644
--- a/ishtar_common/templates/ishtar/dashboards/dashboard_main_detail.html
+++ b/ishtar_common/templates/ishtar/dashboards/dashboard_main_detail.html
@@ -178,7 +178,7 @@ $('#search_{{unique_id}}').click(function (){
return false;
});
-{% if item_name == 'files' or item_name == "operations"%}
+{% if item_name == 'files' or item_name == "operations" or item_name == "treatments" or item_name == "treatmentfiles" %}
load_jquerydate_{{item_name}}_after();
load_jquerydate_{{item_name}}_before();
{% endif %}
diff --git a/ishtar_common/tests.py b/ishtar_common/tests.py
index 095056c2e..a91a0ba58 100644
--- a/ishtar_common/tests.py
+++ b/ishtar_common/tests.py
@@ -288,6 +288,17 @@ class CacheTest(TestCase):
self.assertFalse('testy' in types)
+class AccessControlTest(TestCase):
+ def test_administrator(self):
+ admin, created = models.PersonType.objects.get_or_create(
+ txt_idx='administrator', defaults={'label': 'Admin'})
+ user, created = User.objects.get_or_create(username='myusername')
+ user.is_superuser = True
+ user.save()
+ ishtar_user = models.IshtarUser.objects.get(username=user.username)
+ self.assertIn(admin, ishtar_user.person.person_types.all())
+
+
class AdminGenTypeTest(TestCase):
fixtures = [settings.ROOT_PATH +
'../fixtures/initial_data-auth-fr.json',
diff --git a/ishtar_common/views.py b/ishtar_common/views.py
index e8a2c9e12..f185576ea 100644
--- a/ishtar_common/views.py
+++ b/ishtar_common/views.py
@@ -63,6 +63,8 @@ from archaeological_finds.models import Find, Treatment, TreatmentFile, \
from archaeological_operations.forms import DashboardForm as DashboardFormOpe
from archaeological_files.forms import DashboardForm as DashboardFormFile
+from archaeological_finds.forms import DashboardTreatmentForm, \
+ DashboardTreatmentFileForm
from ishtar_common.forms import FinalForm, FinalDeleteForm
from ishtar_common.widgets import JQueryAutoComplete
@@ -584,47 +586,26 @@ def get_item(model, func_name, default_name, extra_request_keys=[],
"""
def func(request, data_type='json', full=False, force_own=False,
col_names=None, **dct):
- # check rights
- own = True # more restrictive by default
- allowed = False
+ available_perms = []
if specific_perms:
available_perms = specific_perms[:]
- else:
- available_perms = ['view_' + model.__name__.lower(),
- 'view_own_' + model.__name__.lower()]
EMPTY = ''
if 'type' in dct:
data_type = dct.pop('type')
if not data_type:
EMPTY = '[]'
data_type = 'json'
- if not request.user.is_authenticated():
+
+ allowed, own = models.check_model_access_control(request, model,
+ available_perms)
+ if not allowed:
return HttpResponse(EMPTY, mimetype='text/plain')
- if request.user.ishtaruser.has_right('administrator',
- session=request.session):
- allowed = True
- own = False
- else:
- for perm, lbl in model._meta.permissions:
- if perm not in available_perms:
- continue
- cperm = model._meta.app_label + '.' + perm
- if request.user.has_perm(cperm) \
- or cperm in request.user.get_all_permissions() \
- or request.user.ishtaruser.has_right(
- perm, session=request.session):
- allowed = True
- if "_own_" not in perm:
- own = False
- break # max right reach
if force_own:
own = True
if full == 'shortcut' and 'SHORTCUT_SEARCH' in request.session and \
request.session['SHORTCUT_SEARCH'] == 'own':
own = True
- if not allowed:
- return HttpResponse(EMPTY, mimetype='text/plain')
# get defaults from model
if not extra_request_keys and hasattr(model, 'EXTRA_REQUEST_KEYS'):
@@ -1211,10 +1192,18 @@ def display_item(model, extra_dct=None, show_url=None):
def show_item(model, name, extra_dct=None):
def func(request, pk, **dct):
+ allowed, own = models.check_model_access_control(request, model)
+ if not allowed:
+ return HttpResponse('', content_type="application/xhtml")
+ q = model.objects
+ if own:
+ query_own = model.get_query_owns(request.user)
+ if query_own:
+ q = q.filter(query_own)
try:
- item = model.objects.get(pk=pk)
+ item = q.get(pk=pk)
except ObjectDoesNotExist:
- return HttpResponse(None)
+ return HttpResponse('NOK')
doc_type = 'type' in dct and dct.pop('type')
url_name = u"/".join(reverse('show-' + name, args=['0', '']
).split('/')[:-2]) + u"/"
@@ -1458,7 +1447,11 @@ def dashboard_main(request, dct, obj_id=None, *args, **kwargs):
return render_to_response('ishtar/dashboards/dashboard_main.html', dct,
context_instance=RequestContext(request))
-DASHBOARD_FORMS = {'files': DashboardFormFile, 'operations': DashboardFormOpe}
+DASHBOARD_FORMS = {
+ 'files': DashboardFormFile, 'operations': DashboardFormOpe,
+ 'treatments': DashboardTreatmentForm,
+ 'treatmentfiles': DashboardTreatmentFileForm
+}
def dashboard_main_detail(request, item_name):
@@ -1473,8 +1466,11 @@ def dashboard_main_detail(request, item_name):
form = None
slicing, date_source, fltr, show_detail = 'year', None, {}, False
profile = models.get_current_profile()
- if (item_name == 'files' and profile.files) \
- or item_name == 'operations':
+ has_form = (item_name == 'files' and profile.files) \
+ or item_name == 'operations' \
+ or (item_name in ('treatmentfiles', 'treatments')
+ and profile.warehouse)
+ if has_form:
slicing = 'month'
if item_name in DASHBOARD_FORMS:
if request.method == 'POST':
@@ -1490,8 +1486,7 @@ def dashboard_main_detail(request, item_name):
form = DASHBOARD_FORMS[item_name]()
lbl, dashboard = None, None
dashboard_kwargs = {}
- if (item_name == 'files' and profile.files) \
- or item_name == 'operations':
+ if has_form:
dashboard_kwargs = {'slice': slicing, 'fltr': fltr,
'show_detail': show_detail}
# date_source is only relevant when the form has set one
@@ -1515,12 +1510,13 @@ def dashboard_main_detail(request, item_name):
elif item_name == 'treatmentfiles' and profile.warehouse:
lbl, dashboard = (
_(u"Treatment requests"),
- models.Dashboard(TreatmentFile, slice=slicing, fltr=fltr))
+ models.Dashboard(TreatmentFile, **dashboard_kwargs))
elif item_name == 'treatments' and profile.warehouse:
+ if 'date_source' not in dashboard_kwargs:
+ dashboard_kwargs['date_source'] = 'start'
lbl, dashboard = (
_(u"Treatments"),
- models.Dashboard(Treatment, slice=slicing, fltr=fltr,
- date_source='start'))
+ models.Dashboard(Treatment, **dashboard_kwargs))
if not lbl:
raise Http404
dct = {'lbl': lbl, 'dashboard': dashboard,
diff --git a/translations/de/ishtar_common.po b/translations/de/ishtar_common.po
index fd9aed80b..900a7339c 100644
--- a/translations/de/ishtar_common.po
+++ b/translations/de/ishtar_common.po
@@ -179,12 +179,12 @@ msgstr ""
msgid "Add a new item"
msgstr ""
-#: forms.py:297 models.py:1501
+#: forms.py:297 models.py:1556
msgid "Template"
msgstr ""
#: forms_common.py:41 forms_common.py:59 forms_common.py:184
-#: forms_common.py:408 models.py:1567 models.py:3030
+#: forms_common.py:408 models.py:1622 models.py:3085
#: templates/blocks/JQueryAdvancedTown.html:19
#: templates/ishtar/sheet_organization.html:13
msgid "Town"
@@ -200,8 +200,8 @@ msgid ""
"french town Saint-Denis in the Seine-Saint-Denis department.</p>"
msgstr ""
-#: forms_common.py:68 forms_common.py:863 ishtar_menu.py:47 models.py:2630
-#: models.py:2823 models.py:2885 templates/ishtar/sheet_person.html:4
+#: forms_common.py:68 forms_common.py:863 ishtar_menu.py:47 models.py:2685
+#: models.py:2878 models.py:2940 templates/ishtar/sheet_person.html:4
msgid "Person"
msgstr ""
@@ -212,64 +212,64 @@ msgid ""
msgstr ""
#: forms_common.py:172 forms_common.py:329 forms_common.py:453
-#: ishtar_menu.py:75 models.py:2513 models.py:2604
+#: ishtar_menu.py:75 models.py:2568 models.py:2659
#: templates/ishtar/sheet_organization.html:4
msgid "Organization"
msgstr ""
#: forms_common.py:175 forms_common.py:212 forms_common.py:324
-#: forms_common.py:378 forms_common.py:448 models.py:1109 models.py:1500
-#: models.py:1769 models.py:1785 models.py:2023 models.py:2301 models.py:2507
-#: models.py:2616 models.py:3016 templates/ishtar/import_list.html:13
+#: forms_common.py:378 forms_common.py:448 models.py:1159 models.py:1555
+#: models.py:1824 models.py:1840 models.py:2078 models.py:2356 models.py:2562
+#: models.py:2671 models.py:3071 templates/ishtar/import_list.html:13
#: templates/ishtar/sheet_organization.html:8
#: templates/ishtar/sheet_organization.html:21
msgid "Name"
msgstr "Name"
-#: forms_common.py:176 models.py:1722 models.py:2154
+#: forms_common.py:176 models.py:1777 models.py:2209
msgid "Organization type"
msgstr ""
-#: forms_common.py:178 forms_common.py:402 models.py:1562
+#: forms_common.py:178 forms_common.py:402 models.py:1617
#: templates/ishtar/sheet_organization.html:10
msgid "Address"
msgstr ""
-#: forms_common.py:180 forms_common.py:405 models.py:1563
+#: forms_common.py:180 forms_common.py:405 models.py:1618
#: templates/ishtar/sheet_organization.html:11
msgid "Address complement"
msgstr ""
-#: forms_common.py:182 forms_common.py:406 models.py:1565
+#: forms_common.py:182 forms_common.py:406 models.py:1620
#: templates/ishtar/sheet_organization.html:12
msgid "Postal code"
msgstr "Postleitzahl"
-#: forms_common.py:185 forms_common.py:409 models.py:1568
+#: forms_common.py:185 forms_common.py:409 models.py:1623
msgid "Country"
msgstr ""
#: forms_common.py:187 forms_common.py:326 forms_common.py:382
-#: forms_common.py:450 forms_common.py:574 models.py:1595
+#: forms_common.py:450 forms_common.py:574 models.py:1650
msgid "Email"
msgstr "E-Mail-Adresse"
-#: forms_common.py:188 forms_common.py:385 models.py:1580
+#: forms_common.py:188 forms_common.py:385 models.py:1635
#: templates/ishtar/sheet_organization.html:14
#: templates/ishtar/sheet_person.html:21
#: templates/ishtar/wizard/wizard_person.html:17
msgid "Phone"
msgstr ""
-#: forms_common.py:189 forms_common.py:394 models.py:1592
+#: forms_common.py:189 forms_common.py:394 models.py:1647
#: templates/ishtar/sheet_organization.html:15
#: templates/ishtar/sheet_person.html:39
#: templates/ishtar/wizard/wizard_person.html:35
msgid "Mobile phone"
msgstr ""
-#: forms_common.py:213 forms_common.py:327 forms_common.py:451 models.py:2192
-#: models.py:2509 models.py:2951 templates/sheet_ope.html:85
+#: forms_common.py:213 forms_common.py:327 forms_common.py:451 models.py:2247
+#: models.py:2564 models.py:3006 templates/sheet_ope.html:85
#: templates/sheet_ope.html.py:105 templates/sheet_ope.html:126
#: templates/ishtar/import_list.html:14
#: templates/ishtar/sheet_organization.html:23
@@ -277,7 +277,7 @@ msgstr ""
msgid "Type"
msgstr ""
-#: forms_common.py:222 views.py:147
+#: forms_common.py:222 views.py:149
msgid "Organization search"
msgstr ""
@@ -293,12 +293,12 @@ msgstr ""
msgid "Organization to merge"
msgstr ""
-#: forms_common.py:325 forms_common.py:376 forms_common.py:449 models.py:2614
+#: forms_common.py:325 forms_common.py:376 forms_common.py:449 models.py:2669
#: templates/ishtar/sheet_organization.html:22
msgid "Surname"
msgstr ""
-#: forms_common.py:341 forms_common.py:436 views.py:112
+#: forms_common.py:341 forms_common.py:436 views.py:114
msgid "Person search"
msgstr ""
@@ -311,25 +311,25 @@ msgstr ""
msgid "Identity"
msgstr ""
-#: forms_common.py:373 forms_common.py:781 forms_common.py:830 models.py:2155
-#: models.py:2608 models.py:2610 models.py:2948 templates/sheet_ope.html:104
+#: forms_common.py:373 forms_common.py:781 forms_common.py:830 models.py:2210
+#: models.py:2663 models.py:2665 models.py:3003 templates/sheet_ope.html:104
#: templates/ishtar/blocks/window_tables/documents.html:7
msgid "Title"
msgstr ""
-#: forms_common.py:374 models.py:2612
+#: forms_common.py:374 models.py:2667
msgid "Salutation"
msgstr ""
-#: forms_common.py:380 models.py:2618
+#: forms_common.py:380 models.py:2673
msgid "Raw name"
msgstr ""
-#: forms_common.py:383 models.py:1581
+#: forms_common.py:383 models.py:1636
msgid "Phone description"
msgstr ""
-#: forms_common.py:386 models.py:1583 models.py:1585
+#: forms_common.py:386 models.py:1638 models.py:1640
msgid "Phone description 2"
msgstr ""
@@ -337,11 +337,11 @@ msgstr ""
msgid "Phone 2"
msgstr ""
-#: forms_common.py:390 models.py:1589
+#: forms_common.py:390 models.py:1644
msgid "Phone description 3"
msgstr ""
-#: forms_common.py:392 models.py:1587
+#: forms_common.py:392 models.py:1642
msgid "Phone 3"
msgstr ""
@@ -349,23 +349,23 @@ msgstr ""
msgid "Current organization"
msgstr ""
-#: forms_common.py:411 models.py:1570
+#: forms_common.py:411 models.py:1625
msgid "Other address: address"
msgstr ""
-#: forms_common.py:414 models.py:1573
+#: forms_common.py:414 models.py:1628
msgid "Other address: address complement"
msgstr ""
-#: forms_common.py:416 models.py:1574
+#: forms_common.py:416 models.py:1629
msgid "Other address: postal code"
msgstr ""
-#: forms_common.py:418 models.py:1576
+#: forms_common.py:418 models.py:1631
msgid "Other address: town"
msgstr ""
-#: forms_common.py:420 models.py:1578
+#: forms_common.py:420 models.py:1633
msgid "Other address: country"
msgstr ""
@@ -381,7 +381,7 @@ msgstr "Benutzername"
msgid "Account search"
msgstr ""
-#: forms_common.py:512 forms_common.py:552 forms_common.py:556 models.py:2561
+#: forms_common.py:512 forms_common.py:552 forms_common.py:556 models.py:2616
msgid "Person type"
msgstr ""
@@ -413,7 +413,7 @@ msgstr ""
msgid "Send the new password by email?"
msgstr ""
-#: forms_common.py:636 forms_common.py:649 models.py:3031
+#: forms_common.py:636 forms_common.py:649 models.py:3086
msgid "Towns"
msgstr ""
@@ -429,7 +429,7 @@ msgstr ""
msgid "Documentation informations"
msgstr ""
-#: forms_common.py:783 forms_common.py:831 models.py:2156 models.py:2923
+#: forms_common.py:783 forms_common.py:831 models.py:2211 models.py:2978
msgid "Source type"
msgstr ""
@@ -441,37 +441,37 @@ msgstr ""
msgid "Internal reference"
msgstr ""
-#: forms_common.py:791 models.py:2962
+#: forms_common.py:791 models.py:3017
msgid "Numerical ressource (web address)"
msgstr ""
-#: forms_common.py:792 models.py:2964
+#: forms_common.py:792 models.py:3019
msgid "Receipt date"
msgstr ""
-#: forms_common.py:794 models.py:2327 models.py:2966
+#: forms_common.py:794 models.py:2382 models.py:3021
msgid "Creation date"
msgstr "Gründungsdatum"
-#: forms_common.py:797 models.py:2969
+#: forms_common.py:797 models.py:3024
msgid "Receipt date in documentation"
msgstr ""
-#: forms_common.py:799 forms_common.py:835 models.py:381 models.py:698
-#: models.py:2050 models.py:2622 models.py:2976
+#: forms_common.py:799 forms_common.py:835 models.py:419 models.py:746
+#: models.py:2105 models.py:2677 models.py:3031
msgid "Comment"
msgstr ""
-#: forms_common.py:801 forms_common.py:834 models.py:1111 models.py:1789
-#: models.py:1977 models.py:2024 models.py:2975 templates/sheet_ope.html:128
+#: forms_common.py:801 forms_common.py:834 models.py:1161 models.py:1844
+#: models.py:2032 models.py:2079 models.py:3030 templates/sheet_ope.html:128
msgid "Description"
msgstr "Beschreibung"
-#: forms_common.py:804 models.py:2977
+#: forms_common.py:804 models.py:3032
msgid "Additional information"
msgstr ""
-#: forms_common.py:806 forms_common.py:838 models.py:2979
+#: forms_common.py:806 forms_common.py:838 models.py:3034
msgid "Has a duplicate"
msgstr ""
@@ -486,7 +486,7 @@ msgid ""
"p>"
msgstr ""
-#: forms_common.py:827 forms_common.py:856 forms_common.py:890 models.py:2890
+#: forms_common.py:827 forms_common.py:856 forms_common.py:890 models.py:2945
#: templates/ishtar/wizard/wizard_person_deletion.html:124
msgid "Author"
msgstr ""
@@ -499,7 +499,7 @@ msgstr ""
msgid "Would you like to delete this documentation?"
msgstr ""
-#: forms_common.py:864 models.py:2157 models.py:2877 models.py:2887
+#: forms_common.py:864 models.py:2212 models.py:2932 models.py:2942
msgid "Author type"
msgstr ""
@@ -511,7 +511,7 @@ msgstr ""
msgid "There are identical authors."
msgstr ""
-#: forms_common.py:901 models.py:2891 models.py:2958
+#: forms_common.py:901 models.py:2946 models.py:3013
#: templates/sheet_ope.html:106
#: templates/ishtar/blocks/window_tables/documents.html:9
msgid "Authors"
@@ -529,7 +529,7 @@ msgstr ""
msgid "Deletion"
msgstr ""
-#: ishtar_menu.py:39 models.py:1283 views.py:1644
+#: ishtar_menu.py:39 models.py:1338 views.py:1640
msgid "Global variables"
msgstr ""
@@ -557,278 +557,296 @@ msgstr ""
msgid "Manual merge"
msgstr ""
-#: ishtar_menu.py:109 models.py:2335
+#: ishtar_menu.py:109 models.py:2390
msgid "Imports"
msgstr ""
-#: ishtar_menu.py:112 views.py:1652
+#: ishtar_menu.py:112 views.py:1648
msgid "New import"
msgstr ""
-#: ishtar_menu.py:116 views.py:1666
+#: ishtar_menu.py:116 views.py:1662
msgid "Current imports"
msgstr ""
-#: ishtar_menu.py:120 views.py:1705
+#: ishtar_menu.py:120 views.py:1701
msgid "Old imports"
msgstr ""
-#: models.py:186
+#: models.py:224
msgid "Not a valid item."
msgstr ""
-#: models.py:201
+#: models.py:239
msgid "A selected item is not a valid item."
msgstr ""
-#: models.py:212
+#: models.py:250
msgid "This item already exists."
msgstr ""
-#: models.py:377 models.py:697 models.py:1535 models.py:1547 models.py:1973
+#: models.py:415 models.py:745 models.py:1590 models.py:1602 models.py:2028
msgid "Label"
msgstr ""
-#: models.py:379
+#: models.py:417
msgid "Textual ID"
msgstr ""
-#: models.py:382 models.py:700 models.py:1504
+#: models.py:420 models.py:748 models.py:1559
msgid "Available"
msgstr ""
-#: models.py:724 models.py:2096
+#: models.py:772 models.py:2151
msgid "Key"
msgstr ""
-#: models.py:730
+#: models.py:778
msgid "Specific key to an import"
msgstr ""
-#: models.py:826
+#: models.py:874
msgid "Last editor"
msgstr ""
-#: models.py:829
+#: models.py:877
msgid "Creator"
msgstr ""
-#: models.py:971 models.py:2874 models.py:3042 models.py:3098
+#: models.py:1019 models.py:2929 models.py:3097 models.py:3153
msgid "Order"
msgstr ""
-#: models.py:972
+#: models.py:1020
msgid "Symmetrical"
msgstr ""
-#: models.py:973
+#: models.py:1021
msgid "Tiny label"
msgstr ""
-#: models.py:987
+#: models.py:1035
msgid "Cannot have symmetrical and an inverse_relation"
msgstr ""
-#: models.py:1103
+#: models.py:1151
msgid "Euro"
msgstr ""
-#: models.py:1104
+#: models.py:1152
msgid "US dollar"
msgstr ""
-#: models.py:1110 models.py:1787
+#: models.py:1153 views.py:1438 views.py:1500
+msgid "Operations"
+msgstr ""
+
+#: models.py:1154 views.py:1440 views.py:1504
+msgid "Context records"
+msgstr ""
+
+#: models.py:1160 models.py:1842
msgid "Slug"
msgstr ""
-#: models.py:1113
+#: models.py:1163
msgid "CSS color code for base module"
msgstr ""
-#: models.py:1115
+#: models.py:1165
msgid "Files module"
msgstr ""
-#: models.py:1117
+#: models.py:1167
msgid "CSS color code for files module"
msgstr ""
-#: models.py:1119
+#: models.py:1169
msgid "Context records module"
msgstr ""
-#: models.py:1122
+#: models.py:1172
msgid "CSS color code for context record module"
msgstr ""
-#: models.py:1124
+#: models.py:1174
msgid "Finds module"
msgstr ""
-#: models.py:1125
+#: models.py:1175
msgid "Need context records module"
msgstr ""
-#: models.py:1127
+#: models.py:1177
+msgid "Find index is based on"
+msgstr ""
+
+#: models.py:1179
+msgid ""
+"To prevent irrelevant indexes, change this parameter only if there is no "
+"find in the database"
+msgstr ""
+
+#: models.py:1182
msgid "CSS color code for find module"
msgstr ""
-#: models.py:1130
+#: models.py:1185
msgid "Warehouses module"
msgstr ""
-#: models.py:1131
+#: models.py:1186
msgid "Need finds module"
msgstr ""
-#: models.py:1133
+#: models.py:1188
msgid "CSS code for warehouse module"
msgstr ""
-#: models.py:1135
+#: models.py:1190
msgid "Mapping module"
msgstr ""
-#: models.py:1137
+#: models.py:1192
msgid "CSS code for mapping module"
msgstr ""
-#: models.py:1140
+#: models.py:1195
msgid "Home page"
msgstr ""
-#: models.py:1141
+#: models.py:1196
#, python-brace-format
msgid ""
"Homepage of Ishtar - if not defined a default homepage will appear. Use the "
"markdown syntax. {random_image} can be used to display a random image."
msgstr ""
-#: models.py:1145
+#: models.py:1200
msgid "File external id"
msgstr ""
-#: models.py:1147
+#: models.py:1202
msgid ""
"Formula to manage file external ID. Change this with care. With incorrect "
"formula, the application might be unusable and import of external data can "
"be destructive."
msgstr ""
-#: models.py:1152
+#: models.py:1207
msgid "Parcel external id"
msgstr ""
-#: models.py:1155
+#: models.py:1210
msgid ""
"Formula to manage parcel external ID. Change this with care. With incorrect "
"formula, the application might be unusable and import of external data can "
"be destructive."
msgstr ""
-#: models.py:1160
+#: models.py:1215
msgid "Context record external id"
msgstr ""
-#: models.py:1162
+#: models.py:1217
msgid ""
"Formula to manage context record external ID. Change this with care. With "
"incorrect formula, the application might be unusable and import of external "
"data can be destructive."
msgstr ""
-#: models.py:1167
+#: models.py:1222
msgid "Base find external id"
msgstr ""
-#: models.py:1169
+#: models.py:1224
msgid ""
"Formula to manage base find external ID. Change this with care. With "
"incorrect formula, the application might be unusable and import of external "
"data can be destructive."
msgstr ""
-#: models.py:1174
+#: models.py:1229
msgid "Find external id"
msgstr ""
-#: models.py:1176
+#: models.py:1231
msgid ""
"Formula to manage find external ID. Change this with care. With incorrect "
"formula, the application might be unusable and import of external data can "
"be destructive."
msgstr ""
-#: models.py:1181
+#: models.py:1236
msgid "Container external id"
msgstr ""
-#: models.py:1183
+#: models.py:1238
msgid ""
"Formula to manage container external ID. Change this with care. With "
"incorrect formula, the application might be unusable and import of external "
"data can be destructive."
msgstr ""
-#: models.py:1188
+#: models.py:1243
msgid "Warehouse external id"
msgstr ""
-#: models.py:1190
+#: models.py:1245
msgid ""
"Formula to manage warehouse external ID. Change this with care. With "
"incorrect formula, the application might be unusable and import of external "
"data can be destructive."
msgstr ""
-#: models.py:1195
+#: models.py:1250
msgid "Raw name for person"
msgstr ""
-#: models.py:1197
+#: models.py:1252
msgid ""
"Formula to manage person raw_name. Change this with care. With incorrect "
"formula, the application might be unusable and import of external data can "
"be destructive."
msgstr ""
-#: models.py:1201
+#: models.py:1256
msgid "Current active"
msgstr ""
-#: models.py:1202
+#: models.py:1257
msgid "Currency"
msgstr ""
-#: models.py:1206
+#: models.py:1261
msgid "Ishtar site profile"
msgstr ""
-#: models.py:1207
+#: models.py:1262
msgid "Ishtar site profiles"
msgstr ""
-#: models.py:1276
+#: models.py:1331
msgid "Variable name"
msgstr ""
-#: models.py:1277
+#: models.py:1332
msgid "Description of the variable"
msgstr ""
-#: models.py:1279 models.py:2097
+#: models.py:1334 models.py:2152
msgid "Value"
msgstr ""
-#: models.py:1282
+#: models.py:1337
msgid "Global variable"
msgstr ""
-#: models.py:1405 models.py:1435
+#: models.py:1460 models.py:1490
msgid "Total"
msgstr ""
-#: models.py:1412 models.py:1536 models.py:1548
+#: models.py:1467 models.py:1591 models.py:1603
#: templates/ishtar/sheet_person.html:24
#: templates/ishtar/dashboards/dashboard_main_detail.html:141
#: templates/ishtar/dashboards/dashboard_main_detail_users.html:26
@@ -836,663 +854,663 @@ msgstr ""
msgid "Number"
msgstr ""
-#: models.py:1499
+#: models.py:1554
msgid "Administrative Act"
msgstr ""
-#: models.py:1503
+#: models.py:1558
msgid "Associated object"
msgstr ""
-#: models.py:1507
+#: models.py:1562
msgid "Document template"
msgstr ""
-#: models.py:1508
+#: models.py:1563
msgid "Document templates"
msgstr ""
-#: models.py:1539 models.py:1549 models.py:2321
+#: models.py:1594 models.py:1604 models.py:2376
msgid "State"
msgstr ""
-#: models.py:1553 templates/blocks/JQueryAdvancedTown.html:12
+#: models.py:1608 templates/blocks/JQueryAdvancedTown.html:12
msgid "Department"
msgstr ""
-#: models.py:1554
+#: models.py:1609
msgid "Departments"
msgstr ""
-#: models.py:1591
+#: models.py:1646
msgid "Raw phone"
msgstr ""
-#: models.py:1597
+#: models.py:1652
msgid "Alternative address is prefered"
msgstr ""
-#: models.py:1636
+#: models.py:1691
msgid "Tel: "
msgstr ""
-#: models.py:1640
+#: models.py:1695
msgid "Mobile: "
msgstr ""
-#: models.py:1644
+#: models.py:1699
msgid "Email: "
msgstr "E-Mail-Adresse:"
-#: models.py:1649
+#: models.py:1704
msgid "Merge key"
msgstr ""
-#: models.py:1723
+#: models.py:1778
msgid "Organization types"
msgstr ""
-#: models.py:1770
+#: models.py:1825
msgid "Class name"
msgstr ""
-#: models.py:1773
+#: models.py:1828
msgid "Importer - Model"
msgstr ""
-#: models.py:1774
+#: models.py:1829
msgid "Importer - Models"
msgstr ""
-#: models.py:1791 templates/ishtar/dashboards/dashboard_main.html:34
+#: models.py:1846 templates/ishtar/dashboards/dashboard_main.html:34
msgid "Users"
msgstr ""
-#: models.py:1794
+#: models.py:1849
msgid "Associated model"
msgstr ""
-#: models.py:1797
+#: models.py:1852
msgid "Models that can accept new items"
msgstr ""
-#: models.py:1798
+#: models.py:1853
msgid "Leave blank for no restrictions"
msgstr ""
-#: models.py:1800
+#: models.py:1855
msgid "Is template"
msgstr ""
-#: models.py:1801
+#: models.py:1856
msgid "Unicity keys (separator \";\")"
msgstr ""
-#: models.py:1805
+#: models.py:1860
msgid "Importer - Type"
msgstr ""
-#: models.py:1806
+#: models.py:1861
msgid "Importer - Types"
msgstr ""
-#: models.py:1905
+#: models.py:1960
msgid "Importer - Default"
msgstr ""
-#: models.py:1906
+#: models.py:1961
msgid "Importer - Defaults"
msgstr ""
-#: models.py:1941
+#: models.py:1996
msgid "Importer - Default value"
msgstr ""
-#: models.py:1942
+#: models.py:1997
msgid "Importer - Default values"
msgstr ""
-#: models.py:1976
+#: models.py:2031
msgid "Column number"
msgstr ""
-#: models.py:1979
+#: models.py:2034
msgid "Required"
msgstr ""
-#: models.py:1981
+#: models.py:2036
msgid "Export field name"
msgstr ""
-#: models.py:1982
+#: models.py:2037
msgid ""
"Fill this field if the field name is ambiguous for export. For instance: "
"concatenated fields."
msgstr ""
-#: models.py:1987
+#: models.py:2042
msgid "Importer - Column"
msgstr ""
-#: models.py:1988
+#: models.py:2043
msgid "Importer - Columns"
msgstr ""
-#: models.py:2008
+#: models.py:2063
msgid "Field name"
msgstr ""
-#: models.py:2010 models.py:2044
+#: models.py:2065 models.py:2099
msgid "Force creation of new items"
msgstr ""
-#: models.py:2012 models.py:2046
+#: models.py:2067 models.py:2101
msgid "Concatenate with existing"
msgstr ""
-#: models.py:2014 models.py:2048
+#: models.py:2069 models.py:2103
msgid "Concatenate character"
msgstr ""
-#: models.py:2018
+#: models.py:2073
msgid "Importer - Duplicate field"
msgstr ""
-#: models.py:2019
+#: models.py:2074
msgid "Importer - Duplicate fields"
msgstr ""
-#: models.py:2026
+#: models.py:2081
msgid "Regular expression"
msgstr ""
-#: models.py:2029
+#: models.py:2084
msgid "Importer - Regular expression"
msgstr ""
-#: models.py:2030
+#: models.py:2085
msgid "Importer - Regular expressions"
msgstr ""
-#: models.py:2053
+#: models.py:2108
msgid "Importer - Target"
msgstr ""
-#: models.py:2054
+#: models.py:2109
msgid "Importer - Targets"
msgstr ""
-#: models.py:2078 views.py:568
+#: models.py:2133 views.py:570
msgid "True"
msgstr ""
-#: models.py:2079 views.py:570
+#: models.py:2134 views.py:572
msgid "False"
msgstr ""
-#: models.py:2098
+#: models.py:2153
msgid "Is set"
msgstr ""
-#: models.py:2105
+#: models.py:2160
msgid "Importer - Target key"
msgstr ""
-#: models.py:2106
+#: models.py:2161
msgid "Importer - Targets keys"
msgstr ""
-#: models.py:2158 models.py:2954
+#: models.py:2213 models.py:3009
msgid "Format"
msgstr ""
-#: models.py:2159 models.py:3046
+#: models.py:2214 models.py:3101
msgid "Operation type"
msgstr ""
-#: models.py:2160
+#: models.py:2215
msgid "Period"
msgstr ""
-#: models.py:2161
+#: models.py:2216
msgid "Report state"
msgstr ""
-#: models.py:2162
+#: models.py:2217
msgid "Remain type"
msgstr ""
-#: models.py:2163
+#: models.py:2218
msgid "Unit"
msgstr ""
-#: models.py:2165
+#: models.py:2220
msgid "Activity type"
msgstr ""
-#: models.py:2166
+#: models.py:2221
msgid "Material"
msgstr ""
-#: models.py:2168
+#: models.py:2223
msgid "Conservatory state"
msgstr ""
-#: models.py:2169
+#: models.py:2224
msgid "Container type"
msgstr ""
-#: models.py:2170
+#: models.py:2225
msgid "Preservation type"
msgstr ""
-#: models.py:2171
+#: models.py:2226
msgid "Object type"
msgstr ""
-#: models.py:2172
+#: models.py:2227
msgid "Integrity type"
msgstr ""
-#: models.py:2174
+#: models.py:2229
msgid "Remarkability type"
msgstr ""
-#: models.py:2175
+#: models.py:2230
msgid "Batch type"
msgstr ""
-#: models.py:2177
+#: models.py:2232
msgid "Identification type"
msgstr ""
-#: models.py:2179
+#: models.py:2234
msgid "Context record relation type"
msgstr ""
-#: models.py:2180 models.py:3104
+#: models.py:2235 models.py:3159
msgid "Spatial reference system"
msgstr ""
-#: models.py:2181 models.py:2932
+#: models.py:2236 models.py:2987
msgid "Support type"
msgstr ""
-#: models.py:2182 models.py:2573
+#: models.py:2237 models.py:2628
msgid "Title type"
msgstr ""
-#: models.py:2188
+#: models.py:2243
msgid "Integer"
msgstr ""
-#: models.py:2189
+#: models.py:2244
msgid "Float"
msgstr ""
-#: models.py:2190
+#: models.py:2245
msgid "String"
msgstr ""
-#: models.py:2191 templates/sheet_ope.html:86
+#: models.py:2246 templates/sheet_ope.html:86
msgid "Date"
msgstr ""
-#: models.py:2193 templates/sheet_ope.html:61 templates/sheet_ope.html.py:83
+#: models.py:2248 templates/sheet_ope.html:61 templates/sheet_ope.html.py:83
#: templates/ishtar/dashboards/dashboard_main_detail.html:126
msgid "Year"
msgstr ""
-#: models.py:2194
+#: models.py:2249
msgid "String to boolean"
msgstr ""
-#: models.py:2195
+#: models.py:2250
msgctxt "filesystem"
msgid "File"
msgstr ""
-#: models.py:2196
+#: models.py:2251
msgid "Unknow type"
msgstr ""
-#: models.py:2212
+#: models.py:2267
msgid "4 digit year. e.g.: \"2015\""
msgstr ""
-#: models.py:2213
+#: models.py:2268
msgid "4 digit year/month/day. e.g.: \"2015/02/04\""
msgstr ""
-#: models.py:2214
+#: models.py:2269
msgid "Day/month/4 digit year. e.g.: \"04/02/2015\""
msgstr ""
-#: models.py:2224
+#: models.py:2279
msgid "Options"
msgstr ""
-#: models.py:2226
+#: models.py:2281
msgid "Split character(s)"
msgstr ""
-#: models.py:2230
+#: models.py:2285
msgid "Importer - Formater type"
msgstr ""
-#: models.py:2231
+#: models.py:2286
msgid "Importer - Formater types"
msgstr ""
-#: models.py:2283 templates/ishtar/dashboards/dashboard_main_detail.html:63
+#: models.py:2338 templates/ishtar/dashboards/dashboard_main_detail.html:63
msgid "Created"
msgstr ""
-#: models.py:2284
+#: models.py:2339
msgid "Analyse in progress"
msgstr ""
-#: models.py:2285
+#: models.py:2340
msgid "Analysed"
msgstr ""
-#: models.py:2286
+#: models.py:2341
msgid "Import pending"
msgstr ""
-#: models.py:2287
+#: models.py:2342
msgid "Import in progress"
msgstr ""
-#: models.py:2288
+#: models.py:2343
msgid "Finished with errors"
msgstr ""
-#: models.py:2289
+#: models.py:2344
msgid "Finished"
msgstr ""
-#: models.py:2290
+#: models.py:2345
msgid "Archived"
msgstr ""
-#: models.py:2305
+#: models.py:2360
msgid "Imported file"
msgstr ""
-#: models.py:2307
+#: models.py:2362
msgid "Associated images (zip file)"
msgstr ""
-#: models.py:2309
+#: models.py:2364
msgid "Encoding"
msgstr ""
-#: models.py:2311
+#: models.py:2366
msgid "Skip lines"
msgstr ""
-#: models.py:2312 templates/ishtar/import_list.html:51
+#: models.py:2367 templates/ishtar/import_list.html:51
msgid "Error file"
msgstr ""
-#: models.py:2315
+#: models.py:2370
msgid "Result file"
msgstr ""
-#: models.py:2318 templates/ishtar/import_list.html:57
+#: models.py:2373 templates/ishtar/import_list.html:57
msgid "Match file"
msgstr ""
-#: models.py:2324
+#: models.py:2379
msgid "Conservative import"
msgstr ""
-#: models.py:2328
+#: models.py:2383
msgid "End date"
msgstr ""
-#: models.py:2331
+#: models.py:2386
msgid "Remaining seconds"
msgstr ""
-#: models.py:2334
+#: models.py:2389
msgid "Import"
msgstr ""
-#: models.py:2363
+#: models.py:2418
msgid "Analyse"
msgstr ""
-#: models.py:2365 models.py:2368
+#: models.py:2420 models.py:2423
msgid "Re-analyse"
msgstr ""
-#: models.py:2366
+#: models.py:2421
msgid "Launch import"
msgstr ""
-#: models.py:2369
+#: models.py:2424
msgid "Re-import"
msgstr ""
-#: models.py:2370
+#: models.py:2425
msgid "Archive"
msgstr ""
-#: models.py:2372
+#: models.py:2427
msgid "Unarchive"
msgstr ""
-#: models.py:2373 widgets.py:184 templates/ishtar/form_delete.html:11
+#: models.py:2428 widgets.py:184 templates/ishtar/form_delete.html:11
msgid "Delete"
msgstr ""
-#: models.py:2514
+#: models.py:2569
msgid "Organizations"
msgstr ""
-#: models.py:2516
+#: models.py:2571
msgid "Can view all Organizations"
msgstr ""
-#: models.py:2517
+#: models.py:2572
msgid "Can view own Organization"
msgstr ""
-#: models.py:2518
+#: models.py:2573
msgid "Can add own Organization"
msgstr ""
-#: models.py:2520
+#: models.py:2575
msgid "Can change own Organization"
msgstr ""
-#: models.py:2522
+#: models.py:2577
msgid "Can delete own Organization"
msgstr ""
-#: models.py:2557
+#: models.py:2612
msgid "Groups"
msgstr ""
-#: models.py:2562
+#: models.py:2617
msgid "Person types"
msgstr ""
-#: models.py:2574
+#: models.py:2629
msgid "Title types"
msgstr ""
-#: models.py:2583
+#: models.py:2638
msgid "Mr"
msgstr ""
-#: models.py:2584
+#: models.py:2639
msgid "Miss"
msgstr ""
-#: models.py:2585
+#: models.py:2640
msgid "Mr and Mrs"
msgstr ""
-#: models.py:2586
+#: models.py:2641
msgid "Mrs"
msgstr ""
-#: models.py:2587
+#: models.py:2642
msgid "Doctor"
msgstr ""
-#: models.py:2620
+#: models.py:2675
msgid "Contact type"
msgstr ""
-#: models.py:2623 models.py:2687
+#: models.py:2678 models.py:2742
msgid "Types"
msgstr ""
-#: models.py:2626
+#: models.py:2681
msgid "Is attached to"
msgstr ""
-#: models.py:2631
+#: models.py:2686
msgid "Persons"
msgstr ""
-#: models.py:2633
+#: models.py:2688
msgid "Can view all Persons"
msgstr ""
-#: models.py:2634
+#: models.py:2689
msgid "Can view own Person"
msgstr ""
-#: models.py:2635
+#: models.py:2690
msgid "Can add own Person"
msgstr ""
-#: models.py:2636
+#: models.py:2691
msgid "Can change own Person"
msgstr ""
-#: models.py:2637
+#: models.py:2692
msgid "Can delete own Person"
msgstr ""
-#: models.py:2826
+#: models.py:2881
msgid "Advanced shortcut menu"
msgstr ""
-#: models.py:2829
+#: models.py:2884
msgid "Ishtar user"
msgstr ""
-#: models.py:2830
+#: models.py:2885
msgid "Ishtar users"
msgstr ""
-#: models.py:2870
+#: models.py:2925
msgid "To modify the password use the form in Auth > User"
msgstr ""
-#: models.py:2878
+#: models.py:2933
msgid "Author types"
msgstr ""
-#: models.py:2895
+#: models.py:2950
msgid "Can view all Authors"
msgstr ""
-#: models.py:2897
+#: models.py:2952
msgid "Can view own Author"
msgstr ""
-#: models.py:2899
+#: models.py:2954
msgid "Can add own Author"
msgstr ""
-#: models.py:2901
+#: models.py:2956
msgid "Can change own Author"
msgstr ""
-#: models.py:2903
+#: models.py:2958
msgid "Can delete own Author"
msgstr ""
-#: models.py:2924
+#: models.py:2979
msgid "Source types"
msgstr ""
-#: models.py:2933
+#: models.py:2988
msgid "Support types"
msgstr ""
-#: models.py:2940
+#: models.py:2995
msgid "Format type"
msgstr ""
-#: models.py:2941
+#: models.py:2996
msgid "Format types"
msgstr ""
-#: models.py:2949
+#: models.py:3004
msgid "External ID"
msgstr ""
-#: models.py:2952
+#: models.py:3007
msgid "Support"
msgstr ""
-#: models.py:2956
+#: models.py:3011
msgid "Scale"
msgstr ""
-#: models.py:2970
+#: models.py:3025
msgid "Item number"
msgstr ""
-#: models.py:2971
+#: models.py:3026
msgid "Ref."
msgstr ""
-#: models.py:2974
+#: models.py:3029
msgid "Internal ref."
msgstr ""
-#: models.py:3017
+#: models.py:3072
msgid "Surface (m2)"
msgstr ""
-#: models.py:3018 templates/sheet_ope.html:46 templates/sheet_ope.html.py:107
+#: models.py:3073 templates/sheet_ope.html:46 templates/sheet_ope.html.py:107
msgid "Localisation"
msgstr "Lokalisierung"
-#: models.py:3043
+#: models.py:3098
msgid "Is preventive"
msgstr ""
-#: models.py:3047
+#: models.py:3102
msgid "Operation types"
msgstr ""
-#: models.py:3076
+#: models.py:3131
msgid "Preventive"
msgstr ""
-#: models.py:3077
+#: models.py:3132
msgid "Research"
msgstr ""
-#: models.py:3100
+#: models.py:3155
msgid "Authority name"
msgstr ""
-#: models.py:3101
+#: models.py:3156
msgid "Authority SRID"
msgstr ""
-#: models.py:3105
+#: models.py:3160
msgid "Spatial reference systems"
msgstr ""
@@ -1504,120 +1522,112 @@ msgstr ""
msgid "Load another random image?"
msgstr ""
-#: views.py:119
+#: views.py:121
msgid "New person"
msgstr ""
-#: views.py:127
+#: views.py:129
msgid "Person modification"
msgstr ""
-#: views.py:142
+#: views.py:144
msgid "Person deletion"
msgstr ""
-#: views.py:153
+#: views.py:155
msgid "New organization"
msgstr ""
-#: views.py:160
+#: views.py:162
msgid "Organization modification"
msgstr ""
-#: views.py:176
+#: views.py:178
msgid "Organization deletion"
msgstr ""
-#: views.py:183
+#: views.py:185
msgid "Account management"
msgstr ""
-#: views.py:189
+#: views.py:191
msgid "Account deletion"
msgstr ""
-#: views.py:251
+#: views.py:253
msgid "Archaeological file"
msgstr ""
-#: views.py:252
+#: views.py:254
msgid "Operation"
msgstr ""
-#: views.py:254
+#: views.py:256
msgid "Context record"
msgstr ""
-#: views.py:256
+#: views.py:258
msgid "Find"
msgstr ""
-#: views.py:258
+#: views.py:260
msgid "Treatment request"
msgstr ""
-#: views.py:259
+#: views.py:261
msgid "Treatment"
msgstr ""
-#: views.py:1387 views.py:1430
+#: views.py:1376 views.py:1419
msgid "Operation not permitted."
msgstr ""
-#: views.py:1389
+#: views.py:1378
#, python-format
msgid "New %s"
msgstr ""
-#: views.py:1448 views.py:1501
+#: views.py:1437 views.py:1496
msgid "Archaeological files"
msgstr ""
-#: views.py:1449 views.py:1505
-msgid "Operations"
-msgstr ""
-
-#: views.py:1451 views.py:1509
-msgid "Context records"
-msgstr ""
-
-#: views.py:1453 views.py:1512
+#: views.py:1442 views.py:1507
msgid "Finds"
msgstr ""
-#: views.py:1455 views.py:1517
+#: views.py:1444 views.py:1512
msgid "Treatment requests"
msgstr ""
-#: views.py:1456 views.py:1521
+#: views.py:1445 views.py:1518
msgid "Treatments"
msgstr ""
-#: views.py:1719 templates/ishtar/import_list.html:47
+#: views.py:1715 templates/ishtar/import_list.html:47
msgid "Link unmatched items"
msgstr ""
-#: views.py:1734
+#: views.py:1730
msgid "Delete import"
msgstr ""
-#: views.py:1773
+#: views.py:1769
msgid "Merge persons"
msgstr ""
-#: views.py:1797
+#: views.py:1793
msgid "Select the main person"
msgstr ""
-#: views.py:1806
+#: views.py:1802
msgid "Merge organization"
msgstr ""
-#: views.py:1816
+#: views.py:1812
msgid "Select the main organization"
msgstr ""
-#: views.py:1856 views.py:1872
+#: views.py:1852 views.py:1868
msgid "Corporation manager"
msgstr ""
diff --git a/translations/fr/archaeological_context_records.po b/translations/fr/archaeological_context_records.po
index ce2f9d82b..94c6923eb 100644
--- a/translations/fr/archaeological_context_records.po
+++ b/translations/fr/archaeological_context_records.po
@@ -17,11 +17,11 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=n>1;\n"
"X-Generator: Zanata 3.9.6\n"
-#: forms.py:47 forms.py:51 models.py:216 models.py:599 wizards.py:77
+#: forms.py:47 forms.py:51 models.py:217 models.py:600 wizards.py:77
msgid "Operation"
msgstr "Opération"
-#: forms.py:59 forms.py:141 models.py:218 models.py:567
+#: forms.py:59 forms.py:141 models.py:219 models.py:568
msgid "ID"
msgstr "Identifiant"
@@ -61,7 +61,7 @@ msgstr "Parcelle (section/numéro/domaine public)"
msgid "Search within relations"
msgstr "Rechercher parmi les relations"
-#: forms.py:111 forms.py:357 views.py:92
+#: forms.py:111 forms.py:358 views.py:92
msgid "Context record search"
msgstr "Rechercher une Unité d'Enregistrement"
@@ -73,48 +73,48 @@ msgstr "Vous devez sélectionner au moins une Unité d'Enregistrement."
msgid "General"
msgstr "Général"
-#: forms.py:140 models.py:181 models.py:214 models.py:569
+#: forms.py:140 models.py:181 models.py:215 models.py:570
msgid "Parcel"
msgstr "Parcelle"
-#: forms.py:143 models.py:219 models.py:570
+#: forms.py:143 models.py:220 models.py:571
#: templates/ishtar/sheet_contextrecord.html:30
msgid "Description"
msgstr "Description"
-#: forms.py:145 models.py:220
+#: forms.py:145 models.py:221
msgid "General comment"
msgstr "Commentaire général"
-#: forms.py:148 models.py:267
+#: forms.py:148 models.py:268
msgid "Excavation technique"
msgstr "Méthode de fouille"
-#: forms.py:149 models.py:224
+#: forms.py:149 models.py:225
msgid "Length (m)"
msgstr "Taille (m)"
-#: forms.py:150 models.py:225
+#: forms.py:150 models.py:226
msgid "Width (m)"
msgstr "Largeur (m)"
-#: forms.py:151 models.py:226
+#: forms.py:151 models.py:227
msgid "Thickness (m)"
msgstr "Épaisseur (m)"
-#: forms.py:152 models.py:228
+#: forms.py:152 models.py:229
msgid "Diameter (m)"
msgstr "Diamètre (m)"
-#: forms.py:153 models.py:229
+#: forms.py:153 models.py:230
msgid "Depth (m)"
msgstr "Profondeur (m)"
-#: forms.py:155 models.py:231
+#: forms.py:155 models.py:232
msgid "Depth of appearance (m)"
msgstr "Profondeur d'apparition"
-#: forms.py:156 forms.py:376 models.py:241 models.py:568
+#: forms.py:156 forms.py:377 models.py:242 models.py:569
msgid "Context record type"
msgstr "Type d'Unité d'Enregistrement"
@@ -122,7 +122,7 @@ msgstr "Type d'Unité d'Enregistrement"
msgid "Documentation"
msgstr "Documentation"
-#: forms.py:162 models.py:233
+#: forms.py:162 models.py:234
msgid "Location"
msgstr "Lieu"
@@ -151,7 +151,7 @@ msgstr "Datation"
msgid "Start date"
msgstr "Date de début"
-#: forms.py:256 models.py:58 models.py:223
+#: forms.py:256 models.py:58 models.py:224
msgid "End date"
msgstr "Date de fin"
@@ -163,88 +163,88 @@ msgstr "Qualité"
msgid "Dating type"
msgstr "Type de datation"
-#: forms.py:285 ishtar_menu.py:29 models.py:641
+#: forms.py:285 ishtar_menu.py:29 models.py:642
msgid "Context record"
msgstr "Unité d'Enregistrement"
-#: forms.py:306
+#: forms.py:307
msgid "Relations"
msgstr "Relations"
-#: forms.py:310 forms.py:318 models.py:244
+#: forms.py:311 forms.py:319 models.py:245
#: templates/ishtar/sheet_contextrecord.html:44
msgid "Interpretation"
msgstr "Interprétation"
-#: forms.py:314
+#: forms.py:315
msgid "Comments on dating"
msgstr "Commentaires sur la datation"
-#: forms.py:316 models.py:243
+#: forms.py:317 models.py:244
msgid "Filling"
msgstr "Remplissage"
-#: forms.py:320 models.py:264
+#: forms.py:321 models.py:265
msgid "Activity"
msgstr "Activité"
-#: forms.py:322 models.py:262
+#: forms.py:323 models.py:263
msgid "Identification"
msgstr "Identification"
-#: forms.py:324 models.py:247
+#: forms.py:325 models.py:248
msgid "TAQ"
msgstr "TAQ"
-#: forms.py:325 models.py:251
+#: forms.py:326 models.py:252
msgid "Estimated TAQ"
msgstr "TAQ estimé"
-#: forms.py:327 models.py:254
+#: forms.py:328 models.py:255
msgid "TPQ"
msgstr "TPQ"
-#: forms.py:328 models.py:258
+#: forms.py:329 models.py:259
msgid "Estimated TPQ"
msgstr "TPQ estimé"
-#: forms.py:343
+#: forms.py:344
msgid "Operation search"
msgstr "Rechercher une opération"
-#: forms.py:345
+#: forms.py:346
msgid "You should select an operation."
msgstr "Vous devez sélectionner une Opération."
-#: forms.py:350
+#: forms.py:351
msgid "Would you like to delete this context record?"
msgstr "Voulez-vous supprimer cette Unité d'Enregistrement ?"
-#: forms.py:359
+#: forms.py:360
msgid "You should select a context record."
msgstr "Vous devez sélectionner une Unité d'Enregistrement."
-#: forms.py:364
+#: forms.py:365
msgid "Year of the operation"
msgstr "Année de l'opération"
-#: forms.py:366
+#: forms.py:367
msgid "Numeric reference"
msgstr "Référence numérique"
-#: forms.py:372
+#: forms.py:373
msgid "Town of the operation"
msgstr "Commune de l'opération"
-#: forms.py:374
+#: forms.py:375
msgid "Period of the context record"
msgstr "Période de l'Unité d'Enregistrement"
-#: forms.py:389
+#: forms.py:390
msgid "Documentation search"
msgstr "Rechercher une documentation"
-#: forms.py:391
+#: forms.py:392
msgid "You should select a document."
msgstr "Vous devez sélectionner un document."
@@ -332,7 +332,7 @@ msgstr "Type de documentation"
msgid "Documentation types"
msgstr "Types de documentation"
-#: models.py:172 models.py:571
+#: models.py:172 models.py:572
msgid "Periods"
msgstr "Périodes"
@@ -356,27 +356,27 @@ msgstr "Parcelle (commune)"
msgid "Parcel (year)"
msgstr "Parcelle (année)"
-#: models.py:211
+#: models.py:212
msgid "External ID"
msgstr "ID externe"
-#: models.py:213
+#: models.py:214
msgid "External ID is set automatically"
msgstr "L'identifiant externe est configuré automatiquement"
-#: models.py:221
+#: models.py:222
msgid "Date d'ouverture"
msgstr "Date d'ouverture"
-#: models.py:234
+#: models.py:235
msgid "A short description of the location of the context record"
msgstr "Une courte description de la localisation de l'Unité d'Enregistrement"
-#: models.py:239
+#: models.py:240
msgid "Comment on datings"
msgstr "Commentaire sur les datations"
-#: models.py:248
+#: models.py:249
msgid ""
"\"Terminus Ante Quem\" the context record can't have been created after this "
"date"
@@ -384,11 +384,11 @@ msgstr ""
"« Terminus Ante Quem ». L'Unité d'Enregistrement ne peut avoir été créée "
"après cette date."
-#: models.py:252
+#: models.py:253
msgid "Estimation of a \"Terminus Ante Quem\""
msgstr "Estimation d'un « Terminus Ante Quem »."
-#: models.py:255
+#: models.py:256
msgid ""
"\"Terminus Post Quem\" the context record can't have been created before "
"this date"
@@ -396,136 +396,136 @@ msgstr ""
"« Terminus Post Quem ». L'Unité d'Enregistrement ne peut avoir été créée "
"avant cette date."
-#: models.py:259
+#: models.py:260
msgid "Estimation of a \"Terminus Post Quem\""
msgstr "Estimation d'un « Terminus Post Quem »."
-#: models.py:270
+#: models.py:271
msgid "Point"
msgstr "Point"
-#: models.py:271
+#: models.py:272
msgid "Polygon"
msgstr "Polygone"
-#: models.py:272
+#: models.py:273
msgid "Cached name"
msgstr "Nom en cache"
-#: models.py:276 models.py:277 templates/ishtar/sheet_contextrecord.html:4
+#: models.py:277 models.py:278 templates/ishtar/sheet_contextrecord.html:4
msgid "Context Record"
msgstr "Unité d'Enregistrement"
-#: models.py:279
+#: models.py:280
msgid "Can view all Context Records"
msgstr "Peut voir toutes les Unités d'Enregistrement"
-#: models.py:281
+#: models.py:282
msgid "Can view own Context Record"
msgstr "Peut voir sa propre Unité d'Enregistrement"
-#: models.py:283
+#: models.py:284
msgid "Can add own Context Record"
msgstr "Peut ajouter sa propre Unité d'Enregistrement"
-#: models.py:285
+#: models.py:286
msgid "Can change own Context Record"
msgstr "Peut modifier sa propre Unité d'Enregistrement"
-#: models.py:287
+#: models.py:288
msgid "Can delete own Context Record"
msgstr "Peut supprimer sa propre Unité d'Enregistrement"
-#: models.py:297
+#: models.py:298
msgctxt "short"
msgid "Context record"
msgstr "UE"
-#: models.py:501
+#: models.py:502
msgid "Inverse relation"
msgstr "Relation inverse"
-#: models.py:505 models.py:528 models.py:566
+#: models.py:506 models.py:529 models.py:567
msgid "Relation type"
msgstr "Type de relation"
-#: models.py:506
+#: models.py:507
msgid "Relation types"
msgstr "Types de relation"
-#: models.py:523
+#: models.py:524
msgid "ID (left)"
msgstr "ID (gauche)"
-#: models.py:524
+#: models.py:525
msgid "Context record type (left)"
msgstr "Type d'UE (gauche)"
-#: models.py:525
+#: models.py:526
msgid "Parcel (left)"
msgstr "Parcelle (gauche)"
-#: models.py:526
+#: models.py:527
msgid "Description (left)"
msgstr "Description (gauche)"
-#: models.py:527
+#: models.py:528
msgid "Periods (left)"
msgstr "Périodes (gauche)"
-#: models.py:529
+#: models.py:530
msgid "ID (right)"
msgstr "ID (droit)"
-#: models.py:530
+#: models.py:531
msgid "Context record type (right)"
msgstr "Type d'UE (droite)"
-#: models.py:531
+#: models.py:532
msgid "Parcel (right)"
msgstr "Parcelle (droite)"
-#: models.py:532
+#: models.py:533
msgid "Description (right)"
msgstr "Description (droite)"
-#: models.py:533
+#: models.py:534
msgid "Periods (right)"
msgstr "Périodes (droite)"
-#: models.py:542
+#: models.py:543
msgid "Record relation"
msgstr "Relation entre Unités d'Enregistrement"
-#: models.py:543
+#: models.py:544
msgid "Record relations"
msgstr "Relations entre Unités d'Enregistrement"
-#: models.py:626
+#: models.py:627
msgid "Context record documentation"
msgstr "Documentation d'une Unité d'Enregistrement"
-#: models.py:627
+#: models.py:628
msgid "Context record documentations"
msgstr "Documentations des Unités d'Enregistrement"
-#: models.py:630
+#: models.py:631
msgid "Can view all Context record sources"
msgstr "Peut voir toutes les Documentations d'unité d'enregistrement"
-#: models.py:632
+#: models.py:633
msgid "Can view own Context record source"
msgstr "Peut voir sa propre Documentation d'unité d'enregistrement"
-#: models.py:634
+#: models.py:635
msgid "Can add own Context record source"
msgstr "Peut ajouter sa propre Documentation d'unité d'enregistrement"
-#: models.py:636
+#: models.py:637
msgid "Can change own Context record source"
msgstr "Peut modifier sa propre Documentation d'unité d'enregistrement"
-#: models.py:638
+#: models.py:639
msgid "Can delete own Context record source"
msgstr "Peut supprimer sa propre Documentation d'unité d'enregistrement"
diff --git a/translations/fr/archaeological_finds.po b/translations/fr/archaeological_finds.po
index ce006623e..6b2e9b5ff 100644
--- a/translations/fr/archaeological_finds.po
+++ b/translations/fr/archaeological_finds.po
@@ -11,168 +11,168 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Transfer-Encoding: 8bit\n"
"Content-Type: text/plain; charset=UTF-8\n"
-"PO-Revision-Date: 2017-04-07 06:33-0400\n"
-"Last-Translator: Valérie-Emma Leroux <emma@iggdrasil.net>\n"
+"PO-Revision-Date: 2017-05-16 04:46-0400\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.9.6\n"
-#: forms.py:93 forms.py:97 models_finds.py:519 wizards.py:64
+#: forms.py:95 forms.py:99 forms.py:365 models_finds.py:538 wizards.py:64
msgid "Context record"
msgstr "Unité d'Enregistrement"
-#: forms.py:126 ishtar_menu.py:32 models_finds.py:683 models_finds.py:1114
-#: models_finds.py:1135 models_treatments.py:298
+#: forms.py:128 ishtar_menu.py:32 models_finds.py:705 models_finds.py:1160
+#: models_finds.py:1181 models_treatments.py:298
#: templates/ishtar/sheet_find.html:5
msgid "Find"
msgstr "Mobilier"
-#: forms.py:140 forms.py:337 forms.py:605 models_finds.py:150
-#: models_finds.py:613
+#: forms.py:142 forms.py:347 forms.py:629 models_finds.py:151
+#: models_finds.py:635
msgid "Free ID"
msgstr "ID libre"
-#: forms.py:142 models_finds.py:666
+#: forms.py:144 models_finds.py:688
msgid "Previous ID"
msgstr "Identifiant précédent"
-#: forms.py:143 forms.py:368 forms_treatments.py:134 models_finds.py:154
-#: models_finds.py:614 models_treatments.py:128
+#: forms.py:145 forms.py:387 forms_treatments.py:134 models_finds.py:155
+#: models_finds.py:636 models_treatments.py:128
msgid "Description"
msgstr "Description"
-#: forms.py:146 forms.py:370 models_finds.py:163
+#: forms.py:148 forms.py:389 models_finds.py:164
msgid "Batch/object"
msgstr "Lot/objet"
-#: forms.py:148 models_finds.py:643
+#: forms.py:150 models_finds.py:665
msgid "Is complete?"
msgstr "Est complet ?"
-#: forms.py:151 forms.py:358 forms.py:609 models_finds.py:50
+#: forms.py:153 forms.py:377 forms.py:633 models_finds.py:51
msgid "Material type"
msgstr "Type de matériau"
-#: forms.py:154 forms.py:362 models_finds.py:62 models_finds.py:618
+#: forms.py:155 forms.py:381 models_finds.py:63 models_finds.py:640
msgid "Conservatory state"
msgstr "État sanitaire"
-#: forms.py:157 models_finds.py:620
+#: forms.py:158 models_finds.py:642
msgid "Conservatory comment"
msgstr "Commentaire relatif à la conservation"
-#: forms.py:160 models_finds.py:112 models_finds.py:646
+#: forms.py:161 models_finds.py:113 models_finds.py:668
msgid "Object types"
msgstr "Types d'objet"
-#: forms.py:164 forms.py:361 models_finds.py:71
+#: forms.py:164 forms.py:380 models_finds.py:72
msgid "Preservation type"
msgstr "Type de conservation"
-#: forms.py:167 forms.py:364 models_finds.py:648
+#: forms.py:167 forms.py:383 models_finds.py:670
msgid "Integrity / interest"
msgstr "Intégrité / intérêt"
-#: forms.py:170 forms.py:366 models_finds.py:651
+#: forms.py:170 forms.py:385 models_finds.py:673
msgid "Remarkability"
msgstr "Remarquabilité"
-#: forms.py:173 models_finds.py:168
+#: forms.py:173 models_finds.py:169
msgid "Point of topographic reference"
msgstr "Point de référence topographique"
-#: forms.py:176 models_finds.py:170 templates/ishtar/sheet_find.html:205
+#: forms.py:176 models_finds.py:171 templates/ishtar/sheet_find.html:209
msgid "X"
msgstr "X"
-#: forms.py:177 models_finds.py:171 templates/ishtar/sheet_find.html:206
+#: forms.py:177 models_finds.py:172 templates/ishtar/sheet_find.html:210
msgid "Y"
msgstr "Y"
-#: forms.py:178 models_finds.py:172 templates/ishtar/sheet_find.html:207
+#: forms.py:178 models_finds.py:173 templates/ishtar/sheet_find.html:211
msgid "Z"
msgstr "Z"
-#: forms.py:180 models_finds.py:180
+#: forms.py:180 models_finds.py:181
msgid "Spatial Reference System"
msgstr "Système de référence spatiale"
-#: forms.py:183 models_finds.py:173
+#: forms.py:183 models_finds.py:174
msgid "Estimated error for X"
msgstr "Erreur estimée pour X"
-#: forms.py:185 models_finds.py:175
+#: forms.py:185 models_finds.py:176
msgid "Estimated error for Y"
msgstr "Erreur estimée pour Y"
-#: forms.py:187 models_finds.py:177
+#: forms.py:187 models_finds.py:178
msgid "Estimated error for Z"
msgstr "Erreur estimée pour Z"
-#: forms.py:188 models_finds.py:655
+#: forms.py:188 models_finds.py:677
msgid "Length (cm)"
msgstr "Longueur (cm)"
-#: forms.py:189 models_finds.py:656
+#: forms.py:189 models_finds.py:678
msgid "Width (cm)"
msgstr "Largeur (cm)"
-#: forms.py:190 models_finds.py:657
+#: forms.py:190 models_finds.py:679
msgid "Height (cm)"
msgstr "Hauteur (cm)"
-#: forms.py:191 models_finds.py:658
+#: forms.py:191 models_finds.py:680
msgid "Diameter (cm)"
msgstr "Diamètre (cm)"
-#: forms.py:192 models_finds.py:659
+#: forms.py:192 models_finds.py:681
msgid "Thickness (cm)"
msgstr "Épaisseur (cm)"
-#: forms.py:193 forms.py:610 models_finds.py:625
+#: forms.py:193 forms.py:634 models_finds.py:647
msgid "Volume (l)"
msgstr "Volume (l)"
-#: forms.py:194 forms.py:611 models_finds.py:626
+#: forms.py:194 forms.py:635 models_finds.py:648
msgid "Weight (g)"
msgstr "Poids (g)"
-#: forms.py:196 models_finds.py:660
+#: forms.py:196 models_finds.py:682
msgid "Dimensions comment"
msgstr "Commentaire concernant les dimensions"
-#: forms.py:197 forms.py:612 models_finds.py:629
+#: forms.py:197 forms.py:636 models_finds.py:651
msgid "Find number"
msgstr "Mobilier (en nombre)"
-#: forms.py:199 models_finds.py:654
+#: forms.py:199 models_finds.py:676
msgid "Minimum number of individuals (MNI)"
msgstr "Nombre minimum d'individus (NMI)"
-#: forms.py:200 models_finds.py:662
+#: forms.py:200 models_finds.py:684
msgid "Mark"
msgstr "Marque"
-#: forms.py:201 forms.py:371 models_finds.py:668
+#: forms.py:201 forms.py:390 models_finds.py:690
msgid "Check"
msgstr "Vérification"
-#: forms.py:203 models_finds.py:670
+#: forms.py:203 models_finds.py:692
msgid "Check date"
msgstr "Date de vérification"
-#: forms.py:204 forms_treatments.py:132 forms_treatments.py:434
-#: models_finds.py:155 models_finds.py:663 models_treatments.py:127
+#: forms.py:204 forms_treatments.py:136 forms_treatments.py:479
+#: models_finds.py:156 models_finds.py:685 models_treatments.py:127
#: models_treatments.py:511
msgid "Comment"
msgstr "Commentaires"
-#: forms.py:207 models_finds.py:664
+#: forms.py:207 models_finds.py:686
msgid "Comment on dating"
msgstr "Commentaire général sur les datations"
-#: forms.py:208 models_finds.py:672
+#: forms.py:208 models_finds.py:694
msgid "Estimated value"
msgstr "Valeur estimée"
@@ -189,187 +189,192 @@ msgstr ""
"<p>Les images trop grandes sont retaillées en : %(width)dx%(height)d (le "
"ratio est conservé).</p>"
-#: forms.py:285
+#: forms.py:295
msgid ""
"You should at least provide X, Y and the spatial reference system used."
msgstr ""
"Vous devez au minimum fournir X, Y et le système de référence spatiale "
"utilisé."
-#: forms.py:294
+#: forms.py:304
msgid ""
"Coordinates are not relevant for the spatial reference system used: {}."
msgstr ""
"Les coordonnées ne sont pas pertinentes pour le système de référence "
"spatiale utilisé : {}."
-#: forms.py:300 forms.py:331 models_finds.py:637
+#: forms.py:310 forms.py:341 models_finds.py:659
msgid "Dating"
msgstr "Datation"
-#: forms.py:305 forms.py:357
+#: forms.py:315 forms.py:376
msgid "Period"
msgstr "Période"
-#: forms.py:306 forms_treatments.py:138 forms_treatments.py:436
-#: models_finds.py:1140 models_treatments.py:130 models_treatments.py:309
-#: templates/ishtar/sheet_find.html:91 templates/ishtar/sheet_find.html:133
+#: forms.py:316 forms_treatments.py:138 forms_treatments.py:283
+#: forms_treatments.py:481 models_finds.py:1186 models_treatments.py:130
+#: models_treatments.py:309 templates/ishtar/sheet_find.html:95
+#: templates/ishtar/sheet_find.html:137
msgid "Start date"
msgstr "Date de début"
-#: forms.py:308 models_finds.py:1141 models_treatments.py:310
-#: templates/ishtar/sheet_find.html:92 templates/ishtar/sheet_find.html:134
+#: forms.py:318 models_finds.py:1187 models_treatments.py:310
+#: templates/ishtar/sheet_find.html:96 templates/ishtar/sheet_find.html:138
msgid "End date"
msgstr "Date de fin"
-#: forms.py:309
+#: forms.py:319
msgid "Quality"
msgstr "Qualité"
-#: forms.py:311
+#: forms.py:321
msgid "Dating type"
msgstr "Type de datation"
-#: forms.py:313
+#: forms.py:323
msgid "Precise dating"
msgstr "Datation précise"
-#: forms.py:335 models_finds.py:187
+#: forms.py:345 models_finds.py:188
msgid "Short ID"
msgstr "ID court"
-#: forms.py:336 models_finds.py:190
+#: forms.py:346 models_finds.py:191
msgid "Complete ID"
msgstr "ID complet"
-#: forms.py:340 forms_treatments.py:54 forms_treatments.py:96
-#: forms_treatments.py:284 forms_treatments.py:356 forms_treatments.py:406
-#: forms_treatments.py:489 models_treatments.py:103 models_treatments.py:483
+#: forms.py:350 forms_treatments.py:54 forms_treatments.py:96
+#: forms_treatments.py:329 forms_treatments.py:401 forms_treatments.py:451
+#: forms_treatments.py:579 models_treatments.py:103 models_treatments.py:483
msgid "Year"
msgstr "Année"
-#: forms.py:342
+#: forms.py:352
msgid "Operation's number (index by year)"
msgstr "Numéro de l'opération (index par année)"
-#: forms.py:345
+#: forms.py:355
msgid "Code PATRIARCHE"
msgstr "Code PATRIARCHE"
-#: forms.py:349
+#: forms.py:359
msgid "Archaeological site"
msgstr "Entité archéologique"
-#: forms.py:355
+#: forms.py:371
msgid "Search within related operations"
msgstr "Rechercher parmi les opérations liées"
-#: forms.py:359 models_finds.py:111
+#: forms.py:374
+msgid "Search within related context records"
+msgstr "Recherche parmi les Unités d'Enregistrement associées"
+
+#: forms.py:378 models_finds.py:112
msgid "Object type"
msgstr "Type d'objet"
-#: forms.py:372 forms_treatments.py:57
+#: forms.py:391 forms_treatments.py:57
msgid "Has an image?"
msgstr "Dispose d'une image ?"
-#: forms.py:421
+#: forms.py:445
msgid "Warehouse (location)"
msgstr "Dépôt (lieu)"
-#: forms.py:427
+#: forms.py:451
msgid "Warehouse (responsible)"
msgstr "Dépôt (responsable)"
-#: forms.py:432
+#: forms.py:456
msgid "Container ID"
msgstr "Identifiant du contenant"
-#: forms.py:433
+#: forms.py:457
msgid "Container ref."
msgstr "Réf. contenant"
-#: forms.py:437 forms.py:460 views.py:149
+#: forms.py:461 forms.py:484 views.py:149
msgid "Find search"
msgstr "Rechercher un mobilier"
-#: forms.py:485 templates/ishtar/sheet_treatment.html:46
+#: forms.py:509 templates/ishtar/sheet_treatment.html:46
msgid "Upstream finds"
msgstr "Mobilier amont"
-#: forms.py:487 models_finds.py:684
+#: forms.py:511 models_finds.py:706
msgid "Finds"
msgstr "Mobilier"
-#: forms.py:499
+#: forms.py:523
msgid "You should at least select one archaeological find."
msgstr "Vous devez sélectionner au moins un mobilier archéologique."
-#: forms.py:602
+#: forms.py:626
msgid "Resulting find"
msgstr "Mobilier résultant"
-#: forms.py:607
+#: forms.py:631
msgid "Precise description"
msgstr "Description précise"
-#: forms.py:622
+#: forms.py:646
msgid "Resulting finds"
msgstr "Mobiliers résultants"
-#: forms.py:627
+#: forms.py:651
msgid "Would you like to delete this find?"
msgstr "Voulez-vous supprimer ce mobilier ?"
-#: forms.py:631 models_treatments.py:91
+#: forms.py:655 models_treatments.py:91
msgid "Upstream find"
msgstr "Mobilier amont"
-#: forms.py:644
+#: forms.py:668
msgid "Archaeological find search"
msgstr "Rechercher un mobilier"
-#: forms.py:646
+#: forms.py:670
msgid "You should select an archaeological find."
msgstr "Vous devez sélectionner du mobilier."
-#: forms.py:651
+#: forms.py:675
msgid "Year of the operation"
msgstr "Année de l'opération"
-#: forms.py:653
+#: forms.py:677
msgid "Numeric reference"
msgstr "Référence numérique"
-#: forms.py:660
+#: forms.py:684
msgid "Period of the archaeological find"
msgstr "Période du mobilier"
-#: forms.py:662
+#: forms.py:686
msgid "Material type of the archaeological find"
msgstr "Type de matériau du mobilier"
-#: forms.py:664
+#: forms.py:688
msgid "Description of the archaeological find"
msgstr "Description du mobilier"
-#: forms.py:676 forms_treatments.py:590 forms_treatments.py:616
+#: forms.py:700 forms_treatments.py:680 forms_treatments.py:706
msgid "Documentation search"
msgstr "Rechercher une documentation"
-#: forms.py:678 forms_treatments.py:592 forms_treatments.py:618
+#: forms.py:702 forms_treatments.py:682 forms_treatments.py:708
msgid "You should select a document."
msgstr "Vous devez sélectionner un document."
-#: forms.py:695
+#: forms.py:719
msgid "Another basket already exists with this name."
msgstr "Un autre panier existant utilise déjà ce nom."
-#: forms.py:705 forms.py:709 forms_treatments.py:175 ishtar_menu.py:57
+#: forms.py:729 forms.py:733 forms_treatments.py:175 ishtar_menu.py:57
msgid "Basket"
msgstr "Panier"
#: forms_treatments.py:52 forms_treatments.py:92 models_treatments.py:99
-#: templates/ishtar/sheet_find.html:85 templates/ishtar/sheet_find.html:127
+#: templates/ishtar/sheet_find.html:89 templates/ishtar/sheet_find.html:131
msgid "Label"
msgstr "Intitulé"
@@ -377,20 +382,20 @@ msgstr "Intitulé"
msgid "Other ref."
msgstr "Autre réf."
-#: forms_treatments.py:55 forms_treatments.py:237 forms_treatments.py:285
-#: forms_treatments.py:348 forms_treatments.py:357 forms_treatments.py:459
-#: forms_treatments.py:490 forms_treatments.py:557 models_treatments.py:105
+#: forms_treatments.py:55 forms_treatments.py:237 forms_treatments.py:330
+#: forms_treatments.py:393 forms_treatments.py:402 forms_treatments.py:504
+#: forms_treatments.py:580 forms_treatments.py:647 models_treatments.py:105
#: models_treatments.py:485
msgid "Index"
msgstr "Index"
-#: forms_treatments.py:56 forms_treatments.py:101 forms_treatments.py:301
-#: forms_treatments.py:578 models_treatments.py:56 models_treatments.py:110
-#: models_treatments.py:308
+#: forms_treatments.py:56 forms_treatments.py:101 forms_treatments.py:291
+#: forms_treatments.py:346 forms_treatments.py:668 models_treatments.py:56
+#: models_treatments.py:110 models_treatments.py:308
msgid "Treatment type"
msgstr "Type de traitement"
-#: forms_treatments.py:68 forms_treatments.py:560 views.py:398
+#: forms_treatments.py:68 forms_treatments.py:650 views.py:398
msgid "Treatment search"
msgstr "Rechercher un traitement"
@@ -399,7 +404,7 @@ msgid "Base treatment"
msgstr "Traitement de base"
#: forms_treatments.py:103 models_treatments.py:93 models_treatments.py:112
-#: templates/ishtar/sheet_find.html:87 templates/ishtar/sheet_find.html:129
+#: templates/ishtar/sheet_find.html:91 templates/ishtar/sheet_find.html:133
msgid "State"
msgstr "État"
@@ -407,7 +412,7 @@ msgstr "État"
msgid "Target"
msgstr "Destination"
-#: forms_treatments.py:107 forms_treatments.py:417 models_treatments.py:120
+#: forms_treatments.py:107 forms_treatments.py:462 models_treatments.py:120
msgid "Responsible"
msgstr "Responsable"
@@ -423,16 +428,16 @@ msgstr "Lieu"
msgid "Container (relevant for packaging)"
msgstr "Contenant (pertinent dans le cadre du conditionnement)"
-#: forms_treatments.py:131 forms_treatments.py:413
+#: forms_treatments.py:131 forms_treatments.py:458
msgid "External ref."
msgstr "Réf. externe"
-#: forms_treatments.py:136 models_treatments.py:129
+#: forms_treatments.py:132 models_treatments.py:129
msgid "Goal"
msgstr "But"
-#: forms_treatments.py:140 forms_treatments.py:442 models_treatments.py:131
-#: models_treatments.py:505
+#: forms_treatments.py:140 forms_treatments.py:283 forms_treatments.py:487
+#: forms_treatments.py:535 models_treatments.py:131 models_treatments.py:505
msgid "Closing date"
msgstr "Date de clôture"
@@ -477,21 +482,21 @@ msgstr ""
msgid "A responsible or an organization must be defined."
msgstr "Un responsable ou une organisation doit être défini."
-#: forms_treatments.py:256
+#: forms_treatments.py:257
msgid "Another treatment with this index exists for {}."
msgstr "Un autre traitement avec cet index existe pour {}."
-#: forms_treatments.py:262 models_treatments.py:108
+#: forms_treatments.py:263 models_treatments.py:108
msgid "Associated request"
msgstr "Demande associée"
-#: forms_treatments.py:266 forms_treatments.py:397 ishtar_menu.py:108
+#: forms_treatments.py:267 forms_treatments.py:442 ishtar_menu.py:108
#: models_treatments.py:516 models_treatments.py:544 models_treatments.py:619
#: wizards.py:187 templates/ishtar/sheet_treatmentfile.html:5
msgid "Treatment request"
msgstr "Demande de traitement"
-#: forms_treatments.py:275
+#: forms_treatments.py:276
msgid ""
"Are you sure you want to delete this treatment? All changes made to the "
"associated finds since this treatment record will be lost!"
@@ -500,125 +505,153 @@ msgstr ""
"sur le mobilier associé réalisées depuis l'enregistrement de ce traitement "
"seront perdues !"
-#: forms_treatments.py:278
+#: forms_treatments.py:279
msgid "Would you like to delete this treatment?"
msgstr "Voulez-vous supprimer ce traitement ?"
-#: forms_treatments.py:286 forms_treatments.py:334 forms_treatments.py:491
-#: forms_treatments.py:542
+#: forms_treatments.py:281
+msgid "months"
+msgstr "mois"
+
+#: forms_treatments.py:281
+msgid "years"
+msgstr "années"
+
+#: forms_treatments.py:287 forms_treatments.py:539
+msgid "Slicing"
+msgstr "Découpage"
+
+#: forms_treatments.py:290 forms_treatments.py:542
+msgid "Date get from"
+msgstr "Date utilisée"
+
+#: forms_treatments.py:293 forms_treatments.py:545
+msgid "Date after"
+msgstr "Date après"
+
+#: forms_treatments.py:295 forms_treatments.py:547
+msgid "Date before"
+msgstr "Date avant"
+
+#: forms_treatments.py:331 forms_treatments.py:379 forms_treatments.py:581
+#: forms_treatments.py:632
msgid "Act type"
msgstr "Type d'acte"
-#: forms_treatments.py:287 forms_treatments.py:492
+#: forms_treatments.py:332 forms_treatments.py:582
msgid "Indexed?"
msgstr "Indexé ?"
-#: forms_treatments.py:288 forms_treatments.py:493
+#: forms_treatments.py:333 forms_treatments.py:583
msgid "Object"
msgstr "Objet"
-#: forms_treatments.py:292 forms_treatments.py:497
+#: forms_treatments.py:337 forms_treatments.py:587
msgid "Signature date after"
msgstr "Date de signature après"
-#: forms_treatments.py:294 forms_treatments.py:499
+#: forms_treatments.py:339 forms_treatments.py:589
msgid "Signature date before"
msgstr "Date de signature avant"
-#: forms_treatments.py:296 forms_treatments.py:573
+#: forms_treatments.py:341 forms_treatments.py:663
msgid "Treatment name"
msgstr "Nom du traitement"
-#: forms_treatments.py:297 forms_treatments.py:574
+#: forms_treatments.py:342 forms_treatments.py:664
msgid "Treatment year"
msgstr "Année du traitement"
-#: forms_treatments.py:298 forms_treatments.py:575
+#: forms_treatments.py:343 forms_treatments.py:665
msgid "Treatment index"
msgstr "Index du traitement"
-#: forms_treatments.py:300 forms_treatments.py:577
+#: forms_treatments.py:345 forms_treatments.py:667
msgid "Treatment internal reference"
msgstr "Référence interne du traitement"
-#: forms_treatments.py:304 forms_treatments.py:511
+#: forms_treatments.py:349 forms_treatments.py:601
msgid "Modified by"
msgstr "Modifié par"
-#: forms_treatments.py:354 forms_treatments.py:404 models_treatments.py:490
+#: forms_treatments.py:399 forms_treatments.py:449 models_treatments.py:490
msgid "Name"
msgstr "Nom"
-#: forms_treatments.py:355 forms_treatments.py:411
+#: forms_treatments.py:400 forms_treatments.py:456
msgid "Internal ref."
msgstr "Réf. interne"
-#: forms_treatments.py:358 forms_treatments.py:415 models_treatments.py:92
-#: templates/ishtar/sheet_find.html:86 templates/ishtar/sheet_find.html:128
-#: templates/ishtar/sheet_find.html:228
+#: forms_treatments.py:403 forms_treatments.py:460 models_treatments.py:92
+#: templates/ishtar/sheet_find.html:90 templates/ishtar/sheet_find.html:132
+#: templates/ishtar/sheet_find.html:232
msgid "Type"
msgstr "Type"
-#: forms_treatments.py:360
+#: forms_treatments.py:405
msgid "In charge"
msgstr "Responsable"
-#: forms_treatments.py:366 forms_treatments.py:423 models_treatments.py:499
+#: forms_treatments.py:411 forms_treatments.py:468 models_treatments.py:499
#: templates/ishtar/sheet_treatmentfile.html:31
msgid "Applicant"
msgstr "Demandeur"
-#: forms_treatments.py:372 forms_treatments.py:429 models_treatments.py:503
+#: forms_treatments.py:417 forms_treatments.py:474 models_treatments.py:503
#: templates/ishtar/sheet_treatmentfile.html:38
msgid "Applicant organisation"
msgstr "Organisation du demandeur"
-#: forms_treatments.py:385 forms_treatments.py:565 views.py:502
+#: forms_treatments.py:430 forms_treatments.py:655 views.py:502
msgid "Treatment request search"
msgstr "Rechercher une demande de traitement"
-#: forms_treatments.py:439 models_treatments.py:509
+#: forms_treatments.py:484 forms_treatments.py:534 models_treatments.py:509
msgid "Reception date"
msgstr "Date de réception"
-#: forms_treatments.py:478
+#: forms_treatments.py:523
msgid "Another treatment request with this index exists for {}."
msgstr "Une autre demande de traitement avec cet index existe pour {}."
-#: forms_treatments.py:484
+#: forms_treatments.py:529
msgid "Are you sure you want to delete this treatment request?"
msgstr "Êtes-vous sûr de vouloir supprimer cette demande de traitement ? "
-#: forms_treatments.py:485
+#: forms_treatments.py:530
msgid "Would you like to delete this treatment request?"
msgstr "Voulez-vous supprimer cette demande de traitement ?"
-#: forms_treatments.py:501 forms_treatments.py:597
+#: forms_treatments.py:533 models_treatments.py:507
+msgid "Creation date"
+msgstr "Date de création"
+
+#: forms_treatments.py:543 forms_treatments.py:598 forms_treatments.py:694
+#: models_treatments.py:468 models_treatments.py:492
+msgid "Treatment request type"
+msgstr "Type de demande de traitement"
+
+#: forms_treatments.py:591 forms_treatments.py:687
msgid "Treatment request name"
msgstr "Nom du dossier de traitement"
-#: forms_treatments.py:503 forms_treatments.py:599
+#: forms_treatments.py:593 forms_treatments.py:689
msgid "Treatment request year"
msgstr "Année du dossier de traitement"
-#: forms_treatments.py:505 forms_treatments.py:601
+#: forms_treatments.py:595 forms_treatments.py:691
msgid "Treatment request index"
msgstr "Index de la demande de traitement"
-#: forms_treatments.py:507 forms_treatments.py:603
+#: forms_treatments.py:597 forms_treatments.py:693
msgid "Treatment request internal reference"
msgstr "Référence interne de la demande de traitement"
-#: forms_treatments.py:508 forms_treatments.py:604 models_treatments.py:468
-#: models_treatments.py:492
-msgid "Treatment request type"
-msgstr "Type de demande de traitement"
-
-#: forms_treatments.py:562
+#: forms_treatments.py:652
msgid "You should select a treatment."
msgstr "Vous devez sélectionner un traitement."
-#: forms_treatments.py:568
+#: forms_treatments.py:658
msgid "You should select a treatment request."
msgstr "Vous devez sélectionner une demande de traitement."
@@ -652,12 +685,12 @@ msgstr "Gestion des éléments"
msgid "Documentation"
msgstr "Documentation"
-#: ishtar_menu.py:133 ishtar_menu.py:214 models_finds.py:1137
+#: ishtar_menu.py:133 ishtar_menu.py:214 models_finds.py:1183
msgid "Administrative act"
msgstr "Acte administratif"
-#: ishtar_menu.py:151 ishtar_menu.py:233 templates/ishtar/sheet_find.html:222
-#: templates/ishtar/sheet_find.html:224
+#: ishtar_menu.py:151 ishtar_menu.py:233 templates/ishtar/sheet_find.html:226
+#: templates/ishtar/sheet_find.html:228
msgid "Documents"
msgstr "Documents"
@@ -675,303 +708,303 @@ msgstr "Traitement"
msgid "Simple treatments"
msgstr "Traitements simples"
-#: models_finds.py:43
+#: models_finds.py:44
msgid "Code"
msgstr "Code"
-#: models_finds.py:44
+#: models_finds.py:45
msgid "Recommendation"
msgstr "Recommandation"
-#: models_finds.py:47
+#: models_finds.py:48
msgid "Parent material"
msgstr "Matériau parent"
-#: models_finds.py:51 models_finds.py:539 models_finds.py:616
+#: models_finds.py:52 models_finds.py:558 models_finds.py:638
msgid "Material types"
msgstr "Types de matériau"
-#: models_finds.py:59
+#: models_finds.py:60
msgid "Parent conservatory state"
msgstr "État sanitaire - parent"
-#: models_finds.py:63
+#: models_finds.py:64
msgid "Conservatory states"
msgstr "États sanitaires"
-#: models_finds.py:72
+#: models_finds.py:73
msgid "Preservation types"
msgstr "Types de conservation"
-#: models_finds.py:80
+#: models_finds.py:81
msgid "Integrity / interest type"
msgstr "Type d'intégrité / intérêt"
-#: models_finds.py:81
+#: models_finds.py:82
msgid "Integrity / interest types"
msgstr "Types d'intégrité / intérêt"
-#: models_finds.py:89
+#: models_finds.py:90
msgid "Remarkability type"
msgstr "Type de remarquabilité"
-#: models_finds.py:90
+#: models_finds.py:91
msgid "Remarkability types"
msgstr "Types de remarquabilité"
-#: models_finds.py:97 models_finds.py:612 models_treatments.py:40
+#: models_finds.py:98 models_finds.py:634 models_treatments.py:40
#: models_treatments.py:304
msgid "Order"
msgstr "Ordre"
-#: models_finds.py:99
+#: models_finds.py:100
msgid "Batch type"
msgstr "Type de lot"
-#: models_finds.py:100
+#: models_finds.py:101
msgid "Batch types"
msgstr "Types de lot"
-#: models_finds.py:108
+#: models_finds.py:109
msgid "Parent"
msgstr "Parent"
-#: models_finds.py:151 models_finds.py:609 models_treatments.py:125
+#: models_finds.py:152 models_finds.py:631 models_treatments.py:125
#: models_treatments.py:488
msgid "External ID"
msgstr "ID externe"
-#: models_finds.py:153 models_finds.py:611
+#: models_finds.py:154 models_finds.py:633
msgid "External ID is set automatically"
msgstr "L'identifiant externe est configuré automatiquement"
-#: models_finds.py:156
+#: models_finds.py:157
msgid "Special interest"
msgstr "Intérêt spécifique"
-#: models_finds.py:160
+#: models_finds.py:161
msgid "Context Record"
msgstr "Unité d'Enregistrement"
-#: models_finds.py:161
+#: models_finds.py:162
msgid "Discovery date"
msgstr "Date de découverte"
-#: models_finds.py:166
+#: models_finds.py:167
msgid "Material index"
msgstr "Index matériel"
-#: models_finds.py:182
+#: models_finds.py:183
msgid "Point (2D)"
msgstr "Point (2D)"
-#: models_finds.py:183
+#: models_finds.py:184
msgid "Point"
msgstr "Point"
-#: models_finds.py:184
+#: models_finds.py:185
msgid "Line"
msgstr "Ligne"
-#: models_finds.py:185
+#: models_finds.py:186
msgid "Polygon"
msgstr "Polygon"
-#: models_finds.py:188 models_finds.py:191
+#: models_finds.py:189 models_finds.py:192
msgid "Cached value - do not edit"
msgstr "Valeur en cache - ne pas éditer"
-#: models_finds.py:197 models_finds.py:607
+#: models_finds.py:198 models_finds.py:629
msgid "Base find"
msgstr "Mobilier de base"
-#: models_finds.py:198
+#: models_finds.py:199
msgid "Base finds"
msgstr "Mobilier de base"
-#: models_finds.py:200
+#: models_finds.py:201
msgid "Can view all Base finds"
msgstr "Peut voir tout le Mobilier de base"
-#: models_finds.py:201
+#: models_finds.py:202
msgid "Can view own Base find"
msgstr "Peut voir son propre Mobilier de base"
-#: models_finds.py:202
+#: models_finds.py:203
msgid "Can add own Base find"
msgstr "Peut ajouter son propre Mobilier de base"
-#: models_finds.py:203
+#: models_finds.py:204
msgid "Can change own Base find"
msgstr "Peut modifier son propre Mobilier de base"
-#: models_finds.py:204
+#: models_finds.py:205
msgid "Can delete own Base find"
msgstr "Peut supprimer son propre Mobilier de base"
-#: models_finds.py:443
+#: models_finds.py:462
msgid "g"
msgstr "g"
-#: models_finds.py:444
+#: models_finds.py:463
msgid "kg"
msgstr "kg"
-#: models_finds.py:446
+#: models_finds.py:465
msgid "Not checked"
msgstr "Non vérifié"
-#: models_finds.py:447
+#: models_finds.py:466
msgid "Checked but incorrect"
msgstr "Vérifié mais incorrect"
-#: models_finds.py:448
+#: models_finds.py:467
msgid "Checked and correct"
msgstr "Vérifié et correct"
-#: models_finds.py:520
+#: models_finds.py:539
msgid "Base find - Short ID"
msgstr "Mobilier de base - ID court"
-#: models_finds.py:521
+#: models_finds.py:540
msgid "Base find - Complete ID"
msgstr "Mobilier de base - ID complet"
-#: models_finds.py:523
+#: models_finds.py:542
msgid "Operation (code)"
msgstr "Opération (code)"
-#: models_finds.py:525
+#: models_finds.py:544
msgid "Town"
msgstr "Ville"
-#: models_finds.py:527
+#: models_finds.py:546
msgid "Operation (name)"
msgstr "Opération (nom)"
-#: models_finds.py:529
+#: models_finds.py:548
msgid "Parcel"
msgstr "Parcelle"
-#: models_finds.py:530
+#: models_finds.py:549
msgid "Batch"
msgstr "Lot"
-#: models_finds.py:531
+#: models_finds.py:550
msgid "Base find - Comment"
msgstr "Mobilier de base - Commentaires"
-#: models_finds.py:532
+#: models_finds.py:551
msgid "Base find - Description"
msgstr "Mobilier de base - Description"
-#: models_finds.py:533
+#: models_finds.py:552
msgid "Base find - Topographic localisation"
msgstr "Mobilier de base - Localisation topographique"
-#: models_finds.py:535
+#: models_finds.py:554
msgid "Base find - Special interest"
msgstr "Mobilier de base - Intérêt spécifique"
-#: models_finds.py:536
+#: models_finds.py:555
msgid "Base find - Discovery date"
msgstr "Mobilier de base - Date de découverte"
-#: models_finds.py:537 models_finds.py:640 models_treatments.py:132
-#: models_treatments.py:312 templates/ishtar/sheet_find.html:90
-#: templates/ishtar/sheet_find.html:132
+#: models_finds.py:556 models_finds.py:662 models_treatments.py:132
+#: models_treatments.py:312 templates/ishtar/sheet_find.html:94
+#: templates/ishtar/sheet_find.html:136
msgid "Container"
msgstr "Contenant"
-#: models_finds.py:538
+#: models_finds.py:557
msgid "Periods"
msgstr "Périodes"
-#: models_finds.py:623
+#: models_finds.py:645
msgid "Type of preservation to consider"
msgstr "Mesures de conservation à envisager"
-#: models_finds.py:627
+#: models_finds.py:649
msgid "Weight unit"
msgstr "Unité de poids"
-#: models_finds.py:633 templates/ishtar/sheet_find.html:78
+#: models_finds.py:655 templates/ishtar/sheet_find.html:82
msgid "Upstream treatment"
msgstr "Traitement amont"
-#: models_finds.py:636 templates/ishtar/sheet_find.html:120
+#: models_finds.py:658 templates/ishtar/sheet_find.html:124
msgid "Downstream treatment"
msgstr "Traitement aval"
-#: models_finds.py:675
+#: models_finds.py:697
msgid "Collection"
msgstr "Collection"
-#: models_finds.py:677 models_treatments.py:144 models_treatments.py:512
+#: models_finds.py:699 models_treatments.py:144 models_treatments.py:512
msgid "Cached name"
msgstr "Nom en cache"
-#: models_finds.py:686
+#: models_finds.py:708
msgid "Can view all Finds"
msgstr "Peut voir tout le Mobilier"
-#: models_finds.py:687
+#: models_finds.py:709
msgid "Can view own Find"
msgstr "Peut voir son propre Mobilier"
-#: models_finds.py:688
+#: models_finds.py:710
msgid "Can add own Find"
msgstr "Peut ajouter son propre Mobilier"
-#: models_finds.py:689
+#: models_finds.py:711
msgid "Can change own Find"
msgstr "Peut modifier son propre Mobilier"
-#: models_finds.py:690
+#: models_finds.py:712
msgid "Can delete own Find"
msgstr "Peut supprimer son propre Mobilier"
-#: models_finds.py:696
+#: models_finds.py:718
msgid "FIND"
msgstr "MOBILIER"
-#: models_finds.py:1100
+#: models_finds.py:1146
msgid "Find documentation"
msgstr "Documentation de mobilier"
-#: models_finds.py:1101
+#: models_finds.py:1147
msgid "Find documentations"
msgstr "Documentations de mobilier"
-#: models_finds.py:1104
+#: models_finds.py:1150
msgid "Can view all Find sources"
msgstr "Peut voir toutes les Documentations de mobilier"
-#: models_finds.py:1106
+#: models_finds.py:1152
msgid "Can view own Find source"
msgstr "Peut voir sa propre Documentation de mobilier"
-#: models_finds.py:1108
+#: models_finds.py:1154
msgid "Can add own Find source"
msgstr "Peut ajouter sa propre Documentation de mobilier"
-#: models_finds.py:1110
+#: models_finds.py:1156
msgid "Can change own Find source"
msgstr "Peut modifier sa propre Documentation de mobilier"
-#: models_finds.py:1112
+#: models_finds.py:1158
msgid "Can delete own Find source"
msgstr "Peut suprimer sa propre Documentation de mobilier"
-#: models_finds.py:1138
+#: models_finds.py:1184
msgid "Person"
msgstr "Individu"
-#: models_finds.py:1144
+#: models_finds.py:1190
msgid "Property"
msgstr "Propriété"
-#: models_finds.py:1145
+#: models_finds.py:1191
msgid "Properties"
msgstr "Propriétés"
@@ -1045,7 +1078,7 @@ msgstr "Coût d'assurance"
msgid "Target a basket"
msgstr "Appliquer à un panier"
-#: models_treatments.py:149 templates/ishtar/sheet_find.html:75
+#: models_treatments.py:149 templates/ishtar/sheet_find.html:79
#: templates/ishtar/sheet_treatmentfile.html:46
msgid "Treatments"
msgstr "Traitements"
@@ -1074,8 +1107,8 @@ msgstr "Peut supprimer son propre Traitement"
msgid "TREATMENT"
msgstr "TRAITEMENT"
-#: models_treatments.py:313 templates/ishtar/sheet_find.html:89
-#: templates/ishtar/sheet_find.html:131
+#: models_treatments.py:313 templates/ishtar/sheet_find.html:93
+#: templates/ishtar/sheet_find.html:135
msgid "Doer"
msgstr "Opérateur"
@@ -1099,10 +1132,6 @@ msgstr "Référence interne"
msgid "Person in charge"
msgstr "Personne responsable"
-#: models_treatments.py:507
-msgid "Creation date"
-msgstr "Date de création"
-
#: models_treatments.py:517
msgid "Treatment requests"
msgstr "Demandes de traitement"
@@ -1184,30 +1213,18 @@ msgid "Can view Treatment request source"
msgstr "Peut voir une Documentation de demande de traitement"
#: models_treatments.py:633
-msgid "Can add Treatment request source"
-msgstr "Peut ajouter une Documentation de demande de traitement"
-
-#: models_treatments.py:635
-msgid "Can change Treatment request source"
-msgstr "Peut modifier une Documentation de demande de traitement"
-
-#: models_treatments.py:637
-msgid "Can delete Treatment request source"
-msgstr "Peut supprimer une Documentation de demande de traitement"
-
-#: models_treatments.py:639
msgid "Can view own Treatment request source"
msgstr "Peut voir sa propre Documentation de demande de traitement"
-#: models_treatments.py:641
+#: models_treatments.py:635
msgid "Can add own Treatment request source"
msgstr "Peut ajouter sa propre Documentation de demande de traitement"
-#: models_treatments.py:643
+#: models_treatments.py:637
msgid "Can change own Treatment request source"
msgstr "Peut modifier sa propre Documentation de demande de traitement"
-#: models_treatments.py:645
+#: models_treatments.py:639
msgid "Can delete own Treatment request source"
msgstr "Peut supprimer sa propre Documentation de demande de traitement"
@@ -1335,55 +1352,63 @@ msgstr "Demande de traitement : supprimer une documentation associée"
msgid "Operation"
msgstr "Opération"
-#: templates/ishtar/sheet_find.html:25
+#: templates/ishtar/sheet_find.html:14
+msgid ""
+"This sheet has a downstream treatment: it is related to an old version of "
+"the find."
+msgstr ""
+"Cette fiche a un traitement aval associé, elle concerne une vieille version "
+"de ce mobilier."
+
+#: templates/ishtar/sheet_find.html:29
msgid "Administrative index"
msgstr "Index administratif"
-#: templates/ishtar/sheet_find.html:67
+#: templates/ishtar/sheet_find.html:71
msgid "Warehouse"
msgstr "Dépôt"
-#: templates/ishtar/sheet_find.html:84 templates/ishtar/sheet_find.html:126
+#: templates/ishtar/sheet_find.html:88 templates/ishtar/sheet_find.html:130
msgid "Year - index"
msgstr "Année - index"
-#: templates/ishtar/sheet_find.html:88 templates/ishtar/sheet_find.html:130
+#: templates/ishtar/sheet_find.html:92 templates/ishtar/sheet_find.html:134
msgid "Related finds (max. 15 displayed)"
msgstr "Mobilier associé (max. 15 affichés)"
-#: templates/ishtar/sheet_find.html:116
+#: templates/ishtar/sheet_find.html:120
msgid "Export as CSV"
msgstr "Export en CSV"
-#: templates/ishtar/sheet_find.html:116 templates/ishtar/sheet_find.html:159
+#: templates/ishtar/sheet_find.html:120 templates/ishtar/sheet_find.html:163
msgid "CSV"
msgstr "CSV"
-#: templates/ishtar/sheet_find.html:164
+#: templates/ishtar/sheet_find.html:168
msgid "Associated base finds"
msgstr "Mobilier de base associé"
-#: templates/ishtar/sheet_find.html:171
+#: templates/ishtar/sheet_find.html:175
msgid "Internal ID"
msgstr "ID interne"
-#: templates/ishtar/sheet_find.html:203
+#: templates/ishtar/sheet_find.html:207
msgid "Coordinates"
msgstr "Coordonnées"
-#: templates/ishtar/sheet_find.html:210
+#: templates/ishtar/sheet_find.html:214
msgid "SRID"
msgstr "SRID"
-#: templates/ishtar/sheet_find.html:227
+#: templates/ishtar/sheet_find.html:231
msgid "Title"
msgstr "Titre"
-#: templates/ishtar/sheet_find.html:229
+#: templates/ishtar/sheet_find.html:233
msgid "Authors"
msgstr "Auteurs"
-#: templates/ishtar/sheet_find.html:230
+#: templates/ishtar/sheet_find.html:234
msgid "Link"
msgstr "Lien"
diff --git a/translations/fr/archaeological_operations.po b/translations/fr/archaeological_operations.po
index ae6b3cc90..21d309c9d 100644
--- a/translations/fr/archaeological_operations.po
+++ b/translations/fr/archaeological_operations.po
@@ -86,7 +86,7 @@ msgid "Relation type"
msgstr "Type de relation"
#: forms.py:383 ishtar_menu.py:30 models.py:372 models.py:847 models.py:882
-#: models.py:922 models.py:1026 models.py:1235 wizards.py:353 wizards.py:364
+#: models.py:922 models.py:1026 models.py:1235 wizards.py:352 wizards.py:363
#: templates/ishtar/sheet_operation.html:4
msgid "Operation"
msgstr "Opération"
diff --git a/translations/fr/ishtar_common.po b/translations/fr/ishtar_common.po
index 1e09aba03..980fba45d 100644
--- a/translations/fr/ishtar_common.po
+++ b/translations/fr/ishtar_common.po
@@ -6,13 +6,14 @@
# Valérie-Emma Leroux <emma@iggdrasil.net>, 2016. #zanata
# Étienne Loks <etienne.loks@iggdrasil.net>, 2016. #zanata
# Valérie-Emma Leroux <emma@iggdrasil.net>, 2017. #zanata
+# Étienne Loks <etienne.loks@iggdrasil.net>, 2017. #zanata
msgid ""
msgstr ""
"MIME-Version: 1.0\n"
"Content-Transfer-Encoding: 8bit\n"
"Content-Type: text/plain; charset=UTF-8\n"
-"PO-Revision-Date: 2017-04-07 05:56-0400\n"
-"Last-Translator: Valérie-Emma Leroux <emma@iggdrasil.net>\n"
+"PO-Revision-Date: 2017-05-16 06:17-0400\n"
+"Last-Translator: Étienne Loks <etienne.loks@iggdrasil.net>\n"
"Language-Team: \n"
"Language: fr\n"
"Plural-Forms: nplurals=2; plural=n>1;\n"
@@ -196,12 +197,12 @@ msgstr "Vous devez sélectionner un élément."
msgid "Add a new item"
msgstr "Ajouter un nouvel élément"
-#: forms.py:297 models.py:1501
+#: forms.py:297 models.py:1556
msgid "Template"
msgstr "Patron"
#: forms_common.py:41 forms_common.py:59 forms_common.py:184
-#: forms_common.py:408 models.py:1567 models.py:3030
+#: forms_common.py:408 models.py:1622 models.py:3085
#: templates/blocks/JQueryAdvancedTown.html:19
#: templates/ishtar/sheet_organization.html:13
msgid "Town"
@@ -224,8 +225,8 @@ msgstr ""
"<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:68 forms_common.py:863 ishtar_menu.py:47 models.py:2630
-#: models.py:2823 models.py:2885 templates/ishtar/sheet_person.html:4
+#: forms_common.py:68 forms_common.py:863 ishtar_menu.py:47 models.py:2685
+#: models.py:2878 models.py:2940 templates/ishtar/sheet_person.html:4
msgid "Person"
msgstr "Personne"
@@ -238,64 +239,64 @@ msgstr ""
"pas possible."
#: forms_common.py:172 forms_common.py:329 forms_common.py:453
-#: ishtar_menu.py:75 models.py:2513 models.py:2604
+#: ishtar_menu.py:75 models.py:2568 models.py:2659
#: templates/ishtar/sheet_organization.html:4
msgid "Organization"
msgstr "Organisation"
#: forms_common.py:175 forms_common.py:212 forms_common.py:324
-#: forms_common.py:378 forms_common.py:448 models.py:1109 models.py:1500
-#: models.py:1769 models.py:1785 models.py:2023 models.py:2301 models.py:2507
-#: models.py:2616 models.py:3016 templates/ishtar/import_list.html:13
+#: forms_common.py:378 forms_common.py:448 models.py:1159 models.py:1555
+#: models.py:1824 models.py:1840 models.py:2078 models.py:2356 models.py:2562
+#: models.py:2671 models.py:3071 templates/ishtar/import_list.html:13
#: templates/ishtar/sheet_organization.html:8
#: templates/ishtar/sheet_organization.html:21
msgid "Name"
msgstr "Nom"
-#: forms_common.py:176 models.py:1722 models.py:2154
+#: forms_common.py:176 models.py:1777 models.py:2209
msgid "Organization type"
msgstr "Type d'organisation"
-#: forms_common.py:178 forms_common.py:402 models.py:1562
+#: forms_common.py:178 forms_common.py:402 models.py:1617
#: templates/ishtar/sheet_organization.html:10
msgid "Address"
msgstr "Adresse"
-#: forms_common.py:180 forms_common.py:405 models.py:1563
+#: forms_common.py:180 forms_common.py:405 models.py:1618
#: templates/ishtar/sheet_organization.html:11
msgid "Address complement"
msgstr "Complément d'adresse"
-#: forms_common.py:182 forms_common.py:406 models.py:1565
+#: forms_common.py:182 forms_common.py:406 models.py:1620
#: templates/ishtar/sheet_organization.html:12
msgid "Postal code"
msgstr "Code postal"
-#: forms_common.py:185 forms_common.py:409 models.py:1568
+#: forms_common.py:185 forms_common.py:409 models.py:1623
msgid "Country"
msgstr "Pays"
#: forms_common.py:187 forms_common.py:326 forms_common.py:382
-#: forms_common.py:450 forms_common.py:574 models.py:1595
+#: forms_common.py:450 forms_common.py:574 models.py:1650
msgid "Email"
msgstr "Courriel"
-#: forms_common.py:188 forms_common.py:385 models.py:1580
+#: forms_common.py:188 forms_common.py:385 models.py:1635
#: templates/ishtar/sheet_organization.html:14
#: templates/ishtar/sheet_person.html:21
#: templates/ishtar/wizard/wizard_person.html:17
msgid "Phone"
msgstr "Téléphone"
-#: forms_common.py:189 forms_common.py:394 models.py:1592
+#: forms_common.py:189 forms_common.py:394 models.py:1647
#: templates/ishtar/sheet_organization.html:15
#: templates/ishtar/sheet_person.html:39
#: templates/ishtar/wizard/wizard_person.html:35
msgid "Mobile phone"
msgstr "Téléphone portable"
-#: forms_common.py:213 forms_common.py:327 forms_common.py:451 models.py:2192
-#: models.py:2509 models.py:2951 templates/sheet_ope.html:85
+#: forms_common.py:213 forms_common.py:327 forms_common.py:451 models.py:2247
+#: models.py:2564 models.py:3006 templates/sheet_ope.html:85
#: templates/sheet_ope.html.py:105 templates/sheet_ope.html:126
#: templates/ishtar/import_list.html:14
#: templates/ishtar/sheet_organization.html:23
@@ -303,7 +304,7 @@ msgstr "Téléphone portable"
msgid "Type"
msgstr "Type"
-#: forms_common.py:222 views.py:147
+#: forms_common.py:222 views.py:149
msgid "Organization search"
msgstr "Rechercher une organisation"
@@ -319,12 +320,12 @@ msgstr "Fusionner tous les éléments dans"
msgid "Organization to merge"
msgstr "Organisation à fusionner"
-#: forms_common.py:325 forms_common.py:376 forms_common.py:449 models.py:2614
+#: forms_common.py:325 forms_common.py:376 forms_common.py:449 models.py:2669
#: templates/ishtar/sheet_organization.html:22
msgid "Surname"
msgstr "Prénom"
-#: forms_common.py:341 forms_common.py:436 views.py:112
+#: forms_common.py:341 forms_common.py:436 views.py:114
msgid "Person search"
msgstr "Rechercher une personne"
@@ -337,25 +338,25 @@ msgstr "Personne à fusionner"
msgid "Identity"
msgstr "Identité"
-#: forms_common.py:373 forms_common.py:781 forms_common.py:830 models.py:2155
-#: models.py:2608 models.py:2610 models.py:2948 templates/sheet_ope.html:104
+#: forms_common.py:373 forms_common.py:781 forms_common.py:830 models.py:2210
+#: models.py:2663 models.py:2665 models.py:3003 templates/sheet_ope.html:104
#: templates/ishtar/blocks/window_tables/documents.html:7
msgid "Title"
msgstr "Titre"
-#: forms_common.py:374 models.py:2612
+#: forms_common.py:374 models.py:2667
msgid "Salutation"
msgstr "Formule d'appel"
-#: forms_common.py:380 models.py:2618
+#: forms_common.py:380 models.py:2673
msgid "Raw name"
msgstr "Nom brut"
-#: forms_common.py:383 models.py:1581
+#: forms_common.py:383 models.py:1636
msgid "Phone description"
msgstr "Type de téléphone"
-#: forms_common.py:386 models.py:1583 models.py:1585
+#: forms_common.py:386 models.py:1638 models.py:1640
msgid "Phone description 2"
msgstr "Type de téléphone 2"
@@ -363,11 +364,11 @@ msgstr "Type de téléphone 2"
msgid "Phone 2"
msgstr "Téléphone 2"
-#: forms_common.py:390 models.py:1589
+#: forms_common.py:390 models.py:1644
msgid "Phone description 3"
msgstr "Type de téléphone 3"
-#: forms_common.py:392 models.py:1587
+#: forms_common.py:392 models.py:1642
msgid "Phone 3"
msgstr "Téléphone 3"
@@ -375,23 +376,23 @@ msgstr "Téléphone 3"
msgid "Current organization"
msgstr "Organisation actuelle"
-#: forms_common.py:411 models.py:1570
+#: forms_common.py:411 models.py:1625
msgid "Other address: address"
msgstr "Autre adresse : adresse"
-#: forms_common.py:414 models.py:1573
+#: forms_common.py:414 models.py:1628
msgid "Other address: address complement"
msgstr "Autre adresse : complément d'adresse"
-#: forms_common.py:416 models.py:1574
+#: forms_common.py:416 models.py:1629
msgid "Other address: postal code"
msgstr "Autre adresse : code postal"
-#: forms_common.py:418 models.py:1576
+#: forms_common.py:418 models.py:1631
msgid "Other address: town"
msgstr "Autre adresse : ville"
-#: forms_common.py:420 models.py:1578
+#: forms_common.py:420 models.py:1633
msgid "Other address: country"
msgstr "Autre adresse : pays"
@@ -407,7 +408,7 @@ msgstr "Nom d'utilisateur"
msgid "Account search"
msgstr "Rechercher un compte"
-#: forms_common.py:512 forms_common.py:552 forms_common.py:556 models.py:2561
+#: forms_common.py:512 forms_common.py:552 forms_common.py:556 models.py:2616
msgid "Person type"
msgstr "Type de personne"
@@ -439,7 +440,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:636 forms_common.py:649 models.py:3031
+#: forms_common.py:636 forms_common.py:649 models.py:3086
msgid "Towns"
msgstr "Communes"
@@ -455,7 +456,7 @@ msgstr "Seul un choix peut être coché."
msgid "Documentation informations"
msgstr "Information sur le document"
-#: forms_common.py:783 forms_common.py:831 models.py:2156 models.py:2923
+#: forms_common.py:783 forms_common.py:831 models.py:2211 models.py:2978
msgid "Source type"
msgstr "Type de document"
@@ -467,37 +468,37 @@ msgstr "Référence"
msgid "Internal reference"
msgstr "Référence interne"
-#: forms_common.py:791 models.py:2962
+#: forms_common.py:791 models.py:3017
msgid "Numerical ressource (web address)"
msgstr "Ressource numérique (adresse web)"
-#: forms_common.py:792 models.py:2964
+#: forms_common.py:792 models.py:3019
msgid "Receipt date"
msgstr "Date de réception"
-#: forms_common.py:794 models.py:2327 models.py:2966
+#: forms_common.py:794 models.py:2382 models.py:3021
msgid "Creation date"
msgstr "Date de création"
-#: forms_common.py:797 models.py:2969
+#: forms_common.py:797 models.py:3024
msgid "Receipt date in documentation"
msgstr "Date de réception en documentation"
-#: forms_common.py:799 forms_common.py:835 models.py:381 models.py:698
-#: models.py:2050 models.py:2622 models.py:2976
+#: forms_common.py:799 forms_common.py:835 models.py:419 models.py:746
+#: models.py:2105 models.py:2677 models.py:3031
msgid "Comment"
msgstr "Commentaire"
-#: forms_common.py:801 forms_common.py:834 models.py:1111 models.py:1789
-#: models.py:1977 models.py:2024 models.py:2975 templates/sheet_ope.html:128
+#: forms_common.py:801 forms_common.py:834 models.py:1161 models.py:1844
+#: models.py:2032 models.py:2079 models.py:3030 templates/sheet_ope.html:128
msgid "Description"
msgstr "Description"
-#: forms_common.py:804 models.py:2977
+#: forms_common.py:804 models.py:3032
msgid "Additional information"
msgstr "Information supplémentaire"
-#: forms_common.py:806 forms_common.py:838 models.py:2979
+#: forms_common.py:806 forms_common.py:838 models.py:3034
msgid "Has a duplicate"
msgstr "Existe en doublon"
@@ -514,7 +515,7 @@ msgstr ""
"<p>Les images trop grandes sont retaillées en : %(width)dx%(height)d (le "
"ratio est conservé).</p>"
-#: forms_common.py:827 forms_common.py:856 forms_common.py:890 models.py:2890
+#: forms_common.py:827 forms_common.py:856 forms_common.py:890 models.py:2945
#: templates/ishtar/wizard/wizard_person_deletion.html:124
msgid "Author"
msgstr "Auteur"
@@ -527,7 +528,7 @@ msgstr "Informations supplémentaires"
msgid "Would you like to delete this documentation?"
msgstr "Voulez-vous supprimer ce document ?"
-#: forms_common.py:864 models.py:2157 models.py:2877 models.py:2887
+#: forms_common.py:864 models.py:2212 models.py:2932 models.py:2942
msgid "Author type"
msgstr "Type d'auteur"
@@ -539,7 +540,7 @@ msgstr "Sélection d'auteur"
msgid "There are identical authors."
msgstr "Il y a des auteurs identiques."
-#: forms_common.py:901 models.py:2891 models.py:2958
+#: forms_common.py:901 models.py:2946 models.py:3013
#: templates/sheet_ope.html:106
#: templates/ishtar/blocks/window_tables/documents.html:9
msgid "Authors"
@@ -557,7 +558,7 @@ msgstr "Ajout/modification"
msgid "Deletion"
msgstr "Suppression"
-#: ishtar_menu.py:39 models.py:1283 views.py:1644
+#: ishtar_menu.py:39 models.py:1338 views.py:1640
msgid "Global variables"
msgstr "Variables globales"
@@ -585,147 +586,167 @@ msgstr "Fusion automatique"
msgid "Manual merge"
msgstr "Fusion manuelle"
-#: ishtar_menu.py:109 models.py:2335
+#: ishtar_menu.py:109 models.py:2390
msgid "Imports"
msgstr "Imports"
-#: ishtar_menu.py:112 views.py:1652
+#: ishtar_menu.py:112 views.py:1648
msgid "New import"
msgstr "Nouvel import"
-#: ishtar_menu.py:116 views.py:1666
+#: ishtar_menu.py:116 views.py:1662
msgid "Current imports"
msgstr "Imports en cours"
-#: ishtar_menu.py:120 views.py:1705
+#: ishtar_menu.py:120 views.py:1701
msgid "Old imports"
msgstr "Anciens imports"
-#: models.py:186
+#: models.py:224
msgid "Not a valid item."
msgstr "Élément invalide."
-#: models.py:201
+#: models.py:239
msgid "A selected item is not a valid item."
msgstr "Un élément sélectionné n'est pas valide."
-#: models.py:212
+#: models.py:250
msgid "This item already exists."
msgstr "Cet élément existe déjà."
-#: models.py:377 models.py:697 models.py:1535 models.py:1547 models.py:1973
+#: models.py:415 models.py:745 models.py:1590 models.py:1602 models.py:2028
msgid "Label"
msgstr "Libellé"
-#: models.py:379
+#: models.py:417
msgid "Textual ID"
msgstr "Identifiant textuel"
-#: models.py:382 models.py:700 models.py:1504
+#: models.py:420 models.py:748 models.py:1559
msgid "Available"
msgstr "Disponible"
-#: models.py:724 models.py:2096
+#: models.py:772 models.py:2151
msgid "Key"
msgstr "Clé"
-#: models.py:730
+#: models.py:778
msgid "Specific key to an import"
msgstr "Clé spécifique à un import"
-#: models.py:826
+#: models.py:874
msgid "Last editor"
msgstr "Dernier éditeur"
-#: models.py:829
+#: models.py:877
msgid "Creator"
msgstr "Créateur"
-#: models.py:971 models.py:2874 models.py:3042 models.py:3098
+#: models.py:1019 models.py:2929 models.py:3097 models.py:3153
msgid "Order"
msgstr "Ordre"
-#: models.py:972
+#: models.py:1020
msgid "Symmetrical"
msgstr "Symétrique"
-#: models.py:973
+#: models.py:1021
msgid "Tiny label"
msgstr "Libellé court"
-#: models.py:987
+#: models.py:1035
msgid "Cannot have symmetrical and an inverse_relation"
msgstr "Ne peut pas être symétrique et avoir une relation inverse"
-#: models.py:1103
+#: models.py:1151
msgid "Euro"
msgstr "Euro"
-#: models.py:1104
+#: models.py:1152
msgid "US dollar"
msgstr "Dollar US"
-#: models.py:1110 models.py:1787
+#: models.py:1153 views.py:1438 views.py:1500
+msgid "Operations"
+msgstr "Opérations"
+
+#: models.py:1154 views.py:1440 views.py:1504
+msgid "Context records"
+msgstr "Unités d'Enregistrement"
+
+#: models.py:1160 models.py:1842
msgid "Slug"
msgstr "Identifiant texte"
-#: models.py:1113
+#: models.py:1163
msgid "CSS color code for base module"
msgstr "Code couleur CSS pour le tronc commun"
-#: models.py:1115
+#: models.py:1165
msgid "Files module"
msgstr "Module Dossiers"
-#: models.py:1117
+#: models.py:1167
msgid "CSS color code for files module"
msgstr "Code couleur CSS pour le module Dossier"
-#: models.py:1119
+#: models.py:1169
msgid "Context records module"
msgstr "Module Unités d'Enregistrement"
-#: models.py:1122
+#: models.py:1172
msgid "CSS color code for context record module"
msgstr "Code couleur CSS pour le module Unité d'Enregistrement"
-#: models.py:1124
+#: models.py:1174
msgid "Finds module"
msgstr "Module Mobilier"
-#: models.py:1125
+#: models.py:1175
msgid "Need context records module"
msgstr "Nécessite le module Unités d'Enregistrement"
-#: models.py:1127
+#: models.py:1177
+msgid "Find index is based on"
+msgstr "Index mobilier basé sur"
+
+#: models.py:1179
+msgid ""
+"To prevent irrelevant indexes, change this parameter only if there is no "
+"find in the database"
+msgstr ""
+"Pour éviter des index non pertinents, ne changer ce paramètre seulement si "
+"il n'y a pas encore de mobilier dans cette base de données"
+
+#: models.py:1182
msgid "CSS color code for find module"
msgstr "Code couleur CSS pour le module Mobilier"
-#: models.py:1130
+#: models.py:1185
msgid "Warehouses module"
msgstr "Module Dépôts"
-#: models.py:1131
+#: models.py:1186
msgid "Need finds module"
msgstr "Nécessite le module mobilier"
-#: models.py:1133
+#: models.py:1188
msgid "CSS code for warehouse module"
msgstr "Code couleur CSS pour le module Dépôt"
-#: models.py:1135
+#: models.py:1190
msgid "Mapping module"
msgstr "Module cartographique"
-#: models.py:1137
+#: models.py:1192
msgid "CSS code for mapping module"
msgstr "Code couleur CSS pour le module cartographique"
-#: models.py:1140
+#: models.py:1195
msgid "Home page"
msgstr "Page d'accueil"
-#: models.py:1141
+#: models.py:1196
#, python-brace-format
msgid ""
"Homepage of Ishtar - if not defined a default homepage will appear. Use the "
@@ -735,11 +756,11 @@ msgstr ""
"défaut apparaît. Utiliser la syntaxe Markdown. {random_image} peut être "
"utilisé pour afficher une image au hasard."
-#: models.py:1145
+#: models.py:1200
msgid "File external id"
msgstr "Identifiant externe de fichier"
-#: models.py:1147
+#: models.py:1202
msgid ""
"Formula to manage file external ID. Change this with care. With incorrect "
"formula, the application might be unusable and import of external data can "
@@ -749,11 +770,11 @@ msgstr ""
"précaution. Une formule incorrecte peut rendre l'application inutilisable et "
"l'import de données externes peut alors être destructif."
-#: models.py:1152
+#: models.py:1207
msgid "Parcel external id"
msgstr "Identifiant externe de parcelle"
-#: models.py:1155
+#: models.py:1210
msgid ""
"Formula to manage parcel external ID. Change this with care. With incorrect "
"formula, the application might be unusable and import of external data can "
@@ -763,11 +784,11 @@ msgstr ""
"précaution. Une formule incorrecte peut rendre l'application inutilisable et "
"l'import de données externes peut alors être destructif."
-#: models.py:1160
+#: models.py:1215
msgid "Context record external id"
msgstr "Identifiant externe d'unité d'enregistrement"
-#: models.py:1162
+#: models.py:1217
msgid ""
"Formula to manage context record external ID. Change this with care. With "
"incorrect formula, the application might be unusable and import of external "
@@ -777,11 +798,11 @@ msgstr ""
"manipuler avec précaution. Une formule incorrecte peut rendre l'application "
"inutilisable et l'import de données externes peut alors être destructif."
-#: models.py:1167
+#: models.py:1222
msgid "Base find external id"
msgstr "Identifiant externe de mobilier de base"
-#: models.py:1169
+#: models.py:1224
msgid ""
"Formula to manage base find external ID. Change this with care. With "
"incorrect formula, the application might be unusable and import of external "
@@ -791,11 +812,11 @@ msgstr ""
"manipuler avec précaution. Une formule incorrecte peut rendre l'application "
"inutilisable et l'import de données externes peut alors être destructif."
-#: models.py:1174
+#: models.py:1229
msgid "Find external id"
msgstr "Identifiant externe de mobilier"
-#: models.py:1176
+#: models.py:1231
msgid ""
"Formula to manage find external ID. Change this with care. With incorrect "
"formula, the application might be unusable and import of external data can "
@@ -805,11 +826,11 @@ msgstr ""
"précaution. Une formule incorrecte peut rendre l'application inutilisable et "
"l'import de données externes peut alors être destructif."
-#: models.py:1181
+#: models.py:1236
msgid "Container external id"
msgstr "ID externe du contenant"
-#: models.py:1183
+#: models.py:1238
msgid ""
"Formula to manage container external ID. Change this with care. With "
"incorrect formula, the application might be unusable and import of external "
@@ -819,11 +840,11 @@ msgstr ""
"précaution. Une formule incorrecte peut rendre l'application inutilisable et "
"l'import de données externes peut alors être destructif."
-#: models.py:1188
+#: models.py:1243
msgid "Warehouse external id"
msgstr "ID externe du dépôt"
-#: models.py:1190
+#: models.py:1245
msgid ""
"Formula to manage warehouse external ID. Change this with care. With "
"incorrect formula, the application might be unusable and import of external "
@@ -833,11 +854,11 @@ msgstr ""
"précaution. Une formule incorrecte peut rendre l'application inutilisable et "
"l'import de données externes peut alors être destructif."
-#: models.py:1195
+#: models.py:1250
msgid "Raw name for person"
msgstr "Nom brut pour une personne"
-#: models.py:1197
+#: models.py:1252
msgid ""
"Formula to manage person raw_name. Change this with care. With incorrect "
"formula, the application might be unusable and import of external data can "
@@ -847,43 +868,43 @@ msgstr ""
"Une formule incorrecte peut rendre l'application inutilisable et l'import de "
"données externes peut alors être destructif."
-#: models.py:1201
+#: models.py:1256
msgid "Current active"
msgstr "Actuellement utilisé"
-#: models.py:1202
+#: models.py:1257
msgid "Currency"
msgstr "Devise"
-#: models.py:1206
+#: models.py:1261
msgid "Ishtar site profile"
msgstr "Profil d'instance Ishtar"
-#: models.py:1207
+#: models.py:1262
msgid "Ishtar site profiles"
msgstr "Profils d'instance Ishtar"
-#: models.py:1276
+#: models.py:1331
msgid "Variable name"
msgstr "Nom de la variable"
-#: models.py:1277
+#: models.py:1332
msgid "Description of the variable"
msgstr "Description de la variable"
-#: models.py:1279 models.py:2097
+#: models.py:1334 models.py:2152
msgid "Value"
msgstr "Valeur"
-#: models.py:1282
+#: models.py:1337
msgid "Global variable"
msgstr "Variable globale"
-#: models.py:1405 models.py:1435
+#: models.py:1460 models.py:1490
msgid "Total"
msgstr "Total"
-#: models.py:1412 models.py:1536 models.py:1548
+#: models.py:1467 models.py:1591 models.py:1603
#: templates/ishtar/sheet_person.html:24
#: templates/ishtar/dashboards/dashboard_main_detail.html:141
#: templates/ishtar/dashboards/dashboard_main_detail_users.html:26
@@ -891,135 +912,135 @@ msgstr "Total"
msgid "Number"
msgstr "Nombre"
-#: models.py:1499
+#: models.py:1554
msgid "Administrative Act"
msgstr "Acte administratif"
-#: models.py:1503
+#: models.py:1558
msgid "Associated object"
msgstr "Objet associé"
-#: models.py:1507
+#: models.py:1562
msgid "Document template"
msgstr "Patron de document"
-#: models.py:1508
+#: models.py:1563
msgid "Document templates"
msgstr "Patrons de document"
-#: models.py:1539 models.py:1549 models.py:2321
+#: models.py:1594 models.py:1604 models.py:2376
msgid "State"
msgstr "État"
-#: models.py:1553 templates/blocks/JQueryAdvancedTown.html:12
+#: models.py:1608 templates/blocks/JQueryAdvancedTown.html:12
msgid "Department"
msgstr "Département"
-#: models.py:1554
+#: models.py:1609
msgid "Departments"
msgstr "Départements"
-#: models.py:1591
+#: models.py:1646
msgid "Raw phone"
msgstr "Téléphone brut"
-#: models.py:1597
+#: models.py:1652
msgid "Alternative address is prefered"
msgstr "L'adresse alternative est préférée"
-#: models.py:1636
+#: models.py:1691
msgid "Tel: "
msgstr "Tél :"
-#: models.py:1640
+#: models.py:1695
msgid "Mobile: "
msgstr "Mobile :"
-#: models.py:1644
+#: models.py:1699
msgid "Email: "
msgstr "Courriel :"
-#: models.py:1649
+#: models.py:1704
msgid "Merge key"
msgstr "Clé de fusion"
-#: models.py:1723
+#: models.py:1778
msgid "Organization types"
msgstr "Types d'organisation"
-#: models.py:1770
+#: models.py:1825
msgid "Class name"
msgstr "Nom de la classe"
-#: models.py:1773
+#: models.py:1828
msgid "Importer - Model"
msgstr "Importeur - Modèle"
-#: models.py:1774
+#: models.py:1829
msgid "Importer - Models"
msgstr "Importeur - Modèles"
-#: models.py:1791 templates/ishtar/dashboards/dashboard_main.html:34
+#: models.py:1846 templates/ishtar/dashboards/dashboard_main.html:34
msgid "Users"
msgstr "Utilisateurs"
-#: models.py:1794
+#: models.py:1849
msgid "Associated model"
msgstr "Modèle associé"
-#: models.py:1797
+#: models.py:1852
msgid "Models that can accept new items"
msgstr "Modèles qui peuvent accepter de nouveaux éléments"
-#: models.py:1798
+#: models.py:1853
msgid "Leave blank for no restrictions"
msgstr "Laissez vide pour aucune restriction"
-#: models.py:1800
+#: models.py:1855
msgid "Is template"
msgstr "Est un patron"
-#: models.py:1801
+#: models.py:1856
msgid "Unicity keys (separator \";\")"
msgstr "Clés d'unicité (séparateur « ; »)"
-#: models.py:1805
+#: models.py:1860
msgid "Importer - Type"
msgstr "Importeur - Type"
-#: models.py:1806
+#: models.py:1861
msgid "Importer - Types"
msgstr "Importeur - Types"
-#: models.py:1905
+#: models.py:1960
msgid "Importer - Default"
msgstr "Importeur - Par défaut"
-#: models.py:1906
+#: models.py:1961
msgid "Importer - Defaults"
msgstr "Importeur - Par défaut"
-#: models.py:1941
+#: models.py:1996
msgid "Importer - Default value"
msgstr "Importeur - Valeur par défaut"
-#: models.py:1942
+#: models.py:1997
msgid "Importer - Default values"
msgstr "Importeur - Valeurs par défaut"
-#: models.py:1976
+#: models.py:2031
msgid "Column number"
msgstr "Numéro de colonne"
-#: models.py:1979
+#: models.py:2034
msgid "Required"
msgstr "Requis"
-#: models.py:1981
+#: models.py:2036
msgid "Export field name"
msgstr "Exporter le nom du champ"
-#: models.py:1982
+#: models.py:2037
msgid ""
"Fill this field if the field name is ambiguous for export. For instance: "
"concatenated fields."
@@ -1027,531 +1048,531 @@ msgstr ""
"Remplir ce champ si le nom du champ est ambigu pour l'export, par exemple "
"dans le cas de champs concaténés."
-#: models.py:1987
+#: models.py:2042
msgid "Importer - Column"
msgstr "Importeur - Colonne"
-#: models.py:1988
+#: models.py:2043
msgid "Importer - Columns"
msgstr "Importeur - Colonnes"
-#: models.py:2008
+#: models.py:2063
msgid "Field name"
msgstr "Nom du champ"
-#: models.py:2010 models.py:2044
+#: models.py:2065 models.py:2099
msgid "Force creation of new items"
msgstr "Forcer la création de nouveaux éléments"
-#: models.py:2012 models.py:2046
+#: models.py:2067 models.py:2101
msgid "Concatenate with existing"
msgstr "Concaténer avec l'existant"
-#: models.py:2014 models.py:2048
+#: models.py:2069 models.py:2103
msgid "Concatenate character"
msgstr "Caractère de concaténation"
-#: models.py:2018
+#: models.py:2073
msgid "Importer - Duplicate field"
msgstr "Importeur - Champ dupliqué"
-#: models.py:2019
+#: models.py:2074
msgid "Importer - Duplicate fields"
msgstr "Importeur - Champs dupliqués"
-#: models.py:2026
+#: models.py:2081
msgid "Regular expression"
msgstr "Expression régulière"
-#: models.py:2029
+#: models.py:2084
msgid "Importer - Regular expression"
msgstr "Importeur - Expression régulière"
-#: models.py:2030
+#: models.py:2085
msgid "Importer - Regular expressions"
msgstr "Importeur - Expressions régulières"
-#: models.py:2053
+#: models.py:2108
msgid "Importer - Target"
msgstr "Importeur - Cible"
-#: models.py:2054
+#: models.py:2109
msgid "Importer - Targets"
msgstr "Importeur - Cibles"
-#: models.py:2078 views.py:568
+#: models.py:2133 views.py:570
msgid "True"
msgstr "Oui"
-#: models.py:2079 views.py:570
+#: models.py:2134 views.py:572
msgid "False"
msgstr "Non"
-#: models.py:2098
+#: models.py:2153
msgid "Is set"
msgstr "Est défini"
-#: models.py:2105
+#: models.py:2160
msgid "Importer - Target key"
msgstr "Importeur - Clé de rapprochement"
-#: models.py:2106
+#: models.py:2161
msgid "Importer - Targets keys"
msgstr "Importeur - Clés de rapprochement"
-#: models.py:2158 models.py:2954
+#: models.py:2213 models.py:3009
msgid "Format"
msgstr "Format"
-#: models.py:2159 models.py:3046
+#: models.py:2214 models.py:3101
msgid "Operation type"
msgstr "Type d'opération"
-#: models.py:2160
+#: models.py:2215
msgid "Period"
msgstr "Période"
-#: models.py:2161
+#: models.py:2216
msgid "Report state"
msgstr "État de rapport"
-#: models.py:2162
+#: models.py:2217
msgid "Remain type"
msgstr "Type de vestige"
-#: models.py:2163
+#: models.py:2218
msgid "Unit"
msgstr "Unité"
-#: models.py:2165
+#: models.py:2220
msgid "Activity type"
msgstr "Type d'activité"
-#: models.py:2166
+#: models.py:2221
msgid "Material"
msgstr "Matériau"
-#: models.py:2168
+#: models.py:2223
msgid "Conservatory state"
msgstr "État de conservation"
-#: models.py:2169
+#: models.py:2224
msgid "Container type"
msgstr "Type de contenant"
-#: models.py:2170
+#: models.py:2225
msgid "Preservation type"
msgstr "Type de conservation"
-#: models.py:2171
+#: models.py:2226
msgid "Object type"
msgstr "Type d'objet"
-#: models.py:2172
+#: models.py:2227
msgid "Integrity type"
msgstr "Type d'intégrité"
-#: models.py:2174
+#: models.py:2229
msgid "Remarkability type"
msgstr "Type de remarquabilité"
-#: models.py:2175
+#: models.py:2230
msgid "Batch type"
msgstr "Type de lot"
-#: models.py:2177
+#: models.py:2232
msgid "Identification type"
msgstr "Type d'identification"
-#: models.py:2179
+#: models.py:2234
msgid "Context record relation type"
msgstr "Type de relations entre Unités d'Enregistrement"
-#: models.py:2180 models.py:3104
+#: models.py:2235 models.py:3159
msgid "Spatial reference system"
msgstr "Système de référence spatiale"
-#: models.py:2181 models.py:2932
+#: models.py:2236 models.py:2987
msgid "Support type"
msgstr "Type de support"
-#: models.py:2182 models.py:2573
+#: models.py:2237 models.py:2628
msgid "Title type"
msgstr "Type de titre"
-#: models.py:2188
+#: models.py:2243
msgid "Integer"
msgstr "Entier"
-#: models.py:2189
+#: models.py:2244
msgid "Float"
msgstr "Nombre à virgule"
-#: models.py:2190
+#: models.py:2245
msgid "String"
msgstr "Chaîne de caractères"
-#: models.py:2191 templates/sheet_ope.html:86
+#: models.py:2246 templates/sheet_ope.html:86
msgid "Date"
msgstr "Date"
-#: models.py:2193 templates/sheet_ope.html:61 templates/sheet_ope.html.py:83
+#: models.py:2248 templates/sheet_ope.html:61 templates/sheet_ope.html.py:83
#: templates/ishtar/dashboards/dashboard_main_detail.html:126
msgid "Year"
msgstr "Année"
-#: models.py:2194
+#: models.py:2249
msgid "String to boolean"
msgstr "Chaîne de caractères vers booléen"
-#: models.py:2195
+#: models.py:2250
msgctxt "filesystem"
msgid "File"
msgstr "Fichier"
-#: models.py:2196
+#: models.py:2251
msgid "Unknow type"
msgstr "Type inconnu"
-#: models.py:2212
+#: models.py:2267
msgid "4 digit year. e.g.: \"2015\""
msgstr "Année sur 4 chiffres. Exemple : « 2015 »"
-#: models.py:2213
+#: models.py:2268
msgid "4 digit year/month/day. e.g.: \"2015/02/04\""
msgstr "Année sur 4 chiffres/mois/jour. Exemple : « 2015/02/04 »"
-#: models.py:2214
+#: models.py:2269
msgid "Day/month/4 digit year. e.g.: \"04/02/2015\""
msgstr "Jour/mois/année sur 4 chiffres. Exemple : « 04/02/2015 »"
-#: models.py:2224
+#: models.py:2279
msgid "Options"
msgstr "Options"
-#: models.py:2226
+#: models.py:2281
msgid "Split character(s)"
msgstr "Caractère(s) de séparation"
-#: models.py:2230
+#: models.py:2285
msgid "Importer - Formater type"
msgstr "Importeur - Type de mise en forme"
-#: models.py:2231
+#: models.py:2286
msgid "Importer - Formater types"
msgstr "Importeur - Types de mise en forme"
-#: models.py:2283 templates/ishtar/dashboards/dashboard_main_detail.html:63
+#: models.py:2338 templates/ishtar/dashboards/dashboard_main_detail.html:63
msgid "Created"
msgstr "Créé"
-#: models.py:2284
+#: models.py:2339
msgid "Analyse in progress"
msgstr "Analyse en cours"
-#: models.py:2285
+#: models.py:2340
msgid "Analysed"
msgstr "Analysé"
-#: models.py:2286
+#: models.py:2341
msgid "Import pending"
msgstr "Import en attente"
-#: models.py:2287
+#: models.py:2342
msgid "Import in progress"
msgstr "Import en cours"
-#: models.py:2288
+#: models.py:2343
msgid "Finished with errors"
msgstr "Terminé avec des erreurs"
-#: models.py:2289
+#: models.py:2344
msgid "Finished"
msgstr "Terminé"
-#: models.py:2290
+#: models.py:2345
msgid "Archived"
msgstr "Archivé"
-#: models.py:2305
+#: models.py:2360
msgid "Imported file"
msgstr "Fichier importé"
-#: models.py:2307
+#: models.py:2362
msgid "Associated images (zip file)"
msgstr "Images associées (fichier zip)"
-#: models.py:2309
+#: models.py:2364
msgid "Encoding"
msgstr "Codage"
-#: models.py:2311
+#: models.py:2366
msgid "Skip lines"
msgstr "Nombre de lignes d'entête"
-#: models.py:2312 templates/ishtar/import_list.html:51
+#: models.py:2367 templates/ishtar/import_list.html:51
msgid "Error file"
msgstr "Fichier erreur"
-#: models.py:2315
+#: models.py:2370
msgid "Result file"
msgstr "Fichier résultant"
-#: models.py:2318 templates/ishtar/import_list.html:57
+#: models.py:2373 templates/ishtar/import_list.html:57
msgid "Match file"
msgstr "Fichier de correspondance"
-#: models.py:2324
+#: models.py:2379
msgid "Conservative import"
msgstr "Import conservateur"
-#: models.py:2328
+#: models.py:2383
msgid "End date"
msgstr "Date de fin"
-#: models.py:2331
+#: models.py:2386
msgid "Remaining seconds"
msgstr "Secondes restantes"
-#: models.py:2334
+#: models.py:2389
msgid "Import"
msgstr "Import"
-#: models.py:2363
+#: models.py:2418
msgid "Analyse"
msgstr "Analyser"
-#: models.py:2365 models.py:2368
+#: models.py:2420 models.py:2423
msgid "Re-analyse"
msgstr "Analyser de nouveau "
-#: models.py:2366
+#: models.py:2421
msgid "Launch import"
msgstr "Lancer l'import"
-#: models.py:2369
+#: models.py:2424
msgid "Re-import"
msgstr "Ré-importer"
-#: models.py:2370
+#: models.py:2425
msgid "Archive"
msgstr "Archiver"
-#: models.py:2372
+#: models.py:2427
msgid "Unarchive"
msgstr "Désarchiver"
-#: models.py:2373 widgets.py:184 templates/ishtar/form_delete.html:11
+#: models.py:2428 widgets.py:184 templates/ishtar/form_delete.html:11
msgid "Delete"
msgstr "Supprimer"
-#: models.py:2514
+#: models.py:2569
msgid "Organizations"
msgstr "Organisations"
-#: models.py:2516
+#: models.py:2571
msgid "Can view all Organizations"
msgstr "Peut voir toutes les Organisations"
-#: models.py:2517
+#: models.py:2572
msgid "Can view own Organization"
msgstr "Peut voir sa propre Organisation"
-#: models.py:2518
+#: models.py:2573
msgid "Can add own Organization"
msgstr "Peut ajouter sa propre Organisation"
-#: models.py:2520
+#: models.py:2575
msgid "Can change own Organization"
msgstr "Peut modifier sa propre Organisation"
-#: models.py:2522
+#: models.py:2577
msgid "Can delete own Organization"
msgstr "Peut supprimer sa propre Organisation"
-#: models.py:2557
+#: models.py:2612
msgid "Groups"
msgstr "Groupes"
-#: models.py:2562
+#: models.py:2617
msgid "Person types"
msgstr "Types de personne"
-#: models.py:2574
+#: models.py:2629
msgid "Title types"
msgstr "Types de titre"
-#: models.py:2583
+#: models.py:2638
msgid "Mr"
msgstr "M."
-#: models.py:2584
+#: models.py:2639
msgid "Miss"
msgstr "Mlle"
-#: models.py:2585
+#: models.py:2640
msgid "Mr and Mrs"
msgstr "M. et Mme"
-#: models.py:2586
+#: models.py:2641
msgid "Mrs"
msgstr "Mme"
-#: models.py:2587
+#: models.py:2642
msgid "Doctor"
msgstr "Dr."
-#: models.py:2620
+#: models.py:2675
msgid "Contact type"
msgstr "Type de contact"
-#: models.py:2623 models.py:2687
+#: models.py:2678 models.py:2742
msgid "Types"
msgstr "Types"
-#: models.py:2626
+#: models.py:2681
msgid "Is attached to"
msgstr "Est rattaché à"
-#: models.py:2631
+#: models.py:2686
msgid "Persons"
msgstr "Personnes"
-#: models.py:2633
+#: models.py:2688
msgid "Can view all Persons"
msgstr "Peut voir toutes les Personnes"
-#: models.py:2634
+#: models.py:2689
msgid "Can view own Person"
msgstr "Peut voir sa propre Personne"
-#: models.py:2635
+#: models.py:2690
msgid "Can add own Person"
msgstr "Peut ajouter sa propre Personne"
-#: models.py:2636
+#: models.py:2691
msgid "Can change own Person"
msgstr "Peut modifier sa propre Personne"
-#: models.py:2637
+#: models.py:2692
msgid "Can delete own Person"
msgstr "Peut supprimer sa propre Personne"
-#: models.py:2826
+#: models.py:2881
msgid "Advanced shortcut menu"
msgstr "Menu de raccourci (avancé)"
-#: models.py:2829
+#: models.py:2884
msgid "Ishtar user"
msgstr "Utilisateur d'Ishtar"
-#: models.py:2830
+#: models.py:2885
msgid "Ishtar users"
msgstr "Utilisateurs d'Ishtar"
-#: models.py:2870
+#: models.py:2925
msgid "To modify the password use the form in Auth > User"
msgstr ""
"Pour modifier le mot de passe, utilisez le formulaire dans Authentification "
"> Utilisateurs"
-#: models.py:2878
+#: models.py:2933
msgid "Author types"
msgstr "Types d'auteur"
-#: models.py:2895
+#: models.py:2950
msgid "Can view all Authors"
msgstr "Peut voir tous les Auteurs"
-#: models.py:2897
+#: models.py:2952
msgid "Can view own Author"
msgstr "Peut voir son propre Auteur"
-#: models.py:2899
+#: models.py:2954
msgid "Can add own Author"
msgstr "Peut ajouter son propre Auteur"
-#: models.py:2901
+#: models.py:2956
msgid "Can change own Author"
msgstr "Peut modifier son propre Auteur"
-#: models.py:2903
+#: models.py:2958
msgid "Can delete own Author"
msgstr "Peut supprimer son propre Auteur"
-#: models.py:2924
+#: models.py:2979
msgid "Source types"
msgstr "Types de document"
-#: models.py:2933
+#: models.py:2988
msgid "Support types"
msgstr "Types de support"
-#: models.py:2940
+#: models.py:2995
msgid "Format type"
msgstr "Type de format"
-#: models.py:2941
+#: models.py:2996
msgid "Format types"
msgstr "Types de format"
-#: models.py:2949
+#: models.py:3004
msgid "External ID"
msgstr "Identifiant externe"
-#: models.py:2952
+#: models.py:3007
msgid "Support"
msgstr "Support"
-#: models.py:2956
+#: models.py:3011
msgid "Scale"
msgstr "Échelle"
-#: models.py:2970
+#: models.py:3025
msgid "Item number"
msgstr "Numéro d'élément"
-#: models.py:2971
+#: models.py:3026
msgid "Ref."
msgstr "Réf."
-#: models.py:2974
+#: models.py:3029
msgid "Internal ref."
msgstr "Réf. interne"
-#: models.py:3017
+#: models.py:3072
msgid "Surface (m2)"
msgstr "Surface (m2)"
-#: models.py:3018 templates/sheet_ope.html:46 templates/sheet_ope.html.py:107
+#: models.py:3073 templates/sheet_ope.html:46 templates/sheet_ope.html.py:107
msgid "Localisation"
msgstr "Localisation"
-#: models.py:3043
+#: models.py:3098
msgid "Is preventive"
msgstr "Est du préventif"
-#: models.py:3047
+#: models.py:3102
msgid "Operation types"
msgstr "Types d'opération"
-#: models.py:3076
+#: models.py:3131
msgid "Preventive"
msgstr "Préventif"
-#: models.py:3077
+#: models.py:3132
msgid "Research"
msgstr "Programmé"
-#: models.py:3100
+#: models.py:3155
msgid "Authority name"
msgstr "Registre"
-#: models.py:3101
+#: models.py:3156
msgid "Authority SRID"
msgstr "SRID"
-#: models.py:3105
+#: models.py:3160
msgid "Spatial reference systems"
msgstr "Systèmes de référence spatiale"
@@ -1563,120 +1584,112 @@ msgstr " (...)"
msgid "Load another random image?"
msgstr "Charger une autre image au hasard ?"
-#: views.py:119
+#: views.py:121
msgid "New person"
msgstr "Ajouter une personne"
-#: views.py:127
+#: views.py:129
msgid "Person modification"
msgstr "Modifier une personne"
-#: views.py:142
+#: views.py:144
msgid "Person deletion"
msgstr "Supprimer une personne"
-#: views.py:153
+#: views.py:155
msgid "New organization"
msgstr "Ajouter une organisation"
-#: views.py:160
+#: views.py:162
msgid "Organization modification"
msgstr "Modifier une organisation"
-#: views.py:176
+#: views.py:178
msgid "Organization deletion"
msgstr "Supprimer une organisation"
-#: views.py:183
+#: views.py:185
msgid "Account management"
msgstr "Gérer les comptes"
-#: views.py:189
+#: views.py:191
msgid "Account deletion"
msgstr "Supprimer un compte"
-#: views.py:251
+#: views.py:253
msgid "Archaeological file"
msgstr "Dossier"
-#: views.py:252
+#: views.py:254
msgid "Operation"
msgstr "Opération"
-#: views.py:254
+#: views.py:256
msgid "Context record"
msgstr "Unité d'Enregistrement"
-#: views.py:256
+#: views.py:258
msgid "Find"
msgstr "Mobilier"
-#: views.py:258
+#: views.py:260
msgid "Treatment request"
msgstr "Demande de traitement"
-#: views.py:259
+#: views.py:261
msgid "Treatment"
msgstr "Traitement"
-#: views.py:1387 views.py:1430
+#: views.py:1376 views.py:1419
msgid "Operation not permitted."
msgstr "Opération non permise."
-#: views.py:1389
+#: views.py:1378
#, python-format
msgid "New %s"
msgstr "Nouveau %s"
-#: views.py:1448 views.py:1501
+#: views.py:1437 views.py:1496
msgid "Archaeological files"
msgstr "Dossiers"
-#: views.py:1449 views.py:1505
-msgid "Operations"
-msgstr "Opérations"
-
-#: views.py:1451 views.py:1509
-msgid "Context records"
-msgstr "Unités d'Enregistrement"
-
-#: views.py:1453 views.py:1512
+#: views.py:1442 views.py:1507
msgid "Finds"
msgstr "Mobilier"
-#: views.py:1455 views.py:1517
+#: views.py:1444 views.py:1512
msgid "Treatment requests"
msgstr "Demandes de traitement"
-#: views.py:1456 views.py:1521
+#: views.py:1445 views.py:1518
msgid "Treatments"
msgstr "Traitements"
-#: views.py:1719 templates/ishtar/import_list.html:47
+#: views.py:1715 templates/ishtar/import_list.html:47
msgid "Link unmatched items"
msgstr "Associer les éléments non rapprochés"
-#: views.py:1734
+#: views.py:1730
msgid "Delete import"
msgstr "Supprimer un import"
-#: views.py:1773
+#: views.py:1769
msgid "Merge persons"
msgstr "Fusionner des personnes"
-#: views.py:1797
+#: views.py:1793
msgid "Select the main person"
msgstr "Choisir la personne principale"
-#: views.py:1806
+#: views.py:1802
msgid "Merge organization"
msgstr "Fusionner des organisations"
-#: views.py:1816
+#: views.py:1812
msgid "Select the main organization"
msgstr "Sélectionner l'organisation principale"
-#: views.py:1856 views.py:1872
+#: views.py:1852 views.py:1868
msgid "Corporation manager"
msgstr "Représentant de la personne morale"
diff --git a/version.py b/version.py
index d39ed2187..32f59cc6b 100644
--- a/version.py
+++ b/version.py
@@ -1,4 +1,4 @@
-VERSION = (0, 99, 18)
+VERSION = (0, 99, 19)
def get_version():