GetPaid-PDF-Adjustments

Eigenes image²-Erweiterungsplugin für GetPaid. Der historische Pluginname „GetPaid PDF Adjustments“ ist inzwischen etwas irreführend: Neben Anpassungen der Rechnungs-PDFs übernimmt das Plugin inzwischen auch die korrekte Darstellung negativer Rechnungen bzw. Stornorechnungen, die automatische Sicherung neuer Rechnungen als Entwurf und einen eigenen Buchhaltungsexport.

Aktuell dokumentierter Stand: Version 1.8.

Abhängigkeiten

  • WordPress
  • GetPaid / Invoicing
  • GetPaid PDF-Erweiterung für die PDF-Funktionen

Funktionsumfang

  • Anpassung der GetPaid-Rechnungs-PDFs
  • Entfernung des Rechnungsstatus aus dem PDF
  • Anpassung von Schriftgrößen und Seitenrändern
  • Ausblenden der Überschrift über den Rechnungspositionen
  • Ausgabe eines Leistungszeitraums oberhalb der Positionen
  • Korrekte sichtbare Summen bei negativen Positionen bzw. Stornorechnungen
  • Automatische Sicherung neu angelegter Rechnungen als Entwurf
  • Automatischer Wechsel von Entwurf auf „Zahlung ausständig“ beim Senden
  • Eigener CSV-Buchhaltungsexport mit Steueraufschlüsselung

PDF-Anpassungen

Das Plugin ergänzt das von GetPaid verwendete PDF-CSS. Bereits in GetPaid hinterlegte PDF-Einstellungen werden dabei nicht ersetzt. Das zusätzliche CSS wird an das vorhandene pdf_custom_css angehängt.

Dadurch bleiben insbesondere projektspezifische Einstellungen und Farben aus der jeweiligen GetPaid-Konfiguration erhalten. Das Plugin ergänzt lediglich die von image² benötigten Anpassungen.

Aktuell werden unter anderem die globale Schriftgröße, kleinere Meta-Texte, Überschriftengrößen und Seitenränder angepasst. Außerdem wird die Überschrift über den Rechnungspositionen ausgeblendet.

Rechnungsstatus im PDF ausblenden

Der Rechnungsstatus wird aus dem Billing-Bereich des PDFs entfernt. Dafür wird die ursprüngliche GetPaid-Ausgabe abgefangen und die Tabellenzeile mit getpaid-invoice-meta-status vor der Ausgabe entfernt.

Zusätzlich enthält das PDF-CSS eine Regel zum Ausblenden von .getpaid-invoice-meta-status-value.

Leistungszeitraum

Oberhalb der Rechnungspositionen kann ein Leistungszeitraum ausgegeben werden. Das Plugin liest dafür das Post-Meta-Feld time_credit_note der Rechnung aus.

Ist das Feld befüllt, erscheint oberhalb der Positionen:

Leistungszeitraum:
[Inhalt des Feldes]

Ist kein Leistungszeitraum hinterlegt, wird der Block nicht ausgegeben.

Negative Rechnungen und Stornorechnungen

GetPaid akzeptiert negative Positionspreise, kappt Subtotal, Steuer und Gesamtsumme einer solchen Rechnung intern jedoch auf 0,00. Dadurch können negative Positionen zwar angelegt werden, die daraus resultierende negative Rechnungssumme wird von GetPaid selbst aber nicht korrekt dargestellt.

Architekturentscheidung

Die interne Summenlogik von GetPaid ließ sich nicht unkompliziert und updatefreundlich ändern. Ein Eingriff an dieser Stelle hätte deutlich tiefer in GetPaid eingegriffen und normale Rechnungen unnötig beeinflusst.

Deshalb verwendet das Plugin bewusst einen anderen Weg: Die interne GetPaid-Summenlogik bleibt unangetastet. Sobald eine Rechnung tatsächlich mindestens eine negative Position enthält, berechnet das Plugin die sichtbaren Werte für Zwischensumme, Steuer und Gesamtsumme selbst anhand der echten Rechnungspositionen.

Normale Rechnungen werden ausdrücklich nicht verändert. Die eigene Berechnung greift nur, wenn mindestens eine negative Position vorhanden ist.

Berechnung negativer Summen

Das Plugin durchläuft die tatsächlichen Rechnungspositionen und summiert deren Werte. Die Steuer wird anhand der von GetPaid für die jeweilige Position ermittelten Steuersätze berechnet.

Dabei enthält das Plugin bewusst keine eigene UID-, Länder- oder Reverse-Charge-Logik. Entscheidend ist ausschließlich die Steuerregel, die GetPaid für die jeweilige Position tatsächlich liefert.

Auch die GetPaid-Einstellung, ob Preise inklusive oder exklusive Steuer gespeichert werden, wird berücksichtigt.

