Skip to content

Commit

Permalink
#724 - added input to enter custom date parse pattern
Browse files Browse the repository at this point in the history
  • Loading branch information
deadlocker8 committed Jan 14, 2023
1 parent 9fc90b8 commit 1aecff3
Show file tree
Hide file tree
Showing 5 changed files with 91 additions and 6 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -185,10 +185,10 @@ public String columnSettings(WebRequest request,
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, DateFormatStyle.LONG.getKey(), settingsService.getSettings().getLanguage().getLocale());
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, 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);
Expand All @@ -198,7 +198,7 @@ private CsvTransaction createCsvTransactionFromCsvRow(CsvRow csvRow, CsvColumnSe
final Optional<Integer> parsedAmountOptional = AmountParser.parse(amount);
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);
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,78 @@
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 +
'}';
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -375,14 +375,15 @@ transactions.import.column=Spalte
transactions.import.separator=Trennzeichen
transactions.import.encoding=Kodierung
transactions.import.numberOfLinesToSkip=Zeilen überspringen
transactions.import.datePattern=Datumsformat
transactions.import.status=Status
transactions.import.status.pending=ausstehend
transactions.import.status.imported=importiert
transactions.import.status.skipped=übersprungen
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.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.remove=Wiederholung entfernen
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -374,14 +374,15 @@ transactions.import.column=Column
transactions.import.separator=Separator
transactions.import.encoding=Encoding
transactions.import.numberOfLinesToSkip=Skip lines
transactions.import.datePattern=Date pattern
transactions.import.status=Status
transactions.import.status.pending=pending
transactions.import.status.imported=imported
transactions.import.status.skipped=skipped
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.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.remove=Remove repetition
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -129,6 +129,16 @@
<label class="input-label" for="columnDate">${locale.getString("transactions.import.column")}</label>
</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="col s6 m4 offset-m2 l3 offset-l3">
<div class="transaction-import-text-with-icon">
Expand Down

0 comments on commit 1aecff3

Please sign in to comment.