[UPDT] LEAVE: Sending mail to reporting managers while request creation and related activities

This commit is contained in:
Horilla
2023-11-23 00:22:19 +05:30
parent 4f908ef696
commit e098cf03b2
6 changed files with 129 additions and 3 deletions

View File

@@ -0,0 +1,50 @@
{% load i18n %}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>{{ subject }}</title>
</head>
<body>
<div
style="
width: 50%;
margin: 0 auto;
border: 2px solid #6c757d;
background: #f0f0ff;
padding: 30px 80px;
"
>
<h2 style="color: #007bff;text-align: center;margin-bottom:40px ;font-size: 24px;">{{ subject }}</h2>
<p style="font-size: 16px">
<strong>{% trans "Employee:" %}</strong> {{ leave_request.employee_id }}
</p>
<p style="font-size: 16px">
<strong>{% trans "Reject Reason:" %}</strong>
{{leave_request.reject_reason }}
</p>
<p style="font-size: 16px">
<strong>{% trans "Start Date:" %}</strong> {{ leave_request.start_date }}
</p>
<p style="font-size: 16px">
<strong>{% trans "End Date:" %}</strong> {{ leave_request.end_date }}
</p>
<p style="font-size: 16px">
<strong>{% trans "Description:" %}</strong><br /> <br />{{ leave_request.description }}
</p>
<p style="font-size: 16px">
{% trans "Click" %}
<a href="{{ url }}" style="color: #007bff">{% trans "here" %}</a> {% trans "to view the leave request." %}
</p>
<p style="color: #6c757d">
{% trans "This is an automated message. Please do not reply." %}
</p>
</div>
</body>
</html>

62
base/threading.py Normal file
View File

@@ -0,0 +1,62 @@
from django.contrib import messages
from django.core.mail import send_mail
from threading import Thread
from django.conf import settings
from django.utils.translation import gettext as _
from django.template.loader import get_template
class MailSendThread(Thread):
def __init__(self, request, leave_request,type):
Thread.__init__(self)
self.request = request
self.leave_request = leave_request
self.type = type
def run(self):
try:
protocol = 'https' if self.request.is_secure() else 'http'
send_to = self.leave_request.employee_id.employee_work_info.reporting_manager_id.employee_user_id
subject = _("**New leave request created**")
url = f"{protocol}://{self.request.get_host()}/leave/request-view?id={self.leave_request.id}"
if self.type == "request":
body = _(f"A new leave request has been created for {self.leave_request.employee_id}. Click here to go to the leave request view: {url}")
elif self.type == "approve":
subject = _(f"**Leave Request Approved**")
send_to = self.leave_request.employee_id.email
url = f"{protocol}://{self.request.get_host()}/leave/user-request-view?id={self.leave_request.id}"
body = _(f"Your leave request has been Approved by {self.request.user.employee_get.get_full_name()}. Click here to go to the leave request view: {url}")
elif self.type == "reject":
subject = _("**Leave Request Rejected**")
send_to = self.leave_request.employee_id.email
url = f"{protocol}://{self.request.get_host()}/leave/user-request-view?id={self.leave_request.id}"
body = _(f"Your leave request has been Rejected by {self.request.user.employee_get.get_full_name()}. Click here to go to the leave request view: {url}")
elif self.type == "cancel":
subject = _("**New Cancellation Request**")
body = _(f"A leave request needs to be cancelled for {self.leave_request.employee_id}. Click here to go to the leave request view: {url}")
template_path = 'base/mail_templates/leave_request_template.html'
html_template = get_template(template_path)
context = {
'subject': subject,
'leave_request': self.leave_request,
'url': url,
}
email_body = html_template.render(context)
res = send_mail(
subject, body, settings.EMAIL_HOST_USER, [send_to], fail_silently=False, html_message=email_body
)
if res==1:
messages.success(self.request, _(f"Mail has been send to {self.leave_request.employee_id.employee_work_info.reporting_manager_id.employee_user_id}"))
except Exception as e:
print(f"Could not send the mail to {send_to}. Error: {e}")

View File

@@ -195,6 +195,7 @@ class LeaveRequestFilter(FilterSet):
model = LeaveRequest
fields = [
"id",
"leave_type_id",
"status",
"department_name",

View File

@@ -278,8 +278,8 @@ class LeaveRequestCreationForm(ModelForm):
class Meta:
model = LeaveRequest
fields = [
"leave_type_id",
"employee_id",
"leave_type_id",
"start_date",
"start_date_breakdown",
"end_date",
@@ -608,7 +608,7 @@ class UserLeaveRequestCreationForm(ModelForm):
cleaned_data["requested_days"] = requested_days
if not requested_days <= total_leave_days:
raise forms.ValidationError(_("Employee doesn't have enough ppp leave days.."))
raise forms.ValidationError(_("Employee doesn't have enough leave days.."))
return cleaned_data

View File

@@ -73,7 +73,7 @@
{% for leave_request in leave_request_list.list %}
<div class="oh-sticky-table__tr" draggable="true" data-toggle="oh-modal-toggle" data-target="#tableTimeOff"
hx-get="{% url 'one-request-view' leave_request.id %}" hx-target="#requestView">
<div class="oh-sticky-table__sd {% if leave_request.status == "requested" %} row-status--blue
<div class="oh-sticky-table__sd {% if leave_request.status == "requested" %} row-status--blue {% elif leave_request.status == "cancelled_and_rejected" %} row-status--black
{% elif leave_request.status == "approved" %} row-status--yellow {% elif leave_request.status == "cancelled" %} row-status--gray
{% elif leave_request.status == "rejected" %}row-status--red{% endif %}" onclick="event.stopPropagation()">
<div class="centered-div">

View File

@@ -19,6 +19,7 @@ from django.utils.translation import gettext_lazy as _
from horilla.decorators import login_required, hx_request_required
from horilla.decorators import permission_required, manager_can_enter
from base.methods import closest_numbers, export_data
from base.threading import MailSendThread
from base.models import *
from base.methods import (
filtersubordinates,
@@ -570,6 +571,9 @@ def leave_request_approve(request, id, emp_id=None):
icon="people-circle",
redirect="/leave/user-request-view",
)
mail_thread = MailSendThread(request, leave_request, type="approve")
mail_thread.start()
else:
messages.error(
request,
@@ -636,6 +640,9 @@ def leave_request_cancel(request, id, emp_id=None):
icon="people-circle",
redirect="/leave/user-request-view",
)
mail_thread = MailSendThread(request, leave_request, type="reject")
mail_thread.start()
if emp_id is not None:
employee_id = emp_id
return redirect(f"/employee/employee-view/{employee_id}/")
@@ -676,6 +683,9 @@ def user_leave_cancel(request, id):
messages.success(
request, _("Leave request cancelled successfully..")
)
mail_thread = MailSendThread(request, leave_request, type="cancel")
mail_thread.start()
return HttpResponse("<script>location.reload();</script>")
return render(
request,
@@ -2446,6 +2456,9 @@ def leave_request_create(request):
icon="people-circle",
redirect="/leave/request-view",
)
mail_thread = MailSendThread(request, leave_request, type="request")
mail_thread.start()
response = render(
request, "leave/user_leave/request_form.html", {"form": form}
)