private void WriteUpdateColumn(vwProjectionColumn column)
        {
            if (column.ProjectionColumn_Name != pairingColumn)
            {
                string val = $",[{column.DbColumn_Name}] = json.[{column.ProjectionColumn_Name}]";
                switch (column.DbColumnType_Id)
                {
                case (int)DbColumnTypeEnum.Bit:
                case (int)DbColumnTypeEnum.BitIcon:
                {
                    if (!column.Column_IsNullable)
                    {
                        val = $",[{column.DbColumn_Name}] = isnull(json.[{column.ProjectionColumn_Name}], 0)";
                    }
                }
                break;

                default:
                    break;
                }
                if (!string.IsNullOrEmpty(column.Column_UpdateDefaultValue))
                {
                    val = $",[{column.DbColumn_Name}] = {column.Column_UpdateDefaultValue}";
                }

                Write(val);
                WriteLine("");
            }
        }
Esempio n. 2
0
        private void WriteColumnBracketedString(vwProjectionColumn column)
        {
            string val = $",[{vwProjection.Projection_Name}].[{column.DbColumn_Name}] as [{column.ProjectionColumn_Name}]";

            if (column.DbColumnType_Id == (int)DbColumnTypeEnum.SystemChart || column.DbColumnType_Id == (int)DbColumnTypeEnum.UserChart)
            {
                val = $",null as [{column.ProjectionColumn_Name}]";
            }
            if (column.DbColumnType_Id == (int)DbColumnTypeEnum.Signature)
            {
                val = $",(SELECT TOP 1 [UniqueGuid] FROM [crm].[Signature] sig WHERE sig.[Deleted] = 0 AND sig.Id = [{vwProjection.Projection_Name}].[{column.DbColumn_Name}]) as [{column.ProjectionColumn_Name}]";
            }
            if (column.DbColumnType_Id == (int)DbColumnTypeEnum.Geography)
            {
                val = $",case when [{vwProjection.Projection_Name}].[{column.DbColumn_Name}] is not null then [{vwProjection.Projection_Name}].[{column.DbColumn_Name}].Lat else null end as [{column.ProjectionColumn_Name}_Lat]";
                val = val + Environment.NewLine + $",case when [{vwProjection.Projection_Name}].[{column.DbColumn_Name}] is not null then [{vwProjection.Projection_Name}].[{column.DbColumn_Name}].Long else null end as [{column.ProjectionColumn_Name}_Long]";
            }
            if (column.DbColumnType_Id == (int)DbColumnTypeEnum.MultiEnumeration)
            {
                val = $",JSON_QUERY([{vwProjection.Projection_Name}].[{column.DbColumn_Name}]) as [{column.ProjectionColumn_Name}]";
            }
            if (!string.IsNullOrEmpty(column.Column_ComputedExpression))
            {
                val = $",{column.Column_ComputedExpression.Replace("##EntityName##", vwProjection.Projection_Name)} as [{column.ProjectionColumn_Name}]";
            }
            if (column.DbColumnType_Id == (int)DbColumnTypeEnum.Password)
            {
                val = $",null as [{column.ProjectionColumn_Name}]";
            }
            Write(val);
        }
 private void WriteCaptionStringForColumn(vwProjectionColumn column)
 {
     if (column != null)
     {
         List <string> renderCaptionColumnNameList = new List <string>();
         Write(GetReferenceCaption(column.DbColumnType_Id, column.ProjectionReference_Id, column.ProjectionColumn_Name, null, vwProjection.Projection_Name, column.DbColumn_Name, column.Column_ComputedExpression, out renderCaptionColumnNameList));
     }
 }
Esempio n. 4
0
        private void WriteInsertColumn(vwProjectionColumn column)
        {
            string val = $",[{column.DbColumn_Name}]";

            if (!string.IsNullOrEmpty(val))
            {
                WriteLine(val);
            }
        }
