Files
enterprise-addons/approvals/models/mail_activity.py
T

46 lines
2.0 KiB
Python

# Part of Odoo. See LICENSE file for full copyright and licensing details.
from odoo import models, fields, api
from odoo.fields import Domain
from odoo.addons.mail.tools.discuss import Store
class MailActivity(models.Model):
_inherit = "mail.activity"
approval_request_id = fields.Many2one("approval.request", compute="_compute_approval_request_id", search="_search_approval_request_id")
approver_id = fields.Many2one("approval.approver", compute="_compute_approver_id")
def _search_approval_request_id(self, operator, value):
if operator in Domain.NEGATIVE_OPERATORS:
return NotImplemented
if operator == 'any':
operator = 'in'
if isinstance(value, Domain):
value = self.env['approval.request']._search(value)
activity_type_approval_id = self.env.ref("approvals.mail_activity_data_approval")
return [
[("res_model", "=", "approval.request")],
[("activity_type_id", "=", activity_type_approval_id)],
[("res_id", operator, value)]
]
@api.depends("activity_type_id", "res_id", "res_model")
def _compute_approval_request_id(self):
activity_type_approval_id = self.env.ref("approvals.mail_activity_data_approval")
for activity in self:
if activity["res_model"] == "approval.request" and activity.activity_type_id == activity_type_approval_id:
activity.approval_request_id = self.env["approval.request"].browse(activity["res_id"])
else:
activity.approval_request_id = None
@api.depends("user_id", "approval_request_id.approver_ids.user_id")
def _compute_approver_id(self):
for activity in self:
activity.approver_id = activity.approval_request_id.approver_ids.filtered(
lambda approver: activity.user_id == approver.user_id
)
def _to_store_defaults(self, target):
return super()._to_store_defaults(target) + [Store.One("approver_id", ["status", "user_id"])]