This commit is contained in:
bernd 2021-05-03 22:52:46 +02:00
commit bc858aba61

View file

@ -24,7 +24,7 @@ RUBBER_BIN=$(which rubber 2>/dev/null || echo "rubber")
EXECUTABLES_TO_CHECK="$BC_BIN $TR_BIN $SED_BIN $CUT_BIN $TPUT_BIN $DATE_BIN $PDFLATEX_BIN $RUBBER_BIN" EXECUTABLES_TO_CHECK="$BC_BIN $TR_BIN $SED_BIN $CUT_BIN $TPUT_BIN $DATE_BIN $PDFLATEX_BIN $RUBBER_BIN"
GENPDF="" GENPDF=""
if [ -x $RUBBER_BIN ]; then if [ -x "$RUBBER_BIN" ]; then
GENPDF="$RUBBER_BIN -d " GENPDF="$RUBBER_BIN -d "
else else
GENPDF="$PDFLATEX_BIN -halt-on-error " GENPDF="$PDFLATEX_BIN -halt-on-error "
@ -58,11 +58,11 @@ LFDNR=""
NUMBER_OF_COLORS=$($TPUT_BIN colors) NUMBER_OF_COLORS=$($TPUT_BIN colors)
COLORED_OUTPUT=0 COLORED_OUTPUT=0
RED="\\033[1;31m" RED="$(tput bold)$(tput setaf 1)"
GREEN="\\033[1;32m" GREEN="$(tput bold)$(tput setaf 2)"
YELLOW="\\033[1;33m" YELLOW="$(tput bold)$(tput setaf 3)"
BLUE="\\033[1;34m" BLUE="$(tput bold)$(tput setaf 4)"
NORMAL="\\033[0;39m" NORMAL="$(tput bold)$(tput sgr0)"
# Diverse Checks # Diverse Checks
@ -70,7 +70,7 @@ NORMAL="\\033[0;39m"
check_readable() { check_readable() {
printf "\n[+] Datei \"$1\" ist lesbar ..." printf "\n[+] Datei %s ist lesbar ..." "$1"
if [ -f "$1" ] && [ -r "$1" ] if [ -f "$1" ] && [ -r "$1" ]
then then
print_ok print_ok
@ -82,14 +82,14 @@ check_readable() {
check_binaries() { check_binaries() {
local program="" program=""
local binaries=$* binaries=$*
for program in $binaries; do for program in $binaries; do
printf "\n[+] Suche nach Programm $program ..." printf "\n[+] Suche nach Programm %s ..." "$program"
if [ ! -x "$program" ]; then if [ ! -x "$program" ]; then
print_failed print_failed
printf "\n[-] Das Programm \"$program\" wird benötigt, aber nicht gefunden." printf "\n[-] Das Programm \"%s\" wird benötigt, aber nicht gefunden." "$program"
quit 3 quit 3
else else
print_ok print_ok
@ -99,7 +99,7 @@ check_binaries() {
is_option() ( is_option() (
local line="$*" line="$*"
if [ "${line#*=}" != "$line" ]; then if [ "${line#*=}" != "$line" ]; then
return 0 return 0
@ -114,7 +114,7 @@ is_option() (
print_failed() { print_failed() {
if [ "$COLORED_OUTPUT" -eq 1 ]; then if [ "$COLORED_OUTPUT" -eq 1 ]; then
printf "$RED Failed$NORMAL" printf "%s Failed%s" "$RED" "$NORMAL"
else else
printf " Failed" printf " Failed"
fi fi
@ -123,7 +123,7 @@ print_failed() {
print_ok() { print_ok() {
if [ "$COLORED_OUTPUT" -eq 1 ]; then if [ "$COLORED_OUTPUT" -eq 1 ]; then
printf "$GREEN OK$NORMAL" printf "%s OK%s" "$GREEN" "$NORMAL"
else else
printf " OK" printf " OK"
fi fi
@ -131,12 +131,12 @@ print_ok() {
print_warn() { print_warn() {
local msg=$* msg=$*
if [ "$COLORED_OUTPUT" -eq 1 ]; then if [ "$COLORED_OUTPUT" -eq 1 ]; then
echo -e "$YELLOW[-]$NORMAL $msg" echo "$YELLOW[-]$NORMAL $msg"
else else
echo -e "[-] $msg" echo "[-] $msg"
fi fi
} }
@ -146,7 +146,7 @@ print_warn() {
trim_line() { trim_line() {
set -f set -f
set -- $* set -- "$*"
LINE_BUFFER=$(printf '%s' "$*") LINE_BUFFER=$(printf '%s' "$*")
set +f set +f
} }
@ -154,7 +154,7 @@ trim_line() {
trim_key() { trim_key() {
set -f set -f
set -- $* set -- "$*"
KEY_BUFFER=$(printf '%s' "$*") KEY_BUFFER=$(printf '%s' "$*")
set +f set +f
} }
@ -162,7 +162,7 @@ trim_key() {
trim_value() { trim_value() {
set -f set -f
set -- $* set -- "$*"
VALUE_BUFFER=$(printf '%s' "$*") VALUE_BUFFER=$(printf '%s' "$*")
set +f set +f
} }
@ -170,7 +170,7 @@ trim_value() {
reset_values() { reset_values() {
echo -e "\n[+] Initialisiere Felder für Rechnung neu." printf "\n[+] Initialisiere Felder für Rechnung neu."
LINE_BUFFER="" LINE_BUFFER=""
KEY_BUFFER="" KEY_BUFFER=""
VALUE_BUFFER="" VALUE_BUFFER=""
@ -187,11 +187,11 @@ reset_values() {
set_value() { set_value() {
local key=$(echo "$*" | $CUT_BIN -d "=" -f1) key=$(echo "$*" | $CUT_BIN -d "=" -f1)
local value=$(echo "$*" | $CUT_BIN -d "=" -f2) value=$(echo "$*" | $CUT_BIN -d "=" -f2)
trim_key $key trim_key "$key"
trim_value $value trim_value "$value"
case $KEY_BUFFER in case $KEY_BUFFER in
kunde) KUNDE="$VALUE_BUFFER";; kunde) KUNDE="$VALUE_BUFFER";;
adresse) ADRESSE="$VALUE_BUFFER";; adresse) ADRESSE="$VALUE_BUFFER";;
@ -207,20 +207,20 @@ set_value() {
make_invoice() { make_invoice() {
local dead_days="14" dead_days="14"
if [ $(date +%u) -gt 5 ]; then if [ "$(date +%u)" -gt 5 ]; then
dead_days="16" dead_days="16"
fi fi
local month_ascii=$(date '+%B') month_ascii=$(date '+%B')
local inv_day=$(date '+%j') inv_day=$(date '+%j')
local inv_date=$(date '+%Y%m%d') inv_date=$(date '+%Y%m%d')
local inv_dead=$(date -d "+${dead_days}days" '+%d.\\\\,%m.\\\\,%Y') inv_dead=$(date -d "+${dead_days}days" '+%d.\\\\,%m.\\\\,%Y')
local rechnungsnummer="$inv_date--$LFDNR" rechnungsnummer="$inv_date--$LFDNR"
local subject="Rechnung zu $SHORT" subject="Rechnung zu $SHORT"
local filename="$(date '+%Y%m%d')_Rechnung_$(echo "$month_ascii")_$(echo "$KUNDE" | $TR_BIN " " "_").ltx" filename="$(date '+%Y%m%d')_Rechnung_$(echo "$month_ascii")_$(echo "$KUNDE" | $TR_BIN " " "_").ltx"
local buffer="$KUNDE; $ADRESSE" buffer="$KUNDE; $ADRESSE"
local anschrift="$(echo "$buffer" | sed 's/; /\\\\\\\\\\\\\\ /g')" anschrift="$(echo "$buffer" | sed 's/; /\\\\\\\\\\\\\\ /g')"
echo "[+] Erstelle Rechnung: $filename" echo "[+] Erstelle Rechnung: $filename"
echo -n "s!#SUBJECT#!" >$SEDFILE; echo "$subject!" >>$SEDFILE echo -n "s!#SUBJECT#!" >$SEDFILE; echo "$subject!" >>$SEDFILE
@ -231,11 +231,11 @@ make_invoice() {
echo -n "s!#POSITION#!" >>$SEDFILE; echo "$POSITION!" >>$SEDFILE echo -n "s!#POSITION#!" >>$SEDFILE; echo "$POSITION!" >>$SEDFILE
echo -n "s!#BETRAG#!" >>$SEDFILE; echo "$BETRAG!" >>$SEDFILE echo -n "s!#BETRAG#!" >>$SEDFILE; echo "$BETRAG!" >>$SEDFILE
echo -n "s!#DEADLINE#!" >>$SEDFILE; echo "$inv_dead!" >>$SEDFILE echo -n "s!#DEADLINE#!" >>$SEDFILE; echo "$inv_dead!" >>$SEDFILE
cp $TEMPLATEFILE $filename cp "$TEMPLATEFILE" "$filename"
$SED_BIN -i -f $SEDFILE $filename $SED_BIN -i -f "$SEDFILE" "$filename"
$GENPDF $filename $GENPDF "$filename"
if [ -x $RUBBER_BIN ]; then if [ -x "$RUBBER_BIN" ]; then
$RUBBER_BIN --clean $filename "$RUBBER_BIN" --clean "$filename"
fi fi
if [ $? -eq 0 ]; then if [ $? -eq 0 ]; then
@ -247,8 +247,8 @@ make_invoice() {
proced_ini_line() { proced_ini_line() {
local line=$* line=$*
local first=$(echo "$line" | cut -c1-1) first=$(echo "$line" | cut -c1-1)
# leerzeilen ignorieren # leerzeilen ignorieren
if [ "$line" = "" ]; then if [ "$line" = "" ]; then
@ -273,10 +273,10 @@ proced_ini_line() {
# alle anderen zeilen # alle anderen zeilen
else else
is_option $line is_option "$line"
if [ $? -eq 0 ] if [ $? -eq 0 ]
then then
set_value $line set_value "$line"
else else
print_warn "Invalid syntax: $line" print_warn "Invalid syntax: $line"
fi fi
@ -284,9 +284,10 @@ proced_ini_line() {
} }
quit() { quit() {
printf "\n$BLUE" printf "\n"
printf "[-] Exit$NORMAL\n" print "$BLUE"
exit $1 printf "[-] Exit%s\n" "$NORMAL"
exit 1
} }
@ -297,24 +298,24 @@ echo "= Rechnung v$PROGRAMM_VERSION ="
echo "===================" echo "==================="
# Verschiedene Basic Checks # Verschiedene Basic Checks
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
if [ $(id -u) -eq 0 ]; then if [ "$(id -u)" -eq 0 ]; then
echo "$0: Das Skript darf nicht als Root ausgeführt werden." echo "$0: Das Skript darf nicht als Root ausgeführt werden."
exit 1 exit 1
fi fi
check_binaries $EXECUTABLES_TO_CHECK check_binaries "$EXECUTABLES_TO_CHECK"
check_readable $RECHNUNGSFILE check_readable "$RECHNUNGSFILE"
check_readable $TEMPLATEFILE check_readable "$TEMPLATEFILE"
printf "\n" printf "\n"
# Kundendatei einlesen und rechnungen erstellen # Kundendatei einlesen und rechnungen erstellen
while IFS= read -r rawline while IFS= read -r rawline
do do
trim_line $rawline trim_line "$rawline"
proced_ini_line $LINE_BUFFER proced_ini_line "$LINE_BUFFER"
done <$RECHNUNGSFILE done < "$RECHNUNGSFILE"