@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;
  }