<?xml version="1.0" encoding="utf-8"?>
<odoo>
    <data>

        <!-- Extend timesheet form view (used inside task's timesheet tab) -->
        <record id="view_hr_timesheet_line_form_jb" model="ir.ui.view">
            <field name="name">account.analytic.line.form.jb.timesheet</field>
            <field name="model">account.analytic.line</field>
            <field name="inherit_id" ref="hr_timesheet.hr_timesheet_line_form"/>
            <field name="arch" type="xml">
                <xpath expr="//field[@name='name']" position="after">
                    <field name="notes_internal" placeholder="Internal notes…"/>
                    <field name="is_billable"/>
                </xpath>
                <xpath expr="//field[@name='unit_amount']" position="after">
                    <field name="time_in"/>
                    <field name="time_out"/>
                </xpath>
            </field>
        </record>

        <!-- Extend timesheet list view inside project/task -->
        <record id="view_hr_timesheet_line_tree_jb" model="ir.ui.view">
            <field name="name">account.analytic.line.tree.jb.timesheet</field>
            <field name="model">account.analytic.line</field>
            <field name="inherit_id" ref="hr_timesheet.hr_timesheet_line_tree"/>
            <field name="arch" type="xml">
                <xpath expr="//field[@name='unit_amount']" position="after">
                    <field name="is_billable" optional="show"/>
                    <field name="is_invoiced" optional="show"/>
                    <field name="invoiced_date" optional="hide"/>
                    <field name="eit_billing_id" optional="hide"/>
                    <field name="convergence_time_id" optional="hide"/>
                </xpath>
            </field>
        </record>

        <!-- Standalone timesheet list view (for JB menu) -->
        <record id="view_jb_timesheet_list" model="ir.ui.view">
            <field name="name">account.analytic.line.list.jb</field>
            <field name="model">account.analytic.line</field>
            <field name="arch" type="xml">
                <tree string="Timesheets"
                      decoration-muted="is_invoiced == True"
                      decoration-warning="is_billable == False">
                    <field name="date"/>
                    <field name="employee_id"/>
                    <field name="project_id"/>
                    <field name="task_id"/>
                    <field name="name"/>
                    <field name="notes_internal" optional="hide"/>
                    <field name="unit_amount" string="Hours" widget="float_time"/>
                    <field name="time_in" optional="hide"/>
                    <field name="time_out" optional="hide"/>
                    <field name="is_billable"/>
                    <field name="is_invoiced"/>
                    <field name="invoiced_date" optional="hide"/>
                    <field name="eit_billing_id" optional="hide"/>
                    <field name="convergence_time_id" optional="hide"/>
                </tree>
            </field>
        </record>

        <!-- Standalone timesheet form view (for JB menu) -->
        <record id="view_jb_timesheet_form" model="ir.ui.view">
            <field name="name">account.analytic.line.form.jb</field>
            <field name="model">account.analytic.line</field>
            <field name="arch" type="xml">
                <form string="Timesheet Entry">
                    <sheet>
                        <group>
                            <group>
                                <field name="date"/>
                                <field name="employee_id"/>
                                <field name="project_id"/>
                                <field name="task_id"
                                       domain="[('project_id', '=', project_id)]"/>
                            </group>
                            <group>
                                <field name="unit_amount" widget="float_time" string="Duration"/>
                                <field name="time_in"/>
                                <field name="time_out"/>
                                <field name="is_billable"/>
                                <field name="is_invoiced"/>
                                <field name="invoiced_date"
                                       invisible="is_invoiced == False"/>
                            </group>
                        </group>
                        <group string="Description">
                            <field name="name" nolabel="1" placeholder="What did you work on?"/>
                        </group>
                        <group string="Internal Notes">
                            <field name="notes_internal" nolabel="1"
                                   placeholder="Internal notes (not visible to clients)…"/>
                        </group>
                        <group string="Integration IDs"
                               groups="jb_timesheet.group_timesheet_manager">
                            <field name="eit_billing_id"/>
                            <field name="convergence_time_id"/>
                        </group>
                    </sheet>
                </form>
            </field>
        </record>

        <!-- Search view for JB timesheets -->
        <record id="view_jb_timesheet_search" model="ir.ui.view">
            <field name="name">account.analytic.line.search.jb</field>
            <field name="model">account.analytic.line</field>
            <field name="arch" type="xml">
                <search string="Search Timesheets">
                    <field name="employee_id"/>
                    <field name="project_id"/>
                    <field name="task_id"/>
                    <field name="name" string="Description"/>
                    <field name="eit_billing_id"/>
                    <field name="convergence_time_id"/>
                    <filter name="filter_billable" string="Billable"
                            domain="[('is_billable', '=', True)]"/>
                    <filter name="filter_not_billable" string="Non-Billable"
                            domain="[('is_billable', '=', False)]"/>
                    <separator/>
                    <filter name="filter_invoiced" string="Invoiced"
                            domain="[('is_invoiced', '=', True)]"/>
                    <filter name="filter_not_invoiced" string="Not Invoiced"
                            domain="[('is_invoiced', '=', False)]"/>
                    <separator/>
                    <filter name="filter_no_eit" string="Not in EIT"
                            domain="[('eit_billing_id', '=', False)]"/>
                    <filter name="filter_no_convergence" string="Not in Convergence"
                            domain="[('convergence_time_id', '=', False)]"/>
                    <group expand="0" string="Group By">
                        <filter name="group_employee" string="Employee"
                                context="{'group_by': 'employee_id'}"/>
                        <filter name="group_project" string="Project"
                                context="{'group_by': 'project_id'}"/>
                        <filter name="group_task" string="Task"
                                context="{'group_by': 'task_id'}"/>
                        <filter name="group_date" string="Date"
                                context="{'group_by': 'date:month'}"/>
                        <filter name="group_invoiced" string="Invoiced Status"
                                context="{'group_by': 'is_invoiced'}"/>
                    </group>
                </search>
            </field>
        </record>

        <!-- Action: All Timesheets -->
        <record id="action_jb_timesheets_all" model="ir.actions.act_window">
            <field name="name">All Timesheets</field>
            <field name="res_model">account.analytic.line</field>
            <field name="view_mode">tree,form</field>
            <field name="domain">[('project_id', '!=', False)]</field>
            <field name="view_ids" eval="[
                (5, 0, 0),
                (0, 0, {'view_mode': 'tree', 'view_id': ref('jb_timesheet.view_jb_timesheet_list')}),
                (0, 0, {'view_mode': 'form', 'view_id': ref('jb_timesheet.view_jb_timesheet_form')}),
            ]"/>
            <field name="search_view_id" ref="jb_timesheet.view_jb_timesheet_search"/>
            <field name="context">{}</field>
        </record>

        <!-- Server action: Mark Invoiced (available on timesheet list) -->
        <record id="action_server_mark_invoiced" model="ir.actions.server">
            <field name="name">Mark as Invoiced</field>
            <field name="model_id" ref="analytic.model_account_analytic_line"/>
            <field name="binding_model_id" ref="analytic.model_account_analytic_line"/>
            <field name="binding_view_types">list</field>
            <field name="state">code</field>
            <field name="code">
