[UPDT] PMS: Objective permissions changed

This commit is contained in:
Horilla
2024-12-21 15:45:26 +05:30
parent eda9e921e0
commit 2cf5ef6ebe
2 changed files with 106 additions and 86 deletions

View File

@@ -82,7 +82,7 @@
> >
<ion-icon name="eye-outline"></ion-icon> <ion-icon name="eye-outline"></ion-icon>
</a> </a>
{% if request.user|is_reportingmanager or perms.pms.view_employeekeyresult %} {% if request.user.employee_get in emp_objective.objective_id.managers.all or emp_objective.employee_id == request.user.employee_get or perms.pms.view_employeekeyresult %}
<a <a
hx-get='{% url "objective-detailed-view-activity" emp_objective.id %}' hx-get='{% url "objective-detailed-view-activity" emp_objective.id %}'
hx-target="#activityContainer" hx-target="#activityContainer"
@@ -93,7 +93,7 @@
<ion-icon name="newspaper-outline"></ion-icon> <ion-icon name="newspaper-outline"></ion-icon>
</a> </a>
{% endif %} {% endif %}
{% if request.user|is_reportingmanager or perms.pms.add_employeekeyresult %} {% if request.user.employee_get in emp_objective.objective_id.managers.all or perms.pms.add_employeekeyresult %}
<button style="border-right:1px solid hsl(8, 77%, 56%)" <button style="border-right:1px solid hsl(8, 77%, 56%)"
class="oh-btn oh-btn--secondary-outline float-end" class="oh-btn oh-btn--secondary-outline float-end"
hx-get='{% url "employee-key-result-creation" emp_objective.id %}' hx-get='{% url "employee-key-result-creation" emp_objective.id %}'
@@ -106,7 +106,7 @@
<ion-icon name="add-outline" class="m-0 md hydrated" role="img" aria-label="add outline"></ion-icon> <ion-icon name="add-outline" class="m-0 md hydrated" role="img" aria-label="add outline"></ion-icon>
</button> </button>
{% endif %} {% endif %}
{% if request.user|is_reportingmanager or perms.pms.add_employeeobjective %} {% if request.user.employee_get in emp_objective.objective_id.managers.all or perms.pms.add_employeeobjective %}
<div class="" onclick="event.stopPropagation()"> <div class="" onclick="event.stopPropagation()">
<div class="oh-dropdown" x-data="{show: false}"> <div class="oh-dropdown" x-data="{show: false}">
@@ -115,7 +115,7 @@
</button> </button>
<div class="oh-dropdown__menu oh-dropdown__menu--dark-border oh-dropdown__menu--right" x-show="show" @click.outside="show = false" style="display: none;"> <div class="oh-dropdown__menu oh-dropdown__menu--dark-border oh-dropdown__menu--right" x-show="show" @click.outside="show = false" style="display: none;">
<ul class="oh-dropdown__items"> <ul class="oh-dropdown__items">
{% if perms.pms.change_employeeobjective or request.user|is_reportingmanager %} {% if perms.pms.change_employeeobjective or request.user.employee_get in emp_objective.objective_id.managers.all %}
<li class="oh-dropdown__item"> <li class="oh-dropdown__item">
<a <a
class="fw-light" class="fw-light"
@@ -146,7 +146,7 @@
{% endif %} {% endif %}
{% endif %} {% endif %}
{% if perms.pms.delete_employeeobjective or request.user|is_reportingmanager %} {% if perms.pms.delete_employeeobjective or request.user.employee_get in emp_objective.objective_id.managers.all %}
<li class="oh-dropdown__item"> <li class="oh-dropdown__item">
<a <a
class="fw-light" class="fw-light"

View File

