<?xml version="1.0" encoding="utf-8"?>
<openerp>
<data>
- <menuitem id="prod_config_main" name="Products" parent="base.menu_base_config" sequence="70"/>
+ <menuitem id="base.menu_product" name="Product Variants" parent="base.menu_base_partner" sequence="9"/>
- <record id="product_search_form_view" model="ir.ui.view">
- <field name="name">product.search.form</field>
- <field name="model">product.product</field>
+ <!-- templates -->
+
+ <record id="product_template_search_view" model="ir.ui.view">
+ <field name="name">product.template.search</field>
+ <field name="model">product.template</field>
<field name="arch" type="xml">
<search string="Product">
- <field name="name" string="Product" filter_domain="['|','|',('name','ilike',self),('default_code','ilike',self),('variants','ilike',self)]"/>
- <filter string="Services" icon="terp-accessories-archiver" domain="[('type','=','service')]"/>
- <filter string="Consumable" name="consumable" icon="terp-accessories-archiver" domain="[('type','=','consu')]" help="Consumable products"/>
- <separator/>
- <filter string="Can be Sold" name="filter_to_sell" icon="terp-accessories-archiver-minus" domain="[('sale_ok','=',1)]"/>
- <field name="categ_id"/>
- <group expand="0" string="Context...">
- <field name="pricelist_id" widget="selection" context="{'pricelist': self}" filter_domain="[]" groups="product.group_sale_pricelist"/> <!-- Keep widget=selection on this field to pass numeric `self` value, which is not the case for regular m2o widgets! -->
- <field name="company_id" groups="base.group_multi_company"/>
- </group>
- <group expand='0' string='Group by...'>
- <filter string='Category' icon="terp-stock_symbol-selection" domain="[]" context="{'group_by' : 'categ_id'}"/>
+ <field name="name" string="Product"/>
+ <filter string="Services" icon="terp-accessories-archiver" domain="[('type','=','service')]"/>
+ <filter string="Consumable" name="consumable" icon="terp-accessories-archiver" domain="[('type','=','consu')]" help="Consumable products"/>
+ <separator/>
+ <filter string="Can be Sold" name="filter_to_sell" icon="terp-accessories-archiver-minus" domain="[('sale_ok','=',1)]"/>
+ <field name="categ_id"/>
+ <field string="Product Variant" name="product_variant_ids" filter_domain="['|', ('product_variant_ids.name','ilike',self), ('product_variant_ids.attribute_value_ids.name','ilike',self)]"/>
+ <field name="company_id"/>
+ <field name="pricelist_id" widget="selection" context="{'pricelist': self}" filter_domain="[]" groups="product.group_sale_pricelist"/> <!-- Keep widget=selection on this field to pass numeric `self` value, which is not the case for regular m2o widgets! -->
+ <group expand='0' string='Group by...'>
+ <filter string='Category' domain="[]" context="{'group_by' : 'categ_id'}"/>
<filter string='Default Unit of Measure' icon="terp-mrp" domain="[]" context="{'group_by' : 'uom_id'}"/>
<filter string='Type' icon="terp-stock_symbol-selection" domain="[]" context="{'group_by' : 'type'}"/>
- <filter string='Company' icon="terp-go-home" domain="[]" context="{'group_by' : 'company_id'}" groups="base.group_multi_company"/>
- <filter string='Template' name="template_id" domain="[]" context="{'group_by' : 'product_tmpl_id'}" groups="product.group_product_variant"/>
- </group>
+ </group>
</search>
</field>
</record>
- <record id="product_product_tree_view" model="ir.ui.view">
- <field name="name">product.product.tree</field>
- <field name="model">product.product</field>
- <field eval="7" name="priority"/>
+ <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 colors="red:virtual_available<0;blue:virtual_available>=0 and state in ('draft', 'end', 'obsolete');black:virtual_available>=0 and state not in ('draft', 'end', 'obsolete')" string="Products">
- <field name="default_code"/>
+ <tree string="Product">
<field name="name"/>
- <field name="variants" groups="product.group_product_variant"/>
- <field name="categ_id" invisible="1"/>
- <field name="type" invisible="1"/>
- <field name="uom_id" string="Unit of Measure" groups="product.group_uom"/>
- <field name="qty_available"/>
- <field name="virtual_available"/>
- <field name="lst_price"/>
- <field name="price" invisible="not context.get('pricelist',False)"/>
- <field name="standard_price" invisible="1"/>
+ <field name="categ_id"/>
+ <field name="type"/>
<field name="state"/>
- <field name="company_id" groups="base.group_multi_company" invisible="1"/>
- <field name="product_tmpl_id" invisible="1"/>
+ <field name="uom_id" invisible="1"/>
</tree>
</field>
</record>
- <record id="product_normal_form_view" model="ir.ui.view">
- <field name="name">product.normal.form</field>
- <field name="model">product.product</field>
- <field eval="7" name="priority"/>
+ <!-- base structure of product.template, common with product.product -->
+ <record id="product_template_form_view" model="ir.ui.view">
+ <field name="name">product.template.common.form</field>
+ <field name="model">product.template</field>
+ <field name="mode">primary</field>
<field name="arch" type="xml">
- <form string="Product" version="7.0">
+ <form string="Product">
+ <field name="is_product_variant" invisible="1"/>
+ <field name='product_variant_count' invisible='1'/>
<sheet>
- <field name="image_medium" widget="image" class="oe_avatar oe_left"/>
- <field name="standard_variants" invisible="1"/>
- <field name="lst_price" invisible="1"/>
- <field name="price_extra" invisible="1"/>
- <field name="price_margin" invisible="1"/>
- <div class="oe_title">
- <div class="oe_edit_only">
- <label for="name" name='label_name' string="Product Name"/>
+ <field name="id" invisible="True"/>
+ <div class="oe_right oe_button_box" style="width: 300px;" name="buttons">
+ </div>
+ <div class="oe_left" style="width: 500px;">
+ <field name="image_medium" widget="image" class="oe_avatar oe_left"/>
+ <div class="oe_title" style="width: 390px;">
+ <label class="oe_edit_only" for="name" string="Product Name"/>
+ <h1><field name="name" class="oe_inline"/></h1>
</div>
- <h1>
- <field name="name" class="oe_inline"/>
- <field name="product_tmpl_id" groups="product.group_product_variant" on_change="onchange_product_tmpl_id(product_tmpl_id,lst_price,price_margin,price_extra)" class="oe_inline" context="{'search_variants':1}"/>
- <span attrs="{'invisible':[('variants','=',False)]}" groups="product.group_product_variant"> - </span>
- <field name="variants" placeholder="Variant Name" groups="product.group_product_variant" class="oe_inline" readonly="0" attrs="{'required': [('standard_variants', '=', True)]}"/>
- </h1>
- <label for="categ_id" class="oe_edit_only"/>
- <h2><field name="categ_id"/></h2>
- <label for="public_categ_id" class="oe_edit_only"/>
- <h3><field name="public_categ_id"/></h3>
- <div name="options" groups="base.group_user">
- <field name="sale_ok"/>
- <label for="sale_ok"/>
+ <div class="oe_left" name="options" groups="base.group_user">
+ <div>
+ <field name="sale_ok"/>
+ <label for="sale_ok"/>
+ </div>
</div>
</div>
- <div class="oe_right oe_button_box" name="buttons">
- </div>
<notebook>
<page string="Information">
- <group>
+ <group colspan="4">
<group>
<field name="type"/>
<field name="uom_id" on_change="onchange_uom(uom_id,uom_po_id)" groups="product.group_uom"/>
- <field name="lst_price" string="Public Sale Price"/>
+ <field name="list_price"/>
</group>
<group>
- <field name="default_code"/>
- <label for="ean13"/>
- <div name="ean">
- <field name="ean13" placeholder="e.g. 5901234123457"/>
- </div>
- <field name="company_id" groups="base.group_multi_company" widget="selection"/>
+ <field name="active"/>
</group>
</group>
+ <group colspan="4">
+ <field name="company_id" groups="base.group_multi_company" widget="selection"/>
+ </group>
<field name="description" placeholder="describe the product characteristics..."/>
</page>
<page string="Procurements" groups="base.group_user">
<group name="procurement">
<group name="general">
- <field name="cost_method" groups="product.group_costing_method"/>
- <field name="standard_price" attrs="{'readonly':[('cost_method','=','average')]}"/>
+ <field name="standard_price"/>
</group>
<group name="procurement_uom" groups="product.group_uom" string="Purchase">
<field name="uom_po_id"/>
</group>
</group>
+ <separator string="Suppliers"/>
+ <field name="seller_ids"/>
<separator string="Description for Suppliers"/>
<field name="description_purchase" placeholder="This note will be displayed on requests for quotation..."/>
</page>
- <page string="Inventory" groups="base.group_user">
+ <page string="Inventory">
<group name="inventory">
- <group name="status" string="Status">
+ <group name="status" string="Status">
<field name="state"/>
- <field name="product_manager"
- context="{'default_groups_ref': ['base.group_user', 'base.group_partner_manager', 'base.group_sale_manager']}"/>
+ <field name="product_manager"/>
</group>
- <group name="Weights" groups="product.group_stock_packaging" string="Weights">
- <field digits="(14, 3)" name="volume" attrs="{'readonly':[('type','=','service')]}"/>
- <field name="weight" attrs="{'readonly':[('type','=','service')]}"/>
- <field name="weight_net" attrs="{'readonly':[('type','=','service')]}"/>
+ <group name="weight" string="Weights" attrs="{'invisible':[('type','=','service')]}">
+ <field digits="(14, 3)" name="volume"/>
+ <field digits="(14, 3)" name="weight"/>
+ <field digits="(14, 3)" name="weight_net"/>
</group>
</group>
+ <group name="packaging" string="Packaging" attrs="{'invisible':[('type','=','service')]}" groups="product.group_stock_packaging" colspan="4">
+ <field name="packaging_ids" string="Configurations" context="{'tree_view_ref':'product.product_packaging_tree_view_product', 'form_view_ref': 'product.product_packaging_form_view_without_product'}"/>
+ </group>
</page>
- <page string="Sales" attrs="{'invisible':[('sale_ok','=',False)]}">
+ <page string="Sales" attrs="{'invisible':[('sale_ok','=',False)]}" name="sales">
<group name="sale">
- <group string="Sale Conditions">
+ <group name="sale_condition" string="Sale Conditions" colspan="3">
<label for="warranty"/>
<div>
<field name="warranty" class="oe_inline"/> months
<field name="mes_type"/>
</group>
</group>
- <field name="packaging" groups="product.group_stock_packaging">
- <form string="Packaging" version="7.0">
- <group col="4">
- <field name="ean"/>
- <field name="sequence" invisible="1"/>
- <newline/>
- <field name="qty"/>
- <field name="ul"/>
- <field name="weight_ul"/>
- <separator colspan="4" string="Palletization"/>
- <field name="ul_qty"/>
- <field name="rows"/>
- <field name="weight"/>
- <separator colspan="4" string="Pallet Dimension"/>
- <field name="height"/>
- <field name="width"/>
- <field name="length"/>
- </group>
- <separator colspan="4" string="Description"/>
- <field name="name"/>
- </form>
- </field>
+ <group name="website_and_pos" col="2">
+ </group>
<separator string="Description for Quotations"/>
<field name="description_sale" placeholder="note to be displayed on quotations..."/>
</page>
</field>
</record>
- <!-- Product Kanban View -->
-
- <record model="ir.ui.view" id="product.product_kanban_view">
- <field name="name">Product Kanban</field>
+ <record id="product_search_form_view" model="ir.ui.view">
+ <field name="name">product.product.search</field>
<field name="model">product.product</field>
+ <field name="mode">primary</field>
+ <field name="inherit_id" ref="product.product_template_search_view"/>
<field name="arch" type="xml">
- <kanban>
- <field name="color"/>
- <field name="type"/>
- <field name="image_small"/>
- <field name="list_price"/>
- <templates>
- <t t-name="kanban-box">
- <div class="oe_kanban_vignette oe_semantic_html_override">
- <a type="open"><img t-att-src="kanban_image('product.product', 'image_small', record.id.value)" class="oe_kanban_image"/></a>
- <div class="oe_kanban_details">
- <h4>
- <a type="open">
- <t t-if="record.code.raw_value">[<field name="code"/>]</t> <field name="name"/> <t t-if="record.variants.raw_value">(<field name="variants"/>)</t>
- </a>
- </h4>
- <div name="tags"/>
- <ul>
- <li>Price: <field name="lst_price"></field></li>
- </ul>
- </div>
- </div>
- </t>
- </templates>
- </kanban>
+ <field name="name" position="replace">
+ <field name="name" string="Product" filter_domain="['|',('default_code','ilike',self),('name','ilike',self)]"/>
+ </field>
+ <field name="product_variant_ids" position="replace">
+ <field name="attribute_value_ids"/>
+ </field>
+ <field name="name" position="after">
+ <field name="product_tmpl_id" string="Product Template"/>
+ </field>
+ <xpath expr="//group[@string='Group by...']" position="inside">
+ <filter string='Product Template' name="template_id" domain="[]" context="{'group_by' : 'product_tmpl_id'}"/>
+ </xpath>
+ </field>
+ </record>
+
+ <!-- variants -->
+
+ <record id="variants_template_tree_view" model="ir.ui.view">
+ <field name="name">variants.template.tree</field>
+ <field name="model">product.attribute.value</field>
+ <field name="arch" type="xml">
+ <tree string="Variant Values" editable="top">
+ <field name="sequence" widget="handle"/>
+ <field name="attribute_id"/>
+ <field name="name"/>
+ <field name="price_extra"/>
+ </tree>
</field>
</record>
+ <record id="variants_template_action" model="ir.actions.act_window">
+ <field name="name">Variant Values</field>
+ <field name="type">ir.actions.act_window</field>
+ <field name="res_model">product.attribute.value</field>
+ <field name="view_mode">tree</field>
+ <field name="view_type">form</field>
+ <field name="view_id" ref="variants_template_tree_view"/>
+ <field name="domain">[('product_ids.product_tmpl_id', '=', active_id)]</field>
+ <field name="context">{'default_product_tmpl_id': active_id}</field>
+ </record>
<record id="product_normal_action" model="ir.actions.act_window">
- <field name="name">Products</field>
+ <field name="name">Product Variants</field>
<field name="type">ir.actions.act_window</field>
<field name="res_model">product.product</field>
- <field name="view_type">form</field>
<field name="view_mode">tree,form,kanban</field>
- <field name="view_id" ref="product_product_tree_view"/>
+ <field name="view_type">form</field>
<field name="search_view_id" ref="product_search_form_view"/>
+ <field name="view_id" eval="False"/> <!-- Force empty -->
<field name="help" type="html">
<p class="oe_view_nocontent_create">
Click to define a new product.
</p>
</field>
</record>
- <record id="product_normal_action_sell" model="ir.actions.act_window">
- <field name="name">All Products</field>
+ <record id="product_variant_action" model="ir.actions.act_window">
+ <field name="name">Product Variants</field>
<field name="type">ir.actions.act_window</field>
<field name="res_model">product.product</field>
- <field name="view_mode">kanban,tree,form</field>
+ <field name="view_mode">tree,form,kanban</field>
<field name="view_type">form</field>
- <field name="context">{"search_default_filter_to_sell":1}</field>
- <field name="view_id" ref="product_product_tree_view"/>
+ <field name="context">{'search_default_product_tmpl_id': [active_id], 'default_product_tmpl_id': active_id}</field>
<field name="search_view_id" ref="product_search_form_view"/>
+ <field name="view_id" eval="False"/> <!-- Force empty -->
<field name="help" type="html">
<p class="oe_view_nocontent_create">
Click to define a new product.
</p><p>
- You must define a product for everything you sell, whether it's
- a physical product, a consumable or a service you offer to
- customers.
- </p><p>
- The product form contains information to simplify the sale
- process: price, notes in the quotation, accounting data,
- procurement methods, etc.
+ You must define a product for everything you buy or sell,
+ whether it's a physical product, a consumable or service.
</p>
</field>
</record>
-
- <record id="product_action_template" model="ir.actions.act_window">
- <field name="name">Products by Templates</field>
+
+
+ <!-- view specific to product.template -->
+ <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="active" position="after">
+ <field name="ean13" attrs="{'invisible': [('product_variant_count', '>', 1)]}"/>
+ <field name="default_code" attrs="{'invisible': [('product_variant_count', '>', 1)]}"/>
+ </field>
+ <xpath expr="//page[@string='Sales']" position="after">
+ <page name="variants" string="Variants">
+ <div class="oe_right">
+ <button class="oe_inline oe_stat_button" string="Variant Prices" name="%(variants_template_action)d" type="action" icon="fa-strikethrough"/>
+ <button class="oe_inline oe_stat_button" name="%(product.product_variant_action)d" type="action" icon="fa-sitemap">
+ <field string="List of Variants" name="product_variant_count" widget="statinfo" />
+ </button>
+ </div>
+ <field name="attribute_line_ids" widget="one2many_list" context="{'show_attribute': False}">
+ <tree string="Variants" editable="bottom">
+ <field name="attribute_id"/>
+ <field name="value_ids" widget="many2many_tags" options="{'no_create_edit': True}" domain="[('attribute_id', '=', attribute_id)]" context="{'default_attribute_id': attribute_id}"/>
+ </tree>
+ </field>
+ </page>
+ </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>
+ <field name="image_small"/>
+ <field name="lst_price"/>
+ <field name="is_product_variant"/>
+ <field name="product_variant_count"/>
+ <field name="product_variant_ids"/>
+ <templates>
+ <t t-name="kanban-box">
+ <div class="oe_kanban_vignette oe_semantic_html_override">
+ <a type="open"><img t-att-src="kanban_image('product.template', 'image_small', record.id.value)" class="oe_kanban_image"/></a>
+ <div class="oe_kanban_details">
+ <h4>
+ <a type="open">
+ <field name="name"/>
+ </a>
+ </h4>
+ <a name="%(product.product_variant_action)d" type="action">
+ <t t-esc="record.product_variant_count.value"/> Variants
+ </a>
+ <div name="tags"/>
+ <ul>
+ <li>Price: <field name="lst_price"></field></li>
+ </ul>
+ </div>
+ </div>
+ </t>
+ </templates>
+ </kanban>
+ </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.product</field>
- <field name="view_mode">tree,form,kanban</field>
+ <field name="res_model">product.template</field>
+ <field name="view_mode">kanban,tree,form</field>
<field name="view_type">form</field>
- <field name="context">{"search_default_template_id":1, "search_default_filter_to_sell":1}</field>
- <field name="view_id" ref="product_product_tree_view"/>
- <field name="search_view_id" ref="product_search_form_view"/>
- <field name="help" type="html">
- <p class="oe_view_nocontent_create">
- Click to define a new product.
- </p><p>
- You must define a product for everything you sell, whether it's
- a physical product, a consumable or a service you offer to
- customers.
- </p><p>
- The product form contains information to simplify the sale
- process: price, notes in the quotation, accounting data,
- procurement methods, etc.
- </p>
+ <field name="view_id" ref="product_template_kanban_view"/>
+ <field name="context">{"search_default_filter_to_sell":1}</field>
+ </record>
+
+ <menuitem action="product_template_action"
+ id="menu_product_template_action"
+ parent="base.menu_product" sequence="1" />
+
+ <!-- product product -->
+
+ <menuitem id="prod_config_main" name="Product Categories & Attributes" parent="base.menu_base_config" sequence="70" groups="base.group_no_one"/>
+
+ <record id="product_product_tree_view" model="ir.ui.view">
+ <field name="name">product.product.tree</field>
+ <field name="model">product.product</field>
+ <field eval="7" name="priority"/>
+ <field name="arch" type="xml">
+
+ <tree string="Product Variants">
+ <field name="default_code"/>
+ <field name="name"/>
+ <field name="attribute_value_ids" widget="many2many_tags"/>
+ <field name="lst_price"/>
+ <field name="price" invisible="not context.get('pricelist',False)"/>
+ <field name="uom_id"/>
+ <field name="ean13"/>
+ <field name="state" invisible="1"/>
+ <field name="product_tmpl_id" invisible="1"/>
+ </tree>
</field>
</record>
- <record id="open_view_product_tree1" model="ir.actions.act_window.view">
- <field name="sequence" eval="2"/>
+ <record id="product_normal_form_view" model="ir.ui.view">
+ <field name="name">product.product.form</field>
+ <field name="model">product.product</field>
+ <field name="mode">primary</field>
+ <field eval="7" name="priority"/>
+ <field name="inherit_id" ref="product.product_template_form_view"/>
+ <field name="arch" type="xml">
+ <form position="attributes">
+ <attribute name="string">Product Variant</attribute>
+ </form>
+ <field name="active" position="after">
+ <field name="ean13"/>
+ <field name="default_code"/>
+ </field>
+ <field name="list_price" position="attributes">
+ <attribute name="name">lst_price</attribute>
+ </field>
+ <field name="name" position="replace">
+ <field name="name" attrs="{'invisible': [('id', '!=', False)]}"/>
+ <field name="product_tmpl_id" class="oe_inline" readonly="1" attrs="{'invisible': [('id', '=', False)], 'required': [('id', '!=', False)]}"/>
+ </field>
+ <xpath expr="//div[@class='oe_title']" position="inside">
+ <field name="attribute_value_ids" widget="many2many_tags"/>
+ </xpath>
+ </field>
+ </record>
+
+ <record id="product_kanban_view" model="ir.ui.view">
+ <field name="name">Product Kanban</field>
+ <field name="model">product.product</field>
+ <field name="arch" type="xml">
+ <kanban>
+ <field name="image_small"/>
+ <field name="lst_price"/>
+ <templates>
+ <t t-name="kanban-box">
+ <div class="oe_kanban_vignette oe_semantic_html_override">
+ <a type="open"><img t-att-src="kanban_image('product.product', 'image_small', record.id.value)" class="oe_kanban_image"/></a>
+ <div class="oe_kanban_details">
+ <h4>
+ <a type="open">
+ <field name="name"/>
+ <field name="attribute_value_ids"/>
+ </a>
+ </h4>
+ <div name="tags"/>
+ <ul>
+ <li>Price: <field name="lst_price"></field></li>
+ </ul>
+ </div>
+ </div>
+ </t>
+ </templates>
+ </kanban>
+ </field>
+ </record>
+
+ <!-- -->
+
+ <record id="attribute_tree_view" model="ir.ui.view">
+ <field name="name">product.attribute.tree</field>
+ <field name="model">product.attribute</field>
+ <field name="arch" type="xml">
+ <tree string="Variant Values" editable="top">
+ <field name="name"/>
+ </tree>
+ </field>
+ </record>
+
+ <record id="attribute_action" model="ir.actions.act_window">
+ <field name="name">Attributes</field>
+ <field name="type">ir.actions.act_window</field>
+ <field name="res_model">product.attribute</field>
<field name="view_mode">tree</field>
- <field name="view_id" ref="product_product_tree_view"/>
- <field name="act_window_id" ref="product_normal_action_sell"/>
+ <field name="view_type">form</field>
</record>
- <record id="open_view_product_form1" model="ir.actions.act_window.view">
- <field name="sequence" eval="3"/>
- <field name="view_mode">form</field>
- <field name="view_id" ref="product_normal_form_view"/>
- <field name="act_window_id" ref="product_normal_action_sell"/>
+ <menuitem action="attribute_action"
+ id="menu_attribute_action"
+ parent="product.prod_config_main" sequence="9" />
+
+ <record id="variants_tree_view" model="ir.ui.view">
+ <field name="name">product.attribute.value.tree</field>
+ <field name="model">product.attribute.value</field>
+ <field name="arch" type="xml">
+ <tree string="Variant Values" editable="top">
+ <field name="sequence" widget="handle"/>
+ <field name="attribute_id"/>
+ <field name="name"/>
+ </tree>
+ </field>
</record>
- <record id="open_view_product_kanban1" model="ir.actions.act_window.view">
- <field name="sequence" eval="1"/>
- <field name="view_mode">kanban</field>
- <field name="view_id" ref="product_kanban_view"/>
- <field name="act_window_id" ref="product_normal_action_sell"/>
+ <record id="variants_action" model="ir.actions.act_window">
+ <field name="name">Attribute Values</field>
+ <field name="type">ir.actions.act_window</field>
+ <field name="res_model">product.attribute.value</field>
+ <field name="view_mode">tree</field>
+ <field name="view_type">form</field>
</record>
- <menuitem id="base.menu_product" name="Products" parent="base.menu_base_partner" sequence="9"/>
- <menuitem action="product.product_normal_action_sell" id="product.menu_products" parent="base.menu_product" sequence="1"/>
- <menuitem action="product.product_action_template" id="product.menu_products_bytemplate" parent="base.menu_product" groups="product.group_product_variant" sequence="3"/>
+ <menuitem action="variants_action"
+ id="menu_variants_action"
+ parent="product.prod_config_main" sequence="10" />
- <record id="product_normal_action_puchased" model="ir.actions.act_window">
- <field name="name">Products</field>
+ <!-- -->
+
+ <record id="product_normal_action_sell" model="ir.actions.act_window">
+ <field name="name">Product Variants</field>
<field name="type">ir.actions.act_window</field>
<field name="res_model">product.product</field>
- <field name="view_type">form</field>
<field name="view_mode">kanban,tree,form</field>
- <field name="context">{"search_default_filter_to_purchase":1}</field>
- <field name="view_id" ref="product_kanban_view"/>
+ <field name="view_type">form</field>
+ <field name="context">{"search_default_filter_to_sell":1}</field>
+ <field name="view_id" ref="product_product_tree_view"/>
<field name="search_view_id" ref="product_search_form_view"/>
<field name="help" type="html">
<p class="oe_view_nocontent_create">
Click to define a new product.
</p><p>
- You must define a product for everything you purchase, whether
- it's a physical product, a consumable or services you buy to
- subcontractants.
+ You must define a product for everything you sell, whether it's
+ a physical product, a consumable or a service you offer to
+ customers.
</p><p>
- The product form contains detailed information to improve the
- purchase process: prices, procurement logistics, accounting data,
- available suppliers, etc.
+ The product form contains information to simplify the sale
+ process: price, notes in the quotation, accounting data,
+ procurement methods, etc.
</p>
</field>
</record>
+ <menuitem id="product.menu_products" action="product.product_normal_action_sell" parent="base.menu_product" groups="base.group_no_one" sequence="10"/>
+
<record id="product_category_search_view" model="ir.ui.view">
<field name="name">product.category.search</field>
<field name="model">product.category</field>
<field name="name">product.category.form</field>
<field name="model">product.category</field>
<field name="arch" type="xml">
- <form string="Product Categories" version="7.0">
+ <form string="Product Categories">
<sheet>
<div class="oe_title">
<label for="name" class="oe_edit_only"/>
action="product_category_action"
id="product.menu_products_category"
parent="base.menu_product"
- sequence="2" groups="base.group_no_one"/>
+ sequence="30" groups="base.group_no_one"/>
<record id="product_category_action_form" model="ir.actions.act_window">
<field name="name">Product Categories</field>
<field name="type">ir.actions.act_window</field>
<record id="product_normal_action_tree" model="ir.actions.act_window">
- <field name="name">Products</field>
+ <field name="name">Product Variants</field>
<field name="type">ir.actions.act_window</field>
<field name="res_model">product.product</field>
<field name="view_type">form</field>
<field eval="'ir.actions.act_window,%d'%product_normal_action_tree" name="value"/>
</record>
-
- <!-- Product Public Categories -->
- <record id="product_public_category_form_view" model="ir.ui.view">
- <field name="name">product.public.category.form</field>
- <field name="model">product.public.category</field>
- <field name="arch" type="xml">
- <form string="Pos/Public Categories" version="7.0">
- <sheet>
- <field name="image_medium" widget='image' class="oe_avatar oe_right"/>
- <div class="oe_left">
- <group>
- <field name="name"/>
- <field name="parent_id"/>
- <field name="sequence"/>
- </group>
- </div>
- </sheet>
- </form>
- </field>
- </record>
- <record id="product_public_category_tree_view" model="ir.ui.view">
- <field name="name">product.public.category.tree</field>
- <field name="model">product.public.category</field>
- <field name="field_parent" eval="False"/>
- <field name="arch" type="xml">
- <tree string="Product Product Categories">
- <field name="sequence" invisible="1"/>
- <field name="complete_name"/>
- </tree>
- </field>
- </record>
- <record id="product_public_category_action" model="ir.actions.act_window">
- <field name="name">Pos/Public Product Categories</field>
- <field name="type">ir.actions.act_window</field>
- <field name="res_model">product.public.category</field>
- <field name="view_type">form</field>
- <field name="view_mode">tree,form</field>
- <field name="view_id" eval="False"/>
- <field name="help" type="html">
- <p class="oe_view_nocontent_create">
- Click to define a new category.
- </p><p>
- Categories are used to browse your products through the
- touchscreen interface.
- </p><p>
- If you put a photo on the category, the layout of the
- touchscreen interface will automatically. We suggest not to put
- a photo on categories for small (1024x768) screens.
- </p>
- </field>
- </record>
- <menuitem action="product_public_category_action" id="menu_product_public_category" parent="prod_config_main" sequence="10" />
- <!-- END -->
-
<!-- Unit of Measure -->
<record id="product_uom_tree_view" model="ir.ui.view">
<field name="name">product.uom.form</field>
<field name="model">product.uom</field>
<field name="arch" type="xml">
- <form string="Units of Measure" version="7.0">
+ <form string="Units of Measure">
<group>
<group>
<field name="name"/>
<field name="uom_type" on_change="onchange_type(uom_type)"/>
<label for="factor"/>
<div>
- <field name="factor" attrs="{'invisible':[('uom_type','!=','smaller')]}"/>
- <field name="factor_inv" attrs="{'invisible':[('uom_type','!=','bigger')]}"/>
+ <field name="factor"
+ digits="[42,5]"
+ attrs="{'invisible':[('uom_type','!=','smaller')],
+ 'readonly':[('uom_type','=','bigger')]}"/>
+ <field name="factor_inv"
+ digits="[42,5]"
+ attrs="{'invisible':[('uom_type','!=','bigger')],
+ 'readonly':[('uom_type','!=','bigger')]}"/>
<p attrs="{'invisible':[('uom_type','!=','smaller')]}" class="oe_grey">
e.g: 1 * (reference unit) = ratio * (this unit)
</p>
</group>
<group>
<field name="active"/>
- <field name="rounding"/>
+ <field name="rounding" digits="[42, 5]"/>
</group>
</group>
</form>
<field name="name">product.uom.categ.form</field>
<field name="model">product.uom.categ</field>
<field name="arch" type="xml">
- <form string="Units of Measure categories" version="7.0">
+ <form string="Units of Measure categories">
<group>
<field name="name"/>
</group>
<field name="name">product.ul.form.view</field>
<field name="model">product.ul</field>
<field name="arch" type="xml">
- <form string="Packaging" version="7.0">
+ <form string="Logistic Units">
+ <sheet>
<group>
<field name="name"/>
<field name="type"/>
</group>
+ <group>
+ <field name="height"/>
+ <field name="width"/>
+ <field name="length"/>
+ <field name="weight"/>
+ </group>
+ </sheet>
</form>
</field>
</record>
<field name="name">product.ul.tree</field>
<field name="model">product.ul</field>
<field name="arch" type="xml">
- <tree string="Packaging">
+ <tree string="Logistic Units">
<field name="name"/>
<field name="type"/>
</tree>
</field>
</record>
<record id="product_ul_form_action" model="ir.actions.act_window">
- <field name="name">Packaging</field>
+ <field name="name">Logistic Units</field>
<field name="type">ir.actions.act_window</field>
<field name="res_model">product.ul</field>
<field name="view_type">form</field>
<field name="view_mode">tree,form</field>
<field name="help" type="html">
<p class="oe_view_nocontent_create">
- Click to add a new packaging type.
+ Click to add a new Logistic Unit
</p><p>
- The packaging type define the dimensions as well as the number
- of products per package. This will ensure salesperson sell the
- right number of products according to the package selected.
+ The logistic unit defines the container used for the package.
+ It has a type (e.g. pallet, box, ...) and you can specify its
+ size.
</p>
</field>
</record>
<field name="arch" type="xml">
<tree string="Packaging">
<field name="sequence" widget="handle"/>
+ <field name="product_tmpl_id"/>
<field name="ean"/>
<field name="qty"/>
<field name="ul"/>
+ <field name="ul_container"/>
+ </tree>
+ </field>
+ </record>
+
+ <record id="product_packaging_tree_view_product" model="ir.ui.view">
+ <field name="name">product.packaging.tree.view.product</field>
+ <field name="model">product.packaging</field>
+ <field name="arch" type="xml">
+ <tree string="Packaging">
+ <field name="qty"/>
+ <field name="ul"/>
+ <field name="ul_qty"/>
+ <field name="rows"/>
+ <field name="ul_container"/>
</tree>
</field>
</record>
<field name="name">product.packaging.form.view</field>
<field name="model">product.packaging</field>
<field name="arch" type="xml">
- <form string="Packaging" version="7.0">
+ <form string="Packaging">
<group col="4">
- <field name="product_id"/>
+ <field name="product_tmpl_id"/>
<newline/>
<field name="ean"/>
<field name="sequence" invisible="1"/>
<newline/>
<field name="qty"/>
<field name="ul"/>
- <field name="weight_ul"/>
<separator colspan="4" string="Palletization"/>
<field name="ul_qty"/>
<field name="rows"/>
+ <field name="ul_container"/>
+ <field name="weight"/>
+ <separator colspan="4" string="Other Info"/>
+ <field colspan="4" name="name"/>
+ </group>
+ </form>
+ </field>
+ </record>
+
+ <record id="product_packaging_form_view_without_product" model="ir.ui.view">
+ <field name="name">product.packaging.form.view.without.product</field>
+ <field name="model">product.packaging</field>
+ <field name="arch" type="xml">
+ <form string="Packaging">
+ <group col="4">
+ <field name="ean"/>
+ <field name="sequence" invisible="1"/>
+ <newline/>
+ <field name="qty"/>
+ <field name="ul"/>
+ <separator colspan="4" string="Palletization"/>
+ <field name="ul_qty"/>
+ <field name="rows"/>
+ <field name="ul_container"/>
<field name="weight"/>
- <separator colspan="4" string="Pallet Dimension"/>
- <field name="height"/>
- <field name="width"/>
- <field name="length"/>
<separator colspan="4" string="Other Info"/>
<field colspan="4" name="name"/>
</group>
<field name="name">product.supplierinfo.form.view</field>
<field name="model">product.supplierinfo</field>
<field name="arch" type="xml">
- <form string="Supplier Information" version="7.0">
+ <form string="Supplier Information">
<group col="4">
<field name="name" context="{'default_customer': 0, 'search_default_supplier': 1, 'default_supplier': 1}"/>
<field name="sequence"/>
<field name="min_quantity"/>
<field name="price"/>
</tree>
- <form version="7.0">
+ <form>
<group>
<field name="min_quantity"/>
<field name="price"/>
</field>
</record>
- <!-- Variants -->
- <record id="product_variant_search_form_view" model="ir.ui.view">
- <field name="name">product.variant.search.form</field>
- <field name="model">product.product</field>
- <field name="arch" type="xml">
- <search string="Product Variant">
- <field name="product_tmpl_id"/>
- <field name="name" string="Product" filter_domain="['|','|',('name','ilike',self),('default_code','ilike',self),('variants','ilike',self)]"/>
- <group expand='0' string='Group by...'>
- <filter string='Template' name="template_id" domain="[]" context="{'group_by' : 'product_tmpl_id'}"/>
- </group>
- </search>
- </field>
- </record>
- <record id="product_variant_form_view" model="ir.ui.view">
- <field name="name">product.variant.form</field>
- <field name="model">product.product</field>
- <field name="arch" type="xml">
- <form string="Product Variant" version="7.0">
- <group col="4">
- <field name="product_tmpl_id" context="{'search_variants': 1}"/>
- <field name="active"/>
- <field name="variants" required="1"/>
- <field name="default_code"/>
- <label for="price_margin"/>
- <div>
- <field name="price_margin" class="oe_inline" style="vertical-align:baseline"/> %%
- </div>
- <field name="price_extra"/>
- </group>
- </form>
- </field>
- </record>
- <record id="product_variant_tree_view" model="ir.ui.view">
- <field name="name">product.variant.tree</field>
- <field name="model">product.product</field>
- <field name="arch" type="xml">
- <tree string="Product Variant">
- <field name="product_tmpl_id"/>
- <field name="variants"/>
- <field name="default_code"/>
- <field name="price_margin"/>
- <field name="price_extra"/>
- <field name="company_id" invisible="1"/>
- <field name="type" invisible="1"/>
- <field name="uom_id" invisible="1"/>
- <field name="categ_id" invisible="1"/>
- </tree>
- </field>
- </record>
- <record id="product_variant_action" model="ir.actions.act_window">
- <field name="name">Product Variants</field>
- <field name="type">ir.actions.act_window</field>
- <field name="domain">[('variants','!=', '')]</field>
- <field name="res_model">product.product</field>
- <field name="view_type">form</field>
- <field name="view_mode">tree,form,kanban</field>
- <field name="view_id" ref="product_variant_tree_view"/>
- <field name="search_view_id" ref="product_variant_search_form_view"/>
- <field name="help" type="html">
- <p class="oe_view_nocontent_create">
- Click to define a new variant of product.
- </p>
- </field>
- </record>
- <record id="tree_view_product_variant" model="ir.actions.act_window.view">
- <field name="sequence" eval="10"/>
- <field name="view_mode">tree</field>
- <field name="view_id" ref="product_variant_tree_view"/>
- <field name="act_window_id" ref="product_variant_action"/>
- </record>
- <record id="form_view_product_variant" model="ir.actions.act_window.view">
- <field name="sequence" eval="20"/>
- <field name="view_mode">form</field>
- <field name="view_id" ref="product_variant_form_view"/>
- <field name="act_window_id" ref="product_variant_action"/>
- </record>
- <menuitem action="product.product_variant_action" id="product.menu_variant_product" parent="prod_config_main" sequence="4" groups="product.group_product_variant"/>
-
- <!-- templates -->
-
- <record id="product_template_search_view" model="ir.ui.view">
- <field name="name">product.template.search</field>
- <field name="model">product.template</field>
- <field name="arch" type="xml">
- <search string="Product Template">
- <field name="name" string="Product"/>
- <filter string="Services" icon="terp-accessories-archiver" domain="[('type','=','service')]"/>
- <filter string="Consumable" name="consumable" icon="terp-accessories-archiver" domain="[('type','=','consu')]" help="Consumable products"/>
- <separator/>
- <filter string="Can be Sold" name="filter_to_sell" icon="terp-accessories-archiver-minus" domain="[('sale_ok','=',1)]"/>
- <field name="categ_id"/>
- <group expand='0' string='Group by...'>
- <filter string='Category' icon="terp-stock_symbol-selection" domain="[]" context="{'group_by' : 'categ_id'}"/>
- <filter string='Default Unit of Measure' icon="terp-mrp" domain="[]" context="{'group_by' : 'uom_id'}"/>
- <filter string='Type' icon="terp-stock_symbol-selection" domain="[]" context="{'group_by' : 'type'}"/>
- </group>
- </search>
- </field>
- </record>
-
- <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 Template">
- <field name="name"/>
- <field name="categ_id"/>
- <field name="type"/>
- <field name="state"/>
- <field name="uom_id" invisible="1"/>
- </tree>
- </field>
- </record>
-
- <record id="product_template_form_view" model="ir.ui.view">
- <field name="name">product.template.product.form</field>
- <field name="model">product.template</field>
- <field name="arch" type="xml">
- <form string="Product Template" version="7.0">
- <sheet>
- <field name="image_medium" widget="image" class="oe_avatar oe_left"/>
- <div class="oe_title">
- <div class="oe_edit_only">
- <label for="name" string="Product Name"/>
- </div>
- <h1>
- <field name="name"/>
- </h1>
- <label for="categ_id" class="oe_edit_only"/>
- <h2><field name="categ_id"/></h2>
- <label for="public_categ_id" class="oe_edit_only"/>
- <h3><field name="public_categ_id"/></h3>
- <div name="options" groups="base.group_user">
- <field name="sale_ok"/>
- <label for="sale_ok"/>
- </div>
- </div>
- <notebook>
- <page string="Information">
- <group colspan="4">
- <group>
- <field name="type"/>
- <field name="uom_id" on_change="onchange_uom(uom_id,uom_po_id)" groups="product.group_uom"/>
- <field name="list_price"/>
- </group>
- <group>
- <field name="company_id" groups="base.group_multi_company" widget="selection"/>
- </group>
- </group>
- <group colspan="4" string="Product Variants">
- <field colspan="4" name="product_variant_ids" nolabel="1" >
- <tree string="Product Variants" editable="bottom">
- <field name="variants" required="1"/>
- <field name="price_margin" string="Variant Price Margin(%%)"/>
- <field name="price_extra"/>
- <field name="lst_price" string="Sale Price" readonly="1"/>
- </tree>
- </field>
- </group>
- <field name="description" placeholder="describe the product characteristics..."/>
- </page>
- <page string="Procurements" groups="base.group_user">
- <group name="procurement">
- <group name="general">
- <field name="cost_method" groups="product.group_costing_method"/>
- <field name="standard_price" attrs="{'readonly':[('cost_method','=','average')]}"/>
- </group>
- <group name="delay" string="Delays">
- <label for="produce_delay"/>
- <div>
- <field name="produce_delay" class="oe_inline" style="vertical-align:baseline"/> days
- </div>
- </group>
- <group name="procurement_uom" groups="product.group_uom" string="Purchase">
- <field name="uom_po_id"/>
- </group>
- </group>
- <separator string="Suppliers"/>
- <field name="seller_ids"/>
- <separator string="Description for Suppliers"/>
- <field name="description_purchase" placeholder="This note will be displayed on requests for quotation..."/>
- </page>
- <page string="Inventory">
- <group name="inventory">
- <group name="status" string="Status">
- <field name="state"/>
- <field name="product_manager"/>
- </group>
- <group name ="weight" string="Weights">
- <field digits="(14, 3)" name="volume" attrs="{'readonly':[('type','=','service')]}"/>
- <field digits="(14, 3)" name="weight" attrs="{'readonly':[('type','=','service')]}"/>
- <field digits="(14, 3)" name="weight_net" attrs="{'readonly':[('type','=','service')]}"/>
- </group>
- </group>
- </page>
- <page string="Sales" attrs="{'invisible':[('sale_ok','=',False)]}">
- <group name="sale">
- <group name="sale_condition" string="Sale Conditions">
- <label for="warranty"/>
- <div>
- <field name="warranty" class="oe_inline" style="vertical-align:baseline"/> months
- </div>
- </group>
- <group groups="product.group_uos" string="Unit of Measure">
- <field name="uos_id"/>
- <field name="uos_coeff"/>
- <field name="mes_type"/>
- </group>
- </group>
- <separator string="Description for Quotations"/>
- <field name="description_sale" placeholder="note to be displayed on quotations..."/>
- </page>
- </notebook>
- </sheet>
- <div class="oe_chatter">
- <field name="message_follower_ids" widget="mail_followers"/>
- <field name="message_ids" widget="mail_thread"/>
- </div>
- </form>
- </field>
- </record>
-
- <record model="ir.ui.view" id="product_template_kanban_view">
- <field name="name">Product Template Kanban</field>
- <field name="model">product.template</field>
- <field name="arch" type="xml">
- <kanban>
- <field name="image_small"/>
- <field name="list_price"/>
- <templates>
- <t t-name="kanban-box">
- <div class="oe_kanban_vignette oe_semantic_html_override">
- <a type="open"><img t-att-src="kanban_image('product.template', 'image_small', record.id.value)" class="oe_kanban_image"/></a>
- <div class="oe_kanban_details">
- <h4>
- <a type="open">
- <field name="name"/>
- </a>
- </h4>
- <div name="tags"/>
- <ul>
- <li>Price: <field name="list_price"></field></li>
- </ul>
- </div>
- </div>
- </t>
- </templates>
- </kanban>
- </field>
- </record>
-
- <record id="product_template_action" model="ir.actions.act_window">
- <field name="name">Product Templates</field>
- <field name="type">ir.actions.act_window</field>
- <field name="res_model">product.template</field>
- <field name="view_mode">kanban,tree,form</field>
- <field name="view_type">form</field>
- <field name="context">{'search_variants': 1}</field>
- <field name="view_id" ref="product_template_kanban_view"/>
- </record>
-
- <menuitem action="product_template_action"
- id="menu_product_template_action"
- parent="base.menu_product" sequence="0"/>
-
</data>
</openerp>