// GET: ContinuousAssessments/Edit/5
        public async Task <ActionResult> Edit(int?id)
        {
            if (id == null)
            {
                return(new HttpStatusCodeResult(HttpStatusCode.BadRequest));
            }
            ContinuousAssessment continuousAssessment = await Db.ContinuousAssessments.FindAsync(id);

            if (continuousAssessment == null)
            {
                return(HttpNotFound());
            }
            ViewBag.StudentId   = new SelectList(await _query.StudentListAsync(userSchool), "StudentID", "FullName");
            ViewBag.SessionName = new SelectList(_query.SessionList(), "SessionName", "SessionName");
            ViewBag.ClassName   = new SelectList(Db.Classes.AsNoTracking(), "FullClassName", "FullClassName");
            ViewBag.TermName    = new SelectList(_query.TermList(), "TermName", "TermName");
            ViewBag.SubjectId   = new SelectList(await _query.SubjectListAsync(userSchool), "SubjectId", "SubjectName");
            ViewBag.StaffName   = User.Identity.GetUserName();
            var model = new ContinuousAssesmentViewModel()
            {
                ContinuousAssessmentId = continuousAssessment.ContinuousAssessmentId,
                StudentId  = continuousAssessment.StudentId,
                FirstTest  = continuousAssessment.FirstTest,
                SecondTest = continuousAssessment.SecondTest,
                ThirdTest  = continuousAssessment.ThirdTest,
                ExamScore  = continuousAssessment.ExamScore
            };

            return(View(model));
        }
        public async Task <ActionResult> Edit(ContinuousAssesmentViewModel model)
        {
            if (ModelState.IsValid)
            {
                var myContinuousAssessment = new ContinuousAssessment()
                {
                    ContinuousAssessmentId = model.ContinuousAssessmentId,
                    StudentId   = model.StudentId,
                    SubjectId   = model.SubjectId,
                    FirstTest   = model.FirstTest,
                    SecondTest  = model.SecondTest,
                    ThirdTest   = model.ThirdTest,
                    ExamScore   = model.ExamScore,
                    TermName    = model.TermName.ToString(),
                    SessionName = model.SessionName,
                    ClassName   = model.ClassName,
                    StaffName   = model.StaffName,
                    SchoolId    = userSchool
                                  //SubjectCategory = mysubjectCategory
                };
                // Db.ContinuousAssessments.Add(myContinuousAssessment);
                Db.Entry(myContinuousAssessment).State = EntityState.Modified;
                await Db.SaveChangesAsync();

                TempData["UserMessage"] = "Continuous Assessment Updated Successfully.";
                TempData["Title"]       = "Success.";
                return(RedirectToAction("Index"));
            }
            ViewBag.StudentId   = new SelectList(await _query.StudentListAsync(userSchool), "StudentID", "FullName");
            ViewBag.SessionName = new SelectList(_query.SessionList(), "SessionName", "SessionName");
            ViewBag.ClassName   = new SelectList(Db.Classes.AsNoTracking(), "FullClassName", "FullClassName");
            ViewBag.TermName    = new SelectList(_query.TermList(), "TermName", "TermName");
            ViewBag.SubjectId   = new SelectList(await _query.SubjectListAsync(userSchool), "SubjectId", "SubjectName");
            ViewBag.StaffName   = User.Identity.GetUserName();
            return(View(model));
        }
        public async Task <ActionResult> UploadResult(HttpPostedFileBase excelfile)
        {
            if (excelfile == null || excelfile.ContentLength == 0)
            {
                ViewBag.Error = "Please Select a excel file <br/>";
                return(View());
            }
            HttpPostedFileBase file = Request.Files["excelfile"];

            if (excelfile.FileName.EndsWith("xls") || excelfile.FileName.EndsWith("xlsx"))
            {
                string lastrecord      = "";
                int    recordCount     = 0;
                string message         = "";
                string fileContentType = file.ContentType;
                byte[] fileBytes       = new byte[file.ContentLength];
                var    data            = file.InputStream.Read(fileBytes, 0, Convert.ToInt32(file.ContentLength));
                // Read data from excel file
                using (var package = new ExcelPackage(file.InputStream))
                {
                    var currentSheet = package.Workbook.Worksheets;
                    foreach (var sheet in currentSheet)
                    {
                        ExcelValidation myExcel = new ExcelValidation();
                        //var workSheet = currentSheet.First();
                        var noOfCol       = sheet.Dimension.End.Column;
                        var noOfRow       = sheet.Dimension.End.Row;
                        int requiredField = 10;

                        string validCheck = myExcel.ValidateExcel(noOfRow, sheet, requiredField);
                        if (!validCheck.Equals("Success"))
                        {
                            string[] ssizes  = validCheck.Split(' ');
                            string[] myArray = new string[2];
                            for (int i = 0; i < ssizes.Length; i++)
                            {
                                myArray[i] = ssizes[i];
                            }
                            string lineError = $"Please Check sheet {sheet}, Line/Row number {myArray[0]}  and column {myArray[1]} is not rightly formatted, Please Check for anomalies ";
                            //ViewBag.LineError = lineError;
                            TempData["UserMessage"] = lineError;
                            TempData["Title"]       = "Error.";
                            return(View());
                        }

                        for (int row = 2; row <= noOfRow; row++)
                        {
                            string studentId    = sheet.Cells[row, 1].Value.ToString().ToUpper().Trim();
                            string subjectValue = sheet.Cells[row, 2].Value.ToString().ToUpper().Trim();
                            string termName     = sheet.Cells[row, 7].Value.ToString().Trim().ToUpper();
                            string className    = sheet.Cells[row, 10].Value.ToString().Trim().ToUpper();
                            string sessionName  = sheet.Cells[row, 8].Value.ToString().Trim();

                            var subjectName = Db.Subjects.Where(x => x.SubjectCode.Equals(subjectValue))
                                              .Select(c => c.SubjectId).FirstOrDefault();

                            var CA = Db.ContinuousAssessments.Where(x => x.ClassName.Equals(className) &&
                                                                    x.TermName.Contains(termName) &&
                                                                    x.SessionName.Equals(sessionName) &&
                                                                    x.StudentId.Equals(studentId) &&
                                                                    x.SubjectId.Equals(subjectName));
                            var countFromDb = await CA.CountAsync();

                            if (countFromDb >= 1)
                            {
                                return(View("Error2"));
                            }
                            var mycontinuousAssessment = new ContinuousAssessment
                            {
                                StudentId   = studentId,
                                SubjectId   = subjectName,
                                FirstTest   = double.Parse(sheet.Cells[row, 3].Value.ToString().Trim()),
                                SecondTest  = double.Parse(sheet.Cells[row, 4].Value.ToString().Trim()),
                                ThirdTest   = double.Parse(sheet.Cells[row, 5].Value.ToString().Trim()),
                                ExamScore   = double.Parse(sheet.Cells[row, 6].Value.ToString().Trim()),
                                TermName    = termName,
                                SessionName = sessionName,
                                StaffName   = sheet.Cells[row, 9].Value.ToString().Trim().ToUpper(),
                                ClassName   = className,
                                SchoolId    = userSchool
                                              //SubjectCategory = mysubjectCategory
                            };
                            Db.ContinuousAssessments.Add(mycontinuousAssessment);

                            recordCount++;
                            lastrecord = $"The last Updated record has the Student Id {studentId} and Subject Name is {subjectName}. Please Confirm!!!";
                        }
                    }
                }
                await Db.SaveChangesAsync();

                message = $"You have successfully Uploaded {recordCount} records...  and {lastrecord}";
                TempData["UserMessage"] = message;
                TempData["Title"]       = "Success.";
                ViewBag.TermName        = new SelectList(Db.Terms.AsNoTracking(), "TermName", "TermName");
                ViewBag.SessionName     = new SelectList(Db.Sessions.AsNoTracking(), "SessionName", "SessionName");

                if (User.IsInRole("Teacher"))
                {
                    string name        = User.Identity.GetUserName();
                    var    subjectList = Db.AssignSubjectTeachers.AsNoTracking().Where(x => x.StaffName.Equals(name));
                    ViewBag.SubjectCode = new SelectList(subjectList.AsNoTracking(), "SubjectName", "SubjectName");
                    ViewBag.ClassName   = new SelectList(subjectList.AsNoTracking(), "ClassName", "ClassName");
                }
                else
                {
                    ViewBag.ClassName   = new SelectList(Db.Classes.AsNoTracking(), "FullClassName", "FullClassName");
                    ViewBag.SubjectCode = new SelectList(Db.Subjects.AsNoTracking(), "CourseName", "CourseName");
                }
                return(View());
            }
            else
            {
                ViewBag.Error = "File type is Incorrect <br/>";
                return(View());
            }
        }
        public async Task <ActionResult> Create(ContinuousAssesmentViewModel model)
        {
            if (ModelState.IsValid)
            {
                //var mysubjectCategory = Db.Subjects.Where(x => x.CourseCode.Equals(model.SubjectCode))
                //                        .Select(c => c.CategoriesId).FirstOrDefault();

                //var subjectName = Db.Subjects.Where(x => x.CourseCode.Equals(model.SubjectCode))
                //                        .Select(c => c.CourseName).FirstOrDefault();
                //var student = Db.AssignedClasses.Where(x => x.ClassName.Equals(model.ClassName)
                //                                               && x.TermName.Contains(model.TermName.ToString())
                //                                               && x.SessionName.Equals(model.SessionName));
                var CA = Db.ContinuousAssessments.AsNoTracking().Where(x => x.ClassName.Equals(model.ClassName) &&
                                                                       x.TermName.Contains(model.TermName.ToString()) &&
                                                                       x.SessionName.Equals(model.SessionName) &&
                                                                       x.StudentId.Equals(model.StudentId) &&
                                                                       x.SubjectId.Equals(model.SubjectId));
                var countFromDb = await CA.CountAsync();

                if (countFromDb >= 1)
                {
                    ViewBag.StudentId   = new SelectList(await _query.StudentListAsync(userSchool), "StudentID", "FullName");
                    ViewBag.SessionName = new SelectList(_query.SessionList(), "SessionName", "SessionName");
                    ViewBag.ClassName   = new SelectList(Db.Classes.AsNoTracking(), "FullClassName", "FullClassName");
                    ViewBag.TermName    = new SelectList(_query.TermList(), "TermName", "TermName");
                    ViewBag.SubjectId   = new SelectList(await _query.SubjectListAsync(userSchool), "SubjectId", "SubjectName");

                    TempData["UserMessage"] = "Record Already Exist in Database.";
                    TempData["Title"]       = "Error.";
                    return(View(model));
                }
                else
                {
                    var myContinuousAssessment = new ContinuousAssessment()
                    {
                        StudentId   = model.StudentId,
                        SubjectId   = model.SubjectId,
                        FirstTest   = model.FirstTest,
                        SecondTest  = model.SecondTest,
                        ThirdTest   = model.ThirdTest,
                        ExamScore   = model.ExamScore,
                        TermName    = model.TermName,
                        SessionName = model.SessionName,
                        ClassName   = model.ClassName,
                        StaffName   = model.StaffName,
                        SchoolId    = userSchool
                                      //SubjectCategory = mysubjectCategory
                    };
                    Db.ContinuousAssessments.Add(myContinuousAssessment);
                }
                await Db.SaveChangesAsync();

                TempData["UserMessage"] = "Continuous Assessment Added Successfully.";
                TempData["Title"]       = "Success.";
                return(RedirectToAction("Index"));
            }
            ViewBag.StudentId   = new SelectList(await _query.StudentListAsync(userSchool), "StudentID", "FullName");
            ViewBag.SessionName = new SelectList(_query.SessionList(), "SessionName", "SessionName");
            ViewBag.ClassName   = new SelectList(Db.Classes.AsNoTracking(), "FullClassName", "FullClassName");
            ViewBag.TermName    = new SelectList(_query.TermList(), "TermName", "TermName");
            ViewBag.SubjectId   = new SelectList(await _query.SubjectListAsync(userSchool), "SubjectId", "SubjectName");
            ViewBag.StaffName   = User.Identity.GetUserName();

            return(View(model));
        }