This is an automated email from the ASF dual-hosted git repository. awasum pushed a commit to branch develop in repository https://gitbox.apache.org/repos/asf/fineract-cn-reporting.git
commit e75d262a7df98cd866d9bd3e72898b4e7bcbdc89 Author: Awasum Yannick <[email protected]> AuthorDate: Mon Aug 21 16:17:18 2017 +0100 Deposit Listing data rows built, Inactive Account Skeleton: Hopefully completes deposit account listing --- ...InactiveCustomerAccountReportSpecification.java | 24 +++++ .../SavingListReportSpecification.java | 100 +++++++++++++++++---- 2 files changed, 107 insertions(+), 17 deletions(-) diff --git a/service/src/main/java/io/mifos/reporting/service/internal/specification/InactiveCustomerAccountReportSpecification.java b/service/src/main/java/io/mifos/reporting/service/internal/specification/InactiveCustomerAccountReportSpecification.java new file mode 100644 index 0000000..148743b --- /dev/null +++ b/service/src/main/java/io/mifos/reporting/service/internal/specification/InactiveCustomerAccountReportSpecification.java @@ -0,0 +1,24 @@ +package io.mifos.reporting.service.internal.specification; + +import io.mifos.reporting.api.v1.domain.ReportDefinition; +import io.mifos.reporting.api.v1.domain.ReportPage; +import io.mifos.reporting.api.v1.domain.ReportRequest; +import io.mifos.reporting.service.spi.Report; +import io.mifos.reporting.service.spi.ReportSpecification; +@Report(category = "Customer", identifier = "Inactive") +public class InactiveCustomerAccountReportSpecification implements ReportSpecification { + @Override + public ReportDefinition getReportDefinition() { + return null; + } + + @Override + public ReportPage generateReport(ReportRequest reportRequest, int pageIndex, int size) { + return null; + } + + @Override + public void validate(ReportRequest reportRequest) throws IllegalArgumentException { + + } +} diff --git a/service/src/main/java/io/mifos/reporting/service/internal/specification/SavingListReportSpecification.java b/service/src/main/java/io/mifos/reporting/service/internal/specification/SavingListReportSpecification.java index 8496a04..a5cf74b 100644 --- a/service/src/main/java/io/mifos/reporting/service/internal/specification/SavingListReportSpecification.java +++ b/service/src/main/java/io/mifos/reporting/service/internal/specification/SavingListReportSpecification.java @@ -1,5 +1,7 @@ package io.mifos.reporting.service.internal.specification; +import io.mifos.core.api.util.UserContextHolder; +import io.mifos.core.lang.DateConverter; import io.mifos.reporting.api.v1.domain.*; import io.mifos.reporting.service.ServiceConstants; import io.mifos.reporting.service.spi.*; @@ -9,6 +11,8 @@ import org.springframework.beans.factory.annotation.Qualifier; import javax.persistence.EntityManager; import javax.persistence.Query; +import java.time.Clock; +import java.time.LocalDateTime; import java.util.ArrayList; import java.util.Arrays; import java.util.HashMap; @@ -75,11 +79,15 @@ public class SavingListReportSpecification implements ReportSpecification { final List<?> depositAccountResultList = depositAccountQuery.getResultList(); reportPage.setRows(this.buildRows(reportRequest, depositAccountResultList)); - return null; - } - private List<Row> buildRows(ReportRequest reportRequest, List<?> customerResultList) { - return null; + reportPage.setHasMore( + !this.entityManager.createNativeQuery(this.buildAccountQuery(reportRequest, pageIndex + 1, size)) + .getResultList().isEmpty() + ); + + reportPage.setGeneratedBy(UserContextHolder.checkedGetUser()); + reportPage.setGeneratedOn(DateConverter.toIsoString(LocalDateTime.now(Clock.systemUTC()))); + return reportPage; } private List<QueryParameter> buildQueryParameters() { @@ -132,6 +140,77 @@ public class SavingListReportSpecification implements ReportSpecification { this.allColumnMapping.putAll(employeeColumnMapping); this.allColumnMapping.putAll(accountColumnMapping); } + private Header createHeader(final List<DisplayableField> displayableFields) { + final Header header = new Header(); + header.setColumnNames( + displayableFields + .stream() + .map(DisplayableField::getName) + .collect(Collectors.toList()) + ); + return header; + } + + + private List<Row> buildRows(final ReportRequest reportRequest, final List<?> depositAccountResultList) { + final ArrayList<Row> rows =new ArrayList<>(); + depositAccountResultList.forEach(result -> { + final Row row = new Row(); + row.setValues(new ArrayList<>()); + + final String customerIdentifier; + + if (result instanceof Object[]) { + final Object[] resultValues = (Object[]) result; + + customerIdentifier = resultValues[0].toString(); + + for (final Object resultValue : resultValues) { + final Value value = new Value(); + if (resultValue != null) { + value.setValues(new String[]{resultValue.toString()}); + } else { + value.setValues(new String[]{}); + } + + row.getValues().add(value); + } + } else { + + customerIdentifier = result.toString(); + final Value value = new Value(); + value.setValues(new String[]{result.toString()}); + row.getValues().add(value); + } + + final Query customerQuery = this.entityManager.createNativeQuery(this.buildCustomerQuery(reportRequest, customerIdentifier)); + final List<?> accountResultList = customerQuery.getResultList(); + final ArrayList<String> values = new ArrayList<>(); + accountResultList.forEach(customerResult -> { + if (customerResult instanceof Object[]) { + final Object[] customerResultValues = (Object[]) customerResult; + final String customerValue = customerResultValues[0].toString(); + values.add(customerValue); + } + }); + final Value customerValue = new Value(); + customerValue.setValues(values.toArray(new String[values.size()])); + row.getValues().add(customerValue); + + final String officeQueryString = this.buildOfficeQuery(reportRequest, customerIdentifier); + if (officeQueryString != null) { + final Query officeQuery = this.entityManager.createNativeQuery(officeQueryString); + final List<?> resultList = officeQuery.getResultList(); + final Value officeValue = new Value(); + officeValue.setValues(new String[]{resultList.get(0).toString()}); + row.getValues().add(officeValue); + } + + rows.add(row); + }); + + return rows; + } private String buildAccountQuery(final ReportRequest reportRequest, int pageIndex, int size) { final StringBuilder query = new StringBuilder("SELECT "); @@ -216,19 +295,6 @@ public class SavingListReportSpecification implements ReportSpecification { "ORDER BY cst.identifier"; } - - private Header createHeader(final List<DisplayableField> displayableFields) { - final Header header = new Header(); - header.setColumnNames( - displayableFields - .stream() - .map(DisplayableField::getName) - .collect(Collectors.toList()) - ); - return header; - } - - private List<DisplayableField> buildDisplayableFields() { return Arrays.asList(
