kivitendo mit E-Mail-Journal

Das hat mich heute sehr gefreut, diesen Commit auf der Projektliste zu sehen:

commit 72f19f83681b222d1606d75c90ceedc43bb545f9
Author: Moritz Bunkus <m.bunkus@linet-services.de>
Date: Thu Sep 24 11:42:15 2015 +0200

E-Mail-Journal: Journal anzeigen, Eintrag anzeigen, Anhänge herunterladen

In unseren Projekten empfehlen wir immer möglichst viel über die E-Mail-Funktion des Systems zu versenden, da dies dann im internen Bemerkungsfeld der Belege entsprechend mitprotokolliert wird. Blöderweise kann man hierüber keine direkte Auswertung sehen.
Das ändert sich ab heute in der devel-Version von kivitendo und in einigen Monaten dann im nächsten Release.

Wenn jetzt E-Mails verschickt werden, werden zusätzlich noch der Status (erfolgreich versendet) und der Zeitpunkt in einem extra Bericht mitprotokolliert:

In der Detailansicht der Mail wird dann auch nochmal die gesamte E-Mail inkl. Dokumentanhang dargestellt. Somit ist dies zusätzlich zu der WebDAV-Archivierung der Belege eine richtig sinnvolle Archivfunktion, um wirklich nachzuvollziehen, was an den Empfänger in welchen Zeitraum geschickt wurde. Ferner ist dann auch die Darstellung der Mail etwas klarer, weil hier alle E-Mail-Teile nochmal angezeigt werden:

Da zwei sehr schöne Features in der aktuellen Devel-Version vorhanden sind und außer wirklichen Bugfixes seit dem Release nichts weiter passiert ist, lohnt sich vielleicht schon jetzt ein Upgrade auf die heutige Version.

Administratoren, die aus dem git heraus installiert haben und lokale Änderungen im eigenen Branch verwalten (s.a. Vortragsfolien git und kivitendo bzw. Video) können heute bedenkenlos (insofern 3.3 im Einsatz):


$ git checkout master
$ git pull
$ git checkout mein_eigener_branch
$ git rebase master
$ service apache2 restart

durchführen …

Schnellwachsende Südfrüchte – Massenkonvertieren von Lieferscheinen nach Rechnungen

Kaum ist die 3.3 zwei Wochen in Umlauf, geht es mit der Entwicklerversion in Windeseile weiter.
Aktuell haben wir die sehr gute Situation, dass einige Shopschnittstellen mit hohem Durchsatz an kivitendo angebunden werden.
Für diese Kundengruppe geht es vor allem um eins:

Geschwindigkeit und Einfachheit!

kivitendo muss hier möglichst mit einem Klick sehr viel lästige Kleinarbeit erledigen.
Aus einem dieser Projekte stammt die gerade eingefügte Erweiterung (git commit 4edb3a6f7d23140ec7ca67).
Der Prozess ist wie folgt: Waren werden gepackt und mit Lieferschein und Rechnung verschickt.
Durch eine geschickte Kombination von Hintergrund-Job und Objekt-Konvertierung kommen wir hier (auf unserem Testsystem) auf einen Durchsatz von 440 Lieferscheinen konvertiert zu Rechnungen und an den Netzwerkdrucker übergeben in 7 Minuten. Innerhalb einer Sekunde wird ein Lieferschein gewandelt und zum Drucker geschickt.

Trotzdem hat kivitendo noch Zeit, den aktuellen Status des Prozesses an den Nutzer zu melden und paralleles Weiterarbeiten ist nicht nur möglich, sondern erwünscht ;-).

Der nächste Optimierungs-Schritt wäre hier dann beim Durchsatz, indem man den Ausdruck parallelisiert, aber da warten wir lieber, bis ein begeisterter kivi-Fan in diese Problem-Dimension kommt.

