public ActionResult Delete(Reservation model)
 {
     using (ai_databaseEntities de = new ai_databaseEntities())
     {
         Reservation delRes = de.Reservation.Where(x => x.Id.Equals(model.Id)).FirstOrDefault();
         if (delRes != null)
         {
             de.Reservation.Remove(delRes);
             de.SaveChanges();
         }
     }
     return(RedirectToAction("ViewReservations", "Reservation"));
 }
        public ActionResult VerifyAccount(string id)
        {
            bool status = false;

            using (ai_databaseEntities de = new ai_databaseEntities())
            {
                de.Configuration.ValidateOnSaveEnabled = false;
                var v = de.User.Where(a => a.ActivationCode == new Guid(id)).FirstOrDefault();
                if (v != null)
                {
                    v.isEmailVerified = true;
                    de.SaveChanges();
                    status = true;
                }
                else
                {
                    ViewBag.Message = "Invalid Request";
                }
            }
            ViewBag.Status = true;
            return(View());
        }
        public ActionResult AddReservation(Reservation model)
        {
            string message = "";
            bool   status  = false;;

            #region Create new object of reservation and assign properties

            Reservation res = new Reservation();
            res.dateFrom = model.reservationDate.Add(model.startTime.TimeOfDay);
            res.dateTo   = model.reservationDate.Add(model.endTime.TimeOfDay);
            if (model.description == null)
            {
                res.description = "No description";
            }
            else
            {
                res.description = model.description;
            }
            res.roomId    = model.roomId;
            res.subjectId = model.subjectId;
            res.teacherId = LoggedOnUser.loggedOnUserID;

            #endregion

            #region Check if Room and Subject were selected

            if (model.roomId == 0 || model.subjectId == 0)
            {
                message = "Please provide correct room and subject!";
                TempData["resCreationMessage"] = message;
                TempData["resCreationStatus"]  = status;
                return(RedirectToAction("IndexTeacher", "Home"));
            }

            #endregion

            #region Check if selected date is future

            if (res.dateFrom.CompareTo(DateTime.Now) <= 0)
            {
                message = "You must select future date!";
                TempData["resCreationMessage"] = message;
                TempData["resCreationStatus"]  = status;
                return(RedirectToAction("IndexTeacher", "Home"));
            }

            #endregion

            #region Check if start hours are before end hours

            if (res.dateFrom.CompareTo(res.dateTo) > 0)
            {
                message = "Start time must be before end time!";
                TempData["resCreationMessage"] = message;
                TempData["resCreationStatus"]  = status;
                return(RedirectToAction("IndexTeacher", "Home"));
            }

            #endregion

            #region Check if room is free at selected time

            if (!isRoomFree(res))
            {
                message = "Selected room is reserved at this time!";
                TempData["resCreationMessage"] = message;
                TempData["resCreationStatus"]  = status;
                return(RedirectToAction("IndexTeacher", "Home"));
            }

            #endregion

            #region Check if user(teacher) does not have any other classes at this time

            if (!isTeacherFree(res))
            {
                message = "You have classes at this time!";
                TempData["resCreationMessage"] = message;
                TempData["resCreationStatus"]  = status;
                return(RedirectToAction("IndexTeacher", "Home"));
            }

            #endregion


            #region Add reservation to db

            using (ai_databaseEntities de = new ai_databaseEntities())
            {
                res.Room    = de.Room.Where(x => x.Id.Equals(res.roomId)).FirstOrDefault();
                res.Subject = de.Subject.Where(x => x.Id.Equals(res.subjectId)).FirstOrDefault();
                try
                {
                    de.Reservation.Add(res);
                    de.SaveChanges();
                }
                catch (DbEntityValidationException dbEx)
                {
                    message = dbEx.Message;
                    status  = false;
                    return(RedirectToAction("IndexTeacher", "Home"));
                }
            }

            #endregion

            status  = true;
            message = "Reservation succesfully created";
            TempData["resCreationMessage"] = message;
            TempData["resCreationStatus"]  = status;
            return(RedirectToAction("IndexTeacher", "Home"));
        }
        public ActionResult Edit(Reservation model)
        {
            string message = "";
            bool   status  = false;

            #region Create new object of reservation and assign properties

            model.dateFrom = model.reservationDate.Add(model.startTime.TimeOfDay);
            model.dateTo   = model.reservationDate.Add(model.endTime.TimeOfDay);
            if (model.description == null)
            {
                model.description = "No description";
            }
            model.roomId    = model.roomId;
            model.subjectId = model.subjectId;
            model.teacherId = LoggedOnUser.loggedOnUserID;

            #endregion

            #region Check if Room and Subject were selected

            if (model.roomId == 0 || model.subjectId == 0)
            {
                message = "Please provide correct room and subject!";
                TempData["resEditMessage"] = message;
                TempData["resEditStatus"]  = status;
                return(RedirectToAction("ViewReservations", "Reservation"));
            }

            #endregion

            #region Check if selected date is future

            if (model.dateFrom.CompareTo(DateTime.Now) <= 0)
            {
                message = "You must select future date!";
                TempData["resEditMessage"] = message;
                TempData["resEditStatus"]  = status;
                return(RedirectToAction("ViewReservations", "Reservation"));
            }

            #endregion

            #region Check if start hours are before end hours

            if (model.dateFrom.CompareTo(model.dateTo) > 0)
            {
                message = "Start time must be before end time!";
                TempData["resEditMessage"] = message;
                TempData["resEditStatus"]  = status;
                return(RedirectToAction("ViewReservations", "Reservation"));
            }

            #endregion

            #region Check if room is free at selected time

            if (!isRoomFree(model))
            {
                message = "Selected room is reserved at this time!";
                TempData["resEditMessage"] = message;
                TempData["resEditStatus"]  = status;
                return(RedirectToAction("ViewReservations", "Reservation"));
            }

            #endregion

            #region Check if user(teacher) does not have any other classes at this time

            if (!isTeacherFree(model))
            {
                message = "You have classes at this time!";
                TempData["resEditMessage"] = message;
                TempData["resEditStatus"]  = status;
                return(RedirectToAction("ViewReservations", "Reservation"));
            }

            #endregion


            #region Edit reservation

            using (ai_databaseEntities de = new ai_databaseEntities())
            {
                model.Room            = de.Room.Where(x => x.Id.Equals(model.roomId)).FirstOrDefault();
                model.Subject         = de.Subject.Where(x => x.Id.Equals(model.subjectId)).FirstOrDefault();
                de.Entry(model).State = System.Data.Entity.EntityState.Modified;
                de.SaveChanges();
            }

            #endregion

            status  = true;
            message = "Reservation succesfully edited";
            TempData["resEditMessage"] = message;
            TempData["resEditStatus"]  = status;

            return(RedirectToAction("ViewReservations", "Reservation"));
        }
        public ActionResult Registration([Bind(Exclude = "IsEmailVerified,ActivationCode")] User user)
        {
            bool   Status  = false;
            string message = String.Empty;

            //Model validation
            if (ModelState.IsValid)
            {
                #region  Login is already used

                var loginExists = IsLoginUsed(user.login);
                if (loginExists)
                {
                    ModelState.AddModelError("LoginExists", "Login already exist");
                    return(View(user));
                }

                #endregion

                #region  Email is already used

                var emailExists = IsEmailUsed(user.email);
                if (emailExists)
                {
                    ModelState.AddModelError("EmailExists", "Email already exist");
                    return(View(user));
                }

                #endregion

                #region Generate Activation Code

                user.ActivationCode = Guid.NewGuid();

                #endregion

                #region Password Hashing

                user.password        = Crypto.Hash(user.password);
                user.ConfirmPassword = Crypto.Hash(user.ConfirmPassword);

                #endregion

                user.isEmailVerified = false;
                user.isTeacher       = false;

                #region Save data to database

                using (ai_databaseEntities de = new ai_databaseEntities())
                {
                    de.User.Add(user);
                    de.SaveChanges();

                    #region Send email to user

                    SendVerificationLinkEmail(user.email, user.ActivationCode.ToString());
                    message = "Registration successfully done. Account activation link has been sent to your email:" + user.email;
                    Status  = true;
                    #endregion
                }

                #endregion
            }
            else
            {
                message = "Invalid request";
            }
            ViewBag.Message = message;
            ViewBag.Status  = Status;
            return(View(user));
        }