package com.dxhy.erp.entity.sdny;

import com.dxhy.erp.entity.BasePojo;
import com.dxhy.erp.utils.CommonEnum;
import com.google.common.base.Strings;
import lombok.Data;

import java.math.BigDecimal;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;

/**
 * @author guoker
 * @date 2020-12-28
 */
@Data
public class InvoiceInfo extends BasePojo {

    private static final long serialVersionUID = 1L;

    /**
     * 主键id
     */
    private String id;

    /**
     * 用户Id
     */
    private String userId;
    /**
     * 用户名称
     */
    private String userName;

    /**
     * 企业id
     */
    private String enterpriseId;

    /**
     * 报销一级科目代码
     */
    private String subject1stCode;

    /**
     * 报销二级科目代码
     */
    private String subject2ndCode;

    /**
     * 购买方名称
     */
    private String buyerName;

    /**
     * 纳税人识别号
     */
    private String buyerTaxNo;

    /**
     * 购买方电话
     */
    private String buyerAddressTel;

    /**
     * 购买方开户账号
     */
    private String buyerBankAccount;

    /**
     * 销售方名称
     */
    private String salerName;

    /**
     * 销售方纳税人识别号
     */
    private String salerTaxNo;

    /**
     * 销售方电话
     */
    private String salerAddressTel;

    /**
     * 销售方开户账号
     */
    private String salerBankAccount;

    /**
     * 发票类型
     */
    private String invoiceTypeCode;

    /**
     * 发票类型名称
     */
    private String invoiceTypeName;

    /**
     * 发票代码
     */
    private String invoiceCode;

    /**
     * 发票号码
     */
    private String invoiceNo;

    /**
     * 开票日期
     */
    private Date invoiceDate;

    /**
     * 开票日期
     */
    private String invoiceDateStr;

    /**
     * 入库时间
     */
    private Date createTime;

    /**
     * 合计金额
     */
    private BigDecimal invoiceAmount;

    /**
     * 合计税额
     */
    private BigDecimal taxAmount;

    /**
     * 价税合计
     */
    private BigDecimal totalAmount;

    /**
     * 开票类型：1-蓝票；2-红票
     */
    private String kplx;

    /**
     * 作废标志
     */
    private String isCanceled;

    /**
     * 冲红标志
     */
    private String isBlush;

    /**
     * 是否勾选
     */
    private int isCheck;

    /**
     * 报销状态
     */
    private String reimburseState;

    /**
     * 报销流水号
     */
    private String reimburseSerialNo;

    /**
     * 报销人
     */
    private String reimburseUserId;

    /**
     * 交易流水号
     */
    private String tradeSerialNo;

    /**
     * 单据名称
     */
    private String billName;

    /**
     * 交易流水号
     */
    private Date billDate;

    /**
     * 交易流水号
     */
    private String billDateStr;

    /**
     * 费用类别编码
     */
    private String expenseType;

    /**
     * 查验状态
     */
    private String checkState;

    /**
     * 机器编号
     */
    private String machineNo;

    /**
     * 校验码
     */
    private String verifyCode;

    /**
     * 密码区
     */
    private String passwordArea;

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

    /**
     * 收款人
     */
    private String receiver;

    /**
     * 复核人
     */
    private String reviewer;

    /**
     * 开票人
     */
    private String drawer;

    /**
     * 是否异常
     */
    private String isException;

    /**
     * 发票类别
     */
    private String fplb;

    /**
     * 数据来源    100：公用机图片   101：个人pc上传图片    102：个人pc上传pdf
     */
    private String dataSourceCode;

    /**
     * uuid 发票唯一索引
     */
    private String uuid;

    /**
     * 发票第一条明细
     */
    private String goodsName;

    /**
     * 出发城市
     */
    private String departCity;

    /**
     * 到达城市
     */
    private String arriveCity;

    /**
     * 车次
     */
    private String trainNumber;

    /**
     * 乘车人
     */
    private String passenger;

    /**
     * 座位等级
     */
    private String seatLevel;

    /**
     * 身份证号
     */
    private String identityNumber;

