/*
* Electronic Logistics Management Information System (eLMIS) is a supply
* chain management system for health commodities in a developing country
* setting.
*
* Copyright (C) 2015 John Snow, Inc (JSI). This program was produced for
* the U.S. Agency for International Development (USAID). It was prepared
* under the USAID | DELIVER PROJECT, Task Order 4.
*
* This program is free software: you can redistribute it and/or modify it
* under the terms of the GNU Affero General Public License as published by
* the Free Software Foundation, either version 3 of the License, or (at your
* option) any later version.
*
* This program is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
* or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public
* License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package org.openlmis.report.controller;
import lombok.NoArgsConstructor;
import org.openlmis.core.utils.DateUtil;
import org.openlmis.core.web.OpenLmisResponse;
import org.openlmis.core.web.controller.BaseController;
import org.openlmis.report.mapper.RequisitionReportsMapper;
import org.openlmis.report.service.FacilityProductsReportDataProvider;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.propertyeditors.CustomDateEditor;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.WebDataBinder;
import org.springframework.web.bind.annotation.InitBinder;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import java.text.SimpleDateFormat;
import java.util.Date;
import static org.springframework.web.bind.annotation.RequestMethod.GET;
@Controller
@NoArgsConstructor
@RequestMapping(value = "/reports")
public class SimpleTableController extends BaseController {
@Autowired
private RequisitionReportsMapper requisitionReportsMapper;
@Autowired
private FacilityProductsReportDataProvider facilityProductsReportDataProvider;
@RequestMapping(value = "/requisition-report", method = GET, headers = BaseController.ACCEPT_JSON)
public ResponseEntity<OpenLmisResponse> requisitionReport(
@RequestParam (value = "startTime", required = true) Date startTime,
@RequestParam(value = "endTime", required = true) Date endTime) {
return OpenLmisResponse.response("rnr_list", requisitionReportsMapper
.getRequisitionList(startTime, endTime));
}
@RequestMapping(value = "/single-product-report", method = GET, headers = BaseController.ACCEPT_JSON)
public ResponseEntity<OpenLmisResponse> singleProductReport(
@RequestParam(value = "geographicZoneId", required = false) Long geographicZoneId,
@RequestParam(value = "productId") final Long productId,
@RequestParam(value = "endTime", required = false) final Date endTime) {
return OpenLmisResponse.response("products", facilityProductsReportDataProvider.getReportDataForSingleProduct(geographicZoneId, productId, endTime));
}
@RequestMapping(value = "/all-products-report",method = GET,headers = BaseController.ACCEPT_JSON)
public ResponseEntity<OpenLmisResponse> allProductsReport(
@RequestParam(value = "facilityId",required = true) Long facilityId,
@RequestParam(value = "endTime", required = false) final Date endTime){
return OpenLmisResponse.response("products", facilityProductsReportDataProvider.getReportDataForAllProducts(facilityId, endTime));
}
@InitBinder
public void initBinder(WebDataBinder binder) {
SimpleDateFormat dateFormat = new SimpleDateFormat(DateUtil.FORMAT_DATE_TIME);
dateFormat.setLenient(false);
binder.registerCustomEditor(Date.class, new CustomDateEditor(dateFormat, false));
}
}