Skip to content
Snippets Groups Projects
mail_message.py 2.87 KiB
Newer Older
###############################################################################
#
#    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