[UPDT] PMS: Anonymous feedback CRUD permissions updated

This commit is contained in:
Horilla
2025-01-09 10:30:13 +05:30
parent 0d4e908689
commit 0b5d42c77a
3 changed files with 63 additions and 87 deletions

View File

@@ -1,5 +1,5 @@
{% load i18n %}
{% load basefilters %}
{% load basefilters pmsfilters %}
{% load mathfilters %}
{% load static %}
{% if messages %}
@@ -560,9 +560,9 @@
</div>
<div class="oh-sticky-table__tbody">
{% for feedback in anonymous_feedback %}
{% if request.GET.archive == "true" %}
{% if feedback.archive %}
<div class="oh-sticky-table__tr" draggable="true" data-toggle="oh-modal-toggle" data-target ="#FeedbackModal" hx-get="{% url 'single-anonymous-feedback-view' feedback.id %}" hx-target = "#OneFeedbackTarget">
<div class="oh-sticky-table__tr"
{% if request.user|is_anonymous_feedback_owner:feedback %}style="background: lightgreen;"{% endif %}
draggable="true" data-toggle="oh-modal-toggle" data-target ="#FeedbackModal" hx-get="{% url 'single-anonymous-feedback-view' feedback.id %}" hx-target = "#OneFeedbackTarget">
<div class="oh-sticky-table__sd">
<div class="centered-div">
@@ -596,7 +596,12 @@
</div>
<div class="oh-sticky-table__td" onclick="event.stopPropagation();">
<div class="oh-btn-group">
<a class="oh-btn w-100" data-toggle="oh-modal-toggle" data-target="#anonymousFeedbackModal" hx-get="{% url 'edit-anonymous-feedback' feedback.id %}" title="{% trans 'Edit' %}" hx-target="#anonymousFeedbackFormModal"><ion-icon name="create-outline"></ion-icon></a>
{% if perms.pms.change_anonymousfeedback or request.user|is_anonymous_feedback_owner:feedback %}
<a class="oh-btn w-100" data-toggle="oh-modal-toggle" data-target="#anonymousFeedbackModal"
hx-get="{% url 'edit-anonymous-feedback' feedback.id %}"
title="{% trans 'Edit' %}" hx-target="#anonymousFeedbackFormModal"
><ion-icon name="create-outline"></ion-icon>
</a>
<form action="{% url 'archive-anonymous-feedback' obj_id=feedback.id %}" method="post" style="display: contents">
{% if feedback.archive == True %}
<button class="oh-btn oh-btn--danger-outline w-100 " title="{% trans 'Un-archive' %}" >
@@ -607,6 +612,14 @@
<ion-icon name="archive-sharp" type="submit"></ion-icon>
</button>
</form>
{% else %}
<button class="oh-btn w-100" disabled>
<ion-icon name="create-outline"></ion-icon>
</button>
<button class="oh-btn oh-btn--danger-outline w-100" disabled >
<ion-icon name="archive-sharp" type="submit"></ion-icon>
</button>
{% endif %}
{% if perms.pms.delete_feedback %}
<form action="{% url 'delete-anonymous-feedback' obj_id=feedback.id %}" method="post" onsubmit="return confirm('{% trans "Do you want Delete this Feedback ?" %}')" style="display: contents">
{% csrf_token %}
@@ -615,71 +628,10 @@
</button>
</form>
{% endif %}
</div>
</div>
</div>
{% endif %}
{% else %}
{% if feedback.archive == False %}
<div class="oh-sticky-table__tr" draggable="true" data-toggle="oh-modal-toggle" data-target ="#FeedbackModal" hx-get="{% url 'single-anonymous-feedback-view' feedback.id %}" hx-target = "#OneFeedbackTarget">
<div class="oh-sticky-table__sd">
<div class="centered-div">
<input
type="checkbox"
id="{{feedback.id}}"
value="{{feedback.id}}"
data-anounymous = "true"
onclick = "event.stopPropagation()"
class="oh-input feedback-checkbox oh-input__checkbox anonymous-feedback-row"
/>
</div>
</div>
<div class="oh-sticky-table__td" >
{{feedback.feedback_subject}}
</div>
<div class="oh-sticky-table__td">
{% trans "Based on" %} :
{% if feedback.based_on == "employee" %}
{{feedback.employee_id}}
{% elif feedback.based_on == "department" %}
{{feedback.department_id}}
{% elif feedback.based_on == "job_position" %}
{{feedback.job_position_id}}
{% else %}
{{feedback.get_based_on_display}}
{% endif %}
</div>
<div class="oh-sticky-table__td">
{{feedback.created_at}}
</div>
<div class="oh-sticky-table__td" onclick="event.stopPropagation();">
<div class="oh-btn-group">
<a class="oh-btn w-100" data-toggle="oh-modal-toggle" data-target="#anonymousFeedbackModal" hx-get="{% url 'edit-anonymous-feedback' feedback.id %}" title="{% trans 'Edit' %}" hx-target="#anonymousFeedbackFormModal"><ion-icon name="create-outline"></ion-icon></a>
<form action="{% url 'archive-anonymous-feedback' obj_id=feedback.id %}" method="post" style="display: contents">
{% if feedback.archive == True %}
<button class="oh-btn oh-btn--danger-outline w-100 " title="{% trans 'Un-archive' %}" >
{% else %}
<button class="oh-btn oh-btn--danger-outline w-100 " title="{% trans 'Archive' %}" >
{% endif %}
{% csrf_token %}
<ion-icon name="archive-sharp" type="submit"></ion-icon>
</button>
</form>
{% if perms.pms.delete_feedback %}
<form action="{% url 'delete-anonymous-feedback' obj_id=feedback.id %}" method="post" onsubmit="return confirm('{% trans "Do you want Delete this Feedback ?" %}')" style="display: contents">
{% csrf_token %}
<button class="oh-btn oh-btn--danger-outline w-100" title="{% trans 'Delete' %}" >
<ion-icon name="trash-outline" role="img" class="md hydrated" aria-label="trash outline"></ion-icon>
</button>
</form>
{% endif %}
</div>
</div>
</div>
{% endif %}
{% endif %}
{% endfor%}
</div>
</div>

