package jnpf.model.attendance.vo.attendance;

import jnpf.model.attendance.model.GroupInfoModel;
import jnpf.model.attendance.model.HolidaysTypeJsonData1;
import jnpf.model.attendance.model.LeaveTypeJsonData;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.io.Serializable;
import java.math.BigDecimal;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class SalaryAttendanceSupportVo implements Serializable {
    private static final long serialVersionUID = 1L;
    /**
     * 用户id
     */
    private String userId;
    /**
     * 考勤组信息集合
     */
    private List<GroupInfoModel> groupInfoList;
    /**
     * 应出勤天数
     */
    private BigDecimal shouldAttendDays = BigDecimal.ZERO;
    /**
     * 应计薪小时数
     */
    private BigDecimal shouldAttendHours = BigDecimal.ZERO;
    /**
     * 实际出勤天数
     */
    private BigDecimal actualAttendDays = BigDecimal.ZERO;
    /**
     * 实际计薪小时数
     */
    private BigDecimal actualAttendHours = BigDecimal.ZERO;
    /**
     * 节假日自动排休天数
     */
    private Integer holidaysAutoPaid = 0;
    /**
     * 节假日排班天数【节日期间命中的实际出勤天数】
     */
    private BigDecimal holidaysSchedulingDays = BigDecimal.ZERO;
    /**
     * 节假日排班小时数【节日期间命中的实际出勤小时数】
     */
    private BigDecimal holidaysSchedulingHours = BigDecimal.ZERO;
    /**
     * 法定节假日天数
     */
    private Map<String, HolidaysTypeJsonData1> holidaysMap = new HashMap<>();
    /**
     * 公休天数
     */
    private BigDecimal publicHolidays = BigDecimal.ZERO;
    /**
     * 公休小时数
     */
    private BigDecimal publicHolidaysHours = BigDecimal.ZERO;
    /**
     * 实际公休天数
     */
    private BigDecimal actualPublicHolidays = BigDecimal.ZERO;
    /**
     * 实际公休小时数
     */
    private BigDecimal actualPublicHolidaysHours = BigDecimal.ZERO;
    /**
     * 公休转存天数
     */
    private BigDecimal publicHolidaysTransfer = BigDecimal.ZERO;
    /**
     * 公休转存小时数
     */
    private BigDecimal publicHolidaysTransferHours = BigDecimal.ZERO;
    /**
     * 存休剩余天数
     */
    private BigDecimal publicHolidaysSurplus = BigDecimal.ZERO;
    /**
     * 存休剩余小时数
     */
    private BigDecimal publicHolidaysSurplusHours = BigDecimal.ZERO;
    /**
     * 迟到次数
     */
    private Integer lateTimes = 0;
    /**
     * 迟到分钟数
     */
    private BigDecimal lateMinutes = BigDecimal.ZERO;
    /**
     * 每日迟到分钟数
     */
    private Map<String, BigDecimal> lateDayMinutesMap = new HashMap<>();
    /**
     * 早退次数
     */
    private Integer earlyLeaveTimes = 0;
    /**
     * 早退总分钟数
     */
    private BigDecimal earlyLeaveMinutes = BigDecimal.ZERO;
    /**
     * 每日早退分钟数
     */
    private Map<String, BigDecimal> earlyLeaveDayMinutesMap = new HashMap<>();
    /**
     * 缺卡次数
     */
    private Integer absenceCardTimes = 0;
    /**
     * 旷工次数
     */
    private Integer absenceTimes = 0;
    /**
     * 旷工天数
     */
    private BigDecimal absenceDays = BigDecimal.ZERO;
    /**
     * 旷工计薪小时数
     */
    private BigDecimal absenceHours = BigDecimal.ZERO;
    /**
     * 补卡次数
     */
    private Integer makeUpCardTimes = 0;
    /**
     * 外勤次数
     */
    private Integer outworkTimes = 0;
    /**
     * 外勤天数
     */
    private BigDecimal outworkDays = BigDecimal.ZERO;
    /**
     * 外勤计薪小时数
     */
    private BigDecimal outworkHours = BigDecimal.ZERO;
    /**
     * 出差天数
     */
    private BigDecimal busDays = BigDecimal.ZERO;
    /**
     * 出差小时数
     */
    private BigDecimal busHours = BigDecimal.ZERO;
    /**
     * 外出天数
     */
    private BigDecimal outDays = BigDecimal.ZERO;
    /**
     * 外出小时数
     */
    private BigDecimal outHours = BigDecimal.ZERO;
    /**
     * 加班次数总
     */
    private Integer overtimeTimes = 0;
    /**
     * 加班天数总
     */
    private BigDecimal overtimeDays = BigDecimal.ZERO;
    /**
     * 加班小时数总
     */
    private BigDecimal overtimeHours = BigDecimal.ZERO;
    /**
     * 工作日加班天数
     */
    private BigDecimal weekdayOvertimeDays = BigDecimal.ZERO;
    /**
     * 工作日加班小时数
     */
    private BigDecimal weekdayOvertimeHours = BigDecimal.ZERO;
    /**
     * 工作日算薪加班小时数
     */
    private BigDecimal weekdayOvertimeSalaryHours = BigDecimal.ZERO;
    /**
     * 工作日存休加班小时数
     */
    private BigDecimal weekdayOvertimeTransferHours = BigDecimal.ZERO;
    /**
     * 节假日加班天数
     */
    private BigDecimal holidaysOvertimeDays = BigDecimal.ZERO;
    /**
     * 节假日加班小时数
     */
    private BigDecimal holidaysOvertimeHours = BigDecimal.ZERO;
    /**
     * 节假日算薪加班小时数
     */
    private BigDecimal holidaysOvertimeSalaryHours = BigDecimal.ZERO;
    /**
     * 节假日日存休加班小时数
     */
    private BigDecimal holidaysOvertimeTransferHours = BigDecimal.ZERO;
    /**
     * 公休日加班天数
     */
    private BigDecimal publicHolidaysOvertimeDays = BigDecimal.ZERO;
    /**
     * 公休日加班小时数
     */
    private BigDecimal publicHolidaysOvertimeHours = BigDecimal.ZERO;
    /**
     * 公休日算薪加班小时数
     */
    private BigDecimal publicHolidaysOvertimeSalaryHours = BigDecimal.ZERO;
    /**
     * 公休日存休加班小时数
     */
    private BigDecimal publicHolidaysOvertimeTransferHours = BigDecimal.ZERO;
    /**
     * 请假天数
     */
    private BigDecimal leaveDays = BigDecimal.ZERO;
    /**
     * 请假计薪小时数
     */
    private BigDecimal leaveHours = BigDecimal.ZERO;
    /**
     * 调休天数
     */
    private BigDecimal compensationDays = BigDecimal.ZERO;
    /**
     * 调休计薪小时数
     */
    private BigDecimal compensationHours = BigDecimal.ZERO;
    /**
     * 自定义请假类型动态Json
     */
    private Map<String, LeaveTypeJsonData> customLeaveMap;
    /**
     * 自定义请假类型剩余余额Json
     */
    private Map<String, LeaveTypeJsonData> customLeaveSurplusMap;
    /**
     * 自定义请假类型余额抵扣Json
     */
    private Map<String, LeaveTypeJsonData> customLeaveDeductionMap;
    /**
     * 自定义请假类型扣薪Json
     */
    private Map<String, LeaveTypeJsonData> customLeavePayMap;
    /**
     * 节日类型Json
     */
    private Map<String, HolidaysTypeJsonData1> holidaysTypeMap;
    /**
     * 节日类型加班Json
     */
    private Map<String, HolidaysTypeJsonData1> holidaysTypeOvertimeMap;
}
