diff --git a/Checkout/__init__.py b/Checkout/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/Checkout/__pycache__/__init__.cpython-39.pyc b/Checkout/__pycache__/__init__.cpython-39.pyc new file mode 100644 index 0000000..581fc09 Binary files /dev/null and b/Checkout/__pycache__/__init__.cpython-39.pyc differ diff --git a/Checkout/__pycache__/admin.cpython-39.pyc b/Checkout/__pycache__/admin.cpython-39.pyc new file mode 100644 index 0000000..bf51c28 Binary files /dev/null and b/Checkout/__pycache__/admin.cpython-39.pyc differ diff --git a/Checkout/__pycache__/apps.cpython-39.pyc b/Checkout/__pycache__/apps.cpython-39.pyc new file mode 100644 index 0000000..01f0d07 Binary files /dev/null and b/Checkout/__pycache__/apps.cpython-39.pyc differ diff --git a/Checkout/__pycache__/models.cpython-39.pyc b/Checkout/__pycache__/models.cpython-39.pyc new file mode 100644 index 0000000..cc203a1 Binary files /dev/null and b/Checkout/__pycache__/models.cpython-39.pyc differ diff --git a/Checkout/__pycache__/serializers.cpython-39.pyc b/Checkout/__pycache__/serializers.cpython-39.pyc new file mode 100644 index 0000000..58c6621 Binary files /dev/null and b/Checkout/__pycache__/serializers.cpython-39.pyc differ diff --git a/Checkout/__pycache__/urls.cpython-39.pyc b/Checkout/__pycache__/urls.cpython-39.pyc new file mode 100644 index 0000000..7df4129 Binary files /dev/null and b/Checkout/__pycache__/urls.cpython-39.pyc differ diff --git a/Checkout/__pycache__/views.cpython-39.pyc b/Checkout/__pycache__/views.cpython-39.pyc new file mode 100644 index 0000000..6ed5dfc Binary files /dev/null and b/Checkout/__pycache__/views.cpython-39.pyc differ diff --git a/Checkout/admin.py b/Checkout/admin.py new file mode 100644 index 0000000..e2fb3f1 --- /dev/null +++ b/Checkout/admin.py @@ -0,0 +1,7 @@ +from Checkout.models import Articulo, CarritoCompras, InfoEnvio +from django.contrib import admin + +# Register your models here. +admin.site.register(CarritoCompras) +admin.site.register(Articulo) +admin.site.register(InfoEnvio) \ No newline at end of file diff --git a/Checkout/apps.py b/Checkout/apps.py new file mode 100644 index 0000000..cce6160 --- /dev/null +++ b/Checkout/apps.py @@ -0,0 +1,6 @@ +from django.apps import AppConfig + + +class CheckoutConfig(AppConfig): + default_auto_field = 'django.db.models.BigAutoField' + name = 'Checkout' diff --git a/Checkout/migrations/0001_initial.py b/Checkout/migrations/0001_initial.py new file mode 100644 index 0000000..80bda63 --- /dev/null +++ b/Checkout/migrations/0001_initial.py @@ -0,0 +1,48 @@ +# Generated by Django 3.2.7 on 2021-09-20 20:47 + +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=30)), + ('fecha', models.DateField(auto_now=True)), + ('dcto', models.FloatField()), + ('cantMinima', models.IntegerField()), + ('pagado', models.BooleanField(default=False)), + ], + ), + migrations.CreateModel( + name='InfoEnvio', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('nombre', models.CharField(max_length=30)), + ('apellido', models.CharField(max_length=30)), + ('pais', models.CharField(max_length=30)), + ('departamento', models.CharField(max_length=30)), + ('ciudad', models.CharField(max_length=30)), + ('carrito', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='Checkout.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.carritocompras')), + ('producto', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='Productos.producto')), + ], + ), + ] diff --git a/Checkout/migrations/0002_auto_20210921_1544.py b/Checkout/migrations/0002_auto_20210921_1544.py new file mode 100644 index 0000000..41a9f34 --- /dev/null +++ b/Checkout/migrations/0002_auto_20210921_1544.py @@ -0,0 +1,60 @@ +# Generated by Django 3.2.7 on 2021-09-21 20:44 + +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ('Productos', '0002_auto_20210916_1521'), + ('Checkout', '0001_initial'), + ] + + operations = [ + migrations.AlterField( + model_name='articulo', + name='producto', + field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, to='Productos.producto'), + ), + migrations.AlterField( + model_name='carritocompras', + name='cantMinima', + field=models.IntegerField(default=0), + ), + migrations.AlterField( + model_name='carritocompras', + name='fecha', + field=models.DateTimeField(auto_now_add=True), + ), + migrations.AlterField( + model_name='carritocompras', + name='usuario', + field=models.CharField(max_length=200), + ), + migrations.AlterField( + model_name='infoenvio', + name='apellido', + field=models.CharField(max_length=200), + ), + migrations.AlterField( + model_name='infoenvio', + name='ciudad', + field=models.CharField(max_length=200), + ), + migrations.AlterField( + model_name='infoenvio', + name='departamento', + field=models.CharField(max_length=200), + ), + migrations.AlterField( + model_name='infoenvio', + name='nombre', + field=models.CharField(max_length=200), + ), + migrations.AlterField( + model_name='infoenvio', + name='pais', + field=models.CharField(max_length=200), + ), + ] diff --git a/Checkout/migrations/__init__.py b/Checkout/migrations/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/Checkout/migrations/__pycache__/0001_initial.cpython-39.pyc b/Checkout/migrations/__pycache__/0001_initial.cpython-39.pyc new file mode 100644 index 0000000..621eb89 Binary files /dev/null and b/Checkout/migrations/__pycache__/0001_initial.cpython-39.pyc differ diff --git a/Checkout/migrations/__pycache__/0002_auto_20210921_1544.cpython-39.pyc b/Checkout/migrations/__pycache__/0002_auto_20210921_1544.cpython-39.pyc new file mode 100644 index 0000000..e31b956 Binary files /dev/null and b/Checkout/migrations/__pycache__/0002_auto_20210921_1544.cpython-39.pyc differ diff --git a/Checkout/migrations/__pycache__/__init__.cpython-39.pyc b/Checkout/migrations/__pycache__/__init__.cpython-39.pyc new file mode 100644 index 0000000..cce7455 Binary files /dev/null and b/Checkout/migrations/__pycache__/__init__.cpython-39.pyc differ diff --git a/Checkout/models.py b/Checkout/models.py new file mode 100644 index 0000000..0112714 --- /dev/null +++ b/Checkout/models.py @@ -0,0 +1,46 @@ +from Productos.models import Producto +from django.db import models +from django.db.models.fields import BooleanField, CharField, IntegerField +from django.db.models.fields.related import ForeignKey + +# Create your models here. +class CarritoCompras(models.Model): + usuario = models.CharField(max_length=200) + fecha = models.DateTimeField(auto_now_add=True) + dcto = models.FloatField() + cantMinima = models.IntegerField(default=0) + pagado = models.BooleanField(default=False) + + def __str__(self): + return self.usuario + " - " + str(self.fecha) + + def total(self): + pass + + def numArt(self): + pass + +class Articulo(models.Model): + carrito = models.ForeignKey(CarritoCompras, on_delete=models.CASCADE) + producto = models.ForeignKey(Producto, on_delete=models.SET_NULL, null=True) + cantidad = models.IntegerField(default=0) + + def __str__(self): + return self.carrito.__str__() + " / " + self.producto.__str__() + + + def subtotal(self): # => precio unitario * cantidad + return self.cantidad*self.producto.precio + +class InfoEnvio(models.Model): + carrito = models.ForeignKey(CarritoCompras, on_delete=models.CASCADE) + nombre = models.CharField(max_length=200) + apellido = 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__() + + diff --git a/Checkout/serializers.py b/Checkout/serializers.py new file mode 100644 index 0000000..afb35b9 --- /dev/null +++ b/Checkout/serializers.py @@ -0,0 +1,19 @@ +from django.db.models import fields +from rest_framework import serializers + +from .models import * # => from checkout.models import * + +class CarritoSerial(serializers.ModelSerializer): + class Meta: + model= CarritoCompras + fields = '__all__' + +class ArticuloSerial(serializers.ModelSerializer): + class Meta: + model = Articulo + fields = '__all__' + +class InfoEnvioSerial(serializers.ModelSerializer): + class Meta: + model = InfoEnvio + fields = '__all__' \ No newline at end of file diff --git a/Checkout/tests.py b/Checkout/tests.py new file mode 100644 index 0000000..7ce503c --- /dev/null +++ b/Checkout/tests.py @@ -0,0 +1,3 @@ +from django.test import TestCase + +# Create your tests here. diff --git a/Checkout/urls.py b/Checkout/urls.py new file mode 100644 index 0000000..6af3c96 --- /dev/null +++ b/Checkout/urls.py @@ -0,0 +1,16 @@ +from django.urls import path, include +from rest_framework import urlpatterns +from rest_framework.routers import DefaultRouter +from .views import * +# Viewset => especificamos las rutas mediante 'routers' + +router = DefaultRouter() #> agregamos las direccines de nuestros viewsets + +router.register('carrito', CarritoAPI, basename="carrito") +router.register('articulo', ArticuloAPI, basename="articulo") +router.register('infoEnvio', InfoEnvioAPI, basename="infoEnvio") + +urlpatterns = [ + #Lista de direcciones locales + path('crud/', include(router.urls)) +] diff --git a/Checkout/views.py b/Checkout/views.py new file mode 100644 index 0000000..4a33b87 --- /dev/null +++ b/Checkout/views.py @@ -0,0 +1,152 @@ +from django.shortcuts import render +from rest_framework import viewsets +from rest_framework.response import Response +from django.shortcuts import get_object_or_404 +from .serializers import * + +# Create your views here. + +class CarritoAPI(viewsets.ViewSet): + def list(self, request): + #Listar Informacion + #request => peticion de usuarios. GET, POST, PUT, ... + carritos = CarritoCompras.objects.all() + serializador = CarritoSerial(carritos, many = True) + return Response(serializador.data) + + + def create(self, request): + # Crear registros en bases de datos + #nuevoCarrito = CarritoCompras.objects.create(usuario=request.data["usuario"]) + serializador = CarritoSerial(data=request.data) + if serializador.is_valid(): + serializador.save() #Grauda el nuevo objeto + return Response({"Exito":True}) #Creo el objeto + return Response(serializador.errors) + + + def retrieve(self, request, pk=None): + #Obtener un solo registro de la base de datos + #pk => Primary key + carrito = get_object_or_404(CarritoCompras, pk = pk) + serializador = CarritoSerial(carrito) + return Response(serializador.data) + + def partial_update(self, request, pk=None): + #Actualización parcial => PATCH + carrito = get_object_or_404(CarritoCompras, pk=pk) + carritoS = CarritoSerial(carrito, request.data, partial=True) + if carritoS.is_valid(): + carritoS.save() + return Response("Actualizado") + return Response(carritoS.errors) + + def update(self, request, pk=None): + #Actualiza registros => PUT + carrito = get_object_or_404(CarritoCompras, pk=pk) + carritoS = CarritoSerial(carrito, request.data) + if carritoS.is_valid(): + carritoS.save() + return Response("Actualizado") + return Response(carritoS.errors) + + + def destroy(self, request, pk=None): + #borramos elementos en base de datos + carrito = CarritoCompras.objects.get(id=pk) + carrito.delete() + return Response({"Objeto borrado":True}) + +class ArticuloAPI(viewsets.ViewSet): + def list(self, request): + #Listar Informacion + #request => peticion de usuarios. GET, POST, PUT, ... + articulo = Articulo.objects.all() + serializador = ArticuloSerial(articulo, many = True) + return Response(serializador.data) + + def create(self, request): + # Crear registros en bases de datos + serializador = ArticuloAPI(data=request.data) + if serializador.is_valid(): + serializador.save() + return Response({"Exito":True}) + return Response(serializador.errors) + + def retrieve(self, request, pk=None): + #Obtener un solo registro de la base de datos + #pk => Primary key + articulo = get_object_or_404(Articulo, pk=pk) + serializador = ArticuloSerial(articulo) + return Response(serializador.data) + + def partial_update(self, request, pk=None): + #Actualización parcial => PATCH + carrito = get_object_or_404(Articulo, pk=pk) + articuloS = ArticuloSerial(Articulo, request.data, partial=True) + if articuloS.is_valid(): + articuloS.save() + return Response("Actualizado") + return Response(articuloS.errors) + + def update(self, request, pk=None): + #Actualiza registros => PUT + articulo = get_object_or_404(Articulo, pk=pk) + articuloS = ArticuloSerial(articulo, request.data) + if articuloS.is_valid(): + articuloS.save() + return Response("Actualizado") + return Response(articuloS.errors) + + def destroy(self, request, pk=None): + #borramos elementos en base de datos + articulo = Articulo.objects.get(id=pk) + articulo.delete() + return Response({"Objeto borrado":True}) + +class InfoEnvioAPI(viewsets.ViewSet): + def list(self, request): + #Listar Informacion + #request => peticion de usuarios. GET, POST, PUT, ... + infoEnvio = InfoEnvio.objects.all() + serializador = InfoEnvioSerial(infoEnvio, many = True) + return Response(serializador.data) + + def create(self, request): + # Crear registros en bases de datos + serializador = InfoEnvioAPI(data=request.data) + if serializador.is_valid(): + serializador.save() + return Response({"Exito":True}) + return Response(serializador.errors) + + def retrieve(self, request, pk=None): + #Obtener un solo registro de la base de datos + #pk => Primary key + infoenvio = get_object_or_404(InfoEnvio, pk=pk) + serializador = InfoEnvioSerial(InfoEnvio) + return Response(serializador.data) + + def partial_update(self, request, pk=None): + #Actualización parcial => PATCH + infoEnvio = get_object_or_404(InfoEnvio, pk=pk) + infoEnvioS = InfoEnvioSerial(infoEnvio, request.data, partial=True) + if infoEnvioS.is_valid(): + infoEnvioS.save() + return Response("Actualizado") + return Response(infoEnvioS.errors) + + def update(self, request, pk=None): + #Actualiza registros => PUT + infoEnvio = get_object_or_404(InfoEnvio, pk=pk) + infoEnvioS = InfoEnvioSerial(infoEnvio, request.data) + if infoEnvioS.is_valid(): + infoEnvioS.save() + return Response("Actualizado") + return Response(infoEnvioS.errors) + + def destroy(self, request, pk=None): + #borramos elementos en base de datos + infoEnvio = InfoEnvio.objects.get(id=pk) + infoEnvio.delete() + return Response({"Objeto borrado":True}) \ No newline at end of file diff --git a/Codifo APIS.txt b/Codifo APIS.txt new file mode 100644 index 0000000..b78a31f --- /dev/null +++ b/Codifo APIS.txt @@ -0,0 +1,25 @@ +class CarritoAPI(viewsets.ViewS +def partial_update(self, request, pk=None): + #Actualización parcial => PATCH + carrito = get_object_or_404(CarritoCompras, pk=pk) + carritoS = CarritoSerial(carrito, request.data, partial=True) + if carritoS.is_valid(): + carritoS.save() + return Response("Actualizado") + return Response(carritoS.errors) + + def update(self, request, pk=None): + #Actualiza registros => PUT + carrito = get_object_or_404(CarritoCompras, pk=pk) + carritoS = CarritoSerial(carrito, request.data) + if carritoS.is_valid(): + carritoS.save() + return Response("Actualizado") + return Response(carritoS.errors) + + + def destroy(self, request, pk=None): + #borramos elementos en base de datos + carrito = CarritoCompras.objects.get(id=pk) + carrito.delete() + return Response({"Objeto borrado":True}) diff --git a/ExEcommerce/__pycache__/__init__.cpython-39.pyc b/ExEcommerce/__pycache__/__init__.cpython-39.pyc new file mode 100644 index 0000000..f01f77a Binary files /dev/null and b/ExEcommerce/__pycache__/__init__.cpython-39.pyc differ diff --git a/ExEcommerce/__pycache__/settings.cpython-39.pyc b/ExEcommerce/__pycache__/settings.cpython-39.pyc new file mode 100644 index 0000000..47198f6 Binary files /dev/null and b/ExEcommerce/__pycache__/settings.cpython-39.pyc differ diff --git a/ExEcommerce/__pycache__/urls.cpython-39.pyc b/ExEcommerce/__pycache__/urls.cpython-39.pyc new file mode 100644 index 0000000..0b86f47 Binary files /dev/null and b/ExEcommerce/__pycache__/urls.cpython-39.pyc differ diff --git a/ExEcommerce/__pycache__/wsgi.cpython-39.pyc b/ExEcommerce/__pycache__/wsgi.cpython-39.pyc new file mode 100644 index 0000000..e8966af Binary files /dev/null and b/ExEcommerce/__pycache__/wsgi.cpython-39.pyc differ diff --git a/ExEcommerce/settings.py b/ExEcommerce/settings.py index 274e968..e680187 100644 --- a/ExEcommerce/settings.py +++ b/ExEcommerce/settings.py @@ -39,7 +39,9 @@ 'django.contrib.staticfiles', 'Productos', 'rest_framework', - 'rest_framework.authtoken' + 'rest_framework.authtoken', + 'Checkout', + ] REST_FRAMEWORK = { diff --git a/ExEcommerce/urls.py b/ExEcommerce/urls.py index a28b9fb..3b6ef59 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.urls')) ] diff --git a/Productos/__pycache__/__init__.cpython-39.pyc b/Productos/__pycache__/__init__.cpython-39.pyc new file mode 100644 index 0000000..e0f2f1e Binary files /dev/null and b/Productos/__pycache__/__init__.cpython-39.pyc differ diff --git a/Productos/__pycache__/admin.cpython-39.pyc b/Productos/__pycache__/admin.cpython-39.pyc new file mode 100644 index 0000000..7db66e0 Binary files /dev/null and b/Productos/__pycache__/admin.cpython-39.pyc differ diff --git a/Productos/__pycache__/apps.cpython-39.pyc b/Productos/__pycache__/apps.cpython-39.pyc new file mode 100644 index 0000000..5ef63a7 Binary files /dev/null and b/Productos/__pycache__/apps.cpython-39.pyc differ diff --git a/Productos/__pycache__/models.cpython-39.pyc b/Productos/__pycache__/models.cpython-39.pyc new file mode 100644 index 0000000..6da97c0 Binary files /dev/null and b/Productos/__pycache__/models.cpython-39.pyc differ diff --git a/Productos/__pycache__/serializers.cpython-39.pyc b/Productos/__pycache__/serializers.cpython-39.pyc new file mode 100644 index 0000000..a712f13 Binary files /dev/null and b/Productos/__pycache__/serializers.cpython-39.pyc differ diff --git a/Productos/__pycache__/urls.cpython-39.pyc b/Productos/__pycache__/urls.cpython-39.pyc new file mode 100644 index 0000000..2fc4741 Binary files /dev/null and b/Productos/__pycache__/urls.cpython-39.pyc differ diff --git a/Productos/__pycache__/views.cpython-39.pyc b/Productos/__pycache__/views.cpython-39.pyc new file mode 100644 index 0000000..52a6ddb Binary files /dev/null and b/Productos/__pycache__/views.cpython-39.pyc differ diff --git a/Productos/migrations/__pycache__/0001_initial.cpython-39.pyc b/Productos/migrations/__pycache__/0001_initial.cpython-39.pyc new file mode 100644 index 0000000..16da6e5 Binary files /dev/null and b/Productos/migrations/__pycache__/0001_initial.cpython-39.pyc differ diff --git a/Productos/migrations/__pycache__/0002_auto_20210916_1521.cpython-39.pyc b/Productos/migrations/__pycache__/0002_auto_20210916_1521.cpython-39.pyc new file mode 100644 index 0000000..b1817db Binary files /dev/null and b/Productos/migrations/__pycache__/0002_auto_20210916_1521.cpython-39.pyc differ diff --git a/Productos/migrations/__pycache__/__init__.cpython-39.pyc b/Productos/migrations/__pycache__/__init__.cpython-39.pyc new file mode 100644 index 0000000..fc7a145 Binary files /dev/null and b/Productos/migrations/__pycache__/__init__.cpython-39.pyc differ diff --git a/Prueba 80031230.txt b/Prueba 80031230.txt new file mode 100644 index 0000000..e69de29 diff --git a/db.sqlite3 b/db.sqlite3 index 65d1360..525f625 100644 Binary files a/db.sqlite3 and b/db.sqlite3 differ