def follow_up_reports(self, ae_initial):
     """Returns a formatted list of links to AE Follow up reports."""
     followups = []
     AeFollowup = get_ae_model("aefollowup")
     AeSusar = get_ae_model("aesusar")
     for ae_followup in AeFollowup.objects.filter(
             related_action_item=ae_initial.action_item):
         url = self.get_changelist_url(ae_followup)
         report_datetime = ae_followup.report_datetime.strftime(
             convert_php_dateformat(settings.SHORT_DATETIME_FORMAT))
         followups.append(
             f'<a title="go to AE follow up report for '
             f'{report_datetime}" '
             f'href="{url}?q={ae_initial.action_identifier}">'
             f"<span nowrap>{ae_followup.identifier}</span></a>")
     for ae_susar in AeSusar.objects.filter(
             related_action_item=ae_initial.action_item):
         url = self.get_changelist_url(ae_susar)
         report_datetime = ae_susar.report_datetime.strftime(
             convert_php_dateformat(settings.SHORT_DATETIME_FORMAT))
         followups.append(
             f'<a title="go to AE SUSAR report for '
             f'{report_datetime}" '
             f'href="{url}?q={ae_initial.action_identifier}">'
             f"<span nowrap>{ae_susar.identifier} (SUSAR)</span></a>")
     if followups:
         return mark_safe("<BR>".join(followups))
     return None
 def user(self, obj):
     """Returns formatted user names and creation/modification dates."""
     return mark_safe("<BR>".join([
         obj.user_created,
         obj.created.strftime(
             convert_php_dateformat(settings.SHORT_DATE_FORMAT)),
         obj.user_modified,
         obj.modified.strftime(
             convert_php_dateformat(settings.SHORT_DATE_FORMAT)),
     ]))
Пример #3
0
def validate_ae_initial_outcome_date(form_obj):
    ae_initial = form_obj.cleaned_data.get("ae_initial")
    if not ae_initial and form_obj.instance:
        ae_initial = form_obj.instance.ae_initial
    outcome_date = form_obj.cleaned_data.get("outcome_date")
    if ae_initial and outcome_date:
        if outcome_date < ae_initial.ae_start_date:
            formatted_dte = ae_initial.ae_start_date.strftime(
                convert_php_dateformat(settings.SHORT_DATE_FORMAT))
            raise forms.ValidationError({
                "outcome_date":
                (f"May not be before the AE start date {formatted_dte}.")
            })
Пример #4
0
    def validate_consent_datetime(self):
        """Validate consent datetime with the eligibility datetime.

        Eligibility datetime must come first.

        Watchout for timezone.
        """
        if (self.consent_datetime - self.subject_screening.eligibility_datetime
            ).total_seconds() < 0:
            local_dt = self.subject_screening.eligibility_datetime.astimezone(
                self.tz)
            formatted = local_dt.strftime(
                convert_php_dateformat(settings.SHORT_DATETIME_FORMAT))
            raise forms.ValidationError(
                {
                    "consent_datetime":
                    (f"Cannot be before the date and time eligibility "
                     f"was confirmed. Eligibility was confirmed at "
                     f"{formatted}.")
                }, )
    def validate(self):
        # datetime_not_before_study_start
        try:
            datetime_not_before_study_start(self.report_datetime)
        except ValidationError as e:
            message = e.message if hasattr(e, "message") else str(e)
            raise CrfReportDateBeforeStudyStart(message)
        # datetime_not_future
        try:
            datetime_not_future(self.report_datetime)
        except ValidationError as e:
            message = e.message if hasattr(e, "message") else str(e)
            raise CrfReportDateIsFuture(message)

        formatted_visit_datetime = self.visit_report_datetime.strftime(
            convert_php_dateformat(settings.SHORT_DATE_FORMAT))

        # not before the visit report_datetime
        if (not self.allow_report_datetime_before_visit
                and self.report_datetime.date() <
                self.visit_report_datetime.date()):
            raise CrfReportDateAllowanceError(
                "Report datetime may not be before the visit report datetime. "
                f"Visit report datetime is {formatted_visit_datetime}. ")

        # not more than x days greater than the visit report_datetime
        # if self.report_datetime_allowance > 0:
        max_allowed_report_datetime = self.visit_report_datetime + relativedelta(
            days=self.report_datetime_allowance)
        if self.report_datetime.date() > max_allowed_report_datetime.date():
            diff = (max_allowed_report_datetime.date() -
                    self.visit_report_datetime.date()).days
            raise CrfReportDateAllowanceError(
                f"Report datetime may not be more than {self.report_datetime_allowance} "
                f"days greater than the visit report datetime. Got {diff} days."
                f"Visit report datetime is {formatted_visit_datetime}. "
                f"See also AppConfig.report_datetime_allowance.")