diff --git a/pom.xml b/pom.xml index 617091bc288338400d31798fb276ebb01bb33ce9..45a2c2d8ccac71ec8b1c42950c2c8d9aabf25145 100644 --- a/pom.xml +++ b/pom.xml @@ -11,9 +11,24 @@ <repositories> <repository> - <id>releases</id> - <name>Tools</name> - <url>https://maven.thecodelabs.de/nexus/content/repositories/releases</url> + <id>release</id> + <url>https://maven.thecodelabs.de/artifactory/TheCodeLabs-release</url> + <releases> + <enabled>true</enabled> + </releases> + <snapshots> + <enabled>false</enabled> + </snapshots> + </repository> + <repository> + <id>snapshots</id> + <url>https://maven.thecodelabs.de/artifactory/TheCodeLabs-snapshots</url> + <releases> + <enabled>false</enabled> + </releases> + <snapshots> + <enabled>true</enabled> + </snapshots> </repository> </repositories> @@ -55,7 +70,7 @@ <dependency> <groupId>de.deadlocker8</groupId> <artifactId>tools</artifactId> - <version>1.0.0</version> + <version>1.1.0</version> </dependency> <dependency> diff --git a/src/main/java/de/deadlocker8/budgetmaster/Main.java b/src/main/java/de/deadlocker8/budgetmaster/Main.java index 6c2b98f2202504c10396a69b567243478c4a74b8..f86fe184f6a5c5cafdac86175e60aa7b233d8a73 100644 --- a/src/main/java/de/deadlocker8/budgetmaster/Main.java +++ b/src/main/java/de/deadlocker8/budgetmaster/Main.java @@ -10,6 +10,7 @@ import org.springframework.boot.autoconfigure.SpringBootApplication; import tools.Localization; import java.util.Arrays; +import java.util.Locale; @SpringBootApplication @@ -21,6 +22,9 @@ public class Main implements ApplicationRunner { ProgramArgs.setArgs(Arrays.asList(args)); + Localization.init("languages/"); + Localization.loadLanguage(Locale.ENGLISH); + SpringApplication.run(Main.class, args); } diff --git a/src/main/java/de/deadlocker8/budgetmaster/authentication/User.java b/src/main/java/de/deadlocker8/budgetmaster/authentication/User.java index 379d67d8704d903dbf738d3278fe07cef915ca43..fe6df24d614f0b2d22c076dea276601a574142c1 100644 --- a/src/main/java/de/deadlocker8/budgetmaster/authentication/User.java +++ b/src/main/java/de/deadlocker8/budgetmaster/authentication/User.java @@ -1,12 +1,10 @@ package de.deadlocker8.budgetmaster.authentication; import de.deadlocker8.budgetmaster.entities.Account; -import de.deadlocker8.budgetmaster.entities.Payment; import javax.persistence.*; import javax.validation.constraints.NotNull; import javax.validation.constraints.Size; -import java.util.List; @Entity public class User diff --git a/src/main/java/de/deadlocker8/budgetmaster/controller/AccountController.java b/src/main/java/de/deadlocker8/budgetmaster/controller/AccountController.java index e3a4209dab198d3f48c8667cf29dd94625e6d9b8..9ac06f43c42b79eb0d2cbde4a7a82aeefcb3cb88 100644 --- a/src/main/java/de/deadlocker8/budgetmaster/controller/AccountController.java +++ b/src/main/java/de/deadlocker8/budgetmaster/controller/AccountController.java @@ -54,7 +54,7 @@ public class AccountController extends BaseController } @RequestMapping("/accounts/{ID}/delete") - public String deleteAccountAndReferringPayments(Model model, @PathVariable("ID") Integer ID) + public String deleteAccountAndReferringTransactions(Model model, @PathVariable("ID") Integer ID) { if(accountRepository.findAll().size() > 1) { diff --git a/src/main/java/de/deadlocker8/budgetmaster/controller/SettingsController.java b/src/main/java/de/deadlocker8/budgetmaster/controller/SettingsController.java index 6cce1d62d2a02d518f633c3848667a2337c726b6..7a60fd6e3987b9b5987d46485a450d9175a35dfe 100644 --- a/src/main/java/de/deadlocker8/budgetmaster/controller/SettingsController.java +++ b/src/main/java/de/deadlocker8/budgetmaster/controller/SettingsController.java @@ -2,6 +2,7 @@ package de.deadlocker8.budgetmaster.controller; import de.deadlocker8.budgetmaster.authentication.User; import de.deadlocker8.budgetmaster.authentication.UserRepository; +import de.deadlocker8.budgetmaster.database.DatabaseImporter; import de.deadlocker8.budgetmaster.database.accountmatches.AccountMatchList; import de.deadlocker8.budgetmaster.database.Database; import de.deadlocker8.budgetmaster.database.DatabaseParser; @@ -54,7 +55,7 @@ public class SettingsController extends BaseController private AccountRepository accountRepository; @RequestMapping("/settings") - public String settings(Model model) + public String settings(HttpServletRequest request, Model model) { model.addAttribute("settings", settingsRepository.findOne(0)); return "settings"; @@ -225,10 +226,11 @@ public class SettingsController extends BaseController } @RequestMapping("/settings/database/import") - public String importDatabase(Model model, @ModelAttribute("Import") AccountMatchList accountMatchList, BindingResult bindingResult) + public String importDatabase(HttpServletRequest request, @ModelAttribute("Import") AccountMatchList accountMatchList) { - System.out.println(accountMatchList); - System.out.println(bindingResult); + DatabaseImporter importer = new DatabaseImporter((Database)request.getSession().getAttribute("database"), accountMatchList); + importer.importDatabase(); + return "settings"; } } \ No newline at end of file diff --git a/src/main/java/de/deadlocker8/budgetmaster/controller/PaymentController.java b/src/main/java/de/deadlocker8/budgetmaster/controller/TransactionController.java similarity index 52% rename from src/main/java/de/deadlocker8/budgetmaster/controller/PaymentController.java rename to src/main/java/de/deadlocker8/budgetmaster/controller/TransactionController.java index 78b93e85d3185b2d12134c5a68d5d94a5f92f58f..b52fc6fd347cfd316bc5099cf5195a57487f6da5 100644 --- a/src/main/java/de/deadlocker8/budgetmaster/controller/PaymentController.java +++ b/src/main/java/de/deadlocker8/budgetmaster/controller/TransactionController.java @@ -1,24 +1,24 @@ package de.deadlocker8.budgetmaster.controller; -import de.deadlocker8.budgetmaster.entities.Payment; +import de.deadlocker8.budgetmaster.entities.Transaction; import de.deadlocker8.budgetmaster.entities.Settings; import de.deadlocker8.budgetmaster.entities.Tag; import de.deadlocker8.budgetmaster.repeating.RepeatingOption; -import de.deadlocker8.budgetmaster.repeating.RepeatingPaymentUpdater; +import de.deadlocker8.budgetmaster.repeating.RepeatingTransactionUpdater; import de.deadlocker8.budgetmaster.repeating.endoption.*; import de.deadlocker8.budgetmaster.repeating.modifier.*; import de.deadlocker8.budgetmaster.repositories.*; import de.deadlocker8.budgetmaster.services.HelpersService; -import de.deadlocker8.budgetmaster.services.PaymentService; +import de.deadlocker8.budgetmaster.services.TransactionService; import de.deadlocker8.budgetmaster.utils.ResourceNotFoundException; -import de.deadlocker8.budgetmaster.validators.PaymentValidator; +import de.deadlocker8.budgetmaster.validators.TransactionValidator; import org.joda.time.DateTime; import org.joda.time.format.DateTimeFormat; -import org.joda.time.format.ISODateTimeFormat; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.validation.BindingResult; +import org.springframework.validation.ObjectError; import org.springframework.web.bind.annotation.*; import java.util.ArrayList; @@ -26,13 +26,13 @@ import java.util.List; @Controller -public class PaymentController extends BaseController +public class TransactionController extends BaseController { @Autowired - private PaymentRepository paymentRepository; + private TransactionRepository transactionRepository; @Autowired - private PaymentService paymentService; + private TransactionService transactionService; @Autowired private CategoryRepository categoryRepository; @@ -50,78 +50,78 @@ public class PaymentController extends BaseController private RepeatingOptionRepository repeatingOptionRepository; @Autowired - private RepeatingPaymentUpdater repeatingPaymentUpdater; + private RepeatingTransactionUpdater repeatingTransactionUpdater; @Autowired private HelpersService helpers; - @RequestMapping("/payments") - public String payments(Model model, @CookieValue(value = "currentDate", required = false) String cookieDate) + @RequestMapping("/transactions") + public String transactions(Model model, @CookieValue(value = "currentDate", required = false) String cookieDate) { DateTime date = getDateTimeFromCookie(cookieDate); - repeatingPaymentUpdater.updateRepeatingPayments(date); + repeatingTransactionUpdater.updateRepeatingTransactions(date); - List<Payment> payments = paymentService.getPaymentsForMonthAndYear(helpers.getCurrentAccount(), date.getMonthOfYear(), date.getYear(), getSettings().isRestActivated()); - int incomeSum = helpers.getIncomeSumForPaymentList(payments); - int paymentSum = helpers.getPaymentSumForPaymentList(payments); + List<Transaction> transactions = transactionService.getTransactionsForMonthAndYear(helpers.getCurrentAccount(), date.getMonthOfYear(), date.getYear(), getSettings().isRestActivated()); + int incomeSum = helpers.getIncomeSumForTransactionList(transactions); + int paymentSum = helpers.getPaymentSumForTransactionList(transactions); int rest = incomeSum + paymentSum; - model.addAttribute("payments", payments); + model.addAttribute("transactions", transactions); model.addAttribute("incomeSum", incomeSum); model.addAttribute("paymentSum", paymentSum); model.addAttribute("currentDate", date); model.addAttribute("rest", rest); - return "payments/payments"; + return "transactions/transactions"; } - @RequestMapping("/payments/{ID}/requestDelete") - public String requestDeletePayment(Model model, @PathVariable("ID") Integer ID, @CookieValue("currentDate") String cookieDate) + @RequestMapping("/transactions/{ID}/requestDelete") + public String requestDeleteTransaction(Model model, @PathVariable("ID") Integer ID, @CookieValue("currentDate") String cookieDate) { - if(!paymentService.isDeletable(ID)) + if(!transactionService.isDeletable(ID)) { - return "redirect:/payments"; + return "redirect:/transactions"; } DateTime date = getDateTimeFromCookie(cookieDate); - List<Payment> payments = paymentService.getPaymentsForMonthAndYear(helpers.getCurrentAccount(), date.getMonthOfYear(), date.getYear(), getSettings().isRestActivated()); - int incomeSum = helpers.getIncomeSumForPaymentList(payments); - int paymentSum = helpers.getPaymentSumForPaymentList(payments); + List<Transaction> transactions = transactionService.getTransactionsForMonthAndYear(helpers.getCurrentAccount(), date.getMonthOfYear(), date.getYear(), getSettings().isRestActivated()); + int incomeSum = helpers.getIncomeSumForTransactionList(transactions); + int paymentSum = helpers.getPaymentSumForTransactionList(transactions); int rest = incomeSum + paymentSum; - model.addAttribute("payments", payments); + model.addAttribute("transactions", transactions); model.addAttribute("incomeSum", incomeSum); model.addAttribute("paymentSum", paymentSum); model.addAttribute("currentDate", date); - model.addAttribute("currentPayment", paymentRepository.getOne(ID)); + model.addAttribute("currentTransaction", transactionRepository.getOne(ID)); model.addAttribute("rest", rest); - return "payments/payments"; + return "transactions/transactions"; } - @RequestMapping("/payments/{ID}/delete") - public String deletePayment(Model model, @PathVariable("ID") Integer ID) + @RequestMapping("/transactions/{ID}/delete") + public String deleteTransaction(Model model, @PathVariable("ID") Integer ID) { - paymentService.deletePayment(ID); - return "redirect:/payments"; + transactionService.deleteTransaction(ID); + return "redirect:/transactions"; } - @RequestMapping("/payments/newPayment") - public String newPayment(Model model, @CookieValue("currentDate") String cookieDate) + @RequestMapping("/transactions/newTransaction") + public String newTransaction(Model model, @CookieValue("currentDate") String cookieDate) { DateTime date = getDateTimeFromCookie(cookieDate); - Payment emptyPayment = new Payment(); + Transaction emptyTransaction = new Transaction(); model.addAttribute("currentDate", date); model.addAttribute("categories", categoryRepository.findAllByOrderByNameAsc()); model.addAttribute("accounts", accountRepository.findAllByOrderByNameAsc()); - model.addAttribute("payment", emptyPayment); - return "payments/newPayment"; + model.addAttribute("transaction", emptyTransaction); + return "transactions/newTransaction"; } - @RequestMapping(value = "/payments/newPayment", method = RequestMethod.POST) + @RequestMapping(value = "/transactions/newTransaction", method = RequestMethod.POST) public String post(Model model, @CookieValue("currentDate") String cookieDate, - @ModelAttribute("NewPayment") Payment payment, BindingResult bindingResult, + @ModelAttribute("NewTransaction") Transaction transaction, BindingResult bindingResult, @RequestParam(value = "isRepeating", required = false) boolean isRepeating, @RequestParam(value = "isPayment", required = false) boolean isPayment, @RequestParam(value = "enableRepeating", required = false) boolean enableRepeating, @@ -132,36 +132,36 @@ public class PaymentController extends BaseController { DateTime date = getDateTimeFromCookie(cookieDate); - // handle repeatingPayments - if(payment.getID() != null && isRepeating) + // handle repeating transactions + if(transaction.getID() != null && isRepeating) { - paymentService.deletePayment(payment.getID()); + transactionService.deleteTransaction(transaction.getID()); } - PaymentValidator paymentValidator = new PaymentValidator(); - paymentValidator.validate(payment, bindingResult); + TransactionValidator transactionValidator = new TransactionValidator(); + transactionValidator.validate(transaction, bindingResult); - if(payment.getAmount() == null) + if(transaction.getAmount() == null) { - payment.setAmount(0); + transaction.setAmount(0); } if(isPayment) { - payment.setAmount(-Math.abs(payment.getAmount())); + transaction.setAmount(-Math.abs(transaction.getAmount())); } else { - payment.setAmount(Math.abs(payment.getAmount())); + transaction.setAmount(Math.abs(transaction.getAmount())); } - List<Tag> tags = payment.getTags(); + List<Tag> tags = transaction.getTags(); if(tags != null) { - payment.setTags(new ArrayList<>()); + transaction.setTags(new ArrayList<>()); for(Tag currentTag : tags) { - payment = addTagToPayment(currentTag.getName(), payment); + transaction = addTagForTransaction(currentTag.getName(), transaction); } } @@ -187,9 +187,9 @@ public class PaymentController extends BaseController break; } - repeatingOption = new RepeatingOption(payment.getDate(), repeatingModifier, repeatingEnd); + repeatingOption = new RepeatingOption(transaction.getDate(), repeatingModifier, repeatingEnd); } - payment.setRepeatingOption(repeatingOption); + transaction.setRepeatingOption(repeatingOption); if(bindingResult.hasErrors()) { @@ -197,35 +197,35 @@ public class PaymentController extends BaseController model.addAttribute("currentDate", date); model.addAttribute("categories", categoryRepository.findAllByOrderByNameAsc()); model.addAttribute("accounts", accountRepository.findAllByOrderByNameAsc()); - model.addAttribute("payment", payment); - return "payments/newPayment"; + model.addAttribute("transaction", transaction); + return "transactions/newTransactiob"; } - paymentRepository.save(payment); - return "redirect:/payments"; + transactionRepository.save(transaction); + return "redirect:/transactions"; } - @RequestMapping("/payments/{ID}/edit") - public String editPayment(Model model, @CookieValue("currentDate") String cookieDate, @PathVariable("ID") Integer ID) + @RequestMapping("/transactions/{ID}/edit") + public String editTransaction(Model model, @CookieValue("currentDate") String cookieDate, @PathVariable("ID") Integer ID) { - Payment payment = paymentRepository.findOne(ID); - if(payment == null) + Transaction transaction = transactionRepository.findOne(ID); + if(transaction == null) { throw new ResourceNotFoundException(); } - // select first payment in order to provide correct start date for repeating payments - if(payment.getRepeatingOption() != null) + // select first transaction in order to provide correct start date for repeating transactions + if(transaction.getRepeatingOption() != null) { - payment = payment.getRepeatingOption().getReferringPayments().get(0); + transaction = transaction.getRepeatingOption().getReferringTransactions().get(0); } DateTime date = getDateTimeFromCookie(cookieDate); model.addAttribute("currentDate", date); model.addAttribute("categories", categoryRepository.findAllByOrderByNameAsc()); model.addAttribute("accounts", accountRepository.findAllByOrderByNameAsc()); - model.addAttribute("payment", payment); - return "payments/newPayment"; + model.addAttribute("transaction", transaction); + return "transactions/newTransaction"; } private Settings getSettings() @@ -245,26 +245,26 @@ public class PaymentController extends BaseController } } - private Payment addTagToPayment(String name, Payment payment) + private Transaction addTagForTransaction(String name, Transaction transaction) { if(tagRepository.findByName(name) == null) { tagRepository.save(new Tag(name)); } - List<Payment> referringPayments = tagRepository.findByName(name).getReferringPayments(); - if(referringPayments == null || !referringPayments.contains(payment)) + List<Transaction> referringTransactions = tagRepository.findByName(name).getReferringTransactions(); + if(referringTransactions == null || !referringTransactions.contains(transaction)) { - payment.getTags().add(tagRepository.findByName(name)); + transaction.getTags().add(tagRepository.findByName(name)); } - return payment; + return transaction; } - private void removeTagFromPayment(String name, Payment payment) + private void removeTagForTransaction(String name, Transaction transaction) { Tag currentTag = tagRepository.findByName(name); - currentTag.getReferringPayments().remove(payment); + currentTag.getReferringTransactions().remove(transaction); tagRepository.save(currentTag); } } \ No newline at end of file diff --git a/src/main/java/de/deadlocker8/budgetmaster/database/Database.java b/src/main/java/de/deadlocker8/budgetmaster/database/Database.java index 305e9d69f74a617bd5afcae07f253ec2ed9174a0..bf590ae498c328cdc550060e7dc67599baee7834 100644 --- a/src/main/java/de/deadlocker8/budgetmaster/database/Database.java +++ b/src/main/java/de/deadlocker8/budgetmaster/database/Database.java @@ -3,7 +3,7 @@ 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.Payment; +import de.deadlocker8.budgetmaster.entities.Transaction; import java.util.List; @@ -22,17 +22,17 @@ public class Database private List<Account> accounts; @Expose - private List<Payment> payments; + private List<Transaction> transactions; public Database() { } - public Database(List<Category> categories, List<Account> accounts, List<Payment> payments) + public Database(List<Category> categories, List<Account> accounts, List<Transaction> transactions) { this.categories = categories; this.accounts = accounts; - this.payments = payments; + this.transactions = transactions; } public List<Category> getCategories() @@ -45,8 +45,8 @@ public class Database return accounts; } - public List<Payment> getPayments() + public List<Transaction> getTransactions() { - return payments; + return transactions; } } \ No newline at end of file diff --git a/src/main/java/de/deadlocker8/budgetmaster/database/DatabaseImporter.java b/src/main/java/de/deadlocker8/budgetmaster/database/DatabaseImporter.java new file mode 100644 index 0000000000000000000000000000000000000000..308bf8dd5c8a90138e569c9ee420d7e965b53558 --- /dev/null +++ b/src/main/java/de/deadlocker8/budgetmaster/database/DatabaseImporter.java @@ -0,0 +1,92 @@ +package de.deadlocker8.budgetmaster.database; + +import de.deadlocker8.budgetmaster.database.accountmatches.AccountMatchList; +import de.deadlocker8.budgetmaster.entities.Category; +import de.deadlocker8.budgetmaster.entities.CategoryType; +import de.deadlocker8.budgetmaster.entities.Transaction; +import de.deadlocker8.budgetmaster.repositories.CategoryRepository; +import org.springframework.beans.factory.annotation.Autowired; + +import java.util.ArrayList; +import java.util.List; + +public class DatabaseImporter +{ + @Autowired + private CategoryRepository categoryRepository; + + private Database database; + private AccountMatchList accountMatchList; + + public DatabaseImporter(Database database, AccountMatchList accountMatchList) + { + this.database = database; + this.accountMatchList = accountMatchList; + } + + public void importDatabase() + { + importCategories(); +// +// for(AccountMatch accountMatch : accountMatchList.getAccountMatches()) +// { +// +// } + } + + private void importCategories() + { + List<Transaction> alreadyUpdatedTransactions = new ArrayList<>(); + + for(Category category : database.getCategories()) + { + if(!category.getType().equals(CategoryType.CUSTOM)) + { + continue; + } + + int newCategoryID = -1; + + System.out.println("Importing category: " + category); + + Category existingCategory = categoryRepository.findByNameAndColorAndType(category.getName(), category.getColor(), category.getType()); + if(existingCategory == null) + { + //category does not exist --> create it + category.setID(null); + categoryRepository.save(category); + + Category newCategory = categoryRepository.findByNameAndColorAndType(category.getName(), category.getColor(), category.getType()); + newCategoryID = newCategory.getID(); + } + else + { + //category already exists + newCategoryID = existingCategory.getID(); + } + + int oldCategoryID = category.getID(); + + List<Transaction> transactions = database.getTransactions(); + transactions.removeAll(alreadyUpdatedTransactions); + + alreadyUpdatedTransactions.addAll(updateCategoriesForTransactions(transactions, oldCategoryID, newCategoryID)); + } + } + + private List<Transaction> updateCategoriesForTransactions(List<Transaction> transactions, int oldCategoryID, int newCategoryID) + { + System.out.println("Replacing category id " + oldCategoryID + " with " + newCategoryID); + List<Transaction> updatedTransactions = new ArrayList<>(); + for(Transaction transaction : transactions) + { + if(transaction.getCategory().getID() == oldCategoryID) + { + transaction.getCategory().setID(newCategoryID); + updatedTransactions.add(transaction); + } + } + + return updatedTransactions; + } +} 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 b50348f6d6729f656beef73126ce44d6395d593d..550b172e95a4468d535bbc81d687ce817465fe98 100644 --- a/src/main/java/de/deadlocker8/budgetmaster/database/DatabaseParser_v3.java +++ b/src/main/java/de/deadlocker8/budgetmaster/database/DatabaseParser_v3.java @@ -31,9 +31,9 @@ public class DatabaseParser_v3 JsonObject root = new JsonParser().parse(jsonString).getAsJsonObject(); categories = parseCategories(root); accounts = parseAccounts(root); - List<Payment> payments = parsePayments(root); + List<Transaction> transactions = parseTransactions(root); - return new Database(categories, accounts, payments); + return new Database(categories, accounts, transactions); } private List<Category> parseCategories(JsonObject root) @@ -61,48 +61,48 @@ public class DatabaseParser_v3 return parsedAccounts; } - private List<Payment> parsePayments(JsonObject root) + private List<Transaction> parseTransactions(JsonObject root) { - List<Payment> parsedPayments = new ArrayList<>(); - JsonArray payments = root.get("payments").getAsJsonArray(); - for(JsonElement currentPayment : payments) + List<Transaction> parsedTransactions = new ArrayList<>(); + JsonArray transactions = root.get("transactions").getAsJsonArray(); + for(JsonElement currentTransaction : transactions) { - int amount = currentPayment.getAsJsonObject().get("amount").getAsInt(); - String name = currentPayment.getAsJsonObject().get("name").getAsString(); - String description = currentPayment.getAsJsonObject().get("description").getAsString(); + int amount = currentTransaction.getAsJsonObject().get("amount").getAsInt(); + String name = currentTransaction.getAsJsonObject().get("name").getAsString(); + String description = currentTransaction.getAsJsonObject().get("description").getAsString(); - Payment payment = new Payment(); - payment.setAmount(amount); - payment.setName(name); - payment.setDescription(description); - payment.setTags(parseTags(currentPayment.getAsJsonObject())); + Transaction transaction = new Transaction(); + transaction.setAmount(amount); + transaction.setName(name); + transaction.setDescription(description); + transaction.setTags(parseTags(currentTransaction.getAsJsonObject())); - int categoryID = currentPayment.getAsJsonObject().get("category").getAsJsonObject().get("ID").getAsInt(); - payment.setCategory(getCategoryByID(categoryID)); + int categoryID = currentTransaction.getAsJsonObject().get("category").getAsJsonObject().get("ID").getAsInt(); + transaction.setCategory(getCategoryByID(categoryID)); - int accountID = currentPayment.getAsJsonObject().get("account").getAsJsonObject().get("ID").getAsInt(); - payment.setAccount(getAccountByID(accountID)); + int accountID = currentTransaction.getAsJsonObject().get("account").getAsJsonObject().get("ID").getAsInt(); + transaction.setAccount(getAccountByID(accountID)); - String date = currentPayment.getAsJsonObject().get("date").getAsString(); + String date = currentTransaction.getAsJsonObject().get("date").getAsString(); DateTime parsedDate = DateTime.parse(date, DateTimeFormat.forPattern("yyyy-MM-dd")); - payment.setDate(parsedDate); + transaction.setDate(parsedDate); - payment.setRepeatingOption(parseRepeatingOption(currentPayment.getAsJsonObject(), parsedDate)); + transaction.setRepeatingOption(parseRepeatingOption(currentTransaction.getAsJsonObject(), parsedDate)); - parsedPayments.add(payment); + parsedTransactions.add(transaction); } - return parsedPayments; + return parsedTransactions; } - private RepeatingOption parseRepeatingOption(JsonObject payment, DateTime startDate) + private RepeatingOption parseRepeatingOption(JsonObject transactiob, DateTime startDate) { - if(!payment.has("repeatingOption")) + if(!transactiob.has("repeatingOption")) { return null; } - JsonObject option = payment.get("repeatingOption").getAsJsonObject(); + JsonObject option = transactiob.get("repeatingOption").getAsJsonObject(); JsonObject repeatingModifier = option.get("modifier").getAsJsonObject(); String repeatingModifierType = repeatingModifier.get("localizationKey").getAsString(); @@ -137,10 +137,10 @@ public class DatabaseParser_v3 return repeatingOption; } - private List<Tag> parseTags(JsonObject payment) + private List<Tag> parseTags(JsonObject transaction) { List<Tag> parsedTags = new ArrayList<>(); - JsonArray tags = payment.get("tags").getAsJsonArray(); + JsonArray tags = transaction.get("tags").getAsJsonArray(); for(JsonElement currentTag : tags) { parsedTags.add(new Gson().fromJson(currentTag, Tag.class)); 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 93c2db377c38c8e9c20946fce18b2820599400b7..f29aa58ea8cde4eb7141675eea3fdc64036d7c63 100644 --- a/src/main/java/de/deadlocker8/budgetmaster/database/legacy/LegacyParser.java +++ b/src/main/java/de/deadlocker8/budgetmaster/database/legacy/LegacyParser.java @@ -8,7 +8,7 @@ import de.deadlocker8.budgetmaster.database.Database; import de.deadlocker8.budgetmaster.entities.Account; import de.deadlocker8.budgetmaster.entities.Category; import de.deadlocker8.budgetmaster.entities.CategoryType; -import de.deadlocker8.budgetmaster.entities.Payment; +import de.deadlocker8.budgetmaster.entities.Transaction; import de.deadlocker8.budgetmaster.repeating.RepeatingOption; import de.deadlocker8.budgetmaster.repeating.endoption.RepeatingEndDate; import de.deadlocker8.budgetmaster.repeating.endoption.RepeatingEndNever; @@ -43,12 +43,12 @@ public class LegacyParser categories = new ArrayList<>(parseCategories(root)); tags = parseTags(root); tagMatches = parseTagMatches(root); - List<Payment> payments = parsePayments(root); + List<Transaction> transactions = parsePayments(root); List<Account> accounts = new ArrayList<>(); accounts.add(account); - return new Database(categories, accounts, payments); + return new Database(categories, accounts, transactions); } private Set<Category> parseCategories(JsonObject root) @@ -104,18 +104,18 @@ public class LegacyParser return parsedTagMatches; } - private List<Payment> parsePayments(JsonObject root) + private List<Transaction> parsePayments(JsonObject root) { - List<Payment> parsedPayments = new ArrayList<>(); - parsedPayments.addAll(parseNormalPayments(root)); - parsedPayments.addAll(parseRepeatingPayments(root)); + List<Transaction> parsedTransactions = new ArrayList<>(); + parsedTransactions.addAll(parseNormalPayments(root)); + parsedTransactions.addAll(parseRepeatingPayments(root)); - return parsedPayments; + return parsedTransactions; } - private List<Payment> parseNormalPayments(JsonObject root) + private List<Transaction> parseNormalPayments(JsonObject root) { - List<Payment> parsedPayments = new ArrayList<>(); + List<Transaction> parsedTransactions = new ArrayList<>(); JsonArray payments = root.get("normalPayments").getAsJsonArray(); for(JsonElement currentPayment : payments) { @@ -126,27 +126,27 @@ public class LegacyParser String name = currentPayment.getAsJsonObject().get("name").getAsString(); String description = currentPayment.getAsJsonObject().get("description").getAsString(); - Payment payment = new Payment(); - payment.setAmount(amount); - payment.setName(name); - payment.setDescription(description); - payment.setCategory(getCategoryByID(categoryID)); - payment.setAccount(account); - payment.setRepeatingOption(null); - payment.setTags(getTagsByPaymentID(ID)); + Transaction transaction = new Transaction(); + transaction.setAmount(amount); + transaction.setName(name); + transaction.setDescription(description); + transaction.setCategory(getCategoryByID(categoryID)); + transaction.setAccount(account); + transaction.setRepeatingOption(null); + transaction.setTags(getTagsByPaymentID(ID)); DateTime parsedDate = DateTime.parse(date, DateTimeFormat.forPattern("yyyy-MM-dd")); - payment.setDate(parsedDate); + transaction.setDate(parsedDate); - parsedPayments.add(payment); + parsedTransactions.add(transaction); } - return parsedPayments; + return parsedTransactions; } - private List<Payment> parseRepeatingPayments(JsonObject root) + private List<Transaction> parseRepeatingPayments(JsonObject root) { - List<Payment> parsedPayments = new ArrayList<>(); + List<Transaction> parsedTransactions = new ArrayList<>(); JsonArray payments = root.get("repeatingPayments").getAsJsonArray(); for(JsonElement currentPayment : payments) { @@ -157,23 +157,23 @@ public class LegacyParser String name = currentPayment.getAsJsonObject().get("name").getAsString(); String description = currentPayment.getAsJsonObject().get("description").getAsString(); - Payment payment = new Payment(); - payment.setAmount(amount); - payment.setName(name); - payment.setDescription(description); - payment.setCategory(getCategoryByID(categoryID)); - payment.setTags(getTagsByPaymentID(ID)); - payment.setAccount(account); + Transaction transaction = new Transaction(); + transaction.setAmount(amount); + transaction.setName(name); + transaction.setDescription(description); + transaction.setCategory(getCategoryByID(categoryID)); + transaction.setTags(getTagsByPaymentID(ID)); + transaction.setAccount(account); DateTime parsedDate = DateTime.parse(date, DateTimeFormat.forPattern("yyyy-MM-dd")); - payment.setDate(parsedDate); + transaction.setDate(parsedDate); - payment.setRepeatingOption(parseRepeatingOption(currentPayment.getAsJsonObject(), parsedDate)); + transaction.setRepeatingOption(parseRepeatingOption(currentPayment.getAsJsonObject(), parsedDate)); - parsedPayments.add(payment); + parsedTransactions.add(transaction); } - return parsedPayments; + return parsedTransactions; } private RepeatingOption parseRepeatingOption(JsonObject repeatingPayment, DateTime startDate) diff --git a/src/main/java/de/deadlocker8/budgetmaster/entities/Account.java b/src/main/java/de/deadlocker8/budgetmaster/entities/Account.java index 5b56e0b481a9ca040eb0379be0580976637ca2d1..bef1cb0f0da1292a6796b5352b970a3de3930caa 100644 --- a/src/main/java/de/deadlocker8/budgetmaster/entities/Account.java +++ b/src/main/java/de/deadlocker8/budgetmaster/entities/Account.java @@ -23,7 +23,7 @@ public class Account private String name; @OneToMany(mappedBy = "account", fetch = FetchType.LAZY) - private List<Payment> referringPayments; + private List<Transaction> referringTransactions; private boolean isSelected; @@ -57,14 +57,14 @@ public class Account this.name = name; } - public List<Payment> getReferringPayments() + public List<Transaction> getReferringTransactions() { - return referringPayments; + return referringTransactions; } - public void setReferringPayments(List<Payment> referringPayments) + public void setReferringTransactions(List<Transaction> referringTransactions) { - this.referringPayments = referringPayments; + this.referringTransactions = referringTransactions; } public boolean isSelected() @@ -83,7 +83,7 @@ public class Account return "Account{" + "ID=" + ID + ", name='" + name + '\'' + - ", referringPayments=" + referringPayments + + ", referringTransactions=" + referringTransactions + ", isSelected=" + isSelected + '}'; } diff --git a/src/main/java/de/deadlocker8/budgetmaster/entities/Category.java b/src/main/java/de/deadlocker8/budgetmaster/entities/Category.java index 004b9b966f13894b492e8d4bf950f20b417af70d..9e35ebdeeeaf8aa42cda9afcb37312af71ae14dc 100644 --- a/src/main/java/de/deadlocker8/budgetmaster/entities/Category.java +++ b/src/main/java/de/deadlocker8/budgetmaster/entities/Category.java @@ -28,7 +28,7 @@ public class Category private CategoryType type; @OneToMany(mappedBy = "category", fetch = FetchType.LAZY) - private transient List<Payment> referringPayments; + private transient List<Transaction> referringTransactions; public Category(String name, String color, CategoryType type) { @@ -81,14 +81,14 @@ public class Category this.type = type; } - public List<Payment> getReferringPayments() + public List<Transaction> getReferringTransactions() { - return referringPayments; + return referringTransactions; } - public void setReferringPayments(List<Payment> referringPayments) + public void setReferringTransactions(List<Transaction> referringTransactions) { - this.referringPayments = referringPayments; + this.referringTransactions = referringTransactions; } public String getAppropriateTextColor() diff --git a/src/main/java/de/deadlocker8/budgetmaster/entities/Tag.java b/src/main/java/de/deadlocker8/budgetmaster/entities/Tag.java index 791fcb600acd30f9f14aac841810f02d26fc1989..dfcc5de842dc284e002ec3015dbba34ddfa6004e 100644 --- a/src/main/java/de/deadlocker8/budgetmaster/entities/Tag.java +++ b/src/main/java/de/deadlocker8/budgetmaster/entities/Tag.java @@ -23,7 +23,7 @@ public class Tag private String name; @ManyToMany(mappedBy = "tags", fetch = FetchType.LAZY) - private transient List<Payment> referringPayments; + private transient List<Transaction> referringTransactions; public Tag() { @@ -54,9 +54,9 @@ public class Tag this.name = name; } - public List<Payment> getReferringPayments() + public List<Transaction> getReferringTransactions() { - return referringPayments; + return referringTransactions; } @Override diff --git a/src/main/java/de/deadlocker8/budgetmaster/entities/Payment.java b/src/main/java/de/deadlocker8/budgetmaster/entities/Transaction.java similarity index 73% rename from src/main/java/de/deadlocker8/budgetmaster/entities/Payment.java rename to src/main/java/de/deadlocker8/budgetmaster/entities/Transaction.java index 18331858dc78a3fc98f3fe8b840509ce87a8456d..935e46c401bf2505634236b0e97b4a73aa847b61 100644 --- a/src/main/java/de/deadlocker8/budgetmaster/entities/Payment.java +++ b/src/main/java/de/deadlocker8/budgetmaster/entities/Transaction.java @@ -11,7 +11,7 @@ import java.util.List; import java.util.Objects; @Entity -public class Payment +public class Transaction { @Id @GeneratedValue(strategy = GenerationType.AUTO) @@ -45,21 +45,21 @@ public class Payment @Expose private RepeatingOption repeatingOption; - public Payment() + public Transaction() { } - public Payment(Payment payment) + public Transaction(Transaction transaction) { - this.ID = payment.getID(); - this.amount = payment.getAmount(); - this.date = payment.getDate(); - this.account = payment.getAccount(); - this.category = payment.getCategory(); - this.name = payment.getName(); - this.description = payment.getDescription(); - this.tags = new ArrayList<>(payment.getTags()); - this.repeatingOption = payment.getRepeatingOption(); + this.ID = transaction.getID(); + this.amount = transaction.getAmount(); + this.date = transaction.getDate(); + this.account = transaction.getAccount(); + this.category = transaction.getCategory(); + this.name = transaction.getName(); + this.description = transaction.getDescription(); + this.tags = new ArrayList<>(transaction.getTags()); + this.repeatingOption = transaction.getRepeatingOption(); } public Integer getID() @@ -160,7 +160,7 @@ public class Payment @Override public String toString() { - return "Payment{" + + return "Transaction{" + "ID=" + ID + ", amount=" + amount + ", date=" + date + @@ -178,16 +178,16 @@ public class Payment { if(this == o) return true; if(o == null || getClass() != o.getClass()) return false; - Payment payment = (Payment) o; - return Objects.equals(ID, payment.ID) && - Objects.equals(amount, payment.amount) && - Objects.equals(date, payment.date) && - Objects.equals(account, payment.account) && - Objects.equals(category, payment.category) && - Objects.equals(name, payment.name) && - Objects.equals(description, payment.description) && - Objects.equals(tags, payment.tags) && - Objects.equals(repeatingOption, payment.repeatingOption); + Transaction transaction = (Transaction) o; + return Objects.equals(ID, transaction.ID) && + Objects.equals(amount, transaction.amount) && + Objects.equals(date, transaction.date) && + Objects.equals(account, transaction.account) && + Objects.equals(category, transaction.category) && + Objects.equals(name, transaction.name) && + Objects.equals(description, transaction.description) && + Objects.equals(tags, transaction.tags) && + Objects.equals(repeatingOption, transaction.repeatingOption); } @Override diff --git a/src/main/java/de/deadlocker8/budgetmaster/repeating/RepeatingOption.java b/src/main/java/de/deadlocker8/budgetmaster/repeating/RepeatingOption.java index 901e2e1b1f2ef13b243d2fd7c6a8609d6bbab472..e6a5a4123204e3f95a9b9f7637323541da5e6e22 100644 --- a/src/main/java/de/deadlocker8/budgetmaster/repeating/RepeatingOption.java +++ b/src/main/java/de/deadlocker8/budgetmaster/repeating/RepeatingOption.java @@ -1,7 +1,7 @@ package de.deadlocker8.budgetmaster.repeating; import com.google.gson.annotations.Expose; -import de.deadlocker8.budgetmaster.entities.Payment; +import de.deadlocker8.budgetmaster.entities.Transaction; import de.deadlocker8.budgetmaster.repeating.endoption.RepeatingEnd; import de.deadlocker8.budgetmaster.repeating.modifier.RepeatingModifier; import org.joda.time.DateTime; @@ -33,7 +33,7 @@ public class RepeatingOption private RepeatingEnd endOption; @OneToMany(cascade = CascadeType.ALL, mappedBy = "repeatingOption", fetch = FetchType.LAZY) - private List<Payment> referringPayments; + private List<Transaction> referringTransactions; public RepeatingOption(DateTime startDate, RepeatingModifier modifier, RepeatingEnd endOption) { @@ -84,14 +84,14 @@ public class RepeatingOption this.endOption = endOption; } - public List<Payment> getReferringPayments() + public List<Transaction> getReferringTransactions() { - return referringPayments; + return referringTransactions; } - public void setReferringPayments(List<Payment> referringPayments) + public void setReferringTransactions(List<Transaction> referringTransactions) { - this.referringPayments = referringPayments; + this.referringTransactions = referringTransactions; } public List<DateTime> getRepeatingDates(DateTime dateFetchLimit) diff --git a/src/main/java/de/deadlocker8/budgetmaster/repeating/RepeatingPaymentUpdater.java b/src/main/java/de/deadlocker8/budgetmaster/repeating/RepeatingPaymentUpdater.java deleted file mode 100644 index 8f68f33ef669563ff1c8b4cba5e72bf5d6f10ab2..0000000000000000000000000000000000000000 --- a/src/main/java/de/deadlocker8/budgetmaster/repeating/RepeatingPaymentUpdater.java +++ /dev/null @@ -1,62 +0,0 @@ -package de.deadlocker8.budgetmaster.repeating; - -import de.deadlocker8.budgetmaster.entities.Payment; -import de.deadlocker8.budgetmaster.repositories.PaymentRepository; -import de.deadlocker8.budgetmaster.repositories.RepeatingOptionRepository; -import de.deadlocker8.budgetmaster.services.HelpersService; -import de.deadlocker8.budgetmaster.services.PaymentService; -import org.joda.time.DateTime; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Service; - -import java.util.Date; -import java.util.List; - -@Service -public class RepeatingPaymentUpdater -{ - @Autowired - private PaymentRepository paymentRepository; - - @Autowired - private PaymentService paymentService; - - @Autowired - private RepeatingOptionRepository repeatingOptionRepository; - - @Autowired - private HelpersService helpers; - - public void updateRepeatingPayments(DateTime now) - { - List<RepeatingOption> repeatingOptions = repeatingOptionRepository.findAllByOrderByStartDateAsc(); - for(RepeatingOption option : repeatingOptions) - { - List<Payment> payments = option.getReferringPayments(); - List<DateTime> correctDates = option.getRepeatingDates(now); - for(DateTime currentDate : correctDates) - { - if(!containsDate(payments, currentDate)) - { - Payment newPayment = new Payment(payments.get(0)); - newPayment.setID(null); - newPayment.setDate(currentDate); - paymentRepository.save(newPayment); - } - } - } - } - - private boolean containsDate(List<Payment> payments, DateTime date) - { - for(Payment currentPayment : payments) - { - if(date.equals(currentPayment.getDate())) - { - return true; - } - } - - return false; - } -} \ No newline at end of file diff --git a/src/main/java/de/deadlocker8/budgetmaster/repeating/RepeatingTransactionUpdater.java b/src/main/java/de/deadlocker8/budgetmaster/repeating/RepeatingTransactionUpdater.java new file mode 100644 index 0000000000000000000000000000000000000000..08a6e6ae384ba47a2487f774a197697babccd18f --- /dev/null +++ b/src/main/java/de/deadlocker8/budgetmaster/repeating/RepeatingTransactionUpdater.java @@ -0,0 +1,61 @@ +package de.deadlocker8.budgetmaster.repeating; + +import de.deadlocker8.budgetmaster.entities.Transaction; +import de.deadlocker8.budgetmaster.repositories.TransactionRepository; +import de.deadlocker8.budgetmaster.repositories.RepeatingOptionRepository; +import de.deadlocker8.budgetmaster.services.HelpersService; +import de.deadlocker8.budgetmaster.services.TransactionService; +import org.joda.time.DateTime; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.List; + +@Service +public class RepeatingTransactionUpdater +{ + @Autowired + private TransactionRepository transactionRepository; + + @Autowired + private TransactionService transactionService; + + @Autowired + private RepeatingOptionRepository repeatingOptionRepository; + + @Autowired + private HelpersService helpers; + + public void updateRepeatingTransactions(DateTime now) + { + List<RepeatingOption> repeatingOptions = repeatingOptionRepository.findAllByOrderByStartDateAsc(); + for(RepeatingOption option : repeatingOptions) + { + List<Transaction> transactions = option.getReferringTransactions(); + List<DateTime> correctDates = option.getRepeatingDates(now); + for(DateTime currentDate : correctDates) + { + if(!containsDate(transactions, currentDate)) + { + Transaction newTransaction = new Transaction(transactions.get(0)); + newTransaction.setID(null); + newTransaction.setDate(currentDate); + transactionRepository.save(newTransaction); + } + } + } + } + + private boolean containsDate(List<Transaction> transactions, DateTime date) + { + for(Transaction currentTransaction : transactions) + { + if(date.equals(currentTransaction.getDate())) + { + return true; + } + } + + return false; + } +} \ No newline at end of file diff --git a/src/main/java/de/deadlocker8/budgetmaster/repositories/CategoryRepository.java b/src/main/java/de/deadlocker8/budgetmaster/repositories/CategoryRepository.java index af8e4ccb758c7339b1b686e76a46634a25946ed1..6374a1a3e4c54b2c21920b78b0957e12761ca63b 100644 --- a/src/main/java/de/deadlocker8/budgetmaster/repositories/CategoryRepository.java +++ b/src/main/java/de/deadlocker8/budgetmaster/repositories/CategoryRepository.java @@ -14,4 +14,6 @@ public interface CategoryRepository extends JpaRepository<Category, Integer> Category findByName(String name); Category findByType(CategoryType categoryType); + + Category findByNameAndColorAndType(String name, String color, CategoryType categoryType); } \ No newline at end of file diff --git a/src/main/java/de/deadlocker8/budgetmaster/repositories/PaymentRepository.java b/src/main/java/de/deadlocker8/budgetmaster/repositories/PaymentRepository.java deleted file mode 100644 index d1e6bd2753703a131455c087078332bc806ff6ce..0000000000000000000000000000000000000000 --- a/src/main/java/de/deadlocker8/budgetmaster/repositories/PaymentRepository.java +++ /dev/null @@ -1,20 +0,0 @@ -package de.deadlocker8.budgetmaster.repositories; - -import de.deadlocker8.budgetmaster.entities.Account; -import de.deadlocker8.budgetmaster.entities.Payment; -import org.joda.time.DateTime; -import org.springframework.data.jpa.repository.JpaRepository; -import org.springframework.data.jpa.repository.Query; - -import java.util.List; - - -public interface PaymentRepository extends JpaRepository<Payment, Integer> -{ - List<Payment> findAllByAccountAndDateBetweenOrderByDateDesc(Account account, DateTime startDate, DateTime endDate); - - List<Payment> findAllByAccount(Account account); - - @Query(value = "SELECT SUM(p.amount) FROM Payment as p WHERE p.account_id = ?1 AND p.date BETWEEN ?2 AND ?3", nativeQuery = true) - Integer getRest(int accountID, String startDate, String endDate); -} \ No newline at end of file diff --git a/src/main/java/de/deadlocker8/budgetmaster/repositories/TransactionRepository.java b/src/main/java/de/deadlocker8/budgetmaster/repositories/TransactionRepository.java new file mode 100644 index 0000000000000000000000000000000000000000..3cda7a46e9fcd9628ddaadf2d0dd8bf74008bbaf --- /dev/null +++ b/src/main/java/de/deadlocker8/budgetmaster/repositories/TransactionRepository.java @@ -0,0 +1,20 @@ +package de.deadlocker8.budgetmaster.repositories; + +import de.deadlocker8.budgetmaster.entities.Account; +import de.deadlocker8.budgetmaster.entities.Transaction; +import org.joda.time.DateTime; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Query; + +import java.util.List; + + +public interface TransactionRepository extends JpaRepository<Transaction, Integer> +{ + List<Transaction> findAllByAccountAndDateBetweenOrderByDateDesc(Account account, DateTime startDate, DateTime endDate); + + List<Transaction> findAllByAccount(Account account); + + @Query(value = "SELECT SUM(t.amount) FROM TRANSACTION as t WHERE t.account_id = ?1 AND t.date BETWEEN ?2 AND ?3", nativeQuery = true) + Integer getRest(int accountID, String startDate, String endDate); +} \ 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 b1afd5446e5850a039253745246f2befe62ec5d8..a547cad92434c6dfcba6291c0cc84ff7e9a12790 100644 --- a/src/main/java/de/deadlocker8/budgetmaster/services/AccountService.java +++ b/src/main/java/de/deadlocker8/budgetmaster/services/AccountService.java @@ -2,12 +2,10 @@ package de.deadlocker8.budgetmaster.services; import de.deadlocker8.budgetmaster.authentication.User; import de.deadlocker8.budgetmaster.authentication.UserRepository; -import de.deadlocker8.budgetmaster.authentication.UserService; import de.deadlocker8.budgetmaster.entities.Account; import de.deadlocker8.budgetmaster.repositories.AccountRepository; -import de.deadlocker8.budgetmaster.repositories.PaymentRepository; +import de.deadlocker8.budgetmaster.repositories.TransactionRepository; import de.deadlocker8.budgetmaster.utils.Strings; -import org.apache.tomcat.jni.Local; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -22,14 +20,14 @@ public class AccountService implements Resetable { private final Logger LOGGER = LoggerFactory.getLogger(this.getClass()); private AccountRepository accountRepository; - private PaymentRepository paymentRepository; + private TransactionRepository transactionRepository; private UserRepository userRepository; @Autowired - public AccountService(AccountRepository accountRepository, PaymentRepository paymentRepository, UserRepository userRepository) + public AccountService(AccountRepository accountRepository, TransactionRepository transactionRepository, UserRepository userRepository) { this.accountRepository = accountRepository; - this.paymentRepository = paymentRepository; + this.transactionRepository = transactionRepository; this.userRepository = userRepository; createDefaults(); @@ -43,8 +41,8 @@ public class AccountService implements Resetable public void deleteAccount(int ID) { Account accountToDelete = accountRepository.findOne(ID); - paymentRepository.delete(accountToDelete.getReferringPayments()); - accountToDelete.setReferringPayments(new ArrayList<>()); + transactionRepository.delete(accountToDelete.getReferringTransactions()); + accountToDelete.setReferringTransactions(new ArrayList<>()); List<Account> accounts = accountRepository.findAll(); accounts.remove(accountToDelete); diff --git a/src/main/java/de/deadlocker8/budgetmaster/services/CategoryService.java b/src/main/java/de/deadlocker8/budgetmaster/services/CategoryService.java index c678b2cf888c8d8f7310cb760600fe69bcbb4b69..b41090cee955ae29fb33ebb10daf19ef70863838 100644 --- a/src/main/java/de/deadlocker8/budgetmaster/services/CategoryService.java +++ b/src/main/java/de/deadlocker8/budgetmaster/services/CategoryService.java @@ -2,7 +2,7 @@ package de.deadlocker8.budgetmaster.services; import de.deadlocker8.budgetmaster.entities.Category; import de.deadlocker8.budgetmaster.entities.CategoryType; -import de.deadlocker8.budgetmaster.entities.Payment; +import de.deadlocker8.budgetmaster.entities.Transaction; import de.deadlocker8.budgetmaster.repositories.CategoryRepository; import de.deadlocker8.budgetmaster.utils.Strings; import org.slf4j.Logger; @@ -35,12 +35,12 @@ public class CategoryService implements Resetable public void deleteCategory(int ID) { Category categoryToDelete = categoryRepository.findOne(ID); - List<Payment> referringPayments = categoryToDelete.getReferringPayments(); - if(referringPayments != null) + List<Transaction> referringTransactions = categoryToDelete.getReferringTransactions(); + if(referringTransactions != null) { - for(Payment payment : referringPayments) + for(Transaction transaction : referringTransactions) { - payment.setCategory(categoryRepository.findByType(CategoryType.NONE)); + transaction.setCategory(categoryRepository.findByType(CategoryType.NONE)); } } diff --git a/src/main/java/de/deadlocker8/budgetmaster/services/DatabaseService.java b/src/main/java/de/deadlocker8/budgetmaster/services/DatabaseService.java index 87fdead4e703c72c55f76b0982152f7595976c57..489664120accd07905b86dde44e0daa38a8253ef 100644 --- a/src/main/java/de/deadlocker8/budgetmaster/services/DatabaseService.java +++ b/src/main/java/de/deadlocker8/budgetmaster/services/DatabaseService.java @@ -4,7 +4,7 @@ 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.Payment; +import de.deadlocker8.budgetmaster.entities.Transaction; import org.joda.time.DateTime; import org.joda.time.format.ISODateTimeFormat; import org.slf4j.Logger; @@ -21,21 +21,21 @@ public class DatabaseService private final Logger LOGGER = LoggerFactory.getLogger(this.getClass()); private AccountService accountService; private CategoryService categoryService; - private PaymentService paymentService; + private TransactionService transactionService; private TagService tagService; @Autowired - public DatabaseService(AccountService accountService, CategoryService categoryService, PaymentService paymentService, TagService tagService) + public DatabaseService(AccountService accountService, CategoryService categoryService, TransactionService transactionService, TagService tagService) { this.accountService = accountService; this.categoryService = categoryService; - this.paymentService = paymentService; + this.transactionService = transactionService; this.tagService = tagService; } public void reset() { - resetPayments(); + resetTransactions(); resetCategories(); resetAccounts(); resetTags(); @@ -57,12 +57,12 @@ public class DatabaseService LOGGER.info("All categories reset."); } - private void resetPayments() + private void resetTransactions() { - LOGGER.info("Resetting payments..."); - paymentService.deleteAll(); - paymentService.createDefaults(); - LOGGER.info("All payments reset."); + LOGGER.info("Resetting transactions..."); + transactionService.deleteAll(); + transactionService.createDefaults(); + LOGGER.info("All transactions reset."); } private void resetTags() @@ -77,9 +77,9 @@ public class DatabaseService { List<Category> categories = categoryService.getRepository().findAll(); List<Account> accounts = accountService.getRepository().findAll(); - List<Payment> payments = paymentService.getRepository().findAll(); + List<Transaction> transactions = transactionService.getRepository().findAll(); - Database database = new Database(categories, accounts, payments); + Database database = new Database(categories, accounts, transactions); Gson gson = new GsonBuilder().excludeFieldsWithoutExposeAnnotation().setPrettyPrinting().registerTypeAdapter(DateTime.class, new JsonSerializer<DateTime>(){ @Override diff --git a/src/main/java/de/deadlocker8/budgetmaster/services/HelpersService.java b/src/main/java/de/deadlocker8/budgetmaster/services/HelpersService.java index cd575b98c5086196f23450caa6d5fc2ee70ce943..24f7340482d2f70c5641c7b9443d14e058eec462 100644 --- a/src/main/java/de/deadlocker8/budgetmaster/services/HelpersService.java +++ b/src/main/java/de/deadlocker8/budgetmaster/services/HelpersService.java @@ -2,12 +2,12 @@ package de.deadlocker8.budgetmaster.services; import de.deadlocker8.budgetmaster.database.accountmatches.AccountMatch; import de.deadlocker8.budgetmaster.entities.Account; -import de.deadlocker8.budgetmaster.entities.Payment; +import de.deadlocker8.budgetmaster.entities.Transaction; import de.deadlocker8.budgetmaster.entities.Settings; import de.deadlocker8.budgetmaster.entities.Tag; import de.deadlocker8.budgetmaster.repeating.modifier.RepeatingModifierType; import de.deadlocker8.budgetmaster.repositories.AccountRepository; -import de.deadlocker8.budgetmaster.repositories.PaymentRepository; +import de.deadlocker8.budgetmaster.repositories.TransactionRepository; import de.deadlocker8.budgetmaster.repositories.SettingsRepository; import de.deadlocker8.budgetmaster.repositories.TagRepository; import de.deadlocker8.budgetmaster.utils.Colors; @@ -46,7 +46,7 @@ public class HelpersService private AccountService accountService; @Autowired - private PaymentRepository paymentRepository; + private TransactionRepository transactionRepository; public String getCurrencyString(int amount) { @@ -207,28 +207,28 @@ public class HelpersService return selectedAccount; } - public int getIncomeSumForPaymentList(List<Payment> payments) + public int getIncomeSumForTransactionList(List<Transaction> transactions) { int sum = 0; - for(Payment payment : payments) + for(Transaction transaction : transactions) { - if(payment.getAmount() > 0) + if(transaction.getAmount() > 0) { - sum += payment.getAmount(); + sum += transaction.getAmount(); } } return sum; } - public int getPaymentSumForPaymentList(List<Payment> payments) + public int getPaymentSumForTransactionList(List<Transaction> transactions) { int sum = 0; - for(Payment payment : payments) + for(Transaction transaction : transactions) { - if(payment.getAmount() < 0) + if(transaction.getAmount() < 0) { - sum += payment.getAmount(); + sum += transaction.getAmount(); } } return sum; @@ -236,11 +236,11 @@ public class HelpersService public int getAccountBudget() { - List<Payment> payments = paymentRepository.findAllByAccount(getCurrentAccount()); + List<Transaction> transactions = transactionRepository.findAllByAccount(getCurrentAccount()); int sum = 0; - for(Payment payment : payments) + for(Transaction transaction : transactions) { - sum += payment.getAmount(); + sum += transaction.getAmount(); } return sum; diff --git a/src/main/java/de/deadlocker8/budgetmaster/services/PaymentService.java b/src/main/java/de/deadlocker8/budgetmaster/services/PaymentService.java deleted file mode 100644 index 75fc02bf277edae389c86dd7d9d76585c6d6a821..0000000000000000000000000000000000000000 --- a/src/main/java/de/deadlocker8/budgetmaster/services/PaymentService.java +++ /dev/null @@ -1,123 +0,0 @@ -package de.deadlocker8.budgetmaster.services; - -import de.deadlocker8.budgetmaster.entities.Account; -import de.deadlocker8.budgetmaster.entities.CategoryType; -import de.deadlocker8.budgetmaster.entities.Payment; -import de.deadlocker8.budgetmaster.repositories.CategoryRepository; -import de.deadlocker8.budgetmaster.repositories.PaymentRepository; -import de.deadlocker8.budgetmaster.repositories.RepeatingOptionRepository; -import de.deadlocker8.budgetmaster.utils.Strings; -import org.joda.time.DateTime; -import org.joda.time.format.ISODateTimeFormat; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Service; -import tools.Localization; - -import java.util.List; - -@Service -public class PaymentService implements Resetable -{ - private final Logger LOGGER = LoggerFactory.getLogger(this.getClass()); - private PaymentRepository paymentRepository; - private RepeatingOptionRepository repeatingOptionRepository; - private CategoryRepository categoryRepository; - - @Autowired - public PaymentService(PaymentRepository paymentRepository, RepeatingOptionRepository repeatingOptionRepository, CategoryRepository categoryRepository) - { - this.paymentRepository = paymentRepository; - this.repeatingOptionRepository = repeatingOptionRepository; - this.categoryRepository = categoryRepository; - } - - public PaymentRepository getRepository() - { - return paymentRepository; - } - - public List<Payment> getPaymentsForMonthAndYear(Account account, int month, int year, boolean isRestActivated) - { - List<Payment> payments; - if(isRestActivated) - { - payments = getPaymentsForMonthAndYearWithRest(account, month, year); - } - else - { - payments = getPaymentsForMonthAndYearWithoutRest(account, month, year); - } - - return payments; - } - - private List<Payment> getPaymentsForMonthAndYearWithRest(Account account, int month, int year) - { - DateTime startDate = DateTime.now().withYear(year).withMonthOfYear(month).minusMonths(1).dayOfMonth().withMaximumValue(); - DateTime endDate = DateTime.now().withYear(year).withMonthOfYear(month).dayOfMonth().withMaximumValue(); - List<Payment> payments = paymentRepository.findAllByAccountAndDateBetweenOrderByDateDesc(account, startDate, endDate); - - Payment paymentRest = new Payment(); - paymentRest.setCategory(categoryRepository.findByType(CategoryType.REST)); - paymentRest.setName(Localization.getString(Strings.CATEGORY_REST)); - paymentRest.setDate(DateTime.now().withYear(year).withMonthOfYear(month).withDayOfMonth(1)); - paymentRest.setAmount(getRest(account, startDate)); - payments.add(paymentRest); - - return payments; - } - - private List<Payment> getPaymentsForMonthAndYearWithoutRest(Account account, int month, int year) - { - DateTime startDate = DateTime.now().withYear(year).withMonthOfYear(month).minusMonths(1).dayOfMonth().withMaximumValue(); - DateTime endDate = DateTime.now().withYear(year).withMonthOfYear(month).dayOfMonth().withMaximumValue(); - return paymentRepository.findAllByAccountAndDateBetweenOrderByDateDesc(account, startDate, endDate); - } - - private int getRest(Account account, DateTime endDate) - { - DateTime startDate = DateTime.now().withYear(2000).withMonthOfYear(1).withDayOfMonth(1); - Integer rest = paymentRepository.getRest(account.getID(), ISODateTimeFormat.date().print(startDate), ISODateTimeFormat.date().print(endDate)); - if(rest == null) - { - return 0; - } - return rest; - } - - public void deletePayment(Integer ID) - { - if(isDeletable(ID)) - { - Payment paymentToDelete = paymentRepository.findOne(ID); - // handle repeating payments - if(paymentToDelete.getRepeatingOption() != null) - { - repeatingOptionRepository.delete(paymentToDelete.getRepeatingOption().getID()); - } - else - { - paymentRepository.delete(ID); - } - } - } - - public boolean isDeletable(Integer ID) - { - Payment paymentToDelete = paymentRepository.getOne(ID); - return paymentToDelete != null && paymentToDelete.getCategory().getType() != CategoryType.REST; - } - - @Override - public void deleteAll() - { - paymentRepository.deleteAll(); - } - - @Override - public void createDefaults() - { - } -} diff --git a/src/main/java/de/deadlocker8/budgetmaster/services/TransactionService.java b/src/main/java/de/deadlocker8/budgetmaster/services/TransactionService.java new file mode 100644 index 0000000000000000000000000000000000000000..813282eaa2ee70630abd199cd4d8174ea5fe9d7d --- /dev/null +++ b/src/main/java/de/deadlocker8/budgetmaster/services/TransactionService.java @@ -0,0 +1,123 @@ +package de.deadlocker8.budgetmaster.services; + +import de.deadlocker8.budgetmaster.entities.Account; +import de.deadlocker8.budgetmaster.entities.CategoryType; +import de.deadlocker8.budgetmaster.entities.Transaction; +import de.deadlocker8.budgetmaster.repositories.CategoryRepository; +import de.deadlocker8.budgetmaster.repositories.TransactionRepository; +import de.deadlocker8.budgetmaster.repositories.RepeatingOptionRepository; +import de.deadlocker8.budgetmaster.utils.Strings; +import org.joda.time.DateTime; +import org.joda.time.format.ISODateTimeFormat; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import tools.Localization; + +import java.util.List; + +@Service +public class TransactionService implements Resetable +{ + private final Logger LOGGER = LoggerFactory.getLogger(this.getClass()); + private TransactionRepository transactionRepository; + private RepeatingOptionRepository repeatingOptionRepository; + private CategoryRepository categoryRepository; + + @Autowired + public TransactionService(TransactionRepository transactionRepository, RepeatingOptionRepository repeatingOptionRepository, CategoryRepository categoryRepository) + { + this.transactionRepository = transactionRepository; + this.repeatingOptionRepository = repeatingOptionRepository; + this.categoryRepository = categoryRepository; + } + + public TransactionRepository getRepository() + { + return transactionRepository; + } + + public List<Transaction> getTransactionsForMonthAndYear(Account account, int month, int year, boolean isRestActivated) + { + List<Transaction> transactions; + if(isRestActivated) + { + transactions = getTransactionsForMonthAndYearWithRest(account, month, year); + } + else + { + transactions = getTransactionsForMonthAndYearWithoutRest(account, month, year); + } + + return transactions; + } + + private List<Transaction> getTransactionsForMonthAndYearWithRest(Account account, int month, int year) + { + DateTime startDate = DateTime.now().withYear(year).withMonthOfYear(month).minusMonths(1).dayOfMonth().withMaximumValue(); + DateTime endDate = DateTime.now().withYear(year).withMonthOfYear(month).dayOfMonth().withMaximumValue(); + List<Transaction> transactions = transactionRepository.findAllByAccountAndDateBetweenOrderByDateDesc(account, startDate, endDate); + + Transaction transactionRest = new Transaction(); + transactionRest.setCategory(categoryRepository.findByType(CategoryType.REST)); + transactionRest.setName(Localization.getString(Strings.CATEGORY_REST)); + transactionRest.setDate(DateTime.now().withYear(year).withMonthOfYear(month).withDayOfMonth(1)); + transactionRest.setAmount(getRest(account, startDate)); + transactions.add(transactionRest); + + return transactions; + } + + private List<Transaction> getTransactionsForMonthAndYearWithoutRest(Account account, int month, int year) + { + DateTime startDate = DateTime.now().withYear(year).withMonthOfYear(month).minusMonths(1).dayOfMonth().withMaximumValue(); + DateTime endDate = DateTime.now().withYear(year).withMonthOfYear(month).dayOfMonth().withMaximumValue(); + return transactionRepository.findAllByAccountAndDateBetweenOrderByDateDesc(account, startDate, endDate); + } + + private int getRest(Account account, DateTime endDate) + { + DateTime startDate = DateTime.now().withYear(2000).withMonthOfYear(1).withDayOfMonth(1); + Integer rest = transactionRepository.getRest(account.getID(), ISODateTimeFormat.date().print(startDate), ISODateTimeFormat.date().print(endDate)); + if(rest == null) + { + return 0; + } + return rest; + } + + public void deleteTransaction(Integer ID) + { + if(isDeletable(ID)) + { + Transaction transactionToDelete = transactionRepository.findOne(ID); + // handle repeating transactions + if(transactionToDelete.getRepeatingOption() != null) + { + repeatingOptionRepository.delete(transactionToDelete.getRepeatingOption().getID()); + } + else + { + transactionRepository.delete(ID); + } + } + } + + public boolean isDeletable(Integer ID) + { + Transaction transactionToDelete = transactionRepository.getOne(ID); + return transactionToDelete != null && transactionToDelete.getCategory().getType() != CategoryType.REST; + } + + @Override + public void deleteAll() + { + transactionRepository.deleteAll(); + } + + @Override + public void createDefaults() + { + } +} diff --git a/src/main/java/de/deadlocker8/budgetmaster/utils/Strings.java b/src/main/java/de/deadlocker8/budgetmaster/utils/Strings.java index b777340b296612436dba7b0f28eb00ec14208abc..d9a2d4d27f76cc8723b5d8ecb78dca551bc5fef1 100644 --- a/src/main/java/de/deadlocker8/budgetmaster/utils/Strings.java +++ b/src/main/java/de/deadlocker8/budgetmaster/utils/Strings.java @@ -43,9 +43,9 @@ public class Strings public static final String WARNING_EMPTY_CATEGORY_NAME = "warning.empty.category.name"; public static final String WARNING_EMPTY_ACCOUNT_NAME = "warning.empty.account.name"; public static final String WARNING_EMPTY_CATEGORY_COLOR = "warning.empty.category.color"; - public static final String WARNING_EMPTY_PAYMENT_NAME = "warning.empty.payment.name"; - public static final String WARNING_PAYMENT_AMOUNT = "warning.payment.amount"; - public static final String WARNING_EMPTY_PAYMENT_DATE = "warning.empty.payment.date"; + public static final String WARNING_EMPTY_TRANSACTION_NAME = "warning.empty.transaction.name"; + public static final String WARNING_TRANSACTION_AMOUNT = "warning.transaction.amount"; + public static final String WARNING_EMPTY_TRANSACTION_DATE = "warning.empty.transaction.date"; public static final String WARNING_SETTINGS_PASSWORD_EMPTY = "warning.settings.password.empty"; public static final String WARNING_SETTINGS_PASSWORD_LENGTH = "warning.settings.password.length"; public static final String WARNING_SETTINGS_PASSWORD_CONFIRMATION_EMPTY = "warning.settings.password.confirmation.empty"; diff --git a/src/main/java/de/deadlocker8/budgetmaster/validators/PaymentValidator.java b/src/main/java/de/deadlocker8/budgetmaster/validators/TransactionValidator.java similarity index 67% rename from src/main/java/de/deadlocker8/budgetmaster/validators/PaymentValidator.java rename to src/main/java/de/deadlocker8/budgetmaster/validators/TransactionValidator.java index 4e70b01c67794ec85266db445fbf4f8cd54940ed..6f7f969b04456d6cfe4c920a63d527044e967446 100644 --- a/src/main/java/de/deadlocker8/budgetmaster/validators/PaymentValidator.java +++ b/src/main/java/de/deadlocker8/budgetmaster/validators/TransactionValidator.java @@ -1,23 +1,23 @@ package de.deadlocker8.budgetmaster.validators; -import de.deadlocker8.budgetmaster.entities.Payment; +import de.deadlocker8.budgetmaster.entities.Transaction; import de.deadlocker8.budgetmaster.utils.Strings; import org.springframework.validation.Errors; import org.springframework.validation.ValidationUtils; import org.springframework.validation.Validator; -public class PaymentValidator implements Validator +public class TransactionValidator implements Validator { public boolean supports(Class clazz) { - return Payment.class.equals(clazz); + return Transaction.class.equals(clazz); } public void validate(Object obj, Errors errors) { - ValidationUtils.rejectIfEmptyOrWhitespace(errors, "name", Strings.WARNING_EMPTY_PAYMENT_NAME); - ValidationUtils.rejectIfEmptyOrWhitespace(errors, "amount", Strings.WARNING_PAYMENT_AMOUNT); - ValidationUtils.rejectIfEmptyOrWhitespace(errors, "date", Strings.WARNING_EMPTY_PAYMENT_DATE); + ValidationUtils.rejectIfEmptyOrWhitespace(errors, "name", Strings.WARNING_EMPTY_TRANSACTION_NAME); + ValidationUtils.rejectIfEmptyOrWhitespace(errors, "amount", Strings.WARNING_TRANSACTION_AMOUNT); + ValidationUtils.rejectIfEmptyOrWhitespace(errors, "date", Strings.WARNING_EMPTY_TRANSACTION_DATE); } } \ No newline at end of file diff --git a/src/main/resources/languages/_de.properties b/src/main/resources/languages/_de.properties index 107a117110b407e746f73beaa69630b53e9d7e4b..aba0c79432545355380f444c1562d359928b31c9 100644 --- a/src/main/resources/languages/_de.properties +++ b/src/main/resources/languages/_de.properties @@ -25,8 +25,8 @@ error.database.import.unknown.version=Die hochgeladene JSON Datei enth # TITLE title.incomes=Einnahmen title.income=Einnahme -title.payments=Ausgaben -title.payment=Ausgabe +title.transactions=Ausgaben +title.transaction=Ausgabe title.rest=Rest title.category=Kategorie title.amount=Betrag @@ -35,8 +35,8 @@ title.warning=Warnung title.error=Fehler title.category.new=Neue Kategorie title.category.edit=Kategorie bearbeiten -title.payment.edit=Buchung bearbeiten -title.payment.new=Neue Buchung +title.transaction.edit=Buchung bearbeiten +title.transaction.new=Neue Buchung title.datepicker=Datum w�hlen title.account.new=Neues Konto title.account.edit=Konto bearbeiten @@ -81,8 +81,8 @@ info.text.category.delete=M info.title.account.delete=Konto l�schen info.text.account.delete=M�chtest du das Konto "{0}" wirklich unwiderruflich l�schen?<br>Hinweis: Diesem Konto sind {1} Buchungen zugeordnet. Beim L�schen des Kontos werden diese ebenfalls gel�scht! info.button.account.delete=Konto und Buchungen l�schen -info.title.payment.delete=Buchung l�schen -info.text.payment.delete=M�chtest du die Buchung "{0}" wirklich unwiderruflich l�schen? +info.title.transaction.delete=Buchung l�schen +info.text.transaction.delete=M�chtest du die Buchung "{0}" wirklich unwiderruflich l�schen? info.title.database.delete=Datenbank l�schen info.header.text.database.delete=Soll die Datenbank wirklich unwiderruflich gel�scht werden? info.text.database.delete=Zur Best�tigung gib folgenden Code ein:\t{0} @@ -98,10 +98,10 @@ warning.empty.category.name=Bitte gib einen Namen ein. warning.empty.account.name=Bitte gib einen Namen ein. warning.duplicate.account.name=Es existiert bereits ein Konto mit diesem Namen. warning.empty.category.color=Die Kategoriefarbe darf nicht leer sein. -warning.empty.payment.name=Das Feld f�r den Namen darf nicht leer sein. -warning.payment.amount=Gib eine g�ltige Zahl f�r den Betrag ein. -warning.payment.number=Gib eine g�ltige Zahl gr��er 0 ein. -warning.empty.payment.date=Bitte w�hle ein Datum aus. +warning.empty.transaction.name=Das Feld f�r den Namen darf nicht leer sein. +warning.transaction.amount=Gib eine g�ltige Zahl f�r den Betrag ein. +warning.transaction.number=Gib eine g�ltige Zahl gr��er 0 ein. +warning.empty.transaction.date=Bitte w�hle ein Datum aus. warning.wrong.password=Das Passwort ist nicht korrekt. warning.settings.password.empty=Bitte gib ein Passwort ein. warning.settings.password.length=Das Passwort muss mindestens drei Zeichen lang sein. @@ -110,7 +110,7 @@ warning.settings.password.confirmation.wrong=Passwort und Passwort Wiederholung # UI menu.home=Startseite -menu.payments=Buchungen +menu.transactions=Buchungen menu.categories=Kategorien menu.charts=Diagramme menu.charts.chartCategories=Eingaben/Ausgaben nach Kategorien @@ -152,15 +152,15 @@ settings.database.delete.verification=Best account.new.label.name=Name account.default.name=Standardkonto -payment.new.label.name=Name -payment.new.label.amount=Betrag -payment.new.label.category=Kategorie -payment.new.label.date=Datum -payment.new.label.description=Notiz -payment.new.label.tags=Tags -payment.new.label.account=Konto -payment.new.label.repeating=Wiederholung -payment.new.label.repeating.all=Alle +transaction.new.label.name=Name +transaction.new.label.amount=Betrag +transaction.new.label.category=Kategorie +transaction.new.label.date=Datum +transaction.new.label.description=Notiz +transaction.new.label.tags=Tags +transaction.new.label.account=Konto +transaction.new.label.repeating=Wiederholung +transaction.new.label.repeating.all=Alle repeating.modifier.days=Tage repeating.modifier.months=Monate @@ -196,7 +196,7 @@ about.credits=Credits: # home menu home.menu.accounts=Konten erlauben es mehrere Buchungen zu gruppieren. Du kannst so viele Konten erstellen, wie du m�chtest. Zum Erstellen, Aktualisieren oder L�schen von Accounts klicke hier. -home.menu.payments=Buchungen sind das zentrale Element von BudgetMaster. Gib ihnen einen Namen und eine Beschreibung, weise ihnen eine Kategorie und ein Konto zu, konfiguriere sie als wiederholend und markiere sie mit Tags. Um Buchungen zu erstellen, zu bearbeiten oder zu l�schen einfach hier klicken. +home.menu.transactions=Buchungen sind das zentrale Element von BudgetMaster. Gib ihnen einen Namen und eine Beschreibung, weise ihnen eine Kategorie und ein Konto zu, konfiguriere sie als wiederholend und markiere sie mit Tags. Um Buchungen zu erstellen, zu bearbeiten oder zu l�schen einfach hier klicken. home.menu.charts=Diese Funktion wird in einer kommenden Version verf�gbar sein. home.menu.reports=Diese Funktion wird in einer kommenden Version verf�gbar sein. home.menu.categories=Kategorien k�nnen Buchungen zugeordnet werden, um diese als zusammengeh�rig zu kennzeichnen. Eine Kategorie besteht aus einem Namen und einer Farbe. Letztere kann aus einer vordefinierten Farbpalette oder mit Hilfe eines benutzerdefinierten Farbw�hlers ausgew�hlt werden. Erstelle, aktualisiere und l�sche Kategorien, indem du hier klickst. diff --git a/src/main/resources/languages/_en.properties b/src/main/resources/languages/_en.properties index 87ebc8068aaebe9a44f2b5a49ae3efe5c5181610..6e1831d7ad20911e50395e6d5769f4b0f0f63ab4 100644 --- a/src/main/resources/languages/_en.properties +++ b/src/main/resources/languages/_en.properties @@ -25,8 +25,8 @@ error.database.import.unknown.version=The uploaded JSON File does not contain a # TITLE title.incomes=Incomes title.income=Income -title.payments=Payments -title.payment=Payment +title.transactions=Transactions +title.transaction=Transaction title.rest=Rest title.category=Category title.amount=Amount @@ -35,8 +35,8 @@ title.warning=Warning title.error=Error title.category.new=New Category title.category.edit=Edit Category -title.payment.edit=Edit Payment -title.payment.new=New Payment +title.transaction.edit=Edit Transaction +title.transaction.new=New Transaction title.datepicker=Choose date title.account.new=New Account title.account.edit=Edit Account @@ -79,16 +79,16 @@ month.december=December info.title.category.delete=Delete Category info.text.category.delete=Do you really want to delete the category "{0}"? This can''t be undone. info.title.account.delete=Delete Account -info.text.account.delete=Do you really want to delete the account "{0}"? This can''t be undone.<br>Note: There are {1} payments associated with this account. Deleting this account will delete all releated payments too! -info.button.account.delete=Delete Account and Payments -info.title.payment.delete=Delete Entry -info.text.payment.delete=Do you really want to delete the entry "{0}"? This can''t be undone. +info.text.account.delete=Do you really want to delete the account "{0}"? This can''t be undone.<br>Note: There are {1} transactions associated with this account. Deleting this account will delete all releated transactions too! +info.button.account.delete=Delete Account and Transactions +info.title.transaction.delete=Delete Entry +info.text.transaction.delete=Do you really want to delete the entry "{0}"? This can''t be undone. info.title.database.delete=Delete Database info.header.text.database.delete=Do you really want to delete the database? This can''t be undone. info.text.database.delete=Please enter the following code for verification:\t{0} info.title.database.import.dialog=Import database info.subtitle.database.import=Assign accounts -info.database.import.source=Import payments from +info.database.import.source=Import transactions from info.database.import.destination=to info.database.import.or=or @@ -98,10 +98,10 @@ warning.empty.category.name=Please insert a name. warning.empty.account.name=Please insert a name. warning.duplicate.account.name=An account with this name is already existing. warning.empty.category.color=The category color should not be empty. -warning.empty.payment.name=The field for the name can not be empty. -warning.payment.amount=Please enter a valid number in the amount field. -warning.payment.number=Please enter a valid number greater than 0. -warning.empty.payment.date=Please select a date. +warning.empty.transaction.name=The field for the name can not be empty. +warning.transaction.amount=Please enter a valid number in the amount field. +warning.transaction.number=Please enter a valid number greater than 0. +warning.empty.transaction.date=Please select a date. warning.wrong.password=The password is not correct. warning.settings.password.empty=Please enter a password. warning.settings.password.length=The password must be at least three characters long. @@ -110,7 +110,7 @@ warning.settings.password.confirmation.wrong=Password and password confirmation # UI menu.home=Home -menu.payments=Payments +menu.transactions=Transactions menu.categories=Categories menu.charts=Charts menu.charts.chartCategories=Income/Payments per Category @@ -152,15 +152,15 @@ settings.database.delete.verification=Verification Code account.new.label.name=Name account.default.name=Default Account -payment.new.label.name=Name -payment.new.label.amount=Amount -payment.new.label.category=Category -payment.new.label.date=Date -payment.new.label.description=Description -payment.new.label.tags=Tags -payment.new.label.account=Account -payment.new.label.repeating=Repeating -payment.new.label.repeating.all=Every +transaction.new.label.name=Name +transaction.new.label.amount=Amount +transaction.new.label.category=Category +transaction.new.label.date=Date +transaction.new.label.description=Description +transaction.new.label.tags=Tags +transaction.new.label.account=Account +transaction.new.label.repeating=Repeating +transaction.new.label.repeating.all=Every repeating.modifier.days=Days repeating.modifier.months=Months @@ -195,9 +195,9 @@ about.sourcecode=Sourcecode: about.credits=Credits: # home menu -home.menu.accounts=Accounts allow you to group multiple payments. You can create as many accounts as you want. Create, update and delete them by clicking here. -home.menu.payments=Payments are the key element of BudgetMaster. Give them a name and description, assign a category and account to them, configure them as recurring, and mark them with tags. You can create, edit and delete them by clicking here. +home.menu.accounts=Accounts allow you to group multiple transactions. You can create as many accounts as you want. Create, update and delete them by clicking here. +home.menu.transactions=Transactions are the key element of BudgetMaster. Give them a name and description, assign a category and account to them, configure them as recurring, and mark them with tags. You can create, edit and delete them by clicking here. home.menu.charts=This feature will be available in an upcoming release. home.menu.reports=This feature will be available in an upcoming release. -home.menu.categories=Categories can be assigned to payments in order to mark them as belonging together. They consists of a name an a color. Latter can be chosen from a predefined color palette or by using a custom color picker. Create, update and delete categories by clicking here. +home.menu.categories=Categories can be assigned to transactions in order to mark them as belonging together. They consists of a name an a color. Latter can be chosen from a predefined color palette or by using a custom color picker. Create, update and delete categories by clicking here. home.menu.settings=Manage general settings such as login password, your preferred language and how to handle updates. This section also offers the possibility to export or delete your data or importing an existing database. diff --git a/src/main/resources/static/js/payments.js b/src/main/resources/static/js/transactions.js similarity index 74% rename from src/main/resources/static/js/payments.js rename to src/main/resources/static/js/transactions.js index ff6c5bdffe63b0bd6b508b7b603a52125d1a3086..1147c0c71de0c89c03c188729aa20fb58f346ad6 100644 --- a/src/main/resources/static/js/payments.js +++ b/src/main/resources/static/js/transactions.js @@ -3,7 +3,7 @@ $( document ).ready(function() { if($(".datepicker").length) { - var pickerStartDate = $('#payment-datepicker').pickadate({ + var pickerStartDate = $('#transaction-datepicker').pickadate({ selectMonths: true, selectYears: 100, firstDay: 1, @@ -44,7 +44,7 @@ $( document ).ready(function() { pickerStartDate = pickerStartDate.pickadate('picker'); - var pickerEndDate = $('#payment-repeating-end-date-input').pickadate({ + var pickerEndDate = $('#transaction-repeating-end-date-input').pickadate({ selectMonths: true, selectYears: 100, firstDay: 1, @@ -83,25 +83,25 @@ $( document ).ready(function() { pickerEndDate.set('min', selectedDate); } - if($('#payment-amount').length) + if($('#transaction-amount').length) { - $('#payment-amount').on('change keydown paste input', function() { + $('#transaction-amount').on('change keydown paste input', function() { validateAmount($(this).val()); }); } - if($(paymentRepeatingModifierID).length) + if($(transactionRepeatingModifierID).length) { - $(paymentRepeatingModifierID).on('change keydown paste input', function() { + $(transactionRepeatingModifierID).on('change keydown paste input', function() { // substr(1) removes "#" at the beginning - validateNumber($(this).val(), paymentRepeatingModifierID.substr(1), "hidden-" + paymentRepeatingModifierID.substr(1), numberValidationMessage); + validateNumber($(this).val(), transactionRepeatingModifierID.substr(1), "hidden-" + transactionRepeatingModifierID.substr(1), numberValidationMessage); }); } - if($(paymentRepeatingEndAfterXTimesInputID).length) + if($(transactionRepeatingEndAfterXTimesInputID).length) { - $(paymentRepeatingEndAfterXTimesInputID).on('change keydown paste input', function() { - validateNumber($(this).val(), paymentRepeatingEndAfterXTimesInputID.substr(1), null, numberValidationMessage); + $(transactionRepeatingEndAfterXTimesInputID).on('change keydown paste input', function() { + validateNumber($(this).val(), transactionRepeatingEndAfterXTimesInputID.substr(1), null, numberValidationMessage); }); } @@ -121,13 +121,13 @@ $( document ).ready(function() { $('#enableRepeating').change(function(){ if($(this).is(":checked")) { - $('#payment-repeating-modifier-row').show(); - $('#payment-repeating-end').show(); + $('#transaction-repeating-modifier-row').show(); + $('#transaction-repeating-end').show(); } else { - $('#payment-repeating-modifier-row').hide(); - $('#payment-repeating-end').hide(); + $('#transaction-repeating-modifier-row').hide(); + $('#transaction-repeating-end').hide(); } }); @@ -144,8 +144,8 @@ $( document ).ready(function() { }); }); -var paymentRepeatingModifierID = "#payment-repeating-modifier"; -var paymentRepeatingEndAfterXTimesInputID = "#payment-repeating-end-after-x-times-input"; +var transactionRepeatingModifierID = "#transaction-repeating-modifier"; +var transactionRepeatingEndAfterXTimesInputID = "#transaction-repeating-end-after-x-times-input"; AMOUNT_REGEX = new RegExp("^-?\\d+(,\\d+)?(\\.\\d+)?$"); NUMBER_REGEX = new RegExp("^\\d+$"); @@ -153,7 +153,7 @@ ALLOWED_CHARACTERS = ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", ",", "." function validateAmount(text) { - var id = "payment-amount"; + var id = "transaction-amount"; if(text.match(AMOUNT_REGEX) == null) { @@ -218,11 +218,11 @@ function removeTooltip(id) function validateForm() { // amount - validateAmount($('#payment-amount').val()); + validateAmount($('#transaction-amount').val()); // handle tags var tags = $('.chips-autocomplete').material_chip('data'); - var parent = document.getElementById("hidden-payment-tags"); + var parent = document.getElementById("hidden-transaction-tags"); for(var i = 0; i < tags.length; i++) { var input = document.createElement("input"); @@ -234,7 +234,7 @@ function validateForm() if(document.getElementById("enableRepeating").checked) { - if(!validateNumber($(paymentRepeatingModifierID).val(), paymentRepeatingModifierID.substr(1), "hidden-" + paymentRepeatingModifierID.substr(1), numberValidationMessage)) + if(!validateNumber($(transactionRepeatingModifierID).val(), transactionRepeatingModifierID.substr(1), "hidden-" + transactionRepeatingModifierID.substr(1), numberValidationMessage)) { return false; } @@ -243,7 +243,7 @@ function validateForm() var endNever = document.getElementById("repeating-end-never"); var endAfterXTimes = document.getElementById("repeating-end-after-x-times"); var endDate = document.getElementById("repeating-end-date"); - var endInput = document.getElementById("hidden-payment-repeating-end-value"); + var endInput = document.getElementById("hidden-transaction-repeating-end-value"); if(endNever.checked) { @@ -252,22 +252,22 @@ function validateForm() if(endAfterXTimes.checked) { - if(!validateNumber($(paymentRepeatingEndAfterXTimesInputID).val(), paymentRepeatingEndAfterXTimesInputID.substr(1), null, numberValidationMessage)) + if(!validateNumber($(transactionRepeatingEndAfterXTimesInputID).val(), transactionRepeatingEndAfterXTimesInputID.substr(1), null, numberValidationMessage)) { return false; } - endInput.value = $(paymentRepeatingEndAfterXTimesInputID).val(); + endInput.value = $(transactionRepeatingEndAfterXTimesInputID).val(); } if(endDate.checked) { - endInput.value = $("#payment-repeating-end-date-input").val(); + endInput.value = $("#transaction-repeating-end-date-input").val(); } } else { - document.getElementById("hidden-" + paymentRepeatingModifierID.substr(1)).value = -1; + document.getElementById("hidden-" + transactionRepeatingModifierID.substr(1)).value = -1; } return true; diff --git a/src/main/resources/templates/accounts/accounts.ftl b/src/main/resources/templates/accounts/accounts.ftl index 0a0277f258c4412570669f5d0fb97a46197f58d9..e4be009dd840eebc976ae5c9ba37f48ceaf9bd93 100644 --- a/src/main/resources/templates/accounts/accounts.ftl +++ b/src/main/resources/templates/accounts/accounts.ftl @@ -41,7 +41,7 @@ <div id="modalConfirmDelete" class="modal background-color"> <div class="modal-content"> <h4>${locale.getString("info.title.account.delete")}</h4> - <p>${locale.getString("info.text.account.delete", currentAccount.getName(), currentAccount.getReferringPayments()?size)}</p> + <p>${locale.getString("info.text.account.delete", currentAccount.getName(), currentAccount.getReferringTransactions()?size)}</p> </div> <div class="modal-footer background-color"> <a href="/accounts" class="modal-action modal-close waves-effect waves-red btn-flat ">${locale.getString("cancel")}</a> diff --git a/src/main/resources/templates/import.ftl b/src/main/resources/templates/import.ftl index 587dcd57d365eabe100f9566d752897176c3c469..6158ce947ea81c8671094a3cecd41acfb9d10891 100644 --- a/src/main/resources/templates/import.ftl +++ b/src/main/resources/templates/import.ftl @@ -50,7 +50,11 @@ <#-- buttons --> <div class="row"> - <div class="col s12 m12 l4 offset-l4 center-align"> + <div class="col m6 l4 offset-l2 right-align"> + <a href="/settings" class="waves-effect waves-light btn budgetmaster-blue"><i class="material-icons left">clear</i>${locale.getString("cancel")}</a> + </div> + + <div class="col m6 l4 left-align"> <button class="btn waves-effect waves-light budgetmaster-blue" type="submit" name="action"> <i class="material-icons left">unarchive</i>${locale.getString("settings.database.import")} </button> diff --git a/src/main/resources/templates/index.ftl b/src/main/resources/templates/index.ftl index a88d8e7b8d784aa7c546425cfe316af57592db3a..f8a4ada19172ac88efb7020071170ada76ff4b89 100644 --- a/src/main/resources/templates/index.ftl +++ b/src/main/resources/templates/index.ftl @@ -10,7 +10,7 @@ <main> <div class="card main-card background-color"> <div class="container"> - <#-- icon --> + <#-- icon --> <div class="row"> <div class="col s8 offset-s2 center-align"> <a href="/about"> @@ -29,10 +29,10 @@ </a> </div> <div class="col s12 m4 center-align home-menu-cell"> - <a href="/payments" class="home-menu-link budgetmaster-text-black"> + <a href="/transactions" class="home-menu-link budgetmaster-text-black"> <h1 class="center budgetmaster-baby-blue-text"><i class="material-icons icon-budget">list</i></h1> - <h3 class="center budget">${locale.getString("menu.payments")}</h3> - <p class="text-grey">${locale.getString("home.menu.payments")}</p> + <h3 class="center budget">${locale.getString("menu.transactions")}</h3> + <p class="text-grey">${locale.getString("home.menu.transactions")}</p> </a> </div> <div class="col s12 m4 center-align home-menu-cell"> diff --git a/src/main/resources/templates/navbar.ftl b/src/main/resources/templates/navbar.ftl index a4af8bb051304e43c7739a73cb83f9b99b3dca8b..67e33ec7d4e1ed3fcc01913dfaa48df99a22bfe2 100644 --- a/src/main/resources/templates/navbar.ftl +++ b/src/main/resources/templates/navbar.ftl @@ -6,7 +6,7 @@ <@itemDivider/> <@itemWithIcon "home", "/", locale.getString("menu.home"), "home", "budgetmaster-blue", activeID/> <@itemWithIcon "accounts", "/accounts", locale.getString("menu.accounts"), "account_balance", "budgetmaster-grey", activeID/> - <@itemWithIcon "payments", "/payments", locale.getString("menu.payments"), "list", "budgetmaster-baby-blue", activeID/> + <@itemWithIcon "transactions", "/transactions", locale.getString("menu.transactions"), "list", "budgetmaster-baby-blue", activeID/> <@subListStart "chart" locale.getString("menu.charts"), "show_chart" "budgetmaster-purple", activeID/> <#-- disabled until future versions --> <#--<@itemPlain "chartCategories", "", locale.getString("menu.charts.chartCategories"), activeID/>--> diff --git a/src/main/resources/templates/payments/newPayment.ftl b/src/main/resources/templates/transactions/newTransaction.ftl similarity index 68% rename from src/main/resources/templates/payments/newPayment.ftl rename to src/main/resources/templates/transactions/newTransaction.ftl index 4b5407cee0965703eeb45cdf7a9d9751a4fafd51..556226c34fd5b44c75a4c3f9ebbd392d32a1ad8d 100644 --- a/src/main/resources/templates/payments/newPayment.ftl +++ b/src/main/resources/templates/transactions/newTransaction.ftl @@ -2,26 +2,26 @@ <head> <#import "../header.ftl" as header> <@header.header "BudgetMaster"/> - <@header.style "payments"/> + <@header.style "transactions"/> <@header.style "datepicker"/> </head> <body class="budgetmaster-blue-light"> <#import "../navbar.ftl" as navbar> - <@navbar.navbar "payments"/> + <@navbar.navbar "transactions"/> <main> <div class="card main-card background-color"> <div class="container"> <div class="section center-align"> - <div class="headline"><#if payment.getID()??>${locale.getString("title.payment.edit")}<#else>${locale.getString("title.payment.new")}</#if></div> + <div class="headline"><#if transaction.getID()??>${locale.getString("title.transaction.edit")}<#else>${locale.getString("title.transaction.new")}</#if></div> </div> </div> <div class="container"> <#import "../validation.ftl" as validation> - <form name="NewPayment" action="/payments/newPayment" method="post" onsubmit="return validateForm()"> + <form name="NewTransaction" action="/transactions/newTransaction" method="post" onsubmit="return validateForm()"> <input type="hidden" name="${_csrf.parameterName}" value="${_csrf.token}"/> - <input type="hidden" name="ID" value="<#if payment.getID()??>${payment.getID()}</#if>"> - <input type="hidden" name="isRepeating" value="${payment.isRepeating()?c}"> + <input type="hidden" name="ID" value="<#if transaction.getID()??>${transaction.getID()}</#if>"> + <input type="hidden" name="isRepeating" value="${transaction.isRepeating()?c}"> <#-- isPayment switch --> <div class="row"> @@ -29,9 +29,9 @@ <div class="switch"> <label> ${locale.getString("title.income")} - <input type="checkbox" name="isPayment" <#if payment.getAmount()?? && payment.getAmount() < 0>checked</#if>> + <input type="checkbox" name="isPayment" <#if transaction.getAmount()?? && transaction.getAmount() < 0>checked</#if>> <span class="lever"></span> - ${locale.getString("title.payment")} + ${locale.getString("title.transaction")} </label> </div> </div> @@ -40,27 +40,27 @@ <#-- name --> <div class="row"> <div class="input-field col s12 m12 l8 offset-l2"> - <input id="payment-name" type="text" name="name" <@validation.validation "name"/> value="<#if payment.getName()??>${payment.getName()}</#if>"> - <label for="payment-name">${locale.getString("payment.new.label.name")}</label> + <input id="transaction-name" type="text" name="name" <@validation.validation "name"/> value="<#if transaction.getName()??>${transaction.getName()}</#if>"> + <label for="transaction-name">${locale.getString("transaction.new.label.name")}</label> </div> </div> <#-- amount --> <div class="row"> <div class="input-field col s12 m12 l8 offset-l2"> - <input id="payment-amount" type="text" <@validation.validation "amount"/> value="<#if payment.getAmount()??>${helpers.getAmountString(payment.getAmount())}</#if>"> - <label for="payment-amount">${locale.getString("payment.new.label.amount")}</label> + <input id="transaction-amount" type="text" <@validation.validation "amount"/> value="<#if transaction.getAmount()??>${helpers.getAmountString(transaction.getAmount())}</#if>"> + <label for="transaction-amount">${locale.getString("transaction.new.label.amount")}</label> </div> - <input type="hidden" id="hidden-payment-amount" name="amount" value="<#if payment.getAmount()??>${payment.getAmount()}</#if>"> + <input type="hidden" id="hidden-transaction-amount" name="amount" value="<#if transaction.getAmount()??>${transaction.getAmount()}</#if>"> </div> <#-- category --> <div class="row"> <div class="input-field col s12 m12 l8 offset-l2"> - <select id="payment-category" name="category" <@validation.validation "category"/>> + <select id="transaction-category" name="category" <@validation.validation "category"/>> <#list categories as category> - <#if payment.getCategory()??> - <#if payment.getCategory().getID() == category.getID()> + <#if transaction.getCategory()??> + <#if transaction.getCategory().getID() == category.getID()> <option selected value="${category.getID()}">${category.getName()}</option> <#elseif category.getType() != "REST"> <option value="${category.getID()}">${category.getName()}</option> @@ -72,37 +72,37 @@ </#if> </#list> </select> - <label for="payment-category">${locale.getString("payment.new.label.category")}</label> + <label for="transaction-category">${locale.getString("transaction.new.label.category")}</label> </div> </div> <#-- date --> <div class="row"> <div class="input-field col s12 m12 l8 offset-l2"> - <input id="payment-datepicker" type="text" class="datepicker" name="date" value="<#if payment.getDate()??>${helpers.getLongDateString(payment.getDate())}<#else>${helpers.getLongDateString(currentDate)}</#if>"> - <label for="payment-datepicker">${locale.getString("payment.new.label.date")}</label> + <input id="transaction-datepicker" type="text" class="datepicker" name="date" value="<#if transaction.getDate()??>${helpers.getLongDateString(transaction.getDate())}<#else>${helpers.getLongDateString(currentDate)}</#if>"> + <label for="transaction-datepicker">${locale.getString("transaction.new.label.date")}</label> </div> </div> <#-- description --> <div class="row"> <div class="input-field col s12 m12 l8 offset-l2"> - <textarea id="payment-description" class="materialize-textarea" name="description" <@validation.validation "description"/>><#if payment.getDescription()??>${payment.getDescription()}</#if></textarea> - <label for="payment-description">${locale.getString("payment.new.label.description")}</label> + <textarea id="transaction-description" class="materialize-textarea" name="description" <@validation.validation "description"/>><#if transaction.getDescription()??>${transaction.getDescription()}</#if></textarea> + <label for="transaction-description">${locale.getString("transaction.new.label.description")}</label> </div> </div> <#-- tags --> <div class="row"> <div class="col s12 m12 l8 offset-l2"> - <label class="chips-label" for="payment-chips">${locale.getString("payment.new.label.tags")}</label> - <div id="payment-chips" class="chips chips-placeholder chips-autocomplete"></div> + <label class="chips-label" for="transaction-chips">${locale.getString("transaction.new.label.tags")}</label> + <div id="transaction-chips" class="chips chips-placeholder chips-autocomplete"></div> </div> - <div id="hidden-payment-tags"></div> + <div id="hidden-transaction-tags"></div> <script> var initialTags = [ - <#if payment.getTags()??> - <#list payment.getTags() as tag> + <#if transaction.getTags()??> + <#list transaction.getTags() as tag> {tag: '${tag.getName()}'}, </#list> </#if> @@ -113,9 +113,9 @@ <#-- account --> <div class="row"> <div class="input-field col s12 m12 l8 offset-l2"> - <select id="payment-account" name="account" <@validation.validation "account"/>> + <select id="transaction-account" name="account" <@validation.validation "account"/>> <#list accounts as account> - <#if payment.getAccount()?? && payment.getAccount() == account> + <#if transaction.getAccount()?? && transaction.getAccount() == account> <option selected value="${account.getID()}">${account.getName()}</option> <#else> <#if account == helpers.getCurrentAccount()> @@ -126,7 +126,7 @@ </#if> </#list> </select> - <label for="payment-account">${locale.getString("payment.new.label.account")}</label> + <label for="transaction-account">${locale.getString("transaction.new.label.account")}</label> </div> </div> @@ -135,28 +135,28 @@ <div class="col s12 m12 l8 offset-l2"> <div class="switch"> <label> - <input type="checkbox" id="enableRepeating" name="enableRepeating" <#if payment.getRepeatingOption()??>checked</#if>> + <input type="checkbox" id="enableRepeating" name="enableRepeating" <#if transaction.getRepeatingOption()??>checked</#if>> <span class="lever"></span> - ${locale.getString("payment.new.label.repeating")} + ${locale.getString("transaction.new.label.repeating")} </label> </div> </div> </div> <#-- repeating modifier --> - <div class="row" id="payment-repeating-modifier-row"> + <div class="row" id="transaction-repeating-modifier-row"> <div class="input-field col s6 m6 l4 offset-l2"> - <input id="payment-repeating-modifier" type="text" <@validation.validation "repeatingModifierNumber"/> value="<#if payment.getRepeatingOption()??>${payment.getRepeatingOption().getModifier().getQuantity()}</#if>"> - <label for="payment-repeating-modifier">${locale.getString("payment.new.label.repeating.all")}</label> + <input id="transaction-repeating-modifier" type="text" <@validation.validation "repeatingModifierNumber"/> value="<#if transaction.getRepeatingOption()??>${transaction.getRepeatingOption().getModifier().getQuantity()}</#if>"> + <label for="transaction-repeating-modifier">${locale.getString("transaction.new.label.repeating.all")}</label> </div> - <input type="hidden" id="hidden-payment-repeating-modifier" name="repeatingModifierNumber" value="<#if payment.getRepeatingOption()??>${payment.getRepeatingOption().getModifier().getQuantity()}</#if>"> + <input type="hidden" id="hidden-transaction-repeating-modifier" name="repeatingModifierNumber" value="<#if transaction.getRepeatingOption()??>${transaction.getRepeatingOption().getModifier().getQuantity()}</#if>"> <div class="input-field col s6 m6 l4"> - <select id="payment-repeating-modifier-type" name="repeatingModifierType"> + <select id="transaction-repeating-modifier-type" name="repeatingModifierType"> <#list helpers.getRepeatingModifierTypes() as modifierType> <#assign modifierName=locale.getString(modifierType.getLocalizationKey())> - <#if payment.getRepeatingOption()??> - <#if payment.getRepeatingOption().getModifier().getLocalizationKey() == modifierName> + <#if transaction.getRepeatingOption()??> + <#if transaction.getRepeatingOption().getModifier().getLocalizationKey() == modifierName> <option selected value="${modifierName}">${modifierName}</option> <#else> <option value="${modifierName}">${modifierName}</option> @@ -170,17 +170,17 @@ </div> <#-- repeating end option --> - <div class="row" id="payment-repeating-end"> + <div class="row" id="transaction-repeating-end"> <div class="col s12 m12 l8 offset-l2"> <div class="row"> <div class="col s12 left-align"> ${locale.getString("repeating.end")} </div> </div> - <@repeatingEndNever (payment.getRepeatingOption()?? && payment.getRepeatingOption().getEndOption().getLocalizationKey() == "repeating.end.key.never") || !payment.getRepeatingOption()??/> - <@repeatingEndAfterXTimes payment.getRepeatingOption()?? && payment.getRepeatingOption().getEndOption().getLocalizationKey() == "repeating.end.key.afterXTimes"/> - <@repeatingEndDate payment.getRepeatingOption()?? && payment.getRepeatingOption().getEndOption().getLocalizationKey() == "repeating.end.key.date"/> - <input type="hidden" id="hidden-payment-repeating-end-value" name="repeatingEndValue" value=""> + <@repeatingEndNever (transaction.getRepeatingOption()?? && transaction.getRepeatingOption().getEndOption().getLocalizationKey() == "repeating.end.key.never") || !transaction.getRepeatingOption()??/> + <@repeatingEndAfterXTimes transaction.getRepeatingOption()?? && transaction.getRepeatingOption().getEndOption().getLocalizationKey() == "repeating.end.key.afterXTimes"/> + <@repeatingEndDate transaction.getRepeatingOption()?? && transaction.getRepeatingOption().getEndOption().getLocalizationKey() == "repeating.end.key.date"/> + <input type="hidden" id="hidden-transaction-repeating-end-value" name="repeatingEndValue" value=""> </div> </div> @@ -208,8 +208,8 @@ <td class="cell">${locale.getString("repeating.end.afterXTimes.A")}</td> <td class="cell input-cell"> <div class="input-field no-margin"> - <input class="no-margin" id="payment-repeating-end-after-x-times-input" type="text" value="<#if checked>${payment.getRepeatingOption().getEndOption().getValue()}</#if>"> - <label for="payment-repeating-end-after-x-times-input"></label> + <input class="no-margin" id="transaction-repeating-end-after-x-times-input" type="text" value="<#if checked>${transaction.getRepeatingOption().getEndOption().getValue()}</#if>"> + <label for="transaction-repeating-end-after-x-times-input"></label> </div> </td> <td class="cell stretched-cell">${locale.getString("repeating.end.afterXTimes.B")}</td> @@ -231,8 +231,8 @@ <td class="cell">${locale.getString("repeating.end.date")}</td> <td class="cell input-cell"> <div class="input-field no-margin"> - <input class="datepicker no-margin" id="payment-repeating-end-date-input" type="text" value="<#if checked>${helpers.getLongDateString(payment.getRepeatingOption().getEndOption().getValue())}<#else>${helpers.getLongDateString(currentDate)}</#if>"> - <label for="payment-repeating-end-date-input"></label> + <input class="datepicker no-margin" id="transaction-repeating-end-date-input" type="text" value="<#if checked>${helpers.getLongDateString(transaction.getRepeatingOption().getEndOption().getValue())}<#else>${helpers.getLongDateString(currentDate)}</#if>"> + <label for="transaction-repeating-end-date-input"></label> </div> </td> <td class="cell stretched-cell"></td> @@ -247,7 +247,7 @@ <#-- buttons --> <div class="row hide-on-small-only"> <div class="col m6 l4 offset-l2 right-align"> - <a href="/payments" class="waves-effect waves-light btn budgetmaster-blue"><i class="material-icons left">clear</i>${locale.getString("cancel")}</a> + <a href="/transactions" class="waves-effect waves-light btn budgetmaster-blue"><i class="material-icons left">clear</i>${locale.getString("cancel")}</a> </div> <div class="col m6 l4 left-align"> @@ -280,8 +280,8 @@ <#import "../datePicker.ftl" as datePicker> <@datePicker.datePickerLocalization/> <script> - amountValidationMessage = "${locale.getString("warning.payment.amount")}"; - numberValidationMessage = "${locale.getString("warning.payment.number")}"; + amountValidationMessage = "${locale.getString("warning.transaction.amount")}"; + numberValidationMessage = "${locale.getString("warning.transaction.number")}"; tagsPlaceholder = "${locale.getString("tagfield.placeholder")}"; </script> @@ -298,6 +298,6 @@ <#import "../scripts.ftl" as scripts> <@scripts.scripts/> <script src="/js/spectrum.js"></script> - <script src="/js/payments.js"></script> + <script src="/js/transactions.js"></script> </body> </html> \ No newline at end of file diff --git a/src/main/resources/templates/payments/payments.ftl b/src/main/resources/templates/transactions/transactions.ftl similarity index 62% rename from src/main/resources/templates/payments/payments.ftl rename to src/main/resources/templates/transactions/transactions.ftl index 5bd1045659719250a4f4f97b33b861a66b5c03b5..ceab026f5834e1208a24474b63ff635440039613 100644 --- a/src/main/resources/templates/payments/payments.ftl +++ b/src/main/resources/templates/transactions/transactions.ftl @@ -6,12 +6,12 @@ </head> <body class="budgetmaster-blue-light"> <#import "../navbar.ftl" as navbar> - <@navbar.navbar "payments"/> + <@navbar.navbar "transactions"/> <main> <div class="card main-card background-color"> <#import "../datePicker.ftl" as datePicker> - <@datePicker.datePicker currentDate "/payments"/> + <@datePicker.datePicker currentDate "/transactions"/> <div class="container"> <div class="row"> <div class="col s4"> @@ -25,7 +25,7 @@ <div class="icon-block"> <h1 class="center ${redTextColor} budget-headline-icon"><i class="material-icons icon-budget">file_upload</i></h1> <h5 class="center budget">${helpers.getCurrencyString(paymentSum)}</h5> - <h5 class="center budget-headline">${locale.getString("title.payments")}</h5> + <h5 class="center budget-headline">${locale.getString("title.transactions")}</h5> </div> </div> <div class="col s4"> @@ -39,59 +39,59 @@ <#-- button new --> <div class="row valign-wrapper"> - <div class="col s12 center-align"><a href="/payments/newPayment" class="waves-effect waves-light btn budgetmaster-blue"><i class="material-icons left">add</i>${locale.getString("title.payment.new")}</a></div> + <div class="col s12 center-align"><a href="/transactions/newTransaction" class="waves-effect waves-light btn budgetmaster-blue"><i class="material-icons left">add</i>${locale.getString("title.transaction.new")}</a></div> </div> - <#-- payments list --> + <#-- transactions list --> <br> <table class="bordered"> - <#list payments as payment> + <#list transactions as transaction> <tr> - <td>${helpers.getDateString(payment.date)}</td> + <td>${helpers.getDateString(transaction.date)}</td> <td><i class="material-icons">repeat</i></td> <td> - <div class="category-circle" style="background-color: ${payment.category.color}"> - <span style="color: ${payment.category.getAppropriateTextColor()}"> - ${payment.category.name?capitalize[0]} + <div class="category-circle" style="background-color: ${transaction.category.color}"> + <span style="color: ${transaction.category.getAppropriateTextColor()}"> + ${transaction.category.name?capitalize[0]} </span> </div> </td> <td> - <div>${payment.name}</div> - <#if payment.description??> - <div class="italic">${payment.description}</div> + <div>${transaction.name}</div> + <#if transaction.description??> + <div class="italic">${transaction.description}</div> </#if> </td> - <#if payment.amount <= 0> - <td class="bold ${redTextColor}">${helpers.getCurrencyString(payment.amount)}</td> + <#if transaction.amount <= 0> + <td class="bold ${redTextColor}">${helpers.getCurrencyString(transaction.amount)}</td> <#else> - <td class="bold ${greenTextColor}">${helpers.getCurrencyString(payment.amount)}</td> + <td class="bold ${greenTextColor}">${helpers.getCurrencyString(transaction.amount)}</td> </#if> <td> - <#if (payment.category.type.name() != "REST")> - <a href="/payments/${payment.ID}/edit" class="btn-flat no-padding text-color"><i class="material-icons left">edit</i></a> - <a href="/payments/${payment.ID}/requestDelete" class="btn-flat no-padding text-color"><i class="material-icons left">delete</i></a> + <#if (transaction.category.type.name() != "REST")> + <a href="/transactions/${transaction.ID}/edit" class="btn-flat no-padding text-color"><i class="material-icons left">edit</i></a> + <a href="/transactions/${transaction.ID}/requestDelete" class="btn-flat no-padding text-color"><i class="material-icons left">delete</i></a> </#if> </td> </tr> </#list> </table> - <#if payments?size == 0> + <#if transactions?size == 0> <div class="headline center-align">${locale.getString("placeholder")}</div> </#if> </div> </div> - <#if currentPayment??> + <#if currentTransaction??> <!-- confirm delete modal --> <div id="modalConfirmDelete" class="modal background-color"> <div class="modal-content"> - <h4>${locale.getString("info.title.payment.delete")}</h4> - <p>${locale.getString("info.text.payment.delete", currentPayment.name)}</p> + <h4>${locale.getString("info.title.transaction.delete")}</h4> + <p>${locale.getString("info.text.transaction.delete", currentTransaction.name)}</p> </div> <div class="modal-footer background-color"> - <a href="/payments" class="modal-action modal-close waves-effect waves-red btn-flat ">${locale.getString("cancel")}</a> - <a href="/payments/${currentPayment.ID}/delete" class="modal-action modal-close waves-effect waves-green btn-flat ">${locale.getString("delete")}</a> + <a href="/transactions" class="modal-action modal-close waves-effect waves-red btn-flat ">${locale.getString("cancel")}</a> + <a href="/transactions/${currentTransaction.ID}/delete" class="modal-action modal-close waves-effect waves-green btn-flat ">${locale.getString("delete")}</a> </div> </div> </#if> @@ -100,7 +100,7 @@ <!-- Scripts--> <#import "../scripts.ftl" as scripts> <@scripts.scripts/> - <script src="/js/payments.js"></script> + <script src="/js/transactions.js"></script> <script src="/js/datePicker.js"></script> <script>document.cookie = "currentDate=${helpers.getDateString(currentDate)}";</script> </body> 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 6b476475d016e8815092ca18846957d8ab78947e..b765bff0c1f01857e49ea9b8e1a373218a731a2b 100644 --- a/src/test/java/de/deadlocker8/budgetmaster/database/DatabaseParser_v3Test.java +++ b/src/test/java/de/deadlocker8/budgetmaster/database/DatabaseParser_v3Test.java @@ -78,7 +78,7 @@ public class DatabaseParser_v3Test } @Test - public void test_Payments() + public void test_Transactions() { try { @@ -98,64 +98,64 @@ public class DatabaseParser_v3Test Category category3 = new Category("0815", "#ffcc00", CategoryType.CUSTOM); category3.setID(3); - assertEquals(5, database.getPayments().size()); - - Payment normalPayment_1 = new Payment(); - normalPayment_1.setAmount(35000); - normalPayment_1.setDate(DateTime.parse("2018-03-13", DateTimeFormat.forPattern("yyyy-MM-dd"))); - normalPayment_1.setCategory(categoryNone); - normalPayment_1.setName("Income"); - normalPayment_1.setDescription("Lorem Ipsum"); - normalPayment_1.setTags(new ArrayList<>()); - normalPayment_1.setAccount(account1); - assertTrue(database.getPayments().contains(normalPayment_1)); - - Payment normalPayment_2 = new Payment(); - normalPayment_2.setAmount(-2000); - normalPayment_2.setDate(DateTime.parse("2018-06-15", DateTimeFormat.forPattern("yyyy-MM-dd"))); - normalPayment_2.setName("Simple"); - normalPayment_2.setDescription(""); - normalPayment_2.setAccount(account2); - normalPayment_2.setCategory(category3); + assertEquals(5, database.getTransactions().size()); + + Transaction normalTransaction_1 = new Transaction(); + normalTransaction_1.setAmount(35000); + normalTransaction_1.setDate(DateTime.parse("2018-03-13", DateTimeFormat.forPattern("yyyy-MM-dd"))); + normalTransaction_1.setCategory(categoryNone); + normalTransaction_1.setName("Income"); + normalTransaction_1.setDescription("Lorem Ipsum"); + normalTransaction_1.setTags(new ArrayList<>()); + normalTransaction_1.setAccount(account1); + assertTrue(database.getTransactions().contains(normalTransaction_1)); + + Transaction normalTransaction_2 = new Transaction(); + normalTransaction_2.setAmount(-2000); + normalTransaction_2.setDate(DateTime.parse("2018-06-15", DateTimeFormat.forPattern("yyyy-MM-dd"))); + normalTransaction_2.setName("Simple"); + normalTransaction_2.setDescription(""); + normalTransaction_2.setAccount(account2); + normalTransaction_2.setCategory(category3); List<Tag> tags = new ArrayList<>(); Tag tag = new Tag("0815"); tag.setID(1); tags.add(tag); - normalPayment_2.setTags(tags); - assertTrue(database.getPayments().contains(normalPayment_2)); - - Payment repeatingPayment_1 = new Payment(); - repeatingPayment_1.setAmount(-12300); - DateTime repeatingPaymentDate_1 = DateTime.parse("2018-03-13", DateTimeFormat.forPattern("yyyy-MM-dd")); - repeatingPayment_1.setDate(repeatingPaymentDate_1); - repeatingPayment_1.setCategory(categoryNone); - repeatingPayment_1.setName("Test"); - repeatingPayment_1.setDescription(""); - repeatingPayment_1.setAccount(account1); + normalTransaction_2.setTags(tags); + assertTrue(database.getTransactions().contains(normalTransaction_2)); + + Transaction repeatingTransaction_1 = new Transaction(); + repeatingTransaction_1.setAmount(-12300); + DateTime repeatingTransactionDate_1 = DateTime.parse("2018-03-13", DateTimeFormat.forPattern("yyyy-MM-dd")); + repeatingTransaction_1.setDate(repeatingTransactionDate_1); + repeatingTransaction_1.setCategory(categoryNone); + repeatingTransaction_1.setName("Test"); + repeatingTransaction_1.setDescription(""); + repeatingTransaction_1.setAccount(account1); RepeatingOption repeatingOption_1 = new RepeatingOption(); repeatingOption_1.setModifier(new RepeatingModifierDays(10)); - repeatingOption_1.setStartDate(repeatingPaymentDate_1); + repeatingOption_1.setStartDate(repeatingTransactionDate_1); repeatingOption_1.setEndOption(new RepeatingEndAfterXTimes(2)); - repeatingPayment_1.setRepeatingOption(repeatingOption_1); - repeatingPayment_1.setTags(new ArrayList<>()); - assertTrue(database.getPayments().contains(repeatingPayment_1)); - - Payment repeatingPayment_2 = new Payment(); - repeatingPayment_2.setAmount(-12300); - DateTime repeatingPaymentDate_2 = DateTime.parse("2018-03-23", DateTimeFormat.forPattern("yyyy-MM-dd")); - repeatingPayment_2.setDate(repeatingPaymentDate_2); - repeatingPayment_2.setCategory(categoryNone); - repeatingPayment_2.setName("Test"); - repeatingPayment_2.setDescription(""); - repeatingPayment_2.setAccount(account1); + repeatingTransaction_1.setRepeatingOption(repeatingOption_1); + repeatingTransaction_1.setTags(new ArrayList<>()); + assertTrue(database.getTransactions().contains(repeatingTransaction_1)); + + Transaction repeatingTransaction_2 = new Transaction(); + repeatingTransaction_2.setAmount(-12300); + DateTime repeatingTransactionDate_2 = DateTime.parse("2018-03-23", DateTimeFormat.forPattern("yyyy-MM-dd")); + repeatingTransaction_2.setDate(repeatingTransactionDate_2); + repeatingTransaction_2.setCategory(categoryNone); + repeatingTransaction_2.setName("Test"); + repeatingTransaction_2.setDescription(""); + repeatingTransaction_2.setAccount(account1); RepeatingOption repeatingOption_2 = new RepeatingOption(); repeatingOption_2.setModifier(new RepeatingModifierDays(10)); - repeatingOption_2.setStartDate(repeatingPaymentDate_2); + repeatingOption_2.setStartDate(repeatingTransactionDate_2); repeatingOption_2.setEndOption(new RepeatingEndAfterXTimes(2)); - repeatingPayment_2.setRepeatingOption(repeatingOption_2); - repeatingPayment_2.setTags(new ArrayList<>()); - assertTrue(database.getPayments().contains(repeatingPayment_2)); + repeatingTransaction_2.setRepeatingOption(repeatingOption_2); + repeatingTransaction_2.setTags(new ArrayList<>()); + assertTrue(database.getTransactions().contains(repeatingTransaction_2)); } catch(IOException | URISyntaxException e) { diff --git a/src/test/java/de/deadlocker8/budgetmaster/database/LegacyParserTest.java b/src/test/java/de/deadlocker8/budgetmaster/database/LegacyParserTest.java index c14f8bf76b480d7fd354b904f5e89a28c3ef4fce..6a1a3ad39fba6dcb59c467f30f761f7d5c4a712c 100644 --- a/src/test/java/de/deadlocker8/budgetmaster/database/LegacyParserTest.java +++ b/src/test/java/de/deadlocker8/budgetmaster/database/LegacyParserTest.java @@ -86,59 +86,59 @@ public class LegacyParserTest LegacyParser importer = new LegacyParser(json); Database database = importer.parseDatabaseFromJSON(); - assertEquals(4, database.getPayments().size()); - - Payment normalPayment_1 = new Payment(); - normalPayment_1.setAmount(-2323); - normalPayment_1.setDate(DateTime.parse("2018-01-21", DateTimeFormat.forPattern("yyyy-MM-dd"))); - normalPayment_1.setCategory(category4); - normalPayment_1.setName("Fuel"); - normalPayment_1.setDescription("Lorem Ipsum"); - normalPayment_1.setTags(tags); - normalPayment_1.setAccount(account); - assertTrue(database.getPayments().contains(normalPayment_1)); - - Payment normalPayment_2 = new Payment(); - normalPayment_2.setAmount(100); - normalPayment_2.setDate(DateTime.parse("2018-01-01", DateTimeFormat.forPattern("yyyy-MM-dd"))); - normalPayment_2.setName("no category"); - normalPayment_2.setDescription(""); - normalPayment_2.setAccount(account); - normalPayment_2.setTags(new ArrayList<>()); - assertTrue(database.getPayments().contains(normalPayment_2)); - - Payment repeatingPayment_1 = new Payment(); - repeatingPayment_1.setAmount(500000); - DateTime repeatingPaymentDate_1 = DateTime.parse("2017-03-01", DateTimeFormat.forPattern("yyyy-MM-dd")); - repeatingPayment_1.setDate(repeatingPaymentDate_1); - repeatingPayment_1.setCategory(category3); - repeatingPayment_1.setName("Salary"); - repeatingPayment_1.setDescription("Monthly cash"); - repeatingPayment_1.setAccount(account); + assertEquals(4, database.getTransactions().size()); + + Transaction normalTransaction_1 = new Transaction(); + normalTransaction_1.setAmount(-2323); + normalTransaction_1.setDate(DateTime.parse("2018-01-21", DateTimeFormat.forPattern("yyyy-MM-dd"))); + normalTransaction_1.setCategory(category4); + normalTransaction_1.setName("Fuel"); + normalTransaction_1.setDescription("Lorem Ipsum"); + normalTransaction_1.setTags(tags); + normalTransaction_1.setAccount(account); + assertTrue(database.getTransactions().contains(normalTransaction_1)); + + Transaction normalTransaction_2 = new Transaction(); + normalTransaction_2.setAmount(100); + normalTransaction_2.setDate(DateTime.parse("2018-01-01", DateTimeFormat.forPattern("yyyy-MM-dd"))); + normalTransaction_2.setName("no category"); + normalTransaction_2.setDescription(""); + normalTransaction_2.setAccount(account); + normalTransaction_2.setTags(new ArrayList<>()); + assertTrue(database.getTransactions().contains(normalTransaction_2)); + + Transaction repeatingTransaction_1 = new Transaction(); + repeatingTransaction_1.setAmount(500000); + DateTime repeatingTransactionDate_1 = DateTime.parse("2017-03-01", DateTimeFormat.forPattern("yyyy-MM-dd")); + repeatingTransaction_1.setDate(repeatingTransactionDate_1); + repeatingTransaction_1.setCategory(category3); + repeatingTransaction_1.setName("Salary"); + repeatingTransaction_1.setDescription("Monthly cash"); + repeatingTransaction_1.setAccount(account); RepeatingOption repeatingOption_1 = new RepeatingOption(); repeatingOption_1.setModifier(new RepeatingModifierMonths(1)); - repeatingOption_1.setStartDate(repeatingPaymentDate_1); + repeatingOption_1.setStartDate(repeatingTransactionDate_1); repeatingOption_1.setEndOption(new RepeatingEndNever()); - repeatingPayment_1.setRepeatingOption(repeatingOption_1); - repeatingPayment_1.setTags(tags); - assertTrue(database.getPayments().contains(repeatingPayment_1)); - - Payment repeatingPayment_2 = new Payment(); - repeatingPayment_2.setAmount(-2500); - DateTime repeatingPaymentDate_2 = DateTime.parse("2017-03-15", DateTimeFormat.forPattern("yyyy-MM-dd")); - repeatingPayment_2.setDate(repeatingPaymentDate_2); - repeatingPayment_2.setCategory(category4); - repeatingPayment_2.setName("Rent"); - repeatingPayment_2.setDescription("Repeating every 7 days"); - repeatingPayment_2.setAccount(account); + repeatingTransaction_1.setRepeatingOption(repeatingOption_1); + repeatingTransaction_1.setTags(tags); + assertTrue(database.getTransactions().contains(repeatingTransaction_1)); + + Transaction repeatingTransaction_2 = new Transaction(); + repeatingTransaction_2.setAmount(-2500); + DateTime repeatingTransactionDate_2 = DateTime.parse("2017-03-15", DateTimeFormat.forPattern("yyyy-MM-dd")); + repeatingTransaction_2.setDate(repeatingTransactionDate_2); + repeatingTransaction_2.setCategory(category4); + repeatingTransaction_2.setName("Rent"); + repeatingTransaction_2.setDescription("Repeating every 7 days"); + repeatingTransaction_2.setAccount(account); RepeatingOption repeatingOption_2= new RepeatingOption(); repeatingOption_2.setModifier(new RepeatingModifierDays(7)); - repeatingOption_2.setStartDate(repeatingPaymentDate_2); + repeatingOption_2.setStartDate(repeatingTransactionDate_2); repeatingOption_2.setEndOption(new RepeatingEndDate(DateTime.parse("2017-06-15", DateTimeFormat.forPattern("yyyy-MM-dd")))); - repeatingPayment_2.setDate(repeatingPaymentDate_2); - repeatingPayment_2.setRepeatingOption(repeatingOption_2); - repeatingPayment_2.setTags(new ArrayList<>()); - assertTrue(database.getPayments().contains(repeatingPayment_2)); + repeatingTransaction_2.setDate(repeatingTransactionDate_2); + repeatingTransaction_2.setRepeatingOption(repeatingOption_2); + repeatingTransaction_2.setTags(new ArrayList<>()); + assertTrue(database.getTransactions().contains(repeatingTransaction_2)); } catch(IOException | URISyntaxException e) { diff --git a/src/test/resources/DatabaseParser_v3Test.json b/src/test/resources/DatabaseParser_v3Test.json index 6363e9a42fc22dd06c40072c8d104296e091625d..d0d2c53c83ecb06d5942ed4951e9246bbb3d8406 100644 --- a/src/test/resources/DatabaseParser_v3Test.json +++ b/src/test/resources/DatabaseParser_v3Test.json @@ -31,7 +31,7 @@ "name": "Second Account" } ], - "payments": [ + "transactions": [ { "ID": 5, "amount": 35000,