[UPDT] PMS: Change progress of key result and objective wrt current value
This commit is contained in:
@@ -135,6 +135,7 @@ class EmployeeKeyResult(models.Model):
|
||||
start_date = models.DateField(null=True, blank=True)
|
||||
end_date = models.DateField(null=True, blank=True)
|
||||
history = HorillaAuditLog(bases=[HorillaAuditInfo])
|
||||
progress_percentage = models.IntegerField(null=True, blank=True, default=0)
|
||||
objects = models.Manager()
|
||||
|
||||
def __str__(self):
|
||||
@@ -143,6 +144,7 @@ class EmployeeKeyResult(models.Model):
|
||||
def save(self, *args, **kwargs):
|
||||
if self.employee_id is None:
|
||||
self.employee_id = self.employee_objective_id.employee_id
|
||||
self.progress_percentage = (int(self.current_value)/int(self.target_value))*100
|
||||
super().save(*args, **kwargs)
|
||||
|
||||
|
||||
|
||||
@@ -11,20 +11,6 @@
|
||||
|
||||
{% block content %}
|
||||
|
||||
{% if messages %}
|
||||
<ul class="messages">
|
||||
{% for message in messages %}
|
||||
<div class="oh-wrapper">
|
||||
<div class="oh-alert-container">
|
||||
<div class="oh-alert oh-alert--animated {{message.tags}}">
|
||||
{{message}}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{% endfor %}
|
||||
</ul>
|
||||
{% endif %}
|
||||
|
||||
|
||||
<main :class="sidebarOpen ? 'oh-main__sidebar-visible' : ''">
|
||||
|
||||
@@ -134,23 +134,31 @@
|
||||
<div class="oh-list-card">
|
||||
<div class="oh-list-card__header d-flex align-content-center justify-content-between mb-2">
|
||||
<span class="oh-list-card__title">{{employee_key_result.key_result}}</span>
|
||||
<div class="d-flex align-items-center justify-content-between mb-2">
|
||||
<small class="oh-text--light">
|
||||
<label class="fw-bold oh-text--dark">{% trans "Due" %}:</label>
|
||||
{{ current_date|timesince:employee_key_result.end_date }}
|
||||
</small>
|
||||
<!-- checking userlevel -->
|
||||
{% if perms.pms.change_employeekeyresult or request.user|filtersubordinates %}
|
||||
<button
|
||||
class="oh-btn oh-btn--x-small d-flex align-items-center ms-2 "
|
||||
data-toggle="oh-modal-toggle"
|
||||
hx-get="{% url 'key-result-update' id=employee_key_result.id %}"
|
||||
hx-target="#ObjectiveModalFormTarget"
|
||||
data-target="#objectiveModalpopup" >
|
||||
<ion-icon name="create-outline" class="me-1" ></ion-icon>
|
||||
{% trans "Edit" %}
|
||||
</button>
|
||||
{% endif %}
|
||||
<div class="col-sm-12 col-md-12 col-lg-3">
|
||||
<div class="d-flex align-items-center justify-content-between mb-2">
|
||||
<small class="oh-text--light">
|
||||
<label class="fw-bold oh-text--dark">{% trans "Due" %}:</label>
|
||||
{{ current_date|timesince:employee_key_result.end_date }}
|
||||
</small>
|
||||
<!-- checking userlevel -->
|
||||
{% if perms.pms.change_employeekeyresult or request.user|filtersubordinates %}
|
||||
<button
|
||||
class="oh-btn oh-btn--x-small d-flex align-items-center ms-2 "
|
||||
data-toggle="oh-modal-toggle"
|
||||
hx-get="{% url 'key-result-update' id=employee_key_result.id %}"
|
||||
hx-target="#ObjectiveModalFormTarget"
|
||||
data-target="#objectiveModalpopup" >
|
||||
<ion-icon name="create-outline" class="me-1" ></ion-icon>
|
||||
{% trans "Edit" %}
|
||||
</button>
|
||||
{% endif %}
|
||||
</div>
|
||||
<div class="oh-progress-container">
|
||||
<div class="oh-progress" role="progressbar">
|
||||
<div class="oh-progress__bar oh-progress__bar--secondary" style="width: calc({% if employee_key_result.progress_percentage > 100 %} 100% {% else %} {{ employee_key_result.progress_percentage }}% {% endif %})"></div>
|
||||
</div>
|
||||
<span class="oh-progress-container__percentage" >{{employee_key_result.progress_percentage}}%</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="oh-list-card__body">
|
||||
|
||||
@@ -1,16 +1,6 @@
|
||||
{% extends 'index.html' %} {% load static i18n %} {% load i18n %} {% load widget_tweaks %} {% load mathfilters %} {% load basefilters %} {% block styles %}
|
||||
<link rel="stylesheet" href="{% static 'css/pms.css' %}" />
|
||||
{% endblock styles %} {% block content %}
|
||||
{% if messages %}
|
||||
<!-- form errors -->
|
||||
<div class="oh-wrapper">
|
||||
<div class="oh-alert-container">
|
||||
{% for message in messages %}
|
||||
<div class="oh-alert oh-alert--animated {{message.tags}}">{{message}}</div>
|
||||
{% endfor %}
|
||||
</div>
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
<main :class="sidebarOpen ? 'oh-main__sidebar-visible' : ''">
|
||||
<section class="oh-wrapper oh-main__topbar" x-data="{searchShow: false}">
|
||||
|
||||
@@ -419,16 +419,10 @@ def objective_detailed_view(request, emp_obj_id, **kwargs):
|
||||
key_results = EmployeeKeyResult.objects.filter(employee_objective_id=objective)
|
||||
comments = Comment.objects.filter(employee_objective_id=objective)
|
||||
key_results_all = objective.emp_obj_id.all()
|
||||
|
||||
# progress of objective calculation
|
||||
completed_key_result = [
|
||||
obj.current_value
|
||||
for obj in key_results_all
|
||||
if obj.current_value == obj.target_value
|
||||
]
|
||||
total_kr = key_results_all.count()
|
||||
try:
|
||||
progress = int((len(completed_key_result) / total_kr) * 100)
|
||||
progress = round(sum(kr.progress_percentage for kr in key_results_all) / (total_kr), 2)
|
||||
except (ZeroDivisionError, TypeError):
|
||||
progress = 0
|
||||
|
||||
|
||||
Reference in New Issue
Block a user