Files
gzth/yuthon_stock/views/inherit_stock_picking.xml
T
2026-07-03 19:05:50 +08:00

452 lines
28 KiB
XML

<?xml version="1.0" encoding="UTF-8" ?>
<odoo>
<record id="inherit_stock_picking_form" model="ir.ui.view">
<field name="name">inherit.stock.picking.form</field>
<field name="model">stock.picking</field>
<field name="inherit_id" ref="stock.view_picking_form"/>
<field name="arch" type="xml">
<xpath expr="//field[@name='picking_type_id']" position="before">
<field name="borrow_code" string="流水号" readonly="1" invisible="picking_type_code != 'internal'"/>
<field name="name" string="单据名称" invisible="picking_type_code != 'internal'" placeholder="可修改将显示于待办列表" readonly="0"/>
</xpath>
<xpath expr="//field[@name='picking_type_id']" position="after">
<field name="department_id" options="{'no_create': True}" invisible="1"/>
<field name="picking_type_code" invisible="1"/>
<field name="create_uid" invisible="1"/>
</xpath>
<xpath expr="//field[@name='picking_type_id']" position="attributes">
<attribute name="readonly">state != 'draft' and (receipt_status in ['acceptance', 'certification'] or receipt_status == 'receipt')</attribute>
</xpath>
<xpath expr="//field[@name='origin']" position="attributes">
<attribute name="invisible">1</attribute>
</xpath>
<xpath expr="//field[@name='origin']" position="after">
<field name="purchase_id" string="源单据" readonly="1" options="{'no_create': True, 'no_open': False}" invisible="picking_type_code == 'internal'"/>
<field name="user_id" string="采购人员"/>
<field name="borrower_id" string="借用人" invisible="1" options="{'no_create': True}" readonly="1"/>
<field name="return_state" string="归还状态" invisible="1" readonly="1"/>
<field name="return_approver_id" string="归还审批人" invisible="1" options="{'no_create': True}" readonly="1"/>
<field name="available_product_ids" invisible="1"/>
<field name="available_location_ids" invisible="1"/>
<field name="state" invisible="1"/>
<field name="can_certify" invisible="1"/>
<field name="trigger_auto_fill" invisible="1"/>
<field name="acceptance_user_id" invisible="1"/>
<field name="certifier_user_id" invisible="1"/>
<field name="is_admin" invisible="1"/>
<field name="approval_state" invisible="1"/>
<field name="approver_id" invisible="1"/>
<field name="return_state" invisible="1"/>
<field name="return_approver_id" invisible="1"/>
</xpath>
<xpath expr="//page[@name='operations']//field[@name='move_ids_without_package']//field[@name='product_id']" position="attributes">
<attribute name="options">{'no_create': True}</attribute>
<attribute name="domain">[('id', 'in', parent.available_product_ids)]</attribute>
</xpath>
<xpath expr="//page[@name='operations']//field[@name='move_ids_without_package']//field[@name='product_uom'][@groups='uom.group_uom']" position="after">
<field name="available_location_ids" invisible="1"/>
</xpath>
<xpath expr="//button[@name='%(stock.act_stock_return_picking)d']" position="attributes">
<attribute name="invisible">1</attribute>
</xpath>
<xpath expr="//button[@name='action_confirm']" position="attributes">
<attribute name="invisible">picking_type_code == 'incoming' or picking_type_code == 'internal' or state != 'draft'</attribute>
</xpath>
<xpath expr="//button[@name='action_cancel']" position="attributes">
<attribute name="invisible">picking_type_code == 'incoming' or picking_type_code == 'internal'</attribute>
</xpath>
<xpath expr="//button[@name='action_assign']" position="attributes">
<attribute name="invisible">picking_type_code == 'internal' or not show_check_availability</attribute>
</xpath>
<xpath expr="//header" position="inside">
<!-- 提交审批:借用/领用单且草稿或已拒绝时可见,点击弹窗选审批人和借用人 -->
<button name="%(yuthon_stock.action_stock_picking_submit_wizard)d"
string="提交审批" type="action" class="btn-primary"
invisible="picking_type_code == 'incoming' or approval_state not in ['draft', 'refused']"/>
<!-- 批准:审批人且待审批时可见 -->
<button name="action_approve" string="批准" type="object" class="btn-primary"
invisible="picking_type_code == 'incoming' or approval_state != 'pending' or approver_id != uid"/>
<!-- 拒绝:审批人且待审批时可见 -->
<button name="action_refuse" string="拒绝" type="object" class="btn-secondary"
invisible="picking_type_code == 'incoming' or approval_state != 'pending' or approver_id != uid"/>
<!-- 申请归还:已完成的借用/领用单且未申请归还时可见 -->
<button name="%(yuthon_stock.action_stock_picking_return_wizard)d"
string="申请归还" type="action" class="btn-secondary"
invisible="picking_type_code != 'internal' or state != 'done' or return_state not in ['none', 'refused'] or create_uid != uid"/>
<!-- 批准归还:归还审批人且待审批时可见 -->
<button name="action_approve_return" string="批准归还" type="object" class="btn-primary"
invisible="picking_type_code != 'internal' or return_state != 'pending' or return_approver_id != uid"/>
<!-- 拒绝归还:归还审批人且待审批时可见 -->
<button name="action_refuse_return" string="拒绝归还" type="object" class="btn-secondary"
invisible="picking_type_code != 'internal' or return_state != 'pending' or return_approver_id != uid"/>
<button name="action_reset_to_acceptance" string="退回待验收" type="object" class="btn-secondary"
groups="base.group_system"
invisible="picking_type_code != 'incoming' or state == 'done' or receipt_status == 'acceptance'"/>
<!-- 验收按钮:只有采购人员可见,当前用户即采购人员时显示 -->
<button name="action_acceptance" string="验收" type="object" class="btn-primary"
invisible="receipt_status != 'acceptance' or user_id == False or user_id != uid or picking_type_code != 'incoming'"/>
<!-- 转交证明:验收人(即采购人员)才能转交,且尚未转交证明时可见 -->
<button name="action_transfer_certifier" string="转交证明" type="object" class="btn-secondary"
invisible="receipt_status != 'certification' or certifier_user_id != False or acceptance_user_id != uid or picking_type_code != 'incoming'"/>
<!-- 撤回入库:已隐藏 -->
<button name="action_revoke_receipt" string="撤回入库" type="object" class="btn-secondary"
invisible="1"/>
</xpath>
<xpath expr="//page[@name='operations']/field[@name='move_ids_without_package']" position="after">
<group invisible="picking_type_code != 'incoming'">
<group>
<field name="employee_id" string="验收人" required="1" options="{'no_create': True}" readonly="receipt_status in ['certification', 'receipt']"/>
<field name="document_ids" widget="preview_many2many" readonly="receipt_status in ['certification', 'receipt']"/>
<field name="acceptance_date" readonly="receipt_status in ['certification', 'receipt']"/>
</group>
<group>
<field name="certifier_id" options="{'no_create': True}" readonly="receipt_status in ['acceptance', 'receipt']"/>
<field name="certifier_document_ids" widget="preview_many2many" readonly="receipt_status in ['acceptance', 'receipt']"/>
<field name="certification_date" readonly="receipt_status in ['acceptance', 'receipt']"/>
</group>
</group>
</xpath>
<xpath expr="//button[@name='action_open_label_type']" position="attributes">
<attribute name="invisible">1</attribute>
</xpath>
<xpath expr="//button[@name='button_validate' and @class='oe_highlight']" position="attributes">
<attribute name="string">证明</attribute>
<attribute name="invisible">picking_type_code != 'incoming' or receipt_status != 'certification' or certifier_user_id == False or certifier_user_id != uid</attribute>
</xpath>
<xpath expr="//button[@name='button_validate' and @class='oe_highlight']" position="after">
<button name="button_validate" string="完成" type="object" class="btn-primary"
invisible="1"/>
</xpath>
<xpath expr="//field[@name='location_dest_id'][@groups='stock.group_stock_multi_locations']" position="replace">
<field name="location_dest_id" options="{'no_create': True}" groups="stock.group_stock_multi_locations"
invisible="picking_type_code != 'internal'"
readonly="state == 'done'"/>
</xpath>
<xpath expr="//field[@name='picking_properties']" position="attributes">
<attribute name="invisible">1</attribute>
</xpath>
<xpath expr="//page[@name='extra']" position="attributes">
<attribute name="invisible">1</attribute>
</xpath>
<xpath expr="//page[@name='note']" position="attributes">
<attribute name="invisible">1</attribute>
</xpath>
<xpath expr="//field[@name='user_id']" position="attributes">
<attribute name="string">采购人员</attribute>
<attribute name="invisible">picking_type_code == 'internal'</attribute>
</xpath>
<xpath expr="//field[@name='partner_id']" position="attributes">
<attribute name="string">供应商</attribute>
<attribute name="readonly">state != 'draft' and (receipt_status in ['acceptance', 'certification'] or receipt_status == 'receipt')</attribute>
<attribute name="invisible">picking_type_code == 'internal'</attribute>
</xpath>
<xpath expr="//div[@class='o_td_label'][label[@for='partner_id']]" position="attributes">
<attribute name="invisible">picking_type_code == 'internal'</attribute>
</xpath>
<xpath expr="//field[@name='origin'][@invisible='1']" position="attributes">
<attribute name="invisible">1</attribute>
</xpath>
<xpath expr="//div[@class='oe_title']//field[@name='name']" position="attributes">
<attribute name="invisible">picking_type_code == 'internal'</attribute>
</xpath>
<xpath expr="//div[@class='oe_title']//field[@name='priority']" position="attributes">
<attribute name="invisible">picking_type_code == 'internal'</attribute>
</xpath>
<xpath expr="//field[@name='scheduled_date']" position="attributes">
<attribute name="readonly">state != 'draft' and (receipt_status in ['acceptance', 'certification'] or receipt_status == 'receipt')</attribute>
</xpath>
<xpath expr="//label[@for='scheduled_date']" position="replace">
<label for="scheduled_date" invisible="picking_type_code == 'internal'"/>
</xpath>
<xpath expr="//div[field[@name='scheduled_date']]" position="attributes">
<attribute name="invisible">picking_type_code == 'internal'</attribute>
</xpath>
<xpath expr="(//field[@name='state'][@widget='statusbar'])[1]" position="replace">
<field name="receipt_status" widget="statusbar" statusbar_visible="acceptance,certification,receipt" invisible="picking_type_code != 'incoming'"/>
<field name="state" widget="statusbar" statusbar_visible="draft,confirmed,assigned,done" invisible="picking_type_code != 'internal'"/>
</xpath>
<xpath expr="(//field[@name='state'][@widget='statusbar'])[1]" position="replace">
<field name="state" widget="statusbar" statusbar_visible="draft,confirmed,assigned,done" invisible="picking_type_code != 'outgoing'"/>
</xpath>
<xpath expr="//field[@name='location_id'][@groups='stock.group_stock_multi_locations']" position="replace">
<field name="location_id" options="{'no_create': True}" groups="stock.group_stock_multi_locations"
invisible="picking_type_code == 'incoming' or picking_type_code == 'internal'"
readonly="state == 'done'"
domain="[('id', 'in', available_location_ids)]"/>
</xpath>
<xpath expr="//field[@name='location_id'][@groups='!stock.group_stock_multi_locations']" position="replace">
<field name="location_id" groups="!stock.group_stock_multi_locations" invisible="1" readonly="state == 'done'"/>
</xpath>
</field>
</record>
<record id="inherit_stock_picking_tree" model="ir.ui.view">
<field name="name">inherit.stock.picking.tree</field>
<field name="model">stock.picking</field>
<field name="inherit_id" ref="stock.vpicktree"/>
<field name="arch" type="xml">
<xpath expr="//tree/header" position="inside">
<button name="action_update_name_by_products" type="object" string="重新生成编号"
class="btn-secondary"
help="将选中的入库单重新生成 SH+年月+序号 格式的编号"/>
</xpath>
<xpath expr="//field[@name='name']" position="attributes">
<attribute name="string">编号</attribute>
</xpath>
<xpath expr="//field[@name='location_dest_id']" position="attributes">
<attribute name="string">目的位置</attribute>
<attribute name="invisible">1</attribute>
</xpath>
<!-- <xpath expr="//field[@name='partner_id']" position="attributes">-->
<!-- <attribute name="string">供应商</attribute>-->
<!-- </xpath>-->
<xpath expr="//field[@name='user_id']" position="attributes">
<attribute name="string">采购人员</attribute>
</xpath>
<xpath expr="//field[@name='user_id']" position="after">
<field name="employee_id" string="验收人"/>
</xpath>
<xpath expr="//field[@name='picking_type_id']" position="attributes">
<attribute name="column_invisible">1</attribute>
</xpath>
<xpath expr="//field[@name='location_id']" position="attributes">
<attribute name="column_invisible">1</attribute>
</xpath>
<xpath expr="//field[@name='location_dest_id']" position="attributes">
<attribute name="column_invisible">1</attribute>
</xpath>
<xpath expr="//field[@name='scheduled_date']" position="attributes">
<attribute name="column_invisible">1</attribute>
</xpath>
<xpath expr="//field[@name='products_availability']" position="attributes">
<attribute name="column_invisible">1</attribute>
</xpath>
<xpath expr="//field[@name='date_deadline']" position="attributes">
<attribute name="column_invisible">1</attribute>
</xpath>
<xpath expr="//field[@name='backorder_id']" position="attributes">
<attribute name="column_invisible">1</attribute>
</xpath>
</field>
</record>
<!--出库-->
<record id="stock_picking_views_tree_ikuku" model="ir.ui.view">
<field name="name">stock.picking.tree</field>
<field name="model">stock.picking</field>
<field name="arch" type="xml">
<tree string="出库">
<field name="name"/>
<field name="partner_id" string="供应商"/>
<field name="user_id" string="采购人员"/>
<field name="employee_id" string="验收人"/>
<field name="date_done"/>
<field name="origin"/>
<!-- <field name="json_display" widget="json_template"/>-->
<field name="company_id"/>
<field name="state"/>
</tree>
</field>
</record>
<record id="stock_picking_views_tree_adopted" model="ir.ui.view">
<field name="name">stock.picking.tree.adopted</field>
<field name="model">stock.picking</field>
<field name="arch" type="xml">
<tree string="领用">
<field name="date_done"/>
<!-- <field name="json_display" widget="json_template"/>-->
<field name="company_id"/>
<field name="state"/>
</tree>
</field>
</record>
<!-- 借用/领用 出库Tree视图 -->
<record id="stock_picking_views_tree_borrow" model="ir.ui.view">
<field name="name">stock.picking.tree.borrow</field>
<field name="model">stock.picking</field>
<field name="arch" type="xml">
<tree string="借用">
<field name="borrow_code" string="流水号"/>
<field name="picking_type_id" string="类型"/>
<field name="scheduled_date" string="调拨日期"/>
<field name="borrower_id" string="借用人"/>
<field name="approval_state" string="审批状态"
decoration-info="approval_state == 'draft'"
decoration-warning="approval_state == 'pending'"
decoration-success="approval_state == 'approved'"
decoration-danger="approval_state == 'refused'"/>
<field name="return_state" string="归还状态"
decoration-muted="return_state == 'none'"
decoration-warning="return_state == 'pending'"
decoration-success="return_state == 'approved'"
decoration-danger="return_state == 'refused'"/>
<field name="company_id"/>
</tree>
</field>
</record>
<!-- 报废出库Tree视图 -->
<record id="stock_picking_views_tree_scrap" model="ir.ui.view">
<field name="name">stock.picking.tree.scrap</field>
<field name="model">stock.picking</field>
<field name="arch" type="xml">
<tree string="报废">
<field name="name"/>
<field name="partner_id" string="供应商"/>
<field name="user_id" string="采购人员"/>
<field name="employee_id" string="验收人"/>
<field name="date_done"/>
<field name="origin"/>
<field name="json_display" widget="json_template"/>
<field name="company_id"/>
<field name="state"/>
</tree>
</field>
</record>
<record id="action_stock_picking_ikuku" model="ir.actions.act_window">
<field name="name">出库</field>
<field name="res_model">stock.picking</field>
<field name="view_mode">tree,form</field>
<field name="view_id" ref="stock_picking_views_tree_ikuku"/>
</record>
<!-- 借用/领用出库 独立 Form 视图 -->
<record id="stock_picking_form_borrow" model="ir.ui.view">
<field name="name">stock.picking.form.borrow</field>
<field name="model">stock.picking</field>
<field name="arch" type="xml">
<form string="出库">
<header>
<field name="approver_id" invisible="1"/>
<button name="%(yuthon_stock.action_stock_picking_submit_wizard)d"
string="提交审批" type="action" class="btn-primary"
invisible="approval_state not in ['draft', 'refused']"/>
<button name="action_approve" string="批准" type="object" class="btn-primary"
invisible="approval_state != 'pending' or approver_id != uid"/>
<button name="action_refuse" string="拒绝" type="object" class="btn-secondary"
invisible="approval_state != 'pending' or approver_id != uid"/>
<field name="approval_state" widget="statusbar"
statusbar_visible="draft,pending,approved,refused"/>
</header>
<sheet>
<field name="company_id" invisible="1"/>
<group>
<group string="基本信息">
<field name="borrow_code" string="流水号" readonly="1"/>
<field name="create_uid" string="申请人" readonly="1"/>
<field name="picking_type_id" string="作业类型" readonly="1"/>
</group>
</group>
<notebook>
<page string="作业" name="operations">
<field name="move_ids_without_package"
context="{'default_picking_id': id, 'default_picking_type_id': picking_type_id, 'default_company_id': company_id}">
<tree editable="bottom">
<field name="available_location_ids" column_invisible="True"/>
<field name="company_id" column_invisible="True"/>
<field name="product_uom_category_id" column_invisible="True"/>
<field name="product_id" options="{'no_create': True}" context="{'search_default_company_id': False}"/>
<field name="product_uom_qty" string="需求"/>
<field name="product_uom" groups="uom.group_uom"/>
<field name="location_id" string="所在仓库"
domain="[('id', 'in', available_location_ids)]"
options="{'no_create': True}"/>
<field name="borrow_type" string="借用/领用" readonly="1"/>
</tree>
</field>
</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="action_stock_picking_adopted" model="ir.actions.act_window">
<field name="name">领用</field>
<field name="res_model">stock.picking</field>
<field name="view_mode">tree,form</field>
<field name="view_id" ref="stock_picking_views_tree_adopted"/>
<field name="domain">[('picking_type_id.name', 'ilike', '领用')]</field>
</record>
<record id="action_stock_picking_borrow" model="ir.actions.act_window">
<field name="name">借用/领用</field>
<field name="res_model">stock.picking</field>
<field name="view_mode">tree,form</field>
<field name="view_id" ref="stock_picking_views_tree_borrow"/>
<field name="views" eval="[(ref('stock_picking_views_tree_borrow'), 'tree'), (ref('stock_picking_form_borrow'), 'form')]"/>
<field name="domain">['&amp;', '|', ('picking_type_id.name', 'ilike', '借用'), ('picking_type_id.name', 'ilike', '领用'), '|', ('create_uid', '=', uid), ('approver_id', '=', uid)]</field>
<field name="context">{"default_picking_type_id": 72}</field>
</record>
<!-- 强制刷新借用/领用 action 的 views 绑定 -->
<function model="ir.actions.act_window" name="write">
<value eval="[ref('action_stock_picking_borrow')]"/>
<value eval="{'view_ids': [(5,), (0, 0, {'view_id': ref('stock_picking_views_tree_borrow'), 'view_mode': 'tree', 'sequence': 1}), (0, 0, {'view_id': ref('stock_picking_form_borrow'), 'view_mode': 'form', 'sequence': 2})]}"/>
</function>
<record id="action_stock_picking_scrap" model="ir.actions.act_window">
<field name="name">报废</field>
<field name="res_model">stock.picking</field>
<field name="view_mode">tree,form</field>
<field name="view_id" ref="stock_picking_views_tree_scrap"/>
</record>
<menuitem id="stock_picking_incoming"
name="入库"
parent="stock.menu_stock_warehouse_mgmt"
action="stock.action_picking_tree_incoming"
sequence="1"/>
<menuitem id="stock_picking_ikuku"
name="出库"
parent="stock.menu_stock_warehouse_mgmt"
action="action_stock_picking_ikuku"
sequence="3"
active="False"/>
<menuitem id="stock_picking_adopted"
parent="stock.menu_stock_warehouse_mgmt"
name="领用"
action="action_stock_picking_adopted"
sequence="5"
active="False"/>
<menuitem id="stock_picking_borrow"
parent="stock.menu_stock_warehouse_mgmt"
name="出库"
action="action_stock_picking_borrow"
sequence="3"/>
<menuitem id="stock_picking_scrap"
parent="stock.menu_stock_warehouse_mgmt"
name="报废"
action="action_stock_picking_scrap"
sequence="15"/>
<record id="stock.action_picking_tree_incoming" model="ir.actions.act_window">
<field name="name">收货</field>
<field name="domain">['&amp;', ('picking_type_code', '=', 'incoming'), '|', '|', '|', ('create_uid', '=', uid), ('user_id', '=', uid), ('acceptance_user_id', '=', uid), ('certifier_user_id', '=', uid)]</field>
<field name="context">{'contact_display': 'partner_address', 'restricted_picking_type_code': 'incoming', 'search_default_reception': 1}</field>
<field name="views" eval="[(False, 'tree'), (ref('stock.view_picking_form'), 'form')]"/>
</record>
<record id="inherit_view_picking_internal_search_my" model="ir.ui.view">
<field name="name">inherit.view.picking.internal.search.my</field>
<field name="model">stock.picking</field>
<field name="inherit_id" ref="stock.view_picking_internal_search"/>
<field name="arch" type="xml">
<xpath expr="//filter[@name='reception']" position="after">
<filter name="my_pickings" string="我的收货"
domain="['|', '|', ('user_id', '=', uid), ('employee_id.user_id', '=', uid), ('certifier_id', '=', uid)]"/>
</xpath>
</field>
</record>
</odoo>