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); }
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); } }