@Override
  public void generateDailyReports() {
    DateTimeFormatter formatter = DateTimeFormat.forPattern(EbodacConstants.REPORT_DATE_FORMAT);

    Config config = configService.getConfig();

    if (config.getGenerateReports() != null && config.getGenerateReports()) {
      String lastCalculationDate = config.getLastCalculationDate();
      String calculationStartDate = config.getFirstCalculationStartDate();

      LocalDate startDate;

      if (StringUtils.isNotBlank(lastCalculationDate)) {
        startDate = LocalDate.parse(lastCalculationDate, formatter).plusDays(1);
      } else if (StringUtils.isNotBlank(calculationStartDate)) {
        startDate = LocalDate.parse(calculationStartDate, formatter);
      } else {
        startDate = subjectService.findOldestPrimerVaccinationDate();
      }

      updateBoosterVaccinationReportsForDates(
          reportUpdateService.getBoosterVaccinationReportsToUpdate());
      updatePrimerVaccinationReportsForDates(
          reportUpdateService.getPrimerVaccinationReportsToUpdate());

      generateDailyReportsFromDate(startDate);

      config = configService.getConfig();
      config.setGenerateReports(false);
      config.setLastCalculationDate(DateUtil.now().minusDays(1).toString(formatter));
      configService.updateConfig(config);
    }
  }