/**
   * Metodo que monta o modelo do grafico de consumo por dia no periodo
   *
   * @param period o periodo
   * @return o model para a view
   */
  public LineChartModel bulidDailyChart(FinancialPeriod period) {

    // lista receitas e despesas do periodo
    final List<Movement> revenues = this.getRevenuesFor(period);
    final List<Movement> expenses = this.getExpensesFor(period);

    // agrupamos pelas datas das despesas e receitas
    final List<LocalDate> payDates = this.groupPaymentDates(ListUtils.union(revenues, expenses));

    // monta o grafico de linhas
    final LineChartModel model = new LineChartModel();

    // dados de despesas
    final LineChartDatasetBuilder<BigDecimal> expensesBuilder =
        new LineChartDatasetBuilder<>()
            .filledByColor("rgba(255,153,153,0.2)")
            .withStrokeColor("rgba(255,77,77,1)")
            .withPointColor("rgba(204,0,0,1)")
            .withPointStrokeColor("#fff")
            .withPointHighlightFillColor("#fff")
            .withPointHighlightStroke("rgba(204,0,0,1)");

    // dados de receitas
    final LineChartDatasetBuilder<BigDecimal> revenuesBuilder =
        new LineChartDatasetBuilder<>()
            .filledByColor("rgba(140,217,140,0.2)")
            .withStrokeColor("rgba(51,153,51,1)")
            .withPointColor("rgba(45,134,45,1)")
            .withPointStrokeColor("#fff")
            .withPointHighlightFillColor("#fff")
            .withPointHighlightStroke("rgba(45,134,45,1)");

    // para cada data de pagamento, printa o valor no dataset
    payDates
        .stream()
        .forEach(
            payDate -> {
              model.addLabel(DateTimeFormatter.ofPattern("dd/MM").format(payDate));

              final BigDecimal expensesTotal =
                  expenses
                      .stream()
                      .filter(movement -> movement.getPaymentDate().equals(payDate))
                      .map(Movement::getValue)
                      .reduce(BigDecimal.ZERO, BigDecimal::add);

              final BigDecimal revenuesTotal =
                  revenues
                      .stream()
                      .filter(movement -> movement.getPaymentDate().equals(payDate))
                      .map(Movement::getValue)
                      .reduce(BigDecimal.ZERO, BigDecimal::add);

              expensesBuilder.andData(expensesTotal);
              revenuesBuilder.andData(revenuesTotal);
            });

    // joga os datasets no model
    model.addDataset(revenuesBuilder.build());
    model.addDataset(expensesBuilder.build());

    return model;
  }