Die obigen Ergebnisse kann man prinzipiell mit einer Server-Client-Lösung im Web (neudeutsch: Cloud) erzielen, allerdings knickt die Performanz auch bei der 10-fachen Menge (4400 Lieferscheine) nicht wesentlich ein und liefert annähernd konstant denselben Durchsatz-Wert (4400 Lieferscheine in kleiner 2h)
Das Druckdokument hat eine Größe von 43 MB mit mehr als 5000 Seiten. In der Kette ist  der Speicher des Netzwerkdruckers dann das nächste Nadelöhr, das kann man aber kivi-seitig auch noch optimieren, indem man einen maximalen Größenwert definiert und die Übergabe an den Drucker bei Erreichen dieses Wertes portioniert.

Ich bin zufrieden ;-).

FrOSCon 2015

Am vergangenen Wochenende waren wir mit Stand und Vorträgen wieder auf der FrOSCon vertreten. Zu ihrem 10-jährigen Jubiläum hatte das FrOSCon-Team auch ein paar prominente Speaker geladen, z.B. Andrew S. Tanenbaum.

Am kivitendo-Stand haben wir am Samstag und Sonntag das Projekt vertreten und dabei reichlich Fragen zu kivitendo beantwortet.
Insgesamt haben wir dieses Jahr drei Vorträge gehalten:

Im ersten Vortrag erzählt Jan von unseren Erfahrungen über die Jahre mit dem Hosting eines eigenen Mailservers:

Am Sonntag habe ich einen Vortrag über Open Source Online Banking gehalten, in dem ich gegen Ende auch auf die Bankerweiterung in kivitendo eingehe:

Und schließlich hat Jan am Sonntag auch noch relativ spontan einen Vortrag über ein aktuelles Migrationsprojekt von SAP zu kivitendo erzählt, nachdem am Donnerstag kurzfristig ein Programmslot frei wurde:

Ich habe mir diesmal zwar keinen Vortrag live angeschaut, aber ein paar Empfehlungen erhalten, die ich mir anschließend als Video angeschaut habe. Ich möchte gerne zwei Vorträge vorstellen, die technisch nicht allzu tief gehen, dafür aber gut vorgetragen und sehr anschaulich und verständlich sind:

In ihrem Vortrag “Rewriting 12 year old code” ist eine der Thesen von Anna Filina, dass ein kompletter Rewrite von alter Software meist fehlschlägt und man besser Stück für Stück Komponenten austauschen sollte.

Das entspricht ja auch dem Konzept von kivitendo – alten Code nach und nach abzulösen und bei der Gelegenheit auch Tests einzuführen. Mit dem Erscheinen von sql-ledger in 1998 blickt kivitendo immerhin auch auf eine Code-Geschichte von mittlerweile 17 Jahren zurück. Und seit dem Erscheinen von lx-office in 2003 wurde immer darauf geachtet, dass man auch von alten Versionen noch auf ein aktuelles kivitendo updaten kann, sodass viele Firmen schon seit vielen Jahren ohne Bruch mit kivitendo arbeiten können.

In einem weiteren sehr schönen Vortrag erklärt Stefan Wintermeyer sehr anschaulich die Grundlagen und prinzipiellen Einschränkungen, die man bei der Optimierung von Webseiten im Hinblick auf Geschwindigkeit berücksichtigen muß:

https://media.ccc.de/browse/conferences/froscon/2015/froscon2015-1536-webperformance_autobahn_oder_fussgangerzone.html

Bankerweiterung in kivitendo 3.3

Das größte neue Feature in kivitendo 3.3 ist die Bankerweiterung, bei der man Kontoauszüge aus einer Bankingsoftware importieren kann, um damit die offenen Posten schnell zu verbuchen. Dabei werden die Zahlungen in der Datenbank mit den entsprechenden Rechnungen verknüpft, sodass diese Informationen auch beim verbesserten Kontenabgleich genutzt werden können. Die Bearbeitung von vielen Zahlungen in kivitendo wird hiermit wesentlich effizienter und die Übersicht beim Zahlungsverkehr erhöht.

Bei den folgenden Firmen, die die Finanzierung dieses Projekts ermöglicht haben, möchte ich mich bedanken:

