/* * 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.builder; import org.openlmis.report.model.params.CCEStorageCapacityReportParam; import java.util.Map; import static org.apache.ibatis.jdbc.SqlBuilder.*; public class CCEStorageCapacityQueryBuilder { public static String getData(Map params){ CCEStorageCapacityReportParam filter = (CCEStorageCapacityReportParam)params.get("filterCriteria"); BEGIN(); SELECT("facilities.id as facilityId" + ", MAX(facility_types.code) as facilityLevel" + ", facilities.name AS siteName" + ", COALESCE(SUM(equipment_cold_chain_equipments.refrigeratorcapacity),0) AS refrigeratorCapacityCurrent" + ", (select fn_cce_volume_capacity_required(facilities.id,MAX(facility_types.code))) AS refrigeratorCapacityRequired" + ", 0 AS refrigeratorCapacityGap" + ", COALESCE(SUM(equipment_cold_chain_equipments.freezercapacity),0) AS freezerCapacityCurrent" + ", 0 AS freezerCapacityRequired" + ", 0 AS freezerCapacityGap"); FROM("facilities"); JOIN("facility_types ON facility_types.id = facilities.typeid"); JOIN("equipment_inventories ON equipment_inventories.facilityid = facilities.id"); JOIN("equipments ON equipments.id = equipment_inventories.equipmentid"); JOIN("equipment_types ON equipment_types.id = equipments.equipmenttypeid AND equipment_types.iscoldchain = TRUE"); JOIN("equipment_cold_chain_equipments ON equipment_cold_chain_equipments.equipmentid = equipments.id"); writePredicates(filter); GROUP_BY("facilities.id"); return SQL(); } private static void writePredicates(CCEStorageCapacityReportParam filter) { String facilityLevel = filter.getFacilityLevel(); if (facilityLevel.isEmpty() || facilityLevel.equalsIgnoreCase("cvs") || facilityLevel.equalsIgnoreCase("rvs") || facilityLevel.equalsIgnoreCase("dvs")) { WHERE("facility_types.code = #{filterCriteria.facilityLevel}"); } else { WHERE("facility_types.code NOT IN ('cvs','rvs','dvs')"); } if (!filter.getFacilityIds().isEmpty()) { WHERE("equipment_inventories.facilityid = ANY (#{filterCriteria.facilityIds}::INT[])"); } WHERE("equipment_inventories.programid = #{filterCriteria.programId}"); } }