package cn.iocoder.yudao.module.system.controller.admin.holiday.holidaybalancesetting.vo;

import cn.iocoder.yudao.module.system.controller.admin.holiday.holidayworkingage.vo.HolidayWorkingAgeRespVO;
import cn.iocoder.yudao.module.system.controller.admin.holiday.holidayworkingage.vo.HolidayWorkingAgeSaveReqVO;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.*;
import java.util.*;
import java.util.*;
import org.springframework.format.annotation.DateTimeFormat;
import java.time.LocalDateTime;
import com.alibaba.excel.annotation.*;

@Schema(description = "管理后台 - 假期余额设置 Response VO")
@Data
@ExcelIgnoreUnannotated
public class HolidayBalanceSettingRespVO {

    @Schema(description = "编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "29911")
    @ExcelProperty("编号")
    private Long id;

    @Schema(description = "假期设置id", example = "31488")
    @ExcelProperty("假期设置id")
    private Long holidaySettingId;

    @Schema(description = "状态 0关闭 1开启", example = "1")
    @ExcelProperty("状态 0关闭 1开启")
    private Integer status;

    @Schema(description = "发放方式 1每月自动发放 2每年自动发放 3手动发放 4加班时长自动计入余额", example = "2")
    @ExcelProperty("发放方式 1每月自动发放 2每年自动发放 3手动发放 4加班时长自动计入余额")
    private Integer type;

    @Schema(description = "发放日期 当发放方式为每月自动发放时 该值代表的是几号 当发放方式为每年自动发放时 该值代表 1每年员工入职日 2每年1月1日", example = "1")
    @ExcelProperty("发放日期 当发放方式为每月自动发放时 该值代表的是几号 当发放方式为每年自动发放时 该值代表 1每年员工入职日 2每年1月1日")
    private Integer issueTimeType;

    @Schema(description = "发放日期(设置好后 插入发放日期 - 发放完成后插入下一次发放日期) 如果是 null 的话代表手动发放和加班自动计算或者每年员工入职日")
    @ExcelProperty("发放日期(设置好后 插入发放日期 - 发放完成后插入下一次发放日期) 如果是 null 的话代表手动发放和加班自动计算或者每年员工入职日")
    private LocalDateTime issueTime;

    @Schema(description = "额度规则 1固定规则 2按工龄 （0代表自动发放或者加班自动计算）")
    @ExcelProperty("额度规则 1固定规则 2按工龄 （0代表自动发放或者加班自动计算）")
    private Integer quotaRule;

    @Schema(description = "固定额度 （单位天）")
    @ExcelProperty("固定额度 （单位天）")
    private Integer quota;

    @Schema(description = "是否按实际工作时长发放 0否 1是(例如：每年1月1日发放6天假期，入职时间是6月1日的员工则按照半年发放3天假期，当余额出现小数时按四舍五入取整)")
    @ExcelProperty("是否按实际工作时长发放 0否 1是(例如：每年1月1日发放6天假期，入职时间是6月1日的员工则按照半年发放3天假期，当余额出现小数时按四舍五入取整)")
    private Integer actualWorkFlag;

    @Schema(description = "有效期类型 1自发放日起1个月 2自发放日起1周年 3按入职日期起12个月 4自然年1月1日-12月31日 5每年固定时间作废 6永久有效 7每月固定时间作废 8每季末作废 9加班多少天后作废")
    @ExcelProperty("有效期类型 1自发放日起1个月 2自发放日起1周年 3按入职日期起12个月 4自然年1月1日-12月31日 5每年固定时间作废 6永久有效 7每月固定时间作废 8每季末作废 9加班多少天后作废")
    private Integer validityPeriod;

    @Schema(description = "加班多少天后作废", example = "12794")
    @ExcelProperty("加班多少天后作废")
    private Integer afterFewDays;

    @Schema(description = "每年固定时间作废格式 MM-dd 例如 09-10 每年9月10号作废", example = "12794")
    @ExcelProperty("每年固定时间作废格式 MM-dd 例如 09-10 每年9月10号作废")
    private String fixedEveryYearInvalid;

    @Schema(description = "每月固定时间作废 格式 1 or 4 or 7 or 10")
    @ExcelProperty("每月固定时间作废 格式 1 or 4 or 7 or 10")
    private Integer fixedEveryMonthInvalid;

    @Schema(description = "是否允许延长有效期 0否 1是")
    @ExcelProperty("是否允许延长有效期 0否 1是")
    private Integer extensionAllowedFlag;

    @Schema(description = "有效期过后延长时间（天）")
    @ExcelProperty("有效期过后延长时间（天）")
    private Integer extendNum;

    @Schema(description = "是否开启假期提醒 0否 1是")
    @ExcelProperty("是否开启假期提醒 0否 1是")
    private Integer expirationReminderFlag;

    @Schema(description = "提醒时间（天） 假期过期前多少天提醒")
    @ExcelProperty("提醒时间（天） 假期过期前多少天提醒")
    private Integer reminderTimeNum;

    @Schema(description = "提醒范围 1员工 2部门主管 3全部通知")
    @ExcelProperty("提醒范围 1员工 2部门主管 3全部通知")
    private Integer reminderRange;

    @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED)
    @ExcelProperty("创建时间")
    private LocalDateTime createTime;

    @Schema(description = "假期额度工龄配置 (如果有的话就传)")
    private List<HolidayWorkingAgeRespVO> holidayWorkingAgeRespVOS;

}