Esempio n. 5
0
        private void WriteUpdateColumn(vwProjectionColumn column)
        {
            string val = $",[{column.DbColumn_Name}] = json.[{column.ProjectionColumn_Name}]";

            if (!string.IsNullOrEmpty(column.Column_UpdateDefaultValue))
            {
                val = $",[{column.DbColumn_Name}] = {column.Column_UpdateDefaultValue}";
            }
            Write(val);
            WriteLine("");
        }
        protected void WriteColumnForProject1Select(vwProjectionColumn column)
        {
            string val = string.Empty;

            switch (column.DbColumnType_Id)
            {
            case (int)DbColumnTypeEnum.Enumeration:
                if (this.foreignTables.ContainsKey(column.ProjectionColumn_Name))
                {
                    val = $",[{this.foreignTables[column.ProjectionColumn_Name]}].[Description_{userInfo.UserLanguage}] as [{column.ProjectionColumn_Name}]";
                    val = val + Environment.NewLine + $",[{this.foreignTables[column.ProjectionColumn_Name]}].[Description] as [{column.ProjectionColumn_Name}_Description]";
                }
                break;

            case (int)DbColumnTypeEnum.Entity:
            {
                val = $",[{this.foreignTables[column.ProjectionColumn_Name]}].[CaptionDisplay] as [{column.ProjectionColumn_Name}]";
            }
            break;

            case (int)DbColumnTypeEnum.EntityEnumeration:
            {
                val = $",[{this.foreignTables[column.ProjectionColumn_Name]}].[CaptionDisplay] as [{column.ProjectionColumn_Name}]";
            }
            break;

            case (int)DbColumnTypeEnum.MultiEnumeration:
            {
                val = $",IIF([Project1].[{column.DbColumn_Name}] IS NOT NULL, STUFF((SELECT ',' + en1.[Description_{userInfo.UserLanguage}] FROM (SELECT value as [Value] FROM OPENJSON([Project1].[{column.DbColumn_Name}])) doe INNER JOIN[crm].[Enumeration] en1 ON en1.[Deleted] = 0 AND en1.[Id] = doe.[Value] FOR XML PATH('')),1,1,''), '') as [{column.ProjectionColumn_Name}]";
            }
            break;

            case (int)DbColumnTypeEnum.Password:
            {
                val = $",null as [{column.ProjectionColumn_Name}]";
            }
            break;

            default:
                val = $",[Project1].[{column.DbColumn_Name}] as [{column.ProjectionColumn_Name}]";
                if (!string.IsNullOrEmpty(column.Column_ComputedExpression))
                {
                    val = $",{column.Column_ComputedExpression.Replace("##EntityName##", "Project1").Replace("##ProjectionPrimaryColumnName##", vwProjection.DbPrimaryColumn_Name).Replace("##EntityDbObjectName##", vwProjection.DbObject_Name)} as [{column.ProjectionColumn_Name}]";
                }
                break;
            }

            //if (column.Column_IsPrimaryKey && column.DbColumn_IsPrimaryKey.Value && column.DbColumn_Name.ToUpper() != "ID")
            //{
            //    val = val + Environment.NewLine + $",[Project1].[{column.DbColumn_Name}] as [Id]{Environment.NewLine},[Project1].[CaptionSort] as [CaptionSort]";
            //}

            Write(val);
        }
Esempio n. 7
0
        private void WriteSelectColumn(vwProjectionColumn column)
        {
            string val = $",json{childProjectionName}.[" + column.ProjectionColumn_Name + "]";

            if (!string.IsNullOrEmpty(column.Column_InsertDefaultValue))
            {
                val = $",{column.Column_InsertDefaultValue}";
            }
            Write(val);
            WriteLine("");
        }
        private void WriteJsonColumn(vwProjectionColumn column)
        {
            string val = $",[{column.ProjectionColumn_Name}] {column.Column_DbColumnTypeNative}";

            if (column.DbColumnType_Id == (int)DbColumnTypeEnum.MultiEnumeration)
            {
                val = string.Empty;
            }
            if (!string.IsNullOrEmpty(val))
            {
                WriteLine(val);
            }
        }
