diff --git a/src/bobvance/base/migrations/0002_order_orderproduct_product.py b/src/bobvance/base/migrations/0002_order_orderproduct_product.py new file mode 100644 index 0000000..8706d04 --- /dev/null +++ b/src/bobvance/base/migrations/0002_order_orderproduct_product.py @@ -0,0 +1,48 @@ +# Generated by Django 3.2.21 on 2023-10-04 13:15 + +import django.core.validators +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ('base', '0001_initial'), + ] + + operations = [ + migrations.CreateModel( + name='Order', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('status', models.CharField(choices=[('In_progress', 'In progress'), ('Shipped', 'Shipped'), ('Delivered', 'Delivered'), ('Cancelled', 'Cancelled')], default='In_progress', max_length=50)), + ('created_at', models.DateTimeField(auto_now_add=True)), + ('customer', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='base.customer')), + ], + ), + migrations.CreateModel( + name='Product', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('name', models.CharField(max_length=50)), + ('price', models.DecimalField(decimal_places=2, max_digits=5)), + ('description', models.TextField()), + ('image', models.ImageField(upload_to='product_img/')), + ('new', models.BooleanField(default=True)), + ], + ), + migrations.CreateModel( + name='OrderProduct', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('quantity', models.PositiveIntegerField(default=1, validators=[django.core.validators.MinValueValidator(1)])), + ('order', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='order_products', to='base.order')), + ('product', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='order_products', to='base.product')), + ], + options={ + 'ordering': ['order'], + 'unique_together': {('order', 'product')}, + }, + ), + ] diff --git a/src/bobvance/base/models.py b/src/bobvance/base/models.py index ce78b40..624324d 100644 --- a/src/bobvance/base/models.py +++ b/src/bobvance/base/models.py @@ -2,6 +2,8 @@ from phonenumber_field.modelfields import PhoneNumberField from localflavor.nl.models import NLZipCodeField +from django.core.validators import MinValueValidator + # Create your models here. class Customer(models.Model): firstname = models.CharField(max_length=50) @@ -15,3 +17,45 @@ class Customer(models.Model): def __str__(self): return f"{self.firstname} {self.lastname}" + +class Product(models.Model): + name = models.CharField(max_length=50) + price = models.DecimalField(max_digits=5, decimal_places=2) + description = models.TextField() + image = models.ImageField(upload_to='product_img/') + new = models.BooleanField(default=True) + + def __str__(self): + return self.name + +IN_PROGRESS = 'In_progress' +SHIPPED = 'Shipped' +DELIVERED = 'Delivered' +CANCELLED = 'Cancelled' + +ORDER_STATUS_CHOICES = ( + (IN_PROGRESS, 'In progress'), + (SHIPPED, 'Shipped'), + (DELIVERED, 'Delivered'), + (CANCELLED, 'Cancelled'), +) + +class Order(models.Model): + customer = models.ForeignKey(Customer, on_delete=models.CASCADE) + status = models.CharField(max_length=50, choices=ORDER_STATUS_CHOICES, default=ORDER_STATUS_CHOICES[0][0]) + created_at = models.DateTimeField(auto_now_add=True) + + def __str__(self): + return f"{self.customer} - {self.status}" + +class OrderProduct(models.Model): + order = models.ForeignKey(Order, related_name='order_products',on_delete=models.CASCADE) + product = models.ForeignKey(Product, related_name='order_products', on_delete=models.CASCADE) + quantity = models.PositiveIntegerField(default=1, validators=[MinValueValidator(1)]) + + def __str__(self): + return f"{self.product.name} - {self.quantity}x" + + class Meta: + unique_together = ['order', 'product'] + ordering = ['order']