############################################################################### # # Messaging Group a module for Odoo # Copyright © 2025 XCG Consulting (https://xcg-consulting.fr/) # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as # published by the Free Software Foundation, either version 3 of the # License, or (at your option) any later version. # # 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 for more details. # # You should have received a copy of the GNU Affero General Public License # along with this program. If not, see <http://www.gnu.org/licenses/>. # ############################################################################### from odoo import _, models # type: ignore[import-untyped] from odoo.exceptions import AccessError # type: ignore[import-untyped] class Message(models.Model): _inherit = "mail.message" def create(self, vals_list): created = super().create(vals_list) if not self.env.su: for record in created: if record.model == "discuss.channel": channel = self.env["discuss.channel"].browse(record.res_id) if channel.channel_type == "chat": # check that all members have messaging group users = ( self.sudo() .env["res.users"] .search( [ ( "partner_id", "in", channel.mapped( "channel_member_ids.partner_id.id" ), ) ] ) ) for user in users: if ( not user.has_group( "mail_messaging_group.group_messaging" ) and not user.has_group("base.group_public") and not user.has_group("base.group_portal") ): raise AccessError( _( "Creating messages to user that can not read " "them is not allowed." ) ) return created