public async Task <IActionResult> GetEventSchoolByName(string eventName, string schoolName)
        {
            var sqlDataBase = _stObjMap.StObjs.Obtain <SqlDefaultDatabase>();
            int userId      = _authenticationInfo.ActualUser.UserId;

            using (var ctx = new SqlStandardCallContext())
            {
                EventQueries       eventQueries       = new EventQueries(ctx, sqlDataBase);
                GroupQueries       groupQueries       = new GroupQueries(ctx, sqlDataBase);
                TimedPeriodQueries timedPeriodQueries = new TimedPeriodQueries(ctx, sqlDataBase);

                GroupData groupData = await groupQueries.GetIdSchoolByConnectUser(userId);

                EventData eventData;

                if (groupData == null)
                {
                    int idSchool = await groupQueries.GetIdSchoolByName(schoolName);

                    PeriodData periodData = await timedPeriodQueries.GetLastPeriodBySchool(idSchool);

                    eventData = await eventQueries.GetEventSchoolBylNameAndPeriodId(eventName, periodData.ChildId);
                }
                else
                {
                    eventData = await eventQueries.GetEventSchoolBylNameAndPeriodId(eventName, groupData.ZoneId);
                }


                return(Ok(eventData));
            }
        }
        public async Task <IActionResult> GetAllTypeProjectsOfASchool(int idSchool, char type)
        {
            SqlDefaultDatabase db = _stObjMap.StObjs.Obtain <SqlDefaultDatabase>();
            int userId            = _authenticationInfo.ActualUser.UserId;

            using (var ctx = new SqlStandardCallContext())
            {
                ProjectQueries     projectQueries     = new ProjectQueries(ctx, db);
                TimedPeriodQueries timedPeriodQueries = new TimedPeriodQueries(ctx, db);
                TimedUserQueries   timedUserQueries   = new TimedUserQueries(ctx, db);
                UserQueries        userQueries        = new UserQueries(ctx, db);
                GroupQueries       groupQueries       = new GroupQueries(ctx, db);

                PeriodData periodData = await timedPeriodQueries.GetLastPeriodBySchool(idSchool);

                //Implementer check date period

                TimedUserData timedUserData = await timedUserQueries.GetTimedUser(userId, periodData.ChildId);

                if (timedUserData == null)
                {
                    timedUserData = new TimedUserData
                    {
                        TimedUserId = 0
                    };
                }

                IEnumerable <AllProjectInfoData> projectData = await projectQueries.GetAllTypeProjectSpecificToSchoolWithTimedUserNote(periodData.ChildId, type, timedUserData.TimedUserId);

                for (var i = 0; i < projectData.Count(); i++)
                {
                    IEnumerable <UserByProjectData> userByProject = await userQueries.GetUserByProject(projectData.ElementAt( i ).ProjectStudentId);

                    projectData.ElementAt(i).BegDate = userByProject.ElementAt(0).BegDate;
                    projectData.ElementAt(i).EndDate = userByProject.ElementAt(0).EndDate;

                    foreach (var e in userByProject)
                    {
                        IEnumerable <GroupData> groupDatas = await groupQueries.GetAllGroupByTimedUser(e.TimedUserId);

                        projectData.ElementAt(i).FirstName.Add(e.FirstName);
                        projectData.ElementAt(i).LastName.Add(e.LastName);
                        projectData.ElementAt(i).TimedUserId.Add(e.TimedUserId);
                        projectData.ElementAt(i).UserId.Add(e.UserId);
                    }
                }
                return(Ok(projectData));
            }
        }
        public async Task <IEnumerable <AllProjectInfoData> > GetProjectsEvaluate(int idSchool)
        {
            SqlDefaultDatabase db = _stObjMap.StObjs.Obtain <SqlDefaultDatabase>();
            int userId            = _authenticationInfo.ActualUser.UserId;

            using (var ctx = new SqlStandardCallContext())
            {
                ProjectQueries     projectQueries     = new ProjectQueries(ctx, db);
                TimedPeriodQueries timedPeriodQueries = new TimedPeriodQueries(ctx, db);
                TimedUserQueries   timedUserQueries   = new TimedUserQueries(ctx, db);
                UserQueries        userQueries        = new UserQueries(ctx, db);
                GroupQueries       groupQueries       = new GroupQueries(ctx, db);

                PeriodData periodData = await timedPeriodQueries.GetLastPeriodBySchool(idSchool);

                //Implementer check date period

                IEnumerable <AllProjectInfoData> projectData = await projectQueries.GetAllProjectTimedByJuryId(userId, periodData.ChildId);

                return(projectData);
            }
        }
        public async Task <IActionResult> NoteProject([FromBody] NoteProjectViewModel model)
        {
            int userId = _authenticationInfo.ActualUser.UserId;
            TimedUserNoteProjectTable timedUserNoteProjectTable = _stObjMap.StObjs.Obtain <TimedUserNoteProjectTable>();
            TimedUserTable            timedUserTable            = _stObjMap.StObjs.Obtain <TimedUserTable>();
            EvaluatesTable            evaluatesTable            = _stObjMap.StObjs.Obtain <EvaluatesTable>();
            SqlDefaultDatabase        db             = _stObjMap.StObjs.Obtain <SqlDefaultDatabase>();
            PeriodServices            periodServices = new PeriodServices();

            using (var ctx = new SqlStandardCallContext())
            {
                ProjectQueries     projectQueries     = new ProjectQueries(ctx, db);
                TimedPeriodQueries timedPeriodQueries = new TimedPeriodQueries(ctx, db);
                UserQueries        userQueries        = new UserQueries(ctx, db);
                TimedUserQueries   timedUserQueries   = new TimedUserQueries(ctx, db);
                AclQueries         aclQueries         = new AclQueries(ctx, db);
                GroupQueries       groupQueries       = new GroupQueries(ctx, db);

                //Case Change Grade by Administration ====================================================================================================================
                if (model.User == ViewModels.TypeTimedUser.StaffMember)
                {
                    if (!await periodServices.CheckInPeriod(_stObjMap, _authenticationInfo))
                    {
                        Result result = new Result(Status.Unauthorized, "A la date d'aujourd'hui votre etablissement n'est dans une aucune periode");
                        return(this.CreateResult(result));
                    }

                    GroupData groupData = await groupQueries.GetIdSchoolByConnectUser(userId);

                    if (!await aclQueries.VerifyGrantLevelByUserId(112, await aclQueries.GetAclIdBySchoolId(groupData.ParentZoneId), userId, Operator.SuperiorOrEqual))
                    {
                        Result result = new Result(Status.Unauthorized, "Vous n'etes pas autorisé à utiliser cette fonctionnalité !");
                        return(this.CreateResult(result));
                    }

                    await evaluatesTable.EvaluateOrUpdateGradeProject(ctx, model.JuryId, model.ProjectId, model.Grade);

                    return(Ok());
                }
                //=========================================================================================================================================================

                PeriodData periodData = await timedPeriodQueries.GetLastPeriodBySchool(model.SchoolId);

                TimedUserData timedUserData = await timedUserQueries.GetTimedUser(userId, periodData.ChildId);

                if (timedUserData == null)
                {
                    TimedUserStruct timedUser = await timedUserTable.CreateOrUpdateTimedUserAsyncWithType(ctx, Data.TypeTimedUser.Anon, periodData.ChildId, userId);

                    timedUserData = new TimedUserData
                    {
                        TimedUserId = timedUser.TimedUserId
                    };
                    await timedUserNoteProjectTable.AddOrUpdateNote(ctx, timedUserData.TimedUserId, model.ProjectId, model.Grade);

                    return(Ok());
                }

                if (model.User == ViewModels.TypeTimedUser.Jury)
                {
                    await evaluatesTable.EvaluateOrUpdateGradeProject(ctx, model.JuryId, model.ProjectId, model.Grade);
                }
                else
                {
                    await timedUserNoteProjectTable.AddOrUpdateNote(ctx, timedUserData.TimedUserId, model.ProjectId, model.Grade);
                }

                return(Ok());
            }
        }
        public async Task <IActionResult> GetAllSheet(int schoolId, char projectType, int semester)
        {
            SqlDefaultDatabase db = _stObjMap.StObjs.Obtain <SqlDefaultDatabase>();

            using (SqlStandardCallContext ctx = new SqlStandardCallContext())
            {
                ProjectQueries     projectQueries     = new ProjectQueries(ctx, db);
                TimedPeriodQueries timedPeriodQueries = new TimedPeriodQueries(ctx, db);


                PeriodData School = await timedPeriodQueries.GetLastPeriodBySchool(schoolId);

                IEnumerable <AllProjectInfoData> listProject;


                if (semester > 0)
                {
                    if (projectType == 'I' || projectType == 'H')
                    {
                        listProject = await projectQueries.GetAllTypeSchoolProject(School.ChildId, projectType, semester);
                    }
                    else
                    {
                        listProject = await projectQueries.GetAllTypeSchoolProject(School.ChildId, semester);
                    }
                }
                else
                {
                    if (projectType == 'I' || projectType == 'H')
                    {
                        listProject = await projectQueries.GetAllTypeSchoolProject(School.ChildId, projectType);
                    }
                    else
                    {
                        listProject = await projectQueries.GetAllTypeSchoolProject(School.ChildId);
                    }
                }

                if (projectType == 'I')
                {
                    List <ProjectPiSheet> projectsSheet = new List <ProjectPiSheet>();


                    foreach (var item in listProject)
                    {
                        string[] place = new string[2];
                        place[0] = item.ClassRoom;
                        place[1] = item.ForumNumber.ToString();

                        string[] members = new string[item.UsersData.Count - 1];
                        string   leader  = "";
                        foreach (UserData usr in item.UsersData)
                        {
                            if (usr.UserId == item.LeaderId)
                            {
                                leader = usr.FirstName + " " + usr.LastName;
                            }
                            else
                            {
                                members[Array.IndexOf(members, null)] = usr.FirstName + " " + usr.LastName;
                            }
                        }
                        (string, string[])team = (leader, members);


                        ProjectPiSheet projectPiSheet = new ProjectPiSheet(place, item.GroupName, item.Semester, item.Sector, item.Logo, item.Slogan, item.Pitch, team, item.Technologies.ToArray());

                        projectsSheet.Add(projectPiSheet);
                    }

                    return(Ok(projectsSheet));
                }
                else if (projectType == 'H')
                {
                    List <ProjectPfhSheet> projectsSheet = new List <ProjectPfhSheet>();

                    foreach (var item in listProject)
                    {
                        string[] members = new string[item.UsersData.Count - 1];
                        string   leader  = "";
                        foreach (UserData usr in item.UsersData)
                        {
                            if (usr.UserId == item.LeaderId)
                            {
                                leader = usr.FirstName + " " + usr.LastName;
                            }
                            else
                            {
                                members[Array.IndexOf(members, null)] = usr.FirstName + " " + usr.LastName;
                            }
                        }
                        (string, string[])team = (leader, members);

                        string background = Convert.ToBase64String(new WebClient().DownloadData("https://drive.google.com/uc?id=143SNqM-rxFmDSrA7A2Wa29eu-gqhtdOn"));


                        ProjectPfhSheet projectPfhSheet = new ProjectPfhSheet(item.GroupName, item.Semester, "", item.Logo, item.Slogan, item.Pitch, team, background);

                        projectsSheet.Add(projectPfhSheet);
                    }

                    return(Ok(projectsSheet));
                }
                else
                {
                    List <ProjectSheet> projectsSheet = new List <ProjectSheet>();

                    foreach (var item in listProject)
                    {
                        string[] members = new string[item.UsersData.Count - 1];
                        string   leader  = "";
                        foreach (UserData usr in item.UsersData)
                        {
                            if (usr.UserId == item.LeaderId)
                            {
                                leader = usr.FirstName + " " + usr.LastName;
                            }
                            else
                            {
                                members[Array.IndexOf(members, null)] = usr.FirstName + " " + usr.LastName;
                            }
                        }
                        (string, string[])team = (leader, members);



                        if (item.Type == "H")
                        {
                            string          background      = Convert.ToBase64String(new WebClient().DownloadData("https://drive.google.com/uc?id=143SNqM-rxFmDSrA7A2Wa29eu-gqhtdOn"));
                            ProjectPfhSheet projectPfhSheet = new ProjectPfhSheet(item.GroupName, item.Semester, "", item.Logo, item.Slogan, item.Pitch, team, background);
                            projectsSheet.Add(projectPfhSheet);
                        }
                        else
                        {
                            string[] place = new string[2];
                            place[0] = item.ClassRoom;
                            place[1] = item.ForumNumber.ToString();
                            ProjectPiSheet projectPiSheet = new ProjectPiSheet(place, item.GroupName, item.Semester, item.Sector, item.Logo, item.Slogan, item.Pitch, team, item.Technologies.ToArray());
                            projectsSheet.Add(projectPiSheet);
                        }
                    }

                    return(Ok(projectsSheet));
                }
            }
        }