@Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class) public Sale stopUndefinedInstallmentsCreation(Sale sale) throws IabakoActionForbiddenException { InstallmentsDefinition iDef = sale.getInstallmentsDefinition(); Date lastUndefinedInstallment = iDef.addNToDate( new ServerTools(), iDef.getNextUndefinedInstallment(), iDef.getInstallmentsPeriodicalFrequency(), iDef.getInstallmentsPeriodicalFrequencyN() * -1); sale.getInstallmentsDefinition().setNextUndefinedInstallment(null); sale.getInstallmentsDefinition().setStopUndefinedInstallments(new Date()); if (lastUndefinedInstallment.compareTo(iDef.getInstallmentsPeriodicalStartDate()) >= 0) { sale.getInstallmentsDefinition().setLastUndefinedInstallment(lastUndefinedInstallment); } try { return save(sale); } catch (IabakoUniqueConstraintException e) { // Should never happen log.error(e.getMessage(), e); } return sale; }