package jnpf.model.personnels.dto.staff.transfer;

import com.alibaba.excel.annotation.ExcelIgnore;
import com.alibaba.excel.annotation.ExcelProperty;
import com.alibaba.excel.annotation.format.DateTimeFormat;
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import jnpf.model.personnels.dto.salary.FtbPersonnelsSalaryInfo;
import jnpf.model.personnels.dto.staff.roster.WorkerGroupDataDto;
import jnpf.model.personnels.vo.task.FtbPersonnelsAuditInfoVO;
import lombok.Data;

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

@Data
public class TransferPositionDto {

    /**
     * 系统用户ID
     */
    @ExcelIgnore
    private String userId;

    /**
     * 系统员工ID,实际入职年份日期+当日办理入职3位顺序数，例如：231123001
     */
    @ExcelProperty(index = 0, value = "员工ID")
    private String systemWokerId;

    /**
     * 系统合同ID,HTZ+员工ID
     */
    @ExcelIgnore
    private String systemContractId;

    /**
     * 手机号
     */
    @ExcelIgnore
    private String phone;

    /**
     * 员工姓名
     */
    @ExcelProperty(index = 2, value = "姓名")
    private String name;

    /**
     * 工号
     */
    @ExcelProperty(index = 3, value = "工号")
    private String workerNo;

    /**
     * 所属组织
     */
    @ExcelIgnore
    private String currOrg;

    /**
     * 岗位
     */
    @ExcelIgnore
    private String currPosition;

    /**
     * 职等
     */
    @ExcelIgnore
    private String currRank;


    /**
     * 所属组织名称
     */
    @ExcelIgnore
    private String currOrgName;

    /**
     * 岗位名称
     */
    @ExcelIgnore
    private String currPositionName;

    /**
     * 职等名称
     */
    @ExcelIgnore
    private String currRankName;

    /**
     * 入职薪酬
     */
    @ExcelIgnore
    private BigDecimal entrySalary;

    /**
     * 当前薪酬
     */
    @ExcelIgnore
    private BigDecimal currSalary;

    /**
     * 转正薪酬
     */
    @ExcelIgnore
    private BigDecimal regularSalary;


    /**
     * 入职日期
     */
    @ExcelProperty(index = 7, value = "入职日期")
    @DateTimeFormat(value = "yyyy-MM-dd")
    private Date actualStartDate;

    /**
     * 员工类型
     */
    @ExcelIgnore
    private String workerType;

    /**
     * 合同类型
     */
    @ExcelIgnore
    private String contractType;
    /**
     * 员工状态 工作状态，301、预入职  302、试用 303、正式  304、待离职  305 离职
     */
    @ExcelIgnore
    private String workerStatus;


    /**
     * 主键ID
     */
    @ExcelIgnore
    private String id;

    /**
     * 员工花名册ID
     */
    @ExcelIgnore
    private String staffRosterId;

    /**
     * 调岗后组织
     */
    @ExcelIgnore
    private String toOrg;

    /**
     * 调岗后岗位
     */
    @ExcelIgnore
    private String toPositionId;

    /**
     * 调岗后职等
     */
    @ExcelIgnore
    private String toRankId;

    /**
     * 调岗后角色
     */
    @ExcelIgnore
    private String toRole;

    /**
     * 调岗后直接主管
     */
    @ExcelIgnore
    private String toManager;


    /**
     * 调岗后组织 名称
     */
    @ExcelProperty(index = 4, value = "组织")
    private String toOrgName;

    /**
     * 调岗后岗位 名称
     */
    @ExcelProperty(index = 5, value = "调岗后岗位")
    private String toPositionIdName;

    /**
     * 调岗后职等 名称
     */
    @ExcelProperty(index = 6, value = "调岗后职等")
    private String toRankIdName;

    /**
     * 调岗后角色 名称
     */
    @ExcelIgnore
    private String toRoleName;

