mirror of
https://github.com/bringout/oca-technical.git
synced 2026-04-21 00:52:01 +02:00
70 lines
2.6 KiB
Python
70 lines
2.6 KiB
Python
# Copyright 2024 Dixmit
|
|
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
|
|
|
|
from odoo import api, models, tools
|
|
|
|
|
|
class MailThread(models.AbstractModel):
|
|
|
|
_inherit = "mail.thread"
|
|
|
|
@api.model
|
|
def _routing_handle_bounce(self, email_message, message_dict):
|
|
"""We want to mark the bounced email"""
|
|
result = super(MailThread, self)._routing_handle_bounce(
|
|
email_message, message_dict
|
|
)
|
|
bounced_msg_id = message_dict.get("bounced_msg_id")
|
|
if bounced_msg_id:
|
|
self.env["automation.record.step"].search(
|
|
[("message_id", "in", bounced_msg_id)]
|
|
)._set_mail_bounced()
|
|
return result
|
|
|
|
@api.model
|
|
def _message_route_process(self, message, message_dict, routes):
|
|
"""Override to update the parent mailing traces. The parent is found
|
|
by using the References header of the incoming message and looking for
|
|
matching message_id in automation.record.step."""
|
|
if routes:
|
|
thread_references = (
|
|
message_dict["references"] or message_dict["in_reply_to"]
|
|
)
|
|
msg_references = tools.mail_header_msgid_re.findall(thread_references)
|
|
if msg_references:
|
|
records = self.env["automation.record.step"].search(
|
|
[("message_id", "in", msg_references)]
|
|
)
|
|
records._set_mail_open()
|
|
records._set_mail_reply()
|
|
return super(MailThread, self)._message_route_process(
|
|
message, message_dict, routes
|
|
)
|
|
|
|
@api.model
|
|
def get_automation_access(self, doc_ids, operation, model_name=False):
|
|
"""Retrieve access policy.
|
|
|
|
The behavior is similar to `mail.thread` and `mail.message`
|
|
and it relies on the access rules defines on the related record.
|
|
The behavior can be customized on the related model
|
|
by defining `_automation_record_access`.
|
|
|
|
By default `write`, otherwise the custom permission is returned.
|
|
"""
|
|
DocModel = self.env[model_name] if model_name else self
|
|
create_allow = getattr(DocModel, "_automation_record_access", "write")
|
|
if operation in ["write", "unlink"]:
|
|
check_operation = "write"
|
|
elif operation == "create" and create_allow in [
|
|
"create",
|
|
"read",
|
|
"write",
|
|
"unlink",
|
|
]:
|
|
check_operation = create_allow
|
|
elif operation == "create":
|
|
check_operation = "write"
|
|
else:
|
|
check_operation = operation
|
|
return check_operation
|