package com.jeeplus.test.finance.invoice.service.dto;

import cn.afterturn.easypoi.excel.annotation.Excel;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.jeeplus.core.domain.BaseEntity;
import com.jeeplus.core.service.dto.BaseDTO;
import com.jeeplus.test.oss.domain.WorkAttachment;
import com.jeeplus.test.workContract.service.dto.WorkAttachmentDto;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.springframework.format.annotation.DateTimeFormat;

import java.util.Date;
import java.util.List;

/**
 * 财务管理-发票
 * @TableName finance_invoice
 */
@Data
@EqualsAndHashCode(callSuper = false)
public class FinanceInvoiceDTO extends BaseDTO {

    public static final String BIZ_CODE = "4";

    /**
     * 备注信息
     */
    private String remarks;

    /**
     * 发票申请编号
     */
    @Excel(name = "发票申请编号", orderNum = "0", width = 30)
    private String no;

    /**
     * 项目名称
     */
    @Excel(name = "项目名称",width = 25)
    private String programName;

    /**
     * 实际开票单位
     */
    @Excel(name = "实际开票单位",width = 25)
    private String billingWorkplaceReal;

    /**
     * 经办人
     */
    @Excel(name = "经办人",width = 16)
    private String operator;

    /**
     * 经办人部门
     */
    @Excel(name = "经办人部门",width = 16)
    private String operatorOffice;

    /**
     * 发票号
     */
    @Excel(name = "发票号",width = 16)
    private String number;

    /**
     * 开票金额(元)
     */
    @Excel(name = "开票金额（元）",width = 16,type = 10)
    private String account;

    /**
     * 发票金额(元)
     */
    @Excel(name = "发票金额(元)",width = 16,type = 10)
    private String accountDetail;

    /**
     * 开票内容
     */
    @Excel(name = "开票内容",width = 30,dict = "invoice_billing_content")
    private String billingContent;

    /**
     * 发票类型
     */
    @Excel(name = "发票类型",width = 20,dict = "invoice_type")
    private String type;

    /**
     * 开票时间
     */
    @DateTimeFormat(pattern = "yyyy-MM-dd")
    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd")
    @Excel(name = "开票日期",width = 20,exportFormat = "yyyy-MM-dd")
    private Date billingDate;

    /**
     * 状态
     */
    @Excel(name = "开票状态",width = 20,dict = "invoice_status")
    private String status;

    /**
     * 收款日期
     */
    @DateTimeFormat(pattern = "yyyy-MM-dd")
    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd")
    @Excel(name = "收款日期",width = 20,exportFormat = "yyyy-MM-dd")
    private Date receivablesDate;

    /**
     * 是否确认收款
     */
    @Excel(name = "是否确认收款",width = 14, replace = {"是_1", "否_0"})
    private String receivablesStatus;

    /**
     * 领票时间
     */
    @DateTimeFormat(pattern = "yyyy-MM-dd")
    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd")
    private Date collectDate;

    /**
     * 开票类型
     */
    private String billingType;

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

    /**
     * 地址
     */
    private String address;

    /**
     * 电话
     */
    private String telPhone;

    /**
     * 开户银行
     */
    private String openBank;

    /**
     * 银行账号
     */
    private String bankAccount;

    /**
     * 姓名
     */
    private String name;

    /**
     * 收款类型
     */
    private String receivablesType;


    /**
     * 开票内容要求
     */
    private String billingContentTerms;

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

    /**
     * 实际开票人
     */
    private String billingPeopleReal;

    /**
     * 对账人id
     */
    private String reconciliationPeople;

    /**
     * 对账人姓名
     */
    private String reconciliationPeopleName;

    /**
     * 对账地区
     */
    private String reconciliationArea;

    /**
     * 实际开票单位id
     */
    private String billingWorkplaceRealId;

    /**
     * 开票人id
     */
    private String billingPeopleId;

    /**
     * 流程id
     */
    private String procInsId;

    /**
     * 流程信息
     */
    private String processDefinitionId;

    /**
     * 是否作废
     */
    private String invalidStatus;

    /**
     * 基础信息
     */
    private List<FinanceInvoiceBaseDTO> financeInvoiceBaseDTOList;

    /**
     * 附件信息
     */
    private List<WorkAttachmentDto> workAttachmentDtoList;

    /**
     * 发票明细
     */
    private List<FinanceInvoiceDetailDTO> financeInvoiceDetailDTOList;

    /**
     * 收款明细
     */
    private List<FinanceInvoiceReceivablesDTO> financeInvoiceReceivablesDTOList;

    /**
     * 作废信息
     */
    private FinanceInvoiceInvalidDTO financeInvoiceInvalidDTO;

    /**
     * 开票总金额 Begin
     */
    private String accountBegin;

    /**
     * 开票总金额 End
     */
    private String accountEnd;

    /**
     * 开票日期 Begin
     */
    private String billingDateBegin;

    /**
     * 开票日期 End
     */
    private String billingDateEnd;

    /**
     * 收款日期Begin
     */
    private String remittanceDateBegin;

    /**
     * 收款日期End
     */
    private String remittanceDateEnd;

    /**
     * 项目id
     */
    private String programId;

    /**
     * 是否为收款页面   0否  1是
     */
    private String isReceivables;

    /**
     * 数据审核人  发票申请
     */
    private List<String> auditUserIds;

    /**
     * 发票作废  taskId
     */
    private String taskIdInvalid;

    /**
     * 数据审核人  发票作废
     */
    private List<String> auditUserIdsInvalid;

    /**
     * 是否多张开票  1是  0否
     */
    private String isMultiple;


    private static final long serialVersionUID = 1L;
}