diff --git a/cope2n-api/fwd_api/api/accuracy_view.py b/cope2n-api/fwd_api/api/accuracy_view.py index 4da0c0b..f0498cd 100644 --- a/cope2n-api/fwd_api/api/accuracy_view.py +++ b/cope2n-api/fwd_api/api/accuracy_view.py @@ -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) @@ -675,7 +674,7 @@ class AccuracyViewSet(viewsets.ViewSet): subscription_request_files = SubscriptionRequestFile.objects.filter(request=subscription_request.id) - if not data["reviewed_result"]: + if "reviewed_result" not in data: raise InvalidException(excArgs=f'reviewed_result') reviewed_result = data["reviewed_result"] @@ -690,9 +689,9 @@ class AccuracyViewSet(viewsets.ViewSet): 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": [], + "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] @@ -706,3 +705,50 @@ class AccuracyViewSet(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[\w\-]+)/(?P[\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) diff --git a/cope2n-api/fwd_api/utils/accuracy.py b/cope2n-api/fwd_api/utils/accuracy.py index 36a1e27..1e8016d 100644 --- a/cope2n-api/fwd_api/utils/accuracy.py +++ b/cope2n-api/fwd_api/utils/accuracy.py @@ -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", [])