diff --git a/src/de/deadlocker8/budgetmaster/logic/report/ColumnType.java b/src/de/deadlocker8/budgetmaster/logic/report/ColumnType.java index 313f400cee9784d5483e9fd0d8f11fca3be23902..5401e1ffbd82e4c39ba02803e3f3944c7646ae3f 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 7bcd09a4d98c24979b7556dbb7c881ce2a3719d7..87cf2a616c0bece2b71068166d1b8dece2744be3 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 65d9bc8b0c88674d64b1ab2b9e4ff034cf955b90..c26a6e4f6a0c93ccdb0bf935b59ecaa56fe24871 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 a82853ee7ca705209e1c6d1636edfe87967a9395..6ea0b5a8f66ef75e9d793912c78d345dd3f2f5b7 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 ff0d0d00bf64eacd665216289b3fb4c8cec33db5..06a0419cd16a62835ddeda8ed0ec1fc6d3069207 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 47e6bcb32c01adcf18a5bd3b0c977522c6f861f7..f0205965630a2d181eede40e7fac8f4ed488514b 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 c8cb26959e359919927bd97dcbaaed1eaafed534..44043f5565b72a6646cbc529e4414abad1e93429 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 46f9665bfcedc594ebf520b88f565091efe13e30..be2ba945b634e6550799e6d97a7bfcbec1be36e6 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); }