package com.zt.plat.module.contractorder.api.dto.order;

import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.math.BigDecimal;
import java.time.LocalDateTime;

@Data
@Schema(description = "订单明细")
public class OrdDtlDTO {

    // ========================== 公共属性（两个类均存在，统一保留）==========================
    /**
     * 主键
     */
    @Schema(description = "主键")
    private Long id;

    /**
     * 订单主键（PrchOrdDtlDTO.ordId / SalesOrdDtlDTO.orderId 统一命名） Y
     */
    @Schema(description = "订单主键")
    private Long orderId;

    /**
     * 行项目;推送ERP（必须）（PrchOrdDtlDTO.lineNum / SalesOrdDtlDTO.lineNumber 统一命名）Y
     */
    @Schema(description = "行项目")
    private Long lineNum;

    /**
     * 物料名称（PrchOrdDtlDTO.mtrlName / SalesOrdDtlDTO.materialName 统一命名）Y
     */
    @Schema(description = "物料名称")
    private String mtrlName;

    /**
     * 物料编码;推送ERP（必须）（PrchOrdDtlDTO.mtrlNum / SalesOrdDtlDTO.materialNumber 统一命名）Y
     */
    @Schema(description = "物料编码")
    private String mtrlNum;

    /**
     * 工厂名称（PrchOrdDtlDTO.rcvFactName / SalesOrdDtlDTO.factoryName 统一命名） Y
     */
    @Schema(description = "工厂名称")
    private String factoryName;

    /**
     * 工厂编码;推送ERP（必须）（PrchOrdDtlDTO.rcvFactNum / SalesOrdDtlDTO.factoryNumber 统一命名）Y
     */
    @Schema(description = "工厂编码")
    private String factoryNum;

    /**
     * 库位名称（PrchOrdDtlDTO.rcvWrhName / SalesOrdDtlDTO.warehouseName 统一命名）Y
     */
    @Schema(description = "库位名称")
    private String warehouseName;

    /**
     * 库位编码;推送ERP（PrchOrdDtlDTO.rcvWrhNum / SalesOrdDtlDTO.warehouseNumber 统一命名）Y
     */
    @Schema(description = "库位编码")
    private String warehouseNum;

    /**
     * 计量单位;推送ERP（必须）（PrchOrdDtlDTO.unt / SalesOrdDtlDTO.unit 统一命名）Y
     */
    @Schema(description = "计量单位")
    private String unit;

    /**
     * 暂估数量;推送ERP（必须）（PrchOrdDtlDTO.qty / SalesOrdDtlDTO.quantity 统一命名，类型统一为BigDecimal）Y
     */
    @Schema(description = "暂估数量")
    private BigDecimal quantity;

    /**
     * 项目类别;推送ERP（PrchOrdDtlDTO.prjCtgr / SalesOrdDtlDTO.projectCategory 统一命名）
     */
    @Schema(description = "项目类别")
    private String projectCategory;

    /**
     * 小协议号（PrchOrdDtlDTO.agrNum / SalesOrdDtlDTO.agreementNumber 统一命名）Y
     */
    @Schema(description = "小协议号")
    private String agreementNumber;

    /**
     * 金属元素缩写（PrchOrdDtlDTO.elemAbbr / SalesOrdDtlDTO.elementAbbreviation 统一命名）Y
     */
    @Schema(description = "金属元素缩写")
    private String elementAbbreviation;

    /**
     * 金属元素名称（PrchOrdDtlDTO.elemName / SalesOrdDtlDTO.elementName 统一命名）Y
     */
    @Schema(description = "金属元素名称")
    private String elementName;

    /**
     * 金属元素编码（PrchOrdDtlDTO.elemCdg / SalesOrdDtlDTO.elementNumber 统一命名）Y
     */
    @Schema(description = "金属元素编码")
    private String elementCode;

    /**
     * 是否启用（字典:ERP_CTRT_YN）;处理明细中多个相同物料，只能允许一种物料启用（PrchOrdDtlDTO.isEnb / SalesOrdDtlDTO.isEnable 统一命名）Y
     */
    @Schema(description = "是否启用")
    private String isEnable;


    /**
     * 税码(字典: PRCH_TAX);推送ERP Y
     */
    @Schema(description = "税码")
    private String taxNum;

    /**
     * 税率 Y
     */
    @Schema(description = "税率")
    private BigDecimal taxRte;

    // ========================== 采购订单特有属性（PrchOrdDtlDTO 独有）==========================
    /**
     * 含税单价;推送ERP（必须）
     */
    @Schema(description = "含税单价")
    private BigDecimal inTaxUprc;

    /**
     * 价格单位;推送ERP
     */
    @Schema(description = "价格单位")
    private BigDecimal prcUnt;

    /**
     * 是否基于GR的发票校验;推送ERP
     */
    @Schema(description = "是否基于GR的发票校验")
    private String isGrInv;

