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,  | 
