public void BookEvent(BookingEvent bookingEvent) { Resource resource = db.Resources.Find(bookingEvent.ResourceId); if (resource == null) { throw new Exception("Error trying to find resource with id: " + bookingEvent.ResourceId.ToString()); } if(bookingEvent.StartDateTime.CompareTo(DateTime.UtcNow.AddYears(-1)) < 0 || bookingEvent.EndDateTime.CompareTo(DateTime.UtcNow.AddYears(-1)) < 0) { throw new Exception("Date error: " + bookingEvent.StartDateTime.ToString() + " : " + bookingEvent.EndDateTime.ToString()); } //If customer and vehicle doesn´t exist, add if(db.CustomerVehicles.Count(v => v.CustomerOrgNo == bookingEvent.CustomerOrgNo && v.VehicleRegNo == bookingEvent.VehicleRegNo) == 0) { CustomerVehicle customerVehicle = new CustomerVehicle(); customerVehicle.CustomerOrgNo = bookingEvent.CustomerOrgNo; customerVehicle.VehicleRegNo = bookingEvent.VehicleRegNo; db.CustomerVehicles.Add(customerVehicle); db.SaveChanges(); } List<string> emails = bookingEvent.Attendees ?? new List<string>(); emails.Add(bookingEvent.CustomerEmail); emails.Add(resource.CalendarEmail); emails.Add(bookingEvent.SupplierEmailAddress); var ev = GoogleCalendarHelper.GetGoogleEvent(bookingEvent); ev.Attendees = GoogleCalendarHelper.GetAttendees(emails); ev.Organizer = GoogleCalendarHelper.GetEventOrganizer(); ev.Start = GoogleCalendarHelper.GetEventStart(bookingEvent.StartDateTime.AddHours(7)); //Compensate for timedifference between client- and serviceserver ev.End = GoogleCalendarHelper.GetEventEnd(bookingEvent.EndDateTime.AddHours(7)); //Compensate for timedifference between client- and serviceserver GoogleCalendar calendar = new GoogleCalendar(Common.GetAppConfigValue("MoridgeOrganizerCalendarEmail"), Common.GetAppConfigValue("MoridgeMainCalendarEmail")); calendar.InsertEvent(ev); db.BookingLogs.Add(GetBookingLog(bookingEvent)); db.SaveChanges(); }
private List<BookingEvent> Get15AvailableDatesForBooking(Resource resource) { GoogleCalendar googleCalendar = new GoogleCalendar(resource.CalendarEmail, resource.CalendarServiceAccountEmail); var events = GoogleCalendarHelper.HandleEventStartEndNull(googleCalendar.GetEventList(resource.CalendarEmail)); //Debugging purpose //googleCalendar.DeleteEvent(Common.GetAppConfigValue(resource.CalendarEmail), "7dfntteacvfore0o5qdivp2g28"); var daysBeforeBooking = resource.DaysBeforeBooking; DateTime currentStartDate = DateTime.Now.AddDays(daysBeforeBooking).ToUniversalTime().AddHours(2); //Set swedish time DateTime currentEndDate = currentStartDate; TimeSpan morningStartTime = new TimeSpan(8, 0, 0); TimeSpan morningEndTime = new TimeSpan(12, 0, 0); TimeSpan afterLunchStartTime = new TimeSpan(13, 0, 0); TimeSpan afterLunchEndTime = new TimeSpan(17, 0, 0); List<BookingEvent> dateList = new List<BookingEvent>(); bool isMorningTime = true; int maxBookings = 0; int maxBookingsBeforeLunch = resource.MaxBookingsBeforeLunch; int maxBookingsAfterLunch = resource.MaxBookingsAfterLunch; while (dateList.Count < 15) { if (currentStartDate.DayOfWeek != DayOfWeek.Saturday && currentStartDate.DayOfWeek != DayOfWeek.Sunday) { if (isMorningTime) { currentStartDate = currentStartDate.Date + morningStartTime; currentEndDate = currentEndDate.Date + morningEndTime; maxBookings = maxBookingsBeforeLunch; isMorningTime = false; } else { currentStartDate = currentStartDate.Date + afterLunchStartTime; currentEndDate = currentEndDate.Date + afterLunchEndTime; maxBookings = maxBookingsAfterLunch; isMorningTime = true; } if(IsSlotAvailable(events.Items, currentStartDate, currentEndDate, maxBookings) && IsResourceWorking(events.Items, currentStartDate, currentEndDate)) { BookingEvent bookingEvent = new BookingEvent(); bookingEvent.IsBooked = false; bookingEvent.StartDateTime = currentStartDate; bookingEvent.EndDateTime = currentEndDate; bookingEvent.ResourceId = resource.Id; dateList.Add(bookingEvent); } } if (isMorningTime) { currentStartDate = currentStartDate.AddDays(1); currentEndDate = currentEndDate.AddDays(1); } } return dateList; }