diff --git a/ExEcommerce/__pycache__/__init__.cpython-38.pyc b/ExEcommerce/__pycache__/__init__.cpython-38.pyc index 4fdba20..ea1f898 100644 Binary files a/ExEcommerce/__pycache__/__init__.cpython-38.pyc and b/ExEcommerce/__pycache__/__init__.cpython-38.pyc differ diff --git a/ExEcommerce/__pycache__/settings.cpython-38.pyc b/ExEcommerce/__pycache__/settings.cpython-38.pyc index 88da244..123bd38 100644 Binary files a/ExEcommerce/__pycache__/settings.cpython-38.pyc and b/ExEcommerce/__pycache__/settings.cpython-38.pyc differ diff --git a/ExEcommerce/__pycache__/urls.cpython-38.pyc b/ExEcommerce/__pycache__/urls.cpython-38.pyc index 0a1243a..80a4d08 100644 Binary files a/ExEcommerce/__pycache__/urls.cpython-38.pyc and b/ExEcommerce/__pycache__/urls.cpython-38.pyc differ diff --git a/ExEcommerce/__pycache__/wsgi.cpython-38.pyc b/ExEcommerce/__pycache__/wsgi.cpython-38.pyc index bdd487d..cd51d7d 100644 Binary files a/ExEcommerce/__pycache__/wsgi.cpython-38.pyc and b/ExEcommerce/__pycache__/wsgi.cpython-38.pyc differ diff --git a/ExEcommerce/settings.py b/ExEcommerce/settings.py index 274e968..06366bd 100644 --- a/ExEcommerce/settings.py +++ b/ExEcommerce/settings.py @@ -39,7 +39,7 @@ 'django.contrib.staticfiles', 'Productos', 'rest_framework', - 'rest_framework.authtoken' + 'rest_framework.authtoken','checkout_80159226', ] REST_FRAMEWORK = { diff --git a/ExEcommerce/urls.py b/ExEcommerce/urls.py index a28b9fb..4cee9ed 100644 --- a/ExEcommerce/urls.py +++ b/ExEcommerce/urls.py @@ -3,5 +3,6 @@ urlpatterns = [ path('admin/', admin.site.urls), - path('productos/api/', include('Productos.urls')) + path('productos/api/', include('Productos.urls')), + path("checkout/api/", include("checkout_80159226.urls")) ] diff --git a/Productos/__pycache__/__init__.cpython-38.pyc b/Productos/__pycache__/__init__.cpython-38.pyc index 12858eb..0e5e624 100644 Binary files a/Productos/__pycache__/__init__.cpython-38.pyc and b/Productos/__pycache__/__init__.cpython-38.pyc differ diff --git a/Productos/__pycache__/admin.cpython-38.pyc b/Productos/__pycache__/admin.cpython-38.pyc index 5e45772..0ed51af 100644 Binary files a/Productos/__pycache__/admin.cpython-38.pyc and b/Productos/__pycache__/admin.cpython-38.pyc differ diff --git a/Productos/__pycache__/apps.cpython-38.pyc b/Productos/__pycache__/apps.cpython-38.pyc new file mode 100644 index 0000000..169d4b3 Binary files /dev/null and b/Productos/__pycache__/apps.cpython-38.pyc differ diff --git a/Productos/__pycache__/models.cpython-38.pyc b/Productos/__pycache__/models.cpython-38.pyc index 39e54e5..14ec186 100644 Binary files a/Productos/__pycache__/models.cpython-38.pyc and b/Productos/__pycache__/models.cpython-38.pyc differ diff --git a/Productos/__pycache__/serializers.cpython-38.pyc b/Productos/__pycache__/serializers.cpython-38.pyc index dea7d34..475e5ea 100644 Binary files a/Productos/__pycache__/serializers.cpython-38.pyc and b/Productos/__pycache__/serializers.cpython-38.pyc differ diff --git a/Productos/__pycache__/urls.cpython-38.pyc b/Productos/__pycache__/urls.cpython-38.pyc index e7d36ca..ede85fb 100644 Binary files a/Productos/__pycache__/urls.cpython-38.pyc and b/Productos/__pycache__/urls.cpython-38.pyc differ diff --git a/Productos/__pycache__/views.cpython-38.pyc b/Productos/__pycache__/views.cpython-38.pyc index a696ef1..2782775 100644 Binary files a/Productos/__pycache__/views.cpython-38.pyc and b/Productos/__pycache__/views.cpython-38.pyc differ diff --git a/Productos/migrations/__pycache__/0001_initial.cpython-38.pyc b/Productos/migrations/__pycache__/0001_initial.cpython-38.pyc index a8fb162..5e7c465 100644 Binary files a/Productos/migrations/__pycache__/0001_initial.cpython-38.pyc and b/Productos/migrations/__pycache__/0001_initial.cpython-38.pyc differ diff --git a/Productos/migrations/__pycache__/0002_auto_20210916_1521.cpython-38.pyc b/Productos/migrations/__pycache__/0002_auto_20210916_1521.cpython-38.pyc index 0dcf924..03f836a 100644 Binary files a/Productos/migrations/__pycache__/0002_auto_20210916_1521.cpython-38.pyc and b/Productos/migrations/__pycache__/0002_auto_20210916_1521.cpython-38.pyc differ diff --git a/Productos/migrations/__pycache__/__init__.cpython-38.pyc b/Productos/migrations/__pycache__/__init__.cpython-38.pyc index fb60fc5..4474c1a 100644 Binary files a/Productos/migrations/__pycache__/__init__.cpython-38.pyc and b/Productos/migrations/__pycache__/__init__.cpython-38.pyc differ diff --git a/checkout_80159226/__init__.py b/checkout_80159226/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/checkout_80159226/__pycache__/__init__.cpython-38.pyc b/checkout_80159226/__pycache__/__init__.cpython-38.pyc new file mode 100644 index 0000000..43b141a Binary files /dev/null and b/checkout_80159226/__pycache__/__init__.cpython-38.pyc differ diff --git a/checkout_80159226/__pycache__/admin.cpython-38.pyc b/checkout_80159226/__pycache__/admin.cpython-38.pyc new file mode 100644 index 0000000..398e841 Binary files /dev/null and b/checkout_80159226/__pycache__/admin.cpython-38.pyc differ diff --git a/checkout_80159226/__pycache__/apps.cpython-38.pyc b/checkout_80159226/__pycache__/apps.cpython-38.pyc new file mode 100644 index 0000000..44ba71d Binary files /dev/null and b/checkout_80159226/__pycache__/apps.cpython-38.pyc differ diff --git a/checkout_80159226/__pycache__/models.cpython-38.pyc b/checkout_80159226/__pycache__/models.cpython-38.pyc new file mode 100644 index 0000000..2591090 Binary files /dev/null and b/checkout_80159226/__pycache__/models.cpython-38.pyc differ diff --git a/checkout_80159226/__pycache__/serializers.cpython-38.pyc b/checkout_80159226/__pycache__/serializers.cpython-38.pyc new file mode 100644 index 0000000..1c158be Binary files /dev/null and b/checkout_80159226/__pycache__/serializers.cpython-38.pyc differ diff --git a/checkout_80159226/__pycache__/urls.cpython-38.pyc b/checkout_80159226/__pycache__/urls.cpython-38.pyc new file mode 100644 index 0000000..37f72e5 Binary files /dev/null and b/checkout_80159226/__pycache__/urls.cpython-38.pyc differ diff --git a/checkout_80159226/__pycache__/views.cpython-38.pyc b/checkout_80159226/__pycache__/views.cpython-38.pyc new file mode 100644 index 0000000..205a8b6 Binary files /dev/null and b/checkout_80159226/__pycache__/views.cpython-38.pyc differ diff --git a/checkout_80159226/admin.py b/checkout_80159226/admin.py new file mode 100644 index 0000000..1a762fb --- /dev/null +++ b/checkout_80159226/admin.py @@ -0,0 +1,6 @@ +from django.contrib import admin + +from .models import * +admin.site.register(CarritoCompras) +admin.site.register(Articulo) +admin.site.register(InfoEnvio) diff --git a/checkout_80159226/apps.py b/checkout_80159226/apps.py new file mode 100644 index 0000000..670b6ae --- /dev/null +++ b/checkout_80159226/apps.py @@ -0,0 +1,6 @@ +from django.apps import AppConfig + + +class Checkout80159226Config(AppConfig): + default_auto_field = 'django.db.models.BigAutoField' + name = 'checkout_80159226' diff --git a/checkout_80159226/migrations/0001_initial.py b/checkout_80159226/migrations/0001_initial.py new file mode 100644 index 0000000..d9b48c7 --- /dev/null +++ b/checkout_80159226/migrations/0001_initial.py @@ -0,0 +1,49 @@ +# Generated by Django 3.2.7 on 2021-09-22 00:52 + +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + initial = True + + dependencies = [ + ('Productos', '0002_auto_20210916_1521'), + ] + + operations = [ + migrations.CreateModel( + name='CarritoCompras', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('usuario', models.CharField(max_length=200)), + ('fecha', models.DateField(auto_now_add=True)), + ('dcto', models.FloatField(default=0)), + ('cantMinima', models.IntegerField(default=0)), + ('pagado', models.BooleanField(default=False)), + ], + ), + migrations.CreateModel( + name='InfoEnvio', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('nombres', models.CharField(max_length=200)), + ('apellidos', models.CharField(max_length=200)), + ('direccion', models.CharField(max_length=200)), + ('pais', models.CharField(max_length=200)), + ('departamento', models.CharField(max_length=200)), + ('ciudad', models.CharField(max_length=200)), + ('carrito', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='checkout_80159226.carritocompras')), + ], + ), + migrations.CreateModel( + name='Articulo', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('cantidad', models.IntegerField(default=0)), + ('carrito', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='checkout_80159226.carritocompras')), + ('producto', models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, to='Productos.producto')), + ], + ), + ] diff --git a/checkout_80159226/migrations/__init__.py b/checkout_80159226/migrations/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/checkout_80159226/migrations/__pycache__/0001_initial.cpython-38.pyc b/checkout_80159226/migrations/__pycache__/0001_initial.cpython-38.pyc new file mode 100644 index 0000000..c550ec2 Binary files /dev/null and b/checkout_80159226/migrations/__pycache__/0001_initial.cpython-38.pyc differ diff --git a/checkout_80159226/migrations/__pycache__/__init__.cpython-38.pyc b/checkout_80159226/migrations/__pycache__/__init__.cpython-38.pyc new file mode 100644 index 0000000..1805547 Binary files /dev/null and b/checkout_80159226/migrations/__pycache__/__init__.cpython-38.pyc differ diff --git a/checkout_80159226/models.py b/checkout_80159226/models.py new file mode 100644 index 0000000..cb6fd3c --- /dev/null +++ b/checkout_80159226/models.py @@ -0,0 +1,57 @@ +from django.db import models +from django.contrib.auth import get_user_model +#SE DEDE IMPORTAR LA CLASE PRODUCTO +# PORQUE ASI LO INDICA EL MODELO UML + +from Productos.models import Producto + +class CarritoCompras(models.Model): +#ATRIBUTOS + usuario = models.CharField(max_length=200) + fecha = models.DateField(auto_now_add=True) + dcto= models.FloatField(default=0) + cantMinima= models.IntegerField(default=0) + pagado = models.BooleanField(default=False) + +#METODOS + + def __str__(self): + return self.usuario + " - " + str(self.fecha) + + @property + def total(self): + total=0 + articulos = Articulo.objects.filter(carrito=self) + for articulo in articulos: + total += articulo.subtotal() + return total + + + + def numArt(self): + articulos= Articulo.objects.filter(carrito=self) + return len(articulos) + +class InfoEnvio(models.Model): + carrito = models.ForeignKey(CarritoCompras, on_delete=models.CASCADE) + nombres= models.CharField(max_length=200) + apellidos= models.CharField(max_length=200) + direccion= models.CharField(max_length=200) + pais= models.CharField(max_length=200) + departamento= models.CharField(max_length=200) + ciudad= models.CharField(max_length=200) + + def __str__(self): + return self.carrito.__str__() + +class Articulo(models.Model): + carrito = models.ForeignKey(CarritoCompras, on_delete=models.CASCADE) + producto= models.ForeignKey(Producto, on_delete=models.SET_NULL, null=True) #Se hace esta confifiguracicion porque es una relacion tio asociacion + cantidad = models.IntegerField(default=0) + + def __str__(self): + return self.carrito.__str__() + " / " + self.producto.__str__() + + def subtotal(self): +#Subtotal = precioUnitario*Cantidad + return self.producto.precio * self.cantidad \ No newline at end of file diff --git a/checkout_80159226/serializers.py b/checkout_80159226/serializers.py new file mode 100644 index 0000000..4851e59 --- /dev/null +++ b/checkout_80159226/serializers.py @@ -0,0 +1,18 @@ +from rest_framework import serializers + +from .models import * + +class CarritoSerial(serializers.ModelSerializer): + class Meta: + model = CarritoCompras + fields= "__all__" + +class InfoSerial(serializers.ModelSerializer): + class Meta: + model = InfoEnvio + fields= "__all__" + +class ArticuloSerial(serializers.ModelSerializer): + class Meta: + model = Articulo + fields= "__all__" \ No newline at end of file diff --git a/checkout_80159226/tests.py b/checkout_80159226/tests.py new file mode 100644 index 0000000..7ce503c --- /dev/null +++ b/checkout_80159226/tests.py @@ -0,0 +1,3 @@ +from django.test import TestCase + +# Create your tests here. diff --git a/checkout_80159226/urls.py b/checkout_80159226/urls.py new file mode 100644 index 0000000..c1156f2 --- /dev/null +++ b/checkout_80159226/urls.py @@ -0,0 +1,13 @@ +from django.urls import path, include + +from rest_framework.routers import DefaultRouter + +#viesets trabajan las direcciones internas con Routers + +from .views import * +router = DefaultRouter() +router.register("carrito", CarritoComprasAPI, basename="carrito") +router.register("articulos", ArticulosAPI,basename="articulos") +urlpatterns =[ + path("crud/", include(router.urls)) +] diff --git a/checkout_80159226/views.py b/checkout_80159226/views.py new file mode 100644 index 0000000..cdbb6b8 --- /dev/null +++ b/checkout_80159226/views.py @@ -0,0 +1,73 @@ +from rest_framework import viewsets +from rest_framework.response import Response +from rest_framework.status import HTTP_400_BAD_REQUEST +from django.shortcuts import get_object_or_404 + +from .serializers import * + + +class CarritoComprasAPI(viewsets.ViewSet): + def list (self, request): #lista una serie de componentes de la base de datos + # request peticiones de usuario (GET, POST) + carritos = CarritoCompras.objects.all() + serializador = CarritoSerial(carritos, many=True) + return Response(serializador.data) + + def create (self, request): + + #nuevoCarritos = CarritoCompras.objects.create(usuario = request.data["usuario"], dcto=request.data["dcto"], cantMinima=request.data["cantMinima"]) + + serialCarrito = CarritoSerial(data=request.data) + if serialCarrito.is_valid(): + serialCarrito.save() + return Response({"Exito": True}) + return Response(serialCarrito.errors) + + def retrieve(selfself, request, pk=None): +#pk primary key es decir argumento que permite indentificar u obtener +#retrieve enviar la informacion de uno o varios objetos + carritosUsuarios = CarritoCompras.objects.filter(usuario=pk) + carritoS= CarritoSerial(carritosUsuarios, many= True) + return Response(carritoS.data) + + def partial_update(self, request, pk=None): + carrito = get_object_or_404(CarritoCompras, pk=pk) + data = {'pagado': True} + serializer = CarritoSerial(carrito, data, partial=True) + if serializer.is_valid(): + serializer.save() + return Response({'update': True}) + return Response(serializer.errors, HTTP_400_BAD_REQUEST) + + +class ArticulosAPI(viewsets.ViewSet): + def list(self, request): + articulos = Articulo.objects.all() + serializador = ArticuloSerial(articulos, many=True) + return Response(serializador.data) + + def create(self, request): + serializadorArticulo = ArticuloSerial(data=request.data) + if serializadorArticulo.is_valid(): + serializadorArticulo.save() + return Response({"Exito":True}) + return Response(serializadorArticulo.errors) + + def retrieve(self, request, pk= None): + articulos= Articulo.objects.get(pk=pk) + serializador= ArticuloSerial(articulos) + return Response(serializador.data) + + + def partial_update(self, request, pk=None): + artModificar = Articulo.objects.get(pk=pk) + serializador=ArticuloSerial(artModificar, request.data, partial= True) + if serializador.is_valid(): + serializador.save() + return Response({"Actualizado":True}) + return Response (serializador.errors) + + def destroy(self, request, pk=None): + pass + + diff --git a/db.sqlite3 b/db.sqlite3 deleted file mode 100644 index 65d1360..0000000 Binary files a/db.sqlite3 and /dev/null differ