LV1_022 - ประวัติการยื่นขอลงเวลาพิเศษ (USER)

Edit
LV1_007 - ประวัติการลงเวลา (USER)
This commit is contained in:
Suphonchai Phoonsawat 2023-11-29 06:07:57 +07:00
parent 130cbb8042
commit 32686c3e0b
4 changed files with 135 additions and 4 deletions

View file

@ -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<List<AdditionalCheckRequest>> GetAdditionalCheckRequestsByUserId(Guid keycloakId, int year, int month)
{
try
{
var data = await _dbContext.Set<AdditionalCheckRequest>().AsQueryable()
.Where(x => x.KeycloakUserId == keycloakId)
.Where(x => (x.CheckDate.Year == year && x.CheckDate.Month == month))
.ToListAsync();
return data;
}
catch
{
throw;
}
}
public async Task<List<AdditionalCheckRequest>> GetAdditionalCheckRequests(int year, int month)
{
try

View file

@ -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
}
}
/// <summary>
/// LV1_022 - ประวัติการยื่นขอลงเวลาพิเศษ (USER)
/// </summary>
/// <returns>
/// </returns>
/// <response code="200">เมื่อทำรายการสำเร็จ</response>
/// <response code="401">ไม่ได้ Login เข้าระบบ</response>
/// <response code="500">เมื่อเกิดข้อผิดพลาดในการทำงาน</response>
[HttpGet("edit/history")]
[ProducesResponseType(StatusCodes.Status200OK)]
[ProducesResponseType(StatusCodes.Status401Unauthorized)]
[ProducesResponseType(StatusCodes.Status500InternalServerError)]
public async Task<ActionResult<ResponseObject>> 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<GetAdditionalCheckRequestHistoryDto>();
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

View file

@ -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; }
}
}

View file

@ -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;
}
}