= :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

PIRP

Zurücksetzen

Belegarchiv Dokument(e)

Keine Belege gefunden.

Datum Typ Referenz / Beschreibung Kunde Betrag PDF
· STORNO PDF PDF PDF