コード例 #1
0
        public bool AddWorkingDates(WorkingDates days)
        {
            TimeRange timeRange  = new TimeRange(days.HourFrom, days.HourTo);
            string    employeeId = _context.GetTable <ServiceOffer>().Where(x => x.ID == days.ServiceOffer_ID).Select(x => x.Employee_ID).First();
            //string employeeId = _context.GetTable<WorkingDates>().Where(x => x.ServiceOffer_ID == days.ServiceOffer_ID).Select(x => x.ServiceOffer).Select(x => x.Employee_ID).First();
            bool result   = true;
            bool resultDb = false;

            var allServicesForThatDayForThatEmployee = _context.GetTable <WorkingDates>().Where(x => x.NameOfDay == days.NameOfDay).Select(x => x.ServiceOffer).Where(x => x.Employee_ID == employeeId);

            foreach (var item in allServicesForThatDayForThatEmployee)
            {
                foreach (var time in item.WorkingDates.Where(x => x.NameOfDay == days.NameOfDay))
                {
                    TimeRange itemTime = new TimeRange(time.HourFrom, time.HourTo);
                    if (itemTime.Clashes(timeRange))
                    {
                        result = false;
                        break;
                    }
                    else
                    {
                        result = true;
                    }
                }
                if (!result)
                {
                    break;
                }
            }
            if (result)
            {
                using (SqlConnection objConn = new SqlConnection(connection))
                {
                    objConn.Open();
                    try
                    {
                        WorkingDates workingDates = new WorkingDates
                        {
                            NameOfDay       = days.NameOfDay,
                            HourFrom        = days.HourFrom,
                            HourTo          = days.HourTo,
                            ServiceOffer_ID = days.ServiceOffer_ID,
                        };
                        _context.GetTable <WorkingDates>().InsertOnSubmit(workingDates);
                        _context.SubmitChanges();
                        resultDb = true;
                    }
                    catch
                    {
                        resultDb = false;
                    }
                    finally
                    {
                        objConn.Close();
                    }
                }
            }
            return(resultDb);
        }
コード例 #2
0
        public IList <TimeSpan> GetHoursTo(int serviceId, DateTime date, TimeSpan timefrom)
        {
            IList <TimeSpan> hourTo = new List <TimeSpan>();
            DayOfWeek        day    = date.DayOfWeek;
            var workingdates        = _context.GetTable <WorkingDates>().Where(x => x.NameOfDay == day.ToString() && x.ServiceOffer_ID == serviceId && x.HourFrom <= timefrom && x.HourTo >= timefrom).OrderBy(x => x.HourFrom);
            var unavailable         = _context.GetTable <Saleline>().Where(x => x.ServiceOffer_ID == serviceId).Select(x => x.BookedDate).Where(x => x.BookedDate1 == date).ToArray();

            for (TimeSpan from = timefrom; from < workingdates.Select(x => x.HourTo).Max(); from = +from.Add(new TimeSpan(01, 00, 00)))
            {
                TimeSpan  time      = from;
                TimeRange timeRange = new TimeRange(time, time.Add(new TimeSpan(01, 30, 00)));

                bool result = true;
                if (unavailable.Count() != 0)
                {
                    result = false;
                }
                unavailable.OrderBy(x => x.HourFrom);
                foreach (var i in unavailable)
                {
                    TimeRange range = new TimeRange(i.HourFrom, i.HourTo);
                    if (!range.Clashes(timeRange))
                    {
                        result = true;
                    }
                    else
                    {
                        result = false;
                        // break;
                    }
                }
                if (result)
                {
                    hourTo.Add(time.Add(new TimeSpan(01, 00, 00)));
                }
                else
                {
                    break;
                }
            }
            return(hourTo.ToList());
        }
