tests hinzugefügt, suche nach rechnung.sty überarbeitet
- kpsewhich sucht nach rechnung.sty - prinf_failed kann optional ein string übergeben werden - neue funktionen fail_and_exit, get_link_target, check_rechnungsdaten - check_readable und check_binarys testen auf symbolische links - einige funktionen mit kommentaren versehen
This commit is contained in:
parent
c43c2cb7a1
commit
98a3abd1ee
160
rechnung.sh
160
rechnung.sh
|
@ -33,13 +33,14 @@ CUT_BIN=$(which cut 2>/dev/null || echo "cut")
|
||||||
DATE_BIN=$(which date 2>/dev/null || echo "date")
|
DATE_BIN=$(which date 2>/dev/null || echo "date")
|
||||||
TPUT_BIN=$(which tput 2>/dev/null || echo "tput")
|
TPUT_BIN=$(which tput 2>/dev/null || echo "tput")
|
||||||
PDFLATEX_BIN=$(which pdflatex 2>/dev/null || echo "pdflatex")
|
PDFLATEX_BIN=$(which pdflatex 2>/dev/null || echo "pdflatex")
|
||||||
|
KPSEWHICH_BIN=$(which kpsewhich 2>/dev/null || echo "kpsewhich")
|
||||||
GIT_BIN=$(which git 2>/dev/null || echo "git")
|
GIT_BIN=$(which git 2>/dev/null || echo "git")
|
||||||
LATEX_BIN=$(which latex 2>/dev/null || echo "latex")
|
LATEX_BIN=$(which latex 2>/dev/null || echo "latex")
|
||||||
RUBBER_BIN=$(which rubber 2>/dev/null || echo "rubber")
|
RUBBER_BIN=$(which rubber 2>/dev/null || echo "rubber")
|
||||||
# Nicht auf rubber prüfen; Programm ist optional
|
# Nicht auf rubber prüfen; Programm ist optional
|
||||||
# Nicht auf git prüfen; wird nur benötigt, wenn rechnung.sty nicht existiert.
|
# Nicht auf git prüfen; wird nur benötigt, wenn rechnung.sty nicht existiert.
|
||||||
# Nicht auf latex prüfen; wird nur benötigt, wenn rechnung.sty nicht texistiert.
|
# Nicht auf latex prüfen; wird nur benötigt, wenn rechnung.sty nicht texistiert.
|
||||||
EXECUTABLES_TO_CHECK="$BC_BIN $TR_BIN $SED_BIN $CUT_BIN $TPUT_BIN $DATE_BIN $PDFLATEX_BIN"
|
EXECUTABLES_TO_CHECK="$BC_BIN $TR_BIN $SED_BIN $CUT_BIN $TPUT_BIN $DATE_BIN $PDFLATEX_BIN $KPSEWHICH_BIN"
|
||||||
|
|
||||||
GENPDF=""
|
GENPDF=""
|
||||||
if [ -x "$RUBBER_BIN" ]; then
|
if [ -x "$RUBBER_BIN" ]; then
|
||||||
|
@ -52,7 +53,7 @@ fi
|
||||||
# Variablen definieren
|
# Variablen definieren
|
||||||
# --------------------
|
# --------------------
|
||||||
|
|
||||||
PROGRAMM_NAME=`basename $0`
|
PROGRAMM_NAME=$(basename $0)
|
||||||
PROGRAMM_VERSION="0.0.1"
|
PROGRAMM_VERSION="0.0.1"
|
||||||
VERBOSITY=1
|
VERBOSITY=1
|
||||||
STY_HOME="$HOME/texmf/tex/latex"
|
STY_HOME="$HOME/texmf/tex/latex"
|
||||||
|
@ -67,7 +68,6 @@ SEDFILE="sed.txt"
|
||||||
LINE_BUFFER=""
|
LINE_BUFFER=""
|
||||||
KEY_BUFFER=""
|
KEY_BUFFER=""
|
||||||
VALUE_BUFFER=""
|
VALUE_BUFFER=""
|
||||||
ERROR=0
|
|
||||||
KUNDE=""
|
KUNDE=""
|
||||||
ADRESSE=""
|
ADRESSE=""
|
||||||
ANREDE=""
|
ANREDE=""
|
||||||
|
@ -109,6 +109,8 @@ print_start() {
|
||||||
|
|
||||||
print_failed() {
|
print_failed() {
|
||||||
|
|
||||||
|
msg=$*
|
||||||
|
|
||||||
if [ "$VERBOSITY" -eq 0 ]; then
|
if [ "$VERBOSITY" -eq 0 ]; then
|
||||||
return
|
return
|
||||||
else
|
else
|
||||||
|
@ -117,6 +119,9 @@ print_failed() {
|
||||||
else
|
else
|
||||||
printf " Failed\n"
|
printf " Failed\n"
|
||||||
fi
|
fi
|
||||||
|
if [ ! -z "$msg" ]; then
|
||||||
|
print_error "$msg"
|
||||||
|
fi
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -189,52 +194,96 @@ print_error() {
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
|
failed_and_exit() {
|
||||||
|
|
||||||
|
print_failed
|
||||||
|
exit $*
|
||||||
|
}
|
||||||
|
|
||||||
# Diverse Checks
|
# Diverse Checks
|
||||||
# --------------
|
# --------------
|
||||||
|
|
||||||
check_readable() {
|
check_readable() {
|
||||||
|
|
||||||
|
# testet, ob die übergebene datei kein symlink ist, existiert und lesbar
|
||||||
|
# ist. schlägt einer der tests fehl, wird das programm beendet.
|
||||||
|
|
||||||
print_start "Datei $1 ist lesbar ..."
|
print_start "Datei $1 ist lesbar ..."
|
||||||
|
if test -h "$1"; then
|
||||||
|
target=$(get_link_target "$1")
|
||||||
|
print_failed "$1 ist ein symbolischer Link auf $target"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
if test -f "$1" && test -r "$1"; then
|
if test -f "$1" && test -r "$1"; then
|
||||||
print_ok
|
print_ok
|
||||||
else
|
else
|
||||||
print_failed
|
failed_and_exit 1
|
||||||
quit 1
|
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
check_sty() (
|
check_sty() (
|
||||||
|
|
||||||
|
# sucht in einer subshell nach dem paket rechnung.sty. gibt true oder
|
||||||
|
# false zurück.
|
||||||
|
|
||||||
print_start "Suche nach $STY_RECHNUNG ..."
|
print_start "Suche nach $STY_RECHNUNG ..."
|
||||||
rechnung=$(find "$STY_HOME" -type f -name "$STY_RECHNUNG")
|
kpsewhich "$STY_RECHNUNG" 2>&1 >/dev/null
|
||||||
if test ! -f "$rechnung"; then
|
if [ $? -eq 0 ]; then
|
||||||
print_failed
|
|
||||||
return 1
|
|
||||||
else
|
|
||||||
print_ok
|
print_ok
|
||||||
return 0
|
return 0
|
||||||
|
else
|
||||||
|
print_failed
|
||||||
|
return 1
|
||||||
fi
|
fi
|
||||||
)
|
)
|
||||||
|
|
||||||
check_binaries() {
|
check_binaries() (
|
||||||
|
|
||||||
program=""
|
# die funktion prüft in einer subshell, ob alle benötigten binaries
|
||||||
|
# installiert sind. sollte das binary ein symlink auf eine ander datei
|
||||||
|
# sein, wird geprüft, ob sich diese im PATH befindet und nicht ebenfalls
|
||||||
|
# ein symlink ist. schlägt eine der prüfungen fehl, wird das programm
|
||||||
|
# beendet.
|
||||||
|
|
||||||
|
program=
|
||||||
binaries=$*
|
binaries=$*
|
||||||
|
|
||||||
for program in $binaries; do
|
for program in $binaries; do
|
||||||
print_start "Suche nach $program ..."
|
print_start "Suche nach $program ..."
|
||||||
if test ! -x "$program"; then
|
if test ! -x "$program"; then
|
||||||
print_failed
|
print_failed "Das Programm $program wird benötigt, aber nicht gefunden."
|
||||||
print_error "Das Programm $program wird benötigt, aber nicht gefunden."
|
|
||||||
quit 3
|
quit 3
|
||||||
else
|
else
|
||||||
|
if [ -h "$program" ]; then
|
||||||
|
program=$(get_link_target $program)
|
||||||
|
fi
|
||||||
|
if ! which "$program" 2>&1 >/dev/null; then
|
||||||
|
print_failed "$program ist nicht im Pfad"
|
||||||
|
fi
|
||||||
print_ok
|
print_ok
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
}
|
)
|
||||||
|
|
||||||
|
get_link_target() (
|
||||||
|
|
||||||
|
# die funktion bekommt einen symbolischen link und folgt ihm bis zum
|
||||||
|
# ende. mit dem echo-befehl wird das ziel an die aufrufende funktion
|
||||||
|
# zurück gegeben.
|
||||||
|
|
||||||
|
program=$1
|
||||||
|
|
||||||
|
while [ -h "$program" ]; do
|
||||||
|
program=$(readlink $program)
|
||||||
|
done
|
||||||
|
echo "$program"
|
||||||
|
)
|
||||||
|
|
||||||
is_option() (
|
is_option() (
|
||||||
|
|
||||||
|
# die funktion überprüft in einer subshell, ob die übergebene zeile ein
|
||||||
|
# = als trennzeichen enthält. gibt ja oder falsch zurück.
|
||||||
|
|
||||||
line="$*"
|
line="$*"
|
||||||
|
|
||||||
if [ "${line#*=}" != "$line" ]; then
|
if [ "${line#*=}" != "$line" ]; then
|
||||||
|
@ -244,6 +293,43 @@ is_option() (
|
||||||
fi
|
fi
|
||||||
)
|
)
|
||||||
|
|
||||||
|
check_rechnunsdaten() (
|
||||||
|
|
||||||
|
# die funktion überprüft in einer subshell, ob alle variablen belegt
|
||||||
|
# sind. ist eine variable leer, wird der name der variablen ausgegeben
|
||||||
|
# und ein fehler (1) zurück gegeben.
|
||||||
|
|
||||||
|
print_start "Prüfe Rechnungsdaten ..."
|
||||||
|
if test -z "$KUNDE"; then
|
||||||
|
print_failed "Das Feld Kunde ist leer"
|
||||||
|
return 1
|
||||||
|
elif test -z "$ADRESSE"; then
|
||||||
|
print_failed "Das Feld Adresse ist leer"
|
||||||
|
return 1
|
||||||
|
elif test -z "$ANREDE"; then
|
||||||
|
print_failed "Das Feld Anrede ist leer"
|
||||||
|
return 1
|
||||||
|
elif test -z "$ANZAHL"; then
|
||||||
|
print_failed "Das Feld Anzahl ist leer"
|
||||||
|
return 1
|
||||||
|
elif test -z "$POSITION"; then
|
||||||
|
print_failed "Das Feld Position ist leer"
|
||||||
|
return 1
|
||||||
|
elif test -z "$SHORT"; then
|
||||||
|
print_failed "Das Feld Short ist leer"
|
||||||
|
return 1
|
||||||
|
elif test -z "$BETRAG"; then
|
||||||
|
print_failed "Das Feld Betrag ist leer"
|
||||||
|
return 1
|
||||||
|
elif test -z "$LFDNR"; then
|
||||||
|
print_failed "Das Feld LfdNr ist leer"
|
||||||
|
return 1
|
||||||
|
else
|
||||||
|
print_ok
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
|
)
|
||||||
|
|
||||||
# Whitespaces entfernen
|
# Whitespaces entfernen
|
||||||
# in Buffer speichern
|
# in Buffer speichern
|
||||||
# ---------------------
|
# ---------------------
|
||||||
|
@ -282,7 +368,7 @@ install_sty() (
|
||||||
check_binaries "$GIT_BIN $LATEX_BIN"
|
check_binaries "$GIT_BIN $LATEX_BIN"
|
||||||
print_start "Hole Repo von $STY_URL ..."
|
print_start "Hole Repo von $STY_URL ..."
|
||||||
|
|
||||||
if git clone $STY_URL >/dev/null 2>&1; then
|
if $GIT_BIN clone $STY_URL >/dev/null 2>&1; then
|
||||||
print_ok
|
print_ok
|
||||||
cd rechnung
|
cd rechnung
|
||||||
mkdir -p "$STY_HOME/rechnung/"
|
mkdir -p "$STY_HOME/rechnung/"
|
||||||
|
@ -295,19 +381,18 @@ install_sty() (
|
||||||
if cp rechnung.sty "$STY_HOME/rechnung/"; then
|
if cp rechnung.sty "$STY_HOME/rechnung/"; then
|
||||||
print_ok
|
print_ok
|
||||||
else
|
else
|
||||||
print_failed
|
failed_and_exit 3
|
||||||
exit 1
|
|
||||||
fi
|
fi
|
||||||
cd "$old_pwd"
|
cd "$old_pwd"
|
||||||
rm -rf rechnung/
|
rm -rf rechnung/
|
||||||
print_info "Paket $STY_RECHNUNG erfolgreich installiert"
|
print_info "Paket $STY_RECHNUNG erfolgreich installiert"
|
||||||
else
|
else
|
||||||
print_error "Installation fehlgeschlagen"
|
print_error "Installation fehlgeschlagen"
|
||||||
exit 5
|
exit 4
|
||||||
fi
|
fi
|
||||||
else
|
else
|
||||||
print_error "Klonen des Repos fehlgeschlagen"
|
print_error "Klonen des Repos fehlgeschlagen"
|
||||||
exit 6
|
exit 5
|
||||||
fi
|
fi
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -316,11 +401,10 @@ install_sty() (
|
||||||
|
|
||||||
reset_values() {
|
reset_values() {
|
||||||
|
|
||||||
print_info "Initialisiere Felder für Rechnung neu."
|
print_info "Beginne neue Rechnung"
|
||||||
LINE_BUFFER=""
|
LINE_BUFFER=""
|
||||||
KEY_BUFFER=""
|
KEY_BUFFER=""
|
||||||
VALUE_BUFFER=""
|
VALUE_BUFFER=""
|
||||||
ERROR=0
|
|
||||||
KUNDE=""
|
KUNDE=""
|
||||||
ADRESSE=""
|
ADRESSE=""
|
||||||
ANREDE=""
|
ANREDE=""
|
||||||
|
@ -349,11 +433,22 @@ set_value() {
|
||||||
betrag) BETRAG="$VALUE_BUFFER";;
|
betrag) BETRAG="$VALUE_BUFFER";;
|
||||||
lfdnr) LFDNR="$VALUE_BUFFER";;
|
lfdnr) LFDNR="$VALUE_BUFFER";;
|
||||||
short) SHORT="$VALUE_BUFFER";;
|
short) SHORT="$VALUE_BUFFER";;
|
||||||
*) print_warn "Unbekanntes Feld: $KEY_BUFFER"; ERROR=1;;
|
*) print_warn "Unbekanntes Feld: $KEY_BUFFER";;
|
||||||
esac
|
esac
|
||||||
}
|
}
|
||||||
|
|
||||||
make_invoice() {
|
make_invoice() (
|
||||||
|
|
||||||
|
# die funktion erstellt in einer subshell die rechnung. schlägt die
|
||||||
|
# prüfung der rechnungsdaten fehl, kehrt sie zur aufrufenden shell
|
||||||
|
# zurück. ansonst wird eine kopie des latex-templates erstellt, die
|
||||||
|
# darin befindlichen platzhalter durch die entsprechenden variablen zu
|
||||||
|
# ersetzen und das ganze zu kompilieren.
|
||||||
|
|
||||||
|
check_rechnunsdaten
|
||||||
|
if [ ! "$?" -eq 0 ]; then
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
|
||||||
dead_days="14"
|
dead_days="14"
|
||||||
if [ "$(date +%u)" -gt 5 ]; then
|
if [ "$(date +%u)" -gt 5 ]; then
|
||||||
|
@ -361,7 +456,6 @@ make_invoice() {
|
||||||
fi
|
fi
|
||||||
|
|
||||||
month_ascii=$(date '+%B')
|
month_ascii=$(date '+%B')
|
||||||
# inv_day=$(date '+%j')
|
|
||||||
inv_date=$(date '+%Y%m%d')
|
inv_date=$(date '+%Y%m%d')
|
||||||
inv_dead=$(date -d "+${dead_days}days" '+%d.\\,%m.\\,%Y')
|
inv_dead=$(date -d "+${dead_days}days" '+%d.\\,%m.\\,%Y')
|
||||||
rechnungsnummer="$inv_date--$LFDNR"
|
rechnungsnummer="$inv_date--$LFDNR"
|
||||||
|
@ -396,7 +490,7 @@ make_invoice() {
|
||||||
if [ -x "$RUBBER_BIN" ]; then
|
if [ -x "$RUBBER_BIN" ]; then
|
||||||
"$RUBBER_BIN" --clean "$filename"
|
"$RUBBER_BIN" --clean "$filename"
|
||||||
fi
|
fi
|
||||||
}
|
)
|
||||||
|
|
||||||
proced_ini_line() {
|
proced_ini_line() {
|
||||||
|
|
||||||
|
@ -417,12 +511,7 @@ proced_ini_line() {
|
||||||
|
|
||||||
# ende einer rechnung
|
# ende einer rechnung
|
||||||
elif [ "$line" = "[ende]" ]; then
|
elif [ "$line" = "[ende]" ]; then
|
||||||
if [ $ERROR -ne 0 ]; then
|
|
||||||
print_warn "Kunde \"$KUNDE\" enthält einen Fehler. Erstelle keine Rechung."
|
|
||||||
return
|
|
||||||
else
|
|
||||||
make_invoice
|
make_invoice
|
||||||
fi
|
|
||||||
|
|
||||||
# alle anderen zeilen
|
# alle anderen zeilen
|
||||||
else
|
else
|
||||||
|
@ -469,7 +558,7 @@ do
|
||||||
esac
|
esac
|
||||||
done
|
done
|
||||||
|
|
||||||
# Verschiedene Basic Checks
|
# Farbe aktivieren wenn vorhanden
|
||||||
if [ -n "$NUMBER_OF_COLORS" ] && [ "$NUMBER_OF_COLORS" -ge 8 ]; then
|
if [ -n "$NUMBER_OF_COLORS" ] && [ "$NUMBER_OF_COLORS" -ge 8 ]; then
|
||||||
COLORED_OUTPUT=1
|
COLORED_OUTPUT=1
|
||||||
fi
|
fi
|
||||||
|
@ -478,6 +567,7 @@ print_deko " ========================"
|
||||||
print_deko " = $PROGRAMM_NAME v$PROGRAMM_VERSION ="
|
print_deko " = $PROGRAMM_NAME v$PROGRAMM_VERSION ="
|
||||||
print_deko " ========================"
|
print_deko " ========================"
|
||||||
|
|
||||||
|
# Verschiedene Basic Checks
|
||||||
if [ "$(id -u)" -eq 0 ]; then
|
if [ "$(id -u)" -eq 0 ]; then
|
||||||
print_error "$0: Das Skript darf nicht als Root ausgeführt werden."
|
print_error "$0: Das Skript darf nicht als Root ausgeführt werden."
|
||||||
exit 1
|
exit 1
|
||||||
|
@ -486,10 +576,10 @@ check_binaries "$EXECUTABLES_TO_CHECK"
|
||||||
check_readable "$RECHNUNGSFILE"
|
check_readable "$RECHNUNGSFILE"
|
||||||
check_readable "$TEMPLATEFILE"
|
check_readable "$TEMPLATEFILE"
|
||||||
check_readable "$LCOFILE"
|
check_readable "$LCOFILE"
|
||||||
if ! check_sty "$STY_HOME"; then
|
if ! check_sty; then
|
||||||
print_warn "$STY_RECHNUNG nicht gefunden."
|
print_warn "Verwenden sie -i um $STY_RECHNUNG zu installieren"
|
||||||
if [ $INSTALL_LCO_FILE -eq 0 ]; then
|
if [ $INSTALL_LCO_FILE -eq 0 ]; then
|
||||||
print_info "Beende $PROGRAMM_NAME"
|
exit 7
|
||||||
else
|
else
|
||||||
install_sty
|
install_sty
|
||||||
fi
|
fi
|
||||||
|
|
Loading…
Reference in a new issue