package com.jwipc.finance.dto;


import com.jwipc.finance.entity.PaymentPlanDetail;
import lombok.Data;

import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.time.temporal.WeekFields;
import java.util.Locale;

/**
 * <p>
 *     对账单保存明细实体类
 * </p>
 *
 * @author li.kui
 * @version 1.0
 * @since 2020/8/3
 */
@Data
public class PaymentPlanItemDTO {
    /**
     * 对账单明细表ID
     */
    private Long id;

    /**
     * 付款计划明细行号 按主表单号自动增加
     */
    private Integer paymentPlanDetailNo;

    /**
     * 付款计划单号
     */
    private String paymentPlanNo;

    /**
     * 付款计划id
     */
    private Long paymentPlanId;

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

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

    /**
     * 付款计划单年份
     */
    private String paymentPlanYear;

    /**
     * 付款计划单月份
     */
    private String paymentPlanMonth;

    /**
     * 对账单的年月
     */
    private String accountStatementYm;

    /**
     * 对账单id
     */
    private Long accountStatementId;

    /**
     * 对账单编号
     */
    private String accountStatementNo;

    /**
     * 新增标识
     */
    private String newSign;
    /**
     * 明细类型
     */
    private String paymentType;

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

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

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

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

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

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

    /**
     * 货币代码
     */
    private String currencyCode;
    /**
     * 应付金额
     */
    private BigDecimal actualPayAmount;

    /**
     * 已请款未付金额（历史）
     */
    private BigDecimal appliedUnpaidAmount;

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

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

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

    /**
     * 付款计划周(对账单上付款到期日所在周)
     */
    private String paymentPlanWeek;

    /**
     * 付款到期日
     */
    private LocalDateTime paymentExpireDate;

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

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

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

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

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

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

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

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

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

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

    /**
     * 行状态1待提交 2已提交 3删除
     */
    private Integer status;

