/* * Electronic Logistics Management Information System (eLMIS) is a supply chain management system for health commodities in a developing country setting. * * Copyright (C) 2015 Clinton Health Access Initiative (CHAI). 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.mapper.lookup; import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Select; import org.openlmis.report.model.dto.FacilityLevelTree; import org.springframework.stereotype.Repository; import java.util.List; @Repository public interface FacilityLevelMapper { @Select("SELECT DISTINCT f.name facilityName, f.id facilityId, " + "FA.NAME superVisedFacility,FA.ID superVisedFacilityId, sN.parentId " + "FROM facilities f " + "INNER JOIN programs_supported ps ON f.id=ps.facilityId " + "INNER JOIN facility_types on f.typeId = facility_types.id " + "INNER JOIN requisition_group_members rgm ON f.id= rgm.facilityId " + "INNER JOIN requisition_group_program_schedules rgps ON (rgps.programId = ps.programId AND rgps.requisitionGroupId=rgm.requisitionGroupId)" + "INNER JOIN REQUISITION_GROUPs rg ON RG.ID = RGM.REQUISITIONGROUPID " + "INNER JOIN supervisory_nodes sN on sN.ID = RG.supervisoryNodeId " + "INNER JOIN facilities FA on sN.facilityId = FA.id " + "WHERE ps.programId = #{programId} AND facility_types.code IN ('cvs','rvs','dvs') " + "AND rgm.requisitionGroupId = ANY(#{requisitionGroupIds}::INTEGER[]) " + "AND rgps.requisitionGroupId = ANY(#{requisitionGroupIds}::INTEGER[]) " + "AND f.active = TRUE " + "AND ps.active = TRUE " + "AND f.virtualFacility = FALSE AND COALESCE(sN.parentId,0)>0 ") List<FacilityLevelTree> getFacilitiesByLevel(@Param(value = "programId") Long programId, @Param(value = "requisitionGroupIds") String requisitionGroupIds); @Select("SELECT DISTINCT f.name facilityName, f.id facilityId, " + "FA.ID superVisedFacilityId, sN.parentId " + "FROM facilities f " + "INNER JOIN programs_supported ps ON f.id=ps.facilityId " + "INNER JOIN facility_types on facility_types.id = f.typeId " + "INNER JOIN requisition_group_members rgm ON f.id= rgm.facilityId " + "INNER JOIN requisition_group_program_schedules rgps ON (rgps.programId = ps.programId AND rgps.requisitionGroupId=rgm.requisitionGroupId)" + "INNER JOIN REQUISITION_GROUPs rg ON RG.ID = RGM.REQUISITIONGROUPID " + "INNER JOIN supervisory_nodes sN on sN.ID = RG.supervisoryNodeId " + "INNER JOIN facilities FA on sN.facilityId = FA.id " + "WHERE ps.programId = #{programId} AND facility_types.code IN ('cvs','rvs','dvs') " + "AND rgm.requisitionGroupId = ANY(#{requisitionGroupIds}::INTEGER[]) " + "AND rgps.requisitionGroupId = ANY(#{requisitionGroupIds}::INTEGER[]) " + "AND f.active = TRUE " + "AND ps.active = TRUE " + "AND f.virtualFacility = FALSE ") List<FacilityLevelTree> getParentTree(@Param(value = "programId") Long programId, @Param(value = "requisitionGroupIds") String requisitionGroupIds); }