Files
Backend-Api/CompanyManagment.EFCore/Repository/ClassificationGroupSalariesRepository.cs

85 lines
2.9 KiB
C#

using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using _0_Framework.Application;
using _0_Framework.InfraStructure;
using Company.Domain.ClassificationSchemeAgg;
using CompanyManagment.App.Contracts.ClassificationScheme;
using Microsoft.EntityFrameworkCore;
namespace CompanyManagment.EFCore.Repository;
public class ClassificationGroupSalariesRepository : RepositoryBase<long, ClassificationGroupSalary>, IClassificationGroupSalariesRepository
{
private readonly CompanyContext _context;
public ClassificationGroupSalariesRepository(CompanyContext context) : base(context)
{
_context = context;
}
public async Task CreateSalaries(List<ClassificationGroupSalary> createClassificationGroupSalary)
{
if (createClassificationGroupSalary.Count > 0)
{
await _context.ClassificationGroupSalaries.AddRangeAsync(createClassificationGroupSalary);
await _context.SaveChangesAsync();
}
}
public async Task<SalaryAndRialCoefficientTab> GetSalariesTabData(long schemeId)
{
var scheme = await _context.ClassificationSchemes
.Include(xg => xg.ClassificationGroups)
.ThenInclude(xs => xs.ClassificationGroupSalaries)
.FirstOrDefaultAsync(x => x.id == schemeId);
if (scheme == null)
return null;
// جمع‌آوری همه‌ی حقوق‌ها از تمام گروه‌ها
var allSalaries = scheme.ClassificationGroups
.SelectMany(g => g.ClassificationGroupSalaries)
.ToList();
// اگر هیچ حقوقی وجود ندارد
if (!allSalaries.Any())
{
return new SalaryAndRialCoefficientTab
{
SchemeId = scheme.id,
HasAnySalaries = false,
SalaryAndRialCoefficientTabDataList = new List<SalaryAndRialCoefficientTabDataList>()
};
}
// ✅ گروه‌بندی بر اساس StartDate و EndDate برای حذف موارد تکراری
var distinctPeriods = allSalaries
.GroupBy(s => new { s.StartDate, s.EndDate })
.Select(g => g.First()) // فقط یکی از هر بازه تاریخ
.OrderByDescending(x => x.StartDate)
.ToList();
// ✅ تبدیل به مدل خروجی
var dataList = distinctPeriods
.Select(s => new SalaryAndRialCoefficientTabDataList
{
StartDateFa = s.StartDate.ToFarsi(),
EndDateFa = s.EndDate.ToFarsi(),
Year = s.Year// یا هر روش سال شمسی که داری
})
.ToList();
var result = new SalaryAndRialCoefficientTab
{
SchemeId = scheme.id,
HasAnySalaries = allSalaries.Any(),
SalaryAndRialCoefficientTabDataList = dataList
};
return result;
}
}