Merge pull request #47 from SDSRV-IDP/vietanh99-request-detail
Vietanh99 request detail
This commit is contained in:
commit
669b15bc80
@ -112,6 +112,7 @@ class AccuracyViewSet(viewsets.ViewSet):
|
||||
try:
|
||||
start_date = timezone.datetime.strptime(start_date_str, '%Y-%m-%d') # We care only about day precision only
|
||||
end_date = timezone.datetime.strptime(end_date_str, '%Y-%m-%d')
|
||||
end_date = end_date + timezone.timedelta(days=1)
|
||||
# Round:
|
||||
# end_date_str to the beginning of the next day
|
||||
# start_date_str to the start of the date
|
||||
@ -119,7 +120,7 @@ class AccuracyViewSet(viewsets.ViewSet):
|
||||
end_date = timezone.make_aware(end_date)
|
||||
|
||||
start_date_str = start_date.strftime('%Y-%m-%dT%H:%M:%S%z') # inside logic will include second precision with timezone for calculation
|
||||
end_date_str = (end_date + timezone.timedelta(days=1)).strftime('%Y-%m-%dT%H:%M:%S%z')
|
||||
end_date_str = end_date.strftime('%Y-%m-%dT%H:%M:%S%z')
|
||||
base_query &= Q(created_at__range=(start_date, end_date))
|
||||
except Exception as e:
|
||||
raise InvalidException(excArgs="Date format")
|
||||
@ -128,15 +129,13 @@ class AccuracyViewSet(viewsets.ViewSet):
|
||||
base_query &= Q(request_id=request_id)
|
||||
if redemption_id:
|
||||
base_query &= Q(redemption_id=redemption_id)
|
||||
base_query &= Q(is_test_request=False)
|
||||
if isinstance(include_test, str):
|
||||
include_test = True if include_test=="true" else False
|
||||
if include_test:
|
||||
# base_query = ~base_query
|
||||
base_query.children = base_query.children[:-1]
|
||||
if not include_test:
|
||||
base_query &= Q(is_test_request=False)
|
||||
elif isinstance(include_test, bool):
|
||||
if include_test:
|
||||
base_query = ~base_query
|
||||
if not include_test:
|
||||
base_query &= Q(is_test_request=False)
|
||||
if isinstance(is_reviewed, str):
|
||||
if is_reviewed == "reviewed":
|
||||
base_query &= Q(is_reviewed=True)
|
||||
@ -341,7 +340,7 @@ class AccuracyViewSet(viewsets.ViewSet):
|
||||
location=OpenApiParameter.QUERY,
|
||||
description='Start date (YYYY-mm-DDTHH:MM:SSZ)',
|
||||
type=OpenApiTypes.DATE,
|
||||
default='2023-01-02T00:00:00+0700',
|
||||
default='2024-01-02T00:00:00+0700',
|
||||
),
|
||||
OpenApiParameter(
|
||||
name='end_date',
|
||||
@ -546,8 +545,6 @@ class AccuracyViewSet(viewsets.ViewSet):
|
||||
return response
|
||||
|
||||
return JsonResponse({'error': 'Invalid request method.'}, status=405)
|
||||
class RequestViewSet(viewsets.ViewSet):
|
||||
lookup_field = "username"
|
||||
|
||||
@extend_schema(
|
||||
request={
|
||||
@ -562,7 +559,7 @@ class RequestViewSet(viewsets.ViewSet):
|
||||
},
|
||||
},
|
||||
responses=None,
|
||||
tags=['Request']
|
||||
tags=['Accuracy']
|
||||
)
|
||||
@action(detail=False, url_path=r"request/(?P<request_id>[\w\-]+)", methods=["GET", "POST"])
|
||||
def get_subscription_request(self, request, request_id=None):
|
||||
@ -677,17 +674,27 @@ class RequestViewSet(viewsets.ViewSet):
|
||||
|
||||
subscription_request_files = SubscriptionRequestFile.objects.filter(request=subscription_request.id)
|
||||
|
||||
reviewed_result = json.loads(data["reviewed_result"])
|
||||
if "reviewed_result" not in data:
|
||||
raise InvalidException(excArgs=f'reviewed_result')
|
||||
|
||||
reviewed_result = data["reviewed_result"]
|
||||
for field in ['retailername', 'sold_to_party', 'purchase_date', 'imei_number']:
|
||||
if not field in reviewed_result.keys():
|
||||
raise RequiredFieldException(excArgs=f'reviewed_result.{field}')
|
||||
reviewed_result['request_id'] = request_id
|
||||
|
||||
for subscription_request_file in subscription_request_files:
|
||||
if subscription_request_file.doc_type == 'invoice':
|
||||
subscription_request_file.reviewed_result = reviewed_result
|
||||
subscription_request_file.reviewed_result['imei_number'] = []
|
||||
elif subscription_request_file.doc_type == 'imei':
|
||||
subscription_request_file.reviewed_result = {"retailername": None, "sold_to_party": None, "purchase_date": [], "imei_number": [reviewed_result["imei_number"][subscription_request_file.index_in_request]]}
|
||||
subscription_request_file.reviewed_result = {
|
||||
"retailername": None,
|
||||
"sold_to_party": None,
|
||||
"purchase_date": [],
|
||||
"imei_number": []}
|
||||
if len(reviewed_result["imei_number"]) - 1 >= subscription_request_file.index_in_request:
|
||||
subscription_request_file.reviewed_result["imei_number"] = reviewed_result["imei_number"][subscription_request_file.index_in_request]
|
||||
subscription_request_file.save()
|
||||
|
||||
subscription_request.reviewed_result = reviewed_result
|
||||
@ -698,3 +705,50 @@ class RequestViewSet(viewsets.ViewSet):
|
||||
return JsonResponse({'message': 'success.'}, status=200)
|
||||
else:
|
||||
return JsonResponse({'error': 'Invalid request method.'}, status=405)
|
||||
|
||||
@extend_schema(
|
||||
request={
|
||||
'multipart/form-data': {
|
||||
'type': 'object',
|
||||
'properties': {
|
||||
'reason': {
|
||||
'type': 'string',
|
||||
'default': '''"Sample reason"''',
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
responses=None,
|
||||
tags=['Accuracy']
|
||||
)
|
||||
@action(detail=False, url_path=r"request_image/(?P<request_id>[\w\-]+)/(?P<request_image_id>[\w\-]+)", methods=["POST"])
|
||||
def request_image(self, request, request_id=None, request_image_id=None):
|
||||
if request.method == 'POST':
|
||||
data = request.data
|
||||
|
||||
base_query = Q(request_id=request_id)
|
||||
|
||||
subscription_request = SubscriptionRequest.objects.filter(base_query)
|
||||
|
||||
if subscription_request.count() == 0:
|
||||
raise NotFoundException(excArgs=request_id)
|
||||
|
||||
subscription_request = subscription_request.first()
|
||||
|
||||
subscription_request_files = SubscriptionRequestFile.objects.filter(request=subscription_request.id)
|
||||
|
||||
if "reason" not in data:
|
||||
raise InvalidException(excArgs=f'reason')
|
||||
|
||||
reason = data["reason"]
|
||||
|
||||
is_available = False
|
||||
for subscription_request_file in subscription_request_files:
|
||||
if subscription_request_file.file_name.split(".")[0] == request_image_id:
|
||||
subscription_request_file.reason = reason
|
||||
subscription_request_file.save()
|
||||
is_available = True
|
||||
if not is_available:
|
||||
raise NotFoundException(excArgs=request_id + "/" + request_image_id)
|
||||
else:
|
||||
return JsonResponse({'error': 'Invalid request method.'}, status=405)
|
||||
|
@ -2,7 +2,7 @@ from django.conf import settings
|
||||
from rest_framework.routers import DefaultRouter, SimpleRouter
|
||||
|
||||
from fwd_api.api.ctel_view import CtelViewSet
|
||||
from fwd_api.api.accuracy_view import AccuracyViewSet, RequestViewSet
|
||||
from fwd_api.api.accuracy_view import AccuracyViewSet
|
||||
|
||||
from fwd_api.api.ctel_user_view import CtelUserViewSet
|
||||
|
||||
@ -16,7 +16,6 @@ else:
|
||||
router.register("ctel", CtelViewSet, basename="CtelAPI")
|
||||
router.register("ctel", CtelUserViewSet, basename="CtelUserAPI")
|
||||
router.register("ctel", AccuracyViewSet, basename="AccuracyAPI")
|
||||
router.register("ctel", RequestViewSet, basename="RequestAPI")
|
||||
|
||||
app_name = "api"
|
||||
urlpatterns = router.urls
|
||||
|
@ -615,6 +615,8 @@ def predict_result_to_ready(result):
|
||||
"sold_to_party": "",
|
||||
"purchase_date": [],
|
||||
"imei_number": [],}
|
||||
if not result:
|
||||
return dict_result
|
||||
dict_result["retailername"] = result.get("content", {}).get("document", [{}])[0].get("content", [{}])[0].get("value", None)
|
||||
dict_result["sold_to_party"] = result.get("content", {}).get("document", [{}])[0].get("content", [{}, {}])[1].get("value", None)
|
||||
dict_result["purchase_date"] = result.get("content", {}).get("document", [{}])[0].get("content", [{}, {}, {}])[2].get("value", [])
|
||||
|
Loading…
Reference in New Issue
Block a user