diff --git a/BudgetMasterServer/src/main/java/de/deadlocker8/budgetmaster/transactions/TransactionImportController.java b/BudgetMasterServer/src/main/java/de/deadlocker8/budgetmaster/transactions/TransactionImportController.java index 314888174266c0e8383e2ba681f3eba7196a83e3..d405b46fe92a9a9a79210f67ea196cb04cae6159 100644 --- a/BudgetMasterServer/src/main/java/de/deadlocker8/budgetmaster/transactions/TransactionImportController.java +++ b/BudgetMasterServer/src/main/java/de/deadlocker8/budgetmaster/transactions/TransactionImportController.java @@ -198,6 +198,43 @@ public class TransactionImportController extends BaseController final CsvTransaction csvTransaction = transactionOptional.get(); csvTransaction.setStatus(CsvTransactionStatus.IMPORTED); + final Transaction newTransaction = createTransactionFromCsvTransaction(csvTransaction); + + // TODO use csvTransaction.getDate() instead of debug date + transactionService.prepareModelNewOrEdit(model, false, LocalDate.now(), false, newTransaction, accountService.getAllActivatedAccountsAsc()); + + if(type.equals("transfer")) + { + return ReturnValues.NEW_TRANSACTION_TRANSFER; + } + return ReturnValues.NEW_TRANSACTION_NORMAL; + } + + @PostMapping("/{index}/newTransactionInPlace") + public String newTransactionInPlace(WebRequest request, + @PathVariable("index") Integer index, + @ModelAttribute("NewTransactionInPlace") CsvTransaction newCsvTransaction) + { + final Optional<CsvTransaction> transactionOptional = getTransactionByIndex(request, index); + if(transactionOptional.isEmpty()) + { + return ReturnValues.REDIRECT_IMPORT; + } + + final CsvTransaction csvTransaction = transactionOptional.get(); + csvTransaction.setStatus(CsvTransactionStatus.IMPORTED); + + // update original CsvTransaction attributes with values from user (from newCsvTransaction) + csvTransaction.setName(newCsvTransaction.getName()); + + final Transaction newTransaction = createTransactionFromCsvTransaction(csvTransaction); + transactionService.getRepository().save(newTransaction); + + return ReturnValues.REDIRECT_IMPORT; + } + + private Transaction createTransactionFromCsvTransaction(CsvTransaction csvTransaction) + { final Transaction newTransaction = new Transaction(); // TODO parse first // newTransaction.setDate(csvTransaction.getDate()); @@ -208,14 +245,7 @@ public class TransactionImportController extends BaseController newTransaction.setAccount(helpers.getCurrentAccountOrDefault()); newTransaction.setCategory(categoryService.findByType(CategoryType.NONE)); - // TODO use csvTransaction.getDate() instead of debug date - transactionService.prepareModelNewOrEdit(model, false, LocalDate.now(), false, newTransaction, accountService.getAllActivatedAccountsAsc()); - - if(type.equals("transfer")) - { - return ReturnValues.NEW_TRANSACTION_TRANSFER; - } - return ReturnValues.NEW_TRANSACTION_NORMAL; + return newTransaction; } private void removeAllAttributes(WebRequest request) diff --git a/BudgetMasterServer/src/main/java/de/deadlocker8/budgetmaster/transactions/csvimport/CsvTransaction.java b/BudgetMasterServer/src/main/java/de/deadlocker8/budgetmaster/transactions/csvimport/CsvTransaction.java index 073da472e0bdebcb262589fb65cb0a57ac7347cf..0e698def17a8aa03ec900a9fcda55f98d4b8d9e2 100644 --- a/BudgetMasterServer/src/main/java/de/deadlocker8/budgetmaster/transactions/csvimport/CsvTransaction.java +++ b/BudgetMasterServer/src/main/java/de/deadlocker8/budgetmaster/transactions/csvimport/CsvTransaction.java @@ -5,7 +5,7 @@ import java.util.Objects; public final class CsvTransaction { private final String date; - private final String name; + private String name; private final String amount; private CsvTransactionStatus status; @@ -27,6 +27,11 @@ public final class CsvTransaction return name; } + public void setName(String name) + { + this.name = name; + } + public String getAmount() { return amount; diff --git a/BudgetMasterServer/src/main/resources/templates/transactions/transactionImport.ftl b/BudgetMasterServer/src/main/resources/templates/transactions/transactionImport.ftl index c162a70f813f904b215f01815cc288049adeb2ef..c31894679e0d797b772b0ae83d25de22a038a4be 100644 --- a/BudgetMasterServer/src/main/resources/templates/transactions/transactionImport.ftl +++ b/BudgetMasterServer/src/main/resources/templates/transactions/transactionImport.ftl @@ -206,32 +206,41 @@ <#macro renderCsvRow csvTransaction index> <tr> - <td><@statusBanner csvTransaction.getStatus()/></td> - <td>${csvTransaction.getDate()}</td> - <td>${csvTransaction.getName()}</td> - <td>${csvTransaction.getAmount()}</td> - <td> - <div class="fixed-action-btn edit-transaction-button"> - <a class="btn-floating btn-flat waves-effect waves-light no-padding text-default edit-transaction-button-link"> - <i class="material-icons">edit</i> - </a> - <ul class="new-transaction-button-list"> - <li> - <a href="<@s.url '/transactionImport/' + index + '/newTransaction/normal'/>" class="btn-floating btn mobile-fab-tip no-wrap">${locale.getString("title.transaction.new", locale.getString("title.transaction.new.normal"))}</a> - <a href="<@s.url '/transactionImport/' + index + '/newTransaction/normal'/>" class="btn-floating btn background-orange"><i class="material-icons">payment</i></a> - </li> - <li> - <a href="<@s.url '/transactionImport/' + index + '/newTransaction/transfer'/>" class="btn-floating btn mobile-fab-tip no-wrap">${locale.getString("title.transaction.new", locale.getString("title.transaction.new.transfer"))}</a> - <a href="<@s.url '/transactionImport/' + index + '/newTransaction/transfer'/>" class="btn-floating btn background-green-dark"><i class="material-icons">swap_horiz</i></a> - </li> - <li> - <a href="<@s.url '/transactionImport/' + index + '/newFromTemplate'/>" class="btn-floating btn mobile-fab-tip no-wrap">${locale.getString("title.transaction.new", locale.getString("title.transaction.new.from.template"))}</a> - <a href="<@s.url '/transactionImport/' + index + '/newFromTemplate'/>" class="btn-floating btn background-blue-baby"><i class="material-icons">file_copy</i></a> - </li> - </ul> - </div> - <@header.buttonFlat url='/transactionImport/' + index + '/skip' icon='block' localizationKey='' classes="no-padding text-default button-request-transaction-import-skip"/> - </td> + <form name="NewTransactionInPlace" method="POST" action="<@s.url '/transactionImport/' + index + '/newTransactionInPlace'/>"> + <input type="hidden" name="${_csrf.parameterName}" value="${_csrf.token}"/> + <td><@statusBanner csvTransaction.getStatus()/></td> + <td>${csvTransaction.getDate()}</td> + <td> + <div class="input-field"> + <input id="name-${index}" type="text" name="name" required value="${csvTransaction.getName()}"> + <label class="input-label" for="name-${index}">${locale.getString("transaction.new.label.name")}</label> + </div> + </td> + <td>${csvTransaction.getAmount()}</td> + <td> + <@header.buttonSubmit name='action' icon='save' localizationKey='' classes='text-white'/> + <div class="fixed-action-btn edit-transaction-button"> + <a class="btn-floating btn-flat waves-effect waves-light no-padding text-default edit-transaction-button-link"> + <i class="material-icons">edit</i> + </a> + <ul class="new-transaction-button-list"> + <li> + <a href="<@s.url '/transactionImport/' + index + '/newTransaction/normal'/>" class="btn-floating btn mobile-fab-tip no-wrap">${locale.getString("title.transaction.new", locale.getString("title.transaction.new.normal"))}</a> + <a href="<@s.url '/transactionImport/' + index + '/newTransaction/normal'/>" class="btn-floating btn background-orange"><i class="material-icons">payment</i></a> + </li> + <li> + <a href="<@s.url '/transactionImport/' + index + '/newTransaction/transfer'/>" class="btn-floating btn mobile-fab-tip no-wrap">${locale.getString("title.transaction.new", locale.getString("title.transaction.new.transfer"))}</a> + <a href="<@s.url '/transactionImport/' + index + '/newTransaction/transfer'/>" class="btn-floating btn background-green-dark"><i class="material-icons">swap_horiz</i></a> + </li> + <li> + <a href="<@s.url '/transactionImport/' + index + '/newFromTemplate'/>" class="btn-floating btn mobile-fab-tip no-wrap">${locale.getString("title.transaction.new", locale.getString("title.transaction.new.from.template"))}</a> + <a href="<@s.url '/transactionImport/' + index + '/newFromTemplate'/>" class="btn-floating btn background-blue-baby"><i class="material-icons">file_copy</i></a> + </li> + </ul> + </div> + <@header.buttonFlat url='/transactionImport/' + index + '/skip' icon='block' localizationKey='' classes="no-padding text-default button-request-transaction-import-skip"/> + </td> + </form> </tr> </#macro>