package com.jwipc.finance.dto;

import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import org.apache.commons.lang3.StringUtils;

import java.io.Serializable;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.Date;
import java.util.Objects;

/**
 * <p>
 * 对账模块-对账单主表
 * </p>
 *
 * @author shenyang.ou
 * @since 2024-03-04
 */
@Data
public class AccountStatementDTO implements Serializable {

    private Long id;
    private String imageAllCode;
    private Integer payableRefundFlag;
    /**
     * 对账单号
     */
    private String accountStatementNo;

    /**
     * 对账年份
     */
    private String accountStatementYear;

    /**
     * 对账月份
     */
    private String accountStatementMonth;


    /**
     * 对账期间
     */
    private String accountStatementPeriod;

    /**
     * 采购公司代码
     */
    private String companyCode;

    /**
     * 采购公司名称
     */
    private String companyName;

    /**
     * 公司地址
     */
    private String companyAddress;

    /**
     * 公司电话
     */
    private String companyTel;

    /**
     * 供应商代码
     */
    private String supplierCode;

    /**
     * 供应商名称
     */
    private String supplierName;

    /**
     * 工厂编码
     */
    private String factoryCode;

    /**
     * 工厂名称
     */
    private String factoryName;

    /**
     * 货币代码
     */
    private String currencyCode;

    /**
     * 是否含税
     */
    private String includeTax;
    /**
     * 是否待开票
     */
    private String toBeInvoiced;

    /**
     * 入库开始日期
     */
    private Date inStockStartDate;

    /**
     * 入库结束日期
     */
    private Date inStockEndDate;
    private String inStockEndDateStr;

    /**
     * 未税金额
     */
    private BigDecimal notTaxAmount;

    /**
     * 含税金额
     */
    private BigDecimal taxAmount;

    /**
     * 差异金额
     */
    private BigDecimal differenceAmount;

    /**
     * 扣款金额
     */
    private BigDecimal deductionAmount;

    /**
     * 返利金额
     */
    private BigDecimal rebateAmount;

    /**
     * 期初应付余额
     */
    private BigDecimal bpPayableBalance;

    /**
     * 期初暂估余额
     */
    private BigDecimal bpEstimateBalance;

    /**
     * 期末应付余额
     */
    private BigDecimal etPayableBalance;

    /**
     * 期末暂估余额
     */
    private BigDecimal etEstimateBalance;

    /**
     * 本期付款金额
     */
    private BigDecimal currPaymentAmount;

    /**
     * 付款状态 付款申请单的状态，状态全是“付款完成”，则为“是” , 否则为否
     *
     */
    private String paymentStatus;

    /**
     * 付款备注
     */
    private String paymentRemark;

    /**
     * 备注
     */
    private String remark;

    /**
     * 数据状态 1:暂存 2:待采购确认 3:采购拒绝 4:待推送OA审批 5:OA审批中 6:OA审批不通过 7:待财务确认 8:财务拒绝 9:确认通过
     */
    private Integer status;

    /**
     * OA审批流程ID
     */
    private String oaProcessId;

    /**
     * OA审批流程号
     */
    private String oaProcessNo;

    /**
     * 推送OA次数(后续推送OA时赋值价格组审批流程号, 价格组审批流程号: 对账单号+推送OA次数)
     */
    private Integer pushOaNum;

    /**
     * 推送OA员工工号
     */
    private String pushOaUserCode;

    /**
     * 推送OA员工姓名
     */
    private String pushOaUserName;

    /**
     * 对账单类型 1:材料商对账单 2:承运商对账单
     */
    private Integer orderType;

    /**
     * 开票完成标识 0:未完成 1:已完成
     */
    private Integer invoiceCompleteFlag;

    /**
     * 付款条件
     */
    private String paymentTermCode;
    /**
     * 付款条件
     */
    private String paymentTermName;

    /**
     * 付款方式
     */
    private String paymentWay;

    /**
     * 采购确认时间
     */
    private LocalDateTime purchaseConfirmTime;

