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

    <!-- Views -->
    <record id="view_sales_order_filter_ecommerce" model="ir.ui.view">
        <field name="name">sale.order.ecommerce.search.view</field>
        <field name="model">sale.order</field>
        <field name="inherit_id" ref="sale.view_sales_order_filter"/>
        <field name="mode">primary</field>
        <field name="arch" type="xml">
            <filter name="my_sale_orders_filter" position="before">
                <filter string="Confirmed" name="order_confirmed" domain="[('state', '=', 'sale')]"/>
                <filter string="Unpaid" name="order_unpaid" domain="[('state', '=', 'sent')]"/>
                <filter string="Abandoned" name="order_abandoned" domain="[('is_abandoned_cart', '=', True)]"/>
                <separator/>
                <filter string="Order Date" name="order_date" date="date_order"/>
                <separator/>
                <filter string="From Website" name="from_website" domain="[('website_id', '!=', False)]"/>
                <separator/>
                <filter string="To Fulfill" name="to_fulfill" domain="[('is_unfulfilled', '=', True)]"/>
                <filter string="To Confirm" name="to_confirm" domain="[('state', '=', 'sent')]"/>
                <filter string="To Invoice" name="to_invoice" domain="[('invoice_status', '=', 'to invoice')]"/>
                <separator/>
                <!-- Dashboard filter - used by context -->
                <filter string="Last Week" invisible="1" name="week" domain="[('date_order', '&gt;', 'today -7d')]"/>
                <filter string="Last Month" invisible="1" name="month" domain="[('date_order', '&gt;', 'today -30d')]"/>
                <filter string="Last Year" invisible="1"  name="year" domain="[('date_order', '&gt;', 'today -365d')]"/>
            </filter>
        </field>
    </record>

    <record id="view_sales_order_filter_ecommerce_unpaid" model="ir.ui.view">
        <field name="name">sale.order.ecommerce.search.unpaid.view</field>
        <field name="model">sale.order</field>
        <field name="inherit_id" ref="sale.view_sales_order_filter"/>
        <field name="mode">primary</field>
        <field name="priority">32</field>
        <field name="arch" type="xml">
            <filter name="my_sale_orders_filter" position="attributes">
                <attribute name="invisible">1</attribute>
            </filter>
            <filter name="my_sale_orders_filter" position="before">
                <filter string="Order Date" name="order_date" date="date_order"/>
                <separator/>
            </filter>
        </field>
    </record>

    <record id="sale_order_list_view_ecommerce" model="ir.ui.view">
        <field name="name">website.sale.order.list.dashboard</field>
        <field name="model">sale.order</field>
        <field name="arch" type="xml">
            <list
                class="o_sale_order"
                string="Orders"
                sample="1"
                decoration-muted="state == 'cancel'"
                js_class="website_sale_dashboard_list"
            >
                <header>
                    <button
                        string="Create Invoices"
                        name="%(sale.action_view_sale_advance_payment_inv)d"
                        type="action"
                        class="btn-secondary"
                    />
                    <button
                        string="Confirm Orders"
                        name="%(sale.model_sale_order_action_quotation_confirm)d"
                        type="action"
                        class="btn-secondary"
                    />
                </header>
                <field name="message_needaction" column_invisible="True"/>  <!--for JS side widgets-->
                <field name="currency_id" column_invisible="True"/> <!--for JS side widgets-->

                <field name="name" string="Number" readonly="1" decoration-bf="1"/>
                <field name="date_order" readonly="state in ['cancel', 'sale']"/>
                <field name="commitment_date"/>
                <field name="partner_id" readonly="1"/>
                <field name="user_id" widget="many2one_avatar_user" optional="hide"/>
                <field name="team_id" optional="hide"/>
                <field name="company_id" groups="!base.group_multi_company" column_invisible="True"/>  <!--for JS widgets-->
                <field
                    name="company_id"
                    groups="base.group_multi_company"
                    optional="hide"
                    readonly="1"
                />
                <field
                    name="amount_untaxed"
                    sum="Total Tax Excluded"
                    widget="monetary"
                    optional="hide"
                />
                <field
                    name="amount_tax"
                    sum="Tax Total"
                    widget="monetary"
                    optional="hide"
                />
                <field
                    name="amount_total"
                    sum="Total Tax Included"
                    widget="monetary"
                    decoration-bf="1"
                    decoration-info="invoice_status == 'to invoice'"
                />
                <field
                    name="state"
                    decoration-success="state == 'sale'"
                    decoration-info="state == 'draft'"
                    decoration-primary="state == 'sent'"
                    widget="badge"
                />
                <field
                    name="tag_ids"
                    widget="many2many_tags"
                    options="{'color_field': 'color'}"
                    optional="hide"
                />
                <field
                    name="invoice_status"
                    decoration-success="invoice_status == 'invoiced'"
                    decoration-info="invoice_status == 'to invoice'"
                    decoration-warning="invoice_status == 'upselling'"
                    widget="badge"
                />
                <field name="activity_ids" widget="list_activity" optional="show"/>
                <field name="client_order_ref" optional="hide"/>
                <field name="validity_date" optional="hide"/>
            </list>
        </field>
    </record>

    <!-- override to add website_id in sale.order related views -->
    <record id="sale_order_tree" model="ir.ui.view">
        <field name="name">sale.order.list.inherit.website.sale</field>
        <field name="model">sale.order</field>
        <field name="inherit_id" ref="sale.sale_order_tree"/>
        <field name="arch" type="xml">
            <field name="user_id" position="before">
                <field name="website_id" groups="website.group_multi_website" optional="show"/>
            </field>
        </field>
    </record>

    <record id="sale_order_kanban_view_ecommerce" model="ir.ui.view">
        <field name="name">sale.order.kanban.inherit.website.sale.dashboard</field>
        <field name="model">sale.order</field>
        <field name="mode">primary</field>
        <field name="inherit_id" ref="sale.view_sale_order_kanban"/>
        <field name="arch" type="xml">
            <kanban class="o_kanban_mobile" position="attributes">
                <attribute name="js_class">website_sale_dashboard_kanban</attribute>
            </kanban>
        </field>
    </record>

    <record id="action_orders_ecommerce" model="ir.actions.act_window">
        <field name="name">Orders</field>
        <field name="res_model">sale.order</field>
        <field name="path">ecommerce-orders</field>
        <field name="view_mode">list,form,kanban,activity</field>
        <field name="domain">[]</field>
        <field name="context">{'show_sale': True, 'search_default_order_confirmed': 1, 'search_default_from_website': 1}</field>
        <field name="search_view_id" ref="view_sales_order_filter_ecommerce"/>
        <field name="help" type="html">
            <p class="o_view_nocontent_empty_folder">
                There is no confirmed order from the website
            </p>
        </field>
    </record>

    <record id="website_sale_order_list" model="ir.actions.act_window.view">
        <field name="view_mode">list</field>
        <field name="view_id" ref="sale_order_list_view_ecommerce"/>
        <field name="act_window_id" ref="action_orders_ecommerce"/>
    </record>
    <record id="website_sale_order_kanban" model="ir.actions.act_window.view">
        <field name="view_mode">kanban</field>
        <field name="view_id" ref="sale_order_kanban_view_ecommerce"/>
        <field name="act_window_id" ref="action_orders_ecommerce"/>
    </record>

    <!-- Dashboard Action -->
    <record id="action_unpaid_orders_ecommerce" model="ir.actions.act_window">
        <field name="name">Unpaid Orders</field>
        <field name="res_model">sale.order</field>
        <field name="view_mode">list,form,kanban,activity</field>
        <field name="domain">[('state', '=', 'sent'), ('website_id', '!=', False)]</field>
        <field name="context">{'show_sale': True, 'create': False}</field>
        <field name="search_view_id" ref="view_sales_order_filter_ecommerce"/>
        <field name="help" type="html">
            <p class="o_view_nocontent_empty_folder">
                There is no unpaid order from the website yet
            </p><p>
                Process the order once the payment is received.
            </p>
        </field>
    </record>

    <record id="view_sales_order_filter_ecommerce_abondand" model="ir.ui.view">
        <field name="name">sale.order.ecommerce.abandonned.view</field>
        <field name="model">sale.order</field>
        <field name="priority">32</field>
        <field name="arch" type="xml">
            <search string="Search Abandoned Sales Orders">
                <field name="name"/>
                <filter string="Creation Date" name="creation_date" date="create_date"/>
                <separator/>
                <filter string="Recovery Email to Send" name="recovery_email" domain="[('cart_recovery_email_sent', '=', False)]" />
                <filter string="Recovery Email Sent" name="recovery_email_set" domain="[('cart_recovery_email_sent', '=', True)]" />
                <group>
                    <filter string="Order Date" name="order_date" context="{'group_by':'date_order'}"/>
                </group>
                <!-- Dashboard filter - used by context -->
                <filter string="Last Week" invisible="1" name="week" domain="[('date_order','&gt;', 'today -7d')]"/>
                <filter string="Last Month" invisible="1" name="month" domain="[('date_order','&gt;', 'today -30d')]"/>
                <filter string="Last Year" invisible="1"  name="year" domain="[('date_order','&gt;', 'today -365d')]"/>
            </search>
        </field>
    </record>

    <!-- Dashboard Action -->
    <record id="sale_order_action_to_invoice" model="ir.actions.act_window">
        <field name="name">Orders To Invoice</field>
        <field name="res_model">sale.order</field>
        <field name="view_mode">list,form,kanban</field>
        <field name="domain">[('state', '=', 'sale'), ('order_line', '!=', False), ('invoice_status', '=', 'to invoice'), ('website_id', '!=', False)]</field>
        <field name="context">{'show_sale': True, 'search_default_order_confirmed': 1, 'create': False}</field>
        <field name="search_view_id" ref="view_sales_order_filter_ecommerce"/>
        <field name="help" type="html">
            <p class="o_view_nocontent_empty_folder">
                You don't have any order to invoice from the website
            </p>
        </field>
    </record>

    <!-- Server action to send multiple recovery email-->

    <record id="action_view_abandoned_tree" model="ir.actions.act_window">
        <field name="name">Abandoned Carts</field>
        <field name="res_model">sale.order</field>
        <field name="path">ecommerce-abandoned-carts</field>
        <field name="view_mode">list,kanban,form,activity</field>
        <field name="domain">[('is_abandoned_cart', '=', True)]</field>
        <field name="context" eval="{'show_sale': True, 'create': False, 'public_partner_id': ref('base.public_partner'), 'search_default_recovery_email': True}"/>
        <field name="view_id" ref="sale.view_quotation_tree"/>
        <field name="search_view_id" ref="view_sales_order_filter_ecommerce_abondand"/>
        <field name="help" type="html">
            <p class="o_view_nocontent_empty_folder">
                No abandoned carts found
            </p><p>
                You'll find here all the carts abandoned by your visitors.
                If they completed their address, you should send them a recovery email!
            </p><p>
                The time to mark a cart as abandoned can be changed in the settings.
            </p>
        </field>
    </record>

    <record id="sale_order_view_form" model="ir.ui.view">
        <field name="name">sale.order.form</field>
        <field name="model">sale.order</field>
        <field name="inherit_id" ref="sale.view_order_form"/>
        <field name="arch" type="xml">
            <button name="action_quotation_send" id="quotation_send_primary" position="attributes">
                <attribute name="invisible" separator="or" add="is_abandoned_cart and not cart_recovery_email_sent"/>
            </button>
            <button name="action_quotation_send" position="after">
                <button
                    name="action_recovery_email_send"
                    type="object"
                    string="Send a Recovery Email"
                    class="btn-primary"
                    data-hotkey="l"
                    invisible="not is_abandoned_cart or cart_recovery_email_sent"/>
            </button>
            <button name="action_quotation_send" id="quotation_send" position="after">
                <button
                    name="action_quotation_send"
                    id="send_by_email_bis"
                    string="Send by Email"
                    type="object"
                    invisible="not is_abandoned_cart or cart_recovery_email_sent or state != 'draft'"/>
            </button>
            <field name="partner_id" position="attributes">
                <attribute name="context">{
                    'display_website': True,
                    'res_partner_search_mode': 'customer',
                    'show_address': 1,
                    'show_vat': True,
                }</attribute>
            </field>
            <field name="team_id" position="after">
                <field name="website_id" invisible="not website_id" groups="website.group_multi_website"/>
            </field>
        </field>
    </record>
</odoo>
