bottleneckcrm/backend/customers/models.py
vickytechkey 0a9020d03b
All checks were successful
Deploy Beta (NATIVE) / deploy (push) Successful in 1m48s
feat: Add full A-to-Z Seller and Customer management to Django-CRM
2026-10-24 16:29:51 +05:30

147 lines
5.5 KiB
Python

from django.db import models, connections
class CustomerProfile(models.Model):
user_id = models.IntegerField(unique=True)
phone = models.CharField(max_length=20, blank=True, null=True)
default_address = models.TextField(blank=True, null=True)
created_at = models.DateTimeField(auto_now_add=True)
class Meta:
managed = False
db_table = "orders_customerprofile"
app_label = "customers"
@property
def name(self):
try:
with connections["customer_db"].cursor() as cursor:
cursor.execute(
"SELECT first_name, last_name, username FROM auth_user WHERE id = %s",
[self.user_id],
)
row = cursor.fetchone()
if row:
full = f"{row[0]} {row[1]}".strip()
return full or row[2] or f"Customer #{self.id}"
return f"Customer #{self.id}"
except Exception:
return f"Customer #{self.id}"
@property
def email(self):
try:
with connections["customer_db"].cursor() as cursor:
cursor.execute("SELECT email FROM auth_user WHERE id = %s", [self.user_id])
row = cursor.fetchone()
return row[0] if row else ""
except Exception:
return ""
@property
def username(self):
try:
with connections["customer_db"].cursor() as cursor:
cursor.execute("SELECT username FROM auth_user WHERE id = %s", [self.user_id])
row = cursor.fetchone()
return row[0] if row else ""
except Exception:
return ""
@property
def is_active(self):
try:
with connections["customer_db"].cursor() as cursor:
cursor.execute("SELECT is_active FROM auth_user WHERE id = %s", [self.user_id])
row = cursor.fetchone()
return bool(row[0]) if row is not None else True
except Exception:
return True
@property
def date_joined(self):
try:
with connections["customer_db"].cursor() as cursor:
cursor.execute("SELECT date_joined FROM auth_user WHERE id = %s", [self.user_id])
row = cursor.fetchone()
return row[0] if row else self.created_at
except Exception:
return self.created_at
@property
def status(self):
return "active" if self.is_active else "banned"
class Address(models.Model):
user_id = models.IntegerField(db_index=True)
full_name = models.CharField(max_length=150)
phone = models.CharField(max_length=20)
street = models.CharField(max_length=255)
area = models.CharField(max_length=255)
city = models.CharField(max_length=100)
state = models.CharField(max_length=100)
pincode = models.CharField(max_length=10)
address_type = models.CharField(max_length=20, default="Home")
is_default = models.BooleanField(default=False)
created_at = models.DateTimeField(auto_now_add=True)
class Meta:
managed = False
db_table = "orders_address"
app_label = "customers"
class CustomerOrder(models.Model):
user_id = models.IntegerField(db_index=True)
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, default="pending")
shipping_address = models.TextField()
placed_at = models.DateTimeField()
cancellation_reason = models.TextField(blank=True, null=True)
return_reason = models.TextField(blank=True, null=True)
awb_number = models.CharField(max_length=100, blank=True, null=True)
shipping_carrier = models.CharField(max_length=50, default="Shadowfax")
shipping_status = models.CharField(max_length=100, blank=True, null=True)
expected_delivery_date = models.CharField(max_length=100, blank=True, null=True)
class Meta:
managed = False
db_table = "orders_order"
app_label = "customers"
class UnifiedOrder(models.Model):
order_id = models.CharField(max_length=100, blank=True, null=True)
customer = models.CharField(max_length=255, blank=True, null=True)
item = models.CharField(max_length=255, blank=True, null=True)
quantity = models.IntegerField(default=1)
total = models.DecimalField(max_digits=12, decimal_places=2, default=0.00)
status = models.CharField(max_length=50, default="pending")
carrier = models.CharField(max_length=100, blank=True, null=True)
tracking = models.CharField(max_length=100, blank=True, null=True)
date = models.DateField(blank=True, null=True)
supplier_id = models.IntegerField(blank=True, null=True)
payment_mode = models.CharField(max_length=50, blank=True, null=True)
class Meta:
managed = False
db_table = "api_order"
app_label = "customers"
class CustomerWalletTransaction(models.Model):
user_id = models.IntegerField(db_index=True)
transaction_id = models.CharField(max_length=50, unique=True)
title = models.CharField(max_length=255)
type = models.CharField(max_length=20)
amount = models.DecimalField(max_digits=10, decimal_places=2)
status = models.CharField(max_length=50)
created_at = models.DateTimeField()
class Meta:
managed = False
db_table = "orders_wallettransaction"
app_label = "customers"