diff --git a/amp/src/main/java/org/dgfoundation/amp/newreports/ReportsDashboard.java b/amp/src/main/java/org/dgfoundation/amp/newreports/ReportsDashboard.java
index 4ea27503294..50024c1688e 100644
--- a/amp/src/main/java/org/dgfoundation/amp/newreports/ReportsDashboard.java
+++ b/amp/src/main/java/org/dgfoundation/amp/newreports/ReportsDashboard.java
@@ -10,11 +10,12 @@ public class ReportsDashboard {
private String implementationLevel;
private String procurementSystem;
private String location;
+ private String country;
private String status;
private String reportingSystem;
private String typeOfAssistance;
private String currency;
- //private String year;
+ private String year;
private BigDecimal actualCommitment;
private BigDecimal actualDisbursement;
private Long activityCount;
@@ -64,15 +65,14 @@ public void setActivityIds(String activityIds) {
this.activityIds = activityIds;
}
- /*
- public String getYear() {
- return year;
- }
+ public String getYear() {
+ return year;
+ }
+
+ public void setYear(String year) {
+ this.year = year;
+ }
- public void setYear(String year) {
- this.year = year;
- }
- */
public BigDecimal getActualCommitment() {
return actualCommitment;
}
@@ -82,11 +82,21 @@ public void setActualCommitment(BigDecimal actualCommitment) {
}
public String getLocation() {
- return location;
+ return location != null ? location : country;
}
public void setLocation(String location) {
this.location = location;
+ this.country = location;
+ }
+
+ public String getCountry() {
+ return country != null ? country : location;
+ }
+
+ public void setCountry(String country) {
+ this.country = country;
+ this.location = country;
}
public String getImplementationLevel() {
diff --git a/amp/src/main/java/org/digijava/kernel/ampapi/endpoints/common/FiltersEndpoint.java b/amp/src/main/java/org/digijava/kernel/ampapi/endpoints/common/FiltersEndpoint.java
index 15c5d623c94..c314f364578 100644
--- a/amp/src/main/java/org/digijava/kernel/ampapi/endpoints/common/FiltersEndpoint.java
+++ b/amp/src/main/java/org/digijava/kernel/ampapi/endpoints/common/FiltersEndpoint.java
@@ -385,10 +385,23 @@ public Response getProcurementSystem() {
}
/**
- * List the possible values of 'Funding Status' filter.
+ * List the possible values of 'Reporting System' filter.
*
- * @return filter definition and values of 'funding-status' filter.
+ * @return filter definition and values of 'reporting-system' filter.
*/
+ @GET
+ @Path("/reportingSystem/")
+ @Produces(MediaType.APPLICATION_JSON + ";charset=utf-8")
+ @ApiMethod(id = FiltersConstants.REPORTING_SYSTEM, name = ColumnConstants.REPORTING_SYSTEM)
+ @ApiOperation(value = "Retrieve the data needed for building the 'Reporting System' filter.",
+ notes = "The response contains 2 objects - the filter definition and the values. \n"
+ + "The filter widget should create a tree for 'Reporting System' values.")
+ @FilterDefinition(tab = EPConstants.TAB_OTHER, columns = ColumnConstants.REPORTING_SYSTEM)
+ public Response getReportingSystem() {
+ return PublicServices.buildOkResponseWithOriginHeaders(
+ FiltersManager.getInstance().getCategoryValueFilter(FiltersConstants.REPORTING_SYSTEM));
+ }
+
@OPTIONS
@Path("/procurementSystem")
@ApiOperation(
@@ -397,6 +410,22 @@ public Response getProcurementSystem() {
public Response describeProcurementSystem() {
return PublicServices.buildOkResponseWithOriginHeaders("");
}
+
+ @OPTIONS
+ @Path("/reportingSystem")
+ @ApiOperation(
+ value = "Describe options for endpoint",
+ notes = "Enables Cross-Origin Resource Sharing for endpoint")
+ public Response describeReportingSystem() {
+ return PublicServices.buildOkResponseWithOriginHeaders("");
+ }
+
+ /**
+ * List the possible values of 'Funding Status' filter.
+ *
+ * @return filter definition and values of 'funding-status' filter.
+ */
+
@GET
@Path("/fundingStatus/")
@Produces(MediaType.APPLICATION_JSON + ";charset=utf-8")
diff --git a/amp/src/main/java/org/digijava/kernel/ampapi/endpoints/filters/CategoryValueFilterListManager.java b/amp/src/main/java/org/digijava/kernel/ampapi/endpoints/filters/CategoryValueFilterListManager.java
index 3d76fc018f8..5522fb2d0a0 100644
--- a/amp/src/main/java/org/digijava/kernel/ampapi/endpoints/filters/CategoryValueFilterListManager.java
+++ b/amp/src/main/java/org/digijava/kernel/ampapi/endpoints/filters/CategoryValueFilterListManager.java
@@ -63,6 +63,9 @@ public final class CategoryValueFilterListManager implements FilterListManager {
.put(FiltersConstants.PROCUREMENT_SYSTEM,
new CategoryBean(ColumnConstants.PROCUREMENT_SYSTEM,
CategoryConstants.PROCUREMENT_SYSTEM_KEY))
+ .put(FiltersConstants.REPORTING_SYSTEM,
+ new CategoryBean(ColumnConstants.REPORTING_SYSTEM,
+ CategoryConstants.REPORTING_SYSTEM_KEY))
.build();
public static CategoryValueFilterListManager getInstance() {
diff --git a/amp/src/main/java/org/digijava/kernel/ampapi/endpoints/publicportal/PublicEndpoint.java b/amp/src/main/java/org/digijava/kernel/ampapi/endpoints/publicportal/PublicEndpoint.java
index 84a1250c578..9bbc65dfff3 100644
--- a/amp/src/main/java/org/digijava/kernel/ampapi/endpoints/publicportal/PublicEndpoint.java
+++ b/amp/src/main/java/org/digijava/kernel/ampapi/endpoints/publicportal/PublicEndpoint.java
@@ -11,6 +11,7 @@
import org.digijava.kernel.ampapi.endpoints.dashboards.services.PublicServices;
import org.digijava.kernel.ampapi.endpoints.errors.ApiErrorResponse;
import org.digijava.kernel.ampapi.endpoints.gis.SettingsAndFiltersParameters;
+import org.digijava.kernel.ampapi.endpoints.publicportal.dto.PublicDonorCommitmentsByYear;
import org.digijava.kernel.ampapi.endpoints.publicportal.dto.PublicTotalsByMeasure;
import org.digijava.kernel.ampapi.endpoints.reports.ReportFormParameters;
import org.digijava.kernel.ampapi.endpoints.reports.ReportsUtil;
@@ -126,6 +127,31 @@ public Response describeTotalByMeasure() {
}
+ @POST
+ @Path("/donorCommitmentsByYear")
+ @Produces(MediaType.APPLICATION_JSON + ";charset=utf-8")
+ @ApiMethod(ui = false, id = "donorCommitmentsByYear")
+ @ApiOperation("Commitments by donor up to selected year")
+ @ApiResponses(@ApiResponse(code = HttpServletResponse.SC_OK, message = "Donor commitments by year",
+ response = PublicDonorCommitmentsByYear.class))
+ public Response getDonorCommitmentsByYear(SettingsAndFiltersParameters config,
+ @ApiParam(value = "Include commitments up to this year", required = false)
+ @QueryParam("year") Integer year) {
+ return PublicServices.buildOkResponseWithOriginHeaders(
+ PublicPortalService.getDonorCommitmentsByYear(config, year));
+ }
+
+
+ @OPTIONS
+ @Path("/donorCommitmentsByYear")
+ @ApiOperation(
+ value = "Describe options for endpoint",
+ notes = "Enables Cross-Origin Resource Sharing for endpoint")
+ public Response describeDonorCommitmentsByYear() {
+ return PublicServices.buildOkResponseWithOriginHeaders("");
+ }
+
+
@POST
@Path("/projectCount")
@Produces(MediaType.APPLICATION_JSON + ";charset=utf-8")
diff --git a/amp/src/main/java/org/digijava/kernel/ampapi/endpoints/publicportal/PublicPortalService.java b/amp/src/main/java/org/digijava/kernel/ampapi/endpoints/publicportal/PublicPortalService.java
index a7f663bda5d..528de9f188e 100644
--- a/amp/src/main/java/org/digijava/kernel/ampapi/endpoints/publicportal/PublicPortalService.java
+++ b/amp/src/main/java/org/digijava/kernel/ampapi/endpoints/publicportal/PublicPortalService.java
@@ -20,6 +20,8 @@
import org.digijava.kernel.ampapi.endpoints.errors.ApiErrorResponse;
import org.digijava.kernel.ampapi.endpoints.errors.ApiRuntimeException;
import org.digijava.kernel.ampapi.endpoints.gis.SettingsAndFiltersParameters;
+import org.digijava.kernel.ampapi.endpoints.publicportal.dto.PublicDonorCommitment;
+import org.digijava.kernel.ampapi.endpoints.publicportal.dto.PublicDonorCommitmentsByYear;
import org.digijava.kernel.ampapi.endpoints.publicportal.dto.PublicTotalsByMeasure;
import org.digijava.kernel.ampapi.endpoints.reports.ReportFormParameters;
import org.digijava.kernel.ampapi.endpoints.reports.ReportsUtil;
@@ -32,9 +34,12 @@
import java.math.BigDecimal;
import java.util.ArrayList;
+import java.util.Calendar;
+import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
+import java.util.LinkedHashSet;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
@@ -49,6 +54,14 @@
*/
public class PublicPortalService {
protected static final Logger logger = Logger.getLogger(PublicPortalService.class);
+ private static final String DONOR_AGENCY_FILTER = "donor-agency";
+ private static final String DONOR_AGENCY_CAMEL_FILTER = "donorAgency";
+ private static final String DONOR_FILTER = "donor";
+ private static final String REPORTING_SYSTEM_FILTER = "reporting-system";
+ private static final String REPORTING_SYSTEM_CAMEL_FILTER = "reportingSystem";
+ private static final String DATE_FILTER = "date";
+ private static final String DATE_START = "start";
+ private static final String DATE_END = "end";
/**
* Retrieves top 'count' projects based on fixed requirements.
@@ -376,6 +389,133 @@ private static void applyFilterRules(Map filters, ReportSpecific
}
}
+ public static PublicDonorCommitmentsByYear getDonorCommitmentsByYear(SettingsAndFiltersParameters config,
+ Integer year) {
+ PublicDonorCommitmentsByYear result = new PublicDonorCommitmentsByYear();
+ int targetYear = year == null ? Calendar.getInstance().get(Calendar.YEAR) : year;
+ result.setYear(targetYear);
+
+ Map settings = copyMap(config != null ? config.getSettings() : null);
+ if (!settings.containsKey(SettingsConstants.FUNDING_TYPE_ID)) {
+ settings.put(SettingsConstants.FUNDING_TYPE_ID, SettingsConstants.DEFAULT_FUNDING_TYPE_ID);
+ }
+ if (!settings.containsKey(SettingsConstants.CURRENCY_ID)) {
+ settings.put(SettingsConstants.CURRENCY_ID, "USD");
+ }
+ result.setCurrency((String) settings.get(SettingsConstants.CURRENCY_ID));
+
+ Map filters = copyMap(config != null ? config.getFilters() : null);
+ normalizeKnownFilterAliases(filters);
+
+ List