Commit ae00fff2 authored by Gladys Forte's avatar Gladys Forte

Restrict a requestor to submit a CR without atleast 1 approver v3

parent ca0ed5e2
...@@ -1180,8 +1180,24 @@ class ChangeRequestFormPost(APIView): ...@@ -1180,8 +1180,24 @@ class ChangeRequestFormPost(APIView):
@transaction.atomic() @transaction.atomic()
def post(self, request): def post(self, request):
form_header = request.data form_header = request.data
try: 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:
message = {
'code': 400,
'status': 'failed',
'message': 'Please select at least 1 approver before submitting this request.',
}
return Response(message, status=status.HTTP_400_BAD_REQUEST)
data_list_approver = [] data_list_approver = []
data_list_stake = [] data_list_stake = []
data_list_attach = [] data_list_attach = []
...@@ -1231,24 +1247,12 @@ class ChangeRequestFormPost(APIView): ...@@ -1231,24 +1247,12 @@ class ChangeRequestFormPost(APIView):
counter = 0 counter = 0
for frm_approver in frm_approvers: for frm_approver in frm_approvers:
frm_approver['form_code'] = frm_id frm_approver['form_code'] = frm_id
if frm_approver['delegation'] not in ['DELEGATION-20191119-0000002', 'DELEGATION-20191119-0000001']:
counter = counter + 1
data_list_approver.append(frm_approver) data_list_approver.append(frm_approver)
serializerApprover = ChangeRequestFormApproversSerializer( serializerApprover = ChangeRequestFormApproversSerializer(
data=data_list_approver, many=True) data=data_list_approver, many=True)
if serializerApprover.is_valid(raise_exception=True): if serializerApprover.is_valid(raise_exception=True):
if serializer.data['status'].lower() == 'pending' and counter == 0:
transaction.savepoint_rollback(sp1)
message = {
'code': 400,
'status': 'failed',
'message': 'Please select at least 1 approver before submitting this request.',
}
return Response(message, status=status.HTTP_400_BAD_REQUEST)
serializerApprover.save() serializerApprover.save()
# create form stakes # create form stakes
......
...@@ -42,6 +42,8 @@ from app.applicationlayer.cms.template.header.table_filters import HeaderFilterS ...@@ -42,6 +42,8 @@ from app.applicationlayer.cms.template.header.table_filters import HeaderFilterS
from rest_framework.filters import SearchFilter, OrderingFilter from rest_framework.filters import SearchFilter, OrderingFilter
from django_filters import rest_framework as filters from django_filters import rest_framework as filters
from django_filters.rest_framework import DjangoFilterBackend from django_filters.rest_framework import DjangoFilterBackend
import itertools
from operator import itemgetter
class ChangeRequestTemplatesViewset(viewsets.ModelViewSet): class ChangeRequestTemplatesViewset(viewsets.ModelViewSet):
...@@ -365,12 +367,6 @@ class ChangeRequestTemplatePost(APIView): ...@@ -365,12 +367,6 @@ class ChangeRequestTemplatePost(APIView):
sp1 = transaction.savepoint() # nothing will save to db sp1 = transaction.savepoint() # nothing will save to db
# cr_prefix = request.data['requested_to_template_id'])
# models.ChangeRequestTemplateHeader.objects.filter(
# requested_to_template_id=cr_prefix
# )
serializer = ChangeRequestTemplatesSerializer( serializer = ChangeRequestTemplatesSerializer(
data=template_header_data) data=template_header_data)
...@@ -387,8 +383,24 @@ class ChangeRequestTemplatePost(APIView): ...@@ -387,8 +383,24 @@ class ChangeRequestTemplatePost(APIView):
data_list_approver.append(tmp_approver) data_list_approver.append(tmp_approver)
# add checking # add checking
# Do not allow adding an approver for the same level. approvers_data = sorted(data_list_approver, key=itemgetter('level', 'user'))
# Message "This approver is already existing for the same level of approval." (CR Temp and CR Form)
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( serializerApprover = ChangeRequestTemplateApproversSerializer(
data=data_list_approver, many=True) data=data_list_approver, many=True)
......
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