From d0e7c62465090c20a47dcaee3edf46324440ce90 Mon Sep 17 00:00:00 2001 From: Nicolas Lempereur Date: Fri, 10 Nov 2023 09:09:23 +0000 Subject: [PATCH] [FIX] project: compute doc_count on new project Scenario: - add doc_count field in project.project view - create new project Issue: error and can't create new project > File "addons/project/models/project.py", > line 190, in _compute_attached_docs_count > psycopg2.errors.SyntaxError: syntax error at or near ")" > LINE 6: AND res_id IN () Fix: only do the query if there is non-NewID IDs opw-3584925 closes odoo/odoo#142074 X-original-commit: 4d9a5cedef9459f0e86f16631170f2dc965d0a3b Signed-off-by: Nicolas Lempereur (nle) --- addons/project/models/project_project.py | 44 +++++++++++++----------- 1 file changed, 23 insertions(+), 21 deletions(-) diff --git a/addons/project/models/project_project.py b/addons/project/models/project_project.py index f95c31905f5..90f0a16ae3b 100644 --- a/addons/project/models/project_project.py +++ b/addons/project/models/project_project.py @@ -23,30 +23,32 @@ class Project(models.Model): _systray_view = 'activity' def _compute_attached_docs_count(self): - self.env.cr.execute( - """ - WITH docs AS ( - SELECT res_id as id, count(*) as count - FROM ir_attachment - WHERE res_model = 'project.project' - AND res_id IN %(project_ids)s - GROUP BY res_id + docs_count = {} + if self.ids: + self.env.cr.execute( + """ + WITH docs AS ( + SELECT res_id as id, count(*) as count + FROM ir_attachment + WHERE res_model = 'project.project' + AND res_id IN %(project_ids)s + GROUP BY res_id - UNION ALL + UNION ALL - SELECT t.project_id as id, count(*) as count - FROM ir_attachment a - JOIN project_task t ON a.res_model = 'project.task' AND a.res_id = t.id - WHERE t.project_id IN %(project_ids)s - GROUP BY t.project_id + SELECT t.project_id as id, count(*) as count + FROM ir_attachment a + JOIN project_task t ON a.res_model = 'project.task' AND a.res_id = t.id + WHERE t.project_id IN %(project_ids)s + GROUP BY t.project_id + ) + SELECT id, sum(count) + FROM docs + GROUP BY id + """, + {"project_ids": tuple(self.ids)} ) - SELECT id, sum(count) - FROM docs - GROUP BY id - """, - {"project_ids": tuple(self.ids)} - ) - docs_count = dict(self.env.cr.fetchall()) + docs_count = dict(self.env.cr.fetchall()) for project in self: project.doc_count = docs_count.get(project.id, 0)