Esempio n. 1
0
def subject_consent_on_post_save(sender, instance, raw, created, **kwargs):
    """Creates an onschedule instance for this consented subject, if
    it does not exist.
    """
    if not raw:
        if not created:
            _, schedule = site_visit_schedules.get_by_onschedule_model(
                "inte_prn.onschedule")
            schedule.refresh_schedule(
                subject_identifier=instance.subject_identifier)
        else:
            subject_screening = SubjectScreening.objects.get(
                screening_identifier=instance.screening_identifier)
            subject_screening.subject_identifier = instance.subject_identifier
            subject_screening.consented = True
            subject_screening.save_base(
                update_fields=["subject_identifier", "consented"])

            # randomize
            # TODO: should get randomizer name "default" from model or Consent object
            site_randomizers.randomize(
                "default",
                subject_identifier=instance.subject_identifier,
                report_datetime=instance.consent_datetime,
                site=instance.site,
                user=instance.user_created,
            )

            # put subject on schedule
            _, schedule = site_visit_schedules.get_by_onschedule_model(
                "inte_prn.onschedule")
            schedule.put_on_schedule(
                subject_identifier=instance.subject_identifier,
                onschedule_datetime=instance.consent_datetime,
            )
Esempio n. 2
0
def subject_consent_on_post_save(sender, instance, raw, created, **kwargs):
    """Creates an onschedule instance for this consented subject, if
    it does not exist.
    """
    if not raw:
        if not created:
            _, schedule = site_visit_schedules.get_by_onschedule_model(
                'ambition_prn.onschedule')
            schedule.refresh_schedule(
                subject_identifier=instance.subject_identifier)
        else:
            subject_screening = SubjectScreening.objects.get(
                screening_identifier=instance.screening_identifier)
            subject_screening.subject_identifier = instance.subject_identifier
            subject_screening.consented = True
            subject_screening.save_base(
                update_fields=['subject_identifier', 'consented'])

            # randomize
            randomizer = Randomizer(
                subject_identifier=instance.subject_identifier,
                report_datetime=instance.consent_datetime,
                site=instance.site,
                user=instance.user_created)

            # put subject on schedule
            _, schedule = site_visit_schedules.get_by_onschedule_model(
                'ambition_prn.onschedule')
            schedule.put_on_schedule(
                subject_identifier=instance.subject_identifier,
                onschedule_datetime=instance.consent_datetime)

            # create prescription
            prescription_model_cls = django_apps.get_model(
                'edc_pharmacy.prescription')
            prescription_model_cls.objects.create(
                subject_identifier=randomizer.model_obj.subject_identifier,
                rando_sid=randomizer.model_obj.sid,
                rando_arm=randomizer.model_obj.drug_assignment)

        # create / delete action for reconsent
        if instance.completed_by_next_of_kin == YES:
            try:
                create_action_item(
                    action_cls=ReconsentAction,
                    subject_identifier=instance.subject_identifier)
            except SingletonActionItemError:
                pass
        else:
            try:
                delete_action_item(
                    action_cls=ReconsentAction,
                    subject_identifier=instance.subject_identifier)
            except ActionItemDeleteError:
                pass
