Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -328,14 +328,14 @@ public class ColumnConstants {
public static final String PROPOSED_START_DATE = "Proposed Start Date";
public static final String PURPOSE = "Purpose";
public static final String RATIFICATION_DATE = "Loan Ratification Date";
public static final String REGIONAL_REGION = "Regional Region";
public static final String REGIONAL_GROUP = "Regional Group";
public static final String REGIONAL_GROUP_GROUP = "Regional Group Group";
public static final String REGIONAL_GROUP_DEPARTMENT_DIVISION = "Regional Group Department/Division";
public static final String REGIONAL_OBSERVATIONS = "Regional Observations";
public static final String REGIONAL_OBSERVATIONS_ACTORS = "Regional Observations Actors";
public static final String REGIONAL_OBSERVATIONS_DATE = "Regional Observations Date";
public static final String REGIONAL_OBSERVATIONS_MEASURES = "Regional Observations Measures Taken";
public static final String REGIONAL_REGION = "Regional Region";

public static final String REPORTING_SYSTEM = "Reporting System";
public static final String RESPONSIBLE_ORGANIZATION = "Responsible Organization";
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,8 @@

import static java.lang.Boolean.TRUE;
import static org.dgfoundation.amp.ar.ColumnConstants.PROJECT_TITLE;
import static org.dgfoundation.amp.ar.ColumnConstants.LOCATION_ADM_LEVEL_1;
import static org.dgfoundation.amp.ar.ColumnConstants.REGIONAL_REGION;
import static org.dgfoundation.amp.newreports.AmountsUnits.getAmountCode;
import static org.digijava.kernel.ampapi.endpoints.reports.designer.ReportDesignerErrors.REPORT_NOT_FOUND;
import static org.digijava.kernel.ampapi.endpoints.settings.SettingsUtils.getReportSettings;
Expand Down Expand Up @@ -87,6 +89,8 @@ public ReportManager createOrUpdateReport(ReportRequest reportRequest, final Lon
this.reportRequest = reportRequest;
this.report = reportId == null ? new AmpReports() : getReportById(reportId);

remapSaveRegionalColumns(reportRequest);

initValidators();
validate();

Expand Down Expand Up @@ -352,10 +356,86 @@ private Set<AmpReportMeasures> getReportMeasures(final List<Long> measures) {
return reportMeasures;
}

private void remapSaveRegionalColumns(final ReportRequest req) {
if (req.getColumns() == null || req.getColumns().isEmpty() || req.getType() == null) {
return;
}
ReportType type;
try {
type = ReportType.fromString(req.getType());
} catch (IllegalArgumentException e) {
return;
}
if (!type.isRegional()) {
return;
}
AmpColumns adm1 = getAmpColumnByName(LOCATION_ADM_LEVEL_1);
if (adm1 == null) {
return;
}
if (!req.getColumns().contains(adm1.getColumnId())) {
return;
}
AmpColumns regionalRegion = getAmpColumnByName(REGIONAL_REGION);
if (regionalRegion == null) {
return;
}
List<Long> remapped = new ArrayList<>(req.getColumns());
for (int i = 0; i < remapped.size(); i++) {
if (adm1.getColumnId().equals(remapped.get(i))) {
remapped.set(i, regionalRegion.getColumnId());
}
}
req.setColumns(remapped);

// Also remap in hierarchies if present
if (req.getHierarchies() != null && req.getHierarchies().contains(adm1.getColumnId())) {
List<Long> remappedHierarchies = new ArrayList<>(req.getHierarchies());
for (int i = 0; i < remappedHierarchies.size(); i++) {
if (adm1.getColumnId().equals(remappedHierarchies.get(i))) {
remappedHierarchies.set(i, regionalRegion.getColumnId());
}
}
req.setHierarchies(remappedHierarchies);
}
}

private Set<AmpReportColumn> remapRegionalColumns(final AmpReports ampReport) {
if (ReportType.fromLong(ampReport.getType()).isRegional()) {
AmpColumns adm1 = null;
Set<AmpReportColumn> remapped = new LinkedHashSet<>();
for (AmpReportColumn rc : ampReport.getColumns()) {
if (REGIONAL_REGION.equals(rc.getColumn().getColumnName())) {
if (adm1 == null) {
adm1 = getAmpColumnByName(LOCATION_ADM_LEVEL_1);
}
if (adm1 != null) {
AmpReportColumn replacement = new AmpReportColumn();
replacement.setColumn(adm1);
replacement.setOrderId(rc.getOrderId());
replacement.setLevel(rc.getLevel());
remapped.add(replacement);
continue;
}
}
remapped.add(rc);
}
return remapped;
}
return ampReport.getColumns();
}

private AmpColumns getAmpColumnById(final Long columnId) {
return PersistenceManager.getSession().get(AmpColumns.class, columnId);
}

private AmpColumns getAmpColumnByName(final String columnName) {
return (AmpColumns) PersistenceManager.getSession()
.createQuery("from " + AmpColumns.class.getName() + " where columnName = :name")
.setParameter("name", columnName)
.uniqueResult();
}

private AmpMeasures getAmpMeasureById(final Long columnId) {
return PersistenceManager.getSession().get(AmpMeasures.class, columnId);
}
Expand Down Expand Up @@ -430,7 +510,7 @@ private Report convertAmpReportsToReport(final AmpReports ampReport) {
}

report.setMeasures(ampReport.getMeasures());
report.setColumns(ampReport.getColumns());
report.setColumns(remapRegionalColumns(ampReport));
report.setHierarchies(ampReport.getHierarchies());

AmpARFilterConverter arFilterConverter = new AmpARFilterConverter(buildFilterFromSource(ampReport));
Expand Down