<?xml version="1.0" encoding="utf-8"?>
<odoo>
    <record id="module_category_xeno_orr" model="ir.module.category">
        <field name="name">Outside Request and Reimbursement</field>
    </record>

    <!-- Odoo 19 moved res.groups' category grouping behind a
         res.groups.privilege record (category_id now lives there, not
         directly on res.groups): one privilege bucket for both of this
         module's groups. -->
    <record id="privilege_xeno_orr" model="res.groups.privilege">
        <field name="name">Outside Request and Reimbursement</field>
        <field name="category_id" ref="module_category_xeno_orr"/>
    </record>

    <record id="group_orr_management" model="res.groups">
        <field name="name">Management</field>
        <field name="privilege_id" ref="privilege_xeno_orr"/>
    </record>

    <record id="group_orr_finance" model="res.groups">
        <field name="name">Finance</field>
        <field name="privilege_id" ref="privilege_xeno_orr"/>
    </record>

    <!-- ================= xeno.orr.request ================= -->
    <record id="rule_orr_request_own" model="ir.rule">
        <field name="name">Outside Request: requestor/creator/approvers see their own</field>
        <field name="model_id" ref="model_xeno_orr_request"/>
        <field name="domain_force">
            ['|', '|', '|',
             ('employee_id.user_id', '=', user.id),
             ('create_uid', '=', user.id),
             ('supervisor_id.user_id', '=', user.id),
             ('department_head_id.user_id', '=', user.id)]
        </field>
        <field name="groups" eval="[(4, ref('base.group_user'))]"/>
    </record>
    <record id="rule_orr_request_management_all" model="ir.rule">
        <field name="name">Outside Request: Management sees all</field>
        <field name="model_id" ref="model_xeno_orr_request"/>
        <field name="domain_force">[(1, '=', 1)]</field>
        <field name="groups" eval="[(4, ref('group_orr_management'))]"/>
    </record>
    <record id="rule_orr_request_finance_all" model="ir.rule">
        <field name="name">Outside Request: Finance sees all</field>
        <field name="model_id" ref="model_xeno_orr_request"/>
        <field name="domain_force">[(1, '=', 1)]</field>
        <field name="groups" eval="[(4, ref('group_orr_finance'))]"/>
    </record>
    <record id="rule_orr_request_hr_all" model="ir.rule">
        <field name="name">Outside Request: HR sees all</field>
        <field name="model_id" ref="model_xeno_orr_request"/>
        <field name="domain_force">[(1, '=', 1)]</field>
        <field name="groups" eval="[(4, ref('hr.group_hr_manager'))]"/>
    </record>

    <!-- ================= xeno.orr.stop ================= -->
    <record id="rule_orr_stop_own" model="ir.rule">
        <field name="name">Outside Request Stop: same visibility as its request</field>
        <field name="model_id" ref="model_xeno_orr_stop"/>
        <field name="domain_force">
            ['|', '|', '|',
             ('request_id.employee_id.user_id', '=', user.id),
             ('request_id.create_uid', '=', user.id),
             ('request_id.supervisor_id.user_id', '=', user.id),
             ('request_id.department_head_id.user_id', '=', user.id)]
        </field>
        <field name="groups" eval="[(4, ref('base.group_user'))]"/>
    </record>
    <record id="rule_orr_stop_all" model="ir.rule">
        <field name="name">Outside Request Stop: Management/Finance/HR see all</field>
        <field name="model_id" ref="model_xeno_orr_stop"/>
        <field name="domain_force">[(1, '=', 1)]</field>
        <field name="groups" eval="[(4, ref('group_orr_management')), (4, ref('group_orr_finance')), (4, ref('hr.group_hr_manager'))]"/>
    </record>

    <!-- ================= xeno.orr.reimbursement ================= -->
    <record id="rule_orr_reimbursement_own" model="ir.rule">
        <field name="name">Reimbursement: same visibility as its request</field>
        <field name="model_id" ref="model_xeno_orr_reimbursement"/>
        <field name="domain_force">
            ['|', '|', '|',
             ('request_id.employee_id.user_id', '=', user.id),
             ('request_id.create_uid', '=', user.id),
             ('request_id.supervisor_id.user_id', '=', user.id),
             ('request_id.department_head_id.user_id', '=', user.id)]
        </field>
        <field name="groups" eval="[(4, ref('base.group_user'))]"/>
    </record>
    <record id="rule_orr_reimbursement_all" model="ir.rule">
        <field name="name">Reimbursement: Management/Finance/HR see all</field>
        <field name="model_id" ref="model_xeno_orr_reimbursement"/>
        <field name="domain_force">[(1, '=', 1)]</field>
        <field name="groups" eval="[(4, ref('group_orr_management')), (4, ref('group_orr_finance')), (4, ref('hr.group_hr_manager'))]"/>
    </record>

    <!-- ================= xeno.orr.reimbursement.line ================= -->
    <record id="rule_orr_reimbursement_line_own" model="ir.rule">
        <field name="name">Reimbursement Line: same visibility as its request</field>
        <field name="model_id" ref="model_xeno_orr_reimbursement_line"/>
        <field name="domain_force">
            ['|', '|', '|',
             ('reimbursement_id.request_id.employee_id.user_id', '=', user.id),
             ('reimbursement_id.request_id.create_uid', '=', user.id),
             ('reimbursement_id.request_id.supervisor_id.user_id', '=', user.id),
             ('reimbursement_id.request_id.department_head_id.user_id', '=', user.id)]
        </field>
        <field name="groups" eval="[(4, ref('base.group_user'))]"/>
    </record>
    <record id="rule_orr_reimbursement_line_all" model="ir.rule">
        <field name="name">Reimbursement Line: Management/Finance/HR see all</field>
        <field name="model_id" ref="model_xeno_orr_reimbursement_line"/>
        <field name="domain_force">[(1, '=', 1)]</field>
        <field name="groups" eval="[(4, ref('group_orr_management')), (4, ref('group_orr_finance')), (4, ref('hr.group_hr_manager'))]"/>
    </record>

    <!-- ================= xeno.orr.ask.back ================= -->
    <record id="rule_orr_ask_back_own" model="ir.rule">
        <field name="name">Ask Back: employee sees their own (read-only via access rights)</field>
        <field name="model_id" ref="model_xeno_orr_ask_back"/>
        <field name="domain_force">[('reimbursement_id.request_id.employee_id.user_id', '=', user.id)]</field>
        <field name="groups" eval="[(4, ref('base.group_user'))]"/>
    </record>
    <record id="rule_orr_ask_back_all" model="ir.rule">
        <field name="name">Ask Back: Management/Finance/HR see all</field>
        <field name="model_id" ref="model_xeno_orr_ask_back"/>
        <field name="domain_force">[(1, '=', 1)]</field>
        <field name="groups" eval="[(4, ref('group_orr_management')), (4, ref('group_orr_finance')), (4, ref('hr.group_hr_manager'))]"/>
    </record>
</odoo>
