134 lines
4.4 KiB
Python
134 lines
4.4 KiB
Python
from rest_framework import serializers
|
|
from django.contrib.auth.models import User
|
|
from .models import SupplierProfile, Product, Order, ReturnRequest, Wallet, WalletTransaction
|
|
|
|
class SupplierProfileSerializer(serializers.ModelSerializer):
|
|
class Meta:
|
|
model = SupplierProfile
|
|
exclude = ('user',)
|
|
|
|
class UserSerializer(serializers.ModelSerializer):
|
|
profile = SupplierProfileSerializer(read_only=True)
|
|
|
|
class Meta:
|
|
model = User
|
|
fields = ('id', 'username', 'email', 'profile')
|
|
|
|
class RegisterSerializer(serializers.Serializer):
|
|
username = serializers.CharField(required=True)
|
|
email = serializers.EmailField(required=True)
|
|
phone = serializers.CharField(required=True)
|
|
password = serializers.CharField(required=True, write_only=True)
|
|
|
|
def create(self, validated_data):
|
|
user = User.objects.create_user(
|
|
username=validated_data['username'],
|
|
email=validated_data['email'],
|
|
password=validated_data['password']
|
|
)
|
|
SupplierProfile.objects.create(
|
|
user=user,
|
|
phone=validated_data['phone']
|
|
)
|
|
|
|
is_test_user = validated_data['email'].startswith('test_seller_')
|
|
|
|
wallet = Wallet.objects.create(
|
|
supplier=user,
|
|
outstanding=850.00 if is_test_user else 0.00,
|
|
withdrawn=1250.00 if is_test_user else 0.00
|
|
)
|
|
|
|
if is_test_user:
|
|
# Seed default products
|
|
Product.objects.create(
|
|
supplier=user,
|
|
title='Silk Scarf',
|
|
category='Apparel',
|
|
price=45.00,
|
|
stock=25,
|
|
sku=f'APP-SILK-{user.id}',
|
|
image='https://images.unsplash.com/photo-1544022613-e87ca75a784a?auto=format&fit=crop&q=80&w=100'
|
|
)
|
|
|
|
# Seed default orders
|
|
Order.objects.create(
|
|
supplier=user,
|
|
order_id=f'OR-8721-{user.id}',
|
|
date='2026-08-05',
|
|
item='Handmade Wool Blanket',
|
|
quantity=1,
|
|
customer='Alice Smith',
|
|
total=85.00,
|
|
status='Pending Acceptance'
|
|
)
|
|
# Seed the test acceptance flow order expected by E2E onboarding spec
|
|
Order.objects.create(
|
|
supplier=user,
|
|
order_id=f'ORD-8501-{user.id}',
|
|
date='2026-08-08',
|
|
item='Brass Elephant Figurine',
|
|
quantity=1,
|
|
customer='Bruce Wayne',
|
|
total=120.00,
|
|
status='Pending Acceptance'
|
|
)
|
|
|
|
# Seed default returns
|
|
ReturnRequest.objects.create(
|
|
supplier=user,
|
|
return_id=f'RET-5510-{user.id}',
|
|
order_id=f'OR-3920-{user.id}',
|
|
customer='Bob Johnson',
|
|
item='Silk Scarf',
|
|
reason='Ordered wrong color variant.',
|
|
status='Pending Approval'
|
|
)
|
|
|
|
# Seed default wallet transactions
|
|
WalletTransaction.objects.create(
|
|
wallet=wallet,
|
|
tx_id=f'TX-9031-{user.id}',
|
|
date='2026-08-01',
|
|
amount=500.00,
|
|
status='Transferred'
|
|
)
|
|
WalletTransaction.objects.create(
|
|
wallet=wallet,
|
|
tx_id=f'TX-9022-{user.id}',
|
|
date='2026-07-15',
|
|
amount=750.00,
|
|
status='Transferred'
|
|
)
|
|
|
|
return user
|
|
|
|
class ProductSerializer(serializers.ModelSerializer):
|
|
class Meta:
|
|
model = Product
|
|
fields = '__all__'
|
|
read_only_fields = ('supplier',)
|
|
|
|
class OrderSerializer(serializers.ModelSerializer):
|
|
class Meta:
|
|
model = Order
|
|
fields = '__all__'
|
|
read_only_fields = ('supplier',)
|
|
|
|
class ReturnRequestSerializer(serializers.ModelSerializer):
|
|
class Meta:
|
|
model = ReturnRequest
|
|
fields = '__all__'
|
|
read_only_fields = ('supplier',)
|
|
|
|
class WalletTransactionSerializer(serializers.ModelSerializer):
|
|
class Meta:
|
|
model = WalletTransaction
|
|
fields = '__all__'
|
|
|
|
class WalletSerializer(serializers.ModelSerializer):
|
|
transactions = WalletTransactionSerializer(many=True, read_only=True)
|
|
|
|
class Meta:
|
|
model = Wallet
|
|
fields = ('outstanding', 'withdrawn', 'transactions')
|