using System.Collections.Generic; using System.Data; using System.Linq; using System.Text; using System.Text.RegularExpressions; using Kreta.BusinessLogic.Classes.ComboBox; using Kreta.Core; namespace Kreta.BusinessLogic.Utils { internal class LogicUtil { internal static IDictionary CreateDropdownContent(DataSet ds, string key, string value, string baseItem = null, bool sort = true) { //Alapból mindenhol kell hogy legyen benne érték // IDictionary result = new Dictionary(); if (!string.IsNullOrWhiteSpace(baseItem)) result.Add("", baseItem); //else // result.Add("", StringResourcesUtil.GetString(364));//Kérem válasszon... if (ds.Tables.Count < 1) return result; var dt = ds.Tables[0]; var items = dt.AsEnumerable().ToDictionary(row => row.Field(key).ToString(), row => row.Field(value)); if (sort) { foreach (var item in items.OrderBy(a => a.Value)) { result.Add(item); } } else { foreach (var item in items) { result.Add(item); } } return result; } internal static IDictionary CreateGroupedDropdownContent(DataSet ds, string key, string value, string group, IList groupIds, string baseItem = null, bool groupIsEnum = false, bool noorder = false) { IDictionary result = new Dictionary(); if (!string.IsNullOrWhiteSpace(baseItem)) { result.Add("", baseItem); } //else { result.Add("", StringResourcesUtil.GetString(364)); } /*Kérem válasszon...*/ if (ds.Tables.Count < 1) { return result; } var dt = ds.Tables[0]; if (groupIsEnum) { if (noorder == false) { foreach (var item in dt.AsEnumerable().OrderBy(a => a.Field(group))) { var groupId = "SDAGID" + item.Field(group); if (groupIds.All(a => a != groupId)) { groupIds.Add(groupId); result.Add(groupId, item.Field(group + "_DNAME")); } result.Add(item.Field(key).ToString(), item.Field(value)); } } else { foreach (var item in dt.AsEnumerable()) { var groupId = "SDAGID" + item.Field(group); if (groupIds.All(a => a != groupId)) { groupIds.Add(groupId); result.Add(groupId, item.Field(group + "_DNAME")); } result.Add(item.Field(key).ToString(), item.Field(value)); } } } else { if (noorder == false) { foreach (var item in dt.AsEnumerable().OrderBy(a => a.Field(group))) { var groupId = "SDAGID" + item.Field(group); if (groupIds.All(a => a != groupId)) { groupIds.Add(groupId); result.Add(groupId, item.Field(group)); } result.Add(item.Field(key).ToString(), item.Field(value)); } } else { foreach (var item in dt.AsEnumerable()) { var groupId = "SDAGID" + item.Field(group); if (groupIds.All(a => a != groupId)) { groupIds.Add(groupId); result.Add(groupId, item.Field(group)); } result.Add(item.Field(key).ToString(), item.Field(value)); } } } return result; } /// /// MVC-s csoportosítható select listát állít elő /// /// /// /// ha null, akkor a paraméterből veszi a value formátumát /// /// /// az item-ek megjelnési formátumát definiálja: /// pl.: "{Nev} ({OktatasiAzonosito})" ahol a Nev és OktatasiAzonosito a -ben az oszlop neve /// internal static List CreateMvcGroupedSelectListItem(DataSet ds, string keyColumn, string valueColumn, string groupNamesColumn, string groupOrderColumn = null, string valueFormat = null) { MatchCollection matchesInFormat = null; if (!string.IsNullOrWhiteSpace(valueFormat)) { matchesInFormat = Regex.Matches(valueFormat, Constants.RegularExpressions.OszlopNevHelyettesito); } DataTable dt = ds.Tables.Count > 0 ? ds.Tables[0] : null; if (dt == null) { return new List(); } EnumerableRowCollection dataRowList = dt.AsEnumerable(); if (!string.IsNullOrWhiteSpace(groupOrderColumn)) { dataRowList = dataRowList.OrderBy(x => x.Field(groupOrderColumn)); } var groups = dataRowList .GroupBy(x => x.Field(groupNamesColumn)) .Select(group => new KeyValuePair(group.Key, new ComboListGroup { Name = group.Key })) .ToDictionary(item => item.Key, item => item.Value); var result = dt.Rows .Cast() .Select(item => new ComboBoxListItem { GroupName = groups[item.Field(groupNamesColumn)].Name, Text = valueColumn != null ? item.Field(valueColumn) : GetFilledValueFormat(item, valueFormat, matchesInFormat), Value = item.Field(keyColumn).ToString() }) .ToList(); return result; } internal static string GetFilledValueFormat(DataRow item, string valueFormat, MatchCollection matches) { var sb = new StringBuilder(valueFormat); for (int i = 0; i < matches.Count; i++) { sb = sb.Replace(matches[i].Value, item[matches[i].Value.Trim("{}".ToCharArray())].ToString()); } return sb.ToString(); } internal static List CreateMvcGroupedExtendedComboBoxListItem(DataSet ds, string keyColumn, string valueColumn, string groupNamesColumn, string groupOrderColumn = null, IEnumerable extraDataParameters = null) { DataTable dt = ds.Tables.Count > 0 ? ds.Tables[0] : null; if (dt == null) { return new List(); } EnumerableRowCollection dataRowList = dt.AsEnumerable(); if (!string.IsNullOrWhiteSpace(groupOrderColumn)) { dataRowList = dataRowList.OrderBy(x => x.Field(groupOrderColumn)); } var groups = dataRowList .GroupBy(x => x.Field(groupNamesColumn)) .Select(group => new KeyValuePair(group.Key, new ComboListGroup { Name = group.Key })) .ToDictionary(item => item.Key, item => item.Value); var result = dt.Rows .Cast() .Select(item => new ExtraDataComboBoxListItem { GroupName = groups[item.Field(groupNamesColumn)].Name, Text = item.Field(valueColumn), Value = item.Field(keyColumn).ToString(), Data = extraDataParameters.ToDictionary(extraParameterName => extraParameterName, extraParameterName => item[extraParameterName].ToString()) }) .ToList(); return result; } } }