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