[UPDT] LEAVE: Sending mail to reporting managers while request creation and related activities
This commit is contained in:
@@ -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
62
base/threading.py
Normal 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}")
|
||||
@@ -195,6 +195,7 @@ class LeaveRequestFilter(FilterSet):
|
||||
|
||||
model = LeaveRequest
|
||||
fields = [
|
||||
"id",
|
||||
"leave_type_id",
|
||||
"status",
|
||||
"department_name",
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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">
|
||||
|
||||
@@ -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}
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user