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