diff --git a/apps/ecm/views.py b/apps/ecm/views.py index 6d12c234..a96261e0 100644 --- a/apps/ecm/views.py +++ b/apps/ecm/views.py @@ -60,6 +60,7 @@ class NotifySettingViewSet(CustomModelViewSet): queryset = NotifySetting.objects.all() serializer_class = NotifySettingsSerializer filterset_fields = ['event_cate', 'obj_cate', 'post', 'user'] + ordering = ['sort', 'create_time'] class EventViewSet(ListModelMixin, RetrieveModelMixin, CustomGenericViewSet): diff --git a/apps/rpm/serializers.py b/apps/rpm/serializers.py index f09075ef..168679dd 100644 --- a/apps/rpm/serializers.py +++ b/apps/rpm/serializers.py @@ -89,31 +89,55 @@ class RpjListSerializer(CustomModelSerializer): fields = '__all__' +# class RemployeeCreateSerializer(CustomModelSerializer): +# phone = serializers.CharField(label="手机号", validators=[phone_check]) +# rparty = serializers.PrimaryKeyRelatedField(queryset=Rparty.objects.all(), label='相关方ID', required=False) + +# class Meta: +# model = Remployee +# fields = ['name', 'phone', 'photo', 'id_number', 'rparty'] +# # model = Employee +# # exclude = EXCLUDE_FIELDS + ['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}, +# # } + +# def create(self, validated_data): +# with transaction.atomic(): +# # 校验上传的证件照 +# dhClient.request(**dhapis['person_img_upload'], file_path_rela=validated_data['photo']) +# return super().create(validated_data) + class RemployeeCreateSerializer(CustomModelSerializer): - phone = serializers.CharField(label="手机号", validators=[phone_check]) rparty = serializers.PrimaryKeyRelatedField(queryset=Rparty.objects.all(), label='相关方ID', required=False) class Meta: model = Remployee fields = ['name', 'phone', 'photo', 'id_number', 'rparty'] - # model = Employee - # exclude = EXCLUDE_FIELDS + ['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}, - # } def create(self, validated_data): with transaction.atomic(): - # 校验上传的证件照 dhClient.request(**dhapis['person_img_upload'], file_path_rela=validated_data['photo']) return super().create(validated_data) +class RemployeeUpdateSerializer(CustomModelSerializer): + class Meta: + model = Remployee + fields = ['phone', 'photo'] + + def update(self, instance, validated_data): + with transaction.atomic(): + dhClient.request(**dhapis['person_img_upload'], file_path_rela=validated_data['photo']) + return super().update(instance, validated_data) + + class RemployeeSerializer(CustomModelSerializer): + rparty_name = serializers.CharField(source='rparty.name', read_only=True) class Meta: model = Remployee diff --git a/apps/rpm/services.py b/apps/rpm/services.py index 421f0af4..d6839ed4 100644 --- a/apps/rpm/services.py +++ b/apps/rpm/services.py @@ -2,7 +2,7 @@ from threading import Thread from apps.hrm.errors import PHONE_EXIST from apps.hrm.models import Certificate, Employee from apps.hrm.services import HrmService -from apps.system.models import User, UserPost +from apps.system.models import Post, User, UserPost from apps.utils.tools import ranstr from apps.wf.models import Ticket, Transition from apps.rpm.models import Rcertificate, Rfile, Rpj, Rpjcertificate, Rpjfile, Rpjmember @@ -47,7 +47,7 @@ def rpj_audit_end(ticket): pass else: user_e = User() - user_e.username = 'RE_' + ranstr(10) + user_e.username = 'RE_' + ranstr(6) user_e.name = rep.name user_e.phone = rep.phone user_e.type = 'remployee' @@ -56,12 +56,13 @@ def rpj_audit_end(ticket): user_e.save() ep.user = user_e ep.save() - + post = Post.objects.get(code='rparty') # 账号划给部门 UserPost.objects.get_or_create(user=ep.user, dept=rpj_dept, defaults={ 'user': ep.user, - 'dept': rpj_dept + 'dept': rpj_dept, + 'post': post }) # 回写 rep.employee = ep diff --git a/apps/rpm/views.py b/apps/rpm/views.py index c2d48f73..e522f257 100644 --- a/apps/rpm/views.py +++ b/apps/rpm/views.py @@ -2,7 +2,7 @@ from django.shortcuts import render from apps.hrm.models import Certificate, Employee from apps.hrm.serializers import CertificateCreateUpdateSerializer, CertificateSerializer, EmployeeSerializer from apps.rpm.models import Rcertificate, Remployee, Rparty, Rfile, Rpjfile, Rpjmember, Rpj -from apps.rpm.serializers import RcertificateCreateUpdateSerializer, RcertificateSerializer, RemployeeCreateSerializer, RemployeeSerializer, RpartyAssignSerializer, RpartyCreateUpdateSerializer, RfileListSerializer, RpartySerializer, RpjListSerializer, RpjfileSerializer, RpjfileUpdateSerializer, RpjmemberCreateSerializer, RpjmemberCreatesSerializer, RpjCreateUpdateSerializer, RpjmemberSerializer, RpjmemberUpdateSerializer +from apps.rpm.serializers import RcertificateCreateUpdateSerializer, RcertificateSerializer, RemployeeCreateSerializer, RemployeeSerializer, RemployeeUpdateSerializer, RpartyAssignSerializer, RpartyCreateUpdateSerializer, RfileListSerializer, RpartySerializer, RpjListSerializer, RpjfileSerializer, RpjfileUpdateSerializer, RpjmemberCreateSerializer, RpjmemberCreatesSerializer, RpjCreateUpdateSerializer, RpjmemberSerializer, RpjmemberUpdateSerializer from apps.system.models import Dictionary, Post, User, UserPost from apps.system.serializers import UserCreateSerializer from apps.utils.viewsets import CustomGenericViewSet, CustomModelViewSet @@ -32,17 +32,20 @@ class RpartyViewSet(CustomModelViewSet): """ obj = self.get_object() if obj.admin: - raise ParseError('已存在管理员账号') - serializer = UserCreateSerializer(data=request.data) - serializer.is_valid(raise_exception=True) - ins = serializer.save(type='remployee') + ins = obj.admin + else: + serializer = UserCreateSerializer(data=request.data) + serializer.is_valid(raise_exception=True) + ins = serializer.save(type='remployee', password=make_password('0000')) + obj.admin = ins + obj.save() + post = Post.objects.get(code='rparty') UserPost.objects.get_or_create(user=ins, dept=obj.dept, defaults={ 'user': ins, - 'dept': obj.dept + 'dept': obj.dept, + 'post': post }) - obj.admin = ins - obj.save() return Response() @@ -50,6 +53,7 @@ class RfileViewSet(ListModelMixin, CustomGenericViewSet): perms_map = {'get': '*'} queryset = Rfile.objects.all() list_serializer_class = RfileListSerializer + ordering = ['file_cate__sort', 'file_cate__create_time'] def get_queryset(self): queryset = super().get_queryset() @@ -59,39 +63,34 @@ class RfileViewSet(ListModelMixin, CustomGenericViewSet): return queryset -class RemployeeViewSet(ListModelMixin, RetrieveModelMixin, CreateModelMixin, CustomDestoryModelMixin, - CustomGenericViewSet): +class RemployeeViewSet(CustomModelViewSet): queryset = Remployee.objects.all() create_serializer_class = RemployeeCreateSerializer + update_serializer_class = RemployeeUpdateSerializer serializer_class = RemployeeSerializer def get_queryset(self): queryset = super().get_queryset() if self.request.user.type == 'remployee': - queryset = queryset.filter(rparty=self.request.user.belong_dept) + queryset = queryset.filter(rparty__dept=self.request.user.belong_dept) return queryset - # @transaction.atomic - # def create(self, request, *args, **kwargs): - # """ - # 添加人员 - # """ - # user = self.request.user - # serializer = self.get_serializer(data=request.data) - # serializer.is_valid(raise_exception=True) - # vdata = serializer.validated_data - # if user.type == 'remployee': # 如果是相关方账号 - # ep = serializer.save() - # Remployee.objects.get_or_create(employee=ep, rparty=user.belong_dept.rparty, - # defaults={ - # "employee": ep, - # "rparty": user.belong_dept.rparty - # }) - # else: - # if 'rparty' not in vdata: - # raise ParseError('未指定相关方') - # serializer.save() - # return Response(serializer.data, status=201) + @transaction.atomic + def create(self, request, *args, **kwargs): + """ + 添加人员 + """ + user = self.request.user + serializer = self.get_serializer(data=request.data) + serializer.is_valid(raise_exception=True) + vdata = serializer.validated_data + if user.type == 'remployee': # 如果是相关方账号 + serializer.save(rparty=user.belong_dept.rparty) + else: + if 'rparty' not in vdata: + raise ParseError('未指定相关方') + serializer.save() + return Response(serializer.data, status=201) class RcertificateViewSet(CustomModelViewSet): @@ -104,7 +103,7 @@ class RcertificateViewSet(CustomModelViewSet): def get_queryset(self): queryset = super().get_queryset() if self.request.user.type == 'remployee': - queryset = queryset.filter(remployee__rparty=self.request.user.belong_dept) + queryset = queryset.filter(remployee__rparty__dept=self.request.user.belong_dept) return queryset diff --git a/apps/vm/serializers.py b/apps/vm/serializers.py index 1d80d3b4..382a01db 100644 --- a/apps/vm/serializers.py +++ b/apps/vm/serializers.py @@ -89,6 +89,7 @@ class VisitorRegisterSerializer(serializers.Serializer): class VisitDetailSerializer(CustomModelSerializer): receptionist_ = UserSimpleSerializer(source='receptionist', read_only=True) + receptionist_name = serializers.CharField(source='receptionist.name', read_only=True) visitors_ = serializers.SerializerMethodField() ticket_ = TicketSerializer(source='ticket', read_only=True) diff --git a/apps/vm/views.py b/apps/vm/views.py index 10005236..bbca23eb 100644 --- a/apps/vm/views.py +++ b/apps/vm/views.py @@ -53,8 +53,7 @@ class VisitViewSet(CustomModelViewSet): return super().destroy(request, *args, **kwargs) -class VisitorViewSet(ListModelMixin, RetrieveModelMixin, CreateModelMixin, CustomDestoryModelMixin, UpdateModelMixin, - CustomGenericViewSet): +class VisitorViewSet(CustomModelViewSet): queryset = Visitor.objects.all() create_serializer_class = VisitorCreateSerializer update_serializer_class = VisitorCreateSerializer @@ -62,9 +61,9 @@ class VisitorViewSet(ListModelMixin, RetrieveModelMixin, CreateModelMixin, Custo def get_queryset(self): user = self.request.user - queryset = super().get_queryset() - if user.type == 'visitor': - queryset = queryset.filter(create_by=user) + queryset = super().get_queryset().filter(create_by=user) + # if user.type == 'visitor': + # queryset = queryset.filter(create_by=user) return queryset @action(methods=['post'], detail=False,