package com.jwipc.finance.model.po;


import cn.hutool.core.date.DateUtil;
import com.jwipc.finance.entity.InvoicedApplyDetail;
import lombok.Data;

import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.Date;

/**
 * <p>
 *     开票申请明细实体类
 * </p>
 *
 * @author li.kui
 * @version 1.0
 * @since 2020/8/13
 */
@Data
public class InvoicedApplyItemPO {

    // 到票含税单价, 对账数量, 到票含税金额, 到票税额, 到票税率, 到票不含税单价, 到票不含税金额, 到票含税金额差异, 到票含税单价差异,
    // 对账含税金额, 对账税额, 对账不含税金额, 对账含税单价, 对账不含税单价, 对账差异含税金额, 对账差异含税单价,
    // 物料凭证, 入库日期, 物料编码, 物料描述, SAP订单号, 采购订单行号, 订单税率, 订单含税单价, 订单不含税单价,
    // 订单含税金额, 订单不含税金额, 订单税额, 执行采购组, 寻源采购组描述, 付款条件, 付款方式,
    // 供应商编码, 供应商描述, 公司编码, 公司名称

    // 以下是创建时的字段

    /**
     * 开票申请明细ID
     */
    private Long id;

    /**
     * 采购申请明细ID
     */
    private Long purchaseOrderDetailId;
    /**
     * 开票申请行号
     */
    private String itemNo;
    /**
     * 开票申请单ID
     */
    private Long iaId;
    /**
     * SC订单号
     */
    private String zlsdh;
    /**
     * 开票申请单号
     */
    private String iaNo;
    /**
     * 对账单ID
     */
    private Long asId;
    /**
     * 对账单号
     */
    private String asNo;
    /**
     * 对账单明细ID
     */
    private Long asdId;
    /**
     * 工厂编码
     */
    private String factoryCode;
    /**
     * 对账单明细行号
     */
    private String asdItemNo;
    /**
     * 对账数量
     */
    private BigDecimal statementNum;
    /**
     * 未税单价
     */
    private BigDecimal notTaxPrice;
    /**
     * 含税单价
     */
    private BigDecimal taxPrice;
    /**
     * 未税金额
     */
    private BigDecimal notTaxAmount;
    /**
     * 含税金额
     */
    private BigDecimal taxAmount;
    /**
     * 税率值
     */
    private Integer taxValue;
    /**
     * 税率编码
     */
    private String taxCode;
    /**
     * 税率描述
     */
    private String taxDesc;
    /**
     * 税率编码(税率描述)
     */
    private String taxCodeDesc;
    /**
     * 差税额(税额)
     */
    private BigDecimal diffTaxAmount;
    /**
     * 到票差异含税单价
     */
    private BigDecimal iaDiffPrice;
    /**
     * 到票差异含税金额
     */
    private BigDecimal iaDiffAmount;
    /**
     * 物料凭证记录ID
     */
    private Long receiveId;
    /**
     * 入库凭证号
     */
    private String receiveCode;
    /**
     * 入库凭证行号
     */
    private String receiveRowNo;
    /**
     * 入库日期
     */
    private Date receiveDate;
    /**
     * 凭证年度
     */
    private String receiveYear;
    /**
     * 参考凭证号
     */
    private String cvCode;
    /**
     * 参考凭证号行号
     */
    private String cvItemNo;
    /**
     * 参考凭证年度
     */
    private String cvYear;
    /**
     * 凭证出入库标识 S:入库 H:出库
     */
    private String voucherFlag;
    /**
     * SAP移动类型
     */
    private String sapMoveType;
    /**
     * 出入库标识 格式:入库(101)
     */
    private String inOutFlag;
    /**
     * 入库数量
     */
    private BigDecimal receiveNum;
    /**
     * SAP订单号
     */
    private String poCode;
    /**
     * 采购订单行号
     */
    private String poItemNo;
    /**
     * 采购订单类型描述
     */
    private String poTypeName;
    /**
     * 物料编码
     */
    private String materialCode;
    /**
     * 品名
     */
    private String materialModel;
    /**
     * 规格
     */
    private String materialSpec;
    /**
     * 物料名称
     */
    private String materialName;
    /**
     * 物料单位
     */
    private String materialUnit;


    // 以下是采购确认对账单
    /**
     * 对账数量
     */
    private BigDecimal asQuantity;
    /**
     * 对账未税单价
     */
    private BigDecimal asNotTaxPrice;
    /**
     * 对账含税单价
     */
    private BigDecimal asTaxPrice;
    /**
     * 对账未税金额
     */
    private BigDecimal asNotTaxAmount;
    /**
     * 对账含税金额
     */
    private BigDecimal asTaxAmount;
    /**
     * 对账差税额
     */
    private BigDecimal asDiffTaxAmount;
    /**
     * 对账差异金额(含税)
     */
    private BigDecimal asDiffAmount = BigDecimal.ZERO;
    /**
     * 对账差异单价(含税)
     */
    private BigDecimal asDiffPrice = BigDecimal.ZERO;
    /**
     * 对账税率值
     */
    private Integer asTaxValue;
    /**
     * 对账税率编码
     */
    private String asTaxCode;
    /**
     * 对账税率描述
     */
    private String asTaxDesc;
    /**
     * (对账税率编码)对账税率描述
     */
    private String asTaxCodeDesc;

