def validate_incomplete_required_model(
         self, subject_identifier=None, model=None, action_name=None, msg=None):
     model_cls = django_apps.get_model(model)
     action_cls = site_action_items.get(model_cls.action_name)
     action_item_model_cls = action_cls.action_item_model_cls()
     try:
         action_item_model_cls.objects.get(
             subject_identifier=subject_identifier,
             action_type__name=action_name,
             status=NEW)
     except action_item_model_cls.DoesNotExist:
         try:
             model_obj = model_cls.objects.get(
                 subject_identifier=subject_identifier,
                 version='1')
         except model_cls.DoesNotExist:
             pass
         else:
             if not model_obj.is_eligible:
                 raise forms.ValidationError(
                     'Participant is not eligible for study participation '
                     f'on the {model_cls._meta.verbose_name}. Can not edit '
                     'visit, should be taken off study.')
     else:
         raise forms.ValidationError(msg)
Exemplo n.º 2
0
    def validate_study_status(self):
        maternal_offstudy_cls = django_apps.get_model(
            'td_prn.maternaloffstudy')
        action_cls = site_action_items.get(maternal_offstudy_cls.action_name)
        action_item_model_cls = action_cls.action_item_model_cls()

        try:
            action_item = action_item_model_cls.objects.get(
                subject_identifier=self.subject_identifier,
                action_type__name=MATERNALOFF_STUDY_ACTION,
                status=NEW)
        except action_item_model_cls.DoesNotExist:
            try:
                maternal_offstudy_cls.objects.get(
                    subject_identifier=self.subject_identifier)
            except maternal_offstudy_cls.DoesNotExist:
                pass
            else:
                if self.cleaned_data.get('study_status') == ON_STUDY:
                    raise forms.ValidationError({
                        'study_status':
                        'Participant has been taken offstudy.'
                        ' Cannot be indicated as on study.'
                    })
        else:
            if (action_item.parent_reference_model_obj
                    and self.cleaned_data.get('report_datetime') >=
                    action_item.parent_reference_model_obj.report_datetime):
                raise forms.ValidationError(
                    'Participant is scheduled to go offstudy.'
                    ' Cannot edit visit until offstudy form is completed.')
Exemplo n.º 3
0
    def test_check_attrs_for_form_one_next_action(self):

        form_one = FormOne.objects.create(
            subject_identifier=self.subject_identifier)

        action_type_two = get_action_type(
            site_action_items.get(FormTwo.action_name))
        action_item_one = ActionItem.objects.get(
            action_identifier=form_one.action_identifier, status=CLOSED)
        action_item_two = ActionItem.objects.get(
            subject_identifier=self.subject_identifier,
            action_type__name="submit-form-two",
            status=NEW,
        )
        form_one = FormOne.objects.get(id=form_one.id)

        self.assertEqual(action_item_two.subject_identifier,
                         form_one.subject_identifier)
        self.assertNotEqual(action_item_two.action_identifier,
                            form_one.action_identifier)
        self.assertEqual(action_item_two.reference_model,
                         FormTwo._meta.label_lower)
        self.assertEqual(action_item_two.related_action_item,
                         form_one.action_item)
        self.assertEqual(action_item_two.related_reference_model,
                         FormOne._meta.label_lower)
        self.assertEqual(action_item_two.parent_action_item,
                         form_one.action_item)
        self.assertEqual(
            action_item_two.parent_action_item.reference_model,
            action_item_one.reference_model,
        )
        self.assertEqual(action_item_two.parent_action_item, action_item_one)
        self.assertEqual(get_action_type(action_item_two.action_cls),
                         action_type_two)
Exemplo n.º 4
0
    def validate_offstudy_model(self):
        maternal_offstudy_cls = django_apps.get_model(
            'td_prn.maternaloffstudy')
        action_cls = site_action_items.get(maternal_offstudy_cls.action_name)
        action_item_model_cls = action_cls.action_item_model_cls()

        try:
            action_item_model_cls.objects.get(
                subject_identifier=self.subject_identifier,
                action_type__name=MATERNALOFF_STUDY_ACTION,
                status=NEW)
        except action_item_model_cls.DoesNotExist:
            try:
                maternal_offstudy_cls.objects.get(
                    subject_identifier=self.subject_identifier)
            except maternal_offstudy_cls.DoesNotExist:
                pass
            else:
                raise forms.ValidationError(
                    'Participant has been taken offstudy. Cannot capture any '
                    'new data.')
        else:
            self.maternal_visit = self.cleaned_data.get(
                'maternal_visit') or None
            if not self.maternal_visit or self.maternal_visit.require_crfs == NO:
                raise forms.ValidationError(
                    'Participant is scheduled to be taken offstudy without '
                    'any new data collection. Cannot capture any new data.')
