41 lines
2.1 KiB
Python
41 lines
2.1 KiB
Python
from odoo import api, models
|
||
|
||
|
||
class StockPicking(models.Model):
|
||
_inherit = 'stock.picking'
|
||
|
||
def button_validate(self):
|
||
res = super(StockPicking, self).button_validate()
|
||
"""
|
||
调拨单若关联了质量检查单,验证调拨单时,应校验是否有不合格品,若存在,应弹窗提示:
|
||
“警告:存在不合格产品XXXX n 件、YYYYY m件,继续调拨请点“确认”,否则请取消?”
|
||
"""
|
||
context = self.env.context
|
||
if not context.get('again_validate') and self.quality_check_ids.filtered(lambda qc: qc.quality_state == 'fail'):
|
||
# 回滚事务,为二次确认/取消做准备
|
||
self.env.cr.rollback()
|
||
quality_check_ids = self.quality_check_ids.filtered(lambda qc: qc.quality_state == 'fail')
|
||
product_list = list(set([quality_check_id.product_id for quality_check_id in quality_check_ids]))
|
||
fail_check_text = ''
|
||
for product_id in product_list:
|
||
check_ids = quality_check_ids.filtered(lambda qc: qc.product_id == product_id)
|
||
if all(check_id.measure_on == 'move_line' for check_id in check_ids):
|
||
number = sum(check_ids.mapped('qty_line'))
|
||
else:
|
||
number = sum(self.move_ids_without_package.filtered(
|
||
lambda ml: ml.product_id == product_id).mapped('quantity_done'))
|
||
fail_check_text = (f'{fail_check_text}、{product_id.name} {number}件'
|
||
if fail_check_text != '' else f'{product_id.name} {number}件')
|
||
return {
|
||
'type': 'ir.actions.act_window',
|
||
'res_model': 'picking.validate.check.wizard',
|
||
'name': '质检不合格提示',
|
||
'view_mode': 'form',
|
||
'target': 'new',
|
||
'context': {
|
||
'default_picking_id': self.id,
|
||
'default_fail_check_text': f'警告:存在不合格产品{fail_check_text},继续调拨请点“确认”,否则请取消?',
|
||
'again_validate': True}
|
||
}
|
||
return res
|