Beispiel-Reports

Jede Funktion des Pakets landet in einem laufenden Beispiel. Vorschau öffnen, Code lesen, übernehmen.

Preisliste · Gruppierte Liste mit Zwischensummen

Gruppen Aggregate Filter Flow /reports/price_list/run

Ein Report-Start-Band mit dem Titel, ein Tabellenkopf, ein Detailband, eine Gruppe pro Kategorie mit eigenem Kopf und Fuss, eine summierte Zwischensumme, ein Report-Ende-Band und ein Filterformular.

  • Ein reportStart()-Band für den Titel und ein reportEnd()-Band für die Zusammenfassung — einmal pro Report
  • Ein Tabellenkopf, danach ein Detailband, das pro Datensatz einmal gerendert wird
  • Eine Gruppe pro Kategorie mit eigenen Kopf- und Fuss-Bändern
  • Eine Zwischensumme pro Gruppe via aggSum()
  • Ein Filterformular mit typisierten Controls (Text, Enum, Number, Relation)

Lieferschein · Strict-Platzierung

Strict Paginierung /reports/packing_list/run

Bänder mit fixer Höhe, arithmetisch über die Seiten verteilt, mit wiederholtem Tabellenkopf und Seitenzahlen.

  • Strict-Modus: fixe Bandhöhen und arithmetische Paginierung
  • Ein Tabellenkopf, der auf jeder Seite wiederholt wird
  • Seitenzahlen im Seitenfuss
  • 60 Demo-Positionen, damit der Report mehrere Seiten füllt

Etikettenbogen · N-up Detailband

Strict N-up /reports/label_sheet/run

Ein Detailband über die volle Breite, in vier Zellen pro Zeile aufgeteilt: 30 Etiketten über zwei Seiten, mit der Zeile als Paginationseinheit.

  • Ein Detailband, vier Zellen pro Zeile via columns(4, gap: 3, rowGap: 2)
  • gap verteilt die Zellen horizontal, rowGap die Zeilen vertikal
  • Detail::height ist die Höhe der Zeile, nicht eines einzelnen Etiketts
  • Die Engine fasst jede Zeile in ein eigenes Grid — nie ein Grid über mehrere Seiten
  • Die letzte Zeile wird mit leeren Zellen aufgefüllt, damit die Spalten bündig bleiben
  • Strict-Modus: 7 Zeilen × 4 Etiketten = 28 Etiketten pro Seite, mit Seitenzahlen im Fuss

Rechnung · Free-form-Formular mit Einzahlungsschein

Strict Free-form Paginierung /reports/invoice_example/run

Eine vollständige Rechnung pro Datensatz, aufgebaut aus Page-Blocks mit deklarierten Höhen. Der Swiss-QR-Einzahlungsschein bleibt auf Seite 1, wenn er Platz hat, und rutscht auf Seite 2, wenn die Rechnungspositionen den Platz brauchen.

  • freeform() rendert ein vollständiges Formular pro Detail-Datensatz
  • Jeder Abschnitt ist ein <x-reports::page-block> mit deklarierter Höhe
  • Der Einzahlungsschein ist mit anchor="bottom" verankert: 105 mm ab Papierunterkante, als Layer über dem Footer
  • pageNumbering(perForm) startet den Seitenzähler für jede Rechnung neu
  • Der Seitenkopf mit Rechnungsnummer und Kunde wird auf Seite 1 ausgeblendet
  • Ein Block, der höher als der Seiteninhalt ist, wirft eine BandOverflowException

Autokaufvertrag · Free-form-Flow mit Allgemeinen Bedingungen

Flow Free-form /reports/contract_example/run

Ein Autokaufvertrag im Flow-Modus. Der Browser paginiert den Fliesstext; ein CSS-Seitenumbruch startet die Allgemeinen Bedingungen auf Seite 2.

  • freeform() im Flow-Modus: keine festen Page-Blocks, nur Blade-Markup
  • Die Allgemeinen Bedingungen starten via break-before: page auf Seite 2
  • Lange Klauseln fliessen natürlich über Seitengrenzen
  • break-inside: avoid hält einzelne Klauseln zusammen
  • pdfFooter() ergänzt einen PDF-Footer mit pageNumber/totalPages
  • Derselbe Vertrag lässt sich als HTML-Vorschau und PDF ausgeben

Datenquellen · SQLite-basierte Source-Adapter

Flow Filter Aggregate /reports/database_sources/run

Ein Report, fünf Source-Adapter: QuerySource, EloquentSource, RawSqlSource, CollectionSource und ArraySource lesen dieselbe SQLite-Tabelle. Der Adapter lässt sich im Filterformular wählen.

  • Eine echte SQLite-Tabelle mit Demo-Aufträgen, per Migration angelegt
  • QuerySource und EloquentSource pushen Filter und Sortierung nach SQL
  • RawSqlSource, CollectionSource und ArraySource filtern und sortieren in-memory
  • Die Quellen-Auswahl ist ein normaler typisierter Filter-Control
  • Report-Start/End zeigen den aktiven Adapter und die aggregierten Summen

Mehrsprachige Preisliste · Sprache und Format im Frame-Header wählen

Flow Sprache Aggregate /reports/multilanguage/run

Die Sprache lässt sich direkt im Header der Vorschau umschalten. Report-Texte kommen aus dem Modul-lang-Verzeichnis, Datum und Zahlen folgen der Format-Locale; die Währung bleibt CHF.

  • Sprachwahl im Header des Report-Frames
  • Modul-eigene Übersetzungen unter app/Reports/Multilanguage/lang
  • Produkt-, Kategorie- und Status-Texte kommen als Sprach-Arrays aus der Source (wie Spatie Translatable)
  • Datum und Zahlen folgen der Format-Locale (de_CH vs. en_US)
  • Die Währung bleibt unabhängig von der Sprache CHF
  • Der Wechsel wirkt auf HTML-Vorschau und PDF

Gruppierter Umsatz mit Enrichment · Gruppendaten aus einem Eloquent-Model

Flow Gruppen Sprache Aggregate Enrichment /reports/group_enrichment/run

Die Detailzeilen kommen aus demo_orders. Jeder Gruppenkopf lädt Kategoriename und Ziel über enrichWith() aus dem Eloquent-Model demo_categories; der Name wird pro Sprache über einen Accessor aufgelöst.

  • enrichWith() läuft genau einmal pro Gruppe, nicht pro Detailzeile
  • Die Gruppenschlüssel werden als Filter an die Enrichment-Source übergeben
  • Eloquent liefert das übersetzte Attribut, weil die Engine app()->getLocale() gesetzt hat
  • Die Gruppendaten stehen als $ctx->groupData() im Kopf- und Fuss-Band bereit
  • Gruppen-Aggregat über $r->aggregate(..., scope: "group:1")
  • Sprachwechsel im Frame-Header wirkt auf Kategorienamen und Zahlenformat