using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; using Erp.Settings.Localization; using Microsoft.AspNetCore.Authorization; using Microsoft.Extensions.Localization; using Volo.Abp.Domain.Repositories; using Volo.Abp.Domain.Services; using Volo.Abp.Settings; using SettingDefinition = Erp.Settings.Entities.SettingDefinition; namespace Erp.Settings; public class ErpSettingDefinitionManager : DomainService { private readonly IRepository repository; private readonly IStringLocalizer l; private readonly ISettingProvider settingProvider; private readonly IAuthorizationService authorizationService; public ErpSettingDefinitionManager( IRepository repository, IStringLocalizer l, ISettingProvider settingProvider, IAuthorizationService authorizationService ) { this.repository = repository; this.l = l; this.settingProvider = settingProvider; this.authorizationService = authorizationService; //TODO: Bu sekilde settingleri alip vt ile Code uzerinden kiyaslayip insert eden seeder yazalim //var settingDefinitions = _settingDefinitionManager.GetAll(); } public virtual async Task> GetGroupedSettingDefinitionsAsync() { //Add Group // Add Sub Group // Add SettingDefinition var result = new List(); var settingDefinitions = await repository.GetListAsync(); SettingGroupValueObject mainGroup = null; //MainGroupKey bilgisini gruplu şekilde alıyoruz. foreach (var group in settingDefinitions .OrderBy(o => o.Order) .GroupBy(g => new { g.MainGroupKey })) { mainGroup = new SettingGroupValueObject( group.Key.MainGroupKey, l[group.Key.MainGroupKey], new Dictionary>()); //SubGrupları Group bazında filtreleyip SubGroupları Gruplu şekilde dönüyoruz. foreach (var subGroup in settingDefinitions .Where(a => a.MainGroupKey == group.Key.MainGroupKey) .OrderBy(o => o.Order) .GroupBy(g => new { g.SubGroupKey })) { //Her subgroupun altındaki itemler foreach (var item in subGroup.ToList()) { if (!await authorizationService.IsGrantedAsync(item.RequiredPermissionName)) { continue; } if (!mainGroup.GroupedSettingDefinitions.ContainsKey(subGroup.Key.SubGroupKey)) { mainGroup.GroupedSettingDefinitions.Add(subGroup.Key.SubGroupKey, new List()); } var value = await settingProvider.GetOrNullAsync(item.Code); var itemWithValue = new SettingDefinitionWithValue(item, value); mainGroup.GroupedSettingDefinitions[subGroup.Key.SubGroupKey].Add(itemWithValue); } } if (mainGroup.GroupedSettingDefinitions.Count() > 0) { result.Add(mainGroup); } } return result; } //private async Task CheckPermissionsAsync(List permissions) //{ // //TODO: permisson tanimli degilse hata firlatma // var results = new List(); // try // { // foreach (var item in permissions) // { // results.Add(await authorizationService.IsGrantedAsync(item)); // } // } // catch // { // results.Add(false); // } // return results.Any(a => a); //} }