Skip to main content
Skip table of contents

Bearbeiten der Rechnung via Hook vor Verarbeitung in edoc invoice app link for DATEV

Sie können die Rechnungsdaten vor der Verarbeitung über einen Einsprungspunkt (Hook) anpassen. Sie können auf diese Weise z.B. eigene Berechnungen (kundenindividuell) oder individuelle Felder zu ergänzen.

Angenommen, Sie möchten die Positionen nicht einzeln übertragen, sondern anhand von Sachkonto und Kostenstelle aufsummieren. Dieses Verfahren können Sie mit einer individuellen Funktion realisieren.

Im Installationsverzeichnis unter <app>\data\persistent\hook\prepare_invoice können Sie PHP-Dateien mit Ihren individuellen Funktionen speichern.

Folgende Grundsätze müssen Sie beim Erstellen von individuellen Funktionen beachten:

  • Die Dateien müssen eine Klasse beinhalten, die genauso heißt wie die Datei.

  • Die Klasse muss die Klasse App\AbstractPrepareInvoice erweitern.

  • Sie müssen die Funktion exec() implementieren und dort Ihre Logik implementieren.

  • Sie können mit der Erweiterung der App\CustomFunction-Klasse auf folgende Eigenschaften zugreifen:

    • helper: Ist ein ActionHelper-Objekt, mit dem Sie edoc automate-Aktionen ausführen können. Weitere Informationen zu den Aktionen finden Sie im Handbuch zu edoc automate app.

    • invoice: Ist ein per Referenz übergebenes Objekt der Klasse App\Invoice und beinhaltet folgende Eigenschaften:

      • header: Enthält die Kopfdaten der aktuellen Rechnung.

      • status: Enthält die Statusinformationen der aktuellen Rechnung.

      • positions: Enthält die Positionsdaten der aktuellen Rechnung mit den Transferdaten der Rechnung.

Beispiel für eine individuelle Funktion

PHP
<?php

namespace Edoc\InvoiceLink\Custom;

use App\AbstractPrepareInvoice;

class GroupPositions extends AbstractPrepareInvoice
{
    private array $newPositions = [];
    private array $fields = [
      "net_amount",
      "vat_amount",
        "gross_amount"
    ];

    public function exec()
    {
        $rowIndex = -1;
        foreach ($this->invoice->positions as $position) {
            // Build a unique id for position
            $account = $position["account"] ?? "";
            $vatPercent = $position["vat_percent"] ?? "";
            $costCenter = $position["cost_center"] ?? "";
            $keyField = $account . "_" . $costCenter . "_" . $vatPercent;

            if (array_key_exists($keyField, $this->newPositions)) {
                foreach ($this->fields as $field) {
                    if (!empty($position[$field])) { // Only add value if not empty
                        if (!empty($this->newPositions[$keyField][$field])) {
                            $this->newPositions[$keyField][$field] += $position[$field];
                        } else {
                            $this->newPositions[$keyField][$field] = $position[$field];
                        }
                    }
                }
                $this->newPositions[$keyField]["net_amount"] += $position["net_amount"];
            } else {
                $position["row_index"] = $rowIndex++;
                $this->newPositions[$keyField] = $position;
            }
        }

        $this->invoice->positions = $this->newPositions;
    }
}

So geht’s

  1. Erstellen Sie die Datei GroupPositions.php im persistenten Ordner der App (via WebDAV: data/persistent/hook/prepare_invoice/GroupPositions.php).

  2. Ergänzen bzw. ersetzen Sie Ihre individuelle Logik.

Gut zu wissen

Dateien im persistenten Ordner werden nicht beim Aktualisieren der Version überschrieben. Gleichzeitig sind diese Dateien allerdings nicht beim Export einer App mit in der *.eax-Datei enthalten. Wenn Sie also z.B. einen Serverumzug durchführen, müssen Sie die Dateien manuell kopieren.

JavaScript errors detected

Please note, these errors can depend on your browser setup.

If this problem persists, please contact our support.