factory/apps/inm/serializers.py

97 lines
3.3 KiB
Python

from rest_framework import serializers
from rest_framework.exceptions import ValidationError
from apps.mtm.serializers import MaterialSerializer
from apps.pum.models import PuOrder
from apps.system.models import Dept, User
from apps.utils.constants import EXCLUDE_FIELDS_BASE, EXCLUDE_FIELDS_DEPT
from apps.utils.serializers import CustomModelSerializer
from .models import MIO, MaterialBatch, MIOItem, WareHouse
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)
class MIOItemSerializer(CustomModelSerializer):
warehouse_name = serializers.CharField(source='warehouse', read_only=True)
material_ = MaterialSerializer(source='material', read_only=True)
class Meta:
model = MIOItem
fields = '__all__'
def create(self, validated_data):
mio = validated_data['mio']
if mio.state != MIO.MIO_CREATE:
raise ValidationError('出入库记录非创建中不可新增')
return super().create(validated_data)
class MIODoSerializer(CustomModelSerializer):
belong_dept = serializers.PrimaryKeyRelatedField(
label="车间", queryset=Dept.objects.all(), required=True)
do_user = serializers.PrimaryKeyRelatedField(
label="执行人", queryset=User.objects.all(), required=True)
class Meta:
model = MIO
fields = ['number', 'note', 'do_user', 'belong_dept', 'type']
def create(self, validated_data):
if validated_data['type'] not in [MIO.MIO_TYPE_DO_OUT, MIO.MIO_TYPE_DO_IN]:
raise ValidationError('出入库类型错误')
return super().create(validated_data)
def update(self, instance, validated_data):
if instance.state != MIO.MIO_CREATE:
raise ValidationError('记录非创建中')
return super().update(instance, validated_data)