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

#724 - added input to enter custom date parse pattern

parent 9fc90b81
Branches
Tags
No related merge requests found
...@@ -185,10 +185,10 @@ public class TransactionImportController extends BaseController ...@@ -185,10 +185,10 @@ public class TransactionImportController extends BaseController
private CsvTransaction createCsvTransactionFromCsvRow(CsvRow csvRow, CsvColumnSettings csvColumnSettings, Integer index) throws CsvTransactionParseException private CsvTransaction createCsvTransactionFromCsvRow(CsvRow csvRow, CsvColumnSettings csvColumnSettings, Integer index) throws CsvTransactionParseException
{ {
final String date = csvRow.getColumns().get(csvColumnSettings.columnDate() - 1); final String date = csvRow.getColumns().get(csvColumnSettings.columnDate() - 1);
final Optional<LocalDate> parsedDateOptional = DateParser.parse(date, DateFormatStyle.LONG.getKey(), settingsService.getSettings().getLanguage().getLocale()); final Optional<LocalDate> parsedDateOptional = DateParser.parse(date, csvColumnSettings.getDatePattern(), settingsService.getSettings().getLanguage().getLocale());
if(parsedDateOptional.isEmpty()) if(parsedDateOptional.isEmpty())
{ {
throw new CsvTransactionParseException(Localization.getString("transactions.import.error.parse.date", index, csvRow)); 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 name = csvRow.getColumns().get(csvColumnSettings.columnName() - 1);
...@@ -198,7 +198,7 @@ public class TransactionImportController extends BaseController ...@@ -198,7 +198,7 @@ public class TransactionImportController extends BaseController
final Optional<Integer> parsedAmountOptional = AmountParser.parse(amount); final Optional<Integer> parsedAmountOptional = AmountParser.parse(amount);
if(parsedAmountOptional.isEmpty()) if(parsedAmountOptional.isEmpty())
{ {
throw new CsvTransactionParseException(Localization.getString("transactions.import.error.parse.amount", index, csvRow)); throw new CsvTransactionParseException(Localization.getString("transactions.import.error.parse.amount", index + 1));
} }
return new CsvTransaction(parsedDateOptional.get(), name, parsedAmountOptional.get(), description, CsvTransactionStatus.PENDING); return new CsvTransaction(parsedDateOptional.get(), name, parsedAmountOptional.get(), description, CsvTransactionStatus.PENDING);
......
package de.deadlocker8.budgetmaster.transactions.csvimport; package de.deadlocker8.budgetmaster.transactions.csvimport;
public record CsvColumnSettings(int columnDate, int columnName, int columnAmount, int columnDescription) import java.util.Objects;
public final class CsvColumnSettings
{
private final int columnDate;
private String datePattern;
private final int columnName;
private final int columnAmount;
private final int columnDescription;
public CsvColumnSettings(int columnDate, String datePattern, int columnName, int columnAmount, int columnDescription)
{
this.columnDate = columnDate;
this.datePattern = datePattern;
this.columnName = columnName;
this.columnAmount = columnAmount;
this.columnDescription = columnDescription;
}
public int columnDate()
{
return columnDate;
}
public String getDatePattern()
{
return datePattern;
}
public void setDatePattern(String datePattern)
{ {
this.datePattern = datePattern;
}
public int columnName()
{
return columnName;
}
public int columnAmount()
{
return columnAmount;
}
public int columnDescription()
{
return columnDescription;
}
@Override
public boolean equals(Object o)
{
if(this == o) return true;
if(o == null || getClass() != o.getClass()) return false;
CsvColumnSettings that = (CsvColumnSettings) o;
return columnDate == that.columnDate && columnName == that.columnName && columnAmount == that.columnAmount && columnDescription == that.columnDescription && Objects.equals(datePattern, that.datePattern);
}
@Override
public int hashCode()
{
return Objects.hash(columnDate, datePattern, columnName, columnAmount, columnDescription);
}
@Override
public String toString()
{
return "CsvColumnSettings{" +
"columnDate=" + columnDate +
", datePattern='" + datePattern + '\'' +
", columnName=" + columnName +
", columnAmount=" + columnAmount +
", columnDescription=" + columnDescription +
'}';
}
} }
...@@ -375,6 +375,7 @@ transactions.import.column=Spalte ...@@ -375,6 +375,7 @@ transactions.import.column=Spalte
transactions.import.separator=Trennzeichen transactions.import.separator=Trennzeichen
transactions.import.encoding=Kodierung transactions.import.encoding=Kodierung
transactions.import.numberOfLinesToSkip=Zeilen überspringen transactions.import.numberOfLinesToSkip=Zeilen überspringen
transactions.import.datePattern=Datumsformat
transactions.import.status=Status transactions.import.status=Status
transactions.import.status.pending=ausstehend transactions.import.status.pending=ausstehend
transactions.import.status.imported=importiert transactions.import.status.imported=importiert
...@@ -382,7 +383,7 @@ transactions.import.status.skipped=übersprungen ...@@ -382,7 +383,7 @@ transactions.import.status.skipped=übersprungen
transactions.import.actions=Aktionen transactions.import.actions=Aktionen
transactions.import.error.column=Zugeordnete Spalten in Zeile {0} (Zählung beginnt relativ zu Anzahl übersprungener Zeilen) nicht gefunden: {1} transactions.import.error.column=Zugeordnete Spalten in Zeile {0} (Zählung beginnt relativ zu Anzahl übersprungener Zeilen) nicht gefunden: {1}
transactions.import.error.parse.amount=Fehler beim Parsen des Betrags in Zeile {0} (Zählung beginnt relativ zu Anzahl übersprungener Zeilen) transactions.import.error.parse.amount=Fehler beim Parsen des Betrags in Zeile {0} (Zählung beginnt relativ zu Anzahl übersprungener Zeilen)
transactions.import.error.parse.date=Fehler beim Parsen des Datums in Zeile {0} (Zählung beginnt relativ zu Anzahl übersprungener Zeilen) transactions.import.error.parse.date=Fehler beim Parsen des Datums in Zeile {0} (Zählung beginnt relativ zu Anzahl übersprungener Zeilen)<br>Wert "{1}" kann nicht mit Pattern "{2}" geparst werden.
repeating.button.add=Wiederholung hinzufügen repeating.button.add=Wiederholung hinzufügen
repeating.button.remove=Wiederholung entfernen repeating.button.remove=Wiederholung entfernen
......
...@@ -374,6 +374,7 @@ transactions.import.column=Column ...@@ -374,6 +374,7 @@ transactions.import.column=Column
transactions.import.separator=Separator transactions.import.separator=Separator
transactions.import.encoding=Encoding transactions.import.encoding=Encoding
transactions.import.numberOfLinesToSkip=Skip lines transactions.import.numberOfLinesToSkip=Skip lines
transactions.import.datePattern=Date pattern
transactions.import.status=Status transactions.import.status=Status
transactions.import.status.pending=pending transactions.import.status.pending=pending
transactions.import.status.imported=imported transactions.import.status.imported=imported
...@@ -381,7 +382,7 @@ transactions.import.status.skipped=skipped ...@@ -381,7 +382,7 @@ transactions.import.status.skipped=skipped
transactions.import.actions=Actions transactions.import.actions=Actions
transactions.import.error.column=Associated columns not found in row {0} (counting starts relative to the number of skipped rows): {1} transactions.import.error.column=Associated columns not found in row {0} (counting starts relative to the number of skipped rows): {1}
transactions.import.error.parse.amount=Error parsing the amount in line {0} (counting starts relative to number of skipped lines) transactions.import.error.parse.amount=Error parsing the amount in line {0} (counting starts relative to number of skipped lines)
transactions.import.error.parse.date=Error parsing the date in line {0} (counting starts relative to number of skipped lines) transactions.import.error.parse.date=Error parsing the date in line {0} (counting starts relative to number of skipped lines)<br>Value "{1}" could not be parsed with pattern "{2}".
repeating.button.add=Add repetition repeating.button.add=Add repetition
repeating.button.remove=Remove repetition repeating.button.remove=Remove repetition
......
...@@ -129,6 +129,16 @@ ...@@ -129,6 +129,16 @@
<label class="input-label" for="columnDate">${locale.getString("transactions.import.column")}</label> <label class="input-label" for="columnDate">${locale.getString("transactions.import.column")}</label>
</div> </div>
</div> </div>
<div class="row">
<div class="input-field col s5 offset-s6 m3 offset-m6 l3 offset-l6 no-margin-top no-margin-bottom">
<input id="datePattern" type="text" required name="datePattern" <@validation.validation "datePattern"/> value="<#if csvColumnSettings??>${csvColumnSettings.datePattern()}<#else>dd.MM.yyyy</#if>">
<label class="input-label" for="datePattern">${locale.getString("transactions.import.datePattern")}</label>
</div>
<div class="col s1 m1 l1">
<@header.buttonFlat url='https://docs.oracle.com/javase/8/docs/api/java/time/format/DateTimeFormatter.html' icon='help_outline' localizationKey='' target='_blank' classes='text-default'/>
</div>
</div>
<div class="row"> <div class="row">
<div class="col s6 m4 offset-m2 l3 offset-l3"> <div class="col s6 m4 offset-m2 l3 offset-l3">
<div class="transaction-import-text-with-icon"> <div class="transaction-import-text-with-icon">
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment