1.需求描述:
只有到临矿集团满一年才有年休假,以自然年为标准(根据进入集团时间计算),例如不论员工在2019年几月份入职,到2020年1月,都开始享受年休假标准。
实际工龄<1年:0天;1年≦实际工龄<10年:5天;10年≦实际工龄<20年:10天;20年≦实际工龄:15天。(根据我的资料里边实际工龄计算)。
2.新增云函数
类型:休假标准公式
名称:year_leave_cal
描述:年假计算公式
启用:是
3.下面代码考进去
# -*- coding:utf-8 -*-
# @CreateTime : 2019/12/27 9:37
# @Author: 郑辰龙
# @File : year_leave_cal.py
import datetime
import errors
from apps.time.service_base_dynamic import LeaveStandardCalcDynamicBase
from cacheUtil import getEmpCardJson
from core.extend.dynamic_plugin.customer_util import CustomerUtil
from core.extend.sync_outer.services_base import BaseSyncOuterService
class year_leave_cal(LeaveStandardCalcDynamicBase):
"""
年休假计算公式
LeaveItem
只有到临矿集团满一年才有年休假,以自然年为标准(根据进入集团时间计算),例如不论员工在2019年几月份入职,到2020年1月,都开始享受年休假标准。
实际工龄<1年:0天;1年≦实际工龄<10年:5天;10年≦实际工龄<20年:10天;20年≦实际工龄:15天。(根据我的资料里边实际工龄计算)。
"""
__year_leave_item_id__ = 2 # 年假项目ID
def execute(self, dept_id, employee_id, include_child):
start_date = "{}-01-01".format(datetime.datetime.now().year) # 休假的开始时间
end_date = "{}-12-31".format(datetime.datetime.now().year) # 休假的结束时间
date = datetime.datetime.now().strftime("%Y-%m-%d")
if employee_id:
employee_ids = [employee_id]
else:
# 根据部门ID获取
emp_dept_ids = CustomerUtil.call_open_api(
name="emp.dept.get.by.dept.date",
param={
"date": date,
"dept_id": dept_id,
"include_child": include_child
})
employee_ids = map(lambda x: x.get("employee_id"), emp_dept_ids)
if not employee_ids:
return []
employee_list = CustomerUtil.call_open_api(
name="hcm.model.list",
param={
"model": "Employee",
'page_size': len(employee_ids),
'page_index': 1,
"filter_dict": {
"id": {"in": employee_ids},
"entry_date": {"lte": "{}-01-01".format(datetime.datetime.now().year)} # 只有到临矿集团满一年才有年休假
},
'extra_property': {
'fields': [
{'field': ['entry_date'], "key": "entry_date"},
{'field': ['working_years_count'], "key": "working_years_count"}
]
}
})['list']
result = []
for item_emp in employee_list:
"""
实际工龄<1年:0天;1年≦实际工龄<10年:5天;10年≦实际工龄<20年:10天;20年≦实际工龄:15天
"""
if not item_emp.get('working_years_count'):
continue
value = 0
work_age = int(item_emp.get('working_years_count'))
if 1 <= work_age < 10:
value = 5
elif 10 <= work_age < 20:
value = 10
elif work_age >= 20:
value = 15
info = {
"employee_id": item_emp.get("id"),
"current_standard": value,
"start_date": start_date,
"end_date": end_date,
"attend_item_id": self.__year_leave_item_id__,
"cover": True
}
result.append(info)
return result