From f2218f7afb93b46bb1a045fb1d63657b318240f4 Mon Sep 17 00:00:00 2001 From: "jinling.yang" Date: Wed, 17 May 2023 14:18:23 +0800 Subject: [PATCH] =?UTF-8?q?=E5=87=BA=E5=85=A5=E5=BA=93=E5=8D=95=E6=96=B0?= =?UTF-8?q?=E5=A2=9E=E9=AA=8C=E8=AF=81=E5=8F=8A=E5=8D=95=E4=B8=AA=E5=A4=96?= =?UTF-8?q?=E5=8D=8F=E8=A1=A8=E9=9D=A2=E5=B7=A5=E8=89=BABug=E4=BF=AE?= =?UTF-8?q?=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- odoo.conf | 2 +- sf_manufacturing/data/stock_data.xml | 11 +++++---- sf_manufacturing/models/mrp_production.py | 5 ++++- sf_manufacturing/models/mrp_workorder.py | 5 ++--- sf_manufacturing/models/stock.py | 27 ++++++++++++++++------- 5 files changed, 31 insertions(+), 19 deletions(-) diff --git a/odoo.conf b/odoo.conf index 04690e69..ac0ba724 100644 --- a/odoo.conf +++ b/odoo.conf @@ -4,7 +4,7 @@ csv_internal_sep = , data_dir = /var/lib/odoo db_host = 172.17.0.2 db_maxconn = 64 -db_name = sf_dev_odoo +db_name = sf_cs_dev db_password = sf db_port = 5432 db_sslmode = prefer diff --git a/sf_manufacturing/data/stock_data.xml b/sf_manufacturing/data/stock_data.xml index a50a948d..8efbdd55 100644 --- a/sf_manufacturing/data/stock_data.xml +++ b/sf_manufacturing/data/stock_data.xml @@ -1,6 +1,11 @@ + + YourCompany Sequence ocout + WH/OCOUT/ + 5 + YourCompany Sequence ocin @@ -8,12 +13,6 @@ 5 - - YourCompany Sequence ocout - WH/OCOUT/ - 5 - - 外协 diff --git a/sf_manufacturing/models/mrp_production.py b/sf_manufacturing/models/mrp_production.py index 04cb1f48..71576d03 100644 --- a/sf_manufacturing/models/mrp_production.py +++ b/sf_manufacturing/models/mrp_production.py @@ -214,7 +214,10 @@ class MrpProduction(models.Model): if m == len(consecutive_workorders) - 1 and m != 0: self.env['stock.picking'].create_outcontract_picking(consecutive_workorders, production) if is_pick is False and m == 0: - self.env['stock.picking'].create_outcontract_picking(sorted_workorders[i], production) + if len(sorted_workorders) == 1: + self.env['stock.picking'].create_outcontract_picking(sorted_workorders, production) + else: + self.env['stock.picking'].create_outcontract_picking(sorted_workorders[i], production) for workorder in production.workorder_ids: workorder.duration_expected = workorder._get_duration_expected() diff --git a/sf_manufacturing/models/mrp_workorder.py b/sf_manufacturing/models/mrp_workorder.py index 3e7edd2d..ad9f2253 100644 --- a/sf_manufacturing/models/mrp_workorder.py +++ b/sf_manufacturing/models/mrp_workorder.py @@ -437,9 +437,8 @@ class ResMrpWorkOrder(models.Model): # 外协出库单,从“正在等待”变为“就绪”状态 if self.is_subcontract is True: picking_out = self.env['stock.picking'].search([('id', '=', self.picking_out_id.id)]) - if picking_out: - if picking_out.state == 'confirmed': - picking_out.write({'state': 'assigned'}) + if picking_out.state == 'confirmed': + picking_out.write({'state': 'assigned'}) if self.state == 'waiting' or self.state == 'ready' or self.state == 'progress': self.move_raw_ids = self.production_id.move_raw_ids self.ensure_one() diff --git a/sf_manufacturing/models/stock.py b/sf_manufacturing/models/stock.py index e4da2a35..6fdfbd8d 100644 --- a/sf_manufacturing/models/stock.py +++ b/sf_manufacturing/models/stock.py @@ -239,27 +239,38 @@ class StockPicking(models.Model): # 设置外协出入单的名称 def _get_name_Res(self, rescode): - count = self.env['stock.picking'].search_count([('name', 'like', rescode)]) - logging.info('count:' + str(count)) - if not count: + last_picking = self.sudo().search([('name', 'like', rescode)], order='create_date DESC', limit=1) + logging.info('编号:' + last_picking.name) + if not last_picking: num = "%04d" % 1 else: - m = int(count) + 1 + m = int(last_picking.name[-3:]) + 1 num = "%04d" % m return '%s%s' % (rescode, num) def button_validate(self): + # 出库单验证 if self.workorder_out_id: workorder_in = self.workorder_out_id.filtered(lambda p: p.state == 'progress' and p.is_subcontract is True) if workorder_in: - picking_in = self.env['stock.picking'].search([('id', '=', workorder_in.picking_in_id.id)]) + picking_in = self.sudo().search([('id', '=', workorder_in.picking_in_id.id)]) if picking_in: picking_in.write({'state': 'assigned'}) else: workorder_subcontract = self.workorder_out_id.filtered( lambda p: p.state == 'pending' and p.is_subcontract is True) if workorder_subcontract: - raise UserError(_('该出库单对应的工单还未开始,不能进行验证操作!')) + raise UserError( + _('该出库单里源单据内的单号为%s的工单还未开始,不能进行验证操作!' % workorder_subcontract[0].name)) + # 入库单验证 + if self.workorder_in_id: + workorder_out = self.workorder_in_id.filtered(lambda p: p.state == 'progress' and p.is_subcontract is True) + if workorder_out: + picking_out = self.sudo().search([('id', '=', workorder_out.picking_out_id.id)]) + if picking_out.state != 'done': + raise UserError( + _('该入库单对应的单号为%s的出库单还未完成,不能进行验证操作!' % picking_out.name)) + res = super().button_validate() return res @@ -286,9 +297,9 @@ class StockPicking(models.Model): item._get_stock_move_values_Res(item, location_dest_id, location_id, outcontract_picking_type_out)) new_picking = True - picking_in = self.env['stock.picking'].create( + picking_in = self.create( moves_in._get_new_picking_values_Res(item, sorted_workorders, 'WH/OCIN/')) - picking_out = self.env['stock.picking'].create( + picking_out = self.create( moves_out._get_new_picking_values_Res(item, sorted_workorders, 'WH/OCOUT/')) moves_in.write({'picking_id': picking_in.id, 'state': 'confirmed'}) moves_out.write({'picking_id': picking_out.id, 'state': 'confirmed'})