public IActionResult EmployeeApply(EmployeeModelView viewEmployee)
        {
            LogRestaurant();
            bool            newEmployee = false;
            ClaimsPrincipal cp          = this.User;
            var             claims      = cp.Claims.ToList();
            var             userId      = Convert.ToInt32(claims.SingleOrDefault(p => p.Type == "UserID").Value);
            var             empId       = Convert.ToInt32(claims.SingleOrDefault(p => p.Type == "EmployeeID").Value);

            if (empId == 0)
            {
                var employee = new Employees {
                    UserId = userId
                };
                EmployeesManager.CreateEmployee(employee);
                empId       = EmployeesManager.GetEmployeeIdByUserId(userId);
                newEmployee = true;
            }
            var    restaurants   = RestaurantsManager.RestaurantsByEmployeeId(empId);
            bool   newRestaurant = true;
            bool   requestFlag   = true;
            string status;
            string request;

            foreach (RestaurantEmployees rest in restaurants)
            {
                if (viewEmployee.RestaurantId == rest.RestaurantId)
                {
                    newRestaurant = false;
                    status        = rest.Status;
                    request       = rest.RequestStatus;
                    requestFlag   = (bool)rest.NewRequestFlag;
                }
            }
            if (newRestaurant)
            {
                var restaurantEmployee = new RestaurantEmployees
                {
                    EmployeeId     = empId,
                    RestaurantId   = viewEmployee.RestaurantId,
                    RequestStatus  = "on Hold",
                    NewRequestFlag = true,
                    Status         = "Applicant",
                    Active         = false,
                };
                RestaurantsManager.AddEmployeeToRestaurant(restaurantEmployee);
                if (newEmployee)
                {
                    TempData["Message"]      = "You successfully applied for a position in a Restaurant. You need to Login again to upgrade your new credential!!";
                    TempData["ErrorMessage"] = null;
                    return(RedirectToAction("Logout", "Account"));
                }
                else
                {
                    TempData["Message"]      = "You successfully applied for a position in a Restaurant!!";
                    TempData["ErrorMessage"] = null;
                    return(RedirectToAction("Profile", "Account"));
                }
            }
            else
            {
                TempData["Message"]      = null;
                TempData["ErrorMessage"] = "Sorry!! Your already applied to the Restaurant's position";
                return(RedirectToAction("Profile", "Account"));
            }
        }
 public async Task <IActionResult> LoginAsync(RestaurantLoginModelView authView)
 {
     TempData["RestaurantName"] = null;
     if (authView.Type == 0)
     {
         var user = UsersManager.Authenticate(authView.Username, authView.Password);
         if (user == null)
         {
             TempData["Message"]      = null;
             TempData["ErrorMessage"] = "Login Error!!!.Try Again. Don't forget to Register first!!";
             return(RedirectToAction("Login", "Account"));
         }
         var custId = CustomersManager.GetCustomerIdByUserId(user.UserId);
         var empId  = EmployeesManager.GetEmployeeIdByUserId(user.UserId);
         var ownId  = OwnersManager.GetOwnerIdByUserId(user.UserId);
         var claims = new List <Claim>()
         {
             new Claim(ClaimTypes.Name, user.Authentication.Username),
             new Claim("FullName", $"{user.FirstName} {user.LastName}"),
             new Claim("AuthID", user.AuthenticationId.ToString()),
             new Claim("UserID", user.UserId.ToString()),
             new Claim("CustomerID", custId.ToString()),
             new Claim("EmployeeID", empId.ToString()),
             new Claim("OwnerID", ownId.ToString()),
         };
         var claimsIdentity = new ClaimsIdentity(claims, "Cookies");
         await HttpContext.SignInAsync("Cookies", new ClaimsPrincipal(claimsIdentity));
     }
     else
     {
         var user = RestaurantsManager.AuthenticateRestaurant(authView.Username, authView.Password, authView.RestaurantId);
         if (user.UserId <= 0)
         {
             TempData["Message"]      = null;
             TempData["ErrorMessage"] = "Login Error!!!.Try Again.Don't forget to Register first!!";
             return(RedirectToAction("Login", "Account"));
         }
         var custId = CustomersManager.GetCustomerIdByUserId(user.UserId);
         var empId  = EmployeesManager.GetEmployeeIdByUserId(user.UserId);
         var ownId  = OwnersManager.GetOwnerIdByUserId(user.UserId);
         var claims = new List <Claim>()
         {
             new Claim(ClaimTypes.Name, user.Authentication.Username),
             new Claim("FullName", $"{user.FirstName} {user.LastName}"),
             new Claim("AuthID", user.AuthenticationId.ToString()),
             new Claim("UserID", user.UserId.ToString()),
             new Claim("CustomerID", custId.ToString()),
             new Claim("EmployeeID", empId.ToString()),
             new Claim("OwnerID", ownId.ToString()),
         };
         if (user.Authentication.AuthenticationMatrix.Count() > 0)
         {
             foreach (AuthenticationMatrix a in user.Authentication.AuthenticationMatrix)
             {
                 if (a.RestaurantId == authView.RestaurantId)
                 {
                     claims.Add(new Claim("RestaurantID", a.RestaurantId.ToString()));
                     claims.Add(new Claim(ClaimTypes.Role, a.Role));
                     TempData["RestaurantName"] = RestaurantsManager.GetRestaurantIdByNameByRestauranID(a.RestaurantId);
                 }
             }
         }
         var claimsIdentity = new ClaimsIdentity(claims, "Cookies");
         await HttpContext.SignInAsync("Cookies", new ClaimsPrincipal(claimsIdentity));
     }
     if (TempData["returnUrl"] == null)
     {
         return(Redirect("~/Account/Profile"));
     }
     else
     {
         return(Redirect(TempData["returnUrl"].ToString()));
     }
 }