コード例 #3
0
        public IHttpActionResult PostBookingNew(BookingNew bookingNew)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }

            TimeZoneInfo indiaZone  = TimeZoneInfo.FindSystemTimeZoneById("India Standard Time");
            DateTime     indianTime = TimeZoneInfo.ConvertTimeFromUtc(DateTime.UtcNow, indiaZone);

            bookingNew.BookingTime = indianTime;

            var       temp  = db.BookingNews.Where(x => x.StartDate == bookingNew.StartDate && x.RoomNumber == bookingNew.RoomNumber).ToList();
            TimeRange range = new TimeRange(bookingNew.StartTime, bookingNew.EndTime);

            string ErrorInvalidDateTime = "Select valid date and/or times";
            string ErrorRestriction     = "You are not allowed to book room for more than 2 hours.";

            foreach (var item in temp)
            {
                string    ErrorClash = "Booking timings are clashing with a meeting. Booking Id: " + item.BookingId + " | Start Time:" + item.StartTime + " | End Time:" + item.EndTime + " | Booked By:" + item.EmpId;
                TimeRange rangeItem  = new TimeRange(item.StartTime, item.EndTime);
                if (rangeItem.Clashes(range, true))
                {
                    return(BadRequest(ErrorClash));
                }
            }
            if ((bookingNew.StartTime < indianTime.TimeOfDay || bookingNew.EndTime <= indianTime.TimeOfDay) && bookingNew.StartDate <= indianTime)
            {
                return(BadRequest(ErrorInvalidDateTime));
            }
            if (bookingNew.EndTime > bookingNew.StartTime.Add(new TimeSpan(2, 0, 0)))
            {
                return(BadRequest(ErrorRestriction));
            }

            db.BookingNews.Add(bookingNew);
            db.SaveChanges();

            return(CreatedAtRoute("DefaultApi", new { id = bookingNew.BookingId }, bookingNew));
        }
コード例 #4
0
 public IList <TimeSpan> GetHoursFrom(int serviceId, DateTime date)
 {
     try
     {
         IList <TimeSpan> hourTo = new List <TimeSpan>();
         DayOfWeek        day    = date.DayOfWeek;
         var workingdates        = _context.GetTable <WorkingDates>().Where(x => x.NameOfDay == day.ToString() && x.ServiceOffer_ID == serviceId).OrderBy(x => x.HourFrom);
         var unavailable         = _context.GetTable <Saleline>().Where(x => x.ServiceOffer_ID == serviceId).Select(x => x.BookedDate).Where(x => x.BookedDate1 == date).ToArray();
         foreach (var t in workingdates)
         {
             for (TimeSpan from = t.HourFrom; from < t.HourTo; from = +from.Add(new TimeSpan(01, 00, 00)))
             {
                 TimeSpan  time      = from;
                 TimeRange timeRange = new TimeRange(time, time.Add(new TimeSpan(01, 30, 00)));
                 bool      result    = true;
                 foreach (var i in unavailable)
                 {
                     TimeRange range = new TimeRange(i.HourFrom, i.HourTo);
                     if (!range.Clashes(timeRange, true))
                     {
                         result = true;
                     }
                     else
                     {
                         result = false;
                         break;
                     }
                 }
                 if (result)
                 {
                     hourTo.Add(time);
                 }
             }
         }
         return(hourTo.ToList());
     }
     catch (InvalidOperationException)
     {
         throw new Exception();
     }
 }
コード例 #5
0
        public bool HoursAvailable(int serviceOfferId, DateTime date, TimeSpan from, TimeSpan to)
        {
            ServiceOffer      s         = _context.GetTable <ServiceOffer>().FirstOrDefault(x => x.ID == serviceOfferId);
            TimeRange         timeRange = new TimeRange(from, to);
            IList <TimeRange> times     = new List <TimeRange>();
            var salelines = _context.GetTable <Saleline>().Where(x => x.ServiceOffer_ID == s.ID);

            foreach (var t in salelines)
            {
                if (t.BookedDate.BookedDate1.ToShortDateString() == date.ToShortDateString())
                {
                    times.Add(new TimeRange(t.BookedDate.HourFrom, t.BookedDate.HourTo));
                }
            }

            foreach (var w in times)
            {
                if (timeRange.Clashes(w))
                {
                    return(false);
                }
            }
            return(true);
        }