mirror of
https://github.com/bringout/oca-ocb-sale.git
synced 2026-04-26 21:12:02 +02:00
19.0 vanilla
This commit is contained in:
parent
79f83631d5
commit
73afc09215
6267 changed files with 1534193 additions and 1130106 deletions
|
|
@ -16,12 +16,12 @@
|
|||
</record>
|
||||
|
||||
<record id="account_invoice_view_tree" model="ir.ui.view">
|
||||
<field name="name">account.move.tree.inherit.sale</field>
|
||||
<field name="name">account.move.list.inherit.sale</field>
|
||||
<field name="model">account.move</field>
|
||||
<field name="inherit_id" ref="account.view_invoice_tree"/>
|
||||
<field name="arch" type="xml">
|
||||
<field name="invoice_user_id" position="after">
|
||||
<field name="team_id" invisible="context.get('default_move_type') not in ('out_invoice', 'out_refund','out_receipt')" optional="hide"/>
|
||||
<field name="team_id" column_invisible="context.get('default_move_type') not in ('out_invoice', 'out_refund', 'out_receipt')" optional="hide"/>
|
||||
</field>
|
||||
</field>
|
||||
</record>
|
||||
|
|
@ -32,14 +32,14 @@
|
|||
<field name="inherit_id" ref="account.view_move_form"/>
|
||||
<field name="arch" type="xml">
|
||||
<xpath expr="//group[@name='sale_info_group']/field[@name='invoice_user_id']" position="after">
|
||||
<field name="team_id" kanban_view_ref="%(sales_team.crm_team_view_kanban)s"/>
|
||||
<field name="team_id" context="{'kanban_view_ref': 'sales_team.crm_team_view_kanban'}"/>
|
||||
</xpath>
|
||||
<xpath expr="//group[@id='other_tab_group']" position="inside">
|
||||
<group string="Marketing"
|
||||
name="utm_link"
|
||||
groups="base.group_no_one"
|
||||
attrs="{'invisible': [('move_type', 'not in', ('out_invoice', 'out_refund'))]}">
|
||||
<field name="campaign_id" options="{'create_name_field': 'title', 'always_reload': True}"/>
|
||||
invisible="move_type not in ('out_invoice', 'out_refund')">
|
||||
<field name="campaign_id" options="{'create_name_field': 'title'}"/>
|
||||
<field name="medium_id"/>
|
||||
<field name="source_id"/>
|
||||
</group>
|
||||
|
|
@ -49,17 +49,31 @@
|
|||
name="action_view_source_sale_orders"
|
||||
type="object"
|
||||
icon="fa-pencil-square-o"
|
||||
attrs="{'invisible': ['|', ('sale_order_count', '=', 0), ('move_type', 'not in', ('out_invoice', 'out_refund', 'in_invoice', 'in_refund', 'out_receipt', 'in_receipt'))]}">
|
||||
invisible="sale_order_count == 0 or move_type not in ('out_invoice', 'out_refund', 'in_invoice', 'in_refund', 'out_receipt', 'in_receipt')">
|
||||
<field string="Sale Orders" name="sale_order_count" widget="statinfo"/>
|
||||
</button>
|
||||
</xpath>
|
||||
<xpath expr="//field[@name='invoice_line_ids']/list" position="inside">
|
||||
<field name="is_downpayment" column_invisible="1"/>
|
||||
</xpath>
|
||||
<xpath expr="//field[@name='invoice_line_ids']/list/field[@name='product_id']" position="attributes">
|
||||
<attribute name="readonly">is_downpayment</attribute>
|
||||
</xpath>
|
||||
<header position="after">
|
||||
<div class="alert alert-warning" role="alert" invisible="not sale_warning_text or move_type != 'out_invoice'">
|
||||
<field name="sale_warning_text" class="fw-bold"/>
|
||||
</div>
|
||||
</header>
|
||||
<list name="journal_items" position="attributes">
|
||||
<attribute name="decoration-warning" add="(sale_line_warn_msg and move_type == 'out_invoice')" separator=" or "/>
|
||||
</list>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="action_invoice_salesteams" model="ir.actions.act_window">
|
||||
<field name="name">Invoices</field>
|
||||
<field name="res_model">account.move</field>
|
||||
<field name="view_mode">tree,form,kanban</field>
|
||||
<field name="view_mode">list,form,kanban</field>
|
||||
<field name="view_id" ref="account.view_move_tree"/>
|
||||
<field name="domain">[
|
||||
('state', '=', 'posted'),
|
||||
|
|
@ -84,7 +98,7 @@
|
|||
|
||||
<record id="action_invoice_salesteams_view_tree" model="ir.actions.act_window.view">
|
||||
<field name="sequence">1</field>
|
||||
<field name="view_mode">tree</field>
|
||||
<field name="view_mode">list</field>
|
||||
<field name="act_window_id" ref="sale.action_invoice_salesteams"/>
|
||||
</record>
|
||||
|
||||
|
|
|
|||
|
|
@ -4,10 +4,9 @@
|
|||
<!-- Dedicated actions used in views below -->
|
||||
<record id="action_quotations_salesteams" model="ir.actions.act_window">
|
||||
<field name="name">Quotations</field>
|
||||
<field name="type">ir.actions.act_window</field>
|
||||
<field name="res_model">sale.order</field>
|
||||
<field name="view_id" ref="sale.view_quotation_tree"/>
|
||||
<field name="view_mode">tree,form,calendar,graph,kanban,pivot</field>
|
||||
<field name="view_mode">list,form,calendar,graph,kanban,pivot</field>
|
||||
<field name="context">{
|
||||
'search_default_team_id': [active_id],
|
||||
'default_team_id': active_id,
|
||||
|
|
@ -28,7 +27,6 @@
|
|||
<record id="action_quotation_form" model="ir.actions.act_window">
|
||||
<field name="name">New Quotation</field>
|
||||
<field name="res_model">sale.order</field>
|
||||
<field name="type">ir.actions.act_window</field>
|
||||
<field name="view_mode">form</field>
|
||||
<field name="context">{
|
||||
'search_default_team_id': [active_id],
|
||||
|
|
@ -41,9 +39,8 @@
|
|||
|
||||
<record id="action_orders_salesteams" model="ir.actions.act_window">
|
||||
<field name="name">Sales Orders</field>
|
||||
<field name="type">ir.actions.act_window</field>
|
||||
<field name="res_model">sale.order</field>
|
||||
<field name="view_mode">tree,form,calendar,graph,kanban,pivot</field>
|
||||
<field name="view_mode">list,form,calendar,graph,kanban,pivot</field>
|
||||
<field name="search_view_id" ref="sale.sale_order_view_search_inherit_sale"/>
|
||||
<field name="domain">[('state','not in',('draft','sent','cancel'))]</field>
|
||||
<field name="context">{
|
||||
|
|
@ -62,9 +59,8 @@
|
|||
|
||||
<record id="action_orders_to_invoice_salesteams" model="ir.actions.act_window">
|
||||
<field name="name">Sales Orders</field>
|
||||
<field name="type">ir.actions.act_window</field>
|
||||
<field name="res_model">sale.order</field>
|
||||
<field name="view_mode">tree,form,calendar,graph,kanban,pivot</field>
|
||||
<field name="view_mode">list,form,calendar,graph,kanban,pivot</field>
|
||||
<field name="search_view_id" ref="sale.sale_order_view_search_inherit_sale"/>
|
||||
<field name="domain">[('invoice_status','=','to invoice')]</field>
|
||||
<field name="context">{
|
||||
|
|
@ -82,14 +78,9 @@
|
|||
<field name="priority">9</field>
|
||||
<field name="inherit_id" ref="sales_team.crm_team_view_form"/>
|
||||
<field name="arch" type="xml">
|
||||
<div name="options_active" position="inside">
|
||||
<div class="o_row" style="display:inherit">
|
||||
<field name="use_quotations"/><label for="use_quotations"/>
|
||||
</div>
|
||||
</div>
|
||||
<field name="company_id" position="after">
|
||||
<label for="invoiced_target"/>
|
||||
<div class="o_row">
|
||||
<div class="o_row" id="invoiced_target">
|
||||
<field name="invoiced_target" widget="monetary" options="{'currency_field': 'currency_id'}" class="oe_inline"/>
|
||||
<span class="flex-grow-1">/ Month</span>
|
||||
</div>
|
||||
|
|
@ -103,46 +94,10 @@
|
|||
<field name="inherit_id" ref="sales_team.crm_team_view_kanban_dashboard"/>
|
||||
<field name="arch" type="xml">
|
||||
<xpath expr="//templates" position="before">
|
||||
<field name="use_quotations"/>
|
||||
<field name="invoiced_target"/>
|
||||
</xpath>
|
||||
|
||||
<xpath expr="//t[@name='second_options']" position="after">
|
||||
<div class="row" t-if="record.quotations_count.raw_value">
|
||||
<div class="col">
|
||||
<a name="%(action_quotations_salesteams)d" type="action" context="{'search_default_draft': True, 'search_default_sent': True}">
|
||||
<field name="quotations_count" class="me-1"/>
|
||||
<t t-if="record.quotations_count.raw_value == 1">Quotation</t>
|
||||
<t t-else="">Quotations</t>
|
||||
</a>
|
||||
</div>
|
||||
<div class="col-auto text-truncate">
|
||||
<field name="quotations_amount" widget="monetary"/>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row" name="orders_to_invoice" t-if="record.sales_to_invoice_count.raw_value">
|
||||
<div class="col-8">
|
||||
<a name="%(action_orders_to_invoice_salesteams)d" type="action">
|
||||
<field name="sales_to_invoice_count" class="me-1"/>
|
||||
<t t-if="record.sales_to_invoice_count.raw_value == 1">Order to Invoice</t>
|
||||
<t t-else="">Orders to Invoice</t>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</xpath>
|
||||
|
||||
<xpath expr="//div[hasclass('o_kanban_primary_bottom')]" position="after">
|
||||
<t groups="sales_team.group_sale_manager">
|
||||
<div class="col-12 o_kanban_primary_bottom bottom_block">
|
||||
<field name="invoiced" widget="sales_team_progressbar" title="Invoicing" options="{'current_value': 'invoiced', 'max_value': 'invoiced_target', 'editable': true, 'edit_max_value': true, 'on_change': 'update_invoiced_target'}"/>
|
||||
</div>
|
||||
</t>
|
||||
</xpath>
|
||||
|
||||
<xpath expr="//div[hasclass('o_kanban_manage_view')]" position="inside">
|
||||
<div t-if="record.use_quotations.raw_value">
|
||||
<a name="%(action_quotations_salesteams)d" type="action" class="o_quotation_view_button">Quotations</a>
|
||||
</div>
|
||||
<xpath expr="//div[@name='manage_view']" position="inside">
|
||||
<div>
|
||||
<a name="%(action_orders_salesteams)d" type="action">Sales Orders</a>
|
||||
</div>
|
||||
|
|
@ -151,20 +106,7 @@
|
|||
</div>
|
||||
</xpath>
|
||||
|
||||
<xpath expr="//div[hasclass('o_kanban_manage_new')]" position="inside">
|
||||
<div t-if="record.use_quotations.raw_value">
|
||||
<a name="%(action_quotation_form)d" type="action">
|
||||
Quotation
|
||||
</a>
|
||||
</div>
|
||||
</xpath>
|
||||
|
||||
<div name="o_team_kanban_report_separator" position="before">
|
||||
<div t-if="record.use_quotations.raw_value">
|
||||
<a name="%(action_order_report_quotation_salesteam)d" type="action">
|
||||
Quotations
|
||||
</a>
|
||||
</div>
|
||||
<div name="sales_report">
|
||||
<a name="%(action_order_report_so_salesteam)d" type="action">
|
||||
Sales
|
||||
|
|
|
|||
|
|
@ -0,0 +1,20 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<odoo>
|
||||
<record id="mail_activity_plan_action_sale_order" model="ir.actions.act_window">
|
||||
<field name="name">Sale Order Plans</field>
|
||||
<field name="res_model">mail.activity.plan</field>
|
||||
<field name="view_mode">list,kanban,form</field>
|
||||
<field name="search_view_id" ref="mail.mail_activity_plan_view_search"/>
|
||||
<field name="context">{'default_res_model': 'sale.order'}</field>
|
||||
<field name="domain">[('res_model', '=', 'sale.order')]</field>
|
||||
<field name="help" type="html">
|
||||
<p class="o_view_nocontent_smiling_face">
|
||||
Create a Sale Order Activity Plan
|
||||
</p>
|
||||
<p>
|
||||
Activity plans are used to assign a list of activities in just a few clicks
|
||||
(e.g. "Delivery scheduling", "Order Payment Follow-up", ...)
|
||||
</p>
|
||||
</field>
|
||||
</record>
|
||||
</odoo>
|
||||
|
|
@ -4,7 +4,7 @@
|
|||
<record id="mail_activity_type_action_config_sale" model="ir.actions.act_window">
|
||||
<field name="name">Activity Types</field>
|
||||
<field name="res_model">mail.activity.type</field>
|
||||
<field name="view_mode">tree,form</field>
|
||||
<field name="view_mode">list,kanban,form</field>
|
||||
<field name="domain">['|', ('res_model', '=', False), ('res_model', '=', 'sale.order')]</field>
|
||||
<field name="context">{'default_res_model': 'sale.order'}</field>
|
||||
</record>
|
||||
|
|
|
|||
|
|
@ -1,18 +0,0 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<odoo>
|
||||
|
||||
<!-- Include sale-related values in payment checkout form to pass them to the client -->
|
||||
<template id="payment_checkout_inherit" inherit_id="payment.checkout">
|
||||
<xpath expr="//form[@name='o_payment_checkout']" position="attributes">
|
||||
<attribute name="t-att-data-sale-order-id">sale_order_id</attribute>
|
||||
</xpath>
|
||||
</template>
|
||||
|
||||
<!-- Include sale-related values in payment manage form to pass them to the client -->
|
||||
<template id="payment_manage_inherit" inherit_id="payment.manage">
|
||||
<xpath expr="//form[@name='o_payment_manage']" position="attributes">
|
||||
<attribute name="t-att-data-sale-order-id">sale_order_id</attribute>
|
||||
</xpath>
|
||||
</template>
|
||||
|
||||
</odoo>
|
||||
|
|
@ -7,7 +7,7 @@
|
|||
<field name="inherit_id" ref="payment.payment_provider_form"/>
|
||||
<field name="arch" type="xml">
|
||||
<group name="payment_form" position="inside">
|
||||
<field name="so_reference_type" attrs="{'invisible': [('code', '!=', 'custom')]}"/>
|
||||
<field name="so_reference_type" invisible="code != 'custom'"/>
|
||||
</group>
|
||||
</field>
|
||||
</record>
|
||||
|
|
@ -20,7 +20,7 @@
|
|||
<xpath expr="//div[hasclass('oe_button_box')]" position="inside">
|
||||
<button name="action_view_sales_orders" type="object"
|
||||
class="oe_stat_button" icon="fa-money"
|
||||
attrs="{'invisible': [('sale_order_ids_nbr', '=', 0)]}">
|
||||
invisible="sale_order_ids_nbr == 0">
|
||||
<field name="sale_order_ids_nbr" widget="statinfo" string="Sales Order(s)"/>
|
||||
</button>
|
||||
</xpath>
|
||||
|
|
|
|||
|
|
@ -0,0 +1,59 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<odoo>
|
||||
|
||||
<record id="product_document_form" model="ir.ui.view">
|
||||
<field name="name">product.document.form.sale</field>
|
||||
<field name="model">product.document</field>
|
||||
<field name="inherit_id" ref="product.product_document_form"/>
|
||||
<field name="arch" type="xml">
|
||||
<sheet position="inside">
|
||||
<group name="sale" string="Sales">
|
||||
<field name="attached_on_sale" class="oe_inline"/>
|
||||
</group>
|
||||
</sheet>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="product_document_kanban" model="ir.ui.view">
|
||||
<field name="name">product.document.kanban.sale</field>
|
||||
<field name="model">product.document</field>
|
||||
<field name="inherit_id" ref="product.product_document_kanban"/>
|
||||
<field name="arch" type="xml">
|
||||
<xpath expr="//main/div" position="inside">
|
||||
<div class="d-flex mt-2">
|
||||
<span>Sales visibility</span>
|
||||
<field name="attached_on_sale" class="ms-2" widget="selection"/>
|
||||
</div>
|
||||
</xpath>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="product_document_list" model="ir.ui.view">
|
||||
<field name="name">product.document.list.sale</field>
|
||||
<field name="model">product.document</field>
|
||||
<field name="inherit_id" ref="product.product_document_list"/>
|
||||
<field name="arch" type="xml">
|
||||
<field name="name" position="after">
|
||||
<field name="attached_on_sale"/>
|
||||
</field>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="product_document_search" model="ir.ui.view">
|
||||
<field name="name">product.document.search.sale</field>
|
||||
<field name="model">product.document</field>
|
||||
<field name="inherit_id" ref="product.product_document_search"/>
|
||||
<field name="arch" type="xml">
|
||||
<search position="inside">
|
||||
<separator/>
|
||||
<filter name="quotation"
|
||||
string="Quotation"
|
||||
domain="[('attached_on_sale', '=', 'quotation')]"/>
|
||||
<filter name="sale_order"
|
||||
string="Sales Order"
|
||||
domain="[('attached_on_sale', '=', 'sale_order')]"/>
|
||||
</search>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
</odoo>
|
||||
|
|
@ -1,26 +0,0 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<odoo>
|
||||
|
||||
<record id="product_packaging_form_view_sale" model="ir.ui.view">
|
||||
<field name="name">product.packaging.form.view.sale</field>
|
||||
<field name="model">product.packaging</field>
|
||||
<field name="inherit_id" ref="product.product_packaging_form_view"/>
|
||||
<field name="arch" type="xml">
|
||||
<group name="group_product" position="inside">
|
||||
<field name="sales"/>
|
||||
</group>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="product_packaging_tree_view_sale" model="ir.ui.view">
|
||||
<field name="name">product.packaging.tree.view.sale</field>
|
||||
<field name="model">product.packaging</field>
|
||||
<field name="inherit_id" ref="product.product_packaging_tree_view"/>
|
||||
<field name="arch" type="xml">
|
||||
<field name="product_uom_id" position="after">
|
||||
<field name="sales" optional="show"/>
|
||||
</field>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
</odoo>
|
||||
|
|
@ -0,0 +1,48 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<odoo>
|
||||
|
||||
<record id="product_pricelist_item_form" model="ir.ui.view">
|
||||
<field name="name">product.pricelist.item.view.form.inherit</field>
|
||||
<field name="model">product.pricelist.item</field>
|
||||
<field name="inherit_id" ref="product.product_pricelist_item_form_view"/>
|
||||
<field name="arch" type="xml">
|
||||
<group name="pricelist_rule_limits" position="replace">
|
||||
<div>
|
||||
<group name="pricelist_rule_limits">
|
||||
<field name="min_quantity" string="Min Qty"/>
|
||||
<field
|
||||
name="date_start"
|
||||
string="Validity Period"
|
||||
widget="daterange"
|
||||
options="{'end_date_field': 'date_end'}"
|
||||
/>
|
||||
<field name="date_end" invisible="1"/>
|
||||
</group>
|
||||
<div groups="sale.group_discount_per_so_line">
|
||||
<div
|
||||
class="alert alert-info"
|
||||
role="alert"
|
||||
invisible="compute_price != 'percentage'"
|
||||
>
|
||||
<div id="discount_price_warning">
|
||||
In sale order line original price is unit price and discount is in
|
||||
discount column.
|
||||
</div>
|
||||
</div>
|
||||
<div
|
||||
class="alert alert-info"
|
||||
role="alert"
|
||||
invisible="compute_price == 'percentage'"
|
||||
>
|
||||
<div id="formula_fixed_price_warning">
|
||||
For formula or fixed pricing, the original price isn’t shown in
|
||||
sale orders.
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</group>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
</odoo>
|
||||
|
|
@ -0,0 +1,23 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<odoo>
|
||||
|
||||
<record id="product_template_view_form" model="ir.ui.view">
|
||||
<field name="name">product.template.form.inherit.sale.product.configurator</field>
|
||||
<field name="model">product.template</field>
|
||||
<field name="inherit_id" ref="product.product_template_form_view"/>
|
||||
<field name="arch" type="xml">
|
||||
<group name="upsell" position="attributes">
|
||||
<attribute name="invisible">0</attribute>
|
||||
</group>
|
||||
<group name="upsell" position="inside">
|
||||
<field name="optional_product_ids"
|
||||
widget="many2many_tags"
|
||||
options="{'color_field': 'color'}"
|
||||
domain="[('id', '!=', id), '|', ('company_id', '=', company_id), ('company_id', '=', False)]"
|
||||
context="{'search_product_product': True}"
|
||||
placeholder="Recommend when 'Adding to Cart' or quotation"/>
|
||||
</group>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
</odoo>
|
||||
|
|
@ -7,30 +7,34 @@
|
|||
<field name="inherit_id" ref="product.product_template_form_view"/>
|
||||
<field name="arch" type="xml">
|
||||
<page name="sales" position="attributes">
|
||||
<attribute name="invisible">0</attribute>
|
||||
<attribute name="invisible" remove="1" separator="or"/>
|
||||
</page>
|
||||
<field name="product_variant_count" position="after">
|
||||
<field name="service_type" widget="radio" invisible="True"/>
|
||||
<field name="visible_expense_policy" invisible="1"/>
|
||||
</field>
|
||||
<field name="detailed_type" position="after">
|
||||
<field name="invoice_policy" required="1"/>
|
||||
<field name="expense_policy" widget="radio" attrs="{'invisible': [('visible_expense_policy', '=', False)]}"/>
|
||||
<field name="type" position="after">
|
||||
<field
|
||||
name="invoice_policy"
|
||||
required="1"
|
||||
invisible="not sale_ok or type == 'combo'"
|
||||
/>
|
||||
</field>
|
||||
<field name="product_tooltip" position="after">
|
||||
<label for="product_tooltip" string=""
|
||||
attrs="{'invisible': ['|', ('type', 'not in', ('product', 'consu')), ('invoice_policy', '!=', 'order')]}"/>
|
||||
<div attrs="{'invisible': ['|', ('type', 'not in', ('product', 'consu')), ('invoice_policy', '!=', 'order')]}"
|
||||
class="fst-italic text-muted">
|
||||
You can invoice them before they are delivered.
|
||||
</div>
|
||||
<label for="product_tooltip" string=""
|
||||
attrs="{'invisible': ['|', ('type', 'not in', ('product', 'consu')), ('invoice_policy', '!=', 'delivery')]}"/>
|
||||
<div attrs="{'invisible': ['|', ('type', 'not in', ('product', 'consu')), ('invoice_policy', '!=', 'delivery')]}"
|
||||
class="fst-italic text-muted">
|
||||
Invoice after delivery, based on quantities delivered, not ordered.
|
||||
</div>
|
||||
<field name="service_tracking" position="attributes">
|
||||
<attribute name="invisible" add="not sale_ok" separator="or"/>
|
||||
</field>
|
||||
<group name="description" position="after">
|
||||
<t groups="sales_team.group_sale_salesman">
|
||||
<group string="Warning on Sales Orders" groups="sale.group_warning_sale">
|
||||
<field name="sale_line_warn_msg"
|
||||
placeholder="e.g. This product is defective."
|
||||
nolabel="1" colspan="2"/>
|
||||
</group>
|
||||
</t>
|
||||
<group name="expense_info" string="Expense" invisible="not visible_expense_policy">
|
||||
<field name="expense_policy" widget="radio"/>
|
||||
</group>
|
||||
</group>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
|
|
@ -47,25 +51,16 @@
|
|||
icon="fa-signal"
|
||||
help="Sold in the last 365 days"
|
||||
groups="sales_team.group_sale_salesman"
|
||||
attrs="{'invisible': [('sale_ok', '=', False)]}">
|
||||
invisible="not sale_ok">
|
||||
<div class="o_field_widget o_stat_info">
|
||||
<span class="o_stat_value">
|
||||
<field name="sales_count" widget="statinfo" nolabel="1" class="mr4"/>
|
||||
<field name="uom_name"/>
|
||||
<span class="o_stat_value d-flex gap-1">
|
||||
<field name="sales_count" widget="statinfo" nolabel="1" class="oe_inline"/>
|
||||
<field name="uom_name" class="oe_inline" groups="uom.group_uom"/>
|
||||
</span>
|
||||
<span class="o_stat_text">Sold</span>
|
||||
</div>
|
||||
</button>
|
||||
</div>
|
||||
<group name="description" position="after">
|
||||
<t groups="sales_team.group_sale_salesman">
|
||||
<group string="Warning when Selling this Product" groups="sale.group_warning_sale">
|
||||
<field name="sale_line_warn" nolabel="1" colspan="2"/>
|
||||
<field name="sale_line_warn_msg" colspan="2" nolabel="1" placeholder="Type a message..."
|
||||
attrs="{'required':[('sale_line_warn','!=','no-message')],'readonly':[('sale_line_warn','=','no-message')]}"/>
|
||||
</group>
|
||||
</t>
|
||||
</group>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
|
|
@ -74,40 +69,34 @@
|
|||
<field name="model">product.template</field>
|
||||
<field name="inherit_id" ref="product.product_template_only_form_view"/>
|
||||
<field name="arch" type="xml">
|
||||
<div name="button_box" position="inside">
|
||||
<button name="action_open_documents" position="after">
|
||||
<button class="oe_stat_button"
|
||||
name="action_view_sales"
|
||||
type="object" icon="fa-signal"
|
||||
help="Sold in the last 365 days"
|
||||
groups="sales_team.group_sale_salesman"
|
||||
attrs="{'invisible': [('sale_ok', '=', False)]}">
|
||||
invisible="not sale_ok">
|
||||
<div class="o_field_widget o_stat_info">
|
||||
<span class="o_stat_value">
|
||||
<field name="sales_count" widget="statinfo" nolabel="1" class="mr4"/>
|
||||
<field name="uom_name"/>
|
||||
<span class="o_stat_value d-flex gap-1">
|
||||
<field name="sales_count" widget="statinfo" nolabel="1" class="oe_inline"/>
|
||||
<field name="uom_name" class="oe_inline" groups="uom.group_uom"/>
|
||||
</span>
|
||||
<span class="o_stat_text">Sold</span>
|
||||
</div>
|
||||
</button>
|
||||
</div>
|
||||
<group name="description" position="after">
|
||||
<t groups="sales_team.group_sale_salesman">
|
||||
<group string="Warning when Selling this Product" groups="sale.group_warning_sale">
|
||||
<field name="sale_line_warn" string="Warning"/>
|
||||
<field name="sale_line_warn_msg" string="Message" placeholder="Type a message..."
|
||||
attrs="{'required':[('sale_line_warn','!=','no-message')],'readonly':[('sale_line_warn','=','no-message')], 'invisible':[('sale_line_warn','=','no-message')]}"/>
|
||||
</group>
|
||||
</t>
|
||||
</group>
|
||||
</button>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="product_template_action" model="ir.actions.act_window">
|
||||
<field name="name">Products</field>
|
||||
<field name="type">ir.actions.act_window</field>
|
||||
<field name="res_model">product.template</field>
|
||||
<field name="view_mode">kanban,tree,form,activity</field>
|
||||
<field name="view_id" ref="product.product_template_kanban_view"/>
|
||||
<field name="path">products</field>
|
||||
<field name="view_ids" eval="[Command.clear(),
|
||||
Command.create({'view_mode': 'kanban'}),
|
||||
Command.create({'view_mode': 'list', 'view_id': ref('account.product_template_list_view_sellable_inherit')}),
|
||||
Command.create({'view_mode': 'form'}),
|
||||
Command.create({'view_mode': 'activity'})]"/>
|
||||
<field name="search_view_id" ref="product.product_template_search_view"/>
|
||||
<field name="context">{"search_default_filter_to_sell":1, "sale_multi_pricelist_product_template": 1}</field>
|
||||
<field name="help" type="html">
|
||||
|
|
@ -120,4 +109,29 @@
|
|||
</field>
|
||||
</record>
|
||||
|
||||
<record id="product_view_kanban_catalog" model="ir.ui.view">
|
||||
<field name="name">product.view.kanban.catalog.inherit.sale</field>
|
||||
<field name="inherit_id" ref="product.product_view_kanban_catalog"/>
|
||||
<field name="model">product.product</field>
|
||||
<field name="arch" type="xml">
|
||||
<xpath expr="//t[@t-name='menu']" position="attributes">
|
||||
<attribute name="groups">sales_team.group_sale_manager</attribute>
|
||||
</xpath>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="product_view_search_catalog" model="ir.ui.view">
|
||||
<field name="name">product.view.search.catalog.inherit.sale</field>
|
||||
<field name="inherit_id" ref="product.product_view_search_catalog"/>
|
||||
<field name="model">product.product</field>
|
||||
<field name="arch" type="xml">
|
||||
<filter name="goods" position="after">
|
||||
<filter string="In the Order"
|
||||
invisible="context.get('active_model', '') != 'sale.order.line'"
|
||||
name="products_in_sale_order"
|
||||
domain="[('product_catalog_product_is_in_sale_order', '=', True)]"/>
|
||||
</filter>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
</odoo>
|
||||
|
|
|
|||
|
|
@ -1,444 +0,0 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<odoo>
|
||||
|
||||
<record id="res_config_settings_view_form" model="ir.ui.view">
|
||||
<field name="name">res.config.settings.view.form.inherit.sale</field>
|
||||
<field name="model">res.config.settings</field>
|
||||
<field name="priority" eval="10"/>
|
||||
<field name="inherit_id" ref="base.res_config_settings_view_form"/>
|
||||
<field name="arch" type="xml">
|
||||
<xpath expr="//div[hasclass('settings')]" position="inside">
|
||||
<div class="app_settings_block o_not_app"
|
||||
string="Sales"
|
||||
data-string="Sales"
|
||||
data-key="sale_management"
|
||||
groups="sales_team.group_sale_manager">
|
||||
<h2>Product Catalog</h2>
|
||||
<div class="row mt16 o_settings_container" name="catalog_setting_container">
|
||||
<div class="col-12 col-lg-6 o_setting_box" id="variant_options">
|
||||
<div class="o_setting_left_pane">
|
||||
<field name="group_product_variant"/>
|
||||
</div>
|
||||
<div class="o_setting_right_pane">
|
||||
<label for="group_product_variant"/>
|
||||
<a href="https://www.odoo.com/documentation/16.0/applications/sales/sales/products_prices/products/variants.html" title="Documentation" class="o_doc_link" target="_blank"></a>
|
||||
<div class="text-muted">
|
||||
Sell variants of a product using attributes (size, color, etc.)
|
||||
</div>
|
||||
<div class="content-group" attrs="{'invisible': [('group_product_variant','=',False)]}">
|
||||
<div class="mt8">
|
||||
<button name="%(product.attribute_action)d" icon="fa-arrow-right" type="action" string="Attributes" class="btn-link"/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-12 col-lg-6 o_setting_box" id="product_matrix">
|
||||
<div class="o_setting_left_pane">
|
||||
<field name="module_sale_product_matrix"/>
|
||||
</div>
|
||||
<div class="o_setting_right_pane">
|
||||
<label for="module_sale_product_matrix" string="Variant Grid Entry"/>
|
||||
<div class="text-muted">
|
||||
Add several variants to an order from a grid
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-12 col-lg-6 o_setting_box" id="uom_settings">
|
||||
<div class="o_setting_left_pane">
|
||||
<field name="group_uom"/>
|
||||
</div>
|
||||
<div class="o_setting_right_pane">
|
||||
<label for="group_uom"/>
|
||||
<div class="text-muted">
|
||||
Sell and purchase products in different units of measure
|
||||
</div>
|
||||
<div class="content-group" attrs="{'invisible': [('group_uom','=',False)]}">
|
||||
<div class="mt8">
|
||||
<button name="%(uom.product_uom_categ_form_action)d" icon="fa-arrow-right" type="action" string="Units of Measure" class="btn-link"/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-12 col-lg-6 o_setting_box"
|
||||
id="email_template"
|
||||
title="Sending an email is useful if you need to share specific information or content about a product (instructions, rules, links, media, etc.). Create and set the email template from the product detail form (in Sales tab).">
|
||||
<div class="o_setting_left_pane">
|
||||
<field name="module_product_email_template"/>
|
||||
</div>
|
||||
<div class="o_setting_right_pane">
|
||||
<label for="module_product_email_template" string="Deliver Content by Email"/>
|
||||
<div class="text-muted">
|
||||
Send a product-specific email once the invoice is validated
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-12 col-lg-6 o_setting_box"
|
||||
id="stock_packaging"
|
||||
title="Ability to select a package type in sales orders and to force a quantity that is a multiple of the number of units per package.">
|
||||
<div class="o_setting_left_pane">
|
||||
<field name="group_stock_packaging"/>
|
||||
</div>
|
||||
<div class="o_setting_right_pane">
|
||||
<label for="group_stock_packaging"/>
|
||||
<div class="text-muted">
|
||||
Sell products by multiple of unit # per package
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<h2>Pricing</h2>
|
||||
<div class="row mt16 o_settings_container" id="pricing_setting_container">
|
||||
<div class="col-12 col-lg-6 o_setting_box"
|
||||
id="discount_sale_order_lines"
|
||||
title="Apply manual discounts on sales order lines or display discounts computed from pricelists (option to activate in the pricelist configuration).">
|
||||
<div class="o_setting_left_pane">
|
||||
<field name="group_discount_per_so_line"/>
|
||||
</div>
|
||||
<div class="o_setting_right_pane">
|
||||
<label for="group_discount_per_so_line"/>
|
||||
<div class="text-muted">
|
||||
Grant discounts on sales order lines
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-12 col-lg-6 o_setting_box"
|
||||
id="coupon_settings"
|
||||
title="Boost your sales with multiple kinds of programs: Coupons, Promotions, Gift Card, Loyalty. Specific conditions can be set (products, customers, minimum purchase amount, period). Rewards can be discounts (% or amount) or free products.">
|
||||
<div class="o_setting_left_pane">
|
||||
<field name="module_loyalty"/>
|
||||
</div>
|
||||
<div class="o_setting_right_pane">
|
||||
<label for="module_loyalty" string="Discounts, Loyalty & Gift Card"/>
|
||||
<div class="text-muted" id="sale_coupon">
|
||||
Manage Promotions, coupons, loyalty cards, Gift cards & eWallet
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-12 col-lg-6 o_setting_box" id="pricelist_configuration">
|
||||
<div class="o_setting_left_pane">
|
||||
<field name="group_product_pricelist"/>
|
||||
</div>
|
||||
<div class="o_setting_right_pane">
|
||||
<label for="group_product_pricelist"/>
|
||||
<a href="https://www.odoo.com/documentation/16.0/applications/sales/sales/products_prices/prices/pricing.html" title="Documentation" class="o_doc_link" target="_blank"></a>
|
||||
<div class="text-muted">
|
||||
Set multiple prices per product, automated discounts, etc.
|
||||
</div>
|
||||
<div class="content-group" attrs="{'invisible': [('group_product_pricelist' ,'=', False)]}">
|
||||
<div class="mt16">
|
||||
<field name="group_sale_pricelist" invisible="1"/>
|
||||
<field name="product_pricelist_setting" widget="radio" class="o_light_label"/>
|
||||
</div>
|
||||
<div class="mt8">
|
||||
<button name="%(product.product_pricelist_action2)d" icon="fa-arrow-right" type="action" string="Pricelists" groups="product.group_product_pricelist" class="btn-link"/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-12 col-lg-6 o_setting_box"
|
||||
id="auth_signup_documents"
|
||||
title=" To send invitations in B2B mode, open a contact or select several ones in list view and click on 'Portal Access Management' option in the dropdown menu *Action*.">
|
||||
<div class="o_setting_left_pane">
|
||||
</div>
|
||||
<div class="o_setting_right_pane">
|
||||
<label for="auth_signup_uninvited"/>
|
||||
<div class="text-muted">
|
||||
Let your customers log in to see their documents
|
||||
</div>
|
||||
<div class="mt8">
|
||||
<field name="auth_signup_uninvited" class="o_light_label" widget="radio" options="{'horizontal': true}" required="True"/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-12 col-lg-6 o_setting_box"
|
||||
id="show_margins"
|
||||
title="The margin is computed as the sum of product sales prices minus the cost set in their detail form.">
|
||||
<div class="o_setting_left_pane">
|
||||
<field name="module_sale_margin"/>
|
||||
</div>
|
||||
<div class="o_setting_right_pane">
|
||||
<label for="module_sale_margin"/>
|
||||
<div class="text-muted">
|
||||
Show margins on orders
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<h2>Quotations & Orders</h2>
|
||||
<div class="row mt16 o_settings_container" name="quotation_order_setting_container">
|
||||
<div class="col-12 col-lg-6 o_setting_box" id="sale_config_online_confirmation_sign">
|
||||
<div class="o_setting_left_pane">
|
||||
<field name="portal_confirmation_sign"/>
|
||||
</div>
|
||||
<div class="o_setting_right_pane">
|
||||
<label for="portal_confirmation_sign"/>
|
||||
<a href="https://www.odoo.com/documentation/16.0/applications/sales/sales/send_quotations/get_signature_to_validate.html" title="Documentation" class="me-2 o_doc_link" target="_blank"></a>
|
||||
<span class="fa fa-lg fa-building-o" title="Values set here are company-specific." groups="base.group_multi_company"/>
|
||||
<div class="text-muted">
|
||||
Request an online signature to confirm orders
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-12 col-lg-6 o_setting_box" id="sale_config_online_confirmation_pay">
|
||||
<div class="o_setting_left_pane">
|
||||
<field name="portal_confirmation_pay"/>
|
||||
</div>
|
||||
<div class="o_setting_right_pane">
|
||||
<label for="portal_confirmation_pay"/>
|
||||
<a href="https://www.odoo.com/documentation/16.0/applications/sales/sales/send_quotations/get_paid_to_validate.html" title="Documentation" class="me-2 o_doc_link" target="_blank"></a>
|
||||
<span class="fa fa-lg fa-building-o" title="Values set here are company-specific." groups="base.group_multi_company"/>
|
||||
<div class="text-muted">
|
||||
Request an online payment to confirm orders
|
||||
</div>
|
||||
<div class="mt8" attrs="{'invisible': [('portal_confirmation_pay', '=', False)]}">
|
||||
<button name='%(payment.action_payment_provider)d' icon="fa-arrow-right" type="action" string="Payment Providers" class="btn-link"/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-12 col-lg-6 o_setting_box" id="quotation_validity_days">
|
||||
<div class="o_setting_left_pane">
|
||||
<field name="use_quotation_validity_days"/>
|
||||
</div>
|
||||
<div class="o_setting_right_pane">
|
||||
<label for="use_quotation_validity_days"/>
|
||||
<span class="fa fa-lg fa-building-o" title="Values set here are company-specific." aria-label="Values set here are company-specific." groups="base.group_multi_company" role="img"/>
|
||||
<div class="text-muted">
|
||||
Set a default validity on your quotations
|
||||
</div>
|
||||
<div class="content-group" attrs="{'invisible': [('use_quotation_validity_days','=',False)]}">
|
||||
<div class="mt16">
|
||||
<span class="col-lg-3">Default Limit: <field name="quotation_validity_days" attrs="{'required': [('use_quotation_validity_days', '=', True)]}"/> days</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-12 col-lg-6 o_setting_box" id="order_warnings">
|
||||
<div class="o_setting_left_pane">
|
||||
<field name="group_warning_sale"/>
|
||||
</div>
|
||||
<div class="o_setting_right_pane">
|
||||
<label for="group_warning_sale" string="Sale Warnings"/>
|
||||
<div class="text-muted">
|
||||
Get warnings in orders for products or customers
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-12 col-lg-6 o_setting_box" id="no_edit_order">
|
||||
<div class="o_setting_left_pane">
|
||||
<field name="group_auto_done_setting"/>
|
||||
</div>
|
||||
<div class="o_setting_right_pane">
|
||||
<label for="group_auto_done_setting"/>
|
||||
<div class="text-muted">
|
||||
No longer edit orders once confirmed
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-12 col-lg-6 o_setting_box" id="proforma_configuration">
|
||||
<div class="o_setting_left_pane">
|
||||
<field name="group_proforma_sales"/>
|
||||
</div>
|
||||
<div class="o_setting_right_pane">
|
||||
<label for="group_proforma_sales"/>
|
||||
<div class="text-muted">
|
||||
Allows you to send Pro-Forma Invoice to your customers
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<h2 class="mt32">Shipping</h2>
|
||||
<div class="row mt16 o_settings_container" name="shipping_setting_container">
|
||||
<div class="col-12 col-lg-6 o_setting_box" id="delivery">
|
||||
<div class="o_setting_left_pane">
|
||||
<field name="module_delivery"/>
|
||||
</div>
|
||||
<div class="o_setting_right_pane">
|
||||
<label for="module_delivery"/>
|
||||
<div class="text-muted" id="delivery_carrier">
|
||||
Compute shipping costs on orders
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-12 col-lg-6 o_setting_box" id="ups">
|
||||
<div class="o_setting_left_pane">
|
||||
</div>
|
||||
<div class="o_setting_right_pane">
|
||||
<div class="o_form_label">UPS Connector</div>
|
||||
<div class="text-muted">
|
||||
Compute shipping costs and ship with UPS<br/>
|
||||
<strong>(please go to Home>Apps to install)</strong>
|
||||
</div>
|
||||
<div class="content-group">
|
||||
<div id="sale_delivery_ups"/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-12 col-lg-6 o_setting_box" id="shipping_costs_dhl">
|
||||
<div class="o_setting_left_pane">
|
||||
</div>
|
||||
<div class="o_setting_right_pane">
|
||||
<div class="o_form_label">DHL Connector</div>
|
||||
<div class="text-muted">
|
||||
Compute shipping costs and ship with DHL<br/>
|
||||
<strong>(please go to Home>Apps to install)</strong>
|
||||
</div>
|
||||
<div class="content-group">
|
||||
<div id="sale_delivery_dhl"></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-12 col-lg-6 o_setting_box" id="shipping_costs_fedex">
|
||||
<div class="o_setting_left_pane">
|
||||
</div>
|
||||
<div class="o_setting_right_pane">
|
||||
<div class="o_form_label">FedEx Connector</div>
|
||||
<div class="text-muted">
|
||||
Compute shipping costs and ship with FedEx<br/>
|
||||
<strong>(please go to Home>Apps to install)</strong>
|
||||
</div>
|
||||
<div class="content-group">
|
||||
<div id="sale_delivery_fedex"/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-12 col-lg-6 o_setting_box" id="shipping_costs_usps">
|
||||
<div class="o_setting_left_pane">
|
||||
</div>
|
||||
<div class="o_setting_right_pane">
|
||||
<div class="o_form_label">USPS Connector</div>
|
||||
<div class="text-muted">
|
||||
Compute shipping costs and ship with USPS<br/>
|
||||
<strong>(please go to Home>Apps to install)</strong>
|
||||
</div>
|
||||
<div class="content-group">
|
||||
<div id="sale_delivery_usps"/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-12 col-lg-6 o_setting_box" id="shipping_costs_bpost">
|
||||
<div class="o_setting_left_pane">
|
||||
<field name="module_delivery_bpost" widget="upgrade_boolean"/>
|
||||
</div>
|
||||
<div class="o_setting_right_pane">
|
||||
<label for="module_delivery_bpost"/>
|
||||
<div class="text-muted">
|
||||
Compute shipping costs and ship with bpost
|
||||
</div>
|
||||
<div class="content-group">
|
||||
<div id="sale_delivery_bpost"/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-12 col-lg-6 o_setting_box" id="shipping_costs_easypost">
|
||||
<div class="o_setting_left_pane">
|
||||
<field name="module_delivery_easypost" widget="upgrade_boolean"/>
|
||||
</div>
|
||||
<div class="o_setting_right_pane">
|
||||
<label for="module_delivery_easypost"/>
|
||||
<div class="text-muted">
|
||||
Compute shipping costs and ship with Easypost
|
||||
</div>
|
||||
<div class="content-group">
|
||||
<div id="sale_delivery_easypost"/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-12 col-lg-6 o_setting_box" id="shipping_costs_sendcloud">
|
||||
<div class="o_setting_left_pane">
|
||||
<field name="module_delivery_sendcloud" widget="upgrade_boolean"/>
|
||||
</div>
|
||||
<div class="o_setting_right_pane">
|
||||
<label for="module_delivery_sendcloud"/>
|
||||
<div class="text-muted">
|
||||
Compute shipping costs and ship with Sendcloud
|
||||
</div>
|
||||
<div class="content-group">
|
||||
<div id="sale_delivery_sendcloud"/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<h2>Invoicing</h2>
|
||||
<div class="row mt16 o_settings_container" name="invoicing_setting_container">
|
||||
<div id="sales_settings_invoicing_policy"
|
||||
class="col-12 col-lg-6 o_setting_box"
|
||||
title="This default value is applied to any new product created. This can be changed in the product detail form.">
|
||||
<div class="o_setting_right_pane">
|
||||
<label for="default_invoice_policy"/>
|
||||
<a href="https://www.odoo.com/documentation/16.0/applications/sales/sales/invoicing/invoicing_policy.html" title="Documentation" class="o_doc_link" target="_blank"></a>
|
||||
<div class="text-muted">
|
||||
Quantities to invoice from sales orders
|
||||
</div>
|
||||
<div class="content-group">
|
||||
<div class="mt16">
|
||||
<field name="default_invoice_policy" class="o_light_label" widget="radio"/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-xs-12 col-md-6 o_setting_box"
|
||||
id="automatic_invoicing"
|
||||
attrs="{'invisible': ['|', ('default_invoice_policy', '!=', 'order'), ('portal_confirmation_pay', '=', False)]}">
|
||||
<div class="o_setting_left_pane">
|
||||
<field name="automatic_invoice"/>
|
||||
</div>
|
||||
<div class="o_setting_right_pane">
|
||||
<label for="automatic_invoice"/>
|
||||
<div class="text-muted">
|
||||
Generate the invoice automatically when the online payment is confirmed
|
||||
</div>
|
||||
<div attrs="{'invisible': [('automatic_invoice','=',False)]}" groups="base.group_no_one">
|
||||
<label for="invoice_mail_template_id" class="o_light_label me-2"/>
|
||||
<field name="invoice_mail_template_id" class="oe_inline" options="{'no_create': True}"/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-12 col-lg-6 o_setting_box" id="down_payments">
|
||||
<div class="o_setting_left_pane"/>
|
||||
<div class="o_setting_right_pane">
|
||||
<span class="o_form_label">Down Payments</span>
|
||||
<a href="https://www.odoo.com/documentation/16.0/applications/sales/sales/invoicing/down_payment.html" title="Documentation" class="o_doc_link" target="_blank"></a>
|
||||
<div class="text-muted">
|
||||
Product used for down payments
|
||||
</div>
|
||||
<div class="text-muted">
|
||||
<field name="deposit_default_product_id" context="{'default_detailed_type': 'service'}"/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<h2 class="mt32">Connectors</h2>
|
||||
<div class="row mt16 o_settings_container" id="connectors_setting_container">
|
||||
<div class="col-12 col-lg-6 o_setting_box" id="amazon_connector">
|
||||
<div class="o_setting_left_pane">
|
||||
<field name="module_sale_amazon" widget="upgrade_boolean"/>
|
||||
</div>
|
||||
<div class="o_setting_right_pane">
|
||||
<label for="module_sale_amazon"/>
|
||||
<a href="https://www.odoo.com/documentation/16.0/applications/sales/sales/amazon_connector/setup.html" title="Documentation" class="o_doc_link" target="_blank"></a>
|
||||
<div class="text-muted">
|
||||
Import Amazon orders and sync deliveries
|
||||
</div>
|
||||
<div class="content-group"
|
||||
name="amazon_connector"
|
||||
attrs="{'invisible': [('module_sale_amazon', '=', False)]}"/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div id="sale_ebay"/>
|
||||
</div>
|
||||
</xpath>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="action_sale_config_settings" model="ir.actions.act_window">
|
||||
<field name="name">Settings</field>
|
||||
<field name="type">ir.actions.act_window</field>
|
||||
<field name="res_model">res.config.settings</field>
|
||||
<field name="view_id" ref="res_config_settings_view_form"/>
|
||||
<field name="view_mode">form</field>
|
||||
<field name="target">inline</field>
|
||||
<field name="context">{'module' : 'sale_management', 'bin_size': False}</field>
|
||||
</record>
|
||||
|
||||
</odoo>
|
||||
|
|
@ -4,9 +4,10 @@
|
|||
<record id="act_res_partner_2_sale_order" model="ir.actions.act_window">
|
||||
<field name="name">Quotations and Sales</field>
|
||||
<field name="res_model">sale.order</field>
|
||||
<field name="view_mode">tree,kanban,form,graph</field>
|
||||
<field name="view_mode">list,kanban,form,graph</field>
|
||||
<field name="domain">[('partner_id', 'child_of', active_ids)]</field>
|
||||
<field name="context">{'default_partner_id': active_id}</field>
|
||||
<field name="groups_id" eval="[(4, ref('sales_team.group_sale_salesman'))]"/>
|
||||
<field name="group_ids" eval="[(4, ref('sales_team.group_sale_salesman'))]"/>
|
||||
<field name="help" type="html">
|
||||
<p class="o_view_nocontent_smiling_face">
|
||||
Create a new quotation, the first step of a new sale!
|
||||
|
|
@ -16,28 +17,6 @@
|
|||
</field>
|
||||
</record>
|
||||
|
||||
<record id="crm_lead_partner_kanban_view" model="ir.ui.view">
|
||||
<field name="name">res.partner.kanban.saleorder.inherit</field>
|
||||
<field name="model">res.partner</field>
|
||||
<field name="inherit_id" ref="base.res_partner_kanban_view"/>
|
||||
<field name="priority" eval="20"/>
|
||||
<field name="arch" type="xml">
|
||||
<field name="mobile" position="after">
|
||||
<field name="sale_order_count" groups="sales_team.group_sale_salesman"/>
|
||||
</field>
|
||||
<xpath expr="//div[hasclass('oe_kanban_bottom_left')]" position="inside">
|
||||
<a t-if="record.sale_order_count.value>0" data-type="object" data-name="action_view_sale_order"
|
||||
groups="sales_team.group_sale_salesman"
|
||||
href="#" class="oe_kanban_action oe_kanban_action_a me-1">
|
||||
<span class="badge rounded-pill">
|
||||
<i class="fa fa-fw fa-usd" role="img" aria-label="Sale orders" title="Sales orders"/>
|
||||
<t t-out="record.sale_order_count.value"/>
|
||||
</span>
|
||||
</a>
|
||||
</xpath>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="res_partner_view_buttons" model="ir.ui.view">
|
||||
<field name="name">res.partner.view.buttons</field>
|
||||
<field name="model">res.partner</field>
|
||||
|
|
@ -45,22 +24,23 @@
|
|||
<field name="priority" eval="3"/>
|
||||
<field name="arch" type="xml">
|
||||
<div name="button_box" position="inside">
|
||||
<button class="oe_stat_button" type="object" name="action_view_sale_order"
|
||||
<button
|
||||
class="oe_stat_button"
|
||||
type="action"
|
||||
name="sale.act_res_partner_2_sale_order"
|
||||
groups="sales_team.group_sale_salesman"
|
||||
icon="fa-usd">
|
||||
<field string="Sales" name="sale_order_count" widget="statinfo"/>
|
||||
</button>
|
||||
</div>
|
||||
<xpath expr="//page[@name='internal_notes']//field[@name='comment']" position="after">
|
||||
<group groups="sales_team.group_sale_salesman">
|
||||
<group groups="sale.group_warning_sale" col="2">
|
||||
<separator string="Warning on the Sales Order" colspan="2"/>
|
||||
<field name="sale_warn" nolabel="1" colspan="2" required="1"/>
|
||||
<field name="sale_warn_msg" nolabel="1" string="Message" placeholder="Type a message..." colspan="2"
|
||||
attrs="{'required':[('sale_warn','!=', False), ('sale_warn','!=','no-message')], 'invisible':[('sale_warn','in',(False,'no-message'))]}"/>
|
||||
</group>
|
||||
<group name="warnings" position="inside">
|
||||
<group groups="sale.group_warning_sale" col="2">
|
||||
<separator string="Warning on Sales Orders and Invoices" colspan="2"/>
|
||||
<field name="sale_warn_msg"
|
||||
placeholder="e.g. This customer has reported recurring issues with previous orders."
|
||||
nolabel="1" colspan="2"/>
|
||||
</group>
|
||||
</xpath>
|
||||
</group>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
|
|
@ -81,13 +61,13 @@
|
|||
<field name="inherit_id" ref="account.view_partner_property_form"/>
|
||||
<field name="arch" type="xml">
|
||||
<group name="fiscal_information" position="attributes">
|
||||
<attribute name="groups">account.group_account_invoice, sales_team.group_sale_salesman</attribute>
|
||||
<attribute name="groups">account.group_account_invoice,sales_team.group_sale_salesman</attribute>
|
||||
</group>
|
||||
<field name="property_payment_term_id" position="attributes">
|
||||
<attribute name="groups">account.group_account_invoice, sales_team.group_sale_salesman</attribute>
|
||||
<attribute name="groups">account.group_account_invoice,sales_team.group_sale_salesman</attribute>
|
||||
</field>
|
||||
<field name="property_supplier_payment_term_id" position="attributes">
|
||||
<attribute name="groups">account.group_account_invoice, sales_team.group_sale_salesman</attribute>
|
||||
<attribute name="groups">account.group_account_invoice,sales_team.group_sale_salesman</attribute>
|
||||
</field>
|
||||
</field>
|
||||
</record>
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@
|
|||
|
||||
<menuitem id="sale_menu_root"
|
||||
name="Sales"
|
||||
web_icon="sale_management,static/description/icon.svg"
|
||||
web_icon="sale_management,static/description/icon.png"
|
||||
active="False"
|
||||
sequence="30">
|
||||
|
||||
|
|
@ -72,9 +72,27 @@
|
|||
|
||||
<menuitem id="menu_sale_report"
|
||||
name="Reporting"
|
||||
action="action_order_report_all"
|
||||
groups="sales_team.group_sale_manager"
|
||||
sequence="40"/>
|
||||
sequence="40">
|
||||
|
||||
<menuitem id="menu_reporting_sales"
|
||||
name="Sales"
|
||||
action="action_order_report_all"
|
||||
sequence="10"/>
|
||||
<menuitem id="menu_reporting_salespeople"
|
||||
name="Salespersons"
|
||||
action="action_order_report_salesperson"
|
||||
sequence="20"/>
|
||||
<menuitem id="menu_reporting_product"
|
||||
name="Products"
|
||||
action="action_order_report_products"
|
||||
sequence="30"/>
|
||||
<menuitem id="menu_reporting_customer"
|
||||
name="Customers"
|
||||
action="action_order_report_customers"
|
||||
sequence="40"/>
|
||||
|
||||
</menuitem>
|
||||
|
||||
<menuitem id="menu_sale_config"
|
||||
name="Configuration"
|
||||
|
|
@ -112,29 +130,74 @@
|
|||
groups="product.group_product_variant"
|
||||
sequence="10"/>
|
||||
|
||||
</menuitem>
|
||||
<menuitem
|
||||
id="menu_product_combos"
|
||||
name="Combo Choices"
|
||||
action="product.product_combo_action"
|
||||
sequence="15"
|
||||
/>
|
||||
|
||||
<menuitem id="next_id_16"
|
||||
name="Units of Measure"
|
||||
groups="uom.group_uom"
|
||||
sequence="50">
|
||||
|
||||
<menuitem id="menu_product_uom_form_action"
|
||||
action="uom.product_uom_form_action"
|
||||
groups="base.group_no_one"
|
||||
sequence="10"/>
|
||||
|
||||
<menuitem id="menu_product_uom_categ_form_action"
|
||||
action="uom.product_uom_categ_form_action"
|
||||
<menuitem id="menu_product_categories"
|
||||
action="product.product_category_action_form"
|
||||
sequence="20"/>
|
||||
|
||||
<menuitem id="menu_product_tags"
|
||||
action="product.product_tag_action"
|
||||
sequence="30"/>
|
||||
|
||||
<menuitem id="menu_product_uom_form_action"
|
||||
name="Units & Packagings"
|
||||
action="uom.product_uom_form_action"
|
||||
groups="uom.group_uom"
|
||||
sequence="35"/>
|
||||
|
||||
</menuitem>
|
||||
|
||||
<menuitem id="sale_menu_config_activity_type"
|
||||
action="mail_activity_type_action_config_sale"
|
||||
groups="base.group_no_one"
|
||||
sequence="60"
|
||||
<menuitem id="payment_menu"
|
||||
name="Online Payments"
|
||||
groups="base.group_system"
|
||||
sequence="45"
|
||||
>
|
||||
<menuitem id="payment_provider_menu"
|
||||
action="payment.action_payment_provider"
|
||||
sequence="10"
|
||||
/>
|
||||
<menuitem id="payment_method_menu"
|
||||
action="payment.action_payment_method"
|
||||
sequence="20"
|
||||
/>
|
||||
<menuitem id="payment_token_menu"
|
||||
action="payment.action_payment_token"
|
||||
groups="base.group_no_one"
|
||||
sequence="30"
|
||||
/>
|
||||
<menuitem id="payment_transaction_menu"
|
||||
action="payment.action_payment_transaction"
|
||||
groups="base.group_no_one"
|
||||
sequence="40"
|
||||
/>
|
||||
</menuitem>
|
||||
|
||||
<menuitem
|
||||
id="sale_menu_config_activities"
|
||||
name="Activities"
|
||||
sequence="55">
|
||||
|
||||
<menuitem id="sale_menu_config_activity_type"
|
||||
action="mail_activity_type_action_config_sale"
|
||||
groups="base.group_no_one"
|
||||
sequence="10"
|
||||
/>
|
||||
|
||||
<menuitem id="sale_menu_config_activity_plan"
|
||||
name="Activity Plans"
|
||||
action="mail_activity_plan_action_sale_order"
|
||||
groups="sales_team.group_sale_manager"
|
||||
sequence="20"
|
||||
/>
|
||||
|
||||
</menuitem>
|
||||
|
||||
</menuitem>
|
||||
</menuitem>
|
||||
|
||||
|
|
|
|||
|
|
@ -1,59 +0,0 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<odoo>
|
||||
<!-- ONBOARDING STEPS -->
|
||||
<template id="onboarding_quotation_layout_step">
|
||||
<t t-call="base.onboarding_step">
|
||||
<t t-set="title">Quotation Layout</t>
|
||||
<t t-set="description">Customize the look of your quotations.</t>
|
||||
<t t-set="done_icon" t-value="'fa-star'" />
|
||||
<t t-set="done_text">Looks great!</t>
|
||||
<t t-set="btn_text">Customize</t>
|
||||
<t t-set="model" t-value="'base.document.layout'" />
|
||||
<t t-set="method" t-value="'action_open_base_document_layout'" />
|
||||
<t t-set="state" t-value="state.get('account_onboarding_invoice_layout_state')" />
|
||||
</t>
|
||||
</template>
|
||||
<template id="sale_onboarding_order_confirmation_step">
|
||||
<t t-call="base.onboarding_step">
|
||||
<t t-set="title">Order Confirmation</t>
|
||||
<t t-set="description">Choose between electronic signatures or online payments.</t>
|
||||
<t t-set="btn_text">Set payments</t>
|
||||
<t t-set="method" t-value="'action_open_sale_onboarding_payment_provider'" />
|
||||
<t t-set="model" t-value="'res.company'" />
|
||||
<t t-set="state" t-value="state.get('sale_onboarding_order_confirmation_state')" />
|
||||
</t>
|
||||
</template>
|
||||
<template id="sale_onboarding_sample_quotation_step">
|
||||
<t t-call="base.onboarding_step">
|
||||
<t t-set="title">Sample Quotation</t>
|
||||
<t t-set="description">Send a quotation to test the customer portal.</t>
|
||||
<t t-set="btn_text">Send sample</t>
|
||||
<t t-set="method" t-value="'action_open_sale_onboarding_sample_quotation'" />
|
||||
<t t-set="model" t-value="'res.company'" />
|
||||
<t t-set="state" t-value="state.get('sale_onboarding_sample_quotation_state')" />
|
||||
</t>
|
||||
</template>
|
||||
|
||||
<!-- ONBOARDING PANEL-->
|
||||
<template id="sale_quotation_onboarding_panel" name="sale.quotation.onboarding.panel">
|
||||
<t t-call="base.onboarding_container">
|
||||
<t t-set="classes" t-value="'o_onboarding_violet'" />
|
||||
<t t-set="bg_image" t-value="'/sale/static/src/img/sale_quotation_onboarding_bg.jpg'"/>
|
||||
<t t-set="close_method" t-value="'action_close_sale_quotation_onboarding'" />
|
||||
<t t-set="close_model" t-value="'res.company'" />
|
||||
<t t-call="base.onboarding_company_step" name="company_step" />
|
||||
<t t-call="sale.onboarding_quotation_layout_step" name="quotation_layout_step" />
|
||||
<t t-call="sale.sale_onboarding_order_confirmation_step" name="payment_provider_step" />
|
||||
<t t-call="sale.sale_onboarding_sample_quotation_step" name="sample_quotation_step" />
|
||||
</t>
|
||||
</template>
|
||||
<!-- ORDER CONFIRMATION -->
|
||||
<record id="action_open_sale_payment_provider_onboarding_wizard" model="ir.actions.act_window">
|
||||
<field name="name">Choose how to confirm quotations</field>
|
||||
<field name="type">ir.actions.act_window</field>
|
||||
<field name="res_model">sale.payment.provider.onboarding.wizard</field>
|
||||
<field name="view_mode">form</field>
|
||||
<field name="view_id" ref="payment.payment_provider_onboarding_wizard_form" />
|
||||
<field name="target">new</field>
|
||||
</record>
|
||||
</odoo>
|
||||
|
|
@ -2,10 +2,10 @@
|
|||
<odoo>
|
||||
|
||||
<record id="view_order_line_tree" model="ir.ui.view">
|
||||
<field name="name">sale.order.line.tree</field>
|
||||
<field name="name">sale.order.line.list</field>
|
||||
<field name="model">sale.order.line</field>
|
||||
<field name="arch" type="xml">
|
||||
<tree string="Sales Order Lines" create="false">
|
||||
<list string="Sales Order Lines" create="false">
|
||||
<field name="order_id"/>
|
||||
<field name="order_partner_id"/>
|
||||
<field name="name"/>
|
||||
|
|
@ -14,10 +14,10 @@
|
|||
<field name="qty_delivered"/>
|
||||
<field name="qty_invoiced"/>
|
||||
<field name="qty_to_invoice"/>
|
||||
<field name="product_uom" string="Unit of Measure" groups="uom.group_uom"/>
|
||||
<field name="product_uom_id" groups="uom.group_uom" widget="many2one_uom"/>
|
||||
<field name="price_subtotal" sum="Total" widget="monetary"/>
|
||||
<field name="currency_id" invisible="1"/>
|
||||
</tree>
|
||||
<field name="currency_id" column_invisible="True"/>
|
||||
</list>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
|
|
@ -25,34 +25,58 @@
|
|||
<field name="name">sale.order.line.form.readonly</field>
|
||||
<field name="model">sale.order.line</field>
|
||||
<field name="arch" type="xml">
|
||||
<form string="Sales Order Item">
|
||||
<form string="Sales Order Item" edit="false">
|
||||
<field name="display_type" invisible="1"/>
|
||||
<sheet>
|
||||
<div class="oe_title">
|
||||
<h1>
|
||||
<field name="display_name" readonly="1"/>
|
||||
<field name="display_name"/>
|
||||
</h1>
|
||||
</div>
|
||||
<group>
|
||||
<group>
|
||||
<field name="order_id" readonly="1"/>
|
||||
<field name="product_id" readonly="1"/>
|
||||
<field name="name" readonly="1"/>
|
||||
<field name="product_uom_qty" readonly="1"/>
|
||||
<field name="qty_delivered" readonly="1"/>
|
||||
<field name="qty_invoiced"/>
|
||||
<field name="product_uom" readonly="1"/>
|
||||
<field name="order_id" readonly="1" force_save="1"/>
|
||||
<field name="product_id"
|
||||
readonly="id and not product_updatable"
|
||||
required="not display_type"
|
||||
force_save="1"
|
||||
widget="many2one_barcode"/>
|
||||
<field name="name"/>
|
||||
<field name="product_uom_qty"/>
|
||||
<field name="qty_delivered"
|
||||
invisible="state not in ['sale', 'done']"
|
||||
readonly="qty_delivered_method != 'manual'"/>
|
||||
<field name="qty_invoiced" invisible="state not in ['sale', 'done']"/>
|
||||
<field name="product_uom_id"
|
||||
force_save="1"
|
||||
groups="uom.group_uom"
|
||||
widget="many2one_uom"
|
||||
readonly="product_uom_readonly"
|
||||
required="not display_type"/>
|
||||
<field name="company_id" options="{'no_create': True}" groups="base.group_multi_company"/>
|
||||
<field name="order_partner_id" invisible="1"/>
|
||||
<field name="display_type" invisible="1"/>
|
||||
<field name="product_updatable" invisible="1"/>
|
||||
</group>
|
||||
<group>
|
||||
<field name="price_unit" readonly="1"/>
|
||||
<field name="discount" groups="product.group_discount_per_so_line" readonly="1"/>
|
||||
<field name="price_subtotal" widget="monetary"/>
|
||||
<field name="tax_id" widget="many2many_tags" readonly="1"/>
|
||||
<field name="price_unit"/>
|
||||
<field name="technical_price_unit" invisible="1"/>
|
||||
<field name="discount" groups="sale.group_discount_per_so_line"/>
|
||||
<field name="price_subtotal"
|
||||
string="Amount"
|
||||
widget="monetary"
|
||||
invisible="company_price_include == 'tax_included'"
|
||||
/>
|
||||
<field name="price_total"
|
||||
string="Amount"
|
||||
widget="monetary"
|
||||
invisible="company_price_include == 'tax_excluded'"
|
||||
/>
|
||||
<field name="tax_ids"
|
||||
widget="many2many_tax_tags"
|
||||
options="{'no_create': True}"
|
||||
context="{'search_view_ref': 'account.account_tax_view_search'}"
|
||||
domain="[('type_tax_use', '=', 'sale'), ('company_id', '=', company_id), ('country_id', '=', tax_country_id)]"
|
||||
readonly="qty_invoiced > 0"/>
|
||||
<field name="price_tax" widget="monetary"/>
|
||||
<field name="price_total" widget="monetary"/>
|
||||
<field name="currency_id" invisible="1"/>
|
||||
</group>
|
||||
</group>
|
||||
|
|
@ -79,10 +103,10 @@
|
|||
<field name="order_partner_id" operator="child_of"/>
|
||||
<field name="product_id"/>
|
||||
<field name="salesman_id"/>
|
||||
<group expand="0" string="Group By">
|
||||
<filter string="Product" name="product" domain="[]" context="{'group_by':'product_id'}"/>
|
||||
<filter string="Order" name="order" domain="[]" context="{'group_by':'order_id'}"/>
|
||||
<filter string="Salesperson" name="salesperson" domain="[]" context="{'group_by':'salesman_id'}"/>
|
||||
<group>
|
||||
<filter string="Product" name="product" context="{'group_by':'product_id'}"/>
|
||||
<filter string="Order" name="order" context="{'group_by':'order_id'}"/>
|
||||
<filter string="Salesperson" name="salesperson" context="{'group_by':'salesman_id'}"/>
|
||||
</group>
|
||||
</search>
|
||||
</field>
|
||||
|
|
@ -94,14 +118,8 @@
|
|||
<field name="arch" type="xml">
|
||||
<kanban class="o_kanban_mobile">
|
||||
<templates>
|
||||
<t t-name="kanban-box">
|
||||
<div class="oe_kanban_content oe_kanban_global_click">
|
||||
<div class="row">
|
||||
<div class="col-12">
|
||||
<field name="display_name"/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<t t-name="card">
|
||||
<field name="display_name"/>
|
||||
</t>
|
||||
</templates>
|
||||
</kanban>
|
||||
|
|
|
|||
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
|
|
@ -6,16 +6,23 @@
|
|||
<field name="model">utm.campaign</field>
|
||||
<field name="inherit_id" ref="utm.utm_campaign_view_kanban"/>
|
||||
<field name="arch" type="xml">
|
||||
<xpath expr="//div[@id='utm_statistics']" position="inside">
|
||||
<div class="me-3" title="Revenues" groups="sales_team.group_sale_salesman">
|
||||
<field name="currency_id" invisible="True"/>
|
||||
<small class="fw-bold">
|
||||
<xpath expr="//footer/div" position="inside">
|
||||
<a t-if="record.invoiced_amount" href="#" title="Revenues" role="button"
|
||||
groups="sales_team.group_sale_salesman" type="object" name="action_redirect_to_invoiced"
|
||||
class="btn-outline-primary rounded-pill me-1 order-1">
|
||||
<span class="badge">
|
||||
<field name="currency_id" invisible="True"/>
|
||||
<field name="invoiced_amount" widget="monetary" options="{'currency_field': 'currency_id'}"/>
|
||||
</small>
|
||||
</div>
|
||||
<div class="me-3" title="Quotations" groups="sales_team.group_sale_salesman">
|
||||
<i class="fa fa-money text-muted"></i> <small class="fw-bold"><field name="quotation_count"/></small>
|
||||
</div>
|
||||
</span>
|
||||
</a>
|
||||
<a t-if="record.quotation_count" href="#" title="Quotations" role="button"
|
||||
groups="sales_team.group_sale_salesman" type="object" name="action_redirect_to_quotations"
|
||||
class="btn-outline-primary rounded-pill me-1 order-2">
|
||||
<span class="badge">
|
||||
<i class="fa fa-fw fa-money me-1" aria-label="Quotations" role="img"/>
|
||||
<field name="quotation_count"/>
|
||||
</span>
|
||||
</a>
|
||||
</xpath>
|
||||
</field>
|
||||
</record>
|
||||
|
|
|
|||
|
|
@ -1,144 +0,0 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<odoo>
|
||||
<template id="variants">
|
||||
<t t-set="attribute_exclusions" t-value="product._get_attribute_exclusions(parent_combination, parent_name)"/>
|
||||
<ul t-attf-class="list-unstyled js_add_cart_variants mb-0 #{ul_class}" t-att-data-attribute_exclusions="json.dumps(attribute_exclusions)">
|
||||
<t t-foreach="product.valid_product_template_attribute_line_ids" t-as="ptal">
|
||||
<!-- Attributes selection is hidden if there is only one value available and it's not a custom value -->
|
||||
<li t-att-data-attribute_id="ptal.attribute_id.id"
|
||||
t-att-data-attribute_name="ptal.attribute_id.name"
|
||||
t-att-data-attribute_display_type="ptal.attribute_id.display_type"
|
||||
t-attf-class="variant_attribute #{'d-none' if len(ptal.product_template_value_ids._only_active()) == 1 and not ptal.product_template_value_ids._only_active()[0].is_custom else ''}">
|
||||
|
||||
<!-- Used to customize layout if the only available attribute value is custom -->
|
||||
<t t-set="single" t-value="len(ptal.product_template_value_ids._only_active()) == 1"/>
|
||||
<t t-set="single_and_custom" t-value="single and ptal.product_template_value_ids._only_active()[0].is_custom" />
|
||||
<strong t-field="ptal.attribute_id.name" class="attribute_name"/>
|
||||
|
||||
<t t-if="ptal.attribute_id.display_type == 'select'">
|
||||
<select
|
||||
t-att-data-attribute_id="ptal.attribute_id.id"
|
||||
t-attf-class="form-select css_attribute_select o_wsale_product_attribute js_variant_change #{ptal.attribute_id.create_variant} #{'d-none' if single_and_custom else ''}"
|
||||
t-att-name="'ptal-%s' % ptal.id">
|
||||
<t t-foreach="ptal.product_template_value_ids._only_active()" t-as="ptav">
|
||||
<option t-att-value="ptav.id"
|
||||
t-att-data-value_id="ptav.id"
|
||||
t-att-data-value_name="ptav.name"
|
||||
t-att-data-attribute_name="ptav.attribute_id.name"
|
||||
t-att-data-is_custom="ptav.is_custom"
|
||||
t-att-selected="ptav in combination"
|
||||
t-att-data-is_single="single"
|
||||
t-att-data-is_single_and_custom="single_and_custom">
|
||||
<span t-field="ptav.name"/>
|
||||
<t t-call="sale.badge_extra_price"/>
|
||||
</option>
|
||||
</t>
|
||||
</select>
|
||||
</t>
|
||||
|
||||
<t t-if="ptal.attribute_id.display_type == 'radio'">
|
||||
<ul t-att-data-attribute_id="ptal.attribute_id.id" t-attf-class="list-inline list-unstyled o_wsale_product_attribute #{'d-none' if single_and_custom else ''}">
|
||||
<t t-foreach="ptal.product_template_value_ids._only_active()" t-as="ptav">
|
||||
<li class="list-inline-item mb-3 js_attribute_value" style="margin: 0;">
|
||||
<label class="col-form-label">
|
||||
<div class="form-check">
|
||||
<input type="radio"
|
||||
t-attf-class="form-check-input js_variant_change #{ptal.attribute_id.create_variant}"
|
||||
t-att-checked="ptav in combination"
|
||||
t-att-name="'ptal-%s' % ptal.id"
|
||||
t-att-value="ptav.id"
|
||||
t-att-data-value_id="ptav.id"
|
||||
t-att-data-value_name="ptav.name"
|
||||
t-att-data-attribute_name="ptav.attribute_id.name"
|
||||
t-att-data-is_custom="ptav.is_custom"
|
||||
t-att-data-is_single="single"
|
||||
t-att-data-is_single_and_custom="single_and_custom" />
|
||||
<div class="radio_input_value form-check-label">
|
||||
<span t-field="ptav.name"/>
|
||||
<t t-call="sale.badge_extra_price"/>
|
||||
</div>
|
||||
</div>
|
||||
</label>
|
||||
</li>
|
||||
</t>
|
||||
</ul>
|
||||
</t>
|
||||
|
||||
<t t-if="ptal.attribute_id.display_type == 'pills'">
|
||||
<ul t-att-data-attribute_id="ptal.attribute_id.id"
|
||||
t-attf-class="btn-group-toggle list-inline list-unstyled o_wsale_product_attribute #{'d-none' if single_and_custom else ''}"
|
||||
data-bs-toggle="buttons">
|
||||
<t t-foreach="ptal.product_template_value_ids._only_active()" t-as="ptav">
|
||||
<li t-attf-class="o_variant_pills btn btn-primary mb-1 list-inline-item js_attribute_value #{'active' if ptav in combination else ''}">
|
||||
<input type="radio"
|
||||
t-attf-class="js_variant_change #{ptal.attribute_id.create_variant}"
|
||||
t-att-checked="ptav in combination"
|
||||
t-att-name="'ptal-%s' % ptal.id"
|
||||
t-att-value="ptav.id"
|
||||
t-att-data-value_id="ptav.id"
|
||||
t-att-id="ptav.id"
|
||||
t-att-data-value_name="ptav.name"
|
||||
t-att-data-attribute_name="ptav.attribute_id.name"
|
||||
t-att-data-is_custom="ptav.is_custom"
|
||||
t-att-data-is_single_and_custom="single_and_custom"
|
||||
t-att-autocomplete="off"/>
|
||||
<label class="radio_input_value o_variant_pills_input_value"
|
||||
t-att-for="ptav.id">
|
||||
<span t-field="ptav.name"/>
|
||||
<t t-call="sale.badge_extra_price"/>
|
||||
</label>
|
||||
</li>
|
||||
</t>
|
||||
</ul>
|
||||
</t>
|
||||
|
||||
<t t-if="ptal.attribute_id.display_type == 'color'">
|
||||
<ul t-att-data-attribute_id="ptal.attribute_id.id" t-attf-class="list-inline o_wsale_product_attribute #{'d-none' if single_and_custom else ''}">
|
||||
<li t-foreach="ptal.product_template_value_ids._only_active()" t-as="ptav" class="list-inline-item me-1">
|
||||
<label t-attf-style="background-color:#{ptav.html_color or ptav.product_attribute_value_id.name if not ptav.is_custom else ''}"
|
||||
t-attf-class="css_attribute_color #{'active' if ptav in combination else ''} #{'custom_value' if ptav.is_custom else ''} #{'transparent' if (not ptav.is_custom and not ptav.html_color) else ''}">
|
||||
<input type="radio"
|
||||
t-attf-class="js_variant_change #{ptal.attribute_id.create_variant}"
|
||||
t-att-checked="ptav in combination"
|
||||
t-att-name="'ptal-%s' % ptal.id"
|
||||
t-att-value="ptav.id"
|
||||
t-att-title="ptav.name"
|
||||
t-att-data-value_id="ptav.id"
|
||||
t-att-data-value_name="ptav.name"
|
||||
t-att-data-attribute_name="ptav.attribute_id.name"
|
||||
t-att-data-is_custom="ptav.is_custom"
|
||||
t-att-data-is_single="single"
|
||||
t-att-data-is_single_and_custom="single_and_custom"/>
|
||||
</label>
|
||||
</li>
|
||||
</ul>
|
||||
</t>
|
||||
</li>
|
||||
</t>
|
||||
</ul>
|
||||
</template>
|
||||
<template id="badge_extra_price" name="Badge Extra Price">
|
||||
<t t-set="combination_info_variant" t-value="product._get_combination_info(ptav, pricelist=pricelist)"/>
|
||||
<span class="badge rounded-pill text-bg-light border" t-if="combination_info_variant['price_extra']">
|
||||
<!--
|
||||
price_extra is displayed as catalog price instead of
|
||||
price after pricelist because it is impossible to
|
||||
compute. Indeed, the pricelist rule might depend on the
|
||||
selected variant, so the price_extra will be different
|
||||
depending on the selected combination. The price of an
|
||||
attribute is therefore variable and it's not very
|
||||
accurate to display it.
|
||||
|
||||
To cover some generic cases, the price_extra also
|
||||
covers the price-included taxes in e-commerce flows.
|
||||
(See the override of `_get_combination_info`)
|
||||
-->
|
||||
<span class="sign_badge_price_extra" t-out="combination_info_variant['price_extra'] > 0 and '+' or '-'"/>
|
||||
<span t-out="abs(combination_info_variant['price_extra'])" class="variant_price_extra text-muted fst-italic" style="white-space: nowrap;"
|
||||
t-options='{
|
||||
"widget": "monetary",
|
||||
"display_currency": (pricelist or product).currency_id
|
||||
}'/>
|
||||
</span>
|
||||
</template>
|
||||
</odoo>
|
||||
Loading…
Add table
Add a link
Reference in a new issue