This commit is contained in:
李鹏宇
2026-02-26 18:51:08 +08:00
parent 93b178b402
commit 3bfe55ff7d
2 changed files with 55 additions and 10 deletions
@@ -41,6 +41,40 @@ class StockPicking(models.Model):
compute='_compute_available_product_ids',
string="可用产品"
)
can_certify = fields.Boolean(
string="可以证明",
compute='_compute_can_certify',
store=False
)
@api.depends('user_id', 'employee_id')
def _compute_can_certify(self):
"""计算当前用户是否可以证明(不是采购人也不是验收人)"""
current_user = self.env.user
for record in self:
# 如果当前用户是采购人员,不能证明
if record.user_id and record.user_id.id == current_user.id:
record.can_certify = False
continue
# 如果当前用户是验收人,不能证明
if record.employee_id and record.employee_id.user_id and record.employee_id.user_id.id == current_user.id:
record.can_certify = False
continue
# 其他情况可以证明
record.can_certify = True
def read(self, fields=None, load='_classic_read'):
"""重写read方法,打开验收状态的入库单时自动更新验收时间"""
result = super(StockPicking, self).read(fields, load)
# 导入Fields模块
from odoo import fields as odoo_fields
for record in self:
if record.receipt_status == 'acceptance':
# 使用write方法更新验收时间
record.write({
'acceptance_date': odoo_fields.Datetime.now()
})
return result
@api.depends('location_id')
def _compute_available_product_ids(self):
+21 -10
View File
@@ -6,17 +6,20 @@
<field name="inherit_id" ref="stock.view_picking_form"/>
<field name="arch" type="xml">
<xpath expr="//field[@name='picking_type_id']" position="after">
<field name="department_id" options="{'no_create': True}"/>
<field name="department_id" options="{'no_create': True}" invisible="1"/>
</xpath>
<xpath expr="//field[@name='picking_type_id']" position="attributes">
<attribute name="readonly">receipt_status in ['acceptance', 'certification']</attribute>
</xpath>
<xpath expr="//field[@name='origin']" position="attributes">
<attribute name="invisible">1</attribute>
</xpath>
<xpath expr="//field[@name='origin']" position="after">
<field name="receipt_status" invisible="1"/>
<field name="purchase_id" string="源单据" readonly="1" options="{'no_create': True, 'no_open': False}"/>
<field name="user_id" string="采购人员"/>
<field name="available_product_ids" invisible="1"/>
<field name="state" invisible="1"/>
<field name="can_certify" 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>
@@ -28,14 +31,14 @@
<xpath expr="//page[@name='operations']/field[@name='move_ids_without_package']" position="after">
<group>
<group>
<field name="employee_id" string="验收人" required="1" options="{'no_create': True}"/>
<field name="document_ids" widget="preview_many2many"/>
<field name="acceptance_date"/>
<field name="employee_id" string="验收人" required="1" options="{'no_create': True}" readonly="receipt_status == 'certification'"/>
<field name="document_ids" widget="preview_many2many" readonly="receipt_status == 'certification'"/>
<field name="acceptance_date" readonly="receipt_status == 'certification'"/>
</group>
<group>
<field name="certifier_id" options="{'no_create': True}"/>
<field name="certifier_document_ids" widget="preview_many2many"/>
<field name="certification_date"/>
<field name="certifier_id" options="{'no_create': True}" readonly="receipt_status == 'acceptance'"/>
<field name="certifier_document_ids" widget="preview_many2many" readonly="receipt_status == 'acceptance'"/>
<field name="certification_date" readonly="receipt_status == 'acceptance'"/>
</group>
</group>
</xpath>
@@ -44,10 +47,10 @@
</xpath>
<xpath expr="//button[@name='button_validate' and @class='oe_highlight']" position="attributes">
<attribute name="string">证明</attribute>
<attribute name="invisible">receipt_status != 'certification'</attribute>
<attribute name="invisible">receipt_status != 'certification' or not can_certify</attribute>
</xpath>
<xpath expr="//field[@name='location_dest_id'][@groups='stock.group_stock_multi_locations']" position="attributes">
<attribute name="invisible">picking_type_code == 'outgoing' or receipt_status == 'acceptance'</attribute>
<attribute name="invisible">1</attribute>
</xpath>
<xpath expr="//field[@name='picking_properties']" position="attributes">
<attribute name="invisible">1</attribute>
@@ -63,6 +66,10 @@
</xpath>
<xpath expr="//field[@name='partner_id']" position="attributes">
<attribute name="string">供应商</attribute>
<attribute name="readonly">receipt_status in ['acceptance', 'certification']</attribute>
</xpath>
<xpath expr="//field[@name='scheduled_date']" position="attributes">
<attribute name="readonly">receipt_status in ['acceptance', 'certification']</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'"/>
@@ -245,6 +252,10 @@
name="报废"
action="action_stock_picking_scrap"
sequence="15"/>
<record id="stock.action_picking_tree_incoming" model="ir.actions.act_window">
<field name="name">收货</field>
</record>
</odoo>