Merge branch 'develop' of https://e.coding.net/jikimo-hn/jikimo_sfs/jikimo_sf into feature/优化最新版返工

# Conflicts:
#	sf_manufacturing/views/mrp_workorder_view.xml
This commit is contained in:
jinling.yang
2024-07-11 17:38:38 +08:00
173 changed files with 14467 additions and 297 deletions

View File

@@ -124,12 +124,17 @@ class MrpProduction(models.Model):
if (
production.state == 'to_close' or production.state == 'progress') and production.schedule_state == '未排':
production.state = 'confirmed'
elif production.state == 'pending_cam' and production.schedule_state == '未排':
production.state = 'confirmed'
elif production.state == 'to_close' and production.schedule_state == '已排':
production.state = 'pending_cam'
if production.state == 'progress':
if all(wo_state not in ('progress', 'done') for wo_state in production.workorder_ids.mapped('state')):
production.state = 'pending_cam'
if production.state == 'pending_cam':
if all(wo_state in 'done' for wo_state in production.workorder_ids.mapped('state')):
production.state = 'done'
def action_check(self):
"""
@@ -699,7 +704,7 @@ class MrpProduction(models.Model):
logging.info('qty_produced:%s' % production.qty_produced)
production.write({
'date_finished': fields.Datetime.now(),
'product_qty': production.product_qty if production.qty_produced < 1.0 else production.qty_produced,
'product_qty': production.qty_produced,
'priority': '0',
'is_locked': True,
'state': 'done',

View File

@@ -5,24 +5,49 @@ from odoo.addons.resource.models.resource import Intervals
class ResWorkcenter(models.Model):
_inherit = "mrp.workcenter"
_name = "mrp.workcenter"
_inherit = ['mrp.workcenter', 'mail.thread']
# 生产线显示
production_line_show = fields.Char(string='生产线名称')
equipment_id = fields.Many2one(
'maintenance.equipment', string="设备",
)
equipment_id = fields.Many2one('maintenance.equipment', string="设备", tracking=True)
production_line_id = fields.Many2one('sf.production.line', string='生产线',
related='equipment_id.production_line_id', store=True)
is_process_outsourcing = fields.Boolean('工艺外协')
users_ids = fields.Many2many("res.users", 'users_workcenter')
users_ids = fields.Many2many("res.users", 'users_workcenter', tracking=True)
def write(self, vals):
if 'users_ids' in vals:
old_users = self.users_ids
res = super(ResWorkcenter, self).write(vals)
new_users = self.users_ids
added_users = new_users - old_users
removed_users = old_users - new_users
if added_users or removed_users:
message = "增加 → %s ; 移除 → %s (可操作用户)" % (
# ','.join(added_users.mapped('name')), ','.join(removed_users.mapped('name')))
added_users.mapped('name'), removed_users.mapped('name'))
self.message_post(body=message)
return res
return super(ResWorkcenter, self).write(vals)
name = fields.Char('Work Center', related='resource_id.name', store=True, readonly=False, tracking=True)
time_efficiency = fields.Float('Time Efficiency', related='resource_id.time_efficiency', default=100, store=True,
readonly=False, tracking=True)
default_capacity = fields.Float(
'Capacity', default=1.0,
help="Default number of pieces (in product UoM) that can be produced in parallel (at the same time) at this work center. For example: the capacity is 5 and you need to produce 10 units, then the operation time listed on the BOM will be multiplied by two. However, note that both time before and after production will only be counted once.",
tracking=True)
oee_target = fields.Float(
string='OEE Target', help="Overall Effective Efficiency Target in percentage", default=90, tracking=True)
time_start = fields.Float('Setup Time', tracking=True)
time_stop = fields.Float('Cleanup Time', tracking=True)
costs_hour = fields.Float(string='Cost per hour', help='Hourly processing cost.', default=0.0, tracking=True)
equipment_status = fields.Selection(
[("正常", "正常"), ("故障停机", "故障停机"), ("计划维保", "计划维保"),("空闲", "空闲"),("封存(报废)", "封存(报废)")],
[("正常", "正常"), ("故障停机", "故障停机"), ("计划维保", "计划维保"), ("空闲", "空闲"), ("封存(报废)", "封存(报废)")],
string="设备状态", related='equipment_id.state')
# @api.depends('equipment_id')

View File

@@ -165,7 +165,8 @@ class ResMrpWorkOrder(models.Model):
保存名称
"""
for record in self:
record.save_name = record.production_id.name.replace('/', '_')
tem_name = record.production_id.name.replace('/', '_')
record.save_name = tem_name + '_' + record.processing_panel
schedule_state = fields.Selection(related='production_id.schedule_state', store=True)
# 工件装夹信息
@@ -1039,7 +1040,7 @@ class ResMrpWorkOrder(models.Model):
move_raw_id.quantity_done = move_raw_id.product_uom_qty
record.process_state = '已完工'
record.production_id.process_state = '已完工'
if record.routing_type in ['解除装夹', '表面工艺']:
if record.routing_type in ['表面工艺']:
raw_move = self.env['stock.move'].sudo().search(
[('origin', '=', record.production_id.name),
('procure_method', 'in', ['make_to_order', 'make_to_stock']),
@@ -1115,6 +1116,16 @@ class ResMrpWorkOrder(models.Model):
# logging.info('button_send_program_again error:%s' % e)
# raise UserError("重新下发nc程序失败,请联系管理员")
def print_method(self):
"""
解除装夹处调用关联制造订单的关联序列号的打印方法
"""
if self.production_id:
if self.production_id.lot_producing_id:
self.production_id.lot_producing_id.print_single_method()
else:
raise UserError("无关联制造订单或关联序列号,无法打印。请检查!")
class CNCprocessing(models.Model):
_name = 'sf.cnc.processing'

View File

@@ -204,7 +204,8 @@ class StockRule(models.Model):
productions = self.env['mrp.production'].with_user(SUPERUSER_ID).sudo().with_company(company_id).create(
productions_values)
self.env['stock.move'].sudo().create(productions._get_moves_raw_values())
# self.env['stock.move'].sudo().create(productions._get_moves_raw_values())
self.env['stock.move'].sudo().create(productions._get_moves_finished_values())
'''
创建工单
@@ -404,6 +405,7 @@ class ProductionLot(models.Model):
def print_single_method(self):
print('self.name========== %s' % self.name)
self.ensure_one()
qr_code_data = self.qr_code_image
if not qr_code_data: