fix defect 12/12/66 14:16

This commit is contained in:
Suphonchai Phoonsawat 2023-12-12 14:17:00 +07:00
parent d4ae5f8c53
commit 4f617ca892
10 changed files with 192 additions and 65 deletions

35
.vscode/launch.json vendored Normal file
View file

@ -0,0 +1,35 @@
{
"version": "0.2.0",
"configurations": [
{
// Use IntelliSense to find out which attributes exist for C# debugging
// Use hover for the description of the existing attributes
// For further information visit https://github.com/dotnet/vscode-csharp/blob/main/debugger-launchjson.md.
"name": ".NET Core Launch (web)",
"type": "coreclr",
"request": "launch",
"preLaunchTask": "build",
// If you have changed target frameworks, make sure to update the program path.
"program": "${workspaceFolder}/BMA.EHR.Leave.Service/bin/Debug/net7.0/BMA.EHR.Leave.Service.dll",
"args": [],
"cwd": "${workspaceFolder}/BMA.EHR.Leave.Service",
"stopAtEntry": false,
// Enable launching a web browser when ASP.NET Core starts. For more information: https://aka.ms/VSCode-CS-LaunchJson-WebBrowser
"serverReadyAction": {
"action": "openExternally",
"pattern": "\\bNow listening on:\\s+(https?://\\S+)"
},
"env": {
"ASPNETCORE_ENVIRONMENT": "Development"
},
"sourceFileMap": {
"/Views": "${workspaceFolder}/Views"
}
},
{
"name": ".NET Core Attach",
"type": "coreclr",
"request": "attach"
}
]
}

41
.vscode/tasks.json vendored Normal file
View file

@ -0,0 +1,41 @@
{
"version": "2.0.0",
"tasks": [
{
"label": "build",
"command": "dotnet",
"type": "process",
"args": [
"build",
"${workspaceFolder}/BMA.EHR.Solution.sln",
"/property:GenerateFullPaths=true",
"/consoleloggerparameters:NoSummary;ForceNoAlign"
],
"problemMatcher": "$msCompile"
},
{
"label": "publish",
"command": "dotnet",
"type": "process",
"args": [
"publish",
"${workspaceFolder}/BMA.EHR.Solution.sln",
"/property:GenerateFullPaths=true",
"/consoleloggerparameters:NoSummary;ForceNoAlign"
],
"problemMatcher": "$msCompile"
},
{
"label": "watch",
"command": "dotnet",
"type": "process",
"args": [
"watch",
"run",
"--project",
"${workspaceFolder}/BMA.EHR.Solution.sln"
],
"problemMatcher": "$msCompile"
}
]
}

View file

@ -39,6 +39,8 @@ namespace BMA.EHR.Application
services.AddTransient<HolidayRepository>(); services.AddTransient<HolidayRepository>();
//services.AddTransient<UserDutyTimeRepository>();
return services; return services;
} }

View file

@ -138,6 +138,23 @@ namespace BMA.EHR.Application.Repositories
} }
} }
public Guid? GetRootOcId(Guid ocId)
{
try
{
var data = _dbContext.Set<OrganizationEntity>()
.FirstOrDefault(o => o.Id == ocId);
return data == null ? Guid.Empty : data.OrganizationAgencyId;
}
catch
{
throw;
}
}
#endregion #endregion
} }
} }

View file

