From 7a445debd9237c750b6a1b7d899eb9c384edb6ab Mon Sep 17 00:00:00 2001 From: Étienne Loks Date: Mon, 30 Jan 2023 17:32:49 +0100 Subject: Add "created" field on main items in order to facilitate queries --- .../migrations/0224_auto_20230127_1503.py | 68 ---------------- .../migrations/0224_auto_20230130_1604.py | 94 ++++++++++++++++++++++ ishtar_common/migrations/0225_migrate_created.py | 25 ++++++ ishtar_common/models_common.py | 1 + .../ishtar/blocks/sheet_creation_section.html | 4 +- ishtar_common/utils_migrations.py | 15 ++++ ishtar_common/views_item.py | 2 +- ishtar_common/wizards.py | 1 + 8 files changed, 139 insertions(+), 71 deletions(-) delete mode 100644 ishtar_common/migrations/0224_auto_20230127_1503.py create mode 100644 ishtar_common/migrations/0224_auto_20230130_1604.py create mode 100644 ishtar_common/migrations/0225_migrate_created.py (limited to 'ishtar_common') diff --git a/ishtar_common/migrations/0224_auto_20230127_1503.py b/ishtar_common/migrations/0224_auto_20230127_1503.py deleted file mode 100644 index 736e2a88d..000000000 --- a/ishtar_common/migrations/0224_auto_20230127_1503.py +++ /dev/null @@ -1,68 +0,0 @@ -# Generated by Django 2.2.24 on 2023-01-27 15:03 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('ishtar_common', '0223_auto_20230120_1124'), - ] - - operations = [ - migrations.AddField( - model_name='document', - name='cached_label', - field=models.TextField(blank=True, db_index=True, default='', help_text='Generated automatically - do not edit', verbose_name='Cached name'), - ), - migrations.AddField( - model_name='ishtarsiteprofile', - name='basefind_cached_label', - field=models.TextField(blank=True, default='', help_text='Formula to manage cached label. If not set a default is provided', verbose_name='Base find cached label'), - ), - migrations.AddField( - model_name='ishtarsiteprofile', - name='container_cached_label', - field=models.TextField(blank=True, default='', help_text='Formula to manage cached label. If not set a default is provided', verbose_name='Container cached label'), - ), - migrations.AddField( - model_name='ishtarsiteprofile', - name='contextrecord_cached_label', - field=models.TextField(blank=True, default='', help_text='Formula to manage cached label. If not set a default is provided', verbose_name='Context record cached label'), - ), - migrations.AddField( - model_name='ishtarsiteprofile', - name='document_cached_label', - field=models.TextField(blank=True, default='', help_text='Formula to manage cached label. If not set a default is provided', verbose_name='Document cached label'), - ), - migrations.AddField( - model_name='ishtarsiteprofile', - name='file_cached_label', - field=models.TextField(blank=True, default='', help_text='Formula to manage cached label. If not set a default is provided', verbose_name='File cached label'), - ), - migrations.AddField( - model_name='ishtarsiteprofile', - name='find_cached_label', - field=models.TextField(blank=True, default='', help_text='Formula to manage cached label. If not set a default is provided', verbose_name='Find cached label'), - ), - migrations.AddField( - model_name='ishtarsiteprofile', - name='operation_cached_label', - field=models.TextField(blank=True, default='', help_text='Formula to manage cached label. If not set a default is provided', verbose_name='Operation cached label'), - ), - migrations.AddField( - model_name='ishtarsiteprofile', - name='parcel_cached_label', - field=models.TextField(blank=True, default='', help_text='Formula to manage cached label. If not set a default is provided', verbose_name='Parcel cached label'), - ), - migrations.AddField( - model_name='ishtarsiteprofile', - name='site_cached_label', - field=models.TextField(blank=True, default='', help_text='Formula to manage cached label. If not set a default is provided', verbose_name='Site cached label'), - ), - migrations.AddField( - model_name='ishtarsiteprofile', - name='warehouse_cached_label', - field=models.TextField(blank=True, default='', help_text='Formula to manage cached label. If not set a default is provided', verbose_name='Warehouse cached label'), - ), - ] diff --git a/ishtar_common/migrations/0224_auto_20230130_1604.py b/ishtar_common/migrations/0224_auto_20230130_1604.py new file mode 100644 index 000000000..524caae16 --- /dev/null +++ b/ishtar_common/migrations/0224_auto_20230130_1604.py @@ -0,0 +1,94 @@ +# Generated by Django 2.2.24 on 2023-01-30 16:04 + +import datetime +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('ishtar_common', '0223_auto_20230120_1124'), + ] + + operations = [ + migrations.AddField( + model_name='document', + name='cached_label', + field=models.TextField(blank=True, db_index=True, default='', help_text='Generated automatically - do not edit', verbose_name='Cached name'), + ), + migrations.AddField( + model_name='document', + name='created', + field=models.DateTimeField(blank=True, default=datetime.datetime.now), + ), + migrations.AddField( + model_name='historicalorganization', + name='created', + field=models.DateTimeField(blank=True, default=datetime.datetime.now), + ), + migrations.AddField( + model_name='historicalperson', + name='created', + field=models.DateTimeField(blank=True, default=datetime.datetime.now), + ), + migrations.AddField( + model_name='ishtarsiteprofile', + name='basefind_cached_label', + field=models.TextField(blank=True, default='', help_text='Formula to manage cached label. If not set a default is provided', verbose_name='Base find cached label'), + ), + migrations.AddField( + model_name='ishtarsiteprofile', + name='container_cached_label', + field=models.TextField(blank=True, default='', help_text='Formula to manage cached label. If not set a default is provided', verbose_name='Container cached label'), + ), + migrations.AddField( + model_name='ishtarsiteprofile', + name='contextrecord_cached_label', + field=models.TextField(blank=True, default='', help_text='Formula to manage cached label. If not set a default is provided', verbose_name='Context record cached label'), + ), + migrations.AddField( + model_name='ishtarsiteprofile', + name='document_cached_label', + field=models.TextField(blank=True, default='', help_text='Formula to manage cached label. If not set a default is provided', verbose_name='Document cached label'), + ), + migrations.AddField( + model_name='ishtarsiteprofile', + name='file_cached_label', + field=models.TextField(blank=True, default='', help_text='Formula to manage cached label. If not set a default is provided', verbose_name='File cached label'), + ), + migrations.AddField( + model_name='ishtarsiteprofile', + name='find_cached_label', + field=models.TextField(blank=True, default='', help_text='Formula to manage cached label. If not set a default is provided', verbose_name='Find cached label'), + ), + migrations.AddField( + model_name='ishtarsiteprofile', + name='operation_cached_label', + field=models.TextField(blank=True, default='', help_text='Formula to manage cached label. If not set a default is provided', verbose_name='Operation cached label'), + ), + migrations.AddField( + model_name='ishtarsiteprofile', + name='parcel_cached_label', + field=models.TextField(blank=True, default='', help_text='Formula to manage cached label. If not set a default is provided', verbose_name='Parcel cached label'), + ), + migrations.AddField( + model_name='ishtarsiteprofile', + name='site_cached_label', + field=models.TextField(blank=True, default='', help_text='Formula to manage cached label. If not set a default is provided', verbose_name='Site cached label'), + ), + migrations.AddField( + model_name='ishtarsiteprofile', + name='warehouse_cached_label', + field=models.TextField(blank=True, default='', help_text='Formula to manage cached label. If not set a default is provided', verbose_name='Warehouse cached label'), + ), + migrations.AddField( + model_name='organization', + name='created', + field=models.DateTimeField(blank=True, default=datetime.datetime.now), + ), + migrations.AddField( + model_name='person', + name='created', + field=models.DateTimeField(blank=True, default=datetime.datetime.now), + ), + ] diff --git a/ishtar_common/migrations/0225_migrate_created.py b/ishtar_common/migrations/0225_migrate_created.py new file mode 100644 index 000000000..1304e8b92 --- /dev/null +++ b/ishtar_common/migrations/0225_migrate_created.py @@ -0,0 +1,25 @@ +# Generated by Django 2.2.24 on 2023-01-30 16:58 + +from django.db import migrations +from ishtar_common.utils_migrations import migrate_created_field + + +def migrate_created(apps, __): + app_name = "ishtar_common" + model_names = [ + "Document", + "Organization", + "Person", + ] + migrate_created_field(apps, app_name, model_names) + + +class Migration(migrations.Migration): + + dependencies = [ + ('ishtar_common', '0224_auto_20230130_1604'), + ] + + operations = [ + migrations.RunPython(migrate_created) + ] diff --git a/ishtar_common/models_common.py b/ishtar_common/models_common.py index f50395dee..2015a82da 100644 --- a/ishtar_common/models_common.py +++ b/ishtar_common/models_common.py @@ -1448,6 +1448,7 @@ class BaseHistorizedItem( null=True, ) last_modified = models.DateTimeField(blank=True, default=datetime.datetime.now) + created = models.DateTimeField(blank=True, default=datetime.datetime.now) history_m2m = JSONField(default=dict, blank=True) need_update = models.BooleanField(verbose_name=_("Need update"), default=False) locked = models.BooleanField( diff --git a/ishtar_common/templates/ishtar/blocks/sheet_creation_section.html b/ishtar_common/templates/ishtar/blocks/sheet_creation_section.html index 46856cad0..78a5ca75f 100644 --- a/ishtar_common/templates/ishtar/blocks/sheet_creation_section.html +++ b/ishtar_common/templates/ishtar/blocks/sheet_creation_section.html @@ -6,10 +6,10 @@ {{item.history_creator.ishtaruser.person}} {{item.history_creator.ishtaruser.person|link_to_window:request}}
- {{item.history_creation_date|date:"DATETIME_FORMAT"}} + {{item.created|date:"DATETIME_FORMAT"}} {% endif %} -{% if not item.last_edition_date or item.history_creation_date != item.last_edition_date %} +{% if not item.last_edition_date or item.created != item.last_edition_date %}
diff --git a/ishtar_common/utils_migrations.py b/ishtar_common/utils_migrations.py index 44eae940e..ec0b46509 100644 --- a/ishtar_common/utils_migrations.py +++ b/ishtar_common/utils_migrations.py @@ -185,3 +185,18 @@ def set_uuid_helper(module, model_name): migrate_uuid(model) return set_uuid + + +def migrate_created_field(apps, app_name, model_names): + for model_name in model_names: + model = apps.get_model(app_name, model_name) + try: + model_history = apps.get_model(app_name, "Historical" + model_name) + except: + continue + for item in model.objects.all(): + q = model_history.objects.filter(id=item.pk).order_by("history_date") + if not q.count(): + continue + history_date = q.all()[0].history_date + item.__class__.objects.filter(pk=item.pk).update(created=history_date) diff --git a/ishtar_common/views_item.py b/ishtar_common/views_item.py index 531eef995..839480ba7 100644 --- a/ishtar_common/views_item.py +++ b/ishtar_common/views_item.py @@ -1633,7 +1633,7 @@ def _get_json_stats( DEFAULT_ROW_NUMBER = 10 # length is used by ajax DataTables requests EXCLUDED_FIELDS = ["length"] -BASE_DATED_FIELDS = ["last_modified"] +BASE_DATED_FIELDS = ["created", "last_modified"] def get_item( diff --git a/ishtar_common/wizards.py b/ishtar_common/wizards.py index d8c789018..aa3ef68ab 100644 --- a/ishtar_common/wizards.py +++ b/ishtar_common/wizards.py @@ -2155,6 +2155,7 @@ DOCUMENT_EXCLUDED = models.Document.RELATED_MODELS + [ "search_vector", "imports", "last_modified", + "created", "document", ] -- cgit v1.2.3