Hibiscus UmBerWar - Umsätze / Umsatz-Warnung einfach per Email senden

Email von Umsatz-Berichten und Umsatzwarner für Hibiscus als Linux Shell-Script

 
CBC
Benutzer
Avatar
Geschlecht:
Herkunft: Bonn
Homepage: viaembedded.com
Beiträge: 81
Dabei seit: 06 / 2015
Betreff:

Hibiscus UmBerWar - Umsätze / Umsatz-Warnung einfach per Email senden

 · 
Gepostet: 16.06.2015 - 15:05 Uhr  ·  #1
UPDATE 17.06.2015

Neuere Version 1.0.2 mit folgenden Änderungen:

- Handling von leeren Feldern deutlich verbessert bzw, Fehler korrigiert

- Neuer Operator %: Mit dem Aufruf z.B. hibiscusumberwar.sh % 10 werden alle Umsätze (positiv u. negativ) der letzten 10 Tage ausgegeben

-----------------------------------------------



...und wieder mal war Scripting-Time. Dieses mal hat sie einen einfachen Umsatz-Berichterstatter, bzw. Umsatzwarner für Hibiscus beschert.

Daher auch der Name: Hibiscus UmBerWar

Das Script wurde auf CentOS 6 entwickelt, sollte aber grundsätzlich auf jedem Linux laufen. Die Red Hat nahen Distris wie RHEL Oracle Linux oder Fedora sollten alle out-of-the-box funktionieren.

Das Script prüft Umsätze des vergangenen Tages, oder einen Zeitraum vergangener Tage und generiert daraus einen Bericht, der per Email versendet wird.

Möchte man z.B. einen (Negativ-)Umsatzwarner einrichten, der bei Zahlungsabgängen von mehr als EUR 15000 alarmiert, so richtet man einfach einen Cron
Job um Mitternacht ein und gibt dort

hibiscusumberwar.sh -15000

ein. Und schon bekommt man eine Email, falls am Tage ein Betrag von 15000 oder höher (oder mehrere) abgegangen ist.

Will man sich jeden Freitag eine Email mit allen Zahlungseingängen der Woche schicken lassen, so stellt man für Samstag 0 Uhr einen Cron Job ein, der
wie folgt aufgerufen wird

hibiscusumberwar.sh 1 5

Hier nun das Script (auch als Anhang dieses Beitrags zum direkt herunterladen)

