diff --git a/src/documents/views.py b/src/documents/views.py index ff61c4639..c598cbd5d 100644 --- a/src/documents/views.py +++ b/src/documents/views.py @@ -1634,6 +1634,8 @@ class BulkEditObjectsView(PassUserMixin): boxcases.delete() shelves.delete() warehouse.delete() + + return Response(status=status.HTTP_204_NO_CONTENT) elif operation == "delete" and object_type == "folders": for folder_id in object_ids: @@ -1651,7 +1653,7 @@ class BulkEditObjectsView(PassUserMixin): delete_folder_hierarchy(folder) - return Response(status=status.HTTP_200_OK) + return Response(status=status.HTTP_204_NO_CONTENT) elif operation == "delete": @@ -1958,7 +1960,8 @@ class WarehouseViewSet(ModelViewSet, PermissionsAwareDocumentCountMixin): def create(self, request, *args, **kwargs): - # try: + # try: + currentUser = request.user serializer = WarehouseSerializer(data=request.data) parent_warehouse = None 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: warehouse = serializer.save() warehouse.path = str(warehouse.id) + warehouse.owner = currentUser warehouse.save() 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.path = f"{parent_warehouse.path}/{warehouse.id}" + warehouse.owner = currentUser warehouse.save() 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.path = f"{parent_warehouse.path}/{warehouse.id}" + warehouse.owner = currentUser warehouse.save() else: return Response(status=status.HTTP_400_BAD_REQUEST) @@ -2087,19 +2093,41 @@ class FolderViewSet(ModelViewSet, PermissionsAwareDocumentCountMixin): ) filterset_class = FolderFilterSet ordering_fields = ("name", "path", "parent_folder", "document_count") - - - def getFolderDoc(self, fol): + - documents = list(Document.objects.filter(folder=fol).order_by("-created").values()) - folders = list(Folder.objects.filter(parent_folder=fol).order_by("name").values()) + def getFolderDoc(self, request): + currentUser = request.user + documents = list(Document.objects.filter(folder=None, owner=currentUser).order_by("-created").values()) + folders = list(Folder.objects.filter(parent_folder=None, owner=currentUser).order_by("name").values()) return { "documents": documents, "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) - def folders_documents(self, request, pk=None): + def folders_documents_by_id(self, request, pk=None): currentUser = request.user try: fol = Folder.objects.get(pk=pk) @@ -2114,7 +2142,7 @@ class FolderViewSet(ModelViewSet, PermissionsAwareDocumentCountMixin): if request.method == "GET": try: - return Response(self.getFolderDoc(fol)) + return Response(self.getFolderDocById(fol)) except Exception as e: logger.warning(f"An error occurred retrieving folders: {e!s}") return Response( @@ -2123,7 +2151,8 @@ class FolderViewSet(ModelViewSet, PermissionsAwareDocumentCountMixin): def create(self, request, *args, **kwargs): - # try: + # try: + currentUser = request.user serializer = FolderSerializer(data=request.data) parent_folder = None if serializer.is_valid(raise_exception=True): @@ -2134,10 +2163,12 @@ class FolderViewSet(ModelViewSet, PermissionsAwareDocumentCountMixin): if parent_folder == None: folder = serializer.save() folder.path = str(folder.id) + folder.owner = currentUser folder.save() elif parent_folder: folder = serializer.save(parent_folder=parent_folder) folder.path = f"{parent_folder.path}/{folder.id}" + folder.owner = currentUser folder.save() else: return Response(status=status.HTTP_400_BAD_REQUEST) @@ -2147,6 +2178,17 @@ class FolderViewSet(ModelViewSet, PermissionsAwareDocumentCountMixin): def update(self, request, *args, **kwargs): partial = kwargs.pop('partial', False) 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.is_valid(raise_exception=True) @@ -2157,17 +2199,29 @@ class FolderViewSet(ModelViewSet, PermissionsAwareDocumentCountMixin): if old_parent_folder != instance.parent_folder: if instance.parent_folder: instance.path = f"{instance.parent_folder.path}/{instance.id}" + else: instance.path = f"{instance.id}" instance.save() self.update_child_folder_paths(instance) - + return Response(serializer.data) def partial_update(self, request, *args, **kwargs): partial = kwargs.pop('partial', True) 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.is_valid(raise_exception=True) @@ -2212,5 +2266,5 @@ class FolderViewSet(ModelViewSet, PermissionsAwareDocumentCountMixin): delete_folder_hierarchy(folder) - return Response(status=status.HTTP_200_OK) + return Response(status=status.HTTP_204_NO_CONTENT)