erp-platform/api/modules/Erp.Settings/Erp.Settings.Domain/SettingDefinitionManager.cs
2025-11-11 22:49:52 +03:00

111 lines
3.9 KiB
C#
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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<SettingDefinition, Guid> repository;
private readonly IStringLocalizer<SettingsResource> l;
private readonly ISettingProvider settingProvider;
private readonly IAuthorizationService authorizationService;
public ErpSettingDefinitionManager(
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);
//}
}