erp-platform/api/modules/Erp.Settings/Erp.Settings.Domain/SettingDefinitionManager.cs

112 lines
3.9 KiB
C#
Raw Normal View History

2025-05-06 06:45:49 +00:00
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
2025-11-11 19:49:52 +00:00
using Erp.Settings.Localization;
2025-05-06 06:45:49 +00:00
using Microsoft.AspNetCore.Authorization;
using Microsoft.Extensions.Localization;
using Volo.Abp.Domain.Repositories;
using Volo.Abp.Domain.Services;
using Volo.Abp.Settings;
2025-11-11 19:49:52 +00:00
using SettingDefinition = Erp.Settings.Entities.SettingDefinition;
2025-05-06 06:45:49 +00:00
2025-11-11 19:49:52 +00:00
namespace Erp.Settings;
2025-05-06 06:45:49 +00:00
2025-11-11 19:49:52 +00:00
public class ErpSettingDefinitionManager : DomainService
2025-05-06 06:45:49 +00:00
{
private readonly IRepository<SettingDefinition, Guid> repository;
private readonly IStringLocalizer<SettingsResource> l;
private readonly ISettingProvider settingProvider;
private readonly IAuthorizationService authorizationService;
2025-11-11 19:49:52 +00:00
public ErpSettingDefinitionManager(
2025-05-06 06:45:49 +00:00
IRepository<SettingDefinition, Guid> repository,
IStringLocalizer<SettingsResource> 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<List<SettingGroupValueObject>> GetGroupedSettingDefinitionsAsync()
{
//Add Group
// Add Sub Group
// Add SettingDefinition
var result = new List<SettingGroupValueObject>();
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<string, List<SettingDefinitionWithValue>>());
//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<SettingDefinitionWithValue>());
}
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<bool> CheckPermissionsAsync(List<string> permissions)
//{
// //TODO: permisson tanimli degilse hata firlatma
// var results = new List<bool>();
// try
// {
// foreach (var item in permissions)
// {
// results.Add(await authorizationService.IsGrantedAsync(item));
// }
// }
// catch
// {
// results.Add(false);
// }
// return results.Any(a => a);
//}
}
2025-11-11 19:49:52 +00:00