From cba9df7eed965da05dd836132263d2b7ba525ac6 Mon Sep 17 00:00:00 2001 From: eLBati Date: Wed, 8 Jul 2020 16:00:00 +0200 Subject: [PATCH 1/3] [IMP] helpdesk_mgmt: Show attachments on portal's ticket view Forward port of 656c2d933586fcb08a50488ee5b0cd27b56dfe03 Note that the commit fc3905eaa2330e7d70714f9a614eb2b48d4d173f (allow portal users to write tickets) has not been forward ported as it is not necessary --- helpdesk_mgmt/controllers/myaccount.py | 11 +++++++++++ helpdesk_mgmt/views/helpdesk_ticket_templates.xml | 14 ++++++++++++++ 2 files changed, 25 insertions(+) diff --git a/helpdesk_mgmt/controllers/myaccount.py b/helpdesk_mgmt/controllers/myaccount.py index 05a1b5ac51..fda71844fc 100644 --- a/helpdesk_mgmt/controllers/myaccount.py +++ b/helpdesk_mgmt/controllers/myaccount.py @@ -186,11 +186,22 @@ def _ticket_get_page_view_values(self, ticket, access_token, **kwargs): closed_stages = ticket.team_id._get_applicable_stages().filtered( lambda s: s.close_from_portal ) + files = ( + request.env["ir.attachment"] + .sudo() + .search( + [ + ("res_model", "=", "helpdesk.ticket"), + ("res_id", "=", ticket.id), + ] + ) + ) values = { "closed_stages": closed_stages, # used to display close buttons "page_name": "ticket", "ticket": ticket, "user": request.env.user, + "files": files, } return self._get_page_view_values( ticket, access_token, values, "my_tickets_history", False, **kwargs diff --git a/helpdesk_mgmt/views/helpdesk_ticket_templates.xml b/helpdesk_mgmt/views/helpdesk_ticket_templates.xml index f102037fd0..634162896a 100644 --- a/helpdesk_mgmt/views/helpdesk_ticket_templates.xml +++ b/helpdesk_mgmt/views/helpdesk_ticket_templates.xml @@ -242,6 +242,20 @@ + Attachments: +
+ + + + + + +
+
+
From b1aab4f210084ebe48df310f7ecf82ab2f2c0d17 Mon Sep 17 00:00:00 2001 From: Yann Papouin Date: Wed, 29 Mar 2023 10:05:25 +0200 Subject: [PATCH 2/3] [IMP] helpdesk_mgmt: Generate `access_token` for all attachments added on ticket submit Otherwise they stay "private" and are not displayed on the portal. --- helpdesk_mgmt/controllers/main.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/helpdesk_mgmt/controllers/main.py b/helpdesk_mgmt/controllers/main.py index ab772c6883..312f75bcbb 100644 --- a/helpdesk_mgmt/controllers/main.py +++ b/helpdesk_mgmt/controllers/main.py @@ -107,10 +107,12 @@ def submit_ticket(self, **kw): new_ticket = request.env["helpdesk.ticket"].sudo().create(vals) new_ticket.message_subscribe(partner_ids=request.env.user.partner_id.ids) if kw.get("attachment"): + IrAttachment = request.env["ir.attachment"] + attachment_ids = IrAttachment for c_file in request.httprequest.files.getlist("attachment"): data = c_file.read() if c_file.filename: - request.env["ir.attachment"].sudo().create( + attachment_ids += IrAttachment.sudo().create( { "name": c_file.filename, "datas": base64.b64encode(data), @@ -118,4 +120,5 @@ def submit_ticket(self, **kw): "res_id": new_ticket.id, } ) + attachment_ids.sudo().generate_access_token() return werkzeug.utils.redirect("/my/ticket/%s" % new_ticket.id) From 865385a5d9355d77448b245de2a220a3cdef97ea Mon Sep 17 00:00:00 2001 From: Yann Papouin Date: Tue, 25 Apr 2023 17:19:32 +0200 Subject: [PATCH 3/3] [IMP] helpdesk_mgmt: Test submit with attachments --- helpdesk_mgmt/tests/test_helpdesk_portal.py | 35 +++++++++++++++++++-- 1 file changed, 33 insertions(+), 2 deletions(-) diff --git a/helpdesk_mgmt/tests/test_helpdesk_portal.py b/helpdesk_mgmt/tests/test_helpdesk_portal.py index a6a12a0635..d48b5c1594 100644 --- a/helpdesk_mgmt/tests/test_helpdesk_portal.py +++ b/helpdesk_mgmt/tests/test_helpdesk_portal.py @@ -52,7 +52,7 @@ def _create_ticket(self, partner, ticket_title, **values): data.update(**values) return self.env["helpdesk.ticket"].create(data) - def _submit_ticket(self, **values): + def _submit_ticket(self, files=None, **values): data = { "category": self.env.ref("helpdesk_mgmt.helpdesk_category_1").id, "csrf_token": http.Request.csrf_token(self), @@ -60,7 +60,7 @@ def _submit_ticket(self, **values): "description": "\n".join(self.new_ticket_desc_lines), } data.update(**values) - resp = self.url_open("/submitted/ticket", data=data) + resp = self.url_open("/submitted/ticket", data=data, files=files) self.assertEqual(resp.status_code, 200) @@ -204,3 +204,34 @@ def _call_close_ticket(self, ticket, stage): self.assertTrue(resp.is_redirect) # http://127.0.0.1:8069/my/ticket/ self.assertTrue(resp.headers["Location"].endswith(f"/my/ticket/{ticket.id}")) return resp + + def test_submit_ticket_with_attachments(self): + self.authenticate("test-basic-user", "test-basic-user") + self._submit_ticket( + files=[ + ( + "attachment", + ("test.txt", b"test", "plain/text"), + ), + ( + "attachment", + ("test.svg", b"", "image/svg+xml"), + ), + ] + ) + ticket_id = self.get_new_tickets(self.basic_user) + self.assertEqual(len(ticket_id), 1) + # check that both files have been linked to the newly created ticket + attachment_ids = self.env["ir.attachment"].search( + [ + ("res_model", "=", "helpdesk.ticket"), + ("res_id", "=", ticket_id.id), + ] + ) + self.assertEqual(len(attachment_ids), 2) + # check that both files have kept their names + self.assertIn("test.txt", attachment_ids.mapped("name")) + self.assertIn("test.svg", attachment_ids.mapped("name")) + # check that both files are public (access_token is set) + self.assertTrue(attachment_ids[0].access_token) + self.assertTrue(attachment_ids[1].access_token)