Commit bd7e796b authored by Gladys Forte's avatar Gladys Forte

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

* commit '5b5fd7dd':
  clean clean
  refactor actions code
parents bfaed074 5b5fd7dd
...@@ -495,100 +495,6 @@ class ChangeRequestFormsViewset(viewsets.ModelViewSet): ...@@ -495,100 +495,6 @@ class ChangeRequestFormsViewset(viewsets.ModelViewSet):
except Exception as e: except Exception as e:
return Response(e, return Response(e,
status=status.HTTP_500_INTERNAL_SERVER_ERROR) status=status.HTTP_500_INTERNAL_SERVER_ERROR)
@transaction.atomic()
@action(
methods=['PATCH'], detail=True,
url_path='re_route', url_name='re_route'
)
def re_route(self, request, *args, **kwargs):
# generate batchno history
batchno = get_max_batchno("batch")
# partial update
partial = kwargs.pop('partial', True)
instance = self.get_object()
form_code = kwargs['form_code']
status_update = {"status": 'Pending'}
serializer = self.get_serializer(instance,
data=status_update,
partial=partial)
serializer.is_valid(raise_exception=True)
old_instance = model_to_dict(instance)
self.perform_update(serializer)
form_header = get_object_or_404(models.ChangeRequestFormHeader,
pk=instance.id)
new_instance = model_to_dict(form_header)
# save history in form header
crhistory_save(
batchno,
enums.CREnum.REROUTE.value,
enums.CREnum.UPDATE.value,
enums.CREntitiesEnum.CR_FRM_HEADER.value,
form_code,
old_instance,
new_instance
)
approver_data = []
# get all approvers of form
approvers = models.ChangeRequestFormApprovers.objects.filter(
form_code=form_code)
for approver in approvers:
approver_add = {
'id': approver.id,
'action': None,
'remarks': None,
'date_sent': None,
'action_date': None,
'is_action': False
}
approver_data.append(approver_add)
change_request.form_add_edit_delete(
approver_data,
models.ChangeRequestFormApprovers,
enums.CREntitiesEnum.CR_FRM_APPROVER.value,
ChangeRequestFormApproversSerializer,
partial,
self,
form_code,
batchno,
enums.CREnum.REROUTE.value
)
min_level = models.ChangeRequestFormApprovers.objects.filter(
form_code=form_code
).aggregate(Min('level'))
min_level = min_level.get('level__min')
next_approver_email(form_code, min_level)
# update next approver details
models.ChangeRequestFormApprovers.objects.filter(
Q(form_code=form_code) & Q(level=int(min_level))
).update(
date_sent=datetime.now()
)
message = status_message_response(
200, 'success',
'Change request form successfully re routed',
serializer.data
)
return Response(message, status=status.HTTP_200_OK)
@transaction.atomic() @transaction.atomic()
@action( @action(
...@@ -690,15 +596,13 @@ class ChangeRequestFormsViewset(viewsets.ModelViewSet): ...@@ -690,15 +596,13 @@ class ChangeRequestFormsViewset(viewsets.ModelViewSet):
def actions(self, request, *args, **kwargs): def actions(self, request, *args, **kwargs):
current_user = self.request.user.code current_user = self.request.user.code
action_body = request.data action_body = request.data
id = action_body.get('id', False) id = action_body.get('id', False)
form_code = action_body.get('form_code', False) form_code = action_body.get('form_code', False)
delegation = action_body.get('delegation', False) # delegation = action_body.get('delegation', False)
action = action_body.get('action', False) action = action_body.get('action', False)
level = action_body.get('level', False) # level = action_body.get('level', False)
next_level = int(level) + 1 # next_level = int(level) + 1
remarks = action_body.get('remarks', False) remarks = action_body.get('remarks', False)
# generate batchno history # generate batchno history
...@@ -736,249 +640,251 @@ class ChangeRequestFormsViewset(viewsets.ModelViewSet): ...@@ -736,249 +640,251 @@ class ChangeRequestFormsViewset(viewsets.ModelViewSet):
new_instance new_instance
) )
if action.lower() == 'approved': change_request.cr_routing_actions(new_instance, current_user)
# 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'
).first() # ).first()
if the_next_vendor: # if the_next_vendor:
the_last_vendor = models.ChangeRequestFormApprovers.objects.filter( # the_last_vendor = models.ChangeRequestFormApprovers.objects.filter(
form_code=form_code, delegation='Vendor/Implementor' # form_code=form_code, delegation='Vendor/Implementor'
).order_by('level').last() # ).order_by('level').last()
if the_next_vendor == the_last_vendor: # if the_next_vendor == the_last_vendor:
models.ChangeRequestFormHeader.objects.filter( # models.ChangeRequestFormHeader.objects.filter(
form_code=form_code # form_code=form_code
).update(status='Approved') # ).update(status='Approved')
# NOTIF MSG FOR REQUESTOR # # NOTIF MSG FOR REQUESTOR
requestor_notification_msg = REQUESTOR_MESSAGE.split(';')[0] # requestor_notification_msg = REQUESTOR_MESSAGE.split(';')[0]
# NOTIF MSG FOR NEXT APPROVER # # NOTIF MSG FOR NEXT APPROVER
notification_msg = APPROVER_MESSAGE.split(';')[0] # notification_msg = APPROVER_MESSAGE.split(';')[0]
# SEND EMAIL AND NOTIF TO REQUESTOR # # SEND EMAIL AND NOTIF TO REQUESTOR
send_mail_requestor( # send_mail_requestor(
current_user, form_code, delegation, # current_user, form_code, delegation,
requestor_notification_msg, action, # requestor_notification_msg, action,
remarks, level # remarks, level
) # )
next_approver_email(form_code, next_level) # next_approver_email(form_code, next_level)
date_now = datetime.now() # date_now = datetime.now()
# update next approver details # # update next approver details
models.ChangeRequestFormApprovers.objects.filter( # models.ChangeRequestFormApprovers.objects.filter(
Q(form_code=form_code) & Q(level=int(next_level)) # Q(form_code=form_code) & Q(level=int(next_level))
).update( # ).update(
date_sent=date_now, # date_sent=date_now,
is_action=True # is_action=True
) # )
# update current approver details # # update current approver details
models.ChangeRequestFormApprovers.objects.filter( # models.ChangeRequestFormApprovers.objects.filter(
Q(form_code=form_code) & Q(level=int(level)) # Q(form_code=form_code) & Q(level=int(level))
).update( # ).update(
is_action=False # is_action=False
) # )
reminder_trigger_save(form_code, date_now, # reminder_trigger_save(form_code, date_now,
approver_instance.date_sent) # approver_instance.date_sent)
elif action.lower() == 'rejected': # elif action.lower() == 'rejected':
# send email to vendor # # send email to vendor
if delegation.lower() == 'requestor': # if delegation.lower() == 'requestor':
notification_msg = VENDOR_REJECT_MESSAGE.split(';')[0] # notification_msg = VENDOR_REJECT_MESSAGE.split(';')[0]
send_mail_vendor( # send_mail_vendor(
current_user, form_code, delegation, # current_user, form_code, delegation,
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:
prev_vendor = models.ChangeRequestFormApprovers.objects.filter( # prev_level = int(level) - 1
Q(form_code=form_code) & # # reset last vendor details
Q(action='Completed') & # models.ChangeRequestFormApprovers.objects.filter(
Q(delegation='Vendor/Implementor') & # Q(form_code=form_code) &
Q(level__lte=int(level)) # Q(level=int(prev_level))
) # ).update(
# is_action=True,
if not prev_vendor.count() > 0: # action='Acknowledged',
# action_date=datetime.now(),
# date_sent=datetime.now()
# )
# else:
# prev_vendor = models.ChangeRequestFormApprovers.objects.filter(
# Q(form_code=form_code) &
# Q(action='Completed') &
# Q(delegation='Vendor/Implementor') &
# Q(level__lte=int(level))
# )
# if not prev_vendor.count() > 0:
models.ChangeRequestFormHeader.objects.filter( # models.ChangeRequestFormHeader.objects.filter(
form_code=form_code # form_code=form_code
).update(status='Rejected') # ).update(status='Rejected')
# EMAIL CODE FOR REQUESTOR # # EMAIL CODE FOR REQUESTOR
requestor_notification_msg = REQUESTOR_REJECT_MESSAGE.split(';')[0] # requestor_notification_msg = REQUESTOR_REJECT_MESSAGE.split(';')[0]
# SEND EMAIL AND NOTIF TO REQUESTOR # # SEND EMAIL AND NOTIF TO REQUESTOR
send_mail_requestor( # send_mail_requestor(
current_user, form_code, delegation, # current_user, form_code, delegation,
requestor_notification_msg, action, # requestor_notification_msg, action,
remarks, level # remarks, level
) # )
else: # else:
# EMAIL CODE FOR REQUESTOR # # EMAIL CODE FOR REQUESTOR
requestor_notification_msg = REQUESTOR_REJECT_MESSAGE.split(';')[0] # requestor_notification_msg = REQUESTOR_REJECT_MESSAGE.split(';')[0]
# SEND EMAIL AND NOTIF TO REQUESTOR # # SEND EMAIL AND NOTIF TO REQUESTOR
send_mail_requestor( # send_mail_requestor(
current_user, form_code, delegation, # current_user, form_code, delegation,
requestor_notification_msg, action, # requestor_notification_msg, action,
remarks, level # remarks, level
) # )
notification_msg = VENDOR_REJECT_MESSAGE.split(';')[0] # notification_msg = VENDOR_REJECT_MESSAGE.split(';')[0]
send_mail_vendor( # send_mail_vendor(
current_user, form_code, 'others', # current_user, form_code, 'others',
notification_msg, action, # notification_msg, action,
remarks, level # remarks, level
) # )
last_action_vendor = prev_vendor.last() # last_action_vendor = prev_vendor.last()
models.ChangeRequestFormApprovers.objects.filter( # models.ChangeRequestFormApprovers.objects.filter(
code=last_action_vendor # code=last_action_vendor
).update( # ).update(
is_action=True, # is_action=True,
action='Acknowledged', # action='Acknowledged',
action_date=datetime.now(), # action_date=datetime.now(),
date_sent=datetime.now() # date_sent=datetime.now()
) # )
level = last_action_vendor.level + 1 # level = last_action_vendor.level + 1
models.ChangeRequestFormApprovers.objects.filter( # models.ChangeRequestFormApprovers.objects.filter(
Q(form_code=form_code) & Q(level__gte=int(level)) # Q(form_code=form_code) & Q(level__gte=int(level))
).update( # ).update(
is_action=False, # is_action=False,
action=None, # action=None,
remarks=None, # remarks=None,
action_date=None, # action_date=None,
date_sent=None # date_sent=None
) # )
elif action.lower() == 'completed': # elif action.lower() == 'completed':
the_last_vendor = models.ChangeRequestFormApprovers.objects.filter( # the_last_vendor = models.ChangeRequestFormApprovers.objects.filter(
form_code=form_code, delegation='Vendor/Implementor' # form_code=form_code, delegation='Vendor/Implementor'
).order_by('level').last() # ).order_by('level').last()
if (current_user == the_last_vendor.user.code and # if (current_user == the_last_vendor.user.code and
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='Approved') # ).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),
delegation='Vendor/Implementor' # delegation='Vendor/Implementor'
).first() # ).first()
if the_next_vendor: # if the_next_vendor:
if the_next_vendor.user.code == the_last_vendor.user.code: # if the_next_vendor.user.code == the_last_vendor.user.code:
models.ChangeRequestFormHeader.objects.filter( # models.ChangeRequestFormHeader.objects.filter(
form_code=form_code # form_code=form_code
).update(status='Approved') # ).update(status='Approved')
else: # else:
models.ChangeRequestFormHeader.objects.filter( # models.ChangeRequestFormHeader.objects.filter(
form_code=form_code # form_code=form_code
).update(status='Pending') # ).update(status='Pending')
next_approver_email(form_code, next_level) # next_approver_email(form_code, next_level)
models.ChangeRequestFormApprovers.objects.filter( # models.ChangeRequestFormApprovers.objects.filter(
Q(level=int(next_level)) # Q(level=int(next_level))
).update( # ).update(
date_sent=datetime.now(), # date_sent=datetime.now(),
is_action=True # is_action=True
) # )
# update current approver details # # update current approver details
models.ChangeRequestFormApprovers.objects.filter( # models.ChangeRequestFormApprovers.objects.filter(
Q(form_code=form_code) & Q(level=int(level)) # Q(form_code=form_code) & Q(level=int(level))
).update( # ).update(
is_action=False # is_action=False
) # )
# EMAIL CODE FOR REQUESTOR # # EMAIL CODE FOR REQUESTOR
requestor_notification_msg = REQUESTOR_COMPLETION_MESSAGE.split(';')[0] # requestor_notification_msg = REQUESTOR_COMPLETION_MESSAGE.split(';')[0]
send_mail_requestor( # send_mail_requestor(
current_user, form_code, delegation, # current_user, form_code, delegation,
requestor_notification_msg, action, # requestor_notification_msg, action,
remarks, level # remarks, level
) # )
elif action.lower() == 'acknowledged': # elif action.lower() == 'acknowledged':
# EMAIL CODE FOR REQUESTOR # # EMAIL CODE FOR REQUESTOR
requestor_notification_msg = REQUESTOR_ACKNOWLEDGE_MESSAGE.split(';')[0] # requestor_notification_msg = REQUESTOR_ACKNOWLEDGE_MESSAGE.split(';')[0]
send_mail_requestor( # send_mail_requestor(
current_user, form_code, delegation, # current_user, form_code, delegation,
requestor_notification_msg, action, # requestor_notification_msg, action,
remarks, level # remarks, level
) # )
elif action.lower() == 'accepted': # elif action.lower() == 'accepted':
models.ChangeRequestFormHeader.objects.filter( # models.ChangeRequestFormHeader.objects.filter(
form_code=form_code # form_code=form_code
).update(status='Completed & Accepted') # ).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]
send_mail_vendor( # send_mail_vendor(
current_user, form_code, delegation, # current_user, form_code, delegation,
requestor_notification_msg, action, # requestor_notification_msg, action,
remarks, level # remarks, level
) # )
# update is_action for current level # # update is_action for current level
models.ChangeRequestFormApprovers.objects.filter( # models.ChangeRequestFormApprovers.objects.filter(
Q(form_code=form_code) & Q(level=int(level)) # Q(form_code=form_code) & Q(level=int(level))
).update( # ).update(
is_action=False # is_action=False
) # )
elif action.lower() == 'cancelled': # elif action.lower() == 'cancelled':
# changed form status to cancelled # # changed form status to cancelled
models.ChangeRequestFormHeader.objects.filter( # models.ChangeRequestFormHeader.objects.filter(
form_code=form_code).update(status='Cancelled') # form_code=form_code).update(status='Cancelled')
# update is_action for current level # # update is_action for current level
models.ChangeRequestFormApprovers.objects.filter( # models.ChangeRequestFormApprovers.objects.filter(
Q(form_code=form_code) & Q(level=int(level)) # Q(form_code=form_code) & Q(level=int(level))
).update( # ).update(
is_action=False # is_action=False
) # )
reset_autoemail_tables(form_code) # reset_autoemail_tables(form_code)
message = status_message_response( message = status_message_response(
200, 'success', 200, 'success',
...@@ -1227,6 +1133,8 @@ class ChangeRequestFormsViewset(viewsets.ModelViewSet): ...@@ -1227,6 +1133,8 @@ class ChangeRequestFormsViewset(viewsets.ModelViewSet):
next_approver_email(form_code, min_level) next_approver_email(form_code, min_level)
date_now = datetime.now()
# update next approver details # update next approver details
models.ChangeRequestFormApprovers.objects.filter( models.ChangeRequestFormApprovers.objects.filter(
Q(form_code=form_code) & Q(level=int(min_level)) Q(form_code=form_code) & Q(level=int(min_level))
...@@ -1237,6 +1145,10 @@ class ChangeRequestFormsViewset(viewsets.ModelViewSet): ...@@ -1237,6 +1145,10 @@ class ChangeRequestFormsViewset(viewsets.ModelViewSet):
# save details for overdue and auto cancellation # save details for overdue and auto cancellation
overdue_trigger_save(form_code) overdue_trigger_save(form_code)
# save details for reminder for first approver
reminder_trigger_save(form_code, date_now,
date_now)
serializer = self.get_serializer(instance) serializer = self.get_serializer(instance)
...@@ -1549,16 +1461,22 @@ class ChangeRequestFormPost(APIView): ...@@ -1549,16 +1461,22 @@ class ChangeRequestFormPost(APIView):
next_approver_email(frm_id, min_level) next_approver_email(frm_id, min_level)
date_now = datetime.now()
# update next approver details # update next approver details
models.ChangeRequestFormApprovers.objects.filter( models.ChangeRequestFormApprovers.objects.filter(
Q(form_code=frm_id) & Q(level=int(min_level)) Q(form_code=frm_id) & Q(level=int(min_level))
).update( ).update(
date_sent=datetime.now(), date_sent=date_now,
is_action=True is_action=True
) )
# save details for overdue and auto cancellation # save details for overdue and auto cancellation
overdue_trigger_save(frm_id) overdue_trigger_save(frm_id)
# save details for reminder for first approver
reminder_trigger_save(frm_id, date_now,
date_now)
message = { message = {
'code': 201, 'code': 201,
......
...@@ -20,7 +20,7 @@ REALTIMESERVER_IP = settings.REALTIMESERVER_IP ...@@ -20,7 +20,7 @@ REALTIMESERVER_IP = settings.REALTIMESERVER_IP
def model_to_dict(instance): def model_to_dict(instance):
try: try:
mySerializer = copy.deepcopy(DynamicSerializer) mySerializer = copy.deepcopy(DynamicSerializer)
mySerializer.Meta.model = instance.__class__ mySerializer.Meta.model = instance.__class__
return mySerializer(instance).data return mySerializer(instance).data
......
...@@ -13,14 +13,33 @@ from django.http import Http404 ...@@ -13,14 +13,33 @@ from django.http import Http404
from django.db.models import Q from django.db.models import Q
from app.applicationlayer.cms.utils_cr import ( from app.applicationlayer.cms.utils_cr import (
number_generator, crhistory_save, entity_log_bulk, number_generator,
crhistory_log_bulk_delete crhistory_save,
entity_log_bulk,
crhistory_log_bulk_delete,
send_mail_requestor,
next_approver_email,
send_mail_vendor,
crhistory_create_save,
reminder_trigger_save,
overdue_trigger_save,
reset_autoemail_tables
) )
from app.applicationlayer.utils import model_to_dict from app.applicationlayer.utils import model_to_dict
from app.entities import enums, models from app.entities import enums, models
from app.applicationlayer.utils import log_save, CustomPagination from app.applicationlayer.utils import log_save, CustomPagination
from app.applicationlayer.cms.template import serializers from app.applicationlayer.cms.template import serializers
from django.db.models import Min from django.db.models import Min
from django.conf import settings
APPROVER_MESSAGE = settings.APPROVER_MESSAGE
REQUESTOR_MESSAGE = settings.REQUESTOR_MESSAGE
REQUESTOR_REJECT_MESSAGE = settings.REQUESTOR_REJECT_MESSAGE
VENDOR_ACKNOWLEDGE_MESSAGE = settings.VENDOR_ACKNOWLEDGE_MESSAGE
REQUESTOR_ACKNOWLEDGE_MESSAGE = settings.REQUESTOR_ACKNOWLEDGE_MESSAGE
REQUESTOR_COMPLETION_MESSAGE = settings.REQUESTOR_COMPLETION_MESSAGE
VENDOR_ACCEPTANCE_MESSAGE = settings.VENDOR_ACCEPTANCE_MESSAGE
VENDOR_REJECT_MESSAGE = settings.VENDOR_REJECT_MESSAGE
def list_by_user(user_id_number): def list_by_user(user_id_number):
...@@ -443,7 +462,9 @@ def check_vendor_level(position, routing_level, form_code): ...@@ -443,7 +462,9 @@ def check_vendor_level(position, routing_level, form_code):
form_code=form_code, form_code=form_code,
level=int(routing_level), level=int(routing_level),
delegation='Vendor/Implementor' delegation='Vendor/Implementor'
) ).first()
return query
elif position == 'last': elif position == 'last':
...@@ -451,6 +472,8 @@ def check_vendor_level(position, routing_level, form_code): ...@@ -451,6 +472,8 @@ def check_vendor_level(position, routing_level, form_code):
form_code=form_code, form_code=form_code,
delegation='Vendor/Implementor' delegation='Vendor/Implementor'
).order_by('level').last() ).order_by('level').last()
return query
elif position == 'prev': elif position == 'prev':
...@@ -458,9 +481,265 @@ def check_vendor_level(position, routing_level, form_code): ...@@ -458,9 +481,265 @@ def check_vendor_level(position, routing_level, form_code):
Q(form_code=form_code) & Q(form_code=form_code) &
Q(action='Completed') & Q(action='Completed') &
Q(delegation='Vendor/Implementor') & Q(delegation='Vendor/Implementor') &
Q(level__lte=int(level)) Q(level__lte=int(routing_level))
)
return query
def update_form_approver(form_code, level, apprv_type, date_now):
if apprv_type == 'next':
# update next approver details
models.ChangeRequestFormApprovers.objects.filter(
Q(form_code=form_code) & Q(level=int(level))
).update(
date_sent=date_now,
is_action=True
)
elif apprv_type == 'current':
# update current approver details
models.ChangeRequestFormApprovers.objects.filter(
Q(form_code=form_code) & Q(level=int(level))
).update(
is_action=False
)
def update_form_header_status(form_code, status):
models.ChangeRequestFormHeader.objects.filter(
form_code=form_code
).update(status=status)
return True
def cr_routing_actions(approver_instance, current_user):
form_code = approver_instance['form_code']
delegation = approver_instance['delegation']
action = approver_instance['action'].lower()
level = approver_instance['level']
next_level = int(approver_instance['level']) + 1
remarks = approver_instance['remarks']
if approver_instance['action'].lower() == 'approved':
the_next_vendor = check_vendor_level(
'next', next_level, form_code)
if the_next_vendor:
the_last_vendor = check_vendor_level(
'last', level, form_code)
# changed form status to Approved
if the_next_vendor == the_last_vendor:
update_form_header_status(form_code, 'Approved')
# NOTIF MSG FOR REQUESTOR
requestor_notification_msg = REQUESTOR_MESSAGE.split(';')[0]
# SEND EMAIL AND NOTIF TO REQUESTOR
send_mail_requestor(
current_user, form_code, delegation,
requestor_notification_msg, action,
remarks, level
)
next_approver_email(form_code, next_level)
date_now = datetime.now()
# update next approver details
update_form_approver(form_code, next_level, 'next', date_now)
# update current approver details
update_form_approver(form_code, level, 'current', date_now)
#save details for reminder trigger
reminder_trigger_save(form_code, date_now, date_now)
elif approver_instance['action'].lower() == 'rejected':
# send email to vendor
if delegation.lower() == 'requestor':
notification_msg = VENDOR_REJECT_MESSAGE.split(';')[0]
# send reject email to vendor
send_mail_vendor(
current_user, form_code, delegation,
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:
prev_vendor = check_vendor_level(
'prev', level, form_code)
if not prev_vendor.count() > 0:
update_form_header_status(form_code, '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
) )
# def cr_routing_actions(approver_instance): 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__gte=int(level))
).update(
is_action=False,
action=None,
remarks=None,
action_date=None,
date_sent=None
)
elif approver_instance['action'].lower() == 'completed':
the_last_vendor = check_vendor_level(
'last', level, form_code)
if (current_user == the_last_vendor.user.code and
level == the_last_vendor.level):
update_form_header_status(form_code, 'Approved')
else:
the_next_vendor = check_vendor_level(
'next', next_level, form_code)
if the_next_vendor:
if the_next_vendor.user.code == the_last_vendor.user.code:
update_form_header_status(form_code, 'Approved')
else:
update_form_header_status(form_code, 'Pending')
next_approver_email(form_code, next_level)
date_now = datetime.now()
# update next approver details
update_form_approver(form_code, next_level, 'next', date_now)
# update current approver details
update_form_approver(form_code, level, 'current', date_now)
# EMAIL CODE FOR REQUESTOR
requestor_notification_msg = REQUESTOR_COMPLETION_MESSAGE.split(';')[0]
send_mail_requestor(
current_user, form_code, delegation,
requestor_notification_msg, action,
remarks, level
)
elif action.lower() == 'acknowledged':
# EMAIL CODE FOR REQUESTOR
requestor_notification_msg = REQUESTOR_ACKNOWLEDGE_MESSAGE.split(';')[0]
send_mail_requestor(
current_user, form_code, delegation,
requestor_notification_msg, action,
remarks, level
)
elif action.lower() == 'accepted':
update_form_header_status(form_code, 'Completed & Accepted')
# EMAIL CODE FOR VENDOR
requestor_notification_msg = VENDOR_ACCEPTANCE_MESSAGE.split(';')[0]
send_mail_vendor(
current_user, form_code, delegation,
requestor_notification_msg, action,
remarks, level
)
# update current approver details
update_form_approver(form_code, level, 'current', date_now)
elif action.lower() == 'cancelled':
# changed form status to cancelled
update_form_header_status(form_code, 'Cancelled')
# update is_action for current level
update_form_approver(form_code, level, 'current', date_now)
reset_autoemail_tables(form_code)
return True
...@@ -5,7 +5,6 @@ from app.entities import models ...@@ -5,7 +5,6 @@ from app.entities import models
from django.conf import settings from django.conf import settings
# def account_created(args, username, password, receiver) :
def account_created(args): def account_created(args):
name = args[0] name = args[0]
username = args[1] username = args[1]
...@@ -51,20 +50,7 @@ def account_created(args): ...@@ -51,20 +50,7 @@ def account_created(args):
def cronjob(args): def cronjob(args):
# name = args[0]
# username = args[1]
# password = args[2]
# recipient = args[3]
# admin = args[4]
# F = open(os.path.join(settings.EMAIL_TEMPLATES_ROOT, 'RMS-NEWUSER.html'), 'r')
# FC = F.read()
# FC = FC.replace('{name}', name)
# FC = FC.replace('{username}', username)
# FC = FC.replace('{password}', password)
# FC = FC.replace('{url}', settings.FRONT_END_URL + '/cms/profile') #changed
try: try:
send_mail( send_mail(
subject='Resource Management System: Welcome!', subject='Resource Management System: Welcome!',
...@@ -145,24 +131,6 @@ def forgot_password(args): ...@@ -145,24 +131,6 @@ def forgot_password(args):
) )
# def password_changed(username, date, receiver) :
# F = open(os.path.join(settings.EMAIL_TEMPLATES_ROOT, 'password-changed.html'), 'r')
# FC = F.read()
# FC = FC.replace('[Username]', username)
# FC = FC.replace('[Datetime]', date)
# FC = FC.replace('[URL]', settings.FRONT_END_URL)
# send_mail(
# subject='OB RMS: Password Changed!',
# message='',
# from_email=settings.EMAIL_DEFAULT_SENDER,
# recipient_list=[receiver,],
# html_message=FC
# )
def admin_changepassword(args): def admin_changepassword(args):
name = args[0] name = args[0]
username = args[1] username = args[1]
...@@ -188,342 +156,6 @@ def admin_changepassword(args): ...@@ -188,342 +156,6 @@ def admin_changepassword(args):
) )
# def account_created(username, password, receiver) :
# F = open(os.path.join(settings.EMAIL_TEMPLATES_ROOT, 'account-created.html'), 'r')
# FC = F.read()
# FC = FC.replace('[Username]', username)
# FC = FC.replace('[Password]', password)
# FC = FC.replace('[URL]', settings.FRONT_END_URL)
# send_mail(
# subject='OB IMS: Welcome!',
# message='',
# from_email=settings.EMAIL_DEFAULT_SENDER,
# recipient_list=[receiver,],
# html_message=FC
# )
# def stock_requisition_new(sr_id,
# sr_no,
# requestor,
# requested_on,
# project,
# remarks,
# receiver,
# requested_items=[],
# purchase_items=[],
# required_date=None):
# F = open(os.path.join(settings.EMAIL_TEMPLATES_ROOT, 'stock-requisition.html'), 'r')
# FC = F.read()
# FC = FC.replace('[SR No]', sr_no)
# FC = FC.replace('[Requestor]', requestor)
# FC = FC.replace('[Requested On]', requested_on)
# FC = FC.replace('[Project]', project)
# FC = FC.replace('[Remarks]', remarks)
# # PRINT SR ITEMS
# if requested_items and len(requested_items) > 0:
# appendedList = ''
# for item in requested_items :
# prodNo = str(item.product.product_no)
# prodName = str(item.product.name)
# brand = str(item.product.brand.name)
# qty = str(item.quantity)
# unit = str(item.product.unit_material.name)
# appendedList += '\t\t\t\t \
# <tr bgcolor="#FFFFFF"> \
# <td>' + prodNo + '</td> \
# <td>' + prodName + '</td> \
# <td>' + brand + '</td> \
# <td>' + qty + '</td> \
# <td>' + unit + '</td> \
# </tr>'
# FC = FC.replace('<tr bgcolor="#FFFFFF" id="sr">\n <td>&nbsp;</td>\n <td>&nbsp;</td>\n <td>&nbsp;</td>\n <td>&nbsp;</td>\n <td>&nbsp;</td>\n </tr>', appendedList)
# # PRINT PR ITEMS
# if purchase_items and len(purchase_items) > 0 :
# FC = FC.replace('[Required Date]', required_date)
# appendedList = ''
# for item in purchase_items :
# prodNo = str(item.product.product_no)
# prodName = str(item.product.name)
# brand = str(item.product.brand.name)
# qty = str(item.quantity)
# unit = str(item.product.unit_material.name)
# appendedList += '\t\t\t\t \
# <tr bgcolor="#FFFFFF"> \
# <td>' + prodNo + '</td> \
# <td>' + prodName + '</td> \
# <td>' + brand + '</td> \
# <td>' + qty + '</td> \
# <td>' + unit + '</td> \
# </tr>'
# FC = FC.replace('<tr bgcolor="#FFFFFF" id="pr">\n <td>&nbsp;</td>\n <td>&nbsp;</td>\n <td>&nbsp;</td>\n <td>&nbsp;</td>\n <td>&nbsp;</td>\n </tr>', appendedList)
# urlApprove = f"{settings.FRONT_END_URL}/{'transaction/requisition/approve'}/{sr_id}/basic"
# urlReject = f"{settings.FRONT_END_URL}/{'transaction/requisition/reject'}/{sr_id}/basic"
# FC = FC.replace('ApproveToken', urlApprove)
# FC = FC.replace('RejectToken', urlReject)
# send_mail(
# subject='OB IMS: '+ sr_no +' by ' + requestor,
# message='',
# from_email=settings.EMAIL_DEFAULT_SENDER,
# recipient_list=[receiver,],
# html_message=FC
# )
# def stock_requisition_approve(sr_no,
# requestor,
# requestor_email,
# requested_on,
# requestor_contact,
# project,
# remarks,
# approved_by,
# approved_date,
# requested_items=[],
# purchase_items=[],
# required_date=None):
# # requested_items
# # LIST OF "RequisitionApproveItem"
# # purchase_items
# # LIST OF "PurchaseRequestApproveItem"
# F = open(os.path.join(settings.EMAIL_TEMPLATES_ROOT, 'stock-requisition-approved.html'), 'r')
# FC = F.read()
# FC = FC.replace('[SR No]', sr_no)
# FC = FC.replace('[Requestor]', requestor)
# FC = FC.replace('[Requested On]', requested_on)
# FC = FC.replace('[Project]', project)
# FC = FC.replace('[Remarks]', remarks)
# FC = FC.replace('[Approved By]', approved_by)
# FC = FC.replace('[Approved On]', approved_date)
# # PRINT SR ITEMS
# if len(requested_items) > 0 :
# appendedList = ''
# for item in requested_items :
# prodNo = item.requisition_product.product.product_no
# prodName = item.requisition_product.product.name
# brand = item.requisition_product.product.brand.name
# qty = str(item.quantity)
# unit = item.requisition_product.product.unit_material.name
# appendedList += '\t\t\t\t \
# <tr bgcolor="#FFFFFF"> \
# <td>' + prodNo + '</td> \
# <td>' + prodName + '</td> \
# <td>' + brand + '</td> \
# <td>' + qty + '</td> \
# <td>' + unit + '</td> \
# </tr>'
# FC = FC.replace('<tr bgcolor="#FFFFFF" id="sr">\n <td>&nbsp;</td>\n <td>&nbsp;</td>\n <td>&nbsp;</td>\n <td>&nbsp;</td>\n <td>&nbsp;</td>\n </tr>', appendedList)
# # PRINT PR ITEMS
# if len(purchase_items) > 0 :
# FC = FC.replace('[Required Date]', required_date)
# appendedList = ''
# for item in purchase_items :
# prodNo = item.purchase_request_item.product.product_no
# prodName = item.purchase_request_item.product.name
# brand = item.purchase_request_item.product.brand.name
# qty = str(item.quantity)
# unit = item.purchase_request_item.product.unit_material.name
# appendedList += '\t\t\t\t \
# <tr bgcolor="#FFFFFF"> \
# <td>' + prodNo + '</td> \
# <td>' + prodName + '</td> \
# <td>' + brand + '</td> \
# <td>' + qty + '</td> \
# <td>' + unit + '</td> \
# </tr>'
# FC = FC.replace('<tr bgcolor="#FFFFFF" id="pr">\n <td>&nbsp;</td>\n <td>&nbsp;</td>\n <td>&nbsp;</td>\n <td>&nbsp;</td>\n <td>&nbsp;</td>\n </tr>', appendedList)
# approver_emails = []
# # roles_receives = ['Receive Stock Requisition Authorization Email',
# # 'Allow Purchase Requests Authorisation',
# # 'Receive Stock Request Email',
# # 'Receive Purchase Request Email']
# # qry = models.User.objects.filter(user_roles__role__code__in=roles_receives).values('email').distinct()
# # for item in qry:
# # approver_emails.append(item['email'])
# approver_emails.append(requestor_email)
# if len(approver_emails) > 0:
# send_mail(
# subject='OB IMS Stock Request: '+ sr_no,
# message='',
# from_email=settings.EMAIL_DEFAULT_SENDER,
# recipient_list=approver_emails,
# html_message=FC
# )
# def stock_requisition_reject(sr_no,
# requestor,
# requestor_email,
# requested_on,
# project,
# remarks,
# rejected_reason,
# rejected_by,
# rejected_date,
# requested_items=[],
# purchase_items=[],
# required_date=None):
# # requested_items
# # LIST OF "RequisitionRejectItem"
# # purchase_items
# # LIST OF "PurchaseRequestRejectItem"
# F = open(os.path.join(settings.EMAIL_TEMPLATES_ROOT, 'stock-requisition-rejected.html'), 'r')
# FC = F.read()
# FC = FC.replace('[SR No]', sr_no)
# FC = FC.replace('[Requestor]', requestor)
# FC = FC.replace('[Requested On]', requested_on)
# FC = FC.replace('[Project]', project)
# FC = FC.replace('[Remarks]', remarks)
# FC = FC.replace('[Rejected By]', rejected_by)
# FC = FC.replace('[Rejected On]', rejected_date)
# FC = FC.replace('[Rejected Reason]', rejected_reason)
# # PRINT SR ITEMS
# if len(requested_items) > 0 :
# appendedList = ''
# for item in requested_items :
# prodNo = item.requisition_product.product.product_no
# prodName = item.requisition_product.product.name
# brand = item.requisition_product.product.brand.name
# qty = str(item.quantity)
# unit = item.requisition_product.product.unit_material.name
# appendedList += '\t\t\t\t \
# <tr bgcolor="#FFFFFF"> \
# <td>' + prodNo + '</td> \
# <td>' + prodName + '</td> \
# <td>' + brand + '</td> \
# <td>' + qty + '</td> \
# <td>' + unit + '</td> \
# </tr>'
# FC = FC.replace('<tr bgcolor="#FFFFFF" id="sr">\n <td>&nbsp;</td>\n <td>&nbsp;</td>\n <td>&nbsp;</td>\n <td>&nbsp;</td>\n <td>&nbsp;</td>\n </tr>', appendedList)
# # PRINT PR ITEMS
# if len(purchase_items) > 0 :
# FC = FC.replace('[Required Date]', required_date)
# appendedList = ''
# for item in purchase_items :
# prodNo = item.purchase_request_item.product.product_no
# prodName = item.purchase_request_item.product.name
# brand = item.purchase_request_item.product.brand.name
# qty = str(item.quantity)
# unit = item.purchase_request_item.product.unit_material.name
# appendedList += '\t\t\t\t \
# <tr bgcolor="#FFFFFF"> \
# <td>' + prodNo + '</td> \
# <td>' + prodName + '</td> \
# <td>' + brand + '</td> \
# <td>' + qty + '</td> \
# <td>' + unit + '</td> \
# </tr>'
# FC = FC.replace('<tr bgcolor="#FFFFFF" id="pr">\n <td>&nbsp;</td>\n <td>&nbsp;</td>\n <td>&nbsp;</td>\n <td>&nbsp;</td>\n <td>&nbsp;</td>\n </tr>', appendedList)
# approver_emails = []
# # roles_receives = ['Receive Stock Requisition Authorization Email', 'Allow Purchase Requests Authorisation', 'Receive Stock Request Email', 'Receive Purchase Request Email']
# # qry = models.User.objects.filter(user_roles__role__code__in=roles_receives).values('email').distinct()
# # for item in qry :
# # approver_emails.append(item['email'])
# approver_emails.append(requestor_email)
# if len(approver_emails) > 0:
# send_mail(
# subject='OB IMS: '+ sr_no +' by ' + requestor,
# message='',
# from_email=settings.EMAIL_DEFAULT_SENDER,
# recipient_list=approver_emails,
# html_message=FC
# )
# # def account_password_reset(username, password, receiver, date_reset) :
# # F = open(os.path.join(EMAIL_TEMPLATES_ROOT, 'reset-password.html'), 'r')
# # FC = F.read()
# # FC = FC.replace('[Username]', username)
# # FC = FC.replace('[Password]', password)
# # FC = FC.replace('[Reset Datetime]', date_reset)
# # send_mail(
# # subject='OB IMS: Password Reset!',
# # message='',
# # from_email=EMAIL_DEFAULT_SENDER,
# # recipient_list=[receiver,],
# # html_message=FC
# # )
# RMS-CRAPPROVED ; RMS-CRACKNOWLEDGE ; RMS-CRCOMPLETED ; RMS-CRACCEPTED ; # RMS-CRAPPROVED ; RMS-CRACKNOWLEDGE ; RMS-CRCOMPLETED ; RMS-CRACCEPTED ;
# RMS-CRREJECTED ; RMS-CRREJECTED-VENDOR # RMS-CRREJECTED ; RMS-CRREJECTED-VENDOR
......
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