package cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.payment;

import cn.iocoder.yudao.framework.common.pojo.UploadUserFile;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;

import javax.validation.constraints.NotNull;
import java.math.BigDecimal;
import java.util.List;

/**
 * 付款申请 创建 Request VO
 *
 * @author 符溶馨
 */
@Schema(description = "管理后台 - 付款申请创建 Request VO")
@Data
public class BpmOAPaymentCreateReqVO {

    @Schema(description = "申请事由", requiredMode = Schema.RequiredMode.REQUIRED)
    @NotNull(message = "申请事由不能为空")
    private String reason;

    @Schema(description = "付款类型 | 字典值参考 bpm_oa_payment_type", requiredMode = Schema.RequiredMode.REQUIRED)
    @NotNull(message = "付款类型不能为空")
    private Integer type;

    @Schema(description = "费用产生部门编号", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
    private Long deptId;

    @Schema(description = "工厂明细", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
    private List<FactoryDetailVO> factoryDetail;

    @Schema(description = "项目编号", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
    private String projectNo;

    @Schema(description = "采购单编号", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
    private Long procureId;

    @Schema(description = "银行编号", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
    private Long bankId;

    @Schema(description = "付款方式 | 1预付款 2分期付款 3全额付款", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
    private Integer paymentMethod;

    @Schema(description = "付款总额 | 针对预付款、分期付款情况", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
    private BigDecimal totalAmount;

    @Schema(description = "付款比例 | 针对分期付款情况", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
    private BigDecimal paymentRatio;

    @Schema(description = "付款金额", requiredMode = Schema.RequiredMode.REQUIRED)
    @NotNull(message = "付款金额不能为空")
    private BigDecimal amount;

    @Schema(description = "付款公司编号", requiredMode = Schema.RequiredMode.REQUIRED)
    @NotNull(message = "付款公司编号不能为空")
    private Long paymentCompany;

    @Schema(description = "是否后补发票 | 0否 1是", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
    private Integer isTickets;

    @Schema(description = "后补票批注", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
    private String annotations;

    @Schema(description = "补票状态 | 0待补票 1已补票 2已确认", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
    private Integer status;

    @Schema(description = "父级审批编号", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
    private Long parentId;

    @Schema(description = "流程实例编号")
    private String processInstanceId;

    @Schema(description = "状态-参见 bpm_process_instance_result 枚举", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
    private Integer result;

    @Schema(description = "上传文件", requiredMode = Schema.RequiredMode.REQUIRED)
    private List<UploadUserFile> fileItems;
}
