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)
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.')
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)
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.')
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
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)
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)
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
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)
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()
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
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
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)
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)
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)
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)