View File

@@ -17,7 +17,7 @@ Filters:
from django.template.defaultfilters import register
from employee.models import Employee, EmployeeWorkInformation
from pms.models import EmployeeObjective, Feedback, Objective
from pms.models import AnonymousFeedback, EmployeeObjective, Feedback, Objective
@register.filter(name="replace")
@@ -114,3 +114,13 @@ def is_feedback_answer(feedback, user):
elif Feedback.objects.filter(id=feedback.id, subordinate_id=employee).exists():
return True
return False
@register.filter(name="is_anonymous_feedback_owner")
def is_anonymous_feedback_owner(user, feedback):
"""
This method will return true, if the user is owner of the feedback
"""
if str(user.id) == feedback.anonymous_feedback_id:
return True
return False

View File

@@ -3011,17 +3011,24 @@ def edit_anonymous_feedback(request, obj_id):
Renders the 'anonymous/anonymous_feedback_form.html' template with the feedback form pre-filled with existing data.
"""
feedback = AnonymousFeedback.objects.get(id=obj_id)
form = AnonymousFeedbackForm(instance=feedback)
anonymous_id = request.user.id
if request.method == "POST":
form = AnonymousFeedbackForm(request.POST, instance=feedback)
if form.is_valid():
feedback = form.save(commit=False)
feedback.anonymous_feedback_id = anonymous_id
feedback.save()
return HttpResponse("<script>window.location.reload();</script>")
context = {"form": form, "create": False}
return render(request, "anonymous/anonymous_feedback_form.html", context)
# checking feedback owner
if str(request.user.id) == feedback.anonymous_feedback_id or request.user.has_perm(
"pms.change_anonymousfeedback"
):
form = AnonymousFeedbackForm(instance=feedback)
anonymous_id = request.user.id
if request.method == "POST":
form = AnonymousFeedbackForm(request.POST, instance=feedback)
if form.is_valid():
feedback = form.save(commit=False)
feedback.anonymous_feedback_id = anonymous_id
feedback.save()
return HttpResponse("<script>window.location.reload();</script>")
context = {"form": form, "create": False}
return render(request, "anonymous/anonymous_feedback_form.html", context)
else:
messages.info(request, _("You are don't have permissions."))
return HttpResponse("<script>window.location.reload()</script>")
@login_required
@@ -3033,14 +3040,21 @@ def archive_anonymous_feedback(request, obj_id):
"""
feedback = AnonymousFeedback.objects.get(id=obj_id)
if feedback.archive:
feedback.archive = False
feedback.save()
messages.info(request, _("Feedback un-archived successfully!."))
elif not feedback.archive:
feedback.archive = True
feedback.save()
messages.info(request, _("Feedback archived successfully!."))
# checking feedback owner
if str(request.user.id) == feedback.anonymous_feedback_id or request.user.has_perm(
"pms.anonymousfeedback"
):
if feedback.archive:
feedback.archive = False
feedback.save()
messages.info(request, _("Feedback un-archived successfully!."))
elif not feedback.archive:
feedback.archive = True
feedback.save()
messages.info(request, _("Feedback archived successfully!."))
else:
messages.info(request, _("You are don't have permissions."))
return redirect(feedback_list_view)