All checks were successful
Deploy Beta (NATIVE) / deploy (push) Successful in 19s
76 lines
3 KiB
Python
76 lines
3 KiB
Python
from django.db import models
|
|
from django.contrib.auth.models import User
|
|
from products.models import Product
|
|
|
|
class CustomerProfile(models.Model):
|
|
user = models.OneToOneField(User, on_delete=models.CASCADE, related_name='customer_profile')
|
|
phone = models.CharField(max_length=20, blank=True)
|
|
default_address = models.TextField(blank=True)
|
|
created_at = models.DateTimeField(auto_now_add=True)
|
|
|
|
def __str__(self):
|
|
return self.user.username
|
|
|
|
class Cart(models.Model):
|
|
user = models.OneToOneField(User, on_delete=models.CASCADE, related_name='cart')
|
|
created_at = models.DateTimeField(auto_now_add=True)
|
|
updated_at = models.DateTimeField(auto_now=True)
|
|
|
|
def __str__(self):
|
|
return f"Cart for {self.user.username}"
|
|
|
|
class CartItem(models.Model):
|
|
cart = models.ForeignKey(Cart, on_delete=models.CASCADE, related_name='items')
|
|
product_id = models.IntegerField(default=1) # Keep reference as simple int since product is in productprofile db
|
|
quantity = models.PositiveIntegerField(default=1)
|
|
price_at_add = models.DecimalField(max_digits=10, decimal_places=2)
|
|
|
|
@property
|
|
def product(self):
|
|
try:
|
|
return Product.objects.get(id=self.product_id)
|
|
except Product.DoesNotExist:
|
|
return None
|
|
|
|
def __str__(self):
|
|
return f"{self.quantity} x Product {self.product_id}"
|
|
|
|
class Order(models.Model):
|
|
STATUS_CHOICES = (
|
|
('pending', 'Pending'),
|
|
('confirmed', 'Confirmed'),
|
|
('shipped', 'Shipped'),
|
|
('delivered', 'Delivered'),
|
|
('cancelled', 'Cancelled'),
|
|
)
|
|
user = models.ForeignKey(User, on_delete=models.CASCADE, related_name='orders')
|
|
razorpay_order_id = models.CharField(max_length=100, blank=True, null=True)
|
|
razorpay_payment_id = models.CharField(max_length=100, blank=True, null=True)
|
|
total_amount = models.DecimalField(max_digits=10, decimal_places=2)
|
|
status = models.CharField(max_length=20, choices=STATUS_CHOICES, default='pending')
|
|
shipping_address = models.TextField()
|
|
placed_at = models.DateTimeField(auto_now_add=True)
|
|
|
|
def __str__(self):
|
|
return f"Order {self.id} by {self.user.username}"
|
|
|
|
# Align to seller_central_backend api_order schema
|
|
class SellerOrder(models.Model):
|
|
supplier_id = models.IntegerField() # Raw integer referring to User in sellerprofile db
|
|
order_id = models.CharField(max_length=50, unique=True)
|
|
date = models.DateField()
|
|
item = models.CharField(max_length=255)
|
|
quantity = models.IntegerField(default=1)
|
|
customer = models.CharField(max_length=255)
|
|
total = models.DecimalField(max_digits=10, decimal_places=2)
|
|
status = models.CharField(max_length=50, default='Pending Acceptance')
|
|
carrier = models.CharField(max_length=100, default='Pending')
|
|
tracking = models.CharField(max_length=100, default='Pending')
|
|
eta = models.CharField(max_length=50, default='N/A')
|
|
|
|
class Meta:
|
|
db_table = 'api_order'
|
|
managed = False # Managed by seller central backend migrations
|
|
|
|
def __str__(self):
|
|
return self.order_id
|