from rest_framework import serializers from apps.utils.serializers import CustomModelSerializer from apps.inm.models import WareHouse, MaterialBatch, MIO, MIOItem from apps.utils.constants import EXCLUDE_FIELDS_DEPT, EXCLUDE_FIELDS_BASE from apps.pum.models import PuOrder from rest_framework.exceptions import ValidationError class WareHourseSerializer(CustomModelSerializer): class Meta: model = WareHouse fields = '__all__' read_only_fields = EXCLUDE_FIELDS_DEPT class MaterialBatchSerializer(CustomModelSerializer): warehouse_name = serializers.CharField(source='warehouse.name', read_only=True) material_name = serializers.CharField(source='material.name', read_only=True) class Meta: model = MaterialBatch fields = '__all__' read_only_fields = EXCLUDE_FIELDS_BASE class MIOSerializer(CustomModelSerializer): create_by_name = serializers.CharField(source='create_by.name', read_only=True) class Meta: model = MIO fields = '__all__' read_only_fields = EXCLUDE_FIELDS_DEPT + ['state', 'submit_time'] def validate(self, attrs): if 'pu_order' in attrs and attrs['pu_order']: attrs['supplier'] = attrs['pu_order'].supplier elif 'order' in attrs and attrs['order']: attrs['customer'] = attrs['order'].customer return super().validate(attrs) def create(self, validated_data): type = validated_data['type'] if type == MIO.MIO_TYPE_PUR_IN: pu_order = validated_data.get('pu_order', None) if pu_order and pu_order.state in [PuOrder.PUORDER_SUBMITED, PuOrder.PUORDER_SHIP]: pass else: raise ValidationError('该采购订单不可选') return super().create(validated_data) def update(self, instance, validated_data): validated_data.pop('type') return super().update(instance, validated_data)