61 lines
1.7 KiB
PHP
61 lines
1.7 KiB
PHP
<?php
|
|
require_once __DIR__ . '/../src/config.php';
|
|
require_once __DIR__ . '/../src/auth.php';
|
|
require_once __DIR__ . '/../src/db.php';
|
|
require_login();
|
|
|
|
$pdo = get_db();
|
|
|
|
$filter_number = trim($_GET['number'] ?? '');
|
|
$filter_customer = trim($_GET['customer'] ?? '');
|
|
$filter_from = trim($_GET['from'] ?? '');
|
|
$filter_to = trim($_GET['to'] ?? '');
|
|
|
|
$sql = "SELECT i.*, c.name AS customer_name
|
|
FROM invoices i
|
|
JOIN customers c ON c.id = i.customer_id
|
|
WHERE 1=1";
|
|
$params = [];
|
|
|
|
if ($filter_number !== '') {
|
|
$sql .= " AND i.invoice_number ILIKE :num";
|
|
$params[':num'] = '%' . $filter_number . '%';
|
|
}
|
|
if ($filter_customer !== '') {
|
|
$sql .= " AND c.name ILIKE :cust";
|
|
$params[':cust'] = '%' . $filter_customer . '%';
|
|
}
|
|
if ($filter_from !== '') {
|
|
$sql .= " AND i.invoice_date >= :from";
|
|
$params[':from'] = $filter_from;
|
|
}
|
|
if ($filter_to !== '') {
|
|
$sql .= " AND i.invoice_date <= :to";
|
|
$params[':to'] = $filter_to;
|
|
}
|
|
|
|
$sql .= " ORDER BY i.invoice_date ASC, i.id ASC";
|
|
$stmt = $pdo->prepare($sql);
|
|
$stmt->execute($params);
|
|
$rows = $stmt->fetchAll(PDO::FETCH_ASSOC);
|
|
|
|
header('Content-Type: text/csv; charset=utf-8');
|
|
header('Content-Disposition: attachment; filename="invoices_export_' . date('Y-m-d') . '.csv"');
|
|
|
|
$out = fopen('php://output', 'w');
|
|
fputcsv($out, ['Datum', 'Rechnungsnummer', 'Kunde', 'Netto', 'USt', 'Brutto', 'Status'], ';');
|
|
|
|
foreach ($rows as $r) {
|
|
fputcsv($out, [
|
|
date('d.m.Y', strtotime($r['invoice_date'])),
|
|
$r['invoice_number'],
|
|
$r['customer_name'],
|
|
number_format($r['total_net'], 2, ',', ''),
|
|
number_format($r['total_vat'], 2, ',', ''),
|
|
number_format($r['total_gross'], 2, ',', ''),
|
|
$r['paid'] ? 'bezahlt' : 'offen',
|
|
], ';');
|
|
}
|
|
fclose($out);
|
|
exit;
|