diff options
-rw-r--r-- | archaeological_finds/forms.py | 25 | ||||
-rw-r--r-- | archaeological_finds/migrations/0122_conservatory_states_m2m.py | 24 | ||||
-rw-r--r-- | archaeological_finds/migrations/0123_remove_old_conservatory_state.py | 56 | ||||
-rw-r--r-- | archaeological_finds/models_finds.py | 19 | ||||
-rw-r--r-- | archaeological_finds/templates/ishtar/sheet_find.html | 4 | ||||
-rw-r--r-- | archaeological_finds/templates/ishtar/sheet_museum_find.html | 4 | ||||
-rw-r--r-- | archaeological_finds/tests.py | 2 | ||||
-rw-r--r-- | archaeological_finds/tests/importer-group.zip | bin | 79390 -> 9732 bytes | |||
-rw-r--r-- | archaeological_finds/wizards.py | 2 | ||||
-rw-r--r-- | ishtar_common/fixtures/initial_importtypes-fr.json | 14 | ||||
-rw-r--r-- | ishtar_common/views_item.py | 2 |
11 files changed, 119 insertions, 33 deletions
diff --git a/archaeological_finds/forms.py b/archaeological_finds/forms.py index 7e217d06c..5dc6910ea 100644 --- a/archaeological_finds/forms.py +++ b/archaeological_finds/forms.py @@ -919,7 +919,7 @@ class QAFindFormMulti(QAForm): "qa_alteration_causes": models.AlterationCauseType, "qa_checked_type": models.CheckedType, "qa_period": Period, - "qa_conservatory_state": models.ConservatoryState, + "qa_conservatory_states": models.ConservatoryState, "qa_treatment_emergency": models.TreatmentEmergencyType, "qa_museum_collection_entry_mode": models.CollectionEntryModeType, "qa_museum_owner_institution": Organization, @@ -940,7 +940,6 @@ class QAFindFormMulti(QAForm): "qa_manufacturing_place", "qa_checked_type", "qa_check_date", - "qa_conservatory_state", "qa_treatment_emergency", "qa_appraisal_date", "qa_insurance_value", # 'qa_collection', @@ -1123,9 +1122,7 @@ class QAFindFormMulti(QAForm): qa_alteration_causes = widgets.Select2MultipleField( label=_("Alteration cause"), required=False ) - qa_conservatory_state = forms.ChoiceField( - label=_("Conservatory state"), required=False, choices=[] - ) + qa_conservatory_states = widgets.Select2MultipleField(label=_("Conservatory states"), required=False) qa_treatment_emergency = forms.ChoiceField( label=_("Treatment emergency"), choices=[], required=False ) @@ -1176,7 +1173,7 @@ class QAFindFormMulti(QAForm): FieldType("qa_alteration_causes", models.AlterationCauseType, is_multiple=True), FieldType("qa_remarkabilities", models.RemarkabilityType, is_multiple=True), FieldType("qa_checked_type", models.CheckedType), - FieldType("qa_conservatory_state", models.ConservatoryState), + FieldType("qa_conservatory_states", models.ConservatoryState, is_multiple=True), FieldType("qa_treatment_emergency", models.TreatmentEmergencyType), FieldType("qa_period", Period, is_multiple=True), FieldType("qa_museum_collection_entry_mode", models.CollectionEntryModeType), @@ -1475,6 +1472,7 @@ class PreservationForm(CustomForm, ManageOldType): "preservation_to_consider", "integritie", "remarkabilitie", + "conservatory_state", ] associated_models = { "alteration": models.AlterationType, @@ -1497,8 +1495,11 @@ class PreservationForm(CustomForm, ManageOldType): widget=widgets.Select2Multiple, required=False, ) - conservatory_state = forms.ChoiceField( - label=_("Conservatory state"), choices=[], required=False + conservatory_state = forms.MultipleChoiceField( + label=_("Conservatory states"), + choices=[], + widget=widgets.Select2Multiple, + required=False, ) alteration = forms.MultipleChoiceField( label=_("Alteration"), @@ -1531,13 +1532,13 @@ class PreservationForm(CustomForm, ManageOldType): ) TYPES = [ - FieldType("conservatory_state", models.ConservatoryState), FieldType("treatment_emergency", models.TreatmentEmergencyType), FieldType("preservation_to_consider", models.TreatmentType, True), FieldType("alteration", models.AlterationType, True), FieldType("alteration_cause", models.AlterationCauseType, True), FieldType("integritie", models.IntegrityType, is_multiple=True), FieldType("remarkabilitie", models.RemarkabilityType, is_multiple=True), + FieldType("conservatory_state", models.ConservatoryState, is_multiple=True), ] def __init__(self, *args, **kwargs): @@ -1651,7 +1652,7 @@ class FindSelect(GeoItemSelect, PeriodSelect): ( "integrities", "remarkabilities", - "conservatory_state", + "conservatory_states", "conservatory_comment", "alterations", "alteration_causes", @@ -1984,7 +1985,7 @@ class FindSelect(GeoItemSelect, PeriodSelect): ) integrities = forms.ChoiceField(label=_("Integrity"), choices=[]) remarkabilities = forms.ChoiceField(label=_("Remarkability"), choices=[]) - conservatory_state = forms.ChoiceField(label=_("Conservatory state"), choices=[]) + conservatory_states = forms.ChoiceField(label=_("Conservatory states"), choices=[]) conservatory_comment = forms.CharField(label=_("Conservatory comment")) alterations = forms.ChoiceField(label=_("Alteration"), choices=[]) alteration_causes = forms.ChoiceField(label=_("Alteration cause"), choices=[]) @@ -2088,7 +2089,7 @@ class FindSelect(GeoItemSelect, PeriodSelect): museum_purchase_price = forms.CharField(label=_("Museum - Purchase price")) TYPES = PeriodSelect.TYPES + [ - FieldType("conservatory_state", models.ConservatoryState), + FieldType("conservatory_states", models.ConservatoryState), FieldType("base_finds__batch", models.BatchType), FieldType("preservation_to_considers", models.TreatmentType), FieldType("integrities", models.IntegrityType), diff --git a/archaeological_finds/migrations/0122_conservatory_states_m2m.py b/archaeological_finds/migrations/0122_conservatory_states_m2m.py new file mode 100644 index 000000000..85fd4163c --- /dev/null +++ b/archaeological_finds/migrations/0122_conservatory_states_m2m.py @@ -0,0 +1,24 @@ +# Generated by Django 2.2.24 on 2024-04-18 14:07 + +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ('archaeological_finds', '0121_fix_bad_treatment_types_states'), + ] + + operations = [ + migrations.AddField( + model_name='find', + name='conservatory_states', + field=models.ManyToManyField(blank=True, to='archaeological_finds.ConservatoryState', verbose_name='Conservatory states'), + ), + migrations.AlterField( + model_name='find', + name='conservatory_state', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='finds_previous', to='archaeological_finds.ConservatoryState', verbose_name='Conservatory state'), + ), + ] diff --git a/archaeological_finds/migrations/0123_remove_old_conservatory_state.py b/archaeological_finds/migrations/0123_remove_old_conservatory_state.py new file mode 100644 index 000000000..91a6fd4e6 --- /dev/null +++ b/archaeological_finds/migrations/0123_remove_old_conservatory_state.py @@ -0,0 +1,56 @@ +# Generated by Django 2.2.24 on 2024-04-18 14:24 + +import sys +from django.db import migrations, models +from ishtar_common.utils import BColors + + +def migrate_conservatory_state(apps, __): + Find = apps.get_model("archaeological_finds", "Find") + q = Find.objects.filter(conservatory_state__isnull=False) + sys.stdout.write("\n") + total = q.count() + for idx, find in enumerate(q.all()): + sys.stdout.write(f"\r{BColors.OKBLUE}→ Migration {idx}/{total}{BColors.ENDC}") + find.conservatory_states.add(find.conservatory_state) + print(BColors.format("OKGREEN", f"\r* Conservatory state changed for {q.count()} find(s).")) + + # migrate importers + ImporterDefault = apps.get_model("ishtar_common", "ImporterDefault") + for default in ImporterDefault.objects.filter(target__contains='conservatory_state').all(): + default.target = default.target.replace("conservatory_state", "conservatory_states") + default.save() + + ImporterDuplicateField = apps.get_model("ishtar_common", "ImporterDuplicateField") + for dup in ImporterDuplicateField.objects.filter(field_name__contains='conservatory_state').all(): + dup.field_name = dup.field_name.replace("conservatory_state", "conservatory_states") + dup.save() + + ImportTarget = apps.get_model("ishtar_common", "ImportTarget") + for targ in ImportTarget.objects.filter(target__contains='conservatory_state').all(): + targ.target = targ.target.replace("conservatory_state", "conservatory_states") + targ.save() + + FormaterType = apps.get_model("ishtar_common", "FormaterType") + for f in FormaterType.objects.filter(options__contains='ConservatoryState').all(): + f.many_split = '&' + f.save() + + +class Migration(migrations.Migration): + + dependencies = [ + ('archaeological_finds', '0122_conservatory_states_m2m'), + ] + + operations = [ + migrations.RunPython(migrate_conservatory_state), + migrations.RemoveField( + model_name='find', + name='conservatory_state', + ), + migrations.RemoveField( + model_name='historicalfind', + name='conservatory_state', + ), + ] diff --git a/archaeological_finds/models_finds.py b/archaeological_finds/models_finds.py index 977a3ff3b..7e153c6b5 100644 --- a/archaeological_finds/models_finds.py +++ b/archaeological_finds/models_finds.py @@ -1175,7 +1175,7 @@ class Find( ("material_types__label", _("Material type")), ("object_types__label", _("Object type")), ("preservation_to_considers__label", _("Recommended treatments")), - ("conservatory_state__label", _("Conservatory state")), + ("conservatory_states__label", _("Conservatory states")), ("integrities__label", _("Integrity")), ("remarkabilities__label", _("Remarkability")), ("communicabilities__label", _("Communicability")), @@ -1343,9 +1343,9 @@ class Find( pgettext_lazy("key for text search", "recommended-treatments"), "preservation_to_considers__label__iexact", ), - "conservatory_state": SearchAltName( + "conservatory_states": SearchAltName( pgettext_lazy("key for text search", "conservatory"), - "conservatory_state__label__iexact", + "conservatory_states__label__iexact", ), "integrities": SearchAltName( pgettext_lazy("key for text search", "integrity"), @@ -1922,6 +1922,7 @@ class Find( "technical_processes", "datings", "cultural_attributions", + "conservatory_states", "object_types", "functional_areas", "technical_areas", @@ -1947,6 +1948,7 @@ class Find( "preservation_to_considers", "alterations", "alteration_causes", + "conservatory_states", ] CACHED_LABELS = [ "cache_complete_museum_id", @@ -1963,6 +1965,7 @@ class Find( SERIALIZE_PROPERTIES = MainItem.SERIALIZE_PROPERTIES + [ "administrative_index", "integrities_count", + "conservatory_states_count", "remarkabilities_count", "cultural_attributions_count", "documents_count", @@ -2218,12 +2221,10 @@ class Find( museum_observed_quantity = models.PositiveSmallIntegerField(_("Observed quantity"), blank=True, null=True) # preservation module - conservatory_state = models.ForeignKey( + conservatory_states = models.ManyToManyField( ConservatoryState, - verbose_name=_("Conservatory state"), + verbose_name=_("Conservatory states"), blank=True, - null=True, - on_delete=models.SET_NULL, ) conservatory_comment = models.TextField( _("Conservatory comment"), blank=True, default="" @@ -2692,6 +2693,10 @@ class Find( return self.integrities.count() @property + def conservatory_states_count(self): + return self.conservatory_states.count() + + @property def remarkabilities_count(self): return self.remarkabilities.count() diff --git a/archaeological_finds/templates/ishtar/sheet_find.html b/archaeological_finds/templates/ishtar/sheet_find.html index 5adcce68a..6af22839f 100644 --- a/archaeological_finds/templates/ishtar/sheet_find.html +++ b/archaeological_finds/templates/ishtar/sheet_find.html @@ -312,12 +312,12 @@ </div> {% endif %} {% endcomment %} - {% if item.integrities_count or item.remarkabilities_count or item.conservatory_state or item.conservatory_comment or item.alterations.count or item.alteration_causes.count or item.preservation_to_considers.count or item.appraisal_date or item.treatment_emergency or item.insurance_value or item.estimated_value %} + {% if item.integrities_count or item.remarkabilities_count or item.conservatory_states_count or item.conservatory_comment or item.alterations.count or item.alteration_causes.count or item.preservation_to_considers.count or item.appraisal_date or item.treatment_emergency or item.insurance_value or item.estimated_value %} <h3>{% trans "Preservation" %}</h3> <div class='row'> {% field_flex_multiple_obj "Integrity" item 'integrities' %} {% field_flex_multiple_obj "Remarkability" item 'remarkabilities' %} - {% field_flex "Conservatory state" item.conservatory_state %} + {% field_flex_multiple_obj _("Conservatory states") item 'conservatory_states' %} {% field_flex_multiple_obj "Alteration" item 'alterations' %} {% field_flex_multiple_obj "Alteration cause" item 'alteration_causes' %} {% field_flex_multiple_obj "Recommended treatments" item 'preservation_to_considers' %} diff --git a/archaeological_finds/templates/ishtar/sheet_museum_find.html b/archaeological_finds/templates/ishtar/sheet_museum_find.html index 4c3317ba2..4006973d7 100644 --- a/archaeological_finds/templates/ishtar/sheet_museum_find.html +++ b/archaeological_finds/templates/ishtar/sheet_museum_find.html @@ -307,12 +307,12 @@ </div> {% endif %} {% endcomment %} - {% if item.integrities_count or item.remarkabilities_count or item.conservatory_state or item.conservatory_comment or item.alterations.count or item.alteration_causes.count or item.preservation_to_considers.count or item.appraisal_date or item.treatment_emergency or item.insurance_value or item.estimated_value %} + {% if item.integrities_count or item.remarkabilities_count or item.conservatory_states_count or item.conservatory_comment or item.alterations.count or item.alteration_causes.count or item.preservation_to_considers.count or item.appraisal_date or item.treatment_emergency or item.insurance_value or item.estimated_value %} <h3>{% trans "Preservation" %}</h3> <div class='row'> {% field_flex_multiple_obj "Integrity" item 'integrities' %} {% field_flex_multiple_obj "Remarkability" item 'remarkabilities' %} - {% field_flex "Conservatory state" item.conservatory_state %} + {% field_flex_multiple_obj _("Conservatory states") item 'conservatory_states' %} {% field_flex_multiple_obj "Alteration" item 'alterations' %} {% field_flex_multiple_obj "Alteration cause" item 'alteration_causes' %} {% field_flex_multiple_obj "Recommended treatments" item 'preservation_to_considers' %} diff --git a/archaeological_finds/tests.py b/archaeological_finds/tests.py index c73aff9ae..45f178856 100644 --- a/archaeological_finds/tests.py +++ b/archaeological_finds/tests.py @@ -1493,7 +1493,7 @@ class FindSearchTest(FindInit, TestCase, SearchText): cs3 = models.ConservatoryState.objects.all()[2] cs3.parent = cs1 cs3.save() - find.conservatory_state = cs2 + find.conservatory_states.add(cs2) find.save() search = {"search_vector": f'conservatory="{cs2.name}"'} diff --git a/archaeological_finds/tests/importer-group.zip b/archaeological_finds/tests/importer-group.zip Binary files differindex dc581c173..e33655f25 100644 --- a/archaeological_finds/tests/importer-group.zip +++ b/archaeological_finds/tests/importer-group.zip diff --git a/archaeological_finds/wizards.py b/archaeological_finds/wizards.py index 5bf321baf..91795d60e 100644 --- a/archaeological_finds/wizards.py +++ b/archaeological_finds/wizards.py @@ -124,7 +124,7 @@ class FindDeletionWizard(MultipleDeletionWizard): "find_number", "object_types", "description", - "conservatory_state", + "conservatory_states", "mark", "preservation_to_considers", "integrities", diff --git a/ishtar_common/fixtures/initial_importtypes-fr.json b/ishtar_common/fixtures/initial_importtypes-fr.json index bf897ebda..8cf53a65e 100644 --- a/ishtar_common/fixtures/initial_importtypes-fr.json +++ b/ishtar_common/fixtures/initial_importtypes-fr.json @@ -4167,7 +4167,7 @@ "fields": { "formater_type": "TypeFormater", "options": "archaeological_finds.models.ConservatoryState", - "many_split": "" + "many_split": "&" } }, { @@ -6339,11 +6339,11 @@ "mcc-mobilier", 17 ], - "target": "conservatory_state", + "target": "conservatory_states", "formater_type": [ "TypeFormater", "archaeological_finds.models.ConservatoryState", - "" + "&" ], "force_new": false, "concat": false, @@ -8182,11 +8182,11 @@ "ishtar-finds", 12 ], - "target": "conservatory_state", + "target": "conservatory_states", "formater_type": [ "TypeFormater", "archaeological_finds.models.ConservatoryState", - "" + "&" ], "force_new": false, "concat": false, @@ -9759,11 +9759,11 @@ "inventory_combo", 22 ], - "target": "conservatory_state", + "target": "conservatory_states", "formater_type": [ "TypeFormater", "archaeological_finds.models.ConservatoryState", - "" + "&" ], "force_new": false, "concat": false, diff --git a/ishtar_common/views_item.py b/ishtar_common/views_item.py index 6865f3932..270337ad1 100644 --- a/ishtar_common/views_item.py +++ b/ishtar_common/views_item.py @@ -560,7 +560,7 @@ def revert_item(model): HIERARCHIC_LEVELS = 5 LIST_FIELDS = { # key: hierarchic depth - "conservatory_state": HIERARCHIC_LEVELS, + "conservatory_states": HIERARCHIC_LEVELS, "identification": HIERARCHIC_LEVELS, "material_types": HIERARCHIC_LEVELS, "material_type": HIERARCHIC_LEVELS, |