summaryrefslogtreecommitdiff
path: root/archaeological_finds/models_finds.py
diff options
context:
space:
mode:
Diffstat (limited to 'archaeological_finds/models_finds.py')
-rw-r--r--archaeological_finds/models_finds.py116
1 files changed, 81 insertions, 35 deletions
diff --git a/archaeological_finds/models_finds.py b/archaeological_finds/models_finds.py
index 891d99d28..bf026c03f 100644
--- a/archaeological_finds/models_finds.py
+++ b/archaeological_finds/models_finds.py
@@ -1,6 +1,6 @@
#!/usr/bin/env python
# -*- coding: utf-8 -*-
-# Copyright (C) 2012-2016 Étienne Loks <etienne.loks_AT_peacefrogsDOTnet>
+# Copyright (C) 2012-2017 Étienne Loks <etienne.loks_AT_peacefrogsDOTnet>
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as
@@ -22,19 +22,19 @@ import datetime
from django.conf import settings
from django.contrib.gis.db import models
from django.core.urlresolvers import reverse
-from django.db import connection, transaction
+from django.db import connection
from django.db.models import Max, Q
from django.db.models.signals import m2m_changed, post_save, post_delete, \
pre_delete
-from django.utils.translation import ugettext_lazy as _, ugettext
+from django.utils.translation import ugettext_lazy as _
from ishtar_common.data_importer import post_importer_action, ImporterError
from ishtar_common.utils import cached_label_changed, post_save_point
-from ishtar_common.models import GeneralType, ImageModel, BaseHistorizedItem, \
- ShortMenuItem, LightHistorizedItem, HistoricalRecords, OwnPerms, Source, \
- Person, Basket, post_save_cache, ValueGetter, \
- get_current_profile
+from ishtar_common.models import GeneralType, HierarchicalType, ImageModel, \
+ BaseHistorizedItem, ShortMenuItem, LightHistorizedItem, \
+ HistoricalRecords, OwnPerms, Source, Person, Basket, post_save_cache, \
+ ValueGetter, get_current_profile
from archaeological_operations.models import AdministrativeAct
from archaeological_context_records.models import ContextRecord, Dating
@@ -43,29 +43,28 @@ from ishtar_common.models import PRIVATE_FIELDS, SpatialReferenceSystem, \
BulkUpdatedItem
-class MaterialType(GeneralType):
+class MaterialType(HierarchicalType):
code = models.CharField(_(u"Code"), max_length=10, blank=True, null=True)
recommendation = models.TextField(_(u"Recommendation"), blank=True,
null=True)
- parent = models.ForeignKey("MaterialType", blank=True, null=True,
- verbose_name=_(u"Parent material"))
class Meta:
verbose_name = _(u"Material type")
verbose_name_plural = _(u"Material types")
ordering = ('label',)
+
+
post_save.connect(post_save_cache, sender=MaterialType)
post_delete.connect(post_save_cache, sender=MaterialType)
-class ConservatoryState(GeneralType):
- parent = models.ForeignKey("ConservatoryState", blank=True, null=True,
- verbose_name=_(u"Parent conservatory state"))
-
+class ConservatoryState(HierarchicalType):
class Meta:
verbose_name = _(u"Conservatory state")
verbose_name_plural = _(u"Conservatory states")
ordering = ('label',)
+
+
post_save.connect(post_save_cache, sender=ConservatoryState)
post_delete.connect(post_save_cache, sender=ConservatoryState)
@@ -75,6 +74,8 @@ class PreservationType(GeneralType):
verbose_name = _(u"Preservation type")
verbose_name_plural = _(u"Preservation types")
ordering = ('label',)
+
+
post_save.connect(post_save_cache, sender=PreservationType)
post_delete.connect(post_save_cache, sender=PreservationType)
@@ -84,6 +85,8 @@ class IntegrityType(GeneralType):
verbose_name = _(u"Integrity / interest type")
verbose_name_plural = _(u"Integrity / interest types")
ordering = ('label',)
+
+
post_save.connect(post_save_cache, sender=IntegrityType)
post_delete.connect(post_save_cache, sender=IntegrityType)
@@ -93,6 +96,8 @@ class RemarkabilityType(GeneralType):
verbose_name = _(u"Remarkability type")
verbose_name_plural = _(u"Remarkability types")
ordering = ('label',)
+
+
post_save.connect(post_save_cache, sender=RemarkabilityType)
post_delete.connect(post_save_cache, sender=RemarkabilityType)
@@ -103,33 +108,56 @@ class BatchType(GeneralType):
verbose_name = _(u"Batch type")
verbose_name_plural = _(u"Batch types")
ordering = ('order',)
+
+
post_save.connect(post_save_cache, sender=BatchType)
post_delete.connect(post_save_cache, sender=BatchType)
-class ObjectType(GeneralType):
- parent = models.ForeignKey("ObjectType", blank=True, null=True,
- verbose_name=_(u"Parent"))
-
+class ObjectType(HierarchicalType):
class Meta:
verbose_name = _(u"Object type")
verbose_name_plural = _(u"Object types")
ordering = ('parent__label', 'label',)
- def full_label(self):
- lbls = [self.label]
- item = self
- while item.parent:
- item = item.parent
- lbls.append(item.label)
- return u" > ".join(reversed(lbls))
- def __unicode__(self):
- return self.label
post_save.connect(post_save_cache, sender=ObjectType)
post_delete.connect(post_save_cache, sender=ObjectType)
+class AlterationType(HierarchicalType):
+ class Meta:
+ verbose_name = _(u"Alteration type")
+ verbose_name_plural = _(u"Alteration types")
+ ordering = ('parent__label', 'label',)
+
+
+post_save.connect(post_save_cache, sender=AlterationType)
+post_delete.connect(post_save_cache, sender=AlterationType)
+
+
+class AlterationCauseType(HierarchicalType):
+ class Meta:
+ verbose_name = _(u"Alteration cause type")
+ verbose_name_plural = _(u"Alteration cause types")
+ ordering = ('parent__label', 'label',)
+
+
+post_save.connect(post_save_cache, sender=AlterationCauseType)
+post_delete.connect(post_save_cache, sender=AlterationCauseType)
+
+
+class TreatmentEmergencyType(GeneralType):
+ class Meta:
+ verbose_name = _(u"Treatment emergency type")
+ verbose_name_plural = _(u"Treatment emergency types")
+ ordering = ('label',)
+
+
+post_save.connect(post_save_cache, sender=TreatmentEmergencyType)
+post_delete.connect(post_save_cache, sender=TreatmentEmergencyType)
+
+
class BFBulkView(object):
CREATE_SQL = """
CREATE VIEW basefind_cached_bulk_update
@@ -624,14 +652,6 @@ class Find(BulkUpdatedItem, ValueGetter, BaseHistorizedItem, ImageModel,
MaterialType, verbose_name=_(u"Material types"), related_name='finds',
blank=True
)
- conservatory_state = models.ForeignKey(
- ConservatoryState, verbose_name=_(u"Conservatory state"), blank=True,
- null=True, on_delete=models.SET_NULL)
- conservatory_comment = models.TextField(_(u"Conservatory comment"),
- blank=True, null=True)
- preservation_to_considers = models.ManyToManyField(
- PreservationType, verbose_name=_(u"Type of preservation to consider"),
- related_name='finds', blank=True)
volume = models.FloatField(_(u"Volume (l)"), blank=True, null=True)
weight = models.FloatField(_(u"Weight (g)"), blank=True, null=True)
weight_unit = models.CharField(_(u"Weight unit"), max_length=4,
@@ -686,6 +706,32 @@ class Find(BulkUpdatedItem, ValueGetter, BaseHistorizedItem, ImageModel,
collection = models.ForeignKey(
"archaeological_warehouse.Collection", verbose_name=_(u"Collection"),
blank=True, null=True, related_name='finds', on_delete=models.SET_NULL)
+
+ # preservation module
+ conservatory_state = models.ForeignKey(
+ ConservatoryState, verbose_name=_(u"Conservatory state"), blank=True,
+ null=True, on_delete=models.SET_NULL)
+ conservatory_comment = models.TextField(_(u"Conservatory comment"),
+ blank=True, null=True)
+ preservation_to_considers = models.ManyToManyField(
+ PreservationType, verbose_name=_(u"Type of preservation to consider"),
+ related_name='finds', blank=True)
+ alteration = models.ForeignKey(
+ AlterationType, verbose_name=_(u"Alteration"), blank=True, null=True
+ )
+ alteration_cause = models.ForeignKey(
+ AlterationCauseType, verbose_name=_(u"Alteration cause"), blank=True,
+ null=True
+ )
+ treatment_emergency = models.ForeignKey(
+ TreatmentEmergencyType, verbose_name=_(u"Treatment emergency"),
+ blank=True, null=True
+ )
+ insurance_value = models.FloatField(_(u"Insurance value"), blank=True,
+ null=True)
+ appraisal_date = models.DateField(_(u"Appraisal date"), blank=True,
+ null=True)
+
cached_label = models.TextField(_(u"Cached name"), null=True, blank=True)
history = HistoricalRecords()
BASKET_MODEL = FindBasket