Esempio n. 3
0
def subject_consent_on_post_save(sender, instance, raw, created, **kwargs):
    """Creates an onschedule instance for this consented subject, if
    it does not exist.
    """
    if not raw:
        if not created:
            _, schedule = site_visit_schedules.get_by_onschedule_model(
                "ambition_prn.onschedule"
            )
            schedule.refresh_schedule(subject_identifier=instance.subject_identifier)
        else:
            subject_screening = SubjectScreening.objects.get(
                screening_identifier=instance.screening_identifier
            )
            subject_screening.subject_identifier = instance.subject_identifier
            subject_screening.consented = True
            subject_screening.save_base(
                update_fields=["subject_identifier", "consented"]
            )

            # randomize
            Randomizer = site_randomizers.get("ambition")
            Randomizer(
                subject_identifier=instance.subject_identifier,
                report_datetime=instance.consent_datetime,
                site=instance.site,
                user=instance.user_created,
            )

            # put subject on schedule
            _, schedule = site_visit_schedules.get_by_onschedule_model(
                "ambition_prn.onschedule"
            )
            schedule.put_on_schedule(
                subject_identifier=instance.subject_identifier,
                onschedule_datetime=instance.consent_datetime,
            )

        # create / delete action for reconsent
        if instance.completed_by_next_of_kin == YES:
            ReconsentAction(subject_identifier=instance.subject_identifier)
        else:
            try:
                delete_action_item(
                    action_cls=ReconsentAction,
                    subject_identifier=instance.subject_identifier,
                )
            except ActionItemDeleteError:
                pass
    def setUp(self):
        self.panel_one = Panel.objects.create(name="one")

        site_visit_schedules._registry = {}
        site_visit_schedules.loaded = False
        site_visit_schedules.register(visit_schedule)

        register_to_site_reference_configs()
        site_reference_configs.register_from_visit_schedule(
            visit_models={
                "edc_appointment.appointment": "edc_metadata.subjectvisit"
            })

        self.subject_identifier = "1111111"
        subject_consent = SubjectConsent.objects.create(
            subject_identifier=self.subject_identifier,
            consent_datetime=get_utcnow())
        _, self.schedule = site_visit_schedules.get_by_onschedule_model(
            "edc_metadata.onschedule")
        self.schedule.put_on_schedule(
            subject_identifier=self.subject_identifier,
            onschedule_datetime=subject_consent.consent_datetime,
        )
        self.appointment = Appointment.objects.get(
            subject_identifier=self.subject_identifier,
            visit_code=self.schedule.visits.first.code,
        )
        self.subject_visit = SubjectVisit.objects.create(
            appointment=self.appointment,
            subject_identifier=self.subject_identifier,
            reason=SCHEDULED,
        )
Esempio n. 5
0
    def take_off_schedule(self):
        on_schedule = django_apps.get_model(
            'potlako_subject.onschedule')

        _, schedule = site_visit_schedules.get_by_onschedule_model(
            onschedule_model=on_schedule._meta.label_lower)
        schedule.take_off_schedule(offschedule_model_obj=self)
    def setUp(self):
        import_holidays()
        register_to_site_reference_configs()
        for name in ['one', 'two', 'three', 'four', 'five', 'six']:
            Panel.objects.create(name=name)

        site_visit_schedules._registry = {}
        site_visit_schedules.loaded = False
        site_visit_schedules.register(visit_schedule)
        site_reference_configs.register_from_visit_schedule(
            visit_models={
                'edc_appointment.appointment': 'edc_metadata.subjectvisit'})
        self.subject_identifier = '1111111'
        self.assertEqual(CrfMetadata.objects.all().count(), 0)
        self.assertEqual(RequisitionMetadata.objects.all().count(), 0)
        subject_consent = SubjectConsent.objects.create(
            subject_identifier=self.subject_identifier,
            consent_datetime=get_utcnow())
        _, self.schedule = site_visit_schedules.get_by_onschedule_model(
            'edc_metadata.onschedule')
        self.schedule.put_on_schedule(
            subject_identifier=self.subject_identifier,
            onschedule_datetime=subject_consent.consent_datetime)
        self.appointment = Appointment.objects.get(
            subject_identifier=self.subject_identifier,
            visit_code=self.schedule.visits.first.code)
        self.subject_visit = SubjectVisit.objects.create(
            appointment=self.appointment,
            subject_identifier=self.subject_identifier,
            reason=SCHEDULED)
