diff --git a/requirements.txt b/requirements.txt index 284d5f5..035edf6 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1 +1,2 @@ Django==5.0.6 +djangorestframework diff --git a/tienda_ilusion/don_confiao/api_views.py b/tienda_ilusion/don_confiao/api_views.py new file mode 100644 index 0000000..d5fc155 --- /dev/null +++ b/tienda_ilusion/don_confiao/api_views.py @@ -0,0 +1,30 @@ +from rest_framework import viewsets +from rest_framework.response import Response + +from .models import Sale, SaleLine, Customer, Product +from .serializers import SaleSerializer + + +class SaleViewSet(viewsets.ModelViewSet): + queryset = Sale.objects.all() + serializer_class = SaleSerializer + + def create(self, request): + data = request.data + customer = Customer.objects.get(pk=data['customer']) + date = data['date'] + lines = data['lines'] + sale = Sale.objects.create(customer=customer, date=date) + + for line in lines: + product = Product.objects.get(pk=line['product']) + quantity = line['quantity'] + unit_price = line['unit_price'] + SaleLine.objects.create( + sale=sale, + product=product, + quantity=quantity, + unit_price=unit_price + ) + + return Response({'message': 'Venta creada con exito'}, status=201) diff --git a/tienda_ilusion/don_confiao/serializers.py b/tienda_ilusion/don_confiao/serializers.py new file mode 100644 index 0000000..464c6f8 --- /dev/null +++ b/tienda_ilusion/don_confiao/serializers.py @@ -0,0 +1,17 @@ +from rest_framework import serializers + +from .models import Sale, SaleLine + + +class SaleLineSerializer(serializers.ModelSerializer): + class Meta: + model = SaleLine + fields = ['id', 'sale', 'product', 'unit_price', 'quantity'] + + +class SaleSerializer(serializers.ModelSerializer): + lines = SaleLineSerializer(many=True) + + class Meta: + model = Sale + fields = ['id', 'customer', 'date', 'lines'] diff --git a/tienda_ilusion/don_confiao/tests/test_api.py b/tienda_ilusion/don_confiao/tests/test_api.py new file mode 100644 index 0000000..5a9cb90 --- /dev/null +++ b/tienda_ilusion/don_confiao/tests/test_api.py @@ -0,0 +1,32 @@ +import json +from django.urls import reverse +from rest_framework import status +from rest_framework.test import APITestCase +from ..models import Sale, Product, Customer + + +class TestAPI(APITestCase): + def setUp(self): + self.product = Product.objects.create( + name='Panela', + price=5000, + measuring_unit='UNIT' + ) + self.customer = Customer.objects.create( + name='Camilo' + ) + + def test_create_sale(self): + url = '/don_confiao/api/sales/' + data = { + 'customer': self.customer.id, + 'date': '2024-09-02', + 'lines': [ + {'product': self.product.id, 'quantity': 2, 'unit_price': 3000}, + {'product': self.product.id, 'quantity': 3, 'unit_price': 5000} + ], + } + response = self.client.post(url, data, format='json') + self.assertEqual(response.status_code, status.HTTP_201_CREATED) + self.assertEqual(Sale.objects.count(), 1) + self.assertEqual(Sale.objects.all()[0].customer.name, self.customer.name) diff --git a/tienda_ilusion/don_confiao/urls.py b/tienda_ilusion/don_confiao/urls.py index 7de794e..145c70a 100644 --- a/tienda_ilusion/don_confiao/urls.py +++ b/tienda_ilusion/don_confiao/urls.py @@ -1,6 +1,7 @@ from django.urls import path from . import views +from . import api_views app_name = 'don_confiao' urlpatterns = [ @@ -13,4 +14,5 @@ urlpatterns = [ path("cuadrar_tarro", views.reconciliate_jar, name="reconciliate_jar"), path("cuadres", views.reconciliate_jar, name="reconciliations"), path("resumen_compra/", views.purchase_summary, name="purchase_summary"), + path('api/sales/', api_views.SaleViewSet.as_view({'post': 'create'}), name='sale-create') ] diff --git a/tienda_ilusion/tienda_ilusion/settings.py b/tienda_ilusion/tienda_ilusion/settings.py index e50d393..807d758 100644 --- a/tienda_ilusion/tienda_ilusion/settings.py +++ b/tienda_ilusion/tienda_ilusion/settings.py @@ -38,6 +38,7 @@ INSTALLED_APPS = [ 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', + 'rest_framework', # 'don_confiao' ]