private e.AssignmentEnrollment CreateEntityFromAssignmentEnrollment(AssignmentEnrollment ae)
        {
            if (ae == null)
            {
                return(null);
            }
            e.AssignmentEnrollment result = e.AssignmentEnrollment.CreateAssignmentEnrollment(ae.Id, DateTime.Now, true);

            result.TeamReference.Value = (from t in _m.Team
                                          where t.Id == ae.Team.Id
                                          select t).First();
            result.TournamentAssignmentReference.Value = (from ta in _m.TournamentAssignment
                                                          where ta.Id == ae.TournamentAssignment.Id
                                                          select ta).First();


            //e.AssignmentEnrollment result = new MoCS.Data.Entity.AssignmentEnrollment()
            //{
            //    IsActive = ae.IsActive,
            //    StartDate = ae.StartDate,
            //    TournamentAssignment = CreateEntityFromTournamentAssignment(ae.TournamentAssignment),
            //    Team = CreateEntityFromTeam(ae.Team)
            //};

            return(result);
        }
Beispiel #2
0
        public ActionResult UploadSubmit()
        {
            Team                 team = SessionUtil.GetTeamFromFormsAuthentication();
            Tournament           t    = SessionUtil.GetTournamentFromSession();
            TournamentAssignment ta   = SessionUtil.GetTournamentAssignmentFromSession();
            Assignment           a    = SessionUtil.GetAssignmentFromSession();
            AssignmentEnrollment ae   = SessionUtil.GetAssignmentEnrollmentFromSession();

            if (Request.Files.Count == 1)
            {
                HttpPostedFileBase postedFile = Request.Files[0];

                TempData["SubmittedFileText"] = string.Format("File: {0} submitted", postedFile.FileName);

                //Check for big file (> 128KB)
                int submitMaxSize = int.Parse(ConfigurationManager.AppSettings["SubmitMaxSize"]) * 1024;

                if (postedFile.ContentLength > submitMaxSize)
                {
                    TempData["SubmittedFileText"] = string.Format("Submitted file is too large. Maximum size: {0}KB", submitMaxSize);
                    return(RedirectToAction("Index"));
                }

                //Check for right file extension
                if (postedFile.FileName.IndexOf(".cs") != postedFile.FileName.Length - 3)
                {
                    TempData["SubmittedFileText"] = "Submitted file doesn't have extension '.cs'.";
                    return(RedirectToAction("Index"));
                }

                //Construct the submit
                Submit s = new Submit()
                {
                    FileName             = Path.GetFileName(postedFile.FileName),
                    Team                 = team,
                    TournamentAssignment = ta,
                    AssignmentEnrollment = ae
                };
                s.Data = new byte[postedFile.ContentLength];

                postedFile.InputStream.Read(s.Data, 0, postedFile.ContentLength);

                // Do the submit
                try
                {
                    ClientFacade.Instance.SaveSubmit(s);
                }
                catch (MoCSException e)
                {
                    TempData["SubmittedFileText"] = "Unable to process submit. Reason: " + e.Message;
                }
            }

            return(RedirectToAction("Index"));
        }
Beispiel #3
0
        public AssignmentEnrollment SaveAssignmentEnrollment(AssignmentEnrollment ae)
        {
            e.AssignmentEnrollment toSave = CreateEntityFromAssignmentEnrollment(ae);

            _m.AddToAssignmentEnrollment(toSave);
            _m.SaveChanges();
            _m.Refresh(System.Data.Objects.RefreshMode.StoreWins, toSave);

            ae.Id = toSave.Id;

            return(ae);
        }
Beispiel #4
0
        private AssignmentEnrollment CreateIdAssignmentEnrollment(AssignmentEnrollment ae)
        {
            AssignmentEnrollment result = new AssignmentEnrollment
            {
                Id   = ae.Id,
                Team = CreateIdTeam(ae.Team),
                TournamentAssignment = CreateIdTournamentAssignment(ae.TournamentAssignment),
                IsActive             = true,
                StartDate            = DateTime.Now
            };

            return(result);
        }
