public async Task<ActionResult> IsEmailExist(string UserName)
        {
            SAASContext SAASdb = new SAASContext();
            var user = SAASdb.Users.Where(c => c.UserName == UserName).FirstOrDefault();
            if (user == null)
            {

                return Json(user == null ? false : true, JsonRequestBehavior.AllowGet);
            }
            //var isuser = Membership.GetUser(UserName);
            //return Json(isuser == null ? false : true, JsonRequestBehavior.AllowGet);

            var companyUserManger = ApplicationUserManager.Create(user.RestaurantName);

            var getuser = companyUserManger.FindByNameAsync(UserName);

            return Json(getuser == null ? false : true, JsonRequestBehavior.AllowGet);

        }
        public void BroadcastUpdate(object state)
        {
            try
            {
                SAASContext _db = new SAASContext();
                var databaseName = _db.Users.Where(c => c.Approved != null).ToList();
                foreach (var item in databaseName)
                {
                    string databasename = item.RestaurantName;
                    databasename = databasename.Replace(" ", "");
                    //databasename = "vanfish";
                    //if (databaseName != null)
                    //{
                    try
                    {
                        int minToAdd = 15;
                        int checkIfMins = 13;
                        var timeZone = _cache.Get<Setting>(string.Format(CacheKeys.SETTING_BY_NAME_KEY, databasename, "TimeZone"), () =>
                        {
                            using (var db = new UsersContext(databasename))
                            {
                                return db.GetSettingByName("TimeZone");
                            }
                        });

                        DateTime defaultClientTime = TimeZoneInfo.ConvertTime(DateTime.UtcNow, TimeZoneInfo.FindSystemTimeZoneById(timeZone.Value));
                        if ((defaultClientTime.TimeOfDay.Minutes % 15) == checkIfMins)
                        {
                            var openCloseTimeOfDay = defaultClientTime.DayOfWeek.GetOpenAndCloseTime(databasename);

                            if (openCloseTimeOfDay.OpenTime <= defaultClientTime && defaultClientTime <= openCloseTimeOfDay.CloseTime.AddMinutes(-15))
                            {
                                using (var db = new UsersContext(databasename))
                                {
                                    List<Reservation> singleTableReservations = null;
                                    List<long> conflictedRes = new List<long>();

                                    var allResToday = db.tabReservations.Where(r => !r.IsDeleted && r.ReservationDate == defaultClientTime.Date).ToList();

                                    singleTableReservations = allResToday.Where(r => r.FloorTableId > 0).ToList();

                                    var rejectedStatus = new List<long>()
                                     {
                                         ReservationStatus.Finished,
                                         ReservationStatus.Cancelled
                                     };

                                    singleTableReservations = singleTableReservations.Where(r => !rejectedStatus.Contains(r.StatusId.Value)).ToList();
                                    singleTableReservations = singleTableReservations.Where(r => r.TimeForm.AddMinutes(r.Duration.GetMinutesFromDuration()) > defaultClientTime &&
                                        r.TimeForm.AddMinutes(r.Duration.GetMinutesFromDuration()) < defaultClientTime.AddMinutes(15 - checkIfMins)).ToList();

                                    int resCount = singleTableReservations.Count;
                                    decimal processedReservations = 0;
                                    if (resCount > 0)
                                        _hubContext.Clients.All.startProgress();

                                    foreach (var res in singleTableReservations)
                                    {
                                        var upcomingReservation = allResToday
                                            .FirstOrDefault(r => (r.TimeForm > defaultClientTime && r.TimeForm < defaultClientTime.AddMinutes(minToAdd))
                                                && (r.FloorTableId == 0 ? r.MergedFloorTable.OrigionalTables.Any(t => t.FloorTableId == res.FloorTableId) : r.FloorTableId == res.FloorTableId));

                                        if (upcomingReservation != null)
                                        {
                                            bool isMergeConflict = (upcomingReservation.FloorTableId == 0);
                                            var oldDuration = res.Duration;
                                            try
                                            {
                                                if (!isMergeConflict && TryShiftUpcomingReservationToOtherAvailableTable(db, upcomingReservation))
                                                {
                                                    try
                                                    {
                                                        ExtendReservationDuration(minToAdd, db, res, out oldDuration);

                                                        _hubContext.Clients.Group(databasename).updateEndingReservation(
                                                            string.Format(RESERVATION_EXTENDED_CONFLICT_RESOLVED_SUCCESSFULLY,
                                                            res.FloorTable.TableName,
                                                            res.TimeForm.AddMinutes(oldDuration.GetMinutesFromDuration()).ToShortTimeString(),
                                                            upcomingReservation.TimeForm.ToShortTimeString(),
                                                            upcomingReservation.FloorTable.TableName), NotifyType.INFO);
                                                    }
                                                    catch (Exception ex)
                                                    {
                                                        _hubContext.Clients.Group(databasename).updateEndingReservation(
                                                            string.Format(FAILED_TO_EXTEND_RESERVATION,
                                                            res.FloorTable.TableName,
                                                            res.TimeForm.AddMinutes(oldDuration.GetMinutesFromDuration()).ToShortTimeString(),
                                                            ex.Message), NotifyType.ERROR);
                                                    }
                                                }
                                                else
                                                {
                                                    if (isMergeConflict)
                                                    {
                                                        _hubContext.Clients.Group(databasename).updateEndingReservation(
                                                            string.Format(CANNOT_EXTEND_CONFICT_MERGE_RESERVATION,
                                                            res.FloorTable.TableName,
                                                            res.TimeForm.AddMinutes(res.Duration.GetMinutesFromDuration()).ToShortTimeString(),
                                                            upcomingReservation.TimeForm.ToShortTimeString()), NotifyType.ERROR);
                                                    }
                                                    else
                                                    {
                                                        _hubContext.Clients.Group(databasename).updateEndingReservation(
                                                            string.Format(CANNOT_EXTEND_RESERVATION,
                                                            res.FloorTable.TableName,
                                                            res.TimeForm.AddMinutes(res.Duration.GetMinutesFromDuration()).ToShortTimeString(),
                                                            upcomingReservation.TimeForm.ToShortTimeString()), NotifyType.ERROR);
                                                    }
                                                }
                                            }
                                            catch (Exception ex)
                                            {
                                                _hubContext.Clients.Group(databasename).updateEndingReservation(
                                                    string.Format(FAILED_TO_EXTEND_RESERVATION,
                                                    res.FloorTable.TableName,
                                                    res.TimeForm.AddMinutes(res.Duration.GetMinutesFromDuration()).ToShortTimeString(),
                                                    ex.Message), NotifyType.ERROR);
                                            }
                                        }
                                        else if (res.TimeForm.AddMinutes(res.Duration.GetMinutesFromDuration() + minToAdd) > openCloseTimeOfDay.CloseTime)
                                        {
                                            _hubContext.Clients.Group(databasename).updateEndingReservation(
                                               string.Format(FAILED_EXCEED_DAY_CLOSE_TIME,
                                               res.FloorTable.TableName,
                                               res.TimeForm.AddMinutes(res.Duration.GetMinutesFromDuration()).ToShortTimeString()), NotifyType.ERROR);
                                        }
                                        else
                                        {
                                            var oldDuration = res.Duration;
                                            try
                                            {
                                                ExtendReservationDuration(minToAdd, db, res, out oldDuration);
                                                _hubContext.Clients.Group(databasename).updateEndingReservation(
                                                    string.Format(RESERVATION_EXTENDED_SUCCESSFULLY,
                                                    res.FloorTable.TableName,
                                                    res.TimeForm.AddMinutes(oldDuration.GetMinutesFromDuration()).ToShortTimeString()), NotifyType.SUCCESS);
                                            }
                                            catch (Exception ex)
                                            {
                                                _hubContext.Clients.Group(databasename).updateEndingReservation(
                                                    string.Format(FAILED_TO_EXTEND_RESERVATION,
                                                    res.FloorTable.TableName,
                                                    res.TimeForm.AddMinutes(oldDuration.GetMinutesFromDuration()).ToShortTimeString(),
                                                    ex.Message), NotifyType.ERROR);
                                            }
                                        }

                                        processedReservations++;
                                        var percent = Convert.ToInt32(Math.Floor((processedReservations / resCount) * 100));
                                        _hubContext.Clients.All.updateProgress(percent);

                                        Thread.Sleep(200);
                                    }

                                    _hubContext.Clients.Group(databasename).updateProgress(100);
                                }
                            }

                            ClearReservationCache(databasename);
                        }
                    }
                    catch (Exception ex)
                    {
                        _hubContext.Clients.Group(databasename).updateEndingReservation(ex.Message, NotifyType.ERROR);
                    }
                }
            }
            catch (Exception ex)
            {
                _hubContext.Clients.All.updateEndingReservation(ex.Message, NotifyType.ERROR);
            }
        }
        public async Task<ActionResult> ForgotPassword(ForgotPasswordModel model)
        {
            EmailSender.EmailSender sendEmail = new EmailSender.EmailSender();
            string subject = "Forgot Password";
            string CC = (string)ConfigurationManager.AppSettings["adminEmail"];
            string fromEmail = (string)ConfigurationManager.AppSettings["Email_To"];
            string template = string.Empty;
            SAASContext SAASdb = new SAASContext();
            var user = SAASdb.Users.Where(c => c.UserName == model.UserName).FirstOrDefault();
            using (StreamReader reader = new StreamReader(System.Web.HttpContext.Current.Server.MapPath("~/EmailTemplates/ForgotPassword.html")))
            {
                template = reader.ReadToEnd();
            }

            var companyUserManger = ApplicationUserManager.Create(user.RestaurantName);
            var getuser = companyUserManger.FindByName(user.Email);
            var resetToken = companyUserManger.GeneratePasswordResetToken(getuser.Id);

            string sitepath = "http://www.mondofi.com/Account/ResetPassword?email=" + model.UserName + "&code=" + resetToken;

            template = template.Replace("{verifyUrl}", sitepath);

            sendEmail.SendEmail(subject, template, model.UserName, null, fromEmail, null);
            return RedirectToAction("EmailSend", "Account");
        }