From c9cfc7f873d349beae458c75a33c29f18b5d96ac Mon Sep 17 00:00:00 2001 From: Mono Mono Date: Sun, 12 Jan 2025 00:24:30 -0500 Subject: [PATCH] #90 feat(ReconcilaitionJar): create api view with pagination. --- tienda_ilusion/don_confiao/api_views.py | 13 +++++++++ .../tests/test_jar_reconciliation.py | 28 +++++++++++++++++++ tienda_ilusion/don_confiao/urls.py | 3 +- 3 files changed, 43 insertions(+), 1 deletion(-) diff --git a/tienda_ilusion/don_confiao/api_views.py b/tienda_ilusion/don_confiao/api_views.py index 31be80a..fc462cc 100644 --- a/tienda_ilusion/don_confiao/api_views.py +++ b/tienda_ilusion/don_confiao/api_views.py @@ -2,6 +2,7 @@ from rest_framework import viewsets from rest_framework.response import Response from rest_framework.status import HTTP_400_BAD_REQUEST from rest_framework.views import APIView +from rest_framework.pagination import PageNumberPagination from .models import Sale, SaleLine, Customer, Product, ReconciliationJar, PaymentMethods, AdminCode from .serializers import SaleSerializer, ProductSerializer, CustomerSerializer, ReconciliationJarSerializer, PaymentMethodSerializer, SaleForRenconciliationSerializer, SaleSummarySerializer @@ -9,6 +10,12 @@ from .serializers import SaleSerializer, ProductSerializer, CustomerSerializer, from decimal import Decimal import json + +class Pagination(PageNumberPagination): + page_size = 10 + page_size_query_param = 'page_size' + + class SaleView(viewsets.ModelViewSet): queryset = Sale.objects.all() serializer_class = SaleSerializer @@ -131,3 +138,9 @@ class AdminCodeValidateView(APIView): def get(self, request, code): codes = AdminCode.objects.filter(value=code) return Response({'validCode': bool(codes)}) + + +class ReconciliateJarModelView(viewsets.ModelViewSet): + queryset = ReconciliationJar.objects.all().order_by('-date_time') + pagination_class = Pagination + serializer_class = ReconciliationJarSerializer diff --git a/tienda_ilusion/don_confiao/tests/test_jar_reconciliation.py b/tienda_ilusion/don_confiao/tests/test_jar_reconciliation.py index de8503c..a7544cc 100644 --- a/tienda_ilusion/don_confiao/tests/test_jar_reconciliation.py +++ b/tienda_ilusion/don_confiao/tests/test_jar_reconciliation.py @@ -197,6 +197,34 @@ class TestJarReconcliation(TestCase): purchases = Sale.objects.filter(reconciliation_id=content['id']) self.assertEqual(len(purchases), 3) + def test_list_reconciliations(self): + self._create_simple_reconciliation() + self._create_simple_reconciliation() + + url = '/don_confiao/api/reconciliate_jar/' + + response = self.client.get(url) + self.assertEqual(response.status_code, 200) + + content = json.loads(response.content.decode('utf-8')) + self.assertEqual(2, len(content['results'])) + self.assertEqual('2024-07-30T00:00:00Z', + content['results'][0]['date_time']) + + def test_list_reconciliations_pagination(self): + self._create_simple_reconciliation() + self._create_simple_reconciliation() + + url = '/don_confiao/api/reconciliate_jar/?page=2&page_size=1' + + response = self.client.get(url) + self.assertEqual(response.status_code, 200) + + content = json.loads(response.content.decode('utf-8')) + self.assertEqual(1, len(content['results'])) + self.assertEqual('2024-07-30T00:00:00Z', + content['results'][0]['date_time']) + def _create_simple_reconciliation(self): reconciliation = ReconciliationJar() reconciliation.date_time = "2024-07-30" diff --git a/tienda_ilusion/don_confiao/urls.py b/tienda_ilusion/don_confiao/urls.py index 5f8f654..3b4dd69 100644 --- a/tienda_ilusion/don_confiao/urls.py +++ b/tienda_ilusion/don_confiao/urls.py @@ -10,7 +10,8 @@ router = DefaultRouter() router.register(r'sales', api_views.SaleView, basename='sale') router.register(r'customers', api_views.CustomerView, basename='customer') router.register(r'products', api_views.ProductView, basename='product') - +router.register(r'reconciliate_jar', api_views.ReconciliateJarModelView, + basename='reconciliate_jar') urlpatterns = [ path("", views.index, name="wellcome"),