65 lines
4.2 KiB
Plaintext
65 lines
4.2 KiB
Plaintext
@inject ToastService Toasts
|
||
@inject IEntryService EntryService
|
||
@inject IAccountService AccountService
|
||
|
||
<ModalDialog @ref="modal" Title="Geld zwischen Konten verschieben" OnCancel="OnCancel" Busy="isSaving" Dirty="@(committedResult == null && (IsDirty || pendingDateChanges))">
|
||
<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>
|
||
<p id="transfer-direction"><strong>Von: @FromName → Nach: @ToName</strong></p>
|
||
<p>@CurrentAccountName bleibt fest. @(IsIncoming ? "Das abgebende Konto ist änderbar." : "Das empfangende Konto ist änderbar.")</p>
|
||
@if (accounts.Count < 2)
|
||
{
|
||
<p role="status">Für eine Umbuchung brauchst du ein zweites Konto. Lege es in der Kontenübersicht an.</p>
|
||
}
|
||
@if (ValidAmount && targetAccountId > 0)
|
||
{
|
||
<p role="status">@FromName −@Money(amount), @ToName +@Money(amount); Gesamtsumme unverändert.</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" for="transfer-account">@(IsIncoming ? "Von Konto (änderbar)" : "Nach Konto (änderbar)")</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" for="transfer-date">Datum</label>
|
||
<BookingDateInput @ref="bookingDate" Id="transfer-date" class="form-control" @bind-Value="dateText" PendingChangesChanged="pending => pendingDateChanges = pending" />
|
||
|
||
<label class="form-label" for="transfer-title">Bezeichnung</label>
|
||
<input id="transfer-title" type="text" class="form-control" @bind="title" @bind:event="oninput" placeholder="Beschreibung der Umbuchung" />
|
||
|
||
<label class="form-label" for="transfer-amount">Betrag (€)</label>
|
||
<div><AmountInput Id="transfer-amount" @bind-Value="amountText" />
|
||
<p class="text-muted">Betrag ohne Minuszeichen.</p></div>
|
||
</div>
|
||
|
||
@if (OutsideYear && date != default)
|
||
{
|
||
<div class="alert alert-warning booking-year-warning" role="status">
|
||
<i class="bi bi-exclamation-triangle-fill" aria-hidden="true"></i>
|
||
<div><strong>Das Buchungsdatum liegt in einem anderen Jahr.</strong>
|
||
<p>Du erfasst die Buchung am @date.ToString("dd.MM.yyyy") und damit außerhalb des angezeigten Jahres @ContextYear. Sie wird im Jahr @date.Year gespeichert und erscheint erst, wenn du dieses Jahr oder „Alle Buchungen“ auswählst.</p>
|
||
<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>
|
||
</div>
|
||
}
|
||
|
||
</fieldset>
|
||
<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>
|
||
</ModalDialog>
|
||
|
||
@code { private ModalDialog? modal; private BookingDateInput? bookingDate; private bool pendingDateChanges; }
|