Esempio n. 9
0
        private void WriteNewSequenceNumber()
        {
            if (vwProjection.NumberingSequence_NumericDbColumnId.HasValue)
            {
                vwProjectionColumn dateProjectionColumn   = this.columns.Where(c => vwProjection.NumberingSequence_DateDbColumnId.HasValue && c.DbColumn_Id == vwProjection.NumberingSequence_DateDbColumnId.Value).FirstOrDefault();
                vwProjectionColumn issuerProjectionColumn = this.columns.Where(c => vwProjection.NumberingSequence_IssuerDbColumnId.HasValue && c.DbColumn_Id == vwProjection.NumberingSequence_IssuerDbColumnId.Value).FirstOrDefault();
                vwProjectionColumn typeProjectionColumn   = this.columns.Where(c => vwProjection.NumberingSequence_TypeDbColumnId.HasValue && c.DbColumn_Id == vwProjection.NumberingSequence_TypeDbColumnId.Value).FirstOrDefault();

                WriteLine("DECLARE	@newSequenceNumber varchar(100)");
                WriteLine("DECLARE	@recordIssuerAccountId int");
                WriteLine("DECLARE	@recordDate datetime");
                WriteLine("DECLARE	@recordTypeId int");

                WriteLine("SELECT");
                if (dateProjectionColumn != null && !string.IsNullOrEmpty(dateProjectionColumn.ProjectionColumn_Name))
                {
                    WriteLine($" @recordDate = isnull(json.[{dateProjectionColumn.ProjectionColumn_Name}], getdate())");
                }
                else
                {
                    WriteLine($" @recordDate = getdate()");
                }
                if (issuerProjectionColumn != null && !string.IsNullOrEmpty(issuerProjectionColumn.ProjectionColumn_Name))
                {
                    WriteLine($" ,@recordIssuerAccountId = json.[{issuerProjectionColumn.ProjectionColumn_Name}]");
                }
                if (typeProjectionColumn != null && !string.IsNullOrEmpty(typeProjectionColumn.ProjectionColumn_Name))
                {
                    WriteLine($" ,@recordTypeId = json.[{typeProjectionColumn.ProjectionColumn_Name}]");
                }
                WriteLine("FROM OPENJSON(@json) WITH ( [Deleted] [int]");
                if (dateProjectionColumn != null && !string.IsNullOrEmpty(dateProjectionColumn.ProjectionColumn_Name))
                {
                    WriteJsonColumn(dateProjectionColumn);
                }
                if (issuerProjectionColumn != null && !string.IsNullOrEmpty(issuerProjectionColumn.ProjectionColumn_Name))
                {
                    WriteJsonColumn(issuerProjectionColumn);
                }
                if (typeProjectionColumn != null && !string.IsNullOrEmpty(typeProjectionColumn.ProjectionColumn_Name))
                {
                    WriteJsonColumn(typeProjectionColumn);
                }
                WriteLine(") AS json");

                WriteLine($"EXEC [dbo].[sp_api3_GetNewProjectionNumber] {userInfo.UserId}, @recordIssuerAccountId, @recordDate, {vwProjection.DbObject_Id}, @recordTypeId, @newSequenceNumber OUTPUT");
            }
        }
Esempio n. 10
0
        private void WriteUpdateColumn(vwProjectionColumn column)
        {
            string val = $",[{column.DbColumn_Name}] = json.[{column.ProjectionColumn_Name}]";

            if (!string.IsNullOrEmpty(column.Column_UpdateDefaultValue))
            {
                val = $",[{column.DbColumn_Name}] = {column.Column_UpdateDefaultValue}";
            }
            else
            {
                if (column.DbColumnType_Id == (int)DbColumnTypeEnum.Geography)
                {
                    val = $",[{column.DbColumn_Name}] = case when json.{column.ProjectionColumn_Name}_Lat <> 0 and json.{column.ProjectionColumn_Name}_Long <> 0 then geography::Point(json.{column.ProjectionColumn_Name}_Lat, json.{column.ProjectionColumn_Name}_Long, 4326) else null end";
                }
                if (column.DbColumnType_Id == (int)DbColumnTypeEnum.Signature)
                {
                    val = $",[{column.DbColumn_Name}] = (select top 1 si.[Id] from [crm].[Signature] si where si.deleted = 0 and si.UniqueGuid = json.[{column.ProjectionColumn_Name}])";
                }
                if (column.DbColumnType_Id == (int)DbColumnTypeEnum.MultiEnumeration)
                {
                    val = $",[{column.DbColumn_Name}] = JSON_QUERY(@json, '$.{column.ProjectionColumn_Name}')";
                }
                if (column.DbColumnType_Id == (int)DbColumnTypeEnum.String ||
                    column.DbColumnType_Id == (int)DbColumnTypeEnum.Text ||
                    column.DbColumnType_Id == (int)DbColumnTypeEnum.WidgetHtml ||
                    column.DbColumnType_Id == (int)DbColumnTypeEnum.TextSimple ||
                    column.DbColumnType_Id == (int)DbColumnTypeEnum.IconSelect ||
                    column.DbColumnType_Id == (int)DbColumnTypeEnum.JSON ||
                    column.DbColumnType_Id == (int)DbColumnTypeEnum.Color ||
                    column.DbColumnType_Id == (int)DbColumnTypeEnum.EmailAddress ||
                    column.DbColumnType_Id == (int)DbColumnTypeEnum.WebUrl ||
                    column.DbColumnType_Id == (int)DbColumnTypeEnum.PhoneNumber
                    )
                {
                    val = $",[{column.DbColumn_Name}] = iif(len(isnull(json.[{column.ProjectionColumn_Name}],'')) > 0, json.[{column.ProjectionColumn_Name}], null)";
                }
                if (column.DbColumnType_Id == (int)DbColumnTypeEnum.Password)
                {
                    val = $",[{column.DbColumn_Name}] = iif(len(isnull(json.[{column.ProjectionColumn_Name}],'')) > 0, json.[{column.ProjectionColumn_Name}], [{vwProjection.DbObject_Schema}].[{vwProjection.DbObject_Name}].[{column.DbColumn_Name}])";
                }
                if (!string.IsNullOrEmpty(val))
                {
                    WriteLine(val);
                }
            }
        }
        protected void WriteColumnForEntity1Select(vwProjectionColumn column)
        {
            string val = $",[Entity1].[{column.ProjectionColumn_Name}] as [{column.ProjectionColumn_Name}]";

            switch (column.DbColumnType_Id)
            {
            case (int)DbColumnTypeEnum.Enumeration:
                val = val + Environment.NewLine + $",[Entity1].[{column.ProjectionColumn_Name}_Description] as [{column.ProjectionColumn_Name}_Description]";
                break;
            }

            //if (column.Column_IsPrimaryKey && column.DbColumn_IsPrimaryKey.Value && column.DbColumn_Name.ToUpper() != "ID")
            //{
            //    val = val + Environment.NewLine + $",[Entity1].[{column.DbColumn_Name}] as [Id]";
            //}

            Write(val);
        }
        private void WriteSelectColumn(vwProjectionColumn column)
        {
            if (vwProjection.NumberingSequence_NumericDbColumnId.HasValue && column.DbColumn_Id == vwProjection.NumberingSequence_NumericDbColumnId.Value)
            {
                WriteLine(",@newSequenceNumber");
            }
            else
            {
                switch (column.DbColumnType_Id)
                {
                case (int)DbColumnTypeEnum.Bit:
                case (int)DbColumnTypeEnum.BitIcon:
                {
                    if (!column.Column_IsNullable)
                    {
                        WriteLine($",isnull(json.[{column.ProjectionColumn_Name}], 0)");
                    }
                    else
                    {
                        WriteLine($",json.[{column.ProjectionColumn_Name}]");
                    }
                }
                break;

                case (int)DbColumnTypeEnum.MultiEnumeration:
                {
                    WriteLine($",JSON_QUERY(@json, '$.{column.ProjectionColumn_Name}')");
                }
                break;

                default:
                    if (!string.IsNullOrEmpty(column.Column_InsertDefaultValue))
                    {
                        WriteLine($",{column.Column_InsertDefaultValue}");
                    }
                    else
                    {
                        WriteLine($",json.[{column.ProjectionColumn_Name}]");
                    }
                    break;
                }
            }
        }