Beispiel #5
0
        public static AssignmentEnrollment GetAssignmentEnrollmentFromSession()
        {
            AssignmentEnrollment result = null;

            if (HttpContext.Current.Session["assignmentEnrollmentId"] != null)
            {
                result = new AssignmentEnrollment()
                {
                    Id        = (int)HttpContext.Current.Session["assignmentEnrollmentId"],
                    StartDate = (DateTime)HttpContext.Current.Session["assignmentEnrollmentStartDate"]
                };
            }

            return(result);
        }
        private AssignmentEnrollment CreateAssignmentEnrollmentFromEntity(e.AssignmentEnrollment eAE)
        {
            if (eAE == null)
            {
                return(null);
            }
            AssignmentEnrollment result = new AssignmentEnrollment()
            {
                Id                   = eAE.Id,
                IsActive             = eAE.IsActive,
                StartDate            = eAE.StartDate,
                Team                 = CreateTeamFromEntity(eAE.Team),
                TournamentAssignment = CreateTournamentAssignmentFromEntity(eAE.TournamentAssignment)
            };

            return(result);
        }
Beispiel #7
0
        private e.AssignmentEnrollment CreateEntityFromAssignmentEnrollment(AssignmentEnrollment ae)
        {
            if (ae == null)
            {
                return(null);
            }

            e.AssignmentEnrollment result = e.AssignmentEnrollment.CreateAssignmentEnrollment(ae.Id, DateTime.Now, true);

            result.TeamReference.Value = (from t in _m.Team
                                          where t.Id == ae.Team.Id
                                          select t).First();
            result.TournamentAssignmentReference.Value = (from ta in _m.TournamentAssignment
                                                          where ta.Id == ae.TournamentAssignment.Id
                                                          select ta).First();
            return(result);
        }
Beispiel #8
0
        public ActionResult SelectEnrollment(int assignmentEnrollmentId)
        {
            Team team = SessionUtil.GetTeamFromFormsAuthentication();

            AssignmentEnrollment ae = ClientFacade.Instance.GetAssignmentEnrollmentById(assignmentEnrollmentId);

            if (ae != null && ae.Team.Id == team.Id)
            {
                // Set session
                SessionUtil.SetSession(ae.TournamentAssignment.Tournament, ae.TournamentAssignment, ae.TournamentAssignment.Assignment, ae);
            }
            else
            {
                return(RedirectToAction("Index"));
            }

            return(RedirectToAction("Index", "CurrentAssignment"));
        }
Beispiel #9
0
        public Submit SaveSubmit(Submit submit)
        {
            Submit result = null;

            //Check for unprocessed and already successful submits
            foreach (Submit s in GetSubmitsForAssignmentEnrollment(submit.AssignmentEnrollment.Id))
            {
                switch (s.ConvertStatus(s.Status))
                {
                case SubmitStatus.Submitted:
                case SubmitStatus.Processing:
                    throw new MoCSException("There are unprocessed submits. Please wait until all your submits have been processed.");

                case SubmitStatus.Success:
                    throw new MoCSException("A successful solution has already been submitted.");

                default:
                    break;
                }
            }

            submit.Status      = SubmitStatus.Submitted.ToString();
            submit.SubmitDate  = DateTime.Now;
            submit.StatusDate  = DateTime.Now;
            submit.IsProcessed = false;

            // Get the AssignmentEnrollment in order to determine the time since enrollment.
            AssignmentEnrollment ae = GetAssignmentEnrollmentById(submit.AssignmentEnrollment.Id);
            TimeSpan             timeSinceEnrollment = submit.SubmitDate - ae.StartDate;

            submit.SecondsSinceEnrollment = (long)timeSinceEnrollment.TotalSeconds;

            submit.ProcessingDetails = "Empty";
            submit.FileContents      = UTF8Encoding.UTF8.GetString(submit.Data);

            result = _dataAccess.SaveSubmit(submit);

            NotifySubmitStatusChange(result.Id, SubmitStatus.Submitted, "", result.StatusDate);

            return(result);
        }
