first commit

This commit is contained in:
javad committed 2026-06-15 10:57:28 +03:30
commit 3e4574dcdd
163 files changed
+3559

No files matched your search

View File
Whitespace-only changes.
+106
View File
@@ -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
+31
View File
@@ -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)}'})
+33
View File
@@ -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}'})
+15
View File
@@ -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'),
]
+111
View File
@@ -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)