public override void OnActionExecuted(ActionExecutedContext filterContext)
        {
            ActionResult actionResult = null;
            var result = filterContext.Result as TableResult;
            if (result == null)
            {
                return;
            }

            switch (_OutputType)
            {
                case TableOutputType.JqGrid:
                    actionResult = new JsonResult {Data = result.ToJqGridJson()};
                    break;
                case TableOutputType.Csv:
                    var actionName = filterContext.ActionDescriptor.ActionName;
                    actionResult = new CsvResult(result.Rows, actionName);
                    break;
                case TableOutputType.Flexigrid:
                    actionResult = new JsonResult {Data = result.ToFlexigridJson()};
                    break;
            }

            filterContext.Result = actionResult;
        }
예제 #2
0
        public void writes_result()
        {
            // set-up
            IEnumerable <object> data = Enumerable.Repeat(new
            {
                Name = "test",
                Age  = 20
            }, 5);
            const string expected = "Name,Age\r\ntest,20\r\ntest,20\r\ntest,20\r\ntest,20\r\ntest,20\r\n";

            CsvResult csvResult = new CsvResult(data);

            // execute
            csvResult.ExecuteResult(_controllerContext);

            // assert
            _httpContext.Response.OutputStream.Seek(0, SeekOrigin.Begin);
            using (StreamReader streamReader = new StreamReader(_httpContext.Response.OutputStream))
            {
                string actual = streamReader.ReadToEnd();
                actual.MustBe(expected);
            }
        }
예제 #3
0
        public void handles_null()
        {
            // set-up
            IEnumerable <Test> data = Enumerable.Repeat(new Test
            {
                Name      = "test",
                Age       = null,
                StartDate = null
            }, 5);
            const string expected = "Name,Age,StartDate,Child\r\ntest,,,\r\ntest,,,\r\ntest,,,\r\ntest,,,\r\ntest,,,\r\n";

            CsvResult csvResult = new CsvResult(data);

            // execute
            csvResult.ExecuteResult(_controllerContext);

            // assert
            _httpContext.Response.OutputStream.Seek(0, SeekOrigin.Begin);
            using (StreamReader streamReader = new StreamReader(_httpContext.Response.OutputStream))
            {
                string actual = streamReader.ReadToEnd();
                actual.MustBe(expected);
            }
        }
예제 #4
0
        public override void Render(object toRender, Stream output)
        {
            CsvResult csv = new CsvResult(toRender);

            csv.WriteCsv(output);
        }
예제 #5
0
        public IActionResult DownloadResults(int taskId)
        {
            var task = _db.StudentTasks.Find(taskId);

            if (task is null)
            {
                return(NotFound());
            }

            var allResults = _db.StudentResults.Where(s => s.TaskId == taskId).ToList();

            var results = new List <CsvResult>();

            foreach (var res in allResults)
            {
                var curRes = new CsvResult
                {
                    FirstName = res.Student.FirstName,
                    LastName  = res.Student.LastName,
                    GroupName = string.Join(",", res.Student.Groups.Select(g => g.Group.Name)),
                    Score     = res.Solution.Score.ToString(),
                    HasPlag   = res.Solution.PlagiarismDetected ? "ДА" : "НЕТ",
                    WithPlag  = "-",
                };

                if (res.Solution.PlagiarismDetected)
                {
                    var plagiats = _db.PlagiarismResults.Where(p => p.TaskId == taskId && (p.SolutionId1 == res.SolutionId || p.SolutionId2 == res.SolutionId)).ToList();

                    var plagRes = new List <string>();
                    foreach (var p in plagiats)
                    {
                        int otherId;
                        if (p.SolutionId1 == res.SolutionId)
                        {
                            otherId = p.SolutionId2;
                        }
                        else
                        {
                            otherId = p.SolutionId1;
                        }

                        var otherSol = _db.Solutions.Find(otherId);

                        if (otherSol is null)
                        {
                            continue;
                        }

                        var otherStudName = otherSol.Student.LastName + " " + otherSol.Student.FirstName;
                        plagRes.Add(otherStudName);
                    }

                    curRes.WithPlag = string.Join(",", plagRes.OrderBy(s => s).ToList());
                }

                results.Add(curRes);
            }

            var file = new System.Text.StringBuilder();

            file.AppendLine("Фамилия;Имя;Группа;Оценка;Наличие плагиата;С кем");

            foreach (var r in results.OrderBy(r => r.LastName))
            {
                file.AppendLine($"{r.LastName};{r.FirstName};{r.GroupName};{r.Score};{r.HasPlag};{r.WithPlag}");
            }
            byte[] bom = System.Text.Encoding.UTF8.GetPreamble();
            byte[] mas = System.Text.Encoding.UTF8.GetBytes(file.ToString());

            string fileType = "application/csv";
            string fileName = task.Name + ".csv";

            return(File(bom.Concat(mas).ToArray(), fileType, fileName));
        }