Exemplo n.º 5
0
    def get_subject_locator_or_message(self):
        obj = None
        subject_identifier = self.kwargs.get('subject_identifier')
        try:
            obj = self.subject_locator_model_cls.objects.get(
                subject_identifier=subject_identifier)
        except ObjectDoesNotExist:
            action_cls = site_action_items.get(self.subject_locator_model_cls.action_name)
            action_item_model_cls = action_cls.action_item_model_cls()
            try:
                action_item_model_cls.objects.get(
                    subject_identifier=subject_identifier,
                    action_type__name=SUBJECT_LOCATOR_ACTION)
            except ObjectDoesNotExist:
                action_cls(
                    subject_identifier=subject_identifier)
#             try:
#                 ActionItem.objects.get(
#                     subject_identifier=subject_identifier,
#                     name=action_name)
#             except ObjectDoesNotExist:
#                 add_url = self.subject_locator_model_cls().get_absolute_url()
#                 verbose_name = self.subject_locator_model_cls._meta.verbose_name
#                 next_querystring = (f'next=subject_dashboard_url,subject_identifier&'
#                                     f'subject_identifier={subject_identifier}')
#                 messages.warning(self.request, mark_safe(
#                     f'Please complete the <a href="{add_url}?{next_querystring}" '
#                     f'title="Add {verbose_name}">{verbose_name}</a> form.'))
        return obj
Exemplo n.º 6
0
def trigger_action_item(model_cls, action_name, subject_identifier):

    action_cls = site_action_items.get(
        model_cls.action_name)
    action_item_model_cls = action_cls.action_item_model_cls()

    try:
        model_cls.objects.get(subject_identifier=subject_identifier)
    except model_cls.DoesNotExist:

        try:
            action_item_model_cls.objects.get(
                subject_identifier=subject_identifier,
                action_type__name=action_name)
        except action_item_model_cls.DoesNotExist:
            action_cls = site_action_items.get(action_name)
            action_cls(
                subject_identifier=subject_identifier)
Exemplo n.º 7
0
 def action_cls_item_creator(self,
                             subject_identifier=None,
                             action_cls=None,
                             action_type=None):
     action_cls = site_action_items.get(action_cls.action_name)
     action_item_model_cls = action_cls.action_item_model_cls()
     try:
         action_item_model_cls.objects.get(
             subject_identifier=subject_identifier,
             action_type__name=action_type)
     except ObjectDoesNotExist:
         action_cls(subject_identifier=subject_identifier)
Exemplo n.º 8
0
    def get_action_item_obj(self, model_cls):
        subject_identifier = self.kwargs.get('subject_identifier')
        action_cls = site_action_items.get(model_cls.action_name)
        action_item_model_cls = action_cls.action_item_model_cls()

        try:
            action_item_obj = action_item_model_cls.objects.get(
                subject_identifier=subject_identifier,
                action_type__name=model_cls.action_name,
                status=NEW)
        except action_item_model_cls.DoesNotExist:
            return None
        return action_item_obj
Exemplo n.º 9
0
 def get_subject_locator_or_message(self, subject_identifier=None):
     model_cls = django_apps.get_model('trainee_subject.subjectlocator')
     try:
         model_cls.objects.get(subject_identifier=subject_identifier)
     except ObjectDoesNotExist:
         action_cls = site_action_items.get(model_cls.action_name)
         action_item_model_cls = action_cls.action_item_model_cls()
         try:
             action_item_model_cls.objects.get(
                 subject_identifier=subject_identifier,
                 action_type__name=SUBJECT_LOCATOR_ACTION)
         except ObjectDoesNotExist:
             action_cls(subject_identifier=subject_identifier)
Exemplo n.º 10
0
def trigger_action_item(obj,
                        field,
                        response,
                        model_cls,
                        action_name,
                        subject_identifier,
                        repeat=False):
    action_cls = site_action_items.get(model_cls.action_name)
    action_item_model_cls = action_cls.action_item_model_cls()

    if getattr(obj, field) == response:
        try:
            model_cls.objects.get(subject_identifier=subject_identifier)
        except model_cls.DoesNotExist:
            trigger = True
        else:
            trigger = repeat
        if trigger:
            try:
                action_item_obj = action_item_model_cls.objects.get(
                    subject_identifier=subject_identifier,
                    action_type__name=action_name)
            except action_item_model_cls.DoesNotExist:
                action_cls = site_action_items.get(action_name)
                action_cls(subject_identifier=subject_identifier)
            else:
                action_item_obj.status = OPEN
                action_item_obj.save()
    else:
        try:
            action_item = action_item_model_cls.objects.get(
                Q(status=NEW) | Q(status=OPEN),
                subject_identifier=subject_identifier,
                action_type__name=action_name)
        except action_item_model_cls.DoesNotExist:
            pass
        else:
            action_item.delete()