Beispiel #10
0
        public ActionResult Enroll()
        {
            Team                 team = SessionUtil.GetTeamFromFormsAuthentication();
            Tournament           t    = SessionUtil.GetTournamentFromSession();
            TournamentAssignment ta   = SessionUtil.GetTournamentAssignmentFromSession();
            Assignment           a    = SessionUtil.GetAssignmentFromSession();

            if (ta == null)
            {
                return(RedirectToAction("Index", "Assignments"));
            }

            // TODO: Register the enrollment
            AssignmentEnrollment ae = new AssignmentEnrollment()
            {
                IsActive  = true,
                StartDate = DateTime.Now,
                Team      = new Team {
                    Id = team.Id
                },
                TournamentAssignment = new TournamentAssignment
                {
                    Id         = ta.Id,
                    Tournament = new Tournament {
                        Id = t.Id
                    },
                    Assignment = new Assignment {
                        Id = a.Id
                    }
                }
            };

            ClientFacade.Instance.SaveAssignmentEnrollment(ae);

            return(RedirectToAction("Index"));
        }
Beispiel #11
0
        public static void SetSession(Tournament t, TournamentAssignment ta, Assignment a, AssignmentEnrollment ae)
        {
            if (t != null)
            {
                HttpContext.Current.Session["tournamentId"]   = t.Id;
                HttpContext.Current.Session["tournamentName"] = t.Name;
            }
            else
            {
                HttpContext.Current.Session.Remove("tournamentId");
                HttpContext.Current.Session.Remove("tournamentName");
            }

            if (ta != null)
            {
                HttpContext.Current.Session["tournamentAssignmentId"] = ta.Id;
            }
            else
            {
                HttpContext.Current.Session.Remove("tournamentAssignmentId");
            }

            if (a != null)
            {
                HttpContext.Current.Session["assignmentId"]   = a.Id;
                HttpContext.Current.Session["assignmentName"] = a.Name;
            }
            else
            {
                HttpContext.Current.Session.Remove("assignmentId");
                HttpContext.Current.Session.Remove("assignmentName");
            }

            if (ae != null)
            {
                HttpContext.Current.Session["assignmentEnrollmentId"]        = ae.Id;
                HttpContext.Current.Session["assignmentEnrollmentStartDate"] = ae.StartDate;
            }
            else
            {
                HttpContext.Current.Session.Remove("assignmentEnrollmentId");
                HttpContext.Current.Session.Remove("assignmentEnrollmentStartDate");
            }
        }
Beispiel #12
0
        private e.AssignmentEnrollment CreateEntityFromAssignmentEnrollment(AssignmentEnrollment ae)
        {
            if (ae == null)
            {
                return null;
            }
            e.AssignmentEnrollment result = e.AssignmentEnrollment.CreateAssignmentEnrollment(ae.Id, DateTime.Now, true);

            result.TeamReference.Value = (from t in _m.Team
                                          where t.Id == ae.Team.Id
                                          select t).First();
            result.TournamentAssignmentReference.Value = (from ta in _m.TournamentAssignment
                                                          where ta.Id == ae.TournamentAssignment.Id
                                                          select ta).First();

            //e.AssignmentEnrollment result = new MoCS.Data.Entity.AssignmentEnrollment()
            //{
            //    IsActive = ae.IsActive,
            //    StartDate = ae.StartDate,
            //    TournamentAssignment = CreateEntityFromTournamentAssignment(ae.TournamentAssignment),
            //    Team = CreateEntityFromTeam(ae.Team)
            //};

            return result;
        }
