Merge branch 'develop' into adiDev
Some checks failed
release-dev / release-dev (push) Failing after 10s

# Conflicts:
#	BMA.EHR.Leave/Controllers/LeaveReportController.cs
This commit is contained in:
AdisakKanthawilang 2025-03-11 17:39:58 +07:00
commit dc8a3dc39c
5 changed files with 248 additions and 172 deletions

View file

@ -71,6 +71,28 @@ namespace BMA.EHR.Leave.Service.Controllers
_httpContextAccessor = httpContextAccessor;
_permission = permission;
}
private class LoopDate
{
public DateTime date { get; set; }
public bool isHoliday { get; set; }
}
private class DateResultReport
{
public int no { get; set; }
public string fullName { get; set; }
public string dutyTimeName { get; set; }
public string checkInLocation { get; set; }
public string checkInTime { get; set; }
public string checkOutLocation { get; set; }
public string checkOutTime { get; set; }
public string remark { get; set; }
public string checkInDate { get; set; }
public string checkedOutDate { get; set; }
public DateTime? checkInTimeRaw { get; set; }
public DateTime? checkOutTimeRaw { get; set; }
}
#endregion
@ -808,7 +830,7 @@ namespace BMA.EHR.Leave.Service.Controllers
var therapyDay = leaveDays.FirstOrDefault(x => x.KeycloakUserId == keycloakUserId && x.LeaveTypeCode == "LV-011");
var therapyDayCount = therapyDay != null ? therapyDay.SumLeaveDay : 0;
var timeStamps = await _processUserTimeStampRepository.GetTimeStampHistoryByRangeForUserAsync(p.Keycloak ?? Guid.Empty,req.StartDate,req.EndDate);
var timeStamps = await _processUserTimeStampRepository.GetTimeStampHistoryByRangeForUserAsync(p.Keycloak ?? Guid.Empty, req.StartDate, req.EndDate);
var defaultRound = await _dutyTimeRepository.GetDefaultAsync();
if (defaultRound == null)
@ -822,27 +844,27 @@ namespace BMA.EHR.Leave.Service.Controllers
var duty = userRound ?? defaultRound;
/* var processTimeStamps = timeStamps
.Select(d => new
{
d.Id,
CheckInStatus = DateTime.Parse(d.CheckIn.ToString("yyyy-MM-dd HH:mm")) >
DateTime.Parse($"{d.CheckIn.Date.ToString("yyyy-MM-dd")} {duty.StartTimeMorning}") ?
"LATE" :
"NORMAL",
CheckOutStatus = d.CheckOut == null ? "" :
DateTime.Parse(d.CheckOut.Value.ToString("yyyy-MM-dd HH:mm")) <
DateTime.Parse($"{d.CheckIn.Date.ToString("yyyy-MM-dd")} {duty.EndTimeAfternoon}") ?
"LATE" :
DateTime.Parse(d.CheckOut.Value.ToString("yyyy-MM-dd HH:mm")) <
DateTime.Parse($"{d.CheckIn.Date.ToString("yyyy-MM-dd")} {duty.EndTimeMorning}") ?
"ABSENT" :
"NORMAL",
});*/
/* var processTimeStamps = timeStamps
.Select(d => new
{
d.Id,
CheckInStatus = DateTime.Parse(d.CheckIn.ToString("yyyy-MM-dd HH:mm")) >
DateTime.Parse($"{d.CheckIn.Date.ToString("yyyy-MM-dd")} {duty.StartTimeMorning}") ?
"LATE" :
"NORMAL",
CheckOutStatus = d.CheckOut == null ? "" :
DateTime.Parse(d.CheckOut.Value.ToString("yyyy-MM-dd HH:mm")) <
DateTime.Parse($"{d.CheckIn.Date.ToString("yyyy-MM-dd")} {duty.EndTimeAfternoon}") ?
"LATE" :
DateTime.Parse(d.CheckOut.Value.ToString("yyyy-MM-dd HH:mm")) <
DateTime.Parse($"{d.CheckIn.Date.ToString("yyyy-MM-dd")} {duty.EndTimeMorning}") ?
"ABSENT" :
"NORMAL",
});*/
/*var absentCount = processTimeStamps.Count(x => x.CheckOutStatus == "ABSENT");
var lateCount = processTimeStamps.Count(x => x.CheckInStatus == "LATE");*/
var absentCount = timeStamps.Count(d =>
d.CheckOutStatus == "ABSENT"); // นับจำนวนที่มี CheckOutStatus == "ABSENT"
var lateCount = timeStamps.Count(d =>
@ -1151,15 +1173,28 @@ namespace BMA.EHR.Leave.Service.Controllers
var weekend = _holidayRepository.GetWeekEnd(req.StartDate.Date, req.EndDate.Date);
var excludeDates = holidays.Union(weekend).ToList();
var dateList = new List<DateTime>();
var dateList = new List<LoopDate>();
for (DateTime i = req.StartDate.Date; i <= req.EndDate.Date; i = i.AddDays(1))
{
if (!excludeDates.Contains(i))
dateList.Add(i);
if (excludeDates.Contains(i))
{
dateList.Add(new LoopDate
{
date = i,
isHoliday = true,
});
}
else
{
dateList.Add(new LoopDate
{
date = i,
isHoliday = false,
});
}
}
var employees = new List<dynamic>();
var employees = new List<DateResultReport>();
var count = 1;
var restTotal = 0;
@ -1175,7 +1210,7 @@ namespace BMA.EHR.Leave.Service.Controllers
{
var keycloakUserId = p.Keycloak ?? Guid.Empty;
var timeStamps = await _processUserTimeStampRepository.GetTimestampByDateAsync(keycloakUserId, dd);
var timeStamps = await _processUserTimeStampRepository.GetTimestampByDateAsync(keycloakUserId, dd.date);
var fullName = $"{p.Prefix}{p.FirstName} {p.LastName}"; // _userProfileRepository.GetUserFullName(keycloakUserId, AccessToken);
@ -1192,7 +1227,7 @@ namespace BMA.EHR.Leave.Service.Controllers
var duty = userRound ?? defaultRound;
// check วันลาของแต่ละคน
var leaveReq = await _leaveRequestRepository.GetLeavePeriodAsync(keycloakUserId, dd);
var leaveReq = await _leaveRequestRepository.GetLeavePeriodAsync(keycloakUserId, dd.date);
var remarkStr = string.Empty;
if (leaveReq != null)
@ -1218,8 +1253,14 @@ namespace BMA.EHR.Leave.Service.Controllers
{
if (timeStamps == null)
{
if (dd <= DateTime.Now.Date)
if (dd.date <= DateTime.Now.Date)
{
remarkStr = "ขาดราชการ";
if (dd.isHoliday == true)
{
remarkStr = "วันหยุด";
}
}
else remarkStr = "";
}
else
@ -1228,7 +1269,7 @@ namespace BMA.EHR.Leave.Service.Controllers
if (timeStamps.CheckOut != null)
{
if (timeStamps.CheckOutStatus == "ABSENT")
remarkStr = "ขาดราชการ" + (!timeStamps.IsLocationCheckOut ? $" (นอกสถานที่:{ timeStamps.CheckOutLocationName })".Trim() : "") ;
remarkStr = "ขาดราชการ" + (!timeStamps.IsLocationCheckOut ? $" (นอกสถานที่:{timeStamps.CheckOutLocationName})".Trim() : "");
else if (timeStamps.CheckInStatus == "ABSENT")
remarkStr = "ขาดราชการ" + (!timeStamps.IsLocationCheckIn ? $" (นอกสถานที่:{timeStamps.CheckInLocationName})".Trim() : "");
else if (timeStamps.CheckInStatus == "LATE")
@ -1237,7 +1278,8 @@ namespace BMA.EHR.Leave.Service.Controllers
lateTotal += 1;
}
else
remarkStr = "";
remarkStr = !timeStamps.IsLocationCheckIn ? $" นอกสถานที่:{timeStamps.CheckInLocationName}".Trim() : "";
//remarkStr = "";
}
else
{
@ -1249,12 +1291,13 @@ namespace BMA.EHR.Leave.Service.Controllers
lateTotal += 1;
}
else
remarkStr = "";
//remarkStr = "";
remarkStr = !timeStamps.IsLocationCheckIn ? $" นอกสถานที่:{timeStamps.CheckInLocationName}".Trim() : "";
}
}
}
var emp = new
var emp = new DateResultReport
{
no = count,
fullName = fullName,
@ -1267,11 +1310,13 @@ namespace BMA.EHR.Leave.Service.Controllers
$"{timeStamps.CheckOut.Value.ToString("HH:mm")} น." :
"",
remark = remarkStr,
checkInDate = timeStamps == null ? dd.Date.ToThaiFullDate2().ToThaiNumber() : timeStamps.CheckIn.Date.ToThaiFullDate2().ToThaiNumber(),
checkedOutDate = timeStamps == null ? dd.Date.ToThaiFullDate2().ToThaiNumber() :
checkInDate = timeStamps == null ? dd.date.Date.ToThaiFullDate2() : timeStamps.CheckIn.Date.ToThaiFullDate2(),
checkedOutDate = timeStamps == null ? dd.date.Date.ToThaiFullDate2() :
timeStamps.CheckOut != null ?
timeStamps.CheckOut.Value.ToThaiFullDate2().ToThaiNumber() :
timeStamps.CheckOut.Value.ToThaiFullDate2() :
"",
checkInTimeRaw = timeStamps?.CheckIn,
checkOutTimeRaw = timeStamps?.CheckOut,
};
if (timeStamps != null)
@ -1307,11 +1352,16 @@ namespace BMA.EHR.Leave.Service.Controllers
count++;
}
}
employees = employees.OrderBy(x => x.checkInTimeRaw ?? DateTime.MaxValue).ThenBy(x => x.checkOutTimeRaw ?? DateTime.MaxValue).ToList();
for (int i = 0; i < employees.Count; i++)
{
employees[i].no = i + 1;
}
var enddate = req.EndDate.Date == req.StartDate.Date ? "" : $" - {req.EndDate.Date.ToThaiShortDate().ToThaiNumber()}";
var enddate = req.EndDate.Date == req.StartDate.Date ? "" : $" - {req.EndDate.Date.ToThaiShortDate()}";
var item = new
{
dateTimeStamp = $"ณ วันที่ {req.StartDate.Date.ToThaiShortDate().ToThaiNumber()}{enddate}",
dateTimeStamp = $"ณ วัน{req.StartDate.Date.GetThaiDayOfWeek()} ที่ {req.StartDate.Date.ToThaiShortDate()}{enddate}",
organizationName = profile?.FirstOrDefault()?.Oc ?? "",
officerTotal = profile.Count,
workTotal = workTotal,
@ -1323,7 +1373,7 @@ namespace BMA.EHR.Leave.Service.Controllers
studyTotal = studyTotal,
employees = employees
};
//วันที่ออก
var result = new
{
template = "TimeStamp",