protected void Page_Load(object sender, EventArgs e)
    {
        String committee_id_raw = Request.QueryString["id"];
        if (committee_id_raw == null)
            throw new System.Web.HttpException(400, "Missing committee ID");

        ISession session = DatabaseEntities.NHibernateHelper.CreateSessionFactory().OpenSession();

        try {
            committee_id = Int32.Parse(committee_id_raw);
            committee = DatabaseEntities.Committee.FindCommittee(session, committee_id);
            if(committee == null)
                throw new Exception("Committee not found.");
        } catch {
            throw new System.Web.HttpException(400, "Invalid committee ID");
        }

        CommName1.Text = committee.Name;
        CommName2.Text = committee.Name;

        if(!Page.IsPostBack) {
            GridViewUsers.DataSource = DatabaseEntities.User.FindUsers(session, committee);
            GridViewUsers.DataBind();
        }
    }
Ejemplo n.º 2
0
        public static void AddMembersToCommittee()
        {
            Console.Write("Add members to committee:\n");

            ISessionFactory factory = NHibernateHelper.CreateSessionFactory();
            // Clear out database
            using (ISession session = factory.OpenSession())
            {
                using (ITransaction transaction = session.BeginTransaction())
                {
                    Clear(session, transaction);
                }
            }

            // Pre-requisites
            using (ISession session = factory.OpenSession())
            {
                using (ITransaction transaction = session.BeginTransaction())
                {
                    // create a committee
                    Console.Write("Creat committee with 2 positions.\n");
                    Committee com = new Committee();
                    com.Name = "Acommittee";
                    com.PositionCount = 2;
                    session.SaveOrUpdate(com);

                    // add 2 users who are tenured and union members who are on
                    // the committee
                    Console.Write("Create 2 users and add them to the committee.\n");
                    for (int i = 0; i < 2; i++)
                    {
                        User user = User.CreateUser("e", i.ToString() + "F",
                            i.ToString() + "L", "p", "h", false, false, true, true,
                            false, DepartmentType.CSC, OfficerPositionType.None, true,
                            User.NoCommittee);
                        session.SaveOrUpdate(user);
                        user.AddToCommittee(session, "Acommittee");
                    }
                    transaction.Commit();
                }
            }

            // Assertions
            using (ISession session = factory.OpenSession())
            {
                using (ITransaction transaction = session.BeginTransaction())
                {
                    // assert that both users' committee fields reference the
                    // original committee
                    List<User> users = User.GetAllUsers(session);
                    Committee a = Committee.FindCommittee(session, "Acommittee");
                    Assert.AreEqual(a.ID, users[0].CurrentCommittee);
                    Assert.AreEqual(a.ID, users[1].CurrentCommittee);

                    Assert.AreEqual(0, a.NumberOfVacancies(session));
                    Assert.AreEqual(2, a.NumberOfPositions(session));
                }
            }
        }
    protected void Page_Load(object sender, EventArgs e)
    {
        String committee_id_raw = Request.QueryString["id"];
        if (committee_id_raw == null)
            throw new System.Web.HttpException(400, "Missing committee ID");

        ISession session = DatabaseEntities.NHibernateHelper.CreateSessionFactory().OpenSession();

        try {
            committee_id = Int32.Parse(committee_id_raw);
            committee = DatabaseEntities.Committee.FindCommittee(session, committee_id);
            if(committee == null)
                throw new Exception("Committee not found.");
        } catch {
            throw new System.Web.HttpException(400, "Invalid committee ID");
        }

        CheckForExistingElection(session);
    }
