from rest_framework import serializers from apps.utils.serializers import CustomModelSerializer from apps.sam.models import Customer, Contract, Order, OrderItem from apps.utils.constants import EXCLUDE_FIELDS, EXCLUDE_FIELDS_BASE from rest_framework.exceptions import ValidationError from apps.mtm.serializers import MaterialSerializer class CustomerSerializer(CustomModelSerializer): class Meta: model = Customer fields = '__all__' read_only_fields = EXCLUDE_FIELDS + ['belong_dept'] class ContractSerializer(CustomModelSerializer): class Meta: model = Contract fields = '__all__' read_only_fields = EXCLUDE_FIELDS + ['belong_dept', 'invoice'] class OrderSerializer(CustomModelSerializer): class Meta: model = Order fields = '__all__' read_only_fields = EXCLUDE_FIELDS + ['belong_dept', 'state'] def validate(self, attrs): contract = attrs.get('contract', None) if contract: attrs['customer'] = contract.customer if attrs.get('customer', None) is None: raise ValidationError('未选择客户') return attrs def update(self, instance, validated_data): if instance.state != Order.ORDER_CREATE: raise ValidationError('订单信息不可编辑') return super().update(instance, validated_data) class OrderItemSerializer(CustomModelSerializer): product_ = MaterialSerializer(source='product', read_only=True) order_ = OrderSerializer(source='order', read_only=True) class Meta: model = OrderItem fields = '__all__' read_only_fields = EXCLUDE_FIELDS_BASE + ['count_deliverd'] def validate(self, attrs): order = attrs['order'] if order.state != Order.ORDER_CREATE: raise ValidationError('该订单状态下不可创建') return attrs def create(self, validated_data): order = validated_data['order'] product = validated_data['product'] if OrderItem.objects.filter(order=order, product=product).exists(): raise ValidationError('该产品已选择!') return super().create(validated_data) def update(self, instance, validated_data): validated_data.pop('product', None) validated_data.pop('order', None) return super().update(instance, validated_data)