From 3d60d0d17e6b6383f003c4611adbaeb1bc37ec9c Mon Sep 17 00:00:00 2001 From: Leo Pinedo Date: Fri, 30 Sep 2022 00:52:41 +0000 Subject: [PATCH] [WIP] project_acceptance: changes by functionality of buttons H11043 --- .theia/launch.json | 20 ++++ project_acceptance/__init__.py | 1 + project_acceptance/__manifest__.py | 5 + project_acceptance/controllers/__init__.py | 1 + project_acceptance/controllers/portal.py | 93 +++++++++++++++++++ .../data/mail_template_data.xml | 9 +- project_acceptance/models/project.py | 2 +- project_acceptance/report/project_report.xml | 16 ++++ .../report/project_report_template.xml | 44 +++++++++ .../security/project_acceptance_security.xml | 15 +++ .../views/project_portal_templates.xml | 63 ++++++++++++- project_acceptance/views/project_views.xml | 15 +++ 12 files changed, 276 insertions(+), 8 deletions(-) create mode 100644 project_acceptance/controllers/__init__.py create mode 100644 project_acceptance/controllers/portal.py create mode 100644 project_acceptance/report/project_report.xml create mode 100644 project_acceptance/report/project_report_template.xml create mode 100644 project_acceptance/security/project_acceptance_security.xml create mode 100644 project_acceptance/views/project_views.xml diff --git a/.theia/launch.json b/.theia/launch.json index ab5720b4..25aee254 100644 --- a/.theia/launch.json +++ b/.theia/launch.json @@ -18,6 +18,16 @@ "args": ["shell", "--no-xmlrpc"], "console": "integratedTerminal" }, + { + "name": "Odoo: INIT 'sale'", + "type": "python", + "request": "launch", + "program": "/opt/odoo/hibou-suite/odoo-run.py", + "args": ["-i", "sale", + "-u", "sale", + "--stop-after-init"], + "console": "integratedTerminal" + }, { "name": "Odoo: TEST 'sale'", "type": "python", @@ -28,6 +38,16 @@ "--test-enable", "--no-xmlrpc", "--stop-after-init"], "console": "integratedTerminal" }, + { + "name": "Odoo: INIT 'project_acceptance'", + "type": "python", + "request": "launch", + "program": "/opt/odoo/hibou-suite/odoo-run.py", + "args": ["-i", "project_acceptance", + "-u", "project_acceptance", + "--stop-after-init"], + "console": "integratedTerminal" + }, { "name": "Odoo: INIT 'hr_commission'", "type": "python", diff --git a/project_acceptance/__init__.py b/project_acceptance/__init__.py index 0650744f..91c5580f 100644 --- a/project_acceptance/__init__.py +++ b/project_acceptance/__init__.py @@ -1 +1,2 @@ +from . import controllers from . import models diff --git a/project_acceptance/__manifest__.py b/project_acceptance/__manifest__.py index 84f52239..9bb7459f 100644 --- a/project_acceptance/__manifest__.py +++ b/project_acceptance/__manifest__.py @@ -9,10 +9,15 @@ 'description': """ """, 'depends': [ 'project', + # 'project_exception', ], 'data': [ 'data/mail_template_data.xml', + # 'report/project_report.xml', + # 'report/project_report_template.xml', + # 'security/project_acceptance_security.xml', 'views/project_portal_templates.xml', + 'views/project_views.xml', ], 'installable': True, 'auto_install': False, diff --git a/project_acceptance/controllers/__init__.py b/project_acceptance/controllers/__init__.py new file mode 100644 index 00000000..8c3feb6f --- /dev/null +++ b/project_acceptance/controllers/__init__.py @@ -0,0 +1 @@ +from . import portal diff --git a/project_acceptance/controllers/portal.py b/project_acceptance/controllers/portal.py new file mode 100644 index 00000000..f3f20791 --- /dev/null +++ b/project_acceptance/controllers/portal.py @@ -0,0 +1,93 @@ +import binascii + +from odoo import fields, http, SUPERUSER_ID, _ +from odoo.exceptions import AccessError, MissingError, ValidationError +from odoo.http import request + +from odoo.addons.portal.controllers.mail import _message_post_helper +from odoo.addons.portal.controllers import portal +from odoo.addons.portal.controllers.portal import pager as portal_pager, get_records_pager + + +class CustomerPortal(portal.CustomerPortal): + + + @http.route(['/my/task//modaccept'], type='json', auth="public", website=True) + def portal_quote_accept(self, task_id, access_token=None, name=None, signature=None): + pass + + + @http.route(['/my/task//decline'], type='http', auth="public", methods=['POST'], website=True) + def decline(self, task_id, access_token=None, **post): + pass + + # @http.route(['/my/task/'], type='http', auth="public", website=True) + # def portal_my_task(self, task_id, access_token=None, **kw): + # try: + # task_sudo = self._document_check_access('project.task', task_id, access_token) + # except (AccessError, MissingError): + # return request.redirect('/my') + + # # ensure attachment are accessible with access token inside template + # for attachment in task_sudo.attachment_ids: + # attachment.generate_access_token() + # values = self._task_get_page_view_values(task_sudo, access_token, **kw) + # # return request.render("project.portal_my_task", values) + # return request.render('project_acceptance.portal_my_task_inherit', values) + + # @http.route(['/my/task//modaccept'], type='json', auth="public", website=True) + # def portal_quote_accept(self, task_id, access_token=None, name=None, signature=None): + # # get from query string if not on json param + # access_token = access_token or request.httprequest.args.get('access_token') + # try: + # task_sudo = self._document_check_access('project.task', task_id, access_token=access_token) + # except (AccessError, MissingError): + # return {'error': _('Invalid order.')} + + # if not task_sudo.has_to_be_signed(): + # return {'error': _('The task is not in a state requiring customer signature.')} + # if not signature: + # return {'error': _('Signature is missing.')} + + # try: + # task_sudo.write({ + # 'signed_by': name, + # 'signed_on': fields.Datetime.now(), + # 'signature': signature, + # }) + # request.env.cr.commit() + # except (TypeError, binascii.Error) as e: + # return {'error': _('Invalid signature data.')} + + # pdf = request.env.ref('project_task.action_report_project_task').with_user(SUPERUSER_ID)._render_qweb_pdf([task_sudo.id])[0] + + # _message_post_helper( + # 'project.task', task_sudo.id, _('Task signed by %s') % (name,), + # attachments=[('%s.pdf' % task_sudo.name, pdf)], + # **({'token': access_token} if access_token else {})) + + # query_string = '&message=sign_ok' + # if task_sudo.has_to_be_paid(True): + # query_string += '#allow_payment=yes' + # return { + # 'force_refresh': True, + # 'redirect_url': task_sudo.get_portal_url(query_string=query_string), + # } + + # @http.route(['/my/task//decline'], type='http', auth="public", methods=['POST'], website=True) + # def decline(self, task_id, access_token=None, **post): + # try: + # task_sudo = self._document_check_access('project.task', task_id, access_token=access_token) + # except (AccessError, MissingError): + # return request.redirect('/my') + + # message = post.get('decline_message') + + # query_string = False + # if task_sudo.has_to_be_signed() and message: + # task_sudo.action_cancel() + # _message_post_helper('project.task', task_id, message, **{'token': access_token} if access_token else {}) + # else: + # query_string = "&message=cant_reject" + + # return request.redirect(task_sudo.get_portal_url(query_string=query_string)) diff --git a/project_acceptance/data/mail_template_data.xml b/project_acceptance/data/mail_template_data.xml index 4e9d8ba9..95de9428 100644 --- a/project_acceptance/data/mail_template_data.xml +++ b/project_acceptance/data/mail_template_data.xml @@ -34,19 +34,22 @@ - Accepted + + Accepted - Declined + + Declined - Feedback + + Feedback diff --git a/project_acceptance/models/project.py b/project_acceptance/models/project.py index 8001aacc..c28abcea 100644 --- a/project_acceptance/models/project.py +++ b/project_acceptance/models/project.py @@ -9,5 +9,5 @@ class ProjectProjectStage(models.Model): class ProjectTask(models.Model): _inherit = 'project.task' - task_acceptance = fields.Selection([('accept', 'Accepted'), ('decline', 'Decline'), ('feedback', 'Feedback Provided')]) + task_acceptance = fields.Selection([('accept', 'Accepted'), ('decline', 'Decline'), ('feedback', 'Feedback Provided')],'Task Acceptance', traking=True) \ No newline at end of file diff --git a/project_acceptance/report/project_report.xml b/project_acceptance/report/project_report.xml new file mode 100644 index 00000000..cab60e68 --- /dev/null +++ b/project_acceptance/report/project_report.xml @@ -0,0 +1,16 @@ + \ No newline at end of file diff --git a/project_acceptance/report/project_report_template.xml b/project_acceptance/report/project_report_template.xml new file mode 100644 index 00000000..bf11cf0c --- /dev/null +++ b/project_acceptance/report/project_report_template.xml @@ -0,0 +1,44 @@ + diff --git a/project_acceptance/security/project_acceptance_security.xml b/project_acceptance/security/project_acceptance_security.xml new file mode 100644 index 00000000..56971689 --- /dev/null +++ b/project_acceptance/security/project_acceptance_security.xml @@ -0,0 +1,15 @@ + + + + + + + [('', '', ), ('', '', )] + + + + + + + + \ No newline at end of file diff --git a/project_acceptance/views/project_portal_templates.xml b/project_acceptance/views/project_portal_templates.xml index 9ad38e24..9f8f0fa0 100644 --- a/project_acceptance/views/project_portal_templates.xml +++ b/project_acceptance/views/project_portal_templates.xml @@ -3,15 +3,70 @@