78 lines
3.2 KiB
Python
78 lines
3.2 KiB
Python
#!/usr/bin/env python
|
|
# -*- coding:utf-8 -*-
|
|
# @FileName :planning_slot.py
|
|
# @Time :2025/1/12 下午3:18
|
|
# @Author :zzw
|
|
from odoo import models, fields, api, _
|
|
from typing import Dict, List
|
|
from datetime import timedelta
|
|
|
|
|
|
class TxPlanningSlot(models.Model):
|
|
_inherit = "planning.slot"
|
|
_order = 'resource_id'
|
|
|
|
@api.model
|
|
@api.returns('self')
|
|
def search_fetch(self, domain, field_names, offset=0, limit=None, order=None):
|
|
if self._context.get('show_job_title', False):
|
|
if not order:
|
|
order = 'resource_id'
|
|
return super().search_fetch(domain, field_names, offset, limit, order)
|
|
|
|
def web_read(self, specification: Dict[str, Dict]) -> List[Dict]:
|
|
res = super().web_read(specification)
|
|
if self._context.get('show_job_title', False):
|
|
if res and res[0].get('resource_id', {}).get('id'):
|
|
data_list = [r.get('resource_id', {}).get('id') for r in res if r.get('resource_id', {})]
|
|
self.env['resource.resource'].search([('id', 'in', data_list)], order="sequence,name")
|
|
return res
|
|
|
|
def action_compensatory_leave(self):
|
|
"""
|
|
补休按钮 - 打开假期分配表单,填写补休信息后验证写入考勤确认单台账
|
|
"""
|
|
self.ensure_one()
|
|
# 从排班资源获取员工
|
|
employee = self.resource_id.employee_id if self.resource_id else None
|
|
if not employee:
|
|
return {
|
|
'type': 'ir.actions.client',
|
|
'tag': 'display_notification',
|
|
'params': {
|
|
'title': '提示',
|
|
'message': '该排班未关联有效员工,无法创建补休申请',
|
|
'sticky': False,
|
|
'type': 'warning',
|
|
}
|
|
}
|
|
# 获取排班日期
|
|
slot_date = (self.start_datetime + timedelta(hours=8)).date() if self.start_datetime else None
|
|
# 获取"补休"假期类型
|
|
holiday_status_id = self.env['hr.leave.type'].search([('name', '=', '补休')])
|
|
# 获取 hr.leave.allocation 的 form 视图
|
|
form_id = self.env.ref('hr_holidays.hr_leave_allocation_view_form_manager').id
|
|
return {
|
|
'type': 'ir.actions.act_window',
|
|
'name': '计划班调补休申请',
|
|
'res_model': 'hr.leave.allocation',
|
|
'view_mode': 'form',
|
|
'views': [(form_id, 'form')],
|
|
'target': 'current',
|
|
'context': {
|
|
'default_holiday_status_id': holiday_status_id.id,
|
|
'default_employee_ids': [(6, 0, [employee.id])],
|
|
'default_employee_id': employee.id,
|
|
'default_allocation_type': 'regular',
|
|
'default_name': '计划班调补休',
|
|
'default_number_of_days_display': 8,
|
|
'default_date_from': slot_date,
|
|
},
|
|
}
|
|
|
|
@api.depends('role_id', 'employee_id')
|
|
def _compute_template_autocomplete_ids(self):
|
|
domain = self._get_domain_template_slots()
|
|
templates = self.env['planning.slot.template'].search(domain, order='start_time', limit=15)
|
|
self.template_autocomplete_ids = templates + self.template_id
|