diff --git a/Checkout_79495131/__init__.py b/Checkout_79495131/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/Checkout_79495131/__pycache__/__init__.cpython-39.pyc b/Checkout_79495131/__pycache__/__init__.cpython-39.pyc new file mode 100644 index 0000000..31412a7 Binary files /dev/null and b/Checkout_79495131/__pycache__/__init__.cpython-39.pyc differ diff --git a/Checkout_79495131/__pycache__/admin.cpython-39.pyc b/Checkout_79495131/__pycache__/admin.cpython-39.pyc new file mode 100644 index 0000000..a54c437 Binary files /dev/null and b/Checkout_79495131/__pycache__/admin.cpython-39.pyc differ diff --git a/Checkout_79495131/__pycache__/apps.cpython-39.pyc b/Checkout_79495131/__pycache__/apps.cpython-39.pyc new file mode 100644 index 0000000..da38cc2 Binary files /dev/null and b/Checkout_79495131/__pycache__/apps.cpython-39.pyc differ diff --git a/Checkout_79495131/__pycache__/models.cpython-39.pyc b/Checkout_79495131/__pycache__/models.cpython-39.pyc new file mode 100644 index 0000000..103aa7f Binary files /dev/null and b/Checkout_79495131/__pycache__/models.cpython-39.pyc differ diff --git a/Checkout_79495131/__pycache__/serializers.cpython-39.pyc b/Checkout_79495131/__pycache__/serializers.cpython-39.pyc new file mode 100644 index 0000000..a709c79 Binary files /dev/null and b/Checkout_79495131/__pycache__/serializers.cpython-39.pyc differ diff --git a/Checkout_79495131/__pycache__/urls.cpython-39.pyc b/Checkout_79495131/__pycache__/urls.cpython-39.pyc new file mode 100644 index 0000000..173657b Binary files /dev/null and b/Checkout_79495131/__pycache__/urls.cpython-39.pyc differ diff --git a/Checkout_79495131/__pycache__/views.cpython-39.pyc b/Checkout_79495131/__pycache__/views.cpython-39.pyc new file mode 100644 index 0000000..01d40fe Binary files /dev/null and b/Checkout_79495131/__pycache__/views.cpython-39.pyc differ diff --git a/Checkout_79495131/admin.py b/Checkout_79495131/admin.py new file mode 100644 index 0000000..05d44d9 --- /dev/null +++ b/Checkout_79495131/admin.py @@ -0,0 +1,7 @@ +from django.contrib import admin + +from Checkout_79495131.models import * + +admin.site.register(CarritoCompra) +admin.site.register(InfoEnvio) +admin.site.register(Articulo) \ No newline at end of file diff --git a/Checkout_79495131/apps.py b/Checkout_79495131/apps.py new file mode 100644 index 0000000..4e1f258 --- /dev/null +++ b/Checkout_79495131/apps.py @@ -0,0 +1,6 @@ +from django.apps import AppConfig + + +class Checkout79495131Config(AppConfig): + default_auto_field = 'django.db.models.BigAutoField' + name = 'Checkout_79495131' diff --git a/Checkout_79495131/migrations/0001_initial.py b/Checkout_79495131/migrations/0001_initial.py new file mode 100644 index 0000000..66acae5 --- /dev/null +++ b/Checkout_79495131/migrations/0001_initial.py @@ -0,0 +1,49 @@ +# Generated by Django 3.2.7 on 2021-09-21 19:31 + +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + initial = True + + dependencies = [ + ('Productos', '0001_initial'), + ] + + operations = [ + migrations.CreateModel( + name='CarritoCompra', + 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')), + ('nombre', models.CharField(max_length=80)), + ('apellido', models.CharField(max_length=80)), + ('direccion', models.CharField(max_length=200)), + ('pais', models.CharField(max_length=50)), + ('departamento', models.CharField(max_length=50)), + ('ciudad', models.CharField(max_length=50)), + ('carrito', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='Checkout_79495131.carritocompra')), + ], + ), + 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_79495131.carritocompra')), + ('producto', models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, to='Productos.producto')), + ], + ), + ] diff --git a/Checkout_79495131/migrations/0002_alter_carritocompra_fecha.py b/Checkout_79495131/migrations/0002_alter_carritocompra_fecha.py new file mode 100644 index 0000000..1b8e3be --- /dev/null +++ b/Checkout_79495131/migrations/0002_alter_carritocompra_fecha.py @@ -0,0 +1,18 @@ +# Generated by Django 3.2.7 on 2021-09-21 20:23 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('Checkout_79495131', '0001_initial'), + ] + + operations = [ + migrations.AlterField( + model_name='carritocompra', + name='fecha', + field=models.DateTimeField(auto_now_add=True), + ), + ] diff --git a/Checkout_79495131/migrations/__init__.py b/Checkout_79495131/migrations/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/Checkout_79495131/migrations/__pycache__/0001_initial.cpython-39.pyc b/Checkout_79495131/migrations/__pycache__/0001_initial.cpython-39.pyc new file mode 100644 index 0000000..20cc8f7 Binary files /dev/null and b/Checkout_79495131/migrations/__pycache__/0001_initial.cpython-39.pyc differ diff --git a/Checkout_79495131/migrations/__pycache__/0002_alter_carritocompra_fecha.cpython-39.pyc b/Checkout_79495131/migrations/__pycache__/0002_alter_carritocompra_fecha.cpython-39.pyc new file mode 100644 index 0000000..cf30415 Binary files /dev/null and b/Checkout_79495131/migrations/__pycache__/0002_alter_carritocompra_fecha.cpython-39.pyc differ diff --git a/Checkout_79495131/migrations/__pycache__/__init__.cpython-39.pyc b/Checkout_79495131/migrations/__pycache__/__init__.cpython-39.pyc new file mode 100644 index 0000000..597bbf4 Binary files /dev/null and b/Checkout_79495131/migrations/__pycache__/__init__.cpython-39.pyc differ diff --git a/Checkout_79495131/models.py b/Checkout_79495131/models.py new file mode 100644 index 0000000..7b77a91 --- /dev/null +++ b/Checkout_79495131/models.py @@ -0,0 +1,43 @@ +from Productos.models import Producto +from django.db import models + +class CarritoCompra(models.Model): + usuario = models.CharField(max_length=200) + fecha = models.DateTimeField(auto_now_add=True) + dcto = models.FloatField(default=0) + cantMinima = models.IntegerField(default=0) + pagado = models.BooleanField(default=False) + + def __str__(self): + return self.usuario + '-' + str(self.fecha) + + def total(self) -> float: + pass + + def numArt(self) -> int: + pass + + + +class InfoEnvio(models.Model): + carrito = models.ForeignKey(CarritoCompra, on_delete=models.CASCADE) + nombre = models.CharField(max_length=80) + apellido = models.CharField(max_length=80) + direccion = models.CharField(max_length=200) + pais = models.CharField(max_length=50) + departamento = models.CharField(max_length=50) + ciudad = models.CharField(max_length=50) + + def __str__(self): + return self.carrito.__str__() + +class Articulo(models.Model): + carrito = models.ForeignKey(CarritoCompra, 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) -> float: + return self.cantidad * self.producto.precio \ No newline at end of file diff --git a/Checkout_79495131/serializers.py b/Checkout_79495131/serializers.py new file mode 100644 index 0000000..8bfe0b0 --- /dev/null +++ b/Checkout_79495131/serializers.py @@ -0,0 +1,23 @@ +from rest_framework import serializers + +from .models import CarritoCompra, InfoEnvio, Articulo + +from Checkout_79495131.models import CarritoCompra + + +class CarritoSerial(serializers.ModelSerializer): + class Meta: + model = CarritoCompra + fields = '__all__' + + +class InfoEnvioSerial(serializers.ModelSerializer): + class Meta: + model = InfoEnvio + fields = '__all__' + + +class ArticuloSerial(serializers.ModelSerializer): + class Meta: + model = Articulo + fields = '__all__' diff --git a/Checkout_79495131/tests.py b/Checkout_79495131/tests.py new file mode 100644 index 0000000..7ce503c --- /dev/null +++ b/Checkout_79495131/tests.py @@ -0,0 +1,3 @@ +from django.test import TestCase + +# Create your tests here. diff --git a/Checkout_79495131/urls.py b/Checkout_79495131/urls.py new file mode 100644 index 0000000..21a38f6 --- /dev/null +++ b/Checkout_79495131/urls.py @@ -0,0 +1,18 @@ +# Contiene las dir locales de la app Checkout +from django.urls import path, include +from rest_framework.routers import DefaultRouter + +# ViewSet => especifi las rutas med 'routes' + +from .views import CarritoAPI, InfoEnvioAPI, ArticuloAPI + +router = DefaultRouter() + +router.register('carrito', CarritoAPI, basename='carrito') +router.register('infoenvio', InfoEnvioAPI, basename='infoenvio') +router.register('articulo', ArticuloAPI, basename='articulo') + +urlpatterns = [ + # lsita de dir locales + path('crud/', include(router.urls)) +] \ No newline at end of file diff --git a/Checkout_79495131/views.py b/Checkout_79495131/views.py new file mode 100644 index 0000000..9ffe551 --- /dev/null +++ b/Checkout_79495131/views.py @@ -0,0 +1,126 @@ +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 CarritoSerial, InfoEnvioSerial, ArticuloSerial +from .models import CarritoCompra, InfoEnvio, Articulo + + +class CarritoAPI(viewsets.ViewSet): + def list(self, request): + # listar infromación + # request => peticion de user. GET, POST, PUT, ... + carritos = CarritoCompra.objects.all() # obj tipo CarritoCompra + serializador = CarritoSerial(carritos, many=True) + return Response(serializador.data) + + def create(self, request) : + # crear obj en DB + # nuevoCarrito = CarritoCompra.objects.create(usuario=request.data) + serializador = CarritoCompra(data=request.data) + if serializador.is_valid(): + carrito = serializador.save() + return Response({'idCarrito':carrito.id}) + return Response(serializador.errors, HTTP_400_BAD_REQUEST) + + + def retrieve(self, request, pk=None): + # obtetner un solo reg en DB + #pk = primary key + carrito = get_object_or_404(CarritoCompra, id=pk) + seriarizador = CarritoSerial(carrito) + return Response(seriarizador.data) + + + def partial_update(self, request, pk=None): + # actualizar parcial => PATCH + carrito = get_object_or_404(CarritoCompra, pk=pk) + carrito_s = CarritoSerial(carrito, request.data, partial=True) + if carrito_s.is_valid(): + carrito_s.save() + return Response({'Actualizado':True}) + return Response(carrito_s.errors, HTTP_400_BAD_REQUEST) + + + # No recomendado para carrito de compra -- No queremos cambiar user + def update(self, request, pk=None): + # actualizar parcial => PUT + carrito = get_object_or_404(CarritoCompra, pk=pk) + carrito_s = CarritoSerial(carrito, request.data, partial=False) + if carrito_s.is_valid(): + carrito_s.save() + return Response({'Actualizado':True}) + return Response(carrito_s.errors) + + + def destroy(self, request, pk=None): + # borramos elementos en DB + carrito = CarritoCompra.objects.get(pk) + carrito.delete() + return Response({'Objeto borrado':True}) + + +# def retrive(self, request, pk=None): +# return Response(pk) + + +class ArticuloAPI(viewsets.ViewSet): + def list(self, request): + articulo = Articulo.objects.all() + serializer = ArticuloSerial(articulo, many=True) + return Response(serializer.data) + + + def create(self, request): + serializer = Articulo(data=request.data) + if serializer.is_valid(): + serializer.save() + return Response({'Arituculo creado':True}) + return Response(serializer.errors, HTTP_400_BAD_REQUEST) + + +class InfoEnvioAPI(viewsets.ViewSet): + def list(self, request): + info_envio = InfoEnvio.objects.all() + serializer = InfoEnvioSerial(info_envio, many=True) + return Response(serializer.data) + + + def create(self, request): + serializer = InfoEnvio(data=request.data) + if serializer.is_valid(): + info_e = serializer.save() + return Response({'Envio Creado': True, 'infoId':info_e.id}) + return Response(serializer.errors, HTTP_400_BAD_REQUEST) + + + def retrieve(self, request, pk=None): + info_envio = get_object_or_404(InfoEnvio, id=pk) + seriarizer = InfoEnvioSerial(info_envio) + return Response(seriarizer.data) + + + def partial_update(self, request, pk=None): + # actualizar parcial => PATCH + info_envio = get_object_or_404(InfoEnvio, pk=pk) + info_envio_s = InfoEnvioSerial(info_envio, request.data, partial=True) + if info_envio_s.is_valid(): + info_envio_s.save() + return Response({'Info Envio Actualizado':True}) + return Response(info_envio_s.errors) + + + def destroy(self, request, pk=None): + # borramos elementos en DB + info_envio = InfoEnvio.objects.get(pk) + info_envio.delete() + return Response({'Info envio Borrado':True}) + + + +''' +class CarritoAPI(viewsets.ModelViewSet): + serializer_class = CarritoSerial + queryset = CarritoCompra.objects.all() +''' \ No newline at end of file diff --git a/ExEcommerce/__pycache__/__init__.cpython-39.pyc b/ExEcommerce/__pycache__/__init__.cpython-39.pyc new file mode 100644 index 0000000..a03d438 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..e60e9f2 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..a9cb73b 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..462d562 Binary files /dev/null and b/ExEcommerce/__pycache__/wsgi.cpython-39.pyc differ diff --git a/ExEcommerce/urls.py b/ExEcommerce/urls.py index 3b6ef59..92b8339 100644 --- a/ExEcommerce/urls.py +++ b/ExEcommerce/urls.py @@ -5,4 +5,5 @@ path('admin/', admin.site.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..8ce6d9d 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..040b138 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..1dc90b3 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..2e976a6 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..938a850 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..9458d9e 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..2c977eb Binary files /dev/null and b/Productos/__pycache__/views.cpython-39.pyc differ diff --git a/Productos/migrations/0001_initial.py b/Productos/migrations/0001_initial.py index df81460..0e07a1c 100644 --- a/Productos/migrations/0001_initial.py +++ b/Productos/migrations/0001_initial.py @@ -1,4 +1,4 @@ -# Generated by Django 3.0.8 on 2021-09-16 20:14 +# Generated by Django 3.2.7 on 2021-09-21 19:31 from django.db import migrations, models import django.db.models.deletion @@ -29,7 +29,9 @@ class Migration(migrations.Migration): ('descripcion', models.TextField()), ('foto', models.ImageField(blank=True, null=True, upload_to='')), ('calificacion', models.FloatField(default=0)), - ('tipo', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='Productos.TipoElectrodomestico')), + ('marca', models.CharField(default='', max_length=20)), + ('ref', models.CharField(default='', max_length=100)), + ('tipo', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='Productos.tipoelectrodomestico')), ], ), migrations.CreateModel( @@ -40,7 +42,7 @@ class Migration(migrations.Migration): ('calificacion', models.FloatField()), ('fecha', models.DateField(auto_now_add=True)), ('contenido', models.TextField()), - ('producto', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='Productos.Producto')), + ('producto', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='Productos.producto')), ], ), ] diff --git a/Productos/migrations/0002_auto_20210916_1521.py b/Productos/migrations/0002_auto_20210916_1521.py deleted file mode 100644 index 096fe8a..0000000 --- a/Productos/migrations/0002_auto_20210916_1521.py +++ /dev/null @@ -1,23 +0,0 @@ -# Generated by Django 3.0.8 on 2021-09-16 20:21 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('Productos', '0001_initial'), - ] - - operations = [ - migrations.AddField( - model_name='producto', - name='marca', - field=models.CharField(default='', max_length=20), - ), - migrations.AddField( - model_name='producto', - name='ref', - field=models.CharField(default='', max_length=100), - ), - ] 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..dfc5c5d 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..f3ec552 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..8d6bfba Binary files /dev/null and b/Productos/migrations/__pycache__/__init__.cpython-39.pyc differ diff --git a/Productos/models.py b/Productos/models.py index 9fc5246..335ff9a 100644 --- a/Productos/models.py +++ b/Productos/models.py @@ -3,7 +3,7 @@ # Create your models here. class TipoElectrodomestico(models.Model): nombre = models.CharField(max_length=200) - foto = models.ImageField(null =True, blank=True) + foto = models.ImageField(null=True, blank=True) def __str__(self): #Identificar un objeto