To add a dynamic hyperlink to a lead in the CRM in Odoo 18 Community Edition , and send it via email from the secondary sales model (when a new secondary salesperson is added) , follow these steps :
STEP 1: Construct the Lead Link in the Email Template
Odoo dynamically renders links using templating language ( ${object.field} , t-esc , t-href , etc.). Here's how to insert a dynamic link to a lead:
Option A: If you're sending the email via a QWeb Email Template
Use this in your email body:
<p>
View the Lead:
<a t-attf-href="${object.lead_id.get_base_url()}/web#id=${object.lead_id.id}&model=crm.lead&view_type=form">
${object.lead_id.name}
</a>
</p>
-
object.lead_id is the Many2one field in your secondary.salesperson model linking to crm.lead .
-
get_base_url() returns the base domain, eg, http://localhost:8069 .
Option B: If you're writing the email content manually in Python (from code)
Use this approach when sending email via code (eg, message_post , mail.template triggered by Python):
lead_url = f"{lead_id.get_base_url()}/web#id={lead_id.id}&model=crm.lead&view_type=form"
body = f"""
<p>Hello,</p>
<p>A new lead has been assigned to you.</p>
<p>Click here to view it: <a href="{lead_url}">{lead_id.name}</a></p>
"""
# Now send this body via mail.template or message_post
STEP 2: Add Email Sending Logic in create() of secondary.salesperson
In your secondary.salesperson model ( secondary_sales_ids ), override the create method to send the email when a record is added:
from odoo import models, fields, api
class SecondarySalesperson(models.Model):
_name = 'your.secondary.salesperson.model'
lead_id = fields.Many2one('crm.lead', string='Lead')
user_id = fields.Many2one('res.users', string='Secondary Salesperson')
@api.model
def create(self, vals):
record = super().create(vals)
if record.lead_id:
template = self.env.ref('your_module_name.email_template_secondary_sales_lead_link')
template.send_mail(record.id, force_send=True)
return record
STEP 3: Define the Email Template (in XML)
<record id="email_template_secondary_sales_lead_link" model="mail.template">
<field name="name">Lead Assigned to Secondary Salesperson</field>
<field name="model_id" ref="your_module.model_your_secondary_salesperson_model"/>
<field name="subject">New Lead Assigned: ${object.lead_id.name}</field>
<field name="email_from">${(user.email or 'noreply@example.com')|safe}</field>
<field name="email_to">${object.user_id.email|safe}</field>
<field name="body_html" type="html">
<![CDATA[
<p>Hello ${object.user_id.name},</p>
<p>You have been assigned to a new lead.</p>
<p>Lead: <strong>${object.lead_id.name}</strong></p>
<p>
Click here to open the lead:
<a t-attf-href="${object.lead_id.get_base_url()}/web#id=${object.lead_id.id}&model=crm.lead&view_type=form">
${object.lead_id.name}
</a>
</p>
]]>
</field>
</record>
Final Notes:
-
Replace your.secondary.salesperson.model with your actual model name (like crm.lead.secondary.salesperson ).
-
Replace your_module_name with the name of your custom module.
Thanks & Regards,
Email: contact@datainteger.com