Commit 337c9802 authored by Gladys Forte's avatar Gladys Forte

Do not allow adding an approver for the same level

parent ae00fff2
......@@ -22,7 +22,8 @@ from django.db import transaction, IntegrityError, connection
from app.applicationlayer.utils import (QuerySetHelper,
status_message_response,
send_broadcast_message)
from app.businesslayer.changerequest import change_request
from app.businesslayer.changerequest import (change_request,
change_request_template)
from app.applicationlayer.cms.utils_cr import (number_generator,
send_mail_requestor,
......@@ -1181,22 +1182,18 @@ class ChangeRequestFormPost(APIView):
def post(self, request):
form_header = request.data
try:
# validate if approver exists in routing table
frm_approvers = form_header['frm_approvers']
counter = 0
for frm_approver in frm_approvers:
# count all delegation not equal to Requestor and Vendor
if frm_approver['delegation'] not in ['DELEGATION-20191119-0000002', 'DELEGATION-20191119-0000001']:
counter = counter + 1
# Prompt error when submitting CR Form without Approver Delegation
if form_header['status'].lower() == 'pending' and counter == 0:
# Do not allow adding an approver for the same level
validation_result = change_request_template.validation_approver_same_level(frm_approvers)
if validation_result is not None:
message = {
'code': 400,
'status': 'failed',
'message': 'Please select at least 1 approver before submitting this request.',
'message': validation_result + ' is already existing for the same level of approval.',
}
return Response(message, status=status.HTTP_400_BAD_REQUEST)
return Response(message,
status=status.HTTP_400_BAD_REQUEST)
data_list_approver = []
data_list_stake = []
......@@ -1241,7 +1238,7 @@ class ChangeRequestFormPost(APIView):
serializer.save()
frm_id = serializer.data['form_code']
# create form approvers
frm_approvers = form_header['frm_approvers']
counter = 0
......
......@@ -23,7 +23,8 @@ from django.db.models import Q
from app.applicationlayer.utils import log_save, CustomPagination
from rest_framework.exceptions import ParseError
from app.businesslayer.changerequest.change_request_template import (
tmp_add_edit_delete
tmp_add_edit_delete,
validation_approver_same_level
)
from app.applicationlayer.management.account.serializer import ChangeRequestList
from app.applicationlayer.cms.template.approver.serializers import ChangeRequestTemplateApproversSerializer
......@@ -42,8 +43,6 @@ from app.applicationlayer.cms.template.header.table_filters import HeaderFilterS
from rest_framework.filters import SearchFilter, OrderingFilter
from django_filters import rest_framework as filters
from django_filters.rest_framework import DjangoFilterBackend
import itertools
from operator import itemgetter
class ChangeRequestTemplatesViewset(viewsets.ModelViewSet):
......@@ -346,6 +345,19 @@ class ChangeRequestTemplatePost(APIView):
template_header = request.data
try:
tmp_approvers = template_header['tmp_approvers']
# Do not allow adding an approver for the same level
validation_result = validation_approver_same_level(tmp_approvers)
if validation_result is not None:
message = {
'code': 400,
'status': 'failed',
'message': validation_result + ' is already existing for the same level of approval.',
}
return Response(message,
status=status.HTTP_400_BAD_REQUEST)
data_list_approver = []
data_list_stake = []
data_list_attach = []
......@@ -381,26 +393,6 @@ class ChangeRequestTemplatePost(APIView):
for tmp_approver in tmp_approvers:
tmp_approver['template_no'] = tmp_id
data_list_approver.append(tmp_approver)
# add checking
approvers_data = sorted(data_list_approver, key=itemgetter('level', 'user'))
for key, value in itertools.groupby(approvers_data, key=itemgetter('level', 'user')):
count_user_same_level = 0
for i in value:
count_user_same_level = count_user_same_level + 1
user_code = i.get('user')
if count_user_same_level > 1:
transaction.savepoint_rollback(sp1)
user_name = models.User.objects.get(code=user_code)
print(user_name)
message = {
'code': 400,
'status': 'failed',
'message': ' is already existing for the same level of approval.',
}
return Response(message, status=status.HTTP_400_BAD_REQUEST)
serializerApprover = ChangeRequestTemplateApproversSerializer(
data=data_list_approver, many=True)
......
......@@ -767,15 +767,6 @@ def cr_routing_actions(approver_instance, current_user, move_to_level):
return True
......
......@@ -20,6 +20,9 @@ from app.entities import enums, models
from app.applicationlayer.utils import log_save, CustomPagination
from app.applicationlayer.cms.template import serializers
import itertools
from operator import itemgetter
def tmp_add_edit_delete(tmp_request_body,
queryset,
......@@ -101,3 +104,31 @@ def tmp_add_edit_delete(tmp_request_body,
)
return True
def validation_approver_same_level(approvers):
data_list_appr = []
for approver in approvers:
if 'user' in approver and 'level' in approver:
data_list_appr.append(approver)
# add checking
approvers_data = sorted(data_list_appr,
key=itemgetter('level', 'user'))
for key, value in itertools.groupby(approvers_data,
key=itemgetter('level', 'user')):
count_user_same_level = 0
for i in value:
count_user_same_level = count_user_same_level + 1
user_code = i.get('user')
if count_user_same_level > 1:
user = models.User.objects.get(code=user_code)
user_name = user.name
return user_name
return None
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