增加取消订单其他功能

This commit is contained in:
mgw
2025-02-14 17:29:33 +08:00
parent 3ac096e9a7
commit e98a9a3788
2 changed files with 152 additions and 11 deletions

View File

@@ -79,25 +79,166 @@ class SFSaleOrderCancelLine(models.TransientModel):
}
lines.append(self.create(vals))
sequence += 1
# 检查销售订单直接关联的采购单
purchase_orders = self.env['purchase.order'].search([
('origin', '=', order.name)
])
if purchase_orders:
for po in purchase_orders:
vals = {
'wizard_id': wizard_id,
'sequence': sequence,
'category': '采购',
'doc_name': '采购单',
'operation_type': '销售采购',
'doc_number': po.name,
'product_name': po.order_line[0].product_id.name if po.order_line else '',
'quantity': po.order_line[0].product_qty if po.order_line else 0,
'doc_state': po.state,
'cancel_reason': '已有异动' if po.state not in ['draft', 'cancel'] else ''
}
lines.append(self.create(vals))
sequence += 1
# 检查制造订单
manufacturing_orders = self.env['mrp.production'].search([
('origin', '=', order.name)
])
for mo in manufacturing_orders:
# 添加制造订单本身
vals = {
'wizard_id': wizard_id,
'sequence': sequence,
'category': '制造',
'doc_name': '制造订单',
'operation_type': '制造',
'doc_number': mo.name,
'product_name': mo.product_id.name,
'quantity': mo.product_qty,
'doc_state': mo.state,
'cancel_reason': '已有异动' if mo.state not in ['draft', 'cancel'] else ''
'cancel_reason': '已有异动' if mo.state not in ['technology_to_confirmed'] else ''
}
lines.append(self.create(vals))
sequence += 1
# 检查制造订单关联的采购单
purchase_orders = self.env['purchase.order'].search([
('origin', '=', mo.name)
])
if purchase_orders:
for po in purchase_orders:
vals = {
'wizard_id': wizard_id,
'sequence': sequence,
'category': '制造',
'doc_name': '采购单',
'doc_number': po.name,
'operation_type': '制造采购',
'product_name': po.order_line[0].product_id.name if po.order_line else '',
'quantity': po.order_line[0].product_qty if po.order_line else 0,
'doc_state': po.state,
'cancel_reason': '已有异动' if po.state not in ['draft', 'cancel'] else ''
}
lines.append(self.create(vals))
sequence += 1
# 检查制造订单的领料单
if mo.picking_ids:
for picking in mo.picking_ids:
vals = {
'wizard_id': wizard_id,
'sequence': sequence,
'category': '制造',
'doc_name': '领料单',
'doc_number': picking.name,
'operation_type': picking.picking_type_id.name,
'product_name': picking.product_id.name if picking.product_id else '',
'quantity': picking.product_qty if hasattr(picking, 'product_qty') else 0,
'doc_state': picking.state,
'cancel_reason': '已有异动' if picking.state not in ['draft', 'cancel', 'waiting'] else ''
}
lines.append(self.create(vals))
sequence += 1
# 检查制造订单的工单
if mo.workorder_ids:
for workorder in mo.workorder_ids:
vals = {
'wizard_id': wizard_id,
'sequence': sequence,
'category': '制造',
'doc_name': '工单',
'doc_number': workorder.name,
'operation_type': workorder.workcenter_id.name,
'product_name': mo.product_id.name,
'quantity': workorder.qty_production,
'doc_state': workorder.state,
'cancel_reason': '已有异动' if workorder.state not in ['draft', 'cancel', 'pending'] else ''
}
lines.append(self.create(vals))
sequence += 1
# 检查制造订单组件的采购单和制造单
for move in mo.move_raw_ids:
# 检查组件的采购单
component_pos = self.env['purchase.order'].search([
('origin', '=', mo.name),
('order_line.product_id', '=', move.product_id.id)
])
for po in component_pos:
vals = {
'wizard_id': wizard_id,
'sequence': sequence,
'category': '制造',
'doc_name': '组件采购单',
'operation_type': '组件采购',
'doc_number': po.name,
'product_name': move.product_id.name,
'quantity': po.order_line[0].product_qty if po.order_line else 0,
'doc_state': po.state,
'cancel_reason': '已有异动' if po.state not in ['draft', 'cancel'] else ''
}
lines.append(self.create(vals))
sequence += 1
# 检查组件的制造单
component_mos = self.env['mrp.production'].search([
('origin', '=', mo.name),
('product_id', '=', move.product_id.id)
])
for comp_mo in component_mos:
vals = {
'wizard_id': wizard_id,
'sequence': sequence,
'category': '制造',
'doc_name': '组件制造单',
'operation_type': '组件制造',
'doc_number': comp_mo.name,
'product_name': move.product_id.name,
'quantity': comp_mo.product_qty,
'doc_state': comp_mo.state,
'cancel_reason': '已有异动' if comp_mo.state not in ['technology_to_confirmed'] else ''
}
lines.append(self.create(vals))
sequence += 1
# 检查制造订单的质检单
quality_checks = self.env['quality.check'].search([
('production_id', '=', mo.id)
])
if quality_checks:
for check in quality_checks:
vals = {
'wizard_id': wizard_id,
'sequence': sequence,
'category': '制造',
'doc_name': '质检单',
'doc_number': check.name,
'product_name': check.product_id.name,
'doc_state': check.state,
'cancel_reason': '已有异动' if check.state not in ['draft', 'cancel'] else ''
}
lines.append(self.create(vals))
sequence += 1
return lines