package com.inkasso.factoring.financingmanagement.entity.vo;

import com.fasterxml.jackson.annotation.JsonFormat;
import com.inkasso.factoring.dict.entity.Dictionary;

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

/**
 * @Description : 收放款计划
 * @Author : L.Jia
 * @Date: 2024-04-09 14:17
 */
public class PaymentCollectionPlanFactoring {

    private Long id;

    /**
     * 序号
     */
    private Integer serialNo;

    /**
     * 约定日期
     **/
    @JsonFormat(pattern = "yyyy-MM-dd")
    private Date planDate;

    /**
     * 金额类型
     */
    private Dictionary amountType;

    /**
     * 收放款类型
     */
    private String paymentCollectionType;

    /**
     * 金额
     */
    private BigDecimal amount;

    /**
     * 币种
     */
    private Dictionary currencyType;

    /**
     * 实际净现金流
     */
    private BigDecimal actualCashFlow;

    /**
     * 收款主体:债权人creditor、债务人debtor
     **/
    private String receivingSubject;
    /**
     * 状态
     **/
    private Dictionary status;

    /**
     * 合同收支计划ID，可为null值表示新增的“收款”
     **/
    private Long contractIncomeExpenditurePlanId;
    /**
     * 逾期(利息)数据来源ID
     **/
    private Long overdueSourceId;

    /**
     * 不保存数据库，仅页面展示 本金放款实际放款信息
     **/
    private List<BillingFactoringBusinessLoanRecord> loanRecordList;

    /**
     * 不保存数据库，仅页面展示 收款实际放款信息
     **/
    private List<PayCollPlanFactoringAmountAllocation> collRecordList;

    /**
     * 宽限应还日
     **/
    @JsonFormat(pattern = "yyyy-MM-dd")
    private Date overDate;

    /**
     * 宽限期类型 0：无 1：一次延期 2：二次延期
     */
    private Integer graceType;

    /**
     * 对应应收账款的Id（不保存数据库）
     */
    private Long underlyingAccountReceivableId;

    /**
     * 对应放款记录Id
     */
    private Long billingFactoringBusinessLoanRecordId;

    public Integer getSerialNo() {
        return serialNo;
    }

    public void setSerialNo(Integer serialNo) {
        this.serialNo = serialNo;
    }

    public Date getPlanDate() {
        return planDate;
    }

    public void setPlanDate(Date planDate) {
        this.planDate = planDate;
    }

    public Dictionary getAmountType() {
        return amountType;
    }

    public void setAmountType(Dictionary amountType) {
        this.amountType = amountType;
    }

    public String getPaymentCollectionType() {
        return paymentCollectionType;
    }

    public void setPaymentCollectionType(String paymentCollectionType) {
        this.paymentCollectionType = paymentCollectionType;
    }

    public BigDecimal getAmount() {
        return amount;
    }

    public void setAmount(BigDecimal amount) {
        this.amount = amount;
    }

    public Dictionary getCurrencyType() {
        return currencyType;
    }

    public void setCurrencyType(Dictionary currencyType) {
        this.currencyType = currencyType;
    }

    public BigDecimal getActualCashFlow() {
        return actualCashFlow;
    }

    public void setActualCashFlow(BigDecimal actualCashFlow) {
        this.actualCashFlow = actualCashFlow;
    }

    public String getReceivingSubject() {
        return receivingSubject;
    }

    public void setReceivingSubject(String receivingSubject) {
        this.receivingSubject = receivingSubject;
    }

    public Dictionary getStatus() {
        return status;
    }

    public void setStatus(Dictionary status) {
        this.status = status;
    }

    public Long getContractIncomeExpenditurePlanId() {
        return contractIncomeExpenditurePlanId;
    }

    public void setContractIncomeExpenditurePlanId(Long contractIncomeExpenditurePlanId) {
        this.contractIncomeExpenditurePlanId = contractIncomeExpenditurePlanId;
    }

    public Long getOverdueSourceId() {
        return overdueSourceId;
    }

    public void setOverdueSourceId(Long overdueSourceId) {
        this.overdueSourceId = overdueSourceId;
    }

    public List<BillingFactoringBusinessLoanRecord> getLoanRecordList() {
        return loanRecordList;
    }

    public void setLoanRecordList(List<BillingFactoringBusinessLoanRecord> loanRecordList) {
        this.loanRecordList = loanRecordList;
    }

    public List<PayCollPlanFactoringAmountAllocation> getCollRecordList() {
        return collRecordList;
    }

    public void setCollRecordList(List<PayCollPlanFactoringAmountAllocation> collRecordList) {
        this.collRecordList = collRecordList;
    }

    public Date getOverDate() {
        return overDate;
    }

    public void setOverDate(Date overDate) {
        this.overDate = overDate;
    }

    public Long getUnderlyingAccountReceivableId() {
        return underlyingAccountReceivableId;
    }

    public void setUnderlyingAccountReceivableId(Long underlyingAccountReceivableId) {
        this.underlyingAccountReceivableId = underlyingAccountReceivableId;
    }

    public Long getBillingFactoringBusinessLoanRecordId() {
        return billingFactoringBusinessLoanRecordId;
    }

    public void setBillingFactoringBusinessLoanRecordId(Long billingFactoringBusinessLoanRecordId) {
        this.billingFactoringBusinessLoanRecordId = billingFactoringBusinessLoanRecordId;
    }

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public Integer getGraceType() {
        return graceType;
    }

    public void setGraceType(Integer graceType) {
        this.graceType = graceType;
    }
}