    /**
     * 是否允许无限制收货;推送ERP
     */
    @Schema(description = "是否允许无限制收货")
    private String isUnlRcv;

    /**
     * 批次;推送ERP
     */
    @Schema(description = "批次")
    private String bat;

    /**
     * 科目分配类别(字典: PRCH_ACTS_CTGR);推送ERP:联动订单类型，固定资产订单A，服务订单S-销售服务费K-成本中心F-订单
     */
    @Schema(description = "科目分配类别")
    private String actsCtgr;

    /**
     * 物料组编码(字典: PRCH_MATERIAL_GROUP);推送ERP:联动订单类型，服务订单必传 Y
     */
    @Schema(description = "物料组编码")
    private String mtrlCpntNum;

    /**
     * 物料组描述;推送ERP:联动订单类型，服务订单必传 Y
     */
    @Schema(description = "物料组描述")
    private String mtrlCpntDsp;

    /**
     * 短文本 Y
     */
    @Schema(description = "短文本")
    private String shrtTxt;

    /**
     * 退货标识X标识退货;推送ERP
     */
    @Schema(description = "退货标识")
    private String isRlbkCgo;

    /**
     * 是否免费收货标识X;推送ERP
     */
    @Schema(description = "是否免费收货标识")
    private String isFreeRcv;

    /**
     * 外部行项目号;推送ERP
     */
    @Schema(description = "外部行项目号")
    private Long outLineNum;

    /**
     * 备注信息-需求单位;推送ERP
     */
    @Schema(description = "备注信息-需求单位")
    private String rmkUnt;

    /**
     * 备注信息-物料详细;推送ERP
     */
    @Schema(description = "备注信息-物料详细")
    private String rmkMtrl;

    /**
     * 交货起始日期;推送ERP Y
     */
    @Schema(description = "交货起始日期")
    private LocalDateTime bgnDt;

    /**
     * 交货截止日期;推送ERP Y
     */
    @Schema(description = "交货截止日期")
    private LocalDateTime ddlDt;

    /**
     * 已收货量
     */
    @Schema(description = "已收货量")
    private BigDecimal lstQty;

    /**
     * 已移库量库;存针对该订单产生的移库量
     */
    @Schema(description = "已移库量")
    private BigDecimal trfQty;

    /**
     * 移库工厂名称 Y
     */
    @Schema(description = "移库工厂名称")
    private String trfFactName;

    /**
     * 移库工厂编码 Y
     */
    @Schema(description = "移库工厂编码")
    private String trfFactNum;

    /**
     * 移库库位名称 Y
     */
    @Schema(description = "移库库位名称")
    private String trfWrhName;

    /**
     * 移库库位编码 Y
     */
    @Schema(description = "移库库位编码")
    private String trfWrhNum;

    /**
     * 备注 Y
     */
    @Schema(description = "备注")
    private String rmk;

    /**
     * 原料湿重;推送ERP
     */
    @Schema(description = "原料湿重")
    private BigDecimal origWet;

    /**
     * 销售物料号;推送ERP:科目分配类别为S时必填
     */
    @Schema(description = "销售物料号")
    private String saleMtrlNum;

    /**
     * 统计型内部订单;推送ERP
     */
    @Schema(description = "统计型内部订单")
    private String inOrd;

    /**
     * 采购类别;推送ERP:0-生产性物资类1-项目投资类
     */
    @Schema(description = "采购类别")
    private String prchCtgr;

    /**
     * 科目分配详情;科目分配类别为K或P时使用(JSON)
     */
    @Schema(description = "科目分配详情")
    private String actsCtgrDtl;

    /**
     * 委托加工详情;委托加工订单使用(JSON)
     */
    @Schema(description = "委托加工详情")
    private String enttDtl;

    // ========================== 销售订单特有属性（SalesOrdDtlDTO 独有）==========================
    /**
     * 开票类型;推送ERP(必须)
     */
    @Schema(description = "开票类型")
    private String invoiceType;

//    /**
//     * 稅分类(字典:SALE_TAX);推送ERP(必须)
//     */
//    private String taxAcctasscat;

    /**
     * 装运地点;推送ERP
     */
    @Schema(description = "装运地点")
    private String shippingPlace;

    /**
     * 物料科目分配组;推送ERP（必须）
     */
    @Schema(description = "物料科目分配组")
    private String metalAcctasscatGroup;

    /**
     * 总价
     */
    @Schema(description = "总价")
    private BigDecimal gross;


    /**
     * 价格条件详情;推送ERP(必须):JSON
     */
    @Schema(description = "价格条件详情")
    private String priceConditionDetail;

    /**
     * 来料加工原料详情;推送ERP:订单类型(JSON)
     */
    @Schema(description = "来料加工原料详情")
    private String originDetail;
}
