diff --git a/apps/hrm/migrations/0028_auto_20260126_1445.py b/apps/hrm/migrations/0028_auto_20260126_1445.py new file mode 100644 index 00000000..f26b4910 --- /dev/null +++ b/apps/hrm/migrations/0028_auto_20260126_1445.py @@ -0,0 +1,23 @@ +# Generated by Django 3.2.12 on 2026-01-26 06:45 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('hrm', '0027_alter_leave_leave_type'), + ] + + operations = [ + migrations.AlterField( + model_name='employeetransfer', + name='new_slary', + field=models.DecimalField(blank=True, decimal_places=2, max_digits=10, null=True, verbose_name='调岗后薪资'), + ), + migrations.AlterField( + model_name='employeetransfer', + name='original_slary', + field=models.DecimalField(blank=True, decimal_places=2, max_digits=10, null=True, verbose_name='原岗位薪资'), + ), + ] diff --git a/apps/hrm/models.py b/apps/hrm/models.py index 842e4d7a..10f95b47 100755 --- a/apps/hrm/models.py +++ b/apps/hrm/models.py @@ -285,8 +285,8 @@ class EmployeeTransfer(CommonADModel): original_dept = models.ForeignKey('system.Dept', verbose_name='原部门', related_name="transfer_original_dept", on_delete=models.CASCADE, null=True, blank=True) original_post = models.ForeignKey('system.Post', verbose_name='原岗位', related_name="transfer_original_post", on_delete=models.CASCADE, null=True, blank=True) transfer_date = models.DateField('调岗日期') - original_slary = models.PositiveIntegerField('原岗位薪资', null=True, blank=True) - new_slary = models.PositiveIntegerField('调岗后薪资', null=True, blank=True) + original_slary = models.DecimalField('原岗位薪资', max_digits=10, decimal_places=2, null=True, blank=True) + new_slary = models.DecimalField('调岗后薪资', max_digits=10, decimal_places=2, null=True, blank=True) content = models.TextField('个人工作内容', null=True, blank=True) reason = models.TextField('调动原因', null=True, blank=True) ticket = models.OneToOneField('wf.ticket', verbose_name='关联工单', diff --git a/apps/hrm/serializers.py b/apps/hrm/serializers.py index bac62b84..56466b3e 100755 --- a/apps/hrm/serializers.py +++ b/apps/hrm/serializers.py @@ -382,6 +382,8 @@ class TransferSerializer(CustomModelSerializer): employee_name = serializers.CharField(source='employee.name', read_only=True) post_name = serializers.CharField(source="employee.post.name", read_only=True) belong_dept_name = serializers.CharField(source='employee.belong_dept.name', read_only=True) + new_post_name = serializers.CharField(source="new_post.name", read_only=True) + original_post_name = serializers.CharField(source="original_post.name", read_only=True) class Meta: model = EmployeeTransfer fields = '__all__' @@ -391,7 +393,8 @@ class TransferSerializer(CustomModelSerializer): if is_change: if validated_data['new_dept'] == validated_data['original_dept']: raise ParseError('新旧部门相同,无需调动') - elif validated_data['new_post'] == validated_data['original_post']: - raise ParseError('新旧岗位相同,无需调动') else: - return super().create(validated_data) \ No newline at end of file + if validated_data['new_post'] == validated_data['original_post']: + raise ParseError('新旧岗位相同,无需调动') + + return super().create(validated_data) \ No newline at end of file diff --git a/apps/hrm/services.py b/apps/hrm/services.py index 0fe45fa7..4fa88f11 100755 --- a/apps/hrm/services.py +++ b/apps/hrm/services.py @@ -19,6 +19,7 @@ from apps.third.tapis import dhapis from apps.utils.tools import rannum, ranstr import numpy as np from apps.wf.models import Ticket, Transition +from django.db import transaction myLogger = logging.getLogger('log') @@ -499,20 +500,23 @@ class HrmService: # 人员调岗申请 -def post_transfer(ticket: Ticket, transitons, new_ticket_data:dict): +def post_transfer(ticket: Ticket, new_ticket_data:dict, **kwargs): try: obj = EmployeeTransfer.objects.get(id=new_ticket_data['t_id']) except EmployeeTransfer.DoesNotExist: raise ParseError('调岗申请不存在') data_save = {k: v for k, v in new_ticket_data.items() if k not in ['t_model', 't_id']} # 需要删除UserPost中的记录,然后新增一条调到的部门和岗位记录,排序为1 - try: - UserPost.objects.filter(post=obj.original_post, dept=obj.original_dept, user=obj.employee.user).delete() - except UserPost.DoesNotExist: - raise ParseError('原岗位记录不存在') - UserPost.objects.create(post=obj.new_post, dept=obj.new_dept, user=obj.employee.user, sort=1) - # 如果有调薪并有领导申请觉得,那么可以从new_ticket_data 获取调薪金额 + with transaction.atomic(): + del_count, _ = UserPost.objects.filter(post=obj.original_post, dept=obj.original_dept, user=obj.employee.user).delete() + if del_count == 0: + raise ParseError('原岗位记录不存在') + UserPost.objects.create(post=obj.new_post, dept=obj.new_dept, user=obj.employee.user, sort=1) + # 如果有调薪并有领导申请决定,那么可以从new_ticket_data 获取调薪金额 for k, v in data_save.items(): - setattr(obj, k, v) + if k in ['new_post','original_post']: + setattr(obj, f'{k}_id', v) + else: + setattr(obj, k, v) obj.save()