feat:新增人员交接单及其修改 人员交接时候反存校验
This commit is contained in:
parent
79e957bd83
commit
90cb2ed7f7
|
|
@ -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='岗位'),
|
||||
),
|
||||
]
|
||||
|
|
@ -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)
|
||||
|
||||
|
|
@ -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
|
||||
|
|
@ -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)
|
||||
})
|
||||
|
||||
serializer.save()
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
Loading…
Reference in New Issue