From c1a21293597bb878eb9c9cf06f0078f266d5de74 Mon Sep 17 00:00:00 2001 From: Marc Durepos Date: Wed, 20 Nov 2024 15:42:13 -0500 Subject: [PATCH] beginnings of new module fsm_visit_confirmation, fix to bemad_partner_email_domain and incrementing_sequence_mixin --- .../models/res_partner.py | 5 +- fsm_visit_confirmation/__init__.py | 2 + fsm_visit_confirmation/__manifest__.py | 33 +++++++++++++ .../controllers/__init__.py | 1 + fsm_visit_confirmation/controllers/portal.py | 35 ++++++++++++++ .../data/mail_templates.xml | 47 +++++++++++++++++++ fsm_visit_confirmation/models/__init__.py | 1 + fsm_visit_confirmation/models/project_task.py | 9 ++++ .../project_portal_project_task_templates.xml | 10 ++++ .../models/incrementing_sequence_mixin.py | 4 +- 10 files changed, 144 insertions(+), 3 deletions(-) create mode 100644 fsm_visit_confirmation/__init__.py create mode 100644 fsm_visit_confirmation/__manifest__.py create mode 100644 fsm_visit_confirmation/controllers/__init__.py create mode 100644 fsm_visit_confirmation/controllers/portal.py create mode 100644 fsm_visit_confirmation/data/mail_templates.xml create mode 100644 fsm_visit_confirmation/models/__init__.py create mode 100644 fsm_visit_confirmation/models/project_task.py create mode 100644 fsm_visit_confirmation/views/project_portal_project_task_templates.xml diff --git a/bemade_partner_email_domain/models/res_partner.py b/bemade_partner_email_domain/models/res_partner.py index 6f9520b..7fe3451 100644 --- a/bemade_partner_email_domain/models/res_partner.py +++ b/bemade_partner_email_domain/models/res_partner.py @@ -57,8 +57,11 @@ class Partner(models.Model): FROM res_partner WHERE email_domain IS NOT NULL AND email_domain = RIGHT(%s, LENGTH(email_domain)) + AND company_id = %s """ - self.env.cr.execute(SQL(sql, email_domain)) + self.env.cr.execute( + SQL(sql, email_domain, self.env.company and self.env.company.id or None) + ) res = self.env.cr.fetchall() if len(res) > 1: rec._send_selection_email( diff --git a/fsm_visit_confirmation/__init__.py b/fsm_visit_confirmation/__init__.py new file mode 100644 index 0000000..91c5580 --- /dev/null +++ b/fsm_visit_confirmation/__init__.py @@ -0,0 +1,2 @@ +from . import controllers +from . import models diff --git a/fsm_visit_confirmation/__manifest__.py b/fsm_visit_confirmation/__manifest__.py new file mode 100644 index 0000000..4125249 --- /dev/null +++ b/fsm_visit_confirmation/__manifest__.py @@ -0,0 +1,33 @@ +# +# Bemade Inc. +# +# Copyright (C) 2023-June Bemade Inc. (). +# Author: Marc Durepos (Contact : marc@bemade.org) +# +# This program is under the terms of the GNU Lesser General Public License, +# version 3. +# +# For full license details, see https://www.gnu.org/licenses/lgpl-3.0.en.html. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +# IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +# DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, +# ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +# DEALINGS IN THE SOFTWARE. +# +{ + "name": "FSM Visit Confirmation", + "version": "17.0.0.1.0", + "summary": "Have clients confirm tentatively booked visits", + "category": "Services/Field Service", + "author": "Bemade Inc.", + "website": "http://www.bemade.org", + "license": "LGPL-3", + "depends": ["industry_fsm"], + "data": ["data/mail_templates.xml"], + "assets": {}, + "installable": True, + "auto_install": False, +} diff --git a/fsm_visit_confirmation/controllers/__init__.py b/fsm_visit_confirmation/controllers/__init__.py new file mode 100644 index 0000000..8c3feb6 --- /dev/null +++ b/fsm_visit_confirmation/controllers/__init__.py @@ -0,0 +1 @@ +from . import portal diff --git a/fsm_visit_confirmation/controllers/portal.py b/fsm_visit_confirmation/controllers/portal.py new file mode 100644 index 0000000..7358871 --- /dev/null +++ b/fsm_visit_confirmation/controllers/portal.py @@ -0,0 +1,35 @@ +from odoo.addons.portal.controllers.portal import CustomerPortal +from odoo.http import request, route +from odoo.exceptions import AccessError, MissingError + + +class FsmCustomerPortal(CustomerPortal): + @route( + "/my/tasks/approve_booking/", + type="http", + auth="public", + website=True, + ) + def portal_approve_booking(self, task_id, access_token=None): + try: + visit_sudo = self._document_check_access( + "project.task", task_id, access_token=access_token + ) + except (AccessError, MissingError): + return request.redirect("/my") + + visit_sudo.action_approve_booking() + request.session["visit_confirmation_accepted"] = True + request.redirect(f"/my/tasks/{task_id}") + + def _task_get_page_view_values(self, task, access_token, **kwargs): + vals = super()._task_get_page_view_values(task, access_token, **kwargs) + if request.session.pop("visit_confirmation_accepted", False): + vals.update(visit_confirmation_accepted=True) + return vals + + def _prepare_home_portal_values(self, counters): + vals = super()._prepare_home_portal_values(counters) + if request.session.pop("visit_confirmation_accepted", False): + vals.update(visit_confirmation_accepted=True) + return vals diff --git a/fsm_visit_confirmation/data/mail_templates.xml b/fsm_visit_confirmation/data/mail_templates.xml new file mode 100644 index 0000000..6b08b46 --- /dev/null +++ b/fsm_visit_confirmation/data/mail_templates.xml @@ -0,0 +1,47 @@ + + + + Field Service Visit Confirmation Request + + Please confirm the date for your upcoming Durpro service visit + {{ object.company_id.email_formatted }} + + + + + + + + + + + + + + + + + + + + +
Summary{{ object.name }}
Technician Arrival{{ object.planned_date_begin }}
Intervention address +
+
+
+
+ +
+ Assigned Technician(s): + + +
+
+
+

To confirm this visit, click here.

+

If you would like to propose another time for this visit, please reply to this email.

+

Best regards,

+

The {{ object.company_id.name }} service management team.

+
+
+
\ No newline at end of file diff --git a/fsm_visit_confirmation/models/__init__.py b/fsm_visit_confirmation/models/__init__.py new file mode 100644 index 0000000..edf2d36 --- /dev/null +++ b/fsm_visit_confirmation/models/__init__.py @@ -0,0 +1 @@ +from . import project_task diff --git a/fsm_visit_confirmation/models/project_task.py b/fsm_visit_confirmation/models/project_task.py new file mode 100644 index 0000000..7cc9d1c --- /dev/null +++ b/fsm_visit_confirmation/models/project_task.py @@ -0,0 +1,9 @@ +from odoo import models, fields, api + + +class Task(models.Model): + _inherit = "project.task" + + def action_approve_booking(self): + self.ensure_one() + self.state = "03_approved" diff --git a/fsm_visit_confirmation/views/project_portal_project_task_templates.xml b/fsm_visit_confirmation/views/project_portal_project_task_templates.xml new file mode 100644 index 0000000..4ef2b48 --- /dev/null +++ b/fsm_visit_confirmation/views/project_portal_project_task_templates.xml @@ -0,0 +1,10 @@ + + + + \ No newline at end of file diff --git a/incrementing_sequence_mixin/models/incrementing_sequence_mixin.py b/incrementing_sequence_mixin/models/incrementing_sequence_mixin.py index 3d87d09..5d87f3c 100644 --- a/incrementing_sequence_mixin/models/incrementing_sequence_mixin.py +++ b/incrementing_sequence_mixin/models/incrementing_sequence_mixin.py @@ -21,7 +21,7 @@ class IncrementingSequenceMixin(models.AbstractModel): res = super().create(vals_list) for rec in res: if rec.sequence == 0: - group_field = rec._sequence_group + group_field = getattr(rec, "_sequence_group") group_field_data = getattr(rec, group_field) if hasattr(group_field_data, "id"): group_field_data = group_field_data.id @@ -35,7 +35,7 @@ class IncrementingSequenceMixin(models.AbstractModel): return res def _default_sequence(self): - group_field = self._sequence_group + group_field = getattr(self, "_sequence_group") group_field_data = getattr(self, group_field) if hasattr(group_field_data, "id"): group_field_data = group_field_data.id