refactor code
This commit is contained in:
parent
8ba9d349db
commit
ed1bb838ce
5 changed files with 109 additions and 67 deletions
|
|
@ -1839,18 +1839,41 @@ namespace BMA.EHR.Leave.Service.Controllers
|
|||
}
|
||||
var profile = await _userProfileRepository.SearchProfile(req.CitizenId, req.FirstName, req.LastName, AccessToken ?? "", req.Page, req.PageSize, role, nodeId, profileAdmin?.Node);
|
||||
|
||||
// Get default round once
|
||||
var getDefaultRound = await _dutyTimeRepository.GetDefaultAsync();
|
||||
|
||||
var resultSet = new List<SearchProfileResultDto>();
|
||||
|
||||
foreach (var p in profile.data)
|
||||
// Create dictionaries to cache results and avoid duplicate queries
|
||||
var effectiveDateCache = new Dictionary<Guid, UserDutyTime?>();
|
||||
var dutyTimeCache = new Dictionary<Guid, DutyTime?>();
|
||||
|
||||
foreach (var p in profile.Data)
|
||||
{
|
||||
var effectiveDate = await _userDutyTimeRepository.GetLastEffectRound(p.Id);
|
||||
// Use cache for effective date
|
||||
if (!effectiveDateCache.ContainsKey(p.Id))
|
||||
{
|
||||
effectiveDateCache[p.Id] = await _userDutyTimeRepository.GetLastEffectRound(p.Id);
|
||||
}
|
||||
var effectiveDate = effectiveDateCache[p.Id];
|
||||
|
||||
var roundId = effectiveDate != null ? effectiveDate.DutyTimeId : Guid.Empty;
|
||||
var userRound = await _dutyTimeRepository.GetByIdAsync(roundId);
|
||||
|
||||
// Use cache for duty time
|
||||
DutyTime? userRound = null;
|
||||
if (roundId != Guid.Empty)
|
||||
{
|
||||
if (!dutyTimeCache.ContainsKey(roundId))
|
||||
{
|
||||
dutyTimeCache[roundId] = await _dutyTimeRepository.GetByIdAsync(roundId);
|
||||
}
|
||||
userRound = dutyTimeCache[roundId];
|
||||
}
|
||||
|
||||
var duty = userRound ?? getDefaultRound;
|
||||
|
||||
if (duty == null) continue; // Skip if no duty time found
|
||||
|
||||
var res = new SearchProfileResultDto
|
||||
{
|
||||
ProfileId = p.Id,
|
||||
|
|
@ -1858,44 +1881,12 @@ namespace BMA.EHR.Leave.Service.Controllers
|
|||
FullName = $"{p.Prefix ?? ""}{p.FirstName ?? ""} {p.LastName ?? ""}",
|
||||
StartTimeMorning = duty.StartTimeMorning,
|
||||
LeaveTimeAfterNoon = duty.EndTimeAfternoon,
|
||||
EffectiveDate = effectiveDate == null ? null : effectiveDate.EffectiveDate.Value.Date
|
||||
EffectiveDate = effectiveDate?.EffectiveDate?.Date
|
||||
};
|
||||
resultSet.Add(res);
|
||||
}
|
||||
if (!string.IsNullOrWhiteSpace(req.sortBy))
|
||||
{
|
||||
switch (req.sortBy.ToUpper())
|
||||
{
|
||||
case "CITIZENID":
|
||||
if (req.descending == true)
|
||||
resultSet = resultSet.OrderByDescending(x => x.CitizenId).ToList();
|
||||
else
|
||||
resultSet = resultSet.OrderBy(x => x.CitizenId).ToList();
|
||||
break;
|
||||
case "FULLNAME":
|
||||
if (req.descending == true)
|
||||
resultSet = resultSet.OrderByDescending(x => x.FullName).ToList();
|
||||
else
|
||||
resultSet = resultSet.OrderBy(x => x.FullName).ToList();
|
||||
break;
|
||||
case "STARTTIMEMORNING":
|
||||
if (req.descending == true)
|
||||
resultSet = resultSet.OrderByDescending(x => x.StartTimeMorning).ToList();
|
||||
else
|
||||
resultSet = resultSet.OrderBy(x => x.StartTimeMorning).ToList();
|
||||
break;
|
||||
case "EFFECTIVEDATE":
|
||||
if (req.descending == true)
|
||||
resultSet = resultSet.OrderByDescending(x => x.EffectiveDate).ToList();
|
||||
else
|
||||
resultSet = resultSet.OrderBy(x => x.EffectiveDate).ToList();
|
||||
break;
|
||||
default: break;
|
||||
}
|
||||
}
|
||||
var pageResult = resultSet.Skip((req.Page - 1) * req.PageSize).Take(req.PageSize).ToList();
|
||||
|
||||
return Success(new { data = resultSet, total = profile.total });
|
||||
return Success(new { data = resultSet, total = profile.Total });
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
|
@ -2091,18 +2082,41 @@ namespace BMA.EHR.Leave.Service.Controllers
|
|||
}
|
||||
var profile = await _userProfileRepository.SearchProfileEmployee(req.CitizenId, req.FirstName, req.LastName, AccessToken ?? "", req.Page, req.PageSize, role, nodeId, profileAdmin?.Node);
|
||||
|
||||
// Get default round once
|
||||
var getDefaultRound = await _dutyTimeRepository.GetDefaultAsync();
|
||||
|
||||
var resultSet = new List<SearchProfileResultDto>();
|
||||
|
||||
foreach (var p in profile.data)
|
||||
// Create dictionaries to cache results and avoid duplicate queries
|
||||
var effectiveDateCache = new Dictionary<Guid, UserDutyTime?>();
|
||||
var dutyTimeCache = new Dictionary<Guid, DutyTime?>();
|
||||
|
||||
foreach (var p in profile.Data)
|
||||
{
|
||||
var effectiveDate = await _userDutyTimeRepository.GetLastEffectRound(p.Id);
|
||||
// Use cache for effective date
|
||||
if (!effectiveDateCache.ContainsKey(p.Id))
|
||||
{
|
||||
effectiveDateCache[p.Id] = await _userDutyTimeRepository.GetLastEffectRound(p.Id);
|
||||
}
|
||||
var effectiveDate = effectiveDateCache[p.Id];
|
||||
|
||||
var roundId = effectiveDate != null ? effectiveDate.DutyTimeId : Guid.Empty;
|
||||
var userRound = await _dutyTimeRepository.GetByIdAsync(roundId);
|
||||
|
||||
// Use cache for duty time
|
||||
DutyTime? userRound = null;
|
||||
if (roundId != Guid.Empty)
|
||||
{
|
||||
if (!dutyTimeCache.ContainsKey(roundId))
|
||||
{
|
||||
dutyTimeCache[roundId] = await _dutyTimeRepository.GetByIdAsync(roundId);
|
||||
}
|
||||
userRound = dutyTimeCache[roundId];
|
||||
}
|
||||
|
||||
var duty = userRound ?? getDefaultRound;
|
||||
|
||||
if (duty == null) continue; // Skip if no duty time found
|
||||
|
||||
var res = new SearchProfileResultDto
|
||||
{
|
||||
ProfileId = p.Id,
|
||||
|
|
@ -2110,12 +2124,12 @@ namespace BMA.EHR.Leave.Service.Controllers
|
|||
FullName = $"{p.Prefix ?? ""}{p.FirstName ?? ""} {p.LastName ?? ""}",
|
||||
StartTimeMorning = duty.StartTimeMorning,
|
||||
LeaveTimeAfterNoon = duty.EndTimeAfternoon,
|
||||
EffectiveDate = effectiveDate == null ? null : effectiveDate.EffectiveDate.Value.Date
|
||||
EffectiveDate = effectiveDate?.EffectiveDate?.Date
|
||||
};
|
||||
resultSet.Add(res);
|
||||
}
|
||||
|
||||
return Success(new { data = resultSet, total = profile.total });
|
||||
return Success(new { data = resultSet, total = profile.Total });
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue