summaryrefslogtreecommitdiff
path: root/helpdesk_mgmt/controllers
diff options
context:
space:
mode:
Diffstat (limited to 'helpdesk_mgmt/controllers')
-rw-r--r--helpdesk_mgmt/controllers/__init__.py2
-rw-r--r--helpdesk_mgmt/controllers/__pycache__/__init__.cpython-36.pycbin0 -> 226 bytes
-rw-r--r--helpdesk_mgmt/controllers/__pycache__/main.cpython-36.pycbin0 -> 2558 bytes
-rw-r--r--helpdesk_mgmt/controllers/__pycache__/myaccount.cpython-36.pycbin0 -> 3490 bytes
-rw-r--r--helpdesk_mgmt/controllers/main.py76
-rw-r--r--helpdesk_mgmt/controllers/myaccount.py129
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
new file mode 100644
index 0000000..deba853
--- /dev/null
+++ b/helpdesk_mgmt/controllers/__pycache__/__init__.cpython-36.pyc
Binary files differ
diff --git a/helpdesk_mgmt/controllers/__pycache__/main.cpython-36.pyc b/helpdesk_mgmt/controllers/__pycache__/main.cpython-36.pyc
new file mode 100644
index 0000000..bb98340
--- /dev/null
+++ b/helpdesk_mgmt/controllers/__pycache__/main.cpython-36.pyc
Binary files differ
diff --git a/helpdesk_mgmt/controllers/__pycache__/myaccount.cpython-36.pyc b/helpdesk_mgmt/controllers/__pycache__/myaccount.cpython-36.pyc
new file mode 100644
index 0000000..bbeacb2
--- /dev/null
+++ b/helpdesk_mgmt/controllers/__pycache__/myaccount.cpython-36.pyc
Binary files differ
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