68 lines
2.2 KiB
Python
68 lines
2.2 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']
|
|
)
|
|
Wallet.objects.create(
|
|
supplier=user,
|
|
outstanding=850.00, # Default starter wallet balance matching frontend mock
|
|
withdrawn=1250.00
|
|
)
|
|
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')
|