Пример #1
1
  /**
   * Bereken de prijs die een ad-hoc klant moet betalen.
   *
   * @param intijd LocalDateTime
   * @param uittijd LocalDateTime
   * @return double
   */
  public double berekenPrijs(LocalDateTime intijd, LocalDateTime uittijd) {
    // haal de benodigde informatie op
    ArrayList<TijdTarief> tijdtarief = db.getTijdTarief();
    ArrayList<TariefCat> tariefcat = db.getTariefCat();

    // maak de variabelen voor het berekenen aan
    Duration deltatijd = Duration.between(intijd, uittijd);
    Duration minus = Duration.ofMinutes(30);
    Duration zeroDuration = Duration.ZERO;

    LocalTime per30min = LocalTime.from(uittijd);

    HashMap<TariefCat, HashMap<Integer, Double>> teBetalenPerCatPerDag = new HashMap<>();
    TariefCat tmpCat = null;

    do {
      DayOfWeek dag = uittijd.getDayOfWeek();
      setDagnr(dag.getValue());

      for (TijdTarief tijd : tijdtarief) {
        if (tijd.getDagbegin() <= getDagnr()
            && getDagnr() <= tijd.getDageind()
            && per30min.isAfter(tijd.getTijdstart())
            && per30min.isBefore(tijd.getTijdeind())) {
          setCatnr(tijd.getCategorie());
        }
      }

      for (TariefCat cat : tariefcat) {
        if (cat.getDatumbegin().getYear() == uittijd.toLocalDate().getYear()
            && cat.getDatumbegin().getMonthValue() <= uittijd.toLocalDate().getMonthValue()
            && cat.getCategorie() == getCatnr()) {
          tmpCat = cat;
        }
      }
      // update te betalen per categorie per dag
      HashMap<Integer, Double> totaal =
          teBetalenPerCatPerDag.getOrDefault(tmpCat, new HashMap<Integer, Double>());
      double dagTotaal = totaal.getOrDefault(getDagnr(), 0.0);
      dagTotaal += tmpCat.getTarief();
      totaal.put(getDagnr(), dagTotaal);
      teBetalenPerCatPerDag.put(tmpCat, totaal);

      uittijd = uittijd.minus(minus);
      deltatijd = deltatijd.minus(minus);
      per30min = LocalTime.from(uittijd);

    } while (deltatijd.compareTo(zeroDuration) == 1);

    double tebetalen = 0.0;
    for (Map.Entry<TariefCat, HashMap<Integer, Double>> dagEntry :
        teBetalenPerCatPerDag.entrySet()) {
      for (Map.Entry<Integer, Double> entry : dagEntry.getValue().entrySet()) {
        if (dagEntry.getKey().getMaxtarief() > entry.getValue().doubleValue())
          tebetalen += entry.getValue();
        else tebetalen += dagEntry.getKey().getMaxtarief();
      }
    }

    BigDecimal bd = new BigDecimal(tebetalen);
    bd = bd.setScale(2, RoundingMode.HALF_UP);

    return bd.doubleValue();
  }
Пример #2
0
 public void setDate(int day, int month, int year) {
   LocalDate dateToSet = LocalDate.of(day, month, year);
   LocalTime currentTime = LocalTime.from(dateAndTime);
   dateAndTime = LocalDateTime.of(dateToSet, currentTime);
 }