Voraussetzung: Hibiscus-Server (https://willuhn.de/products/hibiscus-server/) oder Jameica/Hibiscus, jeweils mit MySQL Datenbank. Hibiscus UmBerWar kann auch
auf einem Remote-Host ausgeführt werden. Es muss nicht auf der selben Maschine laufen wie Hibiscus selbst. Lediglich der Zugriff auf die MySQL Datenbank ist nötig.

Code

#!/bin/bash
#
# Hibiscus UmBerWar - Umsatzbericht / Umsatzwarner
#
# Autor: Christian B. Caldarone <caldarone@gmx.net>
#
# (C) 2015, Freie Software, GPLv3
#
# Umsätze größer bzw kleiner EUR X abfragen und ggf. Email mit
# den entspr. Umsatzdetails als Anhang senden
#
# In der Grundeinstellung werden alle Kontobewegungen vom vorgerigen
# Tag bis heute überprüft. Daher empfiehlt es sich, Hibiscus UmBerWar
# per Cron Eintrag jeweils um Mitternacht auszuführen.
#
# Die Anzahl der Tage für den Rückblick kann bei Aufruf des Hibiscus 
# Umsatzwarner mit übergeben werden, um z.B. immer am Montag um 0 Uhr
# einen Rückblick auf die letzte Woche zu generieren.  

#
# Voraussetzung: Hibiscus-Server oder Jameica/Hibiscus mit MySQL
# Konfiguration und aktiver, automatischer Bank-Synchronisation
#
# Aufruf: hibiscusumberwar.sh <Betrag> <Tage>
#
# Wird kein Betrag und keine Tage angegeben, werden alle Negativ-
# Umstätze, d.h. Zahlungsausgänge des vorgerigen Tages ausgegeben.
#
# Beispiel: hibiscusumberwar.sh -1000 gibt alle Zahlungsausgänge mit
#           mindestens EUR 1000 oder höher für den Zeitraum gestern
#           bis heute aus.
#
#           hibiscusumberwar.sh 500 5 gibt alle Zahlungseingänge mit
#           min EUR 500 oder höher der vergangenen 5 Tage aus.
#
#           hibiscusumberwar.sh % 10 gibt alle Zahlungseingänge und alle
#           Zahlungsausgänge der vergangenen 10 Tage aus.
#



version="Hibiscus UmBerWar v1.0.2"


# Überprüfen ob ein Betrag an dieses Script übergeben wurde, wenn nicht, dann Betrag auf null
# setzten um alle Negativumsätze abzufragen

if [ "$1" = "" ]; then

  Betrag_warn="0"

else

  Betrag_warn=$1

fi

# Anhand des Betrages, ermitteln ob negative, positive oder alle Umsätze abgefragt werden sollen
# und entsprechend den Operator für die MySQL Abfrage anpassen

if [ ! "$Betrag_warn" = "%" ]; then

  if [ $Betrag_warn -gt 0 ]; then

    mySQL_op=">="

  else

    mySQL_op="<="

  fi

else
  
  Betrag_warn="0"
  mySQL_op="<>"

fi


# Überprüfen ob die Anzahl der Tage an dieses Script übergeben wurde, wenn nicht, dann Tage auf eins
# setzten um nur den vorherigen Tag bis heute abzufragen

if [ "$2" = "" ]; then

  Tage_warn=1

else

  Tage_warn=$2

fi


# Parameter für den Email-Versand festlegen.
#
# Bitte entsprechend der eigenen Gegebenheiten anpassen!


email_sender="$USER@$HOSTNAME" # oder z.B email_sender="absender@gmx.de"

email_recipient="" # z.B. email_recipient="empfaenger@web.de"

email_subject="**HIBISCUS** Umsatzbericht für Betraege $mySQL_op EUR $Betrag_warn der letzten $Tage_warn Tage"


# Parameter für die Verbindung zum MySQL Server und die SQL-Abfrage festlegen.
#
# Bitte entsprechend der eigenen Gegebenheiten anpassen!

mySQL_user="hibiscus" # MySQL Datenbank-Benutzer für Datenbank hibiscus
mySQL_pass="hibiscus" # MySQL Datenbank-Benutzer Password für Datenbank hibiscus
mySQL_host="127.0.0.1" # Hier kann auch ein Remote-Host angegeben werden
mySQL_db="hibiscus" # Datenbankname, von Hibiscus vorgegeben

mySQL_query="SELECT empfaenger_konto , empfaenger_blz , empfaenger_name , betrag , datum, zweck, zweck2, zweck3 FROM umsatz WHERE betrag $mySQL_op $Betrag_warn AND datum > SUBDATE(CURDATE(),$Tage_warn) ORDER BY datum DESC;"


# Temoräre Datei erstellen, in der das Resultat der SQL Abfrage gespeichert wird

out=$(mktemp --tmpdir hibiscusalert.XXXXXXXXXX) || { echo "Fehler beim anlegen einer Temp-Datei."; exit 1; }


# Zur MySQL Datenbank verbinden, SQL Abfrage absetzen und Ausgabe abspeichern

echo $mySQL_query | mysql -N -h $mySQL_host -u $mySQL_user -p$mySQL_pass $mySQL_db | tr $'\t\2' $'\2\t' > $out 2>&1


# Ist bei der MySQL Abfrage ein Fehler aufgetreten? Wenn ja, dann mit Fehlermeldung beenden

[ $? -eq 0 ] || { echo "Fehler bei MySQL Abfrage" ; exit 1 ; }


# Ist die Abfrage negativ verlaufen? D.h. es gibt keine Umstätze, die dem Muster entsprechen, dann beenden.

[ $(stat -c %s $out) -gt 0 ] || exit 0


# Wurden entsprechende Umsätze gefunden, dann diese nun weiterverarbeiten und für den Email-Bericht aufbereiten...


# Festlegen, dass die Felder der Abfrage durch TAB getrennt wurden 

OLDIFS=$IFS
IFS=$'\2\t'

  # Trennlinie für Vervendung im Bericht festlegen

  separator="--------------------------------------------------------------------------------------------------------------" ;

  # Temoräre Dateien für den Email Text und den Anhang festlegen. Sollte es hierbei zu einem Fehler kommen,
  # dann direkt mit Fehlermeldung beenden

  email_body=$(mktemp --tmpdir hibiscusalert.XXXXXXXXXX) && \
  attachement=$(mktemp --tmpdir hibiscusalert.XXXXXXXXXX) \
  || { echo "Fehler beim anlegen einer Temp-Datei."; exit 1; }


  # Text für die Email verfassen
  
  { 

  echo "Automatisch generierte System-Email. Bitte nicht antworten." ;

  echo ;

  echo "Die im Anhang befindliche(n) Kontobewegung(en) der letzten $Tage_warn Tage haben den Betrag von $mySQL_op EUR $Betrag_warn ueberschritten" ;

  echo ;

  echo "Mit freundlichem Gruss"
  echo ;
  echo "Hibiscus UmBerWar";

    
  } > $email_body

  # Kopfzeile für den Bericht/Email-Anhang generieren

  {

  echo ;
  echo "*** $version ***" ;
  echo ;
  echo $separator ;

  } > $attachement


  # Umsatzdetails aus SQL-Ausgabe einlesen und Daten für den Bericht generieren

  while read -r -a hibiscus
  
  do
    
    {
      
    echo "Datum            :" ${hibiscus[4]} ;
    echo "Empfänger Name   :" ${hibiscus[2]} ;
    echo "Empfänger Konto  :" ${hibiscus[0]} ;
    echo "Empfänger BIC    :" ${hibiscus[1]} ;
    echo "Betrag (EUR)     :" ${hibiscus[3]} ;  
    echo -n "Verwendungszweck : " ;
    echo -e ${hibiscus[7]} | tr -d '\n' | sed 's/.CRED/\n                   CRED/' \
      | sed 's/.PURP/\n                   PURP/' | sed 's/.SVWZ/\n                   SVWZ/' ;
    echo ;
    echo $separator ;

    } >> $attachement
  

  done < $out
  
  IFS=$OLDIFS


  # Bericht mit Fußzeile abschließen

  {

  echo "Bericht generiert :" $(date) ;
  echo "Host: $HOSTNAME  Benutzer: $USER" ;
  echo $separator ;
  
  } >> $attachement

  # Die Temporäre Datei für den Bericht im Email-Anhang entsprechend umbenennen

  dir=$(dirname "$attachement")
  
  mv $attachement $dir"/Umsatzdetails.txt"
  
  attachement="$dir/Umsatzdetails.txt"

  
  # Nun alles direkt per Email versenden. Ist kein Empfänger angegeben, dann Bericht auf der Konsole ausgeben

  if [ ! "$email_recipient" = "" ]; then

    cat $email_body | mail -r $email_sender -s "$email_subject" -a $attachement $email_recipient 2>&1

  else
    
    cat $attachement

    echo
    echo "!!! Keine Email-Adresse im Script angegeben, daher Ausgabe im Terminal !!!"
    echo 
    echo "Bitte entsprechend im Script Variable 'email_recipient=' konfigurieren"
    echo

  fi

  retval=$? # Rückgabewert des mail bzw. incov Befehls zur Auswertung zwischenspeichern


  # Alle temporären Dateien löschen

  rm -f $email_body

  rm -f $out

  rm -f $attachement

  # Hat es einen Fehler beim Mail-Versand gegeben, dann diesen Anzeigen und beenden

  [ $retval -eq 0 ] || { echo "Fehler beim Mail-Versand oder Ausgabe des Berichts" ; exit 1 ; }

  # Ansonsten normal beenden

  exit 0




Viel Spaß damit!

Gruß

Christian


PS: Nicht vergessen, die MySQL Zugangsdaten und die Email Adresse im Script anzupassen ;)
Der an diesem Beitrag angefügte Anhang ist entweder nur im eingeloggten Zustand sichtbar oder die Berechtigung Deiner Benutzergruppe ist nicht ausreichend.
Benutzer
Avatar
Geschlecht: keine Angabe
Herkunft: Leipzig
Homepage: willuhn.de/
Beiträge: 10128
Dabei seit: 03 / 2005
Betreff:

