diff --git a/ProgramManager/src/Application/GozareshgirProgramManager.Application/Modules/Projects/Queries/ProjectBoardDetail/ProjectBoardDetailQueryHandler.cs b/ProgramManager/src/Application/GozareshgirProgramManager.Application/Modules/Projects/Queries/ProjectBoardDetail/ProjectBoardDetailQueryHandler.cs index 467ed43e..60de81c1 100644 --- a/ProgramManager/src/Application/GozareshgirProgramManager.Application/Modules/Projects/Queries/ProjectBoardDetail/ProjectBoardDetailQueryHandler.cs +++ b/ProgramManager/src/Application/GozareshgirProgramManager.Application/Modules/Projects/Queries/ProjectBoardDetail/ProjectBoardDetailQueryHandler.cs @@ -1,3 +1,4 @@ +using System.Globalization; using GozareshgirProgramManager.Application._Common.Interfaces; using GozareshgirProgramManager.Application._Common.Models; using GozareshgirProgramManager.Domain._Common; @@ -7,21 +8,23 @@ namespace GozareshgirProgramManager.Application.Modules.Projects.Queries.Project public record ProjectBoardDetailQuery(Guid SectionId) : IBaseQuery; -public record ProjectBoardDetailResponse(List Users, string TotalTime); +public record ProjectBoardDetailResponse(List Users, string TotalTime,string RemainingTime ); public record ProjectBoardDetailUserResponse { - public List Histories { get; set; } = new(); - public string UserFullName { get; set; } - public long UserId { get; set; } + public List Histories { get; init; } + public string UserFullName { get; init; } + public string TotalTime { get; init; } + public string SpentTime { get; init; } + public long UserId { get; init; } } -public class ProjectBoardDetailUserHistoryResponse +public record ProjectBoardDetailUserHistoryResponse { - public string Date { get; set; } - public string startTime { get; set; } - public string EndTime { get; set; } - public string TotalTime { get; set; } + public string Date { get; init; } + public string startTime { get; init; } + public string EndTime { get; init; } + public string TotalTime { get; init; } } public class ProjectBoardDetailQueryHandler : IBaseQueryHandler @@ -38,6 +41,7 @@ public class ProjectBoardDetailQueryHandler : IBaseQueryHandler x.Activities) + .Include(x=>x.AdditionalTimes) .FirstOrDefaultAsync(x => x.Id == request.SectionId, cancellationToken: cancellationToken); if (section == null) @@ -49,16 +53,22 @@ public class ProjectBoardDetailQueryHandler : IBaseQueryHandler userIds.Contains(x.Id)) .ToDictionaryAsync(x => x.Id, x => x.FullName, cancellationToken); - var totalTimeSpan = section.Activities + var totalActivityTimeSpan = section.Activities .Select(x => x.GetTimeSpent()) .Aggregate(TimeSpan.Zero, (sum, next) => sum.Add(next)); + var finalTime = section.FinalEstimatedHours; + + var remainingTimeSpan = finalTime >= totalActivityTimeSpan + ? TimeSpan.FromTicks(finalTime.Ticks - totalActivityTimeSpan.Ticks) + : TimeSpan.Zero; var users = section.Activities.GroupBy(x => x.UserId).Select(x => { return new ProjectBoardDetailUserResponse() { UserId = x.Key, UserFullName = usersDict[x.Key], + TotalTime = TimeSpan.FromTicks(x.Sum(h=>h.GetTimeSpent().Ticks)).TotalHours.ToString(CultureInfo.InvariantCulture), Histories = x.Select(h => new ProjectBoardDetailUserHistoryResponse() { Date = h.StartDate.ToFarsi(), @@ -68,7 +78,8 @@ public class ProjectBoardDetailQueryHandler : IBaseQueryHandler.Success(response); } } \ No newline at end of file