305 lines
11 KiB
Python
305 lines
11 KiB
Python
from apps.em.serializers import EquipmentSimpleSerializer
|
|
from rest_framework import serializers
|
|
from rest_framework.exceptions import ParseError, ValidationError
|
|
|
|
from utils.mixins import DynamicFieldsSerializerMixin
|
|
from .models import Material, PackItem, Process, RecordForm, RecordFormField, Step, SubprodctionMaterial, TechDoc, UsedStep, SubProduction
|
|
from apps.system.serializers import FileSimpleSerializer, OrganizationSimpleSerializer
|
|
|
|
|
|
class MaterialSerializer(DynamicFieldsSerializerMixin, serializers.ModelSerializer):
|
|
file_ = FileSimpleSerializer(source='file', read_only=True)
|
|
class Meta:
|
|
model = Material
|
|
fields = '__all__'
|
|
|
|
class MaterialDetailSerializer(serializers.ModelSerializer):
|
|
processes_ = serializers.SerializerMethodField()
|
|
file_ = FileSimpleSerializer(source='file', read_only=True)
|
|
class Meta:
|
|
model = Material
|
|
fields = '__all__'
|
|
|
|
def get_processes_(self, obj):
|
|
# steps = UsedStep.objects.filter(subproduction__product=obj).values_list('step', flat=True)
|
|
# objs = Process.objects.filter(step_process__id__in=steps).distinct().order_by('number')
|
|
objs = Process.objects.filter(subproduction_process__product=obj, subproduction_process__is_deleted=False, is_deleted=False).distinct().order_by('number')
|
|
return ProcessSimpleSerializer(instance=objs, many=True).data
|
|
|
|
|
|
|
|
class PackItemSerializer(serializers.ModelSerializer):
|
|
class Meta:
|
|
model = PackItem
|
|
fields = '__all__'
|
|
|
|
class PackItemCreateSerializer(serializers.ModelSerializer):
|
|
class Meta:
|
|
model = PackItem
|
|
fields = ['product', 'material', 'name', 'specification', 'unit', 'count', 'sort']
|
|
|
|
class PackItemUpdateSerializer(serializers.ModelSerializer):
|
|
class Meta:
|
|
model = PackItem
|
|
fields = ['count', 'sort']
|
|
|
|
class MaterialSimpleSerializer(serializers.ModelSerializer):
|
|
class Meta:
|
|
model = Material
|
|
fields = ['id', 'name', 'number', 'unit','specification', 'type', 'count', 'count_safe']
|
|
|
|
class PackItemDetailSerializer(serializers.ModelSerializer):
|
|
material_ = MaterialSimpleSerializer(source='material', read_only=True)
|
|
class Meta:
|
|
model = PackItem
|
|
fields = '__all__'
|
|
|
|
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', 'type']
|
|
|
|
|
|
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):
|
|
equipments_ = EquipmentSimpleSerializer(source='equipments', many=True, required=False)
|
|
class Meta:
|
|
model = Step
|
|
fields = '__all__'
|
|
|
|
@staticmethod
|
|
def setup_eager_loading(queryset):
|
|
queryset = queryset.prefetch_related('equipments')
|
|
return queryset
|
|
|
|
class SubProductionSimpleSerializer(serializers.ModelSerializer):
|
|
class Meta:
|
|
model = SubProduction
|
|
fields = ['id', 'name']
|
|
|
|
class SubProductionSerializer(serializers.ModelSerializer):
|
|
process_ = ProcessSimpleSerializer(source='process', read_only=True)
|
|
class Meta:
|
|
model = SubProduction
|
|
fields = '__all__'
|
|
|
|
class SubProductionCreateUpdateSerializer(serializers.ModelSerializer):
|
|
class Meta:
|
|
model = SubProduction
|
|
fields = ['name', 'product', 'process', 'need_combtest', 'sort']
|
|
|
|
class OtherMaterialSerializer(serializers.ModelSerializer):
|
|
class Meta:
|
|
model = SubprodctionMaterial
|
|
fields = ['sort', 'material', 'subproduction']
|
|
|
|
def create(self, validated_data):
|
|
if SubprodctionMaterial.objects.filter(material=validated_data['material'], subproduction=validated_data['subproduction'], is_deleted=False, type=3).exists():
|
|
raise ValidationError('该物料已存在')
|
|
validated_data['type']=3
|
|
return super().create(validated_data)
|
|
|
|
class SubprodctionMaterialListSerializer(serializers.ModelSerializer):
|
|
material_ = MaterialSimpleSerializer(source='material', read_only=True)
|
|
class Meta:
|
|
model = SubprodctionMaterial
|
|
fields = '__all__'
|
|
|
|
class InputMaterialSerializer(serializers.ModelSerializer):
|
|
class Meta:
|
|
model = SubprodctionMaterial
|
|
fields = ['count', 'sort', 'material', 'subproduction']
|
|
|
|
def create(self, validated_data):
|
|
if SubprodctionMaterial.objects.filter(material=validated_data['material'], subproduction=validated_data['subproduction'], is_deleted=False, type=SubprodctionMaterial.SUB_MA_TYPE_IN).exists():
|
|
raise ValidationError('该物料已存在')
|
|
validated_data['type']=SubprodctionMaterial.SUB_MA_TYPE_IN
|
|
return super().create(validated_data)
|
|
|
|
class InputMaterialUpdateSerializer(serializers.ModelSerializer):
|
|
class Meta:
|
|
model = SubprodctionMaterial
|
|
fields = ['count', 'sort']
|
|
|
|
class OutputMaterialSerializer(serializers.ModelSerializer):
|
|
class Meta:
|
|
model = SubprodctionMaterial
|
|
fields = ['count', 'sort', 'material', 'subproduction', 'is_main']
|
|
|
|
def create(self, validated_data):
|
|
if SubprodctionMaterial.objects.filter(subproduction=validated_data['subproduction'], is_deleted=False, is_main=True, type=SubprodctionMaterial.SUB_MA_TYPE_OUT).exists():
|
|
raise ValidationError('主产出只能有1个')
|
|
if SubprodctionMaterial.objects.filter(material=validated_data['material'], subproduction=validated_data['subproduction'], is_deleted=False, type=SubprodctionMaterial.SUB_MA_TYPE_OUT).exists():
|
|
raise ValidationError('该物料已存在')
|
|
validated_data['type']=SubprodctionMaterial.SUB_MA_TYPE_OUT
|
|
return super().create(validated_data)
|
|
|
|
class OutputMaterialUpdateSerializer(serializers.ModelSerializer):
|
|
class Meta:
|
|
model = SubprodctionMaterial
|
|
fields = ['count', 'sort', 'is_main']
|
|
|
|
|
|
|
|
class UsedStepCreateSerializer(serializers.ModelSerializer):
|
|
"""
|
|
产品生产子工序创建
|
|
"""
|
|
class Meta:
|
|
model = UsedStep
|
|
fields = ['step', 'subproduction', 'remark', 'need_test']
|
|
|
|
class UsedStepUpdateSerializer(serializers.ModelSerializer):
|
|
"""
|
|
产品生产子工序编辑
|
|
"""
|
|
class Meta:
|
|
model = UsedStep
|
|
fields = ['remark', 'need_test']
|
|
|
|
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 RecordFormSimpleSerializer(serializers.ModelSerializer):
|
|
|
|
class Meta:
|
|
model = RecordForm
|
|
fields = ['id', 'name', 'number', 'enabled']
|
|
class RecordFormSerializer(serializers.ModelSerializer):
|
|
step_ = StepSimpleSerializer(source='step', read_only=True)
|
|
material_ = MaterialSimpleSerializer(source='material', 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', 'material')
|
|
return queryset
|
|
|
|
class RecordFormCreateSerializer(serializers.ModelSerializer):
|
|
form = serializers.PrimaryKeyRelatedField(
|
|
queryset=RecordForm.objects.all(), label="复制表ID", required=False)
|
|
class Meta:
|
|
model = RecordForm
|
|
fields = ['name', 'type', 'step', 'material', 'number', 'enabled', 'form', 'export_template']
|
|
|
|
|
|
# def validate(self, attrs):
|
|
# if attrs['enabled']:
|
|
# if RecordForm.objects.filter(type=attrs['type'],
|
|
# enabled=True).exists():
|
|
# raise ValidationError('已存在启用的同类检查表')
|
|
# return super().validate(attrs)
|
|
|
|
class RecordFormUpdateSerializer(serializers.ModelSerializer):
|
|
class Meta:
|
|
model = RecordForm
|
|
fields = ['name', 'type', 'number', 'enabled', 'export_template', 'material']
|
|
|
|
# def validate(self, attrs):
|
|
# if attrs['enabled']:
|
|
# if RecordForm.objects.filter(type=attrs['type'],
|
|
# enabled=True).exists():
|
|
# raise ValidationError('已存在启用的同类检查表')
|
|
# return super().validate(attrs)
|
|
|
|
class RecordFormFieldSerializer(serializers.ModelSerializer):
|
|
class Meta:
|
|
model = RecordFormField
|
|
fields = '__all__'
|
|
|
|
class RecordFormDetailSerializer(serializers.ModelSerializer):
|
|
step_ = StepSimpleSerializer(source='step', read_only=True)
|
|
material_ = MaterialSimpleSerializer(source='material', read_only=True)
|
|
form_fields = serializers.SerializerMethodField()
|
|
|
|
class Meta:
|
|
model = RecordForm
|
|
fields = '__all__'
|
|
|
|
@staticmethod
|
|
def setup_eager_loading(queryset):
|
|
""" Perform necessary eager loading of data. """
|
|
queryset = queryset.select_related('step', 'material')
|
|
return queryset
|
|
|
|
def get_form_fields(self, obj):
|
|
serializer = RecordFormFieldSerializer(instance=RecordFormField.objects.filter(form=obj, is_deleted=False).order_by('sort'), many=True)
|
|
data = serializer.data
|
|
if obj.type == RecordForm.RF_TYPE_TEST:
|
|
for i in data:
|
|
if i['need_judge']:
|
|
i['is_testok'] = False
|
|
i['is_teskok_robot'] = False
|
|
return data
|
|
|
|
|
|
class RecordFormFieldCreateSerializer(serializers.ModelSerializer):
|
|
class Meta:
|
|
model = RecordFormField
|
|
fields = '__all__'
|
|
|
|
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
|
|
exclude = ['field_key']
|
|
|
|
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', 'subproduction', 'name', 'content', 'enabled']
|
|
|
|
class TechDocUpdateSerializer(serializers.ModelSerializer):
|
|
class Meta:
|
|
model = TechDoc
|
|
fields = ['file', 'name', 'content', 'enabled']
|