แก้ไข /leave/user/check

เพิ่ม range and rangeEnd เพื่อตรวจสอบการลา เพื่อให้สามารถลาครึ่งวัน รวมกับลาเต็มวันได้
This commit is contained in:
Suphonchai Phoonsawat 2025-04-22 10:39:17 +07:00
parent cd54079a47
commit 3659d03d94
6 changed files with 1590 additions and 3 deletions

View file

@ -137,9 +137,12 @@ namespace BMA.EHR.Domain.Models.Leave.Requests
[Comment("เขียนที่ (ขอยกเลิก)")]
public string? CancelLeaveWrote { get; set; } = string.Empty;
[Comment("ช่วงของการลา เช่น ลาทั้งวัน ครึ่งวันเช้า ครึ่งวันบ่าย")]
[Comment("ช่วงของการลาของวันเริ่ม เช่น ลาทั้งวัน ครึ่งวันเช้า ครึ่งวันบ่าย")]
public string? LeaveRange { get; set; } = string.Empty;
[Comment("ช่วงของการลาของวันสิ้นสุด เช่น ลาทั้งวัน ครึ่งวันเช้า ครึ่งวันบ่าย")]
public string? LeaveRangeEnd { get; set; } = string.Empty;
[Comment("เรียนใคร")]
public string? Dear { get; set; } = string.Empty;

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,56 @@
using Microsoft.EntityFrameworkCore.Migrations;
#nullable disable
namespace BMA.EHR.Infrastructure.Migrations.LeaveDb
{
/// <inheritdoc />
public partial class AddLeaveRangeEnd : Migration
{
/// <inheritdoc />
protected override void Up(MigrationBuilder migrationBuilder)
{
migrationBuilder.AlterColumn<string>(
name: "LeaveRange",
table: "LeaveRequests",
type: "longtext",
nullable: true,
comment: "ช่วงของการลาของวันเริ่ม เช่น ลาทั้งวัน ครึ่งวันเช้า ครึ่งวันบ่าย",
oldClrType: typeof(string),
oldType: "longtext",
oldNullable: true,
oldComment: "ช่วงของการลา เช่น ลาทั้งวัน ครึ่งวันเช้า ครึ่งวันบ่าย")
.Annotation("MySql:CharSet", "utf8mb4")
.OldAnnotation("MySql:CharSet", "utf8mb4");
migrationBuilder.AddColumn<string>(
name: "LeaveRangeEnd",
table: "LeaveRequests",
type: "longtext",
nullable: true,
comment: "ช่วงของการลาของวันสิ้นสุด เช่น ลาทั้งวัน ครึ่งวันเช้า ครึ่งวันบ่าย")
.Annotation("MySql:CharSet", "utf8mb4");
}
/// <inheritdoc />
protected override void Down(MigrationBuilder migrationBuilder)
{
migrationBuilder.DropColumn(
name: "LeaveRangeEnd",
table: "LeaveRequests");
migrationBuilder.AlterColumn<string>(
name: "LeaveRange",
table: "LeaveRequests",
type: "longtext",
nullable: true,
comment: "ช่วงของการลา เช่น ลาทั้งวัน ครึ่งวันเช้า ครึ่งวันบ่าย",
oldClrType: typeof(string),
oldType: "longtext",
oldNullable: true,
oldComment: "ช่วงของการลาของวันเริ่ม เช่น ลาทั้งวัน ครึ่งวันเช้า ครึ่งวันบ่าย")
.Annotation("MySql:CharSet", "utf8mb4")
.OldAnnotation("MySql:CharSet", "utf8mb4");
}
}
}

View file

@ -466,7 +466,11 @@ namespace BMA.EHR.Infrastructure.Migrations.LeaveDb
b.Property<string>("LeaveRange")
.HasColumnType("longtext")
.HasComment("ช่วงของการลา เช่น ลาทั้งวัน ครึ่งวันเช้า ครึ่งวันบ่าย");
.HasComment("ช่วงของการลาของวันเริ่ม เช่น ลาทั้งวัน ครึ่งวันเช้า ครึ่งวันบ่าย");
b.Property<string>("LeaveRangeEnd")
.HasColumnType("longtext")
.HasComment("ช่วงของการลาของวันสิ้นสุด เช่น ลาทั้งวัน ครึ่งวันเช้า ครึ่งวันบ่าย");
b.Property<int?>("LeaveSalary")
.HasColumnType("int");

View file

@ -868,6 +868,13 @@ namespace BMA.EHR.Leave.Service.Controllers
[ProducesResponseType(StatusCodes.Status500InternalServerError)]
public async Task<ActionResult<ResponseObject>> CheckUserLeaveAsync([FromBody] GetLeaveCheckDto req)
{
var totalDay = (double)req.StartLeaveDate.DiffDay(req.EndLeaveDate.Date);
var userId = UserId == null ? Guid.Empty : Guid.Parse(UserId);
var profile = await _userProfileRepository.GetProfileByKeycloakIdAsync(userId, AccessToken);
@ -893,7 +900,7 @@ namespace BMA.EHR.Leave.Service.Controllers
var sumLeave =
await _leaveRequestRepository.GetSumLeaveByTypeForUserAsync(userId, req.Type, req.StartLeaveDate.Year);
var sumWorkDay = await _holidayRepository.GetHolidayCountAsync(req.StartLeaveDate.Date, req.EndLeaveDate.Date, category);
var totalDay = req.StartLeaveDate.DiffDay(req.EndLeaveDate.Date);
var sumWeekend = _holidayRepository.GetWeekEndCount(req.StartLeaveDate.Date, req.EndLeaveDate.Date, category);
var sumApproveLeave = await _leaveRequestRepository.GetSumApproveLeaveByTypeForUserAsync(userId, req.Type, req.StartLeaveDate.Year);
@ -921,6 +928,10 @@ namespace BMA.EHR.Leave.Service.Controllers
var isLeave = false;
switch (leaveType.Code.ToUpper().Trim())
{
case "LV-001":
@ -1086,6 +1097,35 @@ namespace BMA.EHR.Leave.Service.Controllers
break;
}
if (totalDay > 1)
{
if (req.LeaveRange == "MORNING" || req.LeaveRangeEnd == "AFTERNOON")
{
isLeave = false;
message = "ช่วงวันลาที่ระบุไม่ถูกต้อง";
}
if (req.LeaveRange != "ALL")
totalDay -= 0.5;
if (req.LeaveRangeEnd != "ALL")
totalDay -= 0.5;
}
else if (totalDay == 1)
{
if (req.LeaveRange != req.LeaveRangeEnd)
{
isLeave = false;
message = "ช่วงวันลาที่ระบุไม่ถูกต้อง";
}
if (req.LeaveRange != "ALL")
totalDay -= 0.5;
}
//var isLeave = sumLeave + (totalDay - sumWorkDay - sumWeekend) <= leaveType.Limit;
var result = new GetLeaveCheckResultDto

View file

@ -12,5 +12,11 @@ namespace BMA.EHR.Leave.Service.DTOs.LeaveRequest
[Required]
public DateTime EndLeaveDate { get; set;} = DateTime.MinValue;
[Required]
public string LeaveRange { get; set; } = "ALL";
[Required]
public string LeaveRangeEnd { get; set; } = "ALL";
}
}