fsm_visit_confirmation: completely separated from ratings now

This commit is contained in:
Marc Durepos 2025-02-26 21:25:37 -05:00
parent 81a4a904c7
commit 2322dbaae1
8 changed files with 78 additions and 3 deletions

View file

@ -1 +1,2 @@
from . import controllers
from . import controllers
from . import models

View file

@ -46,6 +46,7 @@
"data": [
"data/mail_templates.xml",
"views/project_portal_project_task_templates.xml",
"views/project_task_type_views.xml",
],
"installable": True,
"auto_install": False,

View file

@ -2,7 +2,7 @@
<odoo>
<record id="fsm_visit_confirmation_email_template" model="mail.template">
<field name="name">FSM Visit Confirmation</field>
<field name="model_id" ref="industry_fsm.model_project_task"/>
<field name="model_id" ref="project.model_project_task"/>
<field name="subject">Service Visit Confirmation: {{ object.name }}</field>
<field name="email_from">{{ user.email_formatted }}</field>
<field name="partner_to">{{ object.work_order_contacts and object.work_order_contacts[0].id or object.partner_id.id }}</field>

View file

@ -0,0 +1,2 @@
from . import project_task_type
from . import project_task

View file

@ -0,0 +1,28 @@
from odoo import models
class ProjectTask(models.Model):
_inherit = "project.task"
def write(self, vals):
# Store old stage for comparison
old_stages = {task.id: task.stage_id for task in self}
# Execute original write method
result = super().write(vals)
# If stage changed and new stage has an approval template, send the email
if "stage_id" in vals:
for task in self.filtered(
lambda task: task.stage_id != old_stages[task.id]
and task.stage_id.approval_template_id
):
task.stage_id.approval_template_id.send_mail(
task.id,
force_send=True,
email_values={
"email_to": task.partner_id.email if task.partner_id else False
},
)
return result

View file

@ -0,0 +1,11 @@
from odoo import fields, models
class ProjectTaskType(models.Model):
_inherit = 'project.task.type'
approval_template_id = fields.Many2one(
'mail.template',
string='Approval Template',
help='Template to use for approval emails when a task reaches this stage.'
)

View file

@ -3,13 +3,14 @@
import logging
from datetime import datetime, timedelta
from odoo import http
from odoo.addons.mail.tests.common import MailCommon
from odoo.tests import HttpCase, tagged
_logger = logging.getLogger(__name__)
@tagged("post_install", "-at_install")
class TestFSMVisitConfirmation(HttpCase):
class TestFSMVisitConfirmation(HttpCase, MailCommon):
def setUp(self):
super().setUp()
@ -142,6 +143,24 @@ class TestFSMVisitConfirmation(HttpCase):
)
self.assertTrue(messages, "A message should be posted on the task")
def test_03_stage_approved_sends_email(self):
"""Test that moving a task to the approved stage sends an email"""
# Set the approval template on the approved stage
template = self.env.ref(
"fsm_visit_confirmation.fsm_visit_confirmation_email_template"
)
self.stage_approved.approval_template_id = template
with self.mock_mail_gateway():
self.task.write({"stage_id": self.stage_approved.id})
self.assertEqual(
len(self._new_mails),
1,
"Moving task to approved stage should send an email",
)
self.assertEqual(self._new_mails[0].email_to, self.customer.email)
def test_02_task_request_changes_flow(self):
"""Test the complete task request changes flow"""
# Test the FSM confirmation change endpoint

View file

@ -0,0 +1,13 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<record id="view_project_task_type_form_inherit_fsm_visit_confirmation" model="ir.ui.view">
<field name="name">project.task.type.form.inherit.fsm.visit.confirmation</field>
<field name="model">project.task.type</field>
<field name="inherit_id" ref="project.task_type_edit"/>
<field name="arch" type="xml">
<field name="mail_template_id" position="after">
<field name="approval_template_id"/>
</field>
</field>
</record>
</odoo>