Squash-merge of feat/helpdesk-customer-followup. The billing and fusion_login_audit work from that branch is already on main (landed separately); this lands only the helpdesk feature. - Identity keystone: submit() forwards partner_email/partner_name/ x_fc_client_label so the central Helpdesk find-or-creates the customer partner and subscribes them as a follower (enables reply emails + magic link). - Embedded in-app 'My Tickets' inbox: server-side scoped read/reply RPC endpoints, per-user seen tracking (fusion.helpdesk.ticket.seen), systray unread badge. Defense-in-depth scope domain + _norm_email normalisation (wildcard emails cannot widen scope). - fusion_helpdesk_central: x_fc_client_label field + list/search views + branded acknowledgement email template. - Deployed and smoke-tested live: nexa central 19.0.1.1.0, entech client 19.0.1.4.1 (requires Contact Creation on the central service account). Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
56 lines
3.1 KiB
XML
56 lines
3.1 KiB
XML
<?xml version="1.0" encoding="utf-8"?>
|
|
<!--
|
|
Copyright 2026 Nexa Systems Inc.
|
|
License OPL-1
|
|
|
|
Branded acknowledgement sent to the customer when an in-app-channel
|
|
ticket is created. Carries the portal magic link (object.get_portal_url()
|
|
embeds the access token) so the customer can track + reply without an
|
|
account. Button colours follow the company email branding, like Odoo's
|
|
own helpdesk templates.
|
|
-->
|
|
<odoo>
|
|
<data noupdate="1">
|
|
<record id="mail_template_ticket_ack" model="mail.template">
|
|
<field name="name">Helpdesk: Ticket Acknowledgement (Fusion)</field>
|
|
<field name="model_id" ref="helpdesk.model_helpdesk_ticket"/>
|
|
<field name="subject">We received your request [{{ object.ticket_ref or object.id }}]</field>
|
|
<field name="partner_to">{{ object.partner_id.id }}</field>
|
|
<field name="lang">{{ object.partner_id.lang }}</field>
|
|
<field name="auto_delete" eval="True"/>
|
|
<field name="body_html" type="html">
|
|
<div style="margin:0; padding:0; font-family:Arial, Helvetica, sans-serif; color:#21252b; font-size:14px;">
|
|
<p>Hello <t t-out="object.partner_name or 'there'"/>,</p>
|
|
<p>
|
|
Thanks for reaching out — we've received your request and our
|
|
support team will be in touch. Here are the details:
|
|
</p>
|
|
<table style="margin:12px 0; font-size:14px;">
|
|
<tr>
|
|
<td style="padding:2px 12px 2px 0; color:#6c757d;">Reference</td>
|
|
<td style="padding:2px 0;"><strong t-out="object.ticket_ref or object.id"/></td>
|
|
</tr>
|
|
<tr>
|
|
<td style="padding:2px 12px 2px 0; color:#6c757d;">Subject</td>
|
|
<td style="padding:2px 0;"><t t-out="object.name or ''"/></td>
|
|
</tr>
|
|
</table>
|
|
<p style="margin:18px 0;">
|
|
<a t-att-href="object.get_base_url() + object.get_portal_url()"
|
|
target="_blank"
|
|
t-attf-style="background-color: {{ object.company_id.email_secondary_color or '#2c89e9' }}; padding:10px 18px; text-decoration:none; color: {{ object.company_id.email_primary_color or '#ffffff' }}; border-radius:5px; font-size:14px; display:inline-block;">
|
|
View & track your ticket
|
|
</a>
|
|
</p>
|
|
<p style="color:#6c757d; font-size:13px;">
|
|
You can reply directly to this email to add information, follow up
|
|
from the link above, or sign up for an account from that page to
|
|
manage all of your requests in one place.
|
|
</p>
|
|
<p style="color:#6c757d; font-size:13px;">— <t t-out="object.company_id.name or 'Support'"/></p>
|
|
</div>
|
|
</field>
|
|
</record>
|
|
</data>
|
|
</odoo>
|