summaryrefslogtreecommitdiff
path: root/ishtar_common
diff options
context:
space:
mode:
authorÉtienne Loks <etienne.loks@iggdrasil.net>2020-10-06 19:44:11 +0200
committerÉtienne Loks <etienne.loks@iggdrasil.net>2021-02-28 12:15:21 +0100
commit9f8e22e404f30b0c26933ebc85efdb416cc7bca4 (patch)
tree04961ac0119f44f5c46cb4356733f8bf2b5b0c1d /ishtar_common
parent8b11f10de8259e2c0108434b15f97a968f5ccd93 (diff)
downloadIshtar-9f8e22e404f30b0c26933ebc85efdb416cc7bca4.tar.bz2
Ishtar-9f8e22e404f30b0c26933ebc85efdb416cc7bca4.zip
Complete identifier field: database - profile settings - save
Diffstat (limited to 'ishtar_common')
-rw-r--r--ishtar_common/migrations/0206_auto_20201007_1215.py101
-rw-r--r--ishtar_common/models.py59
-rw-r--r--ishtar_common/models_common.py27
-rw-r--r--ishtar_common/utils.py3
4 files changed, 175 insertions, 15 deletions
diff --git a/ishtar_common/migrations/0206_auto_20201007_1215.py b/ishtar_common/migrations/0206_auto_20201007_1215.py
new file mode 100644
index 000000000..5e6d32c9a
--- /dev/null
+++ b/ishtar_common/migrations/0206_auto_20201007_1215.py
@@ -0,0 +1,101 @@
+# -*- coding: utf-8 -*-
+# Generated by Django 1.11.27 on 2020-10-07 12:15
+from __future__ import unicode_literals
+
+from django.db import migrations, models
+import django.db.models.deletion
+
+
+class Migration(migrations.Migration):
+
+ dependencies = [
+ ('ishtar_common', '0205_auto_20200527_1500'),
+ ]
+
+ operations = [
+ migrations.AddField(
+ model_name='document',
+ name='complete_identifier',
+ field=models.TextField(blank=True, verbose_name='Complete identifier'),
+ ),
+ migrations.AddField(
+ model_name='ishtarsiteprofile',
+ name='basefind_complete_identifier',
+ field=models.TextField(default='', help_text='Formula to manage base find complete identifier.', verbose_name='Base find complete identifier'),
+ ),
+ migrations.AddField(
+ model_name='ishtarsiteprofile',
+ name='container_complete_identifier',
+ field=models.TextField(default='', help_text='Formula to manage container complete identifier.', verbose_name='Container complete identifier'),
+ ),
+ migrations.AddField(
+ model_name='ishtarsiteprofile',
+ name='context_record_complete_identifier',
+ field=models.TextField(default='', help_text='Formula to manage context record complete identifier.', verbose_name='Context record complete identifier'),
+ ),
+ migrations.AddField(
+ model_name='ishtarsiteprofile',
+ name='document_complete_identifier',
+ field=models.TextField(default='', help_text='Formula to manage document complete identifier.', verbose_name='Document complete identifier'),
+ ),
+ migrations.AddField(
+ model_name='ishtarsiteprofile',
+ name='file_complete_identifier',
+ field=models.TextField(default='', help_text='Formula to manage archaeological file complete identifier.', verbose_name='Archaeological file complete identifier'),
+ ),
+ migrations.AddField(
+ model_name='ishtarsiteprofile',
+ name='find_complete_identifier',
+ field=models.TextField(default='', help_text='Formula to manage find complete identifier.', verbose_name='Find complete identifier'),
+ ),
+ migrations.AddField(
+ model_name='ishtarsiteprofile',
+ name='operation_complete_identifier',
+ field=models.TextField(default='', help_text='Formula to manage operation complete identifier.', verbose_name='Operation complete identifier'),
+ ),
+ migrations.AddField(
+ model_name='ishtarsiteprofile',
+ name='site_complete_identifier',
+ field=models.TextField(default='', help_text='Formula to manage archaeological site complete identifier.', verbose_name='Archaeological site complete identifier'),
+ ),
+ migrations.AddField(
+ model_name='ishtarsiteprofile',
+ name='warehouse_complete_identifier',
+ field=models.TextField(default='', help_text='Formula to manage warehouse complete identifier.', verbose_name='Warehouse complete identifier'),
+ ),
+ migrations.AlterField(
+ model_name='document',
+ name='format_type',
+ field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='ishtar_common.Format', verbose_name='Medium'),
+ ),
+ migrations.AlterField(
+ model_name='document',
+ name='publisher',
+ field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='publish', to='ishtar_common.Organization', verbose_name='Publisher'),
+ ),
+ migrations.AlterField(
+ model_name='importercolumn',
+ name='regexp_pre_filter',
+ field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='columns', to='ishtar_common.Regexp'),
+ ),
+ migrations.AlterField(
+ model_name='importercolumn',
+ name='value_format',
+ field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='columns', to='ishtar_common.ValueFormater'),
+ ),
+ migrations.AlterField(
+ model_name='importertype',
+ name='associated_models',
+ field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='importer_type_associated', to='ishtar_common.ImporterModel', verbose_name='Associated model'),
+ ),
+ migrations.AlterField(
+ model_name='importertype',
+ name='created_models',
+ field=models.ManyToManyField(blank=True, help_text='Leave blank for no restrictions', related_name='importer_type_created', to='ishtar_common.ImporterModel', verbose_name='Models that can accept new items'),
+ ),
+ migrations.AlterField(
+ model_name='importtarget',
+ name='formater_type',
+ field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='targets', to='ishtar_common.FormaterType'),
+ ),
+ ]
diff --git a/ishtar_common/models.py b/ishtar_common/models.py
index 483e15786..07a052470 100644
--- a/ishtar_common/models.py
+++ b/ishtar_common/models.py
@@ -62,7 +62,7 @@ from django.db.utils import DatabaseError
from django.template.defaultfilters import slugify
from django.utils.functional import lazy
from ishtar_common.utils import ugettext_lazy as _, ugettext, \
- pgettext_lazy, get_external_id, get_current_profile, duplicate_item, \
+ pgettext_lazy, get_generated_id, get_current_profile, duplicate_item, \
get_image_path
from ishtar_common.utils_secretary import IshtarSecretaryRenderer
@@ -87,21 +87,22 @@ from ishtar_common.models_common import GeneralType, HierarchicalType, \
FixAssociated, SearchAltName, HistoryError, OwnPerms, Cached, \
Address, post_save_cache, TemplateItem, SpatialReferenceSystem, \
DashboardFormItem, document_attached_changed, SearchAltName, \
- DynamicRequest, GeoItem, QRCodeItem, SearchVectorConfig, DocumentItem, \
- QuickAction, MainItem, Merge, ShortMenuItem, Town, ImageContainerModel, \
- StatisticItem, CachedGen, CascasdeUpdate, Department, State
+ DynamicRequest, GeoItem, CompleteIdentifierItem, SearchVectorConfig, \
+ DocumentItem, QuickAction, MainItem, Merge, ShortMenuItem, Town, \
+ ImageContainerModel, StatisticItem, CachedGen, CascasdeUpdate, \
+ Department, State
__all__ = [
'ImporterModel', 'ImporterType', 'ImporterDefault', 'ImporterDefaultValues',
'ImporterColumn', 'ImporterDuplicateField', 'Regexp', 'ImportTarget',
'TargetKey', 'FormaterType', 'Import', 'TargetKeyGroup', 'ValueFormater',
'Organization', 'Person', 'valid_id', 'Town', 'SpatialReferenceSystem',
- 'OrganizationType', 'Document', 'GeneralType', 'get_external_id',
+ 'OrganizationType', 'Document', 'GeneralType', 'get_generated_id',
'LightHistorizedItem', 'OwnPerms', 'Address', 'post_save_cache',
'DashboardFormItem', 'ShortMenuItem', 'document_attached_changed',
- 'SearchAltName', 'DynamicRequest', 'GeoItem', 'QRCodeItem',
+ 'SearchAltName', 'DynamicRequest', 'GeoItem',
'SearchVectorConfig', 'DocumentItem', 'CachedGen', 'StatisticItem',
- 'CascasdeUpdate', 'Department', 'State'
+ 'CascasdeUpdate', 'Department', 'State', 'CompleteIdentifierItem'
]
logger = logging.getLogger(__name__)
@@ -816,6 +817,15 @@ class IshtarSiteProfile(models.Model, Cached):
_("Operation region code"), null=True, blank=True,
max_length=5
)
+ operation_complete_identifier = models.TextField(
+ _("Operation complete identifier"),
+ default="",
+ help_text=_("Formula to manage operation complete identifier."))
+ site_complete_identifier = models.TextField(
+ _("Archaeological site complete identifier"),
+ default="",
+ help_text=_("Formula to manage archaeological site complete"
+ " identifier."))
file_external_id = models.TextField(
_("File external id"),
default="{year}-{numeric_reference}",
@@ -823,6 +833,11 @@ class IshtarSiteProfile(models.Model, Cached):
"Change this with care. With incorrect formula, the "
"application might be unusable and import of external "
"data can be destructive."))
+ file_complete_identifier = models.TextField(
+ _("Archaeological file complete identifier"),
+ default="",
+ help_text=_("Formula to manage archaeological file complete "
+ "identifier."))
parcel_external_id = models.TextField(
_("Parcel external id"),
default="{associated_file__external_id}{operation__code_patriarche}-"
@@ -838,6 +853,10 @@ class IshtarSiteProfile(models.Model, Cached):
"Change this with care. With incorrect formula, the "
"application might be unusable and import of external "
"data can be destructive."))
+ context_record_complete_identifier = models.TextField(
+ _("Context record complete identifier"),
+ default="",
+ help_text=_("Formula to manage context record complete identifier."))
base_find_external_id = models.TextField(
_("Base find external id"),
default="{context_record__external_id}-{label}",
@@ -845,6 +864,10 @@ class IshtarSiteProfile(models.Model, Cached):
"Change this with care. With incorrect formula, the "
"application might be unusable and import of external "
"data can be destructive."))
+ basefind_complete_identifier = models.TextField(
+ _("Base find complete identifier"),
+ default="",
+ help_text=_("Formula to manage base find complete identifier."))
find_external_id = models.TextField(
_("Find external id"),
default="{get_first_base_find__context_record__external_id}-{label}",
@@ -852,6 +875,10 @@ class IshtarSiteProfile(models.Model, Cached):
"Change this with care. With incorrect formula, the "
"application might be unusable and import of external "
"data can be destructive."))
+ find_complete_identifier = models.TextField(
+ _("Find complete identifier"),
+ default="",
+ help_text=_("Formula to manage find complete identifier."))
container_external_id = models.TextField(
_("Container external id"),
default="{parent_external_id}-{container_type__txt_idx}-"
@@ -860,6 +887,10 @@ class IshtarSiteProfile(models.Model, Cached):
"Change this with care. With incorrect formula, the "
"application might be unusable and import of external "
"data can be destructive."))
+ container_complete_identifier = models.TextField(
+ _("Container complete identifier"),
+ default="",
+ help_text=_("Formula to manage container complete identifier."))
warehouse_external_id = models.TextField(
_("Warehouse external id"),
default="{name|slug}",
@@ -867,6 +898,10 @@ class IshtarSiteProfile(models.Model, Cached):
"Change this with care. With incorrect formula, the "
"application might be unusable and import of external "
"data can be destructive."))
+ warehouse_complete_identifier = models.TextField(
+ _("Warehouse complete identifier"),
+ default="",
+ help_text=_("Formula to manage warehouse complete identifier."))
document_external_id = models.TextField(
_("Document external id"),
default="{index}",
@@ -874,6 +909,10 @@ class IshtarSiteProfile(models.Model, Cached):
"Change this with care. With incorrect formula, the "
"application might be unusable and import of external "
"data can be destructive."))
+ document_complete_identifier = models.TextField(
+ _("Document complete identifier"),
+ default="",
+ help_text=_("Formula to manage document complete identifier."))
person_raw_name = models.TextField(
_("Raw name for person"),
default="{name|upper} {surname}",
@@ -1902,7 +1941,7 @@ class Person(Address, Merge, OwnPerms, ValueGetter, MainItem):
return self.cached_label or ""
def _generate_cached_label(self):
- lbl = get_external_id('person_raw_name', self)
+ lbl = get_generated_id('person_raw_name', self)
if not lbl:
return "-"
if self.attached_to:
@@ -2044,7 +2083,7 @@ class Person(Address, Merge, OwnPerms, ValueGetter, MainItem):
def save(self, *args, **kwargs):
super(Person, self).save(*args, **kwargs)
- raw_name = get_external_id('person_raw_name', self)
+ raw_name = get_generated_id('person_raw_name', self)
if raw_name and self.raw_name != raw_name:
self.raw_name = raw_name
self.save()
@@ -2581,7 +2620,7 @@ post_save.connect(post_save_cache, sender=LicenseType)
post_delete.connect(post_save_cache, sender=LicenseType)
-class Document(BaseHistorizedItem, QRCodeItem, OwnPerms, ImageModel,
+class Document(BaseHistorizedItem, CompleteIdentifierItem, OwnPerms, ImageModel,
ValueGetter, MainItem):
APP = "ishtar-common"
MODEL = "document"
diff --git a/ishtar_common/models_common.py b/ishtar_common/models_common.py
index 20809e38e..8c5d60637 100644
--- a/ishtar_common/models_common.py
+++ b/ishtar_common/models_common.py
@@ -60,7 +60,7 @@ from ishtar_common.models_imports import Import
from ishtar_common.templatetags.link_to_window import simple_link_to_window
from ishtar_common.utils import get_cache, disable_for_loaddata, \
get_all_field_names, merge_tsvectors, cached_label_changed, post_save_geo, \
- task, duplicate_item, get_external_id, get_current_profile
+ task, duplicate_item, get_generated_id, get_current_profile
"""
from ishtar_common.models import get_external_id, \
@@ -1224,7 +1224,7 @@ class BaseHistorizedItem(StatisticItem, TemplateItem, FullSearch, Imported,
self.external_id and
not getattr(self, 'auto_external_id', False)):
return
- external_id = get_external_id(self.EXTERNAL_ID_KEY, self)
+ external_id = get_generated_id(self.EXTERNAL_ID_KEY, self)
if external_id == self.external_id:
return
self.auto_external_id = True
@@ -2641,8 +2641,9 @@ class ImageContainerModel:
return "upload/{}/{:02d}/{:02d}".format(n.year, n.month, n.day)
-class QRCodeItem(models.Model, ImageContainerModel):
+class CompleteIdentifierItem(models.Model, ImageContainerModel):
HAS_QR_CODE = True
+ complete_identifier = models.TextField(_("Complete identifier"), blank=True)
qrcode = models.ImageField(upload_to=get_image_path, blank=True, null=True,
max_length=255)
@@ -2689,6 +2690,26 @@ class QRCodeItem(models.Model, ImageContainerModel):
if tmpdir_created:
shutil.rmtree(tmpdir)
+ def generate_complete_identifier(self):
+ SLUG = getattr(self, "SLUG", None)
+ if not SLUG:
+ return ""
+ complete_identifier = get_generated_id(
+ SLUG + "_complete_identifier", self)
+ if complete_identifier:
+ return complete_identifier
+ cached_label_key = 'cached_label'
+ if getattr(self, 'GEO_LABEL', None):
+ cached_label_key = getattr(self, 'GEO_LABEL', None)
+ if getattr(self, "CACHED_LABELS", None):
+ cached_label_key = getattr(self, "CACHED_LABELS")[-1]
+ complete_identifier = getattr(self, cached_label_key)
+ return complete_identifier
+
+ def save(self, *args, **kwargs):
+ self.complete_identifier = self.generate_complete_identifier()
+ super(CompleteIdentifierItem, self).save(*args, **kwargs)
+
class SearchVectorConfig:
def __init__(self, key, language=None, func=None):
diff --git a/ishtar_common/utils.py b/ishtar_common/utils.py
index 31459f861..70c374731 100644
--- a/ishtar_common/utils.py
+++ b/ishtar_common/utils.py
@@ -1782,8 +1782,7 @@ FORMULA_FILTERS = {
'deduplicate': _deduplicate
}
-
-def get_external_id(key, item):
+def get_generated_id(key, item):
profile = get_current_profile()
if not hasattr(profile, key):
return