public async Task <string> AllInfoAboutMarks(int ProjectId)
        {
            Project Project = await db.Projects.Where(p => p.ProjectId == ProjectId).FirstAsync();

            ViewData["ProfileVisible"] = HttpContext.Request.Cookies.ContainsKey("UserData");
            int  VkId = int.Parse(HttpContext.Request.Cookies["UserData"]);
            User User = await db.Users.Where(u => u.VkId == VkId).FirstAsync();

            bool IsUserAdmin = await db.ProjectUsers.Where(p => p.ProjectId == ProjectId).AnyAsync(u => u.User == User);

            bool IsUserJury = await db.ProjectJury.Where(p => p.ProjectId == ProjectId).AnyAsync(u => u.User == User);

            List <User> Jury = await db.ProjectJury.Where(p => p.ProjectId == ProjectId).Select(u => u.User).ToListAsync();

            if (Jury.Count() == 0)
            {
                return("NOJURY;" + Project.ProjectId);
            }

            List <User> Users = await db.Users.ToListAsync();

            List <Mark> Marks = await db.Marks.Where(t => t.Team.ProjectId == ProjectId).ToListAsync();

            List <Team> Teams = await db.Teams.Where(p => p.ProjectId == ProjectId).ToListAsync();


            List <TeamsAndMarks> TeamsAndMarks = new List <TeamsAndMarks>();

            foreach (Team t in Teams)
            {
                int Summary                   = 0;
                List <List <Mark> > L         = new List <List <Mark> >();
                List <int>          StageSum  = new List <int>();
                List <string>       MarkNames = Marks.Where(team => team.Team == t).Where(u => u.User == null).Select(u => u.Name).ToList();
                foreach (string name in MarkNames)
                {
                    List <Mark> Stage = Marks.Where(u => u.User != null).Where(n => n.Name == name).Where(team => team.Team == t).ToList();
                    L.Add(Stage);

                    StageSum.Add(Stage.Select(m => m.Points).Sum() / Jury.Count());
                    Summary += Stage.Select(m => m.Points).Sum() / Jury.Count();
                }

                TeamsAndMarks TA = new TeamsAndMarks
                {
                    Team     = t,
                    Marks    = L,
                    Users    = await db.TeamUsers.Where(team => team.Team == t).Select(u => u.User).ToListAsync(),
                    StageSum = StageSum,
                    Summary  = Summary,
                };
                TeamsAndMarks.Add(TA);
            }

            int MarksCount = Marks.Where(u => u.User == null).Count();



            AllInfoAboutMarks data = new AllInfoAboutMarks {
                Project     = Project,
                IsUserAdmin = IsUserAdmin,
                IsUserJury  = IsUserJury,
                CurrentUser = User,
                Teams       = TeamsAndMarks,
            };

            return(JsonConvert.SerializeObject(data));
        }
        public async Task <IActionResult> Download(int ProjectId)
        {
            Project Project = await db.Projects.Where(p => p.ProjectId == ProjectId).FirstAsync();

            List <User> Users = await db.TeamUsers.Where(t => t.Team.ProjectId == ProjectId).Select(u => u.User).OrderBy(u => u.Course).ThenBy(u => u.Group).ThenBy(u => u.LastName).ThenBy(u => u.FirstName).ToListAsync();

            List <User> Jury = await db.ProjectJury.Where(p => p.ProjectId == ProjectId).Select(u => u.User).ToListAsync();

            List <Team> Teams = await db.Teams.Where(p => p.ProjectId == ProjectId).ToListAsync();

            List <Mark> Marks = await db.Marks.Where(t => t.Team.ProjectId == ProjectId).ToListAsync();

            List <TeamsAndMarks> TeamsAndMarks = new List <TeamsAndMarks>();


            foreach (Team t in Teams)
            {
                List <List <Mark> > L         = new List <List <Mark> >();
                List <string>       MarkNames = Marks.Where(team => team.Team == t).Where(u => u.User == null).Select(u => u.Name).ToList();
                foreach (string name in MarkNames)
                {
                    List <Mark> Stage = Marks.Where(u => u.User != null).Where(n => n.Name == name).Where(te => te.Team == t).ToList();
                    L.Add(Stage);
                }
                TeamsAndMarks TM = new TeamsAndMarks
                {
                    Team  = t,
                    Marks = L,
                    Users = await db.TeamUsers.Where(team => team.Team == t).Select(u => u.User).ToListAsync()
                };
                TeamsAndMarks.Add(TM);
            }
            string path     = _appEnvironment.WebRootPath + "/files/";
            string fileName = DateTimeOffset.Now.ToUnixTimeSeconds().ToString() + ".csv";
            string fullPath = path + fileName;

            FileInfo file = new FileInfo(fullPath);

            if (file.Exists)
            {
                file.Delete();
            }
            file.Create().Close();


            using (StreamWriter w = new StreamWriter(fullPath, false, Encoding.UTF8))
            {
                w.WriteLine($"{Project.Name}");
                w.WriteLine();
                w.WriteLine();

                w.WriteLine($"Участники проектной деятельности");
                w.WriteLine("Фамилия Имя;Курс;Группа;Vk;Название команды");
                foreach (User u  in Users)
                {
                    Team t = await db.TeamUsers.Where(us => us.User == u).Select(t => t.Team).FirstAsync();

                    w.WriteLine($"{u.LastName} {u.FirstName};{u.Course};{u.Group};https://vk.com/id{u.VkId};{t.Title}");
                }

                w.WriteLine();
                w.WriteLine();

                w.WriteLine($"Участники не вступившие в команды");
                w.WriteLine("Фамилия Имя;Курс;Группа;Vk;");
                List <User> UsersNotInTeam = db.Users.Where(c => c.Course != 3).ToArray().Except(Users.ToArray()).ToList();
                foreach (User u in UsersNotInTeam)
                {
                    w.WriteLine($"{u.LastName} {u.FirstName};{u.Course};{u.Group};https://vk.com/id{u.VkId}");
                }

                w.WriteLine();
                w.WriteLine();

                w.WriteLine($"Члены жюри");
                w.WriteLine("Фамилия Имя; Vk;");
                foreach (User u in Jury)
                {
                    w.WriteLine($"{u.LastName} {u.FirstName}; https://vk.com/id{u.VkId}");
                }

                w.WriteLine();
                w.WriteLine();


                w.WriteLine($"Команды");

                string str = "№;Название;Тип;Описание;Участники;";
                foreach (List <Mark> m in TeamsAndMarks[0].Marks)
                {
                    str += m[0].Name + ";";
                }
                w.WriteLine(str);
                for (int j = 0; j <= TeamsAndMarks.Count(); j++)
                {
                    TeamsAndMarks tm       = TeamsAndMarks[j];
                    List <int>    StageSum = new List <int>();

                    w.Write($"{j + 1};{tm.Team.Title};{tm.Team.Description};{tm.Team.Type};");
                    int i = 0;
                    while (i < tm.Users.Count || i < Jury.Count())
                    {
                        string s = i == 0 ? "" : ";;;";


                        if (i < tm.Users.Count)
                        {
                            s += $"{tm.Users[i].LastName} {tm.Users[i].FirstName} (https://vk.com/id{tm.Users[i].VkId}) - {tm.Users[i].Course} курс {tm.Users[i].Group} группа";
                        }
                        else
                        if (!(i == 0 && tm.Users.Count == 0))
                        {
                            s += ";";
                        }
                        foreach (List <Mark> marks in tm.Marks)
                        {
                            s += ";";
                            if (i < marks.Count)
                            {
                                s += $"{marks[i].User.LastName} {marks[i].User.FirstName} - {marks[i].Points}";
                                StageSum.Add((int)Math.Floor((Double)marks.Select(m => m.Points).Sum() / Jury.Count()));
                            }
                        }
                        w.WriteLine(s);

                        i++;
                    }

                    int    Sumary   = 0;
                    string stageStr = $";Сумарно;;;;";
                    for (i = 0; i < tm.Marks.Count(); i++)
                    {
                        stageStr += StageSum[i].ToString() + ";";
                        Sumary   += StageSum[i];
                    }
                    ;
                    stageStr += Sumary.ToString();
                    w.WriteLine(stageStr);
                    w.WriteLine();
                }
            }


            WebClient webClient = new WebClient();

            webClient.DownloadFile(fullPath, fileName);
            //file.Delete();

            return(Ok());
        }