Commit e913cfde authored by Gladys Forte's avatar Gladys Forte

clean code for save and submit

parent 8b1ed17e
......@@ -598,44 +598,33 @@ class ChangeRequestFormsViewset(meviewsets.ModelViewSet):
status=status.HTTP_200_OK
)
@transaction.atomic
@action(
methods=['PATCH'], detail=True,
url_path='save', url_name='save'
)
def save(self, request, *args, **kwargs):
partial = kwargs.pop('partial', False)
instance = self.get_object()
form_code = kwargs['form_code']
form_header_data = request.data
form_data = request.data
# get pk
frm_id = models.ChangeRequestFormHeader.objects.get(form_code=form_code)
# generate batchno history
batchno = get_max_batchno("batch")
# get old data
old_instance = models.ChangeRequestFormHeader.objects.filter(
form_code=form_code).values()
old_instance = list(old_instance)
# 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)
# update form header
serializer = self.get_serializer(instance,
data=form_data,
partial=partial)
if serializer.is_valid():
serializer.save()
# get new data
new_instance = models.ChangeRequestFormHeader.objects.filter(
form_code=form_code).values()
serializer.is_valid(raise_exception=True)
old_instance = model_to_dict(instance)
self.perform_update(serializer)
new_instance = serializer.data
print(serializer.errors)
new_instance = list(new_instance)
# save history in form header
crhistory_save(
batchno,
......@@ -647,504 +636,91 @@ class ChangeRequestFormsViewset(meviewsets.ModelViewSet):
new_instance
)
# ---------------------------------------------------------------------
# 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:
# get old data
old_instance = models.ChangeRequestFormApprovers.objects.filter(
pk=e).values()
old_instance = list(old_instance)
models.ChangeRequestFormApprovers.objects.filter(
pk=e).delete()
# save history in form approver
crhistory_save(
batchno,
enums.CREnum.SAVE.value,
enums.CREnum.DELETED.value,
enums.CREntitiesEnum.CR_FRM_APPROVER.value,
form_code,
old_instance,
None
)
# Create or update approver data that are in the request
for frm_approver in frm_approvers:
if "id" in frm_approver:
# get old data
old_instance = models.ChangeRequestFormApprovers.objects.filter(
pk=frm_approver['id']).values()
old_instance = list(old_instance)
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'])
# get new data
new_instance = models.ChangeRequestFormApprovers.objects.filter(
pk=frm_approver['id']).values()
new_instance = list(new_instance)
# save history in form approver
crhistory_save(
batchno,
enums.CREnum.SAVE.value,
enums.CREnum.UPDATE.value,
enums.CREntitiesEnum.CR_FRM_APPROVER.value,
form_code,
old_instance,
new_instance
)
else:
user_instance = models.User.objects.get(
code=frm_approver['user'])
cre = models.ChangeRequestFormApprovers.objects.create(
level=frm_approver['level'],
delegation=frm_approver['delegation'],
created=datetime.now(),
user=user_instance,
form_code=frm_id,
code='try')
code = number_generator(enums.GenerateCode.FORM_APPROVER.value, cre.id)
models.ChangeRequestFormApprovers.objects.filter(
id=cre.id).update(code=code)
# get new data
new_instance = models.ChangeRequestFormApprovers.objects.filter(
pk=cre.id).values()
new_instance = list(new_instance)
# save history in form approver
crhistory_save(
batchno,
enums.CREnum.SAVE.value,
enums.CREnum.ADD.value,
enums.CREntitiesEnum.CR_FRM_APPROVER.value,
form_code,
None,
new_instance
)
# ---------------------------------------------------------------------
# get stakes data
stakes_id = models.ChangeRequestFormStakeHolders.objects.filter(
form_code=form_code)
# list existing id to variable
existing_stakes_ids = [item.id for item in stakes_id]
frm_stakes = form_header_data['frm_stakes']
updated_stakes_ids = []
# get all ids
for frm_stake in frm_stakes:
if "id" in frm_stake:
updated_stakes_ids.append(frm_stake['id'])
# Delete any stakes not included in the request
for e in existing_stakes_ids:
if e not in updated_stakes_ids:
# get old data
old_instance = models.ChangeRequestFormStakeHolders.objects.filter(
pk=e).values()
old_instance = list(old_instance)
models.ChangeRequestFormStakeHolders.objects.filter(
pk=e).delete()
# save history in form approver
crhistory_save(
batchno,
enums.CREnum.SAVE.value,
enums.CREnum.DELETED.value,
enums.CREntitiesEnum.CR_FRM_STAKE.value,
form_code,
old_instance,
None
)
# Create or update stake data that are in the request
for frm_stake in frm_stakes:
if "id" in frm_stake:
# get old data
old_instance = models.ChangeRequestFormStakeHolders.objects.filter(
pk=frm_stake['id']).values()
old_instance = list(old_instance)
models.ChangeRequestFormStakeHolders.objects.filter(
pk=frm_stake['id']).update(
delegation=frm_stake['delegation'],
created=datetime.now(),
user=frm_stake['user'],
tmp_stake=frm_stake['tmp_stake'])
# get new data
new_instance = models.ChangeRequestFormStakeHolders.objects.filter(
pk=frm_stake['id']).values()
new_instance = list(new_instance)
# save history in form approver
crhistory_save(
batchno,
enums.CREnum.SAVE.value,
enums.CREnum.UPDATE.value,
enums.CREntitiesEnum.CR_FRM_STAKE.value,
form_code,
old_instance,
new_instance
)
else:
user_instance = models.User.objects.get(
code=frm_stake['user'])
cre = models.ChangeRequestFormStakeHolders.objects.create(
delegation=frm_stake['delegation'],
created=datetime.now(),
user=user_instance,
form_code=frm_id,
code='try')
code = number_generator(enums.GenerateCode.FORM_STAKE.value, cre.id)
models.ChangeRequestFormStakeHolders.objects.filter(
id=cre.id).update(code=code)
# get new data
new_instance = models.ChangeRequestFormStakeHolders.objects.filter(
pk=cre.id).values()
new_instance = list(new_instance)
# save history in form approver
crhistory_save(
batchno,
enums.CREnum.SAVE.value,
enums.CREnum.ADD.value,
enums.CREntitiesEnum.CR_FRM_STAKE.value,
form_code,
None,
new_instance
)
# ---------------------------------------------------------------------
# get attachments data
attach_id = models.ChangeRequestFormAttachments.objects.filter(
form_code=form_code)
# list existing id to variable
existing_attach_ids = [item.id for item in attach_id]
frm_attach = form_header_data['frm_attachments']
updated_attach_ids = []
# get all ids
for frm_att in frm_attach:
if "id" in frm_att:
updated_attach_ids.append(frm_att['id'])
# Delete any attachments not included in the request
for e in existing_attach_ids:
if e not in updated_attach_ids:
# get old data
old_instance = models.ChangeRequestFormAttachments.objects.filter(
pk=e).values()
old_instance = list(old_instance)
models.ChangeRequestFormAttachments.objects.filter(
pk=e).delete()
# save history in form approver
crhistory_save(
batchno,
enums.CREnum.SAVE.value,
enums.CREnum.DELETED.value,
enums.CREntitiesEnum.CR_FRM_ATTACHMENT.value,
form_code,
old_instance,
None
)
change_request.form_add_edit_delete(
form_data['frm_approvers'],
models.ChangeRequestFormApprovers,
enums.CREntitiesEnum.CR_FRM_APPROVER.value,
serializers.ChangeRequestFormApproversSerializer,
partial,
self,
form_code,
batchno,
enums.CREnum.SAVE.value
)
# Create or update attachments data that are in the request
for frm_att in frm_attach:
if "id" in frm_att:
# get old data
old_instance = models.ChangeRequestFormAttachments.objects.filter(
pk=frm_att['id']).values()
old_instance = list(old_instance)
models.ChangeRequestFormAttachments.objects.filter(
pk=frm_att['id']).update(
attachment_type=frm_att['attachment_type'],
attachment_name=frm_att['attachment_name'],
file_name=frm_att['file_name'],
description=frm_att['description'],
file_upload=frm_att['file_upload'],
uploaded_by=frm_att['uploaded_by'],
created=datetime.now())
# get new data
new_instance = models.ChangeRequestFormAttachments.objects.filter(
pk=frm_att['id']).values()
new_instance = list(new_instance)
# save history in form approver
crhistory_save(
batchno,
enums.CREnum.SAVE.value,
enums.CREnum.UPDATE.value,
enums.CREntitiesEnum.CR_FRM_ATTACHMENT.value,
form_code,
old_instance,
new_instance
)
else:
user_instance = models.User.objects.get(
code=frm_att['uploaded_by'])
cre = models.ChangeRequestFormAttachments.objects.create(
attachment_type=frm_att['attachment_type'],
attachment_name=frm_att['attachment_name'],
file_name=frm_att['file_name'],
description=frm_att['description'],
file_upload=frm_att['file_upload'],
uploaded_by=user_instance,
created=datetime.now(),
form_code=frm_id,
code='try')
code = number_generator(enums.GenerateCode.FORM_ATTACH.value, cre.id)
models.ChangeRequestFormAttachments.objects.filter(
id=cre.id).update(code=code)
# get new data
new_instance = models.ChangeRequestFormAttachments.objects.filter(
pk=cre.id).values()
new_instance = list(new_instance)
# save history in form approver
crhistory_save(
batchno,
enums.CREnum.SAVE.value,
enums.CREnum.ADD.value,
enums.CREntitiesEnum.CR_FRM_ATTACHMENT.value,
form_code,
None,
new_instance
)
# ---------------------------------------------------------------------
# get details data
detail_id = models.ChangeRequestFormDetails.objects.filter(
form_code=form_code)
# list existing id to variable
existing_detail_ids = [item.id for item in detail_id]
change_request.form_add_edit_delete(
form_data['frm_stakes'],
models.ChangeRequestFormStakeHolders,
enums.CREntitiesEnum.CR_FRM_STAKE.value,
serializers.ChangeRequestFormStakeHoldersSerializer,
partial,
self,
form_code,
batchno,
enums.CREnum.SAVE.value
)
frm_details = form_header_data['frm_details']
change_request.form_add_edit_delete(
form_data['frm_attachments'],
models.ChangeRequestFormAttachments,
enums.CREntitiesEnum.CR_FRM_ATTACHMENT.value,
serializers.ChangeRequestFormAttachmentsSerializer,
partial,
self,
form_code,
batchno,
enums.CREnum.SAVE.value
)
updated_detail_ids = []
# get all ids
for frm_detail in frm_details:
if "id" in frm_detail:
updated_detail_ids.append(frm_detail['id'])
# Delete any attachments not included in the request
for e in existing_detail_ids:
if e not in updated_detail_ids:
# get old data
old_instance = models.ChangeRequestFormDetails.objects.filter(
pk=e).values()
old_instance = list(old_instance)
models.ChangeRequestFormDetails.objects.filter(
pk=e).delete()
# save history in form approver
crhistory_save(
batchno,
enums.CREnum.SAVE.value,
enums.CREnum.DELETED.value,
enums.CREntitiesEnum.CR_FRM_DETAIL.value,
form_code,
old_instance,
None
)
change_request.form_add_edit_delete(
form_data['frm_details'],
models.ChangeRequestFormDetails,
enums.CREntitiesEnum.CR_FRM_DETAIL.value,
serializers.ChangeRequestFormDetailsSerializer,
partial,
self,
form_code,
batchno,
enums.CREnum.SAVE.value
)
# Create or update attachments data that are in the request
for frm_detail in frm_details:
if "id" in frm_detail:
# get old data
old_instance = models.ChangeRequestFormDetails.objects.filter(
pk=frm_detail['id']).values()
old_instance = list(old_instance)
models.ChangeRequestFormDetails.objects.filter(
pk=frm_detail['id']).update(
field_idx=frm_detail['field_idx'],
field_ref=frm_detail['field_ref'],
field_val=frm_detail['field_val'],
field_props=frm_detail['field_props'],
created=datetime.now())
# get new data
new_instance = models.ChangeRequestFormDetails.objects.filter(
pk=frm_detail['id']).values()
new_instance = list(new_instance)
# save history in form approver
crhistory_save(
batchno,
enums.CREnum.SAVE.value,
enums.CREnum.UPDATE.value,
enums.CREntitiesEnum.CR_FRM_DETAIL.value,
form_code,
old_instance,
new_instance
)
else:
cre = models.ChangeRequestFormDetails.objects.create(
field_idx=frm_detail['field_idx'],
field_ref=frm_detail['field_ref'],
field_val=frm_detail['field_val'],
field_props=frm_detail['field_props'],
created=datetime.now(),
code='try',
form_code=frm_id)
code = number_generator(enums.GenerateCode.FORM_DETAIL.value, cre.id)
models.ChangeRequestFormDetails.objects.filter(
id=cre.id).update(code=code)
# get new data
new_instance = models.ChangeRequestFormDetails.objects.filter(
pk=cre.id).values()
new_instance = list(new_instance)
# save history in form approver
crhistory_save(
batchno,
enums.CREnum.SAVE.value,
enums.CREnum.ADD.value,
enums.CREntitiesEnum.CR_FRM_DETAIL.value,
form_code,
None,
new_instance
)
serializer = self.get_serializer(frm_id)
serializer = self.get_serializer(instance)
message = status_message_response(
200, 'success',
'Change Request successfully saved', serializer.data
'Change Request successfully saved',
serializer.data
)
return Response(message, status=status.HTTP_200_OK)
@transaction.atomic
@action(
methods=['PATCH'], detail=True,
url_path='submit', url_name='submit'
)
def submit(self, request, *args, **kwargs):
form_code = kwargs['form_code']
form_header_data = request.data
partial = kwargs.pop('partial', False)
instance = self.get_object()
# get pk
frm_id = models.ChangeRequestFormHeader.objects.get(form_code=form_code)
form_code = kwargs['form_code']
form_data = request.data
# generate batchno history
batchno = get_max_batchno("batch")
# get old data
old_instance = models.ChangeRequestFormHeader.objects.filter(
form_code=form_code).values()
old_instance = list(old_instance)
# 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)
# update form header
serializer = self.get_serializer(instance,
data=form_data,
partial=partial)
if serializer.is_valid():
serializer.save()
serializer.is_valid(raise_exception=True)
old_instance = model_to_dict(instance)
self.perform_update(serializer)
new_instance = serializer.data
print(serializer.errors)
# get new data
new_instance = models.ChangeRequestFormHeader.objects.filter(
form_code=form_code).values()
new_instance = list(new_instance)
# save history in form header
crhistory_save(
batchno,
......@@ -1156,461 +732,60 @@ class ChangeRequestFormsViewset(meviewsets.ModelViewSet):
new_instance
)
# ---------------------------------------------------------------------
# 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:
# get old data
old_instance = models.ChangeRequestFormApprovers.objects.filter(
pk=e).values()
old_instance = list(old_instance)
models.ChangeRequestFormApprovers.objects.filter(
pk=e).delete()
# save history in form approver
crhistory_save(
batchno,
enums.CREnum.SUBMIT.value,
enums.CREnum.DELETED.value,
enums.CREntitiesEnum.CR_FRM_APPROVER.value,
form_code,
old_instance,
None
)
# Create or update approver data that are in the request
for frm_approver in frm_approvers:
if "id" in frm_approver:
# get old data
old_instance = models.ChangeRequestFormApprovers.objects.filter(
pk=frm_approver['id']).values()
old_instance = list(old_instance)
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'])
# get new data
new_instance = models.ChangeRequestFormApprovers.objects.filter(
pk=frm_approver['id']).values()
new_instance = list(new_instance)
# save history in form approver
crhistory_save(
batchno,
enums.CREnum.SUBMIT.value,
enums.CREnum.UPDATE.value,
enums.CREntitiesEnum.CR_FRM_APPROVER.value,
form_code,
old_instance,
new_instance
)
else:
user_instance = models.User.objects.get(
code=frm_approver['user'])
cre = models.ChangeRequestFormApprovers.objects.create(
level=frm_approver['level'],
delegation=frm_approver['delegation'],
created=datetime.now(),
user=user_instance,
form_code=frm_id,
code='try')
code = number_generator(enums.GenerateCode.FORM_APPROVER.value, cre.id)
models.ChangeRequestFormApprovers.objects.filter(
id=cre.id).update(code=code)
# get new data
new_instance = models.ChangeRequestFormApprovers.objects.filter(
pk=cre.id).values()
new_instance = list(new_instance)
# save history in form approver
crhistory_save(
batchno,
enums.CREnum.SUBMIT.value,
enums.CREnum.ADD.value,
enums.CREntitiesEnum.CR_FRM_APPROVER.value,
form_code,
None,
new_instance
)
# ---------------------------------------------------------------------
# get stakes data
stakes_id = models.ChangeRequestFormStakeHolders.objects.filter(
form_code=form_code)
# list existing id to variable
existing_stakes_ids = [item.id for item in stakes_id]
frm_stakes = form_header_data['frm_stakes']
updated_stakes_ids = []
# get all ids
for frm_stake in frm_stakes:
if "id" in frm_stake:
updated_stakes_ids.append(frm_stake['id'])
# Delete any stakes not included in the request
for e in existing_stakes_ids:
if e not in updated_stakes_ids:
# get old data
old_instance = models.ChangeRequestFormStakeHolders.objects.filter(
pk=e).values()
old_instance = list(old_instance)
models.ChangeRequestFormStakeHolders.objects.filter(
pk=e).delete()
# save history in form approver
crhistory_save(
batchno,
enums.CREnum.SUBMIT.value,
enums.CREnum.DELETED.value,
enums.CREntitiesEnum.CR_FRM_STAKE.value,
form_code,
old_instance,
None
)
# Create or update stake data that are in the request
for frm_stake in frm_stakes:
if "id" in frm_stake:
# get old data
old_instance = models.ChangeRequestFormStakeHolders.objects.filter(
pk=frm_stake['id']).values()
old_instance = list(old_instance)
models.ChangeRequestFormStakeHolders.objects.filter(
pk=frm_stake['id']).update(
delegation=frm_stake['delegation'],
created=datetime.now(),
user=frm_stake['user'],
tmp_stake=frm_stake['tmp_stake'])
# get new data
new_instance = models.ChangeRequestFormStakeHolders.objects.filter(
pk=frm_stake['id']).values()
new_instance = list(new_instance)
# save history in form approver
crhistory_save(
batchno,
enums.CREnum.SUBMIT.value,
enums.CREnum.UPDATE.value,
enums.CREntitiesEnum.CR_FRM_STAKE.value,
form_code,
old_instance,
new_instance
)
else:
user_instance = models.User.objects.get(
code=frm_stake['user'])
cre = models.ChangeRequestFormStakeHolders.objects.create(
delegation=frm_stake['delegation'],
created=datetime.now(),
user=user_instance,
form_code=frm_id,
code='try')
code = number_generator(enums.GenerateCode.FORM_STAKE.value, cre.id)
models.ChangeRequestFormStakeHolders.objects.filter(
id=cre.id).update(code=code)
# get new data
new_instance = models.ChangeRequestFormStakeHolders.objects.filter(
pk=cre.id).values()
new_instance = list(new_instance)
# save history in form approver
crhistory_save(
batchno,
enums.CREnum.SUBMIT.value,
enums.CREnum.ADD.value,
enums.CREntitiesEnum.CR_FRM_STAKE.value,
form_code,
None,
new_instance
)
# ---------------------------------------------------------------------
# get attachments data
attach_id = models.ChangeRequestFormAttachments.objects.filter(
form_code=form_code)
# list existing id to variable
existing_attach_ids = [item.id for item in attach_id]
frm_attach = form_header_data['frm_attachments']
updated_attach_ids = []
# get all ids
for frm_att in frm_attach:
if "id" in frm_att:
updated_attach_ids.append(frm_att['id'])
# Delete any attachments not included in the request
for e in existing_attach_ids:
if e not in updated_attach_ids:
# get old data
old_instance = models.ChangeRequestFormAttachments.objects.filter(
pk=e).values()
old_instance = list(old_instance)
models.ChangeRequestFormAttachments.objects.filter(
pk=e).delete()
# save history in form approver
crhistory_save(
batchno,
enums.CREnum.SUBMIT.value,
enums.CREnum.DELETED.value,
enums.CREntitiesEnum.CR_FRM_ATTACHMENT.value,
form_code,
old_instance,
None
)
change_request.form_add_edit_delete(
form_data['frm_approvers'],
models.ChangeRequestFormApprovers,
enums.CREntitiesEnum.CR_FRM_APPROVER.value,
serializers.ChangeRequestFormApproversSerializer,
partial,
self,
form_code,
batchno,
enums.CREnum.SUBMIT.value
)
# Create or update attachments data that are in the request
for frm_att in frm_attach:
if "id" in frm_att:
# get old data
old_instance = models.ChangeRequestFormAttachments.objects.filter(
pk=frm_att['id']).values()
old_instance = list(old_instance)
models.ChangeRequestFormAttachments.objects.filter(
pk=frm_att['id']).update(
attachment_type=frm_att['attachment_type'],
attachment_name=frm_att['attachment_name'],
file_name=frm_att['file_name'],
description=frm_att['description'],
file_upload=frm_att['file_upload'],
uploaded_by=frm_att['uploaded_by'],
created=datetime.now())
# get new data
new_instance = models.ChangeRequestFormAttachments.objects.filter(
pk=frm_att['id']).values()
new_instance = list(new_instance)
# save history in form approver
crhistory_save(
batchno,
enums.CREnum.SUBMIT.value,
enums.CREnum.UPDATE.value,
enums.CREntitiesEnum.CR_FRM_ATTACHMENT.value,
form_code,
old_instance,
new_instance
)
else:
user_instance = models.User.objects.get(
code=frm_att['uploaded_by'])
cre = models.ChangeRequestFormAttachments.objects.create(
attachment_type=frm_att['attachment_type'],
attachment_name=frm_att['attachment_name'],
file_name=frm_att['file_name'],
description=frm_att['description'],
file_upload=frm_att['file_upload'],
uploaded_by=user_instance,
created=datetime.now(),
form_code=frm_id,
code='try')
code = number_generator(enums.GenerateCode.FORM_ATTACH.value, cre.id)
models.ChangeRequestFormAttachments.objects.filter(
id=cre.id).update(code=code)
# get new data
new_instance = models.ChangeRequestFormAttachments.objects.filter(
pk=cre.id).values()
new_instance = list(new_instance)
# save history in form approver
crhistory_save(
batchno,
enums.CREnum.SUBMIT.value,
enums.CREnum.ADD.value,
enums.CREntitiesEnum.CR_FRM_ATTACHMENT.value,
form_code,
None,
new_instance
)
# ---------------------------------------------------------------------
# get details data
detail_id = models.ChangeRequestFormDetails.objects.filter(
form_code=form_code)
# list existing id to variable
existing_detail_ids = [item.id for item in detail_id]
change_request.form_add_edit_delete(
form_data['frm_stakes'],
models.ChangeRequestFormStakeHolders,
enums.CREntitiesEnum.CR_FRM_STAKE.value,
serializers.ChangeRequestFormStakeHoldersSerializer,
partial,
self,
form_code,
batchno,
enums.CREnum.SUBMIT.value
)
frm_details = form_header_data['frm_details']
change_request.form_add_edit_delete(
form_data['frm_attachments'],
models.ChangeRequestFormAttachments,
enums.CREntitiesEnum.CR_FRM_ATTACHMENT.value,
serializers.ChangeRequestFormAttachmentsSerializer,
partial,
self,
form_code,
batchno,
enums.CREnum.SUBMIT.value
)
updated_detail_ids = []
# get all ids
for frm_detail in frm_details:
if "id" in frm_detail:
updated_detail_ids.append(frm_detail['id'])
# Delete any attachments not included in the request
for e in existing_detail_ids:
if e not in updated_detail_ids:
# get old data
old_instance = models.ChangeRequestFormDetails.objects.filter(
pk=e).values()
old_instance = list(old_instance)
models.ChangeRequestFormDetails.objects.filter(
pk=e).delete()
# save history in form approver
crhistory_save(
batchno,
enums.CREnum.SUBMIT.value,
enums.CREnum.DELETED.value,
enums.CREntitiesEnum.CR_FRM_DETAIL.value,
form_code,
old_instance,
None
)
change_request.form_add_edit_delete(
form_data['frm_details'],
models.ChangeRequestFormDetails,
enums.CREntitiesEnum.CR_FRM_DETAIL.value,
serializers.ChangeRequestFormDetailsSerializer,
partial,
self,
form_code,
batchno,
enums.CREnum.SUBMIT.value
)
# Create or update attachments data that are in the request
for frm_detail in frm_details:
if "id" in frm_detail:
# get old data
old_instance = models.ChangeRequestFormDetails.objects.filter(
pk=frm_detail['id']).values()
old_instance = list(old_instance)
models.ChangeRequestFormDetails.objects.filter(
pk=frm_detail['id']).update(
field_idx=frm_detail['field_idx'],
field_ref=frm_detail['field_ref'],
field_val=frm_detail['field_val'],
field_props=frm_detail['field_props'],
created=datetime.now())
# get new data
new_instance = models.ChangeRequestFormDetails.objects.filter(
pk=frm_detail['id']).values()
new_instance = list(new_instance)
# save history in form approver
crhistory_save(
batchno,
enums.CREnum.SUBMIT.value,
enums.CREnum.UPDATE.value,
enums.CREntitiesEnum.CR_FRM_DETAIL.value,
form_code,
old_instance,
new_instance
)
else:
cre = models.ChangeRequestFormDetails.objects.create(
field_idx=frm_detail['field_idx'],
field_ref=frm_detail['field_ref'],
field_val=frm_detail['field_val'],
field_props=frm_detail['field_props'],
created=datetime.now(),
code='try',
form_code=frm_id)
code = number_generator(enums.GenerateCode.FORM_DETAIL.value, cre.id)
models.ChangeRequestFormDetails.objects.filter(
id=cre.id).update(code=code)
# get new data
new_instance = models.ChangeRequestFormDetails.objects.filter(
pk=cre.id).values()
new_instance = list(new_instance)
# save history in form approver
crhistory_save(
batchno,
enums.CREnum.SUBMIT.value,
enums.CREnum.ADD.value,
enums.CREntitiesEnum.CR_FRM_DETAIL.value,
form_code,
None,
new_instance
)
serializer = self.get_serializer(frm_id)
serializer = self.get_serializer(instance)
message = status_message_response(
200, 'success',
'Change Request successfully submitted', serializer.data
'Change Request successfully submitted',
serializer.data
)
return Response(message, status=status.HTTP_200_OK)
......
......@@ -285,7 +285,15 @@ class ChangeRequestTemplatesViewset(meviewsets.ModelViewSet):
template_no
)
return Response(serializer.data)
serializer = self.get_serializer(instance)
message = status_message_response(
200, 'success',
'Change Request Template successfully updated',
serializer.data
)
return Response(message, status=status.HTTP_200_OK)
return Response(
"Unable to edit due to existing transaction",
......
......@@ -427,4 +427,24 @@ def crhistory_save(batch_no, main_action,
toValue=toValue
)
return True
\ No newline at end of file
return True
def crhistory_log_bulk_delete(queryset, entity, tbl, form_code,
batch_no, main_action):
try:
# print(entity)
for data in queryset:
test = model_to_dict(data)
crhistory_save(batch_no,
main_action,
enums.CREnum.DELETED.value,
entity,
form_code,
test,
'')
tbl.objects.filter(id=test['id']).delete()
return True
except IntegrityError as exc:
raise APIException(detail=exc)
\ No newline at end of file
......@@ -13,6 +13,14 @@ from django.http import Http404
from django.db.models import Q
from app.applicationlayer.cms.utils_cr import (
number_generator, crhistory_save, entity_log_bulk, crhistory_log_bulk_delete
)
from django.forms.models import model_to_dict
from app.entities import enums, models
from app.applicationlayer.utils import log_save, CustomPagination
from app.applicationlayer.cms.template import serializers
def list_by_user(user_id_number):
......@@ -242,3 +250,78 @@ def filter_awaiting(base_queryset,
pass
return return_queryset
def form_add_edit_delete(form_request_body,
queryset,
entity,
serializer_data,
partial,
self,
form_code,
batch_no,
main_action):
# delete ids not in request body
request_ids = [i['id'] for i in form_request_body if "id" in i]
delete_query = queryset.objects.filter(
form_code=form_code
).exclude(
id__in=request_ids
)
if delete_query.count() > 0:
crhistory_log_bulk_delete(delete_query,
entity,
queryset,
form_code,
batch_no,
main_action
)
# update or create
for i in form_request_body:
if "id" in i:
frm_instance = queryset.objects.get(
pk=i['id']
)
serializer = serializer_data(frm_instance,
data=i,
partial=partial)
serializer.is_valid(raise_exception=True)
old_instance = model_to_dict(frm_instance)
self.perform_update(serializer)
new_instance = serializer.data
crhistory_save(
batch_no,
main_action,
enums.CREnum.UPDATE.value,
entity,
form_code,
old_instance,
new_instance
)
else:
serializer = serializer_data(data=i)
serializer.is_valid(raise_exception=True)
self.perform_create(serializer)
new_instance = serializer.data
crhistory_save(
batch_no,
main_action,
enums.CREnum.ADD.value,
entity,
form_code,
None,
new_instance
)
return True
\ No newline at end of file
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