From 5e4ec00f6d838efcac64698a462f7771d1d7e225 Mon Sep 17 00:00:00 2001 From: Robert Goldmann <deadlocker@gmx.de> Date: Sun, 12 Mar 2017 12:43:25 +0100 Subject: [PATCH] implemented CategoryBudgets --- .../budgetmaster/logic/Helpers.java | 46 +++++++++++++ .../budgetmaster/logic/ServerConnection.java | 28 +------- .../deadlocker8/budgetmaster/main/Main.java | 2 +- .../budgetmaster/ui/Controller.java | 8 ++- .../deadlocker8/budgetmaster/ui/HomeTab.fxml | 10 ++- .../main/DatabaseHandler.java | 49 +------------- .../server/SparkServer.java | 4 -- .../categorybudget/CategoryBudgetGet.java | 65 ------------------- 8 files changed, 63 insertions(+), 149 deletions(-) delete mode 100644 src/de/deadlocker8/budgetmasterserver/server/categorybudget/CategoryBudgetGet.java diff --git a/src/de/deadlocker8/budgetmaster/logic/Helpers.java b/src/de/deadlocker8/budgetmaster/logic/Helpers.java index a3761e796..2f72888eb 100644 --- a/src/de/deadlocker8/budgetmaster/logic/Helpers.java +++ b/src/de/deadlocker8/budgetmaster/logic/Helpers.java @@ -5,6 +5,10 @@ import java.net.URLEncoder; import java.text.DecimalFormat; import java.time.LocalDate; import java.time.format.DateTimeFormatter; +import java.util.ArrayList; +import java.util.Collections; +import java.util.Comparator; +import java.util.Iterator; public class Helpers { @@ -31,4 +35,46 @@ public class Helpers DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd"); return date.format(formatter); } + + public static ArrayList<CategoryBudget> getCategoryBudgets(CategoryHandler categoryHandler, ArrayList<Payment> payments) + { + ArrayList<CategoryBudget> budgets = new ArrayList<>(); + + for(Category currentCategory : categoryHandler.getCategories()) + { + budgets.add(new CategoryBudget(currentCategory.getName(), currentCategory.getColor(), 0)); + CategoryBudget currentBudget = budgets.get(budgets.size() - 1); + for(Payment currentPayment : payments) + { + //filter rest + if(currentCategory.getID() != 2) + { + if(currentCategory.getID() == currentPayment.getCategoryID()) + { + currentBudget.setBudget(currentBudget.getBudget() + currentPayment.getAmount()); + } + } + } + } + + //filter empty categories + Iterator<CategoryBudget> iterator = budgets.iterator(); + while(iterator.hasNext()) + { + if(iterator.next().getBudget() == 0) + { + iterator.remove(); + } + } + + Collections.sort(budgets, new Comparator<CategoryBudget>() { + @Override + public int compare(CategoryBudget budget1, CategoryBudget budget2) + { + return Double.compare(budget1.getBudget(), budget2.getBudget()); + } + }); + + return budgets; + } } \ No newline at end of file diff --git a/src/de/deadlocker8/budgetmaster/logic/ServerConnection.java b/src/de/deadlocker8/budgetmaster/logic/ServerConnection.java index 0ce98e44d..f7e9f6e43 100644 --- a/src/de/deadlocker8/budgetmaster/logic/ServerConnection.java +++ b/src/de/deadlocker8/budgetmaster/logic/ServerConnection.java @@ -128,33 +128,7 @@ public class ServerConnection BufferedReader reader = new BufferedReader(new InputStreamReader(stream)); reader.close(); } - - /* - * CategoryBudget - */ - @Deprecated - public ArrayList<CategoryBudget> getCategoryBudgets(int year, int month) throws Exception - { - URL url = new URL(settings.getUrl() + "/categorybudget?secret=" + Helpers.getURLEncodedString(settings.getSecret()) + "&year=" + year + "&month=" + month); - HttpsURLConnection httpsCon = (HttpsURLConnection)url.openConnection(); - httpsCon.setDoOutput(true); - httpsCon.setRequestMethod("GET"); - - if(httpsCon.getResponseCode() == HttpsURLConnection.HTTP_OK) - { - String result = Read.getStringFromInputStream(httpsCon.getInputStream()); - // required by GSON - Type listType = new TypeToken<ArrayList<CategoryBudget>>() - { - }.getType(); - return gson.fromJson(result, listType); - } - else - { - return null; - } - } - + /* * Payment */ diff --git a/src/de/deadlocker8/budgetmaster/main/Main.java b/src/de/deadlocker8/budgetmaster/main/Main.java index 7ebbcc8cb..de459fc72 100644 --- a/src/de/deadlocker8/budgetmaster/main/Main.java +++ b/src/de/deadlocker8/budgetmaster/main/Main.java @@ -28,7 +28,7 @@ public class Main extends Application FXMLLoader loader = new FXMLLoader(getClass().getClassLoader().getResource("de/deadlocker8/budgetmaster/ui/GUI.fxml")); Parent root = (Parent)loader.load(); - Scene scene = new Scene(root, 600, 600); + Scene scene = new Scene(root, 600, 650); ((Controller)loader.getController()).init(stage); diff --git a/src/de/deadlocker8/budgetmaster/ui/Controller.java b/src/de/deadlocker8/budgetmaster/ui/Controller.java index 9cfea20fe..8d7c3ed43 100644 --- a/src/de/deadlocker8/budgetmaster/ui/Controller.java +++ b/src/de/deadlocker8/budgetmaster/ui/Controller.java @@ -11,6 +11,7 @@ import org.joda.time.DateTime; import de.deadlocker8.budgetmaster.logic.CategoryBudget; import de.deadlocker8.budgetmaster.logic.CategoryHandler; +import de.deadlocker8.budgetmaster.logic.Helpers; import de.deadlocker8.budgetmaster.logic.NormalPayment; import de.deadlocker8.budgetmaster.logic.Payment; import de.deadlocker8.budgetmaster.logic.ServerConnection; @@ -260,8 +261,7 @@ public class Controller implements Refreshable { try { - ServerConnection connection = new ServerConnection(settings); - categoryBudgets = connection.getCategoryBudgets(currentDate.getYear(), currentDate.getMonthOfYear()); + ServerConnection connection = new ServerConnection(settings); payments = new ArrayList<>(); payments.addAll(connection.getPayments(currentDate.getYear(), currentDate.getMonthOfYear())); @@ -278,9 +278,11 @@ public class Controller implements Refreshable int rest = connection.getRestForAllPreviousMonths(currentDate.getYear(), currentDate.getMonthOfYear()); //categoryID 2 = Rest payments.add(new NormalPayment(-1, rest, currentDate.withDayOfMonth(1).toString("yyyy-MM-dd"), 2, "Übertrag")); - } + } categoryHandler = new CategoryHandler(connection.getCategories()); + + categoryBudgets = Helpers.getCategoryBudgets(categoryHandler, payments); } catch(Exception e) { diff --git a/src/de/deadlocker8/budgetmaster/ui/HomeTab.fxml b/src/de/deadlocker8/budgetmaster/ui/HomeTab.fxml index a94b2d9e2..2af758091 100644 --- a/src/de/deadlocker8/budgetmaster/ui/HomeTab.fxml +++ b/src/de/deadlocker8/budgetmaster/ui/HomeTab.fxml @@ -23,10 +23,18 @@ </font> </Label> <ProgressBar fx:id="progressBar" prefHeight="18.0" prefWidth="380.0" progress="0.68" /> - <ListView fx:id="listView" prefHeight="200.0" prefWidth="200.0" VBox.vgrow="ALWAYS"> + <Label text="Verbrauch nach Kategorien"> + <font> + <Font name="System Bold" size="16.0" /> + </font> <VBox.margin> <Insets top="25.0" /> </VBox.margin> + </Label> + <ListView fx:id="listView" prefHeight="200.0" prefWidth="200.0" VBox.vgrow="ALWAYS"> + <VBox.margin> + <Insets /> + </VBox.margin> </ListView> </children> </VBox> diff --git a/src/de/deadlocker8/budgetmasterserver/main/DatabaseHandler.java b/src/de/deadlocker8/budgetmasterserver/main/DatabaseHandler.java index 25018a33b..1edd1a699 100644 --- a/src/de/deadlocker8/budgetmasterserver/main/DatabaseHandler.java +++ b/src/de/deadlocker8/budgetmasterserver/main/DatabaseHandler.java @@ -12,7 +12,6 @@ import org.joda.time.format.DateTimeFormat; import org.joda.time.format.DateTimeFormatter; import de.deadlocker8.budgetmaster.logic.Category; -import de.deadlocker8.budgetmaster.logic.CategoryBudget; import de.deadlocker8.budgetmaster.logic.LatestRepeatingPayment; import de.deadlocker8.budgetmaster.logic.NormalPayment; import de.deadlocker8.budgetmaster.logic.Payment; @@ -245,55 +244,9 @@ public class DatabaseHandler return result; } - - @Deprecated - public ArrayList<CategoryBudget> getCategoryBudget(int year, int month) - { -// String date = String.valueOf(year) + "-" + String.format("%02d", month) + "-"; -// Statement stmt = null; -// String query = "SELECT q.cat_name AS \"Name\", q.cat_col AS \"Color\", SUM(q.amoun) AS \"Amount\" FROM (SELECT Payment.CategoryID as \"cat_ID\", Category.Name as \"cat_name\", Category.Color as \"cat_col\", Payment.Amount AS \"amoun\" FROM Payment, Category WHERE Payment.CategoryID = Category.ID AND (YEAR(Date) = " -// + year + " AND MONTH(Date) = " + month + " AND RepeatMonthDay = 0 OR RepeatMonthDay != 0 AND CONCAT('" + date + "', RepeatMonthDay) >= Date AND RepeatEndDate IS NULL OR RepeatMonthDay != 0 AND CONCAT('" + date + "', RepeatMonthDay) >= Date AND CONCAT('" + date -// + "', RepeatMonthDay) <= RepeatEndDate OR RepeatInterval != 0 AND DATEDIFF(NOW(), Date ) % RepeatInterval = 0 AND RepeatEndDate IS NULL OR RepeatInterval != 0 AND DATEDIFF(NOW(), Date ) % RepeatInterval = 0 AND RepeatEndDate IS NOT NULL AND DATEDIFF(RepeatEndDate, NOW()) > 0)GROUP BY Payment.ID) as q GROUP BY q.cat_ID ORDER BY SUM(q.amoun) DESC"; -// ArrayList<CategoryBudget> results = new ArrayList<>(); -// try -// { -// stmt = connection.createStatement(); -// ResultSet rs = stmt.executeQuery(query); -// -// while(rs.next()) -// { -// String name = rs.getString("Name"); -// String color = rs.getString("Color"); -// int amount = rs.getInt("Amount"); -// -// results.add(new CategoryBudget(name, Color.web(color), amount)); -// } -// } -// catch(SQLException e) -// { -// Logger.error(e); -// } -// finally -// { -// if(stmt != null) -// { -// try -// { -// stmt.close(); -// } -// catch(SQLException e) -// { -// } -// } -// } -// -// return results; - return null; - } - + public NormalPayment getPayment(int ID) { - //TODO query Statement stmt = null; String query = "SELECT * FROM Payment WHERE Payment.ID= " + ID; try diff --git a/src/de/deadlocker8/budgetmasterserver/server/SparkServer.java b/src/de/deadlocker8/budgetmasterserver/server/SparkServer.java index 83c6b649f..735dcbdd4 100644 --- a/src/de/deadlocker8/budgetmasterserver/server/SparkServer.java +++ b/src/de/deadlocker8/budgetmasterserver/server/SparkServer.java @@ -27,7 +27,6 @@ import de.deadlocker8.budgetmasterserver.server.category.CategoryDelete; import de.deadlocker8.budgetmasterserver.server.category.CategoryGet; import de.deadlocker8.budgetmasterserver.server.category.CategoryGetAll; import de.deadlocker8.budgetmasterserver.server.category.CategoryUpdate; -import de.deadlocker8.budgetmasterserver.server.categorybudget.CategoryBudgetGet; import de.deadlocker8.budgetmasterserver.server.payment.normal.PaymentAdd; import de.deadlocker8.budgetmasterserver.server.payment.normal.PaymentDelete; import de.deadlocker8.budgetmasterserver.server.payment.normal.PaymentGet; @@ -100,9 +99,6 @@ public class SparkServer put("/category", new CategoryUpdate(handler)); delete("/category", new CategoryDelete(handler)); - // CategoryBudget - get("/categorybudget", new CategoryBudgetGet(handler, gson)); - // Payment // Normal get("/payment", new PaymentGet(handler, gson)); diff --git a/src/de/deadlocker8/budgetmasterserver/server/categorybudget/CategoryBudgetGet.java b/src/de/deadlocker8/budgetmasterserver/server/categorybudget/CategoryBudgetGet.java deleted file mode 100644 index c6e752a9a..000000000 --- a/src/de/deadlocker8/budgetmasterserver/server/categorybudget/CategoryBudgetGet.java +++ /dev/null @@ -1,65 +0,0 @@ -package de.deadlocker8.budgetmasterserver.server.categorybudget; - -import static spark.Spark.halt; - -import java.util.ArrayList; - -import com.google.gson.Gson; - -import de.deadlocker8.budgetmaster.logic.CategoryBudget; -import de.deadlocker8.budgetmasterserver.main.DatabaseHandler; -import spark.Request; -import spark.Response; -import spark.Route; - -public class CategoryBudgetGet implements Route -{ - private DatabaseHandler handler; - private Gson gson; - - public CategoryBudgetGet(DatabaseHandler handler, Gson gson) - { - this.handler = handler; - this.gson = gson; - } - - @Override - public Object handle(Request req, Response res) throws Exception - { - if(!req.queryParams().contains("year") || !req.queryParams().contains("month")) - { - halt(400, "Bad Request"); - } - - int year = 0; - int month = 0; - - try - { - year = Integer.parseInt(req.queryMap("year").value()); - month = Integer.parseInt(req.queryMap("month").value()); - - if(year < 0 || month < 1 || month > 12) - { - halt(400, "Bad Request"); - } - - try - { - ArrayList<CategoryBudget> categories = handler.getCategoryBudget(year, month); - - return gson.toJson(categories); - } - catch(IllegalStateException ex) - { - halt(500, "Internal Server Error"); - } - } - catch(Exception e) - { - halt(400, "Bad Request"); - } - - return null; - } -} \ No newline at end of file -- GitLab