Ejemplo n.º 4
0
    protected void createScheme_Click(object sender, EventArgs e)
    {
        //Legacy
        databaseLogic dbLogic = new databaseLogic();
        dbLogic.createSchema();

        //NHibernate
        DatabaseEntities.NHibernateHelper.CreateSessionFactoryAndGenerateSchema();

        //Default committees
        ISession session = DatabaseEntities.NHibernateHelper.CreateSessionFactory().OpenSession();
        ITransaction transaction = session.BeginTransaction();

        Committee newCommittee = new Committee();
        newCommittee.Name = "Sabbatical Leave Committee";
        newCommittee.Description = "The Sabbatical Leave Committee receives applications for sabbatical and forwards recommendations to the University President.";
        newCommittee.PositionCount = 7;
        newCommittee.BargainingUnitRequired = true;
        newCommittee.TenureRequired = false;
        DatabaseEntities.NHibernateHelper.UpdateDatabase(session, newCommittee);

        newCommittee = new Committee();
        newCommittee.Name = "Promotion Committee";
        newCommittee.Description = "The University Promotion Committee reviews recommendations for promotion from Departmental Promotion Committees and recommends candidates for promotion to the University President. During the spring semester, members spend 4-6 hours per week in meetings.";
        newCommittee.PositionCount = 7;
        newCommittee.BargainingUnitRequired = true;
        newCommittee.TenureRequired = true;
        DatabaseEntities.NHibernateHelper.UpdateDatabase(session, newCommittee);

        newCommittee = new Committee();
        newCommittee.Name = "Tenure Committee";
        newCommittee.Description = "The University Tenure Committee reviews recommendations for tenure from Departmental Tenure Committees and recommends candidates for tenure to the University President. These activities take several hours per week during those periods when candidates are under active review.";
        newCommittee.PositionCount = 7;
        newCommittee.BargainingUnitRequired = true;
        newCommittee.TenureRequired = true;
        DatabaseEntities.NHibernateHelper.UpdateDatabase(session, newCommittee);

        DatabaseEntities.NHibernateHelper.Finished(transaction);

        createSchemaStatus.Visible = true;
        createScheme.Enabled = false;
    }
Ejemplo n.º 5
0
 /// <summary>
 /// Creates a CommitteeElection object based off of a committee
 /// </summary>
 /// <param name="session">A valid session</param>
 /// <param name="committee">The committee the election pertains to</param>
 /// <returns>A committeeElection object to be saved to the database, or null if there were no vacancies</returns>
 public static CommitteeElection CreateElection(ISession session,
     Committee committee)
 {
     CommitteeElection ret = new CommitteeElection();
     ret.PertinentCommittee = committee.ID;
     ret.Started = DateTime.Now;
     ret.PhaseStarted = ret.Started;
     ret.Phase = ElectionPhase.WTSPhase;
     ret.VacanciesToFill = committee.NumberOfVacancies(session);
     ret.PhaseEndDelta = 0;
     // return null if there are no vacancies to fill or if there is
     // already an election for this committee
     if (ret.VacanciesToFill <= 0 || session.CreateCriteria(typeof(CommitteeElection))
                                            .Add(Restrictions.Eq("PertinentCommittee", committee.ID))
                                            .Add(Restrictions.Not(Restrictions.Eq("Phase", ElectionPhase.ClosedPhase)))
                                            .UniqueResult<CommitteeElection>() != null)
         return null;
     else
         return ret;
 }
Ejemplo n.º 6
0
 /// <summary>
 /// Indicates whether or not there is a member in a given department within a givin committee.
 /// </summary>
 /// <param name="session">A valid session.</param>
 /// <param name="committee">The committee in question.</param>
 /// <param name="department">The department to find in the committee.</param>
 /// <returns></returns>
 public static bool DepartmentRepresented(ISession session, Committee committee, DepartmentType department)
 {
     List<User> members = User.FindUsers(session, committee.Name);
     foreach (User i in members)
     {
         if (i.Department == department)
             return true;
     }
     return false;
 }
Ejemplo n.º 7
0
 /// <summary>
 /// Detects conflicts within a given committee.  For use with the committees dashboard only.
 /// </summary>
 /// <param name="session">A valid session.</param>
 /// <param name="id">The ID of the committee in question.</param>
 /// <returns>A list of strings containing information (in english) about any conflicts</returns>
 public static List<string> FindConflicts(ISession session, Committee committee)
 {
     List<string> ret = new List<string>();
     List<User> members = User.FindUsers(session, committee.Name);
     // Find if multiple members of the same department are on the committee
     List<DepartmentType> departments = new List<DepartmentType>();
     foreach (User i in members)
     {
         if (departments.Contains(i.Department))
             ret.Add("Warning! Multiple faculty members in the " + i.Department.ToString() + " department are on this committee!");
         else departments.Add(i.Department);
     }
     return ret;
 }