opendynamic GmbH & Co. KG
c.a.p.e. IT GmbH
CeTaQ GmbH
Kaspers & Wessendorf Unternehmensberater Partnerschaftsgesellschaft
Werner Hahn/V-Solution
Servicelabel GbR

kivitendo 3.3 unterwegs …

In den nächsten Wochen wird kivitendo in der Version 3.3 veröffentlicht. Der Fokus der Veröffentlichung liegt auf dem Kontoauszugs-Import, der hier im Wiki sehr gut beschrieben ist: http://redmine.kivitendo-premium.de/projects/forum/wiki/Bankerweiterung

Inspiriert ist diese Erweiterung aus einem Kundenprojekt, welches dort 2013 initiiert wurde. Sie hat folgende Eckpunkte:

  • Kontoauszüge importieren (für MT940 wird aqbanking-cli benötigt)
  • anhand der Kontoauszüge Zahlungen verbuchen
  • die FiBu-Buchungen auf die Bankkonten mit den importieren Auszügen abgleichen

Aktuell haben wir die Volksbank und die Sparkasse hiermit getestet.

Wer es vorab ausprobieren möchte, bitte exakt die Anweisung befolgen. Der Import erfolgt in 2 Schritten:

  1. Konvertierung MT940 → CSV (per Linux-Programm aqbanking)
  2. Import CSV → kivitendo (deswegen hier das Importprofil entsprechend auf aqbanking abstimmen (Amerikanisches Zahlenformat etc).

Hier die wichtigste Info auf den Punkt (steht aber auch genauso im Wiki):

  1. Das Bankkonto (IBAN / BIC) muss ohne Leerzeichen erfasst sein.
  2. Das Profil MT940 ist Case sensitiv (alles groß schreiben)
  3. Import-Profil genau wie in der Doku erfassen
  4. Debugging-Abschnitt beachten

Details der weiteren Features gibt es wie immer im Changelog und an dieser Stelle auch nochmal der Status von heute:

Bankerweiterung und Skontobehandlung

Bei der Bankerweiterung kann man

  • Kontoauszüge importieren (für MT940 wird aqbanking-cli benötigt)
  • anhand der Kontoauszüge Zahlungen verbuchen
  • die FiBu-Buchungen auf die Bankkonten mit den importieren Auszügen
  • abgleichen

__Es wurde ein neues Recht “Bankbewegungen” eingeführt.

Beim Verbuchen der Zahlungen werden Rechnungsvorschläge gemacht, die anhand
eines internen Punktesystems bewertet werden.

Es wurde eine Skontobehandlung bei der Zahlung der Rechnungen implementiert,
und zwar nach der Bruttomethode. D.h. es wird der skontierte Betrag auf
erhaltene oder gewährte Skonti gebucht. Allerdings gibt es hier keine
Steuerautomatik, d.h. man muss am Monatsende die Salden noch manuell umbuchen.

Die zu buchenden Skontokonten müssen unter System → Steuern konfiguriert
werden.

Die Skontobehandlung wurde beim Verbuchen der Skontobelege und beim
SEPA-Einzug bzw. der SEPA-Überweisung implementiert.
Beim Bezahlen von Rechnungen kann man auswählen ob man die Zahlung

  • ohne Skonto
  • mit Skonto laut Zahlungsbedingungen
  • die Differenz als Skonto

buchen möchte. Es wird je nach Zahlungsbetrag und Zahlungsdatum ein sinnvoller
Vorschlag gemacht.

Kleinere neue Features und Detailverbesserungen:

  • Briefe werden auch im WebDAV archiviert. Ferner bessere Fehlerbehandlung und
    E-Mail-Funktion aktiviert.
  • Mehrfachauswahl und Mengeneingabe für Artikel:
    Wenn in den Belegmasken die Artikeleingabe nicht eindeutig ist, erscheint
    eine Maske zur Artikelauswahl. Hierzu kann jetzt in den Benutzereinstellungen
    eingestellt werden, dass in dieser Maske mehrere Artikel mit Mengen ausgewählt
    werden können.
  • Stammdaten → Berichte → Waren: Nach Shopartikel filtern und anzeigen können.
  • Auftrags-/Angebotsbericht: Erfassungszeit als letzte Sortierung verwenden,
    damit die Einträge nach Eingabezeitpunkt sortiert sind, wenn es
    gleichrangige Einträge in der aktuellen Sortierung gibt.
  • Bei Eingabe nicht eindeutiger Artikel in den Belegmasken bleibt jetzt auch die
    Mengeneingabe über die Auswahlmaske hinweg bestehen. Damit kann man die Menge
    auch schon vorher eingeben: Nicht eindeutiger Artikel, TAB, TAB, Menge, ENTER
  • In den Berichten zu Aufträgen, VK-Lieferscheinen, Warenstammdaten, Kunden-/
    Lieferntenstammdaten kann das Erfassungsdatum angezeigt und danach gefiltert
    werden.
  • Filtern/Anzeigen von benutzerdefinierten Variablen bei Kunden-/Lieferanten in
    den Berichten Angebot/Aufträge und Verkaufsrechnungen
  • Filtern nach Kunden-/Lieferantentyp bei Lieferschein-Berichten.
  • Preisgruppe bei Stammdaten → Berichte → Kunden anzeigen lassen können.

Bugfixes:

  • Bugfix #54 Fehlermeldung im Mahnlauf bei automatischer Rechnung über Mahngebühren
  • Bugfix #50 Kundentyp-Rabatt wird falsch übernommen

 

kivitendo 3.2.1 veröffentlicht

Schon etwas länger ist die 3.2.1 veröffentlicht, deswegen wird es höchste Zeit, ein paar Zeilen dazu zu schreiben, denn für den einen oder anderen lohnt sich sicherlich schon ein Blick darauf …

Die Motivation, eine 3.2.1 zu veröffentlichen ist überwiegend einiger kleinerer Bugfixes zu verdanken, die kurz nach der 3.2 hochgekommen sind.
Dadurch sind u.a. nebenbei zwei neue Features dazugekommen – zum einen die Verkaufsbrieffunktion und zum anderen ein simples automatisches Auslagern beim Buchen von Verkaufsrechnungen.

Somit sind wir im Warenverwaltungswesen 😉 mittlerweile wieder bei der Version 2.2 angekommen, die nur ein simples Bestandslager zu Verfügung gestellt hatte, allerdings mit dem riesigen Vorteil, dass auch komplexere Lagersysteme (ab 2.6 dazugekommen) abgebildet werden können.

Die Brieffunktion lohnt sich vor allen Dingen für diejenigen, die sowieso und gerne mit LaTeX ihre Druckvorlagen erstellen und diese dann auch simpel mit kivitendo direkt verwalten wollen.

Verkaufs-Brieffunktion
Simple Brieffunktion in kivitendo

Wer die Dokumentenarchivierung aktiviert hat, kann sich im nächsten Release darauf freuen, dass auch die Briefe automatisch mitarchiviert werden.

Hier der komplette Changelog mit ein paar Screenshots der Veränderungen:

Kleinere neue Features und Detailverbesserungen:

  • Das Verkaufsmenü wurde um eine Brieffunktion (Entwurf und finale) erweitert.
    Hierfür muss entsprechend eine neue Druckvorlage (letter.tex) erstellt werden.
    Eine erste Vorlage hierfür befindet sich im Standard-Druckvorlagen-Satz

  • Automatisches Auslagern beim Buchen einer Verkaufsrechnung: In der Mandanten-Konfiguration lässt sich im Reiter “Lager” auswählen, ob Artikel beim Buchen einer Verkaufsrechnung automatisch von den Standardlagerplätzen ausgelagert werden sollen. Dabei werden die Einstellungen für das Auslagern über Standardlagerplätze berücksichtigt.

  • HTML-Editor jetzt auch im Bemerkungsfeld von Einkaufs/Verkaufsbelegen eingebaut
  • %::myconfig wird nun auch dem JavaScript Client zur Verfügung gestellt

 

  • Preisregeln können priorisiert werden

  • Beim Anlegen von Lieferscheinen wird jetzt auch der Preis kurz versteckt
    ermittelt und mitgespeichert, damit beim Umwandeln in Rechnungen keine
    Überraschungen passieren. (Feature #41). Dies ist nützlich, wenn man den
    Workflow nicht mit Angebot oder Auftrag sondern mit einem Lieferschein
    beginnt.

Bugfixes:

  • Bugfix #51 Stammdaten → Waren → Preisinformationen → Blättern defekt
  • Bugfix #49 / trac 2848 Langtext-Popup erscheint nicht immer
  • Bugfix #48 ‘#’ wird nicht bei Artikelnummer in LaTeX-Templates ausgedruckt
  • Bugfix #47 Nicht mehr benötigte Trigger entfernt (check_inventory)
  • CSS für PartPicker repariert
  • Bug beim Parsen von benutzerdefinierten Variablen behoben (Commit 2b9e50ba72)

 

Rose Debugging in der console

So schick die Datenbankabfragen per Rose sind, will man doch ab und an schauen, was da im Hintergrund auf Datenbankebene passiert, also welche SQL-Queries eigentlich generiert werden.

Während man beim alten Code in der kivitendo.conf unter [debug] per
global_level = QUERY
noch alle SQL-Abfragen in der Logdatei protokollieren konnte, muß man bei Rose nun
dbix_log4perl = 1
einstellen, um die von Rose generierten Queries zu sehen. Das produziert dort auch immer unheimlich viel Ouput.

In der Console kann man bei Manager-Methoden einen debug-Parameter übergeben, wo das generierte SQL ebenfalls angezeigt wird:
my $invoices = SL::DB::Manager::Invoice->get_all( where => [ id => 962 ], debug => 1);
SELECT
t1.amount,
t1.cp_id,
t1.currency_id,
< ... snip ... >
t1.type
FROM
ar t1
WHERE
t1.id = ? (962)

Man kann aber auch das Logging explizit für alle Anfragen in der console Session (oder sogar beim Entwickeln von Test-Skripts) anstellen:

$Rose::DB::Object::Manager::Debug = 1;
$Rose::DB::Object::Debug = 1;

Ab dann sieht man direkt in der console, welche SQL-Abfragen im Hintergrund passieren, z.B. bei der Benutzung eines Filters:
SL::DB::Manager::Invoice->get_all(where => [ SL::DB::Manager::Invoice->type_filter('invoice') ]);

SELECT
t1.amount,
t1.cp_id,
t1.currency_id,
< … snip … >
t1.type
FROM
ar t1
WHERE
(
(
t1.storno = ? OR
t1.storno IS NULL
) AND
t1.amount >= ? AND
t1.invoice = ?
) (0, 0, 1)

Ein paar Beispiele zum selber Ausprobieren:

Schnell schauen, welche Abfragen mit with_objects oder require_objects generiert werden:

Alle Artikel, mit LEFT OUTER JOIN auf die Tabelle partsgroup
my $parts = SL::DB::Manager::Part->get_all( with_objects => [ 'partsgroup' ] );

Nur die Waren, die eine Warengruppe haben:
my $parts = SL::DB::Manager::Part->get_all( require_objects => [ 'partsgroup' ] );

Oder der Unterschied in der Abfrage, ob man einen Artikel per
my $part = SL::DB::Part->new( id => 962 )->load;
oder per
my $part = SL::DB::Manager::Part->find_by( id => 962 );
ausliest.

Reise Reise

Ich war ein paar Tage unterwegs und wollte jetzt die Reisekosten in kivitendo verbuchen.
In unserem Demo-Mandanten, der Steigmann-Werft, gibt es für diesen Fall noch kein Beispiel, deshalb will ich das hier nochmal dokumentieren.
Der Mehrwertsteuersatz für Übernachtung und Frühstück unterscheidet sich ja mittlerweile, und es gilt auch den Verpflegungsmehraufwand zu verbuchen.

Als Beispiel nehme ich den Angestellten Herr Müller, der für die Übernachtung 30€ inkl. Frühstück bezahlt, wobei 27€ auf die Übernachtung und 3€ auf das Frühstück entfallen, es geht um insgesamt 5 Übernachtungen und einem An- und Abreisetag.

In SKR04 gibt es dafür die Konten 6660 Reisekosten Arbeitnehmer Übernachtungsaufwand für das Zimmer und 6650 Reisekosten Arbeitnehmer für das Frühstück. Und da Herr Müller gerne alles vor Ort in bar bezahlt, und hinterher die Belege einreicht, haben wir für ihn auch in kivitendo ein eigenes Verbindlichkeitskonto 3638 Verbindlichkeiten Müller eingerichtet, damit die Firma immer weiß, wieviel sie ihm noch zurückzahlen muß.
In kivitendo würde man das als Dialogbuchung wie folgt erfassen:

Beim Verpflegungsaufwand setzt man 12€ pro Tag für normale Arbeitstage mit mehr als 8 Stunden oder Anreisetage an, und 24€ pro Tag bei Abwesenheit von 24h.
Herr Müller ist am Freitag angereist, hatte vier volle Tage vor Ort, und ist am Mittwoch wieder abgereist. Das macht 12 + 4*24 + 12 = 120€.
Bezahlt die Firma allerdings Herrn Müller vor Ort einige der Mahlzeiten, so gibt es Abzüge von dieser Pauschale, und zwar 20% für das Frühstück und jeweils 40% für Mittagessen und Abendessen, bezogen auf die Pauschale für 24h. Das macht beim Frühstück also einen Abzug von 4,80€ und Mittagessen und Abendessen von jeweils 9,60€.
Da die Firma nur das Frühstück bezahlt hat müssen von den 120€ also noch 5*4,80€ abgezogen werden, das macht dann insgesamt 96€. Das betreffende Konto heißt 6664 Reisekosten Arbeitnehmer Verpflegungsmehraufwand und wird wieder gegen das Verbindlichkeitskonto von Herr Müller verbucht.

Den aktuellen Saldo vom Verbindlichkeitskonto von Herrn Müller kann man sich jederzeit im Buchungsjournal, in der Bilanz oder in der SuSa anschauen. Den Ausgleich bucht man wieder per Dialogbuchung. In der Dialogbuchungsmaske wird der aktuelle Saldo des Kontos ebenfalls angezeigt, mit dem praktischen Hinweis, ob der Saldo im Soll oder Haben ist. In diesem Fall beträgt der Saldo von Konto 3638 246€ im Haben, so daß ich das Konto im Soll verbuchen muß, um das Konto zu “leeren”. Das Gegenkonto ist das Bankkonto, von dem aus ich überweise.

Ist Herr Müller mit der Bahn gefahren bucht man die Fahrkarten nach dem gleichen Schema wie oben, das Konto ist 6663 Reisekosten Arbeitnehmer, Fahrtkosten
.

Update: Die gesetzliche Regelung für den Verpflegungsmehraufwand findet sich übrigens in §9 Absatz 4a EStG.

Chemnitzer Linuxtage 2015

Die Chemnitzer Linuxtage haben am kommenden Wochenende wieder ein sehr schönes Vortragsprogramm zusammengestellt.

Ich bin mir gar nicht sicher, wie lange es her ist, aber auf jeden Fall über 10 Jahre, daß ich das letzte Mal die CLT besucht habe. Dieses Jahr ist es wieder soweit, wenn auch “nur” als Besucher.

Für alle kivi-Fans aus der Gegend, denen es zum Anwendertreffen am 16.4. zu weit ist, biete ich aber gerne an, sich am Samstag oder Sonntag zu verabreden, am Besten einfach vorab eine Mail schreiben, dann können wir das organisieren.

Oder sprecht mich einfach spontan an, ich bin dann der mit dem kivitendo T-Shirt.