summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorÉtienne Loks <etienne.loks@iggdrasil.net>2024-09-20 11:52:46 +0200
committerÉtienne Loks <etienne.loks@iggdrasil.net>2024-09-20 15:47:14 +0200
commit2089f69b8958ba08879a706d478397e927de8741 (patch)
treeb3f0047a4d78e10e9bcff258e1f7cbe1e9a44372
parent14b2433f8b04d11c2c3ad721997289ffa0777de3 (diff)
downloadIshtar-2089f69b8958ba08879a706d478397e927de8741.tar.bz2
Ishtar-2089f69b8958ba08879a706d478397e927de8741.zip
🗃️ context records, finds: new fields in database
Context record: - excavator Find: - discovery method
-rw-r--r--Makefile.example1
-rw-r--r--archaeological_context_records/migrations/0120_excavator.py35
-rw-r--r--archaeological_context_records/models.py7
-rw-r--r--archaeological_finds/admin.py2
-rw-r--r--archaeological_finds/migrations/0129_discovery_method.py50
-rw-r--r--archaeological_finds/migrations/0130_data_discovery_method.json35
-rw-r--r--archaeological_finds/migrations/0130_data_discovery_method.py23
-rw-r--r--archaeological_finds/models.py2
-rw-r--r--archaeological_finds/models_finds.py20
-rw-r--r--ishtar_common/templates/ishtar/sheet_person.html5
10 files changed, 176 insertions, 4 deletions
diff --git a/Makefile.example b/Makefile.example
index 3a5bf220b..34b0f2c10 100644
--- a/Makefile.example
+++ b/Makefile.example
@@ -328,6 +328,7 @@ fixtures_finds:
archaeological_finds.inventorymarkingpresence \
archaeological_finds.communicabilitytype \
archaeological_finds.functionalarea \
+ archaeological_finds.discoverymethod \
> '../archaeological_finds/fixtures/initial_data-'$(default_data)'.json'
fixtures_warehouse:
diff --git a/archaeological_context_records/migrations/0120_excavator.py b/archaeological_context_records/migrations/0120_excavator.py
new file mode 100644
index 000000000..e5a88cd6f
--- /dev/null
+++ b/archaeological_context_records/migrations/0120_excavator.py
@@ -0,0 +1,35 @@
+# Generated by Django 2.2.24 on 2024-09-20 11:05
+
+from django.db import migrations, models
+import django.db.models.deletion
+
+
+class Migration(migrations.Migration):
+
+ dependencies = [
+ ('ishtar_common', '0249_town_notice'),
+ ('archaeological_context_records', '0119_default_typos'),
+ ]
+
+ operations = [
+ migrations.AddField(
+ model_name='contextrecord',
+ name='excavator',
+ field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='context_record_excavation', to='ishtar_common.Person', verbose_name='Excavator'),
+ ),
+ migrations.AddField(
+ model_name='historicalcontextrecord',
+ name='excavator',
+ field=models.ForeignKey(blank=True, db_constraint=False, null=True, on_delete=django.db.models.deletion.DO_NOTHING, related_name='+', to='ishtar_common.Person', verbose_name='Excavator'),
+ ),
+ migrations.AlterField(
+ model_name='contextrecord',
+ name='surface',
+ field=models.FloatField(blank=True, null=True, verbose_name='Surface (m²)'),
+ ),
+ migrations.AlterField(
+ model_name='historicalcontextrecord',
+ name='surface',
+ field=models.FloatField(blank=True, null=True, verbose_name='Surface (m²)'),
+ ),
+ ]
diff --git a/archaeological_context_records/models.py b/archaeological_context_records/models.py
index a10c78552..c1a03e79e 100644
--- a/archaeological_context_records/models.py
+++ b/archaeological_context_records/models.py
@@ -42,6 +42,7 @@ from ishtar_common.utils import (
from ishtar_common.models import (
Document,
+ Person,
GeneralType,
BaseHistorizedItem,
OwnPerms,
@@ -847,6 +848,10 @@ class ContextRecord(
label = models.CharField(_("ID"), max_length=200)
description = models.TextField(_("Description"), blank=True, default="")
comment = models.TextField(_("General comment"), blank=True, default="")
+ excavator = models.ForeignKey(
+ Person, verbose_name=_("Excavator"), on_delete=models.SET_NULL,
+ blank=True, null=True, related_name="context_record_excavation"
+ )
opening_date = models.DateField(_("Opening date"), blank=True, null=True)
closing_date = models.DateField(_("Closing date"), blank=True, null=True)
length = models.FloatField(_("Length (m)"), blank=True, null=True)
@@ -859,7 +864,7 @@ class ContextRecord(
depth_of_appearance = models.FloatField(
_("Depth of appearance (m)"), blank=True, null=True
)
- surface = models.FloatField(_("Surface (m2)"), blank=True, null=True)
+ surface = models.FloatField(_("Surface (m²)"), blank=True, null=True)
location = models.TextField(
_("Location"),
blank=True,
diff --git a/archaeological_finds/admin.py b/archaeological_finds/admin.py
index b089e0713..b616b3dc7 100644
--- a/archaeological_finds/admin.py
+++ b/archaeological_finds/admin.py
@@ -242,7 +242,7 @@ general_models = [
models.CollectionEntryModeType, models.IntegrityType, models.InventoryConformity,
models.InventoryMarkingPresence, models.MarkingType, models.MaterialTypeQualityType,
models.MuseumCollection, models.ObjectTypeQualityType, models.OriginalReproduction,
- models.RemarkabilityType, models.TreatmentEmergencyType,
+ models.RemarkabilityType, models.TreatmentEmergencyType, models.DiscoveryMethod,
]
for model in general_models:
diff --git a/archaeological_finds/migrations/0129_discovery_method.py b/archaeological_finds/migrations/0129_discovery_method.py
new file mode 100644
index 000000000..94af962af
--- /dev/null
+++ b/archaeological_finds/migrations/0129_discovery_method.py
@@ -0,0 +1,50 @@
+# Generated by Django 2.2.24 on 2024-09-20 12:38
+
+import django.core.validators
+from django.db import migrations, models
+import django.db.models.deletion
+import ishtar_common.models_common
+import re
+
+
+class Migration(migrations.Migration):
+
+ dependencies = [
+ ('archaeological_finds', '0128_find_first_full_location'),
+ ]
+
+ operations = [
+ migrations.AlterField(
+ model_name='findtreatment',
+ name='location_type',
+ field=models.CharField(choices=[['C', 'Current'], ['R', 'Reference'], ['B', 'Reference/current']], default='C', max_length=1, verbose_name='Location type'),
+ ),
+ migrations.CreateModel(
+ name='DiscoveryMethod',
+ fields=[
+ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+ ('label', models.TextField(verbose_name='Label')),
+ ('txt_idx', models.TextField(help_text='The slug is the standardized version of the name. It contains only lowercase letters, numbers and hyphens. Each slug must be unique.', unique=True, validators=[django.core.validators.RegexValidator(re.compile('^[-a-zA-Z0-9_]+\\Z'), "Enter a valid 'slug' consisting of letters, numbers, underscores or hyphens.", 'invalid')], verbose_name='Textual ID')),
+ ('comment', models.TextField(blank=True, default='', verbose_name='Comment')),
+ ('available', models.BooleanField(default=True, verbose_name='Available')),
+ ('order', models.IntegerField(default=10, verbose_name='Order')),
+ ('parent', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='archaeological_finds.DiscoveryMethod', verbose_name='Parent')),
+ ],
+ options={
+ 'verbose_name': 'Discovery method type',
+ 'verbose_name_plural': 'Discovery method types',
+ 'ordering': ('order', 'label'),
+ },
+ bases=(ishtar_common.models_common.Cached, models.Model),
+ ),
+ migrations.AddField(
+ model_name='basefind',
+ name='discovery_method',
+ field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='archaeological_finds.DiscoveryMethod', verbose_name='Discovery method'),
+ ),
+ migrations.AddField(
+ model_name='historicalbasefind',
+ name='discovery_method',
+ field=models.ForeignKey(blank=True, db_constraint=False, null=True, on_delete=django.db.models.deletion.DO_NOTHING, related_name='+', to='archaeological_finds.DiscoveryMethod', verbose_name='Discovery method'),
+ ),
+ ]
diff --git a/archaeological_finds/migrations/0130_data_discovery_method.json b/archaeological_finds/migrations/0130_data_discovery_method.json
new file mode 100644
index 000000000..8d7994f5a
--- /dev/null
+++ b/archaeological_finds/migrations/0130_data_discovery_method.json
@@ -0,0 +1,35 @@
+[
+{
+ "model": "archaeological_finds.discoverymethod",
+ "fields": {
+ "label": "Fouille",
+ "txt_idx": "fouille",
+ "comment": "",
+ "available": true,
+ "order": 10,
+ "parent": null
+ }
+},
+{
+ "model": "archaeological_finds.discoverymethod",
+ "fields": {
+ "label": "Tamisage",
+ "txt_idx": "tamisage",
+ "comment": "",
+ "available": true,
+ "order": 20,
+ "parent": null
+ }
+},
+{
+ "model": "archaeological_finds.discoverymethod",
+ "fields": {
+ "label": "Flottation",
+ "txt_idx": "flottation",
+ "comment": "",
+ "available": true,
+ "order": 30,
+ "parent": null
+ }
+}
+]
diff --git a/archaeological_finds/migrations/0130_data_discovery_method.py b/archaeological_finds/migrations/0130_data_discovery_method.py
new file mode 100644
index 000000000..56a1efb1f
--- /dev/null
+++ b/archaeological_finds/migrations/0130_data_discovery_method.py
@@ -0,0 +1,23 @@
+import os
+
+from django.db import migrations
+from django.core.management import call_command
+
+
+def load_data(apps, __):
+ DiscoveryMethod = apps.get_model("archaeological_finds", "discoverymethod")
+ if not DiscoveryMethod.objects.count():
+ migration = "0130_data_discovery_method.json"
+ json_path = os.sep.join(os.path.abspath(__file__).split(os.sep)[:-1] + [migration])
+ call_command("loaddata", json_path)
+
+
+class Migration(migrations.Migration):
+
+ dependencies = [
+ ('archaeological_finds', '0129_discovery_method'),
+ ]
+
+ operations = [
+ migrations.RunPython(load_data)
+ ]
diff --git a/archaeological_finds/models.py b/archaeological_finds/models.py
index ede0ff2ba..ce2098d8d 100644
--- a/archaeological_finds/models.py
+++ b/archaeological_finds/models.py
@@ -8,6 +8,7 @@ from archaeological_finds.models_finds import (
CollectionEntryModeType,
CommunicabilityType,
ConservatoryState,
+ DiscoveryMethod,
FBulkView,
Find,
FindBasket,
@@ -55,6 +56,7 @@ __all__ = [
"CollectionEntryModeType",
"CommunicabilityType",
"ConservatoryState",
+ "DiscoveryMethod",
"FBulkView",
"Find",
"FirstBaseFindView",
diff --git a/archaeological_finds/models_finds.py b/archaeological_finds/models_finds.py
index 7da45166e..42b1aa514 100644
--- a/archaeological_finds/models_finds.py
+++ b/archaeological_finds/models_finds.py
@@ -416,6 +416,20 @@ post_save.connect(post_save_cache, sender=CheckedType)
post_delete.connect(post_save_cache, sender=CheckedType)
+class DiscoveryMethod(OrderedHierarchicalType):
+ class Meta:
+ verbose_name = _("Discovery method type")
+ verbose_name_plural = _("Discovery method types")
+ ordering = (
+ "order",
+ "label",
+ )
+ ADMIN_SECTION = _("Finds")
+
+post_save.connect(post_save_cache, sender=DiscoveryMethod)
+post_delete.connect(post_save_cache, sender=DiscoveryMethod)
+
+
class CollectionEntryModeType(OrderedHierarchicalType):
class Meta:
verbose_name = _("Collection entry mode type")
@@ -507,8 +521,6 @@ post_save.connect(post_save_cache, sender=OriginalReproduction)
post_delete.connect(post_save_cache, sender=OriginalReproduction)
-
-
class BFBulkView(object):
CREATE_SQL = """
CREATE VIEW basefind_cached_bulk_update
@@ -568,6 +580,10 @@ class BaseFind(
discovery_date_taq = models.DateField(
_("Discovery date (end)"), blank=True, null=True
)
+ discovery_method = models.ForeignKey(
+ DiscoveryMethod, blank=True, null=True,
+ on_delete=models.SET_NULL, verbose_name=_("Discovery method")
+ )
batch = models.ForeignKey(
BatchType,
verbose_name=_("Batch/object"),
diff --git a/ishtar_common/templates/ishtar/sheet_person.html b/ishtar_common/templates/ishtar/sheet_person.html
index 7c3093df8..5856e4407 100644
--- a/ishtar_common/templates/ishtar/sheet_person.html
+++ b/ishtar_common/templates/ishtar/sheet_person.html
@@ -125,6 +125,11 @@
{% dynamic_table_document af 'files' 'responsible_town_planning_service__pk' item.pk '' output %}
{% endif %}
+{% trans "Associated context records as excavator" as excavator %}
+{% if item.context_record_excavation.count %}
+{% dynamic_table_document excavator 'context_records' 'excavator_id' item.pk '' output %}
+{% endif %}
+
{% comment %} to be tested.........
{% trans "In charge of administrative acts" as admin_act %}
{% if item.adminact_operation_in_charge.count %}