@RequestMapping(
     value = "/stock-status-facilities",
     method = GET,
     headers = BaseController.ACCEPT_JSON)
 public ResponseEntity<OpenLmisResponse> getStockStatusSummaryFacilityReport(
     @RequestParam(value = "program", required = true, defaultValue = "0") Long program,
     @RequestParam(value = "period", required = true, defaultValue = "0") Long period,
     @RequestParam(value = "product", required = true, defaultValue = "0") Long product) {
   return OpenLmisResponse.response(
       "map",
       this.geographicZoneReportMapper.getGeoStockStatusFacilitySummary(program, period, product));
 }
  @RequestMapping(value = "/reporting-rate", method = GET, headers = BaseController.ACCEPT_JSON)
  public ResponseEntity<OpenLmisResponse> getReportingRateReport(
      @RequestParam(value = "program", required = true, defaultValue = "0") Long program,
      @RequestParam(value = "period", required = true, defaultValue = "0") Long period,
      @RequestParam(value = "schedule", required = true, defaultValue = "0") Long schedule,
      HttpServletRequest request) {
    Long userId = loggedInUserId(request);

    return OpenLmisResponse.response(
        "map",
        this.geographicZoneReportMapper.getGeoReportingRate(userId, program, schedule, period));
  }
 @RequestMapping(
     value = "/stock-status-products",
     method = GET,
     headers = BaseController.ACCEPT_JSON)
 public ResponseEntity<OpenLmisResponse> getStockStatusProductReport(
     @RequestParam(value = "program", required = true, defaultValue = "0") Long program,
     @RequestParam(value = "period", required = true, defaultValue = "0") Long period,
     @RequestParam(value = "zone", required = true, defaultValue = "0") Long geoZoneId) {
   return OpenLmisResponse.response(
       "products",
       this.geographicZoneReportMapper.getStockStatusProductSummary(program, geoZoneId, period));
 }
 @RequestMapping(
     value = "/adequately-stocked-products",
     method = GET,
     headers = BaseController.ACCEPT_JSON)
 public ResponseEntity<OpenLmisResponse> getAdequatelyStockedProducts(
     @RequestParam(value = "program", required = true, defaultValue = "0") Long program,
     @RequestParam(value = "period", required = true, defaultValue = "0") Long period,
     @RequestParam(value = "product", required = true, defaultValue = "0") Long product,
     @RequestParam(value = "geo_zone", required = true, defaultValue = "0") Long geoZoneId) {
   return OpenLmisResponse.response(
       "products",
       this.geographicZoneReportMapper.getAdequatelyStockedProducts(
           program, geoZoneId, period, product));
 }
 @RequestMapping(
     value = "/reporting-facilities",
     method = GET,
     headers = BaseController.ACCEPT_JSON)
 public ResponseEntity<OpenLmisResponse> getReportingFacilities(
     @RequestParam(value = "program", required = true, defaultValue = "0") Long program,
     @RequestParam(value = "period", required = true, defaultValue = "0") Long period,
     @RequestParam(value = "geo_zone", required = true, defaultValue = "0") Long geoZoneId,
     @RequestParam(value = "schedule", required = true, defaultValue = "0") Long schedule,
     HttpServletRequest request) {
   Long userId = loggedInUserId(request);
   List<GeoFacilityIndicator> facilities =
       this.geographicZoneReportMapper.getReportingFacilities(program, geoZoneId, period, userId);
   return OpenLmisResponse.response("facilities", facilities);
 }
 @RequestMapping(
     value = "/stock-status-product-consumption",
     method = GET,
     headers = BaseController.ACCEPT_JSON)
 public ResponseEntity<OpenLmisResponse> getStockStatusProductConsumption(
     @RequestParam(value = "program", required = true, defaultValue = "0") Long program,
     @RequestParam(value = "product", required = true, defaultValue = "0")
         List<Long> productListId,
     @RequestParam(value = "period", required = true, defaultValue = "0") Long periodId,
     @RequestParam(value = "geo_zone", required = true, defaultValue = "0") Long geoZoneId) {
   return OpenLmisResponse.response(
       "consumption",
       this.geographicZoneReportMapper.getStockStatusProductConsumption(
           program, periodId, geoZoneId, getCommaSeparatedIds(productListId)));
 }
 @RequestMapping(
     value = "/facilitiesEquipmentStatusSummary",
     method = GET,
     headers = BaseController.ACCEPT_JSON)
 public ResponseEntity<OpenLmisResponse> getFacilitiesEquipmentStatusSummary(
     @RequestParam(value = "program", required = true, defaultValue = "0") Long program,
     @RequestParam(value = "zone", required = true, defaultValue = "0") Long zone,
     @RequestParam(value = "facilityType", required = true, defaultValue = "0") Long facilityType,
     @RequestParam(value = "facility", required = true, defaultValue = "0") Long facility,
     @RequestParam(value = "equipmentType", required = true, defaultValue = "0")
         Long equipmentType,
     @RequestParam(value = "equipment", required = true, defaultValue = "0") Long equipment,
     HttpServletRequest request) {
   Long userId = loggedInUserId(request);
   return OpenLmisResponse.response(
       "equipmentsStatusSummary",
       this.geographicZoneReportMapper.getFacilitiesEquipmentStatusSummary(
           program, zone, facilityType, facility, equipmentType, userId, equipment));
 }
  @RequestMapping(value = "/geo-zone-geometry", method = GET, headers = BaseController.ACCEPT_JSON)
  public ResponseEntity<OpenLmisResponse> getGeoZoneGeometryJson() {

    return OpenLmisResponse.response(
        "geoZone", this.geographicZoneReportMapper.getGeoZoneGeometryJson());
  }