diff --git a/src/main/java/de/deadlocker8/budgetmaster/transactions/TransactionController.java b/src/main/java/de/deadlocker8/budgetmaster/transactions/TransactionController.java index 3733d4d5d575226b402d68e33b5f2aadf194923c..81db8cfd52d65527af19c91ba018f5a851933fa1 100644 --- a/src/main/java/de/deadlocker8/budgetmaster/transactions/TransactionController.java +++ b/src/main/java/de/deadlocker8/budgetmaster/transactions/TransactionController.java @@ -333,4 +333,39 @@ public class TransactionController extends BaseController return redirectUrl; } + + @GetMapping("/{ID}/newFromExisting") + public String newFromExisting(Model model, @PathVariable("ID") Integer ID, @CookieValue("currentDate") String cookieDate) + { + Optional<Transaction> transactionOptional = transactionService.getRepository().findById(ID); + if(transactionOptional.isEmpty()) + { + throw new ResourceNotFoundException(); + } + + Transaction existingTransaction = transactionOptional.get(); + + // select first transaction in order to provide correct start date for repeating transactions + if(existingTransaction.getRepeatingOption() != null) + { + existingTransaction = existingTransaction.getRepeatingOption().getReferringTransactions().get(0); + } + + final Transaction newTransaction = new Transaction(existingTransaction); + newTransaction.setID(null); + + if(newTransaction.getAccount().getAccountState() != AccountState.FULL_ACCESS) + { + newTransaction.setAccount(helpers.getCurrentAccountOrDefault()); + } + + DateTime date = dateService.getDateTimeFromCookie(cookieDate); + transactionService.prepareModelNewOrEdit(model, false, date, false, newTransaction, accountService.getAllActivatedAccountsAsc()); + + if(newTransaction.isTransfer()) + { + return "transactions/newTransactionTransfer"; + } + return "transactions/newTransactionNormal"; + } } \ No newline at end of file