From 9be6825a191eceb03db190ad02ed269b5feb7329 Mon Sep 17 00:00:00 2001 From: behruz-dev Date: Wed, 1 Oct 2025 13:40:23 +0500 Subject: [PATCH 1/6] add: add new field for list api --- core/apps/finance/serializers/cash_transaction.py | 11 ++++++++++- core/apps/finance/views/cash_transaction.py | 2 +- core/apps/wherehouse/serializers/wherehouse.py | 11 ++++++++++- core/apps/wherehouse/views/wherehouse.py | 2 +- 4 files changed, 22 insertions(+), 4 deletions(-) diff --git a/core/apps/finance/serializers/cash_transaction.py b/core/apps/finance/serializers/cash_transaction.py index 09aa831..b36f899 100644 --- a/core/apps/finance/serializers/cash_transaction.py +++ b/core/apps/finance/serializers/cash_transaction.py @@ -9,6 +9,14 @@ from core.apps.finance.serializers.payment_type import PaymentTypeSerializer from core.apps.projects.models import Project +class ProjectSerializer(serializers.ModelSerializer): + class Meta: + model = Project + fields = [ + 'id', 'name', 'start_date', 'end_data', 'status' + ] + + class CashTransactionEmployeeListSerializer(serializers.ModelSerializer): class Meta: model = User @@ -20,13 +28,14 @@ class CashTransactionEmployeeListSerializer(serializers.ModelSerializer): class CashTransactionListSerializer(serializers.ModelSerializer): payment_type = PaymentTypeSerializer(many=True) employees = CashTransactionEmployeeListSerializer(many=True) + projects = ProjectSerializer(many=True) class Meta: model = CashTransaction fields = [ 'id', 'name', 'payment_type', 'employees', 'status', 'total_balance_usd', 'income_balance_usd', 'expence_balance_usd', 'total_balance_uzs', - 'income_balance_uzs', 'expence_balance_uzs' + 'income_balance_uzs', 'expence_balance_uzs', 'projects' ] diff --git a/core/apps/finance/views/cash_transaction.py b/core/apps/finance/views/cash_transaction.py index bf86ea1..2100bbc 100644 --- a/core/apps/finance/views/cash_transaction.py +++ b/core/apps/finance/views/cash_transaction.py @@ -14,7 +14,7 @@ class CashTransactionListApiView(generics.ListAPIView): permission_classes = [HasRolePermission] required_permissions = [] serializer_class = serializers.CashTransactionListSerializer - queryset = CashTransaction.objects.prefetch_related('employees', 'payment_type') + queryset = CashTransaction.objects.prefetch_related('employees', 'payment_type', 'projects') pagination_class = CustomPageNumberPagination diff --git a/core/apps/wherehouse/serializers/wherehouse.py b/core/apps/wherehouse/serializers/wherehouse.py index b62665b..cfdc023 100644 --- a/core/apps/wherehouse/serializers/wherehouse.py +++ b/core/apps/wherehouse/serializers/wherehouse.py @@ -8,13 +8,22 @@ from core.apps.accounts.serializers.user import UserListSerializer from core.apps.projects.models.project import Project +class ProjectSerializer(serializers.ModelSerializer): + class Meta: + model = Project + fields = [ + 'id', 'name', 'start_date', 'end_data', 'status' + ] + + class WhereHouseListSerializer(serializers.ModelSerializer): users = UserListSerializer(many=True) + projects = ProjectSerializer(many=True) class Meta: model = WhereHouse fields = [ - 'id', 'name', 'address', 'users' + 'id', 'name', 'address', 'users', 'projects' ] diff --git a/core/apps/wherehouse/views/wherehouse.py b/core/apps/wherehouse/views/wherehouse.py index 59fc174..7671fa8 100644 --- a/core/apps/wherehouse/views/wherehouse.py +++ b/core/apps/wherehouse/views/wherehouse.py @@ -10,7 +10,7 @@ from core.apps.accounts.permissions.permissions import HasRolePermission class WhereHouseListApiView(generics.GenericAPIView): serializer_class = serializers.WhereHouseListSerializer - queryset = WhereHouse.objects.prefetch_related('users') + queryset = WhereHouse.objects.prefetch_related('users', 'projects') permission_classes = [HasRolePermission] def get(self, request): From 532f54b730233703d28bcf8d71c18b96f55cb400 Mon Sep 17 00:00:00 2001 From: behruz-dev Date: Wed, 1 Oct 2025 14:15:44 +0500 Subject: [PATCH 2/6] fix: fix 500 server error --- core/apps/finance/serializers/cash_transaction.py | 2 +- core/apps/wherehouse/serializers/wherehouse.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/core/apps/finance/serializers/cash_transaction.py b/core/apps/finance/serializers/cash_transaction.py index b36f899..dff085f 100644 --- a/core/apps/finance/serializers/cash_transaction.py +++ b/core/apps/finance/serializers/cash_transaction.py @@ -13,7 +13,7 @@ class ProjectSerializer(serializers.ModelSerializer): class Meta: model = Project fields = [ - 'id', 'name', 'start_date', 'end_data', 'status' + 'id', 'name', 'start_date', 'end_date', 'status' ] diff --git a/core/apps/wherehouse/serializers/wherehouse.py b/core/apps/wherehouse/serializers/wherehouse.py index cfdc023..55c3e06 100644 --- a/core/apps/wherehouse/serializers/wherehouse.py +++ b/core/apps/wherehouse/serializers/wherehouse.py @@ -12,7 +12,7 @@ class ProjectSerializer(serializers.ModelSerializer): class Meta: model = Project fields = [ - 'id', 'name', 'start_date', 'end_data', 'status' + 'id', 'name', 'start_date', 'end_date', 'status' ] From 2120e6ac98f9cbd3b498348ef4172d15fac4dbe4 Mon Sep 17 00:00:00 2001 From: behruz-dev Date: Wed, 1 Oct 2025 15:01:46 +0500 Subject: [PATCH 3/6] add: add project_ids field for warehouse and cash_transaction update api --- .../finance/serializers/cash_transaction.py | 23 ++++++++++++++++++- .../apps/wherehouse/serializers/wherehouse.py | 11 ++++++++- 2 files changed, 32 insertions(+), 2 deletions(-) diff --git a/core/apps/finance/serializers/cash_transaction.py b/core/apps/finance/serializers/cash_transaction.py index dff085f..8f2b20d 100644 --- a/core/apps/finance/serializers/cash_transaction.py +++ b/core/apps/finance/serializers/cash_transaction.py @@ -40,12 +40,33 @@ class CashTransactionListSerializer(serializers.ModelSerializer): class CashTransactionUpdateSerializer(serializers.ModelSerializer): + project_ids = serializers.ListField(child=serializers.UUIDField(required=False), required=False) + class Meta: model = CashTransaction fields = [ - 'name', 'payment_type', 'employees', 'status', 'folder', + 'name', 'payment_type', 'employees', 'status', 'folder', 'project_ids' ] + def update(self, instance, validated_data): + instance.name = validated_data.get('name', instance.name) + instance.payment_type = validated_data.get('payment_type', instance.payment_type) + instance.status = validated_data.get('status', instance.status) + instance.folder = validated_data.get('folder', instance.folder) # `folter` o‘rniga `folder` + + employees = validated_data.get('employees', None) + if employees is not None: + instance.employees.set(employees) + + project_ids = validated_data.pop('project_ids', []) + if project_ids: + projects = Project.objects.filter(id__in=project_ids) + instance.projects.set(projects) + + instance.save() + return instance + + class CashTransactionCreateSerializer(serializers.Serializer): payment_type_ids = serializers.ListSerializer(child=serializers.UUIDField(), write_only=True) diff --git a/core/apps/wherehouse/serializers/wherehouse.py b/core/apps/wherehouse/serializers/wherehouse.py index 55c3e06..d4a7d83 100644 --- a/core/apps/wherehouse/serializers/wherehouse.py +++ b/core/apps/wherehouse/serializers/wherehouse.py @@ -14,6 +14,7 @@ class ProjectSerializer(serializers.ModelSerializer): fields = [ 'id', 'name', 'start_date', 'end_date', 'status' ] + ref_name = 'WareHouseProjectSerializer' class WhereHouseListSerializer(serializers.ModelSerializer): @@ -63,10 +64,12 @@ class WhereHouseCreateSerializer(serializers.Serializer): class WhereHouseUpdateSerializer(serializers.ModelSerializer): + project_ids = serializers.ListField(child=serializers.UUIDField(required=False), required=False) + class Meta: model = WhereHouse fields = [ - 'name', 'address', 'users' + 'name', 'address', 'users', 'project_ids' ] def update(self, instance, validated_data): @@ -77,5 +80,11 @@ class WhereHouseUpdateSerializer(serializers.ModelSerializer): if users is not None: instance.users.clear() instance.users.set(users) + + project_ids = validated_data.pop('project_ids', []) + if project_ids: + projects = Project.objects.filter(id__in=project_ids) + instance.projects.set(projects) + instance.save() return instance From 64a5c55ab6c20d548d895baf1070e5831a656e8d Mon Sep 17 00:00:00 2001 From: behruz-dev Date: Wed, 1 Oct 2025 15:06:55 +0500 Subject: [PATCH 4/6] fix: fix error --- core/apps/finance/serializers/cash_transaction.py | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/core/apps/finance/serializers/cash_transaction.py b/core/apps/finance/serializers/cash_transaction.py index 8f2b20d..cde8aca 100644 --- a/core/apps/finance/serializers/cash_transaction.py +++ b/core/apps/finance/serializers/cash_transaction.py @@ -50,9 +50,12 @@ class CashTransactionUpdateSerializer(serializers.ModelSerializer): def update(self, instance, validated_data): instance.name = validated_data.get('name', instance.name) - instance.payment_type = validated_data.get('payment_type', instance.payment_type) instance.status = validated_data.get('status', instance.status) - instance.folder = validated_data.get('folder', instance.folder) # `folter` o‘rniga `folder` + instance.folder = validated_data.get('folder', instance.folder) + + payment_types = validated_data.get('payment_type', None) + if payment_types is not None: + instance.payment_type.set(payment_types) employees = validated_data.get('employees', None) if employees is not None: From 9193e0f9dc63bb53e7abf840db2f9ea348ff7f87 Mon Sep 17 00:00:00 2001 From: behruz-dev Date: Wed, 1 Oct 2025 15:25:02 +0500 Subject: [PATCH 5/6] fix --- core/apps/finance/serializers/cash_transaction.py | 1 + 1 file changed, 1 insertion(+) diff --git a/core/apps/finance/serializers/cash_transaction.py b/core/apps/finance/serializers/cash_transaction.py index cde8aca..6164bbb 100644 --- a/core/apps/finance/serializers/cash_transaction.py +++ b/core/apps/finance/serializers/cash_transaction.py @@ -64,6 +64,7 @@ class CashTransactionUpdateSerializer(serializers.ModelSerializer): project_ids = validated_data.pop('project_ids', []) if project_ids: projects = Project.objects.filter(id__in=project_ids) + instance.projects.clear() instance.projects.set(projects) instance.save() From 507bb0bc126128711bb6b9db11b14841e9bc737f Mon Sep 17 00:00:00 2001 From: behruz-dev Date: Wed, 1 Oct 2025 15:31:26 +0500 Subject: [PATCH 6/6] fxi --- core/apps/finance/serializers/cash_transaction.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/apps/finance/serializers/cash_transaction.py b/core/apps/finance/serializers/cash_transaction.py index 6164bbb..8d1abee 100644 --- a/core/apps/finance/serializers/cash_transaction.py +++ b/core/apps/finance/serializers/cash_transaction.py @@ -65,7 +65,7 @@ class CashTransactionUpdateSerializer(serializers.ModelSerializer): if project_ids: projects = Project.objects.filter(id__in=project_ids) instance.projects.clear() - instance.projects.set(projects) + instance.projects.add(*projects) instance.save() return instance