summaryrefslogtreecommitdiff
path: root/archaeological_finds/serializers.py
diff options
context:
space:
mode:
authorÉtienne Loks <etienne.loks@iggdrasil.net>2019-09-06 20:22:55 +0200
committerÉtienne Loks <etienne.loks@iggdrasil.net>2019-09-06 20:22:55 +0200
commit821961208036c05310f65a94d740cca38436e7eb (patch)
tree1e4e3653789d36146acc02cc5838ac54f95a2e28 /archaeological_finds/serializers.py
parente05ed38b423957d0a6a842c62cb29b6b77cd611d (diff)
downloadIshtar-821961208036c05310f65a94d740cca38436e7eb.tar.bz2
Ishtar-821961208036c05310f65a94d740cca38436e7eb.zip
Serialization: warehouse filter
Diffstat (limited to 'archaeological_finds/serializers.py')
-rw-r--r--archaeological_finds/serializers.py35
1 files changed, 34 insertions, 1 deletions
diff --git a/archaeological_finds/serializers.py b/archaeological_finds/serializers.py
index 7ce17c924..6e079f7ec 100644
--- a/archaeological_finds/serializers.py
+++ b/archaeological_finds/serializers.py
@@ -1,3 +1,5 @@
+from django.db.models import Q
+
from ishtar_common.serializers import generic_get_results, archive_serialization
from archaeological_finds import models
@@ -9,10 +11,37 @@ FIND_MODEL_LIST = [
# TODO: associated documents, property, findbasket, treatments
+def generate_warehouse_queryset(ids):
+ q_find, q_basefind = None, None
+
+ for container_key in ("container", "container_ref"):
+ for warehouse_key in ("location", "responsible"):
+ q_f = Q(**
+ {"{}__{}__id__in".format(
+ container_key, warehouse_key): ids})
+ q_bf = Q(**
+ {"find__{}__{}__id__in".format(
+ container_key, warehouse_key): ids})
+ if not q_find:
+ q_find = q_f
+ q_basefind = q_bf
+ else:
+ q_find |= q_f
+ q_basefind |= q_bf
+
+ result_queryset = {
+ models.BaseFind.__name__:
+ models.BaseFind.objects.filter(q_basefind),
+ models.Find.__name__:
+ models.Find.objects.filter(q_find),
+ }
+ return result_queryset
+
+
def find_serialization(archive=False, return_empty_types=False,
archive_name=None, operation_queryset=None,
site_queryset=None, cr_queryset=None,
- find_queryset=None):
+ find_queryset=None, warehouse_queryset=None):
result_queryset = {}
if operation_queryset:
operation_ids = operation_queryset.values_list("id", flat=True)
@@ -54,6 +83,10 @@ def find_serialization(archive=False, return_empty_types=False,
find__id__in=find_ids),
models.Find.__name__: find_queryset,
}
+ elif warehouse_queryset:
+ warehouse_ids = warehouse_queryset.values_list("id", flat=True)
+ result_queryset = generate_warehouse_queryset(warehouse_ids)
+
result = generic_get_results(FIND_MODEL_LIST, "finds",
result_queryset=result_queryset)
full_archive = archive_serialization(