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

fix:change-status-warehouse
This commit is contained in:
hungdztrau123 2024-05-31 15:33:57 +07:00 committed by GitHub
commit a0a3426749
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 66 additions and 9 deletions

View File

@ -795,6 +795,8 @@ class DocumentSerializer(
"custom_fields", "custom_fields",
"remove_inbox_tags", "remove_inbox_tags",
) )
class SavedViewFilterRuleSerializer(serializers.ModelSerializer): class SavedViewFilterRuleSerializer(serializers.ModelSerializer):
@ -1796,11 +1798,33 @@ class WorkflowSerializer(serializers.ModelSerializer):
class WarehouseSerializer(MatchingModelSerializer, OwnedObjectSerializer): class WarehouseSerializer(MatchingModelSerializer, OwnedObjectSerializer):
document_count = serializers.SerializerMethodField()
class Meta: class Meta:
model = Warehouse model = Warehouse
fields = '__all__' fields = '__all__'
def get_document_count(self, obj):
return self.get_total_document_count(obj)
def get_total_document_count(self, warehouse):
if warehouse.type == Warehouse.BOXCASE:
return Document.objects.filter(warehouse=warehouse).count()
elif warehouse.type == Warehouse.SHELF:
child_warehouses = Warehouse.objects.filter(parent_warehouse=warehouse)
total_count = 0
for child_warehouse in child_warehouses:
total_count += self.get_total_document_count(child_warehouse)
return total_count
elif warehouse.type == Warehouse.WAREHOUSE:
child_warehouses = Warehouse.objects.filter(parent_warehouse=warehouse)
total_count = 0
for child_warehouse in child_warehouses:
total_count += self.get_total_document_count(child_warehouse)
return total_count
else:
return 0

View File

@ -1850,18 +1850,51 @@ class WarehouseViewSet(ModelViewSet, PermissionsAwareDocumentCountMixin):
parent_warehouse = Warehouse.objects.filter(id=parent_warehouse.id if parent_warehouse else 0).first() parent_warehouse = Warehouse.objects.filter(id=parent_warehouse.id if parent_warehouse else 0).first()
if serializer.validated_data.get("type") == Warehouse.WAREHOUSE and not parent_warehouse: if serializer.validated_data.get("type") == Warehouse.WAREHOUSE and not parent_warehouse:
serializer.save() warehouse = serializer.save()
warehouse.path = str(warehouse.id)
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 :
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.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 :
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.save()
else: else:
return Response({'status':400, return Response(status=status.HTTP_400_BAD_REQUEST)
'message':'misplaced'},status=status.HTTP_400_BAD_REQUEST)
return Response({'status':201, return Response(serializer.data,status=status.HTTP_201_CREATED)
'message':'created successfully',
'data':serializer.data},status=status.HTTP_201_CREATED) def update(self, request, *args, **kwargs):
partial = kwargs.pop('partial', False)
instance = self.get_object()
serializer = self.get_serializer(instance, data=request.data, partial=partial)
serializer.is_valid(raise_exception=True)
old_parent_warehouse = instance.parent_warehouse
self.perform_update(serializer)
if old_parent_warehouse != instance.parent_warehouse:
if instance.type == Warehouse.SHELF:
instance.path = f"{instance.parent_warehouse.path}/{instance.id}"
elif instance.type == Warehouse.BOXCASE:
instance.path = f"{instance.parent_warehouse.path}/{instance.id}"
else:
instance.path = str(instance.id)
instance.save()
boxcase_warehouses = Warehouse.objects.filter(type=Warehouse.BOXCASE, parent_warehouse=instance)
for boxcase_warehouse in boxcase_warehouses:
boxcase_warehouse.path = f"{instance.path}/{boxcase_warehouse.id}"
boxcase_warehouse.save()
return Response(serializer.data)
def destroy(self, request, pk, *args, **kwargs): def destroy(self, request, pk, *args, **kwargs):