88 lines
3.4 KiB
Python
88 lines
3.4 KiB
Python
# -*- coding: utf-8 -*-
|
|
# Part of Odoo. See LICENSE file for full copyright and licensing details.
|
|
|
|
from odoo import api, fields, models, tools, SUPERUSER_ID
|
|
|
|
from odoo.addons.base.models.res_partner import _tz_get
|
|
|
|
|
|
class LeaveReportCalendar(models.Model):
|
|
_name = "hr.leave.report.calendar"
|
|
_description = 'Time Off Calendar'
|
|
_auto = False
|
|
_order = "start_datetime DESC, employee_id"
|
|
|
|
name = fields.Char(string='Name', readonly=True)
|
|
start_datetime = fields.Datetime(string='From', readonly=True)
|
|
stop_datetime = fields.Datetime(string='To', readonly=True)
|
|
tz = fields.Selection(_tz_get, string="Timezone", readonly=True)
|
|
duration = fields.Float(string='Duration', readonly=True)
|
|
employee_id = fields.Many2one('hr.employee', readonly=True)
|
|
department_id = fields.Many2one('hr.department', readonly=True)
|
|
job_id = fields.Many2one('hr.job', readonly=True)
|
|
company_id = fields.Many2one('res.company', readonly=True)
|
|
state = fields.Selection([
|
|
('draft', 'To Submit'),
|
|
('cancel', 'Cancelled'), # YTI This state seems to be unused. To remove
|
|
('confirm', 'To Approve'),
|
|
('refuse', 'Refused'),
|
|
('validate1', 'Second Approval'),
|
|
('validate', 'Approved')
|
|
], readonly=True)
|
|
|
|
is_hatched = fields.Boolean('Hatched', readonly=True)
|
|
is_striked = fields.Boolean('Striked', readonly=True)
|
|
|
|
is_absent = fields.Boolean(related='employee_id.is_absent')
|
|
|
|
def init(self):
|
|
tools.drop_view_if_exists(self._cr, 'hr_leave_report_calendar')
|
|
self._cr.execute("""CREATE OR REPLACE VIEW hr_leave_report_calendar AS
|
|
(SELECT
|
|
hl.id AS id,
|
|
CONCAT(em.name, ': ', hl.duration_display) AS name,
|
|
hl.date_from AS start_datetime,
|
|
hl.date_to AS stop_datetime,
|
|
hl.employee_id AS employee_id,
|
|
hl.state AS state,
|
|
hl.department_id AS department_id,
|
|
hl.number_of_days as duration,
|
|
em.company_id AS company_id,
|
|
em.job_id AS job_id,
|
|
COALESCE(
|
|
CASE WHEN hl.holiday_type = 'employee' THEN COALESCE(rr.tz, rc.tz) END,
|
|
cc.tz,
|
|
'UTC'
|
|
) AS tz,
|
|
hl.state = 'refuse' as is_striked,
|
|
hl.state not in ('validate', 'refuse') as is_hatched
|
|
FROM hr_leave hl
|
|
LEFT JOIN hr_employee em
|
|
ON em.id = hl.employee_id
|
|
LEFT JOIN resource_resource rr
|
|
ON rr.id = em.resource_id
|
|
LEFT JOIN resource_calendar rc
|
|
ON rc.id = em.resource_calendar_id
|
|
LEFT JOIN res_company co
|
|
ON co.id = em.company_id
|
|
LEFT JOIN resource_calendar cc
|
|
ON cc.id = co.resource_calendar_id
|
|
WHERE
|
|
hl.state IN ('confirm', 'validate', 'validate1')
|
|
AND hl.active IS TRUE
|
|
);
|
|
""")
|
|
|
|
def _fetch_query(self, query, fields):
|
|
records = super()._fetch_query(query, fields)
|
|
if self.env.context.get('hide_employee_name') and 'employee_id' in self.env.context.get('group_by', []):
|
|
self.env.cache.update(records, self._fields['name'], [
|
|
record.name.split(':')[-1].strip()
|
|
for record in records.with_user(SUPERUSER_ID)
|
|
])
|
|
return records
|
|
|
|
@api.model
|
|
def get_unusual_days(self, date_from, date_to=None):
|
|
return self.env.user.employee_id._get_unusual_days(date_from, date_to)
|