206 lines
		
	
	
		
			7.0 KiB
		
	
	
	
		
			Python
		
	
	
	
			
		
		
	
	
			206 lines
		
	
	
		
			7.0 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):
 | |
|     equipments_ = EquipmentSimpleSerializer(source='equipments', many=True)
 | |
|     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']
 |