diff options
author | Valérie-Emma Leroux <emma@iggdrasil.net> | 2017-04-07 11:40:31 +0200 |
---|---|---|
committer | Valérie-Emma Leroux <emma@iggdrasil.net> | 2017-04-07 11:40:31 +0200 |
commit | 7f22d3c20cc24debfe123425efa63ec5293e4b4c (patch) | |
tree | f773b80964981c231c892ee5255b94285bc5620a /archaeological_context_records/models.py | |
parent | 9127307734c85b816ac7dbb539b565ffb106d60f (diff) | |
parent | da4af2ab5d105f6d2ce442b517e532b7570616e3 (diff) | |
download | Ishtar-7f22d3c20cc24debfe123425efa63ec5293e4b4c.tar.bz2 Ishtar-7f22d3c20cc24debfe123425efa63ec5293e4b4c.zip |
Merge branch 'master' of git.iggdrasil.net:/srv/git/ishtar
Conflicts:
archaeological_operations/templates/ishtar/sheet_operation.html
Diffstat (limited to 'archaeological_context_records/models.py')
-rw-r--r-- | archaeological_context_records/models.py | 61 |
1 files changed, 52 insertions, 9 deletions
diff --git a/archaeological_context_records/models.py b/archaeological_context_records/models.py index 14e98e76b..bb3afc899 100644 --- a/archaeological_context_records/models.py +++ b/archaeological_context_records/models.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 @@ -129,6 +129,15 @@ post_save.connect(post_save_cache, sender=ExcavationTechnicType) post_delete.connect(post_save_cache, sender=ExcavationTechnicType) +class DocumentationType(GeneralType): + class Meta: + verbose_name = _(u"Documentation type") + verbose_name_plural = _(u"Documentation types") + ordering = ('label',) +post_save.connect(post_save_cache, sender=DocumentationType) +post_delete.connect(post_save_cache, sender=DocumentationType) + + class CRBulkView(object): CREATE_SQL = """ CREATE VIEW context_records_cached_label_bulk_update @@ -150,7 +159,7 @@ class CRBulkView(object): class ContextRecord(BaseHistorizedItem, ImageModel, OwnPerms, - ValueGetter, ShortMenuItem): + ValueGetter, ShortMenuItem): SHOW_URL = 'show-contextrecord' SLUG = 'contextrecord' TABLE_COLS = ['label', 'operation__common_name', 'parcel__town__name', @@ -216,18 +225,21 @@ class ContextRecord(BaseHistorizedItem, ImageModel, OwnPerms, width = models.FloatField(_(u"Width (m)"), blank=True, null=True) thickness = models.FloatField(_(u"Thickness (m)"), blank=True, null=True) + diameter = models.FloatField(_(u"Diameter (m)"), blank=True, null=True) depth = models.FloatField(_(u"Depth (m)"), blank=True, null=True) + depth_of_appearance = models.FloatField( + _(u"Depth of appearance (m)"), blank=True, null=True) location = models.TextField( _(u"Location"), blank=True, null=True, help_text=_(u"A short description of the location of the context " u"record")) datings = models.ManyToManyField(Dating) + documentations = models.ManyToManyField(DocumentationType, blank=True, + null=True) datings_comment = models.TextField(_(u"Comment on datings"), blank=True, null=True) unit = models.ForeignKey(Unit, verbose_name=_(u"Context record type"), related_name='+', blank=True, null=True) - has_furniture = models.NullBooleanField(_(u"Has furniture?"), blank=True, - null=True) filling = models.TextField(_(u"Filling"), blank=True, null=True) interpretation = models.TextField(_(u"Interpretation"), blank=True, null=True) @@ -353,9 +365,11 @@ class ContextRecord(BaseHistorizedItem, ImageModel, OwnPerms, @classmethod def get_query_owns(cls, user): - return Q(operation__scientist=user.ishtaruser.person) |\ - Q(operation__in_charge=user.ishtaruser.person) |\ - Q(history_creator=user) + return (Q(operation__scientist=user.ishtaruser.person) | + Q(operation__in_charge=user.ishtaruser.person) | + Q(operation__collaborators__pk=user.ishtaruser.person.pk) | + Q(history_creator=user)) \ + & Q(operation__end_date__isnull=True) @classmethod def get_owns(cls, user, menu_filtr=None, limit=None, @@ -389,8 +403,16 @@ class ContextRecord(BaseHistorizedItem, ImageModel, OwnPerms, return self.full_label() def _get_associated_cached_labels(self): - from archaeological_finds.models import Find - return list(Find.objects.filter(base_finds__context_record=self).all()) + from archaeological_finds.models import Find, BaseFind + return list(Find.objects.filter(base_finds__context_record=self).all())\ + + list(BaseFind.objects.filter(context_record=self).all()) + + def _cached_labels_bulk_update(self): + if settings.TESTING and settings.USE_SPATIALITE_FOR_TESTS: + return + self.base_finds.model.cached_label_bulk_update( + context_record_id=self.pk) + return True @property def reference(self): @@ -603,6 +625,18 @@ class ContextRecordSource(Source): class Meta: verbose_name = _(u"Context record documentation") verbose_name_plural = _(u"Context record documentations") + permissions = ( + ("view_contextrecordsource", + ugettext(u"Can view all Context record sources")), + ("view_own_contextrecordsource", + ugettext(u"Can view own Context record source")), + ("add_own_contextrecordsource", + ugettext(u"Can add own Context record source")), + ("change_own_contextrecordsource", + ugettext(u"Can change own Context record source")), + ("delete_own_contextrecordsource", + ugettext(u"Can delete own Context record source")), + ) context_record = models.ForeignKey( ContextRecord, verbose_name=_(u"Context record"), related_name="source") @@ -610,3 +644,12 @@ class ContextRecordSource(Source): @property def owner(self): return self.context_record + + @classmethod + def get_query_owns(cls, user): + return ( + Q(context_record__operation__scientist=user.ishtaruser.person) | + Q(context_record__operation__in_charge=user.ishtaruser.person) | + Q(context_record__operation__collaborators__pk= + user.ishtaruser.person.pk)) \ + & Q(context_record__operation__end_date__isnull=True) |