odoo18/addons_extensions/grace_period/models/late_coming_request.py

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'