完善人工编程功能
This commit is contained in:
@@ -34,16 +34,46 @@ class SFSaleOrderCancelWizard(models.TransientModel):
|
||||
|
||||
def action_confirm_cancel(self):
|
||||
self.ensure_one()
|
||||
|
||||
# 取消销售订单关联的采购单
|
||||
purchase_orders = self.env['purchase.order'].search([
|
||||
('origin', '=', self.order_id.name)
|
||||
])
|
||||
if purchase_orders:
|
||||
purchase_orders.write({'state': 'cancel'})
|
||||
|
||||
# 取消销售订单
|
||||
result = self.order_id.action_cancel()
|
||||
# 取消关联的制造订单
|
||||
|
||||
# 取消关联的制造订单及其采购单
|
||||
manufacturing_orders = self.env['mrp.production'].search([
|
||||
('origin', '=', self.order_id.name)
|
||||
])
|
||||
if manufacturing_orders:
|
||||
manufacturing_orders.action_cancel()
|
||||
return result
|
||||
for mo in manufacturing_orders:
|
||||
# 取消制造订单关联的采购单,但保持关联关系
|
||||
mo_purchase_orders = self.env['purchase.order'].search([
|
||||
('origin', '=', mo.name)
|
||||
])
|
||||
if mo_purchase_orders:
|
||||
mo_purchase_orders.write({'state': 'cancel'})
|
||||
|
||||
# 取消制造订单
|
||||
mo.action_cancel()
|
||||
|
||||
# 取消制造订单关联的编程单
|
||||
mo._change_programming_state()
|
||||
|
||||
# 取消组件的制造单关联的采购单
|
||||
for comp_mo in self.env['mrp.production'].search([
|
||||
('origin', '=', mo.name)
|
||||
]):
|
||||
comp_purchase_orders = self.env['purchase.order'].search([
|
||||
('origin', '=', comp_mo.name)
|
||||
])
|
||||
if comp_purchase_orders:
|
||||
comp_purchase_orders.button_cancel()
|
||||
|
||||
return result
|
||||
|
||||
class SFSaleOrderCancelLine(models.TransientModel):
|
||||
_name = 'sf.sale.order.cancel.line'
|
||||
@@ -65,6 +95,16 @@ class SFSaleOrderCancelLine(models.TransientModel):
|
||||
def create_from_order(self, wizard_id, order):
|
||||
sequence = 1
|
||||
lines = []
|
||||
map_dict = {
|
||||
'waiting': '等待其他作业',
|
||||
'to approve': '待批准',
|
||||
'technology_to_confirmed': '待工艺确认',
|
||||
'confirmed': '已确认',
|
||||
'pending': '等待其他工单',
|
||||
'none': '待处理',
|
||||
'draft': '报价',
|
||||
'cancel': '已取消'
|
||||
}
|
||||
|
||||
# 检查销售订单
|
||||
if order.invoice_ids:
|
||||
@@ -97,7 +137,7 @@ class SFSaleOrderCancelLine(models.TransientModel):
|
||||
'product_name': picking.product_id.name if picking.product_id else '',
|
||||
# 'quantity': picking.product_qty if hasattr(picking, 'product_qty') else 0,
|
||||
'quantity': sum(picking.move_ids.mapped('product_uom_qty') or [0]),
|
||||
'doc_state': picking.state,
|
||||
'doc_state': map_dict.get(picking.state, picking.state),
|
||||
'cancel_reason': '已有异动' if picking.state not in ['draft', 'cancel', 'waiting'] else ''
|
||||
}
|
||||
lines.append(self.create(vals))
|
||||
@@ -118,7 +158,7 @@ class SFSaleOrderCancelLine(models.TransientModel):
|
||||
'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,
|
||||
'doc_state': map_dict.get(po.state, po.state),
|
||||
'cancel_reason': '已有异动' if po.state not in ['draft', 'cancel'] else ''
|
||||
}
|
||||
lines.append(self.create(vals))
|
||||
@@ -139,8 +179,8 @@ class SFSaleOrderCancelLine(models.TransientModel):
|
||||
'operation_type': '制造',
|
||||
'product_name': mo.product_id.name,
|
||||
'quantity': mo.product_qty,
|
||||
'doc_state': mo.state,
|
||||
'cancel_reason': '已有异动' if mo.state not in ['technology_to_confirmed'] else ''
|
||||
'doc_state': map_dict.get(mo.state, mo.state),
|
||||
'cancel_reason': '已有异动' if mo.state not in ['technology_to_confirmed', 'cancel'] else ''
|
||||
}
|
||||
lines.append(self.create(vals))
|
||||
sequence += 1
|
||||
@@ -160,7 +200,7 @@ class SFSaleOrderCancelLine(models.TransientModel):
|
||||
'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,
|
||||
'doc_state': map_dict.get(po.state, po.state),
|
||||
'cancel_reason': '已有异动' if po.state not in ['draft', 'cancel'] else ''
|
||||
}
|
||||
lines.append(self.create(vals))
|
||||
@@ -178,7 +218,7 @@ class SFSaleOrderCancelLine(models.TransientModel):
|
||||
'operation_type': picking.picking_type_id.name,
|
||||
'product_name': picking.product_id.name if picking.product_id else '',
|
||||
'quantity': sum(picking.move_ids.mapped('product_uom_qty') or [0]),
|
||||
'doc_state': picking.state,
|
||||
'doc_state': map_dict.get(picking.state, picking.state),
|
||||
'cancel_reason': '已有异动' if picking.state not in ['draft', 'cancel', 'waiting'] else ''
|
||||
}
|
||||
lines.append(self.create(vals))
|
||||
@@ -196,34 +236,34 @@ class SFSaleOrderCancelLine(models.TransientModel):
|
||||
'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 ''
|
||||
'doc_state': map_dict.get(workorder.state, workorder.state),
|
||||
'cancel_reason': '已有异动' if workorder.state not in ['draft', 'cancel', 'pending', 'waiting'] 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_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([
|
||||
@@ -240,7 +280,7 @@ class SFSaleOrderCancelLine(models.TransientModel):
|
||||
'doc_number': comp_mo.name,
|
||||
'product_name': move.product_id.name,
|
||||
'quantity': comp_mo.product_qty,
|
||||
'doc_state': comp_mo.state,
|
||||
'doc_state': map_dict.get(comp_mo.state, comp_mo.state),
|
||||
'cancel_reason': '已有异动' if comp_mo.state not in ['technology_to_confirmed'] else ''
|
||||
}
|
||||
lines.append(self.create(vals))
|
||||
@@ -257,12 +297,32 @@ class SFSaleOrderCancelLine(models.TransientModel):
|
||||
'sequence': sequence,
|
||||
'category': '制造',
|
||||
'doc_name': '质检单',
|
||||
'operation_type': '质检',
|
||||
'doc_number': check.name,
|
||||
'product_name': check.product_id.name,
|
||||
'doc_state': check.state,
|
||||
'cancel_reason': '已有异动' if check.state not in ['draft', 'cancel'] else ''
|
||||
'quantity': 1,
|
||||
'doc_state': map_dict.get(check.quality_state, check.quality_state),
|
||||
'cancel_reason': '已有异动' if check.quality_state not in ['none'] else ''
|
||||
}
|
||||
lines.append(self.create(vals))
|
||||
sequence += 1
|
||||
|
||||
# 检查制造订单的编程单
|
||||
cloud_programming = mo._cron_get_programming_state()
|
||||
if cloud_programming:
|
||||
vals = {
|
||||
'wizard_id': wizard_id,
|
||||
'sequence': sequence,
|
||||
'category': '编程',
|
||||
'doc_name': '编程单',
|
||||
'operation_type': '编程',
|
||||
'doc_number': cloud_programming['programming_no'],
|
||||
'product_name': cloud_programming['production_order_no'],
|
||||
'quantity': 1,
|
||||
'doc_state': cloud_programming['programming_state'],
|
||||
'cancel_reason': ''
|
||||
}
|
||||
lines.append(self.create(vals))
|
||||
sequence += 1
|
||||
|
||||
return lines
|
||||
|
||||
Reference in New Issue
Block a user