From 643e3918bb9833c8e82fb13f4d62553a4a517c7c Mon Sep 17 00:00:00 2001 From: Robert Goldmann <deadlocker@gmx.de> Date: Sun, 17 Sep 2017 12:28:36 +0200 Subject: [PATCH] #96 - added tags to reports --- .../budgetmaster/logic/report/ColumnType.java | 1 + .../logic/report/ReportGenerator.java | 2 + .../budgetmaster/logic/report/ReportItem.java | 13 ++++- .../budgetmaster/logic/tag/TagHandler.java | 52 ++++++++++++++----- .../budgetmaster/logic/utils/Strings.java | 1 + .../resources/languages/_de.properties | 1 + .../resources/languages/_en.properties | 1 + .../ui/controller/ReportController.java | 50 +++++++++++++++++- 8 files changed, 105 insertions(+), 16 deletions(-) diff --git a/src/de/deadlocker8/budgetmaster/logic/report/ColumnType.java b/src/de/deadlocker8/budgetmaster/logic/report/ColumnType.java index 313f400ce..5401e1ffb 100644 --- a/src/de/deadlocker8/budgetmaster/logic/report/ColumnType.java +++ b/src/de/deadlocker8/budgetmaster/logic/report/ColumnType.java @@ -11,6 +11,7 @@ public enum ColumnType CATEGORY(Strings.REPORT_CATEGORY, 3), NAME(Strings.REPORT_NAME, 3), DESCRIPTION(Strings.REPORT_DESCRIPTION, 3), + TAGS(Strings.REPORT_TAGS, 3), RATING(Strings.REPORT_RATING, 1), AMOUNT(Strings.REPORT_AMOUNT, 2); diff --git a/src/de/deadlocker8/budgetmaster/logic/report/ReportGenerator.java b/src/de/deadlocker8/budgetmaster/logic/report/ReportGenerator.java index 7bcd09a4d..87cf2a616 100644 --- a/src/de/deadlocker8/budgetmaster/logic/report/ReportGenerator.java +++ b/src/de/deadlocker8/budgetmaster/logic/report/ReportGenerator.java @@ -268,6 +268,8 @@ public class ReportGenerator return DateTime.parse(reportItem.getDate(), DateTimeFormat.forPattern("YYYY-MM-dd")).toString("dd.MM.YYYY"); case DESCRIPTION: return reportItem.getDescription(); + case TAGS: + return reportItem.getTags(); case NAME: return reportItem.getName(); case POSITION: diff --git a/src/de/deadlocker8/budgetmaster/logic/report/ReportItem.java b/src/de/deadlocker8/budgetmaster/logic/report/ReportItem.java index 65d9bc8b0..c26a6e4f6 100644 --- a/src/de/deadlocker8/budgetmaster/logic/report/ReportItem.java +++ b/src/de/deadlocker8/budgetmaster/logic/report/ReportItem.java @@ -10,6 +10,7 @@ public class ReportItem private Category category; private String name; private String description; + private String tags; private boolean repeating; public ReportItem() @@ -75,6 +76,16 @@ public class ReportItem public void setDescription(String description) { this.description = description; + } + + public String getTags() + { + return tags; + } + + public void setTags(String tags) + { + this.tags = tags; } public boolean getRepeating() @@ -90,6 +101,6 @@ public class ReportItem @Override public String toString() { - return "ReportItem [position=" + position + ", amount=" + amount + ", date=" + date + ", category=" + category + ", name=" + name + ", description=" + description + ", isRepeating=" + repeating + "]"; + return "ReportItem [position=" + position + ", amount=" + amount + ", date=" + date + ", category=" + category + ", name=" + name + ", description=" + description + ", tags=" + tags + ", repeating=" + repeating + "]"; } } \ No newline at end of file diff --git a/src/de/deadlocker8/budgetmaster/logic/tag/TagHandler.java b/src/de/deadlocker8/budgetmaster/logic/tag/TagHandler.java index a82853ee7..6ea0b5a8f 100644 --- a/src/de/deadlocker8/budgetmaster/logic/tag/TagHandler.java +++ b/src/de/deadlocker8/budgetmaster/logic/tag/TagHandler.java @@ -2,28 +2,52 @@ package de.deadlocker8.budgetmaster.logic.tag; import java.util.ArrayList; +import de.deadlocker8.budgetmaster.logic.Settings; +import de.deadlocker8.budgetmaster.logic.payment.NormalPayment; +import de.deadlocker8.budgetmaster.logic.payment.Payment; +import de.deadlocker8.budgetmaster.logic.payment.RepeatingPaymentEntry; +import de.deadlocker8.budgetmaster.logic.serverconnection.ServerTagConnection; + public class TagHandler { - private ArrayList<Tag> tags; - - public TagHandler() + private Settings settings; + + public TagHandler(Settings settings) { - this.tags = new ArrayList<>(); + this.settings = settings; } - public ArrayList<Tag> getTags() + public ArrayList<Tag> getTags(Payment payment) throws Exception { + ArrayList<Tag> tags = new ArrayList<>(); + + ServerTagConnection connection = new ServerTagConnection(settings); + + if(payment instanceof NormalPayment) + { + tags.addAll(connection.getAllTagsForPayment((NormalPayment)payment)); + } + else + { + tags.addAll(connection.getAllTagsForRepeatingPayment(((RepeatingPaymentEntry)payment).getRepeatingPaymentID())); + } + return tags; } - - public void setTags(ArrayList<Tag> tags) - { - this.tags = tags; - } - - @Override - public String toString() + + public String getTagsAsString(Payment payment) throws Exception { - return "TagHandler [tags=" + tags + "]"; + ArrayList<Tag> tags = getTags(payment); + StringBuilder sb = new StringBuilder(); + for(int i = 0; i < tags.size(); i++) + { + sb.append(tags.get(i).getName()); + if(i != tags.size()-1) + { + sb.append(", "); + } + } + + return sb.toString(); } } \ No newline at end of file diff --git a/src/de/deadlocker8/budgetmaster/logic/utils/Strings.java b/src/de/deadlocker8/budgetmaster/logic/utils/Strings.java index ff0d0d00b..06a0419cd 100644 --- a/src/de/deadlocker8/budgetmaster/logic/utils/Strings.java +++ b/src/de/deadlocker8/budgetmaster/logic/utils/Strings.java @@ -73,6 +73,7 @@ public class Strings public static final String REPORT_CATEGORY = "report.category"; public static final String REPORT_NAME = "report.name"; public static final String REPORT_DESCRIPTION = "report.description"; + public static final String REPORT_TAGS = "report.tags"; public static final String REPORT_RATING = "report.rating"; public static final String REPORT_AMOUNT = "report.amount"; public static final String REPORT_HEADLINE = "report.headline"; diff --git a/src/de/deadlocker8/budgetmaster/resources/languages/_de.properties b/src/de/deadlocker8/budgetmaster/resources/languages/_de.properties index 47e6bcb32..f02059656 100644 --- a/src/de/deadlocker8/budgetmaster/resources/languages/_de.properties +++ b/src/de/deadlocker8/budgetmaster/resources/languages/_de.properties @@ -70,6 +70,7 @@ report.repeating=Wiederholend report.category=Kategorie report.name=Name report.description=Notiz +report.tags=Tags report.rating=+/- report.amount=Betrag report.headline=Monatsbericht - {0} diff --git a/src/de/deadlocker8/budgetmaster/resources/languages/_en.properties b/src/de/deadlocker8/budgetmaster/resources/languages/_en.properties index c8cb26959..44043f556 100644 --- a/src/de/deadlocker8/budgetmaster/resources/languages/_en.properties +++ b/src/de/deadlocker8/budgetmaster/resources/languages/_en.properties @@ -70,6 +70,7 @@ report.repeating=Repeating report.category=Category report.name=Name report.description=Description +report.tags=Tags report.rating=+/- report.amount=Amount report.headline=Month Report - {0} diff --git a/src/de/deadlocker8/budgetmaster/ui/controller/ReportController.java b/src/de/deadlocker8/budgetmaster/ui/controller/ReportController.java index 46f9665bf..be2ba945b 100644 --- a/src/de/deadlocker8/budgetmaster/ui/controller/ReportController.java +++ b/src/de/deadlocker8/budgetmaster/ui/controller/ReportController.java @@ -25,6 +25,7 @@ import de.deadlocker8.budgetmaster.logic.report.ReportGenerator; import de.deadlocker8.budgetmaster.logic.report.ReportItem; import de.deadlocker8.budgetmaster.logic.report.ReportPreferences; import de.deadlocker8.budgetmaster.logic.report.ReportSorting; +import de.deadlocker8.budgetmaster.logic.tag.TagHandler; import de.deadlocker8.budgetmaster.logic.utils.Colors; import de.deadlocker8.budgetmaster.logic.utils.FileHelper; import de.deadlocker8.budgetmaster.logic.utils.Helpers; @@ -89,6 +90,7 @@ public class ReportController implements Refreshable, Styleable private TableColumn<ReportItem, String> columnCategory; private TableColumn<ReportItem, Integer> columnName; private TableColumn<ReportItem, String> columnDescription; + private TableColumn<ReportItem, String> columnTags; private TableColumn<ReportItem, Integer> columnRating; private TableColumn<ReportItem, String> columnAmount; @@ -176,6 +178,15 @@ public class ReportController implements Refreshable, Styleable tableView.getSortOrder().add(columnIsRepeating); } break; + case TAGS: + initColumnTags(activated); + toggleColumn(columnTags, activated); + if(sortType != null) + { + columnTags.setSortType(sortType); + tableView.getSortOrder().add(columnTags); + } + break; default: break; } @@ -393,6 +404,31 @@ public class ReportController implements Refreshable, Styleable columnDescription.setGraphic(hboxColumnDescription); tableView.getColumns().add(columnDescription); } + + private void initColumnTags(boolean activated) + { + columnTags = new TableColumn<>(); + columnTags.setUserData(ColumnType.TAGS); + columnTags.setCellValueFactory(new PropertyValueFactory<ReportItem, String>("tags")); + columnTags.setStyle("-fx-alignment: CENTER;"); + + HBox hboxColumnTags = new HBox(); + hboxColumnTags.setAlignment(Pos.CENTER); + hboxColumnTags.setSpacing(3); + + CheckBox checkBoxTags = new CheckBox(); + hboxColumnTags.getChildren().add(checkBoxTags); + + Label labelColumnTags = new Label(Localization.getString(Strings.REPORT_TAGS)); + hboxColumnTags.getChildren().add(labelColumnTags); + + checkBoxTags.selectedProperty().addListener((a, b, c)->{ + toggleColumn(columnTags, c); + }); + checkBoxTags.setSelected(activated); + columnTags.setGraphic(hboxColumnTags); + tableView.getColumns().add(columnTags); + } private void initColumnRating(boolean activated) { @@ -487,6 +523,8 @@ public class ReportController implements Refreshable, Styleable private ArrayList<ReportItem> createReportItems(ArrayList<Payment> payments) { ArrayList<ReportItem> reportItems = new ArrayList<>(); + TagHandler tagHander = new TagHandler(controller.getSettings()); + for(int i = 0; i < payments.size(); i++) { Payment currentPayment = payments.get(i); @@ -494,10 +532,20 @@ public class ReportController implements Refreshable, Styleable reportItem.setPosition(i + 1); reportItem.setDate(currentPayment.getDate()); reportItem.setAmount(currentPayment.getAmount()); - reportItem.setDescription(currentPayment.getDescription()); reportItem.setName(currentPayment.getName()); + reportItem.setDescription(currentPayment.getDescription()); reportItem.setRepeating(currentPayment instanceof RepeatingPaymentEntry); reportItem.setCategory(controller.getCategoryHandler().getCategory(currentPayment.getCategoryID())); + + try + { + reportItem.setTags(tagHander.getTagsAsString(currentPayment)); + } + catch(Exception e) + { + Logger.error(e); + controller.showConnectionErrorAlert(Localization.getString(Strings.ERROR_SERVER_CONNECTION_WITH_DETAILS)); + } reportItems.add(reportItem); } -- GitLab