U9实体查询工具类

using UFIDA.U9.Base.Currency;
using UFIDA.U9.Base.Doc;
using UFIDA.U9.Base.Organization;
using UFIDA.U9.Base.Profile;
using UFIDA.U9.Base.SOB;
using UFIDA.U9.CBO.FI.BankAccount;
using UFIDA.U9.CBO.FI.SettlementMethod;
using UFIDA.U9.CBO.SCM.Customer;
using UFIDA.U9.CBO.SCM.Item;
using UFIDA.U9.CBO.SCM.ProjectTask;
using UFIDA.U9.CBO.SCM.Warehouse;
using UFIDA.U9.PM.Rcv;
using UFIDA.U9.SM.RMA;
using UFIDA.U9.SM.Ship;
using UFIDA.U9.SM.SO;

namespace UFIDA.U9.SH.PubBP.Common
{
    /// <summary>
    /// U9实体查询工具类
    /// </summary>
    public class FindU9Entity
    {
        /// <summary>
        /// 获取参数设置值
        /// </summary>
        /// <param name="ProfileID">参数表ID</param>
        /// <param name="OrgID">组织</param>
        /// <returns></returns>
        public static ProfileValue GetProfileValue(long ProfileID, long OrgID) => ProfileValue.Finder.Find($"Profile = {ProfileID} and Organization.ID = {OrgID}");

        /// <summary>
        /// 获取生产订单信息
        /// </summary>
        /// <param name="Org">组织ID</param>
        /// <param name="DocNo">生产订单号</param>
        /// <returns></returns>
        public static MO.MO.MO GetMO(long Org, string DocNo) => MO.MO.MO.Finder.Find($"Org.ID = {Org} and DocNo = '{DocNo}'");
        
        /// <summary>
        /// 获取生产订单信息
        /// </summary>
        /// <param name="ID">生产订单ID</param>
        /// <returns></returns>
        public static MO.MO.MO GetMO(long ID) => MO.MO.MO.Finder.FindByID(ID);

        /// <summary>
        /// 获取生产订单信息
        /// </summary>
        /// <param name="Where">自定义条件</param>
        /// <returns></returns>
        public static MO.MO.MO GetMO(string Where) => MO.MO.MO.Finder.Find(Where);

        /// <summary>
        /// 获取项目信息
        /// </summary>
        /// <param name="Org">组织ID</param>
        /// <param name="Code">项目号</param>
        /// <returns></returns>
        public static Project GetProject(long Org, string Code) => Project.Finder.Find($"Org.ID = {Org} and Code = '{Code}'");

        /// <summary>
        /// 获取项目信息
        /// </summary>
        /// <param name="ID">项目ID</param>
        /// <returns></returns>
        public static Project GetProject(long ID) => Project.Finder.FindByID(ID);

        /// <summary>
        /// 获取项目信息
        /// </summary>
        /// <param name="Where">自定义条件</param>
        /// <returns></returns>
        public static Project GetProject(string Where) => Project.Finder.Find(Where);

        /// <summary>
        /// 获取销售订单行信息
        /// </summary>
        /// <param name="ID">销售订单行ID</param>
        /// <returns></returns>
        public static SOLine GetSOLine(long ID) => SOLine.Finder.FindByID(ID);

        /// <summary>
        /// 获取销售订单行信息
        /// </summary>
        /// <param name="Where">自定义条件</param>
        /// <returns></returns>
        public static SOLine GetSOLine(string Where) => SOLine.Finder.Find(Where);

        /// <summary>
        /// 推式生单配置
        /// </summary>
        /// <param name="SrcOrg">来源组织</param>
        /// <param name="DocType">来源单据类型</param>
        /// <param name="SourceEntityKey">来源实体ID</param>
        /// <param name="TargetEntityKey">目标实体ID</param>
        /// <param name="tab">字段序号</param>
        /// <returns></returns>
        public static string GetPushToDocTypeConfig(Organization SrcOrg, long DocType, long SourceEntityKey, long TargetEntityKey, string tab)
        {
            // 生单规则
            var PTTRData = PushToDocTypeRule.Finder.Find($"PushToDocTypeConfig.SourceEntity = {SourceEntityKey} and PushToDocTypeConfig.TargetEntity = {TargetEntityKey} and TargetOrg = {SrcOrg.ID}");
            // 生单规则条件
            var PTTRLData = PushToDocTypeRuleLine.Finder.Find($"PushToDocTypeRule = {PTTRData.ID} and SourceOrg = {SrcOrg.ID} and EntityFieldValue{tab} = {DocType}");
            return PTTRLData?.TargetDocTypeCode;
        }

        /// <summary>
        /// 获取出货单据类型信息
        /// </summary>
        /// <param name="Org">组织ID</param>
        /// <param name="Code">编码</param>
        /// <returns></returns>
        public static ShipDocType GetShipDocType(long Org, string Code) => ShipDocType.Finder.Find($"Org.ID = {Org} and Code = '{Code}'");