Esempio n. 7
0
def subject_consent_on_post_delete(sender, instance, using, **kwargs):
    """Updates/Resets subject screening.
    """
    # don't allow if subject visits exist. This should be caught
    # in the ModelAdmin delete view
    if SubjectVisit.objects.filter(
        subject_identifier=instance.subject_identifier
    ).exists():
        raise ValidationError("Unable to delete consent. Visit data exists.")

    _, schedule = site_visit_schedules.get_by_onschedule_model(
        "ambition_prn.onschedule"
    )
    schedule.take_off_schedule(
        subject_identifier=instance.subject_identifier,
        offschedule_datetime=instance.consent_datetime,
    )

    # update subject screening
    subject_screening = SubjectScreening.objects.get(
        screening_identifier=instance.screening_identifier
    )
    subject_screening.consented = False
    subject_screening.subject_identifier = subject_screening.subject_screening_as_pk
    subject_screening.save()
Esempio n. 8
0
def study_termination_conclusion_on_post_save(sender, instance, raw, created, **kwargs):
    """Enroll to W10 if willing_to_complete_10w == YES.
    """
    if not raw:
        try:
            willing_to_complete_10w = instance.willing_to_complete_10w
        except AttributeError:
            pass
        else:
            _, schedule = site_visit_schedules.get_by_onschedule_model(
                "ambition_prn.onschedulew10"
            )
            registered_subject = RegisteredSubject.objects.get(
                subject_identifier=instance.subject_identifier
            )
            if willing_to_complete_10w == YES:
                schedule.put_on_schedule(
                    subject_identifier=instance.subject_identifier,
                    onschedule_datetime=registered_subject.registration_datetime,
                )
            elif willing_to_complete_10w == NO:
                try:
                    schedule.take_off_schedule(
                        subject_identifier=instance.subject_identifier,
                        offschedule_datetime=registered_subject.registration_datetime,
                    )
                except NotOnScheduleError:
                    pass
 def setUp(self):
     import_holidays()
     self.panel_one = Panel.objects.create(name='one')
     register_to_site_reference_configs()
     site_visit_schedules._registry = {}
     site_visit_schedules.loaded = False
     site_visit_schedules.register(visit_schedule)
     site_reference_configs.register_from_visit_schedule(
         visit_models={
             'edc_appointment.appointment': 'edc_metadata.subjectvisit'})
     self.subject_identifier = '1111111'
     subject_consent = SubjectConsent.objects.create(
         subject_identifier=self.subject_identifier,
         consent_datetime=get_utcnow())
     _, self.schedule = site_visit_schedules.get_by_onschedule_model(
         'edc_metadata.onschedule')
     self.schedule.put_on_schedule(
         subject_identifier=self.subject_identifier,
         onschedule_datetime=subject_consent.consent_datetime)
     self.appointment = Appointment.objects.get(
         subject_identifier=self.subject_identifier,
         visit_code=self.schedule.visits.first.code)
     self.subject_visit = SubjectVisit.objects.create(
         appointment=self.appointment,
         subject_identifier=self.subject_identifier,
         reason=SCHEDULED)
Esempio n. 10
0
def subject_consent_on_post_save(sender, instance, raw, created, **kwargs):
    """Creates an onschedule instance for this consented subject, if
    it does not exist.
    """
    if not raw:
        if not created:
            _, schedule = site_visit_schedules.get_by_onschedule_model(
                get_onschedule_model_name(instance))
            try:
                schedule.refresh_schedule(
                    subject_identifier=instance.subject_identifier)
            except ObjectDoesNotExist as e:
                raise InteSubjectConsentError(
                    f"Clinic type cannot be changed. Got `{instance.clinic_type}`. ({e})"
                )
        else:
            subject_screening = SubjectScreening.objects.get(
                screening_identifier=instance.screening_identifier)

            if subject_screening.clinic_type != instance.clinic_type:
                raise InteSubjectConsentError(
                    f"Clinic type reported on screening does not match consent."
                    f"Expected {subject_screening.clinic_type}. Got {instance.clinic_type}"
                )
            subject_screening.subject_identifier = instance.subject_identifier
            subject_screening.consented = True
            subject_screening.save_base(
                update_fields=["subject_identifier", "consented"])

            # randomize
            # TODO: should get randomizer name "default" from model or Consent object
            site_randomizers.randomize(
                "default",
                subject_identifier=instance.subject_identifier,
                report_datetime=instance.consent_datetime,
                site=instance.site,
                user=instance.user_created,
            )

            # put subject on primary schedule
            _, schedule = site_visit_schedules.get_by_onschedule_model(
                get_onschedule_model_name(instance))
            schedule.put_on_schedule(
                subject_identifier=instance.subject_identifier,
                onschedule_datetime=instance.consent_datetime,
            )