    /**
     * 调岗后角色列表
     */
    @ExcelIgnore
    private String toRoleList;

    /**
     * 调岗后直接主管 名称
     */
    @ExcelProperty(index = 11, value = "直属主管")
    private String toManagerName;

    /**
     * 调岗后薪酬
     */
    @ExcelIgnore
    private BigDecimal toMoney;


    /**
     * 调岗前组织
     */
    @ExcelIgnore
    private String fromOrg;

    /**
     * 调岗前岗位
     */
    @ExcelIgnore
    private String fromPositionId;

    /**
     * 调岗前职等
     */
    @ExcelIgnore
    private String fromRankId;


    /**
     * 调岗前直接主管
     */
    @ExcelIgnore
    private String fromManager;

    /**
     * 调岗前组织 名称
     */
    @ExcelIgnore
    private String fromOrgName;

    /**
     * 调岗前岗位 名称
     */
    @ExcelIgnore
    private String fromPositionIdName;

    /**
     * 调岗前职等 名称
     */
    @ExcelIgnore
    private String fromRankIdName;


    /**
     * 调岗前直接主管 名称
     */
    @ExcelIgnore
    private String fromManagerName;


    /**
     * 调岗后备注
     */
    @ExcelIgnore
    private String remarks;

    /**
     * 附件
     */
    @ExcelIgnore
    private String files;

    /**
     * 是否需要审批：0、需要审批  1、不需要审批
     */
    @ExcelIgnore
    private Integer isNeedCheck;

    /**
     * 0,待审批,1审批中,2,审核通过,3,审核不通过,4,撤销
     */
    @ExcelIgnore
    private Integer checkStatus;

    /**
     * 0,待审批,1审批中,2,审核通过,3,审核不通过,4,撤销
     */
    @ExcelProperty(index = 12, value = "状态")
    private String checkStatusExcel;

    /**
     * 有效标志，1无效 0有效
     */
    @ExcelIgnore
    private Long enabledMark;

    /**
     * 创建用户
     */
    @ExcelIgnore
    private String creatorUserId;

    /**
     * 创建时间
     */
    @ExcelIgnore
    private Date creatorTime;

    /**
     * 修改用户
     */
    @ExcelIgnore
    private String lastModifyUserId;

    /**
     * 修改时间
     */
    @ExcelIgnore
    private Date lastModifyTime;

    /**
     * 计划转正日期
     */
    @ExcelProperty(index = 9, value = "计划转正日期")
    @DateTimeFormat(value = "yyyy-MM-dd")
    private Date planProbationaryDate;
    /**
     * 实际转正日期
     */
    @ExcelProperty(index = 10, value = "实际转正日期")
    @DateTimeFormat(value = "yyyy-MM-dd")
    private Date actualProbationaryDate;

    /**
     * 试用期类型
     */
    @ExcelProperty(index = 8, value = "试用期")
    private String probationPeriod;
    /**
     * 试用期天数
     */
    @ExcelIgnore
    private String probationPeriodDay;

    /**
     * 实际调岗日期
     */
    @ExcelProperty(index = 1, value = "调岗时间")
    @DateTimeFormat(value = "yyyy-MM-dd")
    private Date transferDate;

    @ExcelIgnore
    private List<WorkerGroupDataDto> orgList;

    /**
     * 工作交接列表
     */
    @ExcelIgnore
    List<FtbPersonnelsStaffTransferPositionHandoverDto> workerPositionHandoverList;

    /**
     * 物品交接列表
     */
    @ExcelIgnore
    List<FtbPersonnelsStaffTransferPositionHandoverDto> goodsPositionHandoverList;

    /**
     * 审核信息 意见是否必填 是否具有填写权限 勾选权限
     */
    @ExcelIgnore
    private FtbPersonnelsAuditInfoVO auditInfo;
    /**
     * 0不通过 1 通过
     */
    @ExcelIgnore
    private Integer approvalResult;


