//api/AttendanceTeacher/ViewTeacherAttendance
        public HttpResponseMessage ViewTeacherAttendance(AddAttendanceVM data)
        {
            string EmpName = data.EmpName;

            string SectionName = data.SectionName;

            //int CourseID = 7;
            Int32.TryParse(data.CourseID, out int CourseID);

            //int empId = id; // teacher login id

            var db = DbUtils.GetDBConnection();

            db.Connection.Open();

            IEnumerable <Attend> response;

            response = db.Query("TeacherAttendanceDetails").Where("EmpName", EmpName)
                       .Where("CourseID", CourseID)
                       .Where("SectionName", SectionName)
                       .Select("AttendanceDate", "ClassDuration")
                       .Distinct()
                       .Get <Attend>();
            db.Connection.Close();
            return(Request.CreateResponse(HttpStatusCode.OK, response));
        }
        public async Task <ActionResult> EditAttendance(FormCollection formCollection)
        {
            string teacherName    = formCollection[1];
            string sectionName    = formCollection[2];
            string courseID       = formCollection[3];
            string AttendanceDate = formCollection[4];
            string ClassDuration  = formCollection[5];

            AttendanceDate = AttendanceDate.Remove(10);

            AddAttendanceVM addAttendanceVM = new AddAttendanceVM {
                CourseID = courseID, EmpName = teacherName, SectionName = sectionName, AttendanceDate = DateTime.Parse(AttendanceDate), ClassDuration = Int32.Parse(ClassDuration)
            };
            var json = JsonConvert.SerializeObject(addAttendanceVM);
            var data = new StringContent(json, Encoding.UTF8, "application/json");

            using (var client = new HttpClient())
            {
                client.BaseAddress = new Uri("https://localhost:44380/api/");
                client.DefaultRequestHeaders.Clear();
                client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));

                HttpResponseMessage result = await client.PostAsync("AttendanceTeacher/EditStudentAttendance/", data);

                var response = result.Content.ReadAsStringAsync().Result;
                addAttendanceVM.students = JsonConvert.DeserializeObject <List <Student> >(response);
            }
            //addAttendanceVM.AttendanceDate = DateTime.Parse(AttendanceDate);
            //addAttendanceVM.ClassDuration = 1;
            return(View("EditAttendance", addAttendanceVM));
        }
        public async Task <ActionResult> DeleteAttendance(FormCollection formCollection)
        {
            string teacherName    = formCollection[1];
            string sectionName    = formCollection[2];
            string courseID       = formCollection[3];
            string AttendanceDate = formCollection[4];

            AttendanceDate = AttendanceDate.Remove(10);

            AddAttendanceVM addAttendanceVM = new AddAttendanceVM {
                CourseID = courseID, EmpName = teacherName, SectionName = sectionName, AttendanceDate = DateTime.Parse(AttendanceDate)
            };
            var json = JsonConvert.SerializeObject(addAttendanceVM);
            var data = new StringContent(json, Encoding.UTF8, "application/json");

            using (var client = new HttpClient())
            {
                client.BaseAddress = new Uri("https://localhost:44380/api/");
                client.DefaultRequestHeaders.Clear();
                client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));

                HttpResponseMessage result = await client.PostAsync("AttendanceTeacher/DeleteStudentAttendance/", data);

                var response = result.Content.ReadAsStringAsync().Result;
                addAttendanceVM.attendances = JsonConvert.DeserializeObject <List <Attend> >(response);
            }
            return(View("ViewTeacherAttendance", addAttendanceVM));

            //string[] test = form[1].Split(',');
            //string Date = test[test.Length - 2];

            //return Content("Here");
        }
        //api/AttendanceTeacher/UpdateStudentAttendance
        public HttpResponseMessage UpdateStudentAttendance(AddAttendanceVM data) //List<Attend> data
        {
            string EmpName     = data.EmpName;
            string SectionName = data.SectionName;

            //int CourseID = 7;
            Int32.TryParse(data.CourseID, out int CourseID);
            DateTime AttendanceDate    = data.AttendanceDate;
            DateTime oldAttendanceDate = data.oldAttendanceDate;

            var db = DbUtils.GetDBConnection();

            db.Connection.Open();

            IEnumerable <int> enrollmentID = db.Query("TeacherAttendanceDetails").Where("AttendanceDate", oldAttendanceDate)
                                             .Where("EmpName", EmpName)
                                             .Where("CourseID", CourseID)
                                             .Where("SectionName", SectionName)
                                             .Select("EnrollmentID").Distinct().Get <int>();

            foreach (int i in enrollmentID)
            {
                using (TransactionScope scope = new TransactionScope())
                {
                    foreach (var item in data.attendances)
                    {
                        db.Query("Attendance").Where("EnrollmentID", i)
                        .Where("AttendanceDate", oldAttendanceDate).Update(new
                        {
                            AttendanceDate   = item.AttendanceDate,
                            AttendanceStatus = item.AttendanceStatus,
                            ClassDuration    = item.ClassDuration,
                        });
                    }

                    scope.Complete();
                }
            }

            IEnumerable <Attend> response;

            response = db.Query("TeacherAttendanceDetails").Where("EmpName", EmpName)
                       .Where("CourseID", CourseID)
                       .Where("SectionName", SectionName)
                       .Select("AttendanceDate", "ClassDuration")
                       .Distinct()
                       .Get <Attend>();
            db.Connection.Close();
            return(Request.CreateResponse(HttpStatusCode.OK, response));
        }
        public async Task <ActionResult> UpdateStudentAttendance(FormCollection formCollection)
        {
            string teacherName = formCollection[1];
            string courseID    = formCollection[2];
            string sectionName = formCollection[3];

            string oldDate = formCollection[4];
            string Date    = formCollection[5];

            string Duration = formCollection[6];

            string[] EnrollmentID = formCollection[7].Split(',');
            string[] Presence     = formCollection[8].Split(',');

            List <Attend> attendances = new List <Attend>();

            for (int i = 0; i < EnrollmentID.Count(); i++)
            {
                attendances.Add(new Attend {
                    EnrollmentID = Int32.Parse(EnrollmentID[i]), AttendanceStatus = Presence[i], ClassDuration = Int32.Parse(Duration), AttendanceDate = Date
                });
            }

            AddAttendanceVM addAttendanceVM = new AddAttendanceVM {
                CourseID = courseID, EmpName = teacherName, SectionName = sectionName, oldAttendanceDate = DateTime.Parse(oldDate), AttendanceDate = DateTime.Parse(Date), ClassDuration = Int32.Parse(Duration), attendances = attendances
            };

            var json = JsonConvert.SerializeObject(addAttendanceVM);
            var data = new StringContent(json, Encoding.UTF8, "application/json");

            using (var client = new HttpClient())
            {
                client.BaseAddress = new Uri("https://localhost:44380/api/");
                client.DefaultRequestHeaders.Clear();
                client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));

                HttpResponseMessage result = await client.PostAsync("AttendanceTeacher/UpdateStudentAttendance/", data);

                var response = result.Content.ReadAsStringAsync().Result;
                addAttendanceVM.attendances = JsonConvert.DeserializeObject <List <Attend> >(response);
            }
            return(View("ViewTeacherAttendance", addAttendanceVM));
        }
        //it will give all students of that teacher course
        //api/AttendanceTeacher/GetTeacherStudents/11
        public HttpResponseMessage GetTeacherStudents(AddAttendanceVM data)//courseid
        {
            //int FSID = 13;


            //int SemesterID = 1;
            string EmpName = data.EmpName;

            string SectionName = data.SectionName;

            //int CourseID = 7;
            Int32.TryParse(data.CourseID, out int CourseID);

            //int empId = id; // teacher login id


            var db = DbUtils.GetDBConnection();

            db.Connection.Open();


            //IEnumerable<FacultySections> response0;
            //response = db.Query("CourseEnrollment").Where("StudentID", id).Get<CourseEnrollment>();
            //response0 = db.Query("TeacherCourseSectionDetail").Where("EmpID", empId).Select("FSID").Get<FacultySections>();
            //return Request.CreateResponse(HttpStatusCode.OK, response0);

            //int CFID = db.Query("CourseFaculty").Where("EmpID", empId).Select("CFID").Get<int>().First();
            //int FSID = db.Query("FacultySections").Where("CFID", CFID).Select("FSID").Get<int>().First();

            //return FSID;

            IEnumerable <Student> response;

            response = db.Query("TeacherAttendanceDetails").Where("EmpName", EmpName)
                       .Where("CourseID", CourseID)
                       .Where("SectionName", SectionName)
                       .Select("StudentID", "SName", "RollNumber", "EnrollmentID").Distinct()
                       .Get <Student>();
            db.Connection.Close();
            return(Request.CreateResponse(HttpStatusCode.OK, response));
        }
        public HttpResponseMessage DeleteStudentAttendance(AddAttendanceVM data)
        {
            string EmpName     = data.EmpName;
            string SectionName = data.SectionName;

            //int CourseID = 7;
            Int32.TryParse(data.CourseID, out int CourseID);
            DateTime AttendanceDate = data.AttendanceDate;

            //int[] EnrollmentID;
            //int empId = id; // teacher login id

            var db = DbUtils.GetDBConnection();

            db.Connection.Open();

            IEnumerable <int> enrollmentID = db.Query("TeacherAttendanceDetails").Where("AttendanceDate", AttendanceDate)
                                             .Where("EmpName", EmpName)
                                             .Where("CourseID", CourseID)
                                             .Where("SectionName", SectionName)
                                             .Select("EnrollmentID").Distinct().Get <int>();

            foreach (int i in enrollmentID)
            {
                _ = db.Query("Attendance").Where("AttendanceDate", "=", AttendanceDate)
                    .Where("EnrollmentID", "=", i).Delete();
            }

            IEnumerable <Attend> response;

            response = db.Query("TeacherAttendanceDetails").Where("EmpName", EmpName)
                       .Where("CourseID", CourseID)
                       .Where("SectionName", SectionName)
                       .Select("AttendanceDate")
                       .Distinct()
                       .Get <Attend>();
            db.Connection.Close();
            return(Request.CreateResponse(HttpStatusCode.OK, response));
        }
        //api/AttendanceTeacher/AddStudentAttendance
        public HttpResponseMessage AddStudentAttendance(AddAttendanceVM data)
        {
            string EmpName     = data.EmpName;
            string SectionName = data.SectionName;

            //int CourseID = 7;
            Int32.TryParse(data.CourseID, out int CourseID);

            var db = DbUtils.GetDBConnection();

            db.Connection.Open();

            using (TransactionScope scope = new TransactionScope())
            {
                foreach (var item in data.attendances)
                {
                    var query = db.Query("Attendance").InsertGetId <int>(new
                    {
                        AttendanceDate   = item.AttendanceDate,
                        AttendanceStatus = item.AttendanceStatus,
                        ClassDuration    = item.ClassDuration,
                        EnrollmentID     = item.EnrollmentID
                    });
                }

                scope.Complete();  // if record is entered successfully , transaction will be committed

                IEnumerable <Attend> response;

                response = db.Query("TeacherAttendanceDetails").Where("EmpName", EmpName)
                           .Where("CourseID", CourseID)
                           .Where("SectionName", SectionName)
                           .Select("AttendanceDate", "EnrollmentID")
                           .Distinct()
                           .Get <Attend>();
                db.Connection.Close();
                return(Request.CreateResponse(HttpStatusCode.OK, response));
            }
        }
        public HttpResponseMessage EditStudentAttendance(AddAttendanceVM data)
        {
            string EmpName     = data.EmpName;
            string SectionName = data.SectionName;

            Int32.TryParse(data.CourseID, out int CourseID);
            DateTime AttendanceDate = data.AttendanceDate;

            var db = DbUtils.GetDBConnection();

            db.Connection.Open();

            IEnumerable <Student> response;

            response = db.Query("TeacherAttendanceDetails").Where("AttendanceDate", AttendanceDate)
                       .Where("EmpName", EmpName)
                       .Where("CourseID", CourseID)
                       .Where("SectionName", SectionName)
                       .Select("StudentID", "SName", "RollNumber", "EnrollmentID", "AttendanceStatus", "ClassDuration", "AttendanceDate")
                       .Get <Student>();
            db.Connection.Close();
            return(Request.CreateResponse(HttpStatusCode.OK, response));
        }
        public async System.Threading.Tasks.Task <ActionResult> ChooseSection(FormCollection formCollection)
        {
            string          teacherName     = formCollection[1];
            string          courseID        = formCollection[2];
            string          sectionName     = formCollection[3];
            AddAttendanceVM addAttendanceVM = new AddAttendanceVM {
                CourseID = courseID, EmpName = teacherName, SectionName = sectionName
            };
            var json = JsonConvert.SerializeObject(addAttendanceVM);
            var data = new StringContent(json, Encoding.UTF8, "application/json");

            using (var client = new HttpClient())
            {
                client.BaseAddress = new Uri("https://localhost:44380/api/");
                client.DefaultRequestHeaders.Clear();
                client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));

                HttpResponseMessage result = await client.PostAsync("AttendanceTeacher/GetTeacherStudents/", data);

                var response = result.Content.ReadAsStringAsync().Result;
                addAttendanceVM.students = JsonConvert.DeserializeObject <List <Student> >(response);
            }
            return(View("AddAttendance", addAttendanceVM));
        }