private String buildCustomerQuery()

in service/src/main/java/org/apache/fineract/cn/reporting/service/internal/specification/CustomerListReportSpecification.java [247:290]


  private String buildCustomerQuery(final ReportRequest reportRequest, int pageIndex, int size) {
    final StringBuilder query = new StringBuilder("SELECT ");

    final List<DisplayableField> displayableFields = reportRequest.getDisplayableFields();
    final ArrayList<String> columns = new ArrayList<>();
    displayableFields.forEach(displayableField -> {
      final String column = this.customerColumnMapping.get(displayableField.getName());
      if (column != null) {
        columns.add(column);
      }
    });

    query.append(columns.stream().collect(Collectors.joining(", ")))
        .append(" FROM ")
        .append("maat_customers cst ");

    final List<QueryParameter> queryParameters = reportRequest.getQueryParameters();
    if (!queryParameters.isEmpty()) {
      final ArrayList<String> criteria = new ArrayList<>();
      queryParameters.forEach(queryParameter -> {
        if(queryParameter.getValue() != null && !queryParameter.getValue().isEmpty()) {
          criteria.add(
            CriteriaBuilder.buildCriteria(this.customerColumnMapping.get(queryParameter.getName()), queryParameter)
          );
        }
      });

      if (!criteria.isEmpty()) {
        query.append(" WHERE ");
        query.append(criteria.stream().collect(Collectors.joining(" AND ")));
      }

    }
    query.append(" ORDER BY cst.identifier");

    query.append(" LIMIT ");
    query.append(size);
    if (pageIndex > 0) {
      query.append(" OFFSET ");
      query.append(size * pageIndex);
    }

    return query.toString();
  }