Commit 7e547a1b authored by Gladys Forte's avatar Gladys Forte

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

* commit 'afcc6528':
  filter status
  fix compledted action
  fix rejected
  rejected update
  uploaded y as object
  forgot password
parents 3d321a4b afcc6528
......@@ -158,7 +158,7 @@ class ForgotPassword(APIView):
created=date_now,
timeout_at=timeout_at
).save()
url = f"{settings.FRONT_END_URL}/forgot-password/reset"\
f"?token={TOKEN}"
......@@ -190,10 +190,15 @@ class ValidateForgotPasswordResetToken(APIView):
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:
raise Exception('Token already expired')
return Response(data={
"username": existingToken.user.username,
"email": existingToken.user.email
......
......@@ -32,6 +32,18 @@ class ChangeRequestFormAttachmentsSerializer(
class ChangeRequestFormAttachmentsFileUploadSerializer(
serializers.ModelSerializer
):
def to_representation(self, instance):
ret = super().to_representation(instance)
user_object = {
"id": instance.uploaded_by.id,
"name": instance.uploaded_by.name,
"username": instance.uploaded_by.username,
"code": instance.uploaded_by.code,
"email": instance.uploaded_by.email,
"contact_no": instance.uploaded_by.contact_no
}
ret['uploaded_by'] = user_object
return ret
class Meta:
model = models.ChangeRequestFormAttachments
......
......@@ -23,7 +23,7 @@ class headers(serializers.ModelSerializer):
approver = 'No'
elif instance.status.lower() == 'cancelled':
approver = 'No'
elif instance.status.lower() == 'closed':
elif instance.status.lower() == 'completed & accepted':
approver = 'No'
else:
approver = 'Yes'
......
......@@ -39,7 +39,7 @@ class ChangeRequestFormHeaderSerializer(
approver = 'No'
elif instance.status.lower() == 'cancelled':
approver = 'No'
elif instance.status.lower() == 'closed':
elif instance.status.lower() == 'completed & accepted':
approver = 'No'
else:
approver = 'Yes'
......@@ -122,7 +122,7 @@ class ChangeRequestFormHeaderSerializerList(
approver = 'No'
elif instance.status.lower() == 'cancelled':
approver = 'No'
elif instance.status.lower() == 'closed':
elif instance.status.lower() == 'completed & accepted':
approver = 'No'
else:
approver = 'Yes'
......
......@@ -175,7 +175,7 @@ class ChangeRequestFormsViewset(viewsets.ModelViewSet):
).count()
completed = self.queryset.filter(
status__iexact='Closed' #Completed
status__iexact='Completed & Accepted' #Completed
).count()
high = self.queryset.filter(
......@@ -760,10 +760,6 @@ class ChangeRequestFormsViewset(viewsets.ModelViewSet):
approver_instance.date_sent)
elif action.lower() == 'rejected':
models.ChangeRequestFormHeader.objects.filter(
form_code=form_code
).update(status='Rejected')
# send email to vendor
if delegation.lower() == 'requestor':
......@@ -774,22 +770,84 @@ class ChangeRequestFormsViewset(viewsets.ModelViewSet):
notification_msg, action,
remarks, level
)
prev_level = int(level) - 1
# reset last vendor details
models.ChangeRequestFormApprovers.objects.filter(
Q(form_code=form_code) &
Q(level=int(prev_level))
).update(
is_action=True,
action='Acknowledged',
action_date=datetime.now(),
date_sent=datetime.now()
)
else:
# EMAIL CODE FOR REQUESTOR
requestor_notification_msg = REQUESTOR_REJECT_MESSAGE.split(';')[0]
# SEND EMAIL AND NOTIF TO REQUESTOR
send_mail_requestor(
current_user, form_code, delegation,
requestor_notification_msg, action,
remarks, level
prev_vendor = models.ChangeRequestFormApprovers.objects.filter(
Q(form_code=form_code) &
Q(action='Completed') &
Q(delegation='Vendor/Implementor') &
Q(level__lte=int(level))
)
# update is_action for current level
if not prev_vendor.count() > 0:
print("pasok")
models.ChangeRequestFormHeader.objects.filter(
form_code=form_code
).update(status='Rejected')
# EMAIL CODE FOR REQUESTOR
requestor_notification_msg = REQUESTOR_REJECT_MESSAGE.split(';')[0]
# SEND EMAIL AND NOTIF TO REQUESTOR
send_mail_requestor(
current_user, form_code, delegation,
requestor_notification_msg, action,
remarks, level
)
else:
# EMAIL CODE FOR REQUESTOR
requestor_notification_msg = REQUESTOR_REJECT_MESSAGE.split(';')[0]
# SEND EMAIL AND NOTIF TO REQUESTOR
send_mail_requestor(
current_user, form_code, delegation,
requestor_notification_msg, action,
remarks, level
)
notification_msg = VENDOR_REJECT_MESSAGE.split(';')[0]
send_mail_vendor(
current_user, form_code, 'others',
notification_msg, action,
remarks, level
)
last_action_vendor = prev_vendor.last()
models.ChangeRequestFormApprovers.objects.filter(
code=last_action_vendor
).update(
is_action=True,
action='Acknowledged',
action_date=datetime.now(),
date_sent=datetime.now()
)
level = last_action_vendor.level + 1
models.ChangeRequestFormApprovers.objects.filter(
Q(form_code=form_code) & Q(level=int(level))
Q(form_code=form_code) & Q(level__gte=int(level))
).update(
is_action=False
is_action=False,
action=None,
remarks=None,
action_date=None,
date_sent=None
)
elif action.lower() == 'completed':
......@@ -802,7 +860,7 @@ class ChangeRequestFormsViewset(viewsets.ModelViewSet):
level == the_last_vendor.level):
models.ChangeRequestFormHeader.objects.filter(
form_code=form_code
).update(status='Completed')
).update(status='Approved')
else:
the_next_vendor = models.ChangeRequestFormApprovers.objects.filter(
form_code=form_code, level=int(next_level),
......@@ -859,7 +917,7 @@ class ChangeRequestFormsViewset(viewsets.ModelViewSet):
models.ChangeRequestFormHeader.objects.filter(
form_code=form_code
).update(status='Closed')
).update(status='Completed & Accepted')
# EMAIL CODE FOR VENDOR
requestor_notification_msg = VENDOR_ACCEPTANCE_MESSAGE.split(';')[0]
......
......@@ -92,7 +92,7 @@ class ChangeRequestFormHeaderSerializer(
approver = 'No'
elif instance.status.lower() == 'cancelled':
approver = 'No'
elif instance.status.lower() == 'closed':
elif instance.status.lower() == 'completed & accepted':
approver = 'No'
else:
approver = 'Yes'
......@@ -148,7 +148,7 @@ class ChangeRequestFormHeaderSerializerList(
approver = 'No'
elif instance.status.lower() == 'cancelled':
approver = 'No'
elif instance.status.lower() == 'closed':
elif instance.status.lower() == 'completed & accepted':
approver = 'No'
else:
approver = 'Yes'
......
......@@ -147,7 +147,7 @@ class ChangeRequestFormsViewset(meviewsets.ModelViewSet):
).count()
completed = self.queryset.filter(
status__iexact='Closed' #Completed
status__iexact='Completed & Accepted' #Completed
).count()
high = self.queryset.filter(
......@@ -167,8 +167,8 @@ class ChangeRequestFormsViewset(meviewsets.ModelViewSet):
if awaits.status.lower() == 'rejected':
print("rejected")
elif awaits.status.lower() == 'closed':
print("closed")
elif awaits.status.lower() == 'completed & accepted':
print("completed & accepted")
elif awaits.status.lower() == 'cancelled':
print("cancelled")
else:
......@@ -280,7 +280,7 @@ class ChangeRequestFormsViewset(meviewsets.ModelViewSet):
self.queryset = self.queryset.filter(
~Q(status='Rejected') |
~Q(status='Closed') |
~Q(status='Completed & Accepted') |
~Q(status='Cancelled'))
self.queryset = self.queryset.order_by('-created')
......@@ -645,7 +645,7 @@ class ChangeRequestFormsViewset(meviewsets.ModelViewSet):
models.ChangeRequestFormHeader.objects.filter(
form_code=form_code
).update(status='Closed')
).update(status='Completed & Accepted')
elif action.lower() == 'cancelled':
......
......@@ -120,9 +120,9 @@ def filter_base(base_queryset,
requested_to_department__exact=department_requested_to)
if form_type == 'open':
return_queryset = return_queryset.filter(~Q(status='Closed'))
return_queryset = return_queryset.filter(~Q(status='Completed & Accepted'))
elif form_type == 'closed':
return_queryset = return_queryset.filter(status='Closed')
return_queryset = return_queryset.filter(status='Completed & Accepted')
date_modified = []
#comment
......@@ -186,11 +186,13 @@ def filter_status(base_queryset,
status):
return_queryset = base_queryset
try:
if status:
if status == 'closed':
status = 'Completed & Accepted'
if status:
return_queryset = return_queryset.filter(
status__iexact=status
)
......@@ -226,7 +228,7 @@ def filter_awaiting(base_queryset,
form_code__in=awaiting_included
).exclude(
(Q(status__icontains='Rejected') |
Q(status__icontains='Closed') |
Q(status__icontains='Completed & Accepted') |
Q(status__icontains='Cancelled') |
Q(status__icontains='Draft'))
)
......@@ -302,7 +304,8 @@ def form_add_edit_delete(form_request_body,
"form_code": form_code
}
data = {**i, **frm_code}
serializer = serializer_data(data=data)
serializer = serializer_data(data=data,
context={"request":self.request})
serializer.is_valid(raise_exception=True)
self.perform_create(serializer)
......@@ -386,7 +389,8 @@ def attachment_add_edit_delete(form_request_body,
if not data_old == data_new:
serializer = serializer_data(frm_instance,
data=data,
partial=partial)
partial=partial,
context={"request":self.request})
serializer.is_valid(raise_exception=True)
......@@ -411,7 +415,8 @@ def attachment_add_edit_delete(form_request_body,
"uploaded_by": id_number
}
data = {**i, **frm_code}
serializer = serializer_data(data=data)
serializer = serializer_data(data=data,
context={"request":self.request})
serializer.is_valid(raise_exception=True)
self.perform_create(serializer)
......
# Generated by Django 2.2 on 2019-10-16 12:46
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
('entities', '0020_masterattachment_attch_ref'),
]
operations = [
migrations.AddField(
model_name='changerequestformapprovers',
name='tmp_approver',
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, to='entities.ChangeRequestTemplateApprovers', to_field='code'),
),
]
......@@ -746,6 +746,12 @@ class ChangeRequestFormApprovers(BaseApprover):
null=True)
is_action = models.BooleanField(
default=False)
tmp_approver = models.ForeignKey(
ChangeRequestTemplateApprovers,
on_delete=models.PROTECT,
blank=True,
null=True,
to_field='code')
class Meta:
db_table = 'change_request_form_approvers'
......
......@@ -528,6 +528,9 @@ def admin_changepassword(args):
# RMS-CRREJECTED ; RMS-CRREJECTED-VENDOR
def routing_table_actions(args):
email_template = ''
name = args[0]
action_by = args[1]
routing_level = str(args[2])
......@@ -559,11 +562,11 @@ def routing_table_actions(args):
subject = 'Resource Management System - Change Request Accepted'
elif args[12].lower() == 'rejected':
subject = 'Resource Management System - Change Request Rejected'
if args[13].lower() == 'requestor':
if args[13].lower() == 'requestor' or args[13].lower() == 'others':
email_template = 'RMS-CRREJECTED-VENDOR.html'
else:
email_template = 'RMS-CRREJECTED.html'
F = open(os.path.join(settings.EMAIL_TEMPLATES_ROOT, email_template), 'r')
FC = F.read()
......@@ -581,6 +584,12 @@ def routing_table_actions(args):
if args[12].lower() == 'rejected':
FC = FC.replace('{remarks}', remarks)
if email_template == 'RMS-CRREJECTED-VENDOR.html':
if args[13].lower() == 'requestor':
FC = FC.replace('{delegation}', 'requestor')
else:
FC = FC.replace('{delegation}', 'approver')
try:
send_mail(
......
......@@ -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 requestor.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