Example #1
0
  public static Map<Serie, LocalDate> getVencimentosPorPeriodo(LocalDate inicio, LocalDate fim) {

    Map<Serie, LocalDate> vencimentos = new HashMap<Serie, LocalDate>();
    while (inicio.isBefore(fim)) {
      Serie serieAtual = getSerieAtualPorData(inicio);
      LocalDate vencimento = serieAtual.getDataVencimento(inicio);
      if (vencimento.isAfter(fim)) break;
      vencimentos.put(serieAtual, vencimento);
      inicio = inicio.plusMonths(1).withDayOfMonth(1);
    }
    return vencimentos;
  }
Example #2
0
 public LocalDate getDataVencimento(LocalDate hojeFicticio) {
   LocalDate terceiraSegundaFeira = getTerceiraSegundaFeiraDesteMes(hojeFicticio);
   Serie serieAtual = getSerieAtualPorData(hojeFicticio, terceiraSegundaFeira);
   if (this.ordinal() == serieAtual.ordinal()) {
     // se for a mesma Serie, o vencimento é a proxima 3a segunda
     if (hojeFicticio.isBefore(terceiraSegundaFeira) || hojeFicticio.equals(terceiraSegundaFeira))
       return terceiraSegundaFeira;
     // a 3a segunda deste mes ja passou, vamos para a do proximo mes
     return getTerceiraSegundaFeiraDesteMes(hojeFicticio.plusMonths(1));
   } else if (this.ordinal() == (serieAtual.ordinal() + 1) % 12) {
     // se for a próxima Serie, o vencimento é
     // a 3a segunda-feira do mes que vem, caso a
     // 3a segunda-feira deste mes ainda nao tenha
     // passado. Caso ja tenha passado, sera a 3a
     // segunda-feira daqui a 2 meses.
     int meses = (hojeFicticio.isAfter(terceiraSegundaFeira)) ? 2 : 1;
     return getTerceiraSegundaFeiraDesteMes(hojeFicticio.plusMonths(meses));
   }
   throw new IllegalArgumentException(
       "Serie nao vencera no mes atual ou no proximo para a data " + hojeFicticio);
 }
Example #3
0
 public static Serie getProximaSeriePorData(LocalDate data) {
   Serie atual = getSerieAtualPorData(data);
   return values()[(atual.ordinal() + 1) % 12];
 }