Ejemplo n.º 8
0
        public static void TestCommitteeCreationFailure()
        {
            Console.Write("Test Committee Election Failure:\n");
            ISessionFactory factory = NHibernateHelper.CreateSessionFactory();
            // Clear out database
            using (ISession session = factory.OpenSession())
            {
                using (ITransaction transaction = session.BeginTransaction())
                {
                    Clear(session, transaction);
                }
            }

            // Pre-requisites
            using (ISession session = factory.OpenSession())
            {
                using (ITransaction transaction = session.BeginTransaction())
                {
                    // create a committee: 3 positions, 3 filled
                    Console.Write("Create committee with 3 positions.\n");
                    Committee com = new Committee();
                    com.Name = "Acommittee";
                    com.PositionCount = 3;
                    session.SaveOrUpdate(com);
                    // add 3 users who are tenured and union members who are on
                    // the committee
                    Console.Write("Create 3 users and give them positions in the committee.\n");
                    User[] users = new User[3];
                    for (int i = 0; i < 3; i++)
                    {
                        users[i] = User.CreateUser("e", i.ToString() + "F",
                            i.ToString() + "L", "p", "h", false, false, true, true,
                            false, DepartmentType.CSC, OfficerPositionType.None, true,
                            com.ID);
                        session.SaveOrUpdate(users[i]);
                    }
                    transaction.Commit();
                }
                // Assertions
                using (ITransaction transaction = session.BeginTransaction())
                {
                    Console.Write("Attempting to create an election based off the committee.\n");
                    Committee com = Committee.FindCommittee(session, "Acommittee");
                    CommitteeElection election =
                        CommitteeElection.CreateElection(session, com);
                    Console.Write("CommitteeElection value (should be null): ");
                    Assert.AreEqual(null, election);
                }
            }
        }
Ejemplo n.º 9
0
        public static void RemoveMembersFromCommittees()
        {
            Console.Write("Remove members from committee:\n");

            ISessionFactory factory = NHibernateHelper.CreateSessionFactory();
            // Clear out database
            using (ISession session = factory.OpenSession())
            {
                using (ITransaction transaction = session.BeginTransaction())
                {
                    Clear(session, transaction);
                }
            }
            // Pre-requisites
            using (ISession session = factory.OpenSession())
            {
                using (ITransaction transaction = session.BeginTransaction())
                {
                    // create a committee
                    Console.Write("Create committee with 2 positions.\n");
                    Committee com = new Committee();
                    com.Name = "Acommittee";
                    com.PositionCount = 2;
                    session.SaveOrUpdate(com);

                    // add 2 users who are tenured and union members who are on
                    // the committee
                    Console.Write("Create 2 users and add them to the committee.\n");
                    for (int i = 0; i < 2; i++)
                    {
                        User user = User.CreateUser("e", i.ToString() + "F",
                            i.ToString() + "L", "p", "h", false, false, true, true,
                            false, DepartmentType.CSC, OfficerPositionType.None, true,
                            User.NoCommittee);
                        session.SaveOrUpdate(user);
                        user.AddToCommittee(session, "Acommittee");
                    }
                    transaction.Commit();
                }
            }
            // More pre-requisites
            using (ISession session = factory.OpenSession())
            {
                using (ITransaction transaction = session.BeginTransaction())
                {
                    Console.Write("Remove one of the users.\n");
                    List<User> users = User.GetAllUsers(session);
                    Committee c = Committee.FindCommittee(session, "Acommittee");
                    Committee.RemoveMember(session, users[0], c.ID);
                    session.SaveOrUpdate(users[0]);
                    transaction.Commit();
                }
            }
            // Assertions
            using (ISession session = factory.OpenSession())
            {
                using (ITransaction transaction = session.BeginTransaction())
                {
                    List<User> users = User.GetAllUsers(session);
                    Assert.AreEqual(User.NoCommittee, users[0].CurrentCommittee);

                    Assert.AreEqual(1, Committee.FindCommittee(session, "Acommittee").NumberOfVacancies(session));
                }
            }
        }
