Usability improvement because when the user click on inventory
report it's mainly in order to edit/check its current stock since
commit da33eb36b8
This change redirect the user directly on stock.quant tree view
and add an inventory at date button in the control panel. This
button will open the same wizard than previously and ask for a
date. The same principle is used for valuation layer.
Co-authored-by: svs-odoo <svs@odoo.com>
Task: 1880379
290 lines
15 KiB
XML
290 lines
15 KiB
XML
<?xml version="1.0" encoding="utf-8"?>
|
|
<odoo>
|
|
|
|
<record id="quant_search_view" model="ir.ui.view">
|
|
<field name="name">stock.quant.search</field>
|
|
<field name="model">stock.quant</field>
|
|
<field eval="10" name="priority"/>
|
|
<field name="arch" type="xml">
|
|
<search string="Quants">
|
|
<field name="product_id"/>
|
|
<field name="location_id"/>
|
|
<field name="package_id" groups="stock.group_tracking_lot"/>
|
|
<field name="lot_id" groups="stock.group_production_lot"/>
|
|
<field name="owner_id" groups="stock.group_tracking_owner"/>
|
|
<group expand='0' string='Filters'>
|
|
<filter name='internal_loc' string="Internal Locations" domain="[('location_id.usage','=', 'internal')]"/>
|
|
<filter name='transit_loc' string="Transit Locations" domain="[('location_id.usage' ,'=', 'transit')]"/>
|
|
<separator/>
|
|
<filter name="negative" string="Negative Stock" domain="[('quantity', '<', 0.0)]"/>
|
|
<filter name="positive" string="Positive Stock" domain="[('quantity', '>', 0.0)]"/>
|
|
<filter name="reserved" string="Reservations" domain="[('reserved_quantity', '>', 0.0)]"/>
|
|
</group>
|
|
<group expand='0' string='Group by...'>
|
|
<filter string='Product' name="productgroup" context="{'group_by': 'product_id'}"/>
|
|
<filter string='Location' name="locationgroup" domain="[]" context="{'group_by': 'location_id'}"/>
|
|
<filter string='Owner' name="owner" context="{'group_by': 'owner_id'}" groups="stock.group_tracking_owner"/>
|
|
<filter string='Lot/Serial Number' name="Lot_Serial_number" context="{'group_by': 'lot_id'}" groups="stock.group_production_lot"/>
|
|
<filter string='Package' name="package" domain="[]" context="{'group_by': 'package_id'}" groups="stock.group_tracking_lot"/>
|
|
<filter string='Company' name="company" domain="[]" context="{'group_by': 'company_id'}" groups="base.group_multi_company"/>
|
|
</group>
|
|
</search>
|
|
</field>
|
|
</record>
|
|
|
|
<record model="ir.ui.view" id="view_stock_quant_form">
|
|
<field name="name">stock.quant.form</field>
|
|
<field name="model">stock.quant</field>
|
|
<field eval="10" name="priority"/>
|
|
<field name="arch" type="xml">
|
|
<form string="Inventory Valuation" create="false" edit="false" delete="false">
|
|
<sheet>
|
|
<div class="oe_button_box" name="button_box">
|
|
<button class="oe_stat_button" icon="fa-exchange" type="object" name="action_view_stock_moves" string="Product Moves"/>
|
|
</div>
|
|
<group>
|
|
<group>
|
|
<field name="product_id"/>
|
|
<field name="location_id" options="{'no_create': True}"/>
|
|
<field name="lot_id" groups="stock.group_production_lot"/>
|
|
<field name="package_id" groups="stock.group_tracking_lot"/>
|
|
<field name="owner_id" groups="stock.group_tracking_owner"/>
|
|
</group>
|
|
<group>
|
|
<label for="quantity" string="Quantity On Hand"/>
|
|
<div class="o_row">
|
|
<field name="quantity"/>
|
|
<field name="product_uom_id" groups="uom.group_uom"/>
|
|
</div>
|
|
<label for="reserved_quantity" string="Quantity Reserved"/>
|
|
<div class="o_row">
|
|
<field name="reserved_quantity"/>
|
|
<field name="product_uom_id" groups="uom.group_uom"/>
|
|
</div>
|
|
<field name="in_date" attrs="{'invisible': [('lot_id', '=', False)]}" groups="stock.group_production_lot"/>
|
|
</group>
|
|
</group>
|
|
</sheet>
|
|
</form>
|
|
</field>
|
|
</record>
|
|
|
|
<record model="ir.ui.view" id="view_stock_quant_tree_editable">
|
|
<field name="name">stock.quant.tree.editable</field>
|
|
<field name="model">stock.quant</field>
|
|
<field eval="10" name="priority"/>
|
|
<field name="arch" type="xml">
|
|
<tree decoration-danger="inventory_quantity < 0" editable="top"
|
|
create="1" edit="1" js_class="singleton_list">
|
|
<field name="id" invisible="1"/>
|
|
<field name="tracking" invisible="1"/>
|
|
<field name="product_id" attrs="{'readonly': [('id', '!=', False)]}"
|
|
invisible="context.get('single_product', False)"
|
|
readonly="context.get('single_product', False)" force_save="1"
|
|
options="{'no_create': True}"/>
|
|
<field name="location_id" attrs="{'readonly': [('id', '!=', False)]}"
|
|
invisible="context.get('hide_location', False)"
|
|
options="{'no_create': True}"/>
|
|
<field name="lot_id" groups="stock.group_production_lot"
|
|
attrs="{
|
|
'readonly': ['|', ('id', '!=', False), ('tracking', 'not in', ['serial', 'lot'])],
|
|
'required': [('tracking', '!=', 'none')]
|
|
}"
|
|
invisible="context.get('hide_lot', False)"
|
|
context="{'default_product_id': product_id}"
|
|
domain="[('product_id', '=', product_id)]"/>
|
|
<field name="package_id" groups="stock.group_tracking_lot"
|
|
attrs="{'readonly': [('id', '!=', False)]}"/>
|
|
<field name="owner_id" groups="stock.group_tracking_owner"
|
|
attrs="{'readonly': [('id', '!=', False)]}"
|
|
options="{'no_create': True}"/>
|
|
<field name="reserved_quantity"/>
|
|
<field name="quantity" string="On Hand Quantity"
|
|
invisible="1"/>
|
|
<field name="inventory_quantity" string="On Hand Quantity"
|
|
readonly="0"/>
|
|
<field name="product_uom_id" groups="uom.group_uom"/>
|
|
<field name='company_id' groups="base.group_multi_company"/>
|
|
</tree>
|
|
</field>
|
|
</record>
|
|
|
|
<record model="ir.ui.view" id="view_stock_quant_tree">
|
|
<field name="name">stock.quant.tree</field>
|
|
<field name="model">stock.quant</field>
|
|
<field eval="10" name="priority"/>
|
|
<field name="arch" type="xml">
|
|
<tree string="Inventory Valuation" js_class="inventory_report_list"
|
|
create="0" delete="0" decoration-danger="quantity < 0">
|
|
<field name="product_id" invisible="context.get('single_product', False)"/>
|
|
<field name="location_id" invisible="context.get('hide_location', False)"/>
|
|
<field name="lot_id" groups="stock.group_production_lot"/>
|
|
<field name="package_id" groups="stock.group_tracking_lot"/>
|
|
<field name="owner_id" groups="stock.group_tracking_owner"/>
|
|
<field name="reserved_quantity" string="Reserved"/>
|
|
<field name="quantity"/>
|
|
<field name="product_uom_id" groups="uom.group_uom"/>
|
|
<field name='company_id' groups="base.group_multi_company"/>
|
|
</tree>
|
|
</field>
|
|
</record>
|
|
|
|
<record model="ir.ui.view" id="view_stock_quant_pivot">
|
|
<field name="name">stock.quant.pivot</field>
|
|
<field name="model">stock.quant</field>
|
|
<field name="arch" type="xml">
|
|
<pivot string="Inventory">
|
|
<field name="product_id" type="row"/>
|
|
<field name="location_id" type="col"/>
|
|
<field name="quantity" type="measure"/>
|
|
</pivot>
|
|
</field>
|
|
</record>
|
|
|
|
<record id="stock_quant_view_graph" model="ir.ui.view">
|
|
<field name="name">stock.quant.graph</field>
|
|
<field name="model">stock.quant</field>
|
|
<field name="arch" type="xml">
|
|
<graph string="Stock Quant">
|
|
<field name="location_id"/>
|
|
<field name="quantity" type="measure"/>
|
|
</graph>
|
|
</field>
|
|
</record>
|
|
|
|
<record model="ir.actions.server" id="action_view_quants"> <!-- Menu + python -->
|
|
<field name="name">Inventory</field>
|
|
<field name="model_id" ref="model_stock_quant"/>
|
|
<field name="state">code</field>
|
|
<field name="code">
|
|
action = model.with_context(
|
|
search_default_internal_loc=1,
|
|
search_default_productgroup=1,
|
|
search_default_locationgroup=1,
|
|
).action_view_quants()
|
|
</field>
|
|
</record>
|
|
|
|
<record model="ir.actions.act_window" id="product_template_open_quants"> <!-- Not used -->
|
|
<field name="name">Stock On Hand</field>
|
|
<field name="context">{'search_default_internal_loc': 1, 'search_default_productgroup':1, 'search_default_locationgroup':1}</field>
|
|
<field name="domain">[('product_id.product_tmpl_id', '=', active_id)]</field>
|
|
<field name="res_model">stock.quant</field>
|
|
</record>
|
|
<record model="ir.actions.act_window" id="location_open_quants"> <!-- Used in location -->
|
|
<field name="context">{'search_default_productgroup': 1}</field>
|
|
<field name="domain">[('location_id', 'child_of', active_ids)]</field>
|
|
<field name="name">Current Stock</field>
|
|
<field name="res_model">stock.quant</field>
|
|
</record>
|
|
|
|
<record id="quant_package_search_view" model="ir.ui.view">
|
|
<field name="name">stock.quant.package.search</field>
|
|
<field name="model">stock.quant.package</field>
|
|
<field eval="10" name="priority"/>
|
|
<field name="arch" type="xml">
|
|
<search string="Package">
|
|
<field name="name" string="Package Name"/>
|
|
<field name="location_id"/>
|
|
<field name="packaging_id"/>
|
|
<group expand='0' string='Group by...'>
|
|
<filter string='Location' name="location" domain="[]" context="{'group_by' : 'location_id'}"/>
|
|
<filter string='Packaging' name="packaging" domain="[]" context="{'group_by' : 'packaging_id'}"/>
|
|
<filter string='Company' name="company" domain="[]" context="{'group_by' : 'company_id'}" groups="base.group_multi_company"/>
|
|
</group>
|
|
</search>
|
|
</field>
|
|
</record>
|
|
|
|
<record model="ir.ui.view" id="view_quant_package_form">
|
|
<field name="name">stock.quant.package.form</field>
|
|
<field name="model">stock.quant.package</field>
|
|
<field eval="10" name="priority"/>
|
|
<field name="arch" type="xml">
|
|
<form string="Package">
|
|
<header>
|
|
<button name="unpack" string="Unpack" type="object"/>
|
|
</header>
|
|
<sheet>
|
|
<div class="oe_button_box" name="button_box">
|
|
<button class="oe_stat_button" name="action_view_picking"
|
|
string="Package Transfers" type="object"
|
|
widget="statinfo" icon="fa-arrows-v"/>
|
|
</div>
|
|
<div class="oe_title">
|
|
<label for="name" string="Package Reference" class="oe_edit_only"/>
|
|
<h1><field name="name" class="oe_inline"/></h1>
|
|
</div>
|
|
<group>
|
|
<group>
|
|
<field name='company_id' groups="base.group_multi_company"/>
|
|
<field name='owner_id' groups="stock.group_tracking_owner"/>
|
|
<field name="location_id" options="{'no_create': True}"/>
|
|
</group>
|
|
</group>
|
|
<separator string="Content"/>
|
|
<field name="quant_ids">
|
|
<tree>
|
|
<field name="product_id"/>
|
|
<field name="lot_id" groups="stock.group_production_lot"/>
|
|
<field name="quantity"/>
|
|
<field name="product_uom_id" groups="uom.group_uom"/>
|
|
</tree>
|
|
</field>
|
|
</sheet>
|
|
</form>
|
|
</field>
|
|
</record>
|
|
|
|
<record model="ir.ui.view" id="view_quant_package_tree">
|
|
<field name="name">stock.quant.package.tree</field>
|
|
<field name="model">stock.quant.package</field>
|
|
<field eval="10" name="priority"/>
|
|
<field name="arch" type="xml">
|
|
<tree string="Package">
|
|
<field name="display_name"/>
|
|
<field name="location_id" options="{'no_create': True}"/>
|
|
<field name="company_id" groups="base.group_multi_company"/>
|
|
</tree>
|
|
</field>
|
|
</record>
|
|
|
|
<record model="ir.ui.view" id="view_quant_package_kanban">
|
|
<field name="name">stock.quant.package.kanban</field>
|
|
<field name="model">stock.quant.package</field>
|
|
<field name="arch" type="xml">
|
|
<kanban>
|
|
<templates>
|
|
<field name="name"/>
|
|
<t t-name="kanban-box">
|
|
<div class="oe_kanban_global_click">
|
|
<div class="o_kanban_record_top mb0">
|
|
<strong class="o_kanban_record_title"><field name="name"/></strong>
|
|
</div>
|
|
</div>
|
|
</t>
|
|
</templates>
|
|
</kanban>
|
|
</field>
|
|
</record>
|
|
|
|
<record model="ir.actions.act_window" id="action_package_view">
|
|
<field name="context">{}</field>
|
|
<field name="name">Packages</field>
|
|
<field name="res_model">stock.quant.package</field>
|
|
<field name="view_mode">kanban,tree,form</field>
|
|
<field name="help" type="html">
|
|
<p class="o_view_nocontent_smiling_face">
|
|
Create a new package
|
|
</p><p>
|
|
Packages are usually created by pack operations made on transfers and can contains several different products. You can then reuse a package to move its whole content somewhere else, or to pack it into another bigger package. A package can also be unpacked, allowing the disposal of its former content as single units again.
|
|
</p>
|
|
</field>
|
|
</record>
|
|
|
|
<menuitem id="menu_package" name="Packages" parent="menu_stock_inventory_control" action="action_package_view" groups="stock.group_tracking_lot" sequence="102"/>
|
|
<menuitem id="menu_valuation" name="Inventory Report"
|
|
parent="stock.menu_warehouse_report" sequence="100"
|
|
action="action_view_quants"/>
|
|
</odoo>
|