customerwebsitebackend/orders/models.py
vickytechkey ba49657163
All checks were successful
Deploy Beta (NATIVE) / deploy (push) Successful in 19s
integrated seller items
2026-08-14 19:24:24 +05:30

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