    /**
     * 采购确认人
     */
    private Long purchaseConfirmUserId;
    private String purchaseConfirmUserName;

    /**
     * 财务确认时间
     */
    private LocalDateTime financeConfirmTime;
    private String financeConfirmTimeStr;

    /**
     * 财务确认人
     */
    private Long financeConfirmUserId;
    private String financeConfirmUserName;

    /**
     * 创建用户ID
     */
    private Long createUserId;

    /**
     * 创建用户编码
     */
    private String createUserCode;

    /**
     * 创建用户姓名
     */
    private String createUserName;

    /**
     * 创建时间
     */
    private LocalDateTime createTime;
    private String createTimeStr;

    /**
     * 最后更新用户ID
     */
    private Long updateUserId;

    /**
     * 最后更新用户编码
     */
    private String updateUserCode;

    /**
     * 最后更新用户姓名
     */
    private String updateUserName;

    /**
     * 最后更新时间
     */
    private LocalDateTime updateTime;

    /**
     * 删除标识 0:未删除 1:已删除
     */
    private Integer deleteFlag;

    /**
     * 采购组编码
     */
    private String purchaseGroup;
    private String purchaseGroupName;

    /**
     * 应付本币金额
     */
    private BigDecimal localCurrency;

    /**
     * 应付原币金额
     */
    private BigDecimal originalCurrency;

    /**
     * 预付本币金额
     */
    private BigDecimal advanceLocalCurrency;

    /**
     * 预付原币金额
     */
    private BigDecimal advanceOriginalCurrency;

    /**
     * 总账科目编码
     */
    private String ledgerAccount;


    /**
     * 总账科目名称
     */
    private String ledgerAccountName;

    /**
     * 订单类型
     */
    private String poType;

    /**
     * 税率编码
     */
    private String taxCode;
    private String taxName;

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

    /**
     * 凭证类型
     */
    private Integer voucherType;
    private BigDecimal strikePriceAmount;
    private BigDecimal actualUnpaidAmount;

    /**
     * 已预付金额/已付款金额
     */
    private BigDecimal alreadyPaymentAmount;
    /**
     * 已申请金额
     */
    private BigDecimal alreadyApplyAmount;
    /**
     * 可申请付款金额
     */
    private BigDecimal applyAmount;
    private String invoiceNo;


    /**
     * 签章文件状态；0-无需签章；1-待上传签章文件；2-已上传签章文件；
     */
    private Integer signFileStatus;

    /**
     * 签署状态；0-草稿；1-签署中；2-完成；3-已过期；4-已拒签；5-已作废；6-作废中
     */
    private Integer signStatus;

    /**
     * 签署附件
     */
    private Long signFile;

    /**
     * 签署附件key
     */
    private String fileKey;

    /**
     * 签署流程id
     */
    private String signFlowId;
    private LocalDateTime paymentExpireDate;
    private String invoicedCode;

    /**
     * 报关公司编码
     */
    private String supplierCode2;

    /**
     * 报关公司名称
     */
    private String supplierName2;

    /**
     * 购销合同文件签署状态
     */
    private Integer  salesAgreementSignStatus;
    private Integer  itemSalesAgreementSignStatus;
    private Integer  salesProcessAgreementSignStatus;
    /**
     * 签章顺序；取字典(sign_order)
     */
    private String signOrder;

    /**
     * 合同补录状态；0-无；1-待复核；2-复核未通过；3-复核通过
     */
    private Integer  contractSupplementStatus;


    /**
     * 影像编码
     */
    private String imgCode;

    /**
     * 影像创建时间
     */
    private LocalDateTime imgTime;
    private Long imgUserId;
    private String accountImageCode;
    private String invoicedImageCode;

    /**
     * 发票含税总金额 人民币的时候用到
     */
    private BigDecimal invoiceTaxTotalAmount;

    /**
     * 开票含税总金额 其他币种的时候用到
     */
    private BigDecimal invoiceTaxAmount;
}
