package jnpf.attendance.service;


import jnpf.entity.attendance.AttendanceLeaveRules;
import jnpf.exception.HandleException;
import jnpf.model.attendance.dto.AttendanceLeaveRulesDto;
import jnpf.model.attendance.dto.AttendanceUserBalanceDto;
import jnpf.model.attendance.dto.AttendanceUserBalanceListQueryDto;
import jnpf.model.attendance.vo.attendance.*;

import java.math.BigDecimal;
import java.util.List;

/**
 * @author panpan
 */
public interface AttendanceUserBalanceService {
    /**
     * 列表
     *
     * @param queryDto 查询条件
     * @return 列表
     */
    AttendanceUserBalanceListVo list(AttendanceUserBalanceListQueryDto queryDto) throws HandleException;


    /**
     * 编辑、批量编辑余额
     *
     * @param userBalanceDto 余额
     */
    void updateUserBalance(AttendanceUserBalanceDto userBalanceDto);

    /**
     * 获取余额详情
     *
     * @param userBalanceDto 详情
     * @return 详情
     */
    AttendanceUserBalanceVo getDetail(AttendanceUserBalanceDto userBalanceDto);

    /**
     * 获取标题
     *
     * @param userBalanceDto 标题
     * @return 标题
     */
    AttendanceUserTitleVo getTitle(AttendanceUserBalanceDto userBalanceDto);


    /**
     * 修改用户公休余额(公休转存休使用)日志
     *
     * @param needRetirementLeave 需转存休
     */
    void addUserBalances(List<AttendancePublicHolidayBalance> needRetirementLeave);

    /**
     * 撤销用户公休余额(公休转存休使用) 修改余额及退卷记录
     *
     * @param needRetirementLeave 需撤销休
     */
    void rollbackUserBalance(List<AttendancePublicHolidayBalance> needRetirementLeave);

    /**
     * 加班触发
     *
     * @param overtimeInfoList 加班信息
     */
    void overTime(List<OvertimeInfoVo> overtimeInfoList, String tenantId);

    /**
     * 获取指定类型的余额
     *
     * @param balanceId         LeaveBalanceId 类型Id   查询存休时 为null
     * @param userId            用户Id
     * @param isRetirementLeave 是否统计存休 LeaveBalanceId不为空且对应的假期规则能使用存休抵扣时才为 true
     * @return 余额
     */
    BigDecimal getTotalBalance(String balanceId, String userId, boolean isRetirementLeave);





}