@@ -753,38 +753,46 @@ def objective_detailed_view_activity(request, id):
""" """
objective = EmployeeObjective.objects.get(id=id) objective = EmployeeObjective.objects.get(id=id)
key_result_history = objective_history(id) if (
history = objective.tracking() request.user.employee_get == objective.employee_id
comments = Comment.objects.filter(employee_objective_id=objective) or request.user.employee_get in objective.objective_id.managers.all()
activity_list = [] or request.user.has_perm("pms.view_comment")
for hist in history: ):
hist["date"] = hist["pair"][0].history_date key_result_history = objective_history(id)
activity_list.append(hist) history = objective.tracking()
for com in comments: comments = Comment.objects.filter(employee_objective_id=objective)
comment = { activity_list = []
"type": "comment", for hist in history:
"comment": com, hist["date"] = hist["pair"][0].history_date
"date": com.created_at, activity_list.append(hist)
for com in comments:
comment = {
"type": "comment",
"comment": com,
"date": com.created_at,
}
activity_list.append(comment)
for key in key_result_history:
key_result = {
"type": "key_result",
"key_result": key,
"date": key["changed_date"],
}
activity_list.append(key_result)
activity_list = sorted(activity_list, key=lambda x: x["date"], reverse=True)
context = {
"objective": objective,
"historys": history,
"comments": comments,
"activity_list": activity_list,
} }
activity_list.append(comment) return render(request, "okr/objective_detailed_view_activity.html", context)
else:
for key in key_result_history: messages.info(request, _("You dont have permission."))
key_result = { return HttpResponse("<script>window.location.reload();</script>")
"type": "key_result",
"key_result": key,
"date": key["changed_date"],
}
activity_list.append(key_result)
activity_list = sorted(activity_list, key=lambda x: x["date"], reverse=True)
context = {
"objective": objective,
"historys": history,
"comments": comments,
"activity_list": activity_list,
}
return render(request, "okr/objective_detailed_view_activity.html", context)
@login_required @login_required
@@ -1069,7 +1077,6 @@ def create_employee_objective(request):
@login_required @login_required
@hx_request_required @hx_request_required
@manager_can_enter(perm="pms.change_employeeobjective")
def update_employee_objective(request, emp_obj_id): def update_employee_objective(request, emp_obj_id):
""" """
This function is used to update the employee objective This function is used to update the employee objective
@@ -1079,16 +1086,23 @@ def update_employee_objective(request, emp_obj_id):
redirect to form of employee objective redirect to form of employee objective
""" """
emp_objective = EmployeeObjective.objects.get(id=emp_obj_id) emp_objective = EmployeeObjective.objects.get(id=emp_obj_id)
form = EmployeeObjectiveForm(instance=emp_objective) if (
if request.method == "POST": request.user.employee_get == emp_objective.employee_id
form = EmployeeObjectiveForm(request.POST, instance=emp_objective) or request.user.employee_get in emp_objective.objective_id.managers.all()
if form.is_valid(): ):
emp_obj = form.save(commit=False) form = EmployeeObjectiveForm(instance=emp_objective)
emp_obj.save() if request.method == "POST":
messages.success(request, _("Employee objective Updated successfully")) form = EmployeeObjectiveForm(request.POST, instance=emp_objective)
return HttpResponse("<script>window.location.reload()</script>") if form.is_valid():
context = {"form": form, "k_form": KRForm()} emp_obj = form.save(commit=False)
return render(request, "okr/emp_objective_form.html", context=context) emp_obj.save()
messages.success(request, _("Employee objective Updated successfully"))
return HttpResponse("<script>window.location.reload()</script>")
context = {"form": form, "k_form": KRForm()}
return render(request, "okr/emp_objective_form.html", context=context)
else:
messages.info(request, _("You don't have permission."))
return HttpResponse("<script>window.location.reload()</script>")
@login_required @login_required
@@ -3069,7 +3083,6 @@ def view_single_anonymous_feedback(request, obj_id):
@login_required @login_required
@hx_request_required @hx_request_required
@manager_can_enter(perm="pms.add_employeekeyresult")
def employee_keyresult_creation(request, emp_obj_id): def employee_keyresult_creation(request, emp_obj_id):
""" """
This view is for employee keyresult creation , and returns a employee keyresult form. This view is for employee keyresult creation , and returns a employee keyresult form.
@@ -3080,47 +3093,54 @@ def employee_keyresult_creation(request, emp_obj_id):
employee keyresult created, and returnes to employee objective details view employee keyresult created, and returnes to employee objective details view
""" """
emp_objective = EmployeeObjective.objects.get(id=emp_obj_id) emp_objective = EmployeeObjective.objects.get(id=emp_obj_id)
employee = emp_objective.employee_id if (
data = request.GET.copy() request.user.employee_get in emp_objective.objective_id.managers.all()
# Convert QueryDict to a regular dictionary or request.user.has_perm("pms.add_employeekeyresult")
cleaned_data = { ):
key: value if len(value) > 1 else value[0] for key, value in data.lists() employee = emp_objective.employee_id
} data = request.GET.copy()
if not cleaned_data.get("employee_objective_id"): # Convert QueryDict to a regular dictionary
cleaned_data["employee_objective_id"] = emp_obj_id cleaned_data = {
emp_key_result = EmployeeKeyResultForm(initial=cleaned_data) key: value if len(value) > 1 else value[0] for key, value in data.lists()
if request.method == "POST": }
emp_key_result = EmployeeKeyResultForm(request.POST) if not cleaned_data.get("employee_objective_id"):
if emp_key_result.is_valid(): cleaned_data["employee_objective_id"] = emp_obj_id
emp_key_result.save() emp_key_result = EmployeeKeyResultForm(initial=cleaned_data)
emp_objective.update_objective_progress() if request.method == "POST":
key_result = emp_key_result.cleaned_data["key_result_id"] emp_key_result = EmployeeKeyResultForm(request.POST)
if emp_key_result.is_valid():
emp_key_result.save()
emp_objective.update_objective_progress()
key_result = emp_key_result.cleaned_data["key_result_id"]
emp_objective.key_result_id.add(key_result) emp_objective.key_result_id.add(key_result)
# assignees = emp_key_result.cleaned_data['assignees'] # assignees = emp_key_result.cleaned_data['assignees']
# start_date =emp_key_result.cleaned_data['start_date'] # start_date =emp_key_result.cleaned_data['start_date']
messages.success(request, _("Key result assigned sucessfully.")) messages.success(request, _("Key result assigned sucessfully."))
notify.send( notify.send(
request.user.employee_get, request.user.employee_get,
recipient=employee.employee_user_id, recipient=employee.employee_user_id,
verb="You got an Key Result!.", verb="You got an Key Result!.",
verb_ar="لقد حصلت على نتيجة رئيسية!", verb_ar="لقد حصلت على نتيجة رئيسية!",
verb_de="Du hast ein Schlüsselergebnis erreicht!", verb_de="Du hast ein Schlüsselergebnis erreicht!",
verb_es="¡Has conseguido un Resultado Clave!", verb_es="¡Has conseguido un Resultado Clave!",
verb_fr="Vous avez obtenu un Résultat Clé!", verb_fr="Vous avez obtenu un Résultat Clé!",
redirect=reverse( redirect=reverse(
"objective-detailed-view", "objective-detailed-view",
kwargs={"obj_id": emp_objective.objective_id.id}, kwargs={"obj_id": emp_objective.objective_id.id},
), ),
) )
return HttpResponse("<script>window.location.reload()</script>") return HttpResponse("<script>window.location.reload()</script>")
context = { context = {
"form": emp_key_result, "form": emp_key_result,
"emp_objective": emp_objective, "emp_objective": emp_objective,
} }
return render(request, "okr/key_result/kr_form.html", context=context) return render(request, "okr/key_result/kr_form.html", context=context)
else:
messages.info(request, _("You are don't have permissions."))
return HttpResponse("<script>window.location.reload()</script>")
@login_required @login_required