Ejemplo n.º 10
0
        public static void NominationPhaseSkipped()
        {
            Console.Write("Nomination Phase Skipped:\n");

            ISessionFactory factory = NHibernateHelper.CreateSessionFactory();
            // Clear out database
            using (ISession session = factory.OpenSession())
            {
                using (ITransaction transaction = session.BeginTransaction())
                {
                    Clear(session, transaction);
                }
            }

            // Preconditions
            using (ISession session = factory.OpenSession())
            {
                using (ITransaction transaction = session.BeginTransaction())
                {
                    // create a committee
                    Console.Write("Create committee with 3 positions.\n");
                    Committee com = new Committee();
                    com.Name = "Acommittee";
                    com.PositionCount = 3;
                    session.SaveOrUpdate(com);

                    // add 2 users who are tenured and union members who are on
                    // the committee
                    Console.Write("Create 5 users and add 2 of them to the committee.\n");
                    for (int i = 0; i < 5; i++)
                    {
                        User user = User.CreateUser("e", i.ToString() + "F",
                            i.ToString() + "L", "p", "h", false, false, true, true,
                            false, DepartmentType.CSC, OfficerPositionType.None, true,
                            User.NoCommittee);
                        session.SaveOrUpdate(user);
                        if(i < 2)
                            user.AddToCommittee(session, "Acommittee");
                    }
                    // create an election for the committee
                    Console.Write("Create an election based off the committee.\n");
                    CommitteeElection election =
                        CommitteeElection.CreateElection(session, com);
                    session.SaveOrUpdate(election);

                    session.Flush();

                    // submit WTS for 2 users
                    Console.Write("Submitting WTSes for 2 users.");
                    for (int i = 2; i < 4; i++)
                    {
                        CommitteeWTS wts = new CommitteeWTS();
                        wts.Election = election.ID;
                        wts.Statement = "thisisastatement.";
                        wts.User = i;
                        session.SaveOrUpdate(wts);
                        session.Flush();
                    }
                    session.Flush();
                    transaction.Commit();
                }
            }

            // Assertions
            using (ISession session = factory.OpenSession())
            {
                using (ITransaction transaction = session.BeginTransaction())
                {
                    CommitteeElection election = CommitteeElection.FindElection(session, "Acommittee");
                    ElectionPhase phase = election.NextPhase(session);

                    Assert.AreEqual(phase, ElectionPhase.VotePhase);
                }
            }
        }
