fix api defect

This commit is contained in:
Suphonchai Phoonsawat 2023-11-15 15:38:39 +07:00
parent 8d3c646151
commit 1a29f8151d
15 changed files with 78 additions and 37 deletions

View file

@ -93,7 +93,7 @@ namespace BMA.EHR.Application.Repositories.Leaves.TimeAttendants
public async Task<List<UserTimeStamp>> GetTimeStampHistoryForAdminAsync(DateTime startDate,DateTime endDate, int page = 1, int pageSize = 10, string keyword = "") public async Task<List<UserTimeStamp>> GetTimeStampHistoryForAdminAsync(DateTime startDate,DateTime endDate, int page = 1, int pageSize = 10, string keyword = "")
{ {
var data = await _dbContext.Set<UserTimeStamp>() var data = await _dbContext.Set<UserTimeStamp>()
.Where(u => u.CheckIn >= startDate && u.CheckIn <= endDate) .Where(u => u.CheckIn.Date >= startDate.Date && u.CheckIn.Date <= endDate.Date)
.OrderBy(u => u.CheckIn) .OrderBy(u => u.CheckIn)
.Skip((page - 1) * pageSize) .Skip((page - 1) * pageSize)
.Take(pageSize) .Take(pageSize)

View file

@ -8,7 +8,7 @@
<DockerDefaultTargetOS>Linux</DockerDefaultTargetOS> <DockerDefaultTargetOS>Linux</DockerDefaultTargetOS>
<GenerateDocumentationFile>True</GenerateDocumentationFile> <GenerateDocumentationFile>True</GenerateDocumentationFile>
<DockerfileContext>.</DockerfileContext> <DockerfileContext>.</DockerfileContext>
<RootNamespace>BMA.EHR.Command.Service</RootNamespace> <RootNamespace>BMA.EHR.Leave.Service</RootNamespace>
<NoWarn>$(NoWarn);1591</NoWarn> <NoWarn>$(NoWarn);1591</NoWarn>
</PropertyGroup> </PropertyGroup>

View file

@ -4,7 +4,7 @@ using Microsoft.OpenApi.Models;
using Swashbuckle.AspNetCore.SwaggerGen; using Swashbuckle.AspNetCore.SwaggerGen;
using System.Reflection; using System.Reflection;
namespace BMA.EHR.Command.Service namespace BMA.EHR.Leave.Service
{ {
public class ConfigureSwaggerOptions : IConfigureNamedOptions<SwaggerGenOptions> public class ConfigureSwaggerOptions : IConfigureNamedOptions<SwaggerGenOptions>
{ {

View file

@ -1,11 +1,11 @@
using BMA.EHR.Application.Repositories; using BMA.EHR.Application.Repositories;
using BMA.EHR.Application.Repositories.Leaves.TimeAttendants; using BMA.EHR.Application.Repositories.Leaves.TimeAttendants;
using BMA.EHR.Command.Service.DTOs.CheckIn;
using BMA.EHR.Command.Service.DTOs.DutyTime;
using BMA.EHR.Domain.Common; using BMA.EHR.Domain.Common;
using BMA.EHR.Domain.Models.Leave.TimeAttendants; using BMA.EHR.Domain.Models.Leave.TimeAttendants;
using BMA.EHR.Domain.Shared; using BMA.EHR.Domain.Shared;
using BMA.EHR.Infrastructure.Persistence; using BMA.EHR.Infrastructure.Persistence;
using BMA.EHR.Leave.Service.DTOs.CheckIn;
using BMA.EHR.Leave.Service.DTOs.DutyTime;
using iTextSharp.text; using iTextSharp.text;
using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc;
@ -14,7 +14,7 @@ using Swashbuckle.AspNetCore.Annotations;
using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations;
using System.Security.Claims; using System.Security.Claims;
namespace BMA.EHR.Command.Service.Controllers namespace BMA.EHR.Leave.Service.Controllers
{ {
[Route("api/v{version:apiVersion}/leave")] [Route("api/v{version:apiVersion}/leave")]
[ApiVersion("1.0")] [ApiVersion("1.0")]
@ -461,14 +461,14 @@ namespace BMA.EHR.Command.Service.Controllers
CheckInId = d.Id, CheckInId = d.Id,
CheckInDate = d.CheckIn.Date, CheckInDate = d.CheckIn.Date,
CheckInTime = d.CheckIn.ToString("HH:mm"), CheckInTime = d.CheckIn.ToString("HH:mm:ss"),
CheckInLocation = d.CheckInPOI, CheckInLocation = d.CheckInPOI,
CheckInStatus = DateTime.Parse(d.CheckIn.ToString("yyyy-MM-dd HH:mm")) > CheckInStatus = DateTime.Parse(d.CheckIn.ToString("yyyy-MM-dd HH:mm")) >
DateTime.Parse($"{d.CheckIn.Date.ToString("yyyy-MM-dd")} {duty.StartTimeMorning}") ? DateTime.Parse($"{d.CheckIn.Date.ToString("yyyy-MM-dd")} {duty.StartTimeMorning}") ?
"LATE" : "LATE" :
"NORMAL", "NORMAL",
CheckOutDate = d.CheckOut == null ? null : d.CheckOut.Value.Date, CheckOutDate = d.CheckOut == null ? null : d.CheckOut.Value.Date,
CheckOutTime = d.CheckOut == null ? "" : d.CheckOut.Value.ToString("HH:mm"), CheckOutTime = d.CheckOut == null ? "" : d.CheckOut.Value.ToString("HH:mm:ss"),
CheckOutLocation = d.CheckOutPOI ?? "", CheckOutLocation = d.CheckOutPOI ?? "",
CheckOutStatus = d.CheckOut == null ? null : DateTime.Parse(d.CheckOut.Value.ToString("yyyy-MM-dd HH:mm")) < CheckOutStatus = d.CheckOut == null ? null : DateTime.Parse(d.CheckOut.Value.ToString("yyyy-MM-dd HH:mm")) <
DateTime.Parse($"{d.CheckIn.Date.ToString("yyyy-MM-dd")} {duty.EndTimeAfternoon}") ? DateTime.Parse($"{d.CheckIn.Date.ToString("yyyy-MM-dd")} {duty.EndTimeAfternoon}") ?
@ -495,30 +495,41 @@ namespace BMA.EHR.Command.Service.Controllers
[ProducesResponseType(StatusCodes.Status500InternalServerError)] [ProducesResponseType(StatusCodes.Status500InternalServerError)]
public async Task<ActionResult<ResponseObject>> LogRecordAsync([Required] DateTime startDate, [Required] DateTime endDate, int page = 1, int pageSize = 10, string keyword = "") public async Task<ActionResult<ResponseObject>> LogRecordAsync([Required] DateTime startDate, [Required] DateTime endDate, int page = 1, int pageSize = 10, string keyword = "")
{ {
if (startDate.Date > endDate.Date)
{
return Error(new Exception("วันเริ่มต้นต้องมีค่าน้อยกว่าหรือเท่ากับวันสิ้นสุด"), (int)StatusCodes.Status400BadRequest);
}
var imgUrl = $"{_configuration["MinIO:Endpoint"]}{_configuration["MinIO:BucketName"]}"; var imgUrl = $"{_configuration["MinIO:Endpoint"]}{_configuration["MinIO:BucketName"]}";
var data = (await _userTimeStampRepository.GetTimeStampHistoryForAdminAsync(startDate, endDate, page, pageSize, keyword)) var data = (await _userTimeStampRepository.GetTimeStampHistoryForAdminAsync(startDate, endDate, page, pageSize, keyword))
.Select(d => new CheckInHistoryForAdminDto .Select(d => new CheckInHistoryForAdminDto
{ {
CheckInId = d.Id, Id = d.Id,
FullName = _userProfileRepository.GetUserFullName(d.KeycloakUserId), FullName = _userProfileRepository.GetUserFullName(d.KeycloakUserId),
CheckInDate = d.CheckIn.Date, CheckInDate = d.CheckIn.Date,
CheckInTime = d.CheckIn.ToString("HH:mm"), CheckInTime = d.CheckIn.ToString("HH:mm:ss"),
CheckInLocation = d.CheckInPOI, CheckInLocation = d.CheckInPOI,
CheckInLat = d.CheckInLat, CheckInLat = d.CheckInLat,
CheckInLon = d.CheckInLon, CheckInLon = d.CheckInLon,
CheckInImageUrl = $"{imgUrl}/{d.CheckInImageUrl}", //CheckInImageUrl = $"{imgUrl}/{d.CheckInImageUrl}",
CheckOutDate = d.CheckOut == null ? null : d.CheckOut.Value.Date, CheckOutDate = d.CheckOut == null ? null : d.CheckOut.Value.Date,
CheckOutTime = d.CheckOut == null ? "" : d.CheckOut.Value.ToString("HH:mm"), CheckOutTime = d.CheckOut == null ? "" : d.CheckOut.Value.ToString("HH:mm:ss"),
CheckOutLocation = d.CheckOut == null ? "" : d.CheckOutPOI, CheckOutLocation = d.CheckOut == null ? "" : d.CheckOutPOI,
CheckOutLat = d.CheckOut == null ? null : d.CheckOutLat, CheckOutLat = d.CheckOut == null ? null : d.CheckOutLat,
CheckOutLon = d.CheckOut == null ? null : d.CheckOutLon, CheckOutLon = d.CheckOut == null ? null : d.CheckOutLon,
CheckOutImageUrl = d.CheckOut == null ? "" : $"{imgUrl}/{d.CheckOutImageUrl}", //CheckOutImageUrl = d.CheckOut == null ? "" : $"{imgUrl}/{d.CheckOutImageUrl}",
}) })
.ToList(); .ToList();
return Success(data); if (data == null || data.Count == 0)
{
return Error(new Exception(GlobalMessages.DataNotFound), (int)StatusCodes.Status404NotFound);
}
return Success(new { data = data, total = data.Count });
} }
/// <summary> /// <summary>
@ -537,30 +548,30 @@ namespace BMA.EHR.Command.Service.Controllers
{ {
var imgUrl = $"{_configuration["MinIO:Endpoint"]}{_configuration["MinIO:BucketName"]}"; var imgUrl = $"{_configuration["MinIO:Endpoint"]}{_configuration["MinIO:BucketName"]}";
var d = (await _userTimeStampRepository.GetTimeStampById(id)); var d = (await _userTimeStampRepository.GetTimeStampById(id));
if(d == null) if (d == null)
{ {
throw new Exception(GlobalMessages.DataNotFound); throw new Exception(GlobalMessages.DataNotFound);
} }
else else
{ {
var result = new CheckInHistoryForAdminDto var result = new CheckInDetailForAdminDto
{ {
CheckInId = d.Id, Id = d.Id,
FullName = _userProfileRepository.GetUserFullName(d.KeycloakUserId), FullName = _userProfileRepository.GetUserFullName(d.KeycloakUserId),
CheckInDate = d.CheckIn.Date, CheckInDate = d.CheckIn.Date,
CheckInTime = d.CheckIn.ToString("HH:mm"), CheckInTime = d.CheckIn.ToString("HH:mm:ss"),
CheckInLocation = d.CheckInPOI, CheckInLocation = d.CheckInPOI,
CheckInLat = d.CheckInLat, CheckInLat = d.CheckInLat,
CheckInLon = d.CheckInLon, CheckInLon = d.CheckInLon,
CheckInImageUrl = $"{imgUrl}/{d.CheckInImageUrl}", CheckInImg = $"{imgUrl}/{d.CheckInImageUrl}",
CheckOutDate = d.CheckOut == null ? null : d.CheckOut.Value.Date, CheckOutDate = d.CheckOut == null ? null : d.CheckOut.Value.Date,
CheckOutTime = d.CheckOut == null ? "" : d.CheckOut.Value.ToString("HH:mm"), CheckOutTime = d.CheckOut == null ? "" : d.CheckOut.Value.ToString("HH:mm:ss"),
CheckOutLocation = d.CheckOut == null ? "" : d.CheckOutPOI, CheckOutLocation = d.CheckOut == null ? "" : d.CheckOutPOI,
CheckOutLat = d.CheckOut == null ? null : d.CheckOutLat, CheckOutLat = d.CheckOut == null ? null : d.CheckOutLat,
CheckOutLon = d.CheckOut == null ? null : d.CheckOutLon, CheckOutLon = d.CheckOut == null ? null : d.CheckOutLon,
CheckOutImageUrl = d.CheckOut == null ? "" : $"{imgUrl}/{d.CheckOutImageUrl}", CheckOutImg = d.CheckOut == null ? "" : $"{imgUrl}/{d.CheckOutImageUrl}",
}; };
return Success(result); return Success(result);

View file

@ -0,0 +1,33 @@
namespace BMA.EHR.Leave.Service.DTOs.CheckIn
{
public class CheckInDetailForAdminDto
{
public Guid Id { get; set; } = Guid.Empty;
public string FullName { get; set; } = string.Empty;
public DateTime? CheckInDate { get; set; } = DateTime.MinValue;
public string? CheckInTime { get; set; } = "00:00";
public string? CheckInLocation { get; set; } = string.Empty;
public double? CheckInLat { get; set; } = 0;
public double? CheckInLon { get; set; } = 0;
public string? CheckInImg { get; set; } = string.Empty;
public DateTime? CheckOutDate { get; set; } = DateTime.MinValue;
public string? CheckOutTime { get; set; } = "00:00";
public string? CheckOutLocation { get; set; } = string.Empty;
public double? CheckOutLat { get; set; } = 0;
public double? CheckOutLon { get; set; } = 0;
public string? CheckOutImg { get; set; } = string.Empty;
}
}

View file

@ -1,4 +1,4 @@
namespace BMA.EHR.Command.Service.DTOs.CheckIn namespace BMA.EHR.Leave.Service.DTOs.CheckIn
{ {
public class CheckInHistoryDto public class CheckInHistoryDto
{ {

View file

@ -1,8 +1,8 @@
namespace BMA.EHR.Command.Service.DTOs.CheckIn namespace BMA.EHR.Leave.Service.DTOs.CheckIn
{ {
public class CheckInHistoryForAdminDto public class CheckInHistoryForAdminDto
{ {
public Guid CheckInId { get; set; } = Guid.Empty; public Guid Id { get; set; } = Guid.Empty;
public string FullName { get; set; } = string.Empty; public string FullName { get; set; } = string.Empty;
@ -16,7 +16,7 @@
public double? CheckInLon { get; set; } = 0; public double? CheckInLon { get; set; } = 0;
public string? CheckInImageUrl { get; set; } = string.Empty; //public string? CheckInImageUrl { get; set; } = string.Empty;
public DateTime? CheckOutDate { get; set; } = DateTime.MinValue; public DateTime? CheckOutDate { get; set; } = DateTime.MinValue;
@ -28,6 +28,6 @@
public double? CheckOutLon { get; set; } = 0; public double? CheckOutLon { get; set; } = 0;
public string? CheckOutImageUrl { get; set; } = string.Empty; //public string? CheckOutImageUrl { get; set; } = string.Empty;
} }
} }

View file

@ -1,7 +1,4 @@
using Microsoft.EntityFrameworkCore; namespace BMA.EHR.Leave.Service.DTOs.CheckIn
using System.ComponentModel.DataAnnotations;
namespace BMA.EHR.Command.Service.DTOs.CheckIn
{ {
public class CheckInResultDto public class CheckInResultDto
{ {

View file

@ -1,6 +1,6 @@
using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations;
namespace BMA.EHR.Command.Service.DTOs.CheckIn namespace BMA.EHR.Leave.Service.DTOs.CheckIn
{ {
public class CheckTimeDto public class CheckTimeDto
{ {

View file

@ -1,7 +1,7 @@
using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore;
using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations;
namespace BMA.EHR.Command.Service.DTOs.DutyTime namespace BMA.EHR.Leave.Service.DTOs.DutyTime
{ {
public class CreateDutyTimeDto public class CreateDutyTimeDto
{ {

View file

@ -1,7 +1,7 @@
using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore;
using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations;
namespace BMA.EHR.Command.Service.DTOs.DutyTime namespace BMA.EHR.Leave.Service.DTOs.DutyTime
{ {
public class UpdateDutyTimeDto public class UpdateDutyTimeDto
{ {

View file

@ -1,4 +1,4 @@
namespace BMA.EHR.Command.Service.DTOs.POI namespace BMA.EHR.Leave.Service.DTOs.POI
{ {
public class GetPOIDto public class GetPOIDto
{ {

View file

@ -1,4 +1,4 @@
namespace BMA.EHR.Command.Service.DTOs.POI namespace BMA.EHR.Leave.Service.DTOs.POI
{ {
public class GetPOIResultDto public class GetPOIResultDto
{ {

View file

@ -1,4 +1,4 @@
namespace BMA.EHR.Command.Service.DTOs.POI namespace BMA.EHR.Leave.Service.DTOs.POI
{ {
public class POIResultDto public class POIResultDto
{ {

View file

@ -1,5 +1,5 @@
using BMA.EHR.Application; using BMA.EHR.Application;
using BMA.EHR.Command.Service; using BMA.EHR.Leave.Service;
using BMA.EHR.Domain.Middlewares; using BMA.EHR.Domain.Middlewares;
using BMA.EHR.Infrastructure; using BMA.EHR.Infrastructure;
using BMA.EHR.Infrastructure.Persistence; using BMA.EHR.Infrastructure.Persistence;