Esempio n. 13
0
        private void WriteJsonColumn(vwProjectionColumn column)
        {
            string val = $",[{column.ProjectionColumn_Name}] {column.Column_DbColumnTypeNative}";

            if (column.DbColumnType_Id == (int)DbColumnTypeEnum.Geography)
            {
                val = $",[{column.ProjectionColumn_Name}_Lat] float, [{column.ProjectionColumn_Name}_Long] float";
            }
            if (column.DbColumnType_Id == (int)DbColumnTypeEnum.Signature)
            {
                val = $",[{column.ProjectionColumn_Name}] [varchar](50)";
            }
            if (column.DbColumnType_Id == (int)DbColumnTypeEnum.MultiEnumeration)
            {
                val = string.Empty;
            }
            if (!string.IsNullOrEmpty(val))
            {
                WriteLine(val);
            }
        }
        private void WriteColumnBracketedString(vwProjectionColumn column)
        {
            string val = $",[{this.relation.ProjectionRelation_ChildProjectionName}].[{column.DbColumn_Name}] as [{column.ProjectionColumn_Name}]";

            if (column.Column_IsPrimaryKey && column.DbColumn_Name.ToUpper() != "ID")
            {
                val = val + Environment.NewLine + $",[{column.DbColumn_Name}] as [Id]";
            }
            if (column.DbColumnType_Id == (int)DbColumnTypeEnum.MultiEnumeration)
            {
                val = $",JSON_QUERY([{this.relation.ProjectionRelation_ChildProjectionName}].[{column.DbColumn_Name}]) as [{column.ProjectionColumn_Name}]";
            }
            if (!string.IsNullOrEmpty(column.Column_ComputedExpression))
            {
                val = $",{column.Column_ComputedExpression.Replace("##EntityName##", vwProjection.Projection_Name)} as [{column.ProjectionColumn_Name}]";
            }
            if (column.DbColumnType_Id == (int)DbColumnTypeEnum.Password)
            {
                val = $",null as [{column.ProjectionColumn_Name}]";
            }
            Write(val);
        }
        private void WriteInsertColumn(vwProjectionColumn column)
        {
            string val = $",[{column.DbColumn_Name}]";

            WriteLine(val);
        }
