78 lines
2.9 KiB
Python
78 lines
2.9 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
|
|
|
|
|
|
class CdSerializer(serializers.Serializer):
|
|
method = serializers.CharField(label="方法名") |