Files
ihrm/pms/models.py

173 lines
7.9 KiB
Python
Raw Normal View History

2023-05-10 15:06:57 +05:30
from django.db import models
from employee.models import Employee
# importing simple history
from simple_history.models import HistoricalRecords
from django.utils.translation import gettext_lazy as _
"""Objectives and key result section"""
class Period(models.Model):
""" this is a period model used for creating period """
period_name = models.CharField(max_length=150,unique=True)
start_date = models.DateField(null=True, blank=True)
end_date = models.DateField(null=True, blank=True)
def __str__(self):
return self.period_name
class EmployeeObjective(models.Model):
""" this is a EmployObjective model used for creating Employee objectives """
2023-07-26 12:15:01 +05:30
STATUS_CHOICES = (
2023-05-10 15:06:57 +05:30
('On Track', _('On Track')),
('Behind', _('Behind')),
('Closed', _('Closed')),
('At Risk', _('At Risk')),
('Not Started', _('Not Started')),
2023-07-26 12:15:01 +05:30
)
2023-05-10 15:06:57 +05:30
objective = models.CharField(null=False, blank=False, max_length=100)
objective_description = models.TextField(blank=False, null=False)
created_at = models.DateField(auto_now_add=True)
employee_id = models.ForeignKey(Employee, on_delete=models.DO_NOTHING, related_name='employee_objective', null=True, blank=True)
updated_at = models.DateField(auto_now=True)
start_date = models.DateField(null=False, blank=False)
end_date = models.DateField(null=False, blank=False)
status = models.CharField(max_length=20,choices=STATUS_CHOICES,null=False, blank=False, default='Not Started')
history = HistoricalRecords()
archive =models.BooleanField(default=False,null=True,blank=True)
def __str__(self):
return f'{self.employee_id.employee_first_name} -{self.objective}'
class Comment(models.Model):
"""comments for objectives"""
comment = models.CharField(max_length=150)
employee_id = models.ForeignKey(Employee, on_delete=models.DO_NOTHING, related_name='comment', null=True, blank=True)
employee_objective_id = models.ForeignKey(EmployeeObjective, on_delete=models.CASCADE, related_name='emp_objective', null=True, blank=True)
created_at = models.DateTimeField(auto_now_add=True, null=True, blank=True)
history = HistoricalRecords(excluded_fields=['comment'])
def __str__(self):
return f'{self.employee_id.employee_first_name} -{self.comment} '
class EmployeeKeyResult(models.Model):
"""employee key result creation """
PROGRESS_CHOICES = (
('%', _('Percentage')),
('#', _('Number')),
('Currency', (('$', 'USD$'), ('', 'INR'), ('', 'EUR')))
)
STATUS_CHOICES = (
('On Track', _('On Track')),
('Behind', _('Behind')),
('Closed', _('Closed')),
('At Risk', _('At Risk')),
('Not Started', _('Not Started'))
)
key_result = models.CharField(max_length=60, null=True, blank=False)
key_result_description = models.TextField(blank=False, null=True)
employee_objective_id = models.ForeignKey(EmployeeObjective, on_delete=models.CASCADE, related_name='emp_obj_id')
employee_id = models.ForeignKey(Employee, on_delete=models.DO_NOTHING, related_name='emp_kpi', null=True, blank=True)
progress_type = models.CharField(max_length=60, null=True, blank=True, choices=PROGRESS_CHOICES)
status = models.CharField(max_length=20,choices=STATUS_CHOICES,null=True, blank=True, default='Not Started')
created_at = models.DateField(auto_now_add=True, blank=True, null=True)
updated_at = models.DateField(auto_now=True, null=True, blank=True)
start_value = models.IntegerField(null=True, blank=True, default=0)
current_value = models.IntegerField(null=True, blank=True, default=0)
target_value = models.IntegerField(null=True, blank=True, default=0)
start_date = models.DateField(null=True, blank=True)
end_date = models.DateField(null=True, blank=True)
history = HistoricalRecords()
def __str__(self):
return f'{self.key_result} '
"""360degree feedback section"""
class QuestionTemplate(models.Model):
"""question template creation"""
question_template = models.CharField(max_length=100, null=False, blank=False , unique=True)
def __str__(self):
return self.question_template
class Question(models.Model):
"""question creation"""
QUESTION_TYPE_CHOICE = (
('1', _('Text')),
('2', _('Rating')),
('3', _('Boolean')),
('4', _('Multi-choices')),
('5', _('Likert'))
)
question = models.CharField(max_length=250, null=False, blank=False)
question_type = models.CharField(choices=QUESTION_TYPE_CHOICE, max_length=100, null=True, blank=True)
template_id = models.ForeignKey(QuestionTemplate, on_delete=models.CASCADE, related_name='question', null=True, blank=True)
def __str__(self):
return self.question
class QuestionOptions(models.Model):
"""options for question """
question_id = models.ForeignKey(Question, on_delete=models.CASCADE, related_name='question_options', null=True, blank=True)
option_a = models.CharField(max_length=250, null=True, blank=True)
option_b = models.CharField(max_length=250, null=True, blank=True)
option_c = models.CharField(max_length=250, null=True, blank=True)
option_d = models.CharField(max_length=250, null=True, blank=True)
class Feedback(models.Model):
"""feedback model for creating feedback """
STATUS_CHOICES = (
2023-07-26 12:15:01 +05:30
('On Track', _('On Track')),
('Behind', _('Behind') ),
('Closed', _('Closed') ),
('At Risk', _('At Risk') ),
('Not Started', _('Not Started'))
2023-05-10 15:06:57 +05:30
)
review_cycle = models.CharField(max_length=100, null=False, blank=False)
manager_id = models.ForeignKey(Employee, related_name='feedback_manager', on_delete=models.DO_NOTHING, null=True, blank=False)
employee_id = models.ForeignKey(Employee, on_delete=models.DO_NOTHING, related_name='feedback_employee',null=False,blank=False)
colleague_id = models.ManyToManyField(Employee, related_name='feedback_colleague',blank=True)
subordinate_id = models.ManyToManyField(Employee, related_name='feedback_subordinate',blank=True)
question_template_id = models.ForeignKey(QuestionTemplate, on_delete=models.DO_NOTHING, related_name='feedback_question_template',null=False,blank=False)
status = models.CharField(max_length=50,choices=STATUS_CHOICES,default='Not Started')
created_at = models.DateField(auto_now_add=True)
archive = models.BooleanField(null=True, blank=True, default=False)
start_date = models.DateField(null=False, blank=False)
end_date = models.DateField(null=True, blank=False)
employee_key_results_id = models.ManyToManyField(EmployeeKeyResult, blank=True,)
def __str__(self):
return f'{self.employee_id.employee_first_name} - {self.review_cycle}'
class Answer(models.Model):
"""feedback answer model """
answer = models.JSONField(max_length=200, null=True, blank=True)
question_id = models.ForeignKey(Question, on_delete=models.DO_NOTHING, related_name='answer_question_id',null=True,blank=True)
employee_id = models.ForeignKey(Employee, on_delete=models.DO_NOTHING, related_name='employee_answer',null=True,blank=True)
feedback_id = models.ForeignKey(Feedback, on_delete=models.CASCADE, related_name='feedback_answer')
def __str__(self):
return f'{self.employee_id.employee_first_name} -{self.answer}'
class KeyresultFeedback(models.Model):
feedback_id = models.ForeignKey(Feedback, on_delete=models.CASCADE, related_name='feedback_key_result', null=True,blank=True)
employee_id = models.ForeignKey(Employee, on_delete=models.DO_NOTHING, related_name='employee_key_result')
answer = models.JSONField(max_length=200, null=True, blank=True)
key_result_id = models.ForeignKey(EmployeeKeyResult,related_name='key_result_feedback',null=True,blank=True,on_delete=models.DO_NOTHING)