from apps.hrm.models import Employee from apps.hrm.serializers import phone_check from apps.rpm.models import Rparty, Rpeople, Rproject from apps.system.models import Dept from apps.utils.constants import EXCLUDE_FIELDS from apps.utils.serializers import CustomModelSerializer from apps.system.serializers import DictSerializer, FileSerializer from rest_framework import serializers class RpartyCreateUpdateSerializer(CustomModelSerializer): class Meta: model = Rparty fields = ['name', 'number', 'lawer', 'contacter', 'phone', 'email', 'description', 'belong_dept'] extra_kwargs = { 'belong_dept': {'required': True} } def create(self, validated_data): instance = super().create(validated_data) dept = Dept.objects.create(name=instance.name, parent=instance.belong_dept) instance.dept = dept instance.save() return instance def update(self, instance, validated_data): instance = super().update(instance, validated_data) dept = instance.dept dept.name = instance.name dept.parent = instance.belong_dept dept.save() return instance class RpartySerializer(CustomModelSerializer): class Meta: model = Rparty fields = '__all__' class RpartySimpleSerializer(CustomModelSerializer): class Meta: model = Rparty fields = ['id', 'name'] class RpartyAssignSerializer(serializers.Serializer): username = serializers.CharField('用户名') class RpartyFileListSerializer(CustomModelSerializer): rparty_ = RpartySimpleSerializer(source='rparty', read_only=True) file_cate_ = DictSerializer(source='file_cate', read_only=True) files_ = FileSerializer(source='files', many=True, read_only=True) class RprojectCreateUpdateSerializer(CustomModelSerializer): class Meta: model = Rproject fields = ['name', 'contract_number', 'type', 'come_time', 'leave_time', 'belong_dept'] class RprojectListSerializer(CustomModelSerializer): class Meta: model = Rproject fields = '__all__' class RemployeeCreateUpdateSerializer(CustomModelSerializer): phone = serializers.CharField(label="手机号", validators=[phone_check]) rparty = serializers.PrimaryKeyRelatedField(queryset=Rparty.objects.all(), label='相关方ID', required=False) class Meta: model = Employee exclude = EXCLUDE_FIELDS + ['face_data', 'is_atwork', 'last_check_time', 'not_work_remark', 'third_info', 'type'] extra_kwargs = { 'phone': {'required': True}, 'number': {'required': True}, 'photo': {'required': True}, 'id_number': {'required': True}, } class RpeopleCreatesSerializer(CustomModelSerializer): employees = serializers.PrimaryKeyRelatedField( queryset=Employee.objects.filter(type='remployee'), many=True, label='员工ID列表' ) class Meta: model = Rpeople fields = ['employees', 'rproject']