from django.shortcuts import render from rest_framework.views import APIView from apps.appsetting.models import City as CityModel from rest_framework import serializers from rest_framework.response import Response from rest_framework.permissions import IsAuthenticated from apps.project.models import Project as ProjectModel, ProjectImage as ProjectImageModel from apps.appsetting.models import City as CityModel from apps.cuser.models import CUser as CUserModel from apps.project.services import create_project, update_seller_project, update_seller_va_send_message from apps.project.selector import list_project, get_project, op_list_project from apps.projectcode.selector import project_code_validation, update_project_code_used from apps.appsetting.selector import get_city_list from rest_framework import status # Create your views here. class CityListApiView(APIView): permission_classes = (IsAuthenticated,) class OutputSerializer(serializers.ModelSerializer): class Meta: model = CityModel fields = '__all__' def get(self, request): cities = get_city_list() output = self.OutputSerializer(cities, many=True) return Response(data=output.data) # create project with project images class CreateProjectApiview(APIView): permission_classes = (IsAuthenticated,) class InputSerializer(serializers.Serializer): city = serializers.IntegerField(required=True) address = serializers.CharField(max_length=200, required=True) factor_price = serializers.IntegerField(required=True) zirbana = serializers.IntegerField(required=True) tabaghat = serializers.IntegerField(required=True) vahed = serializers.IntegerField(required=True) project_images = serializers.ListField(child=serializers.ImageField(), required=True) def post(self, request): serializer = self.InputSerializer(data=request.data) serializer.is_valid(raise_exception=True) project_obj = create_project(cuser=request.user, **serializer.validated_data) return Response({'project_id': f'{str(project_obj.id)}'}, status=status.HTTP_201_CREATED) class ListProjectApiview(APIView): permission_classes = (IsAuthenticated,) class OutputSerializer(serializers.ModelSerializer): class Meta: model = ProjectModel fields = '__all__' def get(self, request): projects = list_project(user=request.user) output = self.OutputSerializer(projects, many=True) return Response(data=output.data, status=status.HTTP_200_OK) class RetrieveProjectApiview(APIView): permission_classes = (IsAuthenticated,) class OutputSerializer(serializers.ModelSerializer): class ProjectImageSerializer(serializers.ModelSerializer): class Meta: model = ProjectImageModel fields = '__all__' project_image = ProjectImageSerializer(many=True) class Meta: model = ProjectModel fields = '__all__' def get(self, request, project_id): project = get_project(project_id=project_id) output = self.OutputSerializer(project) return Response(data=output.data, status=status.HTTP_200_OK) class UpdateSellerProjectApiview(APIView): permission_classes = (IsAuthenticated,) class InputSerializer(serializers.Serializer): seller_name = serializers.CharField(max_length=50, required=True) seller_mobile = serializers.IntegerField(required=True) seller_address = serializers.CharField(max_length=500, required=True) projectcode = serializers.CharField(max_length=20, required=True) def patch(self, request, project_id): serializer = self.InputSerializer(data=request.data) serializer.is_valid(raise_exception=True) seller_name = serializer.validated_data.get('seller_name') seller_mobile = serializer.validated_data.get('seller_mobile') seller_address = serializer.validated_data.get('seller_address') projectcode = serializer.validated_data.get('projectcode') user = request.user projectcode_obj = update_project_code_used(code=projectcode, user=user) update_seller_va_send_message( project_id=project_id, seller_name=seller_name, seller_mobile=seller_mobile, seller_address=seller_address, projectcode=projectcode_obj ) return Response({'message': 'project updated successfully'}, status=status.HTTP_200_OK) class OpListProjectApiview(APIView): permission_classes = (IsAuthenticated,) class OutputSerializer(serializers.ModelSerializer): class CitySerializer(serializers.ModelSerializer): class OstanSerializer(serializers.ModelSerializer): class Meta: model = CityModel fields = '__all__' ostan = OstanSerializer() class Meta: model = CityModel fields = '__all__' class CUserSerializer(serializers.ModelSerializer): class Meta: model = CUserModel fields = ('name_family', 'mobile',) city = CitySerializer() cuser = CUserSerializer() class Meta: model = ProjectModel fields = '__all__' def get(self, request): project_status = request.query_params.get('status') projects = op_list_project(status=project_status) output = self.OutputSerializer(projects, many=True) return Response(data=output.data, status=status.HTTP_200_OK)