public ActivityStatus getActivityStatus()

in Android/app/src/main/java/com/harvard/studyappmodule/surveyscheduler/SurveyScheduler.java [581:753]


  public ActivityStatus getActivityStatus(
      ActivityData activityData,
      String studyId,
      String activityId,
      Date currentDate,
      ActivitiesWS activityListItem) {
    String activityStatus = SurveyActivitiesFragment.YET_To_START;
    int currentRunId = 0;

    RealmResults<ActivityRun> activityRuns =
        dbServiceSubscriber.getAllActivityRunFromDB(studyId, activityId, realm);
    activityRuns = activityRuns.sort("runId", Sort.ASCENDING);

    int missedRun = 0;
    int completedRun = 0;
    Date currentRunStartDate = null;
    Date currentRunEndDate = null;
    boolean runAvailable = false;
    Activities activitiesForStatus = null;
    SimpleDateFormat simpleDateFormat = AppController.getDateFormatForApi();

    ActivityRun activityRun = null;
    ActivityRun activityPreviousRun = null;
    boolean previousRun = true;
    for (int i = 0; i < activityRuns.size(); i++) {
      Date activityRunStDate = null;
      Date activityRunEndDate = null;
      try {
        activityRunStDate =
            simpleDateFormat.parse(simpleDateFormat.format(activityRuns.get(i).getStartDate()));
        activityRunEndDate =
            simpleDateFormat.parse(simpleDateFormat.format(activityRuns.get(i).getEndDate()));
      } catch (ParseException e) {
        Logger.log(e);
      }

      if ((currentDate.equals(activityRunStDate) || currentDate.after(activityRunStDate))
          && (currentDate.equals(activityRunEndDate) || currentDate.before(activityRunEndDate))) {
        activityRun = activityRuns.get(i);
      } else if (currentDate.after(activityRunStDate)) {
        activityPreviousRun = activityRuns.get(i);
        previousRun = false;
      }
    }

    if (activityRun != null) {
      runAvailable = true;
      currentRunId = activityRun.getRunId();
      currentRunStartDate = activityRun.getStartDate();
      currentRunEndDate = activityRun.getEndDate();
    } else {
      if (activityPreviousRun != null) {
        currentRunId = activityPreviousRun.getRunId();
        currentRunStartDate = activityPreviousRun.getStartDate();
        currentRunEndDate = activityPreviousRun.getEndDate();
      }
    }
    boolean activityIdAvailable = false;
    if (activityData.getActivities() != null) {
      for (int i = 0; i < activityData.getActivities().size(); i++) {
        if (activityData.getActivities().get(i).getActivityId().equalsIgnoreCase(activityId)) {
          activitiesForStatus = activityData.getActivities().get(i);
          if (activitiesForStatus.getActivityRunId() != null
              && !activitiesForStatus.getActivityRunId().equalsIgnoreCase("")) {
            activityIdAvailable = true;
          }
        }
      }
    }

    if (runAvailable && activityIdAvailable) {
      if (currentRunId == Integer.parseInt(activitiesForStatus.getActivityRunId())) {
        activityStatus = activitiesForStatus.getStatus();
      } else {
        activityStatus = SurveyActivitiesFragment.YET_To_START;
      }
    } else if (runAvailable) {
      activityStatus = SurveyActivitiesFragment.YET_To_START;
    } else if (activityIdAvailable) {
      if (currentRunId == Integer.parseInt(activitiesForStatus.getActivityRunId())) {
        if (activitiesForStatus.getStatus().equalsIgnoreCase(SurveyActivitiesFragment.COMPLETED)) {
          activityStatus = activitiesForStatus.getStatus();
        } else {
          activityStatus = SurveyActivitiesFragment.INCOMPLETE;
        }
      } else {
        activityStatus = SurveyActivitiesFragment.INCOMPLETE;
      }
    } else {
      if (activityPreviousRun == null) {
        activityStatus = SurveyActivitiesFragment.YET_To_START;
      } else {
        activityStatus = SurveyActivitiesFragment.INCOMPLETE;
      }
    }

    Activities activities =
        dbServiceSubscriber.getActivityPreferenceBySurveyId(studyId, activityId, realm);
    int totalRun;
    SimpleDateFormat startTimeDateFormat = AppController.getDateFormatUtcNoZone();
    Date starttime = null;
    try {
      starttime = startTimeDateFormat.parse(activityListItem.getStartTime().split("\\.")[0]);
    } catch (ParseException e) {
      Logger.log(e);
    }
    Date endtime = null;
    try {
      if (activityListItem.getEndTime() != null
          && !activityListItem.getEndTime().equalsIgnoreCase("")) {
        endtime = startTimeDateFormat.parse(activityListItem.getEndTime().split("\\.")[0]);
      }
    } catch (ParseException e) {
      Logger.log(e);
    }
    if (starttime != null) {
      if (AppController.checkafter(starttime)) {
        missedRun = 0;
        completedRun = 0;
        totalRun =
            getTotalRunsForUpcomingActivities(
                activityListItem, starttime, endtime, startTimeDateFormat);
      } else if (AppController.isWithinRange(starttime, endtime)) {
        if (activities != null && activities.getActivityRun() != null) {
          completedRun = activities.getActivityRun().getCompleted();
        }
        if (currentRunId <= 0) {
          missedRun = 0;
          currentRunStartDate = new Date();
          currentRunEndDate = new Date();
        } else {
          missedRun = currentRunId - completedRun;
        }

        if (runAvailable && !activityStatus.equalsIgnoreCase(SurveyActivitiesFragment.COMPLETED)) {
          missedRun--;
        }

        if (missedRun < 0) {
          missedRun = 0;
        }

        totalRun = activityRuns.size();
      } else {
        if (activities != null && activities.getActivityRun() != null) {
          completedRun = activities.getActivityRun().getCompleted();
        }
        totalRun = activityRuns.size();
        missedRun = totalRun - completedRun;
        if (missedRun < 0) {
          missedRun = 0;
        }
      }
    } else {
      completedRun = 0;
      currentRunId = 0;
      missedRun = 0;
      totalRun = 0;
      currentRunStartDate = new Date();
      currentRunEndDate = new Date();
      activityStatus = SurveyActivitiesFragment.YET_To_START;
    }
    ActivityStatus activityStatusData = new ActivityStatus();
    activityStatusData.setCompletedRun(completedRun);
    activityStatusData.setCurrentRunId(currentRunId);
    activityStatusData.setMissedRun(missedRun);
    activityStatusData.setCurrentRunStartDate(currentRunStartDate);
    activityStatusData.setCurrentRunEndDate(currentRunEndDate);
    activityStatusData.setStatus(activityStatus);
    activityStatusData.setTotalRun(totalRun);
    activityStatusData.setRunIdAvailable(runAvailable);
    return activityStatusData;
  }