private string ValidationForTeacher(Teacher teacher)
        {
            string message = "";

            if (teacher.TeacherName == "")
            {
                message += "Teacher Name is not given";
            }

            if (teacher.TeacherAddress == "")
            {
                message += "Teacher Address is not given";
            }

            if (teacher.TeacherEmail == "")
            {
                message += "Teacher email is not given";
            }
            else
            {
                if (!IsMailAddressValid(teacher.TeacherEmail))
                {
                    message += "Invalid email address given";
                }
                else
                {
                    // there is case, story says email must be unique
                    // but it is not said that unique within the system or not

                    if (db.Teachers.Count(t => t.TeacherEmail == teacher.TeacherEmail) != 0)
                    {
                        message += "This email is already exists";
                    }
                }
            }

            if (teacher.TeacherContactNo == "")
            {
                message += "Contact No. not given";
            }

            if (teacher.DesignationId < 0)
            {
                message += "Invalid Designation, choose correct designation";
            }

            if (teacher.DepartmentId < 0)
            {
                message += "Invalid Department, choose correct department";
            }

            if (teacher.TeacherCreditToBeTaken < 0)
            {
                message += "Credit to be taken must be non-negative number";
            }

            return message;
        }
        public ActionResult Create(Teacher teacher)
        {
            string message = ValidationForTeacher(teacher);
            if (message != "")
            {
                ViewBag.DesignationId = new SelectList(db.Designations, "DesignationId", "DesignationName", teacher.DesignationId);
                ViewBag.DepartmentId = new SelectList(db.Departments, "DepartmentId", "DepartmentCode", teacher.DepartmentId);
                ViewBag.Message = message;
                return View(teacher);
            }

            teacher.TeacherRemainingCredit = teacher.TeacherCreditToBeTaken;
            if (ModelState.IsValid)
            {
                db.Teachers.Add(teacher);
                db.SaveChanges();
                return RedirectToAction("Index");
            }

            ViewBag.DesignationId = new SelectList(db.Designations, "DesignationId", "DesignationName", teacher.DesignationId);
            ViewBag.DepartmentId = new SelectList(db.Departments, "DepartmentId", "DepartmentCode", teacher.DepartmentId);
            return View(teacher);
        }
        public ActionResult CourseAssign(Department aDepartment, Course aCourse, Teacher aTeacher)
        {
            string message = ValidationForCourseAssign(aDepartment, aCourse, aTeacher);
            if (message != "")
            {
                ViewBag.DepartmentId = new SelectList(db.Departments, "DepartmentId", "DepartmentName");
                ViewBag.TeacherId = new SelectList("", "", "TeacherName");
                ViewBag.CourseId = new SelectList("", "", "CourseName");

                ViewBag.Message = message;
                return View();
            }

            aTeacher = db.Teachers.Find(aTeacher.TeacherId);
            aCourse = db.Courses.Find(aCourse.CourseId);

            // assiging teacher to this course
            aCourse.Teacher = aTeacher;

            // update remaining credit for teacher
            aTeacher.TeacherRemainingCredit -= aCourse.CourseCredit;

            //save data to database
            if (!ModelState.IsValid)
            {
                db.Entry(aCourse).State = EntityState.Modified;
                db.SaveChanges();

                db.Entry(aTeacher).State = EntityState.Modified;
                db.SaveChanges();

                return RedirectToAction("Index");
            }

            return View();
        }
        private string ValidationForCourseAssign(Department aDepartment, Course aCourse, Teacher aTeacher)
        {
            string message = "";

            if (aDepartment.DepartmentId == 0 || aCourse.CourseId == 0 || aTeacher.TeacherId == 0)
            {
                message += "Incomplete form submit, any field is not yet set ";
            }

            // is teacher and course is not from the same department

            aDepartment = db.Departments.Find(aDepartment.DepartmentId);
            aTeacher = db.Teachers.Find(aTeacher.TeacherId);
            aCourse = db.Courses.Find(aCourse.CourseId);

            if (aDepartment.DepartmentId != aTeacher.DepartmentId || aCourse.DepartmentId != aTeacher.DepartmentId)
            {
                ViewBag.DepartmentId = new SelectList(db.Departments, "DepartmentId", "DepartmentName");
                ViewBag.TeacherId = new SelectList(db.Teachers, "TeacherId", "TeacherName");
                ViewBag.CourseId = new SelectList(db.Courses, "CourseId", "CourseName");

                if (aDepartment.DepartmentId != aCourse.DepartmentId)
                {
                    message += "Your Course is not from the selected department";

                }
                else if (aCourse.DepartmentId != aTeacher.DepartmentId)
                {
                    message += "Your Teacher is not from the selected department";
                }

            }

            // if course is already assigned

            if (aCourse.Teacher != null)
            {
                message += "Course Already Assigned";
            }

            return message;
        }