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