From 90cb2ed7f7a3d9a2f12de1c9a483a9097276b727 Mon Sep 17 00:00:00 2001 From: TianyangZhang Date: Thu, 25 Dec 2025 09:43:58 +0800 Subject: [PATCH] =?UTF-8?q?feat:=E6=96=B0=E5=A2=9E=E4=BA=BA=E5=91=98?= =?UTF-8?q?=E4=BA=A4=E6=8E=A5=E5=8D=95=E5=8F=8A=E5=85=B6=E4=BF=AE=E6=94=B9?= =?UTF-8?q?=20=E4=BA=BA=E5=91=98=E4=BA=A4=E6=8E=A5=E6=97=B6=E5=80=99?= =?UTF-8?q?=E5=8F=8D=E5=AD=98=E6=A0=A1=E9=AA=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../hrm/migrations/0024_emppersoninfo_post.py | 18 +++++++++ apps/hrm/models.py | 1 + apps/hrm/serializers.py | 39 +------------------ apps/hrm/views.py | 23 ++++++----- apps/ofm/models.py | 2 +- 5 files changed, 33 insertions(+), 50 deletions(-) create mode 100644 apps/hrm/migrations/0024_emppersoninfo_post.py diff --git a/apps/hrm/migrations/0024_emppersoninfo_post.py b/apps/hrm/migrations/0024_emppersoninfo_post.py new file mode 100644 index 00000000..06f0a167 --- /dev/null +++ b/apps/hrm/migrations/0024_emppersoninfo_post.py @@ -0,0 +1,18 @@ +# Generated by Django 3.2.12 on 2025-12-23 03:26 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('hrm', '0023_empjoin_emppersoninfo'), + ] + + operations = [ + migrations.AddField( + model_name='emppersoninfo', + name='post', + field=models.CharField(blank=True, max_length=20, null=True, verbose_name='岗位'), + ), + ] diff --git a/apps/hrm/models.py b/apps/hrm/models.py index 832b0263..ea529535 100755 --- a/apps/hrm/models.py +++ b/apps/hrm/models.py @@ -243,5 +243,6 @@ class EmpPersonInfo(CommonADModel): gender = models.CharField('性别', max_length=10, default='男') IDcard = models.CharField('身份证号', max_length=20) phone = models.CharField('手机号', max_length=20,validators=[PHONE_VALIDATOR], null=True, blank=True) + post = models.CharField('岗位', max_length=20, null=True, blank=True) note = models.TextField('备注', null=True, blank=True) \ No newline at end of file diff --git a/apps/hrm/serializers.py b/apps/hrm/serializers.py index d989790d..7dd697d9 100755 --- a/apps/hrm/serializers.py +++ b/apps/hrm/serializers.py @@ -351,6 +351,7 @@ class EmpNeedSerializer(CustomModelSerializer): class EmpJoinSerializer(CustomModelSerializer): ticket_ = TicketSimpleSerializer(source='ticket', read_only=True) + dept_name = serializers.CharField(source='dept_need.name', read_only=True) class Meta: model = EmpJoin fields = '__all__' @@ -363,43 +364,7 @@ class EmpPersonInfoSerializer(CustomModelSerializer): 'gender', 'IDcard', 'phone', + 'post', 'note', ) -class EmpJoinApproveSerializer(CustomModelSerializer): - empjoin_id = serializers.IntegerField() - - def validate_empjoin_id(self, value): - try: - empjoin = EmpJoin.objects.get(id=value) - except EmpJoin.DoesNotExist: - raise ParseError('该入职申请不存在') - if not isinstance(empjoin.person, list) or not empjoin.person: - raise ParseError('该入职申请未添加人员') - self.empjoin = empjoin - return value - - def validate(self, attrs): - """ - 校验 person 中每一个人员 - """ - self.person_serializers = [] - errors = [] - for index, item in enumerate(self.empjoin.person): - serializer = EmpPersonInfoSerializer(data=item) - if serializer.is_valid(): - self.person_serializers.append(serializer) - else: - errors.append({ - "index": index, - "errors": serializer.errors - }) - if errors: - raise serializers.ValidationError({"person": errors}) - return attrs - - @transaction.atomic - def create(self, validated_data): - objs = [EmpPersonInfo(**serializer.validated_data) for serializer in self.person_serializers] - EmpPersonInfo.objects.bulk_create(objs) - return objs \ No newline at end of file diff --git a/apps/hrm/views.py b/apps/hrm/views.py index 1716cd1b..8098a9bc 100755 --- a/apps/hrm/views.py +++ b/apps/hrm/views.py @@ -16,11 +16,11 @@ from apps.hrm.models import Certificate, ClockRecord, Employee, NotWorkRemark, A from apps.hrm.serializers import (CertificateCreateUpdateSerializer, CertificateSerializer, ChannelAuthoritySerializer, EmpJoinSerializer, ClockRecordListSerializer, EmployeeCreateUpdateSerializer, EmployeeDetailSerializer, EmployeeImproveSerializer, - EmployeeNotWorkRemarkSerializer, + EmployeeNotWorkRemarkSerializer,EmpPersonInfoSerializer, EmployeeSerializer, ClockRecordSimpleSerializer, ClockRecordCreateSerializer, NotWorkRemarkListSerializer, CorrectSerializer, AttendanceSerializer, - ResignationSerializer, EmpNeedSerializer, EmpJoinApproveSerializer) + ResignationSerializer, EmpNeedSerializer) from apps.hrm.services import HrmService from apps.third.dahua import dhClient @@ -439,15 +439,14 @@ class EmpJoinViewSet(TicketMixin, EuModelViewSet): workflow_key = "wf_empjoin" def gen_other_ticket_data(self, instance): - return {"dept_need": instance.dept_need} + return {"dept_name": instance.dept_need.name if instance.dept_need else None} - @action(methods=['post'], detail=True) - def approve(self, request, pk=None): - serializer = EmpJoinApproveSerializer(data={'empjoin_id': pk}) + @staticmethod + def approve(ticket: Ticket, transition, new_ticket_data: dict): + person = new_ticket_data.get("person", None) + EmpJoin.objects.filter(ticket=ticket).update(person=person) + if not person: + raise ParseError("请选择人员") + serializer = EmpPersonInfoSerializer(data=person, many=True) serializer.is_valid(raise_exception=True) - person = serializer.save() - return Response({ - "msg":"审批通过,人员入库", - "count": len(person) - }) - \ No newline at end of file + serializer.save() diff --git a/apps/ofm/models.py b/apps/ofm/models.py index b37005ac..808dce92 100644 --- a/apps/ofm/models.py +++ b/apps/ofm/models.py @@ -60,7 +60,7 @@ class VehicleUse(CommonBDModel): via = models.CharField('途经地点', null=True, blank=True, max_length=100) destination = models.CharField('到达地点', null=True, blank=True, max_length=100) start_km = models.PositiveIntegerField('出发公里数', null=True, blank=True) - end_km = models.PositiveIntegerField('归还公里数', null=True, blank=True) + end_km = models.PositiveIntegerField('归还公里数') actual_km = models.PositiveIntegerField('实际行驶公里数', editable=False) is_city = models.BooleanField('是否市内用车', default=True) reason = models.CharField('用车事由', max_length=100)