Esempio n. 16
0
 private void WriteJsonColumn(vwProjectionColumn column)
 {
     Write($",[{column.ProjectionColumn_Name}] {column.Column_DbColumnTypeNative}");
     WriteLine("");
 }
Esempio n. 17
0
        public static JObject ToJsonObject(this vwProjectionColumn column)
        {
            dynamic json = new JObject();
            string  type = "string";

            switch (column.DbColumnType_Id)
            {
            case (int)DbColumnTypeEnum.Bit:
            case (int)DbColumnTypeEnum.BitIcon:
                type = "boolean";
                break;

            case (int)DbColumnTypeEnum.Int:
            case (int)DbColumnTypeEnum.Entity:
            case (int)DbColumnTypeEnum.EntityEnumeration:
            case (int)DbColumnTypeEnum.Enumeration:
            case (int)DbColumnTypeEnum.Signature:
            case (int)DbColumnTypeEnum.BigInt:
                type = "integer";
                break;

            case (int)DbColumnTypeEnum.Float:
            case (int)DbColumnTypeEnum.Money:
                type = "number";
                break;

            case (int)DbColumnTypeEnum.String:
            case (int)DbColumnTypeEnum.Text:
            case (int)DbColumnTypeEnum.TextSimple:
            case (int)DbColumnTypeEnum.WidgetHtml:
            case (int)DbColumnTypeEnum.IconSelect:
            case (int)DbColumnTypeEnum.Guid:
            case (int)DbColumnTypeEnum.XML:
            case (int)DbColumnTypeEnum.EmailAddress:
            case (int)DbColumnTypeEnum.WebUrl:
            case (int)DbColumnTypeEnum.PhoneNumber:
                type = "string";
                break;

            case (int)DbColumnTypeEnum.Date:
                type        = "string";
                json.format = "date";
                break;

            case (int)DbColumnTypeEnum.DateTime:
            case (int)DbColumnTypeEnum.DateCheckBox:
                type        = "string";
                json.format = "date-time";
                break;

            case (int)DbColumnTypeEnum.Time:
                type        = "string";
                json.format = "time";
                break;

            case (int)DbColumnTypeEnum.MultiEnumeration:
                type = "array";
                break;

            case (int)DbColumnTypeEnum.Geography:
                type = "number";
                break;

            case (int)DbColumnTypeEnum.MultiStateBox:
            case (int)DbColumnTypeEnum.JSON:
                break;

            case (int)DbColumnTypeEnum.SystemChart:
            case (int)DbColumnTypeEnum.UserChart:
            case (int)DbColumnTypeEnum.Varbinary:
            case (int)DbColumnTypeEnum.Image:
                return(null);

            default:
                type = "string";
                break;
            }
            JArray types = new JArray()
            {
                type
            };

            if (column.Column_IsNullable)
            {
                types.Add("null");
            }
            json.type = types;
            if (column.Column_StringMaxLength.HasValue && column.Column_StringMaxLength.Value > 0)
            {
                json.maxLength = column.Column_StringMaxLength.Value;
            }
            if (!string.IsNullOrEmpty(column.Column_LocalizationKey))
            {
                json.title = column.Column_LocalizationKey;
            }
            return(json);
        }
        protected void WriteLeftOuterJoin(WriteLeftOuterJoinType type)
        {
            foreach (KeyValuePair <string, string> pair in this.foreignTables)
            {
                string             val    = string.Empty;
                vwProjectionColumn column = null;
                if (type == WriteLeftOuterJoinType.ForData)
                {
                    column = columns.Where(c => c.ProjectionColumn_Name == pair.Key &&
                                           (
                                               columnsVisible != null && columnsVisible.Contains(c.ProjectionColumn_Name)
                                               ||
                                               !string.IsNullOrEmpty(sortOrderColumnName) && c.ProjectionColumn_Name == sortOrderColumnName
                                               //||
                                               //columnsInFilter.Contains(c.ProjectionColumn_Name)
                                           )
                                           ).FirstOrDefault();
                }
                if (column != null)
                {
                    switch (column.DbColumnType_Id)
                    {
                    case (int)DbColumnTypeEnum.Enumeration:
                        if (this.foreignTables.ContainsKey(column.ProjectionColumn_Name))
                        {
                            val = $"LEFT OUTER JOIN [crm].[Enumeration] [{pair.Value}] on [{pair.Value}].[Id] = [Project1].[{column.ProjectionColumn_Name}]";
                        }
                        break;

                    case (int)DbColumnTypeEnum.Entity:
                    {
                        if (column.ProjectionReference_Id.HasValue)
                        {
                            vwProjection fk = settings.GetVwProjectionList(userInfo.ProfileId).FirstOrDefault(x => x.Projection_Id == column.ProjectionReference_Id.Value);
                            if (fk != null)
                            {
                                val = $"LEFT OUTER JOIN [{fk.DbObject_Schema}].[{fk.DbObject_Name}] [{pair.Value}] on [{pair.Value}].[{fk.DbPrimaryColumn_Name}] = [Project1].[{column.ProjectionColumn_Name}]";
                            }
                        }
                    }
                    break;

                    case (int)DbColumnTypeEnum.EntityEnumeration:
                    {
                        if (column.ProjectionReference_Id.HasValue)
                        {
                            vwProjection fk = settings.GetVwProjectionList(userInfo.ProfileId).FirstOrDefault(x => x.Projection_Id == column.ProjectionReference_Id.Value);
                            if (fk != null)
                            {
                                val = $"LEFT OUTER JOIN [{fk.DbObject_Schema}].[{fk.DbObject_Name}] [{pair.Value}] on [{pair.Value}].[{fk.DbPrimaryColumn_Name}] = [Project1].[{column.ProjectionColumn_Name}]";
                            }
                        }
                    }
                    break;

                    default:
                        val = $"[Project1].[{column.DbColumn_Name}] as [{column.DbColumn_Name}]";
                        break;
                    }
                }

                if (!string.IsNullOrEmpty(val))
                {
                    WriteLine(val);
                }
            }
        }
