diff options
| author | Richard Sassine <richardsassine@tutanota.com> | 2021-05-04 18:00:38 +0300 |
|---|---|---|
| committer | Richard Sassine <richardsassine@tutanota.com> | 2021-05-04 18:00:38 +0300 |
| commit | ad97722b1b35aff50d0adf13a19715f7b8373c07 (patch) | |
| tree | edf36f1114b896a01602e31dafd74efe45736427 /helpdesk_mgmt/controllers | |
initial commit
Diffstat (limited to 'helpdesk_mgmt/controllers')
| -rw-r--r-- | helpdesk_mgmt/controllers/__init__.py | 2 | ||||
| -rw-r--r-- | helpdesk_mgmt/controllers/__pycache__/__init__.cpython-36.pyc | bin | 0 -> 226 bytes | |||
| -rw-r--r-- | helpdesk_mgmt/controllers/__pycache__/main.cpython-36.pyc | bin | 0 -> 2558 bytes | |||
| -rw-r--r-- | helpdesk_mgmt/controllers/__pycache__/myaccount.cpython-36.pyc | bin | 0 -> 3490 bytes | |||
| -rw-r--r-- | helpdesk_mgmt/controllers/main.py | 76 | ||||
| -rw-r--r-- | helpdesk_mgmt/controllers/myaccount.py | 129 |
6 files changed, 207 insertions, 0 deletions
diff --git a/helpdesk_mgmt/controllers/__init__.py b/helpdesk_mgmt/controllers/__init__.py new file mode 100644 index 0000000..69884d3 --- /dev/null +++ b/helpdesk_mgmt/controllers/__init__.py @@ -0,0 +1,2 @@ +from . import main +from . import myaccount diff --git a/helpdesk_mgmt/controllers/__pycache__/__init__.cpython-36.pyc b/helpdesk_mgmt/controllers/__pycache__/__init__.cpython-36.pyc Binary files differnew file mode 100644 index 0000000..deba853 --- /dev/null +++ b/helpdesk_mgmt/controllers/__pycache__/__init__.cpython-36.pyc diff --git a/helpdesk_mgmt/controllers/__pycache__/main.cpython-36.pyc b/helpdesk_mgmt/controllers/__pycache__/main.cpython-36.pyc Binary files differnew file mode 100644 index 0000000..bb98340 --- /dev/null +++ b/helpdesk_mgmt/controllers/__pycache__/main.cpython-36.pyc diff --git a/helpdesk_mgmt/controllers/__pycache__/myaccount.cpython-36.pyc b/helpdesk_mgmt/controllers/__pycache__/myaccount.cpython-36.pyc Binary files differnew file mode 100644 index 0000000..bbeacb2 --- /dev/null +++ b/helpdesk_mgmt/controllers/__pycache__/myaccount.cpython-36.pyc diff --git a/helpdesk_mgmt/controllers/main.py b/helpdesk_mgmt/controllers/main.py new file mode 100644 index 0000000..8c910fc --- /dev/null +++ b/helpdesk_mgmt/controllers/main.py @@ -0,0 +1,76 @@ +import base64 +import logging + +import werkzeug + +import odoo.http as http +from odoo.http import request + +_logger = logging.getLogger(__name__) + + +class HelpdeskTicketController(http.Controller): + @http.route("/ticket/close", type="http", auth="user") + def support_ticket_close(self, **kw): + """Close the support ticket""" + values = {} + for field_name, field_value in kw.items(): + if field_name.endswith("_id"): + values[field_name] = int(field_value) + else: + values[field_name] = field_value + ticket = ( + http.request.env["helpdesk.ticket"] + .sudo() + .search([("id", "=", values["ticket_id"])]) + ) + ticket.stage_id = values.get("stage_id") + + return werkzeug.utils.redirect("/my/ticket/" + str(ticket.id)) + + @http.route("/new/ticket", type="http", auth="user", website=True) + def create_new_ticket(self, **kw): + categories = http.request.env["helpdesk.ticket.category"].search( + [("active", "=", True)] + ) + email = http.request.env.user.email + name = http.request.env.user.name + return http.request.render( + "helpdesk_mgmt.portal_create_ticket", + {"categories": categories, "email": email, "name": name}, + ) + + @http.route("/submitted/ticket", type="http", auth="user", website=True, csrf=True) + def submit_ticket(self, **kw): + vals = { + "partner_name": kw.get("name"), + "company_id": http.request.env.user.company_id.id, + "category_id": kw.get("category"), + "partner_email": kw.get("email"), + "description": kw.get("description"), + "name": kw.get("subject"), + "attachment_ids": False, + "channel_id": request.env["helpdesk.ticket.channel"] + .sudo() + .search([("name", "=", "Web")]) + .id, + "partner_id": request.env["res.partner"] + .sudo() + .search([("name", "=", kw.get("name")), ("email", "=", kw.get("email"))]) + .id, + } + 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"): + for c_file in request.httprequest.files.getlist("attachment"): + data = c_file.read() + if c_file.filename: + request.env["ir.attachment"].sudo().create( + { + "name": c_file.filename, + "datas": base64.b64encode(data), + "res_model": "helpdesk.ticket", + "res_id": new_ticket.id, + } + ) + return werkzeug.utils.redirect("/my/tickets") diff --git a/helpdesk_mgmt/controllers/myaccount.py b/helpdesk_mgmt/controllers/myaccount.py new file mode 100644 index 0000000..a795fc0 --- /dev/null +++ b/helpdesk_mgmt/controllers/myaccount.py @@ -0,0 +1,129 @@ +# License LGPL-3.0 or later (https://www.gnu.org/licenses/lgpl.html). + +from odoo import _, http +from odoo.exceptions import AccessError +from odoo.http import request + +from odoo.addons.portal.controllers.portal import CustomerPortal, pager as portal_pager + + +class CustomerPortalHelpdesk(CustomerPortal): + def _prepare_portal_layout_values(self): + values = super()._prepare_portal_layout_values() + partner = request.env.user.partner_id + ticket_count = request.env["helpdesk.ticket"].search_count( + [("partner_id", "child_of", partner.id)] + ) + values["ticket_count"] = ticket_count + return values + + def _helpdesk_ticket_check_access(self, ticket_id): + ticket = request.env["helpdesk.ticket"].browse([ticket_id]) + ticket_sudo = ticket.sudo() + try: + ticket.check_access_rights("read") + ticket.check_access_rule("read") + except AccessError: + raise + return ticket_sudo + + @http.route( + ["/my/tickets", "/my/tickets/page/<int:page>"], + type="http", + auth="user", + website=True, + ) + def portal_my_tickets( + self, page=1, date_begin=None, date_end=None, sortby=None, filterby=None, **kw + ): + values = self._prepare_portal_layout_values() + HelpdesTicket = request.env["helpdesk.ticket"] + partner = request.env.user.partner_id + domain = [("partner_id", "child_of", partner.id)] + + searchbar_sortings = { + "date": {"label": _("Newest"), "order": "create_date desc"}, + "name": {"label": _("Name"), "order": "name"}, + "stage": {"label": _("Stage"), "order": "stage_id"}, + "update": { + "label": _("Last Stage Update"), + "order": "last_stage_update desc", + }, + } + searchbar_filters = {"all": {"label": _("All"), "domain": []}} + for stage in request.env["helpdesk.ticket.stage"].search([]): + searchbar_filters.update( + { + str(stage.id): { + "label": stage.name, + "domain": [("stage_id", "=", stage.id)], + } + } + ) + + # default sort by order + if not sortby: + sortby = "date" + order = searchbar_sortings[sortby]["order"] + + # default filter by value + if not filterby: + filterby = "all" + domain += searchbar_filters[filterby]["domain"] + + # count for pager + ticket_count = HelpdesTicket.search_count(domain) + # pager + pager = portal_pager( + url="/my/tickets", + url_args={}, + total=ticket_count, + page=page, + step=self._items_per_page, + ) + # content according to pager and archive selected + tickets = HelpdesTicket.search( + domain, order=order, limit=self._items_per_page, offset=pager["offset"] + ) + values.update( + { + "date": date_begin, + "tickets": tickets, + "page_name": "ticket", + "pager": pager, + "default_url": "/my/tickets", + "searchbar_sortings": searchbar_sortings, + "sortby": sortby, + "searchbar_filters": searchbar_filters, + "filterby": filterby, + } + ) + return request.render("helpdesk_mgmt.portal_my_tickets", values) + + @http.route(["/my/ticket/<int:ticket_id>"], type="http", website=True) + def portal_my_ticket(self, ticket_id=None, **kw): + try: + ticket_sudo = self._helpdesk_ticket_check_access(ticket_id) + except AccessError: + return request.redirect("/my") + values = self._ticket_get_page_view_values(ticket_sudo, **kw) + return request.render("helpdesk_mgmt.portal_helpdesk_ticket_page", values) + + def _ticket_get_page_view_values(self, ticket, **kwargs): + closed_stages = request.env["helpdesk.ticket.stage"].search( + [("closed", "=", True)] + ) + values = { + "page_name": "ticket", + "ticket": ticket, + "closed_stages": closed_stages, + } + + if kwargs.get("error"): + values["error"] = kwargs["error"] + if kwargs.get("warning"): + values["warning"] = kwargs["warning"] + if kwargs.get("success"): + values["success"] = kwargs["success"] + + return values |
