80 lines
4.3 KiB
Python
80 lines
4.3 KiB
Python
# -*- coding: utf-8 -*-
|
|
# Part of Odoo. See LICENSE file for full copyright and licensing details.
|
|
from datetime import datetime, timedelta, time
|
|
from odoo import models, fields, api, exceptions, _
|
|
|
|
class YuthonTaskApproval(models.Model):
|
|
_name = 'yuthon.task.approval'
|
|
_description = '作业审批表'
|
|
_inherit = ['soong.workflow.mixin', 'mail.thread.main.attachment', 'mail.activity.mixin']
|
|
_rec_name = 'name'
|
|
|
|
name = fields.Char(string='标题')
|
|
code = fields.Char(string="作业编号",
|
|
default=lambda self: self.env['ir.sequence'].next_by_code('yuthon_task_approval_code'))
|
|
users_id = fields.Many2one('res.users', string="申请人", default=lambda self: self.env.user.id)
|
|
company_id = fields.Many2one(related='users_id.employee_id.company_id', string="公司")
|
|
department_id = fields.Many2one(related='users_id.employee_id.department_id', string="部门")
|
|
document_ids = fields.Many2many('ir.attachment', string="附件")
|
|
start_time = fields.Date(string="申请时间", default=fields.Datetime.today())
|
|
employee_ids = fields.Many2many('hr.employee', string="作业人员")
|
|
task_id = fields.Many2one('yuthon.task.setting', string="作业项目")
|
|
stack_position_ids = fields.Many2many('yuthon.stack.position', string="作业堆位")
|
|
task_start_time = fields.Datetime(string="作业开始时间", default=lambda self: fields.Datetime.to_string(datetime.combine(datetime.now().date(), time(0, 30))))
|
|
task_end_time = fields.Datetime(string="作业结束时间", default=lambda self: fields.Datetime.to_string(datetime.combine(datetime.now().date(), time(8, 30))))
|
|
urgency_level = fields.Selection([('normal', '普件'), ('urgent', '急件'), ('emergency', '特急件')], string='紧急度',
|
|
default='normal')
|
|
active = fields.Boolean('Active', default=True, tracking=True)
|
|
work_end = fields.Boolean(string="结束")
|
|
duration = fields.Float(string="时长", store=True, compute='_compute_duration')
|
|
concentration = fields.Float( string="浓度")
|
|
warning_value = fields.Float(string="警戒值")
|
|
symbol = fields.Selection([('outweigh', '>'), ('less', '<'), ('equals', '=')], string="符号", compute='_compute_symbol')
|
|
def _get_default_name_title(self):
|
|
return self._description if self._description else self._name
|
|
|
|
name_title = fields.Char(default=_get_default_name_title)
|
|
self_users_ids = fields.Many2many('res.users', string="当前经办人", default=lambda self: [(6, 0, [self.env.user.id])])
|
|
|
|
@api.depends('concentration', 'warning_value')
|
|
def _compute_symbol(self):
|
|
for record in self:
|
|
if record.concentration and record.warning_value:
|
|
if record.concentration > record.warning_value:
|
|
record.symbol = 'outweigh'
|
|
elif record.concentration < record.warning_value:
|
|
record.symbol = 'less'
|
|
else:
|
|
record.symbol = 'equals'
|
|
else:
|
|
record.symbol = False
|
|
|
|
|
|
@api.onchange('task_id')
|
|
def _onchange_task_id(self):
|
|
if self.task_id:
|
|
self.concentration = self.task_id.concentration
|
|
self.warning_value = self.task_id.warning_value
|
|
|
|
@api.onchange('employee_ids', 'task_id')
|
|
def _onchange_employee_task(self):
|
|
if self.employee_ids and self.task_id:
|
|
employee_names = ', '.join(self.employee_ids.mapped('name'))
|
|
self.name = f"{self.task_id.name} - {employee_names}"
|
|
|
|
@api.depends('task_start_time', 'task_end_time')
|
|
def _compute_duration(self):
|
|
for record in self:
|
|
if record.task_start_time and record.task_end_time:
|
|
start = fields.Datetime.to_datetime(record.task_start_time)
|
|
end = fields.Datetime.to_datetime(record.task_end_time)
|
|
delta = end - start
|
|
record.duration = delta.total_seconds() / 3600
|
|
else:
|
|
record.duration = 0
|
|
|
|
@api.constrains('task_start_time', 'task_end_time')
|
|
def _check_task_end_time(self):
|
|
for record in self:
|
|
if record.task_start_time and record.task_end_time and record.task_start_time > record.task_end_time:
|
|
raise models.ValidationError("开始时间不能大于结束时间!") |