Ejemplo n.º 11
0
        public static void NextPhaseBehavesProperly()
        {
            Console.Write("Next phase behaves properly:\n");

            ISessionFactory factory = NHibernateHelper.CreateSessionFactory();
            // Clear out database
            using (ISession session = factory.OpenSession())
            {
                using (ITransaction transaction = session.BeginTransaction())
                {
                    Clear(session, transaction);
                }
            }

            // Preconditions
            using (ISession session = factory.OpenSession())
            {
                using (ITransaction transaction = session.BeginTransaction())
                {
                    // create a committee
                    Console.Write("Create committee with 3 positions.\n");
                    Committee com = new Committee();
                    com.Name = "Acommittee";
                    com.PositionCount = 3;
                    session.SaveOrUpdate(com);
                    transaction.Commit();
                }
            }
            using (ISession session = factory.OpenSession())
            {
                using (ITransaction transaction = session.BeginTransaction())
                {
                    // add 2 users who are tenured and union members who are on
                    // the committee
                    Console.Write("Create 2 users and add them to the committee.\n");
                    for (int i = 0; i < 2; i++)
                    {
                        User user = User.CreateUser("e", i.ToString() + "F",
                            i.ToString() + "L", "p", "h", false, false, true, true,
                            false, DepartmentType.CSC, OfficerPositionType.None, true,
                            User.NoCommittee);
                        user.AddToCommittee(session, "Acommittee");
                        session.SaveOrUpdate(user);
                    }

                    CommitteeElection election = CommitteeElection.CreateElection(session, Committee.FindCommittee(session, "Acommittee"));
                    election.Phase = ElectionPhase.NominationPhase;
                    session.SaveOrUpdate(election);
                    transaction.Commit();
                }
            }

            // Assertions
            using (ISession session = factory.OpenSession())
            {
                using (ITransaction transaction = session.BeginTransaction())
                {
                    CommitteeElection election =
                        CommitteeElection.FindElection(session, "Acommittee");

                    Assert.AreEqual(ElectionPhase.VotePhase, election.NextPhase(session));
                    election.SetPhase(session, ElectionPhase.VotePhase);
                    transaction.Commit();
                }
            }
            using (ISession session = factory.OpenSession())
            {
                using (ITransaction transaction = session.BeginTransaction())
                {
                    CommitteeElection election =
                        CommitteeElection.FindElection(session, "Acommittee");

                    Assert.AreEqual(ElectionPhase.ConflictPhase, election.NextPhase(session));
                    election.SetPhase(session, ElectionPhase.ConflictPhase);
                    transaction.Commit();
                }
            }
            using (ISession session = factory.OpenSession())
            {
                using (ITransaction transaction = session.BeginTransaction())
                {
                    CommitteeElection election =
                        CommitteeElection.FindElection(session, "Acommittee");

                    Assert.AreEqual(ElectionPhase.ClosedPhase, election.NextPhase(session));

                    election.SetPhase(session, ElectionPhase.ClosedPhase);
                    transaction.Commit();
                }
            }
        }
Ejemplo n.º 12
0
        public static void InitiateCommitteeElection()
        {
            Console.Write("Initial Committee Election:\n");
            // Set up pre-conditions
            ISessionFactory factory = NHibernateHelper.CreateSessionFactory();
            using (ISession session = factory.OpenSession())
            {
                using (ITransaction transaction = session.BeginTransaction())
                {
                    // clear the databse first
                    Clear(session, transaction);
                }
                using (ITransaction transaction = session.BeginTransaction())
                {
                    // add an admin user
                    Console.Write("Create admin user.\n");
                    User user = User.CreateUser("e", "f", "l", "p", "h", true, false,
                        false, false, false, DepartmentType.CSC,
                        OfficerPositionType.None, false, -1);
                    session.SaveOrUpdate(user);

                    // create a committee: 4 positions, 3 filled
                    Console.Write("Create committee with 4 positions.\n");
                    Committee com = new Committee();
                    com.Name = "Acommittee";
                    com.PositionCount = 4;
                    session.SaveOrUpdate(com);

                    // add 3 users who are tenured and union members who are on
                    // the committee
                    Console.Write("Create 3 users and give them positions in the committee.\n");
                    User[] users = new User[3];
                    for (int i = 0; i < 3; i++)
                    {
                        users[i] = User.CreateUser("e", i.ToString() + "F",
                            i.ToString() + "L", "p", "h", false, false, true, true,
                            false, DepartmentType.CSC, OfficerPositionType.None, true,
                            com.ID);
                        session.SaveOrUpdate(users[i]);
                    }
                    transaction.Commit();
                }
                using (ITransaction transaction = session.BeginTransaction())
                {
                    Console.Write("Create an election based off the committee.\n");
                    Committee com = Committee.FindCommittee(session, "Acommittee");
                    CommitteeElection election =
                        CommitteeElection.CreateElection(session, com);
                    session.SaveOrUpdate(election);
                    transaction.Commit();
                }
            }
            // Assertions
            using (ISession session = factory.OpenSession())
            {
                using (ITransaction transaction = session.BeginTransaction())
                {
                    Console.Write("Election object's phase is WTSPhase: ");
                    Assert.AreEqual(ElectionPhase.WTSPhase, CommitteeElection.FindElection(session, "Acommittee").Phase);

                    int vacancies = CommitteeElection.FindElection(session, "Acommittee").VacanciesToFill;
                    Assert.AreEqual(1, vacancies);

                    // Put email stuff here
                }
            }
        }
