public byte[] GetProjectGroupsFilteredReportWithHistory(ProjectGroupFilteredReportListViewModel request, DateTime startDate, DateTime dueDate, Interval intervalType, IList <PdfTableCell> tableHeaders) { throw new NotImplementedException(); }
public byte[] GetProjectGroupsFilteredReportWithHistory(ProjectGroupFilteredReportListViewModel request, DateTime startDate, DateTime dueDate, Interval intervalType, IList <ExcelTableCell> tableHeaders) { var result = new StringBuilder(); var startInterval = (int)Math.Ceiling((12 * startDate.Year + startDate.Month) / ((float)intervalType)); var endInclusiveInterval = (int)Math.Ceiling((12 * dueDate.Year + dueDate.Month) / ((float)intervalType)); var tableHelper = new ExcelTableHelper(); var headers = tableHelper.GetProjectGroupsWithHistoryFilteredReportTableHeaders(); var tableNames = tableHeaders.Where(x => x.IsActive).Select(x => x.Name).ToList(); var periodName = tableNames.FirstOrDefault(x => x == headers[4].Name); int order = 0; if (!string.IsNullOrWhiteSpace(periodName)) { order = tableNames.IndexOf(periodName); var temporaryLeft = tableNames.GetRange(0, order); var temporaryRight = tableNames.GetRange(order + 1, tableNames.Count - order - 1); var temporaryMiddle = new List <string>(); for (var intervalOrder = startInterval - 1; intervalOrder++ < endInclusiveInterval;) { temporaryMiddle.Add($"{(intervalOrder - 1) * (int)intervalType / 12} Year, " + $"{Math.Ceiling(intervalOrder % (12 / (int)intervalType) == 0 ? (12 / (float)intervalType) : intervalOrder % (12 / (int)intervalType) * 1.0f)} {intervalType.ToString()}"); } tableNames = temporaryLeft; tableNames.AddRange(temporaryMiddle); tableNames.AddRange(temporaryRight); } result.AppendLine(string.Join(',', tableNames)); var startRow = 2; var row = 2; var startColumn = "B"; var projectNameColumn = "A"; var projectGroupNameColumn = "A"; foreach (var projectGroup in request.ProjectGroups) { var isSettedProjectGroup = false; foreach (var project in projectGroup.ProjectView.Projects) { startRow = row; var isSettedProject = false; foreach (var assignee in project.AssigneeView.Assignees) { ++row; var currentColumn = "B"; var periodColumn = 0; foreach (var name in tableNames) { var pattern = $"{currentColumn}{row}"; if (name == headers[0].Name) { result.Append($"{row - startRow}, "); } else if (name == headers[1].Name) { if (!isSettedProjectGroup) { result.Append($"{projectGroup.ProjectGroupName}, "); projectGroupNameColumn = currentColumn; isSettedProjectGroup = true; } } else if (name == headers[2].Name) { if (!isSettedProject) { result.Append($"{project.ProjectName}, "); projectNameColumn = currentColumn; isSettedProject = true; } } else if (name == headers[3].Name) { result.Append($"{assignee.AssigneeName}, "); } else if (name == headers[5].Name) { result.Append($"{assignee.LoggedTimeView.TotalLoggedTime:0.00}, "); } else { var loggedTime = assignee.LoggedTimeView.LoggedTimes?.FirstOrDefault(x => x.Key == startInterval + periodColumn); periodColumn++; if (loggedTime.HasValue && Math.Abs(loggedTime.Value.Value) >= 0.01) { var keyValuePair = loggedTime.Value; result.Append($"{keyValuePair.Value:0.00}, "); } else { result.Append("-, "); } } currentColumn = currentColumn.Next(); } result.AppendLine(); } result.AppendLine(); if (projectNameColumn == "A") { continue; } result.AppendLine($"Total per project: {project.AssigneeView.TotalLoggedTime:0.00}"); } if (projectGroupNameColumn != "A") { result.AppendLine($"Total per project group: {projectGroup.ProjectView.TotalLoggedTime:0.00}"); } row += 2; result.AppendLine("\n"); } return(Encoding.Unicode.GetBytes(result.ToString())); }
public byte[] GetProjectGroupsWithHistoryFilteredReport(ProjectGroupFilteredReportListViewModel request, IList <PdfTableCell> tableHeaders) { throw new NotImplementedException(); }