When a message is written in the chat of an opportunity, support ticket, etc. an email is sent to the followers and if desired to the customer. In my company I was asked that these emails automatically include the customer's name in the subject line.
For this I first created the field 'x_cliente_partner_id' (it is a read only field) in 'mail.message' using the odoo interface, this is a computed field that always brings the client name, I attach the code that calculates the value of the field (depends on the fields 'res_id' and 'model').
for message in self:
if message.res_id:
modelo = message.model
lead = self.env[modelo].browse(message.res_id)
message.write({
'x_cliente_partner_id': lead.partner_id.name
})
Already with the field created, I edited the odoo code so that the subject of the email includes the value of 'x_cliente_partner_id' and so the emails of the messages written in the chat include the name of the client. However I have the problem that when directly modifying a native odoo module whenever someone updates the repository this code modification is lost and I have to rewrite it.
The modification was done in the following location: 'src/odoo/addons/mail/models/mail_thread.py' changing the value of the variable 'mail_subject ' in the following function (I don't put it complete because the function has 154 lines and the change is only in one line):
def _notify_record_by_email(self, message, recipients_data, msg_vals=False, model_description=False, mail_auto_delete=True, check_existing=False, force_send=True, send_after_commit=True, **kwargs):
""" Method to send email linked to notified messages.
:param message: mail.message record to notify;
:param recipients_data: see ``_notify_thread``;
:param msg_vals: see ``_notify_thread``;
:param model_description: model description used in email notification process
(computed if not given);
:param mail_auto_delete: delete notification emails once sent;
:param check_existing: check for existing notifications to update based on
mailed recipient, otherwise create new notifications;
:param force_send: send emails directly instead of using queue;
:param send_after_commit: if force_send, tells whether to send emails after
the transaction has been committed using a post-commit hook;
"""
partners_data = [r for r in recipients_data if r['notif'] == 'email']
if not partners_data:
return True
model = msg_vals.get('model') if msg_vals else message.model
model_name = model_description or (self._fallback_lang().env['ir.model']._get(model).display_name if model else False) # one query for display name
recipients_groups_data = self._notify_classify_recipients(partners_data, model_name, msg_vals=msg_vals)
if not recipients_groups_data:
return True
force_send = self.env.context.get('mail_notify_force_send', force_send)
template_values = self._notify_prepare_template_context(message, msg_vals, model_description=model_description) # 10 queries
email_layout_xmlid = msg_vals.get('email_layout_xmlid') if msg_vals else message.email_layout_xmlid
template_xmlid = email_layout_xmlid if email_layout_xmlid else 'mail.message_notification_email'
try:
base_template = self.env.ref(template_xmlid, raise_if_not_found=True).with_context(lang=template_values['lang']) # 1 query
except ValueError:
_logger.warning('QWeb template %s not found when sending notification emails. Sending without layouting.' % (template_xmlid))
base_template = False
#New Value of the variable including the name of the client in the subject of the email
mail_subject = 'Re: %s - Cliente: %s' % (message.record_name, message.x_cliente_partner_id)
#Original Value of the variable without the name of the client
#mail_subject = message.subject or (message.record_name and 'Re: %s' % message.record_name) # in cache, no queries
# Replace new lines by spaces to conform to email headers requirements
mail_subject = ' '.join((mail_subject or '').splitlines())
I need to know how I can update the repository to keep this modification or if I need to change the value of the variable in another way to avoid losing it with each git update.