133 lines
5.1 KiB
Python
133 lines
5.1 KiB
Python
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, ChannelAuthoritySerializer, EmployeeCreateUpdateSerializer, EmployeeNotWorkRemarkSerializer, EmployeeSerializer, 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.serializers import PkSerializer
|
|
from apps.utils.viewsets import CustomModelViewSet, CustomGenericViewSet
|
|
from rest_framework.exceptions import ParseError
|
|
from django.db import transaction
|
|
from datetime import datetime
|
|
from rest_framework import serializers
|
|
from apps.utils.dahua import dhClient
|
|
from apps.third.tapis import dhapis
|
|
|
|
# Create your views here.
|
|
class EmployeeViewSet(CustomModelViewSet):
|
|
"""
|
|
人员管理
|
|
"""
|
|
queryset = Employee.objects.all()
|
|
select_related_fields = ['user']
|
|
filterset_class = EmployeeFilterSet
|
|
serializer_class = EmployeeSerializer
|
|
create_serializer_class = EmployeeCreateUpdateSerializer
|
|
update_serializer_class = EmployeeCreateUpdateSerializer
|
|
partial_update_serializer_class = EmployeeCreateUpdateSerializer
|
|
search_fields = ['name', 'number', 'user__username']
|
|
ordering = ['-pk']
|
|
|
|
@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)
|
|
|
|
@transaction.atomic
|
|
@action(methods=['post'], detail=False, perms_map={'post': 'employee_channel_authority'}
|
|
, serializer_class=ChannelAuthoritySerializer)
|
|
def channel_authority(self, request, pk=None):
|
|
"""门通道授权
|
|
|
|
门通道授权
|
|
"""
|
|
serializer = self.get_serializer(data=request.data)
|
|
serializer.is_valid(raise_exception=True)
|
|
vdata = serializer.validated_data
|
|
objs = Employee.objects.filter(pk__in=vdata['pks'], third_info__dh_face_card__isnull=False)
|
|
infos = objs.values('third_info')
|
|
cards = []
|
|
for i in infos:
|
|
if isinstance(i['third_info'], dict) and 'dh_face_card' in i['third_info']:
|
|
cards.append(i['third_info']['dh_face_card'])
|
|
details = []
|
|
for i in vdata['channels']:
|
|
details.append({
|
|
"privilegeType": 1,
|
|
"resouceCode": i
|
|
})
|
|
if cards and details:
|
|
json_data = {
|
|
"cardNumbers": cards,
|
|
"timeQuantumId": 1,
|
|
"cardPrivilegeDetails": details
|
|
}
|
|
dhClient.request(**dhapis['card_door_authority'], json=json_data)
|
|
for i in objs:
|
|
i.third_info['dh_channels'] = vdata['channels']
|
|
Employee.objects.bulk_update(objs, fields = ['third_info'])
|
|
return Response()
|
|
|
|
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'] |