Esempio n. 1
0
        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;
        }
Esempio n. 3
0
        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;
        }
Esempio n. 4
0
        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;
        }
Esempio n. 5
0
        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;
        }