考勤天数统计

This commit is contained in:
caoqianming 2022-01-26 16:42:18 +08:00
parent e3e623c5e1
commit f0fd992f18
4 changed files with 38 additions and 8 deletions

View File

@ -20,7 +20,7 @@ from rest_framework import exceptions
from apps.system.models import User from apps.system.models import User
from apps.system.serializers import UserSimpleSerializer from apps.system.serializers import UserSimpleSerializer
from rest_framework.permissions import AllowAny from rest_framework.permissions import AllowAny
from rest_framework.decorators import action
# Create your views here. # Create your views here.
@ -79,9 +79,9 @@ class ClockRecordViewSet(CreateModelMixin, ListModelMixin, GenericViewSet):
user, msg = HRMService.face_compare_from_base64(base64_data) user, msg = HRMService.face_compare_from_base64(base64_data)
if user: if user:
ins, created = ClockRecord.objects.get_or_create( ins, created = ClockRecord.objects.get_or_create(
create_by=request.user, create_time__hour__range = [8,18], create_by = user, create_time__hour__range = [8,18],
create_time__year=now.year, create_time__month=now.month, create_time__year=now_local.year, create_time__month=now_local.month,
create_time__day=now.day, create_time__day=now_local.day,
defaults={ defaults={
'type':ClockRecord.ClOCK_WORK1, 'type':ClockRecord.ClOCK_WORK1,
'create_by':user, 'create_by':user,

View File

@ -24,3 +24,8 @@ class PlanGanttSerializer(serializers.ModelSerializer):
class ProcessYieldSerializer(serializers.Serializer): class ProcessYieldSerializer(serializers.Serializer):
datetime_start = serializers.DateField(label='开始时间', required=False, allow_null=True) datetime_start = serializers.DateField(label='开始时间', required=False, allow_null=True)
datetime_end = serializers.DateField(label='结束时间', required=False, allow_null=True) datetime_end = serializers.DateField(label='结束时间', required=False, allow_null=True)
class AtWorkCountSerializer(serializers.Serializer):
year = serializers.IntegerField(label='')
month = serializers.IntegerField(label='')

View File

@ -3,12 +3,13 @@ from rest_framework import urlpatterns
from django.urls import path, include from django.urls import path, include
from rest_framework.routers import DefaultRouter from rest_framework.routers import DefaultRouter
from apps.srm.views import GanttPlan, ProcessYieldView from apps.srm.views import AtWorkCountView, GanttPlan, ProcessYieldView
router = DefaultRouter() router = DefaultRouter()
urlpatterns = [ urlpatterns = [
path('gantt/plan/', GanttPlan.as_view()), path('gantt/plan/', GanttPlan.as_view()),
path('process/yield/', ProcessYieldView.as_view()), path('process/yield/', ProcessYieldView.as_view()),
path('at_work/', AtWorkCountView.as_view()),
path('', include(router.urls)), path('', include(router.urls)),
] ]

View File

@ -4,11 +4,12 @@ from rest_framework import serializers
from rest_framework.generics import ListAPIView, CreateAPIView from rest_framework.generics import ListAPIView, CreateAPIView
from rest_framework.views import APIView from rest_framework.views import APIView
from rest_framework.response import Response from rest_framework.response import Response
from apps.hrm.models import ClockRecord
from apps.mtm.models import Process, Step from apps.mtm.models import Process, Step
from apps.pm.models import ProductionPlan, SubProductionPlan from apps.pm.models import ProductionPlan, SubProductionPlan
from apps.srm.serializers import PlanGanttSerializer, ProcessYieldSerializer from apps.srm.serializers import AtWorkCountSerializer, PlanGanttSerializer, ProcessYieldSerializer
from apps.wpm.models import WProduct, WproductFlow from apps.wpm.models import WProduct, WproductFlow
from django.db.models import Count from django.db.models import Count, F
# Create your views here. # Create your views here.
class GanttPlan(ListAPIView): class GanttPlan(ListAPIView):
@ -65,3 +66,26 @@ class ProcessYieldView(CreateAPIView):
return Response(ret) return Response(ret)
class AtWorkCountView(CreateAPIView):
"""
到岗天数统计
"""
perms_map = {'get':'*'}
serializer_class = AtWorkCountSerializer
def create(self, request, *args, **kwargs):
serializer = self.get_serializer(data=request.data)
serializer.is_valid(raise_exception=True)
vdata = serializer.validated_data
ret = ClockRecord.objects.filter(
create_time__year = vdata['year'],
create_time__month = vdata['month']
).values(
user_id = F('create_by'),
username = F('create_by__username'),
name = F('create_by__name'),
dept_name = F('create_by__dept__name')).annotate(
count = Count('id')
)
return Response(list(ret))