59 lines
3.5 KiB
Plaintext
59 lines
3.5 KiB
Plaintext
@inject IEntryService EntryService
|
|
@inject IAccountService AccountService
|
|
|
|
<div class="dialog-backdrop">
|
|
<div class="dialog-content booking-dialog" @onclick:stopPropagation="true">
|
|
<h5 class="mb-3">@(EditEntry != null ? "Umbuchung bearbeiten" : "Neue Umbuchung")</h5>
|
|
|
|
<p class="text-muted">Erfasst nur die Buchung. Führt keine Banküberweisung aus.</p>
|
|
|
|
<form @onsubmit="Save" @onsubmit:preventDefault="true" aria-busy="@(isSaving ? "true" : "false")">
|
|
<fieldset disabled="@(isSaving || committedResult != null || completed)">
|
|
<div class="form-container">
|
|
<label class="form-label">Zielkonto</label>
|
|
<select id="transfer-account" class="form-select" @bind="targetAccountId">
|
|
<option value="0">— Auswählen —</option>
|
|
@foreach (var acc in accounts.Where(a => a.Id != SourceAccountId))
|
|
{
|
|
<option value="@acc.Id">@acc.Name</option>
|
|
}
|
|
</select>
|
|
|
|
<label class="form-label">Datum</label>
|
|
<input id="transfer-date" type="date" class="form-control" value="@dateText" @oninput="e => dateText = e.Value?.ToString() ?? string.Empty" />
|
|
|
|
<label class="form-label">Bezeichnung</label>
|
|
<input id="transfer-title" type="text" class="form-control" @bind="title" @bind:event="oninput" placeholder="Beschreibung der Umbuchung" />
|
|
|
|
<label class="form-label">Betrag (€)</label>
|
|
<div><input id="transfer-amount" type="text" inputmode="decimal" class="form-control" @bind="amountText" @bind:event="oninput" aria-describedby="transfer-amount-help" />
|
|
<p id="transfer-amount-help" class="@(!ValidAmount ? "text-danger" : "text-muted")">Betrag ohne Minuszeichen, größer als 0; Komma oder Punkt, höchstens zwei Nachkommastellen. Keine Tausendertrenner oder Währungszeichen; keine Rundung.</p></div>
|
|
</div>
|
|
|
|
@if (OutsideYear)
|
|
{
|
|
<div class="alert alert-warning" role="status">
|
|
Datum @date.ToString("dd.MM.yyyy"): Diese Buchung liegt außerhalb von Jahr @ContextYear und wird dort nicht angezeigt.
|
|
<label><input type="checkbox" checked="@(confirmDifferentYear && confirmedYear == date.Year)" @onchange="e => { confirmDifferentYear = e.Value is true; confirmedYear = date.Year; }" /> Ich möchte die Buchung im Jahr @date.Year speichern.</label>
|
|
</div>
|
|
}
|
|
|
|
</fieldset>
|
|
@if (isSaving) { <p role="status" aria-live="polite">Wird gespeichert …</p> }
|
|
@if (saveError != null)
|
|
{
|
|
<div class="alert alert-danger" role="alert">@saveError
|
|
<details><summary>Technische Details</summary>@saveDetails</details>
|
|
</div>
|
|
}
|
|
<div class="d-flex justify-content-end gap-2">
|
|
<button type="submit" class="btn btn-success" disabled="@(isSaving || completed || (committedResult == null && !CanSave))">
|
|
@(isSaving ? "Wird gespeichert …" : committedResult != null ? "Ansicht aktualisieren" : "Speichern")
|
|
</button>
|
|
<button type="button" class="btn btn-outline-secondary" disabled="@isSaving" @onclick="Cancel"><i class="bi bi-x-lg"></i> Abbrechen</button>
|
|
</div>
|
|
</form>
|
|
</div>
|
|
</div>
|
|
|