public FormulaDTO ToFormulaDTO(DataAccess.Formula item, bool withDetails)
        {
            FormulaDTO result = new FormulaDTO();

            ToFormulaDTO(item, result, withDetails);
            return(result);
        }
 public void ToFormulaDTO(DataAccess.Formula item, FormulaDTO result, bool withDetails)
 {
     result.Name     = item.Name;
     result.ID       = item.ID;
     result.EntityID = item.TableDrivedEntityID ?? 0;
     if (item.LinearFormulaID != null)
     {
         result.FormulaType     = FormulaType.Linear;
         result.LinearFormulaID = item.LinearFormulaID.Value;
     }
     else if (item.CodeFunction_TableDrivedEntityID != null)
     {
         result.FormulaType          = FormulaType.CodeFunctionEntity;
         result.CodeFunctionEntityID = item.CodeFunction_TableDrivedEntityID.Value;
     }
     else if (item.DatabaseFunction_TableDrivedEntityID != null)
     {
         result.FormulaType = FormulaType.DatabaseFunctionEntity;
         result.DatabaseFunctionEntityID = item.DatabaseFunction_TableDrivedEntityID.Value;
     }
     else if (item.CodeFunctionID != null)
     {
         result.FormulaType    = FormulaType.CodeFunction;
         result.CodeFunctionID = item.CodeFunctionID.Value;
     }
     if (item.LinearFormula != null)
     {
         result.Tooltip = item.LinearFormula.FormulaText;
     }
     result.Title = item.Title;
     //result.ValueCustomType = (ValueCustomType)item.ValueCustomType;
     result.ResultDotNetType = GetFormulaDotNetType(item.ResultType);
     result.ResultType       = item.ResultType;
     //////BizFormulaUsage
     //////result.FormulaUsed = item.FormulaUsage.Any();
     if (withDetails)
     {
         foreach (var dbFormulaItem in item.FormulaItems1)
         {
             result.FormulaItems.Add(ToFormualaItemDTO(item.TableDrivedEntityID ?? 0, dbFormulaItem));
         }
     }
 }
        //public FormulaParameterDTO GetFormulaParameter(int formulaParameterID)
        //{
        //    List<FormulaParameterDTO> result = new List<FormulaParameterDTO>();
        //    using (var projectContext = new DataAccess.MyProjectEntities())
        //    {
        //        return ToFormulaParameterDTO(projectContext.FormulaParameter.First(x => x.ID == formulaParameterID));
        //    }
        //}
        //public List<FormulaParameterDTO> GetFormulaParameters(int entityID)
        //{
        //    List<FormulaParameterDTO> result = new List<FormulaParameterDTO>();
        //    using (var projectContext = new DataAccess.MyProjectEntities())
        //    {
        //        var list = projectContext.FormulaParameter.Where(x => x.TableDrivedEntityID == entityID);
        //        foreach (var item in list)
        //            result.Add(ToFormulaParameterDTO(item));
        //        return result;
        //    }
        //}

        //private FormulaParameterDTO ToFormulaParameterDTO(FormulaParameter cItem)
        //{
        //    var result = new FormulaParameterDTO();
        //    result.ID = cItem.ID;
        //    result.FormulaID = cItem.FormulaID;
        //    result.EntityID = cItem.TableDrivedEntityID;
        //    result.Name = cItem.Name;
        //    result.Title = cItem.Title;
        //    result.ResultType = GetFormulaDotNetType(cItem.Formula.ResultType);
        //    return result;
        //}



        //public int UpdateDatabaseFunction(DatabaseFunctionDTO DatabaseFunction)
        //{
        //    using (var projectContext = new DataAccess.MyProjectEntities())
        //    {
        //        var dbDatabaseFunction = projectContext.DatabaseFunction.FirstOrDefault(x => x.ID == DatabaseFunction.ID);
        //        if (dbDatabaseFunction == null)
        //            dbDatabaseFunction = new DataAccess.DatabaseFunction();
        //        dbDatabaseFunction.FunctionName = DatabaseFunction.FunctionName;
        //        dbDatabaseFunction.ID = DatabaseFunction.ID;
        //        if (DatabaseFunction.EntityID != 0)
        //            dbDatabaseFunction.TableDrivedEntityID = DatabaseFunction.EntityID;
        //        dbDatabaseFunction.Title = DatabaseFunction.Title;
        //        dbDatabaseFunction.ReturnType = DatabaseFunction.ReturnType;
        //        dbDatabaseFunction.RelatedSchema = DatabaseFunction.Schema;
        //        while (dbDatabaseFunction.DatabaseFunctionParameter.Any())
        //        {
        //            dbDatabaseFunction.DatabaseFunctionParameter.Remove(dbDatabaseFunction.DatabaseFunctionParameter.First());
        //        }
        //        foreach (var column in DatabaseFunction.DatabaseFunctionParameter)
        //        {
        //            DatabaseFunctionParameter dbColumn = new DataAccess.DatabaseFunctionParameter();
        //            dbColumn.ColumnID = column.ColumnID;
        //            dbColumn.DataType = column.DataType;
        //            dbColumn.ParamName = column.ParameterName;
        //            dbDatabaseFunction.DatabaseFunctionParameter.Add(dbColumn);
        //        }
        //        if (dbDatabaseFunction.ID == 0)
        //            projectContext.DatabaseFunction.Add(dbDatabaseFunction);
        //        projectContext.SaveChanges();
        //        return dbDatabaseFunction.ID;
        //    }
        //}


        //private Enum_ColumnType ConvertParameterResultType(string resultType)
        //{
        //    if (string.IsNullOrEmpty(resultType))
        //        return Enum_ColumnType.None;
        //    else if (resultType == "String")
        //        return Enum_ColumnType.String;
        //    else if (resultType == "Numeric")
        //        return Enum_ColumnType.Numeric;
        //    else if (resultType == "Boolean")
        //        return Enum_ColumnType.Boolean;
        //    else if (resultType == "Date")
        //        return Enum_ColumnType.Date;
        //    return Enum_ColumnType.None;
        //}
        //private string ConvertParameterResultType(Enum_ColumnType resultType)
        //{
        //    return resultType.ToString();
        //}

        public int UpdateFormula(FormulaDTO formula, LinearFormulaDTO linearFormula)
        {
            using (var projectContext = new DataAccess.MyProjectEntities())
            {
                DataAccess.Formula dbFormula = null;
                if (formula.ID == 0)
                {
                    dbFormula = new Formula();
                }
                else
                {
                    dbFormula = projectContext.Formula.FirstOrDefault(x => x.ID == formula.ID);
                }

                dbFormula.Name = formula.Name;
                dbFormula.ID   = formula.ID;
                if (formula.EntityID != 0)
                {
                    dbFormula.TableDrivedEntityID = formula.EntityID;
                }
                else
                {
                    dbFormula.TableDrivedEntityID = null;
                }
                dbFormula.ResultType = formula.ResultType;

                //dbFormula.ValueCustomType = (Int16)Formula.ValueCustomType;
                dbFormula.Title = formula.Title;
                while (dbFormula.FormulaItems1.Any())
                {
                    projectContext.FormulaItems.Remove(dbFormula.FormulaItems1.First());
                }
                foreach (var formulaItem in formula.FormulaItems)
                {
                    var dbFormulaItem = ToFormualaItem(formulaItem, dbFormula);
                    dbFormula.FormulaItems1.Add(dbFormulaItem);
                }

                if (formula.FormulaType == FormulaType.Linear)
                {
                    if (dbFormula.LinearFormula == null)
                    {
                        dbFormula.LinearFormula = new LinearFormula();
                    }
                    dbFormula.LinearFormula.FormulaText = linearFormula.FormulaText;
                    dbFormula.LinearFormula.Version     = linearFormula.Version;
                }
                else
                {
                    if (dbFormula.LinearFormula != null)
                    {
                        projectContext.LinearFormula.Remove(dbFormula.LinearFormula);
                    }
                }
                if (formula.FormulaType == FormulaType.CodeFunctionEntity)
                {
                    dbFormula.CodeFunction_TableDrivedEntityID = formula.CodeFunctionEntityID;
                }
                else
                {
                    dbFormula.CodeFunction_TableDrivedEntityID = null;
                }
                if (formula.FormulaType == FormulaType.CodeFunction)
                {
                    dbFormula.CodeFunctionID = formula.CodeFunctionID;
                }
                else
                {
                    dbFormula.CodeFunctionID = null;
                }
                if (formula.FormulaType == FormulaType.DatabaseFunctionEntity)
                {
                    dbFormula.DatabaseFunction_TableDrivedEntityID = formula.DatabaseFunctionEntityID;
                }
                else
                {
                    dbFormula.DatabaseFunction_TableDrivedEntityID = null;
                }
                if (dbFormula.ID == 0)
                {
                    projectContext.Formula.Add(dbFormula);
                }
                projectContext.SaveChanges();
                return(dbFormula.ID);
            }
        }