Merge branch 'develop' of https://e.coding.net/jikimo-hn/jikimo_sfs/jikimo_sf into feature/新增工件装夹
This commit is contained in:
@@ -4,10 +4,12 @@ import base64
|
||||
from odoo import api, fields, models, SUPERUSER_ID, _
|
||||
from odoo.exceptions import UserError
|
||||
import logging
|
||||
from datetime import date, datetime, timedelta
|
||||
import requests
|
||||
import json
|
||||
from odoo.addons.sf_base.commons.common import Common
|
||||
|
||||
|
||||
class SfMaintenanceEquipmentCategory(models.Model):
|
||||
_inherit = 'maintenance.equipment.category'
|
||||
_description = '设备类别'
|
||||
@@ -20,6 +22,7 @@ class SfMaintenanceEquipment(models.Model):
|
||||
_description = '设备'
|
||||
|
||||
crea_url = "/api/machine_tool/create"
|
||||
|
||||
def get_no(self):
|
||||
partner = self.env['maintenance.equipment'].sudo().search(
|
||||
[('MTcode', '!=', '')],
|
||||
@@ -33,19 +36,23 @@ class SfMaintenanceEquipment(models.Model):
|
||||
num = "%04d" % m
|
||||
return num
|
||||
|
||||
equipment_maintenance_standards_ids = fields.Many2many('equipment.maintenance.standards', 'sf_maintenance_equipment_ids', string='设备维保标准')
|
||||
eq_maintenance_id =fields.Many2one('equipment.maintenance.standards', string='设备保养标准', domain="[('maintenance_type','=','保养')]")
|
||||
equipment_maintenance_standards_ids = fields.Many2many('equipment.maintenance.standards',
|
||||
'sf_maintenance_equipment_ids', string='设备维保标准')
|
||||
eq_maintenance_id = fields.Many2one('equipment.maintenance.standards', string='设备保养标准',
|
||||
domain="[('maintenance_type','=','保养')]")
|
||||
overhaul_date = fields.Date(string='下次预防检修')
|
||||
overhaul_period = fields.Integer(string='预防检修频次')
|
||||
overhaul_duration = fields.Float(string='检修时长')
|
||||
|
||||
overhaul_id = fields.Many2one('equipment.maintenance.standards', string='设备检修标准', domain="[('maintenance_type','=','检修')]")
|
||||
overhaul_id = fields.Many2one('equipment.maintenance.standards', string='设备检修标准',
|
||||
domain="[('maintenance_type','=','检修')]")
|
||||
|
||||
@api.onchange('eq_maintenance_id', 'overhaul_id')
|
||||
def _compute_equipment_maintenance_standards_ids(self):
|
||||
for record in self:
|
||||
if record.eq_maintenance_id and record.overhaul_id:
|
||||
record.equipment_maintenance_standards_ids = [(6, 0, [record.eq_maintenance_id.id, record.overhaul_id.id])]
|
||||
record.equipment_maintenance_standards_ids = [
|
||||
(6, 0, [record.eq_maintenance_id.id, record.overhaul_id.id])]
|
||||
break
|
||||
if record.eq_maintenance_id:
|
||||
record.equipment_maintenance_standards_ids = [(6, 0, [record.eq_maintenance_id.id])]
|
||||
@@ -56,12 +63,10 @@ class SfMaintenanceEquipment(models.Model):
|
||||
else:
|
||||
record.equipment_maintenance_standards_ids = False
|
||||
|
||||
|
||||
|
||||
MTcode = fields.Char("编码", default=get_no)
|
||||
created_user = fields.Many2one('res.users', string='创建人', default=lambda self: self.env.user)
|
||||
equipment_type = fields.Selection([('机床', '机床')], related='category_id.equipment_type')
|
||||
code = fields.Char('行业编码')
|
||||
code = fields.Char('机台号')
|
||||
name = fields.Char('名称')
|
||||
knife_type = fields.Selection(
|
||||
[("BT40", "BT40"), ("BT30", "BT30")],
|
||||
@@ -139,7 +144,16 @@ class SfMaintenanceEquipment(models.Model):
|
||||
control_system_id = fields.Many2one('sf.machine.control_system',
|
||||
string="控制系统")
|
||||
active = fields.Boolean('有效', default=True)
|
||||
code = fields.Char('编码')
|
||||
|
||||
def name_get(self):
|
||||
result = []
|
||||
for parameter in self:
|
||||
if parameter.code:
|
||||
name = parameter.name + '-' + parameter.code
|
||||
else:
|
||||
name = parameter.name
|
||||
result.append((parameter.id, name))
|
||||
return result
|
||||
|
||||
@api.constrains('rotate_speed')
|
||||
def _check_rotate_speed(self):
|
||||
@@ -279,7 +293,6 @@ class SfMaintenanceEquipment(models.Model):
|
||||
'tool_diameter_max': item.tool_diameter_max,
|
||||
'machine_tool_category': item.machine_tool_category.code,
|
||||
|
||||
|
||||
}
|
||||
machine_tool_list.append(val)
|
||||
# kw = machine_tool_list
|
||||
@@ -293,4 +306,168 @@ class SfMaintenanceEquipment(models.Model):
|
||||
else:
|
||||
raise UserError("没有注册机床信息")
|
||||
|
||||
# 修改原生方法,生成维保日期
|
||||
@api.depends('effective_date', 'period', 'maintenance_ids.request_date', 'maintenance_ids.close_date',
|
||||
'overhaul_period')
|
||||
def _compute_next_maintenance(self):
|
||||
date_now = fields.Date.context_today(self)
|
||||
equipments = self.filtered(lambda x: x.period > 0)
|
||||
if equipments:
|
||||
for equipment in equipments:
|
||||
next_maintenance_todo = self.env['maintenance.request'].search([
|
||||
('equipment_id', '=', equipment.id),
|
||||
('sf_maintenance_type', '=', '保养'),
|
||||
('stage_id.done', '!=', True),
|
||||
('close_date', '=', False)], order="request_date asc", limit=1)
|
||||
last_maintenance_done = self.env['maintenance.request'].search([
|
||||
('equipment_id', '=', equipment.id),
|
||||
('sf_maintenance_type', '=', '保养'),
|
||||
('stage_id.done', '=', True),
|
||||
('close_date', '!=', False)], order="close_date desc", limit=1)
|
||||
if next_maintenance_todo and last_maintenance_done:
|
||||
next_date = next_maintenance_todo.request_date
|
||||
date_gap = next_maintenance_todo.request_date - last_maintenance_done.close_date
|
||||
# If the gap between the last_maintenance_done and the next_maintenance_todo one is bigger than 2 times the period and next request is in the future
|
||||
# We use 2 times the period to avoid creation too closed request from a manually one created
|
||||
if date_gap > timedelta(0) and date_gap > timedelta(
|
||||
days=equipment.period) * 2 and next_maintenance_todo.request_date > date_now:
|
||||
# If the new date still in the past, we set it for today
|
||||
if last_maintenance_done.close_date + timedelta(days=equipment.period) < date_now:
|
||||
next_date = date_now
|
||||
else:
|
||||
next_date = last_maintenance_done.close_date + timedelta(days=equipment.period)
|
||||
elif next_maintenance_todo:
|
||||
next_date = next_maintenance_todo.request_date
|
||||
date_gap = next_maintenance_todo.request_date - date_now
|
||||
# If next maintenance to do is in the future, and in more than 2 times the period, we insert an new request
|
||||
# We use 2 times the period to avoid creation too closed request from a manually one created
|
||||
if date_gap > timedelta(0) and date_gap > timedelta(days=equipment.period) * 2:
|
||||
next_date = date_now + timedelta(days=equipment.period)
|
||||
elif last_maintenance_done:
|
||||
next_date = last_maintenance_done.close_date + timedelta(days=equipment.period)
|
||||
# If when we add the period to the last maintenance done and we still in past, we plan it for today
|
||||
if next_date < date_now:
|
||||
next_date = date_now
|
||||
else:
|
||||
next_date = equipment.effective_date + timedelta(days=equipment.period)
|
||||
equipment.next_action_date = next_date
|
||||
else:
|
||||
self.next_action_date = False
|
||||
overhaul_equipments = self.filtered(lambda x: x.overhaul_period > 0)
|
||||
if overhaul_equipments:
|
||||
for equipment in overhaul_equipments:
|
||||
next_maintenance_todo = self.env['maintenance.request'].search([
|
||||
('equipment_id', '=', equipment.id),
|
||||
('sf_maintenance_type', '=', '检修'),
|
||||
('stage_id.done', '!=', True),
|
||||
('close_date', '=', False)], order="request_date asc", limit=1)
|
||||
last_maintenance_done = self.env['maintenance.request'].search([
|
||||
('equipment_id', '=', equipment.id),
|
||||
('sf_maintenance_type', '=', '检修'),
|
||||
('stage_id.done', '=', True),
|
||||
('close_date', '!=', False)], order="close_date desc", limit=1)
|
||||
if next_maintenance_todo and last_maintenance_done:
|
||||
next_date = next_maintenance_todo.request_date
|
||||
date_gap = next_maintenance_todo.request_date - last_maintenance_done.close_date
|
||||
# If the gap between the last_maintenance_done and the next_maintenance_todo one is bigger than 2 times the period and next request is in the future
|
||||
# We use 2 times the period to avoid creation too closed request from a manually one created
|
||||
if date_gap > timedelta(0) and date_gap > timedelta(
|
||||
days=equipment.overhaul_period) * 2 and next_maintenance_todo.request_date > date_now:
|
||||
# If the new date still in the past, we set it for today
|
||||
if last_maintenance_done.close_date + timedelta(days=equipment.overhaul_period) < date_now:
|
||||
next_date = date_now
|
||||
else:
|
||||
next_date = last_maintenance_done.close_date + timedelta(days=equipment.overhaul_period)
|
||||
elif next_maintenance_todo:
|
||||
next_date = next_maintenance_todo.request_date
|
||||
date_gap = next_maintenance_todo.request_date - date_now
|
||||
# If next maintenance to do is in the future, and in more than 2 times the period, we insert an new request
|
||||
# We use 2 times the period to avoid creation too closed request from a manually one created
|
||||
if date_gap > timedelta(0) and date_gap > timedelta(days=equipment.overhaul_period) * 2:
|
||||
next_date = date_now + timedelta(days=equipment.overhaul_period)
|
||||
elif last_maintenance_done:
|
||||
next_date = last_maintenance_done.close_date + timedelta(days=equipment.overhaul_period)
|
||||
# If when we add the period to the last maintenance done and we still in past, we plan it for today
|
||||
if next_date < date_now:
|
||||
next_date = date_now
|
||||
else:
|
||||
next_date = equipment.effective_date + timedelta(days=equipment.overhaul_period)
|
||||
equipment.overhaul_date = next_date
|
||||
else:
|
||||
self.overhaul_date = False
|
||||
|
||||
# 拼接维保请求字符串
|
||||
def _prepare_maintenance_request_vals(self, date):
|
||||
self.ensure_one()
|
||||
return {
|
||||
'name': _('Preventive Maintenance - %s', self.name),
|
||||
'request_date': date,
|
||||
'schedule_date': date,
|
||||
'category_id': self.category_id.id,
|
||||
'equipment_id': self.id,
|
||||
'maintenance_type': 'preventive',
|
||||
'owner_user_id': self.owner_user_id.id,
|
||||
'user_id': self.technician_user_id.id,
|
||||
'maintenance_team_id': self.maintenance_team_id.id,
|
||||
'duration': self.maintenance_duration,
|
||||
'company_id': self.company_id.id or self.env.company.id,
|
||||
'equipment_maintenance_id': self.eq_maintenance_id.id,
|
||||
'sf_maintenance_type': '保养'
|
||||
|
||||
}
|
||||
|
||||
# 拼接维保请求字符串
|
||||
|
||||
def _prepare_maintenance_request_vals1(self, date):
|
||||
self.ensure_one()
|
||||
return {
|
||||
'name': _('Preventive Maintenance - %s', self.name),
|
||||
'request_date': date,
|
||||
'schedule_date': date,
|
||||
'category_id': self.category_id.id,
|
||||
'equipment_id': self.id,
|
||||
'maintenance_type': 'preventive',
|
||||
'owner_user_id': self.owner_user_id.id,
|
||||
'user_id': self.technician_user_id.id,
|
||||
'maintenance_team_id': self.maintenance_team_id.id,
|
||||
'duration': self.overhaul_duration,
|
||||
'company_id': self.company_id.id or self.env.company.id,
|
||||
'equipment_maintenance_id': self.overhaul_id.id,
|
||||
'sf_maintenance_type': '检修'
|
||||
}
|
||||
|
||||
# 创建维保请求
|
||||
def _create_new_request(self, date):
|
||||
self.ensure_one()
|
||||
vals = self._prepare_maintenance_request_vals(date)
|
||||
maintenance_requests = self.env['maintenance.request'].create(vals)
|
||||
return maintenance_requests
|
||||
|
||||
def _create_new_request1(self, date):
|
||||
self.ensure_one()
|
||||
vals = self._prepare_maintenance_request_vals1(date)
|
||||
maintenance_requests = self.env['maintenance.request'].create(vals)
|
||||
return maintenance_requests
|
||||
|
||||
# 生成维保请求定时器
|
||||
@api.model
|
||||
def _cron_generate_requests(self):
|
||||
"""
|
||||
Generates maintenance request on the next_action_date or today if none exists
|
||||
"""
|
||||
for equipment in self.search([('period', '>', 0)]):
|
||||
next_requests = self.env['maintenance.request'].search([('stage_id.done', '=', False),
|
||||
('equipment_id', '=', equipment.id),
|
||||
('maintenance_type', '=', 'preventive'),
|
||||
('request_date', '=', equipment.next_action_date),
|
||||
('sf_maintenance_type', '=', '保养')])
|
||||
if not next_requests:
|
||||
equipment._create_new_request(equipment.next_action_date)
|
||||
for equipment in self.search([('overhaul_period', '>', 0)]):
|
||||
next_requests = self.env['maintenance.request'].search([('stage_id.done', '=', False),
|
||||
('equipment_id', '=', equipment.id),
|
||||
('maintenance_type', '=', 'preventive'),
|
||||
('request_date', '=', equipment.overhaul_date),
|
||||
('sf_maintenance_type', '=', '检修')])
|
||||
if not next_requests:
|
||||
equipment._create_new_request1(equipment.overhaul_date)
|
||||
|
||||
Reference in New Issue
Block a user