Esempio n. 1
0
  /**
   * Parses the event and creates a {@link org.motechproject.dhis2.rest.domain.DataValueDto} which
   * is then sent to the DHIS2 server via {@link
   * org.motechproject.dhis2.rest.service.DhisWebService}
   *
   * @param event
   */
  @MotechListener(subjects = EventSubjects.SEND_DATA_VALUE)
  public void handleDataValue(MotechEvent event) {

    Map<String, Object> params = event.getParameters();

    DataElement dataElement =
        dataElementService.findByName((String) params.get(EventParams.DATA_ELEMENT));

    if (dataElement == null) {
      throw new DataElementNotFoundException(
          "The data element "
              + params.get(EventParams.DATA_ELEMENT)
              + " that was sent did not match any values imported from DHIS2. Please make sure that the "
              + "data element field matches a data element name in the DHIS2 module");
    }

    String orgUnitId = (String) params.get(EventParams.LOCATION);
    String period = (String) params.get(EventParams.PERIOD);
    String value = (String) params.get(EventParams.VALUE);
    String categoryOptionCombo = (String) params.get(EventParams.CATEGORY_OPTION_COMBO);
    String comment = (String) params.get(EventParams.COMMENT);

    DataValueDto dataValueDto = new DataValueDto();
    dataValueDto.setDataElement(dataElement.getUuid());
    dataValueDto.setValue(value);
    dataValueDto.setOrgUnit(orgUnitId);
    dataValueDto.setPeriod(period);
    dataValueDto.setCategoryOptionCombo(categoryOptionCombo);
    dataValueDto.setComment(comment);

    DataValueSetDto dataValueSetDto = new DataValueSetDto();
    List<DataValueDto> dataValueDtos = new ArrayList<>();
    dataValueDtos.add(dataValueDto);
    dataValueSetDto.setDataValues(dataValueDtos);

    dhisWebService.sendDataValueSet(dataValueSetDto);
  }