You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
260 lines
7.8 KiB
260 lines
7.8 KiB
|
10 months ago
|
from rest_framework import serializers
|
||
|
|
|
||
|
|
from staff.models import *
|
||
|
|
from staff.utils import vaild_attendance
|
||
|
|
from utils.custom import MyCustomError
|
||
|
|
|
||
|
|
|
||
|
|
class DeptSerializer(serializers.ModelSerializer):
|
||
|
|
"""
|
||
|
|
部门序列化
|
||
|
|
"""
|
||
|
|
|
||
|
|
class Meta:
|
||
|
|
model = Dept
|
||
|
|
fields = "__all__"
|
||
|
|
|
||
|
|
def validate_name(self, value):
|
||
|
|
# 当修改与创建时,检查idCode是否已存在
|
||
|
|
if self.instance: # Update case
|
||
|
|
existing_dept = Dept.objects.exclude(id=self.instance.id).filter(name=value, companyMid=self.initial_data.get('companyMid'))
|
||
|
|
else: # Create case
|
||
|
|
existing_dept = Dept.objects.filter(name=value, companyMid=self.initial_data.get('companyMid'))
|
||
|
|
|
||
|
|
if existing_dept.exists():
|
||
|
|
raise MyCustomError("部门已存在")
|
||
|
|
|
||
|
|
return value
|
||
|
|
|
||
|
|
|
||
|
|
class DeptModifySerializer(serializers.ModelSerializer):
|
||
|
|
"""
|
||
|
|
部门修改序列化
|
||
|
|
"""
|
||
|
|
|
||
|
|
class Meta:
|
||
|
|
model = Dept
|
||
|
|
fields = "__all__"
|
||
|
|
|
||
|
|
def validate_name(self, value):
|
||
|
|
# 当修改与创建时,检查idCode是否已存在
|
||
|
|
if self.instance: # Update case
|
||
|
|
existing_dept = Dept.objects.exclude(id=self.instance.id).filter(name=value, companyMid=self.initial_data.get('companyMid'))
|
||
|
|
else: # Create case
|
||
|
|
existing_dept = Dept.objects.filter(name=value, companyMid=self.initial_data.get('companyMid'))
|
||
|
|
|
||
|
|
if existing_dept.exists():
|
||
|
|
raise MyCustomError("部门已存在")
|
||
|
|
|
||
|
|
return value
|
||
|
|
|
||
|
|
def validate(self, data):
|
||
|
|
pid = data.get('pid')
|
||
|
|
id = self.instance if self.instance else None
|
||
|
|
|
||
|
|
if pid == id:
|
||
|
|
raise serializers.ValidationError("pid字段不能等于id字段")
|
||
|
|
|
||
|
|
return data
|
||
|
|
|
||
|
|
|
||
|
|
class AttendanceSerializer(serializers.ModelSerializer):
|
||
|
|
"""
|
||
|
|
考勤序列化
|
||
|
|
"""
|
||
|
|
|
||
|
|
class Meta:
|
||
|
|
model = Attendance
|
||
|
|
fields = "__all__"
|
||
|
|
|
||
|
|
def validate(self, data):
|
||
|
|
attendance = self.Meta.model(**data) or self.instance
|
||
|
|
staffTime = Staff.objects.filter(id=attendance.staffId if attendance.staffId else self.instance.staffId).values(
|
||
|
|
'id', 'entryTime', 'leaveTime').first()
|
||
|
|
if not staffTime:
|
||
|
|
raise MyCustomError("员工不存在")
|
||
|
|
try:
|
||
|
|
vaild_attendance(attendance, entryTime=staffTime['entryTime'], leaveTime=staffTime['leaveTime'])
|
||
|
|
data['restDay'] = attendance.restDay
|
||
|
|
except Exception as e:
|
||
|
|
raise e
|
||
|
|
return data
|
||
|
|
|
||
|
|
|
||
|
|
class WagesSerializer(serializers.ModelSerializer):
|
||
|
|
"""
|
||
|
|
工资记录序列化
|
||
|
|
"""
|
||
|
|
|
||
|
|
class Meta:
|
||
|
|
model = Wages
|
||
|
|
fields = "__all__"
|
||
|
|
|
||
|
|
|
||
|
|
class SocialInsuranceSerializer(serializers.ModelSerializer):
|
||
|
|
"""
|
||
|
|
社保记录序列化
|
||
|
|
"""
|
||
|
|
|
||
|
|
class Meta:
|
||
|
|
model = SocialInsurance
|
||
|
|
fields = "__all__"
|
||
|
|
|
||
|
|
|
||
|
|
class AccumulationSerializer(serializers.ModelSerializer):
|
||
|
|
"""
|
||
|
|
公积金记录序列化
|
||
|
|
"""
|
||
|
|
|
||
|
|
class Meta:
|
||
|
|
model = Accumulation
|
||
|
|
fields = "__all__"
|
||
|
|
|
||
|
|
|
||
|
|
class BonusSerializer(serializers.ModelSerializer):
|
||
|
|
"""
|
||
|
|
奖金记录序列化
|
||
|
|
"""
|
||
|
|
|
||
|
|
class Meta:
|
||
|
|
model = Accumulation
|
||
|
|
fields = "__all__"
|
||
|
|
|
||
|
|
|
||
|
|
class WelfareSerializer(serializers.ModelSerializer):
|
||
|
|
"""
|
||
|
|
福利记录序列化
|
||
|
|
"""
|
||
|
|
|
||
|
|
class Meta:
|
||
|
|
model = Welfare
|
||
|
|
fields = "__all__"
|
||
|
|
|
||
|
|
|
||
|
|
# 预提管理序列化
|
||
|
|
|
||
|
|
class AccruedWagesSerializer(serializers.ModelSerializer):
|
||
|
|
"""
|
||
|
|
预提工资记录序列化
|
||
|
|
"""
|
||
|
|
|
||
|
|
class Meta:
|
||
|
|
model = AccruedWages
|
||
|
|
fields = "__all__"
|
||
|
|
|
||
|
|
|
||
|
|
class AccruedSocialInsuranceSerializer(serializers.ModelSerializer):
|
||
|
|
"""
|
||
|
|
预提社保记录序列化
|
||
|
|
"""
|
||
|
|
|
||
|
|
class Meta:
|
||
|
|
model = AccruedSocialInsurance
|
||
|
|
fields = "__all__"
|
||
|
|
|
||
|
|
|
||
|
|
class AccruedAccumulationSerializer(serializers.ModelSerializer):
|
||
|
|
"""
|
||
|
|
预提公积金序列化
|
||
|
|
"""
|
||
|
|
|
||
|
|
class Meta:
|
||
|
|
model = AccruedAccumulation
|
||
|
|
fields = "__all__"
|
||
|
|
|
||
|
|
|
||
|
|
class AccruedBonusSerializer(serializers.ModelSerializer):
|
||
|
|
"""
|
||
|
|
预提奖金序列化
|
||
|
|
"""
|
||
|
|
|
||
|
|
class Meta:
|
||
|
|
model = AccruedBonus
|
||
|
|
fields = "__all__"
|
||
|
|
|
||
|
|
|
||
|
|
class AccruedWelfareSerializer(serializers.ModelSerializer):
|
||
|
|
"""
|
||
|
|
预提福利序列化
|
||
|
|
"""
|
||
|
|
|
||
|
|
class Meta:
|
||
|
|
model = AccruedWelfare
|
||
|
|
fields = "__all__"
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
class SalarySerializer(serializers.ModelSerializer):
|
||
|
|
"""
|
||
|
|
薪资记录序列化
|
||
|
|
"""
|
||
|
|
|
||
|
|
class Meta:
|
||
|
|
model = Salary
|
||
|
|
fields = "__all__"
|
||
|
|
|
||
|
|
def validate_salaryDate(self, value):
|
||
|
|
# 从context中获取companyMid
|
||
|
|
# companyMid = self.context.get('companyMid')
|
||
|
|
# 当修改与创建时,检查idCode是否已存在
|
||
|
|
Year, Month = value.year, value.month
|
||
|
|
if self.instance: # Update case
|
||
|
|
# existing_staff = Salary.objects.exclude(id=self.instance.id).filter(salaryDate__year=Year, salaryDate__month=Month, type=self.instance.type, staffId=self.initial_data.get('staffId'), companyMid=self.initial_data.get('companyMid'))
|
||
|
|
existing_staff = Salary.objects.exclude(id=self.instance.id).filter(salaryDate__year=Year, salaryDate__month=Month, staffId=self.initial_data.get('staffId'), companyMid=self.initial_data.get('companyMid'))
|
||
|
|
else: # Create case
|
||
|
|
# existing_staff = Salary.objects.filter(salaryDate__year=Year, salaryDate__month=Month, type=self.initial_data.get('type'), staffId=self.initial_data.get('staffId'), companyMid=self.initial_data.get('companyMid'))
|
||
|
|
existing_staff = Salary.objects.filter(salaryDate__year=Year, salaryDate__month=Month, staffId=self.initial_data.get('staffId'), companyMid=self.initial_data.get('companyMid'))
|
||
|
|
|
||
|
|
if existing_staff.exists():
|
||
|
|
raise MyCustomError("该员工该月已存在薪资记录")
|
||
|
|
|
||
|
|
return value
|
||
|
|
|
||
|
|
|
||
|
|
class AccruedSerializer(serializers.ModelSerializer):
|
||
|
|
"""
|
||
|
|
预提记录序列化
|
||
|
|
"""
|
||
|
|
|
||
|
|
class Meta:
|
||
|
|
model = Accrued
|
||
|
|
fields = "__all__"
|
||
|
|
|
||
|
|
def validate_accruedDate(self, value):
|
||
|
|
# 从context中获取companyMid
|
||
|
|
# companyMid = self.context.get('companyMid')
|
||
|
|
# 当修改与创建时,检查idCode是否已存在
|
||
|
|
Year, Month = value.year, value.month
|
||
|
|
existing_accrued = None
|
||
|
|
if self.instance: # Update case
|
||
|
|
if 1 == self.initial_data.get('accruedType'): # 仅类型-工资社保公积金需要限制每月一条记录
|
||
|
|
existing_accrued = Accrued.objects.exclude(id=self.instance.id).filter(accruedDate__year=Year,
|
||
|
|
accruedDate__month=Month,
|
||
|
|
accruedType=self.initial_data.get('accruedType'),
|
||
|
|
staffId=self.initial_data.get(
|
||
|
|
'staffId'),
|
||
|
|
companyMid=self.initial_data.get(
|
||
|
|
'companyMid'))
|
||
|
|
else: # Create case
|
||
|
|
if 1 == self.initial_data.get('accruedType'):
|
||
|
|
existing_accrued = Accrued.objects.filter(accruedDate__year=Year, accruedDate__month=Month,
|
||
|
|
accruedType=self.initial_data.get('accruedType'),
|
||
|
|
staffId=self.initial_data.get('staffId'),
|
||
|
|
companyMid=self.initial_data.get('companyMid'))
|
||
|
|
|
||
|
|
if existing_accrued and existing_accrued.exists():
|
||
|
|
raise MyCustomError("该员工该月已存在预提薪资记录")
|
||
|
|
|
||
|
|
return value
|
||
|
|
|
||
|
|
|
||
|
|
class RewardSerializer(serializers.ModelSerializer):
|
||
|
|
"""
|
||
|
|
奖金福利序列化
|
||
|
|
"""
|
||
|
|
|
||
|
|
class Meta:
|
||
|
|
model = Reward
|
||
|
|
fields = "__all__"
|
||
|
|
|