Commit e1f9f23c authored by John Red Medrano's avatar John Red Medrano

Merge branch 'red-develop' into 'product-dev'

{dev bugfix} added transation.atomic with savepoint_rollback on batchupload

See merge request rms/Backend/api-main-service!973
parents 519a43c7 b42bd26b
...@@ -40,6 +40,7 @@ from reportlab.lib.styles import getSampleStyleSheet, ParagraphStyle ...@@ -40,6 +40,7 @@ from reportlab.lib.styles import getSampleStyleSheet, ParagraphStyle
from reportlab.lib.pagesizes import A4 from reportlab.lib.pagesizes import A4
from reportlab.lib.enums import TA_JUSTIFY, TA_RIGHT, TA_LEFT, TA_CENTER from reportlab.lib.enums import TA_JUSTIFY, TA_RIGHT, TA_LEFT, TA_CENTER
from reportlab.lib.colors import red from reportlab.lib.colors import red
from django.db import transaction
config = configparser.ConfigParser() config = configparser.ConfigParser()
...@@ -274,9 +275,11 @@ class BatchUploadViewSet(viewsets.ModelViewSet): ...@@ -274,9 +275,11 @@ class BatchUploadViewSet(viewsets.ModelViewSet):
return self.get_paginated_response(message) return self.get_paginated_response(message)
@transaction.atomic
def create(self, request, **kwargs): def create(self, request, **kwargs):
csv_file = request.FILES['file'] csv_file = request.FILES['file']
extension_file = str(csv_file).split('.')[1] extension_file = str(csv_file).split('.')[1]
sp1 = transaction.savepoint()
if extension_file.lower() != 'csv': if extension_file.lower() != 'csv':
return Response( return Response(
...@@ -322,7 +325,7 @@ class BatchUploadViewSet(viewsets.ModelViewSet): ...@@ -322,7 +325,7 @@ class BatchUploadViewSet(viewsets.ModelViewSet):
Q(company=user_company) Q(company=user_company)
) )
if not request_department: if not request_department:
etl2.delete() # etl2.delete()
return Response( return Response(
{"message": company_error}, {"message": company_error},
status=status.HTTP_400_BAD_REQUEST status=status.HTTP_400_BAD_REQUEST
...@@ -330,7 +333,7 @@ class BatchUploadViewSet(viewsets.ModelViewSet): ...@@ -330,7 +333,7 @@ class BatchUploadViewSet(viewsets.ModelViewSet):
elif request.user.user_type == enums_department: elif request.user.user_type == enums_department:
if keys['Department_Code'] != request.user.department.code: if keys['Department_Code'] != request.user.department.code:
etl2.delete() # etl2.delete()
return Response( return Response(
{"message": department_error}, {"message": department_error},
# {"message": str(e)}, # {"message": str(e)},
...@@ -341,14 +344,28 @@ class BatchUploadViewSet(viewsets.ModelViewSet): ...@@ -341,14 +344,28 @@ class BatchUploadViewSet(viewsets.ModelViewSet):
user_department = Department.objects.filter( user_department = Department.objects.filter(
name__icontains=keys['Department_Code'] name__icontains=keys['Department_Code']
) )
default_app = Application.objects.filter( try:
excel_code=keys['Default_app'] default_app = Application.objects.filter(
).first() excel_code=keys['Default_app']
).first()
except Exception as e:
transaction.savepoint_rollback(sp1)
return Response(
{"message": f"Invalid Default Application at row {data + 2}"},
status=status.HTTP_400_BAD_REQUEST
)
dept_code = Department.objects.get( try:
code=keys['Department_Code'] dept_code = Department.objects.get(
) code=keys['Department_Code']
)
except Exception as e:
transaction.savepoint_rollback(sp1)
return Response(
{"message": f"Invalid Department Code at row {data + 2}"},
status=status.HTTP_400_BAD_REQUEST
)
users = { users = {
"username": keys['Username'], "username": keys['Username'],
...@@ -425,37 +442,42 @@ class BatchUploadViewSet(viewsets.ModelViewSet): ...@@ -425,37 +442,42 @@ class BatchUploadViewSet(viewsets.ModelViewSet):
AllowedCompany.objects.create(**privilege_object) AllowedCompany.objects.create(**privilege_object)
except IntegrityError as e: except IntegrityError as e:
etl2.delete() # etl2.delete()
transaction.savepoint_rollback(sp1)
return Response( return Response(
{"message": f"Duplicate user privilege at row {data + 2}"}, {"message": f"Duplicate user privilege at row {data + 2}"},
status=status.HTTP_400_BAD_REQUEST status=status.HTTP_400_BAD_REQUEST
) )
except ObjectDoesNotExist as e: except ObjectDoesNotExist as e:
etl2.delete() # etl2.delete()
transaction.savepoint_rollback(sp1)
return Response( return Response(
{"message": f"Department Does not Exist at Privilege row {data + 2}"}, {"message": f"Department Does not Exist at Privilege row {data + 2}"},
status=status.HTTP_400_BAD_REQUEST status=status.HTTP_400_BAD_REQUEST
) )
except IntegrityError as e: except IntegrityError as e:
etl2.delete() # etl2.delete()
transaction.savepoint_rollback(sp1)
return Response( return Response(
{"message": f"Record already exist at row {data + 2}"}, {"message": f"Record already exist at row {data + 2}"},
status=status.HTTP_400_BAD_REQUEST status=status.HTTP_400_BAD_REQUEST
) )
except KeyError as e: except KeyError as e:
etl2.delete() # etl2.delete()
transaction.savepoint_rollback(sp1)
return Response( return Response(
{"message": f"Missing column {e.args[0]}"}, {"message": f"Missing column {e.args[0]}"},
status=status.HTTP_400_BAD_REQUEST status=status.HTTP_400_BAD_REQUEST
) )
except ObjectDoesNotExist as e: except ObjectDoesNotExist as e:
etl2.delete() # etl2.delete()
transaction.savepoint_rollback(sp1)
return Response( return Response(
{"message": f"Department Does not Exist at row {data + 2}"}, {"message": f"Department Does not Exist at rowaaaa {data + 2}"},
status=status.HTTP_400_BAD_REQUEST status=status.HTTP_400_BAD_REQUEST
) )
......
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