    /**
     * 删除描述（导出用到）
     */
    private String deleteDes;
//    /**
//     * 对账单ID
//     */
//    private Long asId;
//    /**
//     * 对账单号
//     */
//    private String asNo;
//    /**
//     * 凭证ID
//     */
//    private Long receiveId;
//    /**
//     * SC订单号
//     */
//    private String zlsdh;
//    private String poType;
//    private String poTypeName;
//    /**
//     * 凭证号
//     */
//    private String receiveCode;
//    /**
//     * 凭证行号
//     */
//    private String receiveRowNo;
//    /**
//     * 入库凭证标识 S:入库 H:退货
//     */
//    private String voucherFlag;
//    /**
//     * 出入库标识 格式:入库(101)
//     */
//    private String inOutFlag;
//    /**
//     * 入库数量
//     */
//    private BigDecimal receiveNum;
//    /**
//     * 入库日期
//     */
//    private Date receiveDate;
//    private Date purPostDate;
//    private String extendFiled1;
//    /**
//     * 入库凭证年度
//     */
//    private String receiveYear;
//    /**
//     * 入库凭证SAP客户端编码
//     */
//    private String sapClient;
//    /**
//     * 物料编码
//     */
//    private String materialCode;
//    /**
//     * 物料名称
//     */
//    private String materialName;
//    /**
//     * 规格
//     */
//    private String specs;
//    /**
//     * 物料单位
//     */
//    private String materialUnit;
//    /**
//     * 对账数量
//     */
//    private BigDecimal asQuantity;
//    /**
//     * 税率编码
//     */
//    private String taxCode;
//    /**
//     * 税率描述
//     */
//    private String taxDesc;
//    /**
//     * (税率编码)税率描述
//     */
//    private String taxCodeDesc;
//    /**
//     * 税率值(%)
//     */
//    private BigDecimal taxValue;
//    /**
//     * 未税单价
//     */
//    private BigDecimal notTaxPrice;
//    /**
//     * 含税单价
//     */
//    private BigDecimal taxPrice;
//    /**
//     * 未税金额
//     */
//    private BigDecimal notTaxAmount;
//    /**
//     * 含税金额
//     */
//    private BigDecimal taxAmount;
//    private BigDecimal originalTaxPrice;
//    private BigDecimal mvNum;
//    private BigDecimal originalTaxAmount;
//
//     */
//    private String paymentTermCodeName;
//
//
//
//    /**
//     * 价格单位
//     */
//    private String priceUnit;
//    /**
//     * 对账差异含税单价
//     */
//    private BigDecimal asDiffPrice = BigDecimal.ZERO;
//    /**
//     * 对账差异含税金额
//     */
//    private BigDecimal asDiffAmount = BigDecimal.ZERO;
//
//
//    // 对账时相关金额
//    /**
//     * 对账时订单未税金额 = 对账数量 * 订单未税单价
//     */
//    private BigDecimal asNtAmount = BigDecimal.ZERO;
//    /**
//     * 对账时订单含税金额 = 对账数量 * 订单含税单价
//     */
//    private BigDecimal asItAmount = BigDecimal.ZERO;
//    /**
//     * 对账时订单税金 = 对账时订单含税金额 - 对账时订单未税金额
//     */
//    private BigDecimal asDtAmount = BigDecimal.ZERO;
//
//
//    // 采购审批相关字段
//    /**
//     * 采购审批-订单未税单价
//     */
//    private BigDecimal orderNotTaxPrice;
//
//    /**
//     * 订单原含税单价
//     */
//    private BigDecimal orderOriginalTaxPrice;
//
//    /**
//     * 其他折扣
//     */
//    private BigDecimal deductionRatio;
//
//
//    /**
//     * 采购审批-订单含税单价
//     */
//    private BigDecimal orderTaxPrice;
//    /**
//     * 采购审批-订单未税金额
//     */
//    private BigDecimal orderNotTaxAmount;
//    /**
//     * 采购审批-订单含税金额
//     */
//    private BigDecimal orderTaxAmount;
//    /**
//     * 采购订单-税额
//     */
//    private BigDecimal orderDiffTaxAmount;
//    /**
//     * 采购审批-订单税率值
//     */
//    private Integer orderTaxValue;
//    /**
//     * 采购审批-订单税率编码
//     */
//    private String orderTaxCode;
//    /**
//     * 采购审批-订单税率描述
//     */
//    private String orderTaxDesc;
//    /**
//     * (订单税率编码)订单税率描述
//     */
//    private String orderTaxCodeDesc;
//
//    // 承运商对账字段
//    /**
//     * 材料商编码
//     */
//    private String materialSupplierCode;
//    /**
//     * 材料商名称
//     */
//    private String materialSupplierName;
//    /**
//     * 运费类型
//     */
//    private String freightType;
//
//
//    // 集采订单相关信息
//    /**
//     * 集采SAP订单号
//     */
//    private String jcPoCode;
//    /**
//     * 集采采购订单行号
//     */
//    private String jcPoItemNo;
//    /**
//     * 集采工厂编码
//     */
//    private String jcFactoryCode;
//    private String factoryCode;
//
//
//    /**
//     * 累计开票金额(申请开票金额 + 采购确认金额 + 财务过账金额)
//     */
//    private BigDecimal invoicedAmount = BigDecimal.ZERO;
//    /**
//     * 剩余可开票金额((入库数量-对账数量) * 订单含税单价)
//     */
//    private BigDecimal surplusAmount = BigDecimal.ZERO;
//    /**
//     * 剩余可用数量
//     */
//    private BigDecimal surplusNum = BigDecimal.ZERO;
//
//
//    /**
//     * 参考凭证号
//     */
//    private String cvCode;
//    /**
//     * 参考凭证行号
//     */
//    private String cvItemNo;
//    /**
//     * 参考凭证年度
//     */
//    private String cvYear;
//    /**
//     * SAP移动类型
//     */
//    private String sapMoveType;
//    /**
//     * 最低对账数量
//     */
//    private BigDecimal minStatementQuantity;
//
//    private Integer deleteFlag;
//    /**
//     * 合同号
//     */
//    private String contractNo;
//
//    private String purchaseUser;
//
//    /**
//     * 凭证日期
//     */
//    private LocalDateTime mvPostDate;
//    private String mvPostDateStr;
//    private String mvCode;
//    private String deliveryOrderCode;
//    private String middleClass;
//    private String headUpText;
//    private LocalDateTime paymentExpireDate;
//    private String invoicedCode;
//
//
//    /**
//     * 报关公司编码
//     */
//    private String supplierCode2;
//
//    /**
//     * 报关公司名称
//     */
//    private String supplierName2;
//
//    private String  subjectTypeCode;
//    private String  rowTypeCode;

    /**
     * 计算对账时订单税金
     *
     * @return 结果
     */
//    public BigDecimal getAsDtAmount() {
//        return this.asItAmount.subtract(this.asNtAmount);
//    }

    /**
     * 计算对账时订单未税金额
     *
     * @return 结果
     */
//    public BigDecimal getAsNtAmount(){
//        BigDecimal tax = new BigDecimal(this.getOrderTaxValue()).divide(new BigDecimal("100"), 2, BigDecimal.ROUND_HALF_UP).add(BigDecimal.ONE);
//        return this.asItAmount.divide(tax, 2, BigDecimal.ROUND_HALF_UP);
//    }

//    public String getReceiveDate(){
//        if(null != this.receiveDate){
//            return DateUtil.format(this.receiveDate, "yyyy/MM/dd");
//        }
//        return "";
//    }

//    public String getInOutFlag(){
//        if(null != this.voucherFlag && null != this.sapMoveType){
//            if("S".equals(this.voucherFlag)){
//                return "<span style='color: green;'>入库(" + this.sapMoveType + ")</span>";
//            }else {
//                return "<span style='color: red;'>出库(" + this.sapMoveType + ")</span>";
//            }
//        }
//        return "";
//    }