Die selbst berechneten Werte werden anschließend an den relevanten Ausgabestellen verwendet:

  • Summenblock der normalen Rechnungsansicht
  • Summenblock der E-Mail
  • Summenblock des PDFs
  • Gesamtsumme im Rechnungskopf
  • Backend-Anzeige nach „Summe erneut kalkulieren“

Warum eigene Summen-Keys verwendet werden

Für negative Rechnungen ersetzt das Plugin die normalen GetPaid-Zeilen für Zwischensumme, Steuer und Gesamtsumme durch eigene Keys wie image2_negative_subtotal, image2_negative_tax und image2_negative_total.

Dadurch geben die Core-Templates nicht die von GetPaid gespeicherten 0-Werte aus. Stattdessen liefern die eigenen Actions die anhand der Positionen neu berechneten Werte.

Neue Rechnungen automatisch als Entwurf sichern

GetPaid vergibt eine Rechnungsnummer bereits beim Öffnen der Maske für eine neue Rechnung. WordPress hält den Datensatz zu diesem Zeitpunkt jedoch zunächst nur als auto-draft.

Wird die Seite geschlossen oder neu geladen, bevor die Rechnung gespeichert wurde, kann dieser Auto-Draft verloren gehen, obwohl die Rechnungsnummer bereits verbraucht wurde. Dadurch entstehen unnötige Nummernlücken.

Das Plugin erkennt deshalb neu geöffnete GetPaid-Rechnungen mit dem Status auto-draft und löst einmal automatisch den normalen WordPress-Button „Entwurf speichern“ aus.

Dabei wird bewusst der reguläre WordPress-/GetPaid-Speichervorgang verwendet. Die bereits angezeigte Rechnungsnummer wird dadurch gespeichert und der Datensatz anschließend als normaler Entwurf auffindbar.

GetPaid verschickt für diesen Entwurf keine Kundenmail.

Bei bereits gespeicherten Entwürfen greift diese Automatik nicht erneut.

Fargo-Sicherung beim automatischen Entwurf

Die automatische Entwurfssicherung läuft ausschließlich bei echten GetPaid-Rechnungstypen, deren aktueller WordPress-Status auto-draft ist. Zusätzlich wird geprüft, ob der aktuelle Benutzer den Datensatz bearbeiten darf.

Ein interner Marker am Formular verhindert außerdem, dass derselbe automatische Speichervorgang innerhalb des Seitenaufrufs mehrfach ausgelöst wird.

Entwurf beim Senden auf „Zahlung ausständig“ setzen

Wird eine gespeicherte GetPaid-Rechnung mit dem Status Entwurf anschließend veröffentlicht bzw. gesendet, setzt das Plugin den GetPaid-Status vor dem Absenden auf wpi-pending bzw. „Zahlung ausständig“.

Damit bleibt der automatische Draft-Workflow vom tatsächlichen Versand der Rechnung getrennt.

Buchhaltungsexport

Das Plugin ergänzt unter GetPaid einen eigenen Menüpunkt Buchhaltungsexport.

Dort kann ein Zeitraum von/bis ausgewählt und anschließend eine CSV-Datei heruntergeladen werden. Standardmäßig ist der aktuelle Monat vorausgewählt.

Entwürfe, Auto-Drafts und Einträge im Papierkorb werden nicht exportiert.

Inhalt des CSV-Exports

Der Export enthält je nach vorhandenen Steuerregeln dynamische Spalten. Die Basisdaten umfassen:

  • Rechnungsnummer
  • Rechnungsdatum
  • Kunde
  • Firma
  • UID
  • Land
  • Netto je vorhandener Steuerregel
  • USt je vorhandener Steuerregel
  • Netto gesamt
  • USt gesamt
  • Brutto
  • Zahlungsstatus
  • Zahlungsdatum
  • Zahlungsart

Am Ende der CSV-Datei wird zusätzlich eine Summenzeile ausgegeben.

Die CSV verwendet ein Semikolon als Trennzeichen, deutsche Dezimaltrennzeichen und einen UTF-8-BOM für eine unkomplizierte Weiterverarbeitung insbesondere in Excel.

Steuerberechnung im Buchhaltungsexport

Die Steueraufschlüsselung wird positionsweise berechnet. Dadurch können unterschiedliche Steuerregeln innerhalb des ausgewählten Zeitraums automatisch als eigene Netto- und USt-Spalten ausgegeben werden.

Auch hier wird keine eigene Reverse-Charge-Logik aus Land oder UID abgeleitet. Die konfigurierte und von GetPaid tatsächlich angewendete Steuerregel ist die einzige Quelle für Steuersatz und Bezeichnung.

Steuerfreie Positionen werden entsprechend als steuerfrei behandelt. Negative Positionen fließen ebenfalls mit ihren tatsächlichen Werten in die Berechnung ein.

Sicherungen im Buchhaltungsexport