    // 对账时相关金额
    /**
     * 对账时订单未税金额 = 对账数量 * 订单未税单价
     */
    private BigDecimal asNtAmount = BigDecimal.ZERO;
    /**
     * 对账时订单含税金额 = 对账数量 * 订单含税单价
     */
    private BigDecimal asItAmount = BigDecimal.ZERO;
    /**
     * 对账时订单税金 = 对账时订单含税金额 - 对账时订单未税金额
     */
    private BigDecimal asDtAmount = BigDecimal.ZERO;

    /**
     * 供应商编码
     */
    private String supplierCode;
    /**
     * 供应商名称
     */
    private String supplierName;
    /**
     * 公司编码
     */
    private String companyCode;
    /**
     * 公司名称
     */
    private String companyName;
    /**
     * 执行采购组编码
     */
    private String pgCode;
    /**
     * 执行采购组名称
     */
    private String pgName;
    /**
     * (执行采购组编码)执行采购组名称
     */
    private String pgCodeName;
    /**
     * 询源采购组编码
     */
    private String seekPgCode;
    /**
     * 询源采购组名称
     */
    private String seekPgName;
    /**
     * (询源采购组编码)执行采购组名称
     */
    private String seekPgCodeName;
    /**
     * 付款方式编码
     */
    private String paymentWayCode;
    /**
     * 付款方式名称
     */
    private String paymentWayDesc;
    /**
     * (付款方式编码)付款方式名称
     */
    private String paymentWayCodeDesc;
    /**
     * 付款条件编码
     */
    private String paymentTermCode;
    /**
     * 付款条件名称
     */
    private String paymentTermName;
    /**
     * (付款条件编码)付款条件名称
     */
    private String paymentTermCodeName;
    /**
     * 采购订单税率值
     */
    private Integer poTaxValue;
    /**
     * 采购订单税率编码
     */
    private String poTaxCode;
    /**
     * 采购订单税率描述
     */
    private String poTaxDesc;
    /**
     * (采购订单税率编码)采购订单税率描述
     */
    private String poTaxCodeDesc;
    /**
     * 采购订单未税单价
     */
    private BigDecimal poNotTaxPrice;
    /**
     * 采购订单含税单价
     */
    private BigDecimal poTaxPrice;
    /**
     * 采购订单未税金额
     */
    private BigDecimal poNotTaxAmount;
    /**
     * 采购订单含税金额
     */
    private BigDecimal poTaxAmount;
    /**
     * 采购订单差税额
     */
    private BigDecimal poDiffTaxAmount;

    // 扣款和返利分摊字段
    /**
     * 分摊未税返利金额
     */
    private BigDecimal shareRntAmount = BigDecimal.ZERO;
    /**
     * 分摊返利税金
     */
    private BigDecimal sraTaxAmount = BigDecimal.ZERO;
    /**
     * 分摊含税返利金额
     */
    private BigDecimal shareRebateAmount = BigDecimal.ZERO;
    /**
     * 分摊未税扣款金额
     */
    private BigDecimal shareDntAmount = BigDecimal.ZERO;
    /**
     * 分摊扣款税金
     */
    private BigDecimal sdaTaxAmount = BigDecimal.ZERO;
    /**
     * 分摊含税扣款金额
     */
    private BigDecimal shareDeductionAmount = BigDecimal.ZERO;
    /**
     * 明细行是否可分摊 0:否 1:是
     */
    private Integer shareFlag;
    /**
     * 允许分摊凭证中的对账数量(存在反向凭证时需要)
     * SQL查询时计算: 对账数量 - 对账时最小对账数量
     */
    private BigDecimal shareNum;
    /**
     * 分摊后未税金额
     */
    private BigDecimal shareAfterNta = BigDecimal.ZERO;
    /**
     * 分摊后税金
     */
    private BigDecimal shareAfterTa = BigDecimal.ZERO;
    /**
     * 分摊后含税金额
     */
    private BigDecimal shareAfterIta = BigDecimal.ZERO;


    // 承运商对账字段
    /**
     * 材料商编码
     */
    private String materialSupplierCode;
    /**
     * 材料商名称
     */
    private String materialSupplierName;
    /**
     * 运费类型
     */
    private String freightType;


    // 集采订单相关信息
    /**
     * 集采SAP订单号
     */
    private String jcPoCode;
    /**
     * 集采采购订单行号
     */
    private String jcPoItemNo;
    /**
     * 集采工厂编码
     */
    private String jcFactoryCode;
    /**
     * 科目类别
     */
    private String subjectTypeName;
    /**
     * 成本中心
     */
    private String costCenterName;
    /**
     * 合同号
     */
    private String contractNo;
    /**
     * 采购员
     */
    private String purchaseUser;
    /**
     * 财务确认 1：已确认;0:未确认;
     */
    private Integer finConf;

    /**
     * t_purchase_order 主键
     */
    private Long poId;

    /**
     * 规格
     */
    private String specs;

    /**
     * 凭证日期
     */
    private LocalDateTime mvDate;
    private String mvDateStr;

    /**
     * 入库凭证号(物料凭证编号)
     */
    private String mvCode;

    /**
     * 物料中类
     */
    private String middleClass;
    private LocalDateTime paymentExpireDate;
    private String invoicedCode;

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

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