def test_deletes_appointments_with_unscheduled(self): """Asserts manager method can delete appointments.""" self.helper.consent_and_put_on_schedule() appointments = Appointment.objects.filter( subject_identifier=self.subject_identifier) self.assertEqual(appointments.count(), 4) SubjectVisit.objects.create( appointment=appointments[0], report_datetime=appointments[0].appt_datetime, reason=SCHEDULED, ) appointment = appointments[0] appointment.appt_status = INCOMPLETE_APPT appointment.save() self.helper.add_unscheduled_appointment(appointment) self.assertEqual(appointments.count(), 5) visit_schedule = site_visit_schedules.get_visit_schedule( visit_schedule_name=appointments[0].visit_schedule_name) schedule = visit_schedule.schedules.get(appointments[0].schedule_name) # this calls the manager method "delete_for_subject_after_date" schedule.take_off_schedule( subject_identifier=self.subject_identifier, offschedule_datetime=appointments[0].appt_datetime, ) self.assertEqual( Appointment.objects.filter( subject_identifier=self.subject_identifier).count(), 1, )
def next_appointment(self, **kwargs): """Returns the next appointment relative to the criteria or None if there is no next. For visit_code_sequence=0. Next is the next visit in a schedule, so schedule_name is required. For example: next_appointment = (Appointment.objects. first_appointment(appointment=appointment)) or: next_appointment = Appointment.objects.first_appointment( visit_code=visit_code, appointment=appointment) or: next_appointment = Appointment.objects.first_appointment( visit_code=visit_code, subject_identifier=subject_identifier, visit_schedule_name=visit_schedule_name, schedule_name=schedule_name) """ options = self.get_query_options(**kwargs) schedule = site_visit_schedules.get_visit_schedule( options.get("visit_schedule_name")).schedules.get( options.get("schedule_name")) options.update( visit_code=self.get_visit_code("next", schedule, **kwargs)) try: next_appointment = self.filter(**options).order_by( "timepoint", "visit_code_sequence")[0] except IndexError: next_appointment = None return next_appointment
def test_deletes_appointments(self): """Asserts manager method can delete appointments.""" self.helper.consent_and_put_on_schedule() appointments = Appointment.objects.filter( subject_identifier=self.subject_identifier) self.assertEqual(appointments.count(), 4) SubjectVisit.objects.create( appointment=appointments[0], report_datetime=appointments[0].appt_datetime, reason=SCHEDULED, ) visit_schedule = site_visit_schedules.get_visit_schedule( visit_schedule_name=appointments[0].visit_schedule_name) schedule = visit_schedule.schedules.get(appointments[0].schedule_name) # this calls the manager method "delete_for_subject_after_date" schedule.offschedule_model_cls.objects.create( subject_identifier=self.subject_identifier, offschedule_datetime=appointments[0].appt_datetime, ) self.assertEqual( Appointment.objects.filter( subject_identifier=self.subject_identifier).count(), 1, )
def __init__(self): visit_schedule = site_visit_schedules.get_visit_schedule( "visit_schedule") for schedule in tqdm(visit_schedule.schedules.values()): for visit_code, visit in schedule.visits.items(): for appointment in self.appointments_for(visit_code): try: subject_visit = SubjectVisit.objects.get( appointment=appointment) except ObjectDoesNotExist: pass else: subject_visit.save() for model_cls in tqdm([ ClinicalReviewBaseline, ClinicalReview, Medications ]): try: obj = model_cls.objects.get( subject_visit=subject_visit) except ObjectDoesNotExist: pass else: obj.update_reference_on_save() obj.metadata_update() obj.run_metadata_rules_for_crf()
def __init__(self, visit=None, **kwargs): """param visit is a visit model instance but the instance attr is not. """ self.crf_creator = self.crf_creator_cls(visit=visit, **kwargs) self.requisition_creator = self.requisition_creator_cls( visit=visit, **kwargs) self.visit_code_sequence = visit.visit_code_sequence visit_schedule = site_visit_schedules.get_visit_schedule( visit.visit_schedule_name) schedule = visit_schedule.schedules.get(visit.schedule_name) self.visit = schedule.visits.get(visit.visit_code)
def dehydrate_offstudy(self, obj): visit_schedule = site_visit_schedules.get_visit_schedule( visit_schedule_name=obj.visit_schedule_name) schedule = visit_schedule.schedules.get(obj.schedule_name) try: off_schedule_obj = schedule.offschedule_model_cls.objects.get( subject_identifier=obj.subject_identifier, report_datetime__lte=obj.appt_datetime, ) except ObjectDoesNotExist: return None return off_schedule_obj.offschedule_datetime
def __init__( self, update_keyed: bool, visit_model_instance: VisitModel, ) -> None: self.visit_model_instance: VisitModel = visit_model_instance self.update_keyed = update_keyed self.visit_code_sequence = self.visit_model_instance.visit_code_sequence self.visit = (site_visit_schedules.get_visit_schedule( self.visit_model_instance.visit_schedule_name).schedules.get( self.visit_model_instance.schedule_name).visits.get( self.visit_model_instance.visit_code))
def previous_appointment(self, **kwargs): """Returns the previous appointment relative to the criteria or None if there is no previous. For visit_code_sequence=0. """ options = self.get_query_options(**kwargs) schedule = site_visit_schedules.get_visit_schedule( options.get("visit_schedule_name")).schedules.get( options.get("schedule_name")) options.update( visit_code=self.get_visit_code("previous", schedule, **kwargs)) try: previous_appointment = (self.filter(**options).order_by( "timepoint", "visit_code_sequence").reverse()[0]) except IndexError: previous_appointment = None return previous_appointment