diff options
Diffstat (limited to 'addons/stock/views/stock_picking_views.xml')
| -rw-r--r-- | addons/stock/views/stock_picking_views.xml | 781 |
1 files changed, 781 insertions, 0 deletions
diff --git a/addons/stock/views/stock_picking_views.xml b/addons/stock/views/stock_picking_views.xml new file mode 100644 index 00000000..749b2d91 --- /dev/null +++ b/addons/stock/views/stock_picking_views.xml @@ -0,0 +1,781 @@ +<?xml version="1.0" encoding="utf-8"?> +<odoo> + <record id="view_pickingtype_filter" model="ir.ui.view"> + <field name="name">stock.picking.type.filter</field> + <field name="model">stock.picking.type</field> + <field name="arch" type="xml"> + <search string="Operation Type"> + <field name="name"/> + <field name="warehouse_id"/> + <filter string="Archived" name="inactive" domain="[('active','=',False)]"/> + <group expand="0" string="Group By"> + <filter string="Type of Operation" name="groupby_code" domain="[]" context="{'group_by': 'code'}"/> + <filter string="Warehouse" name="groupby_warehouse_id" domain="[]" context="{'group_by': 'warehouse_id'}"/> + </group> + </search> + </field> + </record> + <record model="ir.ui.view" id="view_picking_type_tree"> + <field name="name">Operation types</field> + <field name="model">stock.picking.type</field> + <field name="arch" type="xml"> + <tree string="Operation Types"> + <field name="sequence" widget="handle"/> + <field name="name"/> + <field name="active" invisible="1"/> + <field name="warehouse_id" groups="stock.group_stock_multi_warehouses"/> + <field name="sequence_id" groups="base.group_no_one"/> + <field name="company_id" groups="base.group_multi_company"/> + </tree> + </field> + </record> + <record model="ir.ui.view" id="view_picking_type_form"> + <field name="name">Operation Types</field> + <field name="model">stock.picking.type</field> + <field name="arch" type="xml"> + <form string="Operation Types"> + <sheet> + <widget name="web_ribbon" title="Archived" bg_color="bg-danger" attrs="{'invisible': [('active', '=', True)]}"/> + <group> + <group> + <field name="active" invisible="1"/> + <field name="name"/> + <field name="sequence_id" groups="base.group_no_one"/> + <field name="sequence_code"/> + <field name="warehouse_id" groups="stock.group_stock_multi_warehouses" force_save="1"/> + </group> + <group> + <field name="code"/> + <field name="company_id" groups="base.group_multi_company" options="{'no_create': True}"/> + <field attrs='{"invisible": [("code", "not in", ["incoming", "outgoing", "internal"])]}' name="return_picking_type_id"/> + <field name="show_operations"/> + <field name="show_reserved" attrs="{'invisible': [('code', '!=', 'incoming')]}"/> + </group> + </group> + <group> + <group attrs='{"invisible": [("code", "not in", ["incoming", "outgoing", "internal"])]}' string="Traceability" groups="stock.group_production_lot" name="stock_picking_type_lot"> + <field name="use_create_lots"/> + <field name="use_existing_lots"/> + </group> + <group attrs='{"invisible": [("code", "not in", ["incoming", "outgoing", "internal"])]}' string="Packages" groups="stock.group_tracking_lot"> + <field name="show_entire_packs"/> + </group> + <!-- As this group will be hidden without multi_loccation, you will not be able to create a + picking type with the code 'Internal', which make sense, but as the field 'code' on picking + types can't be partially hidden, you can still select the code internal in the form view --> + <group string="Locations" groups="stock.group_stock_multi_locations"> + <field name="default_location_src_id" options="{'no_create': True}" attrs="{'required': [('code', 'in', ('internal', 'outgoing'))]}"/> + <field name="default_location_dest_id" options="{'no_create': True}" attrs="{'required': [('code', 'in', ('internal', 'incoming'))]}"/> + </group> + </group> + </sheet> + </form> + </field> + </record> + + <record id="stock_picking_type_action" model="ir.actions.act_window"> + <field name="name">Inventory Overview</field> + <field name="res_model">stock.picking.type</field> + <field name="type">ir.actions.act_window</field> + <field name="view_mode">kanban,form</field> + <field name="help" type="html"> + <p class="o_view_nocontent_smiling_face"> + Create a new operation type + </p><p> + The operation type system allows you to assign each stock + operation a specific type which will alter its views accordingly. + On the operation type you could e.g. specify if packing is needed by default, + if it should show the customer. + </p> + </field> + </record> + + <record model="ir.ui.view" id="view_picking_type_list"> + <field name="name">stock.picking.type.list</field> + <field name="model">stock.picking.type</field> + <field name="arch" type="xml"> + <tree string="Operation Types"> + <field name="name"/> + <field name="sequence_id"/> + <field name="warehouse_id"/> + <field name="code"/> + <field name="return_picking_type_id"/> + <field name="company_id" groups="base.group_multi_company"/> + <field name="default_location_src_id" attrs="{'required': [('code', '=', 'internal')]}"/> + <field name="default_location_dest_id" attrs="{'required': [('code', 'in', ('internal', 'incoming'))]}"/> + </tree> + </field> + </record> + + <record id="action_picking_type_list" model="ir.actions.act_window"> + <field name="name">Operations Types</field> + <field name="res_model">stock.picking.type</field> + <field name="type">ir.actions.act_window</field> + <field name="view_mode">tree,form</field> + <field name="help" type="html"> + <p class="o_view_nocontent_smiling_face"> + No transfer found. Let's create one! + </p><p> + Transfers allow you to move products from one location to another. + </p> + </field> + + </record> + + <menuitem + action="stock_picking_type_action" + id="stock_picking_type_menu" + parent="menu_stock_root" sequence="0" + name="Overview"/> + + <menuitem id="menu_pickingtype" name="Operations Types" parent="stock.menu_warehouse_config" action="action_picking_type_list" sequence="4"/> + + <record model="ir.ui.view" id="stock_picking_calendar"> + <field name="name">stock.picking.calendar</field> + <field name="model">stock.picking</field> + <field name="priority" eval="2"/> + <field name="arch" type="xml"> + <calendar string="Calendar View" date_start="scheduled_date" color="partner_id" event_limit="5"> + <field name="partner_id" filters="1"/> + <field name="origin"/> + <field name="picking_type_id"/> + <field name="state"/> + </calendar> + </field> + </record> + + <record model="ir.ui.view" id="stock_picking_kanban"> + <field name="name">stock.picking.kanban</field> + <field name="model">stock.picking</field> + <field name="arch" type="xml"> + <kanban class="o_kanban_mobile" sample="1"> + <field name="name"/> + <field name="partner_id"/> + <field name="location_dest_id"/> + <field name="state"/> + <field name="scheduled_date"/> + <field name="activity_state"/> + <progressbar field="activity_state" colors='{"planned": "success", "today": "warning", "overdue": "danger"}'/> + <templates> + <t t-name="kanban-box"> + <div t-attf-class="oe_kanban_card oe_kanban_global_click"> + <div class="o_kanban_record_top mb8"> + <field name="priority" widget="priority"/> + <div class="o_kanban_record_headings ml-1"> + <strong class="o_kanban_record_title"><span><t t-esc="record.name.value"/></span></strong> + </div> + <strong> + <field name="state" widget="label_selection" options="{'classes': {'draft': 'default', 'cancel': 'default', 'none': 'danger', 'waiting': 'warning', 'confirmed': 'warning', 'partially_available': 'warning', 'done': 'success'}}"/> + </strong> + </div> + <div class="o_kanban_record_bottom"> + <div class="oe_kanban_bottom_left"> + <t t-esc="record.partner_id.value"/> + <field name="activity_ids" widget="kanban_activity"/> + <field name="json_popover" nolabel="1" widget="stock_rescheduling_popover" attrs="{'invisible': [('json_popover', '=', False)]}"/> + </div> + <div class="oe_kanban_bottom_right"> + <t t-esc="record.scheduled_date.value and record.scheduled_date.value.split(' ')[0] or False"/> + </div> + </div> + </div> + </t> + </templates> + </kanban> + </field> + </record> + + <record id="vpicktree" model="ir.ui.view"> + <field name="name">stock.picking.tree</field> + <field name="model">stock.picking</field> + <field name="arch" type="xml"> + <tree string="Picking list" multi_edit="1" sample="1"> + <header> + <button name="do_unreserve" type="object" string="Unreserve"/> + </header> + <field name="priority" optional="show" widget="priority" nolabel="1"/> + <field name="name" decoration-bf="1"/> + <field name="location_id" options="{'no_create': True}" string="From" groups="stock.group_stock_multi_locations" optional="show"/> + <field name="location_dest_id" options="{'no_create': True}" string="To" groups="stock.group_stock_multi_locations" optional="show"/> + <field name="partner_id" optional="show"/> + <field name="signature" string="Signed" optional="hide" groups="stock.group_stock_sign_delivery"/> + <field name="user_id" optional="hide" widget="many2one_avatar_user"/> + <field name="scheduled_date" optional="show" widget="remaining_days" attrs="{'invisible':[('state', 'in', ('done', 'cancel'))]}"/> + <field name="date_deadline" optional="hide" widget="remaining_days" attrs="{'invisible':[('state', 'in', ('done', 'cancel'))]}"/> + <field name="origin" optional="show"/> + <field name="group_id" invisible="1"/> + <field name="backorder_id" optional="hide"/> + <field name="picking_type_id" optional="hide"/> + <field name="company_id" groups="base.group_multi_company" optional="show"/> + <field name="state" optional="show" widget="badge" decoration-success="state == 'done'" decoration-info="state not in ('done', 'cancel')"/> + <field name="activity_exception_decoration" widget="activity_exception"/> + <field name="json_popover" nolabel="1" widget="stock_rescheduling_popover" attrs="{'invisible': [('json_popover', '=', False)]}"/> + </tree> + </field> + </record> + + <record id="view_picking_form" model="ir.ui.view"> + <field name="name">stock.picking.form</field> + <field name="model">stock.picking</field> + <field eval="12" name="priority"/> + <field name="arch" type="xml"> + <form string="Transfer"> + + <field name="is_locked" invisible="1"/> + <field name="show_mark_as_todo" invisible="1"/> + <field name="show_check_availability" invisible="1"/> + <field name="show_validate" invisible="1"/> + <field name="show_lots_text" invisible="1"/> + <field name="immediate_transfer" invisible="1"/> + <field name="picking_type_code" invisible="1"/> + <field name="hide_picking_type" invisible="1"/> + <field name="show_operations" invisible="1" readonly="1"/> + <field name="show_reserved" invisible="1" readonly="1"/> + <field name="move_line_exist" invisible="1"/> + <field name="has_packages" invisible="1"/> + <field name="picking_type_entire_packs" invisible="1"/> + <field name="use_create_lots" invisible="1"/> + + <header> + <button name="action_confirm" attrs="{'invisible': [('show_mark_as_todo', '=', False)]}" string="Mark as Todo" type="object" class="oe_highlight" groups="base.group_user"/> + <button name="action_assign" attrs="{'invisible': [('show_check_availability', '=', False)]}" string="Check Availability" type="object" class="oe_highlight" groups="base.group_user"/> + <button name="button_validate" attrs="{'invisible': ['|', ('state', 'in', ('waiting','confirmed')), ('show_validate', '=', False)]}" string="Validate" type="object" class="oe_highlight" groups="stock.group_stock_user"/> + <button name="button_validate" attrs="{'invisible': ['|', ('state', 'not in', ('waiting', 'confirmed')), ('show_validate', '=', False)]}" string="Validate" type="object" groups="stock.group_stock_user" class="o_btn_validate"/> + <widget name="signature" string="Sign" highlight="1" + attrs="{'invisible': ['|', '|', ('id', '=', False), ('picking_type_code', '!=', 'outgoing'), ('state', '!=', 'done')]}" + full_name="partner_id" groups="stock.group_stock_sign_delivery"/> + <widget name="signature" string="Sign" + attrs="{'invisible': ['|', '|', ('id', '=', False), ('picking_type_code', '!=', 'outgoing'), ('state', '=', 'done')]}" + full_name="partner_id" groups="stock.group_stock_sign_delivery"/> + <button name="do_print_picking" string="Print" groups="stock.group_stock_user" type="object" attrs="{'invisible': [('state', 'not in', ('assigned', 'partially_available'))]}"/> + <button name="%(action_report_delivery)d" string="Print" attrs="{'invisible': [('state', '!=', 'done')]}" type="action" groups="base.group_user"/> + <button name="%(act_stock_return_picking)d" string="Return" attrs="{'invisible': [('state', '!=', 'done')]}" type="action" groups="base.group_user"/> + <button name="do_unreserve" string="Unreserve" groups="base.group_user" type="object" attrs="{'invisible': ['|', '|', '|', ('picking_type_code', '=', 'incoming'), ('immediate_transfer', '=', True), '&', ('state', 'not in', ('assigned', 'partially_available')), ('move_type', '!=', 'one'), '&', ('state', 'not in', ('assigned', 'partially_available', 'confirmed')), ('move_type', '=', 'one')]}"/> + <button name="button_scrap" type="object" string="Scrap" attrs="{'invisible': ['|', '&', ('picking_type_code', '=', 'incoming'), ('state', '!=', 'done'), '&', ('picking_type_code', '=', 'outgoing'), ('state', '=', 'done')]}"/> + <button name="action_toggle_is_locked" attrs="{'invisible': ['|', ('state', 'in', ('draft','cancel')), ('is_locked', '=', False)]}" string="Unlock" groups="stock.group_stock_manager" type="object" help="If the picking is unlocked you can edit initial demand (for a draft picking) or done quantities (for a done picking)."/> + <button name="action_toggle_is_locked" attrs="{'invisible': [('is_locked', '=', True)]}" string="Lock" groups="stock.group_stock_manager" type="object"/> + <field name="state" widget="statusbar" statusbar_visible="draft,confirmed,assigned,done" /> + <button name="action_cancel" attrs="{'invisible': [('state', 'not in', ('assigned', 'confirmed', 'partially_available', 'draft', 'waiting'))]}" string="Cancel" groups="base.group_user" type="object"/> + </header> + <sheet> + <div class="oe_button_box" name="button_box"> + <field name="has_scrap_move" invisible="True"/> + <field name="has_tracking" invisible="True"/> + <button name="action_see_move_scrap" string="Scraps" type="object" + class="oe_stat_button" icon="fa-arrows-v" + attrs="{'invisible': [('has_scrap_move', '=', False)]}"/> + <button name="action_see_packages" string="Packages" type="object" + class="oe_stat_button" icon="fa-cubes" + attrs="{'invisible': [('has_packages', '=', False)]}"/> + <button name="%(action_stock_report)d" icon="fa-arrow-up" class="oe_stat_button" string="Traceability" type="action" attrs="{'invisible': ['|', ('state', '!=', 'done'), ('has_tracking', '=', False)]}" groups="stock.group_production_lot"/> + <!-- Use the following button to avoid onchange on one2many --> + <button name="action_picking_move_tree" + class="oe_stat_button" + icon="fa-arrows-v" + type="object" + help="List view of operations" + groups="base.group_no_one" + attrs="{'invisible': ['|', '&', ('show_operations', '=', True), '|', ('is_locked', '=', True), ('state', '=', 'done'), '&', ('state', '=', 'done'), ('is_locked', '=', True)]}" + context="{'picking_type_code': picking_type_code, 'default_picking_id': id, 'form_view_ref':'stock.view_move_form', 'address_in_id': partner_id, 'default_picking_type_id': picking_type_id, 'default_location_id': location_id, 'default_location_dest_id': location_dest_id}"> + <div class="o_form_field o_stat_info"> + <span class="o_stat_text">Operations</span> + </div> + </button> + </div> + <div class="oe_title"> + <h1> + <field name="priority" widget="priority" class="mr-3" attrs="{'invisible': [('name','=','/')]}"/> + <field name="name" attrs="{'invisible': [('name','=','/')]}"/> + </h1> + </div> + <group> + <group> + <div class="o_td_label"> + <label for="partner_id" string="Delivery Address" style="font-weight:bold;" + attrs="{'invisible': [('picking_type_code', '!=', 'outgoing')]}"/> + <label for="partner_id" string="Receive From" style="font-weight:bold;" + attrs="{'invisible': [('picking_type_code', '!=', 'incoming')]}"/> + <label for="partner_id" string="Contact" style="font-weight:bold;" + attrs="{'invisible': [('picking_type_code', 'in', ['incoming', 'outgoing'])]}"/> + </div> + <field name="partner_id" nolabel="1"/> + <field name="picking_type_id" attrs="{'invisible': [('hide_picking_type', '=', True)], 'readonly': [('state', '!=', 'draft')]}"/> + <field name="location_id" options="{'no_create': True}" groups="stock.group_stock_multi_locations" attrs="{'invisible': [('picking_type_code', '=', 'incoming')]}"/> + <field name="location_dest_id" options="{'no_create': True}" groups="stock.group_stock_multi_locations" attrs="{'invisible': [('picking_type_code', '=', 'outgoing')]}"/> + <field name="backorder_id" attrs="{'invisible': [('backorder_id','=',False)]}"/> + </group> + <group> + <label for="scheduled_date"/> + <div class="o_row"> + <field name="scheduled_date" attrs="{'required': [('id', '!=', False)]}" + decoration-warning="state not in ('done', 'cancel') and scheduled_date < now" + decoration-danger="state not in ('done', 'cancel') and scheduled_date < current_date" + decoration-bf="state not in ('done', 'cancel') and (scheduled_date < current_date or scheduled_date < now)"/> + <field name="json_popover" widget="stock_rescheduling_popover" attrs="{'invisible': [('json_popover', '=', False)]}"/> + </div> + <field name="date_deadline" + attrs="{'invisible': ['|', ('state', 'in', ('done', 'cancel')), ('date_deadline', '=', False)]}" + decoration-danger="date_deadline and date_deadline < current_date" + decoration-bf="date_deadline and date_deadline < current_date"/> + <field name="date_done" string="Effective Date" attrs="{'invisible': [('state', '!=', 'done')]}"/> + <field name="origin" placeholder="e.g. PO0032"/> + <field name="owner_id" groups="stock.group_tracking_owner" + attrs="{'invisible': [('picking_type_code', '!=', 'incoming')]}"/> + </group> + </group> + <notebook> + <!-- Reservation hidden --> + <page string="Detailed Operations" + name="detailed_operations_hidden" + attrs="{'invisible': ['|', ('show_operations', '=', False), ('show_reserved', '=', True)]}"> + <field name="move_line_nosuggest_ids" + attrs="{'readonly': ['|', '|', ('show_operations', '=', False), ('state', '=', 'cancel'), '&', ('state', '=', 'done'), ('is_locked', '=', True)]}" + context="{'tree_view_ref': 'stock.view_stock_move_line_detailed_operation_tree', 'default_picking_id': id, 'default_location_id': location_id, 'default_location_dest_id': location_dest_id, 'default_company_id': company_id}"/> + <field name="package_level_ids_details" + context="{'default_location_id': location_id, 'default_location_dest_id': location_dest_id, 'default_company_id': company_id}" + attrs="{'readonly': [('state', '=', 'done')], 'invisible': ['|', ('picking_type_entire_packs', '=', False), ('show_operations', '=', False)]}" /> + <button class="oe_highlight" name="action_put_in_pack" type="object" string="Put in Pack" attrs="{'invisible': [('state', 'in', ('draft', 'done', 'cancel'))]}" groups="stock.group_tracking_lot"/> + </page> + + <!-- Reservation displayed --> + <page string="Detailed Operations" + name="detailed_operations_shown" + attrs="{'invisible': ['|', ('show_operations', '=', False), ('show_reserved', '=', False)]}"> + <field name="move_line_ids_without_package" + attrs="{'readonly': ['|', '|', ('show_operations', '=', False), ('state', '=', 'cancel'), '&', ('state', '=', 'done'), ('is_locked', '=', True)]}" + context="{'tree_view_ref': 'stock.view_stock_move_line_detailed_operation_tree', 'default_picking_id': id, 'default_location_id': location_id, 'default_location_dest_id': location_dest_id, 'default_company_id': company_id}"/> + <field name="package_level_ids_details" context="{'default_location_id': location_id, 'default_location_dest_id': location_dest_id, 'default_company_id': company_id}" attrs="{'readonly': [('state', '=', 'done')], 'invisible': ['|', ('picking_type_entire_packs', '=', False), ('show_operations', '=', False)]}" /> + <button class="oe_highlight" name="action_put_in_pack" type="object" string="Put in Pack" attrs="{'invisible': [('state', 'in', ('draft', 'done', 'cancel'))]}" groups="stock.group_tracking_lot"/> + </page> + + <page string="Operations" name="operations"> + <field name="move_ids_without_package" mode="tree,kanban" + attrs="{'readonly': ['&', ('state', '=', 'done'), ('is_locked', '=', True)]}" + context="{'default_company_id': company_id, 'default_date': scheduled_date, 'default_date_deadline': date_deadline, 'picking_type_code': picking_type_code, 'default_picking_id': id, 'form_view_ref':'stock.view_move_form', 'address_in_id': partner_id, 'default_picking_type_id': picking_type_id, 'default_location_id': location_id, 'default_location_dest_id': location_dest_id}"> + <tree decoration-danger="not parent.immediate_transfer and state != 'done' and quantity_done > reserved_availability and show_reserved_availability" decoration-muted="scrapped == True or state == 'cancel' or (state == 'done' and is_locked == True)" string="Stock Moves" editable="bottom"> + <field name="company_id" invisible="1"/> + <field name="name" invisible="1"/> + <field name="state" invisible="1" readonly="0"/> + <field name="picking_type_id" invisible="1"/> + <field name="location_id" invisible="1"/> + <field name="location_dest_id" invisible="1"/> + <field name="scrapped" invisible="1"/> + <field name="picking_code" invisible="1"/> + <field name="product_type" invisible="1"/> + <field name="show_details_visible" invisible="1"/> + <field name="show_reserved_availability" invisible="1"/> + <field name="show_operations" invisible="1" readonly="1"/> + <field name="additional" invisible="1"/> + <field name="has_move_lines" invisible="1"/> + <field name="is_locked" invisible="1"/> + <field name="product_uom_category_id" invisible="1"/> + <field name="has_tracking" invisible="1"/> + <field name="display_assign_serial" invisible="1"/> + <field name="product_id" required="1" context="{'default_type': 'product'}" attrs="{'readonly': ['|', '&', ('state', '!=', 'draft'), ('additional', '=', False), ('has_move_lines', '=', True)]}"/> + <field name="description_picking" string="Description" optional="hide"/> + <field name="date" invisible="1"/> + <field name="date_deadline" optional="hide"/> + <field name="is_initial_demand_editable" invisible="1"/> + <field name="is_quantity_done_editable" invisible="1"/> + <field name="product_uom_qty" string="Demand" attrs="{'column_invisible': [('parent.immediate_transfer', '=', True)], 'readonly': ['|', ('is_initial_demand_editable', '=', False), '&', '&', ('show_operations', '=', True), ('is_locked', '=', True), ('is_initial_demand_editable', '=', False)]}"/> + <field name="reserved_availability" string="Reserved" attrs="{'column_invisible': (['|','|', ('parent.state','=', 'done'), ('parent.picking_type_code', 'in', ['incoming', 'outgoing']), ('parent.immediate_transfer', '=', True)])}"/> + <field name="product_qty" invisible="1" readonly="1"/> + <field name="forecast_expected_date" invisible="1" /> + <field name="forecast_availability" string="Reserved" attrs="{'column_invisible': ['|', ('parent.picking_type_code', '!=', 'outgoing'), ('parent.state','=', 'done')]}" widget="forecast_widget"/> + <field name="quantity_done" string="Done" attrs="{'readonly': [('is_quantity_done_editable', '=', False)]}"/> + <field name="product_uom" attrs="{'readonly': [('state', '!=', 'draft'), ('additional', '=', False)]}" options="{'no_open': True, 'no_create': True}" string="Unit of Measure" groups="uom.group_uom"/> + <field name="lot_ids" widget="many2many_tags" + groups="stock.group_production_lot" + attrs="{'invisible': ['|', ('show_details_visible', '=', False), ('has_tracking', '!=', 'serial')]}" + optional="hide" + options="{'create': [('parent.use_create_lots', '=', True)]}" + context="{'default_company_id': company_id, 'default_product_id': product_id, 'active_picking_id': parent.id}" + domain="[('product_id','=',product_id)]" + /> + <button name="action_show_details" type="object" icon="fa-list" width="0.1" + attrs="{'invisible': [('show_details_visible', '=', False)]}" options='{"warn": true}'/> + <button name="action_assign_serial" type="object" + icon="fa-plus-square" + width="0.1" + role="img" title="Assign Serial Numbers" + attrs="{'invisible': ['|', ('display_assign_serial', '=', False), ('show_operations', '=', False)]}"/> + </tree> + <form string="Stock Moves"> + <header> + <field name="state" widget="statusbar"/> + </header> + <group> + <field name="product_uom_category_id" invisible="1"/> + <field name="additional" invisible="1"/> + <field name="has_move_lines" invisible="1"/> + <field name="company_id" invisible="1"/> + <field name="product_id" required="1" attrs="{'readonly': ['|', '&', ('state', '!=', 'draft'), ('additional', '=', False), ('has_move_lines', '=', True)]}"/> + <field name="is_initial_demand_editable" invisible="1"/> + <field name="is_quantity_done_editable" invisible="1"/> + <field name="product_uom_qty" attrs="{'invisible': [('parent.immediate_transfer', '=', True)], 'readonly': [('is_initial_demand_editable', '=', False)]}"/> + <field name="reserved_availability" string="Reserved" attrs="{'invisible': (['|','|', ('parent.state','=', 'done'), ('parent.picking_type_code', 'in', ['outgoing', 'incoming']), ('parent.immediate_transfer', '=', True)])}"/> + <field name="product_qty" invisible="1" readonly="1"/> + <field name="forecast_expected_date" invisible="1"/> + <field name="forecast_availability" string="Reserved" attrs="{'invisible': ['|', ('parent.picking_type_code', '!=', 'outgoing'), ('parent.state','=', 'done')]}" widget="forecast_widget"/> + <field name="quantity_done" string="Done" attrs="{'readonly': [('is_quantity_done_editable', '=', False)]}"/> + <field name="product_uom" attrs="{'readonly': [('state', '!=', 'draft'), ('additional', '=', False)]}" options="{'no_open': True, 'no_create': True}" string="Unit of Measure" groups="uom.group_uom"/> + <field name="description_picking" string="Description"/> + </group> + </form> + </field> + <field name="id" invisible="1"/> + <field name="package_level_ids" context="{'default_location_id': location_id, 'default_location_dest_id': location_dest_id, 'default_company_id': company_id}" attrs="{'readonly': [('state', '=', 'done')], 'invisible': ['|', ('picking_type_entire_packs', '=', False), ('show_operations', '=', True)]}" /> + <button class="oe_highlight" name="action_put_in_pack" type="object" string="Put in Pack" attrs="{'invisible': [('state', 'in', ('draft', 'done', 'cancel'))]}" groups="stock.group_tracking_lot"/> + </page> + <page string="Additional Info" name="extra"> + <group> + <group string="Other Information" name="other_infos"> + <field name="picking_type_code" invisible="1"/> + <field name="move_type" attrs="{'invisible': [('picking_type_code', '=', 'incoming')]}"/> + <field name="user_id" domain="[('share', '=', False)]"/> + <field name="group_id" groups="base.group_no_one"/> + <field name="company_id" groups="base.group_multi_company" options="{'no_create': True}" force_save="1"/> + </group> + </group> + </page> + <page string="Note" name="note"> + <field name="note" string="Note" placeholder="Add an internal note that will be printed on the Picking Operations sheet"/> + </page> + </notebook> + </sheet> + <div class="oe_chatter"> + <field name="message_follower_ids"/> + <field name="activity_ids"/> + <field name="message_ids"/> + </div> + </form> + </field> + </record> + + <record id="view_picking_internal_search" model="ir.ui.view"> + <field name="name">stock.picking.internal.search</field> + <field name="model">stock.picking</field> + <field name="arch" type="xml"> + <search string="Picking Lists"> + <field name="name" string="Transfer" filter_domain="['|', ('name', 'ilike', self), ('origin', 'ilike', self)]"/> + <field name="partner_id" filter_domain="[('partner_id', 'child_of', self)]"/> + <field name="origin"/> + <field name="product_id"/> + <field name="picking_type_id"/> + <filter name="my_transfers" string="My Transfers" domain="[('user_id', '=', uid)]"/> + <filter string="Starred" name="starred" domain="[('priority', '=', '1')]"/> + <separator/> + <filter name="draft" string="Draft" domain="[('state', '=', 'draft')]" help="Draft Moves"/> + <filter name="waiting" string="Waiting" domain="[('state', 'in', ('confirmed', 'waiting'))]" help="Waiting Moves"/> + <filter name="available" string="Ready" domain="[('state', 'in', ('assigned', 'partially_available'))]" help="Assigned Moves"/> + <filter name="done" string="Done" domain="[('state', '=', 'done')]" help="Pickings already processed"/> + <filter name="cancel" string="Cancelled" domain="[('state', '=', 'cancel')]" help="Cancelled Moves"/> + <separator/> + <filter name="late" string="Late" help="Deadline exceed or/and by the scheduled" + domain="[('state', 'in', ('assigned', 'waiting', 'confirmed')), '|', '|', ('has_deadline_issue', '=', True), ('date_deadline', '<', current_date), ('scheduled_date', '<', current_date)]"/> + <filter string="Planning Issues" name="planning_issues" help="Transfers that are late on scheduled time or one of pickings will be late" + domain="['|', ('delay_alert_date', '!=', False), '&', ('scheduled_date','<', time.strftime('%%Y-%%m-%%d %%H:%%M:%%S')), ('state', 'in', ('assigned', 'waiting', 'confirmed'))]"/> + <separator/> + <filter name="backorder" string="Backorders" domain="[('backorder_id', '!=', False), ('state', 'in', ('assigned', 'waiting', 'confirmed'))]" help="Remaining parts of picking partially processed"/> + <separator/> + <filter invisible="1" string="Late Activities" name="activities_overdue" + domain="[('my_activity_date_deadline', '<', context_today().strftime('%Y-%m-%d'))]" + help="Show all records which has next action date is before today"/> + <filter invisible="1" string="Today Activities" name="activities_today" + domain="[('my_activity_date_deadline', '=', context_today().strftime('%Y-%m-%d'))]"/> + <filter invisible="1" string="Future Activities" name="activities_upcoming_all" + domain="[('my_activity_date_deadline', '>', context_today().strftime('%Y-%m-%d'))]"/> + <separator/> + <filter string="Warnings" name="activities_exception" + domain="[('activity_exception_decoration', '!=', False)]"/> + <group expand="0" string="Group By"> + <filter string="Status" name="status" domain="[]" context="{'group_by': 'state'}"/> + <filter string="Scheduled Date" name="expected_date" domain="[]" context="{'group_by': 'scheduled_date'}"/> + <filter string="Source Document" name="origin" domain="[]" context="{'group_by': 'origin'}"/> + <filter string="Operation Type" name="picking_type" domain="[]" context="{'group_by': 'picking_type_id'}"/> + </group> + </search> + </field> + </record> + + <record id="action_picking_tree_all" model="ir.actions.act_window"> + <field name="name">Transfers</field> + <field name="res_model">stock.picking</field> + <field name="type">ir.actions.act_window</field> + <field name="view_mode">tree,kanban,form,calendar</field> + <field name="domain"></field> + <field name="context">{'contact_display': 'partner_address', 'default_company_id': allowed_company_ids[0]}</field> + <field name="search_view_id" ref="view_picking_internal_search"/> + <field name="help" type="html"> + <p class="o_view_nocontent_smiling_face"> + No transfer found. Let's create one! + </p><p> + Transfers allow you to move products from one location to another. + </p> + </field> + </record> + + <record id="action_validate_picking" model="ir.actions.server"> + <field name="name">Validate</field> + <field name="model_id" ref="stock.model_stock_picking"/> + <field name="binding_model_id" ref="stock.model_stock_picking"/> + <field name="binding_view_types">list</field> + <field name="state">code</field> + <field name="code"> + if records: + res = records.button_validate() + if isinstance(res, dict): + action = res + </field> + </record> + + <record id="action_unreserve_picking" model="ir.actions.server"> + <field name="name">Unreserve</field> + <field name="model_id" ref="stock.model_stock_picking"/> + <field name="binding_model_id" ref="stock.model_stock_picking"/> + <field name="binding_view_types">list</field> + <field name="state">code</field> + <field name="code"> + if records: + records.do_unreserve() + </field> + </record> + + <menuitem id="all_picking" name="Transfers" parent="menu_stock_warehouse_mgmt" sequence="5" action="action_picking_tree_all" groups="stock.group_stock_manager,stock.group_stock_user"/> + + <record id="stock_picking_action_picking_type" model="ir.actions.act_window"> + <field name="name">All Transfers</field> + <field name="res_model">stock.picking</field> + <field name="type">ir.actions.act_window</field> + <field name="view_mode">tree,kanban,form,calendar</field> + <field name="domain"></field> + <field name="context">{'contact_display': 'partner_address'}</field> + <field name="search_view_id" ref="view_picking_internal_search"/> + <field name="help" type="html"> + <p class="o_view_nocontent_smiling_face"> + No transfer found. Let's create one! + </p><p> + Transfers allow you to move products from one location to another. + </p> + </field> + </record> + + <record id="action_picking_tree_ready" model="ir.actions.act_window"> + <field name="name">To Do</field> + <field name="res_model">stock.picking</field> + <field name="type">ir.actions.act_window</field> + <field name="view_mode">tree,kanban,form,calendar</field> + <field name="domain"></field> + <field name="context">{'contact_display': 'partner_address', 'search_default_available': 1}</field> + <field name="search_view_id" ref="view_picking_internal_search"/> + <field name="help" type="html"> + <p class="o_view_nocontent_smiling_face"> + No transfer found. Let's create one! + </p><p> + Transfers allow you to move products from one location to another. + </p> + </field> + </record> + + <record id="action_picking_tree_waiting" model="ir.actions.act_window"> + <field name="name">Waiting Transfers</field> + <field name="res_model">stock.picking</field> + <field name="type">ir.actions.act_window</field> + <field name="view_mode">tree,kanban,form,calendar</field> + <field name="domain"></field> + <field name="context">{'contact_display': 'partner_address', 'search_default_waiting': 1}</field> + <field name="search_view_id" ref="view_picking_internal_search"/> + <field name="help" type="html"> + <p class="o_view_nocontent_smiling_face"> + No transfer found. Let's create one! + </p><p> + Transfers allow you to move products from one location to another. + </p> + </field> + </record> + + <record id="action_picking_tree_late" model="ir.actions.act_window"> + <field name="name">Late Transfers</field> + <field name="res_model">stock.picking</field> + <field name="type">ir.actions.act_window</field> + <field name="view_mode">tree,kanban,form,calendar</field> + <field name="domain"></field> + <field name="context">{'contact_display': 'partner_address', 'search_default_planning_issues': 1}</field> + <field name="search_view_id" ref="view_picking_internal_search"/> + <field name="help" type="html"> + <p class="o_view_nocontent_smiling_face"> + No transfer found. Let's create one! + </p><p> + Transfers allow you to move products from one location to another. + </p> + </field> + </record> + + <record id="action_picking_tree_backorder" model="ir.actions.act_window"> + <field name="name">Backorders</field> + <field name="res_model">stock.picking</field> + <field name="type">ir.actions.act_window</field> + <field name="view_mode">tree,kanban,form,calendar</field> + <field name="domain"></field> + <field name="context">{'contact_display': 'partner_address', 'search_default_backorder': 1}</field> + <field name="search_view_id" ref="view_picking_internal_search"/> + <field name="help" type="html"> + <p class="o_view_nocontent_smiling_face"> + No transfer found. Let's create one! + </p> + <p> + Transfers allow you to move products from one location to another. + </p> + </field> + </record> + + <record id="action_picking_form" model="ir.actions.act_window"> + <field name="name">New Transfer</field> + <field name="res_model">stock.picking</field> + <field name="type">ir.actions.act_window</field> + <field name="view_mode">form</field> + <field name="domain"></field> + <field name="context">{ + 'search_default_picking_type_id': [active_id], + 'default_picking_type_id': active_id, + 'contact_display': 'partner_address', + } + </field> + <field name="search_view_id" ref="view_picking_internal_search"/> + <field name="help" type="html"> + <p class="o_view_nocontent_smiling_face"> + No transfer found. Let's create one! + </p> + <p> + Transfers allow you to move products from one location to another. + </p> + </field> + </record> + <record id="do_view_pickings" model="ir.actions.act_window"> + <field name="name">Transfers for Groups</field> + <field name="res_model">stock.picking</field> + <field name="view_mode">tree,form</field> + <field name="domain">[('group_id','=',active_id)]</field> + </record> + + <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="arch" type="xml"> + <kanban class="oe_background_grey o_kanban_dashboard o_emphasize_colors o_stock_kanban" create="0"> + <field name="color"/> + <field name="code" readonly="1"/> + <field name="count_picking_ready"/> + <field name="count_picking_draft"/> + <field name="count_picking_waiting"/> + <field name="count_picking_late"/> + <field name="count_picking_backorders"/> + <templates> + <t t-name="kanban-box"> + <div t-if="['incoming', 'outgoing', 'internal'].indexOf(record.code.raw_value) > -1" t-attf-class="#{!selection_mode ? kanban_color(record.color.raw_value) : ''}" name="stock_picking"> + <div> + <div t-attf-class="o_kanban_card_header"> + <div class="o_kanban_card_header_title"> + <div class="o_primary" t-if="!selection_mode"> + <a type="object" name="get_stock_picking_action_picking_type"> + <field name="name"/> + </a> + </div> + <div class="o_primary" t-if="selection_mode"> + <field name="name"/> + </div> + <div class="o_secondary"><field class="o_secondary" name="warehouse_id" readonly="1" groups="stock.group_stock_multi_warehouses"/></div> + </div> + <div class="o_kanban_manage_button_section" t-if="!selection_mode"> + <a class="o_kanban_manage_toggle_button" href="#"><i class="fa fa-ellipsis-v" role="img" aria-label="Manage" title="Manage"/></a> + </div> + </div> + <div class="container o_kanban_card_content" t-if="!selection_mode"> + <div class="row"> + <div class="col-6 o_kanban_primary_left"> + <button class="btn btn-primary" name="get_action_picking_tree_ready" type="object"> + <span t-if="record.code.raw_value =='incoming'"><t t-esc="record.count_picking_ready.value"/> To Process</span> + <span t-if="record.code.raw_value =='outgoing'"><t t-esc="record.count_picking_ready.value"/> To Process</span> + <span t-if="record.code.raw_value =='internal'"><t t-esc="record.count_picking_ready.value"/> To Process</span> + </button> + </div> + <div class="col-6 o_kanban_primary_right"> + <div t-if="record.count_picking_ready.raw_value > 0" class="row"> + </div> + + <div t-if="record.count_picking_waiting.raw_value > 0" class="row"> + <div class="col-12"> + <a name="get_action_picking_tree_waiting" type="object"> + <field name="count_picking_waiting"/> + Waiting + </a> + </div> + </div> + + <div t-if="record.count_picking_late.raw_value > 0" class="row"> + <div class="col-12"> + <a class="oe_kanban_stock_picking_type_list" name="get_action_picking_tree_late" type="object"> + <field name="count_picking_late"/> + Late + </a> + </div> + </div> + + <div t-if="record.count_picking_backorders.raw_value > 0" class="row"> + <div class="col-12"> + <a class="oe_kanban_stock_picking_type_list" name="get_action_picking_tree_backorder" type="object"> + <field name="count_picking_backorders"/> + Back Orders + </a> + </div> + </div> + </div> + </div> + </div><div class="container o_kanban_card_manage_pane dropdown-menu" role="menu"> + <div class="row"> + <div class="col-6 o_kanban_card_manage_section o_kanban_manage_view"> + <div role="menuitem" class="o_kanban_card_manage_title"> + <span t-if="record.code.raw_value == 'internal'">Transfers</span> + <span t-else="">View</span> + </div> + <div role="menuitem"> + <a name="get_stock_picking_action_picking_type" type="object">All</a> + </div> + <div role="menuitem"> + <a name="get_action_picking_tree_ready" type="object">Ready</a> + </div> + <div role="menuitem"> + <a name="get_action_picking_tree_waiting" type="object">Waiting</a> + </div> + </div> + <div class="col-6 o_kanban_card_manage_section o_kanban_manage_new"> + <div role="menuitem" class="o_kanban_card_manage_title"> + <span>New</span> + </div> + <div role="menuitem"> + <a name="%(action_picking_form)d" type="action" context="{'default_immediate_transfer': True}">Immediate Transfer</a> + </div> + <div role="menuitem"> + <a name="%(action_picking_form)d" type="action">Planned Transfer</a> + </div> + </div> + </div> + + <div t-if="widget.editable" class="o_kanban_card_manage_settings row"> + <div class="col-8" role="menuitem" aria-haspopup="true"> + <ul class="oe_kanban_colorpicker" data-field="color" role="menu"/> + </div> + <div role="menuitem" class="col-4"> + <a class="dropdown-item" role="menuitem" type="edit">Configuration</a> + </div> + </div> + </div> + </div> + </div> + </t> + + </templates> + </kanban> + </field> + </record> +</odoo> |
