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

#724 - introduced TransactionImportService

parent fafc9cd6
No related branches found
No related tags found
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.accounts.AccountService;
import de.deadlocker8.budgetmaster.categories.Category;
import de.deadlocker8.budgetmaster.categories.CategoryService; 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.settings.SettingsService;
import de.deadlocker8.budgetmaster.transactions.csvimport.*; import de.deadlocker8.budgetmaster.transactions.csvimport.*;
import de.deadlocker8.budgetmaster.utils.Mappings; import de.deadlocker8.budgetmaster.utils.Mappings;
import de.deadlocker8.budgetmaster.utils.WebRequestUtils; import de.deadlocker8.budgetmaster.utils.WebRequestUtils;
...@@ -23,7 +19,6 @@ import org.springframework.web.context.request.RequestAttributes; ...@@ -23,7 +19,6 @@ 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; import java.util.Optional;
...@@ -63,19 +58,17 @@ public class TransactionImportController extends BaseController ...@@ -63,19 +58,17 @@ public class TransactionImportController extends BaseController
} }
private final TransactionService transactionService; private final TransactionService transactionService;
private final HelpersService helpers;
private final CategoryService categoryService; private final CategoryService categoryService;
private final AccountService accountService; private final AccountService accountService;
private final SettingsService settingsService; private final TransactionImportService transactionImportService;
@Autowired @Autowired
public TransactionImportController(TransactionService transactionService, HelpersService helpers, CategoryService categoryService, AccountService accountService, SettingsService settingsService) public TransactionImportController(TransactionService transactionService, CategoryService categoryService, AccountService accountService, TransactionImportService transactionImportService)
{ {
this.transactionService = transactionService; this.transactionService = transactionService;
this.helpers = helpers;
this.categoryService = categoryService; this.categoryService = categoryService;
this.accountService = accountService; this.accountService = accountService;
this.settingsService = settingsService; this.transactionImportService = transactionImportService;
} }
@GetMapping @GetMapping
...@@ -141,7 +134,6 @@ public class TransactionImportController extends BaseController ...@@ -141,7 +134,6 @@ public class TransactionImportController extends BaseController
catch(Exception e) catch(Exception e)
{ {
LOGGER.error("CSV upload failed", e); LOGGER.error("CSV upload failed", e);
WebRequestUtils.putNotification(request, new Notification(Localization.getString("transactions.import.error.upload", e.getMessage()), NotificationType.ERROR)); WebRequestUtils.putNotification(request, new Notification(Localization.getString("transactions.import.error.upload", e.getMessage()), NotificationType.ERROR));
} }
return ReturnValues.REDIRECT_IMPORT; return ReturnValues.REDIRECT_IMPORT;
...@@ -172,7 +164,7 @@ public class TransactionImportController extends BaseController ...@@ -172,7 +164,7 @@ public class TransactionImportController extends BaseController
final CsvRow csvRow = csvRows.get(i); final CsvRow csvRow = csvRows.get(i);
try try
{ {
csvTransactions.add(createCsvTransactionFromCsvRow(csvRow, csvColumnSettings, i)); csvTransactions.add(transactionImportService.createCsvTransactionFromCsvRow(csvRow, csvColumnSettings, i));
} }
catch(IndexOutOfBoundsException e) catch(IndexOutOfBoundsException e)
{ {
...@@ -191,29 +183,6 @@ public class TransactionImportController extends BaseController ...@@ -191,29 +183,6 @@ public class TransactionImportController extends BaseController
return ReturnValues.REDIRECT_IMPORT; return ReturnValues.REDIRECT_IMPORT;
} }
private CsvTransaction createCsvTransactionFromCsvRow(CsvRow csvRow, CsvColumnSettings csvColumnSettings, Integer index) throws CsvTransactionParseException
{
final String date = csvRow.getColumns().get(csvColumnSettings.columnDate() - 1);
final Optional<LocalDate> parsedDateOptional = DateParser.parse(date, csvColumnSettings.getDatePattern(), settingsService.getSettings().getLanguage().getLocale());
if(parsedDateOptional.isEmpty())
{
throw new CsvTransactionParseException(Localization.getString("transactions.import.error.parse.date", index + 1, date, csvColumnSettings.getDatePattern()));
}
final String name = csvRow.getColumns().get(csvColumnSettings.columnName() - 1);
final String description = csvRow.getColumns().get(csvColumnSettings.columnDescription() - 1);
final String amount = csvRow.getColumns().get(csvColumnSettings.columnAmount() - 1);
final Optional<Integer> parsedAmountOptional = AmountParser.parse(amount);
if(parsedAmountOptional.isEmpty())
{
throw new CsvTransactionParseException(Localization.getString("transactions.import.error.parse.amount", index + 1));
}
final Category categoryNone = categoryService.findByType(CategoryType.NONE);
return new CsvTransaction(parsedDateOptional.get(), name, parsedAmountOptional.get(), description, CsvTransactionStatus.PENDING, categoryNone);
}
@GetMapping("/cancel") @GetMapping("/cancel")
public String cancel(WebRequest request) public String cancel(WebRequest request)
{ {
...@@ -249,7 +218,7 @@ public class TransactionImportController extends BaseController ...@@ -249,7 +218,7 @@ public class TransactionImportController extends BaseController
final CsvTransaction csvTransaction = transactionOptional.get(); final CsvTransaction csvTransaction = transactionOptional.get();
request.setAttribute(RequestAttributeNames.CURRENT_CSV_TRANSACTION, csvTransaction, RequestAttributes.SCOPE_SESSION); request.setAttribute(RequestAttributeNames.CURRENT_CSV_TRANSACTION, csvTransaction, RequestAttributes.SCOPE_SESSION);
final Transaction newTransaction = createTransactionFromCsvTransaction(csvTransaction); final Transaction newTransaction = transactionImportService.createTransactionFromCsvTransaction(csvTransaction);
transactionService.prepareModelNewOrEdit(model, false, csvTransaction.getDate(), false, newTransaction, accountService.getAllActivatedAccountsAsc()); transactionService.prepareModelNewOrEdit(model, false, csvTransaction.getDate(), false, newTransaction, accountService.getAllActivatedAccountsAsc());
...@@ -290,31 +259,14 @@ public class TransactionImportController extends BaseController ...@@ -290,31 +259,14 @@ public class TransactionImportController extends BaseController
final CsvTransaction csvTransaction = transactionOptional.get(); final CsvTransaction csvTransaction = transactionOptional.get();
csvTransaction.setStatus(CsvTransactionStatus.IMPORTED); csvTransaction.setStatus(CsvTransactionStatus.IMPORTED);
// update original CsvTransaction attributes with values from user (from newCsvTransaction) transactionImportService.updateCsvTransaction(csvTransaction, newCsvTransaction);
csvTransaction.setName(newCsvTransaction.getName());
csvTransaction.setDescription(newCsvTransaction.getDescription());
csvTransaction.setCategory(newCsvTransaction.getCategory());
final Transaction newTransaction = createTransactionFromCsvTransaction(csvTransaction); final Transaction newTransaction = transactionImportService.createTransactionFromCsvTransaction(csvTransaction);
transactionService.getRepository().save(newTransaction); transactionService.getRepository().save(newTransaction);
return ReturnValues.REDIRECT_IMPORT; return ReturnValues.REDIRECT_IMPORT;
} }
private Transaction createTransactionFromCsvTransaction(CsvTransaction csvTransaction)
{
final Transaction newTransaction = new Transaction();
newTransaction.setDate(csvTransaction.getDate());
newTransaction.setName(csvTransaction.getName());
newTransaction.setDescription(csvTransaction.getDescription());
newTransaction.setAmount(csvTransaction.getAmount());
newTransaction.setIsExpenditure(csvTransaction.getAmount() <= 0);
newTransaction.setAccount(helpers.getCurrentAccountOrDefault());
newTransaction.setCategory(csvTransaction.getCategory());
return newTransaction;
}
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);
......
package de.deadlocker8.budgetmaster.transactions;
import de.deadlocker8.budgetmaster.categories.Category;
import de.deadlocker8.budgetmaster.categories.CategoryService;
import de.deadlocker8.budgetmaster.categories.CategoryType;
import de.deadlocker8.budgetmaster.services.HelpersService;
import de.deadlocker8.budgetmaster.settings.SettingsService;
import de.deadlocker8.budgetmaster.transactions.csvimport.*;
import de.thecodelabs.utils.util.Localization;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.time.LocalDate;
import java.util.Optional;
@Service
public class TransactionImportService
{
private static final Logger LOGGER = LoggerFactory.getLogger(TransactionImportService.class);
private final HelpersService helpersService;
private final SettingsService settingsService;
private final CategoryService categoryService;
@Autowired
public TransactionImportService(HelpersService helpersService, SettingsService settingsService, CategoryService categoryService)
{
this.helpersService = helpersService;
this.settingsService = settingsService;
this.categoryService = categoryService;
}
public CsvTransaction createCsvTransactionFromCsvRow(CsvRow csvRow, CsvColumnSettings csvColumnSettings, Integer index) throws CsvTransactionParseException
{
final String date = csvRow.getColumns().get(csvColumnSettings.columnDate() - 1);
final Optional<LocalDate> parsedDateOptional = DateParser.parse(date, csvColumnSettings.getDatePattern(), settingsService.getSettings().getLanguage().getLocale());
if(parsedDateOptional.isEmpty())
{
throw new CsvTransactionParseException(Localization.getString("transactions.import.error.parse.date", index + 1, date, csvColumnSettings.getDatePattern()));
}
final String name = csvRow.getColumns().get(csvColumnSettings.columnName() - 1);
final String description = csvRow.getColumns().get(csvColumnSettings.columnDescription() - 1);
final String amount = csvRow.getColumns().get(csvColumnSettings.columnAmount() - 1);
final Optional<Integer> parsedAmountOptional = AmountParser.parse(amount);
if(parsedAmountOptional.isEmpty())
{
throw new CsvTransactionParseException(Localization.getString("transactions.import.error.parse.amount", index + 1));
}
final Category categoryNone = categoryService.findByType(CategoryType.NONE);
return new CsvTransaction(parsedDateOptional.get(), name, parsedAmountOptional.get(), description, CsvTransactionStatus.PENDING, categoryNone);
}
public Transaction createTransactionFromCsvTransaction(CsvTransaction csvTransaction)
{
final Transaction newTransaction = new Transaction();
newTransaction.setDate(csvTransaction.getDate());
newTransaction.setName(csvTransaction.getName());
newTransaction.setDescription(csvTransaction.getDescription());
newTransaction.setAmount(csvTransaction.getAmount());
newTransaction.setIsExpenditure(csvTransaction.getAmount() <= 0);
newTransaction.setAccount(helpersService.getCurrentAccountOrDefault());
newTransaction.setCategory(csvTransaction.getCategory());
return newTransaction;
}
public void updateCsvTransaction(CsvTransaction existingCsvTransaction, CsvTransaction csvTransactionWithNewAttributes)
{
existingCsvTransaction.setName(csvTransactionWithNewAttributes.getName());
existingCsvTransaction.setDescription(csvTransactionWithNewAttributes.getDescription());
existingCsvTransaction.setCategory(csvTransactionWithNewAttributes.getCategory());
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment