From e130ce00d77bd88ba72dcdac430321e4b23a57c0 Mon Sep 17 00:00:00 2001 From: Suphonchai Phoonsawat Date: Wed, 29 Nov 2023 18:45:11 +0700 Subject: [PATCH] =?UTF-8?q?api=20=E0=B8=A5=E0=B8=B2=2004,05=20=E0=B9=81?= =?UTF-8?q?=E0=B8=A5=E0=B8=B0=2011?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../LeaveRequests/LeaveRequestRepository.cs | 29 ++++++ .../Controllers/LeaveRequestController.cs | 96 ++++++++++++++++++- .../Controllers/LeaveTypeController.cs | 6 +- .../GetLeaveRequestCalendarDto.cs | 7 ++ .../GetLeaveRequestCalendarResultDto.cs | 21 ++++ .../LeaveRequest/GetLeaveRequestTableDto.cs | 24 +++++ .../GetLeaveRequestTableResultDto.cs | 19 ++++ 7 files changed, 198 insertions(+), 4 deletions(-) create mode 100644 BMA.EHR.Leave.Service/DTOs/LeaveRequest/GetLeaveRequestCalendarDto.cs create mode 100644 BMA.EHR.Leave.Service/DTOs/LeaveRequest/GetLeaveRequestCalendarResultDto.cs create mode 100644 BMA.EHR.Leave.Service/DTOs/LeaveRequest/GetLeaveRequestTableDto.cs create mode 100644 BMA.EHR.Leave.Service/DTOs/LeaveRequest/GetLeaveRequestTableResultDto.cs diff --git a/BMA.EHR.Application/Repositories/Leaves/LeaveRequests/LeaveRequestRepository.cs b/BMA.EHR.Application/Repositories/Leaves/LeaveRequests/LeaveRequestRepository.cs index 46f22493..eb7dd6c4 100644 --- a/BMA.EHR.Application/Repositories/Leaves/LeaveRequests/LeaveRequestRepository.cs +++ b/BMA.EHR.Application/Repositories/Leaves/LeaveRequests/LeaveRequestRepository.cs @@ -58,6 +58,35 @@ namespace BMA.EHR.Application.Repositories.Leaves.LeaveRequests #region " Methods " + public async Task> GetLeaveRequestByYearAsync(int year) + { + var data = await _dbContext.Set().AsQueryable() + .Include(x => x.Type) + .Where(x => x.LeaveStartDate.Year == year) + .ToListAsync(); + + return data; + } + + + public async Task> GetLeaveRequestByUserIdAsync(Guid keycloakUserId, int year, Guid type, string status) + { + var rawData = _dbContext.Set().AsQueryable() + .Include(x => x.Type) + .Where(x => x.KeycloakUserId == keycloakUserId); + + if (year != 0) + rawData = rawData.Where(x => x.LeaveStartDate.Year == year); + + if (type != Guid.Empty) + rawData = rawData.Where(x => x.Type.Id == type); + + if (status.Trim().ToUpper() != "ALL") + rawData = rawData.Where(x => x.LeaveStatus == status); + + return await rawData.ToListAsync(); + } + public async Task GetRestDayTotalByYearForUserAsync(Guid keycloakUserId, int year) { var leaveType = await _dbContext.Set().AsQueryable().FirstOrDefaultAsync(l => l.Code.Trim().ToUpper() == "LV-005"); diff --git a/BMA.EHR.Leave.Service/Controllers/LeaveRequestController.cs b/BMA.EHR.Leave.Service/Controllers/LeaveRequestController.cs index f113379b..0efe207b 100644 --- a/BMA.EHR.Leave.Service/Controllers/LeaveRequestController.cs +++ b/BMA.EHR.Leave.Service/Controllers/LeaveRequestController.cs @@ -124,7 +124,8 @@ namespace BMA.EHR.Leave.Service.Controllers LeaveAddress = req.LeaveAddress ?? "", LeaveNumber = req.LeaveNumber ?? "", LeaveTotal = req.LeaveStartDate.DiffDay(req.LeaveEndDate), - LeaveSalaryText = req.LeaveSalaryText ?? "" + LeaveSalaryText = req.LeaveSalaryText ?? "", + LeaveStatus = "NEW" }; // get leave last @@ -343,6 +344,99 @@ namespace BMA.EHR.Leave.Service.Controllers return Success(result); } + + /// + /// LV2_004 - รายการลา Calendar (USER/ADMIN) + /// + /// + /// + /// เมื่อทำรายการสำเร็จ + /// ไม่ได้ Login เข้าระบบ + /// เมื่อเกิดข้อผิดพลาดในการทำงาน + [HttpPost("user/calendar")] + [ProducesResponseType(StatusCodes.Status200OK)] + [ProducesResponseType(StatusCodes.Status401Unauthorized)] + [ProducesResponseType(StatusCodes.Status500InternalServerError)] + public async Task> GetLeaveRequestCalendarAsync([FromBody] GetLeaveRequestCalendarDto req) + { + var thisYear = DateTime.Now.Year; + var data = await _leaveRequestRepository.GetLeaveRequestByYearAsync(thisYear); + + var result = new List(); + + foreach (var item in data) + { + var profile = await _userProfileRepository.GetProfileByKeycloakIdAsync(item.KeycloakUserId); + + var resData = new GetLeaveRequestCalendarResultDto + { + Id = item.Id, + LeaveTypeName = item.Type.Name, + LeaveTypeId = item.Type.Id, + DateSendLeave = item.CreatedAt.Date, + Status = item.LeaveStatus, + FullName = $"{profile.Prefix.Name}{profile.FirstName} {profile.LastName}", + LeaveStartDate = item.LeaveStartDate, + LeaveEndDate = item.LeaveEndDate, + }; + + result.Add(resData); + } + + return Success(result); + } + + /// + /// LV2_005 - รายการลา Table (USER) + /// + /// + /// + /// เมื่อทำรายการสำเร็จ + /// ไม่ได้ Login เข้าระบบ + /// เมื่อเกิดข้อผิดพลาดในการทำงาน + [HttpPost("user/table")] + [ProducesResponseType(StatusCodes.Status200OK)] + [ProducesResponseType(StatusCodes.Status401Unauthorized)] + [ProducesResponseType(StatusCodes.Status500InternalServerError)] + public async Task> GetLeaveRequestTableAsync([FromBody] GetLeaveRequestTableDto req) + { + var userId = UserId == null ? Guid.Empty : Guid.Parse(UserId); + + var profile = await _userProfileRepository.GetProfileByKeycloakIdAsync(userId); + if (profile == null) + { + return Error(GlobalMessages.DataNotFound, StatusCodes.Status404NotFound); + } + + var rawData = await _leaveRequestRepository.GetLeaveRequestByUserIdAsync(userId, req.Year, req.Type, req.Status); + + var result = new List(); + + foreach (var item in rawData) + { + var res = new GetLeaveRequestTableResultDto + { + Id = item.Id, + LeaveTypeId = item.Type.Id, + LeaveTypeName = item.Type.Name, + FullName = $"{profile.Prefix.Name}{profile.FirstName} {profile.LastName}", + DateSendLeave = item.CreatedAt.Date, + IsDelete = item.LeaveStatus == "DELETE", + Status = item.LeaveStatus + }; + result.Add(res); + } + + if (req.Keyword != "") + result = result.Where(x => x.FullName.Contains(req.Keyword)).ToList(); + + var pageResult = result.Skip((req.Page - 1) * req.PageSize).Take(req.PageSize).ToList(); + + return Success(new { data = pageResult, total = result.Count }); + + } + + #endregion } } diff --git a/BMA.EHR.Leave.Service/Controllers/LeaveTypeController.cs b/BMA.EHR.Leave.Service/Controllers/LeaveTypeController.cs index 95548490..7c3d84ad 100644 --- a/BMA.EHR.Leave.Service/Controllers/LeaveTypeController.cs +++ b/BMA.EHR.Leave.Service/Controllers/LeaveTypeController.cs @@ -9,7 +9,7 @@ using System.Security.Claims; namespace BMA.EHR.Leave.Service.Controllers { - [Route("api/v{version:apiVersion}/leave-types")] + [Route("api/v{version:apiVersion}/leave")] [ApiVersion("1.0")] [ApiController] [Produces("application/json")] @@ -71,14 +71,14 @@ namespace BMA.EHR.Leave.Service.Controllers #region " Methods " /// - /// List รายการประเภทการลา + /// LV2_011 - รายการประเภทการลา (ADMIN) /// /// /// /// เมื่อทำรายการสำเร็จ /// ไม่ได้ Login เข้าระบบ /// เมื่อเกิดข้อผิดพลาดในการทำงาน - [HttpPost] + [HttpGet("type")] [ProducesResponseType(StatusCodes.Status200OK)] [ProducesResponseType(StatusCodes.Status401Unauthorized)] [ProducesResponseType(StatusCodes.Status500InternalServerError)] diff --git a/BMA.EHR.Leave.Service/DTOs/LeaveRequest/GetLeaveRequestCalendarDto.cs b/BMA.EHR.Leave.Service/DTOs/LeaveRequest/GetLeaveRequestCalendarDto.cs new file mode 100644 index 00000000..0bae30eb --- /dev/null +++ b/BMA.EHR.Leave.Service/DTOs/LeaveRequest/GetLeaveRequestCalendarDto.cs @@ -0,0 +1,7 @@ +namespace BMA.EHR.Leave.Service.DTOs.LeaveRequest +{ + public class GetLeaveRequestCalendarDto + { + public int Year { get; set; } = DateTime.Now.Year; + } +} diff --git a/BMA.EHR.Leave.Service/DTOs/LeaveRequest/GetLeaveRequestCalendarResultDto.cs b/BMA.EHR.Leave.Service/DTOs/LeaveRequest/GetLeaveRequestCalendarResultDto.cs new file mode 100644 index 00000000..5fac1766 --- /dev/null +++ b/BMA.EHR.Leave.Service/DTOs/LeaveRequest/GetLeaveRequestCalendarResultDto.cs @@ -0,0 +1,21 @@ +namespace BMA.EHR.Leave.Service.DTOs.LeaveRequest +{ + public class GetLeaveRequestCalendarResultDto + { + public Guid Id { get; set; } + + public string LeaveTypeName { get; set; } + + public Guid LeaveTypeId { get; set; } + + public DateTime DateSendLeave { get; set; } + + public string Status { get; set; } + + public string FullName { get; set; } + + public DateTime LeaveStartDate { get; set; } + + public DateTime LeaveEndDate { get; set; } + } +} diff --git a/BMA.EHR.Leave.Service/DTOs/LeaveRequest/GetLeaveRequestTableDto.cs b/BMA.EHR.Leave.Service/DTOs/LeaveRequest/GetLeaveRequestTableDto.cs new file mode 100644 index 00000000..43089d16 --- /dev/null +++ b/BMA.EHR.Leave.Service/DTOs/LeaveRequest/GetLeaveRequestTableDto.cs @@ -0,0 +1,24 @@ +using System.ComponentModel.DataAnnotations; + +namespace BMA.EHR.Leave.Service.DTOs.LeaveRequest +{ + public class GetLeaveRequestTableDto + { + [Required] + public int Year { get; set; } = 0; + + [Required] + public Guid Type { get; set; } = Guid.Empty; + + [Required] + public string Status { get; set; } = "ALL"; + + [Required] + public int Page = 1; + + [Required] + public int PageSize = 10; + + public string? Keyword { get; set; } = string.Empty; + } +} diff --git a/BMA.EHR.Leave.Service/DTOs/LeaveRequest/GetLeaveRequestTableResultDto.cs b/BMA.EHR.Leave.Service/DTOs/LeaveRequest/GetLeaveRequestTableResultDto.cs new file mode 100644 index 00000000..0857e364 --- /dev/null +++ b/BMA.EHR.Leave.Service/DTOs/LeaveRequest/GetLeaveRequestTableResultDto.cs @@ -0,0 +1,19 @@ +namespace BMA.EHR.Leave.Service.DTOs.LeaveRequest +{ + public class GetLeaveRequestTableResultDto + { + public Guid Id { get; set; } + + public string LeaveTypeName { get; set; } + + public Guid LeaveTypeId { get; set; } + + public string FullName { get; set; } + + public DateTime DateSendLeave { get; set; } + + public string Status { get; set; } + + public bool IsDelete { get; set; } + } +}