160 lines
5.5 KiB
Python
160 lines
5.5 KiB
Python
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)
|