143 lines
5.6 KiB
C#
143 lines
5.6 KiB
C#
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using System.Threading.Tasks;
|
|
using _0_Framework.Application;
|
|
using _0_Framework.Application.Enums;
|
|
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();
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// دریافت دستمزدها و ضریب ریالی برای مودال ویرایش
|
|
/// </summary>
|
|
/// <param name="schemeId"></param>
|
|
/// <param name="startDate"></param>
|
|
/// <param name="endDate"></param>
|
|
/// <returns></returns>
|
|
public async Task<SalaryAndRialCoefficientModel> GetEditSalariesData(long schemeId, string startDate, string endDate)
|
|
{
|
|
var salaryAndRialCoefficientModel = new SalaryAndRialCoefficientModel();
|
|
|
|
try
|
|
{
|
|
var scheme = _context.ClassificationSchemes.FirstOrDefaultAsync(x => x.id == schemeId).GetAwaiter().GetResult();
|
|
var startDatGr = startDate.ToGeorgian();
|
|
|
|
|
|
var rialCoEfficient = await _context.ClassificationRialCoefficients
|
|
.FirstOrDefaultAsync(x => x.ClassificationSchemeId == schemeId && x.StartDate == startDatGr);
|
|
salaryAndRialCoefficientModel.SchemeId = schemeId;
|
|
salaryAndRialCoefficientModel.StartDateFa = startDate;
|
|
salaryAndRialCoefficientModel.EndDateFa = endDate;
|
|
salaryAndRialCoefficientModel.TypeOfCoefficient = scheme.TypeOfCoefficient;
|
|
if (rialCoEfficient == null)
|
|
{
|
|
salaryAndRialCoefficientModel.RialCoefficient = 0;
|
|
salaryAndRialCoefficientModel.CoefficientId = 0;
|
|
}
|
|
else
|
|
{
|
|
salaryAndRialCoefficientModel.RialCoefficient = scheme.TypeOfCoefficient == TypeOfCoefficient.RialCoefficient ? rialCoEfficient.RialCoefficient : 0;
|
|
salaryAndRialCoefficientModel.CoefficientId = scheme.TypeOfCoefficient == TypeOfCoefficient.RialCoefficient ? rialCoEfficient.id : 0;
|
|
}
|
|
|
|
salaryAndRialCoefficientModel.SalariesAndCoefficientList = _context.ClassificationGroupSalaries.Where(x => x.SchemeId == schemeId && x.StartDate == startDatGr).Select(x => new EditClassificationGroupSalaryAndRialCoefficient
|
|
{
|
|
Id = x.id,
|
|
ClassificationGroupId = x.ClassificationGroupId,
|
|
GroupNo = x.GroupNo,
|
|
GroupSalaryStr = x.GroupSalary.ToMoney(),
|
|
GroupSalary = x.GroupSalary
|
|
|
|
})
|
|
.ToList();
|
|
}
|
|
catch (System.Exception)
|
|
{
|
|
return new SalaryAndRialCoefficientModel();
|
|
|
|
}
|
|
|
|
|
|
|
|
return salaryAndRialCoefficientModel;
|
|
}
|
|
public async Task<SalaryAndRialCoefficientTab> GetSalariesTabData(long schemeId)
|
|
{
|
|
var scheme = await _context.ClassificationSchemes.Include(xc=>xc.ClassificationRialCoefficients)
|
|
.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
|
|
{
|
|
RialCoefficientStr = $"{scheme.ClassificationRialCoefficients.FirstOrDefault(x=>x.StartDate.Date == s.StartDate.Date && x.EndDate.Date == s.EndDate.Date)?.RialCoefficient}",
|
|
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;
|
|
|
|
|
|
}
|
|
|
|
|
|
} |