/* * This program is part of the OpenLMIS logistics management information system platform software. * Copyright © 2013 VillageReach * * 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.  For additional information contact info@OpenLMIS.org.  */ package org.openlmis.core.repository.mapper; import org.apache.ibatis.annotations.*; import org.openlmis.core.domain.RequisitionGroupProgramSchedule; import org.springframework.stereotype.Repository; import java.util.List; /** * RequisitionGroupProgramScheduleMapper maps the RequisitionGroupProgramSchedule mapping entity to corresponding * representation in database. */ @Repository public interface RequisitionGroupProgramScheduleMapper { @Insert("INSERT INTO requisition_group_program_schedules" + "(requisitionGroupId, programId, scheduleId, directDelivery, dropOffFacilityId, createdBy, modifiedBy, modifiedDate) " + "VALUES(#{requisitionGroup.id}, #{program.id}, #{processingSchedule.id}, #{directDelivery}, #{dropOffFacility.id}, #{createdBy}, #{createdBy}, COALESCE(#{modifiedDate}, CURRENT_TIMESTAMP))") @Options(useGeneratedKeys = true) Integer insert(RequisitionGroupProgramSchedule requisitionGroupProgramSchedule); @Select("SELECT programId FROM requisition_group_program_schedules WHERE requisitionGroupId = #{requisitionGroupId}") List<Long> getProgramIDsById(Long requisitionGroupId); @Select( "SELECT * FROM requisition_group_program_schedules WHERE requisitionGroupId = #{requisitionGroupId} AND programId = #{programId}") @Results(value = { @Result(property = "program.id", column = "programId"), @Result(property = "processingSchedule.id", column = "scheduleId"), @Result(property = "requisitionGroup.id", column = "requisitionGroupId"), @Result(property = "dropOffFacility.id", column = "dropOffFacilityId") }) RequisitionGroupProgramSchedule getScheduleForRequisitionGroupIdAndProgramId( @Param(value = "requisitionGroupId") Long requisitionGroupId, @Param(value = "programId") Long programId); @Select({"SELECT rgps.* FROM requisition_group_program_schedules rgps", "INNER JOIN Programs p ON rgps.programId = p.id", "INNER JOIN Requisition_Groups rg ON rgps.requisitionGroupId = rg.id", "WHERE LOWER(rg.code) = LOWER(#{requisitionGroupCode}) AND", "LOWER(p.code) = LOWER(#{programCode})"}) @Results(value = { @Result(property = "program.id", column = "programId"), @Result(property = "processingSchedule.id", column = "scheduleId"), @Result(property = "requisitionGroup.id", column = "requisitionGroupId"), @Result(property = "dropOffFacility.id", column = "dropOffFacilityId") }) RequisitionGroupProgramSchedule getScheduleForRequisitionGroupCodeAndProgramCode( @Param(value = "requisitionGroupCode") String requisitionGroupCode, @Param(value = "programCode") String programCode); @Update({"UPDATE requisition_group_program_schedules SET", "programId = #{program.id}, scheduleId = #{processingSchedule.id}, directDelivery = #{directDelivery},", "dropOffFacilityId = #{dropOffFacility.id}, modifiedBy = #{modifiedBy},", "modifiedDate = (COALESCE(#{modifiedDate}, NOW()))", "WHERE id = #{id}"}) void update(RequisitionGroupProgramSchedule requisitionGroupProgramSchedule); @Select({"SELECT * FROM requisition_group_program_schedules WHERE requisitionGroupId = #{requisitionGroupId}"}) @Results(value = { @Result(property = "requisitionGroup.id", column = "requisitionGroupId"), @Result(property = "program", column = "programId", javaType = Long.class, one = @One(select = "org.openlmis.core.repository.mapper.ProgramMapper.getById")), @Result(property = "processingSchedule", column = "scheduleId", javaType = Long.class, one = @One(select = "org.openlmis.core.repository.mapper.ProcessingScheduleMapper.get")), @Result(property = "dropOffFacility", column = "dropOffFacilityId", javaType = Long.class, one = @One(select = "org.openlmis.core.repository.mapper.FacilityMapper.getLWById")) }) List<RequisitionGroupProgramSchedule> getByRequisitionGroupId(Long requisitionGroupId); @Delete({"DELETE FROM requisition_group_program_schedules WHERE requisitionGroupId = #{requisitionGroupId}"}) void deleteRequisitionGroupProgramSchedulesFor(Long requisitionGroupId); }