diff options
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 %} – {% 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(): |