Commit c0fd1e99 authored by Gladys Forte's avatar Gladys Forte

re route and resubmit

parent 26afe2ea
...@@ -63,7 +63,7 @@ class ChangeRequestFormDetailsSerializer( ...@@ -63,7 +63,7 @@ class ChangeRequestFormDetailsSerializer(
class ChangeRequestFormHeaderSerializer( class ChangeRequestFormHeaderSerializer(
serializers.ModelSerializer WritableNestedModelSerializer
): ):
frm_approvers = ChangeRequestFormApproversSerializer( frm_approvers = ChangeRequestFormApproversSerializer(
many=True, required=False) many=True, required=False)
...@@ -73,13 +73,15 @@ class ChangeRequestFormHeaderSerializer( ...@@ -73,13 +73,15 @@ class ChangeRequestFormHeaderSerializer(
many=True, required=False) many=True, required=False)
frm_details = ChangeRequestFormDetailsSerializer( frm_details = ChangeRequestFormDetailsSerializer(
many=True, required=False) many=True, required=False)
def to_representation(self, instance): def to_representation(self, instance):
ret = super().to_representation(instance) ret = super().to_representation(instance)
try: try:
# id_number = self.context.get('request').META.get('user') # id_number = self.context.get('request').META.get('user')
user = self.context['request'].user
id_number = "USER-20190909-0000005" print(user)
# id_number = "USER-20190909-0000005"
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(archived_at=None) &
...@@ -105,5 +107,15 @@ class ChangeRequestFormHeaderSerializer( ...@@ -105,5 +107,15 @@ class ChangeRequestFormHeaderSerializer(
class Meta: class Meta:
model = models.ChangeRequestFormHeader model = models.ChangeRequestFormHeader
fields = '__all__' # fields = '__all__'
fields = ('form_code', 'requested_to_template_name', 'requested_to_objective',
'requested_to_target_date', 'requested_to_priority',
'description', 'created', 'cancel_date', 'status',
'company_desc', 'department_desc', 'requested_desc',
'requested_to_template_id', 'requested_to_company',
'requested_to_department', 'requested_to_user',
'requested_by_user', 'requested_by_department',
'template_no', 'frm_approvers', 'frm_stakes',
'frm_attachments', 'frm_details')
read_only_fields = ['created', 'archived_at', 'form_code'] read_only_fields = ['created', 'archived_at', 'form_code']
...@@ -23,6 +23,8 @@ from django.db import transaction, IntegrityError, connection ...@@ -23,6 +23,8 @@ from django.db import transaction, IntegrityError, connection
from app.applicationlayer.utils import QuerySetHelper from app.applicationlayer.utils import QuerySetHelper
from app.businesslayer.changerequest import change_request 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
from app.entities import enums
from django.forms.models import model_to_dict
APPROVER_MESSAGE = settings.APPROVER_MESSAGE APPROVER_MESSAGE = settings.APPROVER_MESSAGE
...@@ -263,42 +265,109 @@ class ChangeRequestFormsViewset(meviewsets.ModelViewSet): ...@@ -263,42 +265,109 @@ class ChangeRequestFormsViewset(meviewsets.ModelViewSet):
serializer = self.get_serializer(instance) serializer = self.get_serializer(instance)
return Response(serializer.data) return Response(serializer.data)
@transaction.atomic @action(
def partial_update(self, request, *args, **kwargs): methods=['PATCH'], detail=True,
url_path='re_route', url_name='re_route'
partial = kwargs.pop('partial', False) )
instance = self.get_object() def re_route(self, request, *args, **kwargs):
template_no = kwargs['template_no'] form_code = kwargs['form_code']
print(form_code)
models.ChangeRequestFormHeader.objects.filter(
form_code=form_code).update(status='Pending')
tmp_no_exists = models.ChangeRequestFormHeader.objects.filter( models.ChangeRequestFormApprovers.objects.filter(
template_no=template_no) form_code=form_code).update(action=None, remarks=None,
date_sent=None)
return Response(
"Change request form successfully re routed",
status=status.HTTP_200_OK
)
@action(
methods=['PATCH'], detail=True,
url_path='re_submit', url_name='re_submit'
)
def re_submit(self, request, *args, **kwargs):
if not tmp_no_exists: # get form code to be re created
serializer = self.get_serializer(instance, data=request.data, partial=partial) form_code = kwargs['form_code']
serializer.is_valid(raise_exception=True)
frm_id = models.ChangeRequestFormHeader.objects.get(
form_code=form_code)
obj = models.ChangeRequestFormHeader.objects.get(pk=frm_id.pk)
obj.pk = None
obj.form_code = "Temp-Form-Code"
obj.old_form_code = form_code
obj.status = 'Draft'
obj.save()
new_frmheader_code = number_generator(
enums.GenerateCode.FORM.value, obj.id)
models.ChangeRequestFormHeader.objects.filter(
pk=obj.id).update(form_code=new_frmheader_code)
old_instance = model_to_dict(instance) # re create approvers
self.perform_update(serializer) approvers = models.ChangeRequestFormApprovers.objects.filter(
new_instance = serializer.data form_code=form_code)
# print(new_instance) counter = 0
for approver in approvers:
to_delete = approver.pk
counter = counter + 1
approver.pk = None
approver.code = counter
approver.remarks =None
approver.action = None
approver.date_sent = None
approver.save()
new_frmapp_code = number_generator(
enums.GenerateCode.FORM_APPROVER.value, approver.id)
crhistory_save( models.ChangeRequestFormApprovers.objects.filter(
enums.LogEnum.UPDATE.value, pk=approver.id).update(code=new_frmapp_code,
enums.CREntitiesEnum.CR_TMP_HEADER.value, form_code=new_frmheader_code)
new_instance['template_no'],
old_instance, # delete old data
new_instance models.ChangeRequestFormApprovers.objects.filter(
) pk=to_delete).delete()
# re create stakeholders
stakes = models.ChangeRequestFormStakeHolders.objects.filter(
form_code=form_code)
return Response(serializer.data) counter = 0
for stake in stakes:
to_delete = stake.pk
counter = counter + 1
stake.pk = None
stake.code = counter
stake.save()
new_frmstake_code = number_generator(
enums.GenerateCode.FORM_STAKE.value, stake.id)
models.ChangeRequestFormStakeHolders.objects.filter(
pk=stake.id).update(code=new_frmstake_code,
form_code=new_frmheader_code)
# delete old data
models.ChangeRequestFormStakeHolders.objects.filter(
pk=to_delete).delete()
return Response( return Response(
"Template cannot edit due to existing transaction/s", "Change request form successfully resubmitted",
status=status.HTTP_400_BAD_REQUEST status=status.HTTP_200_OK
) )
class ChangeRequestFormApproversViewset(meviewsets.ModelViewSet): class ChangeRequestFormApproversViewset(meviewsets.ModelViewSet):
......
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