Re: Hibiscus UmBerWar - Umsätze / Umsatz-Warnung einfach per Email senden

 · 
Gepostet: 16.06.2015 - 16:31 Uhr  ·  #2
Immer wieder erstaunlich, wie komplexe Sachen man mit Bash-Scripts so machen kann ;)
CBC
Benutzer
Avatar
Geschlecht:
Herkunft: Bonn
Homepage: viaembedded.com
Beiträge: 81
Dabei seit: 06 / 2015
Betreff:

Re: Hibiscus UmBerWar - Umsätze / Umsatz-Warnung einfach per Email senden

 · 
Gepostet: 16.06.2015 - 16:45 Uhr  ·  #3
Zitat geschrieben von hibiscus

Immer wieder erstaunlich, wie komplexe Sachen man mit Bash-Scripts so machen kann ;)


Hehe. Irgendwie habe ich aber auch einen Narren daran gefressen.

Wenn ich jetzt noch irgendwie per Shell Script Hibiscus so ansprechen kann, dass ich die in Hibiscus nativ hinterlegten Reports, z.B. Umsätze nach Kategorien triggern kann ... und die mir dann als PDF Datei ausgegeben werden wie aus der GUI heraus ... dann wäre ich noch einen Schritt weiter :)
Benutzer
Avatar
Geschlecht: keine Angabe
Herkunft: Leipzig
Homepage: willuhn.de/
Beiträge: 10128
Dabei seit: 03 / 2005
Betreff:

