diff --git a/src/main/java/de/deadlocker8/budgetmaster/authentication/User.java b/src/main/java/de/deadlocker8/budgetmaster/authentication/User.java index fe6df24d614f0b2d22c076dea276601a574142c1..0781ae4ab2ab2b2331eaeffcc797bc88ebc65a29 100644 --- a/src/main/java/de/deadlocker8/budgetmaster/authentication/User.java +++ b/src/main/java/de/deadlocker8/budgetmaster/authentication/User.java @@ -1,6 +1,6 @@ package de.deadlocker8.budgetmaster.authentication; -import de.deadlocker8.budgetmaster.entities.Account; +import de.deadlocker8.budgetmaster.entities.account.Account; import javax.persistence.*; import javax.validation.constraints.NotNull; diff --git a/src/main/java/de/deadlocker8/budgetmaster/controller/AccountController.java b/src/main/java/de/deadlocker8/budgetmaster/controller/AccountController.java index 373701e24f5ff2b9a0c0188003af11d61531e5f1..cf8d42317741058026b926ba38dd040926574efe 100644 --- a/src/main/java/de/deadlocker8/budgetmaster/controller/AccountController.java +++ b/src/main/java/de/deadlocker8/budgetmaster/controller/AccountController.java @@ -1,7 +1,7 @@ package de.deadlocker8.budgetmaster.controller; -import de.deadlocker8.budgetmaster.entities.Account; -import de.deadlocker8.budgetmaster.entities.AccountType; +import de.deadlocker8.budgetmaster.entities.account.Account; +import de.deadlocker8.budgetmaster.entities.account.AccountType; import de.deadlocker8.budgetmaster.repositories.AccountRepository; import de.deadlocker8.budgetmaster.services.AccountService; import de.deadlocker8.budgetmaster.utils.ResourceNotFoundException; @@ -12,7 +12,6 @@ import org.springframework.ui.Model; import org.springframework.validation.BindingResult; import org.springframework.validation.FieldError; import org.springframework.web.bind.annotation.*; -import org.springframework.web.servlet.mvc.support.RedirectAttributes; import javax.servlet.http.HttpServletRequest; diff --git a/src/main/java/de/deadlocker8/budgetmaster/controller/CategoryController.java b/src/main/java/de/deadlocker8/budgetmaster/controller/CategoryController.java index a4bb5e5dfab31f15ee0a31afca797980cbeb6d82..b9a26510eb7119f915465985c79898443cefed9f 100644 --- a/src/main/java/de/deadlocker8/budgetmaster/controller/CategoryController.java +++ b/src/main/java/de/deadlocker8/budgetmaster/controller/CategoryController.java @@ -1,7 +1,7 @@ package de.deadlocker8.budgetmaster.controller; -import de.deadlocker8.budgetmaster.entities.Category; -import de.deadlocker8.budgetmaster.entities.CategoryType; +import de.deadlocker8.budgetmaster.entities.category.Category; +import de.deadlocker8.budgetmaster.entities.category.CategoryType; import de.deadlocker8.budgetmaster.repositories.CategoryRepository; import de.deadlocker8.budgetmaster.services.CategoryService; import de.deadlocker8.budgetmaster.services.HelpersService; diff --git a/src/main/java/de/deadlocker8/budgetmaster/controller/ReportController.java b/src/main/java/de/deadlocker8/budgetmaster/controller/ReportController.java index 5935d9e87a00eb80ebcb17408660d592c1243c44..dd4812e619bcfcddfaa61b37f5e2ff99f29b44cc 100644 --- a/src/main/java/de/deadlocker8/budgetmaster/controller/ReportController.java +++ b/src/main/java/de/deadlocker8/budgetmaster/controller/ReportController.java @@ -1,8 +1,11 @@ package de.deadlocker8.budgetmaster.controller; -import de.deadlocker8.budgetmaster.reports.ReportSettings; +import de.deadlocker8.budgetmaster.entities.report.ReportColumn; +import de.deadlocker8.budgetmaster.entities.report.ReportSettings; import de.deadlocker8.budgetmaster.repositories.SettingsRepository; import de.deadlocker8.budgetmaster.services.HelpersService; +import de.deadlocker8.budgetmaster.services.report.ReportColumnService; +import de.deadlocker8.budgetmaster.services.report.ReportSettingsService; import org.joda.time.DateTime; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; @@ -20,6 +23,12 @@ public class ReportController extends BaseController @Autowired private SettingsRepository settingsRepository; + @Autowired + private ReportSettingsService reportSettingsService; + + @Autowired + private ReportColumnService reportColumnService; + @Autowired private HelpersService helpers; @@ -28,22 +37,22 @@ public class ReportController extends BaseController { DateTime date = helpers.getDateTimeFromCookie(cookieDate); - ReportSettings reportSettings = new ReportSettings(); - - model.addAttribute("reportSettings", reportSettings); + model.addAttribute("reportSettings", reportSettingsService.getReportSettings()); model.addAttribute("currentDate", date); return "reports/reports"; } @RequestMapping(value = "/reports/generate", method = RequestMethod.POST) public String post(Model model, - @CookieValue(value = "currentDate", required = false) String cookieDate, @ModelAttribute("NewReportSettings") ReportSettings reportSettings, BindingResult bindingResult) { - DateTime date = helpers.getDateTimeFromCookie(cookieDate); - - System.out.println(reportSettings); + reportSettingsService.getRepository().delete(0); + for(ReportColumn reportColumn : reportSettings.getColumns()) + { + reportColumnService.getRepository().save(reportColumn); + } + reportSettingsService.getRepository().save(reportSettings); return "redirect:/reports"; } diff --git a/src/main/java/de/deadlocker8/budgetmaster/controller/SettingsController.java b/src/main/java/de/deadlocker8/budgetmaster/controller/SettingsController.java index e515416b137e7a4a4a298c3c6d56912e6f5fa626..587b9c2891f2eafbd04949646be969444f508a9d 100644 --- a/src/main/java/de/deadlocker8/budgetmaster/controller/SettingsController.java +++ b/src/main/java/de/deadlocker8/budgetmaster/controller/SettingsController.java @@ -6,7 +6,7 @@ import de.deadlocker8.budgetmaster.authentication.UserRepository; import de.deadlocker8.budgetmaster.database.Database; import de.deadlocker8.budgetmaster.database.DatabaseParser; import de.deadlocker8.budgetmaster.database.accountmatches.AccountMatchList; -import de.deadlocker8.budgetmaster.entities.CategoryType; +import de.deadlocker8.budgetmaster.entities.category.CategoryType; import de.deadlocker8.budgetmaster.entities.Settings; import de.deadlocker8.budgetmaster.repositories.SettingsRepository; import de.deadlocker8.budgetmaster.services.*; diff --git a/src/main/java/de/deadlocker8/budgetmaster/database/Database.java b/src/main/java/de/deadlocker8/budgetmaster/database/Database.java index bf590ae498c328cdc550060e7dc67599baee7834..6b5f9bb87b45449b1441f97329bacf89dd5daeda 100644 --- a/src/main/java/de/deadlocker8/budgetmaster/database/Database.java +++ b/src/main/java/de/deadlocker8/budgetmaster/database/Database.java @@ -1,8 +1,8 @@ package de.deadlocker8.budgetmaster.database; import com.google.gson.annotations.Expose; -import de.deadlocker8.budgetmaster.entities.Account; -import de.deadlocker8.budgetmaster.entities.Category; +import de.deadlocker8.budgetmaster.entities.account.Account; +import de.deadlocker8.budgetmaster.entities.category.Category; import de.deadlocker8.budgetmaster.entities.Transaction; import java.util.List; diff --git a/src/main/java/de/deadlocker8/budgetmaster/database/DatabaseParser.java b/src/main/java/de/deadlocker8/budgetmaster/database/DatabaseParser.java index 627edfd513a219def12ea3bf5f9677725f5bb153..71032960b1d1ae930a30b7fbe263f22dcc8ac77f 100644 --- a/src/main/java/de/deadlocker8/budgetmaster/database/DatabaseParser.java +++ b/src/main/java/de/deadlocker8/budgetmaster/database/DatabaseParser.java @@ -3,7 +3,7 @@ package de.deadlocker8.budgetmaster.database; import com.google.gson.JsonObject; import com.google.gson.JsonParser; import de.deadlocker8.budgetmaster.database.legacy.LegacyParser; -import de.deadlocker8.budgetmaster.entities.Category; +import de.deadlocker8.budgetmaster.entities.category.Category; import de.thecodelabs.utils.util.Localization; import org.slf4j.Logger; import org.slf4j.LoggerFactory; diff --git a/src/main/java/de/deadlocker8/budgetmaster/database/DatabaseParser_v3.java b/src/main/java/de/deadlocker8/budgetmaster/database/DatabaseParser_v3.java index b59c0b81efca6116748e047d19ab41ac8c78acb3..2cf160d5efcb722526546cf332ed814ba6e563ba 100644 --- a/src/main/java/de/deadlocker8/budgetmaster/database/DatabaseParser_v3.java +++ b/src/main/java/de/deadlocker8/budgetmaster/database/DatabaseParser_v3.java @@ -2,6 +2,8 @@ package de.deadlocker8.budgetmaster.database; import com.google.gson.*; import de.deadlocker8.budgetmaster.entities.*; +import de.deadlocker8.budgetmaster.entities.account.Account; +import de.deadlocker8.budgetmaster.entities.category.Category; import de.deadlocker8.budgetmaster.repeating.RepeatingOption; import de.deadlocker8.budgetmaster.repeating.endoption.*; import de.deadlocker8.budgetmaster.repeating.modifier.*; diff --git a/src/main/java/de/deadlocker8/budgetmaster/database/accountmatches/AccountMatch.java b/src/main/java/de/deadlocker8/budgetmaster/database/accountmatches/AccountMatch.java index 2cc9da1bccdf9aa74c29f4100cc867419c0f1c99..a3c7a937d18058065009879362d2befc88052ba7 100644 --- a/src/main/java/de/deadlocker8/budgetmaster/database/accountmatches/AccountMatch.java +++ b/src/main/java/de/deadlocker8/budgetmaster/database/accountmatches/AccountMatch.java @@ -1,6 +1,6 @@ package de.deadlocker8.budgetmaster.database.accountmatches; -import de.deadlocker8.budgetmaster.entities.Account; +import de.deadlocker8.budgetmaster.entities.account.Account; public class AccountMatch { diff --git a/src/main/java/de/deadlocker8/budgetmaster/database/legacy/LegacyParser.java b/src/main/java/de/deadlocker8/budgetmaster/database/legacy/LegacyParser.java index 1ac87533be68a0edc6145e173c894a1852b9bdfa..6b5d1720928e8b2ab830261c0472cf818bafa446 100644 --- a/src/main/java/de/deadlocker8/budgetmaster/database/legacy/LegacyParser.java +++ b/src/main/java/de/deadlocker8/budgetmaster/database/legacy/LegacyParser.java @@ -6,6 +6,10 @@ import com.google.gson.JsonObject; import com.google.gson.JsonParser; import de.deadlocker8.budgetmaster.database.Database; import de.deadlocker8.budgetmaster.entities.*; +import de.deadlocker8.budgetmaster.entities.account.Account; +import de.deadlocker8.budgetmaster.entities.account.AccountType; +import de.deadlocker8.budgetmaster.entities.category.Category; +import de.deadlocker8.budgetmaster.entities.category.CategoryType; import de.deadlocker8.budgetmaster.repeating.RepeatingOption; import de.deadlocker8.budgetmaster.repeating.endoption.RepeatingEndDate; import de.deadlocker8.budgetmaster.repeating.endoption.RepeatingEndNever; diff --git a/src/main/java/de/deadlocker8/budgetmaster/entities/AccountType.java b/src/main/java/de/deadlocker8/budgetmaster/entities/AccountType.java deleted file mode 100644 index 5accc8789b2822eae798d5295104428a2e588aae..0000000000000000000000000000000000000000 --- a/src/main/java/de/deadlocker8/budgetmaster/entities/AccountType.java +++ /dev/null @@ -1,7 +0,0 @@ -package de.deadlocker8.budgetmaster.entities; - - -public enum AccountType -{ - ALL, CUSTOM -} diff --git a/src/main/java/de/deadlocker8/budgetmaster/entities/CategoryType.java b/src/main/java/de/deadlocker8/budgetmaster/entities/CategoryType.java deleted file mode 100644 index f8a89f21046dcd1627bd15114507ae0e165bd0ec..0000000000000000000000000000000000000000 --- a/src/main/java/de/deadlocker8/budgetmaster/entities/CategoryType.java +++ /dev/null @@ -1,7 +0,0 @@ -package de.deadlocker8.budgetmaster.entities; - - -public enum CategoryType -{ - NONE, REST, CUSTOM -} diff --git a/src/main/java/de/deadlocker8/budgetmaster/entities/Transaction.java b/src/main/java/de/deadlocker8/budgetmaster/entities/Transaction.java index 935e46c401bf2505634236b0e97b4a73aa847b61..a29cb8562ddd0268d39c24ed5befa4b1af13c1d3 100644 --- a/src/main/java/de/deadlocker8/budgetmaster/entities/Transaction.java +++ b/src/main/java/de/deadlocker8/budgetmaster/entities/Transaction.java @@ -1,6 +1,8 @@ package de.deadlocker8.budgetmaster.entities; import com.google.gson.annotations.Expose; +import de.deadlocker8.budgetmaster.entities.account.Account; +import de.deadlocker8.budgetmaster.entities.category.Category; import de.deadlocker8.budgetmaster.repeating.RepeatingOption; import org.joda.time.DateTime; import org.springframework.format.annotation.DateTimeFormat; diff --git a/src/main/java/de/deadlocker8/budgetmaster/entities/Account.java b/src/main/java/de/deadlocker8/budgetmaster/entities/account/Account.java similarity index 94% rename from src/main/java/de/deadlocker8/budgetmaster/entities/Account.java rename to src/main/java/de/deadlocker8/budgetmaster/entities/account/Account.java index b028964c91ce0531e222729a64a665cba7b52b9d..b21929d90183f243308cf30dbd28ab9aed95b819 100644 --- a/src/main/java/de/deadlocker8/budgetmaster/entities/Account.java +++ b/src/main/java/de/deadlocker8/budgetmaster/entities/account/Account.java @@ -1,6 +1,7 @@ -package de.deadlocker8.budgetmaster.entities; +package de.deadlocker8.budgetmaster.entities.account; import com.google.gson.annotations.Expose; +import de.deadlocker8.budgetmaster.entities.Transaction; import javax.persistence.*; import javax.validation.constraints.NotNull; diff --git a/src/main/java/de/deadlocker8/budgetmaster/entities/account/AccountType.java b/src/main/java/de/deadlocker8/budgetmaster/entities/account/AccountType.java new file mode 100644 index 0000000000000000000000000000000000000000..b2bc80771e18bfdf6fb8e5d4e6245a07eab469bb --- /dev/null +++ b/src/main/java/de/deadlocker8/budgetmaster/entities/account/AccountType.java @@ -0,0 +1,7 @@ +package de.deadlocker8.budgetmaster.entities.account; + + +public enum AccountType +{ + ALL, CUSTOM +} diff --git a/src/main/java/de/deadlocker8/budgetmaster/entities/Category.java b/src/main/java/de/deadlocker8/budgetmaster/entities/category/Category.java similarity index 95% rename from src/main/java/de/deadlocker8/budgetmaster/entities/Category.java rename to src/main/java/de/deadlocker8/budgetmaster/entities/category/Category.java index e5901de2fa04f768df423105ca5a63051b99cba9..c12c235c943519026d2005a58b50ed87d11b7ec9 100644 --- a/src/main/java/de/deadlocker8/budgetmaster/entities/Category.java +++ b/src/main/java/de/deadlocker8/budgetmaster/entities/category/Category.java @@ -1,6 +1,7 @@ -package de.deadlocker8.budgetmaster.entities; +package de.deadlocker8.budgetmaster.entities.category; import com.google.gson.annotations.Expose; +import de.deadlocker8.budgetmaster.entities.Transaction; import de.thecodelabs.utils.util.ColorUtils; import javafx.scene.paint.Color; diff --git a/src/main/java/de/deadlocker8/budgetmaster/entities/category/CategoryType.java b/src/main/java/de/deadlocker8/budgetmaster/entities/category/CategoryType.java new file mode 100644 index 0000000000000000000000000000000000000000..b484e7fb3853f879ba8872050593c181d66c4ee9 --- /dev/null +++ b/src/main/java/de/deadlocker8/budgetmaster/entities/category/CategoryType.java @@ -0,0 +1,7 @@ +package de.deadlocker8.budgetmaster.entities.category; + + +public enum CategoryType +{ + NONE, REST, CUSTOM +} diff --git a/src/main/java/de/deadlocker8/budgetmaster/entities/report/ReportColumn.java b/src/main/java/de/deadlocker8/budgetmaster/entities/report/ReportColumn.java new file mode 100644 index 0000000000000000000000000000000000000000..fe89566c4bac4d17777a75adeb8e312f4f9f6dba --- /dev/null +++ b/src/main/java/de/deadlocker8/budgetmaster/entities/report/ReportColumn.java @@ -0,0 +1,81 @@ +package de.deadlocker8.budgetmaster.entities.report; + +import javax.persistence.*; +import java.util.List; + +@Entity +public class ReportColumn +{ + @Id + @GeneratedValue(strategy = GenerationType.AUTO) + private Integer ID; + + private String key; + private boolean activated; + private int position; + + @OneToMany(mappedBy = "columns", fetch = FetchType.LAZY) + private transient List<ReportSettings> referringSettings; + + public ReportColumn(String key, int position) + { + this.key = key; + this.activated = true; + this.position = position; + } + + public ReportColumn() + { + } + + public Integer getID() + { + return ID; + } + + public void setID(Integer ID) + { + this.ID = ID; + } + + public String getKey() + { + return key; + } + + public void setKey(String key) + { + this.key = key; + } + + public boolean isActivated() + { + return activated; + } + + public void setActivated(boolean activated) + { + this.activated = activated; + } + + public int getPosition() + { + return position; + } + + public void setPosition(int position) + { + this.position = position; + } + + @Override + public String toString() + { + return "ReportColumn{" + + "ID=" + ID + + ", key='" + key + '\'' + + ", activated=" + activated + + ", position=" + position + + '}'; + } +} diff --git a/src/main/java/de/deadlocker8/budgetmaster/reports/ReportSettings.java b/src/main/java/de/deadlocker8/budgetmaster/entities/report/ReportSettings.java similarity index 57% rename from src/main/java/de/deadlocker8/budgetmaster/reports/ReportSettings.java rename to src/main/java/de/deadlocker8/budgetmaster/entities/report/ReportSettings.java index d6cab259e9fa697a67cbf3a86f3878fcb3296320..7ddead4f055d4c2ab0c319c29168b1c8921ab65d 100644 --- a/src/main/java/de/deadlocker8/budgetmaster/reports/ReportSettings.java +++ b/src/main/java/de/deadlocker8/budgetmaster/entities/report/ReportSettings.java @@ -1,51 +1,57 @@ -package de.deadlocker8.budgetmaster.reports; +package de.deadlocker8.budgetmaster.entities.report; import org.joda.time.DateTime; import org.springframework.format.annotation.DateTimeFormat; -import java.util.HashMap; -import java.util.Map; +import javax.persistence.Entity; +import javax.persistence.Id; +import javax.persistence.OneToMany; +import java.util.ArrayList; +import java.util.Comparator; +import java.util.List; +@Entity public class ReportSettings { + @Id + private Integer ID; + @DateTimeFormat(pattern = "dd.MM.yyyy") private DateTime date; + private boolean includeBudget; private boolean splitTables; private boolean includeCategoryBudgets; - private Map<String, ReportColumn> columns; + @OneToMany + private List<ReportColumn> columns; + public static ReportSettings getDefault() + { + return new ReportSettings(DateTime.now(), true, true, true); + } - public ReportSettings(DateTime date, boolean includeBudget, boolean splitTables, boolean includeCategoryBudgets) + private ReportSettings(DateTime date, boolean includeBudget, boolean splitTables, boolean includeCategoryBudgets) { this.date = date; this.includeBudget = includeBudget; this.splitTables = splitTables; this.includeCategoryBudgets = includeCategoryBudgets; - - initColumns(); + this.columns = new ArrayList<>(); } public ReportSettings() { - initColumns(); } - private void initColumns() + public Integer getID() { - this.columns = new HashMap<>(); + return ID; + } - this.columns.put("report.position", new ReportColumn()); - this.columns.put("report.date", new ReportColumn()); - this.columns.put("report.repeating", new ReportColumn()); - this.columns.put("report.name", new ReportColumn()); - this.columns.put("report.category", new ReportColumn()); - this.columns.put("report.description", new ReportColumn()); - this.columns.put("report.tags", new ReportColumn()); - this.columns.put("report.account", new ReportColumn()); - this.columns.put("report.rating", new ReportColumn()); - this.columns.put("report.amount", new ReportColumn()); + public void setID(Integer ID) + { + this.ID = ID; } public DateTime getDate() @@ -88,12 +94,18 @@ public class ReportSettings this.includeCategoryBudgets = includeCategoryBudgets; } - public Map<String, ReportColumn> getColumns() + public List<ReportColumn> getColumnsSorted() + { + columns.sort(Comparator.comparing(ReportColumn::getPosition)); + return columns; + } + + public List<ReportColumn> getColumns() { - return this.columns; + return columns; } - public void setColumns(Map<String, ReportColumn> columns) + public void setColumns(List<ReportColumn> columns) { this.columns = columns; } diff --git a/src/main/java/de/deadlocker8/budgetmaster/reports/ReportColumn.java b/src/main/java/de/deadlocker8/budgetmaster/reports/ReportColumn.java deleted file mode 100644 index 55cb047131da93596166529ea1aac1539a191d94..0000000000000000000000000000000000000000 --- a/src/main/java/de/deadlocker8/budgetmaster/reports/ReportColumn.java +++ /dev/null @@ -1,36 +0,0 @@ -package de.deadlocker8.budgetmaster.reports; - -public class ReportColumn -{ - private boolean activated; - private int position; - - public boolean isActivated() - { - return activated; - } - - public void setActivated(boolean activated) - { - this.activated = activated; - } - - public int getPosition() - { - return position; - } - - public void setPosition(int position) - { - this.position = position; - } - - @Override - public String toString() - { - return "ReportColumn{" + - "activated=" + activated + - ", position=" + position + - '}'; - } -} diff --git a/src/main/java/de/deadlocker8/budgetmaster/reports/ReportItem.java b/src/main/java/de/deadlocker8/budgetmaster/reports/ReportItem.java index 08ced7b10e18953f1ad662c298f2a3693ccae8d4..3223635cc1cabcb2879fcd02b6898429e4c1a23b 100644 --- a/src/main/java/de/deadlocker8/budgetmaster/reports/ReportItem.java +++ b/src/main/java/de/deadlocker8/budgetmaster/reports/ReportItem.java @@ -1,7 +1,7 @@ package de.deadlocker8.budgetmaster.reports; -import de.deadlocker8.budgetmaster.entities.Category; +import de.deadlocker8.budgetmaster.entities.category.Category; public class ReportItem { diff --git a/src/main/java/de/deadlocker8/budgetmaster/repositories/AccountRepository.java b/src/main/java/de/deadlocker8/budgetmaster/repositories/AccountRepository.java index 9cea8a0b78400910e8c8fa1bc617f5bdafa1992a..ffd550e3c5a28e6fdf980ca4ca9e25d3516afb05 100644 --- a/src/main/java/de/deadlocker8/budgetmaster/repositories/AccountRepository.java +++ b/src/main/java/de/deadlocker8/budgetmaster/repositories/AccountRepository.java @@ -1,7 +1,7 @@ package de.deadlocker8.budgetmaster.repositories; -import de.deadlocker8.budgetmaster.entities.Account; -import de.deadlocker8.budgetmaster.entities.AccountType; +import de.deadlocker8.budgetmaster.entities.account.Account; +import de.deadlocker8.budgetmaster.entities.account.AccountType; import org.springframework.data.jpa.repository.JpaRepository; import java.util.List; diff --git a/src/main/java/de/deadlocker8/budgetmaster/repositories/CategoryRepository.java b/src/main/java/de/deadlocker8/budgetmaster/repositories/CategoryRepository.java index 6374a1a3e4c54b2c21920b78b0957e12761ca63b..2e39888b5650bb0c1ede81936dbf9d6471edd99b 100644 --- a/src/main/java/de/deadlocker8/budgetmaster/repositories/CategoryRepository.java +++ b/src/main/java/de/deadlocker8/budgetmaster/repositories/CategoryRepository.java @@ -1,7 +1,7 @@ package de.deadlocker8.budgetmaster.repositories; -import de.deadlocker8.budgetmaster.entities.Category; -import de.deadlocker8.budgetmaster.entities.CategoryType; +import de.deadlocker8.budgetmaster.entities.category.Category; +import de.deadlocker8.budgetmaster.entities.category.CategoryType; import org.springframework.data.jpa.repository.JpaRepository; import java.util.List; diff --git a/src/main/java/de/deadlocker8/budgetmaster/repositories/TransactionRepository.java b/src/main/java/de/deadlocker8/budgetmaster/repositories/TransactionRepository.java index b5adae4505f9e58d2a96d07793832456e512d665..068cda13ff864114d0159050c01fecb34a8942a6 100644 --- a/src/main/java/de/deadlocker8/budgetmaster/repositories/TransactionRepository.java +++ b/src/main/java/de/deadlocker8/budgetmaster/repositories/TransactionRepository.java @@ -1,6 +1,6 @@ package de.deadlocker8.budgetmaster.repositories; -import de.deadlocker8.budgetmaster.entities.Account; +import de.deadlocker8.budgetmaster.entities.account.Account; import de.deadlocker8.budgetmaster.entities.Transaction; import org.joda.time.DateTime; import org.springframework.data.jpa.repository.JpaRepository; diff --git a/src/main/java/de/deadlocker8/budgetmaster/repositories/report/ReportColumnRepository.java b/src/main/java/de/deadlocker8/budgetmaster/repositories/report/ReportColumnRepository.java new file mode 100644 index 0000000000000000000000000000000000000000..cbc6e393053ef25dfbcddf50ba049e23c8500a5b --- /dev/null +++ b/src/main/java/de/deadlocker8/budgetmaster/repositories/report/ReportColumnRepository.java @@ -0,0 +1,16 @@ +package de.deadlocker8.budgetmaster.repositories.report; + +import de.deadlocker8.budgetmaster.entities.report.ReportColumn; +import org.springframework.data.jpa.repository.JpaRepository; + +import java.util.List; + + +public interface ReportColumnRepository extends JpaRepository<ReportColumn, Integer> +{ + List<ReportColumn> findAllByOrderByPositionAsc(); + + ReportColumn findByKey(String key); + + ReportColumn findByPosition(int position); +} \ No newline at end of file diff --git a/src/main/java/de/deadlocker8/budgetmaster/repositories/report/ReportSettingsRepository.java b/src/main/java/de/deadlocker8/budgetmaster/repositories/report/ReportSettingsRepository.java new file mode 100644 index 0000000000000000000000000000000000000000..965ef7d61f2315e2a59580108bb8296786c6a8f0 --- /dev/null +++ b/src/main/java/de/deadlocker8/budgetmaster/repositories/report/ReportSettingsRepository.java @@ -0,0 +1,9 @@ +package de.deadlocker8.budgetmaster.repositories.report; + +import de.deadlocker8.budgetmaster.entities.report.ReportSettings; +import org.springframework.data.jpa.repository.JpaRepository; + + +public interface ReportSettingsRepository extends JpaRepository<ReportSettings, Integer> +{ +} \ No newline at end of file diff --git a/src/main/java/de/deadlocker8/budgetmaster/services/AccountService.java b/src/main/java/de/deadlocker8/budgetmaster/services/AccountService.java index 119454e300dc56db2376d837f7ac7b5d358b9737..2a055697746db77067cc42886ce28208662bbca8 100644 --- a/src/main/java/de/deadlocker8/budgetmaster/services/AccountService.java +++ b/src/main/java/de/deadlocker8/budgetmaster/services/AccountService.java @@ -2,8 +2,8 @@ package de.deadlocker8.budgetmaster.services; import de.deadlocker8.budgetmaster.authentication.User; import de.deadlocker8.budgetmaster.authentication.UserRepository; -import de.deadlocker8.budgetmaster.entities.Account; -import de.deadlocker8.budgetmaster.entities.AccountType; +import de.deadlocker8.budgetmaster.entities.account.Account; +import de.deadlocker8.budgetmaster.entities.account.AccountType; import de.deadlocker8.budgetmaster.repositories.AccountRepository; import de.deadlocker8.budgetmaster.repositories.TransactionRepository; import de.deadlocker8.budgetmaster.utils.Strings; diff --git a/src/main/java/de/deadlocker8/budgetmaster/services/CategoryService.java b/src/main/java/de/deadlocker8/budgetmaster/services/CategoryService.java index 9edc8f174b18d9b38280090e72fe43f55cfea12f..e92da3ae73b5245bdb27b46681ef691ae2f45ce9 100644 --- a/src/main/java/de/deadlocker8/budgetmaster/services/CategoryService.java +++ b/src/main/java/de/deadlocker8/budgetmaster/services/CategoryService.java @@ -1,7 +1,7 @@ package de.deadlocker8.budgetmaster.services; -import de.deadlocker8.budgetmaster.entities.Category; -import de.deadlocker8.budgetmaster.entities.CategoryType; +import de.deadlocker8.budgetmaster.entities.category.Category; +import de.deadlocker8.budgetmaster.entities.category.CategoryType; import de.deadlocker8.budgetmaster.entities.Transaction; import de.deadlocker8.budgetmaster.repositories.CategoryRepository; import de.deadlocker8.budgetmaster.utils.Strings; diff --git a/src/main/java/de/deadlocker8/budgetmaster/services/DatabaseService.java b/src/main/java/de/deadlocker8/budgetmaster/services/DatabaseService.java index 33cc5b2829044d3b101f438e4c3309855c93608d..2f957ed20d32cc05e7c1995e7c8896f2d56098a2 100644 --- a/src/main/java/de/deadlocker8/budgetmaster/services/DatabaseService.java +++ b/src/main/java/de/deadlocker8/budgetmaster/services/DatabaseService.java @@ -2,8 +2,8 @@ package de.deadlocker8.budgetmaster.services; import com.google.gson.*; import de.deadlocker8.budgetmaster.database.Database; -import de.deadlocker8.budgetmaster.entities.Account; -import de.deadlocker8.budgetmaster.entities.Category; +import de.deadlocker8.budgetmaster.entities.account.Account; +import de.deadlocker8.budgetmaster.entities.category.Category; import de.deadlocker8.budgetmaster.entities.Transaction; import de.deadlocker8.budgetmaster.repeating.RepeatingOption; import org.joda.time.DateTime; diff --git a/src/main/java/de/deadlocker8/budgetmaster/services/HelpersService.java b/src/main/java/de/deadlocker8/budgetmaster/services/HelpersService.java index af45e2880ace15d3a1cc59364fa8e315fdef4827..32ce882fd3ba57918c0c6e31e36516b3029b94f0 100644 --- a/src/main/java/de/deadlocker8/budgetmaster/services/HelpersService.java +++ b/src/main/java/de/deadlocker8/budgetmaster/services/HelpersService.java @@ -1,5 +1,8 @@ package de.deadlocker8.budgetmaster.services; +import de.deadlocker8.budgetmaster.entities.account.Account; +import de.deadlocker8.budgetmaster.entities.account.AccountType; +import de.deadlocker8.budgetmaster.entities.category.CategoryType; import de.deadlocker8.budgetmaster.update.BudgetMasterUpdateService; import de.deadlocker8.budgetmaster.database.accountmatches.AccountMatch; import de.deadlocker8.budgetmaster.entities.*; diff --git a/src/main/java/de/deadlocker8/budgetmaster/services/ImportService.java b/src/main/java/de/deadlocker8/budgetmaster/services/ImportService.java index dd65345886a2a7dad19cf92de2ded65074bde465..7bca23a74a5450c44bb1932238e77ec7836141a4 100644 --- a/src/main/java/de/deadlocker8/budgetmaster/services/ImportService.java +++ b/src/main/java/de/deadlocker8/budgetmaster/services/ImportService.java @@ -3,8 +3,8 @@ package de.deadlocker8.budgetmaster.services; import de.deadlocker8.budgetmaster.database.Database; import de.deadlocker8.budgetmaster.database.accountmatches.AccountMatch; import de.deadlocker8.budgetmaster.database.accountmatches.AccountMatchList; -import de.deadlocker8.budgetmaster.entities.Category; -import de.deadlocker8.budgetmaster.entities.CategoryType; +import de.deadlocker8.budgetmaster.entities.category.Category; +import de.deadlocker8.budgetmaster.entities.category.CategoryType; import de.deadlocker8.budgetmaster.entities.Tag; import de.deadlocker8.budgetmaster.entities.Transaction; import de.deadlocker8.budgetmaster.repositories.CategoryRepository; diff --git a/src/main/java/de/deadlocker8/budgetmaster/services/SettingsService.java b/src/main/java/de/deadlocker8/budgetmaster/services/SettingsService.java index 9addb0d6d7ab5532fd119aa09749bccc42dd6133..43599d9878015728ab5605e0fe47cde827f9944f 100644 --- a/src/main/java/de/deadlocker8/budgetmaster/services/SettingsService.java +++ b/src/main/java/de/deadlocker8/budgetmaster/services/SettingsService.java @@ -20,7 +20,7 @@ public class SettingsService createDefaultSettingsIfNotExists(); } - public void createDefaultSettingsIfNotExists() + private void createDefaultSettingsIfNotExists() { if(settingsRepository.findOne(0) == null) { diff --git a/src/main/java/de/deadlocker8/budgetmaster/services/TransactionService.java b/src/main/java/de/deadlocker8/budgetmaster/services/TransactionService.java index f65eb41692379fb7dbb07279dc1dc473f257319c..37a21a99c5cb5d9d09b7bcaff1e55348ddf1ee0c 100644 --- a/src/main/java/de/deadlocker8/budgetmaster/services/TransactionService.java +++ b/src/main/java/de/deadlocker8/budgetmaster/services/TransactionService.java @@ -1,8 +1,8 @@ package de.deadlocker8.budgetmaster.services; -import de.deadlocker8.budgetmaster.entities.Account; -import de.deadlocker8.budgetmaster.entities.AccountType; -import de.deadlocker8.budgetmaster.entities.CategoryType; +import de.deadlocker8.budgetmaster.entities.account.Account; +import de.deadlocker8.budgetmaster.entities.account.AccountType; +import de.deadlocker8.budgetmaster.entities.category.CategoryType; import de.deadlocker8.budgetmaster.entities.Transaction; import de.deadlocker8.budgetmaster.repositories.CategoryRepository; import de.deadlocker8.budgetmaster.repositories.RepeatingOptionRepository; diff --git a/src/main/java/de/deadlocker8/budgetmaster/services/report/ReportColumnService.java b/src/main/java/de/deadlocker8/budgetmaster/services/report/ReportColumnService.java new file mode 100644 index 0000000000000000000000000000000000000000..6d08a02f4f6700ca774122d7f48aabd093e28ab3 --- /dev/null +++ b/src/main/java/de/deadlocker8/budgetmaster/services/report/ReportColumnService.java @@ -0,0 +1,54 @@ +package de.deadlocker8.budgetmaster.services.report; + +import de.deadlocker8.budgetmaster.entities.report.ReportColumn; +import de.deadlocker8.budgetmaster.repositories.report.ReportColumnRepository; +import de.deadlocker8.budgetmaster.services.Resetable; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +@Service +public class ReportColumnService implements Resetable +{ + private final Logger LOGGER = LoggerFactory.getLogger(this.getClass()); + private ReportColumnRepository reportColumnRepository; + + @Autowired + public ReportColumnService(ReportColumnRepository reportColumnRepository) + { + this.reportColumnRepository = reportColumnRepository; + + createDefaults(); + } + + public ReportColumnRepository getRepository() + { + return reportColumnRepository; + } + + @Override + public void deleteAll() + { + } + + @Override + public void createDefaults() + { + if(reportColumnRepository.findAllByOrderByPositionAsc().size() == 0) + { + reportColumnRepository.save(new ReportColumn("report.position", 0)); + reportColumnRepository.save(new ReportColumn("report.date", 1)); + reportColumnRepository.save(new ReportColumn("report.repeating", 2)); + reportColumnRepository.save(new ReportColumn("report.name", 3)); + reportColumnRepository.save(new ReportColumn("report.category", 4)); + reportColumnRepository.save(new ReportColumn("report.description", 5)); + reportColumnRepository.save(new ReportColumn("report.tags", 6)); + reportColumnRepository.save(new ReportColumn("report.account", 7)); + reportColumnRepository.save(new ReportColumn("report.rating", 8)); + reportColumnRepository.save(new ReportColumn("report.amount", 9)); + + LOGGER.debug("Created default report columns"); + } + } +} diff --git a/src/main/java/de/deadlocker8/budgetmaster/services/report/ReportSettingsService.java b/src/main/java/de/deadlocker8/budgetmaster/services/report/ReportSettingsService.java new file mode 100644 index 0000000000000000000000000000000000000000..4df313a15748d914feceb17caadec63531d60fd0 --- /dev/null +++ b/src/main/java/de/deadlocker8/budgetmaster/services/report/ReportSettingsService.java @@ -0,0 +1,52 @@ +package de.deadlocker8.budgetmaster.services.report; + +import de.deadlocker8.budgetmaster.entities.report.ReportColumn; +import de.deadlocker8.budgetmaster.entities.report.ReportSettings; +import de.deadlocker8.budgetmaster.repositories.report.ReportColumnRepository; +import de.deadlocker8.budgetmaster.repositories.report.ReportSettingsRepository; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +@Service +public class ReportSettingsService +{ + private final Logger LOGGER = LoggerFactory.getLogger(this.getClass()); + private ReportSettingsRepository reportSettingsRepository; + private ReportColumnService reportColumnService; + + @Autowired + public ReportSettingsService(ReportSettingsRepository reportSettingsRepository, ReportColumnService reportColumnService) + { + this.reportSettingsRepository = reportSettingsRepository; + this.reportColumnService = reportColumnService; + createDefaultReportSettingsIfNotExists(); + } + + public ReportSettingsRepository getRepository() + { + return reportSettingsRepository; + } + + private void createDefaultReportSettingsIfNotExists() + { + if(reportSettingsRepository.findOne(0) == null) + { + ReportSettings reportSettings = ReportSettings.getDefault(); + reportSettings.setID(0); + for(ReportColumn reportColumn : reportColumnService.getRepository().findAllByOrderByPositionAsc()) + { + reportSettings.getColumns().add(reportColumn); + } + + reportSettingsRepository.save(reportSettings); + LOGGER.debug("Created default report settings"); + } + } + + public ReportSettings getReportSettings() + { + return reportSettingsRepository.findOne(0); + } +} \ No newline at end of file diff --git a/src/main/java/de/deadlocker8/budgetmaster/validators/AccountValidator.java b/src/main/java/de/deadlocker8/budgetmaster/validators/AccountValidator.java index 0cff68a91ef9530cb364dfd2f7a869876e51aff9..24d7c03ddff99e2f9923ad11e434da1316a8b28d 100644 --- a/src/main/java/de/deadlocker8/budgetmaster/validators/AccountValidator.java +++ b/src/main/java/de/deadlocker8/budgetmaster/validators/AccountValidator.java @@ -1,6 +1,6 @@ package de.deadlocker8.budgetmaster.validators; -import de.deadlocker8.budgetmaster.entities.Category; +import de.deadlocker8.budgetmaster.entities.category.Category; import de.deadlocker8.budgetmaster.utils.Strings; import org.springframework.validation.Errors; import org.springframework.validation.ValidationUtils; diff --git a/src/main/java/de/deadlocker8/budgetmaster/validators/CategoryValidator.java b/src/main/java/de/deadlocker8/budgetmaster/validators/CategoryValidator.java index a7272ae9076db57feb9e8a3ff047a9111a6944ec..b32c6582ed28b1c19c6f8e5a0357a0b24e487b8f 100644 --- a/src/main/java/de/deadlocker8/budgetmaster/validators/CategoryValidator.java +++ b/src/main/java/de/deadlocker8/budgetmaster/validators/CategoryValidator.java @@ -1,6 +1,6 @@ package de.deadlocker8.budgetmaster.validators; -import de.deadlocker8.budgetmaster.entities.Category; +import de.deadlocker8.budgetmaster.entities.category.Category; import de.deadlocker8.budgetmaster.utils.Strings; import org.springframework.validation.Errors; import org.springframework.validation.ValidationUtils; diff --git a/src/main/resources/static/js/reports.js b/src/main/resources/static/js/reports.js index e2d91c7f69bf95814e65cd768ecd2ae7ebb99230..45d83cf246e11f684ed4d1fa034df2f79d748aa5 100644 --- a/src/main/resources/static/js/reports.js +++ b/src/main/resources/static/js/reports.js @@ -29,7 +29,7 @@ function updateRow(item) function validateForm() { $('.columnName-checkbox').each(function (i, obj) { - var positionInput = document.getElementsByName("columns['" + obj.dataset.key + "'].position")[0]; + var positionInput = document.getElementsByName("columns['" + obj.dataset.index + "'].position")[0]; positionInput.value = i; }); diff --git a/src/main/resources/templates/reports/reports.ftl b/src/main/resources/templates/reports/reports.ftl index 36a200d2e86b56422051e4267c7a651ba4de7a93..771028bc1fdf34e0e9478bc16c0e8f2c1ca7f70d 100644 --- a/src/main/resources/templates/reports/reports.ftl +++ b/src/main/resources/templates/reports/reports.ftl @@ -19,6 +19,7 @@ <div class="container"> <form name="NewReportSettings" action="<@s.url '/reports/generate'/>" method="post" onsubmit="return validateForm()"> <input type="hidden" name="${_csrf.parameterName}" value="${_csrf.token}"/> + <input type="hidden" name="ID" value="${reportSettings.getID()?c}"/> <input type="hidden" name="date" value="${helpers.getLongDateString(currentDate)}"/> <#-- settings --> @@ -43,7 +44,7 @@ </div> <div class="report-checkbox-container"> <label> - <input type="checkbox" name="includeCategorybudgets" <#if reportSettings.includeCategoryBudgets>checked="checked"</#if>/> + <input type="checkbox" name="includeCategoryBudgets" <#if reportSettings.includeCategoryBudgets>checked="checked"</#if>/> <span class="columnName-label">${locale.getString('report.checkbox.inclue.categorybudgets')}</span> </label> </div> @@ -66,13 +67,15 @@ <div class="row"> <div class="col s12 m8 offset-m2"> <div id="columnNames"> - <#list reportSettings.columns as key, value> + <#list reportSettings.getColumnsSorted() as column> <div class="columnName"> <label> - <input type="checkbox" class="columnName-checkbox" data-key="${key}" name="columns['${key}'].activated"/> - <span class="columnName-label">${locale.getString(key)}</span> + <input type="checkbox" class="columnName-checkbox" data-index="${column?index}" name="columns['${column?index}'].activated" <#if column.isActivated()>checked="checked"</#if>/> + <span class="columnName-label">${locale.getString(column.getKey())}</span> </label> - <input type="hidden" name="columns['${key}'].position" value=""/> + <input type="hidden" name="columns['${column?index}'].ID" value="${column.getID()}"/> + <input type="hidden" name="columns['${column?index}'].key" value="${column.getKey()}"/> + <input type="hidden" name="columns['${column?index}'].position" value=""/> </div> </#list> </div> diff --git a/src/test/java/de/deadlocker8/budgetmaster/database/DatabaseImportTest.java b/src/test/java/de/deadlocker8/budgetmaster/database/DatabaseImportTest.java index 9fabfb28ee172de0ec72520a30072769c45e36ba..ee8e6fa5f164d6052072b4ae5a0ebffa3e23f14c 100644 --- a/src/test/java/de/deadlocker8/budgetmaster/database/DatabaseImportTest.java +++ b/src/test/java/de/deadlocker8/budgetmaster/database/DatabaseImportTest.java @@ -1,6 +1,10 @@ package de.deadlocker8.budgetmaster.database; import de.deadlocker8.budgetmaster.entities.*; +import de.deadlocker8.budgetmaster.entities.account.Account; +import de.deadlocker8.budgetmaster.entities.account.AccountType; +import de.deadlocker8.budgetmaster.entities.category.Category; +import de.deadlocker8.budgetmaster.entities.category.CategoryType; import de.deadlocker8.budgetmaster.repositories.CategoryRepository; import de.deadlocker8.budgetmaster.repositories.TagRepository; import de.deadlocker8.budgetmaster.repositories.TransactionRepository; diff --git a/src/test/java/de/deadlocker8/budgetmaster/database/DatabaseParser_v3Test.java b/src/test/java/de/deadlocker8/budgetmaster/database/DatabaseParser_v3Test.java index 5cf8460119fdec0b8c85ae1ba5ab681bdb9ebf6d..c1d8004eeb54aea3bbbb50ca68b70c58b7fde170 100644 --- a/src/test/java/de/deadlocker8/budgetmaster/database/DatabaseParser_v3Test.java +++ b/src/test/java/de/deadlocker8/budgetmaster/database/DatabaseParser_v3Test.java @@ -1,6 +1,10 @@ package de.deadlocker8.budgetmaster.database; import de.deadlocker8.budgetmaster.entities.*; +import de.deadlocker8.budgetmaster.entities.account.Account; +import de.deadlocker8.budgetmaster.entities.account.AccountType; +import de.deadlocker8.budgetmaster.entities.category.Category; +import de.deadlocker8.budgetmaster.entities.category.CategoryType; import de.deadlocker8.budgetmaster.repeating.RepeatingOption; import de.deadlocker8.budgetmaster.repeating.endoption.RepeatingEndAfterXTimes; import de.deadlocker8.budgetmaster.repeating.modifier.RepeatingModifierDays; diff --git a/src/test/java/de/deadlocker8/budgetmaster/database/LegacyParserTest.java b/src/test/java/de/deadlocker8/budgetmaster/database/LegacyParserTest.java index 019d7d66954cc6468804a96b24311175195709d4..7cbba4534164a222d105caeebf2ac7063f574aa4 100644 --- a/src/test/java/de/deadlocker8/budgetmaster/database/LegacyParserTest.java +++ b/src/test/java/de/deadlocker8/budgetmaster/database/LegacyParserTest.java @@ -2,6 +2,10 @@ package de.deadlocker8.budgetmaster.database; import de.deadlocker8.budgetmaster.database.legacy.LegacyParser; import de.deadlocker8.budgetmaster.entities.*; +import de.deadlocker8.budgetmaster.entities.account.Account; +import de.deadlocker8.budgetmaster.entities.account.AccountType; +import de.deadlocker8.budgetmaster.entities.category.Category; +import de.deadlocker8.budgetmaster.entities.category.CategoryType; import de.deadlocker8.budgetmaster.repeating.RepeatingOption; import de.deadlocker8.budgetmaster.repeating.endoption.RepeatingEndDate; import de.deadlocker8.budgetmaster.repeating.endoption.RepeatingEndNever;