diff --git a/core/apps/finance/serializers/cash_transaction.py b/core/apps/finance/serializers/cash_transaction.py index 09aa831..8d1abee 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_date', 'status' + ] + + class CashTransactionEmployeeListSerializer(serializers.ModelSerializer): class Meta: model = User @@ -20,23 +28,49 @@ 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' ] 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.status = validated_data.get('status', instance.status) + 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: + instance.employees.set(employees) + + project_ids = validated_data.pop('project_ids', []) + if project_ids: + projects = Project.objects.filter(id__in=project_ids) + instance.projects.clear() + instance.projects.add(*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/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..d4a7d83 100644 --- a/core/apps/wherehouse/serializers/wherehouse.py +++ b/core/apps/wherehouse/serializers/wherehouse.py @@ -8,13 +8,23 @@ 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_date', 'status' + ] + ref_name = 'WareHouseProjectSerializer' + + 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' ] @@ -54,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): @@ -68,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 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):