using GozareshgirProgramManager.Application._Common.Interfaces; using GozareshgirProgramManager.Application._Common.Models; using GozareshgirProgramManager.Application.Modules.SalaryPaymentSettings.Commands.CreateSalarySettings; using GozareshgirProgramManager.Domain._Common; using Microsoft.EntityFrameworkCore; using static Microsoft.EntityFrameworkCore.DbLoggerCategory.Database; namespace GozareshgirProgramManager.Application.Modules.SalaryPaymentSettings.Queries.GetSalarySettingToEdit; public class GetSalarySettingToEditQueryHandler : IBaseQueryHandler { private readonly IProgramManagerDbContext _context; public GetSalarySettingToEditQueryHandler(IProgramManagerDbContext context) { _context = context; } public async Task> Handle(GetSalarySettingToEditQuery request, CancellationToken cancellationToken) { var user =await _context.Users.FirstOrDefaultAsync(x => x.Id == request.UserId); if(user == null) return OperationResult.NotFound("کاربر یافت نشد"); var editSalarySettingsList = await _context.SalaryPaymentSettings .Select(x => new GetSalarySettingToEdit() { Id = x.Id, HolidayWorking = x.HolidayWorking, UserId = x.UserId, SalaryPerMinute = x.MonthlySalary.ToMoney(), WorkingHoursList = x.WorkingHoursList.Select(wh => new WorkingHoursListDto { StartShiftOne =wh.HasShiftOne ? wh.StartShiftOne.ToString(@"hh\:mm") : null, EndShiftOne = wh.HasShiftOne ? wh.EndShiftOne.ToString(@"hh\:mm") : null, StartShiftTwo = wh.HasShiftTow ? wh.StartShiftTwo.ToString(@"hh\:mm") : null, EndShiftTwo = wh.HasShiftTow ? wh.EndShiftTwo.ToString(@"hh\:mm") :null, RestTime = wh.HasRestTime ? wh.RestTime.ToString(@"hh\:mm") : null, HasRestTime = wh.HasRestTime, HasShiftOne = wh.HasShiftOne, HasShiftTow = wh.HasShiftTow, PersianDayOfWeek = wh.PersianDayOfWeek, IsActiveDay = wh.IsActiveDay }).OrderBy(wh=>wh.PersianDayOfWeek).ToList(), }).FirstOrDefaultAsync(x => x.UserId == request.UserId); var response = new GetSalarySettingToEditResponse(request.UserId,user.FullName,editSalarySettingsList); return OperationResult.Success(response); } } public record GetSalarySettingToEditResponse(long UserId, string FullName, GetSalarySettingToEdit EditSalarySettingsList); public record GetSalarySettingToEditQuery(long UserId) :IBaseQuery; public record GetSalarySettingToEdit { /// /// ای دی کاربر /// public long Id { get; set; } /// /// آی دی کاربر /// public long UserId { get; set; } /// /// کار در تعطیلات رسمی /// public bool HolidayWorking { get; set; } /// /// حقوق ماهانه /// public string SalaryPerMinute { get; set; } /// /// لیست روزهای هفته و ساعات کاری /// public List WorkingHoursList { get; set; } }