diff options
Diffstat (limited to 'archaeological_finds/models_finds.py')
-rw-r--r-- | archaeological_finds/models_finds.py | 116 |
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 |