Commit 7ee2d4c3 authored by Gladys Forte's avatar Gladys Forte

email onbehalf_user, on behalh list initial

parent fc9a3040
......@@ -61,21 +61,35 @@ class CMSSettingsViewSet(viewsets.ModelViewSet):
def create(self, request, *args, **kwargs):
try:
logged_user = self.request.user.code
ChangeRequestSettings.objects.filter(active_user=logged_user).delete()
data_cms_settings = []
data_behalf_user = []
cms_settings = request.data['cms_settings']
for cms_setting in cms_settings:
cms_setting['active_user'] = logged_user
data_cms_settings.append(cms_setting)
data_behalf_user.append(cms_setting['behalf_user'])
serializer = ChangeRequestSettingsSerializer(
data=data_cms_settings, many=True
)
# removed_behalf_user = ChangeRequestSettings.objects.filter(
# active_user=logged_user
# ).exclude(behalf_user__in=data_behalf_user).values('behalf_user')
# print(removed_behalf_user)
# existing
# new
# removed
ChangeRequestSettings.objects.filter(active_user=logged_user).delete()
if serializer.is_valid(raise_exception=True):
serializer.save()
message = {
'code': 201,
'status': 'success',
......
......@@ -219,22 +219,6 @@ class ChangeRequestFormsViewset(viewsets.ModelViewSet):
overdue = overdue_filtered.count()
# server side computations
# status_total = pending + approved + rejected + cancelled + completed
# close = rejected + cancelled + completed
# opened = pending + approved
# open_percent = round((opened/status_total) * 100)
# close_percent = round((close/status_total) * 100)
# priority_total = high + normal
# high_percent = round((high/priority_total) * 100)
# normal_percent = round((normal/priority_total) * 100)
message = {
'account_no': id_number,
'pending': pending,
......@@ -246,10 +230,6 @@ class ChangeRequestFormsViewset(viewsets.ModelViewSet):
'normal': normal,
'awaiting': awaiting,
'overdue': overdue,
# 'open_percent': open_percent,
# 'close_percent': close_percent,
# 'high_percent': high_percent,
# 'normal_percent': normal_percent,
'code': 200,
'status': 'success',
'message': 'Dashboard Summary'
......@@ -1174,6 +1154,54 @@ class ChangeRequestFormsViewset(viewsets.ModelViewSet):
return Response(message,
status=status.HTTP_500_INTERNAL_SERVER_ERROR)
@action(detail=False,
methods=['get'],
url_path='onbehalf',
name="List of Actions on Behalf")
def list_by_onbehalf_view(self, request):
self.serializer_class = ChangeRequestFormHeaderSerializerList
id_number = self.request.user.code
self.queryset = change_request.list_by_user_without_dept(id_number)
# self.queryset = change_request.filter_onbehalf_crlist(
# self.queryset, id_number)
self.queryset = change_request.filter_base(
self.queryset,
request.query_params.get('company_requested_to'),
request.query_params.get('department_requested_to'),
request.query_params.get('date_modified_from'),
request.query_params.get('date_modified_to'),
request.query_params.get('date_required_from'),
request.query_params.get('date_required_to'),
request.query_params.get('form_type'),
)
queryset = self.filter_queryset(self.queryset)
page = self.paginate_queryset(queryset)
if page is not None:
serializer = self.get_serializer(page, many=True)
message = status_message_response(
200,
'success',
'List of Change Request Forms for on behalf found',
serializer.data
)
return self.get_paginated_response(message)
serializer = self.get_serializer(self.queryset, many=True)
return Response(
serializer.data,
status=status.HTTP_200_OK
)
class ChangeRequestFormPost(APIView):
......@@ -1380,5 +1408,4 @@ class ChangeRequestFormPost(APIView):
'message': 'Request was not able to process' + str(e),
}
return Response(message,
status=status.HTTP_500_INTERNAL_SERVER_ERROR)
status=status.HTTP_500_INTERNAL_SERVER_ERROR)
\ No newline at end of file
......@@ -525,7 +525,7 @@ def get_max_batchno(request):
def crhistory_save(batch_no, main_action,
action, entity, form_code,
fromValue, toValue):
models.ChangeRequestHistory.objects.create(
batch_no=batch_no,
main_action=main_action,
......@@ -822,4 +822,52 @@ def cancelled_user_trigger(form_code,
# create notification
notification_create(form_code, message, receiver_code,
sender_code, 'cms')
\ No newline at end of file
sender_code, 'cms')
def send_email_onbehalf(active_user, behalf_usernext_level):
# get details of next approver/s
next_approver = models.ChangeRequestFormApprovers.objects.filter(
level=str(next_level),
form_code=form_code
)
# LOOP on next approver for sending email
for n_approver in next_approver:
# print(n_approver.delegation)
# NOTIF MSG FOR NEXT APPROVER
msg = APPROVER_MESSAGE.split(';')[0]
if n_approver.delegation.name.lower() == 'vendor/implementor':
msg = VENDOR_ACKNOWLEDGE_MESSAGE.split(';')[0]
# next approver details --------------------------------------------------
receiver_instance = get_account_details(n_approver.user.code)
receiver_name = receiver_instance.values_list('name', flat=True)[0]
receiver_email = receiver_instance.values_list('email', flat=True)[0]
receiver_code = receiver_instance.values_list('code', flat=True)[0]
# call sender email
name = receiver_name
cr_number = cr_number
cr_name = template_name
company_requestedto = company_name
department_requestedto = dept_name
priority_level = requested_to_priority
status = cr_status
url = cr_link
recipient = receiver_email
delegation_type = n_approver.delegation.name.lower()
delegation_recipient = 'None'
admin = sender_email
args = [name, cr_number, cr_name,
company_requestedto, department_requestedto, priority_level,
status, url, recipient, delegation_type,
delegation_recipient, admin]
main_threading(args, sender.routing_table_actions_required)
\ No newline at end of file
......@@ -102,6 +102,7 @@ def list_by_user_archived(user_id_number):
return return_queryset
def list_by_user_without_dept(user_id_number):
try:
return_queryset = models.ChangeRequestFormHeader.objects.filter(
......@@ -768,7 +769,38 @@ def cr_routing_actions(approver_instance, current_user, move_to_level):
return True
# def filter_onbehalf_crlist(base_queryset,
# user_id_number):
# return_queryset = base_queryset
# try:
# on_behalf_included = []
# for query in return_queryset:
# next_approvers = models.ChangeRequestFormApprovers.objects.filter(
# Q(form_code=query.form_code) &
# Q(is_action=True)
# ).order_by("level")
# for next_approver in next_approvers:
# if next_approver.user.code == user_id_number:
# awaiting_included.append(query.form_code)
# return_queryset = return_queryset.filter(
# form_code__in=awaiting_included
# ).exclude(
# (Q(status__icontains='Rejected') |
# Q(status__icontains='Completed & Accepted') |
# Q(status__icontains='Cancelled') |
# Q(status__icontains='Draft'))
# )
# except Exception as e:
# pass
# return return_queryset
......
......@@ -595,4 +595,50 @@ def routing_table_overdue(args):
createdby=admin,
modifiedby=admin
)
return True
# RMS-ONBEHALF
def routing_table_overdue(args):
name = args[0]
action = args[1]
active_user = args[2]
recipient = args[9]
admin = args[10]
F = open(os.path.join(settings.EMAIL_TEMPLATES_ROOT, 'RMS-ONBEHALF.html'), 'r')
FC = F.read()
FC = FC.replace('{name}', name)
FC = FC.replace('{action}', action)
FC = FC.replace('{active_user}', active_user)
try:
send_mail(
subject='Resource Management System - On Behalf User',
message='',
from_email=settings.EMAIL_DEFAULT_SENDER,
recipient_list=(recipient,),
html_message=FC,
fail_silently=False
)
models.EmailLogs.objects.create(
template='RMS-ONBEHALF.html',
recipients=recipient,
content=FC,
is_sent=True,
createdby=admin,
modifiedby=admin
)
except Exception as e:
models.EmailLogs.objects.create(
template='RMS-ONBEHALF.html',
recipients=recipient,
content=FC,
is_sent=False,
createdby=admin,
modifiedby=admin
)
return True
\ No newline at end of file
......@@ -6,23 +6,10 @@
<body style="font-family: arial;">
<h3>Resource Management System &#40;RMS&#41;</h3>
<h3 style="color:#888888;">Change Request Approval Reminder</h3><br>
<h3 style="color:#888888;">{action} on Behalf</h3><br>
<p>Dear {name},</p><br>
<p>Please be informed that a reminder has been sent to approve your change request. Please note that it will automatically be cancelled by the system if no action is taken within 30 days from the date it was submitted to the last approving officer.</p><br>
<b>Auto-Cancel Date</b><br>{auto_cancel_date}<br><br>
<b>Date Submitted to Last Approver</b><br>{date_submitted_last_approver}<br><br>
<b>Approver Pending Action</b><br>{approver_pending_action}<br><br><br>
<b>CR Number</b><br>{cr_number}<br><br>
<b>CR Name</b><br>{cr_name}<br><br>
<b>Company Requested To</b><br>{company_requestedto}<br><br>
<b>Department Requested To</b><br>{department_requestedto}<br><br>
<b>Priority Level</b><br>{priority_level}<br><br>
<b>Status</b><br>{status}<br><br>
<p>Please click <u><a href="{url}" style="text-decoration:underline;color:#007bff;" target="_blank">here</a></u> to access the change request.</p><br>
<p>Please be informed that {active_user} {action} you as on behalf user for change request. </p><br>
<p>Sincerely,</p>
<p>RMS Team</p><br><br>
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment