public async Task <ActionResult> ChangeEmail(ChangeEmailViewModel model)
        {
            if (!ModelState.IsValid)
            {
                ViewBag.Message = "Please enter correct information";
                return(View(model));
            }

            var user = Session["user"] as TblUser;

            if (model.OldEmail.Equals(user.Email))
            {
                user.Email = model.NewEmail;

                zTest2DBEntities db = new zTest2DBEntities();

                db.TblUsers.Find(user.UserId).Email = model.NewEmail;

                db.SaveChanges();

                Session["welcome msg"] = "You successfully changed your email address!";

                return(RedirectToAction("Index", "Manage"));
            }
            else
            {
                ViewBag.Message = "Please enter correct information";
                return(View(model));
            }
        }
        public async Task <ActionResult> Login(LoginViewModel model, string returnUrl)
        {
            string username = model.UserName;
            string password = model.Password;

            zTest2DBEntities db = new zTest2DBEntities();

            List <TblUser> allUsers = db.TblUsers.ToList();

            foreach (var user in allUsers)
            {
                var salt = user.Salt;
                if (salt == null)
                {
                    continue;
                }
                var hash = ComputeHash(password, salt);

                string hashString = System.Text.Encoding.UTF8.GetString(hash);
                string passHash   = System.Text.Encoding.UTF8.GetString(user.HashedPass);

                if (string.Equals(hashString, passHash) && user.UserName.Equals(username))
                {
                    Session["user"] = user;

                    Session.Timeout = 60;
                    return(RedirectToAction("Index", "Home"));
                }
            }

            ModelState.AddModelError("", "Invalid username or password!");

            return(View(model));
        }
        public ActionResult AdminRights()
        {
            List <TblUser> model = new List <TblUser>();

            zTest2DBEntities db = new zTest2DBEntities();

            model = db.TblUsers.ToList();

            return(View(model));
        }
        public ActionResult ChangeAdminRights()
        {
            int userId = int.Parse(Request["userId"]);

            zTest2DBEntities db = new zTest2DBEntities();

            db.TblUsers.Find(userId).Role = db.TblUsers.Find(userId).Role ? false : true;

            db.SaveChanges();

            return(RedirectToAction("AdminRights", "Account"));
        }
        public ActionResult Purchases()
        {
            string datefrom = Request["datefrom"];
            string dateto   = Request["dateto"];

            if (datefrom == null || dateto == null)
            {
                zTest2DBEntities db = new zTest2DBEntities();

                var grouped = db.TblReceipts.Select(x => x).GroupBy(x => x.DateAndTime).ToList();

                return(View(grouped));
            }
            else
            {
                int fromy = int.Parse(datefrom.Split('-')[0]);
                int fromm = int.Parse(datefrom.Split('-')[1]);
                int fromd = int.Parse(datefrom.Split('-')[2]);

                int toy = int.Parse(dateto.Split('-')[0]);
                int tom = int.Parse(dateto.Split('-')[1]);
                int tod = int.Parse(dateto.Split('-')[2]);

                zTest2DBEntities db = new zTest2DBEntities();

                var grouped = db.TblReceipts.Select(x => x).GroupBy(x => x.DateAndTime).ToList();

                var grouped_new = new List <System.Linq.IGrouping <System.Nullable <System.DateTime>, zTest2.Models.TblReceipt> >();

                foreach (var item in grouped)
                {
                    if (item.Key.Value >= new DateTime(fromy, fromm, fromd) && item.Key.Value <= new DateTime(toy, tom, tod, 23, 59, 59))
                    {
                        grouped_new.Add(item);
                    }
                }

                return(View(grouped_new));
            }
        }
        public async Task <ActionResult> Register(RegisterViewModel model)
        {
            if (ModelState.IsValid)
            {
                zTest2DBEntities db = new zTest2DBEntities();

                TblUser newUser = new TblUser();


                newUser.UserName  = model.UserName;
                newUser.Email     = model.Email;
                newUser.FirstName = model.Name;
                newUser.LastName  = model.LastName;
                newUser.Phone     = model.Phone;
                var salt = MakeSalt(SaltLength);
                newUser.Salt       = salt;
                newUser.HashedPass = ComputeHash(model.Password, salt);


                db.TblUsers.Add(newUser);

                try
                {
                    db.SaveChanges();
                }
                catch (DbEntityValidationException e)
                {
                    Console.WriteLine(e);
                }


                Session["user"] = (db.TblUsers.Select(x => x).OrderByDescending(x => x.UserId).Take(1)).ToList()[0];

                Session["welcome msg"] = "Hello " + newUser.FirstName + "!";

                return(RedirectToAction("Index", "Manage"));
            }

            return(View(model));
        }
        public async Task <ActionResult> ChangeLastName(ChangeLastNameViewModel model)
        {
            if (!ModelState.IsValid)
            {
                return(View(model));
            }

            var user = Session["user"] as TblUser;

            if (model.OldLastName.Equals(user.LastName))
            {
                user.LastName = model.NewLastName;

                zTest2DBEntities db = new zTest2DBEntities();

                db.TblUsers.Find(user.UserId).LastName = model.NewLastName;

                db.SaveChanges();
            }

            return(RedirectToAction("Index", "Manage"));
        }
        public async Task <ActionResult> ChangePassword(ChangePasswordViewModel model)
        {
            if (!ModelState.IsValid)
            {
                return(View(model));
            }


            var user = Session["user"] as TblUser;

            if (model.OldPassword.Equals(user.Password) && model.NewPassword.Equals(model.ConfirmPassword))
            {
                user.Password = model.NewPassword;

                zTest2DBEntities db = new zTest2DBEntities();

                db.TblUsers.Find(user.UserId).Password = model.NewPassword;

                db.SaveChanges();
            }

            return(View(model));
        }