public Student_RollCall GetDetailedAttendance(int moduleID, int studentID)
        {
            //broken and unused
            SqlParameter[] paramaters = new SqlParameter[]
            {
                new SqlParameter("@moduleID", moduleID),
                new SqlParameter("@studentID", studentID)
            };

            Student_RollCall student_RollCall = null;

            using (DataTable table = DBHelper.ExecuteParamerizedSelectCommand("sp_GetDetailedAttendance", CommandType.StoredProcedure, paramaters))
            {
                if (table.Rows.Count > 0)
                {
                    foreach (DataRow row in table.Rows)
                    {
                        student_RollCall = new Student_RollCall();
                        student_RollCall.StudentID = Convert.ToInt32(row["StudentID"]);
                        student_RollCall.RollCallID = Convert.ToInt32(row["RollCallID"]);
                        student_RollCall.Status = row["Status"].ToString();
                        student_RollCall.TimeOfSignIn = row["TimeOfSignIn"].ToString();
                    }
                }
            }
            return student_RollCall;
        }
        public bool AddNewStudent_RollCall(Student_RollCall student_RollCall)
        {
            SqlParameter[] parameters = new SqlParameter[]
            {
                new SqlParameter("@StudentID", student_RollCall.StudentID),
                new SqlParameter("@RollCallID", student_RollCall.RollCallID),
                new SqlParameter("@Status", student_RollCall.Status),
                new SqlParameter("@TimeOfSignIn", student_RollCall.TimeOfSignIn)
            };

            return DBHelper.ExecuteNonQuery("sp_AddNewStudent_RollCall", CommandType.StoredProcedure, parameters);
        }
        protected void Page_Load(object sender, EventArgs e)
        {
            //test url: http://localhost:7820/SignIn.aspx?id=1&num=235346
            int rollCallID = Convert.ToInt32(Request.QueryString["id"]);
            string studentNumber = Request.QueryString["num"];

            //find roll call and check if it is active
            RollCallHandler rollCallHandler = new RollCallHandler();
            RollCall rollCall = new RollCall();

            rollCall = rollCallHandler.GetRollCallDetails(rollCallID);

            //check if auto disable exists
            if (rollCall.AutoDisable != "")
            {
                DateTime autoDisableDate = DateTime.Parse(rollCall.AutoDisable);

                if (DateTime.Compare(autoDisableDate, DateTime.Now) < 0)
                {
                    //auto disabl date reached, disable roll call
                    rollCallHandler.EndRollCall(rollCallID);
                    rollCall.Status = "disabled";
                }
            }

            if (rollCall.Status == "enabled")
            {

                //get student details
                StudentHandler studentHandler = new StudentHandler();
                Student student = new Student();
                student = studentHandler.GetStudentID(studentNumber);

                //sign in
                Student_RollCallHandler student_RollCallHandler = new Student_RollCallHandler();
                Student_RollCall student_RollCall = new Student_RollCall();

                student_RollCall.RollCallID = rollCallID;
                student_RollCall.StudentID = student.StudentID;
                student_RollCall.Status = "present";
                student_RollCall.TimeOfSignIn = DateTime.Now.ToString();

                student_RollCallHandler.AddNewRollCall(student_RollCall);

            }
            else
            {

            }
        }
        protected void btnGetReport_Click(object sender, EventArgs e)
        {
            string htmlOutput = "<thead><tr><th>Date <i class='fa fa-sort'></i></th><th>Status <i class='fa fa-sort'></i></th></tr></thead>";
            litReport.Text = "";
            //for each roll call held show status of selected student

            RollCallHandler rollCallHandler = new RollCallHandler();
            //get list of roll calls held for the module
            List<RollCall> listRollCalls = rollCallHandler.GetRollCallList(Convert.ToInt32(dlModules.SelectedValue));

            //get a students attendance for each of the found roll calls
            Student_RollCall student_RollCall = new Student_RollCall();
            Student_RollCallHandler student_RollCallHandler = new Student_RollCallHandler();
            try
            {

                foreach (RollCall r in listRollCalls)
                {
                    student_RollCall = student_RollCallHandler.GetStudentAttendance(r.RollCallID, Convert.ToInt32(dlStudents.SelectedValue));

                    try
                    {

                        litReport.Text += student_RollCall.Status + "<br/>";
                        DateTime date = Convert.ToDateTime(r.TimeOfRollCall);
                        htmlOutput += "<tr><td>" + date.ToString("MM/dd/yyyy HH:mm tt") + "</td><td>" + student_RollCall.Status + "</td></tr>\n";
                    }
                    catch (NullReferenceException)
                    {
                        litReport.Text += "Absent<br/>";
                        DateTime date = Convert.ToDateTime(r.TimeOfRollCall);
                        htmlOutput += "<tr><td>" + date.ToString("MM/dd/yyyy HH:mm tt") + "</td><td>absent</td></tr>\n";
                    }
                }

                Student student = new Student();
                StudentHandler studentHandler = new StudentHandler();
            }
            catch
            {
                htmlOutput = "<div class='alert alert-danger'>No records found</div>";
            }
            litReport.Text = htmlOutput;
        }
        protected void btnGetReport_Click(object sender, EventArgs e)
        {
            //when a module us selected display all students linked to that module, and their attendance for each roll call
            //data needed: student name, status

            //get studentID, firstname, surname using ModuleID
            //for each student use studentID to find roll call status

            StudentHandler studentHandler = new StudentHandler();
            RollCallHandler rollCallHandler = new RollCallHandler();
            Student_RollCallHandler student_RollCallHandler = new Student_RollCallHandler();
            Student_RollCall student_RollCall = new Student_RollCall();

            List<Student> listStudents = studentHandler.GetStudentList(Convert.ToInt32(dlModules.SelectedValue));

            litReport.Text = "";
            string htmlOutput = "<thead><tr><th>Student <i class='fa fa-sort'></i></th><th>Percent <i class='fa fa-sort'></i></th></tr></thead>";

            try
            {
                //get list of roll calls IDs held for a module
                List<RollCall> listRollCalls = rollCallHandler.GetRollCallList(Convert.ToInt32(dlModules.SelectedValue));

                int countRollCall = 0;
                int countStudent = 0;
                string[,] studentData = new string[listStudents.Count, 2];

                string[] student = new string[listStudents.Count] ;
                int[] attending = new int[listRollCalls.Count];
                int temp = 0;

                for (int i = 0; i < listStudents.Count; i++)
                {
                    studentData[i, 1] = "0";
                }

                foreach (Student s in listStudents)
                {
                    student[countStudent] = s.FirstName + " " + s.Surname;
                    studentData[countStudent, 0] = s.FirstName + " " + s.Surname + " " + s.StudentNumber;

                    //now get this students attendance records, one for each roll call, if no record exists assume absent
                    foreach (RollCall r in listRollCalls)
                    {
                        student_RollCall = student_RollCallHandler.GetStudentAttendance(r.RollCallID, s.StudentID);
                        try
                        {
                            litReport.Text += s.FirstName + "&nbsp" + student_RollCall.Status;

                            attending[countRollCall] += 1;

                            temp = Convert.ToInt32(studentData[countStudent, 1]);
                            temp += 1;
                            studentData[countStudent, 1] = temp.ToString();
                        }
                        catch (NullReferenceException)
                        {
                            litReport.Text += s.FirstName + "&nbsp" + "absent";

                            attending[countRollCall] += 0;

                            temp = Convert.ToInt32(studentData[countStudent, 1]);
                            temp += 0;
                            studentData[countStudent, 1] = temp.ToString();
                        }
                        countRollCall++;
                    }

                    countStudent++;
                    countRollCall = 0;

                    litReport.Text += "</br></br>";

                }

                litReport.Text = "";

                for (int i = 0; i < listStudents.Count; i++)
                {
                    studentData[i, 1] = (Convert.ToDouble(studentData[i, 1]) / listRollCalls.Count * 100).ToString();
                    studentData[i, 1] = Math.Round(Convert.ToDouble(studentData[i, 1]), 0).ToString();

                    htmlOutput += "<tr><td>" + studentData[i, 0] + "</td><td>" + studentData[i, 1] + "</td></tr>\n";
                    litReport.Text += studentData[i, 0] + " " + studentData[i, 1] + "</br>";
                }
            }
            catch
            {
                htmlOutput = "<div class='alert alert-danger'>No records found</div>";
            }

            litReport.Text = htmlOutput;
        }
 public bool AddNewRollCall(Student_RollCall student_RollCall)
 {
     return student_RollCallDB.AddNewStudent_RollCall(student_RollCall);
 }