Beispiel #13
0
        private AssignmentEnrollment CreateAssignmentEnrollmentFromEntity(e.AssignmentEnrollment eAE)
        {
            if (eAE == null)
            {
                return null;
            }
            AssignmentEnrollment result = new AssignmentEnrollment()
            {
                Id = eAE.Id,
                IsActive = eAE.IsActive,
                StartDate = eAE.StartDate,
                Team = CreateTeamFromEntity(eAE.Team),
                TournamentAssignment = CreateTournamentAssignmentFromEntity(eAE.TournamentAssignment)
            };

            return result;
        }
Beispiel #14
0
        public AssignmentEnrollment SaveAssignmentEnrollment(AssignmentEnrollment ae)
        {
            e.AssignmentEnrollment toSave = CreateEntityFromAssignmentEnrollment(ae);

            _m.AddToAssignmentEnrollment(toSave);
            _m.SaveChanges();
            _m.Refresh(System.Data.Objects.RefreshMode.StoreWins, toSave);

            ae.Id = toSave.Id;

            return ae;
        }
Beispiel #15
0
 /// <summary>
 /// There are no comments for AssignmentEnrollment in the schema.
 /// </summary>
 public void AddToAssignmentEnrollment(AssignmentEnrollment assignmentEnrollment)
 {
     base.AddObject("AssignmentEnrollment", assignmentEnrollment);
 }
Beispiel #16
0
        private e.AssignmentEnrollment CreateEntityFromAssignmentEnrollment(AssignmentEnrollment ae)
        {
            if (ae == null)
            {
                return null;
            }

            e.AssignmentEnrollment result = e.AssignmentEnrollment.CreateAssignmentEnrollment(ae.Id, DateTime.Now, true);

            result.TeamReference.Value = (from t in _m.Team
                                          where t.Id == ae.Team.Id
                                          select t).First();
            result.TournamentAssignmentReference.Value = (from ta in _m.TournamentAssignment
                                                          where ta.Id == ae.TournamentAssignment.Id
                                                          select ta).First();
            return result;
        }
