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()))); }