refactor LeaveController to improve sorting and pagination logic #2192

This commit is contained in:
Suphonchai Phoonsawat 2026-01-13 17:01:20 +07:00
parent 90ea986831
commit 6907607a06
2 changed files with 158 additions and 101 deletions

View file

@ -2591,6 +2591,8 @@ namespace BMA.EHR.Leave.Service.Controllers
//var rawData = await _additionalCheckRequestRepository.GetAdditionalCheckRequests(year, month);
var rawData = await _additionalCheckRequestRepository.GetAdditionalCheckRequestsByAdminRole(year, month, role, nodeId, profileAdmin?.Node);
var total = rawData.Count;
var getDefaultRound = await _dutyTimeRepository.GetDefaultAsync();
if (getDefaultRound == null)
{
@ -2599,7 +2601,65 @@ namespace BMA.EHR.Leave.Service.Controllers
var result = new List<GetAdditionalCheckRequestDto>();
foreach (var data in rawData)
if (!string.IsNullOrWhiteSpace(sortBy))
{
switch (sortBy.ToUpper())
{
case "FULLNAME":
if (descending == true)
rawData = rawData.OrderByDescending(x => x.Prefix)
.ThenByDescending(x => x.FirstName)
.ThenByDescending(x => x.LastName)
.ToList();
else
rawData = rawData.OrderBy(x => x.Prefix)
.ThenBy(x => x.FirstName)
.ThenBy(x => x.LastName)
.ToList();
break;
case "CREATEDAT":
if (descending == true)
rawData = rawData.OrderByDescending(x => x.CreatedAt).ToList();
else
rawData = rawData.OrderBy(x => x.CreatedAt).ToList();
break;
case "CHECKDATE":
if (descending == true)
rawData = rawData.OrderByDescending(x => x.CheckDate).ToList();
else
rawData = rawData.OrderBy(x => x.CheckDate).ToList();
break;
// case "STARTTIMEMORNING":
// if (descending == true)
// rawData = rawData.OrderByDescending(x => x.StartTimeMorning).ToList();
// else
// result = result.OrderBy(x => x.StartTimeMorning).ToList();
// break;
// case "STARTTIMEAFTERNOON":
// if (descending == true)
// result = result.OrderByDescending(x => x.StartTimeAfternoon).ToList();
// else
// result = result.OrderBy(x => x.StartTimeAfternoon).ToList();
// break;
case "DESCRIPTION":
if (descending == true)
rawData = rawData.OrderByDescending(x => x.Description).ToList();
else
rawData = rawData.OrderBy(x => x.Description).ToList();
break;
default:
rawData = rawData.OrderBy(x =>
x.Status.Trim().ToLower() == "pending" ? 1 :
x.Status.Trim().ToLower() == "approve" ? 2 : 3).ToList();
break;
}
}
var rawDataPaged = rawData.Skip((page - 1) * pageSize).Take(pageSize)
.ToList();
foreach (var data in rawDataPaged)
{
var profile = await _userProfileRepository.GetProfileByKeycloakIdAsync(data.KeycloakUserId, AccessToken);
if (profile == null)
@ -2678,69 +2738,69 @@ namespace BMA.EHR.Leave.Service.Controllers
result.Add(resObj);
}
if (keyword != "")
{
result = result.Where(x => x.FullName.Contains(keyword)).ToList();
}
if (string.IsNullOrWhiteSpace(sortBy))
{
sortBy = "default";
}
if (!string.IsNullOrWhiteSpace(sortBy))
{
switch (sortBy.ToUpper())
{
case "FULLNAME":
if (descending == true)
result = result.OrderByDescending(x => x.Prefix)
.ThenByDescending(x => x.FirstName)
.ThenByDescending(x => x.LastName)
.ToList();
else
result = result.OrderBy(x => x.Prefix)
.ThenBy(x => x.FirstName)
.ThenBy(x => x.LastName)
.ToList();
break;
case "CREATEDAT":
if (descending == true)
result = result.OrderByDescending(x => x.CreatedAt).ToList();
else
result = result.OrderBy(x => x.CreatedAt).ToList();
break;
case "CHECKDATE":
if (descending == true)
result = result.OrderByDescending(x => x.CheckDate).ToList();
else
result = result.OrderBy(x => x.CheckDate).ToList();
break;
case "STARTTIMEMORNING":
if (descending == true)
result = result.OrderByDescending(x => x.StartTimeMorning).ToList();
else
result = result.OrderBy(x => x.StartTimeMorning).ToList();
break;
case "STARTTIMEAFTERNOON":
if (descending == true)
result = result.OrderByDescending(x => x.StartTimeAfternoon).ToList();
else
result = result.OrderBy(x => x.StartTimeAfternoon).ToList();
break;
case "DESCRIPTION":
if (descending == true)
result = result.OrderByDescending(x => x.Description).ToList();
else
result = result.OrderBy(x => x.Description).ToList();
break;
default:
result = result.OrderBy(x => x.StatusSort).ToList();
break;
}
}
var pageResult = result.Skip((page - 1) * pageSize).Take(pageSize)
.ToList();
// if (keyword != "")
// {
// result = result.Where(x => x.FullName.Contains(keyword)).ToList();
// }
// if (string.IsNullOrWhiteSpace(sortBy))
// {
// sortBy = "default";
// }
// if (!string.IsNullOrWhiteSpace(sortBy))
// {
// switch (sortBy.ToUpper())
// {
// case "FULLNAME":
// if (descending == true)
// result = result.OrderByDescending(x => x.Prefix)
// .ThenByDescending(x => x.FirstName)
// .ThenByDescending(x => x.LastName)
// .ToList();
// else
// result = result.OrderBy(x => x.Prefix)
// .ThenBy(x => x.FirstName)
// .ThenBy(x => x.LastName)
// .ToList();
// break;
// case "CREATEDAT":
// if (descending == true)
// result = result.OrderByDescending(x => x.CreatedAt).ToList();
// else
// result = result.OrderBy(x => x.CreatedAt).ToList();
// break;
// case "CHECKDATE":
// if (descending == true)
// result = result.OrderByDescending(x => x.CheckDate).ToList();
// else
// result = result.OrderBy(x => x.CheckDate).ToList();
// break;
// case "STARTTIMEMORNING":
// if (descending == true)
// result = result.OrderByDescending(x => x.StartTimeMorning).ToList();
// else
// result = result.OrderBy(x => x.StartTimeMorning).ToList();
// break;
// case "STARTTIMEAFTERNOON":
// if (descending == true)
// result = result.OrderByDescending(x => x.StartTimeAfternoon).ToList();
// else
// result = result.OrderBy(x => x.StartTimeAfternoon).ToList();
// break;
// case "DESCRIPTION":
// if (descending == true)
// result = result.OrderByDescending(x => x.Description).ToList();
// else
// result = result.OrderBy(x => x.Description).ToList();
// break;
// default:
// result = result.OrderBy(x => x.StatusSort).ToList();
// break;
// }
// }
// var pageResult = result.Skip((page - 1) * pageSize).Take(pageSize)
// .ToList();
return Success(new { data = pageResult, total = result.Count });
return Success(new { data = result, total = total });
}
/// <summary>
@ -3170,10 +3230,7 @@ namespace BMA.EHR.Leave.Service.Controllers
result.Add(resObj);
}
if (keyword != "")
{
result = result.Where(x => x.EditReason!.Contains(keyword) || x.CheckInLocation!.Contains(keyword) || x.CheckOutLocation!.Contains(keyword)).ToList();
}
var pageResult = result.Skip((page - 1) * pageSize).Take(pageSize)
.ToList();