diff --git a/hb_server/apps/hrm/serializers.py b/hb_server/apps/hrm/serializers.py index 9371ff4..1aaf018 100644 --- a/hb_server/apps/hrm/serializers.py +++ b/hb_server/apps/hrm/serializers.py @@ -14,6 +14,10 @@ class EmployeeSerializer(DynamicFieldsSerializerMixin, ModelSerializer): model = Employee exclude = ['face_data'] +class EmployeeNotWorkRemarkSerializer(ModelSerializer): + class Meta: + model = Employee + fields = ['not_work_remark'] class FaceLoginSerializer(serializers.Serializer): base64 = serializers.CharField() diff --git a/hb_server/apps/hrm/views.py b/hb_server/apps/hrm/views.py index c19c308..8313ad4 100644 --- a/hb_server/apps/hrm/views.py +++ b/hb_server/apps/hrm/views.py @@ -1,4 +1,5 @@ from functools import update_wrapper +from venv import create from django.shortcuts import render from django.utils import timezone from rest_framework.response import Response @@ -8,8 +9,8 @@ from apps.hrm.filters import ClockRecordFilterSet, EmployeeFilterSet from apps.hrm.services import HRMService from apps.hrm.tasks import update_all_user_facedata_cache from apps.system.mixins import CreateUpdateModelAMixin, OptimizationMixin -from apps.hrm.models import ClockRecord, Employee -from apps.hrm.serializers import ClockRecordListSerializer, EmployeeSerializer, FaceClockCreateSerializer, FaceLoginSerializer +from apps.hrm.models import ClockRecord, Employee, NotWorkRemark +from apps.hrm.serializers import ClockRecordListSerializer, EmployeeNotWorkRemarkSerializer, EmployeeSerializer, FaceClockCreateSerializer, FaceLoginSerializer @@ -53,6 +54,41 @@ class EmployeeViewSet(CreateUpdateModelAMixin, OptimizationMixin, UpdateModelMix serializer.save(update_by=request.user) 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_local = timezone.localtime() + instance, created = NotWorkRemark.objects.get_or_create( + year = now_local.year, + month = now_local.month, + day = now_local.day, + user = obj.user, + defaults={ + "year":now_local.year, + "month":now_local.month, + "day":now_local.day, + "user":obj.user, + "remark":remark, + "create_by":request.user, + } + ) + if not created: + instance.remark = remark + instance.update_by = request.user + instance.save() + return Response() + return Response('无需填写离岗说明', status=status.HTTP_400_BAD_REQUEST) + class ClockRecordViewSet(CreateModelMixin, ListModelMixin, GenericViewSet): """ diff --git a/hb_server/apps/mtm/serializers.py b/hb_server/apps/mtm/serializers.py index ae243d9..7d97aa4 100644 --- a/hb_server/apps/mtm/serializers.py +++ b/hb_server/apps/mtm/serializers.py @@ -187,7 +187,7 @@ class RecordFormSerializer(serializers.ModelSerializer): class RecordFormCreateSerializer(serializers.ModelSerializer): form = serializers.PrimaryKeyRelatedField( - queryset=RecordForm.objects.all(), label="复制表ID") + queryset=RecordForm.objects.all(), label="复制表ID", required=False) class Meta: model = RecordForm fields = ['name', 'type', 'step', 'material', 'number', 'enabled', 'form'] diff --git a/hb_server/apps/mtm/views.py b/hb_server/apps/mtm/views.py index 7aaf203..5a89d8b 100644 --- a/hb_server/apps/mtm/views.py +++ b/hb_server/apps/mtm/views.py @@ -185,6 +185,23 @@ class RecordFormViewSet(OptimizationMixin, CreateUpdateModelAMixin, ModelViewSet instance = self.get_object() serializer = self.serializer_class(instance=RecordFormField.objects.filter(form=instance, is_deleted=False), many=True) return Response(serializer.data) + + @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.create_by = request.user + instance.save() + 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 Response() @@ -208,22 +225,6 @@ class RecordFormFieldViewSet(OptimizationMixin, CreateUpdateModelAMixin, ModelVi return RecordFormFieldUpdateSerializer 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): """ 技术文件增删改查