diff options
author | Étienne Loks <etienne.loks@iggdrasil.net> | 2019-05-22 11:07:10 +0200 |
---|---|---|
committer | Étienne Loks <etienne.loks@iggdrasil.net> | 2019-05-22 11:07:10 +0200 |
commit | 76311ba9b141191a39166a2fb925c7452f31be38 (patch) | |
tree | 87e2fa2dee181df10b10441d19b97b8b934c727f | |
parent | fe39cb336acbb04da6934dd4d5dfe4f4f2d66754 (diff) | |
download | Ishtar-76311ba9b141191a39166a2fb925c7452f31be38.tar.bz2 Ishtar-76311ba9b141191a39166a2fb925c7452f31be38.zip |
Document templates: manage finds, base finds, baskets relations
-rw-r--r-- | archaeological_context_records/models.py | 10 | ||||
-rw-r--r-- | archaeological_finds/models_finds.py | 40 | ||||
-rw-r--r-- | archaeological_finds/models_treatments.py | 9 | ||||
-rw-r--r-- | archaeological_operations/models.py | 9 | ||||
-rw-r--r-- | ishtar_common/models.py | 4 |
5 files changed, 47 insertions, 25 deletions
diff --git a/archaeological_context_records/models.py b/archaeological_context_records/models.py index 01595feed..f728aef57 100644 --- a/archaeological_context_records/models.py +++ b/archaeological_context_records/models.py @@ -520,6 +520,16 @@ class ContextRecord(BulkUpdatedItem, BaseHistorizedItem, QRCodeItem, GeoItem, def __unicode__(self): return self.short_label + def get_values(self, prefix='', no_base_finds=True): + values = super(ContextRecord, self).get_values(prefix=prefix) + if prefix and no_base_finds: + return values + values[prefix + 'base_finds'] = [ + bf.get_values(prefix=prefix) + for bf in self.base_finds.distinct().all() + ] + return values + def get_town_centroid(self): if self.town: return self.town.center, self._meta.verbose_name diff --git a/archaeological_finds/models_finds.py b/archaeological_finds/models_finds.py index 3dbda8472..d3abd2c8a 100644 --- a/archaeological_finds/models_finds.py +++ b/archaeological_finds/models_finds.py @@ -265,7 +265,8 @@ class BFBulkView(object): """ -class BaseFind(BulkUpdatedItem, BaseHistorizedItem, GeoItem, OwnPerms): +class BaseFind(BulkUpdatedItem, BaseHistorizedItem, GeoItem, OwnPerms, + ValueGetter): EXTERNAL_ID_KEY = 'base_find_external_id' EXTERNAL_ID_DEPENDENCIES = ['find'] SLUG = 'basefind' @@ -332,6 +333,16 @@ class BaseFind(BulkUpdatedItem, BaseHistorizedItem, GeoItem, OwnPerms): def natural_key(self): return (self.external_id, ) + def get_values(self, prefix='', no_find=False): + values = super(BaseFind, self).get_values(prefix=prefix) + if no_find: + return values + values[prefix + "finds"] = [ + find.get_values(prefix=prefix, no_base_finds=True) + for find in self.find.order_by('pk').all() + ] + return values + def get_last_find(self): # TODO: manage virtuals - property(last_find) ? finds = self.find.filter().order_by("-order").all() @@ -609,7 +620,7 @@ WEIGHT_UNIT = (('g', _(u"g")), ('kg', _(u"kg")),) -class FindBasket(Basket, MainItem): +class FindBasket(Basket, MainItem, ValueGetter): SHOW_URL = 'show-findbasket' SLUG = "findbasket" items = models.ManyToManyField('Find', blank=True, related_name='basket') @@ -629,6 +640,13 @@ class FindBasket(Basket, MainItem): ("view_own_find", u"Can view own Find"), ) + def get_values(self, prefix=''): + values = super(FindBasket, self).get_values(prefix=prefix) + values[prefix + "items"] = [ + item.get_values() for item in self.items.distinct().all() + ] + return values + def get_extra_actions(self, request): """ For sheet template: return "Manage basket" action @@ -1579,21 +1597,15 @@ class Find(BulkUpdatedItem, ValueGetter, BaseHistorizedItem, QRCodeItem, return return self.base_finds.order_by('-pk').all()[0] - def get_values(self, prefix=''): + def get_values(self, prefix='', no_base_finds=False): values = super(Find, self).get_values(prefix=prefix) - return values - # TODO - bf = self.get_first_base_find() - if not bf: + if no_base_finds: return values - operation = bf.context_record.operation - values[prefix + "operation"] = [ - { - "common_name": operation.common_name, - "code_patriarche": operation.code_patriarche, - "address": operation.address - } + values[prefix + "base_finds"] = [ + base_find.get_values(prefix=prefix, no_find=True) + for base_find in self.base_finds.distinct().order_by('-pk').all() ] + return values @property def reference(self): diff --git a/archaeological_finds/models_treatments.py b/archaeological_finds/models_treatments.py index e8d6256ef..6f24e1474 100644 --- a/archaeological_finds/models_treatments.py +++ b/archaeological_finds/models_treatments.py @@ -1008,15 +1008,6 @@ class TreatmentFile(DashboardFormItem, ClosedItem, BaseHistorizedItem, for attr in ('year', 'index', 'internal_reference', 'name') if getattr(self, attr)]) - def get_values(self, prefix=''): - values = super(TreatmentFile, self).get_values(prefix=prefix) - if not self.associated_basket: - return values - values[prefix + "basket"] = [ - find.get_values() for find in self.associated_basket.items.all() - ] - return values - def get_extra_actions(self, request): # url, base_text, icon, extra_text, extra css class, is a quick action actions = super(TreatmentFile, self).get_extra_actions(request) diff --git a/archaeological_operations/models.py b/archaeological_operations/models.py index 860422980..6ae219461 100644 --- a/archaeological_operations/models.py +++ b/archaeological_operations/models.py @@ -975,7 +975,14 @@ class Operation(ClosedItem, BaseHistorizedItem, QRCodeItem, GeoItem, OwnPerms,\ def get_values(self, prefix=''): values = super(Operation, self).get_values(prefix=prefix) - return get_values_town_related(self, prefix, values) + values = get_values_town_related(self, prefix, values) + if prefix: + return values + values[prefix + 'context_records'] = [ + cr.get_values(prefix=prefix, no_base_finds=False) + for cr in self.context_record.all() + ] + return values @classmethod def _get_department_code(cls, value): diff --git a/ishtar_common/models.py b/ishtar_common/models.py index 8774ed951..d4a6d4c5c 100644 --- a/ishtar_common/models.py +++ b/ishtar_common/models.py @@ -111,7 +111,9 @@ class ValueGetter(object): _prefix = "" GET_VALUES_EXTRA = [] COL_LABELS = {} - GET_VALUE_EXCLUDE_FIELDS = ['search_vector', 'id'] + GET_VALUE_EXCLUDE_FIELDS = [ + 'search_vector', 'id', 'multi_polygon', 'point_2d', 'point', + 'history_m2m'] def get_values(self, prefix=''): if not prefix: |