1.需求描述:

只有到临矿集团满一年才有年休假,以自然年为标准(根据进入集团时间计算),例如不论员工在2019年几月份入职,到20201月,都开始享受年休假标准。
实际工龄<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


  • 无标签