Merge pull request #37 from tienthienhd/fixbug/delete-warehouse

fix:get-folder
This commit is contained in:
hungdztrau123 2024-06-11 16:25:57 +07:00 committed by GitHub
commit f3853d251f
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -1635,6 +1635,8 @@ class BulkEditObjectsView(PassUserMixin):
shelves.delete() shelves.delete()
warehouse.delete() warehouse.delete()
return Response(status=status.HTTP_204_NO_CONTENT)
elif operation == "delete" and object_type == "folders": elif operation == "delete" and object_type == "folders":
for folder_id in object_ids: for folder_id in object_ids:
folder = Folder.objects.get(id=int(folder_id)) folder = Folder.objects.get(id=int(folder_id))
@ -1651,7 +1653,7 @@ class BulkEditObjectsView(PassUserMixin):
delete_folder_hierarchy(folder) delete_folder_hierarchy(folder)
return Response(status=status.HTTP_200_OK) return Response(status=status.HTTP_204_NO_CONTENT)
elif operation == "delete": elif operation == "delete":
@ -1959,6 +1961,7 @@ class WarehouseViewSet(ModelViewSet, PermissionsAwareDocumentCountMixin):
def create(self, request, *args, **kwargs): def create(self, request, *args, **kwargs):
# try: # try:
currentUser = request.user
serializer = WarehouseSerializer(data=request.data) serializer = WarehouseSerializer(data=request.data)
parent_warehouse = None parent_warehouse = None
if serializer.is_valid(raise_exception=True): if serializer.is_valid(raise_exception=True):
@ -1969,14 +1972,17 @@ class WarehouseViewSet(ModelViewSet, PermissionsAwareDocumentCountMixin):
if serializer.validated_data.get("type") == Warehouse.WAREHOUSE and not parent_warehouse: if serializer.validated_data.get("type") == Warehouse.WAREHOUSE and not parent_warehouse:
warehouse = serializer.save() warehouse = serializer.save()
warehouse.path = str(warehouse.id) warehouse.path = str(warehouse.id)
warehouse.owner = currentUser
warehouse.save() warehouse.save()
elif serializer.validated_data.get("type", "") == Warehouse.SHELF and getattr(parent_warehouse, 'type', "") == Warehouse.WAREHOUSE : elif serializer.validated_data.get("type", "") == Warehouse.SHELF and getattr(parent_warehouse, 'type', "") == Warehouse.WAREHOUSE :
warehouse = serializer.save(type=Warehouse.SHELF, parent_warehouse=parent_warehouse) warehouse = serializer.save(type=Warehouse.SHELF, parent_warehouse=parent_warehouse)
warehouse.path = f"{parent_warehouse.path}/{warehouse.id}" warehouse.path = f"{parent_warehouse.path}/{warehouse.id}"
warehouse.owner = currentUser
warehouse.save() warehouse.save()
elif serializer.validated_data.get("type", "") == Warehouse.BOXCASE and getattr(parent_warehouse, 'type', "") == Warehouse.SHELF : elif serializer.validated_data.get("type", "") == Warehouse.BOXCASE and getattr(parent_warehouse, 'type', "") == Warehouse.SHELF :
warehouse = serializer.save(type=Warehouse.BOXCASE, parent_warehouse=parent_warehouse) warehouse = serializer.save(type=Warehouse.BOXCASE, parent_warehouse=parent_warehouse)
warehouse.path = f"{parent_warehouse.path}/{warehouse.id}" warehouse.path = f"{parent_warehouse.path}/{warehouse.id}"
warehouse.owner = currentUser
warehouse.save() warehouse.save()
else: else:
return Response(status=status.HTTP_400_BAD_REQUEST) return Response(status=status.HTTP_400_BAD_REQUEST)
@ -2089,17 +2095,39 @@ class FolderViewSet(ModelViewSet, PermissionsAwareDocumentCountMixin):
ordering_fields = ("name", "path", "parent_folder", "document_count") ordering_fields = ("name", "path", "parent_folder", "document_count")
def getFolderDoc(self, fol): def getFolderDoc(self, request):
currentUser = request.user
documents = list(Document.objects.filter(folder=fol).order_by("-created").values()) documents = list(Document.objects.filter(folder=None, owner=currentUser).order_by("-created").values())
folders = list(Folder.objects.filter(parent_folder=fol).order_by("name").values()) folders = list(Folder.objects.filter(parent_folder=None, owner=currentUser).order_by("name").values())
return { return {
"documents": documents, "documents": documents,
"folders": folders, "folders": folders,
} }
@action(methods=["get"], detail=False)
def folders_documents(self, request):
if request.method == "GET":
try:
return Response(self.getFolderDoc(request))
except Exception as e:
logger.warning(f"An error occurred retrieving folders: {e!s}")
return Response(
{"error": "Error retrieving folders, check logs for more detail."},
)
def getFolderDocById(self, fol):
documents = list(Document.objects.filter(folder=fol).order_by("-created").values())
child_folders = list(Folder.objects.filter(parent_folder=fol).order_by("name").values())
return {
"documents": documents,
"child_folders": child_folders,
}
@action(methods=["get"], detail=True) @action(methods=["get"], detail=True)
def folders_documents(self, request, pk=None): def folders_documents_by_id(self, request, pk=None):
currentUser = request.user currentUser = request.user
try: try:
fol = Folder.objects.get(pk=pk) fol = Folder.objects.get(pk=pk)
@ -2114,7 +2142,7 @@ class FolderViewSet(ModelViewSet, PermissionsAwareDocumentCountMixin):
if request.method == "GET": if request.method == "GET":
try: try:
return Response(self.getFolderDoc(fol)) return Response(self.getFolderDocById(fol))
except Exception as e: except Exception as e:
logger.warning(f"An error occurred retrieving folders: {e!s}") logger.warning(f"An error occurred retrieving folders: {e!s}")
return Response( return Response(
@ -2124,6 +2152,7 @@ class FolderViewSet(ModelViewSet, PermissionsAwareDocumentCountMixin):
def create(self, request, *args, **kwargs): def create(self, request, *args, **kwargs):
# try: # try:
currentUser = request.user
serializer = FolderSerializer(data=request.data) serializer = FolderSerializer(data=request.data)
parent_folder = None parent_folder = None
if serializer.is_valid(raise_exception=True): if serializer.is_valid(raise_exception=True):
@ -2134,10 +2163,12 @@ class FolderViewSet(ModelViewSet, PermissionsAwareDocumentCountMixin):
if parent_folder == None: if parent_folder == None:
folder = serializer.save() folder = serializer.save()
folder.path = str(folder.id) folder.path = str(folder.id)
folder.owner = currentUser
folder.save() folder.save()
elif parent_folder: elif parent_folder:
folder = serializer.save(parent_folder=parent_folder) folder = serializer.save(parent_folder=parent_folder)
folder.path = f"{parent_folder.path}/{folder.id}" folder.path = f"{parent_folder.path}/{folder.id}"
folder.owner = currentUser
folder.save() folder.save()
else: else:
return Response(status=status.HTTP_400_BAD_REQUEST) return Response(status=status.HTTP_400_BAD_REQUEST)
@ -2147,6 +2178,17 @@ class FolderViewSet(ModelViewSet, PermissionsAwareDocumentCountMixin):
def update(self, request, *args, **kwargs): def update(self, request, *args, **kwargs):
partial = kwargs.pop('partial', False) partial = kwargs.pop('partial', False)
instance = self.get_object() instance = self.get_object()
if 'parent_folder' in request.data and int(request.data['parent_folder']) == instance.id:
return Response(status=status.HTTP_400_BAD_REQUEST)
if 'parent_folder' in request.data :
new_parent_folder = Folder.objects.get(id=int(request.data['parent_folder']))
if new_parent_folder.path.startswith(instance.path):
return Response(status=status.HTTP_400_BAD_REQUEST, data={'error': 'Cannot move a folder into one of its child folders.'})
else:
request.data['parent_folder'] = None
serializer = self.get_serializer(instance, data=request.data, partial=partial) serializer = self.get_serializer(instance, data=request.data, partial=partial)
serializer.is_valid(raise_exception=True) serializer.is_valid(raise_exception=True)
@ -2157,6 +2199,7 @@ class FolderViewSet(ModelViewSet, PermissionsAwareDocumentCountMixin):
if old_parent_folder != instance.parent_folder: if old_parent_folder != instance.parent_folder:
if instance.parent_folder: if instance.parent_folder:
instance.path = f"{instance.parent_folder.path}/{instance.id}" instance.path = f"{instance.parent_folder.path}/{instance.id}"
else: else:
instance.path = f"{instance.id}" instance.path = f"{instance.id}"
instance.save() instance.save()
@ -2168,6 +2211,17 @@ class FolderViewSet(ModelViewSet, PermissionsAwareDocumentCountMixin):
def partial_update(self, request, *args, **kwargs): def partial_update(self, request, *args, **kwargs):
partial = kwargs.pop('partial', True) partial = kwargs.pop('partial', True)
instance = self.get_object() instance = self.get_object()
if 'parent_folder' in request.data and int(request.data['parent_folder']) == instance.id:
return Response(status=status.HTTP_400_BAD_REQUEST)
if 'parent_folder' in request.data :
new_parent_folder = Folder.objects.get(id=int(request.data['parent_folder']))
if new_parent_folder.path.startswith(instance.path):
return Response(status=status.HTTP_400_BAD_REQUEST, data={'error': 'Cannot move a folder into one of its child folders.'})
else:
request.data['parent_folder'] = None
serializer = self.get_serializer(instance, data=request.data, partial=partial) serializer = self.get_serializer(instance, data=request.data, partial=partial)
serializer.is_valid(raise_exception=True) serializer.is_valid(raise_exception=True)
@ -2212,5 +2266,5 @@ class FolderViewSet(ModelViewSet, PermissionsAwareDocumentCountMixin):
delete_folder_hierarchy(folder) delete_folder_hierarchy(folder)
return Response(status=status.HTTP_200_OK) return Response(status=status.HTTP_204_NO_CONTENT)