Exemplo n.º 11
0
    def get_subject_locator_or_message(self):
        obj = self.get_locator_info()
        subject_identifier = self.kwargs.get('subject_identifier')

        if not obj:
            action_cls = site_action_items.get(
                self.subject_locator_model_cls.action_name)
            action_item_model_cls = action_cls.action_item_model_cls()
            try:
                action_item_model_cls.objects.get(
                    subject_identifier=subject_identifier,
                    action_type__name=PRE_FLOURISH_CAREGIVER_LOCATOR_ACTION)
            except ObjectDoesNotExist:
                action_cls(subject_identifier=subject_identifier)
        return obj
Exemplo n.º 12
0
 def get_subject_locator_or_message(self):
     obj = None
     subject_identifier = self.kwargs.get("subject_identifier")
     try:
         obj = self.subject_locator_model_cls.objects.get(
             subject_identifier=subject_identifier)
     except ObjectDoesNotExist:
         action_cls = site_action_items.get(SUBJECT_LOCATOR_ACTION)
         action_item_model_cls = action_cls.action_item_model_cls()
         try:
             action_item_model_cls.objects.get(
                 subject_identifier=subject_identifier,
                 action_type__name=SUBJECT_LOCATOR_ACTION,
             )
         except ObjectDoesNotExist:
             action_cls(subject_identifier=subject_identifier)
     return obj
Exemplo n.º 13
0
    def action_cls_item_creator(self,
                                subject_identifier=None,
                                action_cls=None,
                                action_type=None,
                                trigger=None):

        action_item_cls = site_action_items.get(action_cls.action_name)
        action_item_model_cls = action_item_cls.action_item_model_cls()

        if trigger:
            try:
                action_item_model_cls.objects.get(
                    subject_identifier=subject_identifier,
                    action_type__name=action_type)
            except ObjectDoesNotExist:
                action_item_cls(subject_identifier=subject_identifier)
        else:
            self.delete_action_item_if_new(action_cls)
Exemplo n.º 14
0
 def test_check_attrs_for_own_action1(self):
     """Test when action creates model."""
     obj = FormZero.objects.create(
         subject_identifier=self.subject_identifier)
     action = FormZeroAction(
         subject_identifier=self.subject_identifier,
         action_identifier=obj.action_identifier,
     )
     self.assertEqual(action.subject_identifier, obj.subject_identifier)
     self.assertEqual(action.action_identifier, obj.action_identifier)
     self.assertEqual(action.action_identifier, obj.action_identifier)
     self.assertEqual(action.reference_model, obj._meta.label_lower)
     self.assertTrue(action.linked_to_reference)
     self.assertIsNone(action.related_action_item)
     self.assertIsNone(action.related_reference_model)
     self.assertIsNone(action.parent_action_item)
     action_type = get_action_type(
         site_action_items.get(FormZero.action_name))
     self.assertEqual(get_action_type(action), action_type)
Exemplo n.º 15
0
    def test_attrs(self):
        site_action_items.register(FormOneAction)
        site_action_items.register(FormTwoAction)
        site_action_items.register(FormThreeAction)
        form_one = FormOne.objects.create(subject_identifier=self.subject_identifier)
        form_one.refresh_from_db()
        form_two = FormTwo.objects.create(
            subject_identifier=self.subject_identifier, form_one=form_one
        )
        form_two.refresh_from_db()
        action_item_one = ActionItem.objects.get(action_identifier=form_one.action_identifier)
        action_item_two = ActionItem.objects.get(action_identifier=form_two.action_identifier)

        self.assertEqual(
            action_item_two.action_cls,
            site_action_items.get(action_item_two.action_type.name),
        )
        self.assertTrue(action_item_two.identifier)
        self.assertTrue(str(action_item_two))
        self.assertTrue(action_item_two.parent_action_item)
        self.assertIsNone(action_item_one.parent_action_item)
Exemplo n.º 16
0
 def test_check_attrs_for_own_action0(self):
     """Test when model creates action."""
     obj = FormZero.objects.create(
         subject_identifier=self.subject_identifier)
     action_type = get_action_type(
         site_action_items.get(FormZero.action_name))
     action_item = ActionItem.objects.get(
         subject_identifier=self.subject_identifier,
         action_type__name="submit-form-zero",
     )
     self.assertEqual(action_item.subject_identifier,
                      obj.subject_identifier)
     self.assertEqual(action_item.action_identifier, obj.action_identifier)
     self.assertEqual(action_item.action_identifier, obj.action_identifier)
     self.assertEqual(action_item.reference_model, obj._meta.label_lower)
     self.assertTrue(action_item.linked_to_reference)
     self.assertIsNone(action_item.related_action_item)
     self.assertIsNone(action_item.related_reference_model)
     self.assertIsNone(action_item.parent_action_item)
     # self.assertIsNone(action_item.parent_reference_model)
     self.assertIsNone(action_item.parent_action_item)
     self.assertEqual(action_item.action_type, action_type)