add API #1600
All checks were successful
Build & Deploy Leave Service / build (push) Successful in 1m58s

This commit is contained in:
Suphonchai Phoonsawat 2026-06-22 23:13:51 +07:00
parent a2dc4b5b82
commit ae417e4777
2 changed files with 159 additions and 0 deletions

View file

@ -3818,6 +3818,148 @@ namespace BMA.EHR.Leave.Service.Controllers
return Success();
}
[HttpPut("admin/edit/approve-list")]
[ProducesResponseType(StatusCodes.Status200OK)]
[ProducesResponseType(StatusCodes.Status401Unauthorized)]
[ProducesResponseType(StatusCodes.Status500InternalServerError)]
public async Task<ActionResult<ResponseObject>> ApproveRequestListAsync([FromBody] List<ApproveRequestListItemDto> reqs)
{
var getPermission = await _permission.GetPermissionAPIAsync("UPDATE", "SYS_CHECKIN_SPECIAL");
var jsonData = JsonConvert.DeserializeObject<JObject>(getPermission);
if (jsonData["status"]?.ToString() != "200")
{
return Error(jsonData["message"]?.ToString(), StatusCodes.Status403Forbidden);
}
foreach (var req in reqs)
{
if (req.Reason == null || req.Reason == string.Empty)
{
return Error("กรุณากรอกเหตุผล", StatusCodes.Status400BadRequest);
}
var requestData = await _additionalCheckRequestRepository.GetByIdAsync(req.RecId);
if (requestData == null)
{
return Error(GlobalMessages.DataNotFound, StatusCodes.Status404NotFound);
}
requestData.Status = "APPROVE";
requestData.Comment = req.Reason;
await _additionalCheckRequestRepository.UpdateAsync(requestData);
// change user timestamp
var processTimeStamp = await _processUserTimeStampRepository.GetTimestampByDateAsync(requestData.KeycloakUserId, requestData.CheckDate.Date);
var profile = await _userProfileRepository.GetProfileByKeycloakIdNew2Async(requestData.KeycloakUserId, AccessToken);
if (processTimeStamp == null)
{
processTimeStamp = new ProcessUserTimeStamp
{
KeycloakUserId = requestData.KeycloakUserId,
CheckIn = DateTime.Parse($"{requestData.CheckDate.Date.ToString("yyyy-MM-dd")} {req.CheckInTime}"),
CheckOut = DateTime.Parse($"{requestData.CheckDate.Date.ToString("yyyy-MM-dd")} {req.CheckOutTime}"),
CheckInRemark = req.Reason,
CheckOutRemark = req.Reason,
CheckInLat = 0,
CheckInLon = 0,
CheckOutLat = 0,
CheckOutLon = 0,
CheckInPOI = "",
CheckOutPOI = "",
CheckInStatus = req.CheckInStatus,
CheckOutStatus = req.CheckOutStatus,
Prefix = profile.Prefix,
FirstName = profile.FirstName,
LastName = profile.LastName,
// Add ข้อมูลจาก profile
CitizenId = profile.CitizenId,
ProfileType = profile.ProfileType,
Root = profile.Root,
RootId = profile.RootId,
Child1 = profile.Child1,
Child1Id = profile.Child1Id,
Child2 = profile.Child2,
Child2Id = profile.Child2Id,
Child3 = profile.Child3,
Child3Id = profile.Child3Id,
Child4 = profile.Child4,
Child4Id = profile.Child4Id,
Gender = profile.Gender,
ProfileId = profile.Id,
};
processTimeStamp.EditStatus = "APPROVE";
processTimeStamp.EditReason = req.Reason;
if (requestData.CheckInEdit)
{
processTimeStamp.CheckInPOI = requestData.POI ?? "";
processTimeStamp.CheckInLat = requestData.Latitude ?? 0;
processTimeStamp.CheckInLon = requestData.Longitude ?? 0;
}
if (requestData.CheckOutEdit)
{
processTimeStamp.CheckOutPOI = requestData.POI ?? "";
processTimeStamp.CheckOutLat = requestData.Latitude ?? 0;
processTimeStamp.CheckOutLon = requestData.Longitude ?? 0;
}
await _processUserTimeStampRepository.AddAsync(processTimeStamp);
}
else
{
if (requestData.CheckInEdit)
{
processTimeStamp.CheckIn = DateTime.Parse($"{requestData.CheckDate.Date.ToString("yyyy-MM-dd")} {req.CheckInTime}");
processTimeStamp.CheckInRemark = req.Reason;
//processTimeStamp.CheckInLat = 0;
//processTimeStamp.CheckInLon = 0;
//processTimeStamp.CheckInPOI = "ลงเวลากรณีพิเศษ";
processTimeStamp.CheckInStatus = req.CheckInStatus;
processTimeStamp.CheckInPOI = requestData.POI ?? "";
processTimeStamp.CheckInLat = requestData.Latitude ?? 0;
processTimeStamp.CheckInLon = requestData.Longitude ?? 0;
}
if (requestData.CheckOutEdit)
{
processTimeStamp.CheckOut = DateTime.Parse($"{requestData.CheckDate.Date.ToString("yyyy-MM-dd")} {req.CheckOutTime}");
processTimeStamp.CheckOutRemark = req.Reason;
//processTimeStamp.CheckOutLat = 0;
//processTimeStamp.CheckOutLon = 0;
//processTimeStamp.CheckOutPOI = "ลงเวลากรณีพิเศษ";
processTimeStamp.CheckOutStatus = req.CheckOutStatus;
processTimeStamp.CheckOutPOI = requestData.POI ?? "";
processTimeStamp.CheckOutLat = requestData.Latitude ?? 0;
processTimeStamp.CheckOutLon = requestData.Longitude ?? 0;
}
processTimeStamp.EditStatus = "APPROVE";
processTimeStamp.EditReason = req.Reason;
await _processUserTimeStampRepository.UpdateAsync(processTimeStamp);
}
var recvId = new List<Guid> { profile.Id };
await _notificationRepository.PushNotificationsAsync(recvId.ToArray(), "ลงเวลากรณีพิเศษ",
"การขอลงเวลากรณีพิเศษของคุณได้รับการอนุมัติ", "", "", true, false);
}
return Success();
}
/// <summary>
/// LV1_020 - ไม่อนุมัติลงเวลากรณีพิเศษ (ADMIN)
/// </summary>

View file

@ -12,4 +12,21 @@
public string Reason { get; set; }
}
public class ApproveRequestListItemDto
{
/// <summary>
/// id ของ record รายการคำขอลงเวลาพิเศษนั้นๆ
/// </summary>
public Guid RecId { get; set; }
public string CheckInTime { get; set; }
public string CheckOutTime { get; set; }
public string CheckInStatus { get; set; }
public string CheckOutStatus { get; set; }
public string Reason { get; set; }
}
}