Invoice API: Tag 1

Ok, die Grundsteine sind gelegt: Das generelle Konzept der Invoice API steht, die Hooks sind definiert, ein erster Prototyp läuft bereits für erste Test in meiner Telekonsum Entwicklungsumgebung und ein Projekt auf Drupal.org ist auch bereits eingerichtet (http://drupal.org/project/invoice_api).

Für einen ersten Commit hat es allerdings noch nicht gereicht. Die Vergabe der Rechnungsnummern funktioniert, dazu gibt es ein kleines Modul was durchlaufende Rechnungsnummern generiert, eine PDF wird allerdings noch nicht erzeugt. Die Grundfunktionalität dazu muss auf API Seite erst noch bereitgestellt werden.

Generell gibt es zwei Tabellen:

invoice_api
Eine eigene Entity, speichert eine durchlaufende invoice_id (für interne Zwecke), eine invoice_number (wird von API Modulen generiert), die User ID, Order ID, ein Erstellungs- und ein Änderungsdatum.

invoice_api_files
Diese Tabelle dient dazu einzelnen Rechnungen aus obiger Tabelle Rechnungsdokumenten (Dateie) zuzuordnen. Die Tabelle beinhaltet die Felder invoice_file_id (für interne Zwecke), invoice_id (Referenz auf obige Tabelle), fid (File ID), ein Erstellung- und Änderungsdatum.

Warum eine Separate Tabelle für die Dokumente?

Einfache Antwort: um eine Historie zu haben. Bei Rechnungen kommt es durchaus vor, dass welche storniert und neu erzeugt werden. Zum Beispiel kann es im Rahmen des 14 tägigen Rückgaberechts im Online-Handel vorkommen, dass einzelne Positionen storniert oder einfach nur abgeändert werden. Dies soll über eine Dokumentenverwaltung im Rechnungssystem nachverfolgt werden können.

Heute geschafft:

  • Tabellen Schema & Installationsroutine erstellt
  • Entity Definition für invoice_api
  • hook_invoice_api_info definiert
  • Verwaltungsseiten erstellt
  • Submodul invoice_api_infinite mit grundlegender Funktionlität zum testen bestückt
  • Views Anbindung gebaut

Fazit:

Wegen eines dicken Bretts vorm Kopf hat mir die Views-Anbindung zu schaffen gemacht. Beide Tabellen sollten mittels Join zusammengefasst werden, sodass - ausgehend von der Files Tabelle - auch die Felder der Rechnungstabelle verfügbar sind. Im hook_views_data hab ich jedoch den Join an die File-Tabelle gesetzt, anstatt an die Invoice Tabelle. Tausendmal gemacht und trotzdem diesmal übersehen. Hat mich bestimmt eine Stunde zurückgeworfen :(