api ลา 04,05 และ 11

This commit is contained in:
Suphonchai Phoonsawat 2023-11-29 18:45:11 +07:00
parent cffb53c1f5
commit e130ce00d7
7 changed files with 198 additions and 4 deletions

View file

@ -58,6 +58,35 @@ namespace BMA.EHR.Application.Repositories.Leaves.LeaveRequests
#region " Methods "
public async Task<List<LeaveRequest>> GetLeaveRequestByYearAsync(int year)
{
var data = await _dbContext.Set<LeaveRequest>().AsQueryable()
.Include(x => x.Type)
.Where(x => x.LeaveStartDate.Year == year)
.ToListAsync();
return data;
}
public async Task<List<LeaveRequest>> GetLeaveRequestByUserIdAsync(Guid keycloakUserId, int year, Guid type, string status)
{
var rawData = _dbContext.Set<LeaveRequest>().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<int> GetRestDayTotalByYearForUserAsync(Guid keycloakUserId, int year)
{
var leaveType = await _dbContext.Set<LeaveType>().AsQueryable().FirstOrDefaultAsync(l => l.Code.Trim().ToUpper() == "LV-005");

View file

@ -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);
}
/// <summary>
/// LV2_004 - รายการลา Calendar (USER/ADMIN)
/// </summary>
/// <returns>
/// </returns>
/// <response code="200">เมื่อทำรายการสำเร็จ</response>
/// <response code="401">ไม่ได้ Login เข้าระบบ</response>
/// <response code="500">เมื่อเกิดข้อผิดพลาดในการทำงาน</response>
[HttpPost("user/calendar")]
[ProducesResponseType(StatusCodes.Status200OK)]
[ProducesResponseType(StatusCodes.Status401Unauthorized)]
[ProducesResponseType(StatusCodes.Status500InternalServerError)]
public async Task<ActionResult<ResponseObject>> GetLeaveRequestCalendarAsync([FromBody] GetLeaveRequestCalendarDto req)
{
var thisYear = DateTime.Now.Year;
var data = await _leaveRequestRepository.GetLeaveRequestByYearAsync(thisYear);
var result = new List<GetLeaveRequestCalendarResultDto>();
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);
}
/// <summary>
/// LV2_005 - รายการลา Table (USER)
/// </summary>
/// <returns>
/// </returns>
/// <response code="200">เมื่อทำรายการสำเร็จ</response>
/// <response code="401">ไม่ได้ Login เข้าระบบ</response>
/// <response code="500">เมื่อเกิดข้อผิดพลาดในการทำงาน</response>
[HttpPost("user/table")]
[ProducesResponseType(StatusCodes.Status200OK)]
[ProducesResponseType(StatusCodes.Status401Unauthorized)]
[ProducesResponseType(StatusCodes.Status500InternalServerError)]
public async Task<ActionResult<ResponseObject>> 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<GetLeaveRequestTableResultDto>();
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
}
}

View file

@ -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 "
/// <summary>
/// List รายการประเภทการลา
/// LV2_011 - รายการประเภทการลา (ADMIN)
/// </summary>
/// <returns>
/// </returns>
/// <response code="200">เมื่อทำรายการสำเร็จ</response>
/// <response code="401">ไม่ได้ Login เข้าระบบ</response>
/// <response code="500">เมื่อเกิดข้อผิดพลาดในการทำงาน</response>
[HttpPost]
[HttpGet("type")]
[ProducesResponseType(StatusCodes.Status200OK)]
[ProducesResponseType(StatusCodes.Status401Unauthorized)]
[ProducesResponseType(StatusCodes.Status500InternalServerError)]

View file

@ -0,0 +1,7 @@
namespace BMA.EHR.Leave.Service.DTOs.LeaveRequest
{
public class GetLeaveRequestCalendarDto
{
public int Year { get; set; } = DateTime.Now.Year;
}
}

View file

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

View file

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

View file

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