Esempio n. 1
0
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
Esempio n. 2
0
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
Esempio n. 3
0
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
Esempio n. 4
0
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
Esempio n. 5
0
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
Esempio n. 6
0
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
Esempio n. 7
0
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)
Esempio n. 8
0
def createTimeSlots(permit_number, date, clinic_id):
    DoctorScheduleTDG.create(permit_number=permit_number, timeSlots=SLOTS, date=date, clinic_id=clinic_id)
    return True