Esempio n. 11
0
def caregiver_child_consent_on_post_save(sender, instance, raw, created,
                                         **kwargs):
    """Creates an onschedule instance for this enrolled subject, if
    it does not exist.
    """
    if not raw:
        if not created:
            _, schedule = site_visit_schedules.get_by_onschedule_model(
                'pre_flourish.onschedulepreflourish')
            schedule.refresh_schedule(
                subject_identifier=instance.subject_identifier)
        else:
            # put subject on schedule
            _, schedule = site_visit_schedules.get_by_onschedule_model(
                'pre_flourish.onschedulepreflourish')
            schedule.put_on_schedule(
                subject_identifier=instance.subject_identifier,
                onschedule_datetime=instance.consent_datetime)
    def setUp(self):
        import_holidays()
        site_visit_schedules._registry = {}
        site_visit_schedules.loaded = False
        site_visit_schedules.register(visit_schedule)

        # note crfs in visit schedule are all set to REQUIRED by default.
        _, self.schedule = site_visit_schedules.get_by_onschedule_model(
            'edc_metadata.onschedule')
 def consent_and_put_on_schedule(self, subject_identifier=None):
     subject_identifier = subject_identifier or self.subject_identifier
     subject_consent = SubjectConsent.objects.create(
         subject_identifier=subject_identifier,
         consent_datetime=get_utcnow())
     _, schedule = site_visit_schedules.get_by_onschedule_model(
         'edc_visit_tracking.onscheduleone')
     schedule.put_on_schedule(
         subject_identifier=subject_consent.subject_identifier,
         onschedule_datetime=subject_consent.consent_datetime)
Esempio n. 14
0
 def test_resave(self):
     """Asserts returns the correct instances for the schedule."""
     visit_schedule, schedule = site_visit_schedules.get_by_onschedule_model(
         "visit_schedule_app.onscheduletwo")
     subject_schedule = SubjectSchedule(visit_schedule=visit_schedule,
                                        schedule=schedule)
     subject_schedule.put_on_schedule(
         subject_identifier=self.subject_identifier,
         onschedule_datetime=get_utcnow())
     subject_schedule.resave(subject_identifier=self.subject_identifier)
Esempio n. 15
0
 def test_cannot_put_on_schedule_if_visit_schedule_not_consented(self):
     onschedule_datetime = get_utcnow() - relativedelta(years=4)
     _, schedule = site_visit_schedules.get_by_onschedule_model(
         "visit_schedule_app.onschedule")
     SubjectConsent.objects.all().delete()
     self.assertRaises(
         NotConsentedError,
         schedule.put_on_schedule,
         subject_identifier=self.subject_identifier,
         onschedule_datetime=onschedule_datetime,
     )
Esempio n. 16
0
 def take_off_schedule(self):
     on_schedule = OnSchedule
     try:
         on_schedule_obj = on_schedule.objects.get(
             subject_identifier=self.subject_identifier)
     except on_schedule.DoesNotExist:
         pass
     else:
         _, schedule = site_visit_schedules.get_by_onschedule_model(
             onschedule_model=on_schedule._meta.label_lower)
         schedule.take_off_schedule(offschedule_model_obj=self)
