182 lines
3.9 KiB
Python
182 lines
3.9 KiB
Python
from odoo import fields, models, _
|
|
from odoo.exceptions import UserError
|
|
|
|
|
|
class LateComingRequest(models.Model):
|
|
_name = 'late.coming.request'
|
|
_description = 'Late Coming Request'
|
|
_inherit = ['mail.thread', 'mail.activity.mixin']
|
|
_rec_name = 'employee_id'
|
|
|
|
|
|
employee_id = fields.Many2one(
|
|
'hr.employee',
|
|
string="Employee",
|
|
required=True
|
|
)
|
|
|
|
manager_id = fields.Many2one(
|
|
'hr.employee',
|
|
related='employee_id.parent_id',
|
|
store=True,
|
|
string="Manager"
|
|
)
|
|
|
|
department_id = fields.Many2one(
|
|
'hr.department',
|
|
related='employee_id.department_id',
|
|
store=True,
|
|
string="Department"
|
|
)
|
|
|
|
attendance_date = fields.Date(
|
|
string="Attendance Date"
|
|
)
|
|
|
|
check_in = fields.Datetime(
|
|
string="Check In"
|
|
)
|
|
|
|
worked_hours = fields.Float(
|
|
string="Worked Hours"
|
|
)
|
|
|
|
expected_check_in = fields.Float(
|
|
string="Expected Check In"
|
|
)
|
|
|
|
late_minutes = fields.Float(
|
|
string="Late Minutes"
|
|
)
|
|
|
|
department_grace_period = fields.Integer(
|
|
string="Department Grace Period"
|
|
)
|
|
|
|
required_checkout_time = fields.Float(
|
|
string="Required Checkout Time"
|
|
)
|
|
|
|
compensation_pending = fields.Boolean(
|
|
string="Compensation Pending"
|
|
)
|
|
|
|
compensation_minutes = fields.Float(
|
|
string="Compensation Minutes"
|
|
)
|
|
|
|
reason = fields.Text(
|
|
string="Reason"
|
|
)
|
|
|
|
manager_comment = fields.Text(
|
|
string="Manager Comment"
|
|
)
|
|
|
|
status_message = fields.Char(
|
|
string="Status"
|
|
)
|
|
|
|
state = fields.Selection([
|
|
|
|
('draft', 'Draft'),
|
|
|
|
('submitted', 'Submitted'),
|
|
|
|
('approved', 'Approved'),
|
|
|
|
('rejected', 'Rejected')
|
|
|
|
],
|
|
string="Status",
|
|
default='draft'
|
|
)
|
|
|
|
def action_submit(self):
|
|
|
|
for rec in self:
|
|
|
|
if not rec.reason:
|
|
raise UserError(
|
|
_("Please enter reason.")
|
|
)
|
|
|
|
if not rec.manager_id:
|
|
raise UserError(
|
|
_("Manager not configured.")
|
|
)
|
|
|
|
if not rec.manager_id.work_email:
|
|
raise UserError(
|
|
_("Manager work email not configured.")
|
|
)
|
|
|
|
rec.state = 'submitted'
|
|
|
|
template = self.env.ref(
|
|
'grace_period.email_template_late_coming_request'
|
|
)
|
|
|
|
template.send_mail(
|
|
rec.id,
|
|
force_send=True
|
|
)
|
|
rec.message_post(
|
|
body=_("Request Submitted.")
|
|
)
|
|
|
|
def action_approve(self):
|
|
|
|
for rec in self:
|
|
|
|
if (
|
|
rec.manager_id.user_id != self.env.user
|
|
and not self.env.user.has_group(
|
|
'hr.group_hr_manager'
|
|
)
|
|
):
|
|
|
|
raise UserError(
|
|
_("Only Manager or HR can approve.")
|
|
)
|
|
|
|
rec.state = 'approved'
|
|
|
|
def action_reject(self):
|
|
|
|
for rec in self:
|
|
|
|
if (
|
|
rec.manager_id.user_id != self.env.user
|
|
and not self.env.user.has_group(
|
|
'hr.group_hr_manager'
|
|
)
|
|
):
|
|
|
|
raise UserError(
|
|
_("Only Manager or HR can reject.")
|
|
)
|
|
|
|
if not rec.employee_id.work_email:
|
|
|
|
raise UserError(
|
|
_("Employee work email not configured.")
|
|
)
|
|
|
|
rec.state = 'rejected'
|
|
|
|
template = self.env.ref(
|
|
'grace_period.email_template_late_coming_rejected'
|
|
)
|
|
|
|
template.send_mail(
|
|
rec.id,
|
|
force_send=True
|
|
)
|
|
rec.message_post(
|
|
body=_("Request Rejected.")
|
|
)
|
|
|
|
def action_reset_to_draft(self):
|
|
|
|
self.state = 'draft' |