is_atwork调整位置
This commit is contained in:
parent
985935641e
commit
7bfe483c90
|
@ -0,0 +1,23 @@
|
||||||
|
# Generated by Django 3.2.9 on 2022-02-17 13:55
|
||||||
|
|
||||||
|
from django.db import migrations, models
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
('hrm', '0005_auto_20220126_1351'),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.AddField(
|
||||||
|
model_name='employee',
|
||||||
|
name='is_atwork',
|
||||||
|
field=models.BooleanField(default=False, verbose_name='当前在岗'),
|
||||||
|
),
|
||||||
|
migrations.AddField(
|
||||||
|
model_name='employee',
|
||||||
|
name='last_check_time',
|
||||||
|
field=models.DateTimeField(blank=True, null=True, verbose_name='打卡时间'),
|
||||||
|
),
|
||||||
|
]
|
|
@ -30,6 +30,8 @@ class Employee(CommonAModel):
|
||||||
qualification = models.CharField('学历', max_length=50, null=True, blank=True)
|
qualification = models.CharField('学历', max_length=50, null=True, blank=True)
|
||||||
job_state = models.IntegerField('在职状态', choices=jobstate_choices, default=1)
|
job_state = models.IntegerField('在职状态', choices=jobstate_choices, default=1)
|
||||||
face_data = models.JSONField('人脸识别数据', null=True, blank=True)
|
face_data = models.JSONField('人脸识别数据', null=True, blank=True)
|
||||||
|
is_atwork = models.BooleanField('当前在岗', default=False)
|
||||||
|
last_check_time = models.DateTimeField('打卡时间', null=True, blank=True)
|
||||||
class Meta:
|
class Meta:
|
||||||
verbose_name = '员工补充信息'
|
verbose_name = '员工补充信息'
|
||||||
verbose_name_plural = verbose_name
|
verbose_name_plural = verbose_name
|
||||||
|
|
|
@ -10,8 +10,6 @@ from django.db.models.query import Prefetch
|
||||||
class EmployeeSerializer(DynamicFieldsSerializerMixin, ModelSerializer):
|
class EmployeeSerializer(DynamicFieldsSerializerMixin, ModelSerializer):
|
||||||
name = serializers.CharField(source='user.name', read_only=True)
|
name = serializers.CharField(source='user.name', read_only=True)
|
||||||
dept_ = OrganizationSimpleSerializer(source='user.dept', read_only=True)
|
dept_ = OrganizationSimpleSerializer(source='user.dept', read_only=True)
|
||||||
is_atwork = serializers.BooleanField(source='user.is_atwork', read_only=True)
|
|
||||||
last_check_time = serializers.DateTimeField(source='user.last_check_time', read_only=True)
|
|
||||||
class Meta:
|
class Meta:
|
||||||
model = Employee
|
model = Employee
|
||||||
exclude = ['face_data']
|
exclude = ['face_data']
|
||||||
|
|
|
@ -2,16 +2,15 @@ from __future__ import absolute_import, unicode_literals
|
||||||
|
|
||||||
from celery import shared_task
|
from celery import shared_task
|
||||||
from apps.hrm.models import Employee
|
from apps.hrm.models import Employee
|
||||||
from apps.system.models import User
|
|
||||||
from django.core.cache import cache
|
from django.core.cache import cache
|
||||||
|
|
||||||
|
|
||||||
@shared_task
|
@shared_task
|
||||||
def update_all_user_not_atwork():
|
def update_all_employee_not_atwork():
|
||||||
"""
|
"""
|
||||||
将所有员工设为非在岗状态
|
将所有员工设为非在岗状态
|
||||||
"""
|
"""
|
||||||
User.objects.all().update(is_atwork=False, last_check_time = None)
|
Employee.objects.all().update(is_atwork=False, last_check_time = None)
|
||||||
|
|
||||||
@shared_task
|
@shared_task
|
||||||
def update_all_user_facedata_cache():
|
def update_all_user_facedata_cache():
|
||||||
|
|
|
@ -92,9 +92,7 @@ class ClockRecordViewSet(CreateModelMixin, ListModelMixin, GenericViewSet):
|
||||||
ins.update_time = now
|
ins.update_time = now
|
||||||
ins.save()
|
ins.save()
|
||||||
# 设为在岗
|
# 设为在岗
|
||||||
user.is_atwork = True
|
Employee.objects.filter(user=user).update(is_atwork=True, last_check_time=now)
|
||||||
user.last_check_time = now
|
|
||||||
user.save()
|
|
||||||
return Response(UserSimpleSerializer(instance=user).data)
|
return Response(UserSimpleSerializer(instance=user).data)
|
||||||
return Response(msg, status=status.HTTP_400_BAD_REQUEST)
|
return Response(msg, status=status.HTTP_400_BAD_REQUEST)
|
||||||
return Response('非打卡时间范围', status=status.HTTP_400_BAD_REQUEST)
|
return Response('非打卡时间范围', status=status.HTTP_400_BAD_REQUEST)
|
||||||
|
@ -140,9 +138,7 @@ class FaceLogin(CreateAPIView):
|
||||||
})
|
})
|
||||||
# 设为在岗
|
# 设为在岗
|
||||||
if created:
|
if created:
|
||||||
user.is_atwork = True
|
Employee.objects.filter(user=user).update(is_atwork=True, last_check_time=now)
|
||||||
user.last_check_time = now
|
|
||||||
user.save()
|
|
||||||
|
|
||||||
return Response({
|
return Response({
|
||||||
'refresh': str(refresh),
|
'refresh': str(refresh),
|
||||||
|
|
|
@ -10,7 +10,7 @@ from rest_framework.decorators import action
|
||||||
from rest_framework.response import Response
|
from rest_framework.response import Response
|
||||||
from utils.pagination import PageOrNot
|
from utils.pagination import PageOrNot
|
||||||
from rest_framework.exceptions import APIException
|
from rest_framework.exceptions import APIException
|
||||||
|
from django.db import transaction
|
||||||
|
|
||||||
# Create your views here.
|
# Create your views here.
|
||||||
class MaterialViewSet(PageOrNot, CreateUpdateModelAMixin, ModelViewSet):
|
class MaterialViewSet(PageOrNot, CreateUpdateModelAMixin, ModelViewSet):
|
||||||
|
@ -208,6 +208,22 @@ class RecordFormFieldViewSet(OptimizationMixin, CreateUpdateModelAMixin, ModelVi
|
||||||
return RecordFormFieldUpdateSerializer
|
return RecordFormFieldUpdateSerializer
|
||||||
return RecordFormFieldSerializer
|
return RecordFormFieldSerializer
|
||||||
|
|
||||||
|
@transaction.atomic
|
||||||
|
def create(self, request, *args, **kwargs):
|
||||||
|
serializer = self.get_serializer(data=request.data)
|
||||||
|
serializer.is_valid(raise_exception=True)
|
||||||
|
vdata = serializer.validated_data
|
||||||
|
form = vdata.pop('form', None)
|
||||||
|
instance = RecordForm(**vdata)
|
||||||
|
instance.save(create_by=request.user)
|
||||||
|
if form:
|
||||||
|
for i in RecordFormField.objects.filter(form=form, is_deleted=False):
|
||||||
|
i.pk = None
|
||||||
|
i.form = instance
|
||||||
|
i.parent = None
|
||||||
|
i.save()
|
||||||
|
return super().create(request, *args, **kwargs)
|
||||||
|
|
||||||
class TechDocViewSet(OptimizationMixin, CreateUpdateModelAMixin, ModelViewSet):
|
class TechDocViewSet(OptimizationMixin, CreateUpdateModelAMixin, ModelViewSet):
|
||||||
"""
|
"""
|
||||||
技术文件增删改查
|
技术文件增删改查
|
||||||
|
|
|
@ -7,4 +7,4 @@ class UserFilter(DynamicFieldsFilterMixin, filters.FilterSet):
|
||||||
name = filters.CharFilter(field_name='name', lookup_expr='contains')
|
name = filters.CharFilter(field_name='name', lookup_expr='contains')
|
||||||
class Meta:
|
class Meta:
|
||||||
model = User
|
model = User
|
||||||
fields = ['name', 'is_active', 'is_atwork']
|
fields = ['name', 'is_active']
|
|
@ -1,18 +0,0 @@
|
||||||
# Generated by Django 3.2.9 on 2022-01-21 05:41
|
|
||||||
|
|
||||||
from django.db import migrations, models
|
|
||||||
|
|
||||||
|
|
||||||
class Migration(migrations.Migration):
|
|
||||||
|
|
||||||
dependencies = [
|
|
||||||
('system', '0003_auto_20210812_0909'),
|
|
||||||
]
|
|
||||||
|
|
||||||
operations = [
|
|
||||||
migrations.AddField(
|
|
||||||
model_name='user',
|
|
||||||
name='is_atwork',
|
|
||||||
field=models.BooleanField(default=False, verbose_name='当前在岗'),
|
|
||||||
),
|
|
||||||
]
|
|
|
@ -1,18 +0,0 @@
|
||||||
# Generated by Django 3.2.9 on 2022-01-25 08:51
|
|
||||||
|
|
||||||
from django.db import migrations, models
|
|
||||||
|
|
||||||
|
|
||||||
class Migration(migrations.Migration):
|
|
||||||
|
|
||||||
dependencies = [
|
|
||||||
('system', '0004_user_is_atwork'),
|
|
||||||
]
|
|
||||||
|
|
||||||
operations = [
|
|
||||||
migrations.AddField(
|
|
||||||
model_name='user',
|
|
||||||
name='last_check_time',
|
|
||||||
field=models.DateTimeField(blank=True, null=True, verbose_name='打卡时间'),
|
|
||||||
),
|
|
||||||
]
|
|
|
@ -116,8 +116,6 @@ class User(AbstractUser):
|
||||||
superior = models.ForeignKey(
|
superior = models.ForeignKey(
|
||||||
'self', null=True, blank=True, on_delete=models.SET_NULL, verbose_name='上级主管')
|
'self', null=True, blank=True, on_delete=models.SET_NULL, verbose_name='上级主管')
|
||||||
roles = models.ManyToManyField(Role, blank=True, verbose_name='角色')
|
roles = models.ManyToManyField(Role, blank=True, verbose_name='角色')
|
||||||
is_atwork = models.BooleanField('当前在岗', default=False)
|
|
||||||
last_check_time = models.DateTimeField('打卡时间', null=True, blank=True)
|
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
verbose_name = '用户信息'
|
verbose_name = '用户信息'
|
||||||
|
|
|
@ -144,7 +144,7 @@ class UserListSerializer(DynamicFieldsSerializerMixin, serializers.ModelSerializ
|
||||||
fields = ['id', 'name', 'phone', 'email', 'position',
|
fields = ['id', 'name', 'phone', 'email', 'position',
|
||||||
'username', 'is_active', 'date_joined',
|
'username', 'is_active', 'date_joined',
|
||||||
'dept_', 'dept', 'roles', 'avatar',
|
'dept_', 'dept', 'roles', 'avatar',
|
||||||
'roles_', 'is_atwork', 'last_check_time']
|
'roles_']
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def setup_eager_loading(queryset):
|
def setup_eager_loading(queryset):
|
||||||
|
|
Loading…
Reference in New Issue