Files
Backend-Api/CompanyManagment.EFCore/Repository/RewardRepository.cs
2025-01-19 15:53:36 +03:30

141 lines
5.1 KiB
C#

using System.Collections.Generic;
using System.Linq;
using _0_Framework.Application;
using _0_Framework.InfraStructure;
using Company.Domain.RewardAgg;
using CompanyManagment.App.Contracts.Reward;
using Microsoft.EntityFrameworkCore;
namespace CompanyManagment.EFCore.Repository;
public class RewardRepository : RepositoryBase<long, Reward>, IRewardRepository
{
private readonly CompanyContext _companyContext;
public RewardRepository(CompanyContext companyContext) : base(companyContext)
{
_companyContext = companyContext;
}
public List<RewardViewModel> GetSearchList(RewardSearchModel searchViewModel)
{
var query = _companyContext.Rewards.Where(x => x.WorkshopId == searchViewModel.WorkshopId && x.IsActive == IsActive.True);
if (searchViewModel.EmployeeId != 0)
query = query.Where(x => x.EmployeeId == searchViewModel.EmployeeId);
if (!string.IsNullOrWhiteSpace(searchViewModel.StartDate) && !string.IsNullOrWhiteSpace(searchViewModel.EndDate))
{
var startDate = searchViewModel.StartDate.ToGeorgianDateTime();
var endDate = searchViewModel.EndDate.ToGeorgianDateTime();
query = query.Where(x => x.GrantDate >= startDate && x.GrantDate <= endDate);
}
var result = query.OrderByDescending(x=>x.CreationDate).Select(x => new RewardViewModel()
{
Id = x.id,
Title = x.Title,
EmployeeId = x.EmployeeId,
Description = x.Description,
Amount = x.Amount.ToMoney(),
WorkshopId = x.WorkshopId,
CreationDate = x.CreationDate.ToFarsi(),
GrantDateFa = x.GrantDate.ToFarsi()
}).Skip(searchViewModel.PageIndex).Take(30);
var employees = _companyContext.Employees.Where(x => result.Any(a => a.EmployeeId == x.id));
var personnelCodes = _companyContext.PersonnelCodeSet
.Where(x => result.Any(a => a.EmployeeId == x.EmployeeId && x.WorkshopId == a.WorkshopId));
return result.Select(x => new RewardViewModel()
{
Title = x.Title,
Amount = x.Amount,
CreationDate = x.CreationDate,
Description = x.Description ?? "-",
GrantDateFa = x.GrantDateFa,
EmployeeFullName = employees.FirstOrDefault(e => e.id == x.EmployeeId).FullName ,
Id = x.Id,
PersonnelCode = personnelCodes
.FirstOrDefault(a => a.WorkshopId == x.WorkshopId && a.EmployeeId == x.EmployeeId).PersonnelCode
.ToString(),
WorkshopId = x.WorkshopId,
EmployeeId = x.EmployeeId
}).ToList();
}
public EditRewardViewModel GetDetails(long id)
{
var entity = _companyContext.Rewards.FirstOrDefault(x => x.id == id);
if (entity == null)
return new();
var res = new EditRewardViewModel()
{
Id = entity.id,
Title = entity.Title,
WorkshopId = entity.WorkshopId,
EmployeeId = entity.EmployeeId,
Amount = entity.Amount.ToMoney(),
Description = entity.Description,
RewardedByAccountId = entity.RewardedByAccountId,
GrantDate = entity.GrantDate.ToFarsi()
};
res.EmployeeFullName = _companyContext.Employees.Find(entity.EmployeeId)?.FullName;
return res;
}
public List<Reward> GetBy(IEnumerable<long> ids)
{
return _companyContext.Rewards.Where(x => ids.Contains(x.id)).ToList();
}
#region Pooya
/// <summary>
/// گروهبندی بر اساس ماه هنگام جستجو با انتخاب کارمند
/// </summary>
public List<MonthlyGroupedEmployeeRewardsViewModel> GetSearchListByEmployee(RewardSearchModel searchModel)
{
var query = _companyContext.Rewards.Where(x => x.EmployeeId == searchModel.EmployeeId && x.WorkshopId == searchModel.WorkshopId && x.IsActive == IsActive.True);
if (!string.IsNullOrWhiteSpace(searchModel.StartDate) && !string.IsNullOrWhiteSpace(searchModel.EndDate))
{
var startDate = searchModel.StartDate.ToGeorgianDateTime();
var endDate = searchModel.EndDate.ToGeorgianDateTime();
query = query.Where(x => x.GrantDate >= startDate && x.GrantDate <= endDate);
}
var personnelCode = _companyContext.PersonnelCodeSet
.FirstOrDefault(x => x.EmployeeId == searchModel.EmployeeId && x.WorkshopId == searchModel.WorkshopId);
var employee = _companyContext.Employees.FirstOrDefault(x => x.id == searchModel.EmployeeId);
if (employee == null)
return new();
var result = query.Select(x => new RewardViewModel()
{
Id = x.id,
EmployeeId = x.EmployeeId,
Description = x.Description,
Amount = x.Amount.ToMoney(),
WorkshopId = x.WorkshopId,
CreationDate = x.CreationDate.ToFarsi(),
GrantDateFa = x.GrantDate.ToFarsi(),
PersonnelCode = personnelCode.PersonnelCode.ToString(),
EmployeeFullName = employee.FullName,
}).Skip(searchModel.PageIndex).Take(30).ToList();
result.ForEach(x =>
{
x.YearFa = x.GrantDateFa.Substring(0, 4);
x.MonthFa = x.GrantDateFa.Substring(5, 2);
});
return result.GroupBy(x => new { x.YearFa, x.MonthFa }).Select(x => new MonthlyGroupedEmployeeRewardsViewModel()
{
YearFa = x.Key.YearFa,
MonthFa = x.Key.MonthFa,
MonthFaName = x.Key.MonthFa.ToFarsiMonthByNumber(),
Rewards = x.ToList(),
EmployeeId = searchModel.EmployeeId,
PersonnelCode = personnelCode.PersonnelCode.ToString()
}).OrderByDescending(x => x.YearFa).ThenByDescending(x=>x.MonthFa).ToList();
}
#endregion
}