        /// <summary>
        /// 获取出货单据类型信息
        /// </summary>
        /// <param name="ID">ID</param>
        /// <returns></returns>
        public static ShipDocType GetShipDocType(long ID) => ShipDocType.Finder.FindByID(ID);

        /// <summary>
        /// 获取出货单据类型信息
        /// </summary>
        /// <param name="Where">自定义条件</param>
        /// <returns></returns>
        public static ShipDocType GetShipDocType(string Where) => ShipDocType.Finder.Find(Where);

        /// <summary>
        /// 获取料品信息
        /// </summary>
        /// <param name="Org">组织ID</param>
        /// <param name="Code">编码</param>
        /// <returns></returns>
        public static ItemMaster GetItemMaster(long Org, string Code) => ItemMaster.Finder.Find($"Org.ID = {Org} and Code = '{Code}'");

        /// <summary>
        /// 获取料品信息
        /// </summary>
        /// <param name="ID">ID</param>
        /// <returns></returns>
        public static ItemMaster GetItemMaster(long ID) => ItemMaster.Finder.FindByID(ID);

        /// <summary>
        /// 获取料品信息
        /// </summary>
        /// <param name="Where">自定义条件</param>
        /// <returns></returns>
        public static ItemMaster GetItemMaster(string Where) => ItemMaster.Finder.Find(Where);

        /// <summary>
        /// 获取存储地点信息
        /// </summary>
        /// <param name="Org">组织ID</param>
        /// <param name="Code">编码</param>
        /// <returns></returns>
        public static Warehouse GetWarehouse(long Org, string Code) => Warehouse.Finder.Find($"Org.ID = {Org} and Code = '{Code}'");

        /// <summary>
        /// 获取存储地点信息
        /// </summary>
        /// <param name="ID">ID</param>
        /// <returns></returns>
        public static Warehouse GetWarehouse(long ID) => Warehouse.Finder.FindByID(ID);

        /// <summary>
        /// 获取存储地点信息
        /// </summary>
        /// <param name="Where">自定义条件</param>
        /// <returns></returns>
        public static Warehouse GetWarehouse(string Where) => Warehouse.Finder.Find(Where);

        /// <summary>
        /// 获取客户信息
        /// </summary>
        /// <param name="Org">组织ID</param>
        /// <param name="Code">编码</param>
        /// <returns></returns>
        public static Customer GetCustomer(long Org, string Code) => Customer.Finder.Find($"Org.ID = {Org} and Code = '{Code}'");

        /// <summary>
        /// 获取客户信息
        /// </summary>
        /// <param name="ID">ID</param>
        /// <returns></returns>
        public static Customer GetCustomer(long ID) => Customer.Finder.FindByID(ID);

        /// <summary>
        /// 获取客户信息
        /// </summary>
        /// <param name="Where">自定义条件</param>
        /// <returns></returns>
        public static Customer GetCustomer(string Where) => Customer.Finder.Find(Where);

        /// <summary>
        /// 获取退回处理单行信息
        /// </summary>
        /// <param name="ID">ID</param>
        /// <returns></returns>
        public static RMALine GetRMALine(long ID) => RMALine.Finder.FindByID(ID);

        /// <summary>
        /// 获取退回处理单行信息
        /// </summary>
        /// <param name="Where">自定义条件</param>
        /// <returns></returns>
        public static RMALine GetRMALine(string Where) => RMALine.Finder.Find(Where);

        /// <summary>
        /// 获取收货单信息
        /// </summary>
        /// <param name="ID">ID</param>
        /// <returns></returns>
        public static Receivement GetRcv(long ID) => Receivement.Finder.FindByID(ID);

        /// <summary>
        /// 获取收货单信息
        /// </summary>
        /// <param name="Where">自定义条件</param>
        /// <returns></returns>
        public static Receivement GetRcv(string Where) => Receivement.Finder.Find(Where);

        /// <summary>
        /// 切换登入组织
        /// </summary>
        /// <param name="OrgCode">目标组织编码</param>
        public static void SetLoginOrg(string OrgCode)
        {
            Organization orgInfo = Organization.FindByCode(OrgCode);
            PlatformContext context = PlatformContext.Current;
            new CBO.Pub.Controller.ContextDTO
            {
                UserCode = context.UserCode,
                EntCode = context.EnterpriseID,
                CultureName = context.Culture,
                OrgCode = orgInfo.Code,
                OrgID = orgInfo.ID
            }.WriteToContext();
        }

        /// <summary>
        /// 值集值查询
        /// </summary>
        /// <param name="VSDCode">值集编码</param>
        /// <param name="DVCode">值集值编码</param>
        /// <returns></returns>
        public static DefineValue GetValueSetDef(string VSDCode, string DVCode) => DefineValue.Finder.Find($"ValueSetDef.Code = '{VSDCode}' and Code = '{DVCode}'");

    }
}