Enhance LeaveController to implement check-out logic and status validation based on last check-in record
This commit is contained in:
parent
b8df2d4024
commit
d748308419
1 changed files with 128 additions and 0 deletions
|
|
@ -957,15 +957,24 @@ namespace BMA.EHR.Leave.Service.Controllers
|
||||||
return Error(GlobalMessages.NoFileToUpload, StatusCodes.Status400BadRequest);
|
return Error(GlobalMessages.NoFileToUpload, StatusCodes.Status400BadRequest);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// last check-in record
|
||||||
|
var lastCheckIn = await _userTimeStampRepository.GetLastRecord(userId);
|
||||||
|
|
||||||
var check_status = data.CheckInId == null ? "check-in-picture" : "check-out-picture";
|
var check_status = data.CheckInId == null ? "check-in-picture" : "check-out-picture";
|
||||||
|
var check_out_status = "check-out-picture";
|
||||||
|
|
||||||
var fileName = $"{_bucketName}/{userId}/{currentDate.ToString("dd-MM-yyyy")}/{check_status}/{data.CheckInFileName}";
|
var fileName = $"{_bucketName}/{userId}/{currentDate.ToString("dd-MM-yyyy")}/{check_status}/{data.CheckInFileName}";
|
||||||
|
var fileNameCheckOut = $"{_bucketName}/{userId}/{currentDate.ToString("dd-MM-yyyy")}/{check_out_status}/{data.CheckInFileName}";
|
||||||
using (var ms = new MemoryStream(data.CheckInFileBytes ?? new byte[0]))
|
using (var ms = new MemoryStream(data.CheckInFileBytes ?? new byte[0]))
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
await _minIOService.UploadFileAsync(fileName, ms);
|
await _minIOService.UploadFileAsync(fileName, ms);
|
||||||
|
if (lastCheckIn != null && lastCheckIn.CheckOut == null)
|
||||||
|
{
|
||||||
|
// ยังไม่เคย check-out มาก่อน หรือ check-out เป็น null ให้ใช้ชื่อไฟล์แบบ check-out
|
||||||
|
await _minIOService.UploadFileAsync(fileNameCheckOut, ms);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
|
|
@ -1015,6 +1024,124 @@ namespace BMA.EHR.Leave.Service.Controllers
|
||||||
// create check in object
|
// create check in object
|
||||||
if (data.CheckInId == null)
|
if (data.CheckInId == null)
|
||||||
{
|
{
|
||||||
|
if (lastCheckIn != null && lastCheckIn.CheckOut == null)
|
||||||
|
{
|
||||||
|
var checkout = await _userTimeStampRepository.GetByIdAsync(lastCheckIn!.Id);
|
||||||
|
if(checkout != null)
|
||||||
|
{
|
||||||
|
var currentCheckInProcess = await _processUserTimeStampRepository.GetTimestampByDateAsync(userId, checkout.CheckIn.Date);
|
||||||
|
var checkout_process = await _processUserTimeStampRepository.GetByIdAsync(currentCheckInProcess!.Id);
|
||||||
|
var endTime1 = "";
|
||||||
|
var startTime1 = "";
|
||||||
|
var endTimeMorning1 = "";
|
||||||
|
if (!data.IsLocation && data.LocationName == "ไปประชุม / อบรม / สัมมนา")
|
||||||
|
{
|
||||||
|
startTime1 = "13:00";
|
||||||
|
endTime1 = "14:30";
|
||||||
|
endTimeMorning1 = "12:00";
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
endTime1 = duty.EndTimeAfternoon;
|
||||||
|
startTime1 = duty.StartTimeAfternoon;
|
||||||
|
endTimeMorning1 = duty.EndTimeMorning;
|
||||||
|
}
|
||||||
|
|
||||||
|
string checkOutStatus = "NORMAL";
|
||||||
|
var leaveReq1 = await _leaveRequestRepository.GetLeavePeriodAsync(userId, currentDate.Date);
|
||||||
|
if (leaveReq1 != null)
|
||||||
|
{
|
||||||
|
var leaveRange = leaveReq1.LeaveRangeEnd == null ? "" : leaveReq1.LeaveRangeEnd.ToUpper();
|
||||||
|
if (leaveRange == "AFTERNOON" || leaveRange == "ALL")
|
||||||
|
{
|
||||||
|
if(DateTime.Parse(currentDate.ToString("yyyy-MM-dd HH:mm")) <
|
||||||
|
DateTime.Parse($"{currentDate.ToString("yyyy-MM-dd")} {endTimeMorning1}"))
|
||||||
|
checkOutStatus = "ABSENT";
|
||||||
|
else
|
||||||
|
checkOutStatus = "NORMAL";
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// fix issue : SIT ระบบบันทึกเวลาปฏิบัติงาน>>ลงเวลาเข้า-ออกงาน (กรณีลงเวลาออกอีกวัน) #921
|
||||||
|
var currentDateTime = DateTime.Parse(currentDate.ToString("yyyy-MM-dd HH:mm"));
|
||||||
|
var dutyEndTimeAfternoon = DateTime.Parse($"{checkout.CheckIn.ToString("yyyy-MM-dd")} {endTime1}");
|
||||||
|
var dutyEndTimeMorning = DateTime.Parse($"{checkout.CheckIn.ToString("yyyy-MM-dd")} {endTimeMorning1}");
|
||||||
|
|
||||||
|
|
||||||
|
if(currentDateTime.Date > checkout.CheckIn.Date)
|
||||||
|
{
|
||||||
|
// ถ้า check-out เป็นวันถัดไป สถานะปกติเสมอ
|
||||||
|
checkOutStatus = "NORMAL";
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// ถ้า check-out เป็นวันเดียวกับ check-in
|
||||||
|
// ตรวจสอบเวลาว่าสิ้นสุดก่อนบ่ายหรือไม่
|
||||||
|
if(currentDateTime < dutyEndTimeMorning) // ถ้าออกก่อนเวลาสิ้นสุดตอนเช้า ขาดราชการ
|
||||||
|
{
|
||||||
|
checkOutStatus = "ABSENT";
|
||||||
|
}
|
||||||
|
else if(currentDateTime >= dutyEndTimeAfternoon) // ถ้าออกหลังเวลาสิ้นสุดตอนบ่าย ปกติ
|
||||||
|
{
|
||||||
|
checkOutStatus = "NORMAL";
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
checkOutStatus = "ABSENT";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// fix issue : SIT ระบบบันทึกเวลาปฏิบัติงาน>>ลงเวลาเข้า-ออกงาน (กรณีลงเวลาออกอีกวัน) #921
|
||||||
|
var currentDateTime = DateTime.Parse(currentDate.ToString("yyyy-MM-dd HH:mm"));
|
||||||
|
var dutyEndTimeAfternoon = DateTime.Parse($"{checkout.CheckIn.ToString("yyyy-MM-dd")} {endTime1}");
|
||||||
|
var dutyEndTimeMorning = DateTime.Parse($"{checkout.CheckIn.ToString("yyyy-MM-dd")} {endTimeMorning1}");
|
||||||
|
|
||||||
|
|
||||||
|
if(currentDateTime.Date > checkout.CheckIn.Date)
|
||||||
|
{
|
||||||
|
// ถ้า check-out เป็นวันถัดไป สถานะปกติเสมอ
|
||||||
|
checkOutStatus = "NORMAL";
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// ถ้า check-out เป็นวันเดียวกับ check-in
|
||||||
|
// ตรวจสอบเวลาว่าสิ้นสุดก่อนบ่ายหรือไม่
|
||||||
|
if(currentDateTime < dutyEndTimeMorning) // ถ้าออกก่อนเวลาสิ้นสุดตอนเช้า ขาดราชการ
|
||||||
|
{
|
||||||
|
checkOutStatus = "ABSENT";
|
||||||
|
}
|
||||||
|
else if(currentDateTime >= dutyEndTimeAfternoon) // ถ้าออกหลังเวลาสิ้นสุดตอนบ่าย ปกติ
|
||||||
|
{
|
||||||
|
checkOutStatus = "NORMAL";
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
checkOutStatus = "ABSENT";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
if (checkout_process != null)
|
||||||
|
{
|
||||||
|
checkout_process.CheckOutLat = data.Lat;
|
||||||
|
checkout_process.CheckOutLon = data.Lon;
|
||||||
|
checkout_process.IsLocationCheckOut = data.IsLocation;
|
||||||
|
checkout_process.CheckOutLocationName = data.LocationName;
|
||||||
|
checkout_process.CheckOutPOI = data.POI;
|
||||||
|
checkout_process.CheckOutRemark = data.Remark;
|
||||||
|
checkout_process.CheckOutImageUrl = fileNameCheckOut;
|
||||||
|
checkout_process.CheckOut = currentDate;
|
||||||
|
checkout_process.CheckOutStatus = checkOutStatus;
|
||||||
|
|
||||||
|
await _processUserTimeStampRepository.UpdateAsync(checkout_process);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// validate duplicate check in
|
// validate duplicate check in
|
||||||
var currentCheckIn = await _userTimeStampRepository.GetTimestampByDateAsync(userId, currentDate);
|
var currentCheckIn = await _userTimeStampRepository.GetTimestampByDateAsync(userId, currentDate);
|
||||||
|
|
||||||
|
|
@ -1167,6 +1294,7 @@ namespace BMA.EHR.Leave.Service.Controllers
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
var checkout = await _userTimeStampRepository.GetByIdAsync(data.CheckInId.Value);
|
var checkout = await _userTimeStampRepository.GetByIdAsync(data.CheckInId.Value);
|
||||||
|
//var currentCheckIn = await _userTimeStampRepository.GetTimestampByDateAsync(userId, currentDate);
|
||||||
|
|
||||||
if (checkout == null)
|
if (checkout == null)
|
||||||
{
|
{
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue