Files
gzth/tx_planning_resource/models/planning_slot.py
T
2026-06-02 18:22:34 +08:00

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