Commit 6b2cd21e authored by Gladys Forte's avatar Gladys Forte

Merge pull request #396 in RMS/api-main-service from gladys-dev2 to RMSv2

* commit 'c1159317':
  completed and accepted, is editable, is_read retrieve
  refactoring actions initial
parents afcc6528 c1159317
...@@ -112,27 +112,33 @@ class ForgotPassword(APIView): ...@@ -112,27 +112,33 @@ class ForgotPassword(APIView):
@transaction.atomic @transaction.atomic
def post(self, request, *args, **kwargs): def post(self, request, *args, **kwargs):
email = request.data['email'] email = request.data['email']
username = request.data['username']
try: try:
user = request.user.email user = request.user.email
except Exception as e: except Exception as e:
user = str(settings.CATCH_EMAIL) user = str(settings.CATCH_EMAIL)
existingUser = User.objects.filter(email=email).first() existingUser = User.objects.filter(
email=email,
username=username).first()
date_now = datetime.now()
if existingUser: if existingUser:
# Check if there's existing request # Check if there's existing request
exToken = AuthToken\ exToken = AuthToken\
.objects\ .objects\
.filter( .filter(
user_id=existingUser.id, user=existingUser.code,
is_active=True)\ is_active=True,
timeout_at__lt=date_now)\
.first() .first()
if exToken: if exToken:
raise ParseError('There is an existing password reset for this user.') raise ParseError('There is an existing password reset for this user.')
REF = 'AUTH' REF = 'AUTH'
TOKEN = '' TOKEN = ''
# TIMEOUT = 3600
PASSCODE = 0 PASSCODE = 0
# Generate Random token for TOKEN # Generate Random token for TOKEN
...@@ -164,16 +170,8 @@ class ForgotPassword(APIView): ...@@ -164,16 +170,8 @@ class ForgotPassword(APIView):
args = [str(PASSCODE), str(url), user, str(existingUser.email), args = [str(PASSCODE), str(url), user, str(existingUser.email),
str(existingUser.name)] str(existingUser.name)]
# t1 = threading.Thread(target=sender.forgot_password, args=(args,))
# t1.start()
main_threading(args, sender.forgot_password)
# args = [str(PASSCODE), str(url), user, str(existingUser.email), main_threading(args, sender.forgot_password)
# str(existingUser.username)]
# t2 = threading.Thread(target=sender.forgot_password, args=(args,))
# t2.start()
# main_threading(args, sender.forgot_password)
return Response(data={"detail": "Forgot Password Sent"}, return Response(data={"detail": "Forgot Password Sent"},
status=status.HTTP_200_OK) status=status.HTTP_200_OK)
...@@ -189,14 +187,14 @@ class ValidateForgotPasswordResetToken(APIView): ...@@ -189,14 +187,14 @@ class ValidateForgotPasswordResetToken(APIView):
@transaction.atomic @transaction.atomic
def post(self, request, *args, **kwargs): def post(self, request, *args, **kwargs):
token = request.data['token'] token = request.data['token']
date_now = datetime.now() date_now = datetime.now()
existingToken = AuthToken.objects.filter(token=token).first() existingToken = AuthToken.objects.filter(token=token).first()
if existingToken: if existingToken:
if not existingToken.is_active: if not existingToken.is_active:
raise Exception('Request is no longer active') raise Exception('Request is no longer active')
elif existingToken.timeout_at < date_now: elif existingToken.timeout_at > date_now:
raise Exception('Token already expired') raise Exception('Token already expired')
return Response(data={ return Response(data={
......
...@@ -20,12 +20,27 @@ class ChangeRequestFormApproversSerializer( ...@@ -20,12 +20,27 @@ class ChangeRequestFormApproversSerializer(
"contact_no": instance.user.contact_no "contact_no": instance.user.contact_no
} }
ret['user'] = user_object ret['user'] = user_object
if instance.tmp_approver:
if instance.form_code.status == '' or instance.form_code.status == 'Draft':
if instance.tmp_approver.delegation.lower() == 'requestor':
ret['is_editable'] = False
elif instance.tmp_approver.user:
ret['is_editable'] = False
else:
ret['is_editable'] = True
else:
ret['is_editable'] = False
else:
ret['is_editable'] = False
return ret return ret
except Exception as e: except Exception as e:
ret['user'] = "none" ret['user'] = "none"
ret['department'] = "none" ret['department'] = "none"
ret['company'] = "none" ret['company'] = "none"
ret['is_editable'] = None
return ret return ret
class Meta: class Meta:
......
...@@ -177,7 +177,7 @@ class ChangeRequestFormsViewset(viewsets.ModelViewSet): ...@@ -177,7 +177,7 @@ class ChangeRequestFormsViewset(viewsets.ModelViewSet):
completed = self.queryset.filter( completed = self.queryset.filter(
status__iexact='Completed & Accepted' #Completed status__iexact='Completed & Accepted' #Completed
).count() ).count()
high = self.queryset.filter( high = self.queryset.filter(
requested_to_priority='High' requested_to_priority='High'
).count() ).count()
...@@ -241,10 +241,12 @@ class ChangeRequestFormsViewset(viewsets.ModelViewSet): ...@@ -241,10 +241,12 @@ class ChangeRequestFormsViewset(viewsets.ModelViewSet):
request.query_params.get('form_type'), request.query_params.get('form_type'),
) )
queryset = self.filter_queryset(self.queryset) if not request.query_params.get('status') == 'completed_accepted':
page = self.paginate_queryset(queryset) self.queryset = self.filter_queryset(self.queryset)
page = self.paginate_queryset(self.queryset)
if page is not None: if page is not None:
serializer = self.get_serializer(page, many=True) serializer = self.get_serializer(page, many=True)
...@@ -361,6 +363,14 @@ class ChangeRequestFormsViewset(viewsets.ModelViewSet): ...@@ -361,6 +363,14 @@ class ChangeRequestFormsViewset(viewsets.ModelViewSet):
) )
def retrieve(self, request, *args, **kwargs): def retrieve(self, request, *args, **kwargs):
id_number = self.request.user.code
form_code = kwargs['form_code']
models.Notification.objects.filter(
account_no=id_number,
form_code=form_code,
is_read=False).update(is_read=True)
instance = self.get_object() instance = self.get_object()
serializer = self.get_serializer(instance) serializer = self.get_serializer(instance)
return Response(serializer.data) return Response(serializer.data)
...@@ -697,6 +707,8 @@ class ChangeRequestFormsViewset(viewsets.ModelViewSet): ...@@ -697,6 +707,8 @@ class ChangeRequestFormsViewset(viewsets.ModelViewSet):
self.perform_update(serializer) self.perform_update(serializer)
new_instance = serializer.data new_instance = serializer.data
print(new_instance['action'])
crhistory_save( crhistory_save(
batchno, batchno,
enums.CREnum.ACTION.value, enums.CREnum.ACTION.value,
...@@ -706,9 +718,9 @@ class ChangeRequestFormsViewset(viewsets.ModelViewSet): ...@@ -706,9 +718,9 @@ class ChangeRequestFormsViewset(viewsets.ModelViewSet):
old_instance, old_instance,
new_instance new_instance
) )
# action
if action.lower() == 'approved': if action.lower() == 'approved':
the_next_vendor = models.ChangeRequestFormApprovers.objects.filter( the_next_vendor = models.ChangeRequestFormApprovers.objects.filter(
form_code=form_code, level=int(next_level), form_code=form_code, level=int(next_level),
delegation='Vendor/Implementor' delegation='Vendor/Implementor'
...@@ -793,7 +805,7 @@ class ChangeRequestFormsViewset(viewsets.ModelViewSet): ...@@ -793,7 +805,7 @@ class ChangeRequestFormsViewset(viewsets.ModelViewSet):
) )
if not prev_vendor.count() > 0: if not prev_vendor.count() > 0:
print("pasok")
models.ChangeRequestFormHeader.objects.filter( models.ChangeRequestFormHeader.objects.filter(
form_code=form_code form_code=form_code
).update(status='Rejected') ).update(status='Rejected')
......
...@@ -185,14 +185,12 @@ def filter_overdue(base_queryset): ...@@ -185,14 +185,12 @@ def filter_overdue(base_queryset):
def filter_status(base_queryset, def filter_status(base_queryset,
status): status):
return_queryset = base_queryset return_queryset = base_queryset
try: try:
if status == 'closed':
status = 'Completed & Accepted'
if status: if status:
if status.lower() == 'completed_accepted':
status = 'Completed & Accepted'
return_queryset = return_queryset.filter( return_queryset = return_queryset.filter(
status__iexact=status status__iexact=status
) )
...@@ -432,4 +430,37 @@ def attachment_add_edit_delete(form_request_body, ...@@ -432,4 +430,37 @@ def attachment_add_edit_delete(form_request_body,
new_instance new_instance
) )
return True return True
\ No newline at end of file
def check_vendor_level(position, routing_level, form_code):
query = ''
if position == 'next':
query = models.ChangeRequestFormApprovers.objects.filter(
form_code=form_code,
level=int(routing_level),
delegation='Vendor/Implementor'
)
elif position == 'last':
query = models.ChangeRequestFormApprovers.objects.filter(
form_code=form_code,
delegation='Vendor/Implementor'
).order_by('level').last()
elif position == 'prev':
query = models.ChangeRequestFormApprovers.objects.filter(
Q(form_code=form_code) &
Q(action='Completed') &
Q(delegation='Vendor/Implementor') &
Q(level__lte=int(level))
)
# def cr_routing_actions(approver_instance):
...@@ -9,7 +9,7 @@ ...@@ -9,7 +9,7 @@
<h3 style="color:#888888;">Change Request Rejected</h3><br> <h3 style="color:#888888;">Change Request Rejected</h3><br>
<p>Dear {name},</p><br> <p>Dear {name},</p><br>
<p>A change request you have completed has been rejected by the {delegation}.Please see the details of your change request below.</p><br> <p>A change request you have completed has been rejected by the {delegation}. Please see the details of your change request below.</p><br>
<b>Rejected By</b><br>{action_by}<br><br> <b>Rejected By</b><br>{action_by}<br><br>
<b>Routing Level</b><br>{routing_level}<br><br> <b>Routing Level</b><br>{routing_level}<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