# Part of Odoo. See LICENSE file for full copyright and licensing details.

from odoo import fields, models


class HrManagerDepartmentReport(models.AbstractModel):
    _name = 'hr.manager.department.report'
    _description = 'Hr Manager Department Report'
    _auto = False

    employee_id = fields.Many2one('hr.employee', string="Employee", readonly=True)
    has_department_manager_access = fields.Boolean(search="_search_has_department_manager_access",
        compute="_compute_has_department_manager_access")

    def _search_has_department_manager_access(self, operator, value):
        supported_operators = ["="]
        if operator not in supported_operators or not isinstance(value, bool):
            raise NotImplementedError()
        if not value:
            return [1, "=", 0]
        department_ids = self.env['hr.department']._search([('manager_id', 'in', self.env.user.employee_ids.ids)])
        return [
            '|',
                ('employee_id.user_id', '=', self.env.user.id),
                ('employee_id.department_id', 'child_of', department_ids),
        ]

    def _compute_has_department_manager_access(self):
        department_ids = self.env['hr.department']._search([('manager_id', 'in', self.env.user.employee_ids.ids)])
        employees = self.env['hr.employee'].search([
            '|',
                ('user_id', '=', self.env.user.id),
                ('department_id', 'child_of', department_ids),
            ])
        for report in self:
            report.has_department_manager_access = report.employee_id in employees