org.openlmis.report.controller.ReportLookupController.java Source code

Java tutorial

Introduction

Here is the source code for org.openlmis.report.controller.ReportLookupController.java

Source

/*
 * 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.apache.ibatis.session.RowBounds;
import org.openlmis.core.domain.ProcessingPeriod;
import org.openlmis.core.domain.SupervisoryNode;
import org.openlmis.core.service.FacilityService;
import org.openlmis.core.service.ProcessingScheduleService;
import org.openlmis.core.service.SupervisoryNodeService;
import org.openlmis.core.web.OpenLmisResponse;
import org.openlmis.core.web.controller.BaseController;
import org.openlmis.equipment.domain.Donor;
import org.openlmis.equipment.domain.Equipment;
import org.openlmis.report.model.dto.*;
import org.openlmis.report.model.report.OrderFillRateSummaryReport;
import org.openlmis.report.service.lookup.ReportLookupService;
import org.openlmis.report.util.InteractiveReportPeriodFilterParser;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
import org.springframework.util.LinkedMultiValueMap;
import org.springframework.util.MultiValueMap;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;

import javax.servlet.http.HttpServletRequest;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import static org.springframework.web.bind.annotation.RequestMethod.GET;

@Controller
@NoArgsConstructor
@RequestMapping(value = "/reports")
public class ReportLookupController extends BaseController {

    public static final String USER_ID = "USER_ID";

    public static final String OPEN_LMIS_OPERATION_YEARS = "years";
    public static final String OPEN_LMIS_OPERATION_MONTHS = "months";
    public static final String PROGRAMS = "programs";
    public static final String SCHEDULES = "schedules";
    public static final String FACILITY_TYPES = "facilityTypes";
    public static final String FACILITY_LEVELS = "facilityLevels";
    public static final String REGIMEN_CATEGORIES = "regimenCategories";
    public static final String GEOGRAPHIC_LEVELS = "geographicLevels";
    public static final String REGIMENS = "regimens";
    public static final String ZONES = "zones";
    public static final String ZONE = "zone";
    public static final String PRODUCT_FORMS = "productForms";
    public static final String DOSAGE_UNITS = "dosageUnits";
    public static final String PRODUCT_GROUPS = "productGroups";
    public static final String ALL_FACILITIES = "allFacilities";
    public static final String FACILITIES = "facilities";
    public static final String PERIODS = "periods";
    public static final String SUPERVISORY_NODES = "supervisoryNodes";
    public static final String USER_ROLE_ASSIGNMENTS = "userRoleAssignments";
    public static final String USER_ROLE_ASSIGNMENT_SUMMARY = "userRoleAssignmentSummary";
    public static final String EQUIPMENT_TYPES = "equipmentTypes";
    public static final String EQUIPMENTS = "equipments";
    public static final String PRODUCT_CATEGORY_TREE = "productCategoryTree";
    public static final String YEAR_SCHEDULE_PERIOD = "yearSchedulePeriod";
    public static final String VACCINE_PERIODS = "vaccinePeriods";
    public static final String DONORS = "donors";
    public static final String TIMELINESS_DATA = "timelinessData";
    public static final String TIMELINESS_STATUS_DATA = "timelinessStatusData";
    public static final String REPORTING_DATES = "reportingDates";
    public static final String LAST_PERIODS = "lastPeriods";

    @Autowired
    private ReportLookupService reportLookupService;
    @Autowired
    private FacilityService facilityService;

    @Autowired
    private ProcessingScheduleService processingScheduleService;

    @Autowired
    private SupervisoryNodeService supervisoryNodeService;

    @RequestMapping(value = "/programs", method = GET, headers = BaseController.ACCEPT_JSON)
    public ResponseEntity<OpenLmisResponse> getPrograms() {
        return OpenLmisResponse.response(PROGRAMS, this.reportLookupService.getAllPrograms());
    }

    @RequestMapping(value = "/user-programs", method = GET, headers = BaseController.ACCEPT_JSON)
    public ResponseEntity<OpenLmisResponse> getPrograms(HttpServletRequest request) {
        return OpenLmisResponse.response(PROGRAMS,
                this.reportLookupService.getAllPrograms(loggedInUserId(request)));
    }

    //It Get only programs with regimens
    @RequestMapping(value = "/programs-supporting-regimen", method = GET, headers = BaseController.ACCEPT_JSON)
    public ResponseEntity<OpenLmisResponse> getRegimenPrograms() {
        return OpenLmisResponse.response(PROGRAMS, this.reportLookupService.getAllRegimenPrograms());
    }

    @RequestMapping(value = "/programs-supporting-budget", method = GET, headers = BaseController.ACCEPT_JSON)
    public ResponseEntity<OpenLmisResponse> getProgramsWithBudgetingApplies() {
        return OpenLmisResponse.response(PROGRAMS, this.reportLookupService.getAllProgramsWithBudgeting());
    }

    @RequestMapping(value = "/schedules", method = GET, headers = BaseController.ACCEPT_JSON)
    public ResponseEntity<OpenLmisResponse> getSchedules() {
        return OpenLmisResponse.response(SCHEDULES, this.reportLookupService.getAllSchedules());
    }

    @RequestMapping(value = "/schedules-by-program", method = GET, headers = BaseController.ACCEPT_JSON)
    public ResponseEntity<OpenLmisResponse> getSchedulesByProgram(
            @RequestParam(value = "program", required = true, defaultValue = "0") long program) {
        return OpenLmisResponse.response(SCHEDULES, this.reportLookupService.getSchedulesByProgram(program));
    }

    @RequestMapping(value = "/facilityTypes", method = GET, headers = BaseController.ACCEPT_JSON)
    public ResponseEntity<OpenLmisResponse> getFacilityTypes() {
        return OpenLmisResponse.response(FACILITY_TYPES, this.reportLookupService.getFacilityTypes());
    }

    @RequestMapping(value = "/facilityTypesForProgram", method = GET, headers = BaseController.ACCEPT_JSON)
    public ResponseEntity<OpenLmisResponse> getFacilityTypesForProgram(@RequestParam("program") Long programId) {
        return OpenLmisResponse.response(FACILITY_TYPES,
                this.reportLookupService.getFacilityTypesForProgram(programId));
    }

    @RequestMapping(value = "/facility-levels", method = GET, headers = BaseController.ACCEPT_JSON)
    public ResponseEntity<OpenLmisResponse> getFacilityLevels(@RequestParam("program") Long programId,
            HttpServletRequest request) {
        return OpenLmisResponse.response(FACILITY_LEVELS,
                this.reportLookupService.getFacilityLevels(programId, loggedInUserId(request)));
    }

    @RequestMapping(value = "/regimenCategories", method = GET, headers = BaseController.ACCEPT_JSON)
    public ResponseEntity<OpenLmisResponse> getAllRegimenCategory() {
        return OpenLmisResponse.response(REGIMEN_CATEGORIES, this.reportLookupService.getAllRegimenCategory());
    }

    @RequestMapping(value = "/geographicLevels", method = GET, headers = BaseController.ACCEPT_JSON)
    public ResponseEntity<OpenLmisResponse> getAllGeographicLevels() {
        return OpenLmisResponse.response(GEOGRAPHIC_LEVELS, this.reportLookupService.getAllGeographicLevels());
    }

    @RequestMapping(value = "/products.json", method = GET, headers = BaseController.ACCEPT_JSON)
    public List<Product> getProducts() {
        return this.reportLookupService.getAllProducts();
    }

    @RequestMapping(value = "/regiments", method = GET, headers = ACCEPT_JSON)
    public ResponseEntity<OpenLmisResponse> getAllRegimens() {
        return OpenLmisResponse.response(REGIMENS, this.reportLookupService.getAllRegimens());
    }

    @RequestMapping(value = "/regimenCategories/{regimenCategoryId}/regimens", method = GET, headers = ACCEPT_JSON)
    public ResponseEntity<OpenLmisResponse> getRegimensByCategory(
            @PathVariable("regimenCategoryId") Long regimenCategoryId) {

        List<Regimen> regimenList = reportLookupService.getRegimenByCategory(regimenCategoryId);
        return OpenLmisResponse.response(REGIMENS, regimenList);
    }

    @RequestMapping(value = "/geographicLevels/{geographicLevelId}/zones", method = GET, headers = ACCEPT_JSON)
    public ResponseEntity<OpenLmisResponse> getGeographicZones(
            @PathVariable("geographicLevelId") Long geographicLevelId) {
        List<GeographicZone> geographicZoneList = reportLookupService.getGeographicLevelById(geographicLevelId);

        return OpenLmisResponse.response(ZONES, geographicZoneList);
    }

    @RequestMapping(value = "/geographic-zones/flat", method = GET, headers = ACCEPT_JSON)
    public ResponseEntity<OpenLmisResponse> getFlatGeographicZones() {
        List<FlatGeographicZone> geographicZoneList = reportLookupService.getFlatGeographicZoneList();

        return OpenLmisResponse.response(ZONES, geographicZoneList);
    }

    @RequestMapping(value = "/geographic-zones/tree", method = GET, headers = ACCEPT_JSON)
    public ResponseEntity<OpenLmisResponse> getGeographicZoneTree(HttpServletRequest request) {
        GeoZoneTree geoZoneTree = reportLookupService.getGeoZoneTree(loggedInUserId(request));

        return OpenLmisResponse.response(ZONE, geoZoneTree);
    }

    @RequestMapping(value = "/geographic-zones/tree-program", method = GET, headers = ACCEPT_JSON)
    public ResponseEntity<OpenLmisResponse> getGeographicZoneTreeByProgram(
            @RequestParam(value = "program", required = true, defaultValue = "0") long program,
            HttpServletRequest request) {
        GeoZoneTree geoZoneTree = reportLookupService.getGeoZoneTree(loggedInUserId(request), program);

        return OpenLmisResponse.response(ZONE, geoZoneTree);
    }

    @RequestMapping(value = "/supervisory-node/user-unassigned-node", method = GET, headers = ACCEPT_JSON)
    public ResponseEntity<OpenLmisResponse> getTotalUnassignedSupervisoryNode(
            @RequestParam(value = "program", required = true, defaultValue = "0") long program,
            HttpServletRequest request) {
        Long unassignedSupervisoryNodes = supervisoryNodeService
                .getTotalUnassignedSupervisoryNodeOfUserBy(loggedInUserId(request), program);

        return OpenLmisResponse.response("supervisory_nodes", unassignedSupervisoryNodes);
    }

    @RequestMapping(value = "/program-products/{programId}.json", method = GET, headers = BaseController.ACCEPT_JSON)
    public List<Product> getProgramProducts(@PathVariable("programId") Long programId) {
        return this.reportLookupService.getProductsActiveUnderProgram(programId);
    }

    @RequestMapping(value = "/push-program/products", method = GET, headers = ACCEPT_JSON)
    public ResponseEntity<OpenLmisResponse> getPushProgramProducts() {
        return OpenLmisResponse.response("products", reportLookupService.getPushProgramProducts());
    }

    @RequestMapping(value = "/products_by_category", method = GET, headers = BaseController.ACCEPT_JSON)
    public List<Product> getProductsByCategory(
            @RequestParam(value = "category", required = true, defaultValue = "0") int category,
            @RequestParam(value = "program", required = true, defaultValue = "0") int programId) {
        return this.reportLookupService.getProductListByCategory(programId, category);
    }

    @RequestMapping(value = "/rgroups", method = GET, headers = BaseController.ACCEPT_JSON)
    public List<RequisitionGroup> getRequisitionGroups() {
        return this.reportLookupService.getAllRequisitionGroups();
    }

    @RequestMapping(value = "/reporting_groups_by_program", method = GET, headers = BaseController.ACCEPT_JSON)
    public List<RequisitionGroup> getRequisitionGroupsByProgram(
            @RequestParam(value = "program", required = true, defaultValue = "1") int program) {
        return this.reportLookupService.getRequisitionGroupsByProgram(program);
    }

    @RequestMapping(value = "/reporting_groups_by_program_schedule", method = GET, headers = BaseController.ACCEPT_JSON)
    public List<RequisitionGroup> getRequisitionGroupsByProgramSchedule(
            @RequestParam(value = "program", required = true, defaultValue = "1") int program,
            @RequestParam(value = "schedule", required = true, defaultValue = "10") int schedule) {
        return this.reportLookupService.getRequisitionGroupsByProgramAndSchedule(program, schedule);
    }

    @RequestMapping(value = "/productCategories", method = GET, headers = BaseController.ACCEPT_JSON)
    public List<ProductCategory> getProductCategories() {
        return this.reportLookupService.getAllProductCategories();
    }

    @RequestMapping(value = "/programs/{programId}/productCategories.json", method = GET, headers = BaseController.ACCEPT_JSON)
    public List<ProductCategory> getProductCategoriesForPrograms(@PathVariable(value = "programId") int programId) {
        return this.reportLookupService.getCategoriesForProgram(programId);
    }

    @RequestMapping(value = "/adjustmentTypes", method = GET, headers = BaseController.ACCEPT_JSON)
    public List<AdjustmentType> getAdjustmentTypes() {
        return this.reportLookupService.getAllAdjustmentTypes();
    }

    @RequestMapping(value = "/operationYears", method = GET, headers = BaseController.ACCEPT_JSON)
    public Map getOperationYears() {
        MultiValueMap operationPeriods = new LinkedMultiValueMap<>();
        operationPeriods.put(OPEN_LMIS_OPERATION_YEARS, reportLookupService.getOperationYears());

        return operationPeriods;
    }

    @RequestMapping(value = "/months", method = GET, headers = BaseController.ACCEPT_JSON)
    public Map getAllMonths() {
        MultiValueMap months = new LinkedMultiValueMap<>();
        months.put(OPEN_LMIS_OPERATION_MONTHS, reportLookupService.getAllMonths());

        return months;
    }

    @RequestMapping(value = "/geographicZones", method = GET, headers = BaseController.ACCEPT_JSON)
    public ResponseEntity<OpenLmisResponse> getAllGeographicZones() {
        return OpenLmisResponse.response(ZONES, reportLookupService.getAllZones());
    }

    @RequestMapping(value = "/productForms", method = GET, headers = BaseController.ACCEPT_JSON)
    public ResponseEntity<OpenLmisResponse> getAllProductForms() {
        return OpenLmisResponse.response(PRODUCT_FORMS, reportLookupService.getAllProductForm());
    }

    @RequestMapping(value = "/dosageUnits", method = GET, headers = BaseController.ACCEPT_JSON)
    public ResponseEntity<OpenLmisResponse> getDosageUnits() {
        return OpenLmisResponse.response(DOSAGE_UNITS, reportLookupService.getDosageUnits());
    }

    @RequestMapping(value = "/productGroups", method = GET, headers = BaseController.ACCEPT_JSON)
    public ResponseEntity<OpenLmisResponse> getAllProductGroups() {
        return OpenLmisResponse.response(PRODUCT_GROUPS, reportLookupService.getAllProductGroups());
    }

    @RequestMapping(value = "/allFacilities", method = GET, headers = BaseController.ACCEPT_JSON)
    public ResponseEntity<OpenLmisResponse> getAllFacilities() {
        return OpenLmisResponse.response(ALL_FACILITIES, reportLookupService
                .getAllFacilities(new RowBounds(RowBounds.NO_ROW_OFFSET, RowBounds.NO_ROW_LIMIT)));
    }

    @RequestMapping(value = "/facilities", method = GET, headers = BaseController.ACCEPT_JSON)
    public ResponseEntity<OpenLmisResponse> getFacilities(@RequestParam("program") Long program,
            @RequestParam("schedule") Long schedule,
            @RequestParam(value = "type", defaultValue = "0L", required = false) Long type,
            @RequestParam(value = "requisitionGroup", defaultValue = "0L", required = false) Long requisitionGroup,
            @RequestParam(value = ZONE, defaultValue = "0L", required = false) Long zone, HttpServletRequest request

    ) {
        // set default for optional parameters
        // turns out spring's optional parameter and default config is not cutting it.
        type = (type != null) ? type : 0L;
        requisitionGroup = (requisitionGroup != null) ? requisitionGroup : 0L;

        return OpenLmisResponse.response(FACILITIES, reportLookupService.getFacilities(program, schedule, type,
                requisitionGroup, zone, loggedInUserId(request)));
    }

    @RequestMapping(value = "/facilitiesByType/{facilityTypeId}.json", method = GET, headers = BaseController.ACCEPT_JSON)
    public ResponseEntity<OpenLmisResponse> getFacilitiesByFacilityType(

            @PathVariable("facilityTypeId") Long type,

            HttpServletRequest request

    ) {
        // set default for optional parameters
        // turns out spring's optional parameter and default config is not cutting it.
        type = (type != null) ? type : 0L;

        return OpenLmisResponse.response(FACILITIES, reportLookupService.getFacilities(type));
    }

    @RequestMapping(value = "/facilitiesByType", method = GET, headers = BaseController.ACCEPT_JSON)
    public ResponseEntity<OpenLmisResponse> getProgramFacilitiesList(

            HttpServletRequest request

    ) {

        long userId = this.loggedInUserId(request);

        return OpenLmisResponse.response(FACILITIES,
                reportLookupService.getFacilities(request.getParameterMap(), userId));
    }

    @RequestMapping(value = "/user/facilities", method = GET, headers = BaseController.ACCEPT_JSON)
    public ResponseEntity<OpenLmisResponse> getSupervisedFacilities(HttpServletRequest request) {
        return OpenLmisResponse.response(FACILITIES,
                facilityService.getForUserAndRights(loggedInUserId(request), "VIEW_REQUISITION"));
    }

    @RequestMapping(value = "/geographic-zone/facilities", method = GET, headers = BaseController.ACCEPT_JSON)
    public ResponseEntity<OpenLmisResponse> getFacilities(@RequestParam("zoneId") Long zoneId,
            @RequestParam("programId") Long programId, HttpServletRequest request) {
        return OpenLmisResponse.response(FACILITIES,
                reportLookupService.getFacilityByGeographicZoneTree(loggedInUserId(request), zoneId, programId));
    }

    @RequestMapping(value = "/geographic-zone/{geoId}/facilities", method = GET, headers = BaseController.ACCEPT_JSON)
    public ResponseEntity<OpenLmisResponse> getFacilities(@PathVariable("geoId") Long zoneId,
            HttpServletRequest request) {
        return OpenLmisResponse.response(FACILITIES,
                reportLookupService.getFacilityByGeographicZone(loggedInUserId(request), zoneId));
    }

    @RequestMapping(value = "notification/facilities", method = GET, headers = BaseController.ACCEPT_JSON)
    public ResponseEntity<OpenLmisResponse> getFacilitiesForNotifications(@RequestParam("zoneId") Long zoneId,
            HttpServletRequest request) {
        return OpenLmisResponse.response(FACILITIES,
                reportLookupService.getFacilitiesForNotifications(loggedInUserId(request), zoneId));
    }

    @RequestMapping(value = "/user/geographic-zones/tree", method = GET, headers = ACCEPT_JSON)
    public ResponseEntity<OpenLmisResponse> getUserGeographicZoneTree(@RequestParam("programId") Long programId,
            HttpServletRequest request) {
        GeoZoneTree geoZoneTree = reportLookupService.getGeoZoneTree(loggedInUserId(request), programId);

        return OpenLmisResponse.response(ZONE, geoZoneTree);
    }

    @RequestMapping(value = "/schedules/{scheduleId}/periods", method = GET, headers = ACCEPT_JSON)
    public ResponseEntity<OpenLmisResponse> getAll(@PathVariable("scheduleId") Long scheduleId) {
        List<ProcessingPeriod> periodList = processingScheduleService.getAllPeriods(scheduleId);
        return OpenLmisResponse.response(PERIODS, periodList);
    }

    @RequestMapping(value = "/schedules/{scheduleId}/year/{year}/periods", method = GET, headers = ACCEPT_JSON)
    public ResponseEntity<OpenLmisResponse> getPeriodsByScheduleAndYear(@PathVariable("scheduleId") Long scheduleId,
            @PathVariable("year") Long year) {
        List<ProcessingPeriod> periodList = processingScheduleService.getAllPeriodsForScheduleAndYear(scheduleId,
                year);
        return OpenLmisResponse.response(PERIODS, periodList);
    }

    @RequestMapping(value = "/allPeriods", method = GET, headers = ACCEPT_JSON)
    public ResponseEntity<OpenLmisResponse> getAllPeriods() {
        List<org.openlmis.report.model.dto.ProcessingPeriod> periodList = reportLookupService
                .getAllProcessingPeriods();
        return OpenLmisResponse.response(PERIODS, periodList);
    }

    @RequestMapping(value = "/periods", method = GET, headers = ACCEPT_JSON)
    public ResponseEntity<OpenLmisResponse> getFilteredPeriods(HttpServletRequest request) {

        Date startDate = InteractiveReportPeriodFilterParser.getStartDateFilterValue(request.getParameterMap());
        Date endDate = InteractiveReportPeriodFilterParser.getEndDateFilterValue(request.getParameterMap());

        List<org.openlmis.report.model.dto.ProcessingPeriod> periodList = reportLookupService
                .getFilteredPeriods(startDate, endDate);

        return OpenLmisResponse.response(PERIODS, periodList);
    }

    @RequestMapping(value = "/user/programs", method = GET, headers = BaseController.ACCEPT_JSON)
    public ResponseEntity<OpenLmisResponse> getAllUserSupervisedActivePrograms(HttpServletRequest request) {

        List<Program> programList = reportLookupService.getAllUserSupervisedActivePrograms(loggedInUserId(request));
        return OpenLmisResponse.response(PROGRAMS, programList);
    }

    @RequestMapping(value = "/users/{userId}/programs", method = GET, headers = BaseController.ACCEPT_JSON)
    public ResponseEntity<OpenLmisResponse> getAllSupervisedActiveProgramsForUser(
            @PathVariable("userId") Long userId) {

        List<Program> programList = reportLookupService.getAllUserSupervisedActivePrograms(userId);
        return OpenLmisResponse.response(PROGRAMS, programList);
    }

    @RequestMapping(value = "/supervisory-node/{supervisoryNodeId}/programs", method = GET, headers = BaseController.ACCEPT_JSON)
    public ResponseEntity<OpenLmisResponse> getProgramsForSupervisoryNode(
            @PathVariable("supervisoryNodeId") Long supervisoryNodeId, HttpServletRequest request) {

        List<Program> programList = reportLookupService
                .getUserSupervisedActiveProgramsBySupervisoryNode(loggedInUserId(request), supervisoryNodeId);
        return OpenLmisResponse.response(PROGRAMS, programList);
    }

    @RequestMapping(value = "/user/supervisory-nodes", method = GET, headers = BaseController.ACCEPT_JSON)
    public ResponseEntity<OpenLmisResponse> getUserSupervisoryNodes(HttpServletRequest request) {
        List<SupervisoryNode> supervisoryNodes = reportLookupService
                .getAllSupervisoryNodesByUserHavingActiveProgram(loggedInUserId(request));
        return OpenLmisResponse.response(SUPERVISORY_NODES, supervisoryNodes);
    }

    @RequestMapping(value = "/roles/{roleId}/program/{programId}/supevisoryNode/{supervisoryNodeId}", method = GET, headers = ACCEPT_JSON)
    public ResponseEntity<OpenLmisResponse> getUserRoleAssignments(@PathVariable("roleId") Long roleId,
            @PathVariable("programId") Long programId, @PathVariable("supervisoryNodeId") Long supervisoryNodeId) {
        List<UserRoleAssignmentsReport> userRoleAssignments = reportLookupService
                .getAllRolesBySupervisoryNodeHavingProgram(roleId, programId, supervisoryNodeId);

        return OpenLmisResponse.response(USER_ROLE_ASSIGNMENTS, userRoleAssignments);
    }

    @RequestMapping(value = "UserRoleAssignments/getUserRoleAssignments", method = GET, headers = BaseController.ACCEPT_JSON)
    public ResponseEntity<OpenLmisResponse> getUserRoleAssignments(HttpServletRequest request) {
        List<UserRoleAssignmentsReport> userSummaryList = reportLookupService
                .getUserRoleAssignments(request.getParameterMap());
        return OpenLmisResponse.response(USER_ROLE_ASSIGNMENT_SUMMARY, userSummaryList);
    }

    @RequestMapping(value = "/equipmentTypes", method = GET, headers = BaseController.ACCEPT_JSON)
    public ResponseEntity<OpenLmisResponse> getEquipmentType() {
        List<EquipmentType> equipmentTypeList = reportLookupService.getEquipmentTypes();

        return OpenLmisResponse.response(EQUIPMENT_TYPES, equipmentTypeList);
    }

    @RequestMapping(value = "/equipmentsByType/{equipmentType}", method = GET, headers = BaseController.ACCEPT_JSON)
    public ResponseEntity<OpenLmisResponse> getEquipmentByType(@PathVariable("equipmentType") Long equipmentType) {
        List<Equipment> equipments = reportLookupService.getEquipmentsByType(equipmentType);
        return OpenLmisResponse.response(EQUIPMENTS, equipments);
    }

    @RequestMapping(value = "/productProgramCategoryTree/{programId}", method = GET, headers = BaseController.ACCEPT_JSON)
    public ResponseEntity<OpenLmisResponse> getProductCategoryProductByProgramId(
            @PathVariable("programId") int programId) {

        List<ProductCategoryProductTree> categoryProductTree = reportLookupService
                .getProductCategoryProductByProgramId(programId);

        return OpenLmisResponse.response(PRODUCT_CATEGORY_TREE, categoryProductTree);
    }

    @RequestMapping(value = "/yearSchedulePeriod", method = GET, headers = BaseController.ACCEPT_JSON)
    public ResponseEntity<OpenLmisResponse> getScheduleYearPeriod() {

        List<YearSchedulePeriodTree> yearSchedulePeriodTree = reportLookupService.getYearSchedulePeriodTree();

        return OpenLmisResponse.response(YEAR_SCHEDULE_PERIOD, yearSchedulePeriodTree);
    }

    @RequestMapping(value = "/vaccineYearSchedulePeriod", method = GET, headers = BaseController.ACCEPT_JSON)
    public ResponseEntity<OpenLmisResponse> getVaccineScheduleYearPeriod() {

        List<YearSchedulePeriodTree> yearSchedulePeriodTree = reportLookupService
                .getVaccineYearSchedulePeriodTree();

        Long currentPeriodId = reportLookupService.getCurrentPeriodIdForVaccine();
        Map<String, Object> data = new HashMap<>(2);
        data.put("currentPeriodId", currentPeriodId);
        data.put(PERIODS, yearSchedulePeriodTree);

        return OpenLmisResponse.response(VACCINE_PERIODS, data);
    }

    @RequestMapping(value = "/OrderFillRateSummary/program/{programId}/period/{periodId}/schedule/{scheduleId}/facilityTypeId/{facilityTypeId}/zone/{zoneId}/status/{status}/orderFillRateSummary", method = GET, headers = BaseController.ACCEPT_JSON)
    public ResponseEntity<OpenLmisResponse> getOrderFillRateSummaryData(@PathVariable("programId") Long programId,
            @PathVariable("periodId") Long periodId, @PathVariable("scheduleId") Long scheduleId,
            @PathVariable("facilityTypeId") Long facilityTypeId, @PathVariable("zoneId") Long zoneId,
            @PathVariable("status") String status, HttpServletRequest request) {
        List<OrderFillRateSummaryReport> orderFillRateReportSummaryList = reportLookupService
                .getOrderFillRateSummary(programId, periodId, scheduleId, facilityTypeId, loggedInUserId(request),
                        zoneId, status);
        return OpenLmisResponse.response("orderFillRateSummary", orderFillRateReportSummaryList);
    }

    @RequestMapping(value = "/donors", method = GET, headers = BaseController.ACCEPT_JSON)

    public ResponseEntity<OpenLmisResponse> getDonorsList() {
        List<Donor> donors = reportLookupService.getAllDonors();
        return OpenLmisResponse.response(DONORS, donors);
    }

    @RequestMapping(value = "/user/supervised/facilities", method = GET, headers = BaseController.ACCEPT_JSON)
    public ResponseEntity<OpenLmisResponse> getUserSupervisedFacilities(HttpServletRequest request) {
        return OpenLmisResponse.response(FACILITIES,
                facilityService.getUserSupervisedFacilities(loggedInUserId(request)));
    }

    @RequestMapping(value = "/timelinessStatusData/timelinessData", method = GET, headers = BaseController.ACCEPT_JSON)
    public ResponseEntity<OpenLmisResponse> getTimelinessStatusData(@RequestParam("programId") Long programId,
            @RequestParam("periodId") Long periodId, @RequestParam("scheduleId") Long scheduleId,
            @RequestParam("zoneId") Long zoneId, @RequestParam("status") String status,
            HttpServletRequest request) {
        return OpenLmisResponse.response(TIMELINESS_DATA,
                reportLookupService.getTimelinessStatusData(programId, periodId, scheduleId, zoneId, status));
    }

    @RequestMapping(value = "/timelinessStatusData/getFacilityRnRStatusData", method = GET, headers = BaseController.ACCEPT_JSON)
    public ResponseEntity<OpenLmisResponse> getFacilityTimelinessData(@RequestParam("programId") Long programId,
            @RequestParam("periodId") Long periodId, @RequestParam("scheduleId") Long scheduleId,
            @RequestParam("zoneId") Long zoneId, @RequestParam("status") String status,
            @RequestParam("facilityIds") String facilityIds,

            HttpServletRequest request) {
        return OpenLmisResponse.response(TIMELINESS_STATUS_DATA, reportLookupService
                .getFacilityRnRStatusData(programId, periodId, scheduleId, zoneId, status, facilityIds));
    }

    @RequestMapping(value = "/reportingDates/getTimelinessReportingDates", method = GET, headers = BaseController.ACCEPT_JSON)
    public ResponseEntity<OpenLmisResponse> getTimelinessReportingDates(@RequestParam("periodId") Long periodId,
            HttpServletRequest request) {
        return OpenLmisResponse.response(REPORTING_DATES,
                reportLookupService.getTimelinessReportingDates(periodId));
    }

    @RequestMapping(value = "/rmnch-products.json", method = GET, headers = BaseController.ACCEPT_JSON)
    public List<Product> getRmnchProducts() {
        return this.reportLookupService.getRmnchProducts();
    }

    @RequestMapping(value = "/last-periods.json", method = GET, headers = BaseController.ACCEPT_JSON)
    public ResponseEntity<OpenLmisResponse> getLastPeriods(@RequestParam("programId") Long programId) {
        return OpenLmisResponse.response(LAST_PERIODS, this.reportLookupService.getLastPeriods(programId));
    }

    @RequestMapping(value = "/facility-By-level", method = GET, headers = BaseController.ACCEPT_JSON)
    public ResponseEntity<OpenLmisResponse> getFacilityByLevel(@RequestParam("program") Long programId,
            HttpServletRequest request) {
        List<FacilityLevelTree> facilityLevelTrees = reportLookupService.getFacilityByLevel(programId,
                loggedInUserId(request));
        return OpenLmisResponse.response(FACILITY_LEVELS, facilityLevelTrees);

    }

}