public ActionResult EditTeacher(int? id)
        {
            if (!id.HasValue)
            {
                return RedirectToAction("Index");
            }

            Teacher teacher = unitOfWork.TeacherRepository.GetById(id.Value);

            if (teacher == null)
            {
                return RedirectToAction("NotFound", "Error");
            }

            TeachersCreateAccountVM model = new TeachersCreateAccountVM();
            model.Id = teacher.Id;
            model.Username = teacher.Username;
            model.FirstName = teacher.FirstName;
            model.LastName = teacher.LastName;
            model.Email = teacher.Email;
            model.TitleId = teacher.TitleId ?? 0;
            model.Titles = GetTitles();
            model.Subjects = unitOfWork.SubjectRepository.GetAll();

            return View("CreateEditTeacher", model);
        }
        public ActionResult CreateEditTeacher(TeachersCreateAccountVM model)
        {
            if (ModelState.IsValid)
            {
                Teacher teacher;

                if (model.Id == 0)
                {
                    teacher = new Teacher();
                }
                else
                {
                    teacher = unitOfWork.TeacherRepository.GetById(model.Id);
                }

                teacher.FirstName = model.FirstName;
                teacher.LastName = model.LastName;
                teacher.Email = model.Email;
                teacher.IsActive = true;

                teacher.Title = unitOfWork.TitleRepository.GetById(model.TitleId);
                if (teacher.Title == null)
                {
                    ModelState.AddModelError("TitleId", "No title");
                    model.Titles = GetTitles();
                    return View(model);
                }

                if (model.Id == 0)
                {
                    string password = Path.GetRandomFileName().Replace(".", "").Substring(0, 8);

                    var passPhrase = PasswordHasher.Hash(password);

                    teacher.Hash = passPhrase.Hash;
                    teacher.Salt = passPhrase.Salt;
                    teacher.IsConfirmed = false;

                    unitOfWork.TeacherRepository.Insert(teacher);
                    unitOfWork.Save();
                    TempData.FlashMessage("Teacher has been created!");

                    #region Send password to mail
                    MailMessage message = new MailMessage();
                    message.IsBodyHtml = true;

                    message.Sender = new MailAddress("*****@*****.**");
                    message.To.Add(model.Email);
                    message.Subject = "Welcome to the University System";
                    message.From = new MailAddress("*****@*****.**");

                    StringBuilder msgBody = new StringBuilder();
                    msgBody.AppendLine(String.Format("<h3>Hello, {0} {1}</h3>", teacher.FirstName, teacher.LastName));
                    msgBody.AppendLine("<h4>Welcome to our University System!</h4>");
                    msgBody.AppendLine(String.Format("<p>You must confirm your account: <a href='{0}'>Confirm</a></p>", Url.Action("ConfirmAccount", "Teacher", new { id = teacher.Id }, Request.Url.Scheme)));
                    msgBody.AppendLine(String.Format("<p>Use this password to confirm: <strong>{0}</string></p>", password));
                    message.Body = msgBody.ToString();

                    SmtpClient smtp = new SmtpClient("smtp.gmail.com", 587);
                    smtp.EnableSsl = true;
                    smtp.UseDefaultCredentials = false;
                    #region Private
                    smtp.Credentials = new System.Net.NetworkCredential("*****@*****.**", "programistaphonebook");
                    #endregion

                    smtp.Send(message);
                    #endregion
                }
                else
                {
                    unitOfWork.TeacherRepository.Update(teacher);
                    unitOfWork.Save();
                    TempData.FlashMessage("Teacher has been edited!");
                }

                return RedirectToAction("ManageTeachers", "Admin");
            }

            model.Titles = GetTitles();
            return View(model);
        }
        public ActionResult CreateTeacher()
        {
            TeachersCreateAccountVM model = new TeachersCreateAccountVM();
            model.UserType = UserTypeEnum.Teacher;
            model.Titles = GetTitles();
            model.Subjects = unitOfWork.SubjectRepository.GetAll();

            return View("CreateEditTeacher", model);
        }