Compare commits

..

No commits in common. "main" and "main" have entirely different histories.
main ... main

7 changed files with 112 additions and 272 deletions

3
.gitmodules vendored
View file

@ -1,3 +0,0 @@
[submodule "rechnung_sty"]
path = rechnung_sty
url = https://git.nr18.space/qbi/rechnung.sty

View file

@ -1,12 +1,13 @@
TODO TODO
---- ----
* Bessere Fehlerkontrolle (besonders beim Einlesen) * Bessere Fehlerkontrolle
* Längenprüfung * Ausgabe (besonders farbige) im Terminal verbessern.
* Backticks * Ausgabe deaktivierbar machen.
* Parameterübergabe um einzelne Kunden zu bearbeiten.
* Parameter für den Versand der Rechnung.
* Parameterübergabe für ein Ausgabeverzeichnis. * Parameterübergabe für ein Ausgabeverzeichnis.
* Ansonsten vielleicht PDF verschieben * Ansonsten vielleicht PDF verschieben
* Nicht mehr benötigte Dateien (*.log, *.aux, etc.) der Rechnung löschen. * Nicht mehr benötigte Dateien (*.log, *.aux, etc.) der Rechnung löschen.
* Den Begleittext im Latex-File durch eine Variable ersetzen. * Den Begleittext dürch eine Variable ersetzen.
* Das Program in einem temporären Verzeichnis arbeiten lassen.

View file

@ -15,34 +15,19 @@ Latexcompiler eine Rechnung im PDF-Format erstellt.
Installation Installation
------------ ------------
Kopieren Sie die Dateien template.ltx, absender.lco, rechnung.ini und Kopieren Sie die Dateien template.ltx, octorech.lco, rechnung.ini und
rechnung.{sh|py} in ein Verzeichnis Ihrer Wahl. Passen Sie die Dateien rechnung.{sh|py} in ein Verzeichnis Ihrer Wahl. Passen Sie die Dateien
rechnung.ini und absender.lco an Ihre Bedürfnisse an. rechnung.ini und octorech.lco an Ihre Bedürfnisse an.
Optionen Optionen
-------- --------
-h -h
Gibt eine kurze Hilfe aus und beendet das Programm. Gibt eine kurze Hilfe aus und beendet das Programm
-f kundendatei -f kundendatei
Die Kundendaten werden aus 'kundendatei' gelesen. Die Kundendaten werden aus 'kundendatei' gelesen und 'rechnung.ini' wird
ignoriert.
-i
Installiert bei Bedarf das Latex-Paket rechnung.sty. Das Paket wird aus
dem Repo geklont, mittels latex gebaut und in das Verzeichnis
$HOME/texmf/latex/tex/rechnung/ kopiert.
-l lco-datei
Verwendet 'lco-datei' für verschiedene Variablen des Absenders.
-q
Es werden nur noch Fehlermeldungen ausgegeben.
-v
Zeigt die Programmversion an.

View file

@ -1,13 +1,12 @@
# file: rechnung.ini # file: rechnung.ini
# #
# Bei adresse1 müssen an jedem Zeilenumbruch zwei Semikola (;;) stehen. Dies sorgt dafür, dass im # Bei adresse1 muss am Ende ein Semikolon (;) stehen. Dies sorgt dafür, dass im
# LaTeX-Code dies durch zwei Backslashes ersetzt wird. # LaTeX-Code dies durch zwei Backslashes ersetzt wird.
[start] [start]
kunde=Firma A kunde=Firma A
adresse= Strasse A;; 012345 Stadt A;; adresse1= Strasse A; 012345 Stadt A;
anrede=Sehr geehrte Damen und Herren, anrede=Sehr geehrte Damen und Herren,
einleitung=anbei die Rechnung
anzahl=1 anzahl=1
position=Dienstleistung A mit etwas mehr Text position=Dienstleistung A mit etwas mehr Text
short=Leistung A short=Leistung A
@ -17,9 +16,8 @@ lfdnr=1
[start] [start]
kunde=Firma B kunde=Firma B
adresse=Personalabteilung;; Frau B;; Strasse B;; 01234 Stadt B;; adresse=Personalabteilung; Frau B; Strasse B; 01234 Stadt B;
anrede=Sehr geehrte Frau B, anrede=Sehr geehrte Frau B,
einleitung=Wie in Vertrag 08/15 vereibart berechne ich
anzahl=11 anzahl=11
position=Dienstleistung B mit mehr noch viel Text position=Dienstleistung B mit mehr noch viel Text
short=Leistung B short=Leistung B
@ -29,9 +27,8 @@ lfdnr=1
[start] [start]
kunde=Herr C kunde=Herr C
adresse=Strasse C;; 12345 Stadt C;; adresse=Strasse C; 12345 Stadt C;
anrede=Sehr geehrter Herr C, anrede=Sehr geehrter Herr C,
einleitung=anbei die Rechnung
anzahl=1 anzahl=1
position=Dienstleistung C mit ganzen vielen Nebenpositionen damit in der Tabelle mehrere Zeilen sind position=Dienstleistung C mit ganzen vielen Nebenpositionen damit in der Tabelle mehrere Zeilen sind
short=Leistung C short=Leistung C

