checkEligibilityForAgeAndSideEffect function

bool checkEligibilityForAgeAndSideEffect(
  1. DigitDOBAge age,
  2. ProjectTypeModel? projectType,
  3. TaskModel? tasks,
  4. List<SideEffectModel>? sideEffects,
)
  • Returns true if the individual is in the same cycle and is eligible for the next dose,

Implementation

bool checkEligibilityForAgeAndSideEffect(
  DigitDOBAge age,
  ProjectTypeModel? projectType,
  TaskModel? tasks,
  List<SideEffectModel>? sideEffects,
) {
  int totalAgeMonths = age.years * 12 + age.months;
  final currentCycle = projectType?.cycles?.firstWhereOrNull(
    (e) =>
        (e.startDate!) < DateTime.now().millisecondsSinceEpoch &&
        (e.endDate!) > DateTime.now().millisecondsSinceEpoch,
    // Return null when no matching cycle is found
  );
  if (currentCycle != null &&
      currentCycle.startDate != null &&
      currentCycle.endDate != null) {
    bool recordedSideEffect = false;
    if ((tasks != null) && sideEffects != null && sideEffects.isNotEmpty) {
      final lastTaskTime =
          tasks.clientReferenceId == sideEffects.last.taskClientReferenceId
              ? tasks.clientAuditDetails?.createdTime
              : null;
      recordedSideEffect = lastTaskTime != null &&
          (lastTaskTime >= currentCycle.startDate! &&
              lastTaskTime <= currentCycle.endDate!);

      return projectType?.validMinAge != null &&
              projectType?.validMaxAge != null
          ? totalAgeMonths >= projectType!.validMinAge! &&
                  totalAgeMonths <= projectType.validMaxAge!
              ? recordedSideEffect && !checkStatus([tasks], currentCycle)
                  ? false
                  : true
              : false
          : false;
    } else {
      return totalAgeMonths >= projectType!.validMinAge! &&
              totalAgeMonths <= projectType.validMaxAge!
          ? true
          : false;
    }
  }

  return false;
}