public bool IsOkToCreateUnavailableInDates(string ApplicationUserId, DateTime StartDate, DateTime EndDate)
        {
            if ((StartDate == null || EndDate == null || ApplicationUserId == null) || (StartDate > EndDate) ||
                db.Users.Find(ApplicationUserId) == null)
            {
                return(false);
            }

            var unavailableDateList = GetUnavailableInDatesListForUser(ApplicationUserId);
            UnavailableInDate old   = IsExistUnavailableInDate(ApplicationUserId, StartDate, EndDate);

            foreach (var item in unavailableDateList)
            {
                if (item.StartDate > StartDate && item.EndDate > EndDate)
                {
                    continue;
                }
                else if (item.StartDate < StartDate && item.EndDate < EndDate)
                {
                    continue;
                }
                else if (item.Equals(old))
                {
                    continue;
                }
                else
                {
                    return(false);
                }
            }
            return(true);
        }
        public async Task <ActionResult> UnavailableDateCreate(UnavailableDateCreateVM uv)
        {
            var userId = User.Identity.GetUserId();

            try
            {
                if (ModelState.IsValid && uv != null && uv.StartDate != null && uv.EndDate != null)
                {
                    if (IsOkToCreateUnavailableInDates(userId, uv.StartDate, uv.EndDate))
                    {
                        if (IsExistUnavailableInDate(userId, uv.StartDate, uv.EndDate) != null)
                        {
                            return(RedirectToAction("Index"));
                        }
                        UnavailableInDate newUnavailableInDate = db.UnavailableInDates.Add(NewUnavailableInDate(userId, uv.StartDate, uv.EndDate));
                        var success = await db.SaveChangesAsync();

                        return(RedirectToAction("Index"));
                    }
                }
            }
            catch (DataException dex)
            {
                //Log the error (uncomment dex variable name and add a line here to write a log.
                ModelState.AddModelError("", "Unable to save changes. Try again, and if the problem persists see your system administrator.");
            }
            return(RedirectToAction("Index"));
        }
        public async Task <ActionResult> DeleteConfirmedUnavailableInDate(UnavailableInDate un)
        {
            UnavailableInDate old = IsExistUnavailableInDate(un.ApplicationUserId, un.StartDate, un.EndDate);

            db.UnavailableInDates.Remove(old);
            db.Entry(old).State = EntityState.Deleted;
            await db.SaveChangesAsync();

            return(RedirectToAction("Index"));
        }
        public async Task <ActionResult> DeleteUnavailableInDate(UnavailableInDate un)
        {
            if (un == null)
            {
                return(new HttpStatusCodeResult(HttpStatusCode.BadRequest));
            }
            UnavailableInDate old = IsExistUnavailableInDate(un.ApplicationUserId, un.StartDate, un.EndDate);

            return(old != null ? (ActionResult)View(old) : HttpNotFound());
        }
        public bool IsOkToUpdateUnavailableInDates(string ApplicationUserId, DateTime NewStartDate, DateTime NewEndDate, DateTime OldStartDate, DateTime OldEndDate)
        {
            if ((ApplicationUserId == null || NewStartDate == null || NewEndDate == null || OldStartDate == null || OldEndDate == null) ||
                db.Users.Find(ApplicationUserId) == null || NewStartDate > NewEndDate)
            {
                return(false);
            }
            UnavailableInDate old   = IsExistUnavailableInDate(ApplicationUserId, OldStartDate, OldEndDate);
            var unavailableDateList = GetUnavailableInDatesListForUser(ApplicationUserId);

            if (old == null || unavailableDateList.Count == 0)
            {
                return(false);
            }

            foreach (var item in unavailableDateList)
            {
                if (item.StartDate > NewStartDate && item.EndDate > NewEndDate)
                {
                    continue;
                }
                else if (item.StartDate < NewStartDate && item.EndDate < NewEndDate)
                {
                    continue;
                }
                else if (item.Equals(old))
                {
                    continue;
                }
                else
                {
                    return(false);
                }
            }
            return(true);
        }