Beispiel #1
0
 public byte[] GetProjectGroupsFilteredReportWithHistory(ProjectGroupFilteredReportListViewModel request, DateTime startDate, DateTime dueDate, Interval intervalType, IList <PdfTableCell> tableHeaders)
 {
     throw new NotImplementedException();
 }
Beispiel #2
0
        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()));
        }
Beispiel #3
0
 public byte[] GetProjectGroupsWithHistoryFilteredReport(ProjectGroupFilteredReportListViewModel request, IList <PdfTableCell> tableHeaders)
 {
     throw new NotImplementedException();
 }