Esempio n. 19
0
        private void WriteSelectColumn(vwProjectionColumn column)
        {
            if (vwProjection.NumberingSequence_NumericDbColumnId.HasValue && column.DbColumn_Id == vwProjection.NumberingSequence_NumericDbColumnId.Value)
            {
                WriteLine(",@newSequenceNumber");
            }
            else if (!string.IsNullOrEmpty(column.Column_InsertDefaultValue))
            {
                WriteLine($",{column.Column_InsertDefaultValue}");
            }
            else
            {
                switch (column.DbColumnType_Id)
                {
                case (int)DbColumnTypeEnum.Bit:
                case (int)DbColumnTypeEnum.BitIcon:
                {
                    if (!column.Column_IsNullable)
                    {
                        WriteLine($",isnull(json.[{column.ProjectionColumn_Name}], 0)");
                    }
                    else
                    {
                        WriteLine($",json.[{column.ProjectionColumn_Name}]");
                    }
                }
                break;

                case (int)DbColumnTypeEnum.Signature:
                    WriteLine($",(select top 1 si.[Id] from [crm].[Signature] si where si.deleted = 0 and si.UniqueGuid = json.[{column.ProjectionColumn_Name}])");
                    break;

                case (int)DbColumnTypeEnum.Geography:
                    WriteLine($",case when json.{column.ProjectionColumn_Name}_Lat <> 0 and json.{column.ProjectionColumn_Name}_Long <> 0 then geography::Point(json.{column.ProjectionColumn_Name}_Lat, json.{column.ProjectionColumn_Name}_Long, 4326) else null end");
                    break;

                case (int)DbColumnTypeEnum.Password:
                    WriteLine($",iif(len(isnull(json.[{column.ProjectionColumn_Name}],'')) > 0, json.[{column.ProjectionColumn_Name}], convert(varchar(40),newid()))");
                    break;

                case (int)DbColumnTypeEnum.MultiEnumeration:
                {
                    WriteLine($",JSON_QUERY(@json, '$.{column.ProjectionColumn_Name}')");
                }
                break;

                case (int)DbColumnTypeEnum.String:
                case (int)DbColumnTypeEnum.Text:
                case (int)DbColumnTypeEnum.WidgetHtml:
                case (int)DbColumnTypeEnum.TextSimple:
                case (int)DbColumnTypeEnum.IconSelect:
                case (int)DbColumnTypeEnum.JSON:
                case (int)DbColumnTypeEnum.Color:
                case (int)DbColumnTypeEnum.EmailAddress:
                case (int)DbColumnTypeEnum.WebUrl:
                case (int)DbColumnTypeEnum.PhoneNumber:
                    WriteLine($",iif(len(isnull(json.[{column.ProjectionColumn_Name}],'')) > 0, json.[{column.ProjectionColumn_Name}], null)");
                    break;

                default:
                    WriteLine($",json.[{column.ProjectionColumn_Name}]");
                    break;
                }
            }
        }
 private void WriteUpdateColumn(vwProjectionColumn column)
 {
     Write($",[{column.DbColumn_Name}] = json.[{column.DbColumn_Name}]");
     WriteLine("");
 }
        protected void WriteFilter()
        {
            string val = string.Empty;

            JToken objects = JToken.Parse(this.filterString);

            foreach (JToken elem in objects)
            {
                val = string.Empty;
                if (elem.Type == JTokenType.Property)
                {
                    JProperty prop = ((Newtonsoft.Json.Linq.JProperty)elem);
                    if (prop != null && !string.IsNullOrEmpty(prop.Name) && prop.Value != null && !string.IsNullOrEmpty(prop.Value.ToString()))
                    {
                        if (prop.Name == "EmailParentProjectionName" &&
                            objects["EmailParentRecordId"] != null && int.Parse(objects["EmailParentRecordId"].ToString()) > 0)
                        {
                            string       parentProjectionName = prop.Value.ToString();
                            int          parentRecordId       = int.Parse(objects["EmailParentRecordId"].ToString());
                            vwProjection vwProjectionParent   = settings.GetVwProjectionList(userInfo.ProfileId).First(x => x.Projection_Name == parentProjectionName);
                            string       directoryEmailFilter = string.Empty;
                            if (vwProjectionParent.DbObject_Name == "Directory")
                            {
                                directoryEmailFilter = $" or ([Project1].[{this.vwProjection.DbPrimaryColumn_Name}] in (SELECT ed1.[Email_FK] FROM [crm].[Email_Directory] ed1 WHERE ed1.[Deleted] = 0 and ed1.[Directory_FK] = {parentRecordId}))";
                            }
                            val = $"and (([Project1].[{this.vwProjection.DbPrimaryColumn_Name}] in (SELECT doe1.[Email_FK] FROM [crm].[DbObjectEmail] doe1 WHERE doe1.[Deleted] = 0 and doe1.[DbObject_FK] = {vwProjectionParent.DbObject_Id} and doe1.[RecordId] = {parentRecordId})){directoryEmailFilter})";
                        }
                        else if (prop.Name == "EntityCategories" || prop.Name == "EntityCategories_FK")
                        {
                            string categoriesVals = string.Join(", ", prop.Value.ToArray().Select(t => t.ToString()));
                            if (!string.IsNullOrEmpty(categoriesVals))
                            {
                                val = $"and [Project1].[{this.vwProjection.DbPrimaryColumn_Name}] in (SELECT ec.[Entity_FK] FROM[crm].[Entity_Category] ec WHERE ec.[Deleted] = 0 and ec.[Type] = {this.entityType} and ec.[Category_FK] in ({categoriesVals}))";
                            }
                        }
                        else if (prop.Name.StartsWith("Role__"))
                        {
                            int?     roleId = null;
                            JToken[] parts  = prop.Value.ToArray();
                            if (parts != null && parts.Length > 0)
                            {
                                roleId = parts.First().Value <int?>("RoleId");
                                if (roleId.HasValue && roleId.Value > 0)
                                {
                                    string userIds = string.Join(", ", parts.Select(t => t.Value <string>("UserId")));
                                    val = $@"and [Project1].[{this.vwProjection.DbPrimaryColumn_Name}] in (
					                            SELECT part1.[RecordId]
					                            FROM [crm].[Role] role1
					                            INNER JOIN [crm].[DbObjectRole] orole1 on orole1.[Deleted] = 0 and orole1.[DbObject_FK] = {this.vwProjection.DbObject_Id} and orole1.[Role_FK] = role1.[Id]
					                            INNER JOIN [crm].[Participant] part1 on part1.[Deleted] = 0 and part1.[DbObjectRole_FK] = orole1.[Id] and part1.[User_FK] in ({userIds})
					                            WHERE role1.[Deleted] = 0 and role1.[Id] = {roleId.Value}
				                            )"                ;
                                }
                            }
                        }
                        else
                        {
                            string             propName = prop.Name.Replace("_From", "").Replace("_To", "");
                            vwProjectionColumn column   = columnsForFilter.Where(c => c.ProjectionColumn_Name == propName).FirstOrDefault();
                            if (column != null)
                            {
                                if (string.IsNullOrEmpty(column.Column_Filter))
                                {
                                    switch (column.DbColumnType_Id)
                                    {
                                    case (int)DbColumnTypeEnum.Bit:
                                    case (int)DbColumnTypeEnum.BitIcon:
                                    {
                                        val = $"and [Project1].[{column.DbColumn_Name}] = {((new string[] { "1", "true", "yes", "ok" }).Contains(prop.Value.ToString().ToLower()) ? " 1 " : " 0 ")}";
                                    }
                                    break;

                                    case (int)DbColumnTypeEnum.Int:
                                    case (int)DbColumnTypeEnum.BigInt:
                                    case (int)DbColumnTypeEnum.Float:
                                    case (int)DbColumnTypeEnum.Money:
                                    {
                                        if (prop.Name.EndsWith("_From"))
                                        {
                                            val = $"and [Project1].[{column.DbColumn_Name}] >= {prop.Value.ToString()}";
                                        }
                                        if (prop.Name.EndsWith("_To"))
                                        {
                                            val = $"and [Project1].[{column.DbColumn_Name}] < {prop.Value.ToString()}";
                                        }
                                        if (!prop.Name.EndsWith("_From") && !prop.Name.EndsWith("_To"))
                                        {
                                            val = $"and [Project1].[{column.DbColumn_Name}] = {prop.Value.ToString()}";
                                        }
                                    }
                                    break;

                                    case (int)DbColumnTypeEnum.String:
                                    case (int)DbColumnTypeEnum.Text:
                                    case (int)DbColumnTypeEnum.EmailAddress:
                                    case (int)DbColumnTypeEnum.WebUrl:
                                    case (int)DbColumnTypeEnum.PhoneNumber:
                                    {
                                        if (this.filterString.Contains(prop.Name + "_StringEquals"))
                                        {
                                            val = $"and [Project1].[{column.DbColumn_Name}] = N'{prop.Value.ToString().Replace("'", "''")}'";
                                        }
                                        else
                                        {
                                            val = $"and [Project1].[{column.DbColumn_Name}] like N'%{prop.Value.ToString().Replace("'", "''")}%'";
                                        }
                                        if (column.DbColumn_Name == "Pohoda_ID")
                                        {
                                            val = $"and [Project1].[{column.DbColumn_Name}] = N'{prop.Value.ToString().Replace("'", "''")}'";
                                        }
                                    }
                                    break;

                                    case (int)DbColumnTypeEnum.Entity:
                                    {
                                        val = $"and [Project1].[{column.DbColumn_Name}] = {prop.Value.ToString()}";
                                    }
                                    break;

                                    case (int)DbColumnTypeEnum.Enumeration:
                                    {
                                        string inValue = prop.Value.ToString().Replace("[", "").Replace("]", "");
                                        if (!string.IsNullOrEmpty(inValue) && inValue.Length > 0)
                                        {
                                            val = $"and [Project1].[{column.DbColumn_Name}] in ({inValue})";
                                        }
                                    }
                                    break;

                                    case (int)DbColumnTypeEnum.MultiEnumeration:
                                    {
                                        string inValue = prop.Value.ToString();
                                        if (!string.IsNullOrEmpty(inValue) && inValue.Length > 2)         // []
                                        {
                                            //val = $"and [Project1].[{vwProjection.DbPrimaryColumn_Name}] in (SELECT doe.[RecordId] FROM [crm].[DbColumnEnumeration] doe WHERE doe.[Deleted] = 0 AND doe.[DbColumn_FK] = {column.DbColumn_Id} AND doe.[Enumeration_FK] in ({inValue}))";
                                            val = $"and [Project1].[{column.DbColumn_Name}] IS NOT NULL and ((SELECT count(*) FROM OPENJSON(N'{inValue}') json2 INNER JOIN OPENJSON([Project1].[{column.DbColumn_Name}]) json1 ON json1.value = json2.value) > 0)";
                                        }
                                    }
                                    break;

                                    case (int)DbColumnTypeEnum.Date:
                                    case (int)DbColumnTypeEnum.DateTime:
                                        if (prop.Value != null)
                                        {
                                            DateTime date1 = (DateTime)prop;
                                            if (prop.Name.EndsWith("_From"))
                                            {
                                                val = $"and [Project1].[{column.DbColumn_Name}] >= convert(datetime, '{date1.ToString("s")}', 126)";
                                            }
                                            if (prop.Name.EndsWith("_To"))
                                            {
                                                val = $"and [Project1].[{column.DbColumn_Name}] < convert(datetime, '{date1.ToString("s")}', 126)";
                                            }
                                        }
                                        break;

                                    default:
                                        break;
                                    }
                                }
                                else
                                {
                                    val = column.Column_Filter.Replace("##Value##", prop.Value.ToString());
                                }
                            }
                        }
                    }
                }
                if (!string.IsNullOrEmpty(val))
                {
                    Write(val);
                    Write(Environment.NewLine);
                }
            }
        }