Beispiel #17
0
 /// <summary>
 /// Create a new AssignmentEnrollment object.
 /// </summary>
 /// <param name="id">Initial value of Id.</param>
 /// <param name="startDate">Initial value of StartDate.</param>
 /// <param name="isActive">Initial value of IsActive.</param>
 public static AssignmentEnrollment CreateAssignmentEnrollment(int id, global::System.DateTime startDate, bool isActive)
 {
     AssignmentEnrollment assignmentEnrollment = new AssignmentEnrollment();
     assignmentEnrollment.Id = id;
     assignmentEnrollment.StartDate = startDate;
     assignmentEnrollment.IsActive = isActive;
     return assignmentEnrollment;
 }
        public void Fill(List <TournamentAssignment> taList)
        {
            // Get the teams
            Teams       = new List <Team>();
            Assignments = new List <Assignment>();

            OrderedDictionary tempStatusInfosPerTeam = new OrderedDictionary();

            OrderedDictionary submitsPerTournamentAssignment = new OrderedDictionary();

            foreach (TournamentAssignment ta in taList)
            {
                submitsPerTournamentAssignment.Add(ta.Id.ToString(), new List <Submit>());

                Assignments.Add(ta.Assignment);

                foreach (AssignmentEnrollment ae in ta.AssignmentEnrollmentList)
                {
                    // Add the team for this enrollment to the list
                    if (!Teams.Exists(t => t.Id == ae.Team.Id))
                    {
                        Teams.Add(ae.Team);
                        tempStatusInfosPerTeam.Add(ae.Team.Id.ToString(), new List <StatusInfo>());
                    }
                }
            }

            foreach (Team team in Teams)
            {
                foreach (TournamentAssignment ta in taList)
                {
                    // check if the team has an enrollment for this tournamentassignment
                    AssignmentEnrollment ae = ta.AssignmentEnrollmentList.Find(tae => tae.Team.Id == team.Id);
                    if (ae != null)
                    {
                        //If there's a submit, add it to the dictionary
                        if (ae.SubmitList.Count > 0)
                        {
                            ((List <Submit>)submitsPerTournamentAssignment[ta.Id.ToString()]).Add(ae.SubmitList[0]);
                        }
                        else
                        {
                            //add an empty submit placeholder for this enrollment
                            ((List <Submit>)submitsPerTournamentAssignment[ta.Id.ToString()]).Add(new Submit()
                            {
                                Status = "NullSubmit",
                                Team   = ae.Team,
                                SecondsSinceEnrollment = 0
                            });
                        }
                    }
                    else
                    {
                        //add an empty submit placeholder for this enrollment
                        ((List <Submit>)submitsPerTournamentAssignment[ta.Id.ToString()]).Add(new Submit()
                        {
                            Status = "NullSubmit",
                            Team   = team,
                            SecondsSinceEnrollment = 0
                        });
                    }
                }
            }

            foreach (TournamentAssignment ta in taList)
            {
                // sort the submits descending
                ((List <Submit>)submitsPerTournamentAssignment[ta.Id.ToString()]).Sort(new DescendingSubmitComparer());
            }

            foreach (string taId in submitsPerTournamentAssignment.Keys)
            {
                int finishOrder = 1;
                foreach (Submit s in ((List <Submit>)submitsPerTournamentAssignment[taId]))
                {
                    StatusEnum convertedStatus;
                    convertedStatus = ConvertSubmitStatus(s.ConvertStatus(s.Status));

                    StatusInfo statusInfo = new StatusInfo();
                    statusInfo.SecondsSinceEnrollment = s.SecondsSinceEnrollment;
                    statusInfo.Status      = convertedStatus;
                    statusInfo.FinishOrder = 0;

                    // If status is finished (successfull submit) add the seconds since enrollment
                    // to the score of the team
                    if (convertedStatus == StatusEnum.Finished)
                    {
                        Teams.Find(t => t.Id == s.Team.Id).Score += s.SecondsSinceEnrollment;
                        statusInfo.FinishOrder = finishOrder;
                        finishOrder++;
                    }

                    ((List <StatusInfo>)tempStatusInfosPerTeam[s.Team.Id.ToString()]).Add(statusInfo);
                }
            }

            Dictionary <int, List <Team> > FinishedPerTeam = new Dictionary <int, List <Team> >();
            List <int> finishedCounts = new List <int>();

            foreach (string teamId in tempStatusInfosPerTeam.Keys)
            {
                // determine how many assignments the team has finished
                int nrOfFinished = ((List <StatusInfo>)tempStatusInfosPerTeam[teamId]).FindAll(st => st.Status == StatusEnum.Finished).Count;

                if (!finishedCounts.Exists(f => f == nrOfFinished))
                {
                    finishedCounts.Add(nrOfFinished);
                    FinishedPerTeam.Add(nrOfFinished, new List <Team>());
                }

                if (nrOfFinished > 1)
                {
                    long totalScore = Teams.Find(t => t.Id == int.Parse(teamId)).Score;

                    // calculate mean score
                    long meanScore = (long)Math.Round((double)totalScore / (double)nrOfFinished);
                    Teams.Find(t => t.Id == int.Parse(teamId)).Score = meanScore;
                }

                FinishedPerTeam[nrOfFinished].Add(Teams.Find(t => t.Id == int.Parse(teamId)));
            }

            finishedCounts.Sort();
            finishedCounts.Reverse();

            List <Team> sortedTeamList = new List <Team>();

            foreach (int finishedCount in finishedCounts)
            {
                List <Team> teams = FinishedPerTeam[finishedCount];
                teams.Sort(new ScoreComparer());
                teams.Reverse();
                sortedTeamList.AddRange(teams);
            }

            Teams = sortedTeamList;

            //build definite statusInfosPerTeam dictionary, sorting by team
            foreach (Team t in Teams)
            {
                StatusInfosPerTeam.Add(t.Id.ToString(), tempStatusInfosPerTeam[t.Id.ToString()]);
            }
        }
