Exemple #1
0
        public static DayCalendar FillAvalitiyAndRate(decimal freeSpace, decimal occupiedSpace, DateTime?date)
        {
            var dayCalendar = new DayCalendar {
                Date = date
            };

            if (date == null || date < DateTime.Now.Date)
            {
                dayCalendar.Availability  = AvailabilityEnum.PastDate;
                dayCalendar.FreeSpace     = -1;
                dayCalendar.OccupiedSpace = -1;
                dayCalendar.Rate          = -1;
                dayCalendar.Day           = String.Empty;
                if (date != null)
                {
                    dayCalendar.Day = ((DateTime)date).Day.ToString();
                }
            }
            else
            {
                dayCalendar.Day           = ((DateTime)date).Day.ToString();
                dayCalendar.FreeSpace     = freeSpace;
                dayCalendar.OccupiedSpace = occupiedSpace;
                if (occupiedSpace == 0 && freeSpace == 0)
                {
                    dayCalendar.Rate = -1;
                }
                else
                {
                    if (freeSpace.Equals(0))
                    {
                        freeSpace = 1;
                    }
                    dayCalendar.Rate = (occupiedSpace / freeSpace) * 100;
                }
                if (dayCalendar.Rate <= 50)
                {
                    dayCalendar.Availability = AvailabilityEnum.Avaliable;
                }
                if (dayCalendar.Rate > 50)
                {
                    dayCalendar.Availability = AvailabilityEnum.LowAvailability;
                }
                if (dayCalendar.Rate == 100)
                {
                    dayCalendar.Availability = AvailabilityEnum.Unavailable;
                }
                if (dayCalendar.Rate == -1)
                {
                    dayCalendar.Availability = AvailabilityEnum.NoService;
                }
            }
            return(dayCalendar);
        }
Exemple #2
0
 public void CompareToDayCalendar(DayCalendar calendar, int expected)
 {
     Assert.Equal(expected, TestDay.CompareTo(calendar));
 }
        public async Task BookAppointmentAsync(AppointmentRequest appointmentRequest)
        {
            // Making a Builders Filter Query (filterByUserAndDateInAppointmentRequest) which will execute on appointments( a mongo collection).
            var filterByUsersAndDateInAppointmentRequest = Builders <DayCalendar> .Filter.And(
                Builders <DayCalendar> .Filter.In(x => x.UserId, appointmentRequest.Attendees),
                Builders <DayCalendar> .Filter.Where(x => x.Date.Equals(appointmentRequest.Slot.Date.Date))
                );

            // execute Builders query on appointments collection.
            var dayCalendarsOfAttendeesAsync = appointments.FindAsync(filterByUsersAndDateInAppointmentRequest);

            // converting IAsyncCursor to List<DayCalendar> type.
            var dayCalendarOfAttendees = (await dayCalendarsOfAttendeesAsync).ToList();

            // getting list of Attendees.
            var attendeesWithoutDayCalendar = appointmentRequest.Attendees.Except(dayCalendarOfAttendees.Select(x => x.UserId)).ToList();

            // Creating a documnet of User whose document is not created.
            foreach (var attendee in attendeesWithoutDayCalendar)
            {
                var appointment = new DayCalendar()
                {
                    UserId = attendee,
                    Date   = appointmentRequest.Slot.Date,
                    Slots  = new List <Slot>()
                    {
                        new Slot()
                        {
                            TimeSlot  = appointmentRequest.Slot,
                            Attendees = new List <AttendeeWithSymptom>()
                            {
                            }
                        },
                    }
                };
                this.appointments.InsertOne(appointment);
                dayCalendarOfAttendees.Add(appointment);
            }

            // Code to update Slot and Attendees of the Slot.
            foreach (var dayCalendarOfAttendee in dayCalendarOfAttendees)
            {
                var slots = dayCalendarOfAttendee.Slots.ToList();
                var slot  = slots.Where(x => x.TimeSlot.Equals(appointmentRequest.Slot)).FirstOrDefault();
                if (slot == null)
                {
                    slot = new Slot()
                    {
                        TimeSlot = appointmentRequest.Slot, Attendees = new List <AttendeeWithSymptom>()
                        {
                        }
                    };
                    dayCalendarOfAttendee.Slots.Add(slot);
                }

                //var otherAttendees = dayCalendarOfAttendees.Select(x => x.UserId).Except(new List<string> { dayCalendarOfAttendee.UserId }).ToList();
                //slot.Attendees.AddRange(otherAttendees);

                var OtherAttendeeName = dayCalendarOfAttendees.Select(x => x.UserId).Except(new List <string> {
                    dayCalendarOfAttendee.UserId
                });
                var attendeeName = OtherAttendeeName.ElementAt(0);

                AttendeeWithSymptom attendeeWithSymptom = new AttendeeWithSymptom
                {
                    AttendeeId = attendeeName,
                    Symptoms   = appointmentRequest.Symptom
                };
                //appointmentRequest.Symptom.CopyTo(attendeeWithSymptom.Symptoms, 0);

                slot.Attendees.Add(attendeeWithSymptom);

                var filter = Builders <DayCalendar> .Filter.Eq(x => x.UserId, dayCalendarOfAttendee.UserId);

                appointments.ReplaceOne <DayCalendar>(x => x.DayCalendarId == dayCalendarOfAttendee.DayCalendarId, dayCalendarOfAttendee);
            }
        }