Files
test/sf_quality/models/stock.py
2025-03-18 11:21:56 +08:00

60 lines
3.1 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

from odoo import api, models
class StockPicking(models.Model):
_inherit = 'stock.picking'
def button_validate(self):
"""
出厂检验报告上传
"""
out_quality_checks = self.env['quality.check'].search(
[('picking_id', '=', self.id), ('test_type_id.name', '=', '出厂检验报告')])
# out_quality_checks 可能存在多个
if out_quality_checks:
for out_quality_check in out_quality_checks:
if not out_quality_check.is_factory_report_uploaded:
if out_quality_check and self.state == 'assigned':
out_quality_check.upload_factory_report()
"""
调拨单若关联了质量检查单,验证调拨单时,应校验是否有不合格品,若存在,应弹窗提示:
“警告存在不合格产品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'))
if number == 0:
number = sum(self.move_ids_without_package.filtered(
lambda ml: ml.product_id == product_id).mapped('reserved_availability'))
if number == 0:
number = sum(self.move_ids_without_package.filtered(
lambda ml: ml.product_id == product_id).mapped('product_uom_qty'))
fail_check_text = (f'{fail_check_text}{product_id.display_name} {number}'
if fail_check_text != '' else f'{product_id.display_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}
}
res = super(StockPicking, self).button_validate()
return res