工艺外协代码
This commit is contained in:
@@ -1,4 +1,5 @@
|
|||||||
from odoo import api, fields, models
|
from odoo import api, fields, models
|
||||||
|
from collections import defaultdict
|
||||||
|
|
||||||
|
|
||||||
class StockRule(models.Model):
|
class StockRule(models.Model):
|
||||||
@@ -44,7 +45,39 @@ class StockRule(models.Model):
|
|||||||
purchase_request_line_model.create(request_line_data)
|
purchase_request_line_model.create(request_line_data)
|
||||||
|
|
||||||
def _run_buy(self, procurements):
|
def _run_buy(self, procurements):
|
||||||
res = super(StockRule, self)._run_buy(procurements)
|
# 如果补货组相同,并且产品相同,则合并
|
||||||
|
procurements_dict = defaultdict()
|
||||||
|
for procurement, rule in procurements:
|
||||||
|
if (procurement.product_id, procurement.values['group_id'], rule) not in procurements_dict:
|
||||||
|
procurements_dict[(procurement.product_id, procurement.values['group_id'], rule)] = {
|
||||||
|
'product_id': procurement.product_id,
|
||||||
|
'product_qty': procurement.product_qty,
|
||||||
|
'product_uom': procurement.product_uom,
|
||||||
|
'location_id': procurement.location_id,
|
||||||
|
'name': procurement.name,
|
||||||
|
'origin': procurement.origin,
|
||||||
|
'company_id': procurement.company_id,
|
||||||
|
'values': procurement.values,
|
||||||
|
'rule': rule
|
||||||
|
}
|
||||||
|
else:
|
||||||
|
procurements_dict[(procurement.product_id, procurement.values['group_id'], rule)]['product_qty'] += procurement.product_qty
|
||||||
|
new_procurements = []
|
||||||
|
for k, p in procurements_dict.items():
|
||||||
|
new_procurements.append((
|
||||||
|
self.env['procurement.group'].Procurement(
|
||||||
|
product_id=p['product_id'],
|
||||||
|
product_qty=p['product_qty'],
|
||||||
|
product_uom=p['product_uom'],
|
||||||
|
location_id=p['location_id'],
|
||||||
|
name=p['name'],
|
||||||
|
origin=p['origin'],
|
||||||
|
company_id=p['company_id'],
|
||||||
|
values=p['values']
|
||||||
|
), p['rule'])
|
||||||
|
)
|
||||||
|
|
||||||
|
res = super(StockRule, self)._run_buy(new_procurements)
|
||||||
# 判断是否根据规则生成新的采购申请单据,如果生成则修改状态为 approved
|
# 判断是否根据规则生成新的采购申请单据,如果生成则修改状态为 approved
|
||||||
origins = list(set([procurement[0].origin for procurement in procurements]))
|
origins = list(set([procurement[0].origin for procurement in procurements]))
|
||||||
for origin in origins:
|
for origin in origins:
|
||||||
|
|||||||
@@ -928,7 +928,7 @@ class MrpProduction(models.Model):
|
|||||||
'sf_stock.stock_route_process_outsourcing').id)]
|
'sf_stock.stock_route_process_outsourcing').id)]
|
||||||
for product_id, request_line_list in grouped_purchase_request_line_sorted_list.items():
|
for product_id, request_line_list in grouped_purchase_request_line_sorted_list.items():
|
||||||
cur_request_line = request_line_list[0]
|
cur_request_line = request_line_list[0]
|
||||||
cur_request_line['product_qty'] = len(request_line_list)
|
# cur_request_line['product_qty'] = cur_request_line['product_qty']
|
||||||
cur_request_line['request_id'] = pr.id
|
cur_request_line['request_id'] = pr.id
|
||||||
cur_request_line['origin'] = ", ".join({item['production_name'] for item in request_line_list if item.get('production_name')})
|
cur_request_line['origin'] = ", ".join({item['production_name'] for item in request_line_list if item.get('production_name')})
|
||||||
cur_request_line.pop('group_id', None)
|
cur_request_line.pop('group_id', None)
|
||||||
|
|||||||
@@ -1269,9 +1269,9 @@ class ResMrpWorkOrder(models.Model):
|
|||||||
workorder.state = 'pending'
|
workorder.state = 'pending'
|
||||||
continue
|
continue
|
||||||
# ================= 如果制造订单制造类型为【人工线下加工】==========================
|
# ================= 如果制造订单制造类型为【人工线下加工】==========================
|
||||||
lot_id = workorder.production_id.move_raw_ids.move_line_ids.lot_id
|
# lot_id = workorder.production_id.move_raw_ids.move_line_ids.lot_id
|
||||||
picking_ids = workorder.production_id.picking_ids.filtered(
|
# picking_ids = workorder.production_id.picking_ids.filtered(
|
||||||
lambda wk: wk.location_id.name == '外协收料区' and wk.location_dest_id.name == '制造前')
|
# lambda wk: wk.location_id.name == '外协收料区' and wk.location_dest_id.name == '制造前')
|
||||||
# exists = any(
|
# exists = any(
|
||||||
# move_line.lot_id == lot_id
|
# move_line.lot_id == lot_id
|
||||||
# for picking in picking_ids
|
# for picking in picking_ids
|
||||||
@@ -1279,7 +1279,7 @@ class ResMrpWorkOrder(models.Model):
|
|||||||
# for move_line in move.move_line_ids
|
# for move_line in move.move_line_ids
|
||||||
# )
|
# )
|
||||||
if (workorder.production_id.production_type == '人工线下加工'
|
if (workorder.production_id.production_type == '人工线下加工'
|
||||||
and workorder.production_id.schedule_state == '已排' and lot_id):
|
and workorder.production_id.schedule_state == '已排'):
|
||||||
# and workorder.production_id.programming_state == '已编程'
|
# and workorder.production_id.programming_state == '已编程'
|
||||||
if workorder.is_subcontract is True:
|
if workorder.is_subcontract is True:
|
||||||
if workorder.production_id.state == 'rework':
|
if workorder.production_id.state == 'rework':
|
||||||
@@ -1369,11 +1369,10 @@ class ResMrpWorkOrder(models.Model):
|
|||||||
# 判断是否有坯料的序列号信息
|
# 判断是否有坯料的序列号信息
|
||||||
boolean = False
|
boolean = False
|
||||||
if self.production_id.move_raw_ids:
|
if self.production_id.move_raw_ids:
|
||||||
if self.production_id.move_raw_ids[0].product_id.categ_type == '坯料':
|
if self.production_id.move_raw_ids[0].product_id.categ_type == '坯料' and self.production_id.move_raw_ids[0].product_id.tracking == 'serial':
|
||||||
if self.production_id.move_raw_ids[0].move_line_ids:
|
if self.production_id.move_raw_ids[0].move_line_ids:
|
||||||
if self.production_id.move_raw_ids[0].move_line_ids:
|
if self.production_id.move_raw_ids[0].move_line_ids[0].lot_id.name:
|
||||||
if self.production_id.move_raw_ids[0].move_line_ids[0].lot_id.name:
|
boolean = True
|
||||||
boolean = True
|
|
||||||
else:
|
else:
|
||||||
boolean = True
|
boolean = True
|
||||||
if not boolean:
|
if not boolean:
|
||||||
|
|||||||
@@ -675,6 +675,7 @@ class StockPicking(models.Model):
|
|||||||
|
|
||||||
# 创建 外协出库入单
|
# 创建 外协出库入单
|
||||||
def create_outcontract_picking(self, workorders, item, sorted_workorders):
|
def create_outcontract_picking(self, workorders, item, sorted_workorders):
|
||||||
|
production = workorders[0].production_id
|
||||||
for workorder in workorders:
|
for workorder in workorders:
|
||||||
if workorder.move_subcontract_workorder_ids:
|
if workorder.move_subcontract_workorder_ids:
|
||||||
workorder.move_subcontract_workorder_ids.write({'state': 'cancel'})
|
workorder.move_subcontract_workorder_ids.write({'state': 'cancel'})
|
||||||
@@ -706,7 +707,7 @@ class StockPicking(models.Model):
|
|||||||
})
|
})
|
||||||
moves_in = self.env['stock.move'].sudo().with_context(context).create(
|
moves_in = self.env['stock.move'].sudo().with_context(context).create(
|
||||||
self.env['stock.move']._get_stock_move_values_Res(item, outcontract_picking_type_in,
|
self.env['stock.move']._get_stock_move_values_Res(item, outcontract_picking_type_in,
|
||||||
procurement_group_id.id, move_dest_id))
|
procurement_group_id.id, move_dest_id, production.product_uom_qty))
|
||||||
picking_in = self.create(
|
picking_in = self.create(
|
||||||
moves_in._get_new_picking_values_Res(item, workorder, 'WH/OCIN/'))
|
moves_in._get_new_picking_values_Res(item, workorder, 'WH/OCIN/'))
|
||||||
# pick_ids.append(picking_in.id)
|
# pick_ids.append(picking_in.id)
|
||||||
@@ -716,7 +717,7 @@ class StockPicking(models.Model):
|
|||||||
# self.env.context.get('default_production_id')
|
# self.env.context.get('default_production_id')
|
||||||
moves_out = self.env['stock.move'].sudo().with_context(context).create(
|
moves_out = self.env['stock.move'].sudo().with_context(context).create(
|
||||||
self.env['stock.move']._get_stock_move_values_Res(item, outcontract_picking_type_out,
|
self.env['stock.move']._get_stock_move_values_Res(item, outcontract_picking_type_out,
|
||||||
procurement_group_id.id, moves_in.id))
|
procurement_group_id.id, moves_in.id, production.product_uom_qty))
|
||||||
workorder.write({'move_subcontract_workorder_ids': [(6, 0, [moves_in.id, moves_out.id])]})
|
workorder.write({'move_subcontract_workorder_ids': [(6, 0, [moves_in.id, moves_out.id])]})
|
||||||
picking_out = self.create(
|
picking_out = self.create(
|
||||||
moves_out._get_new_picking_values_Res(item, workorder, 'WH/OCOUT/'))
|
moves_out._get_new_picking_values_Res(item, workorder, 'WH/OCOUT/'))
|
||||||
@@ -848,7 +849,7 @@ class ReStockMove(models.Model):
|
|||||||
traceback_error = traceback.format_exc()
|
traceback_error = traceback.format_exc()
|
||||||
logging.error("零件图号 零件名称获取失败:%s" % traceback_error)
|
logging.error("零件图号 零件名称获取失败:%s" % traceback_error)
|
||||||
|
|
||||||
def _get_stock_move_values_Res(self, item, picking_type_id, group_id, move_dest_ids=False):
|
def _get_stock_move_values_Res(self, item, picking_type_id, group_id, move_dest_ids=False, product_uom_qty=1.0):
|
||||||
route_id = self.env.ref('sf_manufacturing.route_surface_technology_outsourcing').id
|
route_id = self.env.ref('sf_manufacturing.route_surface_technology_outsourcing').id
|
||||||
stock_rule = self.env['stock.rule'].sudo().search(
|
stock_rule = self.env['stock.rule'].sudo().search(
|
||||||
[('route_id', '=', route_id), ('picking_type_id', '=', picking_type_id)])
|
[('route_id', '=', route_id), ('picking_type_id', '=', picking_type_id)])
|
||||||
@@ -857,7 +858,7 @@ class ReStockMove(models.Model):
|
|||||||
'company_id': item.company_id.id,
|
'company_id': item.company_id.id,
|
||||||
'product_id': item.bom_id.bom_line_ids.product_id.id,
|
'product_id': item.bom_id.bom_line_ids.product_id.id,
|
||||||
'product_uom': item.bom_id.bom_line_ids.product_uom_id.id,
|
'product_uom': item.bom_id.bom_line_ids.product_uom_id.id,
|
||||||
'product_uom_qty': 1.0,
|
'product_uom_qty': product_uom_qty,
|
||||||
'location_id': stock_rule.location_src_id.id,
|
'location_id': stock_rule.location_src_id.id,
|
||||||
'location_dest_id': stock_rule.location_dest_id.id,
|
'location_dest_id': stock_rule.location_dest_id.id,
|
||||||
'origin': item.name,
|
'origin': item.name,
|
||||||
|
|||||||
@@ -397,7 +397,7 @@ class RePurchaseOrder(models.Model):
|
|||||||
"name": production.procurement_group_id.name,
|
"name": production.procurement_group_id.name,
|
||||||
"date_required": fields.Datetime.now(),
|
"date_required": fields.Datetime.now(),
|
||||||
"product_uom_id":server_template.uom_id.id,
|
"product_uom_id":server_template.uom_id.id,
|
||||||
"product_qty": 1,
|
"product_qty": production.product_qty,
|
||||||
"request_id": False,
|
"request_id": False,
|
||||||
"move_dest_ids": False,
|
"move_dest_ids": False,
|
||||||
"orderpoint_id": False,
|
"orderpoint_id": False,
|
||||||
@@ -420,7 +420,7 @@ class RePurchaseOrder(models.Model):
|
|||||||
('detailed_type', '=', 'service')])
|
('detailed_type', '=', 'service')])
|
||||||
server_product_process.append((0, 0, {
|
server_product_process.append((0, 0, {
|
||||||
'product_id': server_template.product_variant_id.id,
|
'product_id': server_template.product_variant_id.id,
|
||||||
'product_qty': 1,
|
'product_qty': production.product_uom_qty,
|
||||||
'product_uom': server_template.uom_id.id,
|
'product_uom': server_template.uom_id.id,
|
||||||
'related_product': production.product_id.id,
|
'related_product': production.product_id.id,
|
||||||
'manual_part_number': pp.part_number,
|
'manual_part_number': pp.part_number,
|
||||||
|
|||||||
Reference in New Issue
Block a user