Belegnr.
@@ -25,8 +26,23 @@ $suppliers = $suppliers ?? [];
= $h($beleg['belegtyp']) ?>
- Lieferant
- = $beleg['supplier_name'] ? $h($beleg['supplier_name']) : '–' ?>
+ Lieferant= (!$beleg['locked'] && $beleg['supplier_name']) ? ' ✎' : '' ?>
+
+
+ = $h($beleg['supplier_name']) ?>
+
+
+
+
+ = $beleg['supplier_name'] ? $h($beleg['supplier_name']) : '–' ?>
+
Belegdatum= !$beleg['locked'] ? ' ✎' : '' ?>
@@ -263,9 +279,13 @@ $suppliers = $suppliers ?? [];
$beleg['belegtyp'] === 'Ausgangsrechnung' ? 'Einnahme' : 'Ausgabe'
);
- // Konten nach Art gruppieren
+ // Konten nach Art gruppieren (Zahlungskonto nur 1200–1299)
$kontenGruppen = [];
foreach ($accounts as $acc) {
+ if ($acc['kontenart'] === 'Zahlungskonto') {
+ $nr = (int)$acc['kontonummer'];
+ if ($nr < 1200 || $nr > 1299) continue;
+ }
$kontenGruppen[$acc['kontenart']][] = $acc;
}
?>
@@ -416,11 +436,11 @@ $suppliers = $suppliers ?? [];
-
+
+
@@ -475,7 +495,7 @@ function updateEigenanteilState() {
group.style.opacity = aktiv ? '1' : '.35';
group.style.pointerEvents = aktiv ? '' : 'none';
- group.querySelector('label').style.cursor = aktiv ? 'pointer' : 'not-allowed';
+ group.style.cursor = aktiv ? 'pointer' : 'not-allowed';
cb.disabled = !aktiv;
if (!aktiv) cb.checked = false;
}
@@ -486,6 +506,10 @@ document.addEventListener('DOMContentLoaded', function() {
if (checked) filterKategorieKonten(checked.value);
updateSteuerartVisibility();
updateEigenanteilState();
+
+ // Leeres Lieferantenfeld fokussieren wenn kein KI-Block aktiv
+ const sup = document.getElementById('supplier-persistent-input');
+ if (sup && !document.getElementById('ki-badge')) sup.focus();
});
function updateSteuerartVisibility() {
@@ -509,26 +533,70 @@ function updateSteuerartVisibility() {
const _belegId = = (int)$beleg['id'] ?>;
const _kiVorschlag = = json_encode($kiVorschlag ?? null) ?>;
+function _selectById(selectEl, id) {
+ if (!selectEl) return;
+ const str = String(id);
+ for (const opt of selectEl.options) {
+ opt.selected = (opt.value === str);
+ }
+}
+
function _applyKiVorschlag(v) {
const btRadio = document.querySelector('input[name="buchungstyp"][value="' + v.buchungstyp + '"]');
if (btRadio) { btRadio.checked = true; filterKategorieKonten(v.buchungstyp); }
const ustEl = document.getElementById('ust_satz_select');
if (ustEl) { ustEl.value = String(v.ust_satz); updateSteuerartVisibility(); }
- const katEl = document.getElementById('kategorie_konto_id');
- if (katEl) { katEl.value = String(v.kategorie_konto_id); updateEigenanteilState(); }
- const zhlEl = document.getElementById('zahlungskonto_id');
- if (zhlEl) zhlEl.value = String(v.zahlungskonto_id);
+ const katEl2 = document.getElementById('kategorie_konto_id');
+ _selectById(katEl2, v.kategorie_konto_id);
+ if (katEl2) transferKontoNr(katEl2);
+ updateEigenanteilState();
+ const zhlEl2 = document.getElementById('zahlungskonto_id');
+ _selectById(zhlEl2, v.zahlungskonto_id);
+ if (zhlEl2) transferKontoNr(zhlEl2);
const netEl = document.querySelector('input[name="betrag_netto"]');
if (netEl && v.betrag_netto) netEl.value = v.betrag_netto;
const txtEl = document.querySelector('input[name="buchungstext"]');
if (txtEl && v.buchungstext) txtEl.value = v.buchungstext;
+
+ // Lieferant aus KI-Vorschlag übernehmen
+ if (v.supplier_name) {
+ const bar = document.querySelector('[data-beleg-id]');
+ const persistentInput = document.getElementById('supplier-persistent-input');
+ const trigger = document.getElementById('supplier-inline-trigger');
+ if (persistentInput) {
+ persistentInput.value = v.supplier_name;
+ if (bar) bar.dataset.supplierName = v.supplier_name;
+ if (v.supplier_found === false) persistentInput.focus();
+ } else if (trigger) {
+ trigger.dataset.raw = v.supplier_name;
+ if (bar) bar.dataset.supplierName = v.supplier_name;
+ trigger.textContent = v.supplier_name;
+ if (v.supplier_found === false && !trigger.querySelector('input')) {
+ trigger.click();
+ }
+ }
+ }
}
-function _showKiBadgeDone() {
+function _showKiBadgeDone(v) {
+ const katEl = document.getElementById('kategorie_konto_id');
+ const zhlEl = document.getElementById('zahlungskonto_id');
+ const katOpt = katEl ? katEl.querySelector('option[value="' + v.kategorie_konto_id + '"]') : null;
+ const zhlOpt = zhlEl ? zhlEl.querySelector('option[value="' + v.zahlungskonto_id + '"]') : null;
+ const katTxt = katOpt ? katOpt.text : v.kategorie_konto_id;
+ const zhlTxt = zhlOpt ? zhlOpt.text : v.zahlungskonto_id;
+ const supTxt = v.supplier_name
+ ? ' · Lieferant: ' + v.supplier_name + (v.supplier_found === false ? '
(neu – bitte prüfen)' : '')
+ : '';
+ const details =
+ (v.buchungstyp ? v.buchungstyp + ' · ' : '') +
+ 'USt ' + v.ust_satz + ' % · ' +
+ 'Kategorie: ' + katTxt + ' · ' +
+ 'Zahlung: ' + zhlTxt + supTxt;
document.getElementById('ki-badge').innerHTML =
- '
' +
- '
KI-Kontierungsvorschlag – Formular vorausgefüllt. Bitte prüfen und ggf. anpassen.' +
- '
' +
+ '
' +
+ '
KI-Vorschlag: ' + details + '
' +
+ '
' +
'
';
}
@@ -549,7 +617,7 @@ async function _startKiAnalyse() {
try {
const r = await fetch('/belege/' + _belegId + '/vorschlag/generate', {method: 'POST'});
const v = await r.json();
- if (v && v.kategorie_konto_id) { _applyKiVorschlag(v); _showKiBadgeDone(); }
+ if (v && v.kategorie_konto_id) { _applyKiVorschlag(v); _showKiBadgeDone(v); }
else _showKiBadgeError();
} catch (e) {
_showKiBadgeError();
@@ -559,13 +627,13 @@ async function _startKiAnalyse() {
document.addEventListener('DOMContentLoaded', function () {
if (_kiVorschlag && _kiVorschlag.kategorie_konto_id) {
_applyKiVorschlag(_kiVorschlag);
- _showKiBadgeDone();
+ _showKiBadgeDone(_kiVorschlag);
} else {
_showKiBadgeLoading();
fetch('/belege/' + _belegId + '/vorschlag/generate', {method: 'POST'})
.then(r => r.json())
.then(v => {
- if (v && v.kategorie_konto_id) { _applyKiVorschlag(v); _showKiBadgeDone(); }
+ if (v && v.kategorie_konto_id) { _applyKiVorschlag(v); _showKiBadgeDone(v); }
else _showKiBadgeError();
})
.catch(() => _showKiBadgeError());
@@ -573,3 +641,54 @@ document.addEventListener('DOMContentLoaded', function () {
});
+
+
+
+
diff --git a/src/Views/belege/list.php b/src/Views/belege/list.php
index cc1693b..b7e5663 100644
--- a/src/Views/belege/list.php
+++ b/src/Views/belege/list.php
@@ -1,5 +1,94 @@
View::h($v); ?>
+
+
+
+
📎
+
Beleg hierher ziehen oder klicken
+
PDF, PNG, JPEG, TIFF, XML · max. 20 MB
+
+
+
+
+