75 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			Python
		
	
	
	
			
		
		
	
	
			75 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			Python
		
	
	
	
from apps.utils.serializers import CustomModelSerializer
 | 
						|
from apps.em.models import Equipment, EcheckRecord, EInspect, Ecate
 | 
						|
from apps.system.models import Dept
 | 
						|
from apps.utils.constants import EXCLUDE_FIELDS, EXCLUDE_FIELDS_BASE
 | 
						|
from rest_framework import serializers
 | 
						|
from rest_framework.exceptions import ValidationError
 | 
						|
from rest_framework.exceptions import ParseError
 | 
						|
 | 
						|
 | 
						|
class EcateSerializer(CustomModelSerializer):
 | 
						|
    class Meta:
 | 
						|
        model = Ecate
 | 
						|
        fields = "__all__"
 | 
						|
        read_only_fields = EXCLUDE_FIELDS_BASE
 | 
						|
 | 
						|
 | 
						|
class EquipmentSerializer(CustomModelSerializer):
 | 
						|
    belong_dept = serializers.PrimaryKeyRelatedField(label="责任部门", queryset=Dept.objects.all())
 | 
						|
    keeper_name = serializers.CharField(source="keeper.name", read_only=True)
 | 
						|
    belong_dept_name = serializers.CharField(source="belong_dept.name", read_only=True)
 | 
						|
    mgroup_name = serializers.CharField(source="mgroup.name", read_only=True)
 | 
						|
    cate_name = serializers.CharField(source="cate.name", read_only=True)
 | 
						|
    cate_code = serializers.CharField(source="cate.code", read_only=True)
 | 
						|
    full_name = serializers.SerializerMethodField()
 | 
						|
 | 
						|
    def validate(self, attrs):
 | 
						|
        number = attrs.get("number", None)
 | 
						|
        if number:
 | 
						|
            eq = Equipment.objects.get_queryset(all=True).filter(number=number).first()
 | 
						|
            if eq and eq.is_deleted:
 | 
						|
                eq.is_deleted = False
 | 
						|
                eq.save(update_fields=["is_deleted"])
 | 
						|
                raise ParseError(f"{number}已存在并恢复")
 | 
						|
 | 
						|
        mgroup = attrs.get("mgroup", None)
 | 
						|
        if mgroup:
 | 
						|
            attrs["belong_dept"] = mgroup.belong_dept
 | 
						|
        cate = attrs.get("cate", None)
 | 
						|
        if cate:
 | 
						|
            attrs["type"] = cate.type
 | 
						|
        return super().validate(attrs)
 | 
						|
 | 
						|
    def get_full_name(self, obj):
 | 
						|
        return f"{obj.number}|{obj.name}|{obj.model}"
 | 
						|
 | 
						|
    class Meta:
 | 
						|
        model = Equipment
 | 
						|
        fields = "__all__"
 | 
						|
        read_only_fields = EXCLUDE_FIELDS + ["check_date", "next_check_date", "keeper_name", "belong_dept_name", "running_state"]
 | 
						|
 | 
						|
 | 
						|
class EcheckRecordSerializer(CustomModelSerializer):
 | 
						|
    equipment_name = serializers.StringRelatedField(source="equipment", read_only=True)
 | 
						|
 | 
						|
    class Meta:
 | 
						|
        model = EcheckRecord
 | 
						|
        fields = "__all__"
 | 
						|
        read_only_fields = EXCLUDE_FIELDS
 | 
						|
 | 
						|
    def validate(self, attrs):
 | 
						|
        check_date = attrs["check_date"]
 | 
						|
        if EcheckRecord.objects.filter(check_date__gte=check_date, equipment=attrs["equipment"]).exists():
 | 
						|
            raise ValidationError("检定日期小于历史记录")
 | 
						|
        return attrs
 | 
						|
 | 
						|
 | 
						|
class EInspectSerializer(CustomModelSerializer):
 | 
						|
    equipment_name = serializers.StringRelatedField(source="equipment", read_only=True)
 | 
						|
    inspect_user_name = serializers.CharField(source="inspect_user.name", read_only=True)
 | 
						|
 | 
						|
    class Meta:
 | 
						|
        model = EInspect
 | 
						|
        fields = "__all__"
 | 
						|
        read_only_fields = EXCLUDE_FIELDS
 |