From bab8138f11839dcfa597435eb48aefc31aa4580b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?St=C3=A9phan=20Sainl=C3=A9ger?= Date: Fri, 26 Aug 2022 23:15:52 +0200 Subject: [PATCH] [ADD] create ``project_task_portal_form`` add-on --- project_task_portal_form/.gitignore | 2 + project_task_portal_form/README.rst | 7 ++ project_task_portal_form/__init__.py | 3 + project_task_portal_form/__manifest__.py | 86 +++++++++++++ .../controllers/__init__.py | 3 + .../controllers/portal_task_creation.py | 105 ++++++++++++++++ project_task_portal_form/i18n/README | 1 + .../views/portal_task_creation_form.xml | 119 ++++++++++++++++++ 8 files changed, 326 insertions(+) create mode 100644 project_task_portal_form/.gitignore create mode 100644 project_task_portal_form/README.rst create mode 100644 project_task_portal_form/__init__.py create mode 100644 project_task_portal_form/__manifest__.py create mode 100644 project_task_portal_form/controllers/__init__.py create mode 100644 project_task_portal_form/controllers/portal_task_creation.py create mode 100644 project_task_portal_form/i18n/README create mode 100644 project_task_portal_form/views/portal_task_creation_form.xml diff --git a/project_task_portal_form/.gitignore b/project_task_portal_form/.gitignore new file mode 100644 index 0000000..6da5887 --- /dev/null +++ b/project_task_portal_form/.gitignore @@ -0,0 +1,2 @@ +*.*~ +*pyc diff --git a/project_task_portal_form/README.rst b/project_task_portal_form/README.rst new file mode 100644 index 0000000..7e38915 --- /dev/null +++ b/project_task_portal_form/README.rst @@ -0,0 +1,7 @@ +===================== +project_task_portal_form +===================== + +Add a portal form to create project tasks + +This is an Odoo addon. diff --git a/project_task_portal_form/__init__.py b/project_task_portal_form/__init__.py new file mode 100644 index 0000000..b0f26a9 --- /dev/null +++ b/project_task_portal_form/__init__.py @@ -0,0 +1,3 @@ +# -*- coding: utf-8 -*- + +from . import controllers diff --git a/project_task_portal_form/__manifest__.py b/project_task_portal_form/__manifest__.py new file mode 100644 index 0000000..e53d18f --- /dev/null +++ b/project_task_portal_form/__manifest__.py @@ -0,0 +1,86 @@ +# Copyright 2022 Stéphan Sainléger (Elabore) +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +{ + "name": "project_task_portal_form", + "version": "12.0.1.0.0", + "author": "Elabore", + "website": "https://elabore.coop", + "maintainer": "Stéphan Sainléger", + "license": "AGPL-3", + "category": "Tools", + "summary": "Add a portal form to create project tasks", + "description": """ + :image: https://img.shields.io/badge/licence-AGPL--3-blue.svg + :target: http://www.gnu.org/licenses/agpl-3.0-standalone.html + :alt: License: AGPL-3 +======================== +project_task_portal_form +======================== + +Add a portal form to create project tasks + +Installation +============ + +Use Odoo normal module installation procedure to install +``project_task_portal_form``. + +Known issues / Roadmap +====================== + +None yet. +Bug Tracker +=========== + +Bugs are tracked on `our issues website `_. In case of +trouble, please check there if your issue has already been +reported. If you spotted it first, help us smashing it by providing a +detailed and welcomed feedback. + +Credits +======= + +Contributors +------------ + +* Stéphan Sainléger + +Funders +------- + +The development of this module has been financially supported by: +* Elabore (https://elabore.coop) + + +Maintainer +---------- + +This module is maintained by Elabore. + +""", + # any module necessary for this one to work correctly + "depends": [ + "base", + "project", + "project_request_data", + "project_user_default_project", + ], + "qweb": [], + "external_dependencies": { + "python": [], + }, + # always loaded + "data": [ + "views/portal_task_creation_form.xml", + ], + # only loaded in demonstration mode + "demo": [], + "js": [], + "css": [], + "installable": True, + # Install this module automatically if all dependency have been previously + # and independently installed. Used for synergetic or glue modules. + "auto_install": False, + "application": False, +} \ No newline at end of file diff --git a/project_task_portal_form/controllers/__init__.py b/project_task_portal_form/controllers/__init__.py new file mode 100644 index 0000000..c4eb2d8 --- /dev/null +++ b/project_task_portal_form/controllers/__init__.py @@ -0,0 +1,3 @@ +# -*- coding: utf-8 -*- + +from . import portal_task_creation \ No newline at end of file diff --git a/project_task_portal_form/controllers/portal_task_creation.py b/project_task_portal_form/controllers/portal_task_creation.py new file mode 100644 index 0000000..17b9d38 --- /dev/null +++ b/project_task_portal_form/controllers/portal_task_creation.py @@ -0,0 +1,105 @@ +# Copyright 2020 Lokavaluto () +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). +from odoo import http +from odoo.http import request +from odoo.addons.portal.controllers.portal import CustomerPortal + + +class PortalTaskCreation(CustomerPortal): + _TASK_CREATION_FIELDS = [ + "name", + "service_id", + "request_type_id", + "small_description", + "access", + "bug_report", + "priority", + ] + + # Variable to update to add other fields in child classes + _EXTRA_FIELDS = [] + + def _taskform_get_page_view_values(self, partner, access_token, **kwargs): + values = { + "page_name": "portal_task_form", + "partner": partner, + } + return self._get_page_view_values( + partner, + access_token, + values, + "my_task_creation_history", + False, + **kwargs + ) + + def _get_task_priorities(self): + priorities = [] + for id, name in request.env['project.task']._fields['priority'].selection: + value = { + "id": id, + "name": name + } + priorities.append(value) + return priorities + + @http.route( + ["/task/form"], + type="http", + auth="user", + website=True, + ) + def portal_task_creation(self, access_token=None, redirect=None, **kw): + partner = request.env.user.partner_id + values = self._task_get_page_view_values(partner, access_token, **kw) + request_types = request.env["request.type"].sudo().search([]) + task_services = request.env["task.service"].sudo().search([]) + priorities = self._get_task_priorities() + error = dict() + error_message = [] + values.update( + { + "request_types": request_types, + "task_services": task_services, + "priorities": priorities, + "error": error, + "error_message": error_message, + } + ) + return request.render("project_task_portal_form.portal_task_creation_form", values) + + def _compute_form_data(self, data): + values = {} + for field in self._TASK_CREATION_FIELDS: + if data.get(field): + values[field] = data.pop(field) + for field in self._EXTRA_FIELDS: + if data.get(field): + values[field] = data.pop(field) + description = "" + if values.get("small_description", False): + description = description + "DESCRIPTION:
" + values["small_description"] + if values.get("access", False): + description = description + "

ACCESS:
" + values["access"] + if values.get("bug_report", False): + description = description + "

BUG REPORT:
" + values["bug_report"] + values["description"] = description + return values + + @http.route( + ["/task/create"], + type="http", + auth="public", + website=True, + ) + def create_task(self, **kwargs): + # Get form values + user = request.env.user + values = self._compute_form_data(kwargs) + values["project_id"] = user.default_project_id.id + values["partner_id"] = user.partner_id.id + values["user_id"] = None + + # Create task + request.env["project.task"].create(values) + return request.render("project_task_portal_form.portal_task_created", {}) diff --git a/project_task_portal_form/i18n/README b/project_task_portal_form/i18n/README new file mode 100644 index 0000000..62197a1 --- /dev/null +++ b/project_task_portal_form/i18n/README @@ -0,0 +1 @@ +This directory should contain the *.po for Odoo translation. diff --git a/project_task_portal_form/views/portal_task_creation_form.xml b/project_task_portal_form/views/portal_task_creation_form.xml new file mode 100644 index 0000000..cec7a91 --- /dev/null +++ b/project_task_portal_form/views/portal_task_creation_form.xml @@ -0,0 +1,119 @@ + + +