package com.zt.plat.module.erp.controller.admin.erp.vo;

import lombok.Data;
import java.math.BigDecimal;
import java.util.List;

/**
 * 采购订单修改/删除请求实体类
 * 字段名严格按照需求清单定义，不使用驼峰命名法
 */
@Data
public class SalesDocumentRequestVO {

    private String orderNo;
    // ===================== 请求抬头字段（顶层） =====================
    /** 要修改的采购订单号（必填） */
    private String salesdocument;

    /** 操作标识（必填）：U-修改；D-删除 */
    private String updateflag;

    /** 客户编号-付款人 */
    private String partn_es;

    // ===================== 请求抬头结构-head（独立实体） =====================
    /** 抬头结构信息 */
    private Head head;

    // ===================== 请求列表-item =====================
    /** 行项目列表 */
    private List<Item> itemList;

    // ===================== 请求列表-cond =====================
    /** 条件信息列表 */
    private List<String> condList;

    // ===================== 请求列表-souce =====================
    /** 来料加工原料信息列表 */
    private List<Souce> souceList;

    // -------------------- 内部实体类：Head --------------------
    /**
     * 抬头结构实体类
     */
    @Data
    public static class Head {
        /** 销售组织 */
        private String sales_org;

        /** 分销渠道 */
        private String distr_chan;

        /** 产品组 */
        private String division;

        /** 要求的交货日期（DATS 8：格式为 YYYYMMDD） */
        private String req_date_h;

        /** 销售组 */
        private String sales_grp;

        /** 销售办事处 */
        private String sales_off;

        /** 业务分类 */
        private String cust_grp1;

        /** 客户参考 */
        private String purch_no_c;

        /** 客户参考日期（DATS 8：格式为 YYYYMMDD） */
        private String purch_date;
    }

    // -------------------- 内部实体类：Item --------------------
    /**
     * 行项目实体类
     */
    @Data
    public static class Item {
        /** 行号（必填） */
        private Integer itm_number;

        /** 标识（必填）：U-修改；D-删除；I-插入 */
        private String updateflag;

        /** 物料编号 */
        private String material;

        /** 工厂 */
        private String plant;

        /** 存储地点 */
        private String store_loc;

        /** 销售单位（使用基本计量单位） */
        private String sales_unit;

        /** 使用标识（开票类型） */
        private String dlvschduse;

        /** 销售数量 */
        private BigDecimal target_qty;

        /** 税分类（为空时从客户和物料基础数据带出） */
        private String tax_class1;

        /** 装运地点 */
        private String ship_point;
    }

    // -------------------- 内部实体类：Cond --------------------
    /**
     * 条件信息实体类
     */
    @Data
    public static class Cond {
        /** 行号（必填） */
        private String itm_number;

        /** 标识：U-修改(默认)；D-删除；I-插入 */
        private String updateflag;

        /** 条件类型（必填） */
        private String cond_type;

        /** 条件金额（必填） */
        private BigDecimal cond_value;

        /** 货币码（必填） */
        private String currency;

        /** 条件单位（使用基本计量单位，必填） */
        private String cond_unit;

        /** 条件定价单位（必填，固定值1） */
        private BigDecimal cond_p_unt;
    }

    // -------------------- 内部实体类：Souce --------------------
    /**
     * 来料加工原料信息实体类
     */
    @Data
    public static class Souce {
        /** 行号（必填） */
        private String itm_number;

        /** 原料物料编号（必填） */
        private String material;

        /** 原料物料描述 */
        private String mat_desc;

        /** 数量（必填，保留3位小数） */
        private BigDecimal quantity;

        /** 计量单位（必填） */
        private String unit;

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