表面工艺外协需求,不包含页面展示外协出入库单
This commit is contained in:
@@ -1,6 +1,19 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<odoo>
|
<odoo>
|
||||||
<data noupdate="1">
|
<data noupdate="1">
|
||||||
|
|
||||||
|
<record id="sequence_stock_picking_in" model="ir.sequence">
|
||||||
|
<field name="name">YourCompany Sequence ocin</field>
|
||||||
|
<field name="prefix">WH/OCIN/</field>
|
||||||
|
<field name="padding">5</field>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<record id="sequence_stock_picking_out" model="ir.sequence">
|
||||||
|
<field name="name">YourCompany Sequence ocout</field>
|
||||||
|
<field name="prefix">WH/OCOUT/</field>
|
||||||
|
<field name="padding">5</field>
|
||||||
|
</record>
|
||||||
|
|
||||||
<record id="stock_location_locations_virtual_outcontract" model="stock.location">
|
<record id="stock_location_locations_virtual_outcontract" model="stock.location">
|
||||||
<field name="name">外协</field>
|
<field name="name">外协</field>
|
||||||
<field name="location_id" ref="stock.stock_location_locations_virtual"/>
|
<field name="location_id" ref="stock.stock_location_locations_virtual"/>
|
||||||
@@ -14,6 +27,7 @@
|
|||||||
<field name="name">外协入库</field>
|
<field name="name">外协入库</field>
|
||||||
<field name="code">internal</field>
|
<field name="code">internal</field>
|
||||||
<field name="active">true</field>
|
<field name="active">true</field>
|
||||||
|
<field name="sequence_id" ref="sequence_stock_picking_in"/>
|
||||||
<field name="company_id" ref="base.main_company"/>
|
<field name="company_id" ref="base.main_company"/>
|
||||||
<field name="sequence_code">OCIN</field>
|
<field name="sequence_code">OCIN</field>
|
||||||
<field name="default_location_src_id" ref="stock_location_locations_virtual_outcontract"/>
|
<field name="default_location_src_id" ref="stock_location_locations_virtual_outcontract"/>
|
||||||
@@ -24,6 +38,7 @@
|
|||||||
<record id="outcontract_picking_out" model="stock.picking.type">
|
<record id="outcontract_picking_out" model="stock.picking.type">
|
||||||
<field name="name">外协出库</field>
|
<field name="name">外协出库</field>
|
||||||
<field name="code">internal</field>
|
<field name="code">internal</field>
|
||||||
|
<field name="sequence_id" ref="sequence_stock_picking_out"/>
|
||||||
<field name="active">true</field>
|
<field name="active">true</field>
|
||||||
<field name="company_id" ref="base.main_company"/>
|
<field name="company_id" ref="base.main_company"/>
|
||||||
<field name="sequence_code">OCOUT</field>
|
<field name="sequence_code">OCOUT</field>
|
||||||
@@ -31,5 +46,7 @@
|
|||||||
search="[('barcode','=','WH-PREPRODUCTION')]"/>
|
search="[('barcode','=','WH-PREPRODUCTION')]"/>
|
||||||
<field name="default_location_dest_id" ref="stock_location_locations_virtual_outcontract"/>
|
<field name="default_location_dest_id" ref="stock_location_locations_virtual_outcontract"/>
|
||||||
</record>
|
</record>
|
||||||
|
|
||||||
|
|
||||||
</data>
|
</data>
|
||||||
</odoo>
|
</odoo>
|
||||||
|
|||||||
@@ -142,7 +142,7 @@ class MrpProduction(models.Model):
|
|||||||
[('production_process_ids.id', 'in', surface_technics_arr)],
|
[('production_process_ids.id', 'in', surface_technics_arr)],
|
||||||
order='sequence asc'
|
order='sequence asc'
|
||||||
)
|
)
|
||||||
#用filter刷选表面工艺id'是否存在工艺类别对象里
|
# 用filter刷选表面工艺id'是否存在工艺类别对象里
|
||||||
if production_process_category:
|
if production_process_category:
|
||||||
for p in production_process_category:
|
for p in production_process_category:
|
||||||
production_process = p.production_process_ids.filtered(
|
production_process = p.production_process_ids.filtered(
|
||||||
@@ -176,7 +176,8 @@ class MrpProduction(models.Model):
|
|||||||
self.env['mrp.workorder'].json_workorder_str('', production, route))
|
self.env['mrp.workorder'].json_workorder_str('', production, route))
|
||||||
production.workorder_ids = workorders_values
|
production.workorder_ids = workorders_values
|
||||||
process_parameter_workorder = self.env['mrp.workorder'].search(
|
process_parameter_workorder = self.env['mrp.workorder'].search(
|
||||||
[('surface_technics_parameters_id', '!=', False), ('production_id', '=', production.id)])
|
[('surface_technics_parameters_id', '!=', False), ('production_id', '=', production.id),
|
||||||
|
('is_subcontract', '=', True)])
|
||||||
if process_parameter_workorder:
|
if process_parameter_workorder:
|
||||||
is_pick = False
|
is_pick = False
|
||||||
consecutive_workorders = []
|
consecutive_workorders = []
|
||||||
@@ -185,10 +186,8 @@ class MrpProduction(models.Model):
|
|||||||
for i in range(len(sorted_workorders) - 1):
|
for i in range(len(sorted_workorders) - 1):
|
||||||
if m == 0:
|
if m == 0:
|
||||||
is_pick = False
|
is_pick = False
|
||||||
# if sorted_workorders[i].id in consecutive_workorders:
|
if sorted_workorders[i].supplier_id.id == sorted_workorders[i + 1].supplier_id.id and \
|
||||||
# consecutive_workorders = [x for x in consecutive_workorders if x not in sorted_workorders[i].id]
|
sorted_workorders[i].is_subcontract == sorted_workorders[i + 1].is_subcontract and \
|
||||||
# continue
|
|
||||||
if sorted_workorders[i].supplier_id == sorted_workorders[i + 1].supplier_id and \
|
|
||||||
sorted_workorders[i].id == sorted_workorders[i + 1].id - 1:
|
sorted_workorders[i].id == sorted_workorders[i + 1].id - 1:
|
||||||
if sorted_workorders[i] not in consecutive_workorders:
|
if sorted_workorders[i] not in consecutive_workorders:
|
||||||
consecutive_workorders.append(sorted_workorders[i])
|
consecutive_workorders.append(sorted_workorders[i])
|
||||||
@@ -196,16 +195,16 @@ class MrpProduction(models.Model):
|
|||||||
m += 1
|
m += 1
|
||||||
continue
|
continue
|
||||||
else:
|
else:
|
||||||
if m == len(consecutive_workorders)-1 and m != 0:
|
if m == len(consecutive_workorders) - 1 and m != 0:
|
||||||
self.env['stock.picking'].create_outcontract_picking(consecutive_workorders, production)
|
self.env['stock.picking'].create_outcontract_picking(consecutive_workorders, production)
|
||||||
if sorted_workorders[i] in consecutive_workorders:
|
if sorted_workorders[i] in consecutive_workorders:
|
||||||
is_pick = True
|
is_pick = True
|
||||||
consecutive_workorders = []
|
consecutive_workorders = []
|
||||||
m = 0
|
m = 0
|
||||||
# 当前面的连续工序生成对应的外协出入库单再生成当前工序的外协出入库单
|
# 当前面的连续工序生成对应的外协出入库单再生成当前工序的外协出入库单
|
||||||
if is_pick is False:
|
if is_pick is False:
|
||||||
self.env['stock.picking'].create_outcontract_picking(sorted_workorders[i], production)
|
self.env['stock.picking'].create_outcontract_picking(sorted_workorders[i], production)
|
||||||
if m == len(consecutive_workorders)-1 and m != 0:
|
if m == len(consecutive_workorders) - 1 and m != 0:
|
||||||
self.env['stock.picking'].create_outcontract_picking(consecutive_workorders, production)
|
self.env['stock.picking'].create_outcontract_picking(consecutive_workorders, production)
|
||||||
if sorted_workorders[i] in consecutive_workorders:
|
if sorted_workorders[i] in consecutive_workorders:
|
||||||
is_pick = True
|
is_pick = True
|
||||||
@@ -213,7 +212,7 @@ class MrpProduction(models.Model):
|
|||||||
m = 0
|
m = 0
|
||||||
if m == len(consecutive_workorders) - 1 and m != 0:
|
if m == len(consecutive_workorders) - 1 and m != 0:
|
||||||
self.env['stock.picking'].create_outcontract_picking(consecutive_workorders, production)
|
self.env['stock.picking'].create_outcontract_picking(consecutive_workorders, production)
|
||||||
if is_pick is False:
|
if is_pick is False and m == 0:
|
||||||
self.env['stock.picking'].create_outcontract_picking(sorted_workorders[i], production)
|
self.env['stock.picking'].create_outcontract_picking(sorted_workorders[i], production)
|
||||||
for workorder in production.workorder_ids:
|
for workorder in production.workorder_ids:
|
||||||
workorder.duration_expected = workorder._get_duration_expected()
|
workorder.duration_expected = workorder._get_duration_expected()
|
||||||
@@ -240,7 +239,7 @@ class MrpProduction(models.Model):
|
|||||||
'user_id': production.user_id.id}
|
'user_id': production.user_id.id}
|
||||||
return production_values_str
|
return production_values_str
|
||||||
|
|
||||||
def _get_stock_move_values_Res(self,item,location_src_id,location_dest_id):
|
def _get_stock_move_values_Res(self, item, location_src_id, location_dest_id, picking_type_id):
|
||||||
move_values = {
|
move_values = {
|
||||||
'name': item.name if item.name else '/',
|
'name': item.name if item.name else '/',
|
||||||
'company_id': item.company_id.id,
|
'company_id': item.company_id.id,
|
||||||
@@ -250,7 +249,7 @@ class MrpProduction(models.Model):
|
|||||||
'location_id': location_src_id,
|
'location_id': location_src_id,
|
||||||
'location_dest_id': location_dest_id,
|
'location_dest_id': location_dest_id,
|
||||||
'origin': item.origin,
|
'origin': item.origin,
|
||||||
'picking_type_id': self.picking_type_id.id,
|
'picking_type_id': picking_type_id,
|
||||||
}
|
}
|
||||||
return move_values
|
return move_values
|
||||||
|
|
||||||
|
|||||||
@@ -95,7 +95,7 @@ class ResMrpWorkOrder(models.Model):
|
|||||||
surface_technics_parameters_id = fields.Many2one('sf.production.process.parameter', string="表面工艺可选参数")
|
surface_technics_parameters_id = fields.Many2one('sf.production.process.parameter', string="表面工艺可选参数")
|
||||||
picking_in_id = fields.Many2one('stock.picking', string='外协入库单')
|
picking_in_id = fields.Many2one('stock.picking', string='外协入库单')
|
||||||
picking_out_id = fields.Many2one('stock.picking', string='外协出库单')
|
picking_out_id = fields.Many2one('stock.picking', string='外协出库单')
|
||||||
supplier_id = fields.Integer('供应商Id')
|
supplier_id = fields.Many2one('res.partner', string='外协供应商')
|
||||||
|
|
||||||
def get_no_data(self, production_id):
|
def get_no_data(self, production_id):
|
||||||
process_parameter_workorder = self.search(
|
process_parameter_workorder = self.search(
|
||||||
|
|||||||
@@ -230,12 +230,23 @@ class ProductionLot(models.Model):
|
|||||||
return "%s-%03d" % (product.name, 1)
|
return "%s-%03d" % (product.name, 1)
|
||||||
|
|
||||||
|
|
||||||
class ResStockPicking(models.Model):
|
class StockPicking(models.Model):
|
||||||
_inherit = 'stock.picking'
|
_inherit = 'stock.picking'
|
||||||
|
|
||||||
workorder_in_id = fields.One2many('mrp.workorder', 'picking_in_id')
|
workorder_in_id = fields.One2many('mrp.workorder', 'picking_in_id')
|
||||||
workorder_out_id = fields.One2many('mrp.workorder', 'picking_out_id')
|
workorder_out_id = fields.One2many('mrp.workorder', 'picking_out_id')
|
||||||
|
|
||||||
|
# 设置外协出入单的名称
|
||||||
|
def _get_name_Res(self, rescode):
|
||||||
|
count = self.env['ir.sequence'].search_count([('prefix', 'like', rescode)])
|
||||||
|
if not count:
|
||||||
|
num = "%04d" % 1
|
||||||
|
else:
|
||||||
|
m = int(count) + 1
|
||||||
|
num = "%04d" % m
|
||||||
|
return '%s%s' % (rescode, num)
|
||||||
|
|
||||||
|
# 创建 外协出库入单
|
||||||
def create_outcontract_picking(self, sorted_workorders_arr, item):
|
def create_outcontract_picking(self, sorted_workorders_arr, item):
|
||||||
m = 0
|
m = 0
|
||||||
for sorted_workorders in sorted_workorders_arr:
|
for sorted_workorders in sorted_workorders_arr:
|
||||||
@@ -247,13 +258,21 @@ class ResStockPicking(models.Model):
|
|||||||
'sf_manufacturing.stock_location_locations_virtual_outcontract').id,
|
'sf_manufacturing.stock_location_locations_virtual_outcontract').id,
|
||||||
location_dest_id = self.env['stock.location'].search(
|
location_dest_id = self.env['stock.location'].search(
|
||||||
[('barcode', '=', 'WH-PREPRODUCTION')]).id,
|
[('barcode', '=', 'WH-PREPRODUCTION')]).id,
|
||||||
|
outcontract_picking_type_in = self.env.ref(
|
||||||
|
'sf_manufacturing.outcontract_picking_in').id,
|
||||||
|
outcontract_picking_type_out = self.env.ref(
|
||||||
|
'sf_manufacturing.outcontract_picking_out').id,
|
||||||
moves_in = self.env['stock.move'].sudo().create(
|
moves_in = self.env['stock.move'].sudo().create(
|
||||||
item._get_stock_move_values_Res(item, location_id, location_dest_id))
|
item._get_stock_move_values_Res(item, location_id, location_dest_id,
|
||||||
|
outcontract_picking_type_in))
|
||||||
moves_out = self.env['stock.move'].sudo().create(
|
moves_out = self.env['stock.move'].sudo().create(
|
||||||
item._get_stock_move_values_Res(item, location_dest_id, location_id))
|
item._get_stock_move_values_Res(item, location_dest_id, location_id,
|
||||||
|
outcontract_picking_type_out))
|
||||||
new_picking = True
|
new_picking = True
|
||||||
picking_in = self.env['stock.picking'].create(moves_in._get_new_picking_values())
|
picking_in = self.env['stock.picking'].create(
|
||||||
picking_out = self.env['stock.picking'].create(moves_out._get_new_picking_values())
|
moves_in._get_new_picking_values_Res(item, sorted_workorders,'WH/OCIN/'))
|
||||||
|
picking_out = self.env['stock.picking'].create(
|
||||||
|
moves_out._get_new_picking_values_Res(item, sorted_workorders, 'WH/OCOUT/'))
|
||||||
moves_in.write({'picking_id': picking_in.id})
|
moves_in.write({'picking_id': picking_in.id})
|
||||||
moves_out.write({'picking_id': picking_out.id})
|
moves_out.write({'picking_id': picking_out.id})
|
||||||
moves_in._assign_picking_post_process(new=new_picking)
|
moves_in._assign_picking_post_process(new=new_picking)
|
||||||
@@ -261,3 +280,20 @@ class ResStockPicking(models.Model):
|
|||||||
m += 1
|
m += 1
|
||||||
sorted_workorders.write({'picking_in_id': picking_in.id, 'picking_out_id': picking_out.id})
|
sorted_workorders.write({'picking_in_id': picking_in.id, 'picking_out_id': picking_out.id})
|
||||||
|
|
||||||
|
|
||||||
|
class ReStockMove(models.Model):
|
||||||
|
_inherit = 'stock.move'
|
||||||
|
|
||||||
|
def _get_new_picking_values_Res(self, item, sorted_workorders, rescode):
|
||||||
|
return {
|
||||||
|
'name': self.env['stock.picking']._get_name_Res(rescode),
|
||||||
|
'origin': item.name,
|
||||||
|
'company_id': self.mapped('company_id').id,
|
||||||
|
'user_id': False,
|
||||||
|
'move_type': self.mapped('group_id').move_type or 'direct',
|
||||||
|
'partner_id': sorted_workorders.supplier_id.id,
|
||||||
|
'picking_type_id': self.mapped('picking_type_id').id,
|
||||||
|
'location_id': self.mapped('location_id').id,
|
||||||
|
'location_dest_id': self.mapped('location_dest_id').id,
|
||||||
|
'state': 'draft',
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user