@ -175,7 +175,7 @@ namespace BMA.EHR.Leave.Service.Controllers
EndTimeMorning = data.EndTimeMorning, EndTimeMorning = data.EndTimeMorning,
StartTimeAfternoon = data.StartTimeAfternoon, StartTimeAfternoon = data.StartTimeAfternoon,
EndTimeAfternoon = data.EndTimeAfternoon, EndTimeAfternoon = data.EndTimeAfternoon,
IsActive = true, IsActive = data.IsActive,
IsDefault = true, IsDefault = true,
}; };
@ -244,7 +244,7 @@ namespace BMA.EHR.Leave.Service.Controllers
} }
} }
oldData.Description = data.Description; oldData.Description = data.Description ?? "";
oldData.IsDefault = data.IsDefault; oldData.IsDefault = data.IsDefault;
oldData.IsActive = data.IsActive; oldData.IsActive = data.IsActive;
@ -1309,8 +1309,8 @@ namespace BMA.EHR.Leave.Service.Controllers
{ {
Id = data.Id, Id = data.Id,
CheckInTime = checkInData == null ? "00:00" : checkInData.CheckIn.ToString("HH:mm"), CheckInTime = checkInData == null ? duty.StartTimeMorning : checkInData.CheckIn.ToString("HH:mm"),
CheckOutTime = checkInData == null ? "00:00" : checkInData.CheckOut == null ? "00:00" : checkInData.CheckOut.Value.ToString("HH:mm"), CheckOutTime = checkInData == null ? duty.EndTimeAfternoon : checkInData.CheckOut == null ? "00:00" : checkInData.CheckOut.Value.ToString("HH:mm"),
CheckInStatus = checkInData == null ? null : CheckInStatus = checkInData == null ? null :
DateTime.Parse(checkInData.CheckIn.ToString("yyyy-MM-dd HH:mm")) > DateTime.Parse(checkInData.CheckIn.ToString("yyyy-MM-dd HH:mm")) >

View file

@ -13,6 +13,7 @@ using Microsoft.AspNetCore.Mvc.Routing;
using Sentry; using Sentry;
using Swashbuckle.AspNetCore.Annotations; using Swashbuckle.AspNetCore.Annotations;
using System.Security.Claims; using System.Security.Claims;
using BMA.EHR.Application.Repositories.Commands;
namespace BMA.EHR.Leave.Service.Controllers namespace BMA.EHR.Leave.Service.Controllers
{ {
@ -35,6 +36,7 @@ namespace BMA.EHR.Leave.Service.Controllers
private readonly LeaveRequestRepository _leaveRequestRepository; private readonly LeaveRequestRepository _leaveRequestRepository;
private readonly MinIOLeaveService _minIOService; private readonly MinIOLeaveService _minIOService;
private readonly HolidayRepository _holidayRepository; private readonly HolidayRepository _holidayRepository;
private readonly CommandRepository _commandRepository;
#endregion #endregion
@ -48,7 +50,8 @@ namespace BMA.EHR.Leave.Service.Controllers
LeaveTypeRepository leaveTypeRepository, LeaveTypeRepository leaveTypeRepository,
LeaveRequestRepository leaveRequestRepository, LeaveRequestRepository leaveRequestRepository,
MinIOLeaveService minIOService, MinIOLeaveService minIOService,
HolidayRepository holidayRepository) HolidayRepository holidayRepository,
CommandRepository commandRepository)
{ {
_context = context; _context = context;
_httpContextAccessor = httpContextAccessor; _httpContextAccessor = httpContextAccessor;
@ -59,6 +62,7 @@ namespace BMA.EHR.Leave.Service.Controllers
_leaveRequestRepository = leaveRequestRepository; _leaveRequestRepository = leaveRequestRepository;
_minIOService = minIOService; _minIOService = minIOService;
_holidayRepository = holidayRepository; _holidayRepository = holidayRepository;
_commandRepository = commandRepository;
} }
#endregion #endregion
@ -165,8 +169,10 @@ namespace BMA.EHR.Leave.Service.Controllers
break; break;
case "LV-005": case "LV-005":
{ {
leaveRequest.RestDayOldTotal = await _leaveRequestRepository.GetRestDayTotalByYearForUserAsync(userId, thisYear - 1); leaveRequest.RestDayOldTotal =
leaveRequest.RestDayCurrentTotal = await _leaveRequestRepository.GetRestDayTotalByYearForUserAsync(userId, thisYear); await _leaveRequestRepository.GetRestDayTotalByYearForUserAsync(userId, thisYear - 1);
leaveRequest.RestDayCurrentTotal =
await _leaveRequestRepository.GetRestDayTotalByYearForUserAsync(userId, thisYear);
} }
break; break;
case "LV-006": case "LV-006":
@ -186,7 +192,6 @@ namespace BMA.EHR.Leave.Service.Controllers
leaveRequest.LeaveGovernmentDate = profile.DateStart; leaveRequest.LeaveGovernmentDate = profile.DateStart;
leaveRequest.HajjDayStatus = req.HajjDayStatus ?? false; leaveRequest.HajjDayStatus = req.HajjDayStatus ?? false;
} }
break; break;
case "LV-007": case "LV-007":
@ -206,7 +211,8 @@ namespace BMA.EHR.Leave.Service.Controllers
var lastSalary = profile.Salaries.OrderByDescending(x => x.Order).FirstOrDefault(); var lastSalary = profile.Salaries.OrderByDescending(x => x.Order).FirstOrDefault();
leaveRequest.LeaveSalary = lastSalary == null ? 0 : (int)lastSalary.Amount.Value; leaveRequest.LeaveSalary = lastSalary == null ? 0 : (int)lastSalary.Amount.Value;
leaveRequest.LeaveSalaryText = lastSalary == null ? "" : ((int)lastSalary.Amount.Value).ToThaiBahtText(false); leaveRequest.LeaveSalaryText =
lastSalary == null ? "" : ((int)lastSalary.Amount.Value).ToThaiBahtText(false);
leaveRequest.LeaveBirthDate = profile.BirthDate; leaveRequest.LeaveBirthDate = profile.BirthDate;
leaveRequest.LeaveGovernmentDate = profile.DateStart; leaveRequest.LeaveGovernmentDate = profile.DateStart;
@ -218,7 +224,6 @@ namespace BMA.EHR.Leave.Service.Controllers
leaveRequest.StudyDayTrainingSubject = req.StudyDayTrainingSubject ?? ""; leaveRequest.StudyDayTrainingSubject = req.StudyDayTrainingSubject ?? "";
leaveRequest.StudyDayTrainingName = req.StudyDayTrainingName ?? ""; leaveRequest.StudyDayTrainingName = req.StudyDayTrainingName ?? "";
} }
break; break;
case "LV-010": case "LV-010":
@ -226,7 +231,8 @@ namespace BMA.EHR.Leave.Service.Controllers
var lastSalary = profile.Salaries.OrderByDescending(x => x.Order).FirstOrDefault(); var lastSalary = profile.Salaries.OrderByDescending(x => x.Order).FirstOrDefault();
leaveRequest.LeaveSalary = lastSalary == null ? 0 : (int)lastSalary.Amount.Value; leaveRequest.LeaveSalary = lastSalary == null ? 0 : (int)lastSalary.Amount.Value;
leaveRequest.LeaveSalaryText = lastSalary == null ? "" : ((int)lastSalary.Amount.Value).ToThaiBahtText(false); leaveRequest.LeaveSalaryText =
lastSalary == null ? "" : ((int)lastSalary.Amount.Value).ToThaiBahtText(false);
leaveRequest.CoupleDayName = req.CoupleDayName ?? ""; leaveRequest.CoupleDayName = req.CoupleDayName ?? "";
leaveRequest.CoupleDayPosition = req.CoupleDayPosition ?? ""; leaveRequest.CoupleDayPosition = req.CoupleDayPosition ?? "";
@ -242,8 +248,6 @@ namespace BMA.EHR.Leave.Service.Controllers
leaveRequest.CoupleDayEndDateHistory = req.CoupleDayEndDateHistory.Value; leaveRequest.CoupleDayEndDateHistory = req.CoupleDayEndDateHistory.Value;
leaveRequest.CoupleDaySumTotalHistory = req.CoupleDaySumTotalHistory ?? ""; leaveRequest.CoupleDaySumTotalHistory = req.CoupleDaySumTotalHistory ?? "";
} }
break; break;
} }
@ -288,24 +292,32 @@ namespace BMA.EHR.Leave.Service.Controllers
var lastSalary = profile.Salaries.OrderByDescending(x => x.Order).FirstOrDefault(); var lastSalary = profile.Salaries.OrderByDescending(x => x.Order).FirstOrDefault();
var rootOc = _userProfileRepository.GetRootOcId(profile.OcId ?? Guid.Empty);
var approver = string.Empty;
if (rootOc != null)
{
var list = await _commandRepository.GetOrgApproverAsync(rootOc ?? Guid.Empty);
if (list.Count > 0)
approver = list.First().Name;
}
var result = new GetUserLeaveProfileResultDto var result = new GetUserLeaveProfileResultDto
{ {
DateSendLeave = DateTime.Now.Date, DateSendLeave = DateTime.Now.Date,
LeaveTypeName = leaveType.Name, LeaveTypeName = leaveType.Name,
Dear = "นายณัฐพงษ์ ดิษยบุตร", Dear = approver,
FullName = $"{profile.Prefix.Name}{profile.FirstName} {profile.LastName}", FullName = $"{profile.Prefix.Name}{profile.FirstName} {profile.LastName}",
PositionName = profile.Position.Name, PositionName = profile.Position == null ? "" : profile.Position.Name,
PositionLevelName = profile.PositionEmployeeLevel.Name, PositionLevelName = profile.PositionLevel == null ? "" : profile.PositionLevel.Name,
OrganizationName = profile.Oc, OrganizationName = profile.Oc ?? "",
LeaveLimit = leaveType.Limit, LeaveLimit = leaveType.Limit,
LeaveTotal = sumLeave, LeaveTotal = sumLeave,
LeaveRemain = leaveType.Limit - sumLeave, LeaveRemain = leaveType.Limit - sumLeave,
RestDayTotalOld = restOldDay, RestDayTotalOld = restOldDay,
BirthDate = profile.BirthDate.Date, BirthDate = profile.BirthDate.Date,
DateAppoint = profile.DateAppoint.Value.Date, DateAppoint = profile.DateAppoint == null ? null : profile.DateAppoint.Value.Date,
Salary = lastSalary == null ? 0 : (int)lastSalary.Amount.Value, Salary = lastSalary == null ? 0 : (int)lastSalary.Amount.Value,
SalaryText = lastSalary == null ? "" : ((int)lastSalary.Amount.Value).ToThaiBahtText(false), SalaryText = lastSalary == null ? "" : ((int)lastSalary.Amount.Value).ToThaiBahtText(false),
}; };
return Success(result); return Success(result);
@ -332,9 +344,12 @@ namespace BMA.EHR.Leave.Service.Controllers
return Error(GlobalMessages.DataNotFound, StatusCodes.Status404NotFound); return Error(GlobalMessages.DataNotFound, StatusCodes.Status404NotFound);
} }
var sumLeave = await _leaveRequestRepository.GetSumLeaveByTypeForUserAsync(userId, req.Type, req.StartLeaveDate.Year); var sumLeave =
await _leaveRequestRepository.GetSumLeaveByTypeForUserAsync(userId, req.Type, req.StartLeaveDate.Year);
var sumWorkDay = await _holidayRepository.GetHolidayCountAsync(req.StartLeaveDate, req.EndLeaveDate); var sumWorkDay = await _holidayRepository.GetHolidayCountAsync(req.StartLeaveDate, req.EndLeaveDate);
var totalDay = req.StartLeaveDate.DiffDay(req.EndLeaveDate); var totalDay = req.StartLeaveDate.DiffDay(req.EndLeaveDate);
var sumWeekend = _holidayRepository.GetWeekEndCount(req.StartLeaveDate, req.EndLeaveDate);
var isLeave = sumLeave + (totalDay - sumWorkDay) <= leaveType.Limit; var isLeave = sumLeave + (totalDay - sumWorkDay) <= leaveType.Limit;
var result = new GetLeaveCheckResultDto var result = new GetLeaveCheckResultDto
@ -342,6 +357,7 @@ namespace BMA.EHR.Leave.Service.Controllers
IsLeave = isLeave, IsLeave = isLeave,
SumDateWork = sumWorkDay, SumDateWork = sumWorkDay,
TotalDate = totalDay, TotalDate = totalDay,
SumDateHoliday = sumWeekend
}; };
return Success(result); return Success(result);
@ -360,7 +376,8 @@ namespace BMA.EHR.Leave.Service.Controllers
[ProducesResponseType(StatusCodes.Status200OK)] [ProducesResponseType(StatusCodes.Status200OK)]
[ProducesResponseType(StatusCodes.Status401Unauthorized)] [ProducesResponseType(StatusCodes.Status401Unauthorized)]
[ProducesResponseType(StatusCodes.Status500InternalServerError)] [ProducesResponseType(StatusCodes.Status500InternalServerError)]
public async Task<ActionResult<ResponseObject>> GetLeaveRequestCalendarAsync([FromBody] GetLeaveRequestCalendarDto req) public async Task<ActionResult<ResponseObject>> GetLeaveRequestCalendarAsync(
[FromBody] GetLeaveRequestCalendarDto req)
{ {
//var thisYear = DateTime.Now.Year; //var thisYear = DateTime.Now.Year;
var data = await _leaveRequestRepository.GetLeaveRequestByYearAsync(req.Year); var data = await _leaveRequestRepository.GetLeaveRequestByYearAsync(req.Year);
@ -402,7 +419,8 @@ namespace BMA.EHR.Leave.Service.Controllers
[ProducesResponseType(StatusCodes.Status200OK)] [ProducesResponseType(StatusCodes.Status200OK)]
[ProducesResponseType(StatusCodes.Status401Unauthorized)] [ProducesResponseType(StatusCodes.Status401Unauthorized)]
[ProducesResponseType(StatusCodes.Status500InternalServerError)] [ProducesResponseType(StatusCodes.Status500InternalServerError)]
public async Task<ActionResult<ResponseObject>> GetLeaveRequestTableAsync([FromBody] GetLeaveRequestTableDto req) public async Task<ActionResult<ResponseObject>> GetLeaveRequestTableAsync(
[FromBody] GetLeaveRequestTableDto req)
{ {
var userId = UserId == null ? Guid.Empty : Guid.Parse(UserId); var userId = UserId == null ? Guid.Empty : Guid.Parse(UserId);
@ -412,7 +430,8 @@ namespace BMA.EHR.Leave.Service.Controllers
return Error(GlobalMessages.DataNotFound, StatusCodes.Status404NotFound); return Error(GlobalMessages.DataNotFound, StatusCodes.Status404NotFound);
} }
var rawData = await _leaveRequestRepository.GetLeaveRequestByUserIdAsync(userId, req.Year, req.Type, req.Status); var rawData =
await _leaveRequestRepository.GetLeaveRequestByUserIdAsync(userId, req.Year, req.Type, req.Status);
var result = new List<GetLeaveRequestTableResultDto>(); var result = new List<GetLeaveRequestTableResultDto>();
@ -437,7 +456,6 @@ namespace BMA.EHR.Leave.Service.Controllers
var pageResult = result.Skip((req.Page - 1) * req.PageSize).Take(req.PageSize).ToList(); var pageResult = result.Skip((req.Page - 1) * req.PageSize).Take(req.PageSize).ToList();
return Success(new { data = pageResult, total = result.Count }); return Success(new { data = pageResult, total = result.Count });
} }
/// <summary> /// <summary>
@ -473,7 +491,9 @@ namespace BMA.EHR.Leave.Service.Controllers
var lastSalary = profile.Salaries.OrderByDescending(x => x.Order).FirstOrDefault(); var lastSalary = profile.Salaries.OrderByDescending(x => x.Order).FirstOrDefault();
var lastSalaryAmount = lastSalary == null ? 0 : lastSalary.Amount ?? 0; var lastSalaryAmount = lastSalary == null ? 0 : lastSalary.Amount ?? 0;
var lastLeaveRequest = await _leaveRequestRepository.GetLastLeaveRequestByTypeForUserAsync(rawData.KeycloakUserId, rawData.Type.Id); var lastLeaveRequest =
await _leaveRequestRepository.GetLastLeaveRequestByTypeForUserAsync(rawData.KeycloakUserId,
rawData.Type.Id);
var result = new GetLeaveRequestByIdDto var result = new GetLeaveRequestByIdDto
{ {
@ -537,7 +557,6 @@ namespace BMA.EHR.Leave.Service.Controllers
CoupleDayStartDateHistory = rawData.CoupleDayStartDateHistory, CoupleDayStartDateHistory = rawData.CoupleDayStartDateHistory,
CoupleDayEndDateHistory = rawData.CoupleDayEndDateHistory, CoupleDayEndDateHistory = rawData.CoupleDayEndDateHistory,
CoupleDaySumTotalHistory = rawData.CoupleDaySumTotalHistory, CoupleDaySumTotalHistory = rawData.CoupleDaySumTotalHistory,
}; };
return Success(result); return Success(result);
@ -555,7 +574,8 @@ namespace BMA.EHR.Leave.Service.Controllers
[ProducesResponseType(StatusCodes.Status200OK)] [ProducesResponseType(StatusCodes.Status200OK)]
[ProducesResponseType(StatusCodes.Status401Unauthorized)] [ProducesResponseType(StatusCodes.Status401Unauthorized)]
[ProducesResponseType(StatusCodes.Status500InternalServerError)] [ProducesResponseType(StatusCodes.Status500InternalServerError)]
public async Task<ActionResult<ResponseObject>> GetLeaveRequestForAdminAsync([FromBody] GetLeaveRequestForAdminDto req) public async Task<ActionResult<ResponseObject>> GetLeaveRequestForAdminAsync(
[FromBody] GetLeaveRequestForAdminDto req)
{ {
var rawData = await _leaveRequestRepository.GetLeaveRequestForAdminAsync(req.Year, req.Type, req.Status); var rawData = await _leaveRequestRepository.GetLeaveRequestForAdminAsync(req.Year, req.Type, req.Status);
@ -597,7 +617,8 @@ namespace BMA.EHR.Leave.Service.Controllers
[ProducesResponseType(StatusCodes.Status200OK)] [ProducesResponseType(StatusCodes.Status200OK)]
[ProducesResponseType(StatusCodes.Status401Unauthorized)] [ProducesResponseType(StatusCodes.Status401Unauthorized)]
[ProducesResponseType(StatusCodes.Status500InternalServerError)] [ProducesResponseType(StatusCodes.Status500InternalServerError)]
public async Task<ActionResult<ResponseObject>> CancelLeaveRequestAsync([FromForm] CancelLeaveRequestDto req, Guid id) public async Task<ActionResult<ResponseObject>> CancelLeaveRequestAsync([FromForm] CancelLeaveRequestDto req,
Guid id)
{ {
var data = await _leaveRequestRepository.GetByIdAsync(id); var data = await _leaveRequestRepository.GetByIdAsync(id);
if (data == null) if (data == null)
@ -630,7 +651,6 @@ namespace BMA.EHR.Leave.Service.Controllers
// await _leaveRequestRepository.AddAsync(data); // await _leaveRequestRepository.AddAsync(data);
return Success(); return Success();
} }
/// <summary> /// <summary>
@ -645,9 +665,11 @@ namespace BMA.EHR.Leave.Service.Controllers
[ProducesResponseType(StatusCodes.Status200OK)] [ProducesResponseType(StatusCodes.Status200OK)]
[ProducesResponseType(StatusCodes.Status401Unauthorized)] [ProducesResponseType(StatusCodes.Status401Unauthorized)]
[ProducesResponseType(StatusCodes.Status500InternalServerError)] [ProducesResponseType(StatusCodes.Status500InternalServerError)]
public async Task<ActionResult<ResponseObject>> GetCancelLeaveRequestForAdminAsync([FromBody] GetLeaveRequestForAdminDto req) public async Task<ActionResult<ResponseObject>> GetCancelLeaveRequestForAdminAsync(
[FromBody] GetLeaveRequestForAdminDto req)
{ {
var rawData = await _leaveRequestRepository.GetCancelLeaveRequestForAdminAsync(req.Year, req.Type, req.Status); var rawData =
await _leaveRequestRepository.GetCancelLeaveRequestForAdminAsync(req.Year, req.Type, req.Status);
var result = new List<GetLeaveCancelRequestResultDto>(); var result = new List<GetLeaveCancelRequestResultDto>();
@ -717,7 +739,9 @@ namespace BMA.EHR.Leave.Service.Controllers
LeaveAddress = rawData.LeaveAddress, LeaveAddress = rawData.LeaveAddress,
LeaveNumber = rawData.LeaveNumber, LeaveNumber = rawData.LeaveNumber,
LeaveDetail = rawData.LeaveDetail, LeaveDetail = rawData.LeaveDetail,
LeaveDocDelete = rawData.LeaveCancelDocument == null ? "" : await _minIOService.ImagesPath(rawData.LeaveCancelDocument.Id), LeaveDocDelete = rawData.LeaveCancelDocument == null
? ""
: await _minIOService.ImagesPath(rawData.LeaveCancelDocument.Id),
LeaveReasonDelete = rawData.LeaveCancelComment ?? "", LeaveReasonDelete = rawData.LeaveCancelComment ?? "",
LeaveTotal = rawData.LeaveTotal, LeaveTotal = rawData.LeaveTotal,
}; };
@ -737,9 +761,9 @@ namespace BMA.EHR.Leave.Service.Controllers
[ProducesResponseType(StatusCodes.Status200OK)] [ProducesResponseType(StatusCodes.Status200OK)]
[ProducesResponseType(StatusCodes.Status401Unauthorized)] [ProducesResponseType(StatusCodes.Status401Unauthorized)]
[ProducesResponseType(StatusCodes.Status500InternalServerError)] [ProducesResponseType(StatusCodes.Status500InternalServerError)]
public async Task<ActionResult<ResponseObject>> ApproveCancelLeaveRequestAsync(Guid id, [FromBody] CancelLeaveRequestApproveDto req) public async Task<ActionResult<ResponseObject>> ApproveCancelLeaveRequestAsync(Guid id,
[FromBody] CancelLeaveRequestApproveDto req)
{ {
await _leaveRequestRepository.ApproveCancelLeaveRequestAsync(id, req.Reason ?? ""); await _leaveRequestRepository.ApproveCancelLeaveRequestAsync(id, req.Reason ?? "");
return Success(); return Success();
@ -758,9 +782,9 @@ namespace BMA.EHR.Leave.Service.Controllers
[ProducesResponseType(StatusCodes.Status200OK)] [ProducesResponseType(StatusCodes.Status200OK)]
[ProducesResponseType(StatusCodes.Status401Unauthorized)] [ProducesResponseType(StatusCodes.Status401Unauthorized)]
[ProducesResponseType(StatusCodes.Status500InternalServerError)] [ProducesResponseType(StatusCodes.Status500InternalServerError)]
public async Task<ActionResult<ResponseObject>> RejectCancelLeaveRequestAsync(Guid id, [FromBody] CancelLeaveRequestApproveDto req) public async Task<ActionResult<ResponseObject>> RejectCancelLeaveRequestAsync(Guid id,
[FromBody] CancelLeaveRequestApproveDto req)
{ {
await _leaveRequestRepository.RejectCancelLeaveRequestAsync(id, req.Reason ?? ""); await _leaveRequestRepository.RejectCancelLeaveRequestAsync(id, req.Reason ?? "");
return Success(); return Success();
@ -780,7 +804,6 @@ namespace BMA.EHR.Leave.Service.Controllers
[ProducesResponseType(StatusCodes.Status500InternalServerError)] [ProducesResponseType(StatusCodes.Status500InternalServerError)]
public async Task<ActionResult<ResponseObject>> OfficerApproveLeaveRequestAsync(Guid id) public async Task<ActionResult<ResponseObject>> OfficerApproveLeaveRequestAsync(Guid id)
{ {
await _leaveRequestRepository.OfficerApproveLeaveRequest(id); await _leaveRequestRepository.OfficerApproveLeaveRequest(id);
return Success(); return Success();
@ -794,13 +817,13 @@ namespace BMA.EHR.Leave.Service.Controllers
/// <response code="200">เมื่อทำรายการสำเร็จ</response> /// <response code="200">เมื่อทำรายการสำเร็จ</response>
/// <response code="401">ไม่ได้ Login เข้าระบบ</response> /// <response code="401">ไม่ได้ Login เข้าระบบ</response>
/// <response code="500">เมื่อเกิดข้อผิดพลาดในการทำงาน</response> /// <response code="500">เมื่อเกิดข้อผิดพลาดในการทำงาน</response>
[HttpPut("admin/approve/commander/{id:guid}")] [HttpPut("admin/approve/comander/{id:guid}")]
[ProducesResponseType(StatusCodes.Status200OK)] [ProducesResponseType(StatusCodes.Status200OK)]
[ProducesResponseType(StatusCodes.Status401Unauthorized)] [ProducesResponseType(StatusCodes.Status401Unauthorized)]
[ProducesResponseType(StatusCodes.Status500InternalServerError)] [ProducesResponseType(StatusCodes.Status500InternalServerError)]
public async Task<ActionResult<ResponseObject>> CommanderApproveLeaveRequestAsync(Guid id, [FromBody] LeaveRequestApproveDto req) public async Task<ActionResult<ResponseObject>> CommanderApproveLeaveRequestAsync(Guid id,
[FromBody] LeaveRequestApproveDto req)
{ {
await _leaveRequestRepository.CommanderApproveLeaveRequest(id, req.Reason ?? ""); await _leaveRequestRepository.CommanderApproveLeaveRequest(id, req.Reason ?? "");
return Success(); return Success();
@ -818,9 +841,9 @@ namespace BMA.EHR.Leave.Service.Controllers
[ProducesResponseType(StatusCodes.Status200OK)] [ProducesResponseType(StatusCodes.Status200OK)]
[ProducesResponseType(StatusCodes.Status401Unauthorized)] [ProducesResponseType(StatusCodes.Status401Unauthorized)]
[ProducesResponseType(StatusCodes.Status500InternalServerError)] [ProducesResponseType(StatusCodes.Status500InternalServerError)]
public async Task<ActionResult<ResponseObject>> ApproveLeaveRequestAsync(Guid id, [FromBody] LeaveRequestApproveDto req) public async Task<ActionResult<ResponseObject>> ApproveLeaveRequestAsync(Guid id,
[FromBody] LeaveRequestApproveDto req)
{ {
await _leaveRequestRepository.ApproveLeaveRequest(id, req.Reason ?? ""); await _leaveRequestRepository.ApproveLeaveRequest(id, req.Reason ?? "");
return Success(); return Success();
@ -838,9 +861,9 @@ namespace BMA.EHR.Leave.Service.Controllers
[ProducesResponseType(StatusCodes.Status200OK)] [ProducesResponseType(StatusCodes.Status200OK)]
[ProducesResponseType(StatusCodes.Status401Unauthorized)] [ProducesResponseType(StatusCodes.Status401Unauthorized)]
[ProducesResponseType(StatusCodes.Status500InternalServerError)] [ProducesResponseType(StatusCodes.Status500InternalServerError)]
public async Task<ActionResult<ResponseObject>> RejectLeaveRequestAsync(Guid id, [FromBody] LeaveRequestApproveDto req) public async Task<ActionResult<ResponseObject>> RejectLeaveRequestAsync(Guid id,
[FromBody] LeaveRequestApproveDto req)
{ {
await _leaveRequestRepository.RejectLeaveRequest(id, req.Reason ?? ""); await _leaveRequestRepository.RejectLeaveRequest(id, req.Reason ?? "");
return Success(); return Success();
@ -879,7 +902,9 @@ namespace BMA.EHR.Leave.Service.Controllers
var lastSalary = profile.Salaries.OrderByDescending(x => x.Order).FirstOrDefault(); var lastSalary = profile.Salaries.OrderByDescending(x => x.Order).FirstOrDefault();
var lastSalaryAmount = lastSalary == null ? 0 : lastSalary.Amount ?? 0; var lastSalaryAmount = lastSalary == null ? 0 : lastSalary.Amount ?? 0;
var lastLeaveRequest = await _leaveRequestRepository.GetLastLeaveRequestByTypeForUserAsync(rawData.KeycloakUserId, rawData.Type.Id); var lastLeaveRequest =
await _leaveRequestRepository.GetLastLeaveRequestByTypeForUserAsync(rawData.KeycloakUserId,
rawData.Type.Id);
var result = new GetLeaveRequestForAdminByIdDto var result = new GetLeaveRequestForAdminByIdDto
{ {
@ -948,7 +973,6 @@ namespace BMA.EHR.Leave.Service.Controllers
CoupleDayStartDateHistory = rawData.CoupleDayStartDateHistory, CoupleDayStartDateHistory = rawData.CoupleDayStartDateHistory,
CoupleDayEndDateHistory = rawData.CoupleDayEndDateHistory, CoupleDayEndDateHistory = rawData.CoupleDayEndDateHistory,
CoupleDaySumTotalHistory = rawData.CoupleDaySumTotalHistory, CoupleDaySumTotalHistory = rawData.CoupleDaySumTotalHistory,
}; };
return Success(result); return Success(result);
@ -976,13 +1000,17 @@ namespace BMA.EHR.Leave.Service.Controllers
var result = new List<dynamic>(); var result = new List<dynamic>();
foreach (var leaveType in leaveTypes) foreach (var leaveType in leaveTypes)
{ {
var send = await _leaveRequestRepository.GetSumSendLeaveByTypeForUserAsync(userId, leaveType.Id, thisYear); var send = await _leaveRequestRepository.GetSumSendLeaveByTypeForUserAsync(userId, leaveType.Id,
thisYear);
var approve = await _leaveRequestRepository.GetSumApproveLeaveByTypeForUserAsync(userId, leaveType.Id, thisYear); var approve =
await _leaveRequestRepository.GetSumApproveLeaveByTypeForUserAsync(userId, leaveType.Id, thisYear);
var reject = await _leaveRequestRepository.GetSumRejectLeaveByTypeForUserAsync(userId, leaveType.Id, thisYear); var reject =
await _leaveRequestRepository.GetSumRejectLeaveByTypeForUserAsync(userId, leaveType.Id, thisYear);
var delete = await _leaveRequestRepository.GetSumDeleteLeaveByTypeForUserAsync(userId, leaveType.Id, thisYear); var delete =
await _leaveRequestRepository.GetSumDeleteLeaveByTypeForUserAsync(userId, leaveType.Id, thisYear);
var data = new var data = new
{ {
@ -997,7 +1025,6 @@ namespace BMA.EHR.Leave.Service.Controllers
LeaveCountDelete = delete, LeaveCountDelete = delete,
}; };
result.Add(data); result.Add(data);
} }
return Success(result); return Success(result);

View file

@ -23,5 +23,8 @@ namespace BMA.EHR.Leave.Service.DTOs.DutyTime
[Required, Comment("สถานะว่ารอบใดเป็นค่า Default ของข้าราชการ (สำหรับทุกคนที่ยังไม่ได้ทำการเลือกรอบ)")] [Required, Comment("สถานะว่ารอบใดเป็นค่า Default ของข้าราชการ (สำหรับทุกคนที่ยังไม่ได้ทำการเลือกรอบ)")]
public bool IsDefault { get; set; } = false; public bool IsDefault { get; set; } = false;
[Required, Comment("Is Active")]
public bool IsActive { get; set; } = false;
} }
} }

View file

@ -5,8 +5,8 @@ namespace BMA.EHR.Leave.Service.DTOs.DutyTime
{ {
public class UpdateDutyTimeDto public class UpdateDutyTimeDto
{ {
[Required, Comment("คำอธิบาย")] [Comment("คำอธิบาย")]
public string Description { get; set; } = string.Empty; public string? Description { get; set; } = string.Empty;
[Required, Comment("สถานะว่ารอบใดเป็นค่า Default ของข้าราชการ (สำหรับทุกคนที่ยังไม่ได้ทำการเลือกรอบ)")] [Required, Comment("สถานะว่ารอบใดเป็นค่า Default ของข้าราชการ (สำหรับทุกคนที่ยังไม่ได้ทำการเลือกรอบ)")]
public bool IsDefault { get; set; } = false; public bool IsDefault { get; set; } = false;

View file

@ -7,5 +7,7 @@
public double SumDateWork { get; set; } = 0; public double SumDateWork { get; set; } = 0;
public double TotalDate { get; set; } = 0; public double TotalDate { get; set; } = 0;
public double SumDateHoliday { get; set; } = 0;
} }
} }

View file

@ -26,7 +26,7 @@
public DateTime BirthDate { get; set; } public DateTime BirthDate { get; set; }
public DateTime DateAppoint { get; set; } public DateTime? DateAppoint { get; set; }
public int Salary { get; set; } public int Salary { get; set; }