Commit 2c8f4c62 authored by John Red Medrano's avatar John Red Medrano

Merge branch 'RMSv2' of http://42.61.118.105:7990/scm/rms/api-main-service into red-develop

parents cc34f8a5 0a61a976
from app.entities import models from app.entities import models
from rest_framework import serializers from rest_framework import serializers
from django.db.models import Q from django.db.models import Q
from app.applicationlayer.cms.utils_cr import logged_user
from drf_writable_nested import WritableNestedModelSerializer from drf_writable_nested import WritableNestedModelSerializer
from app.applicationlayer.cms.utils_cr import (get_account_details,
get_dept_details,
get_companies_details)
class ChangeRequestFormApproversSerializer( class ChangeRequestFormApproversSerializer(
serializers.ModelSerializer serializers.ModelSerializer
): ):
# def to_representation(self, instance): def to_representation(self, instance):
# ret = super().to_representation(instance) ret = super().to_representation(instance)
# try: try:
# user = instance.user user = instance.user
# user_details = get_account_details(user) user_details = get_account_details(user.code)
# name = user_details['name'] name = user_details.values_list('name', flat=True)[0]
# group = user_details['groups'][0]['name'] dept_code = user_details.values_list('department', flat=True)[0]
# company = user_details['groups'][0]['company__name'] department_details = get_dept_details(dept_code)
department = department_details.values_list('name', flat=True)[0]
# ret['name'] = name comp_code = department_details.values_list('company', flat=True)[0]
# ret['department'] = group company_details = get_companies_details(comp_code)
# ret['company'] = company company = company_details.values_list('name', flat=True)[0]
# return ret
ret['name'] = name
# except Exception as e: ret['department'] = department
# ret['name'] = "none" ret['company'] = company
# ret['department'] = "none" return ret
# ret['company'] = "none"
# return ret except Exception as e:
ret['name'] = "none"
ret['department'] = "none"
ret['company'] = "none"
return ret
class Meta: class Meta:
model = models.ChangeRequestFormApprovers model = models.ChangeRequestFormApprovers
fields = '__all__' fields = '__all__'
read_only_fields = ['created', 'archived_at', 'code'] read_only_fields = ['created', 'code']
class ChangeRequestFormStakeHoldersSerializer( class ChangeRequestFormStakeHoldersSerializer(
...@@ -41,7 +47,7 @@ class ChangeRequestFormStakeHoldersSerializer( ...@@ -41,7 +47,7 @@ class ChangeRequestFormStakeHoldersSerializer(
class Meta: class Meta:
model = models.ChangeRequestFormStakeHolders model = models.ChangeRequestFormStakeHolders
fields = '__all__' fields = '__all__'
read_only_fields = ['created', 'archived_at', 'code'] read_only_fields = ['created', 'code']
class ChangeRequestFormAttachmentsSerializer( class ChangeRequestFormAttachmentsSerializer(
...@@ -50,7 +56,7 @@ class ChangeRequestFormAttachmentsSerializer( ...@@ -50,7 +56,7 @@ class ChangeRequestFormAttachmentsSerializer(
class Meta: class Meta:
model = models.ChangeRequestFormAttachments model = models.ChangeRequestFormAttachments
fields = '__all__' fields = '__all__'
read_only_fields = ['created', 'archived_at', 'code'] read_only_fields = ['created', 'code']
class ChangeRequestFormDetailsSerializer( class ChangeRequestFormDetailsSerializer(
...@@ -59,31 +65,113 @@ class ChangeRequestFormDetailsSerializer( ...@@ -59,31 +65,113 @@ class ChangeRequestFormDetailsSerializer(
class Meta: class Meta:
model = models.ChangeRequestFormDetails model = models.ChangeRequestFormDetails
fields = '__all__' fields = '__all__'
read_only_fields = ['created', 'archived_at', 'code'] read_only_fields = ['created', 'code']
class ChangeRequestFormHeaderSerializer( class ChangeRequestFormHeaderSerializer(
WritableNestedModelSerializer serializers.ModelSerializer
): ):
frm_approvers = ChangeRequestFormApproversSerializer( frm_approvers = ChangeRequestFormApproversSerializer(
many=True, required=False) many=True, read_only=True)
# frm_stakes = ChangeRequestFormStakeHoldersSerializer(
# many=True, required=False)
frm_stakes = ChangeRequestFormStakeHoldersSerializer( frm_stakes = ChangeRequestFormStakeHoldersSerializer(
many=True, required=False) many=True, read_only=True)
frm_attachments = ChangeRequestFormAttachmentsSerializer( frm_attachments = ChangeRequestFormAttachmentsSerializer(
many=True, required=False) many=True, read_only=True)
frm_details = ChangeRequestFormDetailsSerializer( frm_details = ChangeRequestFormDetailsSerializer(
many=True, required=False) many=True, read_only=True)
# def update(self, instance, validated_data):
# Update the book instance
# instance.requested_to_template_name = validated_data['requested_to_template_name']
# instance.requested_to_objective = validated_data['requested_to_objective']
# instance.requested_to_target_date = validated_data['requested_to_target_date']
# instance.requested_to_priority = validated_data['requested_to_priority']
# instance.description = validated_data['description']
# instance.status = validated_data['status']
# instance.company_desc = validated_data['company_desc']
# instance.department_desc = validated_data['department_desc']
# instance.requested_desc = validated_data['requested_desc']
# instance.requested_to_template_id = validated_data['requested_to_template_id']
# instance.requested_to_company = validated_data['requested_to_company']
# instance.requested_to_department = validated_data['requested_to_department']
# instance.requested_to_user = validated_data['requested_to_user']
# instance.requested_by_user = validated_data['requested_by_user']
# instance.requested_by_department = validated_data['requested_by_department']
# instance.template_no = validated_data['template_no']
# instance.save()
# Delete any pages not included in the request
# approvers_ids = [item.id for item in validated_data['frm_approvers']]
# for i in validated_data['frm_approvers']:
# print(i)
# print(approvers_ids)
# for page in instance.frm_approvers:
# if page.id not in approvers_ids:
# page.delete()
# # Create or update page instances that are in the request
# for item in validated_data['pages']:
# page = Page(id=item['page_id'], text=item['text'], book=instance)
# page.save()
# return instance
# def update(self, instance, validated_data):
# frm_approvers = validated_data.pop('frm_approvers')
# instance.requested_to_template_name = validated_data.get("requested_to_template_name", instance.requested_to_template_name)
# instance.requested_to_objective = validated_data.get("requested_to_objective", instance.requested_to_objective)
# instance.requested_to_target_date = validated_data.get("requested_to_target_date", instance.requested_to_target_date)
# instance.requested_to_priority = validated_data.get("requested_to_priority", instance.requested_to_priority)
# instance.description = validated_data.get("description", instance.description)
# instance.status = validated_data.get("status", instance.status)
# instance.company_desc = validated_data.get("company_desc", instance.company_desc)
# instance.department_desc = validated_data.get("department_desc", instance.department_desc)
# instance.requested_desc = validated_data.get("requested_desc", instance.requested_desc)
# instance.requested_to_template_id = validated_data.get("requested_to_template_id", instance.requested_to_template_id)
# instance.requested_to_company = validated_data.get("requested_to_company", instance.requested_to_company)
# instance.requested_to_department = validated_data.get("requested_to_department", instance.requested_to_department)
# instance.requested_to_user = validated_data.get("requested_to_user", instance.requested_to_user)
# instance.requested_by_user = validated_data.get("requested_by_user", instance.requested_by_user)
# instance.requested_by_department = validated_data.get("requested_by_department", instance.requested_by_department)
# instance.template_no = validated_data.get("template_no", instance.template_no)
# instance.save()
# print(instance.form_code)
# keep_choices = []
# for choice in frm_approvers:
# if "id" in choice.keys():
# if models.ChangeRequestFormApprovers.objects.filter(id=choice["id"]).exists():
# c = models.ChangeRequestFormApprovers.objects.get(id=choice["id"])
# c.text = choice.get('text', c.text)
# c.save()
# keep_choices.append(c.id)
# else:
# continue
# else:
# c = models.ChangeRequestFormApprovers.objects.create(**choice)
# keep_choices.append(c.id)
# for choice in instance.frm_approvers:
# if choice.id not in keep_choices:
# choice.delete()
# return instance
def to_representation(self, instance): def to_representation(self, instance):
ret = super().to_representation(instance) ret = super().to_representation(instance)
try: try:
user = self.context['request'].user user = self.context['request'].user
print(user.code)
id_number = user.code id_number = user.code
current_level = models.ChangeRequestFormApprovers.objects.filter( current_level = models.ChangeRequestFormApprovers.objects.filter(
Q(form_code=ret['form_code']) & Q(form_code=ret['form_code'])
Q(archived_at=None) &
(Q(action='') | Q(action=None)) (Q(action='') | Q(action=None))
).order_by('level') ).order_by('level')
......
...@@ -25,10 +25,12 @@ from app.businesslayer.changerequest import change_request ...@@ -25,10 +25,12 @@ from app.businesslayer.changerequest import change_request
from app.applicationlayer.cms.utils_cr import (number_generator, from app.applicationlayer.cms.utils_cr import (number_generator,
send_mail_requestor, send_mail_requestor,
next_approver_email, next_approver_email,
crhistory_save) crhistory_save,
send_mail_vendor)
from app.entities import enums from app.entities import enums
from django.forms.models import model_to_dict from django.forms.models import model_to_dict
import json import json
from django.shortcuts import get_object_or_404
APPROVER_MESSAGE = settings.APPROVER_MESSAGE APPROVER_MESSAGE = settings.APPROVER_MESSAGE
...@@ -264,7 +266,6 @@ class ChangeRequestFormsViewset(meviewsets.ModelViewSet): ...@@ -264,7 +266,6 @@ class ChangeRequestFormsViewset(meviewsets.ModelViewSet):
def retrieve(self, request, *args, **kwargs): def retrieve(self, request, *args, **kwargs):
instance = self.queryset.filter( instance = self.queryset.filter(
archived_at=None,
form_code=str(self.kwargs.get('form_code')) form_code=str(self.kwargs.get('form_code'))
).first() ).first()
serializer = self.get_serializer(instance) serializer = self.get_serializer(instance)
...@@ -431,9 +432,10 @@ class ChangeRequestFormsViewset(meviewsets.ModelViewSet): ...@@ -431,9 +432,10 @@ class ChangeRequestFormsViewset(meviewsets.ModelViewSet):
) )
def actions(self, request, *args, **kwargs): def actions(self, request, *args, **kwargs):
# get request data
id = request.data['id'] id = request.data['id']
current_user = request.data['user'] current_user = request.data['user']
# current_user = self.request.user
form_code = request.data['form_code'] form_code = request.data['form_code']
delegation = request.data['delegation'] delegation = request.data['delegation']
action = request.data['action'] action = request.data['action']
...@@ -441,11 +443,35 @@ class ChangeRequestFormsViewset(meviewsets.ModelViewSet): ...@@ -441,11 +443,35 @@ class ChangeRequestFormsViewset(meviewsets.ModelViewSet):
next_level = int(request.data['level']) + 1 next_level = int(request.data['level']) + 1
remarks = request.data['remarks'] remarks = request.data['remarks']
# get old data
old_instance = models.ChangeRequestFormApprovers.objects.filter(
pk=id).values()
old_instance = list(old_instance)
# update current row in routing table
models.ChangeRequestFormApprovers.objects.filter( models.ChangeRequestFormApprovers.objects.filter(
pk=id).update(action=action, pk=id).update(action=action,
remarks=remarks, remarks=remarks,
action_date=datetime.now()) action_date=datetime.now())
# get new data
new_instance = models.ChangeRequestFormApprovers.objects.filter(
pk=id).values()
new_instance = list(new_instance)
crenum = action.upper()
# save history in form approver
crhistory_save(
crenum,
enums.CREntitiesEnum.CR_FRM_APPROVER.value,
form_code,
old_instance,
new_instance
)
# get details of next approver/s
next_approver = models.ChangeRequestFormApprovers.objects.filter( next_approver = models.ChangeRequestFormApprovers.objects.filter(
level=str(next_level), level=str(next_level),
form_code=form_code form_code=form_code
...@@ -465,17 +491,18 @@ class ChangeRequestFormsViewset(meviewsets.ModelViewSet): ...@@ -465,17 +491,18 @@ class ChangeRequestFormsViewset(meviewsets.ModelViewSet):
remarks, level remarks, level
) )
# LOOP on next approver for sending email
for n_approver in next_approver: for n_approver in next_approver:
print(n_approver.user)
if n_approver.delegation.lower() == 'vendor/implementor': if n_approver.delegation.lower() == 'vendor/implementor':
notification_msg = VENDOR_ACKNOWLEDGE_MESSAGE.split(';')[0] notification_msg = VENDOR_ACKNOWLEDGE_MESSAGE.split(';')[0]
next_approver_email( next_approver_email(
n_approver.user, form_code, delegation, n_approver.user.code, form_code, delegation,
notification_msg, action notification_msg
) )
# update next approver details
models.ChangeRequestFormApprovers.objects.filter( models.ChangeRequestFormApprovers.objects.filter(
Q(form_code=form_code) & Q(level=str(next_level)) Q(form_code=form_code) & Q(level=str(next_level))
).update( ).update(
...@@ -484,60 +511,52 @@ class ChangeRequestFormsViewset(meviewsets.ModelViewSet): ...@@ -484,60 +511,52 @@ class ChangeRequestFormsViewset(meviewsets.ModelViewSet):
elif action.lower() == 'rejected': elif action.lower() == 'rejected':
# 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]
email_code = VENDOR_REJECT_MESSAGE.split(';')[1]
send_mail_vendor( send_mail_vendor(
current_user, form_code, delegation, current_user, form_code, delegation,
requestor_notification_msg, action, requestor_email_code, 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]
requestor_email_code = REQUESTOR_REJECT_MESSAGE.split(';')[1]
# 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_email_code, requestor_notification_msg, action,
remarks, level remarks, level
) )
elif action.lower() == 'completed': elif action.lower() == 'completed':
models.ChangeRequestFormApprovers.objects.filter(
Q(archived_at=None) & Q(level=str(next_level))
).update(
date_sent=datetime.now().strftime('%Y-%m-%d, %H:%M:%S')
)
# EMAIL CODE FOR REQUESTOR # EMAIL CODE FOR REQUESTOR
requestor_notification_msg = REQUESTOR_COMPLETION_MESSAGE.split(';')[0] requestor_notification_msg = REQUESTOR_COMPLETION_MESSAGE.split(';')[0]
requestor_email_code = REQUESTOR_COMPLETION_MESSAGE.split(';')[1]
send_mail_requestor( send_mail_requestor(
current_user, form_code, delegation, current_user, form_code, delegation,
requestor_notification_msg, action, requestor_email_code, requestor_notification_msg, action,
remarks, level remarks, level
) )
elif action.lower() == 'acknowledged': models.ChangeRequestFormApprovers.objects.filter(
Q(level=str(next_level))
).update(
date_sent=datetime.now()
)
# models.ChangeRequestFormApprovers.objects.filter( elif action.lower() == 'acknowledged':
# level=str(next_level)
# ).update(
# date_sent=datetime.now().strftime('%Y-%m-%d, %H:%M:%S')
# )
# EMAIL CODE FOR REQUESTOR # EMAIL CODE FOR REQUESTOR
requestor_notification_msg = REQUESTOR_ACKNOWLEDGE_MESSAGE.split(';')[0] requestor_notification_msg = REQUESTOR_ACKNOWLEDGE_MESSAGE.split(';')[0]
requestor_email_code = REQUESTOR_ACKNOWLEDGE_MESSAGE.split(';')[1]
send_mail_requestor( send_mail_requestor(
current_user, form_code, delegation, current_user, form_code, delegation,
requestor_notification_msg, action, requestor_email_code, requestor_notification_msg, action,
remarks, level remarks, level
) )
...@@ -545,29 +564,115 @@ class ChangeRequestFormsViewset(meviewsets.ModelViewSet): ...@@ -545,29 +564,115 @@ class ChangeRequestFormsViewset(meviewsets.ModelViewSet):
# EMAIL CODE FOR VENDOR # EMAIL CODE FOR VENDOR
requestor_notification_msg = VENDOR_ACCEPTANCE_MESSAGE.split(';')[0] requestor_notification_msg = VENDOR_ACCEPTANCE_MESSAGE.split(';')[0]
requestor_email_code = VENDOR_ACCEPTANCE_MESSAGE.split(';')[1]
send_mail_vendor( send_mail_vendor(
current_user, form_code, delegation, current_user, form_code, delegation,
requestor_notification_msg, action, requestor_email_code, requestor_notification_msg, action,
remarks, level remarks, level
) )
# elif action.lower() == 'cancelled': elif action.lower() == 'cancelled':
# action_cancelled(self, request, *args, **kwargs) # changed form status to cancelled
# headers = self.get_success_headers(serializer.data) models.ChangeRequestFormHeader.objects.filter(
form_code=form_code).update(status='Cancelled')
# return Response(
# serializer.data, status=status.HTTP_201_CREATED
# )
return Response( return Response(
"Action performed", "Action performed",
status=status.HTTP_200_OK status=status.HTTP_200_OK
) )
@action(
methods=['PATCH'], detail=True,
url_path='save', url_name='save'
)
def save(self, request, *args, **kwargs):
form_code = kwargs['form_code']
form_header_data = request.data
# get pk
frm_id = models.ChangeRequestFormHeader.objects.get(form_code=form_code)
# get data CR Form Header
form_header = get_object_or_404(
models.ChangeRequestFormHeader.objects.all(), pk=frm_id.id)
serializer = serializers.ChangeRequestFormHeaderSerializer(
form_header, data=form_header_data)
if serializer.is_valid():
serializer.save()
# get approvers data
approver_id = models.ChangeRequestFormApprovers.objects.filter(
form_code=form_code)
# list existing id to variable
existing_approver_ids = [item.id for item in approver_id]
frm_approvers = form_header_data['frm_approvers']
updated_approver_ids = []
# get all ids
for frm_approver in frm_approvers:
if "id" in frm_approver:
updated_approver_ids.append(frm_approver['id'])
# Delete any approvers not included in the request
for e in existing_approver_ids:
if e not in updated_approver_ids:
models.ChangeRequestFormApprovers.objects.filter(
pk=e).delete()
# Create or update approver data that are in the request
for frm_approver in frm_approvers:
print(frm_approver)
if "id" in frm_approver:
print(frm_approver['id'])
models.ChangeRequestFormApprovers.objects.filter(
pk=frm_approver['id']).update(level=frm_approver['level'],
delegation=frm_approver['delegation'],
created=datetime.now(),
remarks=None,
action=None,
action_date=None,
date_sent=None,
user=frm_approver['user'],
tmp_approver=frm_approver['tmp_approver'])
else:
user_instance = models.User.objects.get(code=frm_approver['user'])
form_code_instance = models.ChangeRequestFormHeader.objects.get(code=form_code)
models.ChangeRequestFormApprovers.objects.create(
level=frm_approver['level'],
delegation=frm_approver['delegation'],
created=datetime.now(),
user=user_instance,
form_code=form_code_instance)
return Response(serializer.data)
return Response(
"Change request form successfully re routed",
status=status.HTTP_200_OK
)
@action(
methods=['PATCH'], detail=True,
url_path='submit', url_name='submit'
)
def submit(self, request, *args, **kwargs):
form_code = kwargs['form_code']
return Response(
"Change request form successfully re routed",
status=status.HTTP_200_OK
)
class ChangeRequestFormApproversViewset(meviewsets.ModelViewSet): class ChangeRequestFormApproversViewset(meviewsets.ModelViewSet):
...@@ -630,9 +735,7 @@ class ChangeRequestFormApproversViewset(meviewsets.ModelViewSet): ...@@ -630,9 +735,7 @@ class ChangeRequestFormApproversViewset(meviewsets.ModelViewSet):
# ) # )
def list(self, request, *args, **kwargs): def list(self, request, *args, **kwargs):
self.queryset = self.queryset.filter(archived_at=None)
self.queryset = QuerySetHelper.Sort(self) self.queryset = QuerySetHelper.Sort(self)
self.queryset = QuerySetHelper.Filter(self)
return super(ChangeRequestFormApproversViewset, self).list(request) return super(ChangeRequestFormApproversViewset, self).list(request)
def retrieve(self, request, *args, **kwargs): def retrieve(self, request, *args, **kwargs):
...@@ -837,11 +940,32 @@ class ChangeRequestFormPost(APIView): ...@@ -837,11 +940,32 @@ class ChangeRequestFormPost(APIView):
requested_to_template_id=generate_tmp) requested_to_template_id=generate_tmp)
# create template approvers # create template approvers
counter = 0
for frm_approver in frm_approvers: for frm_approver in frm_approvers:
frm_approver['form_code'] = frm_id frm_approver['form_code'] = frm_id
counter = counter + 1
data_list_approver.append(frm_approver) data_list_approver.append(frm_approver)
counter = counter + 1
vendor_data = {
'level': counter,
'delegation': 'Vendor/Implementor',
'user': form_header['requested_to_user'],
'form_code': frm_id
}
data_list_approver.append(vendor_data)
counter = counter + 1
requestor_data = {
'level': counter,
'delegation': 'Requestor',
'user': form_header['requested_by_user'],
'form_code': frm_id
}
data_list_approver.append(requestor_data)
serializerApprover = serializers.ChangeRequestFormApproversSerializer( serializerApprover = serializers.ChangeRequestFormApproversSerializer(
data=data_list_approver, many=True) data=data_list_approver, many=True)
......
...@@ -101,8 +101,6 @@ class UserList(APIView): ...@@ -101,8 +101,6 @@ class UserList(APIView):
return self.paginator.get_paginated_response(data) return self.paginator.get_paginated_response(data)
class ChangeRequestTemplatesViewset(meviewsets.ModelViewSet): class ChangeRequestTemplatesViewset(meviewsets.ModelViewSet):
queryset = models.ChangeRequestTemplateHeader.objects.all() queryset = models.ChangeRequestTemplateHeader.objects.all()
......
...@@ -17,7 +17,6 @@ from rest_framework.exceptions import APIException ...@@ -17,7 +17,6 @@ from rest_framework.exceptions import APIException
CR_FRONT_LINK = settings.CR_FRONT_LINK CR_FRONT_LINK = settings.CR_FRONT_LINK
# NOTIFICATION = settings.NOTIFICATION
def entity_log_bulk(queryset, entity, tbl): def entity_log_bulk(queryset, entity, tbl):
...@@ -93,16 +92,6 @@ class QuerySetHelper: ...@@ -93,16 +92,6 @@ class QuerySetHelper:
) )
return context.queryset return context.queryset
# if self.request.query_params.get('search'):
# search_key = self.request.query_params.get('search')
# self.queryset = self.queryset.filter(
# Q(requested_to_template_name__icontains=search_key.lower()) |
# Q(requested_to_template_id__icontains=search_key.lower())
# )
# self.queryset = QuerySetHelper.Sort(self)
@staticmethod @staticmethod
def Filter(context): def Filter(context):
if int(len(context.request.query_params)) > 0: if int(len(context.request.query_params)) > 0:
...@@ -124,7 +113,8 @@ class QuerySetHelper: ...@@ -124,7 +113,8 @@ class QuerySetHelper:
def ApproverStatus(status): def ApproverStatus(status):
choices = ["pending", "rejected", "approved", "completed", "cancelled", 'acknowledged', 'accepted'] choices = ["pending", "rejected", "approved", "completed", "cancelled",
'acknowledged', 'accepted']
if status not in choices: if status not in choices:
return False return False
else: else:
...@@ -139,41 +129,6 @@ def number_generator(prefix, id): ...@@ -139,41 +129,6 @@ def number_generator(prefix, id):
return autogenerated_no return autogenerated_no
def logged_user(self):
# return self.request.META.get('HTTP_ACCOUNT_NO')
return self.request.user
def receiver_body(
sender_account_no, receiver_account_no,
email_code, email_recipient,
app, sent, name, routing_level,
status, cr_number, cr_name,
company_requestedto,
department_requestedto,
priority_level, url
):
receiver_data = {
"sender_account_no": sender_account_no,
"receiver_account_no": receiver_account_no,
"email_code": email_code,
"email_recipient": email_recipient,
"app": app,
"sent": "False",
"name": name,
"routing_level": routing_level,
"status": status,
"cr_number": cr_number,
"cr_name": cr_name,
"company_requestedto": company_requestedto,
"department_requestedto": department_requestedto,
"priority_level": priority_level,
"url": url
}
return receiver_data
def get_template_instance(form_code): def get_template_instance(form_code):
template_instance = models.ChangeRequestFormHeader.objects.filter( template_instance = models.ChangeRequestFormHeader.objects.filter(
Q(form_code=form_code) Q(form_code=form_code)
...@@ -181,97 +136,76 @@ def get_template_instance(form_code): ...@@ -181,97 +136,76 @@ def get_template_instance(form_code):
return template_instance return template_instance
def send_notification( def send_mail_vendor(requestor,
form_code, cr_number, user_id_number,
user_name, message, app,
sender_id_number, sender_name
):
notification_data = {
"slug": form_code,
"change_request_template_code": cr_number,
# (OPENING TAG) receiver credential
"account_no": user_id_number,
"user": user_name,
# (CLOSING TAG) receiver credential
"notif_type": "ACTIVITY",
"message": message,
"is_read": False,
"app": app,
"sender_account_no": sender_id_number,
"createdby": sender_name
}
notification = requests.post(NOTIFICATION, data=notification_data)
# return notification.status
return notification
def send_mail_vendor(receiver,
form_code, form_code,
delegation, delegation,
msg, msg,
action, action,
code,
remarks, remarks,
routing_level): routing_level):
app = 'cms'
cr_link = f'{CR_FRONT_LINK}/{form_code}' cr_link = f'{CR_FRONT_LINK}/{form_code}'
template_instance = get_template_instance(form_code) template_instance = get_template_instance(form_code)
cr_number = template_instance.requested_to_template_id cr_number = template_instance.requested_to_template_id
template_name = template_instance.requested_to_template_name template_name = template_instance.requested_to_template_name
requested_to_company = template_instance.requested_to_company requested_to_company = template_instance.requested_to_company.code
requested_to_department = template_instance.requested_to_department requested_to_department = template_instance.requested_to_department.code
requested_by_user = template_instance.requested_by_user requested_by_user = template_instance.requested_by_user.code
created = template_instance.created
requested_to_priority = template_instance.requested_to_priority requested_to_priority = template_instance.requested_to_priority
status = template_instance.status
vendor_instance = models.ChangeRequestFormApprovers.objects.filter( requested_to_user = template_instance.requested_to_user.code
Q(delegation="Vendor/Implementor") &
Q(form_code=form_code)
).first()
# receiver details # receiver details
vendor = get_account_details(vendor_instance.user) vendor_instance = get_account_details(requested_to_user)
requestor_name = vendor['name'] vendor_name = vendor_instance.values_list('name', flat=True)[0]
requestor_email = vendor['email'] vendor_email = vendor_instance.values_list('email', flat=True)[0]
requestor_account_id = vendor['id_number'] vendor_code = vendor_instance.values_list('code', flat=True)[0]
# sender details # sender details
sender_instance = get_account_details(receiver) sender_instance = get_account_details(requestor)
sender_account_username = sender_instance['username'] sender_name = sender_instance.values_list('name', flat=True)[0]
sender_account_id = sender_instance['id_number'] sender_code = sender_instance.values_list('code', flat=True)[0]
sender_name = sender_instance['name'] sender_email = sender_instance.values_list('email', flat=True)[0]
group = get_dept_details(requested_to_department) # department details
group_name = group['name'] department = get_dept_details(requested_to_department)
dept_name = department.values_list('name', flat=True)[0]
company = get_companies_details(requested_to_company) company = get_companies_details(requested_to_company)
company_name = company['name'] company_name = company.values_list('name', flat=True)[0]
container = receiver_body( # call sender email
sender_account_id, requestor_account_id, code,
requestor_email, app, "False", requestor_name, routing_level, name = vendor_name
action, cr_number, template_name, company_name, group_name, action_by = sender_name
requested_to_priority, cr_link routing_level = routing_level
) status = status
cr_number = cr_number
cr_name = template_name
company_requestedto = company_name
department_requestedto = dept_name
priority_level = requested_to_priority
url = cr_link
remarks = remarks
if action.lower() == 'rejected': recipient = vendor_email
new_body = {"rejected_by": requestor_name, action_type = action
"remarks": remarks} delegation_type = delegation
elif action.lower() == 'accepted': admin = sender_email
new_body = {"approved_by": requestor_name}
data = {**container, **new_body} args = [name, action_by, routing_level, status, cr_number, cr_name,
email_status = requests.post(EMAIL, data=data) company_requestedto, department_requestedto, priority_level,
url, remarks, recipient, action_type, delegation_type, admin]
main_threading(args, sender.routing_table_actions)
message = f"{sender_name} {msg} ({template_name})" message = f"{sender_name} {msg} ({template_name})"
send_notification( # create notification
form_code, cr_number,
requestor_account_id, requestor_name, notification_create(form_code, message, vendor_code,
message, app, sender_code)
sender_account_id, sender_account_username
)
def send_mail_requestor(current_user, def send_mail_requestor(current_user,
...@@ -325,11 +259,12 @@ def send_mail_requestor(current_user, ...@@ -325,11 +259,12 @@ def send_mail_requestor(current_user,
recipient = requestor_email recipient = requestor_email
action_type = action action_type = action
delegation_type = delegation
admin = sender_email admin = sender_email
args = [name, action_by, routing_level, status, cr_number, cr_name, args = [name, action_by, routing_level, status, cr_number, cr_name,
company_requestedto, department_requestedto, priority_level, company_requestedto, department_requestedto, priority_level,
url, recipient, action_type, admin] url, remarks, recipient, action_type, delegation_type, admin]
main_threading(args, sender.routing_table_actions) main_threading(args, sender.routing_table_actions)
...@@ -341,62 +276,63 @@ def send_mail_requestor(current_user, ...@@ -341,62 +276,63 @@ def send_mail_requestor(current_user,
current_user) current_user)
def next_approver_email(receiver, form_code, delegation, msg, action): def next_approver_email(receiver, form_code, delegation, msg):
cr_link = f'{CR_FRONT_LINK}/{form_code}' cr_link = f'{CR_FRONT_LINK}/{form_code}'
template_instance = get_template_instance(form_code) template_instance = get_template_instance(form_code)
app = 'cms'
cr_number = template_instance.requested_to_template_id cr_number = template_instance.requested_to_template_id
template_name = template_instance.requested_to_template_name template_name = template_instance.requested_to_template_name
requested_to_company = template_instance.requested_to_company requested_to_company = template_instance.requested_to_company.code
requested_to_department = template_instance.requested_to_department requested_to_department = template_instance.requested_to_department.code
requested_by_user = template_instance.requested_by_user requested_by_user = template_instance.requested_by_user.code
requested_to_priority = template_instance.requested_to_priority requested_to_priority = template_instance.requested_to_priority
cr_status = template_instance.status
# for rec in receiver: # next approver details --------------------------------------------------
# receiver details
# if action == 'initial':
receiver_instance = get_account_details(receiver) receiver_instance = get_account_details(receiver)
# else: receiver_name = receiver_instance.values_list('name', flat=True)[0]
# receiver_instance = get_account_details(receiver.user) receiver_email = receiver_instance.values_list('email', flat=True)[0]
receiver_code = receiver_instance.values_list('code', flat=True)[0]
receiver_name = receiver_instance['name'] # requestor details --------------------------------------------------
receiver_email = receiver_instance['email']
receiver_account_id = receiver_instance['id_number']
# sender details
sender_instance = get_account_details(requested_by_user) sender_instance = get_account_details(requested_by_user)
sender_account_username = sender_instance['username'] sender_email = sender_instance.values_list('email', flat=True)[0]
sender_account_id = sender_instance['id_number'] sender_name = sender_instance.values_list('name', flat=True)[0]
sender_name = sender_instance['name'] sender_code = sender_instance.values_list('code', flat=True)[0]
group = get_dept_details(requested_to_department) department = get_dept_details(requested_to_department)
group_name = group['name'] dept_name = department.values_list('name', flat=True)[0]
company = get_companies_details(requested_to_company) company = get_companies_details(requested_to_company)
company_name = company['name'] company_name = company.values_list('name', flat=True)[0]
data = receiver_body( # call sender email
sender_account_id, receiver_account_id, code,
receiver_email, app, "False", receiver_name, 1,
"Pending", cr_number, template_name, company_name, group_name,
requested_to_priority, cr_link
)
email_status = requests.post(EMAIL, data=data) name = receiver_name
cr_number = cr_number
cr_name = template_name
company_requestedto = company_name
department_requestedto = dept_name
priority_level = requested_to_priority
status = cr_status
url = cr_link
recipient = receiver_email
delegation_type = delegation
admin = sender_email
args = [name, cr_number, cr_name,
company_requestedto, department_requestedto, priority_level,
status, url, recipient, delegation_type, admin]
main_threading(args, sender.routing_table_actions_required)
message = f"{sender_name} {msg} ({template_name})" message = f"{sender_name} {msg} ({template_name})"
notif = send_notification( # create notification
form_code, cr_number,
receiver_account_id, receiver_name,
message, app,
sender_account_id, sender_account_username
)
return True notification_create(form_code, message, receiver_code,
sender_code)
def cancel_overdue(request): def cancel_overdue(request):
......
...@@ -21,20 +21,17 @@ def list_by_user(user_id_number): ...@@ -21,20 +21,17 @@ def list_by_user(user_id_number):
try: try:
approver = models.ChangeRequestFormApprovers.objects.filter( approver = models.ChangeRequestFormApprovers.objects.filter(
Q(user=user_id_number) & Q(user=user_id_number)
Q(archived_at=None)
) )
approver = [data.form_code for data in approver] approver = [data.form_code for data in approver]
stake = models.ChangeRequestFormStakeHolders.objects.filter( stake = models.ChangeRequestFormStakeHolders.objects.filter(
Q(user=user_id_number) & Q(user=user_id_number)
Q(archived_at=None)
) )
stake = [data.form_code for data in stake] stake = [data.form_code for data in stake]
headers = models.ChangeRequestFormHeader.objects.filter( headers = models.ChangeRequestFormHeader.objects.filter(
archived_at=None,
requested_by_user=user_id_number requested_by_user=user_id_number
) )
headers = [data.form_code for data in headers] headers = [data.form_code for data in headers]
...@@ -61,8 +58,7 @@ def list_by_user(user_id_number): ...@@ -61,8 +58,7 @@ def list_by_user(user_id_number):
form_code = list(set(stake + approver + headers)) form_code = list(set(stake + approver + headers))
return_queryset = models.ChangeRequestFormHeader.objects.filter( return_queryset = models.ChangeRequestFormHeader.objects.filter(
form_code__in=form_code, form_code__in=form_code
archived_at=None,
) )
exclude = return_queryset.filter( exclude = return_queryset.filter(
status__iexact='Draft', status__iexact='Draft',
......
...@@ -26,7 +26,7 @@ def custom_exception_handler(exc, context): ...@@ -26,7 +26,7 @@ def custom_exception_handler(exc, context):
value = value[0] value = value[0]
error_message['code'] = response.status_code error_message['code'] = response.status_code
error_message['status'] = 'failed' error_message['status'] = 'failedkk'
error_message['message'] = value error_message['message'] = value
response.data = error_message response.data = error_message
......
...@@ -97,6 +97,12 @@ class CREnum(Enum): ...@@ -97,6 +97,12 @@ class CREnum(Enum):
RESUBMIT = "RESUBMIT" RESUBMIT = "RESUBMIT"
SUBMIT = "SUBMIT" SUBMIT = "SUBMIT"
SAVE = "SAVE" SAVE = "SAVE"
APPROVED = "APPROVED"
COMPLETED = "COMPLETED"
CANCELLED = "CANCELLED"
ACCEPTED = "ACCEPTED"
ACKNOWLEDGED = "ACKNOWLEDGED"
REJECTED = "REJECTED"
class CREntitiesEnum(Enum): class CREntitiesEnum(Enum):
......
...@@ -479,7 +479,9 @@ def admin_changepassword(args): ...@@ -479,7 +479,9 @@ def admin_changepassword(args):
# # html_message=FC # # html_message=FC
# # ) # # )
# RMS-CRAPPROVED ; RMS-CRACKNOWLEDGE ; RMS-CRCOMPLETED ; RMS-CRACCEPTED # RMS-CRAPPROVED ; RMS-CRACKNOWLEDGE ; RMS-CRCOMPLETED ; RMS-CRACCEPTED ;
# RMS-CRREJECTED ; RMS-CRREJECTED-VENDOR
def routing_table_actions(args): def routing_table_actions(args):
name = args[0] name = args[0]
action_by = args[1] action_by = args[1]
...@@ -491,92 +493,31 @@ def routing_table_actions(args): ...@@ -491,92 +493,31 @@ def routing_table_actions(args):
department_requestedto = args[7] department_requestedto = args[7]
priority_level = args[8] priority_level = args[8]
url = args[9] url = args[9]
remarks = args[10]
recipient = args[10] recipient = args[11]
action_type = args[11] action_type = args[12]
admin = args[12] delegation_type = args[13]
admin = args[14]
if action_type.lower() == 'approved': if args[12].lower() == 'approved':
email_template = 'RMS-CRAPPROVED.html' email_template = 'RMS-CRAPPROVED.html'
subject = 'Resource Management System - Change Request Approved' subject = 'Resource Management System - Change Request Approved'
elif action_type.lower() == 'acknowledged': elif args[12].lower() == 'acknowledged':
email_template = 'RMS-CRACKNOWLEDGE.html' email_template = 'RMS-CRACKNOWLEDGE.html'
subject = 'Resource Management System - Change Request Acknowledged' subject = 'Resource Management System - Change Request Acknowledged'
elif action_by.lower() == 'completed': elif args[12].lower() == 'completed':
email_template = 'RMS-CRCOMPLETED.html' email_template = 'RMS-CRCOMPLETED.html'
subject = 'Resource Management System - Change Request Completed' subject = 'Resource Management System - Change Request Completed'
elif action_type.lower() == 'accepted': elif args[12].lower() == 'accepted':
email_template = 'RMS-CRACCEPTED.html' email_template = 'RMS-CRACCEPTED.html'
subject = 'Resource Management System - Change Request Accepted' subject = 'Resource Management System - Change Request Accepted'
elif args[12].lower() == 'rejected':
F = open(os.path.join(settings.EMAIL_TEMPLATES_ROOT, email_template), 'r')
FC = F.read()
FC = FC.replace('{name}', name)
FC = FC.replace('{action_by}', action_by)
FC = FC.replace('{routing_level}', routing_level)
FC = FC.replace('{status}', status)
FC = FC.replace('{cr_number}', cr_number)
FC = FC.replace('{cr_name}', cr_name)
FC = FC.replace('{company_requestedto}', company_requestedto)
FC = FC.replace('{department_requestedto}', department_requestedto)
FC = FC.replace('{priority_level}', priority_level)
FC = FC.replace('{url}', url)
try:
send_mail(
subject=subject,
message='',
from_email=settings.EMAIL_DEFAULT_SENDER,
recipient_list=(recipient,),
html_message=FC,
fail_silently=False
)
models.EmailLogs.objects.create(
template=email_template,
recipients=recipient,
content=FC,
is_sent=True,
createdby=admin,
modifiedby=admin
)
except Exception as e:
models.EmailLogs.objects.create(
template=email_template,
recipients=recipient,
content=FC,
is_sent=False,
createdby=admin,
modifiedby=admin
)
return True
# RMS-CRREJECTED ; RMS-CRREJECTED-VENDOR
def routing_table_actions_rejected(args):
name = args[0]
action_by = args[1]
routing_level = args[2]
status = args[3]
cr_number = args[4]
cr_name = args[5]
company_requestedto = args[6]
department_requestedto = args[7]
priority_level = args[8]
url = args[9]
remarks = args[10]
recipient = args[11]
rejected_type = args[12]
admin = args[13]
if rejected_type == 'requestor':
email_template = 'RMS-CRREJECTED.html'
subject = 'Resource Management System - Change Request Rejected' subject = 'Resource Management System - Change Request Rejected'
elif rejected_type == 'vendor': if args[13].lower() == 'requestor':
email_template = 'RMS-CRREJECTED.html'
elif args[13].lower() == 'vendor/implementor':
email_template = 'RMS-CRREJECTED-VENDOR.html' email_template = 'RMS-CRREJECTED-VENDOR.html'
subject = 'Resource Management System - Change Request Rejected'
F = open(os.path.join(settings.EMAIL_TEMPLATES_ROOT, email_template), 'r') F = open(os.path.join(settings.EMAIL_TEMPLATES_ROOT, email_template), 'r')
...@@ -592,6 +533,8 @@ def routing_table_actions_rejected(args): ...@@ -592,6 +533,8 @@ def routing_table_actions_rejected(args):
FC = FC.replace('{department_requestedto}', department_requestedto) FC = FC.replace('{department_requestedto}', department_requestedto)
FC = FC.replace('{priority_level}', priority_level) FC = FC.replace('{priority_level}', priority_level)
FC = FC.replace('{url}', url) FC = FC.replace('{url}', url)
if args[11].lower() == 'rejected':
FC = FC.replace('{remarks}', remarks) FC = FC.replace('{remarks}', remarks)
try: try:
...@@ -635,16 +578,17 @@ def routing_table_actions_required(args): ...@@ -635,16 +578,17 @@ def routing_table_actions_required(args):
url = args[7] url = args[7]
recipient = args[8] recipient = args[8]
action_type = args[9] delegation_type = args[9]
admin = args[10] admin = args[10]
if action_type == 'requestor': if delegation_type.lower() == 'vendor/implementor':
email_template = 'RMS-ACTIONREQUIRED.html'
subject = 'Resource Management System - Action Required for Change Request'
elif action_type == 'vendor':
email_template = 'RMS-ACTIONREQUIRED-VENDOR.html' email_template = 'RMS-ACTIONREQUIRED-VENDOR.html'
subject = 'Resource Management System - Action Required for Change Request' subject = 'Resource Management System - Action Required for Change Request'
else:
email_template = 'RMS-ACTIONREQUIRED.html'
subject = 'Resource Management System - Action Required for Change Request'
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()
......
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