Ejemplo n.º 1
0
        public IActionResult ProcessEdit(EditReportModel model)
        {
            if (!ModelState.IsValid)
            {
                if (String.IsNullOrEmpty(model.ReportName))
                {
                    return(Error("Ошибка редактирования отчета!", "Название отчета должно быть не нулевым!"));
                }
                if (model.ReportName?.Length > 100)
                {
                    return(Error("Ошибка редактирования отчета!", "Название отчета должно быть не длиннее 100 символов!"));
                }
                if (model.IssueFilter?.Length > 1000)
                {
                    return(Error("Ошибка редактирования отчета!", "Фильтр должен быть не длиннее 1000 символов!"));
                }
                return(Error("Ошибка редактирования отчета!"));
            }

            // Get report
            var reportResult = _storage.GetReport(model.ReportId);

            if (!reportResult.IsSuccess)
            {
                return(Error("Ошибка обращения к БД!", reportResult.Error.Message));
            }

            // Check is name unique
            if (reportResult.Result.Name != model.ReportName)
            {
                var isContains = _storage.ContainsReport(model.ReportName);
                if (!isContains.IsSuccess)
                {
                    return(Error("Ошибка обращения к БД!", isContains.Error.Message));
                }
                if (isContains.Result)
                {
                    return(Error("Ошибка редактирования отчета!", "Название отчета должно быть уникальным!"));
                }
            }

            // Get issues
            var issueFilter = model.IssueFilter == null ? "" : model.IssueFilter;
            var issues      = _timeTrackingService.GetIssues(reportResult.Result.ProjectName, model.IssueFilter);

            // Change time mode
            if (model.IsWorkItems)
            {
                foreach (var issue in issues)
                {
                    issue.SetTimeByWorkItems();
                }
            }
            // Filter by selected users
            if (model.SelectedUsers != null)
            {
                var users = model.AllUsers
                            .Zip(model.SelectedUsers)
                            .Where(i => i.Second)
                            .Select(i => i.First)
                            .ToHashSet();
                issues = issues
                         .Where(i => users.Contains(i.AssigneeName))
                         .ToList();
            }
            // Save new report
            var newReport = new Report(reportResult.Result.Name, reportResult.Result.ProjectName, model.IssueFilter, issues);

            reportResult = _storage.EditReport(reportResult.Result.ReportId, newReport);
            if (!reportResult.IsSuccess)
            {
                return(Error("Ошибка обращения к БД!", reportResult.Error.Message));
            }

            // Get charts
            var charts = _chartService.GetAllCharts();

            foreach (var chart in charts.Values)
            {
                chart.SetData(reportResult.Result.Issues, 5);
            }

            return(View("Show", new ChartModel(reportResult.Result.ReportId, charts.Values.ToList())));
        }