Commit 69e692a0 authored by Gladys Forte's avatar Gladys Forte

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

* commit '061b7d00':
  overdue dashboard added filter
  added company and dep to form approvers
  added broadcast message retrieve form
  added is editable to template approver
  added is_editable to template approver
  completed and accepted, is editable, is_read retrieve
  refactoring actions initial
parents 7e547a1b 061b7d00
......@@ -112,27 +112,33 @@ class ForgotPassword(APIView):
@transaction.atomic
def post(self, request, *args, **kwargs):
email = request.data['email']
username = request.data['username']
try:
user = request.user.email
except Exception as e:
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:
# Check if there's existing request
exToken = AuthToken\
.objects\
.filter(
user_id=existingUser.id,
is_active=True)\
user=existingUser.code,
is_active=True,
timeout_at__lt=date_now)\
.first()
if exToken:
raise ParseError('There is an existing password reset for this user.')
REF = 'AUTH'
TOKEN = ''
# TIMEOUT = 3600
PASSCODE = 0
# Generate Random token for TOKEN
......@@ -164,16 +170,8 @@ class ForgotPassword(APIView):
args = [str(PASSCODE), str(url), user, str(existingUser.email),
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),
# str(existingUser.username)]
# t2 = threading.Thread(target=sender.forgot_password, args=(args,))
# t2.start()
# main_threading(args, sender.forgot_password)
main_threading(args, sender.forgot_password)
return Response(data={"detail": "Forgot Password Sent"},
status=status.HTTP_200_OK)
......@@ -189,14 +187,14 @@ class ValidateForgotPasswordResetToken(APIView):
@transaction.atomic
def post(self, request, *args, **kwargs):
token = request.data['token']
date_now = datetime.now()
existingToken = AuthToken.objects.filter(token=token).first()
if existingToken:
if not existingToken.is_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')
return Response(data={
......
......@@ -20,12 +20,70 @@ class ChangeRequestFormApproversSerializer(
"contact_no": instance.user.contact_no
}
ret['user'] = user_object
if instance.form_code.status == 'Draft':
if instance.tmp_approver:
if instance.tmp_approver.user or instance.tmp_approver.delegation.lower() == 'requestor':
ret['editable_user'] = False
else:
ret['editable_user'] = True
if instance.tmp_approver.company or instance.tmp_approver.delegation.lower() == 'requestor':
ret['editable_comp'] = False
else:
ret['editable_comp'] = True
if instance.tmp_approver.department or instance.tmp_approver.delegation.lower() == 'requestor':
ret['editable_dept'] = False
else:
ret['editable_dept'] = True
else:
ret['editable_user'] = False
ret['editable_comp'] = False
ret['editable_dept'] = False
else:
ret['editable_user'] = False
ret['editable_comp'] = False
ret['editable_dept'] = False
return ret
except Exception as e:
ret['user'] = "none"
ret['department'] = "none"
ret['company'] = "none"
if instance.form_code.status == 'Draft':
if instance.tmp_approver:
if instance.tmp_approver.user or instance.tmp_approver.delegation.lower() == 'requestor':
ret['editable_user'] = False
else:
ret['user'] = None
ret['editable_user'] = True
if instance.tmp_approver.company or instance.tmp_approver.delegation.lower() == 'requestor':
ret['company'] = model_to_dict(
instance.tmp_approver.company)
ret['editable_comp'] = False
else:
ret['company'] = None
ret['editable_comp'] = True
if instance.tmp_approver.department or instance.tmp_approver.delegation.lower() == 'requestor':
ret['department'] = model_to_dict(
instance.tmp_approver.department)
ret['editable_dept'] = False
else:
ret['department'] = None
ret['editable_dept'] = True
else:
ret['editable_user'] = False
ret['editable_comp'] = False
ret['editable_dept'] = False
else:
ret['editable_user'] = False
ret['editable_comp'] = False
ret['editable_dept'] = False
return ret
class Meta:
......
......@@ -16,7 +16,9 @@ import requests
from django.conf import settings
from rest_framework.exceptions import ValidationError
from django.db import transaction, IntegrityError, connection
from app.applicationlayer.utils import QuerySetHelper, status_message_response
from app.applicationlayer.utils import (QuerySetHelper,
status_message_response,
send_broadcast_message)
from app.businesslayer.changerequest import change_request
from app.applicationlayer.cms.utils_cr import (number_generator,
......@@ -177,7 +179,7 @@ class ChangeRequestFormsViewset(viewsets.ModelViewSet):
completed = self.queryset.filter(
status__iexact='Completed & Accepted' #Completed
).count()
high = self.queryset.filter(
requested_to_priority='High'
).count()
......@@ -241,10 +243,12 @@ class ChangeRequestFormsViewset(viewsets.ModelViewSet):
request.query_params.get('form_type'),
)
queryset = self.filter_queryset(self.queryset)
page = self.paginate_queryset(queryset)
if not request.query_params.get('status') == 'completed_accepted':
self.queryset = self.filter_queryset(self.queryset)
page = self.paginate_queryset(self.queryset)
if page is not None:
serializer = self.get_serializer(page, many=True)
......@@ -361,6 +365,23 @@ class ChangeRequestFormsViewset(viewsets.ModelViewSet):
)
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)
ROOM = id_number
SENDER = id_number
send_broadcast_message(
ROOM,
SENDER,
'UPDATE NOTIFICATIONS'
)
instance = self.get_object()
serializer = self.get_serializer(instance)
return Response(serializer.data)
......@@ -697,6 +718,8 @@ class ChangeRequestFormsViewset(viewsets.ModelViewSet):
self.perform_update(serializer)
new_instance = serializer.data
print(new_instance['action'])
crhistory_save(
batchno,
enums.CREnum.ACTION.value,
......@@ -706,9 +729,9 @@ class ChangeRequestFormsViewset(viewsets.ModelViewSet):
old_instance,
new_instance
)
# action
if action.lower() == 'approved':
the_next_vendor = models.ChangeRequestFormApprovers.objects.filter(
form_code=form_code, level=int(next_level),
delegation='Vendor/Implementor'
......@@ -793,7 +816,7 @@ class ChangeRequestFormsViewset(viewsets.ModelViewSet):
)
if not prev_vendor.count() > 0:
print("pasok")
models.ChangeRequestFormHeader.objects.filter(
form_code=form_code
).update(status='Rejected')
......
......@@ -20,12 +20,47 @@ class ChangeRequestTemplateApproversSerializer(
ret['company'] = model_to_dict(instance.user.department.company)
ret['department'] = model_to_dict(instance.user.department)
ret['user'] = user_object
if instance.user or instance.delegation.lower() == 'requestor':
ret['editable_user'] = False
else:
ret['editable_user'] = True
if instance.company or instance.delegation.lower() == 'requestor':
ret['editable_comp'] = False
else:
ret['editable_comp'] = True
if instance.department or instance.delegation.lower() == 'requestor':
ret['editable_dept'] = False
else:
ret['editable_dept'] = True
return ret
except Exception as e:
ret['company'] = "none"
ret['department'] = "none"
ret['name'] = "none"
if instance.user or instance.delegation.lower() == 'requestor':
ret['editable_user'] = False
else:
ret['user'] = None
ret['editable_user'] = True
if instance.company or instance.delegation.lower() == 'requestor':
ret['company'] = model_to_dict(
instance.company)
ret['editable_comp'] = False
else:
ret['company'] = None
ret['editable_comp'] = True
if instance.department or instance.delegation.lower() == 'requestor':
ret['department'] = model_to_dict(
instance.department)
ret['editable_dept'] = False
else:
ret['department'] = None
ret['editable_dept'] = True
return ret
class Meta:
......
......@@ -164,17 +164,17 @@ def filter_overdue(base_queryset):
return_queryset = base_queryset
try:
exclude_status = ['Cancelled', 'Completed & Accepted']
now = datetime.now()
overdue = []
for query in return_queryset:
if (query.requested_to_target_date < now):
overdue.append(query.form_code)
return_queryset = return_queryset.filter(
form_code__in=overdue
)
).exclude(status__in=exclude_status)
except Exception as e:
pass
......@@ -185,14 +185,12 @@ def filter_overdue(base_queryset):
def filter_status(base_queryset,
status):
return_queryset = base_queryset
return_queryset = base_queryset
try:
if status == 'closed':
status = 'Completed & Accepted'
if status:
if status.lower() == 'completed_accepted':
status = 'Completed & Accepted'
return_queryset = return_queryset.filter(
status__iexact=status
)
......@@ -432,4 +430,37 @@ def attachment_add_edit_delete(form_request_body,
new_instance
)
return True
\ No newline at end of file
return True
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):
# Generated by Django 2.2 on 2019-10-21 11:07
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
('entities', '0021_changerequestformapprovers_tmp_approver'),
]
operations = [
migrations.AddField(
model_name='changerequesttemplateapprovers',
name='company',
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, to='entities.Company', to_field='code'),
),
migrations.AddField(
model_name='changerequesttemplateapprovers',
name='department',
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, to='entities.Department', to_field='code'),
),
]
......@@ -557,6 +557,18 @@ class ChangeRequestTemplateApprovers(BaseApprover):
on_delete=models.PROTECT,
to_field='template_no',
related_name='tmp_approvers')
company = models.ForeignKey(
Company,
blank=True,
null=True,
on_delete=models.PROTECT,
to_field='code')
department = models.ForeignKey(
Department,
blank=True,
null=True,
on_delete=models.PROTECT,
to_field='code')
class Meta:
db_table = 'change_request_template_approvers'
......
......@@ -9,7 +9,7 @@
<h3 style="color:#888888;">Change Request Rejected</h3><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>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