Compare commits
21 Commits
a62cf3a1ee
...
7134b2c185
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
7134b2c185 | ||
|
|
306aecc956 | ||
| 3ede209e52 | |||
|
|
05857a227a | ||
| 10b25b5228 | |||
|
|
fcbfa94dd4 | ||
| 7e778d3a3e | |||
|
|
81a4287db1 | ||
|
|
e560fdaf2d | ||
|
|
0d96167a7b | ||
|
|
ae65d9d793 | ||
|
|
5249f7e6f7 | ||
|
|
e1b771e166 | ||
|
|
eded642bd7 | ||
| f830235813 | |||
|
|
2f471173c3 | ||
| 3838fbaa47 | |||
|
|
fe40057d95 | ||
| 550da049b9 | |||
|
|
bd27205252 | ||
| 34aba90ebd |
@@ -13,7 +13,7 @@ from config.env import env
|
|||||||
|
|
||||||
|
|
||||||
def home(request):
|
def home(request):
|
||||||
return HttpResponse("OK: #7272ef3fce1cb08dc94c272e7d7cda89c9b64cd1")
|
return HttpResponse("OK: #3ede209e52cd3cbd23fc608c3aa250f637882258")
|
||||||
|
|
||||||
|
|
||||||
urlpatterns = [
|
urlpatterns = [
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
from django.contrib.auth import admin
|
from django.contrib.auth import admin
|
||||||
|
from django.contrib.auth.admin import UserAdmin
|
||||||
from django.utils.translation import gettext_lazy as _
|
from django.utils.translation import gettext_lazy as _
|
||||||
from django.utils.safestring import mark_safe
|
from django.utils.safestring import mark_safe
|
||||||
from unfold.admin import ModelAdmin
|
from unfold.admin import ModelAdmin
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
# Generated by Django 5.2.7 on 2026-04-24 12:55
|
# Generated by Django 5.2.7 on 2026-04-27 09:33
|
||||||
|
|
||||||
import django.db.models.deletion
|
import django.db.models.deletion
|
||||||
from django.db import migrations, models
|
from django.db import migrations, models
|
||||||
|
|||||||
@@ -1,8 +1,26 @@
|
|||||||
from rest_framework import serializers
|
from rest_framework import serializers
|
||||||
|
|
||||||
from core.apps.accounts.models.permission import PermissionToAction
|
from core.apps.accounts.models.permission import PermissionToAction, PermissionToTab, Permission, Role
|
||||||
|
|
||||||
|
|
||||||
|
class PermissionToActionSerializer(serializers.ModelSerializer):
|
||||||
|
class Meta:
|
||||||
|
model = PermissionToAction
|
||||||
|
fields = "__all__"
|
||||||
|
|
||||||
|
class PermissionToTabSerializer(serializers.ModelSerializer):
|
||||||
|
class Meta:
|
||||||
|
model = PermissionToTab
|
||||||
|
fields = '__all__'
|
||||||
|
|
||||||
|
|
||||||
class PermissionSerializer(serializers.ModelSerializer):
|
class PermissionSerializer(serializers.ModelSerializer):
|
||||||
class Meta:
|
class Meta:
|
||||||
model = PermissionToAction
|
model = Permission
|
||||||
|
fields = '__all__'
|
||||||
|
|
||||||
|
|
||||||
|
class RoleSerializer(serializers.ModelSerializer):
|
||||||
|
class Meta:
|
||||||
|
model = Role
|
||||||
|
fields = '__all__'
|
||||||
@@ -8,7 +8,7 @@ from .views import RegisterView, ResetPasswordView, MeView, ChangePasswordView,
|
|||||||
AdminUserView, AdminCreateAPIView, AdminUpdateAPIView
|
AdminUserView, AdminCreateAPIView, AdminUpdateAPIView
|
||||||
from rest_framework.routers import DefaultRouter
|
from rest_framework.routers import DefaultRouter
|
||||||
|
|
||||||
# from .views.permission import PermissionToActionViewSetMixin
|
from .views.permission import PermissionToActionViewSet, PermissionToTabViewSet, PermissionViewSet, RoleViewSet
|
||||||
|
|
||||||
router = DefaultRouter()
|
router = DefaultRouter()
|
||||||
router.register("auth", RegisterView, basename="auth")
|
router.register("auth", RegisterView, basename="auth")
|
||||||
@@ -16,7 +16,10 @@ router.register("auth", ResetPasswordView, basename="reset-password")
|
|||||||
router.register("auth", MeView, basename="me")
|
router.register("auth", MeView, basename="me")
|
||||||
router.register("auth", ChangePasswordView, basename="change-password")
|
router.register("auth", ChangePasswordView, basename="change-password")
|
||||||
router.register("user", AdminUserView, basename="user-crud")
|
router.register("user", AdminUserView, basename="user-crud")
|
||||||
# router.register("user", PermissionToActionViewSetMixin, basename="permission")
|
router.register("action", PermissionToActionViewSet, basename="action")
|
||||||
|
router.register("permission-to-tab", PermissionToTabViewSet, basename="permission-to-tab")
|
||||||
|
router.register("permission", PermissionViewSet, basename="permission")
|
||||||
|
router.register("permission-role", RoleViewSet, basename="permission-role")
|
||||||
|
|
||||||
|
|
||||||
urlpatterns = [
|
urlpatterns = [
|
||||||
|
|||||||
@@ -1,18 +1,42 @@
|
|||||||
from django_core.mixins import BaseViewSetMixin
|
from django_core.mixins import BaseViewSetMixin
|
||||||
from rest_framework.permissions import AllowAny
|
from drf_spectacular.utils import extend_schema
|
||||||
|
from rest_framework.permissions import AllowAny, IsAdminUser
|
||||||
|
from rest_framework.viewsets import ModelViewSet
|
||||||
|
|
||||||
from core.apps.accounts.models.permission import PermissionToAction
|
from core.apps.accounts.models.permission import PermissionToAction, PermissionToTab, Permission, Role
|
||||||
from core.apps.accounts.serializers.permission import PermissionSerializer
|
from core.apps.accounts.serializers.permission import PermissionToActionSerializer, PermissionToTabSerializer, \
|
||||||
|
PermissionSerializer, RoleSerializer
|
||||||
|
|
||||||
|
|
||||||
# class PermissionToActionViewSetMixin(BaseViewSetMixin):
|
@extend_schema(tags=["permission"])
|
||||||
# queryset = PermissionToAction.objects.all()
|
class PermissionToActionViewSet(BaseViewSetMixin, ModelViewSet):
|
||||||
# permission_classes = [AllowAny]
|
queryset = PermissionToAction.objects.all()
|
||||||
# serializer_class = PermissionSerializer
|
serializer_class = PermissionToActionSerializer
|
||||||
#
|
|
||||||
# action_permission_classes = {}
|
action_serializer_class = {
|
||||||
# action_serializer_class = {
|
'create': PermissionToActionSerializer,
|
||||||
# "list": PermissionSerializer,
|
'update': PermissionToActionSerializer,
|
||||||
# "retrieve": PermissionSerializer,
|
}
|
||||||
# "create": PermissionSerializer,
|
|
||||||
# }
|
action_permission_classes = {
|
||||||
|
'create': [AllowAny],
|
||||||
|
'destroy': [IsAdminUser],
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@extend_schema(tags=["permission"])
|
||||||
|
class PermissionToTabViewSet(BaseViewSetMixin, ModelViewSet):
|
||||||
|
queryset = PermissionToTab.objects.all()
|
||||||
|
serializer_class = PermissionToTabSerializer
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@extend_schema(tags=["permission"])
|
||||||
|
class PermissionViewSet(BaseViewSetMixin, ModelViewSet):
|
||||||
|
queryset = Permission.objects.all()
|
||||||
|
serializer_class = PermissionSerializer
|
||||||
|
|
||||||
|
|
||||||
|
class RoleViewSet(BaseViewSetMixin, ModelViewSet):
|
||||||
|
queryset = Role.objects.all()
|
||||||
|
serializer_class = RoleSerializer
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
# Generated by Django 5.2.7 on 2026-04-24 12:55
|
# Generated by Django 5.2.7 on 2026-04-27 09:33
|
||||||
|
|
||||||
from django.db import migrations, models
|
from django.db import migrations, models
|
||||||
|
|
||||||
|
|||||||
@@ -3,6 +3,7 @@ from core.apps.evaluation.models import CertificateModel
|
|||||||
|
|
||||||
|
|
||||||
class BaseCertificateSerializer(serializers.ModelSerializer):
|
class BaseCertificateSerializer(serializers.ModelSerializer):
|
||||||
|
file = serializers.SerializerMethodField()
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
model = CertificateModel
|
model = CertificateModel
|
||||||
@@ -10,4 +11,12 @@ class BaseCertificateSerializer(serializers.ModelSerializer):
|
|||||||
"id",
|
"id",
|
||||||
"title",
|
"title",
|
||||||
"file",
|
"file",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
def get_file(self, obj):
|
||||||
|
if obj.file:
|
||||||
|
request = self.context.get('request')
|
||||||
|
if request:
|
||||||
|
return request.build_absolute_uri(obj.file.url)
|
||||||
|
return obj.file.url
|
||||||
|
return None
|
||||||
@@ -128,6 +128,3 @@ class CreateQuickevaluationSerializer(serializers.ModelSerializer):
|
|||||||
return super().create(validated_data)
|
return super().create(validated_data)
|
||||||
|
|
||||||
|
|
||||||
class ArchiveQuickevaluationSerializer(serializers.Serializer):
|
|
||||||
id = serializers.IntegerField(required=True)
|
|
||||||
is_archive = serializers.BooleanField(required=True)
|
|
||||||
@@ -30,10 +30,13 @@ from .views import (
|
|||||||
TechPassportAPIView,
|
TechPassportAPIView,
|
||||||
EvaluationStatusChange,
|
EvaluationStatusChange,
|
||||||
CertificateView,
|
CertificateView,
|
||||||
ArchiveQuickEvaluationView,
|
ArchiveEvaluationrequestView, GetArchivedAutoEvaluationListAPIView, ArchivedAutoEvaluation,
|
||||||
ArchiveEvaluationrequestView, GetArchivedEvaluationListAPIView, ArchivedEvaluation,
|
GetArchivedQuickevaluationListAPIView, ChangeQuickevaluationAPIView, ArchivedReqEvaluation,
|
||||||
|
GetArchivedReqEvaluationListAPIView,
|
||||||
|
AvgCostView,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
router = DefaultRouter()
|
router = DefaultRouter()
|
||||||
router.register("document-category", DocumentCategoryView, basename="DocumentCategory")
|
router.register("document-category", DocumentCategoryView, basename="DocumentCategory")
|
||||||
router.register("document", DocumentView, basename="Document")
|
router.register("document", DocumentView, basename="Document")
|
||||||
@@ -78,13 +81,25 @@ urlpatterns = [
|
|||||||
),
|
),
|
||||||
path("evaluation-request/<int:pk>/change-status/", EvaluationStatusChange.as_view(),
|
path("evaluation-request/<int:pk>/change-status/", EvaluationStatusChange.as_view(),
|
||||||
name="evaluation-change-status"),
|
name="evaluation-change-status"),
|
||||||
path("archive/quick-evaluation/", ArchiveQuickEvaluationView.as_view(), name="quick-evaluation-archive"),
|
path("archive/quick-evaluation/", GetArchivedQuickevaluationListAPIView.as_view(), name="get-quick-evaluation-archive"),
|
||||||
|
path("archive/quick-evaluation/<int:pk>", ChangeQuickevaluationAPIView.as_view(), name="change-quick-evaluation-archive"),
|
||||||
|
|
||||||
path("archive/evaluation-request/", ArchiveEvaluationrequestView.as_view(), name="evaluation-request-archive"),
|
path("archive/evaluation-request/", ArchiveEvaluationrequestView.as_view(), name="evaluation-request-archive"),
|
||||||
|
|
||||||
path("archived-evaluvation/", GetArchivedEvaluationListAPIView.as_view(),
|
path("archived-evaluvation/", GetArchivedAutoEvaluationListAPIView.as_view(),
|
||||||
name="archived-evaluation"),
|
name="archived-evaluation"),
|
||||||
|
|
||||||
path("auto-evaluvation-change-status/<int:pk>", ArchivedEvaluation.as_view(),
|
path("auto-evaluvation-change-status/<int:pk>", ArchivedAutoEvaluation.as_view(),
|
||||||
name="archived-evaluation"),
|
name="archived-evaluation"),
|
||||||
|
|
||||||
|
path("req-evaluvation-change-status/<int:pk>", ArchivedReqEvaluation.as_view(),
|
||||||
|
name="archived-req-evaluation"),
|
||||||
|
|
||||||
|
path("req-evaluvation-change-status/", GetArchivedReqEvaluationListAPIView.as_view(),
|
||||||
|
name="archived-req-evaluation"),
|
||||||
|
path(
|
||||||
|
"calculate_avg_cost/",
|
||||||
|
AvgCostView.as_view(),
|
||||||
|
name="calculate-avg-cost"
|
||||||
|
)
|
||||||
]
|
]
|
||||||
|
|||||||
@@ -14,3 +14,4 @@ from .vehicle import * # noqa
|
|||||||
from .didox import * # noqa
|
from .didox import * # noqa
|
||||||
from .tech_passport import * # noqa
|
from .tech_passport import * # noqa
|
||||||
from .certificate import * # noqa
|
from .certificate import * # noqa
|
||||||
|
from .avg_cost import *
|
||||||
|
|||||||
@@ -158,18 +158,21 @@ class AutoEvaluationListAppraisersView(GenericAPIView):
|
|||||||
|
|
||||||
|
|
||||||
@extend_schema(tags=["AutoEvaluation"])
|
@extend_schema(tags=["AutoEvaluation"])
|
||||||
class GetArchivedEvaluationListAPIView(ListAPIView):
|
class GetArchivedAutoEvaluationListAPIView(ListAPIView):
|
||||||
permission_classes = [IsAuthenticated]
|
permission_classes = [IsAuthenticated]
|
||||||
|
|
||||||
def get_queryset(self):
|
def get_queryset(self):
|
||||||
return AutoEvaluationModel.objects.filter(is_archived=True)
|
return AutoEvaluationModel.objects.filter(is_archived=True)
|
||||||
|
|
||||||
|
|
||||||
@extend_schema(tags=["AutoEvaluation"])
|
@extend_schema(tags=["AutoEvaluation"])
|
||||||
class ArchivedEvaluation(APIView):
|
class ArchivedAutoEvaluation(APIView):
|
||||||
permission_classes = [IsAuthenticated]
|
permission_classes = [IsAuthenticated]
|
||||||
|
|
||||||
def post(self, request, pk):
|
def post(self, request, pk):
|
||||||
auto_evaluation = get_object_or_404(AutoEvaluationModel, pk=pk)
|
auto_evaluation = get_object_or_404(AutoEvaluationModel, pk=pk)
|
||||||
auto_evaluation.is_archived = request.data["is_archived"]
|
auto_evaluation.is_archived = request.data["is_archived"]
|
||||||
auto_evaluation.save()
|
auto_evaluation.save()
|
||||||
return Response({"success": True}, status=200)
|
return Response({"success": True,
|
||||||
|
"status": auto_evaluation.status,
|
||||||
|
"id": auto_evaluation.pk}, status=200)
|
||||||
|
|||||||
@@ -10,9 +10,26 @@ class AvgCostView(generics.GenericAPIView):
|
|||||||
serializer_class = AvgCostSerializer
|
serializer_class = AvgCostSerializer
|
||||||
permission_classes = [permissions.IsAuthenticated]
|
permission_classes = [permissions.IsAuthenticated]
|
||||||
|
|
||||||
def post(self):
|
def post(self, request):
|
||||||
serializer = self.get_serializer(data=self.request.data)
|
serializer = self.get_serializer(data=request.data)
|
||||||
if serializer.is_valid():
|
if serializer.is_valid():
|
||||||
avg_cost = get_auto_avg_cost(serializer.validated_data)
|
print(serializer.validated_data)
|
||||||
|
brand = serializer.validated_data['brand']
|
||||||
|
condition = serializer.validated_data['condition']
|
||||||
|
model = serializer.validated_data['model']
|
||||||
|
complication = serializer.validated_data['complication']
|
||||||
|
manufacture_date = serializer.validated_data['manufacture_date']
|
||||||
|
distance_covered = serializer.validated_data['distance_covered']
|
||||||
|
color = serializer.validated_data['color']
|
||||||
|
|
||||||
|
avg_cost = get_auto_avg_cost(
|
||||||
|
brand=brand,
|
||||||
|
condition=condition,
|
||||||
|
model=model,
|
||||||
|
complication=complication,
|
||||||
|
manufacture_date=manufacture_date,
|
||||||
|
distance_covered=str(distance_covered),
|
||||||
|
color=color
|
||||||
|
)
|
||||||
return Response(avg_cost, status=200)
|
return Response(avg_cost, status=200)
|
||||||
return Response(serializer.errors, status=400)
|
return Response(serializer.errors, status=400)
|
||||||
|
|||||||
@@ -15,7 +15,7 @@ class CertificateView(BaseViewSetMixin, ModelViewSet):
|
|||||||
|
|
||||||
parser_classes = [MultiPartParser, FormParser]
|
parser_classes = [MultiPartParser, FormParser]
|
||||||
|
|
||||||
filter_backends = [SearchFilter]
|
filter_backends = [SearchFilter]
|
||||||
search_fields = ["title"]
|
search_fields = ["title"]
|
||||||
|
|
||||||
pagination_class = None
|
pagination_class = None
|
||||||
|
|||||||
@@ -1,14 +1,15 @@
|
|||||||
|
from django.shortcuts import get_object_or_404
|
||||||
from django_core.mixins import BaseViewSetMixin
|
from django_core.mixins import BaseViewSetMixin
|
||||||
from django_filters.rest_framework import DjangoFilterBackend
|
from django_filters.rest_framework import DjangoFilterBackend
|
||||||
from drf_spectacular.utils import extend_schema, OpenApiResponse
|
from drf_spectacular.utils import extend_schema
|
||||||
|
from rest_framework import status
|
||||||
from rest_framework.filters import OrderingFilter, SearchFilter
|
from rest_framework.filters import OrderingFilter, SearchFilter
|
||||||
|
from rest_framework.generics import ListAPIView
|
||||||
from rest_framework.parsers import FormParser, MultiPartParser
|
from rest_framework.parsers import FormParser, MultiPartParser
|
||||||
from rest_framework.permissions import AllowAny, IsAuthenticated
|
from rest_framework.permissions import AllowAny, IsAuthenticated
|
||||||
from rest_framework.viewsets import ModelViewSet
|
|
||||||
from rest_framework.generics import GenericAPIView
|
|
||||||
from rest_framework.response import Response
|
from rest_framework.response import Response
|
||||||
from rest_framework import status
|
from rest_framework.views import APIView
|
||||||
from django.shortcuts import get_object_or_404
|
from rest_framework.viewsets import ModelViewSet
|
||||||
|
|
||||||
from core.apps.evaluation.filters.quick import QuickevaluationFilter
|
from core.apps.evaluation.filters.quick import QuickevaluationFilter
|
||||||
from core.apps.evaluation.models import QuickEvaluationModel
|
from core.apps.evaluation.models import QuickEvaluationModel
|
||||||
@@ -16,7 +17,6 @@ from core.apps.evaluation.serializers.quick import (
|
|||||||
CreateQuickevaluationSerializer,
|
CreateQuickevaluationSerializer,
|
||||||
ListQuickevaluationSerializer,
|
ListQuickevaluationSerializer,
|
||||||
RetrieveQuickevaluationSerializer,
|
RetrieveQuickevaluationSerializer,
|
||||||
ArchiveQuickevaluationSerializer,
|
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
@@ -56,75 +56,27 @@ class QuickEvaluationView(BaseViewSetMixin, ModelViewSet):
|
|||||||
"create": CreateQuickevaluationSerializer,
|
"create": CreateQuickevaluationSerializer,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@extend_schema(tags=["QuickEvaluation"])
|
@extend_schema(tags=["QuickEvaluation"])
|
||||||
class ArchiveQuickEvaluationView(GenericAPIView):
|
class ChangeQuickevaluationAPIView(APIView):
|
||||||
|
|
||||||
|
def post(self, request, pk):
|
||||||
|
instance = get_object_or_404(QuickEvaluationModel, pk=pk)
|
||||||
|
|
||||||
|
is_archived = request.data.get("is_archived")
|
||||||
|
if is_archived is None:
|
||||||
|
return Response(
|
||||||
|
{"error": "Поле 'is_archived' обязательно"},
|
||||||
|
status=status.HTTP_400_BAD_REQUEST
|
||||||
|
)
|
||||||
|
instance.is_archived = is_archived
|
||||||
|
instance.save()
|
||||||
|
return Response({"success": True}, status=200)
|
||||||
|
|
||||||
|
|
||||||
|
@extend_schema(tags=["QuickEvaluation"])
|
||||||
|
class GetArchivedQuickevaluationListAPIView(ListAPIView):
|
||||||
permission_classes = [IsAuthenticated]
|
permission_classes = [IsAuthenticated]
|
||||||
|
|
||||||
def get_serializer_class(self):
|
def get_queryset(self):
|
||||||
if self.request.method == "GET":
|
return QuickEvaluationModel.objects.filter(is_archived=True)
|
||||||
return ListQuickevaluationSerializer
|
|
||||||
return ArchiveQuickevaluationSerializer
|
|
||||||
|
|
||||||
@extend_schema(
|
|
||||||
tags=["QuickEvaluation"],
|
|
||||||
summary="Get archived quick evaluations list",
|
|
||||||
description="""
|
|
||||||
Returns only archived quick evaluations.
|
|
||||||
|
|
||||||
This endpoint works like quick-evaluation/,
|
|
||||||
but only records with is_archive=True are returned.
|
|
||||||
""",
|
|
||||||
responses={200: ListQuickevaluationSerializer(many=True)},
|
|
||||||
)
|
|
||||||
def get(self, request, *args, **kwargs):
|
|
||||||
queryset = QuickEvaluationModel.objects.filter(
|
|
||||||
is_archive=True
|
|
||||||
).order_by("-created_at")
|
|
||||||
|
|
||||||
serializer = self.get_serializer(queryset, many=True)
|
|
||||||
|
|
||||||
return Response(serializer.data, status=status.HTTP_200_OK)
|
|
||||||
|
|
||||||
@extend_schema(
|
|
||||||
tags=["QuickEvaluation"],
|
|
||||||
summary="Archive or unarchive quick evaluation",
|
|
||||||
description="""
|
|
||||||
Update archive status for quick evaluation.
|
|
||||||
|
|
||||||
- is_archive=true → archive
|
|
||||||
- is_archive=false → remove from archive
|
|
||||||
""",
|
|
||||||
request=ArchiveQuickevaluationSerializer,
|
|
||||||
responses={
|
|
||||||
200: OpenApiResponse(
|
|
||||||
description="Archive status updated successfully"
|
|
||||||
),
|
|
||||||
400: OpenApiResponse(
|
|
||||||
description="Validation error"
|
|
||||||
),
|
|
||||||
404: OpenApiResponse(
|
|
||||||
description="Quick evaluation not found"
|
|
||||||
),
|
|
||||||
},
|
|
||||||
)
|
|
||||||
def post(self, request, *args, **kwargs):
|
|
||||||
serializer = self.get_serializer(data=request.data)
|
|
||||||
serializer.is_valid(raise_exception=True)
|
|
||||||
|
|
||||||
validated_data = serializer.validated_data
|
|
||||||
|
|
||||||
obj = get_object_or_404(
|
|
||||||
QuickEvaluationModel,
|
|
||||||
id=validated_data["id"]
|
|
||||||
)
|
|
||||||
|
|
||||||
obj.is_archive = validated_data["is_archive"]
|
|
||||||
obj.save(update_fields=["is_archive"])
|
|
||||||
|
|
||||||
return Response(
|
|
||||||
{
|
|
||||||
"success": True,
|
|
||||||
"message": "Archive status updated successfully"
|
|
||||||
},
|
|
||||||
status=status.HTTP_200_OK
|
|
||||||
)
|
|
||||||
|
|||||||
@@ -1,16 +1,18 @@
|
|||||||
from django.shortcuts import get_object_or_404
|
from django.shortcuts import get_object_or_404
|
||||||
|
|
||||||
from django_core.mixins import BaseViewSetMixin
|
from django_core.mixins import BaseViewSetMixin
|
||||||
from django_filters.rest_framework import DjangoFilterBackend
|
from django_filters.rest_framework import DjangoFilterBackend
|
||||||
|
from drf_spectacular.utils import OpenApiResponse
|
||||||
from drf_spectacular.utils import extend_schema
|
from drf_spectacular.utils import extend_schema
|
||||||
|
from rest_framework import status
|
||||||
from rest_framework.filters import OrderingFilter, SearchFilter
|
from rest_framework.filters import OrderingFilter, SearchFilter
|
||||||
from rest_framework.pagination import PageNumberPagination
|
from rest_framework.generics import GenericAPIView, ListAPIView
|
||||||
from rest_framework.permissions import AllowAny, IsAuthenticated
|
from rest_framework.permissions import IsAuthenticated
|
||||||
from rest_framework.viewsets import ModelViewSet
|
|
||||||
from rest_framework.response import Response
|
from rest_framework.response import Response
|
||||||
from rest_framework.views import APIView
|
from rest_framework.views import APIView
|
||||||
from rest_framework import status
|
from rest_framework.viewsets import ModelViewSet
|
||||||
|
|
||||||
|
from core.apps.accounts.choices import RoleChoice
|
||||||
|
from core.apps.evaluation.choices.request import RequestStatus
|
||||||
from core.apps.evaluation.filters.request import EvaluationrequestFilter
|
from core.apps.evaluation.filters.request import EvaluationrequestFilter
|
||||||
from core.apps.evaluation.models import EvaluationrequestModel
|
from core.apps.evaluation.models import EvaluationrequestModel
|
||||||
from core.apps.evaluation.serializers.request import (
|
from core.apps.evaluation.serializers.request import (
|
||||||
@@ -19,9 +21,6 @@ from core.apps.evaluation.serializers.request import (
|
|||||||
RetrieveEvaluationrequestSerializer,
|
RetrieveEvaluationrequestSerializer,
|
||||||
ArchiveEvaluationrequestSerializer,
|
ArchiveEvaluationrequestSerializer,
|
||||||
)
|
)
|
||||||
from core.apps.evaluation.choices.request import RequestStatus
|
|
||||||
from rest_framework.generics import GenericAPIView
|
|
||||||
from drf_spectacular.utils import OpenApiResponse
|
|
||||||
|
|
||||||
|
|
||||||
# class RequestPagination(PageNumberPagination):
|
# class RequestPagination(PageNumberPagination):
|
||||||
@@ -85,7 +84,6 @@ class EvaluationrequestView(BaseViewSetMixin, ModelViewSet):
|
|||||||
).order_by("-created_at")
|
).order_by("-created_at")
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@extend_schema(tags=["EvaluationRequest"])
|
@extend_schema(tags=["EvaluationRequest"])
|
||||||
class AdminEvaluationrequestView(BaseViewSetMixin, ModelViewSet):
|
class AdminEvaluationrequestView(BaseViewSetMixin, ModelViewSet):
|
||||||
serializer_class = ListEvaluationrequestSerializer
|
serializer_class = ListEvaluationrequestSerializer
|
||||||
@@ -133,7 +131,8 @@ class AdminEvaluationrequestView(BaseViewSetMixin, ModelViewSet):
|
|||||||
}
|
}
|
||||||
|
|
||||||
def get_queryset(self):
|
def get_queryset(self):
|
||||||
return EvaluationrequestModel.objects.select_related("value_determined", "rate_goal", "property_rights", "form_ownership", "user").order_by("-created_at")
|
return EvaluationrequestModel.objects.select_related("value_determined", "rate_goal", "property_rights",
|
||||||
|
"form_ownership", "user").order_by("-created_at")
|
||||||
|
|
||||||
def serializer_context(self):
|
def serializer_context(self):
|
||||||
return self.serializer_class(context={"request": self.request})
|
return self.serializer_class(context={"request": self.request})
|
||||||
@@ -149,7 +148,6 @@ class EvaluationStatusChange(APIView):
|
|||||||
|
|
||||||
evaluation = get_object_or_404(EvaluationrequestModel, pk=pk)
|
evaluation = get_object_or_404(EvaluationrequestModel, pk=pk)
|
||||||
|
|
||||||
|
|
||||||
status_value = request.data.get('status')
|
status_value = request.data.get('status')
|
||||||
if not status_value:
|
if not status_value:
|
||||||
return Response({'detail': 'Status is required'}, status=status.HTTP_400_BAD_REQUEST)
|
return Response({'detail': 'Status is required'}, status=status.HTTP_400_BAD_REQUEST)
|
||||||
@@ -176,6 +174,7 @@ class EvaluationStatusChange(APIView):
|
|||||||
'id': evaluation.pk
|
'id': evaluation.pk
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
||||||
@extend_schema(tags=["EvaluationRequest"])
|
@extend_schema(tags=["EvaluationRequest"])
|
||||||
class ArchiveEvaluationrequestView(GenericAPIView):
|
class ArchiveEvaluationrequestView(GenericAPIView):
|
||||||
permission_classes = [IsAuthenticated]
|
permission_classes = [IsAuthenticated]
|
||||||
@@ -247,4 +246,28 @@ class ArchiveEvaluationrequestView(GenericAPIView):
|
|||||||
"message": "Archive status updated successfully"
|
"message": "Archive status updated successfully"
|
||||||
},
|
},
|
||||||
status=status.HTTP_200_OK
|
status=status.HTTP_200_OK
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
@extend_schema(tags=["EvaluationRequest"])
|
||||||
|
class GetArchivedReqEvaluationListAPIView(ListAPIView):
|
||||||
|
permission_classes = [IsAuthenticated]
|
||||||
|
|
||||||
|
def get_queryset(self):
|
||||||
|
return EvaluationrequestModel.objects.filter(is_archived=True)
|
||||||
|
|
||||||
|
|
||||||
|
@extend_schema(tags=["EvaluationRequest"])
|
||||||
|
class ArchivedReqEvaluation(APIView):
|
||||||
|
permission_classes = [IsAuthenticated]
|
||||||
|
|
||||||
|
def post(self, request, pk):
|
||||||
|
req_evaluation = get_object_or_404(EvaluationrequestModel, pk=pk)
|
||||||
|
req_evaluation.is_archived = request.data["is_archived"]
|
||||||
|
req_evaluation.save()
|
||||||
|
|
||||||
|
return Response({"success": True,
|
||||||
|
"status": req_evaluation.status,
|
||||||
|
"id": req_evaluation.pk})
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
|
from datetime import datetime
|
||||||
import grpc
|
import grpc
|
||||||
from google.protobuf.timestamp_pb2 import Timestamp
|
from google.protobuf.timestamp_pb2 import Timestamp
|
||||||
from datetime import datetime
|
from datetime import datetime
|
||||||
@@ -15,13 +16,17 @@ def get_auto_avg_cost(
|
|||||||
distance_covered,
|
distance_covered,
|
||||||
color
|
color
|
||||||
):
|
):
|
||||||
# url = f"{env.str('RPC_IP')}:{env.str('RPC_PORT')}"
|
channel = grpc.insecure_channel("94.230.232.47:50051")
|
||||||
# channel = grpc.insecure_channel(url)
|
|
||||||
channel = grpc.insecure_channel("192.168.1.120:50051")
|
|
||||||
stub = auto_pb2_grpc.AutoAvgCostServiceStub(channel)
|
stub = auto_pb2_grpc.AutoAvgCostServiceStub(channel)
|
||||||
|
|
||||||
|
|
||||||
ts = Timestamp()
|
ts = Timestamp()
|
||||||
ts.FromDatetime(manufacture_date)
|
if isinstance(manufacture_date, datetime):
|
||||||
|
dt = manufacture_date
|
||||||
|
else:
|
||||||
|
dt = datetime.combine(manufacture_date, datetime.min.time())
|
||||||
|
|
||||||
|
ts.FromDatetime(dt)
|
||||||
|
|
||||||
response = stub.AutoAvgCost(auto_pb2.AutoAvgCostRequest(
|
response = stub.AutoAvgCost(auto_pb2.AutoAvgCostRequest(
|
||||||
brand=brand,
|
brand=brand,
|
||||||
@@ -32,6 +37,7 @@ def get_auto_avg_cost(
|
|||||||
distance_covered=distance_covered,
|
distance_covered=distance_covered,
|
||||||
color=color,
|
color=color,
|
||||||
))
|
))
|
||||||
|
print("manufacture_date:", manufacture_date, type(manufacture_date))
|
||||||
|
|
||||||
return {
|
return {
|
||||||
"avg_cost": response.avg_cost,
|
"avg_cost": response.avg_cost,
|
||||||
|
|||||||
@@ -84,7 +84,7 @@ services:
|
|||||||
max-file: "5"
|
max-file: "5"
|
||||||
|
|
||||||
web:
|
web:
|
||||||
image: husanjon/sifatbaho:120
|
image: husanjon/sifatbaho:127
|
||||||
env_file:
|
env_file:
|
||||||
- .env
|
- .env
|
||||||
environment:
|
environment:
|
||||||
@@ -129,7 +129,7 @@ services:
|
|||||||
max-file: "5"
|
max-file: "5"
|
||||||
|
|
||||||
celery:
|
celery:
|
||||||
image: husanjon/sifatbaho:120
|
image: husanjon/sifatbaho:127
|
||||||
env_file:
|
env_file:
|
||||||
- .env
|
- .env
|
||||||
environment:
|
environment:
|
||||||
|
|||||||
Reference in New Issue
Block a user