= :from"; $params[':from'] = $filter_from; }
if ($filter_to) { $base .= " AND i.invoice_date <= :to"; $params[':to'] = $filter_to; }
if ($filter_q) { $base .= " AND (i.invoice_number ILIKE :q OR c.name ILIKE :q2)";
$params[':q'] = '%' . $filter_q . '%'; $params[':q2'] = '%' . $filter_q . '%'; }
try {
$sql = "SELECT i.id, i.invoice_date AS beleg_date, i.invoice_number AS beleg_ref,
c.name AS kunde, i.total_gross AS betrag, i.pdf_path,
'rechnung' AS beleg_type, COALESCE(i.is_storno, FALSE) AS is_storno $base";
$stmt = $pdo->prepare($sql);
$stmt->execute($params);
} catch (\PDOException $e) {
// is_storno Spalte noch nicht migriert — Fallback ohne die Spalte
$sql = "SELECT i.id, i.invoice_date AS beleg_date, i.invoice_number AS beleg_ref,
c.name AS kunde, i.total_gross AS betrag, i.pdf_path,
'rechnung' AS beleg_type, FALSE AS is_storno $base";
$stmt = $pdo->prepare($sql);
$stmt->execute($params);
}
$belege = array_merge($belege, $stmt->fetchAll(PDO::FETCH_ASSOC));
}
// ---- Ausgaben-Belege ----
if ($filter_type === 'all' || $filter_type === 'ausgabe') {
$sql = "SELECT e.id, e.expense_date AS beleg_date, e.description AS beleg_ref,
'' AS kunde, e.amount AS betrag, e.attachment_path AS pdf_path,
'ausgabe' AS beleg_type, FALSE AS is_storno
FROM expenses e
WHERE e.attachment_path IS NOT NULL";
$params = [];
if ($filter_from) { $sql .= " AND e.expense_date >= :from"; $params[':from'] = $filter_from; }
if ($filter_to) { $sql .= " AND e.expense_date <= :to"; $params[':to'] = $filter_to; }
if ($filter_q) { $sql .= " AND e.description ILIKE :q"; $params[':q'] = '%' . $filter_q . '%'; }
$stmt = $pdo->prepare($sql);
$stmt->execute($params);
$belege = array_merge($belege, $stmt->fetchAll(PDO::FETCH_ASSOC));
}
// ---- Mahnungen ----
$show_mahnungen = ($filter_type === 'all' || $filter_type === 'mahnung');
if ($show_mahnungen) {
$sql = "SELECT m.id, m.mahnung_date AS beleg_date,
'MAHNUNG L' || m.level || ' – ' || i.invoice_number AS beleg_ref,
c.name AS kunde, i.total_gross + m.fee_amount AS betrag,
m.pdf_path, 'mahnung' AS beleg_type, FALSE AS is_storno,
m.invoice_id
FROM mahnungen m
JOIN invoices i ON i.id = m.invoice_id
JOIN customers c ON c.id = i.customer_id
WHERE m.pdf_path IS NOT NULL";
$params = [];
if ($invoice_id) { $sql .= " AND m.invoice_id = :iid"; $params[':iid'] = $invoice_id; }
if ($filter_from) { $sql .= " AND m.mahnung_date >= :from"; $params[':from'] = $filter_from; }
if ($filter_to) { $sql .= " AND m.mahnung_date <= :to"; $params[':to'] = $filter_to; }
if ($filter_q) { $sql .= " AND (i.invoice_number ILIKE :q OR c.name ILIKE :q2)";
$params[':q'] = '%' . $filter_q . '%'; $params[':q2'] = '%' . $filter_q . '%'; }
try {
$stmt = $pdo->prepare($sql);
$stmt->execute($params);
$belege = array_merge($belege, $stmt->fetchAll(PDO::FETCH_ASSOC));
} catch (\PDOException $e) {
// Tabelle noch nicht migriert
}
}
// Sortieren: neueste zuerst
usort($belege, fn($a, $b) => strcmp($b['beleg_date'], $a['beleg_date']));
$type_labels = ['rechnung' => 'Rechnung', 'ausgabe' => 'Ausgabe', 'mahnung' => 'Mahnung'];
$type_colors = ['rechnung' => 'var(--accent)', 'ausgabe' => 'var(--info)', 'mahnung' => 'var(--warning)'];
?>
Belegarchiv
Belegarchiv
= count($belege) ?> Dokument(e)
Keine Belege gefunden.
| Datum |
Typ |
Referenz / Beschreibung |
Kunde |
Betrag |
PDF |
| = date('d.m.Y', strtotime($b['beleg_date'])) ?> |
= $type_labels[$b['beleg_type']] ?? $b['beleg_type'] ?>
· STORNO
|
= htmlspecialchars($b['beleg_ref']) ?> |
= htmlspecialchars($b['kunde']) ?> |
= number_format((float)$b['betrag'], 2, ',', '.') ?> €
|
PDF
PDF
PDF
|