from rest_framework import serializers from apps.project.models import Project as ProjectModel, ProjectImage as ProjectImageModel from apps.emtiyazat.models import Emtiyazat as EmtiyazatModel from apps.cuser.models import CUser as CUserModel from apps.op_panel.selector import get_project_by_id from rest_framework.views import APIView from rest_framework.response import Response from rest_framework.permissions import IsAuthenticated from utils.tools.inline_serializer import inline_serializer from apps.emtiyazat.services import add_project_emtiyaz from apps.op_panel.services import update_mojri_status from rest_framework import status class UpdateMojriStatusApiview(APIView): permission_classes = (IsAuthenticated,) class InputSerializer(serializers.Serializer): mojri_status = serializers.CharField() def patch(self, request, id: int): serializer = self.InputSerializer(data=request.data) serializer.is_valid(raise_exception=True) mojri_status = serializer.validated_data['mojri_status'] update_mojri_status(id, mojri_status) return Response({'id': id}, status=status.HTTP_200_OK) class RetrieveProjectApiview(APIView): permission_classes = (IsAuthenticated, ) def get(self, request, id: int): class OutputSerializer(serializers.ModelSerializer): cuser = inline_serializer(many=False, fields={ 'id': serializers.IntegerField(), 'name_family': serializers.CharField(), 'mobile': serializers.IntegerField() }) project_image = inline_serializer(many=True, fields={ 'id': serializers.IntegerField(), 'image': serializers.ImageField(), }) class Meta: model = ProjectModel fields = '__all__' project = get_project_by_id(id) output = OutputSerializer(project) return Response(output.data, status=status.HTTP_200_OK) class RetrieveMojri(APIView): permission_classes = (IsAuthenticated,) def get(self, request, id: int): class OutputSerializer(serializers.ModelSerializer): user_profile = inline_serializer(many=False, fields={ 'codemeli': serializers.IntegerField(), 'city': inline_serializer(many=False, fields={ 'id': serializers.IntegerField(), 'name': serializers.CharField(), 'ostan': inline_serializer(many=False, fields={ 'id': serializers.IntegerField(), 'name': serializers.CharField(), }) }), 'address': serializers.CharField(), 'codeposti': serializers.IntegerField(), 'ax_mojri': serializers.CharField(), 'ax_meli': serializers.CharField(), 'ax_fani': serializers.CharField(), 'ax_sayer': serializers.CharField(), }) class Meta: model = CUserModel fields = ('id', 'mojri_status', 'name_family', 'mobile', 'uuid', 'user_profile') mojri = CUserModel.objects.get(id=id) output = OutputSerializer(mojri) return Response(output.data, status=status.HTTP_200_OK) class AddEmtiyazProjectApiview(APIView): permission_classes = (IsAuthenticated,) class InputSerializer(serializers.Serializer): credit = serializers.IntegerField(required=True) def post(self, request, id: int): serializer = self.InputSerializer(data=request.data) serializer.is_valid(raise_exception=True) op_user = request.user emtiyaz = add_project_emtiyaz(**serializer.validated_data, project_id=id, op_user=op_user) return Response({'success': emtiyaz.credit}, status=status.HTTP_201_CREATED)