public void toggleFollowup() {
   if (mForm == null || mForm.getEnrollment() == null) return;
   mForm.getEnrollment().setFollowup(!mForm.getEnrollment().getFollowup());
   mForm.getEnrollment().setFromServer(false);
   mForm.getEnrollment().async().save();
   setFollowupButton(mForm.getEnrollment().getFollowup());
 }
 public void terminateEnrollment() {
   mForm.getEnrollment().setStatus(Enrollment.CANCELLED);
   mForm.getEnrollment().setFromServer(false);
   mForm.getEnrollment().async().save();
   setTerminated();
   clearViews();
 }
 public void completeEnrollment() {
   mForm.getEnrollment().setStatus(Enrollment.COMPLETED);
   mForm.getEnrollment().setFromServer(false);
   mForm.getEnrollment().async().save();
   setCompleted();
   clearViews();
 }
  @Override
  public void onClick(View view) {
    switch (view.getId()) {
      case R.id.select_program:
        {
          ProgramDialogFragment fragment =
              ProgramDialogFragment.newInstance(
                  this,
                  mState.getOrgUnitId(),
                  Program.MULTIPLE_EVENTS_WITH_REGISTRATION,
                  Program.SINGLE_EVENT_WITH_REGISTRATION);
          fragment.show(getChildFragmentManager());
          break;
        }

      case R.id.neweventbutton:
        {
          if (mForm.getEnrollment().getStatus().equals(Enrollment.ACTIVE)) {
            ProgramStage programStage = (ProgramStage) view.getTag();
            showDataEntryFragment(null, programStage.getId());
          }
          break;
        }

      case R.id.eventbackground:
        {
          if (mForm.getEnrollment().getStatus().equals(Enrollment.ACTIVE)) {
            Event event = (Event) view.getTag();
            showDataEntryFragment(event, event.getProgramStageId());
          }
        }

      case R.id.complete:
        {
          Dhis2.showConfirmDialog(
              getActivity(),
              getString(R.string.complete),
              getString(R.string.confirm_complete_enrollment),
              getString(R.string.complete),
              getString(R.string.cancel),
              new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {
                  completeEnrollment();
                }
              });
          break;
        }

      case R.id.terminate:
        {
          Dhis2.showConfirmDialog(
              getActivity(),
              getString(R.string.terminate),
              getString(R.string.confirm_terminate_enrollment),
              getString(R.string.terminate),
              getString(R.string.cancel),
              new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {
                  terminateEnrollment();
                }
              });
          break;
        }

      case R.id.followupButton:
        {
          toggleFollowup();
          break;
        }

      case R.id.newenrollmentbutton:
        {
          enroll();
          break;
        }

      case R.id.profile_cardview:
        {
          editTrackedEntityInstanceProfile();
          break;
        }
      case R.id.profile_button:
        {
          editTrackedEntityInstanceProfile();
          break;
        }
    }
  }
 /** Removes the currently selected enrollment from being currently selected */
 public void setTerminated() {
   onProgramSelected(mForm.getProgram().getId(), mForm.getProgram().getName());
 }
  public void showDataEntryFragment(Event event, String programStage) {
    Bundle args = getArguments();
    DataEntryFragment fragment;
    String progId = mForm.getProgram().getId(); // new line :AgeToday
    if (event == null) {
      fragment =
          DataEntryFragment.newInstanceWithEnrollment(
              args.getString(ORG_UNIT_ID),
              args.getString(PROGRAM_ID),
              programStage,
              mForm.getEnrollment().localId);
    } else if (progId.equals("u9FZUM7kn38") && event != null) {
      /*- The If-Else block below is used to add the AgeToday Feature, a requirement for the HPV Campaign Program -*/
      fragment =
          DataEntryFragment.newInstanceWithEnrollment(
              args.getString(ORG_UNIT_ID),
              args.getString(PROGRAM_ID),
              programStage,
              event.getLocalEnrollmentId(),
              event.getLocalId());

      Enrollment enrollment = DataValueController.getEnrollment(event.getLocalEnrollmentId());
      List<TrackedEntityAttributeValue> teav = enrollment.getAttributes();
      // getActionBar().setSubtitle("Learner's AgeToday is: " + displayAge);
      // getActionBar().setDisplayShowTitleEnabled(true);

      for (TrackedEntityAttributeValue val : teav) {
        System.out.println("The learner details are: ->" + val.getValue());
      }

      // If passport number is entered then :  String learnerDob   = teav.get(4).getValue();
      // String learnerDob   = teav.get(3).getValue(); Training Instance - Position for LearnerDOB
      // when IDNumber is entered
      String learnerDob = teav.get(2).getValue(); // Staging Instance
      // String learnerDob   = teav.get(3).getValue();
      if (!isValidDate(learnerDob)) learnerDob = teav.get(3).getValue();
      System.out.println("What is in learnerstring :" + learnerDob);
      // --Use Joda Time to compute the learner's age today
      LocalDate birthdate = new LocalDate(learnerDob);
      LocalDate now = new LocalDate();
      // Compute learners age today
      Years learnersAgeToday = Years.yearsBetween(birthdate, now);

      System.out.println("The learners age today is:====>" + learnersAgeToday);
      ageToday = String.valueOf(learnersAgeToday);
      StringBuilder sbAgeToday = new StringBuilder(ageToday);
      sbAgeToday.delete(0, 1);

      sbAgeToday.append("EARS");
      System.out.println("The OLD learners age is:" + ageToday);
      //  String myDisplay = printLearnersAge();
      displayAge = sbAgeToday.toString();
      System.out.println("THE NEW LEARNERS AGE FIXED: " + displayAge);
      //   List<ProgramStageDataElement> programStageDataElements =
      // MetaDataController.getProgramStageDataElements
      // (MetaDataController.getProgramStage(event.getProgramStageId()));
      //  for(ProgramStageDataElement de: programStageDataElements) {
      //       System.out.println("The data elements in the program are:" + de.getDataElement());

      AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());

      builder
          .setMessage("The learner's Age Today is: " + displayAge)
          .setCancelable(false)
          .setTitle("Learner's Age Today Notification")
          .setPositiveButton(
              "OK",
              new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int id) {
                  dialog.dismiss();
                }
              });

      AlertDialog dialog = builder.create();
      dialog.show();

    } else {
      fragment =
          DataEntryFragment.newInstanceWithEnrollment(
              args.getString(ORG_UNIT_ID),
              args.getString(PROGRAM_ID),
              programStage,
              event.getLocalEnrollmentId(),
              event.getLocalId());
    }

    mNavigationHandler.switchFragment(fragment, ProgramOverviewFragment.CLASS_TAG, true);
  }
  @Override
  public void onLoadFinished(
      Loader<ProgramOverviewFragmentForm> loader, ProgramOverviewFragmentForm data) {
    if (LOADER_ID == loader.getId()) {
      mForm = data;
      mProgressBar.setVisibility(View.GONE);
      if (mForm == null || mForm.getEnrollment() == null) {
        showNoActiveEnrollment();
        return;
      } else {
        enrollmentLayout.setVisibility(View.VISIBLE);
        missingEnrollmentLayout.setVisibility(View.GONE);
      }
      enrollmentDateLabel.setText(data.getDateOfEnrollmentLabel());
      enrollmentDateValue.setText(data.getDateOfEnrollmentValue());
      incidentDateLabel.setText(data.getIncidentDateLabel());
      incidentDateValue.setText(data.getIncidentDateValue());

      if (mForm.getEnrollment().getStatus().equals(Enrollment.COMPLETED)) {
        setCompleted();
      }

      if (mForm.getEnrollment().getStatus().equals(Enrollment.CANCELLED)) {
        setTerminated();
      }

      if (mForm.getEnrollment().getFollowup()) {
        setFollowupButton(true);
      }

      if (data.getAttribute1Label() == null || data.getAttribute1Value() == null) {
        attribute1Label.setVisibility(View.GONE);
        attribute1Value.setVisibility(View.GONE);
      } else {
        attribute1Label.setText(data.getAttribute1Label());
        attribute1Value.setText(data.getAttribute1Value());
      }

      if (data.getAttribute2Label() == null || data.getAttribute2Value() == null) {
        attribute2Label.setVisibility(View.GONE);
        attribute2Value.setVisibility(View.GONE);
      } else {
        attribute2Label.setText(data.getAttribute2Label());
        attribute2Value.setText(data.getAttribute2Value());
      }

      final Map<Long, FailedItem> failedEvents = getFailedEvents();
      List<Event> events = DataValueController.getEventsByEnrollment(data.getEnrollment().localId);
      Log.d(CLASS_TAG, "num failed events: " + failedEvents.size());
      boolean generateNextVisit = false;

      for (ProgramStageRow row : data.getProgramStageRows()) {
        if (row instanceof ProgramStageLabelRow) {
          ProgramStageLabelRow stageRow = (ProgramStageLabelRow) row;
          if (stageRow.getProgramStage().getRepeatable()) {
            stageRow.setButtonListener(this);
          }

          if (generateNextVisit) {
            int stageCount = 0;

            if (stageRow.getEventRows() != null) {

              for (ProgramStageEventRow eventRow : stageRow.getEventRows()) {
                stageCount++;
              }
            }
            if (stageCount < 1
                || stageRow
                    .getProgramStage()
                    .getRepeatable()) // should only be able to add more stages if stage is
                                      // repeatable
            stageRow.setButtonListener(this);

            generateNextVisit = false;
          }

          if (stageRow.getProgramStage().getAllowGenerateNextVisit()) {
            if (stageRow.getEventRows() != null) {
              for (ProgramStageEventRow eventRow : stageRow.getEventRows()) {
                if (eventRow.getEvent().getStatus().equals(Event.STATUS_COMPLETED))
                  generateNextVisit = true;
              }
            }
          }

        } else if (row instanceof ProgramStageEventRow) {
          final ProgramStageEventRow eventRow = (ProgramStageEventRow) row;

          if (failedEvents.containsKey(eventRow.getEvent().getLocalId())) {
            eventRow.setHasFailed(true);
            eventRow.setMessage(
                failedEvents.get(eventRow.getEvent().getLocalId()).getErrorMessage());
          } else if (eventRow.getEvent().getFromServer()) {
            eventRow.setSynchronized(true);
            eventRow.setMessage(getString(R.string.status_sent_description));
          } else if (!(eventRow.getEvent().getFromServer())) {
            eventRow.setSynchronized(false);
            eventRow.setMessage(getString(R.string.status_offline_description));
          }
        }
      }

      adapter.swapData(data.getProgramStageRows());
    }
  }