
using RB_MES_API.Context;
using System.ComponentModel.DataAnnotations;

namespace RB_MES_API.Models.Cloud
{
    public class SUB_PPBOM
    {/// <summary>
     /// 实体主键（无需填写，保存时自动添加）
     /// </summary>
        public int FID { get; set; }
        /// <summary>
        /// 单据编号    
        /// </summary>
        [StringLength(36)]
        public string FBillNo { get; set; }
        /// <summary>
        /// 产品编码  (必填项)
        /// </summary>
        public Dictionary<string, string> FMaterialID { get; set; } = new Dictionary<string, string>() {{ "FNUMBER",""}};
        /// <summary>
        /// BOM编号
        /// </summary>
        public Dictionary<string, string> FBOMID { get; set; } = new Dictionary<string, string>() { { "FNUMBER",""} };
        /// <summary>
        /// 辅助属性 
        /// </summary>
        public AuxPropIDHead FAuxPropIDHead = new AuxPropIDHead();

        public class AuxPropIDHead
        {
            public Dictionary<string, string> FAUXPROPIDHEAD__FF100001 { get; set; } = new Dictionary<string, string>() {{ "FNUMBER",""}};
        }
        /// <summary>
        /// 委外组织  (必填项)
        /// </summary>
        public Dictionary<string, object> FSubOrgId { get; set; } = new Dictionary<string, object>() { { "FNumber", LocalStaticRequest.DefaultOrg } };
        /// <summary>
        /// 供应商  (必填项)
        /// </summary>
        public Dictionary<string, object> FSupplierId { get; set; } = new Dictionary<string, object>() { { "FNumber", LocalStaticRequest.DefaultOrg } };
        /// <summary>
        /// 单位  (必填项)
        /// </summary>
        public Dictionary<string, string> FUnitID { get; set; } = new Dictionary<string, string>() { { "FNUMBER",""} };
        /// <summary>
        /// 数量  (必填项)
        /// </summary>
        public decimal FQty { get; set; }
        /// <summary>
        /// 委外订单类型
        /// </summary>
        public Dictionary<string, string> FSubReqType { get; set; } = new Dictionary<string, string>() { { "FNUMBER",""} };
        /// <summary>
        /// 委外订单编号    
        /// </summary>
        [StringLength(36)]
        public string FSubReqBillNO { get; set; }
        /// <summary>
        /// 委外订单行号    
        /// </summary>
        public long FSubReqEntrySeq { get; set; }
        /// <summary>
        /// 委外订单内码  
        /// </summary>
        public long FSubReqId { get; set; }
        /// <summary>
        /// 委外订单行内码  
        /// </summary>
        public long FSubReqEntryId { get; set; }
        /// <summary>
        /// 基本单位
        /// </summary>
        public Dictionary<string, string> FBaseUnitID { get; set; } = new Dictionary<string, string>() { { "FNUMBER",""} };
        /// <summary>
        /// 基本单位数量
        /// </summary>
        public decimal FBaseQty { get; set; }
        /// <summary>
        /// 产品货主类型   
        /// </summary>
        [StringLength(36)]
        public string FParentOwnerTypeId { get; set; }
        /// <summary>
        /// 产品货主
        /// </summary>
        public Dictionary<string, string> FParentOwnerId { get; set; } = new Dictionary<string, string>() { { "FNUMBER",""} };
        public List<Entity> FEntity { get; set; } = new List<Entity>();
        /// <summary>
        /// 子项明细
        /// </summary>
        public class Entity
        {
            public int FSeq { get; set; }
            /// <summary>
            /// 项次，替代主料的行号
            /// </summary>
            public int FReplaceGroup { get; set; }
            /// <summary>
            /// 实体主键（无需填写，保存时自动添加）
            /// </summary>
            public long FEntryID { get; set; } = 0;
            /// <summary>
            /// 子项物料编码   (必填项)
            /// </summary>
            public Dictionary<string, string> FMaterialID2 { get; set; } = new Dictionary<string, string>() { { "FNUMBER",""}  };