Esempio n. 17
0
    def setUp(self):
        site_visit_schedules._registry = {}
        site_visit_schedules.loaded = False
        site_visit_schedules.register(visit_schedule)

        register_to_site_reference_configs()

        # note crfs in visit schedule are all set to REQUIRED by default.
        _, self.schedule = site_visit_schedules.get_by_onschedule_model(
            "edc_metadata.onschedule"
        )
Esempio n. 18
0
 def setUp(self):
     site_visit_schedules._registry = {}
     site_visit_schedules.loaded = False
     site_visit_schedules.register(visit_schedule)
     register_to_site_reference_configs()
     site_reference_configs.register_from_visit_schedule(visit_models={
         "edc_appointment.appointment":
         "edc_metadata_rules.subjectvisit"
     })
     _, self.schedule = site_visit_schedules.get_by_onschedule_model(
         "edc_metadata_rules.onschedule")
Esempio n. 19
0
 def test_cannot_put_on_schedule_if_visit_schedule_not_registered_subject(
         self):
     onschedule_datetime = get_utcnow() - relativedelta(years=4)
     _, schedule = site_visit_schedules.get_by_onschedule_model(
         "visit_schedule_app.onschedule")
     RegisteredSubject.objects.all().delete()
     self.assertRaises(
         UnknownSubjectError,
         schedule.put_on_schedule,
         subject_identifier=self.subject_identifier,
         onschedule_datetime=onschedule_datetime,
     )
Esempio n. 20
0
    def setUp(self):
        self.user = User.objects.create_superuser("user_login",
                                                  "*****@*****.**", "pass")

        site_labs._registry = {}
        site_labs.loaded = False
        site_labs.register(lab_profile=lab_profile)

        register_to_site_reference_configs()
        site_visit_schedules._registry = {}
        site_visit_schedules.loaded = False
        site_visit_schedules.register(visit_schedule)
        site_reference_configs.register_from_visit_schedule(visit_models={
            "edc_appointment.appointment":
            "review_dashboard_app.subjectvisit"
        })

        self.subject_identifiers = ["101-40990028-3", "101-40990029-4"]

        for subject_identifier in self.subject_identifiers:
            subject_consent = SubjectConsent.objects.create(
                subject_identifier=subject_identifier,
                consent_datetime=get_utcnow(),
                identity=subject_identifier,
                confirm_identity=subject_identifier,
                dob=get_utcnow() - relativedelta(years=25),
            )

            for schedule in visit_schedule.schedules.values():
                for visit in schedule.visits.values():
                    appointment = Appointment.objects.create(
                        appt_datetime=get_utcnow(),
                        subject_identifier=subject_identifier,
                        visit_schedule_name="visit_schedule",
                        schedule_name="schedule",
                        timepoint=visit.timepoint,
                        visit_code=visit.code,
                        user_created="user_login",
                    )
                    SubjectVisit.objects.create(
                        appointment=appointment,
                        subject_identifier=subject_identifier,
                        reason=SCHEDULED,
                        user_created="user_login",
                    )
            # put subject on schedule
            _, schedule = site_visit_schedules.get_by_onschedule_model(
                "review_dashboard_app.onschedule")
            schedule.put_on_schedule(
                subject_identifier=subject_consent.subject_identifier,
                onschedule_datetime=subject_consent.consent_datetime,
            )
Esempio n. 21
0
 def get_offschedule_action_cls(self):
     """Returns the action class for the offschedule model.
     """
     action_cls = None
     for onschedule_model_obj in SubjectScheduleHistory.objects.onschedules(
             subject_identifier=self.subject_identifier,
             report_datetime=self.model_obj.report_datetime):
         _, schedule = site_visit_schedules.get_by_onschedule_model(
             onschedule_model=onschedule_model_obj._meta.label_lower)
         offschedule_model = schedule.offschedule_model
         action_cls = site_action_items.get_by_model(
             model=offschedule_model)
     return action_cls
