crmbackend/crm/serializers.py
vickytechkey 60f5e9bc3c
All checks were successful
Deploy Beta (NATIVE) / deploy (push) Successful in 27s
feat: add Category model to customer serializers
2026-08-16 15:31:58 +05:30

117 lines
4.7 KiB
Python

from rest_framework import serializers
from django.contrib.auth.models import User
from crm.models import CRMAdmin, AuditLog, WithdrawalRequest, RefundRecord, ReturnPickup
from seller_models.models import SupplierProfile, Product, Wallet, WalletTransaction
from customer_models.models import Category, CustomerProfile, Order
class CRMAdminSerializer(serializers.ModelSerializer):
username = serializers.CharField(source='user.username', read_only=True)
email = serializers.CharField(source='user.email', read_only=True)
class Meta:
model = CRMAdmin
fields = ['id', 'username', 'email', 'role', 'is_active', 'created_at']
class AuditLogSerializer(serializers.ModelSerializer):
admin_username = serializers.CharField(source='admin.username', read_only=True)
class Meta:
model = AuditLog
fields = '__all__'
class WithdrawalRequestSerializer(serializers.ModelSerializer):
resolved_by_username = serializers.CharField(source='resolved_by.username', read_only=True)
class Meta:
model = WithdrawalRequest
fields = '__all__'
class RefundRecordSerializer(serializers.ModelSerializer):
admin_username = serializers.CharField(source='admin.username', read_only=True)
class Meta:
model = RefundRecord
fields = '__all__'
class ReturnPickupSerializer(serializers.ModelSerializer):
admin_username = serializers.CharField(source='admin.username', read_only=True)
class Meta:
model = ReturnPickup
fields = '__all__'
# Read-only Proxies Serializers
class SupplierProfileSerializer(serializers.ModelSerializer):
name = serializers.CharField(read_only=True)
email = serializers.CharField(read_only=True)
joined_at = serializers.DateTimeField(read_only=True, source='submitted_at')
class Meta:
model = SupplierProfile
fields = ['id', 'name', 'email', 'phone', 'gstin', 'status', 'joined_at']
class ProductSerializer(serializers.ModelSerializer):
name = serializers.CharField(read_only=True)
supplier_name = serializers.CharField(source='supplier.name', read_only=True)
supplier_status = serializers.CharField(source='supplier.status', read_only=True)
supplier_phone = serializers.CharField(source='supplier.phone', read_only=True)
supplier_gstin = serializers.CharField(source='supplier.gstin', read_only=True)
supplier_email = serializers.CharField(source='supplier.email', read_only=True)
class Meta:
model = Product
fields = [
'id', 'name', 'price', 'stock', 'status', 'is_active', 'category', 'sku', 'image',
'supplier_name', 'supplier_status', 'supplier_phone', 'supplier_gstin', 'supplier_email'
]
class WalletSerializer(serializers.ModelSerializer):
balance = serializers.DecimalField(max_digits=12, decimal_places=2, read_only=True)
class Meta:
model = Wallet
fields = ['id', 'supplier_id', 'outstanding', 'withdrawn', 'balance']
class WalletTransactionSerializer(serializers.ModelSerializer):
tx_type = serializers.CharField(read_only=True)
class Meta:
model = WalletTransaction
fields = ['id', 'wallet', 'amount', 'tx_type', 'status']
class CategorySerializer(serializers.ModelSerializer):
subcategories = serializers.SerializerMethodField()
class Meta:
model = Category
fields = ['id', 'name', 'slug', 'is_active', 'sort_order', 'parent', 'subcategories']
def get_subcategories(self, obj):
# We perform filtering inside Python or basic query to fetch subcategories
if obj.parent_id is None:
# Query subcategories where parent matches obj
subs = Category.objects.filter(parent=obj)
return CategorySerializer(subs, many=True).data
return []
class CustomerProfileSerializer(serializers.ModelSerializer):
name = serializers.CharField(read_only=True)
email = serializers.CharField(read_only=True)
address = serializers.CharField(read_only=True)
status = serializers.CharField(read_only=True)
class Meta:
model = CustomerProfile
fields = ['id', 'name', 'email', 'phone', 'address', 'status', 'created_at']
class OrderSerializer(serializers.ModelSerializer):
customer_name = serializers.CharField(source='customer.name', read_only=True)
merchant_transaction_id = serializers.CharField(read_only=True)
amount = serializers.DecimalField(max_digits=10, decimal_places=2, read_only=True)
payment_status = serializers.CharField(read_only=True)
delivery_status = serializers.CharField(read_only=True)
created_at = serializers.DateTimeField(read_only=True)
class Meta:
model = Order
fields = ['id', 'customer_name', 'merchant_transaction_id', 'amount', 'payment_status', 'delivery_status', 'created_at']