summaryrefslogtreecommitdiff
path: root/archaeological_finds
diff options
context:
space:
mode:
authorÉtienne Loks <etienne.loks@iggdrasil.net>2021-02-24 19:14:37 +0100
committerÉtienne Loks <etienne.loks@iggdrasil.net>2021-02-28 12:15:25 +0100
commit16a47f887447ecccd56fc848aee95fa56af92548 (patch)
treef96e518b2766d2a300829d0e5f9fac491d6d065d /archaeological_finds
parent0eab67538b8f2af9283bf1e77438763914e355b7 (diff)
downloadIshtar-16a47f887447ecccd56fc848aee95fa56af92548.tar.bz2
Ishtar-16a47f887447ecccd56fc848aee95fa56af92548.zip
get_values: get containers from operation - material_types_code from finds
Diffstat (limited to 'archaeological_finds')
-rw-r--r--archaeological_finds/models_finds.py25
-rw-r--r--archaeological_finds/tests.py18
2 files changed, 43 insertions, 0 deletions
diff --git a/archaeological_finds/models_finds.py b/archaeological_finds/models_finds.py
index 3924ee106..cf58952c9 100644
--- a/archaeological_finds/models_finds.py
+++ b/archaeological_finds/models_finds.py
@@ -1845,12 +1845,37 @@ class Find(BulkUpdatedItem, ValueGetter, DocumentItem, BaseHistorizedItem,
("base_finds.", _("List of associated base finds")),
]
+ def get_material_types_code(self) -> str:
+ """
+ Return pipe separated material type code inside a container
+ """
+ materials = set()
+ for material in self.material_types.exclude(
+ code__isnull=True).values_list("code", flat=True):
+ materials.add(material)
+ return "|".join(sorted(materials))
+
+ def get_material_types(self) -> str:
+ """
+ Return comma separated string of material types inside a container
+ """
+ materials = set()
+ for material in self.material_types.exclude(
+ label__isnull=True).values_list("label", flat=True):
+ materials.add(material)
+ return ", ".join(sorted(materials))
+
def get_values(self, prefix='', no_values=False, filtr=None, **kwargs):
no_base_finds = False
if "no_base_finds" in kwargs:
no_base_finds = kwargs["no_base_finds"]
values = super(Find, self).get_values(
prefix=prefix, no_values=no_values, filtr=filtr, **kwargs)
+ if not filtr or prefix + 'material_types' in filtr:
+ values[prefix + 'material_types'] = self.get_material_types()
+ if not filtr or prefix + 'material_types_code' in filtr:
+ values[prefix + 'material_types_code'] = \
+ self.get_material_types_code()
if no_base_finds:
return values
# by default attach first basefind data
diff --git a/archaeological_finds/tests.py b/archaeological_finds/tests.py
index bede89b51..afcdc713e 100644
--- a/archaeological_finds/tests.py
+++ b/archaeological_finds/tests.py
@@ -1004,6 +1004,24 @@ class FindTest(FindInit, TestCase):
self.assertEqual(models.BaseFind.objects.filter(
pk=self.base_finds[0].pk).count(), 0)
+ def test_get_material_types(self):
+ mat0 = models.MaterialType.objects.all()[0]
+ mat1 = models.MaterialType.objects.all()[1]
+ self.create_finds()
+ find0 = self.finds[0]
+ self.assertEqual(find0.get_material_types(), "")
+ self.assertEqual(find0.get_material_types_code(), "")
+
+ find0.material_types.add(mat0)
+ find0.material_types.add(mat1)
+
+ self.assertEqual(
+ find0.get_material_types(),
+ ", ".join(sorted([mat0.label, mat1.label])))
+ self.assertEqual(
+ find0.get_material_types_code(),
+ "|".join(sorted([mat0.code, mat1.code])))
+
class FindSearchTest(FindInit, TestCase, SearchText):
fixtures = WAREHOUSE_FIXTURES