summaryrefslogtreecommitdiff
path: root/ishtar_common
diff options
context:
space:
mode:
Diffstat (limited to 'ishtar_common')
-rw-r--r--ishtar_common/forms.py25
-rw-r--r--ishtar_common/models.py2
-rw-r--r--ishtar_common/models_common.py27
-rw-r--r--ishtar_common/urls.py1
-rw-r--r--ishtar_common/views.py27
-rw-r--r--ishtar_common/views_item.py2
6 files changed, 71 insertions, 13 deletions
diff --git a/ishtar_common/forms.py b/ishtar_common/forms.py
index c560dc5ec..b81b42bc6 100644
--- a/ishtar_common/forms.py
+++ b/ishtar_common/forms.py
@@ -1000,7 +1000,28 @@ class HistorySelect(CustomForm, TableSelect):
self.custom_form_ordering()
-class DocumentItemSelect(HistorySelect):
+class ImportSelect(HistorySelect):
+ imports = forms.IntegerField(
+ label=_("Imported from"),
+ widget=widgets.JQueryAutoComplete(
+ reverse_lazy(
+ 'autocomplete-import',
+ ),
+ associated_model=models.Import),
+ validators=[models.valid_id(models.Import)])
+ CURRENT_FIELDS = [
+ "imports",
+ ] + HistorySelect.CURRENT_FIELDS
+ _explicit_ordering = True
+
+ def __init__(self, *args, **kwargs):
+ user = kwargs.get("user", None)
+ super().__init__(*args, **kwargs)
+ if not user or (not user.has_perm("view_import") and not user.has_perm("view_own_import")):
+ self.fields.pop("imports")
+
+
+class DocumentItemSelect(ImportSelect):
documents__image__isnull = forms.NullBooleanField(label=_("Has an image?"))
documents__associated_file__isnull = forms.NullBooleanField(
label=_("Has an attached file?")
@@ -1012,7 +1033,7 @@ class DocumentItemSelect(HistorySelect):
"documents__image__isnull",
"documents__associated_file__isnull",
"documents__associated_url__isnull",
- ] + HistorySelect.CURRENT_FIELDS
+ ] + ImportSelect.CURRENT_FIELDS
_explicit_ordering = True
diff --git a/ishtar_common/models.py b/ishtar_common/models.py
index d7a546696..696020c58 100644
--- a/ishtar_common/models.py
+++ b/ishtar_common/models.py
@@ -147,6 +147,7 @@ from ishtar_common.models_common import (
SearchAltName,
OwnPerms,
Cached,
+ Imported,
Address,
post_save_cache,
TemplateItem,
@@ -188,6 +189,7 @@ __all__ = [
"ImporterDefaultValues",
"ImporterColumn",
"ImporterDuplicateField",
+ "Imported",
"Regexp",
"ImportTarget",
"ItemKey",
diff --git a/ishtar_common/models_common.py b/ishtar_common/models_common.py
index 658c7d157..c8686d7b3 100644
--- a/ishtar_common/models_common.py
+++ b/ishtar_common/models_common.py
@@ -1094,6 +1094,16 @@ class FullSearch(models.Model):
return changed
+class SearchAltName(object):
+ def __init__(
+ self, search_key, search_query, extra_query=None, distinct_query=False
+ ):
+ self.search_key = search_key
+ self.search_query = search_query
+ self.extra_query = extra_query or {}
+ self.distinct_query = distinct_query
+
+
class Imported(models.Model):
imports = models.ManyToManyField(
Import, blank=True, related_name="imported_%(app_label)s_%(class)s"
@@ -1104,6 +1114,13 @@ class Imported(models.Model):
Import, blank=True, related_name="import_updated_%(app_label)s_%(class)s"
)
+ ALT_NAMES = {
+ "imports": SearchAltName(
+ pgettext_lazy("key for text search", "imports"),
+ "imports__name__iexact",
+ ),
+ }
+
class Meta:
abstract = True
@@ -1303,16 +1320,6 @@ class FixAssociated:
setattr(item, subkey, new_value)
-class SearchAltName(object):
- def __init__(
- self, search_key, search_query, extra_query=None, distinct_query=False
- ):
- self.search_key = search_key
- self.search_query = search_query
- self.extra_query = extra_query or {}
- self.distinct_query = distinct_query
-
-
class HistoryError(Exception):
def __init__(self, value):
self.value = value
diff --git a/ishtar_common/urls.py b/ishtar_common/urls.py
index c3d614ac6..85d56aeb7 100644
--- a/ishtar_common/urls.py
+++ b/ishtar_common/urls.py
@@ -464,6 +464,7 @@ urlpatterns += [
views.show_import,
name="show-import",
),
+ url(r"autocomplete-import/$", views.autocomplete_import, name="autocomplete-import"),
url(
r"show-importgroup(?:/(?P<pk>\d+))?/(?P<type>odt|pdf)?$",
views.show_import_group,
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")
diff --git a/ishtar_common/views_item.py b/ishtar_common/views_item.py
index d71775921..846646d6b 100644
--- a/ishtar_common/views_item.py
+++ b/ishtar_common/views_item.py
@@ -2237,7 +2237,7 @@ def get_item(
items_nb = 0
if count:
return items_nb
- # print(str(items.values("id").query).encode('utf-8'))
+ # print(str(items.values("id").query))
if search_vector: # for serialization
dct["search_vector"] = search_vector