104 lines
4.5 KiB
Python
104 lines
4.5 KiB
Python
# -*- coding: utf-8 -*-
|
|
from datetime import timedelta
|
|
|
|
from odoo import models, fields, _, exceptions
|
|
|
|
|
|
class HrReasonsLateness(models.Model):
|
|
_name = 'hr.reasons.lateness'
|
|
_rec_name = 'reasons'
|
|
_inherit = ['mail.thread', 'mail.activity.mixin']
|
|
|
|
request_date = fields.Date(default=lambda self: fields.Date.today())
|
|
latest_date = fields.Date()
|
|
reasons = fields.Text()
|
|
from_hr_depart = fields.Boolean(string='Another Employee')
|
|
department_id = fields.Many2one(related="employee_id.department_id", readonly=True, store=True)
|
|
job_id = fields.Many2one(related="employee_id.job_id", readonly=True)
|
|
employee_id = fields.Many2one('hr.employee', 'Employee Id', default=lambda item: item.get_user_id())
|
|
manager_id = fields.Many2one('hr.employee', string='Direct Manager', related='employee_id.parent_id', store=True,
|
|
readonly=True,
|
|
domain="['|', ('company_id', '=', False), ('company_id', '=', company_id)]")
|
|
state = fields.Selection([('draft', _('Draft')),
|
|
('send', _('Waiting Direct Manager')),
|
|
('direct_manager', _('Waiting HR')),
|
|
('hr_manager', _('Approved')),
|
|
('refused', _('Refused'))], default="draft", tracking=True)
|
|
company_id = fields.Many2one(related='employee_id.company_id')
|
|
employee_no = fields.Char(related='employee_id.emp_no', string='Employee Number', store=True)
|
|
is_branch = fields.Many2one(related='department_id.branch_name', store=True, readonly=True)
|
|
|
|
def unlink(self):
|
|
for rec in self:
|
|
if rec.state != 'draft':
|
|
raise exceptions.Warning(_('You can not delete record in state not in draft'))
|
|
return super(HrReasonsLateness, self).unlink()
|
|
|
|
def get_user_id(self):
|
|
employee_id = self.env['hr.employee'].search([('user_id', '=', self.env.uid)], limit=1)
|
|
if employee_id:
|
|
return employee_id.id
|
|
else:
|
|
return False
|
|
|
|
def draft_state(self):
|
|
self.state = "draft"
|
|
self.call_cron_function()
|
|
|
|
def button_submit(self):
|
|
self.state = "send"
|
|
|
|
def hr_manager(self):
|
|
self.state = "hr_manager"
|
|
self.call_cron_function()
|
|
hr_attendance_transaction = self.env['hr.attendance.transaction'].search(
|
|
[('employee_id', '=', self.employee_id.id), ('date', '=', self.latest_date), ('sequence', '=', 1)],
|
|
limit=1)
|
|
hr_attendance_transaction.write({'justification':True})
|
|
|
|
def call_cron_function(self):
|
|
transaction = self.env['hr.attendance.transaction']
|
|
start_date = self.request_date
|
|
end_date = self.latest_date
|
|
delta = end_date - start_date
|
|
for i in range(delta.days + 1):
|
|
day = start_date + timedelta(days=i)
|
|
transaction.process_attendance_scheduler_queue(day, self.employee_id)
|
|
|
|
def direct_manager(self):
|
|
for rec in self:
|
|
manager = rec.sudo().employee_id.parent_id
|
|
hr_manager = rec.sudo().employee_id.company_id.hr_manager_id
|
|
if (manager.user_id.id == rec.env.uid or hr_manager.user_id.id == rec.env.uid):
|
|
rec.write({'state': 'direct_manager'})
|
|
else:
|
|
raise exceptions.Warning(
|
|
_("Sorry, The Approval For The Direct Manager '%s' Only OR HR Manager!") % (
|
|
rec.employee_id.parent_id.name))
|
|
|
|
def set_to_draft(self):
|
|
self.state = "draft"
|
|
self.call_cron_function()
|
|
hr_attendance_transaction = self.env['hr.attendance.transaction'].search(
|
|
[('employee_id', '=', self.employee_id.id), ('date', '=', self.latest_date), ('sequence', '=', 1)],
|
|
limit=1)
|
|
hr_attendance_transaction.write({'justification': False})
|
|
|
|
def refused(self):
|
|
self.state = "refused"
|
|
|
|
def action_open_related_attendance_transaction(self):
|
|
hr_attendance_transaction = self.env['hr.attendance.transaction'].search(
|
|
[('employee_id', '=', self.employee_id.id), ('date', '=', self.latest_date),('sequence','=',1)],limit=1)
|
|
action = {
|
|
'type': 'ir.actions.act_window',
|
|
'name': _('Attendance Transaction'),
|
|
'res_model': 'hr.attendance.transaction',
|
|
'view_mode': 'form',
|
|
'view_type': 'form',
|
|
'view_id': self.env.ref('attendances.employee_attendance_transactions_form_view').id,
|
|
'res_id': hr_attendance_transaction.id,
|
|
'target': 'current',
|
|
}
|
|
return action
|