Ejemplo n.º 13
0
 /// <summary>
 /// Adds the specified user to the specified committee
 /// </summary>
 /// <param name="session">A valid session.</param>
 /// <param name="user">A reference to the user to be added</param>
 /// <param name="committee">The name of the committee the user is to be added to.</param>
 /// <returns>True if the operation was successful.</returns>
 public virtual bool AddToCommittee(ISession session, Committee com)
 {
     if (com != null)
     {
         // Note that the logical if then (A -> B) binary operation
         // is equivalent to (~A v B)
         if ((!com.TenureRequired || this.IsTenured) && // logical if then
             (!com.BargainingUnitRequired || this.IsBargainingUnit) && // logical if then
             com.NumberOfVacancies(session) > 0)
         {
             this.CurrentCommittee = com.ID;
             session.SaveOrUpdate(this);
             session.Flush();
             return true;
         }
         else return false;
     }
     else
         return false;
 }
Ejemplo n.º 14
0
 /// <summary>
 /// Returns a list of users on the committee specified.
 /// </summary>
 /// <param name="session">A valid session.</param>
 /// <param name="currentCommittee">The pertinent committee.</param>
 /// <returns>A list of all the users on the specified committee.</returns>
 public static List<User> FindUsers(ISession session, 
     Committee currentCommittee)
 {
     return session.CreateCriteria(typeof(User))
         .Add(Restrictions.Eq("CurrentCommittee", currentCommittee.ID))
         .List<User>().ToList();
 }
