package jnpf.attendance.service;

import com.github.pagehelper.PageInfo;
import jnpf.entity.attendance.AttendanceLeaveType;
import jnpf.exception.ApproveException;
import jnpf.model.attendance.dto.AttendanceLeaveRulesDto;
import jnpf.model.attendance.dto.AttendanceLeaveRulesQueryDto;
import jnpf.model.attendance.vo.attendance.AttendanceLeaveRulesVo;
import jnpf.model.common.PageDto;

import java.util.List;

/**
 * @author panpan
 */
public interface AttendanceLeaveRulesService {
    /**
     * 列表
     * @param attendanceLeaveRulesQueryDto 搜索条件
     * @return 列表
     */
    PageInfo<AttendanceLeaveRulesVo> list(AttendanceLeaveRulesQueryDto attendanceLeaveRulesQueryDto);

    /**
     * 创建
     * @param attendanceLeaveRulesDto 创建参数
     */
    void create(AttendanceLeaveRulesDto attendanceLeaveRulesDto) throws Exception;

    /**
     * 修改
     * @param attendanceLeaveRulesDto 修改参数
     */
    void update(AttendanceLeaveRulesDto attendanceLeaveRulesDto) throws Exception;

    /**
     * 详情
     * @param id 主键值
     */
    AttendanceLeaveRulesVo detail(String id);

    /**
     * 删除
     * @param id 主键值
     */
    void delete(String id);

    /**
     * 修改状态
     * @param attendanceLeaveRulesDto 修改参数
     */
    void updateState(AttendanceLeaveRulesDto attendanceLeaveRulesDto);

    /**
     * 获取用户请假列表
     * @return 列表
     */
    List<AttendanceLeaveRulesVo> getUserLeaveList(List<AttendanceLeaveType> leaveTypes);


    /**
     * 2.0自动授予请假余额
     * @param tenantId 租户ID
     */
    void autoGrantBalance(String tenantId);

    /**
     * 删除假期类型关联的规则
     * @param id 假期类型Id
     */
    void deleteByTypeId(String id);

    /**
     * 获取用户请假详情
     * @param vo 假期类型
     * @return 详情
     */
    AttendanceLeaveRulesVo getUserLeaveDetail(AttendanceLeaveType vo,String userId) throws ApproveException;
}
