Commit 62e3e6c5 authored by Gladys Forte's avatar Gladys Forte

actions

parent 2d3352db
from app.entities import models
from rest_framework import serializers
from django.db.models import Q
from app.applicationlayer.cms.utils_cr import logged_user
from drf_writable_nested import WritableNestedModelSerializer
class ChangeRequestFormApproversSerializer(
serializers.ModelSerializer
):
# def to_representation(self, instance):
# ret = super().to_representation(instance)
# try:
# user = instance.user
def to_representation(self, instance):
ret = super().to_representation(instance)
try:
user = instance.user
# user_details = get_account_details(user)
# name = user_details['name']
# group = user_details['groups'][0]['name']
# company = user_details['groups'][0]['company__name']
# ret['name'] = name
# ret['department'] = group
# ret['company'] = company
# return ret
# except Exception as e:
# ret['name'] = "none"
# ret['department'] = "none"
# ret['company'] = "none"
# return ret
user_details = get_account_details(user)
name = user_details['name']
group = user_details['groups'][0]['name']
company = user_details['groups'][0]['company__name']
ret['name'] = name
ret['department'] = group
ret['company'] = company
return ret
except Exception as e:
ret['name'] = "none"
ret['department'] = "none"
ret['company'] = "none"
return ret
class Meta:
model = models.ChangeRequestFormApprovers
......
......@@ -25,7 +25,8 @@ from app.businesslayer.changerequest import change_request
from app.applicationlayer.cms.utils_cr import (number_generator,
send_mail_requestor,
next_approver_email,
crhistory_save)
crhistory_save,
send_mail_vendor)
from app.entities import enums
from django.forms.models import model_to_dict
import json
......@@ -431,8 +432,8 @@ class ChangeRequestFormsViewset(meviewsets.ModelViewSet):
)
def actions(self, request, *args, **kwargs):
# get request data
id = request.data['id']
current_user = request.data['user']
form_code = request.data['form_code']
delegation = request.data['delegation']
......@@ -441,11 +442,13 @@ class ChangeRequestFormsViewset(meviewsets.ModelViewSet):
next_level = int(request.data['level']) + 1
remarks = request.data['remarks']
# update current row in routing table
models.ChangeRequestFormApprovers.objects.filter(
pk=id).update(action=action,
remarks=remarks,
action_date=datetime.now())
# get details of next approver/s
next_approver = models.ChangeRequestFormApprovers.objects.filter(
level=str(next_level),
form_code=form_code
......@@ -465,17 +468,19 @@ class ChangeRequestFormsViewset(meviewsets.ModelViewSet):
remarks, level
)
# LOOP on next approver for sending email
for n_approver in next_approver:
print(n_approver.user)
print(n_approver.user.code)
if n_approver.delegation.lower() == 'vendor/implementor':
notification_msg = VENDOR_ACKNOWLEDGE_MESSAGE.split(';')[0]
next_approver_email(
n_approver.user, form_code, delegation,
notification_msg, action
n_approver.user.code, form_code, delegation,
notification_msg
)
# update next approver details
models.ChangeRequestFormApprovers.objects.filter(
Q(form_code=form_code) & Q(level=str(next_level))
).update(
......@@ -483,25 +488,24 @@ class ChangeRequestFormsViewset(meviewsets.ModelViewSet):
)
elif action.lower() == 'rejected':
if delegation.lower() == 'requestor':
notification_msg = VENDOR_REJECT_MESSAGE.split(';')[0]
email_code = VENDOR_REJECT_MESSAGE.split(';')[1]
send_mail_vendor(
current_user, form_code, delegation,
requestor_notification_msg, action, requestor_email_code,
requestor_notification_msg, action,
remarks, level
)
else:
# EMAIL CODE FOR REQUESTOR
requestor_notification_msg = REQUESTOR_REJECT_MESSAGE.split(';')[0]
requestor_email_code = REQUESTOR_REJECT_MESSAGE.split(';')[1]
# SEND EMAIL AND NOTIF TO REQUESTOR
send_mail_requestor(
current_user, form_code, delegation,
requestor_notification_msg, action, requestor_email_code,
requestor_notification_msg, action,
remarks, level
)
......
......@@ -10,7 +10,6 @@ from app.applicationlayer.utils import main_threading, notification_create
from app.helper.email_service import sender
CR_FRONT_LINK = settings.CR_FRONT_LINK
# NOTIFICATION = settings.NOTIFICATION
def get_dept_details(dept_no):
......@@ -68,16 +67,6 @@ class QuerySetHelper:
)
return context.queryset
# if self.request.query_params.get('search'):
# search_key = self.request.query_params.get('search')
# self.queryset = self.queryset.filter(
# Q(requested_to_template_name__icontains=search_key.lower()) |
# Q(requested_to_template_id__icontains=search_key.lower())
# )
# self.queryset = QuerySetHelper.Sort(self)
@staticmethod
def Filter(context):
if int(len(context.request.query_params)) > 0:
......@@ -114,41 +103,6 @@ def number_generator(prefix, id):
return autogenerated_no
def logged_user(self):
# return self.request.META.get('HTTP_ACCOUNT_NO')
return self.request.user
def receiver_body(
sender_account_no, receiver_account_no,
email_code, email_recipient,
app, sent, name, routing_level,
status, cr_number, cr_name,
company_requestedto,
department_requestedto,
priority_level, url
):
receiver_data = {
"sender_account_no": sender_account_no,
"receiver_account_no": receiver_account_no,
"email_code": email_code,
"email_recipient": email_recipient,
"app": app,
"sent": "False",
"name": name,
"routing_level": routing_level,
"status": status,
"cr_number": cr_number,
"cr_name": cr_name,
"company_requestedto": company_requestedto,
"department_requestedto": department_requestedto,
"priority_level": priority_level,
"url": url
}
return receiver_data
def get_template_instance(form_code):
template_instance = models.ChangeRequestFormHeader.objects.filter(
Q(form_code=form_code)
......@@ -156,48 +110,22 @@ def get_template_instance(form_code):
return template_instance
def send_notification(
form_code, cr_number, user_id_number,
user_name, message, app,
sender_id_number, sender_name
):
notification_data = {
"slug": form_code,
"change_request_template_code": cr_number,
# (OPENING TAG) receiver credential
"account_no": user_id_number,
"user": user_name,
# (CLOSING TAG) receiver credential
"notif_type": "ACTIVITY",
"message": message,
"is_read": False,
"app": app,
"sender_account_no": sender_id_number,
"createdby": sender_name
}
notification = requests.post(NOTIFICATION, data=notification_data)
# return notification.status
return notification
def send_mail_vendor(receiver,
form_code,
delegation,
msg,
action,
code,
def send_mail_vendor(current_user,
form_code,
delegation,
msg,
action,
remarks,
routing_level):
app = 'cms'
cr_link = f'{CR_FRONT_LINK}/{form_code}'
template_instance = get_template_instance(form_code)
cr_number = template_instance.requested_to_template_id
template_name = template_instance.requested_to_template_name
requested_to_company = template_instance.requested_to_company
requested_to_department = template_instance.requested_to_department
requested_by_user = template_instance.requested_by_user
created = template_instance.created
requested_to_company = template_instance.requested_to_company.code
requested_to_department = template_instance.requested_to_department.code
requested_by_user = template_instance.requested_by_user.code
requested_to_priority = template_instance.requested_to_priority
vendor_instance = models.ChangeRequestFormApprovers.objects.filter(
......@@ -212,7 +140,7 @@ def send_mail_vendor(receiver,
requestor_account_id = vendor['id_number']
# sender details
sender_instance = get_account_details(receiver)
sender_instance = get_account_details(current_user)
sender_account_username = sender_instance['username']
sender_account_id = sender_instance['id_number']
sender_name = sender_instance['name']
......@@ -316,62 +244,63 @@ def send_mail_requestor(current_user,
current_user)
def next_approver_email(receiver, form_code, delegation, msg, action):
def next_approver_email(receiver, form_code, delegation, msg):
cr_link = f'{CR_FRONT_LINK}/{form_code}'
template_instance = get_template_instance(form_code)
app = 'cms'
cr_number = template_instance.requested_to_template_id
template_name = template_instance.requested_to_template_name
requested_to_company = template_instance.requested_to_company
requested_to_department = template_instance.requested_to_department
requested_by_user = template_instance.requested_by_user
requested_to_company = template_instance.requested_to_company.code
requested_to_department = template_instance.requested_to_department.code
requested_by_user = template_instance.requested_by_user.code
requested_to_priority = template_instance.requested_to_priority
cr_status = template_instance.status
# for rec in receiver:
# receiver details
# if action == 'initial':
# next approver details --------------------------------------------------
receiver_instance = get_account_details(receiver)
# else:
# receiver_instance = get_account_details(receiver.user)
receiver_name = receiver_instance['name']
receiver_email = receiver_instance['email']
receiver_account_id = receiver_instance['id_number']
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]
# sender details
# requestor details --------------------------------------------------
sender_instance = get_account_details(requested_by_user)
sender_account_username = sender_instance['username']
sender_account_id = sender_instance['id_number']
sender_name = sender_instance['name']
sender_email = sender_instance.values_list('email', flat=True)[0]
sender_name = sender_instance.values_list('name', flat=True)[0]
sender_code = sender_instance.values_list('code', flat=True)[0]
group = get_dept_details(requested_to_department)
group_name = group['name']
department = get_dept_details(requested_to_department)
dept_name = department.values_list('name', flat=True)[0]
company = get_companies_details(requested_to_company)
company_name = company['name']
company_name = company.values_list('name', flat=True)[0]
data = receiver_body(
sender_account_id, receiver_account_id, code,
receiver_email, app, "False", receiver_name, 1,
"Pending", cr_number, template_name, company_name, group_name,
requested_to_priority, cr_link
)
email_status = requests.post(EMAIL, data=data)
# 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 = delegation
admin = sender_email
args = [name, cr_number, cr_name,
company_requestedto, department_requestedto, priority_level,
status, url, recipient, delegation_type, admin]
main_threading(args, sender.routing_table_actions_required)
message = f"{sender_name} {msg} ({template_name})"
notif = send_notification(
form_code, cr_number,
receiver_account_id, receiver_name,
message, app,
sender_account_id, sender_account_username
)
# create notification
return True
notification_create(form_code, message, receiver_code,
sender_code)
def cancel_overdue(request):
......
......@@ -21,7 +21,7 @@ def custom_exception_handler(exc, context):
value = value[0]
error_message['code'] = response.status_code
error_message['status'] = 'failed'
error_message['status'] = 'failedkk'
error_message['message'] = value
response.data = error_message
......
......@@ -634,20 +634,21 @@ def routing_table_actions_required(args):
url = args[7]
recipient = args[8]
action_type = args[9]
delegation_type = args[9]
admin = args[10]
if action_type == 'requestor':
email_template = 'RMS-ACTIONREQUIRED.html'
subject = 'Resource Management System - Action Required for Change Request'
elif action_type == 'vendor':
if delegation_type.lower() == 'vendor/implementor':
email_template = 'RMS-ACTIONREQUIRED-VENDOR.html'
subject = 'Resource Management System - Action Required for Change Request'
else:
email_template = 'RMS-ACTIONREQUIRED.html'
subject = 'Resource Management System - Action Required for Change Request'
F = open(os.path.join(settings.EMAIL_TEMPLATES_ROOT, email_template), 'r')
FC = F.read()
FC = FC.replace('{name}', name)
FC = FC.replace('{cr_number}', cr_number)
FC = FC.replace('{cr_name}', cr_name)
......
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