            /// <summary>
            /// 子项类型  (必填项)   
            /// </summary>
            [StringLength(36)]
            public string FMaterialType { get; set; } = "1";
            /// <summary>
            /// 供应类型  
            /// </summary>
            [StringLength(36)]
            public string FSupplyType { get; set; }
            /// <summary>
            /// 辅助属性
            /// </summary>
            public AuxPropID FAuxPropID = new AuxPropID();
            public class AuxPropID
            {
                public Dictionary<string, string> FAUXPROPID__FF100001 { get; set; } = new Dictionary<string, string>() { { "FNUMBER",""} };
            }
            /// <summary>
            /// 用量类型    (必填项) 
            /// </summary>
            [StringLength(36)]
            public string FDosageType { get; set; } = "2";
            /// <summary>
            /// 分子
            /// </summary>
            public long FNumerator { get; set; }
            /// <summary>
            /// 分母
            /// </summary>
            public long FDenominator { get; set; }
            /// <summary>
            /// 子项单位   (必填项)
            /// </summary>
            public Dictionary<string, string> FUnitID2 { get; set; } = new Dictionary<string, string>() { { "FNUMBER",""} };
            /// <summary>
            /// 变动损耗率%
            /// </summary>
            public long FScrapRate { get; set; }
            /// <summary>
            /// 固定损耗
            /// </summary>
            public long FFixScrapQty { get; set; }
            /// <summary>
            /// 需求日期
            /// </summary>
            public string FNeedDate2 { get; set; }
            /// <summary>
            ///  发料组织   (必填项)
            /// </summary>
            public Dictionary<string, string> FSupplyOrg { get; set; } = new Dictionary<string, string>() { { "FNUMBER",""} };
            /// <summary>
            ///  BOM版本
            /// </summary>
            public Dictionary<string, string> FBomId2 { get; set; } = new Dictionary<string, string>() { { "FNUMBER",""} };
            /// <summary>
            /// 是否关键件
            /// </summary>
            public bool FIsKeyComponent { get; set; } = false;
            /// <summary>
            /// 偏置提前期
            /// </summary>
            public long FOffsetTime { get; set; }
            /// <summary>
            /// 工序
            /// </summary>
            public long FOperID { get; set; }
            /// <summary>
            ///  作业       
            /// </summary>
            public Dictionary<string, string> FProcessID { get; set; } = new Dictionary<string, string>() { { "FNUMBER",""} };
            /// <summary>
            /// 未领数量
            /// </summary>
            public decimal FNoPickedQty { get; set; }
            /// <summary>
            /// 基本单位未领数量
            /// </summary>
            public decimal FBaseNoPickedQty { get; set; }
            /// <summary>
            /// 可用库存
            /// </summary>
            public decimal FInventoryQty { get; set; }
            /// <summary>
            /// 预留类型    (必填项) 
            /// </summary>
            [StringLength(36)]
            public string FReserveType { get; set; } = "1";
            /// <summary>
            /// 基本单位分子
            /// </summary>
            public long FBaseNumerator { get; set; }
            /// <summary>
            /// 基本单位分母
            /// </summary>
            public long FBASEDENOMINATOR { get; set; }
            /// <summary>
            /// 超发控制方式    (必填项) 
            /// </summary>
            [StringLength(36)]
            public string FOverControlMode { get; set; } = "1";
            /// <summary>
            ///  供应组织 
            /// </summary>
            public Dictionary<string, string> FChildSupplyOrgId { get; set; } = new Dictionary<string, string>() { { "FNUMBER",""} };
            /// <summary>
            ///  库存状态    
            /// </summary>
            public Dictionary<string, string> FStockStatusId { get; set; } = new Dictionary<string, string>() {{ "FNUMBER",""} };
            /// <summary>
            /// 货主类型     
            /// </summary>
            [StringLength(36)]
            public string FOwnerTypeId { get; set; } //= "BD_OwnerOrg";
            /// <summary>
            ///  货主       
            /// </summary>
            public Dictionary<string, string> FOwnerID { get; set; } = new Dictionary<string, string>() { { "FNumber",""} };
            /// <summary>
            /// 位置号
            /// </summary>
            public string FPositionNO { get; set; }
            /// <summary>
            ///  子项基本单位       
            /// </summary>
            public Dictionary<string, string> FBaseUnitID1 { get; set; } = new Dictionary<string, string>() {{ "FNumber",""}  };
            /// <summary>
            ///  委外订单类型       
            /// </summary>
            public Dictionary<string, string> FSubReqType1 { get; set; } = new Dictionary<string, string>() { { "FNumber",""} };
            /// <summary>
            /// 委外订单内码  
            /// </summary>
            public long FSubReqId1 { get; set; }
            /// <summary>
            /// 委外订单编号    
            /// </summary>
            [StringLength(36)]
            public string FSubReqBillNO1 { get; set; }
            /// <summary>
            /// 委外订单行内码  
            /// </summary>
            public long FSubReqEntryId1 { get; set; }
            /// <summary>
            /// 委外订单分录行号  
            /// </summary>
            public long FSubReqEntrySeq1 { get; set; }
            /// <summary>
            /// 应发数量
            /// </summary>
            public decimal FMustQty { get; set; }
            /// <summary>
            /// 需求数量
            /// </summary>
            public decimal FNeedQty2 { get; set; }
            /// <summary>
            /// 替代策略
            /// </summary>
            public string FReplacePolicy { get; set; }=String.Empty;
            /// <summary>
            /// 替代方式
            /// </summary>
            public string FReplaceType { get; set; }=String.Empty ;
            /// <summary>
            /// 替代优先级
            /// </summary>
            public int FReplacePriority { get; set; }
            /// <summary>
            /// 替代主料
            /// </summary>
            public int FIsKeyItem { get; set; }
            /// <summary>
            ///  MRP运算
            /// </summary>
            public bool FIsMrpRun { get; set; } = true;
            /// <summary>
            /// 使用比例
            /// </summary>
            public Decimal FUseRate { get; set; } = 100;
            public int FRowExpandType { get; set; } = 16;
        }
    }
}
