51 lines
1.9 KiB
Python
51 lines
1.9 KiB
Python
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) |