87 lines
4.5 KiB
Python
87 lines
4.5 KiB
Python
# -*- coding: utf-8 -*-
|
|
|
|
from odoo import api, fields, models, tools
|
|
from odoo.exceptions import ValidationError
|
|
from datetime import datetime
|
|
|
|
|
|
class HolidayManage(models.Model):
|
|
_name = "holiday.manage"
|
|
_description = '假期管理'
|
|
_rec_name = 'name'
|
|
|
|
# 基础信息设置
|
|
name = fields.Char(string="假期名称")
|
|
# 范围,角色,部门,人员
|
|
department_ids = fields.Many2many('hr.department', string='部门范围')
|
|
employee_ids = fields.Many2many('hr.employee', string='人员范围')
|
|
users_role_ids = fields.Many2many('soong.user.role', string='角色范围')
|
|
holiday_users_ids = fields.Many2many('res.users', string="申请假期人员", compute="compute_holiday_users_ids", store=True)
|
|
|
|
is_limit = fields.Boolean(string="新员工请假是否限制", help='入职即可请假')
|
|
leave_time = fields.Selection(selection=[(str(i), str(i)) for i in range(1, 13)], string="入职月份", help='入职时长小于此月份时,不可申请此假期')
|
|
start_time = fields.Datetime(string="生效日期", default=fields.Datetime.now)
|
|
end_time = fields.Datetime(string="失效日期",)
|
|
is_enable = fields.Boolean(string="是否启用", default="False", compute="compute_is_enable", store=True)
|
|
# 请假时长核算规则
|
|
leave_unit = fields.Selection([('day', '按天'), ('hours', '按小时')], string="请假单位")
|
|
unit_conversion = fields.Float(string="单位换算", help='将按此规则对天与小时进行转换,有打卡规则按工作时长计算')
|
|
time_long = fields.Selection([('nature', '自然日'), ('work', '工作日')], string="时长计算")
|
|
# 假期余额发放规则
|
|
|
|
is_quota = fields.Boolean(string="是否限额")
|
|
issuance_method = fields.Selection([('moth', '按月自动发放'), ('year', '按年自动发放'), ('manual', '手动导入余额')], string='发放方式')
|
|
# 按月自动发放
|
|
|
|
# 按年自动发放
|
|
|
|
# valid = fields.Selection([('forever', '永久有效'), ('no', '每年固定日期生效')], string="假期有效期")
|
|
# release_time = fields.Selection([('calendar', '自然年'), ('onboard', '员工入职日期发放')], string="发放时间")
|
|
# credit_rules = fields.Selection([('fixed', '固定额度'), ('division', '按司龄发放'),('seniority','按工龄发放')], string="额度计算规则")
|
|
# person_year = fields.Float(string="每人每年发放")
|
|
# is_balance= fields.Boolean(string="按实际工作时长发放余额")
|
|
# valid_holidays = fields.Integer(string="假期有效期")
|
|
# is_time = fields.Boolean(string="允许有效时长")
|
|
|
|
|
|
@api.depends('department_ids', 'employee_ids', 'users_role_ids')
|
|
def compute_holiday_users_ids(self):
|
|
department_users_list = users_role_list = []
|
|
for users in self:
|
|
if users.department_ids:
|
|
# 查看是否下级部门
|
|
for depart in users.department_ids:
|
|
department_users_data = users.env['hr.employee'].search([('department_id', '=', depart.id.origin)])
|
|
department_users_list = [de.user_id.id for de in department_users_data]
|
|
if depart.child_ids:
|
|
for child in depart.child_ids:
|
|
department_child_users_data = users.env['hr.employee'].search(
|
|
[('department_id', '=', child.id.origin)])
|
|
department_users_list += [de.user_id.id for de in department_child_users_data]
|
|
employee_users_list = users.employee_ids.user_id.ids
|
|
if users.users_role_ids:
|
|
for user_id in users.users_role_ids:
|
|
user_role_data = users.env['hr.employee'].search(
|
|
['|', ('user_role_id', '=', user_id.id.origin), ('user_role_ids', '=', user_id.id.origin)])
|
|
users_role_list = [ro.user_id.id for ro in user_role_data]
|
|
publish_user_list = department_users_list + employee_users_list + users_role_list
|
|
false_none_list = [x for x in publish_user_list if x != False]
|
|
users.room_users_ids = [(6, 0, list(set(false_none_list)))]
|
|
|
|
@api.depends('start_time', 'end_time')
|
|
def compute_is_enable(self):
|
|
for rec in self:
|
|
if rec.start_time and rec.end_time:
|
|
if rec.start_time < datetime.now() and rec.end_time > datetime.now():
|
|
rec.is_enable = True
|
|
else:
|
|
rec.is_enable = False
|
|
else:
|
|
rec.is_enable = False
|
|
|
|
|
|
|
|
|
|
|
|
|