Merge pull request #47 from SDSRV-IDP/vietanh99-request-detail

Vietanh99 request detail
This commit is contained in:
Nguyen Viet Anh 2024-02-22 16:36:39 +07:00 committed by GitHub Enterprise
commit 669b15bc80
3 changed files with 70 additions and 15 deletions

View File

@ -112,6 +112,7 @@ class AccuracyViewSet(viewsets.ViewSet):
try: try:
start_date = timezone.datetime.strptime(start_date_str, '%Y-%m-%d') # We care only about day precision only 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 = timezone.datetime.strptime(end_date_str, '%Y-%m-%d')
end_date = end_date + timezone.timedelta(days=1)
# Round: # Round:
# end_date_str to the beginning of the next day # end_date_str to the beginning of the next day
# start_date_str to the start of the date # start_date_str to the start of the date
@ -119,7 +120,7 @@ class AccuracyViewSet(viewsets.ViewSet):
end_date = timezone.make_aware(end_date) 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 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)) base_query &= Q(created_at__range=(start_date, end_date))
except Exception as e: except Exception as e:
raise InvalidException(excArgs="Date format") raise InvalidException(excArgs="Date format")
@ -128,15 +129,13 @@ class AccuracyViewSet(viewsets.ViewSet):
base_query &= Q(request_id=request_id) base_query &= Q(request_id=request_id)
if redemption_id: if redemption_id:
base_query &= Q(redemption_id=redemption_id) base_query &= Q(redemption_id=redemption_id)
base_query &= Q(is_test_request=False)
if isinstance(include_test, str): if isinstance(include_test, str):
include_test = True if include_test=="true" else False include_test = True if include_test=="true" else False
if include_test: if not include_test:
# base_query = ~base_query base_query &= Q(is_test_request=False)
base_query.children = base_query.children[:-1]
elif isinstance(include_test, bool): elif isinstance(include_test, bool):
if include_test: if not include_test:
base_query = ~base_query base_query &= Q(is_test_request=False)
if isinstance(is_reviewed, str): if isinstance(is_reviewed, str):
if is_reviewed == "reviewed": if is_reviewed == "reviewed":
base_query &= Q(is_reviewed=True) base_query &= Q(is_reviewed=True)
@ -341,7 +340,7 @@ class AccuracyViewSet(viewsets.ViewSet):
location=OpenApiParameter.QUERY, location=OpenApiParameter.QUERY,
description='Start date (YYYY-mm-DDTHH:MM:SSZ)', description='Start date (YYYY-mm-DDTHH:MM:SSZ)',
type=OpenApiTypes.DATE, type=OpenApiTypes.DATE,
default='2023-01-02T00:00:00+0700', default='2024-01-02T00:00:00+0700',
), ),
OpenApiParameter( OpenApiParameter(
name='end_date', name='end_date',
@ -546,8 +545,6 @@ class AccuracyViewSet(viewsets.ViewSet):
return response return response
return JsonResponse({'error': 'Invalid request method.'}, status=405) return JsonResponse({'error': 'Invalid request method.'}, status=405)
class RequestViewSet(viewsets.ViewSet):
lookup_field = "username"
@extend_schema( @extend_schema(
request={ request={
@ -562,7 +559,7 @@ class RequestViewSet(viewsets.ViewSet):
}, },
}, },
responses=None, responses=None,
tags=['Request'] tags=['Accuracy']
) )
@action(detail=False, url_path=r"request/(?P<request_id>[\w\-]+)", methods=["GET", "POST"]) @action(detail=False, url_path=r"request/(?P<request_id>[\w\-]+)", methods=["GET", "POST"])
def get_subscription_request(self, request, request_id=None): 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) 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']: for field in ['retailername', 'sold_to_party', 'purchase_date', 'imei_number']:
if not field in reviewed_result.keys(): if not field in reviewed_result.keys():
raise RequiredFieldException(excArgs=f'reviewed_result.{field}') raise RequiredFieldException(excArgs=f'reviewed_result.{field}')
reviewed_result['request_id'] = request_id
for subscription_request_file in subscription_request_files: for subscription_request_file in subscription_request_files:
if subscription_request_file.doc_type == 'invoice': if subscription_request_file.doc_type == 'invoice':
subscription_request_file.reviewed_result = reviewed_result subscription_request_file.reviewed_result = reviewed_result
subscription_request_file.reviewed_result['imei_number'] = [] subscription_request_file.reviewed_result['imei_number'] = []
elif subscription_request_file.doc_type == 'imei': 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_file.save()
subscription_request.reviewed_result = reviewed_result subscription_request.reviewed_result = reviewed_result
@ -698,3 +705,50 @@ class RequestViewSet(viewsets.ViewSet):
return JsonResponse({'message': 'success.'}, status=200) return JsonResponse({'message': 'success.'}, status=200)
else: else:
return JsonResponse({'error': 'Invalid request method.'}, status=405) 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)

View File

@ -2,7 +2,7 @@ from django.conf import settings
from rest_framework.routers import DefaultRouter, SimpleRouter from rest_framework.routers import DefaultRouter, SimpleRouter
from fwd_api.api.ctel_view import CtelViewSet 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 from fwd_api.api.ctel_user_view import CtelUserViewSet
@ -16,7 +16,6 @@ else:
router.register("ctel", CtelViewSet, basename="CtelAPI") router.register("ctel", CtelViewSet, basename="CtelAPI")
router.register("ctel", CtelUserViewSet, basename="CtelUserAPI") router.register("ctel", CtelUserViewSet, basename="CtelUserAPI")
router.register("ctel", AccuracyViewSet, basename="AccuracyAPI") router.register("ctel", AccuracyViewSet, basename="AccuracyAPI")
router.register("ctel", RequestViewSet, basename="RequestAPI")
app_name = "api" app_name = "api"
urlpatterns = router.urls urlpatterns = router.urls

View File

@ -615,6 +615,8 @@ def predict_result_to_ready(result):
"sold_to_party": "", "sold_to_party": "",
"purchase_date": [], "purchase_date": [],
"imei_number": [],} "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["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["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", []) dict_result["purchase_date"] = result.get("content", {}).get("document", [{}])[0].get("content", [{}, {}, {}])[2].get("value", [])