You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
117 lines
5.1 KiB
117 lines
5.1 KiB
# -*- coding: utf-8 -*-
|
|
###############################################################################
|
|
#
|
|
# Cybrosys Technologies Pvt. Ltd.
|
|
#
|
|
# Copyright (C) 2023-TODAY Cybrosys Technologies(<https://www.cybrosys.com>)
|
|
# Author: Junaidul Ansar M (odoo@cybrosys.com)
|
|
#
|
|
# You can modify it under the terms of the GNU AFFERO
|
|
# GENERAL PUBLIC LICENSE (AGPL v3), Version 3.
|
|
#
|
|
# This program is distributed in the hope that it will be useful,
|
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
# GNU AFFERO GENERAL PUBLIC LICENSE (AGPL v3) for more details.
|
|
#
|
|
# You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE
|
|
# (AGPL v3) along with this program.
|
|
# If not, see <http://www.gnu.org/licenses/>.
|
|
#
|
|
###############################################################################
|
|
from lxml import etree
|
|
from lxml.html import builder as html
|
|
from odoo import api, fields, models, _
|
|
|
|
|
|
class FollowerAddingRemoving(models.TransientModel):
|
|
"""Creating a popup wizard to adding or removing the followers in to
|
|
the model"""
|
|
_name = 'follower.adding.removing'
|
|
_description = 'Follower Adding Removing'
|
|
|
|
res_id = fields.Integer('Related Document ID',
|
|
help='Id of the followed resource')
|
|
type = fields.Selection(
|
|
[('add', 'Add Followers'), ('remove', 'Remove Followers')],
|
|
string="Action Type", help='Select the action type',
|
|
default='add')
|
|
partner_ids = fields.Many2many('res.partner', string='Partners',
|
|
help='Select the partners to add or'
|
|
' remove to the followers')
|
|
send_mail = fields.Boolean(string='Send Email', default=True,
|
|
help="If checked, the partners will receive an "
|
|
"email warning they have been added in "
|
|
"the document's followers.")
|
|
message = fields.Html(string='Message', help='Invite/ Remove mailing '
|
|
'message.')
|
|
|
|
def action_submit(self):
|
|
"""Adding or removing the followers when clicking the submit button"""
|
|
model_info = self.env['ir.model'].search(
|
|
[('model', '=', self.env.context.get('active_model'))],
|
|
limit=1)
|
|
email_from = self.env.user.email_formatted
|
|
title = [active_model.display_name for active_model in
|
|
self.env[self.env.context.get('active_model')].browse(
|
|
self.env.context.get('active_ids'))]
|
|
for record_id in self.env.context.get('active_ids'):
|
|
record = self.env[self.env.context.get('active_model')].browse(
|
|
record_id)
|
|
if self.type == 'add':
|
|
record.message_subscribe(partner_ids=self.partner_ids.ids)
|
|
elif self.type == 'remove':
|
|
record.message_unsubscribe(partner_ids=self.partner_ids.ids)
|
|
new_partners = self.partner_ids
|
|
model_name = model_info.display_name
|
|
if self.send_mail and self.message and not self.message == '<br>':
|
|
self.env['mail.mail'].create(
|
|
self._prepare_message_values(title, model_name, email_from,
|
|
new_partners)
|
|
).send()
|
|
|
|
@api.onchange('type')
|
|
def _onchange_type(self):
|
|
"""Update a message based on the selected type.
|
|
|
|
This method is triggered when the 'type' field is changed. It generates
|
|
a message to inform the user about the type change, and the message is
|
|
displayed in the 'message' field of the current record.
|
|
"""
|
|
user_name = self.env.user.display_name
|
|
model = self.env.context.get('active_model')
|
|
document = self.env['ir.model']._get(model).display_name
|
|
title = [active_model.display_name for active_model in
|
|
self.env[model].browse(self.env.context.get('active_ids'))]
|
|
if self.type == 'add':
|
|
msg_fmt = _(
|
|
f'{user_name} has invited you to follow the {document} '
|
|
f'document: {title}')
|
|
else:
|
|
msg_fmt = _(
|
|
f'{user_name} has removed you from following the {document} '
|
|
f'document: {title}')
|
|
text = msg_fmt % locals()
|
|
message = html.DIV(
|
|
html.P(_('Hello,')),
|
|
html.P(text)
|
|
)
|
|
self.message = etree.tostring(message)
|
|
|
|
def _prepare_message_values(self, title, model_name, email_from,
|
|
new_partners):
|
|
"""Prepares the message values to send in the email"""
|
|
email_values = {
|
|
'subject': _(
|
|
'The Document follow %(document_model)s: %(document_name)s',
|
|
document_model=model_name,
|
|
document_name=title),
|
|
'body_html': self.message,
|
|
'record_name': title,
|
|
'email_from': email_from,
|
|
'email_to': ','.join(new_partners.mapped('email')),
|
|
'reply_to': email_from,
|
|
'reply_to_force_new': True,
|
|
'email_add_signature': True,
|
|
}
|
|
return email_values
|
|
|