Skip to content

Commit

Permalink
#724 - add buttons to create new transaction from row
Browse files Browse the repository at this point in the history
  • Loading branch information
deadlocker8 committed Jan 8, 2023
1 parent a7ce3dc commit fe6e8e3
Show file tree
Hide file tree
Showing 3 changed files with 97 additions and 8 deletions.
Original file line number Diff line number Diff line change
@@ -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.*;
Expand All @@ -14,8 +17,10 @@
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)
Expand All @@ -31,10 +36,16 @@ private static class ReturnValues
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";
Expand All @@ -44,12 +55,16 @@ private static class RequestAttributeNames

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
Expand Down Expand Up @@ -158,17 +173,51 @@ public String cancel(WebRequest request)
@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);
Expand All @@ -177,4 +226,16 @@ private void removeAllAttributes(WebRequest request)
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));
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
$(document).ready(function()
{
M.FloatingActionButton.init(document.querySelectorAll('.edit-transaction-button'), {
direction: 'left',
hoverEnabled: false
});
});
Original file line number Diff line number Diff line change
Expand Up @@ -4,14 +4,15 @@
<#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>
<@header.body>
<#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">
Expand Down Expand Up @@ -58,6 +59,7 @@
<!-- Scripts-->
<#import "../helpers/scripts.ftl" as scripts>
<@scripts.scripts/>
<script src="<@s.url '/js/transactionImport.js'/>"></script>
</@header.body>
</html>

Expand Down Expand Up @@ -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>
Expand Down

0 comments on commit fe6e8e3

Please sign in to comment.