View file

@ -1,4 +1,4 @@
#!/bin/sh - #!/bin/sh
# file: rechnung.sh # file: rechnung.sh
# date: 02.05.2021 # date: 02.05.2021
@ -10,19 +10,6 @@
set -u set -u
set -e set -e
# ein paar Sicherheitsvorkehrungen
# --------------------------------
OLDIFS=$IFS
IFS=' '
unset -f command
unset -f unalias
\unalias -a
OLDPATH=$PATH
PATH=/bin:/usr/bin
export PATH
# Benötigte Programme # Benötigte Programme
# ------------------- # -------------------
@ -33,14 +20,13 @@ 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 $KPSEWHICH_BIN" EXECUTABLES_TO_CHECK="$BC_BIN $TR_BIN $SED_BIN $CUT_BIN $TPUT_BIN $DATE_BIN $PDFLATEX_BIN"
GENPDF="" GENPDF=""
if [ -x "$RUBBER_BIN" ]; then if [ -x "$RUBBER_BIN" ]; then
@ -53,26 +39,26 @@ 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=0
STY_HOME="$HOME/texmf/tex/latex" STY_HOME="$HOME/texmf/tex/latex"
STY_RECHNUNG="rechnung.sty" STY_RECHNUNG="rechnung.sty"
STY_URL="https://github.com/tomka/rechnung"
RECHNUNGSFILE="rechnung.ini" RECHNUNGSFILE="rechnung.ini"
TEMPLATEFILE="template.ltx" TEMPLATEFILE="template.ltx"
LCOFILE="absender.lco" LCOFILE="absender.lco"
LCO=$(basename $LCOFILE .lco) LCO=$(basename $LCOFILE .lco)
INSTALL_LCO_FILE=0
SEDFILE="sed.txt" SEDFILE="sed.txt"
LINE_BUFFER="" LINE_BUFFER=""
KEY_BUFFER="" KEY_BUFFER=""
VALUE_BUFFER="" VALUE_BUFFER=""
ERROR=0
KUNDE="" KUNDE=""
ADRESSE="" ADRESSE=""
ANREDE="" ANREDE=""
ANZAHL="" ANZAHL=""
POSITION="" POSITION=""
EINLEITUNG=""
SHORT="" SHORT=""
BETRAG="" BETRAG=""
LFDNR="" LFDNR=""
@ -96,45 +82,28 @@ print_start() {
msg=$* msg=$*
if [ "$VERBOSITY" -eq 0 ]; then if [ "$COLORED_OUTPUT" -eq 1 ]; then
return printf "%s[+]%s %s" "$GREEN" "$NORMAL" "$msg"
else else
if [ "$COLORED_OUTPUT" -eq 1 ]; then printf " Failed"
printf "%s[+]%s %s" "$GREEN" "$NORMAL" "$msg"
else
printf " Failed"
fi
fi fi
} }
print_failed() { print_failed() {
msg=$* if [ "$COLORED_OUTPUT" -eq 1 ]; then
printf "%s Failed%s\n" "$RED" "$NORMAL"
if [ "$VERBOSITY" -eq 0 ]; then
return
else else
if [ "$COLORED_OUTPUT" -eq 1 ]; then printf " Failed\n"
printf "%s Failed%s\n" "$RED" "$NORMAL"
else
printf " Failed\n"
fi
if [ -n "$msg" ]; then
print_error "$msg"
fi
fi fi
} }
print_ok() { print_ok() {
if [ "$VERBOSITY" -eq 0 ]; then if [ "$COLORED_OUTPUT" -eq 1 ]; then
return printf "%s OK%s\n" "$GREEN" "$NORMAL"
else else
if [ "$COLORED_OUTPUT" -eq 1 ]; then printf " OK\n"
printf "%s OK%s\n" "$GREEN" "$NORMAL"
else
printf " OK\n"
fi
fi fi
} }
@ -142,14 +111,10 @@ print_deko() {
msg=$* msg=$*
if [ "$VERBOSITY" -eq 0 ]; then if [ "$COLORED_OUTPUT" -eq 1 ]; then
return echo "${BLUE}${msg}${NORMAL}"
else else
if [ "$COLORED_OUTPUT" -eq 1 ]; then echo "$msg"
echo "${BLUE}${msg}${NORMAL}"
else
echo "$msg"
fi
fi fi
} }
@ -157,14 +122,10 @@ print_info() {
msg=$* msg=$*
if [ "$VERBOSITY" -eq 0 ]; then if [ "$COLORED_OUTPUT" -eq 1 ]; then
return echo "${GREEN}[+]$NORMAL $msg"
else else
if [ "$COLORED_OUTPUT" -eq 1 ]; then echo "[-] $msg"
echo "${GREEN}[+]$NORMAL $msg"
else
echo "[-] $msg"
fi
fi fi
} }
@ -172,14 +133,10 @@ print_warn() {
msg=$* msg=$*
if [ "$VERBOSITY" -eq 0 ]; then if [ "$COLORED_OUTPUT" -eq 1 ]; then
return echo "${YELLOW}[-]$NORMAL $msg"
else else
if [ "$COLORED_OUTPUT" -eq 1 ]; then echo "[-] $msg"
echo "${YELLOW}[-]$NORMAL $msg"
else
echo "[-] $msg"
fi
fi fi
} }
@ -194,96 +151,52 @@ 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
failed_and_exit 1 print_failed
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 ..."
if $KPSEWHICH_BIN "$STY_RECHNUNG" > /dev/null 2>&1 ; then print_start "Suche nach $STY_RECHNUNG ..."
print_ok rechnung=$(find "$STY_HOME" -type f -name "$STY_RECHNUNG")
return 0 if test ! -f "$rechnung"; then
else
print_failed print_failed
return 1 return 1
else
print_ok
return 0
fi fi
) )
check_binaries() ( check_binaries() {
# die funktion prüft in einer subshell, ob alle benötigten binaries program=""
# 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 "Das Programm $program wird benötigt, aber nicht gefunden." print_failed
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" > /dev/null 2>&1 ; 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
@ -293,46 +206,6 @@ 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 "$EINLEITUNG"; then
print_failed "Das Feld Einleitung 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
# --------------------- # ---------------------
@ -368,34 +241,42 @@ install_sty() (
old_pwd=$(pwd) old_pwd=$(pwd)
check_binaries "$GIT_BIN $LATEX_BIN" printf " LaTeX Paket '%s' installieren? (y/N): " $STY_RECHNUNG; read -r REPLY
print_start "Hole Repo von $STY_URL ..." if [ "$REPLY" = "y" ] || [ "$REPLY" = "Y" ] || [ "$REPLY" = "j" ] || [ "$REPLY" = "J" ]
then
if $GIT_BIN clone "$STY_URL" >/dev/null 2>&1; then check_binaries "$GIT_BIN $LATEX_BIN"
print_ok print_start "Hole Repo von $STY_URL ..."
cd rechnung
mkdir -p "$STY_HOME/rechnung/"
print_start "Kompiliere $STY_RECHNUNG ..."
if $LATEX_BIN rechnung.ins >/dev/null 2>&1; then if git clone $STY_URL >/dev/null 2>&1; then
print_ok print_ok
print_start "Kopiere $STY_RECHNUNG nach $STY_HOME/rechnung ..." cd rechnung
mkdir -p "$STY_HOME/rechnung/"
print_start "Kompiliere $STY_RECHNUNG ..."
if cp rechnung.sty "$STY_HOME/rechnung/"; then if $LATEX_BIN rechnung.ins >/dev/null 2>&1; then
print_ok print_ok
print_start "Kopiere $STY_RECHNUNG nach $STY_HOME/rechnung ..."
if cp rechnung.sty "$STY_HOME/rechnung/"; then
print_ok
else
print_failed
exit 1
fi
cd "$old_pwd"
rm -rf rechnung/
print_info "Paket $STY_RECHNUNG erfolgreich installiert"
else else
failed_and_exit 3 print_error "Installation fehlgeschlagen"
exit 5
fi fi
cd "$old_pwd"
rm -rf rechnung/
print_info "Paket $STY_RECHNUNG erfolgreich installiert"
else else
print_error "Installation fehlgeschlagen" print_error "Klonen des Repos fehlgeschlagen"
exit 4 exit 6
fi fi
else else
print_error "Klonen des Repos fehlgeschlagen" print_info "Beende Progrann"
exit 5 exit 7
fi fi
) )
@ -404,16 +285,16 @@ install_sty() (
reset_values() { reset_values() {
print_info "Beginne neue Rechnung" print_info "Initialisiere Felder für Rechnung neu."
LINE_BUFFER="" LINE_BUFFER=""
KEY_BUFFER="" KEY_BUFFER=""
VALUE_BUFFER="" VALUE_BUFFER=""
ERROR=0
KUNDE="" KUNDE=""
ADRESSE="" ADRESSE=""
ANREDE="" ANREDE=""
ANZAHL="" ANZAHL=""
POSITION="" POSITION=""
EINLEITUNG=""
SHORT="" SHORT=""
BETRAG="" BETRAG=""
LFDNR="" LFDNR=""
@ -428,77 +309,62 @@ set_value() {
trim_key "$key" trim_key "$key"
trim_value "$value" trim_value "$value"
print_info "Set $key to $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";;
anrede) ANREDE="$VALUE_BUFFER";; anrede) ANREDE="$VALUE_BUFFER";;
anzahl) ANZAHL="$VALUE_BUFFER";; anzahl) ANZAHL="$VALUE_BUFFER";;
position) POSITION="$VALUE_BUFFER";; position) POSITION="$VALUE_BUFFER";;
einleitung) EINLEITUNG="$VALUE_BUFFER";;
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";; *) print_warn "Unbekanntes Feld: $KEY_BUFFER"; ERROR=1;;
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.
if ! check_rechnunsdaten ; then
return 1
fi
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
# Bei der Ersetzung unten wird jedes ';' durch genau ein '\' ersetzt. Daher ist die Anzahl der ';' wichtig.
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"
subject="Rechnung zu $SHORT" subject="Rechnung zu $SHORT"
filename="$(date '+%Y%m%d')_Rechnung_${month_ascii}_$(echo "$KUNDE" | $TR_BIN " " "_").ltx" filename="$(date '+%Y%m%d')_Rechnung_${month_ascii}_$(echo "$KUNDE" | $TR_BIN " " "_").ltx"
buffer="$KUNDE;; $ADRESSE" buffer="$KUNDE; $ADRESSE"
#anschrift=$(echo "$buffer" | sed 's/;/\\\\/g') anschrift="$(echo "$buffer" | sed 's/; /\\\\\\\\\\\\\\ /g')"
print_info "Erstelle Rechnung: $filename" print_info "Erstelle Rechnung: $filename"
{ {
printf "s!#LCOFILE#!%s!\n" "$LCO" printf "s!#LCOFILE#!%s!\n" "$LCO"
printf "s!#SUBJECT#!%s!\n" "$subject" printf "s!#SUBJECT#!%s!\n" "$subject"
printf "s!#ANREDE#!%s!\n" "$ANREDE" printf "s!#ANREDE#!%s!\n" "$ANREDE"
printf "s!#ANSCHRIFT#!%s!\n" "$(echo "$buffer" | sed 's/;/\\\\/g')" printf "s!#ANSCHRIFT#!%s!\n" "$anschrift"
printf "s!#RECHNUNGSNUMMER#!%s!\n" "$rechnungsnummer" printf "s!#RECHNUNGSNUMMER#!%s!\n" "$rechnungsnummer"
printf "s!#ANZAHL#!%s!\n" "$ANZAHL" printf "s!#ANZAHL#!%s!\n" "$ANZAHL"
printf "s!#POSITION#!%s!\n" "$POSITION" printf "s!#POSITION#!%s!\n" "$POSITION"
printf "s!#EINLEITUNG#!%s!\n" "$EINLEITUNG"
printf "s!#BETRAG#!%s!\n" "$BETRAG" printf "s!#BETRAG#!%s!\n" "$BETRAG"
printf "s!#DEADLINE#!%s!\n" "$(echo "$inv_dead" | sed 's/;/\\\\/g')" printf "s!#DEADLINE#!%s!\n" "$inv_dead"
} >$SEDFILE } >$SEDFILE
cp "$TEMPLATEFILE" "$filename" cp "$TEMPLATEFILE" "$filename"
$SED_BIN -i -f "$SEDFILE" "$filename" $SED_BIN -i -f "$SEDFILE" "$filename"
if ! $GENPDF "$filename" 1>&2 >/dev/null; then if ! $GENPDF "$filename"; then
print_error "Kompilierung von $filename fehlgeschlagen" print_error "Rechnung fehlgeschlagen"
logfile=$(echo "$filename" | sed -e s/ltx/log/)
print_error "$(grep "Error" "$logfile")"
else else
print_info "Rechnung $filename erfolgreich erstellt" print_info "Rechnung erfolgreich erstellt"
fi fi
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() {
@ -519,7 +385,12 @@ proced_ini_line() {
# ende einer rechnung # ende einer rechnung
elif [ "$line" = "[ende]" ]; then elif [ "$line" = "[ende]" ]; then
make_invoice if [ $ERROR -ne 0 ]; then
print_warn "Kunde \"$KUNDE\" enthält einen Fehler. Erstelle keine Rechung."
return
else
make_invoice
fi
# alle anderen zeilen # alle anderen zeilen
else else
@ -534,12 +405,7 @@ proced_ini_line() {
display_help() ( display_help() (
echo "Usage: $PROGRAMM_NAME [-f rechnungsfile] [-h] [-l lco-file]" echo "Usage: rechnung.sh [-f rechnungsfile] [-h] [-l lco-file]"
)
display_version() (
echo "$PROGRAMM_NAME version $PROGRAMM_VERSION"
) )
quit() { quit() {
@ -553,20 +419,17 @@ quit() {
# --------------------- # # --------------------- #
# CLI Optionen auswerten # CLI Optionen auswerten
while getopts f:hi:l:qv opt while getopts f:hl: opt
do do
case $opt in case $opt in
f) RECHNUNGSFILE=$OPTARG;; f) RECHNUNGSFILE=$OPTARG;;
h) display_help; exit 0;; h) display_help; exit 0;;
i) INSTALL_LCO_FILE=1;;
l) LCOFILE=$OPTARG;; l) LCOFILE=$OPTARG;;
q) VERBOSITY=0;;
v) display_version; exit 0;;
*) display_help; exit 1;; *) display_help; exit 1;;
esac esac
done done
# Farbe aktivieren wenn vorhanden # 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
@ -575,7 +438,6 @@ 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
@ -584,13 +446,9 @@ 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; then if ! check_sty "$STY_HOME"; then
print_warn "Verwenden sie -i um $STY_RECHNUNG zu installieren" print_warn "$STY_RECHNUNG nicht gefunden."
if [ $INSTALL_LCO_FILE -eq 0 ]; then install_sty
exit 7
else
install_sty
fi
fi fi
# Kundendatei einlesen und rechnungen erstellen # Kundendatei einlesen und rechnungen erstellen
@ -600,3 +458,4 @@ do
proced_ini_line "$LINE_BUFFER" proced_ini_line "$LINE_BUFFER"
done < "$RECHNUNGSFILE" done < "$RECHNUNGSFILE"

@ -1 +0,0 @@
Subproject commit 6d0d24599de1cf509ccef42a398d06519f890cc4

View file

@ -56,7 +56,9 @@ parskip=half,%
%% Anrede %% Anrede
\opening{#ANREDE#} \opening{#ANREDE#}
#EINLEITUNG# wie besprochen, stelle ich für die Durchführung des Seminars
folgende Rechnung.
\begin{Rechnung}[N] \begin{Rechnung}[N]
\TrennerAus \TrennerAus