Files
gzth/yuthon_trade/models/yuthon_task_approval.py
T
2025-08-04 14:48:59 +08:00

62 lines
3.6 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(related="task_id.concentration", string="浓度")
warning_value = fields.Float(related="task_id.warning_value", string="警戒值")
is_outweigh_warning = fields.Boolean(string="是否大于警戒值")
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.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"{employee_names} - {self.task_id.name}"
@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("开始时间不能大于结束时间!")