From 783090c2cd5311b779e6b61fa1d2a328323b57f5 Mon Sep 17 00:00:00 2001 From: shamoon <4887959+shamoon@users.noreply.github.com> Date: Mon, 15 Jan 2024 14:06:59 -0800 Subject: [PATCH 1/2] Fix shared by me filter with multiple users / groups in postgres (#5396) --- src/documents/filters.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/documents/filters.py b/src/documents/filters.py index bab20a4dc..b760b9779 100644 --- a/src/documents/filters.py +++ b/src/documents/filters.py @@ -114,6 +114,8 @@ class SharedByUser(Filter): ctype = ContentType.objects.get_for_model(self.model) UserObjectPermission = get_user_obj_perms_model() GroupObjectPermission = get_group_obj_perms_model() + # see https://github.com/paperless-ngx/paperless-ngx/issues/5392, we limit subqueries + # to 1 because Postgres doesn't like returning > 1 row, but all we care about is > 0 return ( qs.filter( owner_id=value, @@ -123,7 +125,7 @@ class SharedByUser(Filter): UserObjectPermission.objects.filter( content_type=ctype, object_pk=Cast(OuterRef("pk"), CharField()), - ).values("user_id"), + ).values("user_id")[:1], ), ) .annotate( @@ -131,7 +133,7 @@ class SharedByUser(Filter): GroupObjectPermission.objects.filter( content_type=ctype, object_pk=Cast(OuterRef("pk"), CharField()), - ).values("group_id"), + ).values("group_id")[:1], ), ) .filter( From ad07791bac0427fc41376fd280f92b3f11d49a50 Mon Sep 17 00:00:00 2001 From: shamoon <4887959+shamoon@users.noreply.github.com> Date: Mon, 15 Jan 2024 14:15:30 -0800 Subject: [PATCH 2/2] Enhancement / QoL: show selected tasks count (#5379) --- src-ui/messages.xlf | 17 +- .../admin/tasks/tasks.component.html | 297 +++++++++--------- 2 files changed, 163 insertions(+), 151 deletions(-) diff --git a/src-ui/messages.xlf b/src-ui/messages.xlf index b04f86ebc..2b22142ee 100644 --- a/src-ui/messages.xlf +++ b/src-ui/messages.xlf @@ -1641,35 +1641,42 @@ {VAR_PLURAL, plural, =1 {One task} other { total tasks}} src/app/components/admin/tasks/tasks.component.html - 113 + 114 + + + +  ( selected) + + src/app/components/admin/tasks/tasks.component.html + 116 Failed src/app/components/admin/tasks/tasks.component.html - 123,125 + 128,130 Complete src/app/components/admin/tasks/tasks.component.html - 131,133 + 136,138 Started src/app/components/admin/tasks/tasks.component.html - 139,141 + 144,146 Queued src/app/components/admin/tasks/tasks.component.html - 147,149 + 152,154 diff --git a/src-ui/src/app/components/admin/tasks/tasks.component.html b/src-ui/src/app/components/admin/tasks/tasks.component.html index 6531f146a..21895b75d 100644 --- a/src-ui/src/app/components/admin/tasks/tasks.component.html +++ b/src-ui/src/app/components/admin/tasks/tasks.component.html @@ -3,153 +3,158 @@ - -
- - -
- - +  Clear selection + + +
+ + +
+ + - @if (!tasksService.completedFileTasks && tasksService.loading) { -
-
Loading...
- } +@if (!tasksService.completedFileTasks && tasksService.loading) { +
+
Loading...
+} - - - - - - - - @if (activeTab !== 'started' && activeTab !== 'queued') { - - } - - - - - - @for (task of tasks | slice: (page-1) * pageSize : page * pageSize; track task) { - - - - - @if (activeTab !== 'started' && activeTab !== 'queued') { - - } - - - - - - - } - -
-
- - -
-
NameCreatedResultsInfoActions
-
- - -
-
{{ task.task_file_name }}{{ task.date_created | customDate:'short' }} - @if (task.result?.length > 50) { -
- {{ task.result | slice:0:50 }}… -
- } - @if (task.result?.length <= 50) { - {{ task.result }} - } - -
{{ task.result | slice:0:300 }}@if (task.result.length > 300) {
-                      …
-                    }
- @if (task.result?.length > 300) { -
(click for full output) - } -
-
- - -
- - - @if (task.related_document) { - - } - -
-
-
{{ task.result }}
-
- -
- @if (tasks.length > 0) { -
{tasks.length, plural, =1 {One {{this.activeTabLocalized}} task} other {{{tasks.length || 0}} total {{this.activeTabLocalized}} tasks}}
- } - @if (tasks.length > pageSize) { - - } + + + + + + + + @if (activeTab !== 'started' && activeTab !== 'queued') { + + } + + + + + + @for (task of tasks | slice: (page-1) * pageSize : page * pageSize; track task) { + + + + + @if (activeTab !== 'started' && activeTab !== 'queued') { + + } + + + + + + + } + +
+
+ +
- +
NameCreatedResultsInfoActions
+
+ + +
+
{{ task.task_file_name }}{{ task.date_created | customDate:'short' }} + @if (task.result?.length > 50) { +
+ {{ task.result | slice:0:50 }}… +
+ } + @if (task.result?.length <= 50) { + {{ task.result }} + } + +
{{ task.result | slice:0:300 }}@if (task.result.length > 300) {
+                  …
+                }
+ @if (task.result?.length > 300) { +
(click for full output) + } +
+
+ + +
+ + + @if (task.related_document) { + + } + +
+
+
{{ task.result }}
+
- -
+
+ @if (tasks.length > 0) { +
+ {tasks.length, plural, =1 {One {{this.activeTabLocalized}} task} other {{{tasks.length || 0}} total {{this.activeTabLocalized}} tasks}} + @if (selectedTasks.size > 0) { +  ({{selectedTasks.size}} selected) + } +
+ } + @if (tasks.length > pageSize) { + + } +
+
+ + +