from rest_framework import serializers from apps.inm.models import IProduct from .models import Contract, Customer, Order, Sale, SaleProduct from apps.mtm.serializers import MaterialSimpleSerializer class CustomerSerializer(serializers.ModelSerializer): class Meta: model = Customer fields = '__all__' class CustomerCreateUpdateSerializer(serializers.ModelSerializer): class Meta: model = Customer fields = ['name', 'address', 'contact', 'contact_phone', 'description'] class CustomerSimpleSerializer(serializers.ModelSerializer): class Meta: model = Customer fields = ['id', 'name'] class ContractSerializer(serializers.ModelSerializer): customer_ = CustomerSimpleSerializer(source='customer', read_only=True) class Meta: model = Contract fields = '__all__' class ContractSimpleSerializer(serializers.ModelSerializer): class Meta: model = Contract fields = ['id', 'name', 'number'] class ContractCreateUpdateSerializer(serializers.ModelSerializer): class Meta: model = Contract fields = ['name', 'number', 'amount', 'customer', 'sign_date', 'description'] class OrderCreateUpdateSerializer(serializers.ModelSerializer): class Meta: model = Order fields = ['number', 'customer', 'contract', 'product', 'count', 'delivery_date'] class OrderSerializer(serializers.ModelSerializer): contract_ = ContractSimpleSerializer(source='contract', read_only=True) customer_ = CustomerSimpleSerializer(source='customer', read_only=True) product_ = MaterialSimpleSerializer(source='product', read_only=True) class Meta: model = Order fields = '__all__' class OrderSimpleSerializer(serializers.ModelSerializer): contract_ = ContractSimpleSerializer(source='contract', read_only=True) class Meta: model = Order fields = '__all__' class SaleCreateSerializer(serializers.ModelSerializer): iproducts = serializers.PrimaryKeyRelatedField(queryset=IProduct.objects.all(), many=True) class Meta: model = Sale fields = ['customer', 'order', 'product', 'iproducts'] def validate(self, attrs): order = attrs.get('order', None) if order: if order.customer: attrs['customer'] = order.customer attrs['product'] = order.product return super().validate(attrs) def create(self, validated_data): iproducts = validated_data.pop('iproducts') sale = Sale.objects.create(**validated_data) i_l = [] for i in iproducts: i_d ={} i_d['sale'] = sale i_d['number'] = i.number i_d['iproduct'] = i i_l.append(SaleProduct(**i_d)) SaleProduct.objects.bulk_create(i_l) return sale class SaleListSerializer(serializers.ModelSerializer): customer_ = CustomerSimpleSerializer(source='customer', read_only=True) order_ = OrderSimpleSerializer(source='order', read_only=True) product_ = MaterialSimpleSerializer(source='product', read_only=True) class Meta: model = Sale fields = '__all__'