mirror of
https://gitlab.com/sonalarora/tra_backend.git
synced 2025-12-17 18:29:08 +02:00
160 lines
6.4 KiB
Python
Executable File
160 lines
6.4 KiB
Python
Executable File
# -*- coding: utf-8 -*-
|
|
from odoo import fields, models, api, _
|
|
from odoo.exceptions import ValidationError
|
|
|
|
|
|
class InheritEmployee(models.Model):
|
|
_inherit = 'hr.employee'
|
|
|
|
discipline_count = fields.Integer(compute="_compute_discipline_count")
|
|
|
|
def _compute_discipline_count(self):
|
|
all_actions = self.env['disciplinary.action'].read_group([
|
|
('employee_name', 'in', self.ids),
|
|
('state', '=', 'action'),
|
|
], fields=['employee_name'], groupby=['employee_name'])
|
|
mapping = dict([(action['employee_name'][0], action['employee_name_count']) for action in all_actions])
|
|
for employee in self:
|
|
employee.discipline_count = mapping.get(employee.id, 0)
|
|
|
|
|
|
class CategoryDiscipline(models.Model):
|
|
_name = 'discipline.category'
|
|
_description = 'Reason Category'
|
|
|
|
# Discipline Categories
|
|
|
|
code = fields.Char(string="Code", required=True, help="Category code")
|
|
name = fields.Char(string="Name", required=True, help="Category name")
|
|
category_type = fields.Selection([('disciplinary', 'Disciplinary Category'), ('action', 'Action Category')],
|
|
string="Category Type", help="Choose the category type disciplinary or action")
|
|
description = fields.Text(string="Details", help="Details for this category")
|
|
|
|
|
|
class DisciplinaryAction(models.Model):
|
|
_name = 'disciplinary.action'
|
|
_inherit = ['mail.thread', 'mail.activity.mixin']
|
|
_description = "Disciplinary Action"
|
|
|
|
state = fields.Selection([
|
|
('draft', 'Draft'),
|
|
('explain', 'Waiting Explanation'),
|
|
('submitted', 'Waiting Action'),
|
|
('action', 'Action Validated'),
|
|
('cancel', 'Cancelled'),
|
|
|
|
], default='draft', track_visibility='onchange')
|
|
|
|
name = fields.Char(string='Reference', required=True, copy=False, readonly=True,
|
|
default=lambda self: _('New'))
|
|
|
|
employee_name = fields.Many2one('hr.employee', string='Employee', required=True, help="Employee name")
|
|
department_name = fields.Many2one('hr.department', string='Department', required=True, help="Department name")
|
|
discipline_reason = fields.Many2one('discipline.category', string='Reason', required=True, help="Choose a disciplinary reason")
|
|
explanation = fields.Text(string="Explanation by Employee", help='Employee have to give Explanation'
|
|
'to manager about the violation of discipline')
|
|
action = fields.Many2one('discipline.category', string="Action", help="Choose an action for this disciplinary action")
|
|
read_only = fields.Boolean(compute="get_user", default=True)
|
|
warning_letter = fields.Html(string="Warning Letter")
|
|
suspension_letter = fields.Html(string="Suspension Letter")
|
|
termination_letter = fields.Html(string="Termination Letter")
|
|
warning = fields.Integer(default=False)
|
|
action_details = fields.Text(string="Action Details", help="Give the details for this action")
|
|
attachment_ids = fields.Many2many('ir.attachment', string="Attachments",
|
|
help="Employee can submit any documents which supports their explanation")
|
|
note = fields.Text(string="Internal Note")
|
|
joined_date = fields.Date(string="Joined Date", help="Employee joining date")
|
|
|
|
# assigning the sequence for the record
|
|
@api.model
|
|
def create(self, vals):
|
|
vals['name'] = self.env['ir.sequence'].next_by_code('disciplinary.action')
|
|
return super(DisciplinaryAction, self).create(vals)
|
|
|
|
# Check the user is a manager or employee
|
|
@api.depends('read_only')
|
|
def get_user(self):
|
|
|
|
if self.env.user.has_group('hr.group_hr_manager'):
|
|
self.read_only = True
|
|
else:
|
|
self.read_only = False
|
|
|
|
# Check the Action Selected
|
|
@api.onchange('action')
|
|
def onchange_action(self):
|
|
if self.action.name == 'Written Warning':
|
|
self.warning = 1
|
|
elif self.action.name == 'Suspend the Employee for one Week':
|
|
self.warning = 2
|
|
elif self.action.name == 'Terminate the Employee':
|
|
self.warning = 3
|
|
elif self.action.name == 'No Action':
|
|
self.warning = 4
|
|
else:
|
|
self.warning = 5
|
|
|
|
@api.onchange('employee_name')
|
|
@api.depends('employee_name')
|
|
def onchange_employee_name(self):
|
|
|
|
department = self.env['hr.employee'].search([('name', '=', self.employee_name.name)])
|
|
self.department_name = department.department_id.id
|
|
|
|
if self.state == 'action':
|
|
raise ValidationError(_('You Can not edit a Validated Action !!'))
|
|
|
|
@api.onchange('discipline_reason')
|
|
@api.depends('discipline_reason')
|
|
def onchange_reason(self):
|
|
if self.state == 'action':
|
|
raise ValidationError(_('You Can not edit a Validated Action !!'))
|
|
|
|
def assign_function(self):
|
|
|
|
for rec in self:
|
|
rec.state = 'explain'
|
|
|
|
def cancel_function(self):
|
|
for rec in self:
|
|
rec.state = 'cancel'
|
|
|
|
def set_to_function(self):
|
|
for rec in self:
|
|
rec.state = 'draft'
|
|
|
|
def action_function(self):
|
|
for rec in self:
|
|
if not rec.action:
|
|
raise ValidationError(_('You have to select an Action !!'))
|
|
|
|
if self.warning == 1:
|
|
if not rec.warning_letter or rec.warning_letter == '<p><br></p>':
|
|
raise ValidationError(_('You have to fill up the Warning Letter in Action Information !!'))
|
|
|
|
elif self.warning == 2:
|
|
if not rec.suspension_letter or rec.suspension_letter == '<p><br></p>':
|
|
raise ValidationError(_('You have to fill up the Suspension Letter in Action Information !!'))
|
|
|
|
elif self.warning == 3:
|
|
if not rec.termination_letter or rec.termination_letter == '<p><br></p>':
|
|
raise ValidationError(_('You have to fill up the Termination Letter in Action Information !!'))
|
|
|
|
elif self.warning == 4:
|
|
self.action_details = "No Action Proceed"
|
|
|
|
elif self.warning == 5:
|
|
if not rec.action_details:
|
|
raise ValidationError(_('You have to fill up the Action Information !!'))
|
|
rec.state = 'action'
|
|
|
|
def explanation_function(self):
|
|
for rec in self:
|
|
|
|
if not rec.explanation:
|
|
raise ValidationError(_('You must give an explanation !!'))
|
|
|
|
self.write({
|
|
'state': 'submitted'
|
|
})
|