/** * 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(); }
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); }