/** * Este arquivo é parte do Biblivre3. * * Biblivre3 é um software livre; você pode redistribuí-lo e/ou * modificá-lo dentro dos termos da Licença Pública Geral GNU como * publicada pela Fundação do Software Livre (FSF); na versão 3 da * Licença, ou (caso queira) qualquer versão posterior. * * Este programa é distribuído na esperança de que possa ser útil, * mas SEM NENHUMA GARANTIA; nem mesmo a garantia implícita de * MERCANTIBILIDADE OU ADEQUAÇÃO PARA UM FIM PARTICULAR. Veja a * Licença Pública Geral GNU para maiores detalhes. * * Você deve ter recebido uma cópia da Licença Pública Geral GNU junto * com este programa, Se não, veja em <http://www.gnu.org/licenses/>. * * @author Alberto Wagner <alberto@biblivre.org.br> * @author Danniel Willian <danniel@biblivre.org.br> * */ package biblivre3.circulation.reservation; import biblivre3.cataloging.bibliographic.BiblioSearchBO; import biblivre3.cataloging.bibliographic.RecordDTO; import biblivre3.circulation.CirculationBO; import biblivre3.circulation.UserDTO; import biblivre3.circulation.UserTypeDTO; import biblivre3.marcutils.Indexer; import biblivre3.marcutils.MarcUtils; import java.util.ArrayList; import java.util.Calendar; import java.util.Date; import java.util.List; import mercury.BaseBO; import org.marc4j_2_3_1.marc.Record; public class ReservationBO extends BaseBO { ReservationDAO dao; public ReservationBO() { dao = new ReservationDAO(); } public final boolean deleteExpired() { return dao.deleteExpired(); } public final ReservationDTO getById(final Integer reservationId) { return dao.getById(reservationId); } public final ReservationDTO getLastById(final Integer userId, final Integer recordSerial) { return dao.getLastById(userId, recordSerial); } public final List<ReservationDTO> getByUserId(final Integer userId) { return dao.getByUserId(userId); } public final List<ReservationDTO> getByRecordId(final Integer recordSerial) { return dao.getByRecordId(recordSerial); } public final int countReservedHoldings(final RecordDTO dto) { return this.countReservedHoldings(dto.getRecordSerial()); } public final int countReservedHoldings(final int recordSerial) { return dao.countReservedHoldings(recordSerial); } public final List<ReservationDTO> list(final UserDTO user) { List<ReservationDTO> list = dao.getByUserId(user.getUserid()); BiblioSearchBO bsbo = new BiblioSearchBO(); for (ReservationDTO dto : list) { RecordDTO rdto = null; rdto = bsbo.getById(dto.getRecordSerial()); Record record = MarcUtils.iso2709ToRecord(rdto.getIso2709()); dto.setTitle(Indexer.listOneTitle(record)); dto.setAuthor(Indexer.listPrimaryAuthor(record)); } return list; } public final List<ReservationInfoDTO> listAll() { List<ReservationDTO> search = dao.listAll(); List<ReservationInfoDTO> result = new ArrayList<ReservationInfoDTO>(); BiblioSearchBO bsbo = new BiblioSearchBO(); CirculationBO cbo = new CirculationBO(); for (ReservationDTO dto : search) { ReservationInfoDTO ridto = new ReservationInfoDTO(); ridto.setReservationSerial(dto.getReservationSerial()); ridto.setCreated(dto.getCreated()); ridto.setExpires(dto.getExpires()); ridto.setUserSerial(dto.getUserid()); ridto.setRecordSerial(dto.getRecordSerial()); RecordDTO rdto = bsbo.getById(dto.getRecordSerial()); Record record = MarcUtils.iso2709ToRecord(rdto.getIso2709()); ridto.setTitle(Indexer.listOneTitle(record)); ridto.setAuthor(Indexer.listPrimaryAuthor(record)); if (dto.getUserid() != null) { UserDTO udto = cbo.searchByUserId(dto.getUserid()); ridto.setUserName(udto.getName()); ridto.setUserEmail(udto.getEmail()); ridto.setUserPhoneNumber(udto.getTelRef1()); } result.add(ridto); } return result; } public final List<ReservationInfoDTO> listByRecordSerial(Integer recordSerial) { List<ReservationDTO> search = dao.getByRecordId(recordSerial); List<ReservationInfoDTO> result = new ArrayList<ReservationInfoDTO>(); BiblioSearchBO bsbo = new BiblioSearchBO(); CirculationBO cbo = new CirculationBO(); RecordDTO rdto = bsbo.getById(recordSerial); Record record = MarcUtils.iso2709ToRecord(rdto.getIso2709()); String title = Indexer.listOneTitle(record); String author = Indexer.listPrimaryAuthor(record); for (ReservationDTO dto : search) { ReservationInfoDTO ridto = new ReservationInfoDTO(); ridto.setReservationSerial(dto.getReservationSerial()); ridto.setCreated(dto.getCreated()); ridto.setExpires(dto.getExpires()); ridto.setUserSerial(dto.getUserid()); ridto.setRecordSerial(dto.getRecordSerial()); ridto.setTitle(title); ridto.setAuthor(author); if (dto.getUserid() != null) { UserDTO udto = cbo.searchByUserId(dto.getUserid()); ridto.setUserName(udto.getName()); ridto.setUserEmail(udto.getEmail()); ridto.setUserPhoneNumber(udto.getTelRef1()); } result.add(ridto); } return result; } public final boolean insert(final int userid, final int recordSerial) { ReservationDTO dto = new ReservationDTO(); dto.setUserid(userid); dto.setRecordSerial(recordSerial); Date now = new Date(); dto.setCreated(now); CirculationBO bo = new CirculationBO(); UserDTO udto = bo.searchByUserId(userid); UserTypeDTO utdto = bo.getUserTypeById(udto.getUserType()); Integer maxDays = utdto.getMaxReservationDays(); Calendar cal = Calendar.getInstance(); cal.setTime(now); cal.add(Calendar.DAY_OF_MONTH, maxDays != 0 ? maxDays : 7); dto.setExpires(cal.getTime()); return dao.insert(dto); } public final boolean delete(final int reservationId) { return dao.delete(reservationId); } public final boolean delete(final int userId, final int recordSerial) { return dao.delete(userId, recordSerial); } }