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

import com.fasterxml.jackson.annotation.JsonFormat;
import com.jeeplus.core.service.dto.BaseDTO;
import com.jeeplus.test.workContract.service.dto.WorkAttachmentDto;
import com.jeeplus.test.cw.projectRecords.service.dto.CwProjectRecordsDTO;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.springframework.format.annotation.DateTimeFormat;

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

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

    public static final String BIZ_CODE = "4";

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

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

    /**
     * 发票申请编号
     */
    private String no;

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

    /**
     * 实际开票单位
     */
    private String billingWorkplaceReal;

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

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

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

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

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

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

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

    /**
     * 开票内容
     */
    private String billingContent;

    /**
     * 发票金额(元)
     */
    private String account;

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

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

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

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

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

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

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

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

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

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

    /**
     * 状态
     */
    private String status;

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

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

    /**
     * 是否确认收款
     */
    private String receivablesStatus;

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

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

    /**
     * 基础项目信息
     */
    private List<CwProjectRecordsDTO> projectRecordsDTOList;

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

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

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

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

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

    /**
     * 发票号
     */
    private String number;

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

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

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

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

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

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

    /**
     * 项目名称
     */
    private String programName;

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

    /**
     * 经办人
     */
    private String operator;

    /**
     * 经办人部门
     */
    private String operatorOffice;

    private static final long serialVersionUID = 1L;
}