Re: Hibiscus UmBerWar - Umsätze / Umsatz-Warnung einfach per Email senden

 · 
Gepostet: 16.06.2015 - 16:46 Uhr  ·  #4
Zitat geschrieben von CBC

Wenn ich jetzt noch irgendwie per Shell Script Hibiscus so ansprechen kann, dass ich die in Hibiscus nativ hinterlegten Reports, z.B. Umsätze nach Kategorien triggern kann ... und die mir dann als PDF Datei ausgegeben werden wie aus der GUI heraus ... dann wäre ich noch einen Schritt weiter :)


Puh. Also da faellt mir nich wirklich eine Loesung ein. Sowas liesse sich wohl nur mit einem Jameica-Plugin umsetzen, welches dann direkt die Hibiscus-Funktionen nutzen kann.
CBC
Benutzer
Avatar
Geschlecht:
Herkunft: Bonn
Homepage: viaembedded.com
Beiträge: 81
Dabei seit: 06 / 2015
Betreff:

Re: Hibiscus UmBerWar - Umsätze / Umsatz-Warnung einfach per Email senden

 · 
Gepostet: 17.06.2015 - 12:41 Uhr  ·  #5
Habe eine neue Version 1.0.2 mit zwei kleinen Verbesserungen hochgeladen, bzw. das Original-Post oben angepasst.
Gewählte Zitate für Mehrfachzitierung:   0