Search by

srhinow / project-manager-bundle

srhinow

a project-management-tool with invoice, credit, offer, reminder, agreements parts for Contao CMS >= 5.3

Package info

gitlab.com/srhinow/project-manager-bundle

Homepage

Issues

Type:contao-bundle

pkg:composer/srhinow/project-manager-bundle

Statistics

Installs: 429

Dependents: 0

Suggesters: 0

Stars: 0


README

Projektmanagement-Erweiterung für Contao CMS – mit Angeboten, Rechnungen, Gutschriften, Verträgen, Erinnerungen und Projekten.

Autor: Sven Rhinow – sr-tag.de Lizenz: LGPL-3.0-or-later Repository: https://github.com/srhinow/project-manager-bundle

Anforderungen

AbhängigkeitVersion
PHP>= 8.2
Contao CMS>= 5.3
contao/tcpdf-bundle^1.1
menatwork/contao-multicolumnwizard-bundle^3.5

Installation

composer require srhinow/project-manager-bundle

Funktionen

Backend

  • Angebote, Rechnungen, Gutschriften und Verträge können Projekten zugeordnet werden
  • Neue Einträge werden direkt aus dem Projekt heraus aufgerufen und vorbefüllt
  • Texte vor und nach den Posten als Vorlage speicherbar
  • Mehrere Konfigurationen (Einstellungen) anlegbar – je Rechnung/Angebot/Gutschrift zuweisbar
  • Währung, Steuersätze, Mengenangaben zentral unter einem Menüpunkt verwaltbar
  • Teilzahlungen bei Rechnungen erfassbar – offener Betrag und Restbetrag werden angezeigt
  • Rechnungen ohne Mehrwertsteuerausweis (z. B. für Auslandsrechnungen)
  • Beträge addierbar oder subtrahierbar – z. B. für Rabatte in der Postenaufstellung
  • Rückstände (Mahnungen) im eigenen Bereich, per Knopfdruck aktualisierbar
  • Kunden-Adressverwaltung auf Basis von tl_member mit eigenem Paletten-Layout
  • Adressdaten aus der Mitgliederverwaltung per Selectfeld in Rechnungen/Angebote übernehmbar
  • Vor- und Abschlusstexte über Vorlagen-Selectfeld vorausfüllbar
  • Posten-Felder über Vorlagen-Selectfeld vorausfüllbar
  • Mengenangabe (Stück, Stunde, Tag …) per Selectfeld wählbar
  • Automatische Berechnung von Netto / Brutto je nach Eingabe-Modus
  • Postenvorlagen und Kundenauswahl als durchsuchbare Selectfelder (Select2)
  • Rabatte über Vorlage und manuell anpassbar
  • Benutzerrechte je Modul-Bereich einzeln steuerbar
  • Festschreiben von Angeboten, Rechnungen, Gutschriften und Mahnungen (Schloss-Symbol in der Liste): Das PDF wird einmal erzeugt und unveränderlich abgelegt, danach liefert das PDF-Symbol immer genau diese Datei. Inhalte und Posten sind gesperrt, nur Zahlungsangaben, Bearbeitungsstand und Notiz bleiben änderbar. Korrekturen über Gutschrift bzw. Stornorechnung.

Ablage festgeschriebener Belege

Die PDFs liegen in files/iao-archiv/<Belegart>/<Jahr>/ (nicht öffentlich). In der Dateiverwaltung sind sie sichtbar und lassen sich ansehen und herunterladen; hochladen, umbenennen, verschieben, bearbeiten und löschen sperrt ArchiveFolderVoter – auch für Administratoren und auch für die übergeordneten Ordner. Der Ordner lässt sich in der config/config.yaml umstellen (liegt er außerhalb von files/, erscheint er nicht in der Dateiverwaltung):

parameters:
    srhinow_project_manager.archive_dir: '%kernel.project_dir%/%contao.upload_path%/iao-archiv'

Bestehende Ablage umziehen: Ordner verschieben, Parameter anpassen, Cache leeren und den Ordner in der Dateiverwaltung anmelden (Dbafs::addResource('files/iao-archiv')). Die Pfade an den Belegen sind relativ zur Ablage und bleiben gleich.