Esempio n. 22
0
 def test_put_on_schedule(self):
     _, schedule = site_visit_schedules.get_by_onschedule_model(
         "visit_schedule_app.onschedule")
     self.assertRaises(
         ObjectDoesNotExist,
         OnSchedule.objects.get,
         subject_identifier=self.subject_identifier,
     )
     schedule.put_on_schedule(subject_identifier=self.subject_identifier,
                              onschedule_datetime=get_utcnow())
     try:
         OnSchedule.objects.get(subject_identifier=self.subject_identifier)
     except ObjectDoesNotExist:
         self.fail("ObjectDoesNotExist unexpectedly raised")
Esempio n. 23
0
 def consent_and_put_on_schedule(
     self,
     subject_identifier=None,
 ):
     subject_identifier = subject_identifier or self.subject_identifier
     subject_consent = self.subject_consent_model_cls.objects.create(
         subject_identifier=subject_identifier, consent_datetime=get_utcnow()
     )
     _, schedule = site_visit_schedules.get_by_onschedule_model(self.onschedule_model_name)
     schedule.put_on_schedule(
         subject_identifier=subject_consent.subject_identifier,
         onschedule_datetime=subject_consent.consent_datetime,
     )
     return subject_consent
    def setUp(self):
        site_visit_schedules._registry = {}
        site_visit_schedules.loaded = False
        site_visit_schedules.register(visit_schedule)

        site_reference_configs.register_from_visit_schedule(visit_models={
            "edc_appointment.appointment":
            "edc_metadata_rules.subjectvisit"
        })

        # note crfs in visit schedule are all set to REQUIRED by default.
        _, self.schedule = site_visit_schedules.get_by_onschedule_model(
            "edc_metadata_rules.onschedule")

        site_metadata_rules.registry = OrderedDict()
        site_metadata_rules.register(rule_group_cls=CrfRuleGroupGender)
Esempio n. 25
0
 def test_creates_appointments_starting_with_onschedule_datetime(self):
     """Will pass as long as this is not a holiday"""
     onschedule_datetime = datetime(2017,
                                    7,
                                    19,
                                    15,
                                    29,
                                    44,
                                    903192,
                                    tzinfo=tzutc())
     _, schedule = site_visit_schedules.get_by_onschedule_model(
         "visit_schedule_app.onschedule")
     schedule.put_on_schedule(
         subject_identifier=self.subject_identifier,
         onschedule_datetime=onschedule_datetime,
     )
     appointment = Appointment.objects.all().order_by(
         "appt_datetime").first()
     self.assertEqual(appointment.appt_datetime, onschedule_datetime)
 def setUp(self):
     self.panel_one = Panel.objects.create(name=panel_one.name)
     self.panel_two = Panel.objects.create(name=panel_two.name)
     self.panel_three = Panel.objects.create(name=panel_three.name)
     self.panel_four = Panel.objects.create(name=panel_four.name)
     self.panel_five = Panel.objects.create(name=panel_five.name)
     self.panel_six = Panel.objects.create(name=panel_six.name)
     self.panel_seven = Panel.objects.create(name=panel_seven.name)
     self.panel_eight = Panel.objects.create(name=panel_eight.name)
     site_visit_schedules._registry = {}
     site_visit_schedules.loaded = False
     site_visit_schedules.register(visit_schedule)
     site_reference_configs.register_from_visit_schedule(visit_models={
         "edc_appointment.appointment":
         "edc_metadata_rules.subjectvisit"
     })
     _, self.schedule = site_visit_schedules.get_by_onschedule_model(
         "edc_metadata_rules.onschedule")
     site_metadata_rules.registry = OrderedDict()