    /**
     * 转换付款计划明细数据
     *
     * @return 结果
     */
    public PaymentPlanDetail toAsd(){
        PaymentPlanDetail paymentPlanDetail = new PaymentPlanDetail();
        paymentPlanDetail.setId(this.id==null?0l:this.id);


//        paymentPlanDetail.setPaymentPlanDetailNo(itemNo);
//        paymentPlanDetail.setCreateUserId(LoginUtil.getUserId());
//        paymentPlanDetail.setCreateUserCode(LoginUtil.getAccount());
//        paymentPlanDetail.setCreateUserName(LoginUtil.getName());
//        paymentPlanDetail.setCreateTime(LocalDateTime.now());
//        paymentPlanDetail.setPaymentPlanId(paymentPlan.getId());
//        paymentPlanDetail.setPaymentPlanNo(paymentPlan.getPaymentPlanNo());
//            paymentPlanDetail.setpayment
        paymentPlanDetail.setStatus((null == this.id || this.id == 0)? 1:this.status);
//        paymentPlanDetail.setAccountStatementNo(accountStatementPO.getAccountStatementNo());
//        paymentPlanDetail.setAccountStatementYear(accountStatementPO.getAccountStatementYear());
//        paymentPlanDetail.setAccountStatementMonth(accountStatementPO.getAccountStatementMonth());
        paymentPlanDetail.setCompanyCode(this.getCompanyCode());
        paymentPlanDetail.setSupplierCode(this.getSupplierCode());
        paymentPlanDetail.setSupplierName(this.getSupplierName());
        paymentPlanDetail.setCurrencyCode(this.getCurrencyCode());
        paymentPlanDetail.setPurchaseGroup(this.getPurchaseGroup());
        paymentPlanDetail.setPaymentWay(this.getPaymentWay());
        paymentPlanDetail.setPaymentExpireDate(this.getPaymentExpireDate());
        paymentPlanDetail.setPaymentTermCode(this.getPaymentTermCode());
        WeekFields weekFields = WeekFields.of(Locale.getDefault());
        // 获取当前日期的周数（周一作为一周的开始）
        int weekOfMonth = this.getPaymentExpireDate().get(weekFields.weekOfMonth());
        paymentPlanDetail.setPaymentPlanWeek(weekOfMonth + "");

        paymentPlanDetail.setActualPayAmount(this.actualPayAmount);
        paymentPlanDetail.setAppliedUnpaidAmount(this.appliedUnpaidAmount);
        paymentPlanDetail.setRemark(this.remark);
        paymentPlanDetail.setAccountStatementYear(this.accountStatementYear);
        paymentPlanDetail.setAccountStatementMonth(this.accountStatementMonth);
        paymentPlanDetail.setAccountStatementNo(this.accountStatementNo);
        paymentPlanDetail.setDeleteFlag(0);
        paymentPlanDetail.setPaymentType(this.paymentType);

//        asd.setItemNo(this.itemNo);
//        asd.setAsId(this.asId);
//        asd.setAsNo(this.asNo);
//        asd.setReceiveId(this.receiveId);
//        asd.setReceiveCode(this.receiveCode);
//        asd.setReceiveRowNo(this.receiveRowNo);
//        asd.setReceiveNum(this.receiveNum);
//        asd.setAsQuantity(this.asQuantity);
//        asd.setNotTaxPrice(this.notTaxPrice);
//        asd.setTaxPrice(this.taxPrice);
//        asd.setNotTaxAmount(this.notTaxAmount);
//        asd.setTaxAmount(this.taxAmount);
//        asd.setDiffTaxAmount(this.diffTaxAmount);
//        asd.setPriceUnit(this.priceUnit);
//        asd.setTaxCode(this.taxCode);
//        asd.setTaxValue(this.taxValue);
//        asd.setAsDiffPrice(this.asDiffPrice);
//        asd.setAsDiffAmount(this.asDiffAmount);
//        asd.setEditFlag(this.editFlag);
//        asd.setMinStatementQuantity(this.minStatementQuantity);
//        asd.setSubjectTypeCode(this.subjectTypeCode);
//        asd.setRowTypeCode(this.rowTypeCode);
        return paymentPlanDetail;
    }


    /**
     * 确认对账单明细是否可以编辑时使用
     *
     * @return 结果
     */
//    public ReceiveVoucher toRv(){
//        ReceiveVoucher rv = new ReceiveVoucher();
//        rv.setId(this.receiveId);
//        rv.setMvCode(this.receiveCode);
//        rv.setMvItemNo(this.receiveRowNo);
//        rv.setMvNum(this.receiveNum);
//        rv.setVoucherFlag(this.voucherFlag);
//        rv.setCvCode(this.cvCode);
//        rv.setCvItemNo(this.cvItemNo);
//        rv.setCvYear(this.cvYear);
//        rv.setSapMoveType(this.sapMoveType);
//        return rv;
//    }
}