if records:
    wizard = env['jb.mark.invoiced.wizard'].with_context(
        active_ids=records.ids,
        active_model='account.analytic.line',
    ).create({'line_ids': [(6, 0, records.ids)]})
    action = {
        'type': 'ir.actions.act_window',
        'name': 'Mark as Invoiced',
        'res_model': 'jb.mark.invoiced.wizard',
        'view_mode': 'form',
        'res_id': wizard.id,
        'target': 'new',
    }
            </field>
            <field name="groups_id" eval="[(4, ref('jb_timesheet.group_timesheet_invoice'))]"/>
        </record>

        <!-- Server action: Push to EIT (available on timesheet list) -->
        <record id="action_server_eit_copy" model="ir.actions.server">
            <field name="name">Copy to EIT</field>
            <field name="model_id" ref="analytic.model_account_analytic_line"/>
            <field name="binding_model_id" ref="analytic.model_account_analytic_line"/>
            <field name="binding_view_types">list</field>
            <field name="state">code</field>
            <field name="code">
if records:
    wizard = env['jb.eit.copy.wizard'].with_context(
        active_ids=records.ids,
        active_model='account.analytic.line',
    ).create({'line_ids': [(6, 0, records.ids)]})
    action = {
        'type': 'ir.actions.act_window',
        'name': 'Copy to EIT',
        'res_model': 'jb.eit.copy.wizard',
        'view_mode': 'form',
        'res_id': wizard.id,
        'target': 'new',
    }
            </field>
            <field name="groups_id" eval="[(4, ref('jb_timesheet.group_timesheet_invoice'))]"/>
        </record>

    </data>
</odoo>
