feat(api): implemented create sale as api endpoint.
This commit is contained in:
parent
02fbf51659
commit
eaa856e9da
@ -1 +1,2 @@
|
||||
Django==5.0.6
|
||||
djangorestframework
|
||||
|
30
tienda_ilusion/don_confiao/api_views.py
Normal file
30
tienda_ilusion/don_confiao/api_views.py
Normal file
@ -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)
|
17
tienda_ilusion/don_confiao/serializers.py
Normal file
17
tienda_ilusion/don_confiao/serializers.py
Normal file
@ -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']
|
32
tienda_ilusion/don_confiao/tests/test_api.py
Normal file
32
tienda_ilusion/don_confiao/tests/test_api.py
Normal file
@ -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)
|
@ -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/<int:id>", views.purchase_summary, name="purchase_summary"),
|
||||
path('api/sales/', api_views.SaleViewSet.as_view({'post': 'create'}), name='sale-create')
|
||||
]
|
||||
|
@ -38,6 +38,7 @@ INSTALLED_APPS = [
|
||||
'django.contrib.sessions',
|
||||
'django.contrib.messages',
|
||||
'django.contrib.staticfiles',
|
||||
'rest_framework',
|
||||
# 'don_confiao'
|
||||
]
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user