Esempio n. 27
0
 def test_multpile_consents(self):
     """Asserts does not raise if more than one consent
     for this subject
     """
     subject_identifier = "ABCDEF"
     SubjectConsent.objects.create(subject_identifier=subject_identifier,
                                   version="1")
     SubjectConsent.objects.create(subject_identifier=subject_identifier,
                                   version="2")
     visit_schedule, schedule = site_visit_schedules.get_by_onschedule_model(
         "visit_schedule_app.onscheduletwo")
     subject_schedule = SubjectSchedule(visit_schedule=visit_schedule,
                                        schedule=schedule)
     try:
         subject_schedule.put_on_schedule(
             subject_identifier=subject_identifier,
             onschedule_datetime=get_utcnow())
     except SubjectScheduleError:
         self.fail("SubjectScheduleError unexpectedly raised.")
Esempio n. 28
0
    def setUp(self):

        self.user = User.objects.create(username="******")

        for name in [
                "one", "two", "three", "four", "five", "six", "seven", "eight",
                "nine"
        ]:
            Panel.objects.create(name=name)

        site_visit_schedules._registry = {}
        site_visit_schedules.loaded = False
        site_visit_schedules.register(visit_schedule)

        register_to_site_reference_configs()
        site_reference_configs.register_from_visit_schedule(
            visit_models={
                "edc_appointment.appointment": "edc_metadata.subjectvisit"
            })

        self.subject_identifier = "1111111"
        self.assertEqual(CrfMetadata.objects.all().count(), 0)
        self.assertEqual(RequisitionMetadata.objects.all().count(), 0)

        subject_consent = SubjectConsent.objects.create(
            subject_identifier=self.subject_identifier,
            consent_datetime=get_utcnow())
        _, self.schedule = site_visit_schedules.get_by_onschedule_model(
            "edc_metadata.onschedule")
        self.schedule.put_on_schedule(
            subject_identifier=self.subject_identifier,
            onschedule_datetime=subject_consent.consent_datetime,
        )
        self.appointment = Appointment.objects.get(
            subject_identifier=self.subject_identifier,
            visit_code=self.schedule.visits.first.code,
        )
        self.subject_visit = SubjectVisit.objects.create(
            appointment=self.appointment,
            subject_identifier=self.subject_identifier,
            reason=SCHEDULED,
        )
Esempio n. 29
0
 def test_cannot_create_offschedule_before_last_visit(self):
     onschedule_datetime = get_utcnow() - relativedelta(years=4)
     _, schedule = site_visit_schedules.get_by_onschedule_model(
         "visit_schedule_app.onschedule")
     schedule.put_on_schedule(
         subject_identifier=self.subject_identifier,
         onschedule_datetime=onschedule_datetime,
     )
     appointments = Appointment.objects.all()
     SubjectVisit.objects.create(
         appointment=appointments[0],
         subject_identifier=self.subject_identifier,
         report_datetime=appointments[0].appt_datetime,
         reason=SCHEDULED,
     )
     self.assertRaises(
         InvalidOffscheduleDate,
         schedule.take_off_schedule,
         subject_identifier=self.subject_identifier,
         offschedule_datetime=appointments[0].appt_datetime -
         relativedelta(days=1),
     )
Esempio n. 30
0
 def test_onschedule_updates_history(self):
     """Asserts returns the correct instances for the schedule."""
     for onschedule_model, schedule_name in [
         ("visit_schedule_app.onscheduletwo", "schedule_two"),
         ("visit_schedule_app.onschedulefour", "schedule_four"),
     ]:
         with self.subTest(onschedule_model=onschedule_model,
                           schedule_name=schedule_name):
             visit_schedule, schedule = site_visit_schedules.get_by_onschedule_model(
                 onschedule_model)
             subject_schedule = SubjectSchedule(
                 visit_schedule=visit_schedule, schedule=schedule)
             subject_schedule.put_on_schedule(
                 subject_identifier=self.subject_identifier,
                 onschedule_datetime=get_utcnow(),
             )
             try:
                 SubjectScheduleHistory.objects.get(
                     subject_identifier=self.subject_identifier,
                     schedule_name=schedule_name,
                 )
             except ObjectDoesNotExist:
                 self.fail("ObjectDoesNotExist unexpectedly raised")
