summaryrefslogtreecommitdiff
path: root/ishtar_common/views.py
diff options
context:
space:
mode:
authorÉtienne Loks <etienne.loks@iggdrasil.net>2023-12-18 18:56:31 +0100
committerÉtienne Loks <etienne.loks@iggdrasil.net>2024-04-16 16:38:33 +0200
commit56c5f6e31f34e47d9a6c31767840c9d949d63abf (patch)
treec293968531fba747a39d464ac6b571dc39d99b2e /ishtar_common/views.py
parentef878c317f8aa33b5fdd92417a12e1385454e86e (diff)
downloadIshtar-56c5f6e31f34e47d9a6c31767840c9d949d63abf.tar.bz2
Ishtar-56c5f6e31f34e47d9a6c31767840c9d949d63abf.zip
✨ imports: add search criteria
Diffstat (limited to 'ishtar_common/views.py')
-rw-r--r--ishtar_common/views.py27
1 files changed, 27 insertions, 0 deletions
diff --git a/ishtar_common/views.py b/ishtar_common/views.py
index 55a5947c0..3d86583b1 100644
--- a/ishtar_common/views.py
+++ b/ishtar_common/views.py
@@ -886,6 +886,33 @@ def autocomplete_person(
return HttpResponse(data, content_type="text/plain")
+def autocomplete_import(request):
+ all_items = request.user.has_perm("ishtar_common.view_import", models.Import)
+ own_items = False
+ if not all_items:
+ own_items = request.user.has_perm(
+ "ishtar_common.view_own_import", models.Import
+ )
+ if not all_items and not own_items or not request.GET.get("term"):
+ return HttpResponse("[]", content_type="text/plain")
+ q = request.GET.get("term")
+ limit = request.GET.get("limit", 20)
+ try:
+ limit = int(limit)
+ except ValueError:
+ return HttpResponseBadRequest()
+ query = Q()
+ for q in q.split(" "):
+ query = query & (Q(name__unaccent__icontains=q) | Q(group__name__unaccent__icontains=q))
+ if own_items:
+ if not hasattr(request.user, "ishtaruser"):
+ return HttpResponse(json.dumps([]), content_type="text/plain")
+ query &= models.Import.get_query_owns(request.user.ishtaruser)
+ items = models.Import.objects.filter(query).distinct()[:limit]
+ data = [{"id": item.pk, "value": item.name} for item in items if item]
+ return HttpResponse(json.dumps(data), content_type="text/plain")
+
+
def autocomplete_area(request):
if not request.GET.get("term"):
return HttpResponse("[]", content_type="text/plain")