diff --git a/sf_manufacturing/models/mrp_workorder.py b/sf_manufacturing/models/mrp_workorder.py index ef1f6b6f..e148c581 100644 --- a/sf_manufacturing/models/mrp_workorder.py +++ b/sf_manufacturing/models/mrp_workorder.py @@ -828,11 +828,17 @@ class ResMrpWorkOrder(models.Model): ('state', 'in', ['done'])]) if unclamp_workorder: workorder.state = 'ready' + # else: + # if workorder.state not in ['cancel', 'rework']: + # workorder.state = 'rework' + if workorder.production_id.state == 'pending_cam': + if workorder.routing_type == '装夹预调' and workorder.state in ['ready', 'waiting']: + if workorder.production_id.tool_state in ['1', '2']: + workorder.state = 'waiting' + logging.info('工序:%s' % workorder.sequence) logging.info('工单最终状态:%s' % workorder.state) - # else: - # if workorder.state not in ['cancel', 'rework']: - # workorder.state = 'rework' + # elif workorder.routing_type == 'CNC加工' and workorder.state not in ['done', 'cancel', 'progress', # 'rework']: # per_work = self.env['mrp.workorder'].search( @@ -883,8 +889,12 @@ class ResMrpWorkOrder(models.Model): raise UserError(_('该制造订单还未下发CNC程序,请稍后再试')) else: if self.production_id.tool_state in ['1', '2']: + if self.production_id.tool_state == '1': + state = '缺刀' + else: + state = '无效刀' raise UserError( - f'制造订单【{self.production_id.name}】功能刀具状态为【{self.production_id.tool_state}】!') + f'制造订单【{self.production_id.name}】功能刀具状态为【{state}】!') if self.routing_type == '解除装夹': ''' 记录开始时间 diff --git a/sf_tool_management/models/base.py b/sf_tool_management/models/base.py index 5156a295..83fa3b36 100644 --- a/sf_tool_management/models/base.py +++ b/sf_tool_management/models/base.py @@ -819,7 +819,7 @@ class FunctionalToolDismantle(models.Model): integral_lot_id = fields.Many2one('stock.lot', string='整体式刀具批次', compute='_compute_functional_tool_num', store=True) integral_freight_id = fields.Many2one('sf.shelf.location', '整体式刀具目标货位', - domain="[('product_id', 'in', (integral_product_id, False)),('location_id.name', '=', '刀具房')]") + domain="[('product_id', 'in', (integral_product_id, False)),('rotative_Boolean', '=', True)]") # 刀片 blade_product_id = fields.Many2one('product.product', string='刀片', compute='_compute_functional_tool_num', @@ -829,7 +829,7 @@ class FunctionalToolDismantle(models.Model): blade_brand_id = fields.Many2one('sf.machine.brand', string='刀片品牌', related='blade_product_id.brand_id') blade_lot_id = fields.Many2one('stock.lot', string='刀片批次', compute='_compute_functional_tool_num', store=True) blade_freight_id = fields.Many2one('sf.shelf.location', '刀片目标货位', - domain="[('product_id', 'in', (blade_product_id, False)),('location_id.name', '=', '刀具房')]") + domain="[('product_id', 'in', (blade_product_id, False)),('rotative_Boolean', '=', True)]") # 刀杆 bar_product_id = fields.Many2one('product.product', string='刀杆', compute='_compute_functional_tool_num', @@ -839,7 +839,7 @@ class FunctionalToolDismantle(models.Model): bar_brand_id = fields.Many2one('sf.machine.brand', string='刀杆品牌', related='bar_product_id.brand_id') bar_lot_id = fields.Many2one('stock.lot', string='刀杆批次', compute='_compute_functional_tool_num', store=True) bar_freight_id = fields.Many2one('sf.shelf.location', '刀杆目标货位', - domain="[('product_id', 'in', (bar_product_id, False)),('location_id.name', '=', '刀具房')]") + domain="[('product_id', 'in', (bar_product_id, False)),('rotative_Boolean', '=', True)]") # 刀盘 pad_product_id = fields.Many2one('product.product', string='刀盘', compute='_compute_functional_tool_num', @@ -849,7 +849,7 @@ class FunctionalToolDismantle(models.Model): pad_brand_id = fields.Many2one('sf.machine.brand', string='刀盘品牌', related='pad_product_id.brand_id') pad_lot_id = fields.Many2one('stock.lot', string='刀盘批次', compute='_compute_functional_tool_num', store=True) pad_freight_id = fields.Many2one('sf.shelf.location', '刀盘目标货位', - domain="[('product_id', 'in', (pad_product_id, False)),('location_id.name', '=', '刀具房')]") + domain="[('product_id', 'in', (pad_product_id, False)),('rotative_Boolean', '=', True)]") # 夹头 chuck_product_id = fields.Many2one('product.product', string='夹头', compute='_compute_functional_tool_num', @@ -859,7 +859,7 @@ class FunctionalToolDismantle(models.Model): chuck_brand_id = fields.Many2one('sf.machine.brand', string='夹头品牌', related='chuck_product_id.brand_id') chuck_lot_id = fields.Many2one('stock.lot', string='夹头批次', compute='_compute_functional_tool_num', store=True) chuck_freight_id = fields.Many2one('sf.shelf.location', '夹头目标货位', - domain="[('product_id', 'in', (chuck_product_id, False)),('location_id.name', '=', '刀具房')]") + domain="[('product_id', 'in', (chuck_product_id, False)),('rotative_Boolean', '=', True)]") @api.onchange('functional_tool_id') def _onchange_freight(self): diff --git a/sf_warehouse/models/model.py b/sf_warehouse/models/model.py index 79d7f2c6..5beeebc5 100644 --- a/sf_warehouse/models/model.py +++ b/sf_warehouse/models/model.py @@ -254,6 +254,7 @@ class SfShelf(models.Model): shelf_height = fields.Float(string='货架高度(m)') shelf_layer = fields.Integer(string='货架层数') layer_capacity = fields.Integer(string='层数容量') + shelf_rotative_Boolean = fields.Boolean('循环货架', default=False) # 是否有货位 is_there_area = fields.Boolean(string='是否有货位', compute='_compute_is_there_area', default=False, store=True) @@ -361,6 +362,7 @@ class ShelfLocation(models.Model): name = fields.Char('货位名称', required=True, size=20) barcode = fields.Char('货位编码', copy=False, size=50) + rotative_Boolean = fields.Boolean('循环货位', related='shelf_id.shelf_rotative_Boolean', store=True) qr_code = fields.Binary(string='二维码', compute='_compute_location_qr_code', store=True) # 货架 diff --git a/sf_warehouse/views/shelf_location.xml b/sf_warehouse/views/shelf_location.xml index 418f7d5c..747c25a2 100644 --- a/sf_warehouse/views/shelf_location.xml +++ b/sf_warehouse/views/shelf_location.xml @@ -23,6 +23,7 @@ + @@ -169,6 +170,7 @@ +