Beispiel #19
0
 public AssignmentEnrollment SaveAssignmentEnrollment(AssignmentEnrollment ae)
 {
     return(_dataAccess.SaveAssignmentEnrollment(ae));
 }
Beispiel #20
0
        public ActionResult Index()
        {
            Team                 team = SessionUtil.GetTeamFromFormsAuthentication();
            Tournament           t    = SessionUtil.GetTournamentFromSession();
            TournamentAssignment ta   = SessionUtil.GetTournamentAssignmentFromSession();
            Assignment           a    = SessionUtil.GetAssignmentFromSession();

            if (ta == null)
            {
                return(RedirectToAction("Index", "Assignments"));
            }

            bool hasEnrolled = false;

            // Find enrollment
            List <AssignmentEnrollment> AEList;

            AEList = ClientFacade.Instance.GetAssignmentEnrollmentsForTeamForTournamentAssignment(ta.Id, team.Id);
            //MoCSServiceProxy.Instance.GetAssignmentEnrollmentsForTeamForTournament(teamId, tournamentId);

            // See if the team has enrolled for the tournament assignment.
            AssignmentEnrollment ae = AEList.Find(i => i.TournamentAssignment.Id == ta.Id && i.IsActive);

            if (ae != null)
            {
                hasEnrolled = true;
                SessionUtil.SetSession(t, ta, a, ae);
            }
            else
            {
                SessionUtil.SetSession(t, ta, a, null);
            }

            List <Submit> submitsByTeam = new List <Submit>();

            ta = ClientFacade.Instance.GetTournamentAssignmentById(ta.Id, false);
            if (hasEnrolled)
            {
                submitsByTeam = ClientFacade.Instance.GetSubmitsForAssignmentEnrollment(ae.Id);
            }

            // Construct the model
            CurrentAssignmentModel caModel = new CurrentAssignmentModel();

            caModel.HasEnrolled              = hasEnrolled;
            caModel.AssignmentName           = ta.Assignment.FriendlyName;
            caModel.AssignmentTagline        = ta.Assignment.Tagline;
            caModel.AssignmentCategory       = ta.Assignment.Category;
            caModel.AssignmentDifficulty     = ta.Assignment.Difficulty;
            caModel.AssignmentEnrollmentTime = DateTime.Now;

            caModel.DownloadURL = "http://google.com";

            caModel.SubmitModelList     = new List <SubmitModel>();
            caModel.TabContentModelList = new List <TabContentModel>();

            // Get the AssignmentFiles and Submits if the team has enrolled for this assignment

            if (hasEnrolled)
            {
                foreach (var tc in ta.Assignment.AssignmentFiles)
                {
                    caModel.TabContentModelList.Add(new TabContentModel()
                    {
                        Name        = tc.Name,
                        ContentType = "plaintext",
                        Content     = UTF8Encoding.UTF8.GetString(tc.Data).Replace(Environment.NewLine, "<br />")
                    });
                }

                foreach (var submit in submitsByTeam)
                {
                    string timeTaken = Math.Floor(submit.SecondsSinceEnrollment / 60d) + ":" + submit.SecondsSinceEnrollment % 60;
                    caModel.SubmitModelList.Add(new SubmitModel()
                    {
                        Id                = submit.Id,
                        Result            = submit.Status,
                        TimeTaken         = timeTaken,
                        SubmitDate        = submit.SubmitDate,
                        ProcessingDetails = submit.ProcessingDetails,
                        FileContents      = submit.FileContents.Replace(Environment.NewLine, "\r\n") //.Replace(Environment.NewLine, "<br />")
                    });
                }
            }

            return(View(caModel));
        }