public void GetTime()
        {
            var username = HttpContext.User.Identity.Name;
            var user     = db.User.Where(x => x.Username == username).FirstOrDefault();

            if (user.SleepTemporary.Any())
            {
                var sTemp = user.SleepTemporary.LastOrDefault();
                //walidacja 24h
                TimeSpan HOURS_VALIDATE = new TimeSpan(23, 59, 59);
                TimeSpan timeSpanTemp   = DateTime.Now - sTemp.StartSleep;

                if (timeSpanTemp < HOURS_VALIDATE)
                {
                    Sleep sleep = new Sleep(sTemp.StartSleep, DateTime.Now.ToLocalTime());
                    user.Sleep.Add(sleep);
                }
                db.SleepTemporary.Remove(sTemp);
            }
            else
            {
                SleepTemporary st = new SleepTemporary();
                st.StartSleep = DateTime.Now;
                db.SleepTemporary.Add(st);

                user.SleepTemporary.Add(st);
            }
            db.SaveChanges();
        }
        public ActionResult VerifyAccount(string id)
        {
            bool Status = false;

            using (var db = new SleepLogAppEntities())
            {
                db.Configuration.ValidateOnSaveEnabled = false; //to avoid confirm password does not match on save in db
                User verifyUser = db.User.Where(x => x.ActivationCode == new Guid(id)).FirstOrDefault();
                if (verifyUser != null)
                {
                    verifyUser.IsEmailVerified = true;
                    Status = true;

                    #region //sleep deInitializer

                    for (int i = 0; i < verifyUser.Sleep.Count; i++)
                    {
                        //verifyUser.Sleep.Remove(verifyUser.Sleep.ToList()[i]);
                        db.Sleep.Remove(verifyUser.Sleep.ToList()[i]);
                    }
                    #endregion

                    db.SaveChanges();
                }
                ViewBag.Status = Status;
            }
            return(View());
        }
        public ActionResult Registration(
            [Bind(Exclude = "IsEmailVerified, LastLoginDate, ActivationCode, " +
                            "SleepTemporary, Sleep")] User user)
        {
            bool   Status  = false;
            string Message = string.Empty;

            //Model Validation
            if (ModelState.IsValid)
            {
                user.IsEmailVerified = false;
                user.CreatedDate     = DateTime.Now;

                #region //Email is taken
                bool isEmailTaken = IsEmailTaken(user.Email);
                if (isEmailTaken)
                {
                    ModelState.AddModelError("EmailExist", "Email already exist");
                    return(View(user));
                }
                #endregion
                #region //username is taken
                bool isUsernameTaken = IsUsernameTaken(user.Username);
                if (isUsernameTaken)
                {
                    ModelState.AddModelError("UsernameExist", "Username 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

                #region //Save to db and initialize sleeps
                using (var db = new SleepLogAppEntities())
                {
                    db.User.Add(user);

                    #region //sleep initializer
                    var SleepList = SleepsInitializer.SleepsInitialize();
                    foreach (Sleep sleep in SleepList)
                    {
                        sleep.SetAmountOfSleep(); //możnaby przerzucić do SleepInitializer
                        user.Sleep.Add(sleep);
                    }
                    #endregion

                    db.SaveChanges();
                }
                #endregion

                #region //Send activation mail to user
                SendVeryficationLinkEmail(user.Email, user.ActivationCode.ToString());
                Message = "Registration succesfully done. Account activation link "
                          + "has been sent to your email adress:" + user.Email;
                Status = true;
                #endregion
            }
            else
            {
                Message = "Invalid Request";
            }

            ViewBag.Message = Message;
            ViewBag.Status  = Status;
            return(View(user));
        }