From 2652bb630254ce6837521527aea16ce003778aa1 Mon Sep 17 00:00:00 2001 From: Robert Goldmann <deadlocker@gmx.de> Date: Sat, 8 Apr 2017 15:19:35 +0200 Subject: [PATCH] Fixed #63 , Fixed #67, preselect date -Fixed #63 - allow calculation of repeating payments for future -Fixed #67 - repeat every x days bug -preselect month and year in newPaymentUI datePicker --- .../budgetmaster/ui/NewPaymentController.java | 9 ++++++++- .../budgetmaster/ui/PaymentController.java | 12 +----------- .../budgetmasterserver/server/SparkServer.java | 6 ++++-- .../server/payment/normal/PaymentGet.java | 12 ++++++++++++ .../payment/repeating/RepeatingPaymentGetAll.java | 12 ++++++++++++ .../server/updater/RepeatingPaymentUpdater.java | 12 +++++------- 6 files changed, 42 insertions(+), 21 deletions(-) diff --git a/src/de/deadlocker8/budgetmaster/ui/NewPaymentController.java b/src/de/deadlocker8/budgetmaster/ui/NewPaymentController.java index cff145c71..deff361fd 100644 --- a/src/de/deadlocker8/budgetmaster/ui/NewPaymentController.java +++ b/src/de/deadlocker8/budgetmaster/ui/NewPaymentController.java @@ -3,6 +3,8 @@ package de.deadlocker8.budgetmaster.ui; import java.time.LocalDate; import java.util.ArrayList; +import org.joda.time.DateTime; + import de.deadlocker8.budgetmaster.logic.Category; import de.deadlocker8.budgetmaster.logic.Helpers; import de.deadlocker8.budgetmaster.logic.NormalPayment; @@ -15,6 +17,7 @@ import de.deadlocker8.budgetmaster.ui.cells.RepeatingDayCell; import de.deadlocker8.budgetmaster.ui.cells.SmallCategoryCell; import fontAwesome.FontIcon; import fontAwesome.FontIconType; +import javafx.application.Platform; import javafx.fxml.FXML; import javafx.scene.control.Alert.AlertType; import javafx.scene.control.Button; @@ -161,7 +164,11 @@ public class NewPaymentController } } }); - + //preselect correct month and year + DateTime currentDate = controller.getCurrentDate(); + datePicker.setValue(LocalDate.now().withYear(currentDate.getYear()).withMonth(currentDate.getMonthOfYear()).withDayOfMonth(currentDate.getDayOfMonth())); + Platform.runLater(()->{datePicker.getEditor().clear();}); + if(edit) { //prefill diff --git a/src/de/deadlocker8/budgetmaster/ui/PaymentController.java b/src/de/deadlocker8/budgetmaster/ui/PaymentController.java index 291ea6482..5a3009bfd 100644 --- a/src/de/deadlocker8/budgetmaster/ui/PaymentController.java +++ b/src/de/deadlocker8/budgetmaster/ui/PaymentController.java @@ -3,8 +3,6 @@ package de.deadlocker8.budgetmaster.ui; import java.io.IOException; import java.util.ArrayList; -import org.joda.time.DateTime; - import de.deadlocker8.budgetmaster.logic.Budget; import de.deadlocker8.budgetmaster.logic.Helpers; import de.deadlocker8.budgetmaster.logic.NormalPayment; @@ -241,15 +239,7 @@ public class PaymentController implements Refreshable refreshListView(); refreshCounter(); - Label labelPlaceholder; - if(controller.getCurrentDate().isAfter(DateTime.now())) - { - labelPlaceholder = new Label("Datum liegt in der Zukunft"); - } - else - { - labelPlaceholder = new Label("Keine Daten verfügbar"); - } + Label labelPlaceholder = new Label("Keine Daten verfügbar"); labelPlaceholder.setStyle("-fx-font-size: 16"); listView.setPlaceholder(labelPlaceholder); } diff --git a/src/de/deadlocker8/budgetmasterserver/server/SparkServer.java b/src/de/deadlocker8/budgetmasterserver/server/SparkServer.java index 1d645f716..d9b5163d5 100644 --- a/src/de/deadlocker8/budgetmasterserver/server/SparkServer.java +++ b/src/de/deadlocker8/budgetmasterserver/server/SparkServer.java @@ -12,6 +12,8 @@ import static spark.Spark.secure; import java.io.File; +import org.joda.time.DateTime; + import com.google.gson.Gson; import com.google.gson.GsonBuilder; @@ -75,7 +77,7 @@ public class SparkServer halt(401, "Unauthorized"); } - new RepeatingPaymentUpdater(handler).updateRepeatingPayments(); + new RepeatingPaymentUpdater(handler).updateRepeatingPayments(DateTime.now()); }); // Category @@ -105,7 +107,7 @@ public class SparkServer get("/rest", new RestGet(handler, gson)); after((request, response) -> { - new RepeatingPaymentUpdater(handler).updateRepeatingPayments(); + new RepeatingPaymentUpdater(handler).updateRepeatingPayments(DateTime.now()); }); Spark.exception(Exception.class, (exception, request, response) -> { diff --git a/src/de/deadlocker8/budgetmasterserver/server/payment/normal/PaymentGet.java b/src/de/deadlocker8/budgetmasterserver/server/payment/normal/PaymentGet.java index dcaab7e84..967cbae9f 100644 --- a/src/de/deadlocker8/budgetmasterserver/server/payment/normal/PaymentGet.java +++ b/src/de/deadlocker8/budgetmasterserver/server/payment/normal/PaymentGet.java @@ -4,10 +4,13 @@ import static spark.Spark.halt; import java.util.ArrayList; +import org.joda.time.DateTime; + import com.google.gson.Gson; import de.deadlocker8.budgetmaster.logic.NormalPayment; import de.deadlocker8.budgetmasterserver.main.DatabaseHandler; +import de.deadlocker8.budgetmasterserver.server.updater.RepeatingPaymentUpdater; import spark.Request; import spark.Response; import spark.Route; @@ -44,6 +47,15 @@ public class PaymentGet implements Route halt(400, "Bad Request"); } + //refresh repeating entries + DateTime date = DateTime.now().withYear(year).withMonthOfYear(month); + date = date.dayOfMonth().withMaximumValue(); + if(date.isBefore(DateTime.now())) + { + date = DateTime.now().dayOfMonth().withMaximumValue(); + } + new RepeatingPaymentUpdater(handler).updateRepeatingPayments(date); + try { ArrayList<NormalPayment> payments = new ArrayList<>(); diff --git a/src/de/deadlocker8/budgetmasterserver/server/payment/repeating/RepeatingPaymentGetAll.java b/src/de/deadlocker8/budgetmasterserver/server/payment/repeating/RepeatingPaymentGetAll.java index 0d1551c5b..3c053d114 100644 --- a/src/de/deadlocker8/budgetmasterserver/server/payment/repeating/RepeatingPaymentGetAll.java +++ b/src/de/deadlocker8/budgetmasterserver/server/payment/repeating/RepeatingPaymentGetAll.java @@ -4,10 +4,13 @@ import static spark.Spark.halt; import java.util.ArrayList; +import org.joda.time.DateTime; + import com.google.gson.Gson; import de.deadlocker8.budgetmaster.logic.RepeatingPaymentEntry; import de.deadlocker8.budgetmasterserver.main.DatabaseHandler; +import de.deadlocker8.budgetmasterserver.server.updater.RepeatingPaymentUpdater; import spark.Request; import spark.Response; import spark.Route; @@ -44,6 +47,15 @@ public class RepeatingPaymentGetAll implements Route halt(400, "Bad Request"); } + //refresh repeating entries + DateTime date = DateTime.now().withYear(year).withMonthOfYear(month); + date = date.dayOfMonth().withMaximumValue(); + if(date.isBefore(DateTime.now())) + { + date = DateTime.now().dayOfMonth().withMaximumValue(); + } + new RepeatingPaymentUpdater(handler).updateRepeatingPayments(date); + try { ArrayList<RepeatingPaymentEntry> payments = new ArrayList<>(); diff --git a/src/de/deadlocker8/budgetmasterserver/server/updater/RepeatingPaymentUpdater.java b/src/de/deadlocker8/budgetmasterserver/server/updater/RepeatingPaymentUpdater.java index facd9aaf1..0b7246a91 100644 --- a/src/de/deadlocker8/budgetmasterserver/server/updater/RepeatingPaymentUpdater.java +++ b/src/de/deadlocker8/budgetmasterserver/server/updater/RepeatingPaymentUpdater.java @@ -20,17 +20,16 @@ public class RepeatingPaymentUpdater this.handler = handler; } - public void updateRepeatingPayments() + public void updateRepeatingPayments(DateTime now) { try { ArrayList<RepeatingPayment> repeatingPayments = handler.getAllRepeatingPayments(); - ArrayList<LatestRepeatingPayment> latest = handler.getLatestRepeatingPaymentEntries();; + ArrayList<LatestRepeatingPayment> latest = handler.getLatestRepeatingPaymentEntries(); for(RepeatingPayment currentPayment : repeatingPayments) { - int index = latest.indexOf(currentPayment); - DateTime now = DateTime.now(); + int index = latest.indexOf(currentPayment); if(currentPayment.getRepeatEndDate() != null) { DateTime endDate = DateTime.parse(currentPayment.getRepeatEndDate()); @@ -79,8 +78,8 @@ public class RepeatingPaymentUpdater //repeat every x days if(payment.getRepeatInterval() != 0) { - int numberOfDays = Days.daysBetween(startDate, now).getDays(); - int occurrences = numberOfDays % payment.getRepeatInterval(); + int numberOfDays = Days.daysBetween(startDate, now).getDays(); + int occurrences = numberOfDays / payment.getRepeatInterval(); for(int i = 0; i <= occurrences + 1; i++) { dates.add(startDate.plusDays(i * payment.getRepeatInterval())); @@ -95,7 +94,6 @@ public class RepeatingPaymentUpdater dates.add(startDate.plusMonths(i)); } } - return dates; } } \ No newline at end of file -- GitLab