From 3e3183cfcf251858307750feedda6d147fbe5fcf Mon Sep 17 00:00:00 2001 From: Horilla Date: Mon, 15 Jan 2024 10:15:58 +0530 Subject: [PATCH] [ADD] LEAVE: Comment for leave request views --- leave/admin.py | 2 + leave/forms.py | 14 ++++ leave/models.py | 18 +++++ .../leave/leave_request/comment_view.html | 56 +++++++++++++ .../leave/leave_request/group_by.html | 78 ++++++++++++++++++- .../leave_request_comment_form.html | 27 +++++++ .../leave/leave_request/leave_requests.html | 66 ++++++++++++++++ .../templates/leave/user_leave/group_by.html | 76 +++++++++++++++++- .../leave/user_leave/user_requests.html | 78 ++++++++++++++++++- leave/urls.py | 16 ++++ leave/views.py | 55 +++++++++++++ 11 files changed, 483 insertions(+), 3 deletions(-) create mode 100644 leave/templates/leave/leave_request/comment_view.html create mode 100644 leave/templates/leave/leave_request/leave_request_comment_form.html diff --git a/leave/admin.py b/leave/admin.py index 6923ce752..794c48d12 100644 --- a/leave/admin.py +++ b/leave/admin.py @@ -11,6 +11,7 @@ from .models import ( Holiday, CompanyLeave, LeaveAllocationRequest, + LeaverequestComment, ) @@ -22,3 +23,4 @@ admin.site.register(Holiday) admin.site.register(CompanyLeave) admin.site.register(LeaveAllocationRequest) admin.site.register(LeaveRequestConditionApproval) +admin.site.register(LeaverequestComment) diff --git a/leave/forms.py b/leave/forms.py index 2e046b6c4..cee862d4d 100644 --- a/leave/forms.py +++ b/leave/forms.py @@ -19,6 +19,7 @@ from .models import ( Holiday, CompanyLeave, LeaveAllocationRequest, + LeaverequestComment, ) from .methods import ( calculate_requested_days, @@ -792,3 +793,16 @@ class AssignLeaveForm(HorillaForm): ), self.fields['leave_type_id'].label = "Leave Type" + +class LeaverequestcommentForm(ModelForm): + """ + LeaverequestComment form + """ + + class Meta: + """ + Meta class for additional options + """ + + model = LeaverequestComment + fields = ('comment',) diff --git a/leave/models.py b/leave/models.py index f7de3c9e4..233a760ba 100644 --- a/leave/models.py +++ b/leave/models.py @@ -641,6 +641,24 @@ class LeaveRequest(models.Model): return True +class LeaverequestComment(models.Model): + """ + LeaverequestComment Model + """ + + request_id = models.ForeignKey(LeaveRequest, on_delete=models.CASCADE) + employee_id = models.ForeignKey(Employee, on_delete=models.CASCADE) + comment = models.TextField(null=True, verbose_name=_("Comment")) + created_at = models.DateTimeField( + auto_now_add=True, + verbose_name=_("Created At"), + null=True, + ) + + def __str__(self) -> str: + return f"{self.comment}" + + class LeaveAllocationRequest(models.Model): leave_type_id = models.ForeignKey( LeaveType, on_delete=models.PROTECT, verbose_name="Leave type" diff --git a/leave/templates/leave/leave_request/comment_view.html b/leave/templates/leave/leave_request/comment_view.html new file mode 100644 index 000000000..efd6f3e70 --- /dev/null +++ b/leave/templates/leave/leave_request/comment_view.html @@ -0,0 +1,56 @@ +{% load basefilters %} +{% load i18n %} + +{% if no_comments %} + +
+
+
+ {% trans "There is no comments to show." %} + +
+
+
+ +{% else %} + + {% for comment in comments %} +
+
+
+ {% trans "Comment" %} + + + +
+ {{comment.comment}} +
+
+
+
+
+
+
+ {% trans "By" %} + + {{ comment.employee_id }} +
+
+ {% trans "Date & Time" %} + + {% trans "on" %}  {{ comment.created_at|date:"F j, Y" }}   + {% trans "at" %}   {{ comment.created_at|time:"g:i A" }} + +
+ +
+
+
+ + + {% endfor %} + +{% endif %} + + diff --git a/leave/templates/leave/leave_request/group_by.html b/leave/templates/leave/leave_request/group_by.html index 688055d07..4325e75cc 100644 --- a/leave/templates/leave/leave_request/group_by.html +++ b/leave/templates/leave/leave_request/group_by.html @@ -64,6 +64,7 @@
{% trans "Requested Days" %}
{% trans "Status" %}
{% if not dashboard %} +
{% trans "Comment" %}
{% trans "Options" %}
{% trans "Actions" %}
{% endif %} @@ -97,8 +98,32 @@
{{leave_request.start_date}}
{{leave_request.end_date}}
{{leave_request.requested_days}}
-
{{leave_request.get_status_display}}
+
+ {% if leave_request.multiple_approvals and leave_request.status == "requested" %} +
+ {{leave_request.multiple_approvals.approved|length}} / {{leave_request.multiple_approvals.managers|length}} {% trans "Approved" %} +
+ {% else %} + {{leave_request.get_status_display}} + {% endif %} +
{% if not dashboard %} + +
+
+ + + +
+
+
{% if leave_request.status == 'requested' or leave_request.status == 'rejected' %} @@ -194,6 +219,57 @@
+ + + + + + + + + ") + return render( + request, + "leave/leave_request/leave_request_comment_form.html", + { + "form": form, "request_id":leave_id + }, + ) + + +@login_required +def view_leaverequest_comment(request, leave_id): + """ + This method is used to show Leave request comments + """ + comments = LeaverequestComment.objects.filter(request_id=leave_id).order_by('-created_at') + no_comments = False + if not comments.exists(): + no_comments = True + + return render( + request, + "leave/leave_request/comment_view.html", + {"comments": comments, 'no_comments': no_comments } + ) + + +@login_required +def delete_leaverequest_comment(request, comment_id): + """ + This method is used to delete Leave request comments + """ + LeaverequestComment.objects.get(id=comment_id).delete() + + messages.success(request, _("Comment deleted successfully!")) + return HttpResponseRedirect(request.META.get("HTTP_REFERER", "/"))