Der Export verwendet die GetPaid-Berechtigung, sofern diese verfügbar ist. Zusätzlich wird der Download über einen WordPress-Nonce abgesichert.

Der eingegebene Zeitraum wird serverseitig auf das erwartete Datumsformat geprüft. Ungültige Angaben führen nicht zu einem Export.

PDF-CSS

Das Plugin ergänzt aktuell folgendes grundlegendes PDF-Styling:

/* STATUS AUSBLENDEN */
.getpaid-invoice-meta-status-value {
    display: none !important;
}

/* GLOBALE SCHRIFTANPASSUNG */
html body {
    font-size: 11px !important;
    line-height: 1.4 !important;
}

html body p,
html body span,
html body td,
html body th,
html body li,
html body label,
html body address {
    font-size: 11px !important;
}

html body small,
html body .small,
html body .meta p {
    font-size: 9px !important;
    line-height: 1.2 !important;
}

/* ÜBERSCHRIFTEN */
h1 { font-size: 20px !important; }
h2 { font-size: 18px !important; }
h3 { font-size: 16px !important; }
h4 { font-size: 14px !important; }
h5 { font-size: 12px !important; }
h6 { font-size: 11px !important; }

/* SEITENRÄNDER */
@page {
    margin: 15mm 10mm 15mm 10mm;
}

html body {
    padding-left: 10mm !important;
    padding-right: 10mm !important;
}

/* LEISTUNGSZEITRAUM */
.invoice-service-period-block {
    margin: 15px 0 10px 0;
}

/* ÜBERSCHRIFT ÜBER POSITIONEN AUSBLENDEN */
.items-div h2 {
    display: none !important;
}

Wichtig: Dieses CSS ersetzt nicht das bereits in GetPaid gespeicherte PDF-CSS, sondern wird daran angehängt. Projektspezifische GetPaid-Einstellungen bleiben dadurch erhalten.

Tests nach Installation oder Änderung

  • Normale Rechnung mit positiven Positionen erstellen und prüfen, ob GetPaids normale Summen unverändert bleiben.
  • Rechnung mit negativer Position erstellen und Zwischensumme, Steuer und Gesamtsumme prüfen.
  • Negative Rechnung in Backend, normaler Rechnungsansicht, E-Mail und PDF vergleichen.
  • Steuerpflichtige und steuerfreie Rechnungen testen.
  • Bei verwendeten EU-/UID-Konstellationen prüfen, ob die von GetPaid ermittelte Steuerregel korrekt übernommen wird.
  • Neue Rechnung öffnen und kontrollieren, ob sie automatisch als Entwurf gespeichert und später wiedergefunden wird.
  • Prüfen, ob beim automatischen Speichern des Entwurfs keine Kundenmail verschickt wird.
  • Entwurf senden und kontrollieren, ob der Status korrekt auf „Zahlung ausständig“ wechselt.
  • Buchhaltungsexport für einen bekannten Zeitraum erzeugen und Werte mit den Rechnungen vergleichen.
  • Negative Rechnungen im Buchhaltungsexport kontrollieren.
  • PDF auf Schriftgrößen, Seitenränder, Leistungszeitraum und ausgeblendeten Status prüfen.
  • Kontrollieren, ob die in GetPaid hinterlegten projektspezifischen PDF-Einstellungen und Farben weiterhin übernommen werden.

Wartungshinweise

Nach größeren GetPaid-Updates insbesondere die verwendeten Hooks und Filter für Rechnungs-Metadaten, Summenzeilen, E-Mail-Summen, PDF-Inhalte und Steuerberechnung kontrollieren.

Die Logik für negative Rechnungen nicht ohne konkreten Grund in GetPaids interne gespeicherte Summenberechnung verlagern. Der aktuelle Ansatz ist bewusst darauf ausgelegt, normale Rechnungen unangetastet zu lassen und die Sonderberechnung ausschließlich bei tatsächlich vorhandenen negativen Positionen zu aktivieren.

Änderungen an der Steuerlogik immer auch im Buchhaltungsexport prüfen. Dieser verwendet bewusst die von GetPaid pro Position ermittelten Steuerregeln und enthält keine eigene Ableitung aus UID oder Rechnungsland.

Bei Änderungen am Workflow neuer Rechnungen besonders darauf achten, dass die automatische Entwurfssicherung keine Rechnung versendet und nicht mehrfach ausgelöst wird.

Plugin-Datei

Pluginname: GetPaid PDF Adjustments
Aktuell dokumentierte Version: 1.8
Autor: image²

Der Name stammt aus der ursprünglichen Funktion des Plugins. Der heutige Funktionsumfang geht deutlich über reine PDF-Anpassungen hinaus. Eine Umbenennung ist technisch nicht erforderlich; bei einer späteren größeren Überarbeitung kann ein allgemeinerer Name sinnvoll sein.