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) 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/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) 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: +
+ + + + + + +
+
+