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 38839cdbdd93e5cb325fa330e7be0c040237a673..8b8d3025ebdff77d28d86b18f86875698f64f8ad 100644 --- a/BudgetMasterServer/src/main/java/de/deadlocker8/budgetmaster/transactions/TransactionImportController.java +++ b/BudgetMasterServer/src/main/java/de/deadlocker8/budgetmaster/transactions/TransactionImportController.java @@ -1,5 +1,8 @@ package de.deadlocker8.budgetmaster.transactions; +import de.deadlocker8.budgetmaster.accounts.AccountService; +import de.deadlocker8.budgetmaster.categories.CategoryService; +import de.deadlocker8.budgetmaster.categories.CategoryType; import de.deadlocker8.budgetmaster.controller.BaseController; import de.deadlocker8.budgetmaster.services.HelpersService; import de.deadlocker8.budgetmaster.transactions.csvImport.*; @@ -14,8 +17,10 @@ import org.springframework.web.context.request.RequestAttributes; import org.springframework.web.context.request.WebRequest; import java.nio.charset.StandardCharsets; +import java.time.LocalDate; import java.util.ArrayList; import java.util.List; +import java.util.Optional; @Controller @RequestMapping(Mappings.TRANSACTION_IMPORT) @@ -31,10 +36,16 @@ public class TransactionImportController extends BaseController public static final String TRANSACTION_IMPORT = "transactions/transactionImport"; public static final String REDIRECT_IMPORT = "redirect:/transactionImport"; public static final String REDIRECT_CANCEL = "redirect:/transactionImport/cancel"; + public static final String NEW_TRANSACTION_NORMAL = "transactions/newTransactionNormal"; + public static final String NEW_TRANSACTION_TRANSFER = "transactions/newTransactionTransfer"; } - private static class RequestAttributeNames + public static class RequestAttributeNames { + private RequestAttributeNames() + { + } + public static final String CSV_IMPORT = "csvImport"; public static final String CSV_ROWS = "csvRows"; public static final String CSV_TRANSACTIONS = "csvTransactions"; @@ -44,12 +55,16 @@ public class TransactionImportController extends BaseController private final TransactionService transactionService; private final HelpersService helpers; + private final CategoryService categoryService; + private final AccountService accountService; @Autowired - public TransactionImportController(TransactionService transactionService, HelpersService helpers) + public TransactionImportController(TransactionService transactionService, HelpersService helpers, CategoryService categoryService, AccountService accountService) { this.transactionService = transactionService; this.helpers = helpers; + this.categoryService = categoryService; + this.accountService = accountService; } @GetMapping @@ -158,17 +173,51 @@ public class TransactionImportController extends BaseController @GetMapping("/{index}/skip") public String skip(WebRequest request, @PathVariable("index") Integer index) { - final Object attribute = request.getAttribute(RequestAttributeNames.CSV_TRANSACTIONS, RequestAttributes.SCOPE_SESSION); - if(attribute == null) + final Optional<CsvTransaction> transactionOptional = getTransactionByIndex(request, index); + if(transactionOptional.isEmpty()) { - return ReturnValues.REDIRECT_CANCEL; + return ReturnValues.REDIRECT_IMPORT; } - final List<CsvTransaction> csvTransactions = (List<CsvTransaction>) attribute; - csvTransactions.get(index).setStatus(CsvTransactionStatus.SKIPPED); + transactionOptional.get().setStatus(CsvTransactionStatus.SKIPPED); return ReturnValues.REDIRECT_IMPORT; } + @GetMapping("/{index}/newTransaction/{type}") + public String newTransaction(WebRequest request, + @PathVariable("index") Integer index, + @PathVariable("type") String type, + Model model) + { + final Optional<CsvTransaction> transactionOptional = getTransactionByIndex(request, index); + if(transactionOptional.isEmpty()) + { + return ReturnValues.REDIRECT_IMPORT; + } + + final CsvTransaction csvTransaction = transactionOptional.get(); + csvTransaction.setStatus(CsvTransactionStatus.IMPORTED); + + final Transaction newTransaction = new Transaction(); + // TODO parse first +// newTransaction.setDate(csvTransaction.getDate()); + newTransaction.setName(csvTransaction.getName()); + // TODO parse first +// newTransaction.setAmount(csvTransaction.getAmount()); + newTransaction.setIsExpenditure(true); + 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; + } + private void removeAllAttributes(WebRequest request) { request.removeAttribute(RequestAttributeNames.CSV_IMPORT, RequestAttributes.SCOPE_SESSION); @@ -177,4 +226,16 @@ public class TransactionImportController extends BaseController request.removeAttribute(RequestAttributeNames.ERROR_UPLOAD, RequestAttributes.SCOPE_SESSION); request.removeAttribute(RequestAttributeNames.ERROR_UPLOAD_FILE, RequestAttributes.SCOPE_SESSION); } + + private Optional<CsvTransaction> getTransactionByIndex(WebRequest request, Integer index) + { + final Object attribute = request.getAttribute(RequestAttributeNames.CSV_TRANSACTIONS, RequestAttributes.SCOPE_SESSION); + if(attribute == null) + { + return Optional.empty(); + } + + final List<CsvTransaction> csvTransactions = (List<CsvTransaction>) attribute; + return Optional.of(csvTransactions.get(index)); + } } \ No newline at end of file diff --git a/BudgetMasterServer/src/main/resources/static/js/transactionImport.js b/BudgetMasterServer/src/main/resources/static/js/transactionImport.js new file mode 100644 index 0000000000000000000000000000000000000000..1460c264b8c5b80ea3341c1c6fe284e701bb14fd --- /dev/null +++ b/BudgetMasterServer/src/main/resources/static/js/transactionImport.js @@ -0,0 +1,7 @@ +$(document).ready(function() +{ + M.FloatingActionButton.init(document.querySelectorAll('.edit-transaction-button'), { + direction: 'left', + hoverEnabled: false + }); +}); \ No newline at end of file diff --git a/BudgetMasterServer/src/main/resources/templates/transactions/transactionImport.ftl b/BudgetMasterServer/src/main/resources/templates/transactions/transactionImport.ftl index e8a9f56dc190c63e0d489a678078a308e461b377..62cacc1cf4230e2664be323274afb4e687a28f15 100644 --- a/BudgetMasterServer/src/main/resources/templates/transactions/transactionImport.ftl +++ b/BudgetMasterServer/src/main/resources/templates/transactions/transactionImport.ftl @@ -4,6 +4,7 @@ <#import "../helpers/validation.ftl" as validation> <@header.globals/> <@header.header "BudgetMaster - ${locale.getString('menu.transactions.import')}"/> + <@header.style "transactions"/> <@header.style "transactionImport"/> <#import "/spring.ftl" as s> </head> @@ -11,7 +12,7 @@ <#import "../helpers/navbar.ftl" as navbar> <@navbar.navbar "importCSV" settings/> - <#import "../search/searchMacros.ftl" as searchMacros> + <#import "transactionsMacros.ftl" as transactionMacros> <main> <div class="card main-card background-color"> @@ -58,6 +59,7 @@ <!-- Scripts--> <#import "../helpers/scripts.ftl" as scripts> <@scripts.scripts/> + <script src="<@s.url '/js/transactionImport.js'/>"></script> </@header.body> </html> @@ -202,6 +204,25 @@ <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/' + csvTransaction?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/' + csvTransaction?index + '/newTransaction/normal'/>" class="btn-floating btn background-orange"><i class="material-icons">payment</i></a> + </li> + <li> + <a href="<@s.url '/transactionImport/' + csvTransaction?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/' + csvTransaction?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/' + csvTransaction?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/' + csvTransaction?index + '/newFromTemplate'/>" class="btn-floating btn background-blue-baby"><i class="material-icons">file_copy</i></a> + </li> + </ul> + </div> <@header.buttonFlat url='/transactionImport/' + csvTransaction?index + '/skip' icon='block' localizationKey='' classes="no-padding text-default button-request-transaction-import-skip"/> </td> </tr>