hberp/hb_server/apps/mtm/serializers.py

206 lines
6.9 KiB
Python

from apps.em.serializers import EquipmentSerializer, EquipmentSimpleSerializer
from rest_framework import serializers
from rest_framework.exceptions import ValidationError
from .models import InputMaterial, Material, OutputMaterial, Process, ProductProcess, RecordForm, RecordFormField, Step, TechDoc, UsedStep
from apps.system.serializers import FileSimpleSerializer, OrganizationSimpleSerializer
class MaterialSerializer(serializers.ModelSerializer):
processes = serializers.ListField(child=serializers.IntegerField(min_value=1))
class Meta:
model = Material
fields = '__all__'
class MaterialDetailSerializer(serializers.ModelSerializer):
processes_ = serializers.SerializerMethodField()
class Meta:
model = Material
fields = '__all__'
def get_processes_(self, obj):
objs = Process.objects.filter(id__in=obj.processes).order_by('number')
return ProcessSimpleSerializer(instance=objs, many=True).data
class MaterialSimpleSerializer(serializers.ModelSerializer):
class Meta:
model = Material
fields = ['id', 'name', 'number', 'unit']
class ProcessSerializer(serializers.ModelSerializer):
instruction_ = FileSimpleSerializer(source='instruction', read_only=True)
workshop_ = OrganizationSimpleSerializer(source='workshop', read_only=True)
class Meta:
model = Process
fields = '__all__'
class ProcessSimpleSerializer(serializers.ModelSerializer):
class Meta:
model = Process
fields = ['id', 'name', 'number']
class StepSerializer(serializers.ModelSerializer):
class Meta:
model = Step
fields = '__all__'
class StepSimpleSerializer(serializers.ModelSerializer):
class Meta:
model = Step
fields = ['id', 'name', 'sort']
class StepDetailSerializer(serializers.ModelSerializer):
class Meta:
model = Step
fields = '__all__'
@staticmethod
def setup_eager_loading(queryset):
queryset = queryset.prefetch_related('equipments')
return queryset
class ProductProcessListSerializer(serializers.ModelSerializer):
process_ = ProcessSimpleSerializer(source='process', read_only=True)
product_ = MaterialSimpleSerializer(source='product', read_only=True)
class Meta:
model = ProductProcess
fields = '__all__'
class ProductProcessUpdateSerializer(serializers.ModelSerializer):
class Meta:
model = ProductProcess
fields = ['sort']
class InputMaterialListSerializer(serializers.ModelSerializer):
material_ = MaterialSimpleSerializer(source='material', read_only=True)
class Meta:
model = InputMaterial
fields = '__all__'
class OutputMaterialListSerializer(serializers.ModelSerializer):
material_ = MaterialSimpleSerializer(source='material', read_only=True)
class Meta:
model = OutputMaterial
fields = '__all__'
class InputMaterialSerializer(serializers.ModelSerializer):
class Meta:
model = InputMaterial
fields = ['count', 'sort', 'material', 'product', 'process']
def create(self, validated_data):
if InputMaterial.objects.filter(material=validated_data['material'], product=validated_data['product'], process=validated_data['process'], is_deleted=False).exists():
raise ValidationError('该物料已存在')
return super().create(validated_data)
class InputMaterialUpdateSerializer(serializers.ModelSerializer):
class Meta:
model = InputMaterial
fields = ['count', 'sort']
class OutputMaterialSerializer(serializers.ModelSerializer):
class Meta:
model = OutputMaterial
fields = ['count', 'sort', 'material', 'product', 'process']
def create(self, validated_data):
if OutputMaterial.objects.filter(material=validated_data['material'], product=validated_data['product'], process=validated_data['process'], is_deleted=False).exists():
raise ValidationError('该物料已存在')
return super().create(validated_data)
class OutputMaterialUpdateSerializer(serializers.ModelSerializer):
class Meta:
model = OutputMaterial
fields = ['count', 'sort']
class UsedStepCreateSerializer(serializers.ModelSerializer):
"""
产品生产子工序创建
"""
class Meta:
model = UsedStep
fields = ['step', 'product', 'process']
class UsedStepListSerializer(serializers.ModelSerializer):
"""
产品生产子工序序列化
"""
step_ = StepSimpleSerializer(source='step', read_only=True)
class Meta:
model = UsedStep
fields = '__all__'
@staticmethod
def setup_eager_loading(queryset):
""" Perform necessary eager loading of data. """
queryset = queryset.select_related('step')
return queryset
class RecordFormSerializer(serializers.ModelSerializer):
step_ = StepSimpleSerializer(source='step', read_only=True)
"""
记录表格序列化
"""
class Meta:
model = RecordForm
fields = '__all__'
@staticmethod
def setup_eager_loading(queryset):
""" Perform necessary eager loading of data. """
queryset = queryset.select_related('step')
return queryset
class RecordFormCreateSerializer(serializers.ModelSerializer):
class Meta:
model = RecordForm
fields = ['name', 'type', 'step']
class RecordFormUpdateSerializer(serializers.ModelSerializer):
class Meta:
model = RecordForm
fields = ['name', 'type']
class RecordFormFieldSerializer(serializers.ModelSerializer):
class Meta:
model = RecordFormField
fields = '__all__'
class RecordFormFieldCreateSerializer(serializers.ModelSerializer):
class Meta:
model = RecordFormField
fields = ['form', 'field_type', 'field_key', 'field_name', 'boolean_field_display', 'field_choice', 'sort']
def validate(self, data):
if RecordFormField.objects.filter(field_key=data['field_key'], form=data['form'], is_deleted=False).exists():
raise ValidationError('字段key已存在!')
return data
class RecordFormFieldUpdateSerializer(serializers.ModelSerializer):
class Meta:
model = RecordFormField
fields = ['field_type', 'field_name', 'boolean_field_display', 'field_choice', 'sort']
class RecordFormFieldSimpleSerializer(serializers.ModelSerializer):
class Meta:
model = RecordFormField
fields = '__all__'
class TechDocListSerializer(serializers.ModelSerializer):
file_ = FileSimpleSerializer(source='file', read_only=True)
class Meta:
model = TechDoc
fields = '__all__'
class TechDocCreateSerializer(serializers.ModelSerializer):
class Meta:
model = TechDoc
fields = ['file', 'product', 'process', 'name', 'content']
class TechDocUpdateSerializer(serializers.ModelSerializer):
class Meta:
model = TechDoc
fields = ['file', 'name', 'content']