Ejemplo n.º 15
0
    protected void Page_Load(object sender, EventArgs e)
    {
        if (Request.QueryString["id"] == null ||
            Request.QueryString["id"] == "")
            throw new HttpException(400, "Invalid election ID");

        ElectionID = int.Parse(Request.QueryString["id"]);

        session = NHibernateHelper.CreateSessionFactory().OpenSession();

        // grab the objects based off the committee ID
        election = CommitteeElection.FindElection(session, ElectionID);
        if (election == null)
            Response.Redirect("home.aspx#election_not_found");
        committee = Committee.FindCommittee(session, election.PertinentCommittee);
        if (committee == null)
            Response.Redirect("home.aspx#committee_not_found");

        VacancyCount.Text = election.VacanciesToFill.ToString();
        CommitteeNameLiteral.Text = committee.Name;
        CommitteeNameLiteral2.Text = committee.Name;
        CommitteeDescription.Text = committee.Description;
        must_be_tenured.Visible = committee.TenureRequired;

        user = DatabaseEntities.User.FindUser(session, User.Identity.Name);

        MakeElectionSpecial.Visible = user.IsAdmin;

        // expose the pertinent panel based on the state of the election.
        switch (election.Phase)
        {
            case ElectionPhase.WTSPhase:
                //*******************************
                //****** Faculty WTS Load *******
                //*******************************
                //Check if WTS already exists
                List<DatabaseEntities.CommitteeWTS> wtsList = DatabaseEntities.CommitteeWTS.FindCommitteeWTS(session, election.ID);
                bool wtsAlreadySubmitted = false;
                foreach (DatabaseEntities.CommitteeWTS wts in wtsList)
                {
                    if (wts.Election == election.ID && wts.User == user.ID &&
                        (!committee.TenureRequired || user.IsTenured) &&
                        (!committee.BargainingUnitRequired || user.IsBargainingUnit))
                        wtsAlreadySubmitted = true;
                }

                if(user.CurrentCommittee == committee.ID) {
                    wtsPanelServing.Visible = true;
                    wtsPanelNew.Visible = false;
                } else if (wtsAlreadySubmitted &&
                   (!committee.TenureRequired || user.IsTenured) &&
                   (!committee.BargainingUnitRequired || user.IsBargainingUnit))
                {
                    wtsPanelExisting.Visible = true;
                    wtsPanelNew.Visible = false;
                }
                if ((!committee.TenureRequired || user.IsTenured) &&
                    (!committee.BargainingUnitRequired || user.IsBargainingUnit))
                    FacultyWTS.Visible = true;
                //Prevent a user from submitting a WTS if a member from their department is on the committee
                if(DatabaseEntities.Committee.DepartmentRepresented(session, committee, user.Department))
                    FacultyWTS.Visible = false;

                break;
            case ElectionPhase.NominationPhase:
                if(!user.CanVote)
                    break;

                if (CommitteeWTSNomination.FindCommitteeWTSNomination(session,
                    election.ID, user.ID).Count == 0)
                {
                    FacultyNomination.Visible = true;
                    BuildUserNominationOptions();
                }
                else
                    FacultyNominationComplete.Visible = true;
                break;
            case ElectionPhase.VotePhase:
                if(!user.CanVote)
                    break;

                if (BallotFlag.FindBallotFlag(session, election.ID, user.ID) ==
                    null)
                {
                    FacultyVote.Visible = true;
                    BuildUserVoteOptions();
                }
                else
                    FacultyVoteComplete.Visible = true;
                break;
            case ElectionPhase.ClosedPhase:
                if (!user.IsNEC && !user.IsAdmin)
                    FacultyClosed.Visible = true;
                break;
        }

        JulioButtonHider.Visible = user.IsAdmin;
        CancelElection.Visible = user.IsAdmin;

        if (user.IsNEC && election.Phase == ElectionPhase.CertificationPhase)
        {
            ActivateTab("CertificationPhase");
            NECCertificationPanel.Visible = true;
            BuildNECVoteTable();
            if(Certification.FindCertification(session, election.ID, user.ID) != null)
            {
                NECCertifyAgreement.Visible = false;
                CertifyCheckBox.Visible = false;
                CertifyButton.Visible = false;
                CertifyWarning.Visible = false;
                NECCertificationComplete.Visible = true;
            }
        }

        DaysLeftInPhase();
        JulioButton.Text = "Switch to Next Phase";
        switch(election.Phase) {
            case ElectionPhase.WTSPhase:
                PhaseLiteral.Text = "WTS Phase";
                break;
            case ElectionPhase.NominationPhase:
                PhaseLiteral.Text = "Nomination Phase";
                break;
            case ElectionPhase.VotePhase:
                PhaseLiteral.Text = "Voting Phase";
                break;
            case ElectionPhase.CertificationPhase:
                PhaseLiteral.Text = "Certification Phase";
                if(ElectionConflict.FindElectionConflicts(session, election.ID).Count == 0)
                    JulioButton.Text = "Close Election";
                break;
            case ElectionPhase.ConflictPhase:
                PhaseLiteral.Text = "Conflict Resolution Phase";
                JulioButton.Text = "Close Election";
                break;
            case ElectionPhase.ClosedPhase:
                PhaseLiteral.Text = "Closed";
                CancelElection.Visible = false;
                JulioButtonHider.Visible = false;
                break;
        }

        if(user.IsAdmin) {

            ActivateTab(election.Phase.ToString());

            JulioButton.Visible = true;
            JulioButtonSpacerText.Visible = true;
            if(election.Phase >= ElectionPhase.ClosedPhase)
                closed_tab.Visible = true;
            if (election.Phase == ElectionPhase.ConflictPhase)
            {
                List<ElectionConflict> conflicts = ElectionConflict.FindElectionConflicts(session, election.ID);
                foreach (ElectionConflict conflict in conflicts)
                {
                    DatabaseEntities.User conflictUser1 =
                        DatabaseEntities.User.FindUser(session, conflict.FirstUser);
                    if (conflict.Type == ConflictType.ElectedToMultipleCommittees)
                        BuildMultipleCommitteesConflictPanel(conflictUser1, conflict.ID);
                    if (conflict.Type == ConflictType.TooManyDeptMembers)
                    {
                        DatabaseEntities.User conflictUser2 =
                        DatabaseEntities.User.FindUser(session, conflict.SecUser);
                        BuildTooManyDeptConflictPanel(conflictUser1,
                            conflictUser2, conflictUser2.Department, conflict.ID);
                    }
                }
                JulioButton.Visible = conflicts.Count == 0;
                JulioButtonSpacerText.Visible = conflicts.Count == 0;
                if (conflicts.Count == 0)
                    AdminNoConflicts.Visible = true;
                else
                    DaysRemaining.Text = "The election cannot be closed while conflicts are present.";

                conflicts_tab.Visible = true;
            }

            if (election.Phase >= ElectionPhase.CertificationPhase)
            {
                int numberCertifications = Certification.FindCertifications(session, election.ID).Count;
                string req_certs = System.Configuration.ConfigurationManager.AppSettings["required_nec_certs"];
                int nec_certs = req_certs != null ? int.Parse(req_certs) : 3;

                AdminCertCount.Text = "There are currently " + numberCertifications.ToString();
                if (numberCertifications >= nec_certs) // TODO: Add a button to advance to the next phase.
                    AdminCertCount.Text += " certifications, which is enough to proceed to the next stage.";
                else
                    AdminCertCount.Text += " certification(s).  More NEC members must certify the results before proceeding.";
                certifications_tab.Visible = true;
                necprogressbar.Attributes.Add("style", "width: " + Math.Min(100, numberCertifications * (100 / nec_certs)).ToString() + "%");

                if(numberCertifications < nec_certs) {
                    HtmlGenericControl pretext = new HtmlGenericControl("span");
                    pretext.InnerText = certifications_tab_link.Text;
                    certifications_tab_link.Controls.Add(pretext);

                    HtmlGenericControl badge = new HtmlGenericControl("span");
                    badge.Attributes["class"] = "badge badge-info";
                    badge.Attributes["style"] = "margin-left: 0.5em;";
                    badge.InnerText = numberCertifications.ToString();
                    certifications_tab_link.Controls.Add(badge);
                }

            }
            if (election.Phase >= ElectionPhase.VotePhase)
            {
                votes_tab.Visible = true;
                BuildAdminVoteTable();
            }
            if (election.Phase >= ElectionPhase.NominationPhase)
            {
                nominations_tab.Visible = true;
                BuildAdminNominationTable();
            }
            if(election.Phase >= ElectionPhase.WTSPhase &&
               election.Phase < ElectionPhase.ClosedPhase)
                wts_tab.Visible = true;

            //*******************************
            //******** Admin WTS Load *******
            //*******************************

            List<DatabaseEntities.CommitteeWTS> wtsList = DatabaseEntities.CommitteeWTS.FindCommitteeWTS(session, election.ID);

            foreach (DatabaseEntities.CommitteeWTS wts in wtsList)
            {
                DatabaseEntities.User wtsUser = DatabaseEntities.User.FindUser(session, wts.User);
                if(wtsUser == null)
                    continue;

                TableRow tr = new TableRow();

                Label revokeNameLabel = new Label();
                revokeNameLabel.Text = wtsUser.FirstName + " " + wtsUser.LastName;
                TableCell td1 = new TableCell();
                td1.Controls.Add(revokeNameLabel);

                Label revokeDeptLabel = new Label();
                revokeDeptLabel.Text = wtsUser.Department.ToString();
                TableCell td2 = new TableCell();
                td2.Controls.Add(revokeDeptLabel);

                Button revokeButton = new Button();
                revokeButton.Text = "Revoke";
                revokeButton.CssClass = "btn btn-danger btn-small";
                revokeButton.CommandArgument = wts.User.ToString();
                revokeButton.Click += new System.EventHandler(this.wtsRevoke_Click);
                TableCell td3 = new TableCell();
                td3.Controls.Add(revokeButton);

                tr.Cells.Add(td1);
                tr.Cells.Add(td2);
                tr.Cells.Add(td3);

                wtsAdminTable.Rows.Add(tr);

            }
            if(wtsList.Count == 0) {
                TableRow tr = new TableRow();

                TableCell td1 = new TableCell();
                td1.Controls.Add(new LiteralControl("No WTS forms have been submitted yet."));
                td1.ColumnSpan = 3;
                tr.Controls.Add(td1);

                wtsAdminTable.Rows.Add(tr);
            }
        }
    }