private List <Examination> GetShiftedAppointmentForEmergency(BasicAppointmentSearchDTO parameters, Examination examination)
        {
            DateTime   startDateTime          = parameters.LatestDateTime;
            DateTime   endDateTime            = new DateTime(startDateTime.Year, startDateTime.Month, startDateTime.Day, 17, 0, 0);
            List <int> requiredEquipmentTypes = GetRequiredEquipmentForExamination(examination);

            for (int i = 1; i <= 13; i++)
            {
                parameters = new BasicAppointmentSearchDTO(
                    examination.IdPatientCard,
                    examination.DoctorJmbg,
                    requiredEquipmentTypes,
                    startDateTime,
                    endDateTime
                    );

                List <Examination> potentialAppointments = (List <Examination>)BasicSearch(parameters);
                if (potentialAppointments.Count != 0)
                {
                    return(potentialAppointments);
                }

                startDateTime = new DateTime(startDateTime.Year, startDateTime.Month, startDateTime.Day, 7, 0, 0);
                startDateTime = startDateTime.AddDays(1);
                endDateTime   = endDateTime.AddDays(1);
            }
            return(null);
        }
        private BasicAppointmentSearchDTO SetupDates(BasicAppointmentSearchDTO initialParameters)
        {
            DateTime earliestDateTime      = initialParameters.EarliestDateTime.AddDays(-1);
            DateTime fixedEarliestDateTime = GetFixedEarliestDateTime(earliestDateTime);
            DateTime latestDateTime        = initialParameters.LatestDateTime.AddDays(1);

            initialParameters.EarliestDateTime = fixedEarliestDateTime;
            initialParameters.LatestDateTime   = latestDateTime;

            return(initialParameters);
        }
        public void SetNewDateTimesForEmergency(BasicAppointmentSearchDTO parameters)
        {
            DateTime startTime = parameters.EarliestDateTime;
            int      minutes   = startTime.Minute % _appointmentDuration.Minutes;
            int      addition  = 0;

            if (minutes != 0)
            {
                addition = _appointmentDuration.Minutes - minutes;
            }
            parameters.EarliestDateTime = startTime.AddMinutes(addition);
            parameters.LatestDateTime   = parameters.EarliestDateTime.AddHours(2);
        }
        public ICollection <Examination> BasicSearch(BasicAppointmentSearchDTO parameters)
        {
            ICollection <Examination> actuallyAvailableAppointments = new List <Examination>();

            foreach (Examination appointment in GetPotentiallyAvailableAppointments(parameters))
            {
                if (IsAvailable(appointment))
                {
                    actuallyAvailableAppointments.Add(appointment);
                }
            }

            return(actuallyAvailableAppointments);
        }
        private ICollection <Examination> GetPotentiallyAvailableAppointments(BasicAppointmentSearchDTO parameters)
        {
            ICollection <Examination> potentiallyAvailableAppointments = new List <Examination>();

            foreach (Room room in GenerateRooms(TypeOfUsage.CONSULTING_ROOM, parameters.RequiredEquipmentTypes))
            {
                foreach (DateTime dateTime in GenerateStartTimes(parameters.EarliestDateTime, parameters.LatestDateTime))
                {
                    potentiallyAvailableAppointments.Add(new Examination(dateTime, parameters.DoctorJmbg, room.Id, parameters.PatientCardId));
                }
            }

            return(potentiallyAvailableAppointments);
        }
        private ICollection <Examination> RelaxDates(AppointmentSearchWithPrioritiesDTO parameters)
        {
            for (int i = 0; i < PRIORITY_DATE_INTERVAL; i++)
            {
                BasicAppointmentSearchDTO initialParameters = SetupDates(parameters.InitialParameters);

                ICollection <Examination> freeAppointments = BasicSearch(initialParameters);

                if (freeAppointments.Count != 0)
                {
                    return(freeAppointments);
                }
            }

            return(new List <Examination>());
        }
 private List <Examination> GetUnavailableAppointments(BasicAppointmentSearchDTO parameters)
 {
     return((List <Examination>)_examinationRepository.GetExaminationsForPeriod(parameters.EarliestDateTime, parameters.LatestDateTime));
 }