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  | 
