/**
* 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.lending;
import biblivre3.circulation.CirculationBO;
import biblivre3.circulation.UserDTO;
import biblivre3.circulation.UserTypeDTO;
import biblivre3.config.Config;
import biblivre3.config.ConfigurationEnum;
import biblivre3.utils.DateUtils;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
import mercury.BaseBO;
/**
*
* @author Danniel Nascimento (dannielwillian@biblivre.org.br)
* @since 23/03/2009
*/
public class LendingFineBO extends BaseBO {
private LendingFineDAO dao;
public LendingFineBO() {
try {
dao = new LendingFineDAO();
} catch (Exception e) {
log.error(e.getMessage(), e);
}
}
/**
* Creates the Fine in the Database.
*
*
* @param user
* @param history
* @return
*/
public final LendingFineDTO createFine(final UserDTO user, final LendingHistoryDTO history, final String value, final boolean paid) {
final LendingFineDTO fine = new LendingFineDTO();
float fineValue = 0.0f;
try {
fineValue = Float.valueOf(value.replaceAll("\\.", ",").replaceAll(",", "\\."));
} catch (NumberFormatException nfe) {
}
fine.setUserSerial(user.getUserid());
fine.setLendingHistorySerial(history.getSerial());
fine.setValue(fineValue);
if (paid) {
fine.setPayment(new Date());
}
dao.insert(fine);
return fine;
}
/**
*
* @param user
* @param lendDate
* @return
*/
public final Float calculateFineValue(final Integer daysLate) {
if (daysLate == null || daysLate <= 0) {
return 0.0f;
}
String fineAmout = Config.getConfigProperty(ConfigurationEnum.FINE_AMOUNT);
fineAmout = fineAmout.replaceAll("\\.", ",").replaceAll(",", "\\.");
return daysLate * Float.valueOf(fineAmout);
}
/**
*
* @param user
* @param lendDate
* @return
*/
public final Integer getDaysLate(final Date expectedReturnDate) {
Integer diff = DateUtils.dateDiff(expectedReturnDate, new Date());
return (diff < 0) ? 0 : diff;
}
public final boolean isLateReturn(final LendingDTO lending) {
final Date expectedReturnDate = lending.getReturnDate();
return this.getDaysLate(expectedReturnDate) > 0;
}
/**
*
* @param user
* @param lendDate
* @return
*/
public final Date getExpectedReturnDate(final UserDTO user, final Date lendDate) {
final CirculationBO bo = new CirculationBO();
final UserTypeDTO type = bo.getUserTypeById(user.getUserType());
final Integer maxDays = type.getMaxLendingDays();
return DateUtils.add(lendDate, Calendar.DATE, maxDays);
}
/**
*
* @param user
* @return
*/
public final List<LendingFineDTO> listLendingFines(final UserDTO user) {
return dao.list(user, false);
}
public final List<LendingFineDTO> listLendingFines(final UserDTO user, final boolean hidePaid) {
return dao.list(user, hidePaid);
}
public final LendingFineDTO getByHistoryId(final Integer historyId) {
return dao.getByHistoryId(historyId);
}
/**
*
* @param serial
* @return
*/
public final LendingFineDTO getById(final Integer serial) {
return dao.getById(serial);
}
public final boolean update(final LendingFineDTO fine) {
return dao.update(fine);
}
}