Skip to content
Snippets Groups Projects
Commit fe6e8e35 authored by Robert Goldmann's avatar Robert Goldmann
Browse files

#724 - add buttons to create new transaction from row

parent a7ce3dc4
Branches
Tags
No related merge requests found
package de.deadlocker8.budgetmaster.transactions; 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.controller.BaseController;
import de.deadlocker8.budgetmaster.services.HelpersService; import de.deadlocker8.budgetmaster.services.HelpersService;
import de.deadlocker8.budgetmaster.transactions.csvImport.*; import de.deadlocker8.budgetmaster.transactions.csvImport.*;
...@@ -14,8 +17,10 @@ import org.springframework.web.context.request.RequestAttributes; ...@@ -14,8 +17,10 @@ import org.springframework.web.context.request.RequestAttributes;
import org.springframework.web.context.request.WebRequest; import org.springframework.web.context.request.WebRequest;
import java.nio.charset.StandardCharsets; import java.nio.charset.StandardCharsets;
import java.time.LocalDate;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.Optional;
@Controller @Controller
@RequestMapping(Mappings.TRANSACTION_IMPORT) @RequestMapping(Mappings.TRANSACTION_IMPORT)
...@@ -31,10 +36,16 @@ public class TransactionImportController extends BaseController ...@@ -31,10 +36,16 @@ public class TransactionImportController extends BaseController
public static final String TRANSACTION_IMPORT = "transactions/transactionImport"; public static final String TRANSACTION_IMPORT = "transactions/transactionImport";
public static final String REDIRECT_IMPORT = "redirect:/transactionImport"; public static final String REDIRECT_IMPORT = "redirect:/transactionImport";
public static final String REDIRECT_CANCEL = "redirect:/transactionImport/cancel"; 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_IMPORT = "csvImport";
public static final String CSV_ROWS = "csvRows"; public static final String CSV_ROWS = "csvRows";
public static final String CSV_TRANSACTIONS = "csvTransactions"; public static final String CSV_TRANSACTIONS = "csvTransactions";
...@@ -44,12 +55,16 @@ public class TransactionImportController extends BaseController ...@@ -44,12 +55,16 @@ public class TransactionImportController extends BaseController
private final TransactionService transactionService; private final TransactionService transactionService;
private final HelpersService helpers; private final HelpersService helpers;
private final CategoryService categoryService;
private final AccountService accountService;
@Autowired @Autowired
public TransactionImportController(TransactionService transactionService, HelpersService helpers) public TransactionImportController(TransactionService transactionService, HelpersService helpers, CategoryService categoryService, AccountService accountService)
{ {
this.transactionService = transactionService; this.transactionService = transactionService;
this.helpers = helpers; this.helpers = helpers;
this.categoryService = categoryService;
this.accountService = accountService;
} }
@GetMapping @GetMapping
...@@ -158,17 +173,51 @@ public class TransactionImportController extends BaseController ...@@ -158,17 +173,51 @@ public class TransactionImportController extends BaseController
@GetMapping("/{index}/skip") @GetMapping("/{index}/skip")
public String skip(WebRequest request, @PathVariable("index") Integer index) public String skip(WebRequest request, @PathVariable("index") Integer index)
{ {
final Object attribute = request.getAttribute(RequestAttributeNames.CSV_TRANSACTIONS, RequestAttributes.SCOPE_SESSION); final Optional<CsvTransaction> transactionOptional = getTransactionByIndex(request, index);
if(attribute == null) if(transactionOptional.isEmpty())
{ {
return ReturnValues.REDIRECT_CANCEL; return ReturnValues.REDIRECT_IMPORT;
} }
final List<CsvTransaction> csvTransactions = (List<CsvTransaction>) attribute; transactionOptional.get().setStatus(CsvTransactionStatus.SKIPPED);
csvTransactions.get(index).setStatus(CsvTransactionStatus.SKIPPED);
return ReturnValues.REDIRECT_IMPORT; 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) private void removeAllAttributes(WebRequest request)
{ {
request.removeAttribute(RequestAttributeNames.CSV_IMPORT, RequestAttributes.SCOPE_SESSION); request.removeAttribute(RequestAttributeNames.CSV_IMPORT, RequestAttributes.SCOPE_SESSION);
...@@ -177,4 +226,16 @@ public class TransactionImportController extends BaseController ...@@ -177,4 +226,16 @@ public class TransactionImportController extends BaseController
request.removeAttribute(RequestAttributeNames.ERROR_UPLOAD, RequestAttributes.SCOPE_SESSION); request.removeAttribute(RequestAttributeNames.ERROR_UPLOAD, RequestAttributes.SCOPE_SESSION);
request.removeAttribute(RequestAttributeNames.ERROR_UPLOAD_FILE, 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
$(document).ready(function()
{
M.FloatingActionButton.init(document.querySelectorAll('.edit-transaction-button'), {
direction: 'left',
hoverEnabled: false
});
});
\ No newline at end of file
...@@ -4,6 +4,7 @@ ...@@ -4,6 +4,7 @@
<#import "../helpers/validation.ftl" as validation> <#import "../helpers/validation.ftl" as validation>
<@header.globals/> <@header.globals/>
<@header.header "BudgetMaster - ${locale.getString('menu.transactions.import')}"/> <@header.header "BudgetMaster - ${locale.getString('menu.transactions.import')}"/>
<@header.style "transactions"/>
<@header.style "transactionImport"/> <@header.style "transactionImport"/>
<#import "/spring.ftl" as s> <#import "/spring.ftl" as s>
</head> </head>
...@@ -11,7 +12,7 @@ ...@@ -11,7 +12,7 @@
<#import "../helpers/navbar.ftl" as navbar> <#import "../helpers/navbar.ftl" as navbar>
<@navbar.navbar "importCSV" settings/> <@navbar.navbar "importCSV" settings/>
<#import "../search/searchMacros.ftl" as searchMacros> <#import "transactionsMacros.ftl" as transactionMacros>
<main> <main>
<div class="card main-card background-color"> <div class="card main-card background-color">
...@@ -58,6 +59,7 @@ ...@@ -58,6 +59,7 @@
<!-- Scripts--> <!-- Scripts-->
<#import "../helpers/scripts.ftl" as scripts> <#import "../helpers/scripts.ftl" as scripts>
<@scripts.scripts/> <@scripts.scripts/>
<script src="<@s.url '/js/transactionImport.js'/>"></script>
</@header.body> </@header.body>
</html> </html>
...@@ -202,6 +204,25 @@ ...@@ -202,6 +204,25 @@
<td>${csvTransaction.getName()}</td> <td>${csvTransaction.getName()}</td>
<td>${csvTransaction.getAmount()}</td> <td>${csvTransaction.getAmount()}</td>
<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"/> <@header.buttonFlat url='/transactionImport/' + csvTransaction?index + '/skip' icon='block' localizationKey='' classes="no-padding text-default button-request-transaction-import-skip"/>
</td> </td>
</tr> </tr>
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment