All checks were successful
Deploy Beta (NATIVE) / deploy (push) Successful in 27s
117 lines
4.7 KiB
Python
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']
|