first commit
This commit is contained in:
commit
3e4574dcdd
163 files changed
+3559
No files matched your search
Whitespace-only changes.
@@ -0,0 +1,106 @@
|
||||
from rest_framework import serializers
|
||||
from apps.cuser.models import CUser as CUserModel
|
||||
from rest_framework.views import APIView
|
||||
from rest_framework.generics import ListAPIView
|
||||
from rest_framework.response import Response
|
||||
from rest_framework.permissions import IsAuthenticated
|
||||
from utils.tools.inline_serializer import inline_serializer
|
||||
from utils.standard_pagination import StandardPagination
|
||||
from utils.order_pagination import OrderViewPagination
|
||||
from apps.order.models import Order as OrderModel
|
||||
from apps.op_panel.selector import get_orders_list, get_order
|
||||
from apps.op_panel.services import update_order
|
||||
from rest_framework import status
|
||||
|
||||
|
||||
class RetrieveOrderApiView(APIView):
|
||||
|
||||
permission_classes = (IsAuthenticated,)
|
||||
|
||||
class OutputSerializer(serializers.Serializer):
|
||||
id = serializers.IntegerField()
|
||||
name = serializers.CharField()
|
||||
status = serializers.CharField()
|
||||
# get status choices display
|
||||
status_text = serializers.CharField(source='get_status_display')
|
||||
code = serializers.CharField()
|
||||
desc = serializers.CharField()
|
||||
cuser_mojri = inline_serializer(many=False, fields={
|
||||
'id': serializers.IntegerField(),
|
||||
'name_family': serializers.CharField(),
|
||||
'user_profile': inline_serializer(many=False, fields={
|
||||
'address': serializers.CharField()
|
||||
})
|
||||
})
|
||||
|
||||
def get(self, request, id: int):
|
||||
order = get_order(id)
|
||||
serializer = self.OutputSerializer(order)
|
||||
return Response(serializer.data, status=status.HTTP_200_OK)
|
||||
|
||||
|
||||
class UpdateOrderApiView(APIView):
|
||||
permission_classes = (IsAuthenticated,)
|
||||
|
||||
class InputSerializer(serializers.Serializer):
|
||||
code = serializers.CharField()
|
||||
desc = serializers.CharField()
|
||||
|
||||
def patch(self, request, id: int):
|
||||
serializer = self.InputSerializer(data=request.data)
|
||||
serializer.is_valid(raise_exception=True)
|
||||
|
||||
code = serializer.validated_data['code']
|
||||
desc = serializer.validated_data['desc']
|
||||
|
||||
update_order(id, 'approve', code, desc)
|
||||
|
||||
return Response({'id': id}, status=status.HTTP_200_OK)
|
||||
|
||||
class OrderListView(ListAPIView):
|
||||
|
||||
class OutputSerializer(serializers.ModelSerializer):
|
||||
city = serializers.SerializerMethodField()
|
||||
ostan = serializers.SerializerMethodField()
|
||||
name_family = serializers.SerializerMethodField()
|
||||
mojri_id = serializers.SerializerMethodField()
|
||||
mobile = serializers.SerializerMethodField()
|
||||
|
||||
class Meta:
|
||||
model = OrderModel
|
||||
fields = ('id', 'mojri_id', 'mobile' , 'city', 'name', 'ostan', 'name_family', 'desc', 'status')
|
||||
|
||||
def get_city(self, obj):
|
||||
if obj.cuser_mojri.user_profile.city is None:
|
||||
return ''
|
||||
return obj.cuser_mojri.user_profile.city.name
|
||||
|
||||
def get_ostan(self, obj):
|
||||
if obj.cuser_mojri.user_profile.city is None:
|
||||
return ''
|
||||
return obj.cuser_mojri.user_profile.city.ostan.name
|
||||
|
||||
def get_name_family(self, obj):
|
||||
if obj.cuser_mojri is None:
|
||||
return ''
|
||||
return obj.cuser_mojri.name_family
|
||||
|
||||
def get_mojri_id(self, obj):
|
||||
if obj.cuser_mojri is None:
|
||||
return ''
|
||||
return obj.cuser_mojri.id
|
||||
|
||||
def get_mobile(self, obj):
|
||||
if obj.cuser_mojri is None:
|
||||
return ''
|
||||
return obj.cuser_mojri.mobile
|
||||
|
||||
permission_classes = (IsAuthenticated,)
|
||||
pagination_class = OrderViewPagination
|
||||
serializer_class = OutputSerializer
|
||||
|
||||
def get_queryset(self):
|
||||
rq_status = self.request.query_params.get('status')
|
||||
orders = get_orders_list(status=rq_status)
|
||||
return orders
|
||||
|
||||
@@ -0,0 +1,31 @@
|
||||
from apps.project.models import Project as ProjectModel
|
||||
from apps.order.models import Order as OrderModel
|
||||
from rest_framework.exceptions import ValidationError
|
||||
|
||||
|
||||
def get_order(order_id):
|
||||
try:
|
||||
order = OrderModel.objects.get(id=order_id)
|
||||
return order
|
||||
except Exception as exp:
|
||||
raise ValidationError({'error': f'error get order: {str(exp)}'})
|
||||
|
||||
|
||||
def get_orders_list(status: str = 'waiting'):
|
||||
try:
|
||||
base_filter = {}
|
||||
if status:
|
||||
base_filter['status'] = status
|
||||
|
||||
orders = OrderModel.objects.filter(**base_filter)
|
||||
return orders
|
||||
except Exception as exp:
|
||||
raise ValidationError({'error': f'error get orders: {str(exp)}'})
|
||||
|
||||
|
||||
def get_project_by_id(project_id):
|
||||
try:
|
||||
project = ProjectModel.objects.get(id=project_id)
|
||||
return project
|
||||
except Exception as exp:
|
||||
raise ValidationError({'error': f'error get project: {str(exp)}'})
|
||||
@@ -0,0 +1,33 @@
|
||||
from django.contrib.auth import get_user_model
|
||||
from rest_framework.exceptions import ValidationError
|
||||
from apps.order.models import Order as OrderModel
|
||||
from utils.services.sms_task import task_send_sms
|
||||
CUserModel = get_user_model()
|
||||
|
||||
|
||||
def update_order(id: int, status: str, code: str, desc: str):
|
||||
try:
|
||||
OrderModel.objects.filter(id=id).update(
|
||||
code=code,
|
||||
desc=desc,
|
||||
status=status
|
||||
)
|
||||
|
||||
order = OrderModel.objects.get(id=id)
|
||||
|
||||
message = f'لوله گستر گلپایگان: مجری محترم درخواست شما برای {order.name} تایید شد '
|
||||
# build new
|
||||
|
||||
task_send_sms.delay(message=message, mobile=order.cuser_mojri.mobile)
|
||||
|
||||
return True
|
||||
except Exception as e:
|
||||
raise ValidationError({"error": f'error update order status ${e}'})
|
||||
|
||||
|
||||
def update_mojri_status(id: int, mojri_status: str = 'WT'):
|
||||
try:
|
||||
CUserModel.objects.filter(id=id).update(mojri_status=mojri_status)
|
||||
return True
|
||||
except Exception as e:
|
||||
raise ValidationError({"error": f'error update mojri status ${e}'})
|
||||
@@ -0,0 +1,15 @@
|
||||
from apps.op_panel.views import RetrieveProjectApiview, AddEmtiyazProjectApiview, RetrieveMojri, UpdateMojriStatusApiview
|
||||
from apps.cuser.views import ListMojrian
|
||||
from apps.op_panel.order_view import OrderListView,UpdateOrderApiView, RetrieveOrderApiView
|
||||
from django.urls import path
|
||||
|
||||
urlpatterns = [
|
||||
path('project/<int:id>/', RetrieveProjectApiview.as_view(), name='retrieve-project'),
|
||||
path('project/<int:id>/add-emtiyaz/', AddEmtiyazProjectApiview.as_view(), name='add-emtiyaz-project'),
|
||||
path('list-mojrian/', ListMojrian.as_view(), name='list-mojrian'),
|
||||
path('mojri/<int:id>/', RetrieveMojri.as_view(), name='retrieve-mojri'),
|
||||
path('mojri/<int:id>/update-status/', UpdateMojriStatusApiview.as_view(), name='update-mojri-status'),
|
||||
path('order/list/', OrderListView.as_view(), name='order-list'),
|
||||
path('order/<int:id>/update/', UpdateOrderApiView.as_view(), name='update-order'),
|
||||
path('order/<int:id>/', RetrieveOrderApiView.as_view(), name='retrieve-order'),
|
||||
]
|
||||
@@ -0,0 +1,111 @@
|
||||
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)
|
||||
|
||||
Reference in new issue
Block a user