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

    <!-- Kanban (primary helpdesk view) -->
    <record id="view_helpdesk_ticket_kanban" model="ir.ui.view">
        <field name="name">so.helpdesk.ticket.kanban</field>
        <field name="model">so.helpdesk.ticket</field>
        <field name="arch" type="xml">
            <kanban default_group_by="stage_id" class="o_kanban_small_column o_so_helpdesk_kanban"
                    quick_create="false" sample="1">
                <field name="name"/>
                <field name="ticket_ref"/>
                <field name="stage_id"/>
                <field name="user_id"/>
                <field name="partner_id"/>
                <field name="priority"/>
                <field name="tag_ids"/>
                <field name="color"/>
                <field name="kanban_state"/>
                <field name="sla_fail"/>
                <field name="sla_deadline"/>
                <field name="activity_ids"/>
                <field name="activity_state"/>
                <field name="team_id"/>
                <field name="ticket_type_id"/>
                <progressbar field="kanban_state" colors='{"done": "success", "blocked": "danger", "normal": "200"}'/>
                <templates>
                    <t t-name="kanban-box">
                        <div t-attf-class="#{!selection_mode ? kanban_color(record.color.raw_value) : ''} oe_kanban_global_click oe_kanban_card">
                            <div class="o_kanban_record_top">
                                <div class="o_kanban_record_headings">
                                    <strong class="o_kanban_record_title">
                                        <field name="ticket_ref"/> — <field name="name"/>
                                    </strong>
                                </div>
                                <div class="o_kanban_record_top_right">
                                    <field name="priority" widget="priority"/>
                                </div>
                            </div>
                            <div class="o_kanban_record_body">
                                <field name="partner_id" muted="1"/>
                                <div t-if="record.ticket_type_id.raw_value" class="text-muted">
                                    <field name="ticket_type_id"/>
                                </div>
                                <div t-if="record.sla_fail.raw_value" class="text-danger">
                                    <i class="fa fa-clock-o"/> SLA Failed
                                </div>
                                <field name="tag_ids" widget="many2many_tags" options="{'color_field': 'color'}"/>
                            </div>
                            <div class="o_kanban_record_bottom">
                                <div class="oe_kanban_bottom_left">
                                    <field name="activity_ids" widget="kanban_activity"/>
                                </div>
                                <div class="oe_kanban_bottom_right">
                                    <field name="user_id" widget="many2one_avatar_user"/>
                                </div>
                            </div>
                        </div>
                    </t>
                </templates>
            </kanban>
        </field>
    </record>

    <!-- List -->
    <record id="view_helpdesk_ticket_tree" model="ir.ui.view">
        <field name="name">so.helpdesk.ticket.tree</field>
        <field name="model">so.helpdesk.ticket</field>
        <field name="arch" type="xml">
            <tree decoration-danger="sla_fail" decoration-muted="is_closed" decoration-warning="is_escalated">
                <field name="ticket_ref"/>
                <field name="name"/>
                <field name="team_id"/>
                <field name="ticket_type_id"/>
                <field name="partner_id"/>
                <field name="user_id" widget="many2one_avatar_user"/>
                <field name="stage_id"/>
                <field name="priority" widget="priority"/>
                <field name="is_escalated" optional="show"/>
                <field name="rating" optional="show"/>
                <field name="sla_deadline"/>
                <field name="create_date"/>
                <field name="is_closed" column_invisible="True"/>
                <field name="sla_fail" column_invisible="True"/>
                <field name="active" column_invisible="True"/>
            </tree>
        </field>
    </record>

    <!-- Form -->
    <record id="view_helpdesk_ticket_form" model="ir.ui.view">
        <field name="name">so.helpdesk.ticket.form</field>
        <field name="model">so.helpdesk.ticket</field>
        <field name="arch" type="xml">
            <form>
                <header>
                    <field name="stage_id" widget="statusbar"
                           domain="[('team_id', '=', team_id)]"
                           options="{'clickable': '1', 'fold_field': 'fold'}"/>
                    <button name="action_assign_to_me" type="object"
                            string="Assign to Me" class="btn-secondary"
                            invisible="user_id == uid"/>
                    <button name="action_escalate" type="object"
                            string="Escalate" class="btn-warning"
                            invisible="is_escalated or is_closed"
                            groups="so_helpdesk.group_helpdesk_agent"/>
                    <button name="action_open_canned_responses" type="object"
                            string="Canned Responses" class="btn-secondary"/>
                </header>
                <sheet>
                    <div class="oe_button_box" name="button_box">
                        <button class="oe_stat_button" icon="fa-clock-o" invisible="not sla_status_ids">
                            <div class="o_stat_info">
                                <span class="o_stat_text">SLA</span>
                                <field name="sla_deadline" widget="datetime"/>
                            </div>
                        </button>
                    </div>
                    <widget name="web_ribbon" title="Archived" bg_color="text-bg-danger"
                            invisible="active"/>
                    <widget name="web_ribbon" title="Escalated" bg_color="text-bg-warning"
                            invisible="not is_escalated"/>
                    <widget name="web_ribbon" title="Closed" bg_color="text-bg-success"
                            invisible="not is_closed"/>
                    <div class="oe_title">
                        <label for="name"/>
                        <h1><field name="name" placeholder="Ticket Subject"/></h1>
                        <h3 class="text-muted"><field name="ticket_ref" readonly="1"/></h3>
                    </div>
                    <group>
                        <group string="Request">
                            <field name="team_id"/>
                            <field name="ticket_type_id"
                                   domain="['|', ('team_ids', '=', False), ('team_ids', 'in', team_id)]"/>
                            <field name="category" invisible="1"/>
                            <field name="product_id"
                                   invisible="category not in ('product_return',)"
                                   domain="[('sale_ok', '=', True)]"/>
                            <field name="service_detail"
                                   invisible="category not in ('software_service', 'cloud_service', 'consulting')"
                                   placeholder="e.g. AWS account ID, EC2 instance, software module"/>
                            <field name="priority" widget="priority"/>
                            <field name="tag_ids" widget="many2many_tags" options="{'color_field': 'color'}"/>
                        </group>
                        <group string="Customer">
                            <field name="partner_id" widget="res_partner_many2one"/>
                            <field name="partner_email" widget="email"/>
                            <field name="partner_phone" widget="phone"/>
                            <field name="user_id" widget="many2one_avatar_user"/>
                            <field name="assign_date" readonly="1"/>
                            <field name="close_date" readonly="1"/>
                            <field name="is_closed" invisible="1"/>
                            <field name="active" invisible="1"/>
                            <field name="is_escalated" invisible="1"/>
                            <field name="company_id" groups="base.group_multi_company" invisible="1"/>
                        </group>
                    </group>
                    <notebook>
                        <page string="Description" name="description">
                            <field name="description" placeholder="Describe the issue or service request..."/>
                        </page>
                        <page string="SLA" name="sla">
                            <field name="sla_status_ids" readonly="1">
                                <tree decoration-danger="status == 'failed'"
                                      decoration-success="status == 'reached'">
                                    <field name="sla_id"/>
                                    <field name="stage_id"/>
                                    <field name="deadline"/>
                                    <field name="reached_datetime"/>
                                    <field name="status"/>
                                </tree>
                            </field>
                        </page>
                        <page string="Marketing" name="marketing">
                            <group>
                                <field name="campaign_id"/>
                                <field name="medium_id"/>
                                <field name="source_id"/>
                            </group>
                        </page>
                        <page string="Extra Info" name="extra">
                            <group>
                                <field name="kanban_state"/>
                                <field name="duration" widget="float_time"/>
                                <field name="create_date" readonly="1"/>
                                <field name="sla_fail" readonly="1"/>
                                <field name="is_escalated" readonly="1"/>
                                <field name="escalated_by" readonly="1"/>
                                <field name="escalated_to"/>
                                <field name="escalated_date" readonly="1"/>
                                <field name="mail_server_id" readonly="1"/>
                                <field name="rating" readonly="1"/>
                                <field name="rating_feedback" readonly="1"/>
                                <field name="rating_date" readonly="1"/>
                            </group>
                        </page>
                    </notebook>
                </sheet>
                <div class="oe_chatter">
                    <field name="message_follower_ids"/>
                    <field name="activity_ids"/>
                    <field name="message_ids"/>
                </div>
            </form>
        </field>
    </record>

    <!-- Search -->
    <record id="view_helpdesk_ticket_search" model="ir.ui.view">
        <field name="name">so.helpdesk.ticket.search</field>
        <field name="model">so.helpdesk.ticket</field>
        <field name="arch" type="xml">
            <search>
                <field name="name"/>
                <field name="ticket_ref"/>
                <field name="partner_id"/>
                <field name="user_id"/>
                <field name="tag_ids"/>
                <field name="team_id"/>
                <field name="ticket_type_id"/>
                <separator/>
                <filter string="My Tickets" name="my_tickets" domain="[('user_id', '=', uid)]"/>
                <filter string="Unassigned" name="unassigned" domain="[('user_id', '=', False)]"/>
                <filter string="Open" name="open" domain="[('is_closed', '=', False)]"/>
                <filter string="Closed" name="closed" domain="[('is_closed', '=', True)]"/>
                <filter string="Archived" name="archived" domain="[('active', '=', False)]"/>
                <filter string="Escalated" name="escalated" domain="[('is_escalated', '=', True)]"/>
                <filter string="Needs Escalation" name="needs_escalation"
                        domain="[('is_escalated', '=', False), ('is_closed', '=', False), '|', ('sla_fail', '=', True), ('priority', '=', '3')]"/>
                <filter string="SLA Failed" name="sla_failed" domain="[('sla_fail', '=', True)]"/>
                <filter string="Urgent" name="urgent" domain="[('priority', '=', '3')]"/>
                <separator/>
                <filter string="Product Returns" name="returns"
                        domain="[('category', '=', 'product_return')]"/>
                <filter string="Software Services" name="software"
                        domain="[('category', '=', 'software_service')]"/>
                <filter string="Cloud / AWS" name="cloud"
                        domain="[('category', '=', 'cloud_service')]"/>
                <separator/>
                <filter string="Creation Date" name="filter_create_date" date="create_date"/>
                <group expand="0" string="Group By">
                    <filter string="Team" name="group_team" context="{'group_by': 'team_id'}"/>
                    <filter string="Stage" name="group_stage" context="{'group_by': 'stage_id'}"/>
                    <filter string="Assigned to" name="group_user" context="{'group_by': 'user_id'}"/>
                    <filter string="Ticket Type" name="group_type" context="{'group_by': 'ticket_type_id'}"/>
                    <filter string="Priority" name="group_priority" context="{'group_by': 'priority'}"/>
                    <filter string="Customer" name="group_partner" context="{'group_by': 'partner_id'}"/>
                    <filter string="Campaign" name="group_campaign" context="{'group_by': 'campaign_id'}"/>
                </group>
            </search>
        </field>
    </record>

    <!-- Calendar -->
    <record id="view_helpdesk_ticket_calendar" model="ir.ui.view">
        <field name="name">so.helpdesk.ticket.calendar</field>
        <field name="model">so.helpdesk.ticket</field>
        <field name="arch" type="xml">
            <calendar string="Tickets" date_start="create_date" color="team_id" mode="month">
                <field name="name"/>
                <field name="partner_id"/>
                <field name="user_id"/>
                <field name="team_id"/>
            </calendar>
        </field>
    </record>

    <!-- Pivot -->
    <record id="view_helpdesk_ticket_pivot" model="ir.ui.view">
        <field name="name">so.helpdesk.ticket.pivot</field>
        <field name="model">so.helpdesk.ticket</field>
        <field name="arch" type="xml">
            <pivot string="Ticket Analysis">
                <field name="team_id" type="row"/>
                <field name="stage_id" type="col"/>
                <field name="duration" type="measure"/>
            </pivot>
        </field>
    </record>

    <!-- Graph -->
    <record id="view_helpdesk_ticket_graph" model="ir.ui.view">
        <field name="name">so.helpdesk.ticket.graph</field>
        <field name="model">so.helpdesk.ticket</field>
        <field name="arch" type="xml">
            <graph string="Tickets" type="bar" stacked="1">
                <field name="team_id"/>
                <field name="stage_id"/>
            </graph>
        </field>
    </record>

    <!-- Actions -->
    <record id="action_helpdesk_ticket" model="ir.actions.act_window">
        <field name="name">Tickets</field>
        <field name="res_model">so.helpdesk.ticket</field>
        <field name="view_mode">kanban,tree,form,calendar,pivot,graph,activity</field>
        <field name="context">{'search_default_open': 1}</field>
        <field name="help" type="html">
            <p class="o_view_nocontent_smiling_face">
                Create your first helpdesk ticket
            </p>
            <p>
                Track product returns, software services, AWS requests, and support
                tickets across all Silicon Overdrive departments.
            </p>
        </field>
    </record>

    <record id="action_helpdesk_ticket_my" model="ir.actions.act_window">
        <field name="name">My Tickets</field>
        <field name="res_model">so.helpdesk.ticket</field>
        <field name="view_mode">kanban,tree,form,activity</field>
        <field name="context">{'search_default_my_tickets': 1, 'search_default_open': 1}</field>
    </record>

    <record id="action_helpdesk_ticket_team_prefix" model="ir.actions.act_window">
        <field name="name">Team Tickets</field>
        <field name="res_model">so.helpdesk.ticket</field>
        <field name="view_mode">kanban,tree,form,pivot,graph,activity</field>
        <field name="context">{'search_default_open': 1}</field>
    </record>

</odoo>
