package com.jwipc.finance.dto;

import com.jwipc.aggregation.annotation.RelationAggregationField;
import com.jwipc.sys.client.UserClient;
import lombok.Data;

import java.io.Serializable;
import java.math.BigDecimal;
import java.time.LocalDateTime;

/**
 * @author Al
 * @create 2024-02-20 16:31
 */
@Data
public class DeductionDTO implements Serializable {

    private Long id;

    /**
     * 扣款编号(取t_sequence表中的cut_payment_code)
     */
    private String deductionNo;

    /**
     * 状态：0-新建；1-OA审批中；2-OA审批拒绝；3-完成；4-待采购确认；5-驳回
     */
    private Integer status;

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

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

    /**
     * 公司编码
     */
    private String companyCode;

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

    /**
     * 扣款类型 在字典中获取(字典值back_type)
     */
    private Integer deductionType;

    /**
     * 扣款金额
     */
    private BigDecimal deductionAmount;

    /**
     * 未税扣款金额
     */
    private BigDecimal dntAmount;

    /**
     * 税率编码
     */
    private String taxCode;

    /**
     * 扣款税率值(%)
     */
    private Integer taxValue;

    /**
     * 扣款时间
     */
    private LocalDateTime deductionTime;
    private String deductionTimeDesc;

    /**
     * 扣款原因
     */
    private String deductionReason;

    /**
     * 关联单据号(比如:质量通知单,采购订单号,索赔单号)
     */
    private String associatedNo;

    /**
     * 关联单据行号(比如：采购订单行号)
     */
    private String associatedRowNo;

    /**
     * 关联OA流程单号(索赔单OA审批产生)
     */
    private String associatedOaNo;

    /**
     * 是否使用 0:未使用 1:对账单使用 2:线下使用
     */
    private Integer whether;

    /**
     * 对账单号
     */
    private String statementOrderCode;

    /**
     * 是否分摊 0-不需要；1-需要
     */
    private Integer shareFlag;

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

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

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

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

    /**
     * 更新用户
     */
    private Long updateUserId;


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

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

    /**
     * erp同步状态 0-成功；1-失败；
     */
    private Integer erpSyncState;

    /**
     * erp同步消息
     */
    private String erpSyncMessage;

    /**
     * erp扣款凭证号
     */
    private String erpSyncNo;

    /**
     * erp扣款凭证年度
     */
    private String erpSyncYear;

    /**
     * erp同步时间
     */
    private LocalDateTime erpSyncTime;
    /**
     * 附件
     */
    private String attachment;

    /**
     * 供应商回传附件
     */
    private String supReplyAttachment;

    /**
     * 采购组织
     */
    private String purchaseOrg;

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

    /**
     * 工厂
     */
    private String factory;

    /**
     * 价格单位
     */
    private String priceUnit;

    /**
     * 币种
     */
    private String currency;

    /**
     * 应付会计（员工）
     */
    private Long apAccountant;
    @RelationAggregationField(
            masterIdField = "apAccountant",
            relationIdField = "id",
            relationNameField = "username",
            relationClientClass = UserClient.class,
            relationMethod = "getByUserIds"
    )
    private String apAccountantName;

    /**
     * 扣款执行采购
     */
    private Long deductionExecutionProcurement;
    @RelationAggregationField(
            masterIdField = "deductionExecutionProcurement",
            relationIdField = "id",
            relationNameField = "username",
            relationClientClass = UserClient.class,
            relationMethod = "getByUserIds"
    )
    private String deductionExecutionProcurementName;

    /**
     * OA流程单号
     */
    private String oaCode;
}