    /**
     * 电子客票号码
     */
    private String electronicTicketNumber;

    /**
     * 填开单位
     */
    private String issueBy;

    /**
     * 填开时间
     */
    private String dateOfIssue;

    /**
     * 航班号
     */
    private String flightNumber;

    /**
     * 附件张数
     */
    private String invoiceCount;

    /**
     * 税率
     */
    private String taxRate;

    /**
     * 是否可抵扣
     */
    private String isDeductible;

    /**
     * 发票联次
     */
    private String invoiceSheet;

    /**
     * 发票明细
     */
    private List<InvoiceDetail> detailList;
    /**
     * 是否电票
     */
    private String isEInvoice;
    /**
     * 起始时间
     */
    private Date startDate;
    /**
     * 终止时间
     */
    private Date endDate;

    /**
     * 发票图片地址
     */
    private String picUrlSimple;

    /**
     * 图片地址
     */
    private String imagePath;

    /**
     * 票价
     */
    private String fare;

    /**
     * 民航发展基金
     */
    private String caacDevelopmentFund;

    /**
     * 燃油附加费
     */
    private String fuelSurcharge;

    /**
     * 是否有公司印章 1：有 0：无
     */
    private String isCompanySeal;

    /**
     * 报销备注
     */
    private String reimbursementNote;

    /**
     * 是否为OCR返回结果 Y/N
     */
    private String isOcrResult;

    /**
     * 是否有原文件（1是0否）
     */
    private String haveSourceFile;

    /**
     * 币种编码
     */
    private String currencyCode;

    /**
     * 币种名称
     */
    private String currencyName;

    private String invoiceDetailInfo;


    /**
     * 机打代码
     */
    private String printInvoiceCode;

    /**
     * 机打号码
     */
    private String printInvoiceNo;

    /**
     * 序号
     */
    private String number;

    /**
     * 文件名
     */
    private String fileName;

    /**
     * 文件路径
     */
    private String filePath;



    /**
     * 其他税项金额字段-可以编辑
     */
    private String otherTaxAmount;

    /**
     * 可抵扣税额
     */
    private BigDecimal deductTaxAmount;

    /**
     * 缴款单位税号（双抬头）
     */
    private String twoBuyerTaxNo;

    /**
     * 缴款单位名称（双抬头）
     */
    private String twoBuyerName;


    /**
     * 车辆类型
     */
    private String vehicleType;

    /**
     * 厂牌型号
     */
    private String bandModel;

    /**
     * 产地 机动车
     */
    private String produceArea;

    /**
     * 合格证书
     */
    private String qualifiedNo;

    /**
     * 商检单号
     */
    private String commodityInspectionNo;

    /**
     * 发动机号
     */
    private String engineNo;

    /**
     * 车辆识别号(车架号)
     */
    private String vehicleIdentificationNo;

    /**
     * 进口证明书号
     */
    private String certificateOfImport;

    /**
     * 主管税务机关代码 机动车
     */
    private String taxAuthorityCode;

    /**
     * 完税凭证码 机动车
     */
    private String taxPaymentCertificateNo;

    /**
     * 限乘人数 机动车
     */
    private String limitedPeopleCount;

    /**
     * 主管税务机关名称 机动车
     */
    private String taxAuthorityName;

    /**
     * 吨位 机动车
     */
    private String tonnage;

    /**
     * 微信卡包标识（1：微信卡包，2：企业微信卡包）
     */
    private String wechatPackageStatus;

    /**
     * 飞机-----保险费
     */
    private String insurance;

    /**
     * 区块链-查验-地区名称
     */
    private String blockAreaName;

    /**
     * 区块链-是否可以查验
     */
    private String isCheckBlockChain;

    private static Date strToDate(String str) {
        try {
            if (!Strings.isNullOrEmpty(str)) {
                if (str.length() == CommonEnum.EIGHT) {
                    return new SimpleDateFormat("yyyyMMdd").parse(str);
                } else {
                    return new SimpleDateFormat("yyyyMMddHHmmss").parse(str);
                }
            }
            return null;
        } catch (ParseException e) {
            e.printStackTrace();
            return null;
        }
    }
}
