factory/apps/vm/serializers.py

97 lines
3.3 KiB
Python

from apps.hrm.models import Employee
from apps.utils.constants import EXCLUDE_FIELDS
from apps.utils.serializers import CustomModelSerializer
from apps.vm.models import Visit, Visitor, Vpeople
from rest_framework import serializers
from rest_framework.exceptions import ParseError
from django.db import transaction
from apps.third.clients import dhClient
from apps.third.tapis import dhapis
from apps.system.serializers import UserSimpleSerializer
from apps.wf.serializers import TicketSimpleSerializer
class VisitCreateUpdateSerializer(CustomModelSerializer):
class Meta:
model = Visit
fields = ['purpose', 'name', 'description', 'visit_time',
'leave_time', 'receptionist', 'company', 'level', 'count_people']
class VisitSerializer(CustomModelSerializer):
receptionist_ = UserSimpleSerializer(source='receptionist', read_only=True)
ticket_ = TicketSimpleSerializer(source='ticket', read_only=True)
class Meta:
model = Visit
fields = '__all__'
class VisitorCreateSerializer(CustomModelSerializer):
# phone = serializers.CharField(label="手机号", validators=[phone_check])
class Meta:
model = Visitor
fields = ['name', 'phone', 'photo', 'id_number']
def create(self, validated_data):
with transaction.atomic():
# 校验上传的证件照
if validated_data.get('photo', None):
dhClient.request(**dhapis['person_img_upload'], file_path_rela=validated_data['photo'])
return super().create(validated_data)
class VisitorSerializer(CustomModelSerializer):
class Meta:
model = Visitor
fields = '__all__'
class VpeopleCreateSerializer(CustomModelSerializer):
class Meta:
model = Vpeople
fields = ['visit', 'visitor', 'is_main']
def create(self, validated_data):
if validated_data['visit'].state != Visit.V_CREATE:
raise ParseError('项目非创建状态不可新增成员')
if validated_data['visit'].level == 10:
visitor = validated_data['visitor']
if visitor.id_number and visitor.photo:
pass
else:
raise ParseError('访客信息不全,请完善后再试')
if Vpeople.objects.filter(visit=validated_data['visit'], visitor=validated_data['visitor']).exists():
raise ParseError('该访客已选中')
ins = super().create(validated_data)
if ins.is_main:
Vpeople.objects.filter(visit=validated_data['visit']).exclude(id=ins.id).update(is_main=False)
return ins
class VpeopleSerializer(CustomModelSerializer):
visitor_ = VisitorSerializer(source='visitor', read_only=True)
class Meta:
model = Vpeople
fields = '__all__'
class VisitorRegisterSerializer(serializers.Serializer):
name = serializers.CharField(label="姓名")
username = serializers.CharField(label='用户名', min_length=6)
class VisitDetailSerializer(CustomModelSerializer):
receptionist_ = UserSimpleSerializer(source='receptionist', read_only=True)
visitors_ = serializers.SerializerMethodField()
class Meta:
model = Visit
fields = '__all__'
def get_visitors_(self, obj):
objs = Vpeople.objects.filter(visit=obj).order_by('is_main', 'create_time')
return VpeopleSerializer(instance=objs, many=True).data