private static List <T> NacitatZoznam <T>(this IWebEasCoreRepositoryBase sourceType, SqlExpression <T> filter, string tenantId) where T : class { Guid filterTenantGuid; Type typEntity = typeof(T); if (typeof(ITenantEntity).IsAssignableFrom(typEntity)) { if (string.IsNullOrWhiteSpace(tenantId) || !Guid.TryParse(tenantId, out filterTenantGuid)) { return(new List <T>()); } filter.And <ITenantEntity>(f => f.D_Tenant_Id == filterTenantGuid); } else if (typeof(ITenantEntityNullable).IsAssignableFrom(typEntity)) { if (string.IsNullOrWhiteSpace(tenantId) || !Guid.TryParse(tenantId, out filterTenantGuid)) { return(new List <T>()); } filter.And <ITenantEntityNullable>(f => f.D_Tenant_Id == filterTenantGuid || f.D_Tenant_Id == null); } return(sourceType.Db.Select <T>(filter).ToList()); }
public static object NacitatFiltrovanyZoznamSPrilohami <T, TPriloha>(this IWebEasCoreRepositoryBase sourceType, object dto, string idColumn) where T : class where TPriloha : class { List <T> zoznam = sourceType.NacitatZoznam <T>(dto); // ziska sa primary key hodnota a ta sa vlozi do filtra Type type = typeof(T); PropertyInfo pPrimary = null; if (type.GetProperties().Any(nav => nav.HasAttribute <PrimaryKeyAttribute>())) { pPrimary = type.GetProperties().First(nav => nav.HasAttribute <PrimaryKeyAttribute>()); } else { throw new WebEasException(string.Format("Primary key not defined for {0}", type)); } foreach (T z in zoznam) { ((WebEas.ServiceModel.IPrilohy <TPriloha>)z).Prilohy = sourceType.NacitatZoznam <TPriloha>(dto, string.Format("{0} = {1}", idColumn, pPrimary.GetValue(z)), false); } return(new { Response = zoznam }); }
public static List <T> NacitatZoznam <T>(this IWebEasCoreRepositoryBase sourceType, Expression <Func <T, bool> > filter, string tenantId) where T : class { SqlExpression <T> ev = sourceType.Db.GetDialectProvider().SqlExpression <T>(); ev.Where(filter); return(sourceType.NacitatZoznam <T>(ev, tenantId)); }
/// <summary> /// Initializes a new instance of the <see cref="WebEasCoreServiceBase" /> class. /// </summary> /// <param name="repository">The repository.</param> public WebEasCoreServiceBase(IWebEasCoreRepositoryBase repository) { this.repository = repository; }
public static object NacitatJedinecneNazvy <T>(this IWebEasCoreRepositoryBase sourceType, object dto, string filter = null) where T : class { var parameters = new Dictionary <string, object>(); IOrmLiteDialectProvider dialectProvider = OrmLiteConfig.DialectProvider; Type type = typeof(T); var sql = new StringBuilder("SELECT DISTINCT"); PropertyInfo pColName = type.GetProperty("Nazov"); string colName = pColName.HasAttribute <PfeOriginalAliasAttribute>() ? pColName.FirstAttribute <PfeOriginalAliasAttribute>().Name : pColName.HasAttribute <AliasAttribute>() ? pColName.FirstAttribute <AliasAttribute>().Name : pColName.Name; string primaryKeyName = null; if (type.GetProperties().Any(nav => nav.HasAttribute <PrimaryKeyAttribute>())) { PropertyInfo pPrimary = type.GetProperties().First(nav => nav.HasAttribute <PrimaryKeyAttribute>()); primaryKeyName = pPrimary.HasAttribute <AliasAttribute>() ? pPrimary.FirstAttribute <AliasAttribute>().Name : pPrimary.Name; } else { PropertyInfo pPrimary = type.GetProperties().FirstOrDefault(nav => nav.Name != "Locale" && nav.Name != colName && nav.Name != "D_Tenant_Id"); if (pPrimary != null) { primaryKeyName = pPrimary.HasAttribute <AliasAttribute>() ? pPrimary.FirstAttribute <AliasAttribute>().Name : pPrimary.Name; } else { throw new WebEasException(string.Format("Primary key not defined for {0}", type)); } } bool hasCodeListCode = type.HasAttribute <CodeListCodeAttribute>(); if (hasCodeListCode) { sql.AppendFormat(" {0} AS ItemCode,", primaryKeyName); } if (dto is ILocale) { string locale = ((ILocale)dto).Locale ?? "sk"; locale = locale.ToLower(); if (TranslationDictionary.AcceptableLanguages.Any(nav => nav == locale)) { string aliasName = type.FirstAttribute <AliasAttribute>().Name; string[] alias = aliasName.Split('_'); // V_EDM_C_SposobDoruceniaOdpovede string schema = type.HasAttribute <PfeOriginalSchemaAttribute>() ? type.FirstAttribute <PfeOriginalSchemaAttribute>().Name : alias[1].ToLower(); string table = type.HasAttribute <PfeOriginalAliasAttribute>() ? type.FirstAttribute <PfeOriginalAliasAttribute>().Name : aliasName.Substring(aliasName.IndexOf("_", 2) + 1); string tenantFilter = ""; if (dto is ITenantFilter) { if (!string.IsNullOrEmpty(((ITenantFilter)dto).TenantId)) { tenantFilter = " AND (D_Tenant_Id IS NULL OR D_Tenant_Id = @tenant ) "; parameters.AddIfNotExists("@tenant", ((ITenantFilter)dto).TenantId); } else { tenantFilter = " AND D_Tenant_Id IS NULL "; } } sql.AppendFormat(" ISNULL((SELECT TOP 1 {0} FROM [egov_pub].[V_REG_D_PrekladovySlovnik] WHERE [Kluc] = CONCAT('{1}.{2}.{3}.',{4}){5}), {6}) AS ItemName", locale, schema, table, colName, dialectProvider.GetQuotedColumnName(primaryKeyName), tenantFilter, dialectProvider.GetQuotedColumnName(colName)); } else { sql.AppendFormat(" {0} AS ItemName", colName); } } else { sql.AppendFormat(" {0} AS ItemName", colName); } //FROM "); sql.Append(" FROM "); sql.Append(type.FirstAttribute <SchemaAttribute>().Name); sql.Append("."); sql.Append(type.HasAttribute <AliasAttribute>() ? type.FirstAttribute <AliasAttribute>().Name : type.Name); //ak sa pouziva IZdvLocale, jedna sa o tabulkovu funkciu co ocakava parameter @locale if (dto is IZdvLocale) { sql.Append("(@locale)"); parameters.AddIfNotExists("@locale", ((IZdvLocale)dto).Locale ?? "sk"); } bool whereAdded = false; if (typeof(ITenantEntity).IsAssignableFrom(type) && dto is ITenantFilter) { if (string.IsNullOrEmpty(((ITenantFilter)dto).TenantId)) { return(new List <object>()); } sql.Append(" WHERE (D_Tenant_Id = @tenant)"); parameters.AddIfNotExists("@tenant", ((ITenantFilter)dto).TenantId); whereAdded = true; } else if (typeof(ITenantEntityNullable).IsAssignableFrom(type) && dto is ITenantFilter) { if (string.IsNullOrEmpty(((ITenantFilter)dto).TenantId)) { sql.Append(" WHERE D_Tenant_Id is null"); whereAdded = true; } else { sql.Append(" WHERE (D_Tenant_Id = @tenant OR D_Tenant_Id is null)"); parameters.AddIfNotExists("@tenant", ((ITenantFilter)dto).TenantId); whereAdded = true; } } if (typeof(ICasovaPlatnost).IsAssignableFrom(type)) { sql.Append(whereAdded ? " AND " : " WHERE "); whereAdded = true; // PRIDANE PropertyInfo piPlatnostOd = type.GetProperty("PlatnostOd"); string platnostOdName = piPlatnostOd.HasAttribute <AliasAttribute>() ? piPlatnostOd.FirstAttribute <AliasAttribute>().Name : piPlatnostOd.Name; PropertyInfo piPlatnostDo = type.GetProperty("PlatnostDo"); string platnostDoName = piPlatnostDo.HasAttribute <AliasAttribute>() ? piPlatnostDo.FirstAttribute <AliasAttribute>().Name : piPlatnostDo.Name; sql.AppendFormat("(({0} IS NULL OR {0} <= getdate()) AND ({1} IS NULL OR {1} >= getdate()))", platnostOdName, platnostDoName); } // PRIDANE dodatocny filter ak je zadefinovany Type dtoType = dto.GetType(); List <PropertyInfo> criteriaProps = dtoType.GetProperties().Where(x => x.HasAttribute <SearchColumnsAttribute>()).Where(x => x.GetValue(dto) != null).ToList(); if (criteriaProps.Count > 0) { sql.Append(whereAdded ? " AND " : " WHERE "); whereAdded = true; bool andAdded = false; foreach (PropertyInfo pCrit in criteriaProps) { sql.Append(andAdded ? ") AND (" : "("); andAdded = true; bool orAdded = false; foreach (string s in pCrit.FirstAttribute <SearchColumnsAttribute>().Columns) { sql.Append(orAdded ? " OR " : ""); orAdded = true; PropertyInfo pFromView = type.GetProperties().Where(x => x.Name.EqualsIgnoreCase(s)).FirstOrDefault(); if (pFromView == null) { throw new WebEasException(string.Format("Search column {0} not found in view {1}", s, type.Name)); } string alias = s; if (s == "Nazov") { alias = colName; } else if (pFromView.HasAttribute <AliasAttribute>()) { alias = pFromView.FirstAttribute <AliasAttribute>().Name; } Type typeFromView = pFromView.PropertyType; if (typeFromView == typeof(string)) { sql.AppendFormat("({0} LIKE CONCAT('%',@{1},'%'))", alias, s); } else { sql.AppendFormat("({0} LIKE @{1})", alias, s); } parameters.AddIfNotExists(string.Format("@{0}", s), pCrit.GetValue(dto)); } } sql.Append(")"); } // PRIDANE fixny filter ak je zadefinovany if (type.HasAttribute <FixedFilterAttribute>()) { string val = type.FirstAttribute <FixedFilterAttribute>().Value; if (!string.IsNullOrEmpty(val)) { sql.Append(whereAdded ? " AND " : " WHERE "); whereAdded = true; sql.AppendFormat("({0})", val); } } // PRIDANE dodatocny filter ak je zadefinovany if (!string.IsNullOrEmpty(filter)) { sql.Append(whereAdded ? " AND " : " WHERE "); whereAdded = true; sql.AppendFormat("({0})", filter); } sql.Append(" ORDER BY ItemName"); if (hasCodeListCode) { List <DialEntity <long> > result = sourceType.Db.SqlList <DialEntity <long> >(sql.ToString(), parameters); return(new { Response = result }); } else { List <string> result = sourceType.Db.SqlList <string>(sql.ToString(), parameters); return(new { Response = result }); } }
public static object NacitatFiltrovanyZoznam <T>(this IWebEasCoreRepositoryBase sourceType, object dto) where T : class { return(new { Response = sourceType.NacitatZoznam <T>(dto) }); }
public static List <T> NacitatZoznam <T>(this IWebEasCoreRepositoryBase sourceType, object dto, string filter = null, bool searchColumnsCheck = true) where T : class { var parameters = new Dictionary <string, object>(); IOrmLiteDialectProvider dialectProvider = OrmLiteConfig.DialectProvider; Type type = typeof(T); var sql = new StringBuilder("SELECT DISTINCT "); var selectExpressions = new Dictionary <string, string>(); // pre vlozenie select vyrazov do where podmienok PropertyInfo[] props = type.GetProperties(); bool commaAdded = false; foreach (PropertyInfo prop in props) { if (prop.HasAttribute <IgnoreAttribute>()) { continue; } string colName = prop.HasAttribute <PfeOriginalAliasAttribute>() ? prop.FirstAttribute <PfeOriginalAliasAttribute>().Name : prop.HasAttribute <AliasAttribute>() ? prop.FirstAttribute <AliasAttribute>().Name : prop.Name; string alias = prop.Name; sql.Append(commaAdded ? ", " : ""); commaAdded = true; if (dto is ILocale && prop.HasAttribute <TranslateByAttribute>()) { string locale = ((ILocale)dto).Locale ?? "sk"; locale = locale.ToLower(); if (TranslationDictionary.AcceptableLanguages.Any(nav => nav == locale)) { string schema = prop.FirstAttribute <TranslateByAttribute>().Schema; string table = prop.FirstAttribute <TranslateByAttribute>().Table; string column = prop.FirstAttribute <TranslateByAttribute>().Column; string primKey = string.Format("{0}_Id", table); string tenantFilter = ""; if (dto is ITenantFilter) { if (!string.IsNullOrEmpty(((ITenantFilter)dto).TenantId)) { tenantFilter = " AND (D_Tenant_Id IS NULL OR D_Tenant_Id = @tenant ) "; parameters.AddIfNotExists("@tenant", ((ITenantFilter)dto).TenantId); } else { tenantFilter = " AND D_Tenant_Id IS NULL "; } } string aux = string.Format("ISNULL((SELECT TOP 1 {0} FROM [egov_pub].[V_REG_D_PrekladovySlovnik] WHERE [Kluc] = CONCAT('{1}.{2}.{3}.',{4}){5}), {6})", locale, schema, table, column, dialectProvider.GetQuotedColumnName(primKey), tenantFilter, dialectProvider.GetQuotedColumnName(colName)); sql.AppendFormat("{0} AS {1}", aux, alias); selectExpressions.Add(alias, aux); } else { sql.AppendFormat(colName == alias ? "{0}" : "{0} AS {1}", colName, alias); selectExpressions.Add(alias, colName); } } else { sql.AppendFormat(colName == alias ? "{0}" : "{0} AS {1}", colName, alias); selectExpressions.Add(alias, colName); } } // FROM sql.Append(" FROM "); sql.Append(type.FirstAttribute <SchemaAttribute>().Name); sql.Append("."); sql.Append(type.HasAttribute <AliasAttribute>() ? type.FirstAttribute <AliasAttribute>().Name : type.Name); // WHERE bool whereAdded = false; if (typeof(ITenantEntity).IsAssignableFrom(type) && dto is ITenantFilter) { if (string.IsNullOrEmpty(((ITenantFilter)dto).TenantId)) { return(new List <T>()); } sql.Append(" WHERE (D_Tenant_Id = @tenant)"); parameters.AddIfNotExists("@tenant", ((ITenantFilter)dto).TenantId); whereAdded = true; } else if (typeof(ITenantEntityNullable).IsAssignableFrom(type) && dto is ITenantFilter) { if (string.IsNullOrEmpty(((ITenantFilter)dto).TenantId)) { sql.Append(" WHERE D_Tenant_Id is null"); whereAdded = true; } else { sql.Append(" WHERE (D_Tenant_Id = @tenant OR D_Tenant_Id is null)"); parameters.AddIfNotExists("@tenant", ((ITenantFilter)dto).TenantId); whereAdded = true; } } if (typeof(ICasovaPlatnost).IsAssignableFrom(type)) { PropertyInfo piPlatnostOd = type.GetProperty("PlatnostOd"); string platnostOdName = piPlatnostOd.HasAttribute <AliasAttribute>() ? piPlatnostOd.FirstAttribute <AliasAttribute>().Name : piPlatnostOd.Name; PropertyInfo piPlatnostDo = type.GetProperty("PlatnostDo"); string platnostDoName = piPlatnostDo.HasAttribute <AliasAttribute>() ? piPlatnostDo.FirstAttribute <AliasAttribute>().Name : piPlatnostOd.Name; sql.Append(whereAdded ? " AND " : " WHERE "); whereAdded = true; sql.AppendFormat("(({0} IS NULL OR CONVERT(date, {0}) <= CONVERT(date, getdate())) AND ({1} IS NULL OR CONVERT(date, {1}) >= CONVERT(date, getdate())))", platnostOdName, platnostDoName); } Type dtoType = dto.GetType(); List <PropertyInfo> criteriaProps = dtoType.GetProperties().Where(x => x.HasAttribute <SearchColumnsAttribute>()).Where(x => x.GetValue(dto) != null).ToList(); if (criteriaProps.Count > 0) { var whereClause = new StringBuilder(); bool andAdded = false; foreach (PropertyInfo pCrit in criteriaProps) { var conjunct = new StringBuilder(); bool orAdded = false; foreach (string s in pCrit.FirstAttribute <SearchColumnsAttribute>().Columns) { string condition = null; PropertyInfo pFromView = type.GetProperties().Where(x => x.Name.EqualsIgnoreCase(s)).FirstOrDefault(); if (pFromView == null) { if (searchColumnsCheck) { throw new WebEasException(string.Format("Search column {0} not found in view {1}", s, type.Name)); } else { continue; } } Type typeFromView = pFromView.PropertyType; if (typeFromView == typeof(string)) { condition = string.Format("({0} LIKE CONCAT('%',@{1},'%'))", selectExpressions.ContainsKey(s) ? selectExpressions[s] : s, s); } else { condition = string.Format("({0} = @{1})", selectExpressions.ContainsKey(s) ? selectExpressions[s] : s, s); } if (condition != null) { conjunct.Append(orAdded ? " OR " : ""); orAdded = true; conjunct.Append(condition); parameters.AddIfNotExists(string.Format("@{0}", s), pCrit.GetValue(dto)); } } if (conjunct.Length != 0) { whereClause.Append(andAdded ? ") AND (" : "("); andAdded = true; whereClause.Append(conjunct); } } if (whereClause.Length != 0) { sql.Append(whereAdded ? " AND " : " WHERE "); whereAdded = true; sql.Append(whereClause); sql.Append(")"); } } if (!string.IsNullOrEmpty(filter)) { sql.Append(whereAdded ? " AND (" : " WHERE ("); whereAdded = true; sql.Append(filter); sql.Append(")"); } // PRIDANE fixny filter ak je zadefinovany if (type.HasAttribute <FixedFilterAttribute>()) { string val = type.FirstAttribute <FixedFilterAttribute>().Value; if (!string.IsNullOrEmpty(val)) { sql.Append(whereAdded ? " AND " : " WHERE "); whereAdded = true; sql.AppendFormat("({0})", val); } } List <T> result = sourceType.Db.SqlList <T>(sql.ToString(), parameters); return(result); }