质量模块和库存扫码
This commit is contained in:
35
stock_barcode/views/res_config_settings_views.xml
Normal file
35
stock_barcode/views/res_config_settings_views.xml
Normal file
@@ -0,0 +1,35 @@
|
||||
<?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.stock.barcode</field>
|
||||
<field name="model">res.config.settings</field>
|
||||
<field name="inherit_id" ref="stock.res_config_settings_view_form"/>
|
||||
<field name="arch" type="xml">
|
||||
<xpath expr="//div[@name='stock_barcode']" position="after">
|
||||
<field name="show_barcode_nomenclature" invisible="1"/>
|
||||
<div class="content-group row mt16" attrs="{'invisible': [('show_barcode_nomenclature', '=', False)]}">
|
||||
<label for="barcode_nomenclature_id" string="Barcode Nomenclature" class="col-lg-3 o_light_label"/>
|
||||
<field name="barcode_nomenclature_id" attrs="{'required': [('module_stock_barcode', '=', True)]}" options="{'no_open': 1}"/>
|
||||
</div>
|
||||
</xpath>
|
||||
<xpath expr="//div[@id='use_product_barcode']" position="replace">
|
||||
<div class="mt8" attrs="{'invisible': [('module_stock_barcode', '=', False)]}">
|
||||
<button class="btn-link" type="action" string="Configure Product Barcodes" name="%(stock_barcode.product_action_barcodes)d" icon="fa-arrow-right"/>
|
||||
</div>
|
||||
</xpath>
|
||||
<xpath expr="//div[@id='barcode_settings']" position="inside">
|
||||
<div>
|
||||
<a href="stock_barcode/print_inventory_commands" class="oe_link" target="_blank">
|
||||
<i class="fa fa-print"/> Print barcode commands
|
||||
</a>
|
||||
</div>
|
||||
<field name="stock_barcode_demo_active" invisible="1"/>
|
||||
<div attrs="{'invisible': [('stock_barcode_demo_active', '!=', True)]}">
|
||||
<a href="stock_barcode/static/img/barcodes_demo.pdf" class="oe_link" target="_blank">
|
||||
<i class="fa fa-print"/> Print barcode demo sheet
|
||||
</a>
|
||||
</div>
|
||||
</xpath>
|
||||
</field>
|
||||
</record>
|
||||
</odoo>
|
||||
142
stock_barcode/views/stock_barcode_views.xml
Normal file
142
stock_barcode/views/stock_barcode_views.xml
Normal file
@@ -0,0 +1,142 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<odoo>
|
||||
|
||||
<!-- Main menu -->
|
||||
|
||||
<record id="stock_barcode_action_main_menu" model="ir.actions.client">
|
||||
<field name="name">Barcode</field>
|
||||
<field name="tag">stock_barcode_main_menu</field>
|
||||
<field name="target">fullscreen</field>
|
||||
</record>
|
||||
|
||||
<menuitem
|
||||
id="stock_barcode_menu"
|
||||
action="stock_barcode_action_main_menu"
|
||||
web_icon="stock_barcode,static/description/icon.svg"
|
||||
sequence="155"
|
||||
groups="stock.group_stock_user" />
|
||||
|
||||
|
||||
<!-- Actions -->
|
||||
|
||||
<record id="stock_picking_action_form" model="ir.actions.act_window">
|
||||
<field name="name">Picking</field>
|
||||
<field name="res_model">stock.picking</field>
|
||||
<field name="view_mode">form</field>
|
||||
<field name="context">{
|
||||
'form_view_initial_mode': 'edit',
|
||||
'force_detailed_view': True,
|
||||
}</field>
|
||||
</record>
|
||||
|
||||
<record id="stock_picking_kanban" model="ir.ui.view">
|
||||
<field name="name">stock.barcode.picking.kanban</field>
|
||||
<field name="model">stock.picking</field>
|
||||
<field name="inherit_id" ref="stock.stock_picking_kanban"/>
|
||||
<field name="mode">primary</field>
|
||||
<!--High priority to not be the standard view of pickings in inventory app-->
|
||||
<field name="priority">100</field>
|
||||
<field name="arch" type="xml">
|
||||
<xpath expr="//kanban[hasclass('o_kanban_mobile')]" position="attributes">
|
||||
<attribute name="js_class">stock_barcode_list_kanban</attribute>
|
||||
<attribute name="import">false</attribute>
|
||||
</xpath>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="stock_picking_action_kanban" model="ir.actions.act_window">
|
||||
<field name="name">Operations</field>
|
||||
<field name="res_model">stock.picking</field>
|
||||
<field name="view_mode">kanban,form</field>
|
||||
<field name="view_id" ref="stock_barcode.stock_picking_kanban"/>
|
||||
<field name="context">{
|
||||
'form_view_initial_mode': 'edit',
|
||||
'contact_display': 'partner_address',
|
||||
'search_default_available': 1,
|
||||
'search_default_to_do_transfers': 1,
|
||||
'force_detailed_view': True
|
||||
}</field>
|
||||
<field name="help" type="html">
|
||||
<p class="o_view_nocontent_smiling_face">
|
||||
Create a new transfer
|
||||
</p><p>
|
||||
Transfers allow you to move products from one location to another.
|
||||
</p>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<!-- Kanban view to access operations by operation type -->
|
||||
|
||||
<record id="stock_picking_type_kanban" model="ir.ui.view">
|
||||
<field name="name">stock.picking.type.kanban</field>
|
||||
<field name="model">stock.picking.type</field>
|
||||
<field name="mode">primary</field>
|
||||
<field name="priority">20</field>
|
||||
<field name="arch" type="xml">
|
||||
<kanban class="o_kanban_mobile oe_background_grey o_emphasize_colors" create="0" sample="1" action="get_action_picking_tree_ready_kanban" type="object">
|
||||
<field name="display_name"/>
|
||||
<field name="color"/>
|
||||
<field name="count_picking_ready"/>
|
||||
<field name="code"/>
|
||||
<templates>
|
||||
<t t-name="kanban-box">
|
||||
<div t-if="['incoming', 'outgoing', 'internal'].indexOf(record.code.raw_value) > -1" t-attf-class="oe_kanban_card #{!selection_mode ? kanban_color(record.color.raw_value) : ''} oe_kanban_global_click">
|
||||
<span class="oe_kanban_color_help" t-attf-title="In #{kanban_getcolorname(record.color.raw_value)}" role="img" t-attf-aria-label="In #{kanban_getcolorname(record.color.raw_value)}"/>
|
||||
<div class="o_kanban_card_header">
|
||||
<div class="o_primary o_kanban_record_title">
|
||||
<field name="name"/>
|
||||
</div>
|
||||
<div class="o_secondary">
|
||||
<field name="warehouse_id" readonly="1" groups="stock.group_stock_multi_warehouses"/>
|
||||
</div>
|
||||
</div>
|
||||
<div class="container o_kanban_card_content o_kanban_button">
|
||||
<div class="row text-muted">
|
||||
<button class="btn btn-primary" name="get_action_picking_tree_ready_kanban" type="object">
|
||||
<t t-esc="record.count_picking_ready.value"/> To Process
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</t>
|
||||
</templates>
|
||||
</kanban>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="stock_picking_type_action_kanban" model="ir.actions.act_window">
|
||||
<field name="name">Operations</field>
|
||||
<field name="res_model">stock.picking.type</field>
|
||||
<field name="view_mode">kanban,form</field>
|
||||
<field name="domain">[('code', 'in', ('incoming', 'outgoing', 'internal'))]</field>
|
||||
<field name="view_id" ref="stock_picking_type_kanban"/>
|
||||
<field name="context">{
|
||||
'form_view_initial_mode': 'edit',
|
||||
'force_detailed_view': True,
|
||||
}</field>
|
||||
</record>
|
||||
|
||||
|
||||
<!-- Editable list to set product barcodes -->
|
||||
|
||||
<record id="product_view_list_barcodes" model="ir.ui.view">
|
||||
<field name="name">product.list.barcodes</field>
|
||||
<field name="model">product.product</field>
|
||||
<field name="arch" type="xml">
|
||||
<tree string="Product Barcodes" editable="top" create="false" delete="false">
|
||||
<field name="name" readonly="1"/>
|
||||
<field name="code" readonly="1"/>
|
||||
<field name="barcode"/>
|
||||
<field name="company_id" groups="base.group_multi_company" readonly="1"/>
|
||||
</tree>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="product_action_barcodes" model="ir.actions.act_window">
|
||||
<field name="name">Product Barcodes</field>
|
||||
<field name="res_model">product.product</field>
|
||||
<field name="view_mode">tree</field>
|
||||
<field name="view_id" ref="product_view_list_barcodes"/>
|
||||
</record>
|
||||
|
||||
</odoo>
|
||||
87
stock_barcode/views/stock_inventory_views.xml
Normal file
87
stock_barcode/views/stock_inventory_views.xml
Normal file
@@ -0,0 +1,87 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<odoo><data>
|
||||
<record id="stock_quant_barcode" model="ir.ui.view">
|
||||
<field name="name">stock.quant.barcode</field>
|
||||
<field name="model">stock.quant</field>
|
||||
<field name="priority">1000</field>
|
||||
<field name="arch" type="xml">
|
||||
<form class="o_barcode_line_form flex-column">
|
||||
<div class="row mt-4 mb-4">
|
||||
<field name="product_uom_id" invisible="1"/>
|
||||
<!-- .test_inventory_adjustment -->
|
||||
<field name="location_id" invisible="1"/>
|
||||
<div class="col-12 my-2 d-flex align-items-baseline">
|
||||
<i class="fa fa-fw fa-lg fa-tags me-3" title="Product"/>
|
||||
<field name="product_id" placeholder="Product"
|
||||
attrs="{'readonly': [('id', '!=', False)]}"
|
||||
context="{'default_detailed_type': 'product'}"
|
||||
domain="[('type', 'in', ['product'])]"
|
||||
required="1"/>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col-6 my-2 d-flex align-items-baseline">
|
||||
<i class="fa fa-fw fa-lg fa-cube me-3" title="Counted Quantity"/>
|
||||
<field name="inventory_quantity" class="w-50 w-md-100 text-end" options="{'type': 'number'}" placeholder="Counted Quantity"/>
|
||||
<field name="quantity" widget="set_reserved_qty_button" field_to_set="inventory_quantity"/>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row justify-content-center justify-content-md-start">
|
||||
<div class="col-10 col-md-8 my-2 ms-md-5 align-items-baseline"
|
||||
attrs="{'invisible': [('tracking', '=', 'serial')]}">
|
||||
<widget name="digipad" quantity_field="inventory_quantity"/>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row" groups="stock.group_stock_multi_locations">
|
||||
<div class="col-12 col-md-6 my-2 d-flex align-items-baseline">
|
||||
<i class="fa fa-fw fa-lg fa-map-marker me-3" title="Location"/>
|
||||
<field name="location_id" placeholder="Location"
|
||||
options="{'no_create': True}" force_save="1"
|
||||
attrs="{'readonly': [('id', '!=', False)]}"/>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row" groups="stock.group_production_lot"
|
||||
attrs="{'invisible': ['&', ('id', '!=', False), ('lot_id', '=', False)]}">
|
||||
<div class="col-12 col-md-6 my-2 d-flex align-items-baseline" attrs="{'invisible': ['|',('tracking', '=','none'), ('product_id','=', False)]}">
|
||||
<i class="fa fa-fw fa-lg fa-barcode me-3" title="Serial/Lot Number"/>
|
||||
<field name="lot_id"
|
||||
attrs="{
|
||||
'required': [('tracking', '!=', 'none')],
|
||||
'readonly': [('id', '!=', False)]}"
|
||||
context="{'default_company_id': company_id, 'default_product_id': product_id}"
|
||||
placeholder="Serial/Lot Number"/>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row" groups="stock.group_tracking_lot"
|
||||
attrs="{'invisible': ['&', ('id', '!=', False), ('package_id', '=', False)]}">
|
||||
<div class="col-12 col-md-6 my-2 d-flex align-items-baseline">
|
||||
<i class="fa fa-fw fa-lg fa-archive me-3" title="Package"/>
|
||||
<field name="package_id" placeholder="Package"
|
||||
attrs="{'readonly': [('id', '!=', False)]}"
|
||||
domain="[('location_id', '=', location_id)]"/>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row" groups="stock.group_tracking_owner">
|
||||
<div class="col-12 col-md-6 my-2 d-flex align-items-baseline">
|
||||
<i class="fa fa-fw fa-lg fa-user-o me-3" title="Owner"/>
|
||||
<field name="owner_id" placeholder="Owner" attrs="{'readonly': [('id', '!=', False)]}"/>
|
||||
</div>
|
||||
</div>
|
||||
<div class="fixed-bottom">
|
||||
<div class="o_barcode_control d-flex">
|
||||
<button string="Discard" class="btn btn-secondary o_discard" special="cancel"/>
|
||||
<button string="Confirm" class="btn btn-primary o_save" special="save"/>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<group>
|
||||
<field name="id" invisible="1"/>
|
||||
<field name="company_id" invisible="1"/>
|
||||
<field name="tracking" invisible="1"/>
|
||||
<field name="user_id" invisible="1"/>
|
||||
<field name="inventory_date" invisible="1"/>
|
||||
</group>
|
||||
</form>
|
||||
</field>
|
||||
</record>
|
||||
</data></odoo>
|
||||
13
stock_barcode/views/stock_location_views.xml
Normal file
13
stock_barcode/views/stock_location_views.xml
Normal file
@@ -0,0 +1,13 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<odoo>
|
||||
<record id="view_location_form_inherit" model="ir.ui.view">
|
||||
<field name="name">stock.location.form.inherit</field>
|
||||
<field name="model">stock.location</field>
|
||||
<field name="inherit_id" ref="stock.view_location_form"/>
|
||||
<field name="arch" type="xml">
|
||||
<xpath expr="//field[@name='return_location']" position="after">
|
||||
<field name="barcode"/>
|
||||
</xpath>
|
||||
</field>
|
||||
</record>
|
||||
</odoo>
|
||||
201
stock_barcode/views/stock_move_line_views.xml
Normal file
201
stock_barcode/views/stock_move_line_views.xml
Normal file
@@ -0,0 +1,201 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<odoo>
|
||||
|
||||
<record id="stock_move_line_product_selector" model="ir.ui.view">
|
||||
<field name="name">stock.product.selector</field>
|
||||
<field name="model">stock.move.line</field>
|
||||
<field name="priority">1000</field>
|
||||
<field name="arch" type="xml">
|
||||
<form string="Select a Product" class="o_barcode_line_form flex-column">
|
||||
<div class="row mt-4 mb-4">
|
||||
<field name="company_id" force_save="1" invisible="1"/>
|
||||
<field name="reserved_uom_qty" invisible="1" />
|
||||
<field name="move_id" invisible="1" />
|
||||
<field name="state" invisible="1" />
|
||||
<field name="tracking" invisible="1" />
|
||||
<field name="product_uom_category_id" invisible="1" />
|
||||
<field name="picking_code" invisible="1"/>
|
||||
<field name="picking_id" invisible="1"/>
|
||||
<field name="location_id" invisible="1"/>
|
||||
<field name="location_dest_id" invisible="1"/>
|
||||
<div class="col-12 d-flex align-items-baseline">
|
||||
<i class="fa fa-fw fa-lg fa-tags me-3" title="Product"/>
|
||||
<field name="product_id" placeholder="Product"
|
||||
context="{'default_detailed_type': 'product'}"
|
||||
attrs="{'readonly': ['|', ('state', '=', 'done'), ('move_id', '!=', False)]}"
|
||||
domain="[('type', 'in', ['product', 'consu']), '|', ('company_id', '=', False), ('company_id', '=', company_id)]"
|
||||
required="1" nolabel="1"/>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col-12 my-2 d-flex align-items-baseline">
|
||||
<i class="fa fa-fw fa-lg fa-cube me-3" title="Quantity"/>
|
||||
<field name="is_completed" invisible="1"/>
|
||||
<field name="qty_done" class="w-100 w-md-50 text-end o_qty_done_field_completed" attrs="{'invisible': [('is_completed', '=', False)]}" options="{'type': 'number'}" placeholder="Quantity"/>
|
||||
<field name="qty_done" class="w-100 w-md-50 text-end o_qty_done_field_not_completed" attrs="{'invisible':[('is_completed', '!=', False)]}" options="{'type': 'number'}" placeholder="Quantity"/>
|
||||
<field name="reserved_uom_qty" widget="set_reserved_qty_button" field_to_set="qty_done" attrs="{'invisible': [('reserved_uom_qty', '=', 0)]}"/>
|
||||
</div>
|
||||
<div class="col-6 my-2 d-flex align-items-baseline" groups="uom.group_uom"
|
||||
attrs="{'invisible': [('reserved_uom_qty', '!=', 0)]}">
|
||||
<i class="fa me-3" attrs="{'invisible': [('reserved_uom_qty', '!=', 0.0)]}"/>
|
||||
<field name="product_uom_id" placeholder="Unit of Measure"
|
||||
options="{'no_open': True}"
|
||||
attrs="{'readonly': [('reserved_uom_qty', '!=', 0.0)]}"/>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row justify-content-center justify-content-md-start">
|
||||
<div class="col-12 col-sm-10 col-md-8 my-2 ms-md-5 align-items-baseline"
|
||||
attrs="{'invisible': [('tracking', '=', 'serial')]}">
|
||||
<widget name="digipad" quantity_field="qty_done"/>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row" groups="stock.group_stock_multi_locations">
|
||||
<div class="col-12 col-md-6 my-2 d-flex align-items-baseline"
|
||||
attrs="{'invisible': [('picking_code', '=', 'incoming')]}">
|
||||
<i class="fa fa-fw fa-lg fa-map-marker text-center me-3" title="Source Location"/>
|
||||
<field name="location_id" placeholder="Source Location"
|
||||
domain="[('id', 'child_of', picking_location_id)]"
|
||||
options="{'no_create': True}"/>
|
||||
</div>
|
||||
<div class="col-12 col-md-6 my-2 d-flex align-items-baseline" attrs="{'invisible': [('picking_code', '=', 'outgoing')]}">
|
||||
<i class="fa fa-fw fa-lg fa-long-arrow-right me-3" title="Destination Location"/>
|
||||
<field name="location_dest_id" placeholder="Source Location"
|
||||
domain="[('id', 'child_of', picking_location_dest_id)]"
|
||||
options="{'no_create': True}"/>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row" groups="stock.group_tracking_lot">
|
||||
<div class="col-12 col-md-6 my-2 d-flex align-items-baseline">
|
||||
<i class="fa fa-fw fa-lg fa-archive me-3" title="Source Package"/>
|
||||
<field name="package_id" placeholder="Source Package"/>
|
||||
</div>
|
||||
<div class="col-12 col-md-6 my-2 d-flex align-items-baseline">
|
||||
<i class="fa fa-fw fa-lg fa-long-arrow-right me-3" title="Destination Package"/>
|
||||
<field name="result_package_id" placeholder="Destination Package"
|
||||
context="{'picking_id': picking_id}"/>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row" groups="stock.group_tracking_owner">
|
||||
<div class="col-12 col-md-6 my-2 d-flex align-items-baseline">
|
||||
<i class="fa fa-fw fa-lg fa-user-o text-center me-3" title="Owner"/>
|
||||
<field name="owner_id" placeholder="Owner"/>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<field name="tracking" invisible="1"/>
|
||||
<field name="picking_id" invisible="1"/>
|
||||
<field name="picking_type_use_create_lots" invisible="1"/>
|
||||
<field name="picking_type_use_existing_lots" invisible="1"/>
|
||||
<field name="picking_location_id" invisible="1"/>
|
||||
<field name="picking_location_dest_id" invisible="1"/>
|
||||
<div class="row" groups="stock.group_production_lot">
|
||||
<div class="col-12 col-md-6 my-2 d-flex align-items-baseline">
|
||||
<i class="fa fa-fw fa-lg fa-barcode me-3" title="Serial/Lot Number" attrs="{'invisible': [('tracking', 'not in', ['serial', 'lot'])]}"/>
|
||||
<field name="lot_name" placeholder="Serial/Lot Number"
|
||||
attrs="{'invisible': ['|', '|', ('tracking', '=', 'none'), ('picking_type_use_create_lots', '=', False), ('picking_type_use_existing_lots', '=', True)]}"
|
||||
/>
|
||||
<field name="lot_id" placeholder="Serial/Lot Number" options="{'no_open': True}"
|
||||
context="{'default_product_id': product_id, 'default_company_id': company_id}"
|
||||
attrs="{'invisible': ['|', ('tracking', '=', 'none'), ('picking_type_use_existing_lots', '=', False)]}"
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row row-long">
|
||||
<div class="col-12 my-2 d-flex">
|
||||
<i class="fa fa-fw fa-lg fa-cubes me-3" title="Locations"/>
|
||||
<field name="product_stock_quant_ids" context="{'kanban_view_ref': 'stock_barcode.stock_quant_barcode_kanban_2', 'tree_view_ref': 'stock_barcode.view_stock_quant_tree'}"/>
|
||||
</div>
|
||||
</div>
|
||||
<div class="fixed-bottom">
|
||||
<div class="o_barcode_control d-flex">
|
||||
<button string="Discard" class="btn btn-secondary o_discard" special="cancel"/>
|
||||
<button string="Confirm" class="btn btn-primary o_save" special="save"/>
|
||||
</div>
|
||||
<div class="o_barcode_control d-flex" attrs="{'invisible': [('reserved_uom_qty', '!=', 0)]}">
|
||||
<button string="Delete" class="btn btn-danger text-uppercase o_delete"
|
||||
name="unlink" type="object">
|
||||
<i class="fa fa-trash-o"/> Delete
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="stock_quant_barcode_kanban" model="ir.ui.view">
|
||||
<field name="name">stock.barcode.quant.kanban</field>
|
||||
<field name="model">stock.quant</field>
|
||||
<field name="priority">1000</field>
|
||||
<field name="arch" type="xml">
|
||||
<kanban draggable="0">
|
||||
<field name="product_id"/>
|
||||
<field name="quantity"/>
|
||||
<templates>
|
||||
<t t-name="kanban-box">
|
||||
<div>
|
||||
<strong><field name="product_id"/></strong>
|
||||
<div class="row">
|
||||
<div class="col-6">
|
||||
<field name="lot_id" groups="stock.group_production_lot"/>
|
||||
<field name="quantity" string="Quantity Done"/>
|
||||
<field name="product_uom_id" string="Unit of Measure" groups="uom.group_uom"/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</t>
|
||||
</templates>
|
||||
</kanban>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="stock_quant_barcode_kanban_2" model="ir.ui.view">
|
||||
<field name="name">stock.quant.kanban.barcode</field>
|
||||
<field name="model">stock.quant</field>
|
||||
<field name="priority">1000</field>
|
||||
<field name="arch" type="xml">
|
||||
<kanban class="o_kanban_mobile">
|
||||
<templates>
|
||||
<t t-name="kanban-box">
|
||||
<div t-attf-class="oe_kanban_global_click">
|
||||
<div class="mb4">
|
||||
<strong><field name="location_id"/></strong>
|
||||
</div>
|
||||
<div class="mb4">
|
||||
<field name="quantity"/> <field name="product_uom_id" groups="uom.group_uom"/>
|
||||
<span class="ms-4" attrs="{'invisible': [('lot_id', '=', False)]}" groups="stock.group_production_lot">
|
||||
<field name="lot_id"/>
|
||||
</span>
|
||||
</div>
|
||||
<div class="mb4" attrs="{'invisible': [('package_id', '=', False)]}" groups="stock.group_tracking_lot">
|
||||
<i class="fa fa-lg fa-archive" title="Package"/><field name="package_id"/>
|
||||
</div>
|
||||
<div class="mb4" attrs="{'invisible': [('owner_id', '=', False)]}" groups="stock.group_tracking_owner">
|
||||
<i class="fa fa-lg fa-user-o" title="Owner"/><field name="owner_id"/>
|
||||
</div>
|
||||
</div>
|
||||
</t>
|
||||
</templates>
|
||||
</kanban>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="view_stock_quant_tree" model="ir.ui.view">
|
||||
<field name="name">stock_barcode.quant.tree.inherit</field>
|
||||
<field name="model">stock.quant</field>
|
||||
<field name="inherit_id" ref="stock.view_stock_quant_tree"/>
|
||||
<field name="mode">primary</field>
|
||||
<field name="arch" type="xml">
|
||||
<xpath expr="//field[@name='product_uom_id']" position="attributes" >
|
||||
<attribute name="string">UoM</attribute>
|
||||
<attribute name="optional">show</attribute>
|
||||
</xpath>
|
||||
<xpath expr="//field[@name='available_quantity']" position="attributes" >
|
||||
<attribute name="optional">hide</attribute>
|
||||
</xpath>
|
||||
<xpath expr="//field[@name='company_id']" position="attributes" >
|
||||
<attribute name="optional">hide</attribute>
|
||||
</xpath>
|
||||
</field>
|
||||
</record>
|
||||
</odoo>
|
||||
181
stock_barcode/views/stock_picking_views.xml
Normal file
181
stock_barcode/views/stock_picking_views.xml
Normal file
@@ -0,0 +1,181 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<odoo><data>
|
||||
<record id="view_stock_move_line_detailed_operation_tree_inherit_stock_barcode" model="ir.ui.view">
|
||||
<field name="name">stock.move.line.operations.tree.inherit</field>
|
||||
<field name="model">stock.move.line</field>
|
||||
<field name="inherit_id" ref="stock.view_stock_move_line_detailed_operation_tree"/>
|
||||
<field name="arch" type="xml">
|
||||
<xpath expr="//tree" position="inside">
|
||||
<field name="product_barcode" invisible="1"/>
|
||||
<field name="location_processed" invisible="1"/>
|
||||
</xpath>
|
||||
<xpath expr="//field[@name='qty_done']" position="attributes">
|
||||
<attribute name="options">{'barcode_events': True}</attribute>
|
||||
<attribute name="widget">field_float_scannable</attribute>
|
||||
</xpath>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="view_stock_move_line_kanban_inherited" model="ir.ui.view">
|
||||
<field name="name">stock.move.line.kanban.inherited</field>
|
||||
<field name="model">stock.move.line</field>
|
||||
<field name="inherit_id" ref="stock.view_stock_move_line_kanban"/>
|
||||
<field name="arch" type="xml">
|
||||
<xpath expr="//field[@name='qty_done']" position="after">
|
||||
<field name="product_barcode" invisible="1"/>
|
||||
<field name="location_processed" invisible="1"/>
|
||||
<field name="result_package_id" invisible="1"/>
|
||||
<field name="lots_visible" invisible="1"/>
|
||||
</xpath>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="stock_picking_barcode" model="ir.ui.view">
|
||||
<field name="name">stock.picking.form.view.barcode</field>
|
||||
<field name="model">stock.picking</field>
|
||||
<field name="priority">1000</field>
|
||||
<field name="arch" type="xml">
|
||||
<form string="Picking Details">
|
||||
<field name="show_allocation" invisible="1"/>
|
||||
<field name="company_id" invisible="1"/>
|
||||
<group>
|
||||
<button name="action_view_reception_report" string="Allocation" type="object"
|
||||
context="{'default_picking_ids': [id]}"
|
||||
class="btn btn-primary o_reception_report" icon="fa-list"
|
||||
attrs="{'invisible': [('show_allocation', '=', False)]}"
|
||||
groups="stock.group_reception_report"/>
|
||||
<field name="partner_id"/>
|
||||
<field name="scheduled_date" readonly="1" attrs="{'invisible': [('scheduled_date', '=', False)]}"/>
|
||||
<field name="origin" readonly="1" attrs="{'invisible': [('origin', '=', False)]}"/>
|
||||
<field name="state" readonly="1" attrs="{'invisible': [('state', '=', False)]}"/>
|
||||
<field name="priority" readonly="1" attrs="{'invisible': [('priority', '=', False)]}"/>
|
||||
<field name="owner_id" readonly="1" attrs="{'invisible': [('owner_id', '=', False)]}" groups="stock.group_tracking_owner"/>
|
||||
<field name="company_id" readonly="1" groups="base.group_multi_company"/>
|
||||
<field name="move_ids" readonly="1" attrs="{'invisible': [('move_ids', '=', False)]}">
|
||||
<kanban>
|
||||
<templates>
|
||||
<t t-name="kanban-box">
|
||||
<div class="oe_kanban_global_click">
|
||||
<div class="row">
|
||||
<div class="col-6 o_kanban_record_title">
|
||||
<field name="product_id"/>
|
||||
</div>
|
||||
<div class="col-6 text-end">
|
||||
<field name="product_uom_qty"/>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col-6">
|
||||
<field name="description_picking"/>
|
||||
</div>
|
||||
<div class="col-6 text-end">
|
||||
<field name="state"/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</t>
|
||||
</templates>
|
||||
</kanban>
|
||||
</field>
|
||||
<field name="note" readonly="1" attrs="{'invisible': [('note', '=', False)]}"/>
|
||||
</group>
|
||||
<div class="o_barcode_control d-flex fixed-bottom">
|
||||
<button string="Discard" class="btn btn-secondary o_discard" special="cancel"/>
|
||||
<button string="Confirm" class="btn btn-primary o_save" special="save"/>
|
||||
</div>
|
||||
</form>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="open_picking" model="ir.actions.act_window">
|
||||
<field name="name">Open picking form</field>
|
||||
<field name="res_model">stock.picking</field>
|
||||
<field name="view_mode">form</field>
|
||||
<field name="context">{
|
||||
'res_id': active_id,
|
||||
}
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="picking_view_kanban_inherit_barcode" model="ir.ui.view">
|
||||
<field name="name">stock.picking.view.kanban.barcode</field>
|
||||
<field name="model">stock.picking</field>
|
||||
<field name="inherit_id" ref="stock.stock_picking_kanban"/>
|
||||
<field name="arch" type="xml">
|
||||
|
||||
<!-- Use the form view -->
|
||||
<xpath expr="//div[hasclass('o_kanban_record_headings')]" position="after">
|
||||
<button style="padding: 0px 10px;" class="btn btn-link fa fa-desktop" title="Open picking" name="action_open_picking" type="object"/>
|
||||
</xpath>
|
||||
|
||||
<!-- Use mobile view-->
|
||||
<xpath expr="//strong[hasclass('o_kanban_record_title')]" position="replace">
|
||||
<button style="padding: 0px 0px;" class="btn btn-link o_kanban_record_title" name="action_open_picking_client_action"
|
||||
type="object">
|
||||
<span><t t-esc="record.name.value"/></span>
|
||||
</button>
|
||||
</xpath>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="view_picking_type_form_inherit_stock_barcode" model="ir.ui.view">
|
||||
<field name="name">Operation Types</field>
|
||||
<field name="model">stock.picking.type</field>
|
||||
<field name="inherit_id" ref="stock.view_picking_type_form"/>
|
||||
<field name="arch" type="xml">
|
||||
<xpath expr="//field[@name='warehouse_id']" position="after">
|
||||
<field name="barcode"/>
|
||||
</xpath>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="stock_barcode_view_picking_type_form" model="ir.ui.view">
|
||||
<field name="name">Operation Types</field>
|
||||
<field name="model">stock.picking.type</field>
|
||||
<field name="inherit_id" ref="stock.view_picking_type_form"/>
|
||||
<field name="arch" type="xml">
|
||||
<xpath expr="//sheet//group[@name='first']" position="before">
|
||||
<notebook>
|
||||
<page name="general" string="General">
|
||||
</page>
|
||||
<page name="barcode_app" string="Barcode App">
|
||||
<group name="restrict_scan_settings" string="Mandatory Scan">
|
||||
<field name="restrict_scan_source_location" string="Source Location"
|
||||
groups="stock.group_stock_multi_locations"
|
||||
attrs="{'invisible': [('code', '=', 'incoming')]}"/>
|
||||
<field name="restrict_scan_product" string="Product"/>
|
||||
<field name="restrict_scan_tracking_number" string="Lot/Serial"
|
||||
groups="stock.group_production_lot"/>
|
||||
<field name="restrict_put_in_pack"
|
||||
groups="stock.group_tracking_lot" string="Put in Pack"/>
|
||||
<field name="restrict_scan_dest_location" string="Destination Location"
|
||||
groups="stock.group_stock_multi_locations"
|
||||
attrs="{'invisible': [('code', '=', 'outgoing')]}"/>
|
||||
</group>
|
||||
<field name="show_barcode_validation" invisible="1"/>
|
||||
<group name="barcode_validation" string="Final Validation" attrs="{'invisible': [('show_barcode_validation', '=', False)]}">
|
||||
<!-- show_barcode_validation handles combined groups/invisible complexity -->
|
||||
<field name="barcode_validation_full"
|
||||
attrs="{'invisible': [('restrict_scan_product', '=', True)]}"/>
|
||||
<field name="barcode_validation_all_product_packed"
|
||||
groups="stock.group_tracking_lot"
|
||||
attrs="{'invisible': [('restrict_put_in_pack', '!=', 'optional')]}"/>
|
||||
<field name="barcode_validation_after_dest_location"
|
||||
groups="stock.group_stock_multi_locations"
|
||||
attrs="{'invisible': ['|',
|
||||
('code', '=', 'outgoing'),
|
||||
('restrict_scan_dest_location', '!=', 'optional'),
|
||||
]}"/>
|
||||
</group>
|
||||
</page>
|
||||
</notebook>
|
||||
</xpath>
|
||||
<xpath expr="//page[@name='general']" position="inside">
|
||||
<xpath expr="//sheet//group[@name='first']" position="move"/>
|
||||
</xpath>
|
||||
<xpath expr="//page[@name='general']" position="inside">
|
||||
<xpath expr="//sheet//group[@name='second']" position="move"/>
|
||||
</xpath>
|
||||
</field>
|
||||
</record>
|
||||
</data></odoo>
|
||||
29
stock_barcode/views/stock_scrap_views.xml
Normal file
29
stock_barcode/views/stock_scrap_views.xml
Normal file
@@ -0,0 +1,29 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<odoo>
|
||||
|
||||
<record id="stock_scrap_wizard_inherit_mrp_barcode" model="ir.ui.view">
|
||||
<field name="name">stock.scrap.form.inherit.barcode</field>
|
||||
<field name="model">stock.scrap</field>
|
||||
<field name="inherit_id" ref="stock.stock_scrap_form_view2"/>
|
||||
<field name="arch" type="xml">
|
||||
<form position="inside">
|
||||
<field name="_barcode_scanned" widget="barcode_handler"/>
|
||||
</form>
|
||||
<xpath expr="//button[@name='action_validate']" position="attributes">
|
||||
<attribute name="barcode_trigger">validate</attribute>
|
||||
</xpath>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="stock_scrap_inherit_mrp_barcode" model="ir.ui.view">
|
||||
<field name="name">stock.scrap.form.inherit.barcode</field>
|
||||
<field name="model">stock.scrap</field>
|
||||
<field name="inherit_id" ref="stock.stock_scrap_form_view"/>
|
||||
<field name="arch" type="xml">
|
||||
<form position="inside">
|
||||
<field name="_barcode_scanned" widget="barcode_handler"/>
|
||||
</form>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
</odoo>
|
||||
Reference in New Issue
Block a user