Commit 11d39015 authored by John Red Medrano's avatar John Red Medrano

Merge pull request #294 in RMS/api-main-service from RMSv2 to staging

* commit 'cbf81f0e':
  requestor and poc condition
  fixed user list onf template and form, user dont allowed edit when the user has transaction on CMS
  testing
  testing
  fixing
  testing
  testing
  testing
  fixing
  fixing
  fixing
  try
parents a4e1431c cbf81f0e
...@@ -158,7 +158,7 @@ class ForgotPassword(APIView): ...@@ -158,7 +158,7 @@ class ForgotPassword(APIView):
f"?token={TOKEN}" f"?token={TOKEN}"
args = [str(PASSCODE), str(url), user, str(existingUser.email), args = [str(PASSCODE), str(url), user, str(existingUser.email),
str(existingUser.username)] str(existingUser.name)]
# t1 = threading.Thread(target=sender.forgot_password, args=(args,)) # t1 = threading.Thread(target=sender.forgot_password, args=(args,))
# t1.start() # t1.start()
......
from app.entities import models from app.entities import models
from rest_framework import serializers from rest_framework import serializers
from django.db.models import Q
class headers(serializers.ModelSerializer): class headers(serializers.ModelSerializer):
...@@ -7,42 +8,45 @@ class headers(serializers.ModelSerializer): ...@@ -7,42 +8,45 @@ class headers(serializers.ModelSerializer):
def to_representation(self, instance): def to_representation(self, instance):
ret = super().to_representation(instance) ret = super().to_representation(instance)
try: # try:
user = self.context['request'].user user = self.context['request'].user
id_number = user.code id_number = user.code
current_level = models.ChangeRequestFormApprovers.objects.filter( current_level = models.ChangeRequestFormApprovers.objects.filter(
Q(form_code=ret['form_code']) & Q(form_code=instance.form_code) &
(Q(action='') | Q(action=None)) (Q(action='') | Q(action=None))
).order_by('level') ).order_by('level')
if current_level.count() > 0 and current_level[0].user.code == id_number: if current_level.count() > 0 and current_level[0].user.code == id_number:
if instance.status.lower() == 'rejected': if instance.status.lower() == 'rejected':
approver = 'No' approver = 'No'
elif instance.status.lower() == 'cancelled': elif instance.status.lower() == 'cancelled':
approver = 'No'
elif instance.status.lower() == 'closed':
approver = 'No'
else:
approver = 'Yes'
else:
approver = 'No' approver = 'No'
elif instance.status.lower() == 'closed':
ret['action_required'] = approver approver = 'No'
ret['company'] = instance.requested_to_company.name else:
ret['department'] = instance.requested_to_department.name approver = 'Yes'
ret['requested_by'] = instance.requested_by_user.name else:
ret['requested_to_target_date'] = instance.requested_to_target_date.strftime('%Y-%m-%d-%H:%M:%S') approver = 'No'
ret['created'] = instance.created.strftime('%Y-%m-%d-%H:%M:%S')
return ret ret['requested_to_company'] = instance.requested_to_company.name
except Exception as e: ret['requested_to_department'] = instance.requested_to_department.name
ret['action_required'] = "No" ret['requested_by_user'] = instance.requested_by_user.name
ret['company'] = "None" ret['requested_to_target_date'] = instance.requested_to_target_date.strftime('%Y-%m-%d-%H:%M:%S')
ret['department'] = "None" # ret['created'] = instance.created.strftime('%Y-%m-%d-%H:%M:%S')
ret['requested_by'] = "None" ret['created'] = instance.created.strftime('%Y-%m-%d-%H:%M:%S')
ret['action'] = approver
# ret['requested_to_target_date'] = instance.requested_to_target_date.strftime('%Y-%m-%d-%H:%M:%S')
print(ret)
return ret
# except Exception as e:
# ret['action_required'] = "No"
# ret['company'] = "None"
# ret['department'] = "None"
# ret['requested_by'] = "None"
return ret # return ret
class Meta: class Meta:
...@@ -50,11 +54,12 @@ class headers(serializers.ModelSerializer): ...@@ -50,11 +54,12 @@ class headers(serializers.ModelSerializer):
fields = ( fields = (
'requested_to_template_id', 'requested_to_template_id',
'requested_to_template_name', 'requested_to_template_name',
'company_desc', 'requested_to_company',
'department_desc', 'requested_to_department',
'requested_desc', 'requested_by_user',
'status', 'status',
'requested_to_priority', 'requested_to_priority',
# 'action',
'created', 'created',
'requested_to_target_date' 'requested_to_target_date'
) )
...@@ -77,9 +77,9 @@ class DownloadRequest(XLSXFileMixin, ReadOnlyModelViewSet): ...@@ -77,9 +77,9 @@ class DownloadRequest(XLSXFileMixin, ReadOnlyModelViewSet):
"Requested By", "Requested By",
"Status", "Status",
"Priority Level", "Priority Level",
"Action"
"Date Modified", "Date Modified",
"Date Required" "Date Required"
"Action",
], ],
'column_width': [17, 30, 17], 'column_width': [17, 30, 17],
'height': 25, 'height': 25,
......
...@@ -759,7 +759,7 @@ class ChangeRequestFormsViewset(viewsets.ModelViewSet): ...@@ -759,7 +759,7 @@ class ChangeRequestFormsViewset(viewsets.ModelViewSet):
).update(status='Rejected') ).update(status='Rejected')
elif action.lower() == 'completed': elif action.lower() == 'completed':
# EMAIL CODE FOR REQUESTOR # EMAIL CODE FOR REQUESTOR
requestor_notification_msg = REQUESTOR_COMPLETION_MESSAGE.split(';')[0] requestor_notification_msg = REQUESTOR_COMPLETION_MESSAGE.split(';')[0]
...@@ -774,10 +774,19 @@ class ChangeRequestFormsViewset(viewsets.ModelViewSet): ...@@ -774,10 +774,19 @@ class ChangeRequestFormsViewset(viewsets.ModelViewSet):
).update( ).update(
date_sent=datetime.now() date_sent=datetime.now()
) )
the_last_vendor = models.ChangeRequestFormApprovers.objects.filter(
form_code=form_code, delegation='Vendor/Implementor'
).order_by('level').last()
models.ChangeRequestFormHeader.objects.filter( if current_user == the_last_vendor.user.code:
form_code=form_code models.ChangeRequestFormHeader.objects.filter(
).update(status='Completed') form_code=form_code
).update(status='Completed')
else:
models.ChangeRequestFormHeader.objects.filter(
form_code=form_code
).update(status='Approved')
elif action.lower() == 'acknowledged': elif action.lower() == 'acknowledged':
...@@ -854,7 +863,19 @@ class ChangeRequestFormsViewset(viewsets.ModelViewSet): ...@@ -854,7 +863,19 @@ class ChangeRequestFormsViewset(viewsets.ModelViewSet):
serializer.is_valid(raise_exception=True) serializer.is_valid(raise_exception=True)
old_instance = model_to_dict(instance) old_instance = model_to_dict(instance)
self.perform_update(serializer)
requestor = serializer.validated_data['requested_by_user'].code
poc = serializer.validated_data['requested_to_user'].code
if requestor == poc:
message = {
'code': 400,
'status': 'failed',
'message': 'Cannot assign same user on point of contact and requestor',
}
return Response(message, status=status.HTTP_400_BAD_REQUEST)
else:
self.perform_update(serializer)
new_instance = serializer.data new_instance = serializer.data
print(serializer.errors) print(serializer.errors)
...@@ -964,8 +985,19 @@ class ChangeRequestFormsViewset(viewsets.ModelViewSet): ...@@ -964,8 +985,19 @@ class ChangeRequestFormsViewset(viewsets.ModelViewSet):
serializer.is_valid(raise_exception=True) serializer.is_valid(raise_exception=True)
old_instance = model_to_dict(instance) old_instance = model_to_dict(instance)
self.perform_update(serializer)
requestor = serializer.validated_data['requested_by_user'].code
poc = serializer.validated_data['requested_to_user'].code
if requestor == poc:
message = {
'code': 400,
'status': 'failed',
'message': 'Cannot assign same user on point of contact and requestor',
}
return Response(message, status=status.HTTP_400_BAD_REQUEST)
else:
self.perform_update(serializer)
form_header = get_object_or_404(models.ChangeRequestFormHeader, form_header = get_object_or_404(models.ChangeRequestFormHeader,
pk=instance.id) pk=instance.id)
...@@ -1201,8 +1233,18 @@ class ChangeRequestFormPost(APIView): ...@@ -1201,8 +1233,18 @@ class ChangeRequestFormPost(APIView):
data=form_header_data) data=form_header_data)
if serializer.is_valid(raise_exception=True): if serializer.is_valid(raise_exception=True):
serializer.save() requestor = serializer.validated_data['requested_by_user'].code
poc = serializer.validated_data['requested_to_user'].code
if requestor == poc:
message = {
'code': 400,
'status': 'failed',
'message': 'Cannot assign same user on point of contact and requestor',
}
return Response(message, status=status.HTTP_400_BAD_REQUEST)
else:
serializer.save()
frm_id = serializer.data['form_code'] frm_id = serializer.data['form_code']
# create form approvers # create form approvers
...@@ -1213,26 +1255,6 @@ class ChangeRequestFormPost(APIView): ...@@ -1213,26 +1255,6 @@ class ChangeRequestFormPost(APIView):
counter = counter + 1 counter = counter + 1
data_list_approver.append(frm_approver) data_list_approver.append(frm_approver)
#append vendor and requestor in routing table
# counter = counter + 1
# vendor_data = {
# 'level': counter,
# 'delegation': 'Vendor/Implementor',
# 'user': form_header['requested_to_user'],
# 'form_code': frm_id
# }
# data_list_approver.append(vendor_data)
# counter = counter + 1
# requestor_data = {
# 'level': counter,
# 'delegation': 'Requestor',
# 'user': form_header['requested_by_user'],
# 'form_code': frm_id
# }
# data_list_approver.append(requestor_data)
serializerApprover = ChangeRequestFormApproversSerializer( serializerApprover = ChangeRequestFormApproversSerializer(
data=data_list_approver, many=True) data=data_list_approver, many=True)
......
...@@ -25,7 +25,7 @@ class UserListForm(APIView): ...@@ -25,7 +25,7 @@ class UserListForm(APIView):
user_list = models.User.objects.filter( user_list = models.User.objects.filter(
department=dept department=dept
).exclude(id=1) ).exclude(id=1)
user_list = user_list.exclude(id=request.user.id) # user_list = user_list.exclude(id=request.user.id)
print(user_list.query) print(user_list.query)
page = self.paginate_queryset(user_list) page = self.paginate_queryset(user_list)
......
...@@ -25,7 +25,7 @@ class UserListTemplate(APIView): ...@@ -25,7 +25,7 @@ class UserListTemplate(APIView):
user_list = models.User.objects.filter( user_list = models.User.objects.filter(
department=dept department=dept
).exclude(id=1) ).exclude(id=1)
user_list = user_list.exclude(id=request.user.id) # user_list = user_list.exclude(id=request.user.id)
print(user_list.query) print(user_list.query)
page = self.paginate_queryset(user_list) page = self.paginate_queryset(user_list)
......
...@@ -12,7 +12,8 @@ from django.contrib.auth.hashers import check_password ...@@ -12,7 +12,8 @@ from django.contrib.auth.hashers import check_password
from rest_framework.response import Response from rest_framework.response import Response
from app.applicationlayer.utils import model_to_dict from app.applicationlayer.utils import model_to_dict
from app.entities.models import ( from app.entities.models import (
User, EntityLog, PasswordReset, Application, UserImage User, EntityLog, PasswordReset, Application, UserImage,
ChangeRequestFormHeader, ChangeRequestTemplateHeader
) )
from app.helper.decorators import rms, error_safe from app.helper.decorators import rms, error_safe
from django.contrib.auth.hashers import make_password from django.contrib.auth.hashers import make_password
...@@ -27,6 +28,7 @@ from app.applicationlayer.utils import ( ...@@ -27,6 +28,7 @@ from app.applicationlayer.utils import (
main_threading main_threading
) )
from rest_framework.exceptions import ParseError from rest_framework.exceptions import ParseError
from django.db.models import Q
class UserViewSet(viewsets.ModelViewSet): class UserViewSet(viewsets.ModelViewSet):
...@@ -161,7 +163,35 @@ class UserViewSet(viewsets.ModelViewSet): ...@@ -161,7 +163,35 @@ class UserViewSet(viewsets.ModelViewSet):
partial = kwargs.pop('partial', False) partial = kwargs.pop('partial', False)
instance = self.get_object() instance = self.get_object()
serializer = self.get_serializer(instance, data=request.data, partial=partial)
cms_form = ChangeRequestFormHeader.objects.filter(
Q(frm_approvers__user__code=instance.code) |
Q(frm_stakes__user__code=instance.code) |
Q(requested_by_user__code=instance.code) |
Q(requested_to_user__code=instance.code)
)
cms_template = ChangeRequestTemplateHeader.objects.filter(
Q(created_by_user__code=instance.code) |
Q(requested_to_user__code=instance.code)
)
print(instance.department.code)
print(request.data['department'])
if instance.department.code != request.data['department']:
if cms_form.count() <= 0 or cms_template.count() <= 0:
raise ParseError(
'Cannot delete this record the user has a record on change request it might cause a data error'
)
serializer = self.get_serializer(
instance, data=request.data, partial=partial
)
serializer.is_valid(raise_exception=True) serializer.is_valid(raise_exception=True)
old_instance = model_to_dict(instance) old_instance = model_to_dict(instance)
......
...@@ -43,11 +43,15 @@ class UserManagementRetreiveSerializer(serializers.ModelSerializer): ...@@ -43,11 +43,15 @@ class UserManagementRetreiveSerializer(serializers.ModelSerializer):
applications = serializers.SerializerMethodField() applications = serializers.SerializerMethodField()
department = serializers.SerializerMethodField() department = serializers.SerializerMethodField()
company = serializers.SerializerMethodField() company = serializers.SerializerMethodField()
create_form = serializers.SerializerMethodField()
create_template = serializers.SerializerMethodField()
class Meta: class Meta:
model = models.User model = models.User
fields = ( fields = (
'id', 'id',
'create_form',
'create_template',
'code', 'name', 'code', 'name',
'username', 'contact_no', 'username', 'contact_no',
'image', 'company', 'image', 'company',
...@@ -75,6 +79,28 @@ class UserManagementRetreiveSerializer(serializers.ModelSerializer): ...@@ -75,6 +79,28 @@ class UserManagementRetreiveSerializer(serializers.ModelSerializer):
} }
return data return data
def get_create_form(self, user):
check_user = models.AllowedCompany.objects.filter(
Q(id_number=user.code) &
Q(create_change_request=True)
).count()
if check_user <= 0:
permission = False
else:
permission = True
return permission
def get_create_template(self, user):
check_user = models.AllowedCompany.objects.filter(
Q(id_number=user.code) &
Q(create_change_request_template=True)
).count()
if check_user <= 0:
permission = False
else:
permission = True
return permission
def get_image(self, user): def get_image(self, user):
request = self.context.get('request') request = self.context.get('request')
...@@ -86,17 +112,14 @@ class UserManagementRetreiveSerializer(serializers.ModelSerializer): ...@@ -86,17 +112,14 @@ class UserManagementRetreiveSerializer(serializers.ModelSerializer):
return request.build_absolute_uri('/media/no-user.png') return request.build_absolute_uri('/media/no-user.png')
def get_applications(self, user): def get_applications(self, user):
# app = user.application.exclude(id=1)
if user.user_type.upper() == enums.UserTypeEnum.USER.value: if user.user_type.upper() == enums.UserTypeEnum.USER.value:
app = user.application.exclude(id=1) app = user.application.exclude(id=1)
else: else:
app = user.application.all() app = user.application.all()
list_app = [] list_app = []
initial_mod = {}
rms = models.Application.objects.filter(id=1).values().first()
for data in app: for data in app:
mod = data.modules.filter(~Q(name__icontains='header')) mod = data.modules.all()
if user.user_type.upper() != enums.UserTypeEnum.USER.value: if user.user_type.upper() != enums.UserTypeEnum.USER.value:
if user.user_type.upper() != enums.UserTypeEnum.USER.value: if user.user_type.upper() != enums.UserTypeEnum.USER.value:
user_module = models.Module.objects.filter( user_module = models.Module.objects.filter(
......
...@@ -83,13 +83,21 @@ def tmp_add_edit_delete(tmp_request_body, ...@@ -83,13 +83,21 @@ def tmp_add_edit_delete(tmp_request_body,
self.perform_create(serializer) self.perform_create(serializer)
new_instance = serializer.data new_instance = serializer.data
try:
log_save( log_save(
enums.LogEnum.ADD.value, enums.LogEnum.ADD.value,
enum_type, enum_type,
old_instance['id'], old_instance['id'],
'', '',
new_instance new_instance
) )
except Exception as e:
log_save(
enums.LogEnum.ADD.value,
enum_type,
new_instance['id'],
'',
new_instance
)
return True return True
This diff is collapsed.
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