public static void GenerateData(BirthClinicDbContext Context) { //Adding 136 Births since there are 5000 births per year (13.6 per day), and we want to simulate 10 days of fake data. for (int i = 0; i < HowManyBirthsToGenerate; i++) { var B = BirthFactory.CreateFakeBirth(); if (!CreateReservations(Context, B, out List <Reservation> reservations)) { Console.WriteLine("We are out of rooms"); continue; } if (!AddClinicians(Context, B, out List <Clinician> Clinicians)) { continue; } Context.AddRange(reservations); B.AssociatedClinicians = Clinicians; B.Mother = AddMother(); Random rand = new(); if (rand.Next(1, 10) > 1) { B.Father = AddFather(); } B.Relatives = AddRelatives(); B.ChildrenToBeBorn = AddChildrenToBorn(); B.IsEnded = false; Context.Births.Add(B); Context.SaveChanges(); } }
public static bool CreateBirth(BirthClinicDbContext Context) { var B = BirthFactory.CreateFakeBirth(); if (!CreateReservations(Context, B, out List <Reservation> reservations)) { Console.WriteLine("We are out of rooms"); return(false); } if (!AddClinicians(Context, B, out List <Clinician> Clinicians)) { return(false); } Context.AddRange(reservations); B.AssociatedClinicians = Clinicians; B.Mother = AddMother(); Random rand = new(); if (rand.Next(1, 10) > 1) { B.Father = AddFather(); } B.Relatives = AddRelatives(); B.ChildrenToBeBorn = AddChildrenToBorn(); B.IsEnded = false; Context.Births.Add(B); Context.SaveChanges(); return(true); }
public static void PrintAvailableRoomsInNext5Days(BirthClinicDbContext context) { DateTime FilterDate = DateTime.Now.AddDays(5); /*rInner.CurrentReservations.OrderBy(p => p.StartTime)*/ var filterTime = DateTime.Now.AddDays(5); //Makes a tuple of room ID and a list of the room's reservations in the next 5 days. Also converts to list as no more processing can be done server-side. var MaternityRooms = context.Rooms.Where(r => r.RoomType == RoomType.MATERNITY).OrderBy(r => r.RoomId); var MaternityReservations = MaternityRooms.Select(r => r.CurrentReservations.Where(r => r.EndTime < filterTime).ToList()).ToList(); var MaternityTuples = MaternityRooms.Select(r => r.RoomId).ToList().Zip(MaternityReservations).ToList(); var BirthRooms = context.Rooms.Where(r => r.RoomType == RoomType.BIRTH).OrderBy(r => r.RoomId); var BirthReservations = BirthRooms.Select(r => r.CurrentReservations.Where(r => r.EndTime < filterTime)).ToList(); var BirthTuples = BirthRooms.Select(r => r.RoomId).ToList().Zip(BirthReservations).ToList(); var RestRooms = context.Rooms.Where(r => r.RoomType == RoomType.REST).OrderBy(r => r.RoomId); var RestReservations = RestRooms.Select(r => r.CurrentReservations.Where(r => r.EndTime < filterTime)).ToList(); var RestTuples = RestRooms.Select(r => r.RoomId).ToList().Zip(RestReservations).ToList(); var MaternityRoomDict = new Dictionary <int, List <DateTime> >(); var BirthRoomDict = new Dictionary <int, List <DateTime> >(); var RestRoomDict = new Dictionary <int, List <DateTime> >(); RestTuples.ForEach(tuple => { var slots = DateTimeUtils.FindAvailableRoomTimeSlots(tuple.Second.ToList(), TimeSpan.FromHours(4)); if (slots.Count > 0) { Console.WriteLine("Room " + tuple.First + " (Rest) is available from the following times"); Console.WriteLine(StringUtils.DateTimeListToCommaSeparatedString(slots) + "\n"); } }); BirthTuples.ForEach(tuple => { var slots = DateTimeUtils.FindAvailableRoomTimeSlots(tuple.Second.ToList(), TimeSpan.FromHours(12)); if (slots.Count > 0) { Console.WriteLine("Room " + tuple.First + " (Birth) is available from the following times"); Console.WriteLine(StringUtils.DateTimeListToCommaSeparatedString(slots) + "\n"); } }); MaternityTuples.ForEach(tuple => { var slots = DateTimeUtils.FindAvailableRoomTimeSlots(tuple.Second.ToList(), TimeSpan.FromDays(5)); if (slots.Count > 0) { Console.WriteLine("Room " + tuple.First + " (Maternity) is available from the following times"); Console.WriteLine(StringUtils.DateTimeListToCommaSeparatedString(slots) + "\n"); } }); }
public static bool CreateReservations(BirthClinicDbContext Context, Birth Birth, out List <Reservation> reservations) { var MaternityStartTime = Birth.BirthDate.AddHours(-132); var MaternityEndTime = Birth.BirthDate.AddHours(-12); var RestStartTime = Birth.BirthDate; var RestEndTime = Birth.BirthDate.AddHours(4); var BirthStartTime = Birth.BirthDate.AddHours(-12); var BirthEndTime = Birth.BirthDate; var AvailableMaternityRoom = FindAvailableRooms(Context.Rooms, MaternityStartTime, MaternityEndTime, RoomType.MATERNITY); var AvailableBirthRoom = FindAvailableRooms(Context.Rooms, MaternityStartTime, MaternityEndTime, RoomType.BIRTH); var AvailableRestRoom = FindAvailableRooms(Context.Rooms, MaternityStartTime, MaternityEndTime, RoomType.REST); //Not possible to create a birth at the given time. Find another hospital. if (AvailableBirthRoom == null || AvailableMaternityRoom == null || AvailableRestRoom == null) { reservations = null; return(false); } else //There are available rooms of all 3 categories! Nice! { //create reservations var MaternityRes = new Reservation { StartTime = MaternityStartTime, EndTime = MaternityEndTime, ReservedRoom = AvailableMaternityRoom, AssociatedBirth = Birth }; var BirthRes = new Reservation { StartTime = BirthStartTime, EndTime = BirthEndTime, ReservedRoom = AvailableBirthRoom, AssociatedBirth = Birth }; var RestRes = new Reservation { StartTime = RestStartTime, EndTime = RestEndTime, ReservedRoom = AvailableRestRoom, AssociatedBirth = Birth }; reservations = new List <Reservation> { MaternityRes, BirthRes, RestRes }; return(true); } }
public static void GenerateStaticData(BirthClinicDbContext Context) { //create midwives for (int i = 0; i < 10; i++) { Context.Clinicians.Add(ClinicianFactory.CreateFakeClinician(ClinicianType.MIDWIFE)); } //create nurses for (int i = 0; i < 20; i++) { Context.Clinicians.Add(ClinicianFactory.CreateFakeClinician(ClinicianType.NURSE)); } //create assistants for (int i = 0; i < 20; i++) { Context.Clinicians.Add(ClinicianFactory.CreateFakeClinician(ClinicianType.HEALTH_ASSISTANT)); } //create Doctors for (int i = 0; i < 5; i++) { Context.Clinicians.Add(ClinicianFactory.CreateFakeClinician(ClinicianType.DOCTOR)); } //create Secretaries for (int i = 0; i < 4; i++) { Context.Clinicians.Add(ClinicianFactory.CreateFakeClinician(ClinicianType.SECRETARY)); } //create Maternity Rooms for (int i = 0; i < 22; i++) { Context.Rooms.Add(RoomFactory.CreateRoom(RoomType.MATERNITY)); } //create Rest Rooms for (int i = 0; i < 5; i++) { Context.Rooms.Add(RoomFactory.CreateRoom(RoomType.REST)); } //create Birth Rooms for (int i = 0; i < 15; i++) { Context.Rooms.Add(RoomFactory.CreateRoom(RoomType.BIRTH)); } //Save before adding births. Context.SaveChanges(); }
public void Case1(BirthClinicDbContext context) { Console.Clear(); DateTime FilterDate = DateTime.Now.AddDays(3); List <Birth> BirthList = context.Births.Where(c => c.BirthDate < FilterDate && c.IsEnded == false).ToList(); Console.WriteLine("Please enter a number between 1 and " + BirthList.Count + ", to view the specific birth's details."); int Choice = ReadAndParseInt32FromDisplay(); Console.Clear(); Birth B = BirthList.ElementAt(Choice - 1); foreach (var c in B.ChildrenToBeBorn) { Console.WriteLine("Name: " + c.FirstName + " " + c.LastName); } Console.WriteLine("Date of birth: " + B.BirthDate.ToLongDateString()); Console.WriteLine("Mother: " + B.Mother.FirstName + " " + B.Mother.LastName); if (B.Father != null) { Console.WriteLine("Father: " + B.Father.FirstName + " " + B.Father.LastName); } if (B.Relatives.Any()) { Console.WriteLine("Relatives:"); foreach (var r in B.Relatives) { Console.WriteLine("Name: " + r.FirstName + " " + r.LastName); } } Console.WriteLine("Clinicians:"); foreach (var c in B.AssociatedClinicians) { Console.WriteLine(c.Role + ": " + c.FirstName + " " + c.LastName); } List <Reservation> ReservationList = context.Reservations.Where(r => r.AssociatedBirth == B).ToList(); Console.WriteLine("This birth has the following reservations:"); foreach (var r in ReservationList) { string room = r.ReservedRoom.RoomType.ToString(); room = room.Substring(0, 1).ToUpper() + room[1..].ToLower();
public static bool CreateReservation(BirthClinicDbContext Context, RoomType Type) { List <Birth> BirthList = Context.Births.ToList(); Console.WriteLine("Please choose a Birth to add this reservation to."); Console.WriteLine("Pick between " + 1 + " and " + BirthList.Count + "."); string line = ""; int Choice = -1; while (Choice == -1) { try { line = Console.ReadLine(); Choice = Int32.Parse(line); } catch (FormatException) { Console.WriteLine("{0} is not a valid integer!\nTry again:", line); Choice = -1; } } var B = BirthList.ElementAt(Choice - 1); var StartTime = B.BirthDate; var EndTime = B.BirthDate; switch (Type) { case RoomType.BIRTH: StartTime = B.BirthDate.AddHours(-12); EndTime = B.BirthDate; break; case RoomType.MATERNITY: StartTime = B.BirthDate.AddHours(-132); EndTime = B.BirthDate.AddHours(-12); break; case RoomType.REST: StartTime = B.BirthDate; EndTime = B.BirthDate.AddHours(4); break; } var AvailableRoom = FindAvailableRooms(Context.Rooms, StartTime, EndTime, Type); //Not possible to create a birth at the given time. Find another hospital. if (AvailableRoom == null) { return(false); } else //There are available rooms of all 3 categories! Nice! { //create reservations var reservation = new Reservation { StartTime = StartTime, EndTime = EndTime, ReservedRoom = AvailableRoom, AssociatedBirth = B }; Context.Reservations.Add(reservation); Context.SaveChanges(); return(true); } }
public static bool AddClinicians(BirthClinicDbContext Context, Birth Birth, out List <Clinician> Clinicians) { Random Rand = new(); IEnumerable <Clinician> FoundClinicians; Clinicians = new(); // Finds available Doctor and inserts one random available Doctor into output List. FoundClinicians = FindAvailableClinicians(Context.Clinicians, Birth, ClinicianType.DOCTOR); if (!FoundClinicians.Any()) { Console.WriteLine("We are out of Doctors"); return(false); } Clinicians.Add(FoundClinicians.ElementAt(Rand.Next(0, FoundClinicians.Count()))); // Finds available Midwife and inserts one random available Midwife into output List. FoundClinicians = FindAvailableClinicians(Context.Clinicians, Birth, ClinicianType.MIDWIFE); if (!FoundClinicians.Any()) { Console.WriteLine("We are out of Midwives"); return(false); } Clinicians.Add(FoundClinicians.ElementAt(Rand.Next(0, FoundClinicians.Count()))); // Finds available Nurse and inserts two random available Nurse into output List. FoundClinicians = FindAvailableClinicians(Context.Clinicians, Birth, ClinicianType.NURSE); if (FoundClinicians.Count() < 2) { Console.WriteLine("We are out of Nurses"); return(false); } Clinicians.Add(FoundClinicians.ElementAt(0)); Clinicians.Add(FoundClinicians.ElementAt(1)); // Finds available Assistant and inserts two random available Assistant into output List. FoundClinicians = FindAvailableClinicians(Context.Clinicians, Birth, ClinicianType.HEALTH_ASSISTANT); if (!FoundClinicians.Any()) { Console.WriteLine("We are out of Health Assistants"); return(false); } Clinicians.Add(FoundClinicians.ElementAt(Rand.Next(0, FoundClinicians.Count()))); // Finds available Secretary and inserts two random available Secretary into output List. FoundClinicians = FindAvailableClinicians(Context.Clinicians, Birth, ClinicianType.SECRETARY); if (!FoundClinicians.Any()) { Console.WriteLine("We are out of Secretary"); return(false); } Clinicians.Add(FoundClinicians.ElementAt(Rand.Next(0, FoundClinicians.Count()))); return(true); }
public static void PrintAvailableCliniciansInNext5Days(BirthClinicDbContext context) { DateTime FilterDate = DateTime.Now.AddDays(5); /*rInner.CurrentReservations.OrderBy(p => p.StartTime)*/ var filterTime = DateTime.Now.AddDays(5); //Makes a tuple of room ID and a list of the room's reservations in the next 5 days. Also converts to list as no more processing can be done server-side. var Doctors = context.Clinicians.Where(r => r.Role == ClinicianType.DOCTOR).ToList(); var DoctorsBirths = Doctors.Select(d => d.AssignedBirths.OrderBy(b => b.BirthDate).ToList()).ToList(); var DoctorsWithBirths = Doctors.Zip(DoctorsBirths).ToList(); var Assistants = context.Clinicians.Where(r => r.Role == ClinicianType.HEALTH_ASSISTANT).ToList(); var AssistantsBirths = Assistants.Select(d => d.AssignedBirths.OrderBy(b => b.BirthDate).ToList()).ToList(); var AssistantsWithBirths = Assistants.Zip(AssistantsBirths).ToList(); var Nurses = context.Clinicians.Where(r => r.Role == ClinicianType.NURSE).ToList(); var NursesBirths = Nurses.Select(d => d.AssignedBirths.OrderBy(b => b.BirthDate).ToList()).ToList(); var NursesWithBirths = Nurses.Zip(NursesBirths).ToList(); var Midwives = context.Clinicians.Where(r => r.Role == ClinicianType.MIDWIFE).ToList(); var MidwivesBirths = Midwives.Select(d => d.AssignedBirths.OrderBy(b => b.BirthDate).ToList()).ToList(); var MidwivesWithBirths = Midwives.Zip(MidwivesBirths).ToList(); DoctorsWithBirths.ForEach(tuple => { var slots = DateTimeUtils.FindAvailableClinicianTimeSlots(tuple.First, DateTime.Now, DateTime.Now.AddDays(5), TimeSpan.FromHours(12), 4, tuple.Second.ToList()); if (slots.Count > 0) { Console.WriteLine("Doctor " + tuple.First.FirstName + " " + tuple.First.LastName + " is available from the following times"); Console.WriteLine(StringUtils.DateTimeListToCommaSeparatedString(slots) + "\n"); } }); AssistantsWithBirths.ForEach(tuple => { var slots = DateTimeUtils.FindAvailableClinicianTimeSlots(tuple.First, DateTime.Now, DateTime.Now.AddDays(5), TimeSpan.FromHours(4), 2, tuple.Second.ToList()); if (slots.Count > 0) { Console.WriteLine("Assistant " + tuple.First.FirstName + " " + tuple.First.LastName + " is available from the following times"); Console.WriteLine(StringUtils.DateTimeListToCommaSeparatedString(slots) + "\n"); } }); NursesWithBirths.ForEach(tuple => { var slots = DateTimeUtils.FindAvailableClinicianTimeSlots(tuple.First, DateTime.Now, DateTime.Now.AddDays(5), TimeSpan.FromHours(136), 9, tuple.Second.ToList()); if (slots.Count > 0) { Console.WriteLine("Nurse " + tuple.First.FirstName + " " + tuple.First.LastName + " is available from the following times"); Console.WriteLine(StringUtils.DateTimeListToCommaSeparatedString(slots) + "\n"); } }); MidwivesWithBirths.ForEach(tuple => { var slots = DateTimeUtils.FindAvailableClinicianTimeSlots(tuple.First, DateTime.Now, DateTime.Now.AddDays(5), TimeSpan.FromHours(132), 8, tuple.Second.ToList()); if (slots.Count > 0) { Console.WriteLine("Midwife " + tuple.First.FirstName + " " + tuple.First.LastName + " is available from the following times"); Console.WriteLine(StringUtils.DateTimeListToCommaSeparatedString(slots) + "\n"); } }); }