Verschickte Originale übernehmen (Backend, Rechnungen → „Originale übernehmen“, nur Administratoren): Die PDFs, die die Kunden bekommen haben (z. B. aus Paperless, Download „Originale“), in einen Ordner der Dateiverwaltung hochladen und dort wählen. Der Probelauf liest die Belegnummer aus dem PDF (Titel, sonst Text, sonst Dateiname – Dateinamen wie „Rechnung Juni 2019.pdf“ gehen also), prüft den Rechnungsbetrag und wählt bei mehreren Fassungen die zuletzt erzeugte mit passendem Betrag. Von Paperless/OCRmyPDF umgewandelte Dateien werden nie übernommen. Mehrdeutige Fälle sind wählbar; die Liste aller Dateien mit Ergebnis gibt es als CSV (Dubletten und ältere Fassungen zum Aufräumen in Paperless). Übernommene Dateien liegen byte-gleich in der Ablage, Herkunft imported. Danach kann der Ordner gelöscht werden.

Einzelne Originale lassen sich direkt an der Rechnung bzw. Gutschrift hochladen (Operation „Original hochladen“, nur bei offenen Belegen): gleiche Prüfung, bei unsicherer Zuordnung mit Anzeige der gelesenen Nummern und Beträge und der Möglichkeit, die Datei bewusst trotzdem zu übernehmen. Welche Belege noch kein Original haben, zeigt der Dialog „Originale übernehmen“ unten (auch als CSV, mit Link zum Hochladen je Beleg).

Nicht für Altbelege: das Schloss „Festschreiben“ erzeugt das PDF mit der heutigen Vorlage und vermerkt es als beim Festschreiben erzeugt.

Altbestand auf der Konsole festschreiben (ohne --execute nur Probelauf):

# vorhandene Originale übernehmen (Belegnummer im Dateinamen, z. B. Rechnung-R-20170626-26.pdf)
vendor/bin/contao-console iao:finalize-all --from-dir=/pfad/zu/den/pdfs --execute
# übrige Altbelege mit heutiger Vorlage nachbilden und als Nachbildung kennzeichnen
vendor/bin/contao-console iao:finalize-all --source=recreated --execute

Der Ordner gehört in die Datensicherung (Aufbewahrungsfristen) und nicht ins Git (Kundendaten). Fehlt eine Datei oder stimmt ihre SHA-256-Prüfsumme nicht mehr mit der gespeicherten überein, liefert das Bundle nichts aus und meldet den Fehler.

PDF-Erzeugung

Klassisch werden die Werte an festen Positionen auf eine PDF-Vorlage je Belegart geschrieben. Mit der Einstellung „PDF-Erzeugung: HTML-Vorlage auf Briefbogen“ setzt dompdf die Belege aus Twig-Vorlagen und legt sie auf einen Briefbogen (PDF mit Logo, Absender, Fuß – Seite 1 für die erste, Seite 2 für alle weiteren Seiten):

  • iao_pdf_document – gemeinsames Aussehen (Block style), Kopfdaten, Posten, Summen, Seitenzahl
  • iao_pdf_offer, iao_pdf_invoice (auch Stornorechnung), iao_pdf_credit, iao_pdf_reminder – Überschrift und Beschriftungen (Blöcke heading_text, number_label, execute_label, date_label, expiry_label)

Anpassen im Template Studio; die verfügbaren Variablen stehen im Kopf von iao_pdf_document.

Zahlungs-Schnittstelle

Die Buchhaltung (mesti) kann offene Rechnungen abfragen und Zahlungseingänge melden; Status und Restbetrag werden dabei gesetzt. Abgeschaltet, bis IAO_API_TOKEN in der .env.local steht. Beschreibung: docs/zahlungs-api.md, als OpenAPI 3.1: docs/zahlungs-api.openapi.yaml.

Frontend

  • Projekt-Referenzen: Frontend-Modul zeigt alle Projekte mit gesetztem „In Referenzen aufnehmen"-Flag; eigenes Beschreibungs- und Bildfeld verfügbar
  • Kunden-Bereich (Login-geschützt): Rechnungen, Angebote und Gutschriften als Liste mit Status (angenommen / nicht angenommen) und Download der jeweiligen PDF-Datei

Entwicklung

Tests ausführen

# Mit eigenem vendor-Verzeichnis:
./vendor/bin/phpunit

# Alternativ mit dem Autoloader eines installierten Contao-Projekts:
PMB_AUTOLOAD=/path/to/contao5/vendor/autoload.php phpunit

Die Testsuite prüft die reinen Berechnungs- und Service-Methoden (Iao, IaoBackend) ohne Contao-Bootstrap.

Code-Stil

./vendor/bin/php-cs-fixer fix

Icons