    /**
     * 办理人
     */
    @ExcelIgnore
    private String opUser;

    /**
     * 办理人姓名
     */
    @ExcelIgnore
    private String opUserName;
    /**
     * 审批id
     */
    @ExcelIgnore
    private String taskInfoId;

    /**
     * 考勤组
     */
    @ExcelIgnore
    private String attendanceGroup;
    /**
     * 考勤组名称
     */
    @ExcelIgnore
    private String attendanceGroupName;


    /**
     * 是否调整薪酬(0,否,1是) (v1.1)
     */
    @ExcelIgnore
    private String isAdjustSalary;

    /**
     * 薪资生效日期
     */
    @ExcelIgnore
    private Date payrollEffectiveDate;

    /**
     * 薪资结构(0,不使用,1使用) (v1.1)
     */
    @ExcelIgnore
    private String salaryStructure;

    @ExcelIgnore
    private String salaryStructureStr;

    /**
     *  薪资详情 (v1.1)
     */
    @ExcelIgnore
    private List<FtbPersonnelsSalaryInfo> salaryStructureList;

    /**
     *  版本号 区分是否为老版本审批数据 0为老版本 1为新版审批
     */
    @ExcelIgnore
    private Integer versionNum;

    /**
     * 来源 0、员工个人申请，1、后台办理 2 ,手动办理
     */
    @ExcelIgnore
    private Integer source;

    /**
     * 薪资调整原因
     */
    @ExcelIgnore
    private String  reasonsForSalaryAdjustments;


    public static void changeApprovalStatus(TransferPositionDto a) {
        // 审批状态(0,待审批,1审批中,2,审核通过,3,审核不通过,4,撤销,5未办理, 6手动办理,7逾期未审批,*/
        if (a.getIsNeedCheck() == 1) {
            a.setCheckStatusExcel("手动办理");
            return;
        }
        if (a.getCheckStatus() == 0) {
            a.setCheckStatusExcel("待审批");
        } else if (a.getCheckStatus() == 1) {
            a.setCheckStatusExcel("审批中");
        } else if (a.getCheckStatus() == 2) {
            a.setCheckStatusExcel("审批通过");
        } else if (a.getCheckStatus() == 3) {
            a.setCheckStatusExcel("审批不通过");
        } else if (a.getCheckStatus() == 4) {
            a.setCheckStatusExcel("撤销");
        } else if (a.getCheckStatus() == 5) {
            a.setCheckStatusExcel("未办理");
        } else if (a.getCheckStatus() == 6) {
            a.setCheckStatusExcel("手动办理");
        } else if (a.getCheckStatus() == 7) {
            a.setCheckStatusExcel("逾期未审批");
        }
    }


    public static void probationStatus(TransferPositionDto a) {
        /**
         * 100: '无试用期',
         * 101: '1个月内',
         * 102: '1个月',
         * 103: '2个月',
         * 104: '3个月',
         * 105: '4个月',
         * 106: '5个月',
         * 107: '6个月',
         * 108: '7个月',
         * 109: '8个月'
         */
        if (StringUtils.isBlank(a.getProbationPeriod())) {
            return;
        }
        switch (a.getProbationPeriod()) {
            case "100":
                a.setProbationPeriod("无试用期");
                break;
            case "101":
                a.setProbationPeriod("1个月内");
                break;
            case "102":
                a.setProbationPeriod("1个月");
                break;
            case "103":
                a.setProbationPeriod("2个月");
                break;
            case "104":
                a.setProbationPeriod("3个月");
                break;
            case "105":
                a.setProbationPeriod("4个月");
                break;
            case "106":
                a.setProbationPeriod("5个月");
                break;
            case "107":
                a.setProbationPeriod("6个月");
                break;
            case "108":
                a.setProbationPeriod("7个月");
                break;
            case "109":
                a.setProbationPeriod("8个月");
                break;
            default:
                a.setProbationPeriod("");
                break;
        }
    }
}
