def getAllAvailableDoctorPermitsByDateAndClinic(date, clinic_id): all_doctors_permit_numbers = getAllDoctorPermits() available_doctors_permit_numbers = [] for permit in all_doctors_permit_numbers: doctor_availability = DoctorScheduleTDG.find(permit_number=permit, date=date, clinic_id=clinic_id) if doctor_availability is not None: available_doctors_permit_numbers.append(doctor_availability.permit_number) return available_doctors_permit_numbers
def getAvailability(permit_number, date): from application.services.ClinicService import getAllClinics schedule_timeslots = getTimeSlotsByDateAndDoctor(permit_number, date) clinics = getAllClinics() if schedule_timeslots is None: schedule_timeslots = Schedule(SLOTS) clinic_array = [] for clinic in clinics: clinic_array.append(str(clinic['id']) + ";" + str(clinic['name'])) else: day_schedule = DoctorScheduleTDG.find(permit_number, date) clinic_array = [] for clinic in clinics: if clinic['id'] == day_schedule.clinic_id: clinic_array.insert(0, str(clinic['id']) + ";" + str(clinic['name'])) else: clinic_array.append(str(clinic['id']) + ";" + str(clinic['name'])) return_dict = {'timeslot': schedule_timeslots.toString().split(','), 'clinics': clinic_array} return return_dict
def isDoctorAtClinic(permit_number, date, clinic_id): schedule = DoctorScheduleTDG.find(permit_number=permit_number, date=date, clinic_id=clinic_id) return schedule is not None
def getTimeSlotsByDateDoctorAndClinic(permit_number, date, clinic_id): doctorSchedule = DoctorScheduleTDG.find(permit_number=permit_number, date=date, clinic_id=clinic_id) if doctorSchedule is not None: return Schedule(doctorSchedule.timeSlots) else: return None
def setAvailability(permit_number, date, timeslots, clinic_id): schedule_timeslots = getTimeSlotsByDateAndDoctor(permit_number, date) return_value = {} if schedule_timeslots is None: createTimeSlots(permit_number, date, clinic_id) schedule_timeslots = getTimeSlotsByDateAndDoctor(permit_number, date) else: doctor_appointment = getDoctorAppointments(permit_number) # verify that if the doctor wants to change clinic for that day he doesn't have appointment already scheduled day_schedule = DoctorScheduleTDG.find(permit_number, date) if day_schedule.clinic_id != clinic_id and len(doctor_appointment) != 0: return_value['success'] = False return_value['message'] = "Availability Not Modified, you already have appointments in another clinic " \ "that day and cannot modify your clinic." return return_value # verify that if a doctor wants to make himself available during an already made appointment he can't new_schedule = createFromBooleanArray(timeslots) for appointment in doctor_appointment: if appointment['date'] == date: for index in range(0, appointment['length'], 20): minutes = int(appointment['time'][len(appointment['time']) - 2:]) + index hours = int(appointment['time'][:len(appointment['time']) - 3]) if minutes >= 60: hours += 1 minutes -= 60 if minutes == 0: minutes = '00' else: minutes = str(minutes) hours = str(hours) if new_schedule.getTimeslots()[new_schedule.indexForTime(hours + ':' + minutes)].isAvailable(): return_value['success'] = False return_value['message'] = "Availability Not Modified, one or more timeslot to be made " \ "available was in conflict with an existing appointment." return return_value doctors_schedule = DoctorScheduleTDG.getAllSchedulesByDateExceptDoctor(date, permit_number, clinic_id) timeslot_iterator = schedule_timeslots.getIterator() new_timeslot_iterator = createFromBooleanArray(timeslots).getIterator() i = 0 while new_timeslot_iterator.hasNext() and timeslot_iterator.hasNext(): new_value = new_timeslot_iterator.next() old_value = timeslot_iterator.next() if new_value.isAvailable(): # if doctor wants to be available check that 7 doctors are not available at that time number_of_doctor = 0 for schedule in doctors_schedule: schedule = Schedule(schedule.timeSlots) if schedule.getTimeslots()[i].isAvailable(): number_of_doctor = number_of_doctor + 1 if number_of_doctor >= 7: return_value['success'] = False return_value['message'] = "Availability Not Modified, conflict in schedule with 7 doctors " \ "or more." return return_value old_value.setAvailable(True) else: old_value.setAvailable(False) i = i+1 DoctorScheduleTDG.update(permit_number, date, schedule_timeslots.toString(), clinic_id) return_value['success'] = True return_value['message'] = "Availability Modified." return return_value
def getTimeSlotsByDateAndDoctor(permit_number, date): doctorSchedule = DoctorScheduleTDG.find(permit_number=permit_number, date=date) if doctorSchedule is not None: return Schedule(doctorSchedule.timeSlots) else: return None
def makeTimeSlotUnavailable(permit_number, date, time): timeSlots = getTimeSlotsByDateAndDoctor(permit_number, date) index = timeSlots.indexForTime(time) timeSlots.getTimeslots()[index].setAvailable(False) timeSlots = timeSlots.toString() # put back into db as a string DoctorScheduleTDG.update(permit_number=permit_number, date=date, timeSlots=timeSlots)
def createTimeSlots(permit_number, date, clinic_id): DoctorScheduleTDG.create(permit_number=permit_number, timeSlots=SLOTS, date=date, clinic_id=clinic_id) return True