- LV2_004 - รายละเอียดการลา (USER)
- LV2_010 - รายการลา (ADMIN)
This commit is contained in:
Suphonchai Phoonsawat 2023-11-30 10:15:44 +07:00
parent dd4a409855
commit 0109cc5d6d
5 changed files with 349 additions and 1 deletions

View file

@ -9,6 +9,8 @@ using BMA.EHR.Infrastructure.Persistence;
using BMA.EHR.Leave.Service.DTOs.LeaveRequest;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.Routing;
using Sentry;
using Swashbuckle.AspNetCore.Annotations;
using System.Security.Claims;
@ -436,6 +438,149 @@ namespace BMA.EHR.Leave.Service.Controllers
}
/// <summary>
/// LV2_004 - รายละเอียดการลา (USER)
/// </summary>
/// <returns>
/// </returns>
/// <response code="200">เมื่อทำรายการสำเร็จ</response>
/// <response code="401">ไม่ได้ Login เข้าระบบ</response>
/// <response code="500">เมื่อเกิดข้อผิดพลาดในการทำงาน</response>
[HttpGet("user/{id:guid}")]
[ProducesResponseType(StatusCodes.Status200OK)]
[ProducesResponseType(StatusCodes.Status401Unauthorized)]
[ProducesResponseType(StatusCodes.Status500InternalServerError)]
public async Task<ActionResult<ResponseObject>> GetLeaveRequestByIdAsync(Guid id)
{
var rawData = await _leaveRequestRepository.GetByIdAsync(id);
var thisYear = DateTime.Now.Year;
if (rawData == null)
{
return Error(GlobalMessages.DataNotFound, StatusCodes.Status404NotFound);
}
var profile = await _userProfileRepository.GetProfileByKeycloakIdAsync(rawData.KeycloakUserId);
if (profile == null)
{
return Error(GlobalMessages.DataNotFound, StatusCodes.Status404NotFound);
}
var lastSalary = profile.Salaries.OrderByDescending(x => x.Order).FirstOrDefault();
var lastSalaryAmount = lastSalary == null ? 0 : lastSalary.Amount ?? 0;
var lastLeaveRequest = await _leaveRequestRepository.GetLastLeaveRequestByTypeForUserAsync(rawData.KeycloakUserId, rawData.Type.Id);
var result = new GetLeaveRequestByIdDto
{
Id = rawData.Id,
LeaveTypeName = rawData.Type.Name,
LeaveTypeId = rawData.Type.Id,
FullName = $"{profile.Prefix.Name}{profile.FirstName} {profile.LastName}",
DateSendLeave = rawData.CreatedAt,
Status = rawData.LeaveStatus,
LeaveStartDate = rawData.LeaveStartDate,
LeaveEndDate = rawData.LeaveEndDate,
LeaveWrote = rawData.LeaveWrote,
LeaveAddress = rawData.LeaveAddress,
LeaveNumber = rawData.LeaveNumber,
LeaveDetail = rawData.LeaveDetail,
LeaveDocument = await _minIOService.ImagesPath(rawData.LeaveDocument.Id),
LeaveDraftDocument = await _minIOService.ImagesPath(rawData.LeaveDraftDocument.Id),
LeaveLastStart = lastLeaveRequest == null ? null : lastLeaveRequest.LeaveStartDate,
LeaveLastEnd = lastLeaveRequest == null ? null : lastLeaveRequest.LeaveEndDate,
LeaveTotal = rawData.LeaveStartDate.DiffDay(rawData.LeaveEndDate),
LeaveBirthDate = profile.BirthDate,
LeaveGovernmentDate = profile.DateAppoint == null ? null : profile.DateAppoint.Value,
LeaveSalary = lastSalary == null ? 0 : lastSalaryAmount,
LeaveSalaryText = lastSalary == null ? "" : ((int)lastSalaryAmount).ToThaiBahtText(false),
WifeDayName = rawData.WifeDayName,
WifeDayDateBorn = rawData.WifeDayDateBorn,
RestDayOldTotal = rawData.RestDayOldTotal,
RestDayCurrentTotal = rawData.RestDayCurrentTotal,
OrdainDayStatus = rawData.OrdainDayStatus,
OrdainDayLocationName = rawData.OrdainDayLocationName,
OrdainDayLocationAddress = rawData.OrdainDayLocationAddress,
OrdainDayLocationNumber = rawData.OrdainDayLocationNumber,
OrdainDayOrdination = rawData.OrdainDayOrdination,
OrdainDayBuddhistLentName = rawData.OrdainDayBuddhistLentName,
OrdainDayBuddhistLentAddress = rawData.OrdainDayBuddhistLentAddress,
HajjDayStatus = rawData.HajjDayStatus,
AbsentDaySummon = rawData.AbsentDaySummon,
AbsentDayLocation = rawData.AbsentDayLocation,
AbsentDayRegistorDate = rawData.AbsentDayRegistorDate,
AbsentDayGetIn = rawData.AbsentDayGetIn,
AbsentDayAt = rawData.AbsentDayAt,
StudyDaySubject = rawData.StudyDaySubject,
StudyDayDegreeLevel = rawData.StudyDayDegreeLevel,
StudyDayUniversityName = rawData.StudyDayUniversityName,
StudyDayTrainingSubject = rawData.StudyDayTrainingSubject,
StudyDayTrainingName = rawData.StudyDayTrainingName,
StudyDayCountry = rawData.StudyDayCountry,
StudyDayScholarship = rawData.StudyDayScholarship,
CoupleDayName = rawData.CoupleDayName,
CoupleDayPosition = rawData.CoupleDayPosition,
CoupleDayLevel = rawData.CoupleDayLevel,
CoupleDayLevelCountry = rawData.CoupleDayLevelCountry,
CoupleDayCountryHistory = rawData.CoupleDayCountryHistory,
CoupleDayTotalHistory = rawData.CoupleDayTotalHistory,
CoupleDayStartDateHistory = rawData.CoupleDayStartDateHistory,
CoupleDayEndDateHistory = rawData.CoupleDayEndDateHistory,
CoupleDaySumTotalHistory = rawData.CoupleDaySumTotalHistory,
};
return Success(result);
}
/// <summary>
/// LV2_010 - รายการลา (ADMIN)
/// </summary>
/// <returns>
/// </returns>
/// <response code="200">เมื่อทำรายการสำเร็จ</response>
/// <response code="401">ไม่ได้ Login เข้าระบบ</response>
/// <response code="500">เมื่อเกิดข้อผิดพลาดในการทำงาน</response>
[HttpPost("admin")]
[ProducesResponseType(StatusCodes.Status200OK)]
[ProducesResponseType(StatusCodes.Status401Unauthorized)]
[ProducesResponseType(StatusCodes.Status500InternalServerError)]
public async Task<ActionResult<ResponseObject>> GetLeaveRequestForAdminAsync([FromBody] GetLeaveRequestForAdminDto req)
{
var rawData = await _leaveRequestRepository.GetLeaveRequestForAdminAsync(req.Year, req.Type, req.Status);
var result = new List<GetLeaveRequestForAdminResultDto>();
foreach (var item in rawData)
{
var profile = await _userProfileRepository.GetProfileByKeycloakIdAsync(item.KeycloakUserId);
var res = new GetLeaveRequestForAdminResultDto
{
Id = item.Id,
LeaveTypeId = item.Type.Id,
LeaveTypeName = item.Type.Name,
FullName = $"{profile.Prefix.Name}{profile.FirstName} {profile.LastName}",
DateSendLeave = item.CreatedAt.Date,
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

@ -0,0 +1,116 @@
using Microsoft.EntityFrameworkCore;
using System.ComponentModel.DataAnnotations;
namespace BMA.EHR.Leave.Service.DTOs.LeaveRequest
{
public class GetLeaveRequestByIdDto
{
public Guid Id { get; set; } = Guid.Empty;
public string LeaveTypeName { get; set; } = string.Empty;
public Guid LeaveTypeId { get; set; } = Guid.Empty;
public string FullName { get; set; } = string.Empty;
public DateTime DateSendLeave { get; set; } = DateTime.MinValue;
public string Status { get; set; } = string.Empty;
public DateTime LeaveStartDate { get; set; } = DateTime.Now;
public DateTime LeaveEndDate { get; set; } = DateTime.Now;
public string LeaveWrote { get; set; } = string.Empty;
public string LeaveAddress { get; set; } = string.Empty;
public string LeaveNumber { get; set; } = string.Empty;
public string LeaveDetail { get; set; } = string.Empty;
public string LeaveDocument { get; set; }
public string LeaveDraftDocument { get; set; }
public DateTime? LeaveLastStart { get; set; } = DateTime.MinValue;
public DateTime? LeaveLastEnd { get; set; } = DateTime.MinValue;
public float LeaveTotal { get; set; } = 0;
public DateTime? LeaveBirthDate { get; set; } = DateTime.MinValue;
public DateTime? LeaveGovernmentDate { get; set; } = DateTime.MinValue;
public double LeaveSalary { get; set; } = 0;
public string LeaveSalaryText { get; set; } = string.Empty;
public string WifeDayName { get; set; } = string.Empty;
public string WifeDayDateBorn { get; set; } = string.Empty;
public int RestDayOldTotal { get; set; } = 0;
public int RestDayCurrentTotal { get; set; } = 0;
public bool OrdainDayStatus { get; set; } = false;
public string OrdainDayLocationName { get; set; } = string.Empty;
public string OrdainDayLocationAddress { get; set; } = string.Empty;
public string OrdainDayLocationNumber { get; set; } = string.Empty;
public DateTime OrdainDayOrdination { get; set; } = DateTime.Now;
public string OrdainDayBuddhistLentName { get; set; } = string.Empty;
public string OrdainDayBuddhistLentAddress { get; set; } = string.Empty;
public bool HajjDayStatus { get; set; } = false;
public string AbsentDaySummon { get; set; } = string.Empty;
public string AbsentDayLocation { get; set; } = string.Empty;
public DateTime AbsentDayRegistorDate { get; set; } = DateTime.Now;
public string AbsentDayGetIn { get; set; } = string.Empty;
public string AbsentDayAt { get; set; } = string.Empty;
public string StudyDaySubject { get; set; } = string.Empty;
public string StudyDayDegreeLevel { get; set; } = string.Empty;
public string StudyDayUniversityName { get; set; } = string.Empty;
public string StudyDayTrainingSubject { get; set; } = string.Empty;
public string StudyDayTrainingName { get; set; } = string.Empty;
public string StudyDayCountry { get; set; } = string.Empty;
public string StudyDayScholarship { get; set; } = string.Empty;
public string CoupleDayName { get; set; } = string.Empty;
public string CoupleDayPosition { get; set; } = string.Empty;
public string CoupleDayLevel { get; set; } = string.Empty;
public string CoupleDayLevelCountry { get; set; } = string.Empty;
public string CoupleDayCountryHistory { get; set; } = string.Empty;
public string CoupleDayTotalHistory { get; set; } = string.Empty;
public DateTime CoupleDayStartDateHistory { get; set; } = DateTime.Now;
public DateTime CoupleDayEndDateHistory { get; set; } = DateTime.Now;
public string CoupleDaySumTotalHistory { get; set; } = string.Empty;
}
}

View file

@ -0,0 +1,25 @@
using Org.BouncyCastle.Asn1.X509;
using System.ComponentModel.DataAnnotations;
namespace BMA.EHR.Leave.Service.DTOs.LeaveRequest
{
public class GetLeaveRequestForAdminDto
{
[Required]
public int Year { get; set; } = 0;
[Required]
public Guid Type { get; set; } = Guid.Empty;
[Required]
public string Status { get; set; } = string.Empty;
[Required]
public int Page { get; set; } = 1;
[Required]
public int PageSize { get; set; } = 10;
public string Keyword { get; set; } = string.Empty;
}
}

View file

@ -0,0 +1,17 @@
namespace BMA.EHR.Leave.Service.DTOs.LeaveRequest
{
public class GetLeaveRequestForAdminResultDto
{
public Guid Id { get; set; } = Guid.Empty;
public string LeaveTypeName { get; set; } = string.Empty;
public Guid LeaveTypeId { get; set; } = Guid.Empty;
public string FullName { get; set; } = string.Empty;
public DateTime DateSendLeave { get; set; } = DateTime.MinValue;
public string Status { get; set; } = string.Empty;
}
}