Beispiel #1
0
        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();
            }
        }
Beispiel #2
0
        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");
                }
            });
        }
Beispiel #4
0
        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);
            }
        }
Beispiel #5
0
        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();
        }
Beispiel #6
0
        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();
Beispiel #7
0
        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);
            }
        }
Beispiel #8
0
        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");
                }
            });
        }