Files
Backend-Api/ProgramManager/src/Application/GozareshgirProgramManager.Application/Modules/Projects/Extensions/ProjectMappingExtensions.cs

261 lines
8.9 KiB
C#

using GozareshgirProgramManager.Application.Modules.Projects.DTOs;
using GozareshgirProgramManager.Domain.ProjectAgg.Entities;
using GozareshgirProgramManager.Domain.ProjectAgg.Enums;
namespace GozareshgirProgramManager.Application.Modules.Projects.Extensions;
/// <summary>
/// Mapping extensions for project hierarchy entities to DTOs
/// </summary>
public static class ProjectMappingExtensions
{
#region Project Mappings
public static ProjectDto ToDto(this Project project)
{
return new ProjectDto
{
Id = project.Id,
Name = project.Name,
Description = project.Description,
CreationDate = project.CreationDate,
StartDate = project.StartDate,
EndDate = project.EndDate,
PlannedStartDate = project.PlannedStartDate,
PlannedEndDate = project.PlannedEndDate,
Status = project.Status.ToString(),
HasAssignmentOverride = project.HasAssignmentOverride,
TotalTimeSpent = project.GetTotalTimeSpent(),
TotalEstimatedTime = project.GetTotalEstimatedTime(),
Phases = project.Phases.Select(p => p.ToDto()).ToList()
};
}
public static ProjectDto ToSummaryDto(this Project project)
{
return new ProjectDto
{
Id = project.Id,
Name = project.Name,
Description = project.Description,
CreationDate = project.CreationDate,
StartDate = project.StartDate,
EndDate = project.EndDate,
PlannedStartDate = project.PlannedStartDate,
PlannedEndDate = project.PlannedEndDate,
Status = project.Status.ToString(),
HasAssignmentOverride = project.HasAssignmentOverride,
TotalTimeSpent = project.GetTotalTimeSpent(),
TotalEstimatedTime = project.GetTotalEstimatedTime()
// No phases for summary
};
}
#endregion
#region Phase Mappings
public static ProjectPhaseDto ToDto(this ProjectPhase phase)
{
return new ProjectPhaseDto
{
Id = phase.Id,
Name = phase.Name,
Description = phase.Description,
CreationDate = phase.CreationDate,
ProjectId = phase.ProjectId,
Status = phase.Status.ToString(),
StartDate = phase.StartDate,
EndDate = phase.EndDate,
OrderIndex = phase.OrderIndex,
HasAssignmentOverride = phase.HasAssignmentOverride,
TotalTimeSpent = phase.GetTotalTimeSpent(),
TotalEstimatedTime = phase.GetTotalEstimatedTime(),
Tasks = phase.Tasks.Select(t => t.ToDto()).ToList()
};
}
public static ProjectPhaseDto ToSummaryDto(this ProjectPhase phase)
{
return new ProjectPhaseDto
{
Id = phase.Id,
Name = phase.Name,
Description = phase.Description,
CreationDate = phase.CreationDate,
ProjectId = phase.ProjectId,
Status = phase.Status.ToString(),
StartDate = phase.StartDate,
EndDate = phase.EndDate,
OrderIndex = phase.OrderIndex,
HasAssignmentOverride = phase.HasAssignmentOverride,
TotalTimeSpent = phase.GetTotalTimeSpent(),
TotalEstimatedTime = phase.GetTotalEstimatedTime()
// No tasks for summary
};
}
#endregion
#region Task Mappings
public static ProjectTaskDto ToDto(this ProjectTask task)
{
return new ProjectTaskDto
{
Id = task.Id,
Name = task.Name,
Description = task.Description,
CreationDate = task.CreationDate,
PhaseId = task.PhaseId,
Status = task.Status.ToString(),
Priority = task.Priority.ToString(),
StartDate = task.StartDate,
EndDate = task.EndDate,
DueDate = task.DueDate,
OrderIndex = task.OrderIndex,
AllocatedTime = task.AllocatedTime,
HasTimeOverride = task.HasTimeOverride,
HasAssignmentOverride = task.HasAssignmentOverride,
TotalTimeSpent = task.GetTotalTimeSpent(),
TotalEstimatedTime = task.GetTotalEstimatedTime(),
Sections = task.Sections.Select(s => s.ToDto()).ToList()
};
}
public static ProjectTaskDto ToSummaryDto(this ProjectTask task)
{
return new ProjectTaskDto
{
Id = task.Id,
Name = task.Name,
Description = task.Description,
CreationDate = task.CreationDate,
PhaseId = task.PhaseId,
Status = task.Status.ToString(),
Priority = task.Priority.ToString(),
StartDate = task.StartDate,
EndDate = task.EndDate,
DueDate = task.DueDate,
OrderIndex = task.OrderIndex,
AllocatedTime = task.AllocatedTime,
HasTimeOverride = task.HasTimeOverride,
HasAssignmentOverride = task.HasAssignmentOverride,
TotalTimeSpent = task.GetTotalTimeSpent(),
TotalEstimatedTime = task.GetTotalEstimatedTime()
// No sections for summary
};
}
#endregion
#region Section Mappings
public static ProjectSectionDto ToDto(this TaskSection section)
{
return new ProjectSectionDto
{
Id = section.Id,
TaskId = section.TaskId,
SkillId = section.SkillId,
SkillName = section.Skill?.Name ?? string.Empty,
InitialEstimatedHours = section.InitialEstimatedHours,
InitialDescription = section.InitialDescription,
Status = section.Status.ToString(),
CurrentAssignedUserId = section.CurrentAssignedUserId,
CreationDate = section.CreationDate,
FinalEstimatedHours = section.FinalEstimatedHours,
TotalTimeSpent = section.GetTotalTimeSpent(),
ProgressPercentage = section.GetProgressPercentage(),
IsCompleted = section.IsCompleted(),
IsInProgress = section.IsInProgress(),
Activities = section.Activities.Select(a => a.ToDto()).ToList(),
AdditionalTimes = section.AdditionalTimes.Select(at => at.ToDto()).ToList()
};
}
public static ProjectSectionDto ToSummaryDto(this TaskSection section)
{
return new ProjectSectionDto
{
Id = section.Id,
TaskId = section.TaskId,
SkillId = section.SkillId,
SkillName = section.Skill?.Name ?? string.Empty,
InitialEstimatedHours = section.InitialEstimatedHours,
InitialDescription = section.InitialDescription,
Status = section.Status.ToString(),
CurrentAssignedUserId = section.CurrentAssignedUserId,
CreationDate = section.CreationDate,
FinalEstimatedHours = section.FinalEstimatedHours,
TotalTimeSpent = section.GetTotalTimeSpent(),
ProgressPercentage = section.GetProgressPercentage(),
IsCompleted = section.IsCompleted(),
IsInProgress = section.IsInProgress()
// No activities or additional times for summary
};
}
#endregion
#region Activity Mappings
public static TaskSectionActivityDto ToDto(this TaskSectionActivity activity)
{
return new TaskSectionActivityDto
{
Id = activity.Id,
SectionId = activity.SectionId,
UserId = activity.UserId,
StartDate = activity.StartDate,
EndDate = activity.EndDate,
Notes = activity.Notes,
EndNotes = activity.EndNotes,
IsActive = activity.IsActive,
TimeSpent = activity.GetTimeSpent()
};
}
#endregion
#region Additional Time Mappings
public static TaskSectionAdditionalTimeDto ToDto(this TaskSectionAdditionalTime additionalTime)
{
return new TaskSectionAdditionalTimeDto
{
Id = additionalTime.Id,
Hours = additionalTime.Hours,
Reason = additionalTime.Reason,
AddedByUserId = additionalTime.AddedByUserId,
AddedAt = additionalTime.AddedAt
};
}
#endregion
#region Collection Mappings
public static List<ProjectDto> ToSummaryDtos(this IEnumerable<Project> projects)
{
return projects.Select(p => p.ToSummaryDto()).ToList();
}
public static List<ProjectPhaseDto> ToSummaryDtos(this IEnumerable<ProjectPhase> phases)
{
return phases.Select(p => p.ToSummaryDto()).ToList();
}
public static List<ProjectTaskDto> ToSummaryDtos(this IEnumerable<ProjectTask> tasks)
{
return tasks.Select(t => t.ToSummaryDto()).ToList();
}
public static List<ProjectSectionDto> ToSummaryDtos(this IEnumerable<TaskSection> sections)
{
return sections.Select(s => s.ToSummaryDto()).ToList();
}
#endregion
}