installation von rechnung.sty hinzugefügt, ausgaben überarbeitet

This commit is contained in:
bernd 2021-05-05 11:50:12 +02:00
parent dbf8c5db6d
commit 4da2b81005

View file

@ -20,8 +20,12 @@ 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")
GIT_BIN=$(which git 2>/dev/null || echo "git")
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 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"
GENPDF="" GENPDF=""
@ -38,6 +42,9 @@ fi
PROGRAMM_NAME=$0 PROGRAMM_NAME=$0
PROGRAMM_VERSION="0.0.1" PROGRAMM_VERSION="0.0.1"
#VERBOSITY=0 #VERBOSITY=0
STY_HOME="$HOME/texmf/tex/latex"
STY_RECHNUNG="rechnung.sty"
STY_URL="https://github.com/tomka/rechnung"
RECHNUNGSFILE="rechnung.ini" RECHNUNGSFILE="rechnung.ini"
TEMPLATEFILE="template.ltx" TEMPLATEFILE="template.ltx"
SEDFILE="sed.txt" SEDFILE="sed.txt"
@ -66,14 +73,89 @@ BLUE="$(tput bold)$(tput setaf 4)"
NORMAL="$(tput bold)$(tput sgr0)" NORMAL="$(tput bold)$(tput sgr0)"
# Ausgabefunktionen für Terminal
# ------------------------------
print_start() {
msg=$*
if [ "$COLORED_OUTPUT" -eq 1 ]; then
printf "%s[+]%s %s" "$GREEN" "$NORMAL" "$msg"
else
printf " Failed"
fi
}
print_failed() {
if [ "$COLORED_OUTPUT" -eq 1 ]; then
printf "%s Failed%s\n" "$RED" "$NORMAL"
else
printf " Failed\n"
fi
}
print_ok() {
if [ "$COLORED_OUTPUT" -eq 1 ]; then
printf "%s OK%s\n" "$GREEN" "$NORMAL"
else
printf " OK\n"
fi
}
print_deko() {
msg=$*
if [ "$COLORED_OUTPUT" -eq 1 ]; then
echo "${BLUE}${msg}${NORMAL}"
else
echo "$msg"
fi
}
print_info() {
msg=$*
if [ "$COLORED_OUTPUT" -eq 1 ]; then
echo "${GREEN}[+]$NORMAL $msg"
else
echo "[-] $msg"
fi
}
print_warn() {
msg=$*
if [ "$COLORED_OUTPUT" -eq 1 ]; then
echo "${YELLOW}[-]$NORMAL $msg"
else
echo "[-] $msg"
fi
}
print_error() {
msg=$*
if [ "$COLORED_OUTPUT" -eq 1 ]; then
echo "${RED}[-]$NORMAL $msg"
else
echo "[-] $msg"
fi
}
# Diverse Checks # Diverse Checks
# -------------- # --------------
check_readable() { check_readable() {
printf "\n[+] Datei %s ist lesbar ..." "$1" print_start "Datei $1 ist lesbar ..."
if [ -f "$1" ] && [ -r "$1" ] if [ -f "$1" ] && [ -r "$1" ]; then
then
print_ok print_ok
else else
print_failed print_failed
@ -81,16 +163,29 @@ check_readable() {
fi fi
} }
check_sty() (
print_start "Suche nach $STY_RECHNUNG ..."
rechnung=$(find "$STY_HOME" -type f -name "$STY_RECHNUNG")
if [ "$rechnung" == "" ]; then
print_failed
return 1
else
print_ok
return 0
fi
)
check_binaries() { check_binaries() {
program="" program=""
binaries=$* binaries=$*
for program in $binaries; do for program in $binaries; do
printf "\n[+] Suche nach Programm %s ..." "$program" print_start "Suche nach $program ..."
if [ ! -x "$program" ]; then if [ ! -x "$program" ]; then
print_failed print_failed
printf "\n[-] Das Programm \"%s\" wird benötigt, aber nicht gefunden." "$program" print_error "Das Programm $program wird benötigt, aber nicht gefunden."
quit 3 quit 3
else else
print_ok print_ok
@ -109,39 +204,8 @@ is_option() (
fi fi
) )
# Ausgaben im Terminal
# --------------------
print_failed() {
if [ "$COLORED_OUTPUT" -eq 1 ]; then
printf "%s Failed%s" "$RED" "$NORMAL"
else
printf " Failed"
fi
}
print_ok() {
if [ "$COLORED_OUTPUT" -eq 1 ]; then
printf "%s OK%s" "$GREEN" "$NORMAL"
else
printf " OK"
fi
}
print_warn() {
msg=$*
if [ "$COLORED_OUTPUT" -eq 1 ]; then
echo "${YELLOW}[-]$NORMAL $msg"
else
echo "[-] $msg"
fi
}
# Whitespaces entfernen # Whitespaces entfernen
# in Buffer speichern
# --------------------- # ---------------------
trim_line() { trim_line() {
@ -168,10 +232,58 @@ trim_value() {
set +f set +f
} }
# LaTeX-Paket rechnung.sty installieren
# -------------------------------------
install_sty() (
old_pwd=$(pwd)
read -p " LaTeX Paket $STY_RECHNUNG installieren? (y/N): "
if [ "$REPLY" == "y" ] || [ "$REPLY" == "Y" ] || [ "$REPLY" == "j" ] || [ "$REPLY" == "J" ]
then
check_binaries "$GIT_BIN $LATEX_BIN"
print_start "Hole Repo von $STY_URL ..."
git clone $STY_URL >/dev/null 2>&1
if [ "$?" -eq 0 ]; then
print_ok
cd rechnung
mkdir -p "$STY_HOME/rechnung/"
print_start "Kompiliere $STY_RECHNUNG ..."
$LATEX_BIN rechnung.ins >/dev/null 2>&1
if [ "$?" -eq 0 ]; then
print_ok
print_start "Kopiere $STY_RECHNUNG nach $STY_HOME/rechnung ..."
cp rechnung.sty "$STY_HOME/rechnung/"
if [ "$?" -eq 0 ]; then
print_ok
else
print_failed
exit 1
fi
cd $old_pwd
rm -rf rechnung/
print_info "Paket $STY_RECHNUNG erfolgreich installiert"
else
print_error "Installation fehlgeschlagen"
exit 5
fi
else
print_error "Klonen des Repos fehlgeschlagen"
exit 6
fi
else
print_info "Beende Progrann"
exit 7
fi
)
# wenn ein neuer Kunde beginnt, alle Variablen neu initialisieren
# ---------------------------------------------------------------
reset_values() { reset_values() {
printf "\n[+] Initialisiere Felder für Rechnung neu." print_info "Initialisiere Felder für Rechnung neu."
LINE_BUFFER="" LINE_BUFFER=""
KEY_BUFFER="" KEY_BUFFER=""
VALUE_BUFFER="" VALUE_BUFFER=""
@ -186,6 +298,8 @@ reset_values() {
LFDNR="" LFDNR=""
} }
set_value() { set_value() {
key=$(echo "$*" | $CUT_BIN -d "=" -f1) key=$(echo "$*" | $CUT_BIN -d "=" -f1)
@ -223,7 +337,7 @@ make_invoice() {
buffer="$KUNDE; $ADRESSE" buffer="$KUNDE; $ADRESSE"
anschrift="$(echo "$buffer" | sed 's/; /\\\\\\\\\\\\\\ /g')" anschrift="$(echo "$buffer" | sed 's/; /\\\\\\\\\\\\\\ /g')"
printf "\n[+] Erstelle Rechnung: %s" "$filename" print_info "Erstelle Rechnung: $filename"
{ {
printf "s!#SUBJECT#!%s!\n" "$subject" printf "s!#SUBJECT#!%s!\n" "$subject"
printf "s!#ANREDE#!%s!\n" "$ANREDE" printf "s!#ANREDE#!%s!\n" "$ANREDE"
@ -238,9 +352,9 @@ make_invoice() {
$SED_BIN -i -f "$SEDFILE" "$filename" $SED_BIN -i -f "$SEDFILE" "$filename"
if ! $GENPDF "$filename"; then if ! $GENPDF "$filename"; then
echo "[-] Rechnung fehlgeschlagen" print_error "Rechnung fehlgeschlagen"
else else
echo "[+] Rechnung erfolgreich erstellt" print_info "Rechnung erfolgreich erstellt"
fi fi
if [ -x "$RUBBER_BIN" ]; then if [ -x "$RUBBER_BIN" ]; then
@ -277,8 +391,7 @@ proced_ini_line() {
# alle anderen zeilen # alle anderen zeilen
else else
if is_option "$line" if is_option "$line"; then
then
set_value "$line" set_value "$line"
else else
print_warn "Invalid syntax: $line" print_warn "Invalid syntax: $line"
@ -293,26 +406,34 @@ quit() {
exit 1 exit 1
} }
# --- Programmstart --- # # --- Programmstart --- #
# --------------------- # # --------------------- #
echo "==================="
echo "= $PROGRAMM_NAME v$PROGRAMM_VERSION ="
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
print_deko " ========================"
print_deko " = $PROGRAMM_NAME v$PROGRAMM_VERSION ="
print_deko " ========================"
if [ "$(id -u)" -eq 0 ]; then if [ "$(id -u)" -eq 0 ]; then
echo "$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
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" if check_sty "$STY_HOME"; then
continue
else
print_warn "$STY_RECHNUNG nicht gefunden."
install_sty
fi
exit
# Kundendatei einlesen und rechnungen erstellen # Kundendatei einlesen und rechnungen erstellen
while IFS= read -r rawline while IFS= read -r rawline