diff --git a/BMA.EHR.Application/Repositories/Leaves/TimeAttendants/AdditionalCheckRequestRepository.cs b/BMA.EHR.Application/Repositories/Leaves/TimeAttendants/AdditionalCheckRequestRepository.cs index cd8940d3..2cbd1d34 100644 --- a/BMA.EHR.Application/Repositories/Leaves/TimeAttendants/AdditionalCheckRequestRepository.cs +++ b/BMA.EHR.Application/Repositories/Leaves/TimeAttendants/AdditionalCheckRequestRepository.cs @@ -1,6 +1,7 @@ using BMA.EHR.Application.Common.Interfaces; using BMA.EHR.Application.Messaging; using BMA.EHR.Domain.Models.Leave.TimeAttendants; +using BMA.EHR.Domain.Shared; using Microsoft.AspNetCore.Http; using Microsoft.EntityFrameworkCore; using Microsoft.Extensions.Configuration; @@ -56,6 +57,23 @@ namespace BMA.EHR.Application.Repositories.Leaves.TimeAttendants #region " Methods " + public async Task> GetAdditionalCheckRequestsByUserId(Guid keycloakId, int year, int month) + { + try + { + var data = await _dbContext.Set().AsQueryable() + .Where(x => x.KeycloakUserId == keycloakId) + .Where(x => (x.CheckDate.Year == year && x.CheckDate.Month == month)) + .ToListAsync(); + + return data; + } + catch + { + throw; + } + } + public async Task> GetAdditionalCheckRequests(int year, int month) { try diff --git a/BMA.EHR.Leave.Service/Controllers/LeaveController.cs b/BMA.EHR.Leave.Service/Controllers/LeaveController.cs index e0507f27..7d1cd849 100644 --- a/BMA.EHR.Leave.Service/Controllers/LeaveController.cs +++ b/BMA.EHR.Leave.Service/Controllers/LeaveController.cs @@ -536,8 +536,10 @@ namespace BMA.EHR.Leave.Service.Controllers "LATE" : "NORMAL", - EditReason = d.EditReason ?? "", - EditStatus = d.EditStatus ?? "" + IsEdit = (d.EditStatus != null || d.EditStatus != "") + + //EditReason = d.EditReason ?? "", + //EditStatus = d.EditStatus ?? "" }) .ToList(); @@ -1246,6 +1248,88 @@ namespace BMA.EHR.Leave.Service.Controllers } } + + /// + /// LV1_022 - ประวัติการยื่นขอลงเวลาพิเศษ (USER) + /// + /// + /// + /// เมื่อทำรายการสำเร็จ + /// ไม่ได้ Login เข้าระบบ + /// เมื่อเกิดข้อผิดพลาดในการทำงาน + [HttpGet("edit/history")] + [ProducesResponseType(StatusCodes.Status200OK)] + [ProducesResponseType(StatusCodes.Status401Unauthorized)] + [ProducesResponseType(StatusCodes.Status500InternalServerError)] + public async Task> GetAdditionalCheckRequestHistoryAsync([Required] int year, [Required] int month, [Required] int page = 1, [Required] int pageSize = 10, string keyword = "") + { + var userId = UserId == null ? Guid.Empty : Guid.Parse(UserId); + + var rawData = await _additionalCheckRequestRepository.GetAdditionalCheckRequestsByUserId(userId, year, month); + + var getDefaultRound = await _dutyTimeRepository.GetDefaultAsync(); + if (getDefaultRound == null) + { + return Error("ไม่พบรอบลงเวลา Default", StatusCodes.Status404NotFound); + } + + var result = new List(); + + foreach (var data in rawData) + { + var profile = await _userProfileRepository.GetProfileByKeycloakIdAsync(data.KeycloakUserId); + if (profile == null) + { + return Error(GlobalMessages.DataNotFound, StatusCodes.Status404NotFound); + } + var userRound = await _dutyTimeRepository.GetByIdAsync(profile.DutyTimeId ?? Guid.Empty); + var checkInData = await _userTimeStampRepository.GetTimestampByDateAsync(data.KeycloakUserId, data.CheckDate); + + var duty = userRound ?? getDefaultRound; + + // create result object to return + var resObj = new GetAdditionalCheckRequestHistoryDto + { + Id = data.Id, + + CheckInTime = checkInData == null ? "00:00" : checkInData.CheckIn.ToString("HH:mm"), + CheckOutTime = checkInData == null ? "00:00" : checkInData.CheckOut == null ? "00:00" : checkInData.CheckOut.Value.ToString("HH:mm"), + + CheckInStatus = checkInData == null ? null : + DateTime.Parse(checkInData.CheckIn.ToString("yyyy-MM-dd HH:mm")) > + DateTime.Parse($"{checkInData.CheckIn.Date.ToString("yyyy-MM-dd")} {duty.StartTimeMorning}") ? + "LATE" : + "NORMAL", + + CheckOutStatus = checkInData == null ? null : + checkInData.CheckOut == null ? null : + DateTime.Parse(checkInData.CheckOut.Value.ToString("yyyy-MM-dd HH:mm")) < + DateTime.Parse($"{checkInData.CheckIn.Date.ToString("yyyy-MM-dd")} {duty.EndTimeAfternoon}") ? + "LATE" : + "NORMAL", + + CheckInLocation = checkInData == null ? "" : checkInData.CheckInPOI, + CheckOutLocation = checkInData == null ? "" : checkInData.CheckOutPOI ?? "", + + EditReason = data.Comment ?? "", + EditStatus = data.Status, + + }; + + result.Add(resObj); + } + + if (keyword != "") + { + result = result.Where(x => x.EditReason!.Contains(keyword)).ToList(); + } + + var pageResult = result.Skip((page - 1) * pageSize).Take(pageSize) + .ToList(); + + return Success(new { data = pageResult, total = result.Count }); + } + #endregion #endregion diff --git a/BMA.EHR.Leave.Service/DTOs/AdditionalCheck/GetAdditionalCheckRequestHistoryDto.cs b/BMA.EHR.Leave.Service/DTOs/AdditionalCheck/GetAdditionalCheckRequestHistoryDto.cs new file mode 100644 index 00000000..203e5efc --- /dev/null +++ b/BMA.EHR.Leave.Service/DTOs/AdditionalCheck/GetAdditionalCheckRequestHistoryDto.cs @@ -0,0 +1,27 @@ +namespace BMA.EHR.Leave.Service.DTOs.AdditionalCheck +{ + public class GetAdditionalCheckRequestHistoryDto + { + public Guid Id { get; set; } + + public DateTime CheckInDate { get; set; } + + public DateTime CheckOutDate { get; set; } + + public string CheckInTime { get; set; } + + public string CheckOutTime { get; set; } + + public string CheckInLocation { get; set; } + + public string CheckOutLocation { get; set; } + + public string? CheckInStatus { get; set; } + + public string? CheckOutStatus { get; set; } + + public string? EditReason { get; set; } + + public string? EditStatus { get; set; } + } +} diff --git a/BMA.EHR.Leave.Service/DTOs/CheckIn/CheckInHistoryDto.cs b/BMA.EHR.Leave.Service/DTOs/CheckIn/CheckInHistoryDto.cs index 9a21b13e..aeef002f 100644 --- a/BMA.EHR.Leave.Service/DTOs/CheckIn/CheckInHistoryDto.cs +++ b/BMA.EHR.Leave.Service/DTOs/CheckIn/CheckInHistoryDto.cs @@ -20,8 +20,10 @@ public string? CheckOutStatus { get; set; } = string.Empty; - public string EditStatus { get; set; } = string.Empty; + //public string EditStatus { get; set; } = string.Empty; - public string EditReason { get; set; } = string.Empty; + //public string EditReason { get; set; } = string.Empty; + + public bool IsEdit { get; set; } = false; } }