回退工艺外协代码
This commit is contained in:
@@ -59,83 +59,83 @@ class PurchaseOrder(models.Model):
|
||||
production_id = self.env['mrp.production'].search([('origin', 'in', origins)])
|
||||
purchase.production_count = len(production_id)
|
||||
|
||||
def process_replenish(self,production,total_qty):
|
||||
record = self
|
||||
bom_line_id = production.bom_id.bom_line_ids
|
||||
replenish = self.env['stock.warehouse.orderpoint'].search([
|
||||
('product_id', '=', bom_line_id.product_id.id),
|
||||
(
|
||||
'location_id', '=', self.env.ref('sf_stock.stock_location_outsourcing_material_receiving_area').id),
|
||||
# ('state', 'in', ['draft', 'confirmed'])
|
||||
], limit=1)
|
||||
if not replenish:
|
||||
replenish_model = self.env['stock.warehouse.orderpoint']
|
||||
replenish = replenish_model.create({
|
||||
'product_id': bom_line_id.product_id.id,
|
||||
'location_id': self.env.ref(
|
||||
'sf_stock.stock_location_outsourcing_material_receiving_area').id,
|
||||
'route_id': self.env.ref('sf_stock.stock_route_process_outsourcing').id,
|
||||
'group_id': record.group_id.id,
|
||||
'qty_to_order': total_qty,
|
||||
'origin': record.name,
|
||||
})
|
||||
else:
|
||||
replenish.write({
|
||||
'product_id': bom_line_id.product_id.id,
|
||||
'location_id': self.env.ref(
|
||||
'sf_stock.stock_location_outsourcing_material_receiving_area').id,
|
||||
'route_id': self.env.ref('sf_stock.stock_route_process_outsourcing').id,
|
||||
'group_id': record.group_id.id,
|
||||
'qty_to_order': total_qty + replenish.qty_to_order,
|
||||
'origin': record.name + ',' + replenish.origin,
|
||||
})
|
||||
replenish.action_replenish()
|
||||
# def process_replenish(self,production,total_qty):
|
||||
# record = self
|
||||
# bom_line_id = production.bom_id.bom_line_ids
|
||||
# replenish = self.env['stock.warehouse.orderpoint'].search([
|
||||
# ('product_id', '=', bom_line_id.product_id.id),
|
||||
# (
|
||||
# 'location_id', '=', self.env.ref('sf_stock.stock_location_outsourcing_material_receiving_area').id),
|
||||
# # ('state', 'in', ['draft', 'confirmed'])
|
||||
# ], limit=1)
|
||||
# if not replenish:
|
||||
# replenish_model = self.env['stock.warehouse.orderpoint']
|
||||
# replenish = replenish_model.create({
|
||||
# 'product_id': bom_line_id.product_id.id,
|
||||
# 'location_id': self.env.ref(
|
||||
# 'sf_stock.stock_location_outsourcing_material_receiving_area').id,
|
||||
# 'route_id': self.env.ref('sf_stock.stock_route_process_outsourcing').id,
|
||||
# 'group_id': record.group_id.id,
|
||||
# 'qty_to_order': total_qty,
|
||||
# 'origin': record.name,
|
||||
# })
|
||||
# else:
|
||||
# replenish.write({
|
||||
# 'product_id': bom_line_id.product_id.id,
|
||||
# 'location_id': self.env.ref(
|
||||
# 'sf_stock.stock_location_outsourcing_material_receiving_area').id,
|
||||
# 'route_id': self.env.ref('sf_stock.stock_route_process_outsourcing').id,
|
||||
# 'group_id': record.group_id.id,
|
||||
# 'qty_to_order': total_qty + replenish.qty_to_order,
|
||||
# 'origin': record.name + ',' + replenish.origin,
|
||||
# })
|
||||
# replenish.action_replenish()
|
||||
|
||||
def outsourcing_service_replenishment(self):
|
||||
record = self
|
||||
if record.purchase_type != 'consignment':
|
||||
return
|
||||
grouped_lines = {}
|
||||
for line in record.order_line:
|
||||
if line.related_product.id not in grouped_lines:
|
||||
grouped_lines[line.related_product.id] = []
|
||||
grouped_lines[line.related_product.id].append(line)
|
||||
for product_id,lines in grouped_lines.items():
|
||||
production = self.env['mrp.production'].search([('product_id', '=', product_id)], limit=1)
|
||||
if not production:
|
||||
continue
|
||||
total_qty = sum(line.product_qty for line in lines)
|
||||
record.process_replenish(production,total_qty)
|
||||
for product_id,lines in grouped_lines.items():
|
||||
productions = self.env['mrp.production'].search([('product_id', '=', product_id)], limit=1)
|
||||
if not productions:
|
||||
continue
|
||||
# production.bom_id.bom_line_ids.product_id
|
||||
location_id = self.env['stock.location'].search([('name', '=', '制造前')])
|
||||
quants = self.env['stock.quant'].search([
|
||||
('product_id', '=', productions.bom_id.bom_line_ids.product_id.id),
|
||||
('location_id', '=', location_id.id)
|
||||
])
|
||||
total_qty = sum(quants.mapped('quantity')) # 计算该位置的总库存量
|
||||
is_available = total_qty > 0
|
||||
if not is_available:
|
||||
raise UserError('请先完成坯料入库')
|
||||
for production_id in productions:
|
||||
work_ids = production_id.workorder_ids.filtered(
|
||||
lambda wk: wk.state not in ['done', 'rework', 'cancel'])
|
||||
if not work_ids:
|
||||
continue
|
||||
min_sequence_wk = min(work_ids, key=lambda wk: wk.sequence)
|
||||
if min_sequence_wk.is_subcontract:
|
||||
picking_id = production_id.picking_ids.filtered(
|
||||
lambda wk: wk.location_id.name == '制造前' and wk.location_dest_id.name == '外协加工区')
|
||||
move_out = picking_id.move_ids
|
||||
for mo in move_out:
|
||||
if mo.state != 'done':
|
||||
mo.write({'state': 'assigned', 'production_id': False})
|
||||
if not mo.move_line_ids:
|
||||
self.env['stock.move.line'].create(
|
||||
mo.get_move_line(production_id, min_sequence_wk))
|
||||
# def outsourcing_service_replenishment(self):
|
||||
# record = self
|
||||
# if record.purchase_type != 'consignment':
|
||||
# return
|
||||
# grouped_lines = {}
|
||||
# for line in record.order_line:
|
||||
# if line.related_product.id not in grouped_lines:
|
||||
# grouped_lines[line.related_product.id] = []
|
||||
# grouped_lines[line.related_product.id].append(line)
|
||||
# for product_id,lines in grouped_lines.items():
|
||||
# production = self.env['mrp.production'].search([('product_id', '=', product_id)], limit=1)
|
||||
# if not production:
|
||||
# continue
|
||||
# total_qty = sum(line.product_qty for line in lines)
|
||||
# record.process_replenish(production,total_qty)
|
||||
# for product_id,lines in grouped_lines.items():
|
||||
# productions = self.env['mrp.production'].search([('product_id', '=', product_id)], limit=1)
|
||||
# if not productions:
|
||||
# continue
|
||||
# # production.bom_id.bom_line_ids.product_id
|
||||
# location_id = self.env['stock.location'].search([('name', '=', '制造前')])
|
||||
# quants = self.env['stock.quant'].search([
|
||||
# ('product_id', '=', productions.bom_id.bom_line_ids.product_id.id),
|
||||
# ('location_id', '=', location_id.id)
|
||||
# ])
|
||||
# total_qty = sum(quants.mapped('quantity')) # 计算该位置的总库存量
|
||||
# is_available = total_qty > 0
|
||||
# if not is_available:
|
||||
# raise UserError('请先完成坯料入库')
|
||||
# for production_id in productions:
|
||||
# work_ids = production_id.workorder_ids.filtered(
|
||||
# lambda wk: wk.state not in ['done', 'rework', 'cancel'])
|
||||
# if not work_ids:
|
||||
# continue
|
||||
# min_sequence_wk = min(work_ids, key=lambda wk: wk.sequence)
|
||||
# if min_sequence_wk.is_subcontract:
|
||||
# picking_id = production_id.picking_ids.filtered(
|
||||
# lambda wk: wk.location_id.name == '制造前' and wk.location_dest_id.name == '外协加工区')
|
||||
# move_out = picking_id.move_ids
|
||||
# for mo in move_out:
|
||||
# if mo.state != 'done':
|
||||
# mo.write({'state': 'assigned', 'production_id': False})
|
||||
# if not mo.move_line_ids:
|
||||
# self.env['stock.move.line'].create(
|
||||
# mo.get_move_line(production_id, min_sequence_wk))
|
||||
# product = self.env['mrp.production'].search([('product_id', '=', product_id)], limit=1)
|
||||
# match = re.search(r'(S\d{5}-\d)',product.name)
|
||||
# pass
|
||||
@@ -146,7 +146,7 @@ class PurchaseOrder(models.Model):
|
||||
raise UserError('请对【产品】中的【数量】进行输入')
|
||||
if line.price_unit <= 0:
|
||||
raise UserError('请对【产品】中的【单价】进行输入')
|
||||
record.outsourcing_service_replenishment()
|
||||
# record.outsourcing_service_replenishment()
|
||||
|
||||
res = super(PurchaseOrder, self).button_confirm()
|
||||
|
||||
|
||||
Reference in New Issue
Block a user