Esempio n. 31
0
    def setUp(self):
        import_holidays()
        self.user = User.objects.create_superuser("user_login",
                                                  "*****@*****.**", "pass")

        site_labs._registry = {}
        site_labs.loaded = False
        site_labs.register(lab_profile=lab_profile)

        site_visit_schedules._registry = {}
        site_visit_schedules.loaded = False
        site_visit_schedules.register(visit_schedule)

        populate_visit_schedule()

        site_reference_configs.register_from_visit_schedule(
            visit_models={
                "edc_appointment.appointment": "data_manager_app.subjectvisit"
            })

        self.subject_identifier = "101-40990029-4"
        identity = "123456789"
        subject_consent = SubjectConsent.objects.create(
            subject_identifier=self.subject_identifier,
            consent_datetime=get_utcnow() - relativedelta(days=10),
            identity=identity,
            confirm_identity=identity,
            dob=get_utcnow() - relativedelta(years=25),
        )

        # put subject on schedule
        _, schedule = site_visit_schedules.get_by_onschedule_model(
            "data_manager_app.onschedule")
        schedule.put_on_schedule(
            subject_identifier=subject_consent.subject_identifier,
            onschedule_datetime=subject_consent.consent_datetime,
        )
Esempio n. 32
0
    def setUp(self):
        v1_consent = Consent(
            "visit_schedule_app.subjectconsent",
            version="1",
            start=Protocol().study_open_datetime,
            end=Protocol().study_close_datetime,
            age_min=18,
            age_is_adult=18,
            age_max=64,
            gender=[MALE, FEMALE],
        )

        import_holidays()
        site_consents.registry = {}
        site_consents.register(v1_consent)
        self.visit_schedule = VisitSchedule(
            name="visit_schedule",
            verbose_name="Visit Schedule",
            offstudy_model="visit_schedule_app.subjectoffstudy",
            death_report_model="visit_schedule_app.deathreport",
        )

        self.schedule = Schedule(
            name="schedule",
            onschedule_model="visit_schedule_app.onschedule",
            offschedule_model="visit_schedule_app.offschedule",
            appointment_model="edc_appointment.appointment",
            consent_model="visit_schedule_app.subjectconsent",
        )

        visit = Visit(
            code="1000",
            rbase=relativedelta(days=0),
            rlower=relativedelta(days=0),
            rupper=relativedelta(days=6),
            timepoint=1,
        )
        self.schedule.add_visit(visit)
        visit = Visit(
            code="1010",
            rbase=relativedelta(days=28),
            rlower=relativedelta(days=0),
            rupper=relativedelta(days=6),
            timepoint=2,
        )
        self.schedule.add_visit(visit)

        self.visit_schedule.add_schedule(self.schedule)
        site_visit_schedules._registry = {}
        site_visit_schedules.register(self.visit_schedule)

        site_reference_configs.registry = {}
        site_reference_configs.register_from_visit_schedule(visit_models={
            "edc_appointment.appointment":
            "visit_schedule_app.subjectvisit"
        })

        self.subject_consent = SubjectConsent.objects.create(
            subject_identifier="12345",
            consent_datetime=get_utcnow() - relativedelta(seconds=1),
            dob=date(1995, 1, 1),
            identity="11111",
            confirm_identity="11111",
        )
        self.subject_identifier = self.subject_consent.subject_identifier
        onschedule_datetime = get_utcnow() - relativedelta(years=4)
        _, schedule = site_visit_schedules.get_by_onschedule_model(
            "visit_schedule_app.onschedule")
        schedule.put_on_schedule(
            subject_identifier=self.subject_identifier,
            onschedule_datetime=onschedule_datetime,
        )
        self.appointments = Appointment.objects.all()
 def test_get_schedule_by_onschedule_model(self):
     _, schedule = site_visit_schedules.get_by_onschedule_model(
         "visit_schedule_app.onschedule")
     self.assertEqual(schedule.onschedule_model_cls, OnSchedule)