from django.shortcuts import render from django.utils import timezone from rest_framework.response import Response from rest_framework.mixins import UpdateModelMixin, RetrieveModelMixin, CreateModelMixin, ListModelMixin from apps.hrm.errors import NO_NEED_LEVEL_REMARK from apps.hrm.filters import ClockRecordFilterSet, EmployeeFilterSet, NotWorkRemarkFilterSet from apps.hrm.models import ClockRecord, Employee, NotWorkRemark from apps.hrm.serializers import ClockRecordListSerializer, EmployeeNotWorkRemarkSerializer, EmployeeSerializer, FaceClockCreateSerializer, FaceLoginSerializer, NotWorkRemarkListSerializer from rest_framework.generics import CreateAPIView from rest_framework import status from rest_framework_simplejwt.tokens import RefreshToken from rest_framework import exceptions from apps.system.models import User from apps.system.serializers import UserSimpleSerializer from rest_framework.permissions import AllowAny from rest_framework.decorators import action from apps.utils.viewsets import CustomModelViewSet, CustomGenericViewSet from rest_framework.exceptions import ParseError # Create your views here. class EmployeeViewSet(CustomModelViewSet): """ 人员管理 """ queryset = Employee.objects.all() select_related_fields = ['user'] filterset_class = EmployeeFilterSet serializer_class = EmployeeSerializer search_fields = ['name', 'number', 'user__username'] ordering = ['-pk'] def update(self, request, *args, **kwargs): partial = kwargs.pop('partial', False) instance = self.get_object() data = request.data serializer = self.get_serializer(instance, data=data, partial=partial) serializer.is_valid(raise_exception=True) photo = data.get('photo', None) if instance.photo != photo: # 调取大华接口 return Response() serializer.save() return Response() @action(methods=['post'], detail=True, perms_map={'post': 'employee_notworkremark'} , serializer_class=EmployeeNotWorkRemarkSerializer) def not_work_remark(self, request, pk=None): """ 填写离岗说明 """ serializer = self.get_serializer(data=request.data) serializer.is_valid(raise_exception=True) obj = self.get_object() if not obj.is_atwork: remark = request.data.get('not_work_remark', '') obj.not_work_remark = remark obj.save() now = timezone.now() instance, created = NotWorkRemark.objects.get_or_create( not_work_date = now.date(), user = obj.user, defaults={ "not_work_date":now.date(), "user":obj.user, "remark":remark, "create_by":request.user, } ) if not created: instance.remark = remark instance.update_by = request.user instance.save() return Response() raise ParseError(**NO_NEED_LEVEL_REMARK) class ClockRecordViewSet(ListModelMixin, CustomGenericViewSet): """ 打卡记录 """ perms_map = {'get':'*', 'post':'*'} authentication_classes = [] permission_classes = [AllowAny] queryset = ClockRecord.objects.all() select_related_fields = ['create_by'] serializer_class = ClockRecordListSerializer filterset_class = ClockRecordFilterSet ordering = ['-pk'] class NotWorkRemarkViewSet(ListModelMixin, CustomGenericViewSet): """ 离岗说明 """ perms_map = {'get':'*'} queryset = NotWorkRemark.objects.all() select_related_fields = ['user'] serializer_class = NotWorkRemarkListSerializer filterset_class = NotWorkRemarkFilterSet ordering = ['-pk']