188 lines
10 KiB
XML
188 lines
10 KiB
XML
|
<?xml version="1.0" encoding="utf-8"?>
|
||
|
<odoo>
|
||
|
<record id="product_template_tree_view" model="ir.ui.view">
|
||
|
<field name="name">product.template.product.tree</field>
|
||
|
<field name="model">product.template</field>
|
||
|
<field name="arch" type="xml">
|
||
|
<tree string="Product" multi_edit="1" sample="1">
|
||
|
<header>
|
||
|
<button string="Print Labels" type="object" name="action_open_label_layout"/>
|
||
|
</header>
|
||
|
<field name="product_variant_count" column_invisible="True"/>
|
||
|
<field name="sale_ok" column_invisible="True"/>
|
||
|
<field name="currency_id" column_invisible="True"/>
|
||
|
<field name="cost_currency_id" column_invisible="True"/>
|
||
|
<field name="priority" widget="priority" optional="show" nolabel="1"/>
|
||
|
<field name="name" string="Product Name"/>
|
||
|
<field name="default_code" optional="show"/>
|
||
|
<field name="product_tag_ids" widget="many2many_tags" optional="show"/>
|
||
|
<field name="barcode" optional="hide" readonly="product_variant_count != 1"/>
|
||
|
<field name="company_id" options="{'no_create': True}"
|
||
|
groups="base.group_multi_company" optional="hide"/>
|
||
|
<field name="list_price" string="Sales Price" widget='monetary' options="{'currency_field': 'currency_id'}" optional="show" decoration-muted="not sale_ok"/>
|
||
|
<field name="standard_price" widget='monetary' options="{'currency_field': 'cost_currency_id'}" optional="show" readonly="1"/>
|
||
|
<field name="categ_id" optional="hide"/>
|
||
|
<field name="detailed_type" optional="hide" readonly="1"/>
|
||
|
<field name="type" column_invisible="True"/>
|
||
|
<field name="uom_id" string="Unit" readonly="1" optional="show" groups="uom.group_uom"/>
|
||
|
<field name="active" column_invisible="True"/>
|
||
|
<field name="activity_exception_decoration" widget="activity_exception"/>
|
||
|
</tree>
|
||
|
</field>
|
||
|
</record>
|
||
|
|
||
|
<record id="product_template_only_form_view" model="ir.ui.view">
|
||
|
<field name="name">product.template.product.form</field>
|
||
|
<field name="model">product.template</field>
|
||
|
<field name="mode">primary</field>
|
||
|
<field name="priority" eval="8" />
|
||
|
<field name="inherit_id" ref="product.product_template_form_view"/>
|
||
|
<field name="arch" type="xml">
|
||
|
<xpath expr="//form" position="attributes">
|
||
|
<attribute name="name">Product Template</attribute>
|
||
|
</xpath>
|
||
|
<field name="categ_id" position="after">
|
||
|
<field name="default_code" invisible="product_variant_count > 1"/>
|
||
|
<field name="valid_product_template_attribute_line_ids" invisible="1"/>
|
||
|
<field name="barcode" invisible="product_variant_count > 1 or (product_variant_count == 0 and valid_product_template_attribute_line_ids)"/>
|
||
|
</field>
|
||
|
|
||
|
<div name="button_box" position="inside">
|
||
|
<button name="%(product.product_variant_action)d" type="action"
|
||
|
icon="fa-sitemap" class="oe_stat_button"
|
||
|
invisible="product_variant_count <= 1"
|
||
|
groups="product.group_product_variant">
|
||
|
<field string="Variants" name="product_variant_count" widget="statinfo" />
|
||
|
</button>
|
||
|
</div>
|
||
|
|
||
|
<xpath expr="//page[@name='general_information']" position="after">
|
||
|
<page name="variants" string="Attributes & Variants" groups="product.group_product_variant">
|
||
|
<field name="attribute_line_ids" widget="one2many" context="{'show_attribute': False}">
|
||
|
<tree string="Variants" editable="bottom" decoration-info="value_count <= 1">
|
||
|
<field name="value_count" column_invisible="True"/>
|
||
|
<field name="sequence" widget="handle"/>
|
||
|
<field name="attribute_id" readonly="id"/>
|
||
|
<field name="value_ids" widget="many2many_tags" options="{'no_create_edit': True, 'color_field': 'color'}" context="{'default_attribute_id': attribute_id, 'show_attribute': False}"/>
|
||
|
<button string="Configure" class="float-end btn-secondary"
|
||
|
type="object" name="action_open_attribute_values"
|
||
|
groups="product.group_product_variant"/>
|
||
|
</tree>
|
||
|
</field>
|
||
|
<p class="oe_grey oe_edit_only">
|
||
|
<strong>Warning</strong>: adding or deleting attributes
|
||
|
will delete and recreate existing variants and lead
|
||
|
to the loss of their possible customizations.
|
||
|
</p>
|
||
|
</page>
|
||
|
</xpath>
|
||
|
<xpath expr="//group[@name='group_standard_price']" position="after">
|
||
|
<field name="product_properties" columns="2"/>
|
||
|
</xpath>
|
||
|
</field>
|
||
|
</record>
|
||
|
|
||
|
<record id="product_template_kanban_view" model="ir.ui.view">
|
||
|
<field name="name">Product.template.product.kanban</field>
|
||
|
<field name="model">product.template</field>
|
||
|
<field name="arch" type="xml">
|
||
|
<kanban sample="1">
|
||
|
<field name="id"/>
|
||
|
<field name="product_variant_count"/>
|
||
|
<field name="currency_id"/>
|
||
|
<field name="activity_state"/>
|
||
|
<field name="categ_id"/>
|
||
|
<progressbar field="activity_state" colors='{"planned": "success", "today": "warning", "overdue": "danger"}'/>
|
||
|
<templates>
|
||
|
<t t-name="kanban-box">
|
||
|
<div class="oe_kanban_card oe_kanban_global_click">
|
||
|
<div class="o_kanban_image me-1">
|
||
|
<img t-att-src="kanban_image('product.template', 'image_128', record.id.raw_value)" alt="Product" class="o_image_64_contain"/>
|
||
|
</div>
|
||
|
<div class="oe_kanban_details">
|
||
|
<div class="o_kanban_record_top mb-0">
|
||
|
<div class="o_kanban_record_headings">
|
||
|
<strong class="o_kanban_record_title">
|
||
|
<field name="name"/>
|
||
|
</strong>
|
||
|
</div>
|
||
|
<field name="priority" widget="priority"/>
|
||
|
</div>
|
||
|
<t t-if="record.default_code.value">[<field name="default_code"/>]</t>
|
||
|
<div t-if="record.product_variant_count.value > 1" groups="product.group_product_variant">
|
||
|
<strong>
|
||
|
<t t-esc="record.product_variant_count.value"/> Variants
|
||
|
</strong>
|
||
|
</div>
|
||
|
<div name="product_lst_price" class="mt-1">
|
||
|
Price: <field name="list_price" widget="monetary" options="{'currency_field': 'currency_id', 'field_digits': True}"></field>
|
||
|
</div>
|
||
|
<div>
|
||
|
<field name="product_properties" widget="properties"/>
|
||
|
</div>
|
||
|
</div>
|
||
|
</div>
|
||
|
</t>
|
||
|
</templates>
|
||
|
</kanban>
|
||
|
</field>
|
||
|
</record>
|
||
|
|
||
|
<record id="product_template_view_activity" model="ir.ui.view">
|
||
|
<field name="name">product.template.activity</field>
|
||
|
<field name="model">product.template</field>
|
||
|
<field name="arch" type="xml">
|
||
|
<activity string="Products">
|
||
|
<field name="id"/>
|
||
|
<templates>
|
||
|
<div t-name="activity-box">
|
||
|
<img t-att-src="activity_image('product.template', 'image_128', record.id.raw_value)" role="img" t-att-title="record.id.value" t-att-alt="record.id.value"/>
|
||
|
<div class="ms-2">
|
||
|
<field name="name" display="full" class="o_text_block"/>
|
||
|
<div t-if="record.default_code.value" class="o_text_block text-muted">
|
||
|
[<field name="default_code"/>]
|
||
|
</div>
|
||
|
</div>
|
||
|
</div>
|
||
|
</templates>
|
||
|
</activity>
|
||
|
</field>
|
||
|
</record>
|
||
|
|
||
|
<record id="product_template_action" model="ir.actions.act_window">
|
||
|
<field name="name">Products</field>
|
||
|
<field name="res_model">product.template</field>
|
||
|
<field name="view_mode">kanban,tree,form</field>
|
||
|
<field name="view_id" ref="product_template_kanban_view"/>
|
||
|
<field name="search_view_id" ref="product.product_template_search_view"/>
|
||
|
<field name="context">{"search_default_filter_to_sell":1}</field>
|
||
|
<field name="help" type="html">
|
||
|
<p class="o_view_nocontent_smiling_face">
|
||
|
Create a new product
|
||
|
</p><p>
|
||
|
You must define a product for everything you sell or purchase,
|
||
|
whether it's a storable product, a consumable or a service.
|
||
|
</p>
|
||
|
</field>
|
||
|
</record>
|
||
|
|
||
|
<record id="action_product_template_price_list_report" model="ir.actions.server">
|
||
|
<field name="name">Generate Pricelist Report</field>
|
||
|
<field name="groups_id" eval="[(4, ref('product.group_product_pricelist'))]"/>
|
||
|
<field name="model_id" ref="product.model_product_template"/>
|
||
|
<field name="binding_model_id" ref="product.model_product_template"/>
|
||
|
<field name="state">code</field>
|
||
|
<field name="code">
|
||
|
ctx = env.context
|
||
|
ctx.update({'default_pricelist': env['product.pricelist'].search([], limit=1).id})
|
||
|
action = {
|
||
|
'name': 'Pricelist Report',
|
||
|
'type': 'ir.actions.client',
|
||
|
'tag': 'generate_pricelist_report',
|
||
|
'context': ctx,
|
||
|
}
|
||
|
</field>
|
||
|
</record>
|
||
|
|
||
|
</odoo>
|