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(); }
public static Event GetGoogleEvent(BookingEvent ev) { var googleEvent = new Event(); StringBuilder header = new StringBuilder(ev.BookingHeader); if (header.Length == 0) { if(!String.IsNullOrWhiteSpace(ev.BookingMessage)) { header.Append("[K]"); } header.Append("Moridge - ").Append(ev.CompanyName).Append(" ").Append(ev.VehicleRegNo); ev.BookingHeader = header.ToString(); } googleEvent.Summary = header.ToString(); googleEvent.Description = ev.BookingMessage; googleEvent.Location = ev.CustomerAddress; return googleEvent; }
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; }
public List<BookingEvent> GetBookingsByOrganisation(string customerOrgNo) { var log = db.BookingLogs.Where(bl => bl.CustomerOrgNo == customerOrgNo); List<BookingEvent> events = new List<BookingEvent>(); DateTime now = DateTime.Now.AddHours(1).ToUniversalTime(); foreach (var item in log.Where(l => l.EndDateTime >= now)) { BookingEvent ev = new BookingEvent(); ev.StartDateTime = item.StartDateTime; ev.EndDateTime = item.EndDateTime; ev.VehicleRegNo = item.VehicleRegNo; ev.CustomerAddress = item.CustomerAddress; ev.CustomerEmail = item.CustomerEmail; ev.CustomerOrgNo = item.CustomerOrgNo; ev.IsBooked = true; ev.BookingHeader = item.BookingHeader; ev.BookingMessage = item.BookingMessage; ev.SupplierEmailAddress = item.SupplierEmailAddress; ev.CompanyName = item.CompanyName; events.Add(ev); } return events; }
private BookingLog GetBookingLog(BookingEvent ev) { BookingLog log = new BookingLog(); log.StartDateTime = ev.StartDateTime; log.EndDateTime = ev.EndDateTime; log.VehicleRegNo = ev.VehicleRegNo; log.CustomerAddress = ev.CustomerAddress; log.CustomerEmail = ev.CustomerEmail; log.CustomerOrgNo = ev.CustomerOrgNo; log.BookingMessage = ev.BookingMessage; log.CompanyName = ev.CompanyName; log.ResourceId = ev.ResourceId; log.BookingHeader = ev.BookingHeader; log.SupplierEmailAddress = String.IsNullOrEmpty(ev.SupplierEmailAddress) ? "" : ev.SupplierEmailAddress; return log; }